Name: series-workflow45vwq Phase: Succeeded StartedAt: 2026-09-08 11:49:33 +0000 UTC FinishedAt: 2026-09-08 15:49:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow45vwq[0] Phase: Succeeded StartedAt: 2026-09-08 11:49:33 +0000 UTC FinishedAt: 2026-09-08 12:09:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow45vwq[0].run-triage Phase: Succeeded StartedAt: 2026-09-08 11:49:33 +0000 UTC FinishedAt: 2026-09-08 12:09:58 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "7406dbbcf0b5513612d7291f5b92f31c92134bde", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KMSAN" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "7406dbbcf0b5513612d7291f5b92f31c92134bde", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KMSAN" ], "series_id": "095225b1-6573-49ad-bfd9-b9a7dffeaa92" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "alloc_pages_bulk_noprof", "alloc_pages_bulk_mempolicy_noprof" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDEyOjA4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tNU0FOJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YWxsb2NfcGFnZXNfYnVsa19ub3Byb2YmIzM0OywKICAgICYjMzQ7YWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBtaXNzaW5nIGB0cmFjZV9tbV9wYWdlX2FsbG9jYCBhbmQgYGttc2FuX2FsbG9jX3BhZ2VgIGNhbGxzIHRvIGBhbGxvY19wYWdlc19idWxrX25vcHJvZigpYCBpbiBgbW0vcGFnZV9hbGxvYy5jYCBmb3IgcGFnZXMgYWxsb2NhdGVkIGZyb20gcGVyLUNQVSBsaXN0cy5cblxuVGhpcyBtb2RpZmljYXRpb24gZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcywga2VybmVsIGluZm8tbGVha3MsIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcywgb3IgZmF1bHR5IGJ1ZmZlciBib3VuZHMuIEFueSBwb3RlbnRpYWwgcmVncmVzc2lvbnMgKHN1Y2ggYXMgbG9ja2luZyBvciBjb250ZXh0IGlzc3VlcyB3aGlsZSBob2xkaW5nIHRoZSBQQ1Agc3BpbmxvY2sgb3IgaW52YWxpZCBwYWdlIHBvaW50ZXJzKSBhcmUgZGV0ZWN0YWJsZSBieSBMT0NLREVQLCBLQVNBTiwgYW5kIHN0YW5kYXJkIGRlYnVnZ2luZyBmYWNpbGl0aWVzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBtbS9wYWdlX2FsbG9jLmMgYnkgYWRkaW5nIHRyYWNlX21tX3BhZ2VfYWxsb2MgYW5kIGttc2FuX2FsbG9jX3BhZ2UgdG8gYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YuIFRoaXMgZW5zdXJlcyBidWxrLWFsbG9jYXRlZCBwYWdlcyBoYXZlIHByb3BlciBLTVNBTiBzaGFkb3cgbWV0YWRhdGEgYW5kIGFsbG9jYXRpb24gdHJhY2luZy4gVGhlIGNoYW5nZSBtb2RpZmllcyByZWFjaGFibGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIGFuZCB3YXJyYW50cyBmdXp6aW5nLCBlc3BlY2lhbGx5IHVuZGVyIEtNU0FOLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDEyOjA4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMjZhYjMwZGQzOWZjNzg2OGZlMzIwYzkwMjZlN2NkOWU2NGVhYTM1ZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDggMTI6MDg6MzQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vcGFnZV9hbGxvYy5jIGIvbW0vcGFnZV9hbGxvYy5jXG5pbmRleCAxMmZhYzkwODRjNDgzLi5lYWM0MTllZWY2OTdhIDEwMDY0NFxuLS0tIGEvbW0vcGFnZV9hbGxvYy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9wYWdlX2FsbG9jLmNcbkBAIC01Mjc5LDYgJiM0Mzs1Mjc5LDggQEAgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnBfdCBnZnAsIGludCBwcmVmZXJyZWRfbmlkLFxuIFx0XHRucl9hY2NvdW50JiM0MzsmIzQzOztcbiBcbiBcdFx0cHJlcF9uZXdfcGFnZShwYWdlLCAwLCBnZnAsIEFMTE9DX0RFRkFVTFQpO1xuJiM0MztcdFx0dHJhY2VfbW1fcGFnZV9hbGxvYyhwYWdlLCAwLCBnZnAsIGFjLm1pZ3JhdGV0eXBlKTtcbiYjNDM7XHRcdGttc2FuX2FsbG9jX3BhZ2UocGFnZSwgMCwgZ2ZwIFx1MDAyNiB+X19HRlBfUkVDTEFJTSk7XG4gXHRcdHNldF9wYWdlX3JlZmNvdW50ZWQocGFnZSk7XG4gXHRcdHBhZ2VfYXJyYXlbbnJfcG9wdWxhdGVkJiM0MzsmIzQzO10gPSBwYWdlO1xuIFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDEyOjA4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tNU0FOJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YWxsb2NfcGFnZXNfYnVsa19ub3Byb2YmIzM0OywKICAgICYjMzQ7YWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIG1tL3BhZ2VfYWxsb2MuYyBieSBhZGRpbmcgdHJhY2VfbW1fcGFnZV9hbGxvYyBhbmQga21zYW5fYWxsb2NfcGFnZSB0byBhbGxvY19wYWdlc19idWxrX25vcHJvZi4gVGhpcyBlbnN1cmVzIGJ1bGstYWxsb2NhdGVkIHBhZ2VzIGhhdmUgcHJvcGVyIEtNU0FOIHNoYWRvdyBtZXRhZGF0YSBhbmQgYWxsb2NhdGlvbiB0cmFjaW5nLiBUaGUgY2hhbmdlIG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgYW5kIHdhcnJhbnRzIGZ1enppbmcsIGVzcGVjaWFsbHkgdW5kZXIgS01TQU4uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAyNmFiMzBkZDM5ZmM3ODY4ZmUzMjBjOTAyNmU3Y2Q5ZTY0ZWFhMzVmCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBTZXAgOCAxMjowODozNCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL3BhZ2VfYWxsb2MuYyBiL21tL3BhZ2VfYWxsb2MuYwppbmRleCAxMmZhYzkwODRjNDgzLi5lYWM0MTllZWY2OTdhIDEwMDY0NAotLS0gYS9tbS9wYWdlX2FsbG9jLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vcGFnZV9hbGxvYy5jCkBAIC01Mjc5LDYgJiM0Mzs1Mjc5LDggQEAgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnBfdCBnZnAsIGludCBwcmVmZXJyZWRfbmlkLAogCQlucl9hY2NvdW50JiM0MzsmIzQzOzsKIAogCQlwcmVwX25ld19wYWdlKHBhZ2UsIDAsIGdmcCwgQUxMT0NfREVGQVVMVCk7CiYjNDM7CQl0cmFjZV9tbV9wYWdlX2FsbG9jKHBhZ2UsIDAsIGdmcCwgYWMubWlncmF0ZXR5cGUpOwomIzQzOwkJa21zYW5fYWxsb2NfcGFnZShwYWdlLCAwLCBnZnAgJmFtcDsgfl9fR0ZQX1JFQ0xBSU0pOwogCQlzZXRfcGFnZV9yZWZjb3VudGVkKHBhZ2UpOwogCQlwYWdlX2FycmF5W25yX3BvcHVsYXRlZCYjNDM7JiM0MztdID0gcGFnZTsKIAl9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDEyOjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4ODcKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyNzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBNZW1vcnkgQWxsb2NhdGlvbiBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIEkgc2VlIGNoYW5nZXMgaW4gYG1tL3BhZ2VfYWxsb2MuY2AsIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAgZnVuY3Rpb24uIFRoZSBkaWZmIGhpZ2hsaWdodHMgdGhlIGFkZGl0aW9uIG9mIHR3byBuZXcgbGluZXMgd2l0aGluIHRoZSBsb29wIHRoYXQgcHJvY2Vzc2VzIHRoZSBidWxrIHBhZ2UgYWxsb2NhdGlvbi4gCgpGaXJzdCwgYHRyYWNlX21tX3BhZ2VfYWxsb2NgIGlzIGJlaW5nIGFkZGVkLiBUaGlzIGlzIGludGVyZXN0aW5nLiBJdCBsaWtlbHkgaW50cm9kdWNlcyBhIG5ldyB0cmFjaW5nIHBvaW50IGZvciBtZW1vcnkgYWxsb2NhdGlvbiBldmVudHMuIEJhc2VkIG9uIHRoZSBhcmd1bWVudHMsIGl0IHNlZW1zIHRvIGJlIHJlY29yZGluZyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgYWxsb2NhdGVkIGBwYWdlYCwgYW4gaW5kZXgsIHRoZSBHRlAgZmxhZ3MsIGFuZCB0aGUgbWlncmF0aW9uIHR5cGUuIFRoaXMgY291bGQgYmUgaW5jcmVkaWJseSB1c2VmdWwgZm9yIGRlYnVnZ2luZyBhbGxvY2F0aW9uIHBhdHRlcm5zIGFuZCBwZXJmb3JtYW5jZSBhbmFseXNpcywgZ2l2aW5nIHVzIG1vcmUgZ3JhbnVsYXJpdHkgaW4gdW5kZXJzdGFuZGluZyBtZW1vcnkgYWxsb2NhdGlvbiBiZWhhdmlvci4gV2UgbWlnaHQgd2FudCB0byBsb29rIGF0IHRoZSByZWxldmFudCB0cmFjZXBvaW50cyB0byBzZWUgd2hhdCBkYXRhIGlzIGJlaW5nIGNvbGxlY3RlZCBhbmQgaG93IHdlIGNhbiB1dGlsaXplIGl0IGZvciBwZXJmb3JtYW5jZSBpbnNpZ2h0cy4KClNlY29uZCwgdGhlIGFkZGl0aW9uIG9mIGBrbXNhbl9hbGxvY19wYWdlYC4gVGhpcyBzdWdnZXN0cyB0aGUgaW50ZWdyYXRpb24gb2YgS2VybmVsIE1lbW9yeSBTYW5pdGl6ZXIgKEtNU0FOKSBpbnRvIHRoZSBwYWdlIGFsbG9jYXRpb24gcHJvY2Vzcy4gVGhlIGNhbGwgaXMgcGFzc2luZyB0aGUgYHBhZ2VgLCBpbmRleCwgYW5kIGEgbW9kaWZpZWQgR0ZQIGZsYWcgdGhhdCBtYXNrcyBvdXQgYF9fR0ZQX1JFQ0xBSU1gLiBUaGlzIGlzIHByb2JhYmx5IHRvIGVuc3VyZSB0aGF0IEtNU0FOIGlzIGZvY3VzaW5nIG9uIGZyZXNoIGFsbG9jYXRpb25zLCBub3QgcG90ZW50aWFsbHkgYWxyZWFkeSBmcmVlZCBtZW1vcnksIHdoaWNoIGNvdWxkIGNhdXNlIGZhbHNlIHBvc2l0aXZlcyBvciBvdGhlciBpc3N1ZXMgd2l0aCBLTVNBTiYjMzk7cyBjaGVja3MuIEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgdG8gbG9vayBhdCBLTVNBTiYjMzk7cyBpbXBsZW1lbnRhdGlvbiB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IGl0IGlzIHVzaW5nIHRoaXMgaW5mb3JtYXRpb24gYW5kIHdoYXQgY2hlY2tzIGl0JiMzOTtzIHBlcmZvcm1pbmcuIEl04oCZcyBhbiBpbXBvcnRhbnQgYWRkaXRpb24gZm9yIGRldGVjdGluZyBtZW1vcnkgZXJyb3JzIGVhcmx5IG9uLgoKSSBzaG91bGQgcHJvYmFibHkgdXNlIG15IHRvb2xzIOKAkyBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAg4oCTIHRvIGNoZWNrIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGBtbS9wYWdlX2FsbG9jLmNgIG5lYXIgbGluZSA1Mjc5IHRvIGdldCBhIGJldHRlciBzZW5zZSBvZiBob3cgdGhlc2UgbmV3IGxpbmVzIGZpdCBpbnRvIHRoZSBicm9hZGVyIGNvbnRleHQgb2YgdGhlIHBhZ2UgYWxsb2NhdGlvbiBsb2dpYy4gVGhpcyB3aWxsIGdpdmUgbWUgYSBtb3JlIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhlIHBhdGNoJiMzOTtzIGltcGFjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMjowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3BhZ2VfYWxsb2MuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDUyNjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NTI2MDpcdFx0cGNwX2xpc3QgPSBcdTAwMjZwY3AtXHUwMDNlbGlzdHNbb3JkZXJfdG9fcGluZGV4KGFjLm1pZ3JhdGV0eXBlLCAwKV07XG41MjYxOlx0XHR3aGlsZSAobnJfcG9wdWxhdGVkIFx1MDAzYyBucl9wYWdlcykge1xuNTI2MjpcdFxuNTI2MzpcdFx0XHQvKiBTa2lwIGV4aXN0aW5nIHBhZ2VzICovXG41MjY0Olx0XHRcdGlmIChwYWdlX2FycmF5W25yX3BvcHVsYXRlZF0pIHtcbjUyNjU6XHRcdFx0XHRucl9wb3B1bGF0ZWQmIzQzOyYjNDM7O1xuNTI2NjpcdFx0XHRcdGNvbnRpbnVlO1xuNTI2NzpcdFx0XHR9XG41MjY4Olx0XG41MjY5Olx0XHRcdHBhZ2UgPSBfX3JtcXVldWVfcGNwbGlzdCh6b25lLCAwLCBhYy5taWdyYXRldHlwZSwgYWxsb2NfZmxhZ3MsXG41MjcwOlx0XHRcdFx0XHRcdFx0XHRcdHBjcCwgcGNwX2xpc3QpO1xuNTI3MTpcdFx0XHRpZiAodW5saWtlbHkoIXBhZ2UpKSB7XG41MjcyOlx0XHRcdFx0LyogVHJ5IGFuZCBhbGxvY2F0ZSBhdCBsZWFzdCBvbmUgcGFnZSAqL1xuNTI3MzpcdFx0XHRcdGlmICghbnJfYWNjb3VudCkge1xuNTI3NDpcdFx0XHRcdFx0cGNwX3NwaW5fdW5sb2NrKHBjcCk7XG41Mjc1Olx0XHRcdFx0XHRnb3RvIGZhaWxlZDtcbjUyNzY6XHRcdFx0XHR9XG41Mjc3Olx0XHRcdFx0YnJlYWs7XG41Mjc4Olx0XHRcdH1cbjUyNzk6XHRcdFx0bnJfYWNjb3VudCYjNDM7JiM0Mzs7XG41MjgwOlx0XG41MjgxOlx0XHRcdHByZXBfbmV3X3BhZ2UocGFnZSwgMCwgZ2ZwLCBBTExPQ19ERUZBVUxUKTtcbjUyODI6XHRcdFx0dHJhY2VfbW1fcGFnZV9hbGxvYyhwYWdlLCAwLCBnZnAsIGFjLm1pZ3JhdGV0eXBlKTtcbjUyODM6XHRcdFx0a21zYW5fYWxsb2NfcGFnZShwYWdlLCAwLCBnZnAgXHUwMDI2IH5fX0dGUF9SRUNMQUlNKTtcbjUyODQ6XHRcdFx0c2V0X3BhZ2VfcmVmY291bnRlZChwYWdlKTtcbjUyODU6XHRcdFx0cGFnZV9hcnJheVtucl9wb3B1bGF0ZWQmIzQzOyYjNDM7XSA9IHBhZ2U7XG41Mjg2Olx0XHR9XG41Mjg3Olx0XG41Mjg4Olx0XHRwY3Bfc3Bpbl91bmxvY2socGNwKTtcbjUyODk6XHRcbjUyOTA6XHRcdF9fY291bnRfemlkX3ZtX2V2ZW50cyhQR0FMTE9DLCB6b25lX2lkeCh6b25lKSwgbnJfYWNjb3VudCk7XG41MjkxOlx0XHR6b25lX3N0YXRpc3RpY3Moem9uZWxpc3Rfem9uZShhYy5wcmVmZXJyZWRfem9uZXJlZiksIHpvbmUsIG5yX2FjY291bnQpO1xuNTI5MjpcdFxuNTI5MzpcdG91dDpcbjUyOTQ6XHRcdHJldHVybiBucl9wb3B1bGF0ZWQ7XG41Mjk1Olx0XG41Mjk2Olx0ZmFpbGVkOlxuNTI5NzpcdFx0cGFnZSA9IF9fYWxsb2NfcGFnZXNfbm9wcm9mKGdmcCwgMCwgcHJlZmVycmVkX25pZCwgbm9kZW1hc2ssIEFMTE9DX0RFRkFVTFQpO1xuNTI5ODpcdFx0aWYgKHBhZ2UpXG41Mjk5Olx0XHRcdHBhZ2VfYXJyYXlbbnJfcG9wdWxhdGVkJiM0MzsmIzQzO10gPSBwYWdlO1xuNTMwMDpcdFx0Z290byBvdXQ7XG41MzAxOlx0fVxuNTMwMjpcdEVYUE9SVF9TWU1CT0xfR1BMKGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKTtcbjUzMDM6XHRcbjUzMDQ6XHQvKlxuNTMwNTpcdCAqIGZyZWVfcGFnZXNfYnVsayAtIEZyZWUgYW4gYXJyYXkgb2Ygb3JkZXItMCBwYWdlc1xuNTMwNjpcdCAqIEBwYWdlX2FycmF5OiBBcnJheSBvZiBwYWdlcyB0byBmcmVlXG41MzA3Olx0ICogQG5yX3BhZ2VzOiBUaGUgbnVtYmVyIG9mIHBhZ2VzIGluIHRoZSBhcnJheVxuNTMwODpcdCAqXG41MzA5Olx0ICogRnJlZSB0aGUgb3JkZXItMCBwYWdlcy4gQWRqYWNlbnQgZW50cmllcyB3aG9zZSBQRk5zIGZvcm0gYSBjb250aWd1b3VzXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTI6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDM2NgoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDEwNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNaXNzaW5nIFRyYWNlcG9pbnRzIGFuZCBLTVNBTiBDYWxscyBpbiBQQ1AgUGFnZSBBbGxvY2F0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIHdpdGhpbiBgbW0vcGFnZV9hbGxvYy5jYCwgYW5kIGl0IGFwcGVhcnMgdGhhdCB0aGUgdHJhY2Vwb2ludHMgYW5kIEtNU0FOIGhvb2tzIGFyZSBhYnNlbnQgd2hlbiBhbGxvY2F0aW5nIHBhZ2VzIGZyb20gdGhlIFBDUCBsaXN0LiBTcGVjaWZpY2FsbHksIEkmIzM5O20gbm90IHNlZWluZyBgdHJhY2VfbW1fcGFnZV9hbGxvYyhwYWdlLCAwLCBnZnAsIGFjLm1pZ3JhdGV0eXBlKTtgIGFuZCBga21zYW5fYWxsb2NfcGFnZShwYWdlLCAwLCBnZnAgJmFtcDsgfl9fR0ZQX1JFQ0xBSU0pO2AuIFRoaXMgb21pc3Npb24gaW1tZWRpYXRlbHkgcmFpc2VzIGEgcmVkIGZsYWc7IHRoZXNlIGFyZSBwcmV0dHkgZnVuZGFtZW50YWwgZGVidWdnaW5nIGFuZCBtZW1vcnkgc2FmZXR5IHRvb2xzLiBCZWZvcmUgSSBqdW1wIHRvIGNvbmNsdXNpb25zIGFuZCBmaWxlIGEgcGF0Y2gsIHRob3VnaCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5LiBJJiMzOTtkIGJldHRlciBkaWcgZGVlcGVyLiBMZXQgbWUgcXVpY2tseSBleGFtaW5lIG90aGVyIGBhbGxvY19wYWdlc2AgZnVuY3Rpb25zIGFuZCB0aGUgY2FsbCBwYXRocyBpbnRvIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoaXMgaXMgYW4gaW50ZW50aW9uYWwgZGVzaWduIGRlY2lzaW9uLCBhIHJlZ3Jlc3Npb24sIG9yIHNpbXBseSBhbiBvdmVyc2lnaHQuIENoZWNraW5nIHRoZSBoaXN0b3J5IGFuZCBjYWxsZXJzIHdpbGwgcHJvdmlkZSBjcnVjaWFsIGNvbnRleHQg4oCTIGFyZSB0aGVzZSB0cmFjZXBvaW50cyBjb25zaXN0ZW50bHkgcHJlc2VudCBlbHNld2hlcmUsIGFuZCBpZiBzbywgd2hlbiBhbmQgd2h5IHdlcmUgdGhleSBwb3RlbnRpYWxseSByZW1vdmVkIGhlcmU/IExldCYjMzk7cyBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDEyOjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ttc2FuX2FsbG9jX3BhZ2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0va21zYW4vc2hhZG93LmM9MTY5PUVYUE9SVF9TWU1CT0woa21zYW5fY29weV9wYWdlX21ldGEpO1xubW0va21zYW4vc2hhZG93LmMtMTcwLVxubW0va21zYW4vc2hhZG93LmM6MTcxOnZvaWQga21zYW5fYWxsb2NfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyLCBnZnBfdCBmbGFncylcbm1tL2ttc2FuL3NoYWRvdy5jLTE3Mi17XG4tLVxubW0vcGFnZV9hbGxvYy5jPTUxNjA9dW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnBfdCBnZnAsIGludCBwcmVmZXJyZWRfbmlkLFxuLS1cbm1tL3BhZ2VfYWxsb2MuYy01MjgyLVx0XHR0cmFjZV9tbV9wYWdlX2FsbG9jKHBhZ2UsIDAsIGdmcCwgYWMubWlncmF0ZXR5cGUpO1xubW0vcGFnZV9hbGxvYy5jOjUyODM6XHRcdGttc2FuX2FsbG9jX3BhZ2UocGFnZSwgMCwgZ2ZwIFx1MDAyNiB+X19HRlBfUkVDTEFJTSk7XG5tbS9wYWdlX2FsbG9jLmMtNTI4NC1cdFx0c2V0X3BhZ2VfcmVmY291bnRlZChwYWdlKTtcbi0tXG5tbS9wYWdlX2FsbG9jLmM9NTM0NT1zdGF0aWMgaW5saW5lIGJvb2wgYWxsb2Nfbm9sb2NrX2FsbG93ZWQodm9pZClcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNTM3MC0gKlxubW0vcGFnZV9hbGxvYy5jOjUzNzE6ICogU3BlY2lmeSBfX0dGUF9aRVJPIHRvIG1ha2Ugc3VyZSB0aGF0IGNhbGwgdG8ga21zYW5fYWxsb2NfcGFnZSgpIGJlbG93XG5tbS9wYWdlX2FsbG9jLmMtNTM3Mi0gKiBpcyBzYWZlIGluIGFueSBjb250ZXh0LiBBbHNvIHplcm9pbmcgdGhlIHBhZ2UgaXMgbWFuZGF0b3J5IGZvclxuLS1cbm1tL3BhZ2VfYWxsb2MuYz01Mzg1PXN0cnVjdCBwYWdlICpfX2FsbG9jX2Zyb3plbl9wYWdlc19ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG4tLVxubW0vcGFnZV9hbGxvYy5jLTU0NjEtXHR0cmFjZV9tbV9wYWdlX2FsbG9jKHBhZ2UsIG9yZGVyLCBhbGxvY19nZnAsIGFjLm1pZ3JhdGV0eXBlKTtcbm1tL3BhZ2VfYWxsb2MuYzo1NDYyOlx0a21zYW5fYWxsb2NfcGFnZShwYWdlLCBvcmRlciwgYWxsb2NfZ2ZwKTtcbm1tL3BhZ2VfYWxsb2MuYy01NDYzLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDEyOjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUyMzEKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA2MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIFBhZ2UgQWxsb2NhdGlvbiBCdWxrIE9wZXJhdGlvbnMqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSBjb25jZXJuIGlzIGVuc3VyaW5nIHRoZSBjb25zaXN0ZW5jeSBvZiBvdXIgcGFnZSBhbGxvY2F0aW9uIHN0cmF0ZWd5IGFjcm9zcyB0aGUgc3lzdGVtLiBJIG5lZWQgdG8gY29tcHJlaGVuc2l2ZWx5IHVuZGVyc3RhbmQgd2hlcmUgYGFsbG9jX3BhZ2VzX2J1bGtfYXJyYXlgLCBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgLCBhbmQgYGFsbG9jX3BhZ2VzX2J1bGtfbGlzdGAgYXJlIGludm9rZWQuIEEgdGhvcm91Z2ggYXVkaXQgaXMgZXNzZW50aWFsIHRvIGF2b2lkIGFueSBwb3RlbnRpYWwgcmVncmVzc2lvbnMgb3IgdW5mb3Jlc2VlbiBpbnRlcmFjdGlvbnMuCgpGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgICphY3R1YWxseSogZG9lcyB1bmRlciB0aGUgaG9vZC4gVW5kZXJzdGFuZGluZyBpdHMgaW50ZXJuYWwgbWVjaGFuaWNzLCB0aGUgcGFyYW1ldGVycyBpdCB0YWtlcywgYW5kIGl0cyBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzIHdpbGwgYmUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGZ1bGwgc2NvcGUgb2Ygb3VyIG1lbW9yeSBtYW5hZ2VtZW50IHN0cmF0ZWd5LiBUaGF0JiMzOTtzIG15IGltbWVkaWF0ZSBmb2N1cyBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTI6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9wYWdlX2FsbG9jLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MTYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzUxNjA6XHR1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKGdmcF90IGdmcCwgaW50IHByZWZlcnJlZF9uaWQsXG41MTYxOlx0XHRcdFx0bm9kZW1hc2tfdCAqbm9kZW1hc2ssIGludCBucl9wYWdlcyxcbjUxNjI6XHRcdFx0XHRzdHJ1Y3QgcGFnZSAqKnBhZ2VfYXJyYXkpXG41MTYzOlx0e1xuNTE2NDpcdFx0c3RydWN0IHBhZ2UgKnBhZ2U7XG41MTY1Olx0XHRzdHJ1Y3Qgem9uZSAqem9uZTtcbjUxNjY6XHRcdHN0cnVjdCB6b25lcmVmICp6O1xuNTE2NzpcdFx0c3RydWN0IHBlcl9jcHVfcGFnZXMgKnBjcDtcbjUxNjg6XHRcdHN0cnVjdCBsaXN0X2hlYWQgKnBjcF9saXN0O1xuNTE2OTpcdFx0c3RydWN0IGFsbG9jX2NvbnRleHQgYWM7XG41MTcwOlx0XHR1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MgPSBBTExPQ19XTUFSS19MT1c7XG41MTcxOlx0XHRpbnQgbnJfcG9wdWxhdGVkID0gMCwgbnJfYWNjb3VudCA9IDA7XG41MTcyOlx0XG41MTczOlx0XHQvKlxuNTE3NDpcdFx0ICogU2tpcCBwb3B1bGF0ZWQgYXJyYXkgZWxlbWVudHMgdG8gZGV0ZXJtaW5lIGlmIGFueSBwYWdlcyBuZWVkXG41MTc1Olx0XHQgKiB0byBiZSBhbGxvY2F0ZWQgYmVmb3JlIGRpc2FibGluZyBJUlFzLlxuNTE3NjpcdFx0ICovXG41MTc3Olx0XHR3aGlsZSAobnJfcG9wdWxhdGVkIFx1MDAzYyBucl9wYWdlcyBcdTAwMjZcdTAwMjYgcGFnZV9hcnJheVtucl9wb3B1bGF0ZWRdKVxuNTE3ODpcdFx0XHRucl9wb3B1bGF0ZWQmIzQzOyYjNDM7O1xuNTE3OTpcdFxuNTE4MDpcdFx0LyogTm8gcGFnZXMgcmVxdWVzdGVkPyAqL1xuNTE4MTpcdFx0aWYgKHVubGlrZWx5KG5yX3BhZ2VzIFx1MDAzYz0gMCkpXG41MTgyOlx0XHRcdGdvdG8gb3V0O1xuNTE4MzpcdFxuNTE4NDpcdFx0LyogQWxyZWFkeSBwb3B1bGF0ZWQgYXJyYXk/ICovXG41MTg1Olx0XHRpZiAodW5saWtlbHkobnJfcGFnZXMgLSBucl9wb3B1bGF0ZWQgPT0gMCkpXG41MTg2Olx0XHRcdGdvdG8gb3V0O1xuNTE4NzpcdFxuNTE4ODpcdFx0LyogQnVsayBhbGxvY2F0b3IgZG9lcyBub3Qgc3VwcG9ydCBtZW1jZyBhY2NvdW50aW5nLiAqL1xuNTE4OTpcdFx0aWYgKG1lbWNnX2ttZW1fb25saW5lKCkgXHUwMDI2XHUwMDI2IChnZnAgXHUwMDI2IF9fR0ZQX0FDQ09VTlQpKVxuNTE5MDpcdFx0XHRnb3RvIGZhaWxlZDtcbjUxOTE6XHRcbjUxOTI6XHRcdC8qIFVzZSB0aGUgc2luZ2xlIHBhZ2UgYWxsb2NhdG9yIGZvciBvbmUgcGFnZS4gKi9cbjUxOTM6XHRcdGlmIChucl9wYWdlcyAtIG5yX3BvcHVsYXRlZCA9PSAxKVxuNTE5NDpcdFx0XHRnb3RvIGZhaWxlZDtcbjUxOTU6XHRcbjUxOTY6XHQjaWZkZWYgQ09ORklHX1BBR0VfT1dORVJcbjUxOTc6XHRcdC8qXG41MTk4Olx0XHQgKiBQQUdFX09XTkVSIG1heSByZWN1cnNlIGludG8gdGhlIGFsbG9jYXRvciB0byBhbGxvY2F0ZSBzcGFjZSB0b1xuNTE5OTpcdFx0ICogc2F2ZSB0aGUgc3RhY2sgd2l0aCBwYWdlc2V0cy5sb2NrIGhlbGQuIFJlbGVhc2luZy9yZWFjcXVpcmluZ1xuNTIwMDpcdFx0ICogcmVtb3ZlcyBtdWNoIG9mIHRoZSBwZXJmb3JtYW5jZSBiZW5lZml0IG9mIGJ1bGsgYWxsb2NhdGlvbiBzb1xuNTIwMTpcdFx0ICogZm9yY2UgdGhlIGNhbGxlciB0byBhbGxvY2F0ZSBvbmUgcGFnZSBhdCBhIHRpbWUgYXMgaXQmIzM5O2xsIGhhdmVcbjUyMDI6XHRcdCAqIHNpbWlsYXIgcGVyZm9ybWFuY2UgdG8gYWRkZWQgY29tcGxleGl0eSB0byB0aGUgYnVsayBhbGxvY2F0b3IuXG41MjAzOlx0XHQgKi9cbjUyMDQ6XHRcdGlmIChzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFx1MDAyNnBhZ2Vfb3duZXJfaW5pdGVkKSlcbjUyMDU6XHRcdFx0Z290byBmYWlsZWQ7XG41MjA2Olx0I2VuZGlmXG41MjA3Olx0XG41MjA4Olx0XHQvKiBNYXkgc2V0IEFMTE9DX05PRlJBR01FTlQsIGZyYWdtZW50YXRpb24gd2lsbCByZXR1cm4gMSBwYWdlLiAqL1xuNTIwOTpcdFx0Z2ZwIFx1MDAyNj0gZ2ZwX2FsbG93ZWRfbWFzaztcbjUyMTA6XHRcdGlmICghcHJlcGFyZV9hbGxvY19wYWdlcyhnZnAsIDAsIHByZWZlcnJlZF9uaWQsIG5vZGVtYXNrLCBcdTAwMjZhYywgXHUwMDI2Z2ZwLCBcdTAwMjZhbGxvY19mbGFncykpXG41MjExOlx0XHRcdGdvdG8gb3V0O1xuNTIxMjpcdFxuNTIxMzpcdFx0LyogRmluZCBhbiBhbGxvd2VkIGxvY2FsIHpvbmUgdGhhdCBtZWV0cyB0aGUgbG93IHdhdGVybWFyay4gKi9cbjUyMTQ6XHRcdHogPSBhYy5wcmVmZXJyZWRfem9uZXJlZjtcbjUyMTU6XHRcdGZvcl9uZXh0X3pvbmVfem9uZWxpc3Rfbm9kZW1hc2soem9uZSwgeiwgYWMuaGlnaGVzdF96b25laWR4LCBhYy5ub2RlbWFzaykge1xuNTIxNjpcdFx0XHR1bnNpZ25lZCBsb25nIG1hcms7XG41MjE3Olx0XG41MjE4Olx0XHRcdGlmIChjcHVzZXRzX2VuYWJsZWQoKSBcdTAwMjZcdTAwMjYgKGFsbG9jX2ZsYWdzIFx1MDAyNiBBTExPQ19DUFVTRVQpIFx1MDAyNlx1MDAyNlxuNTIxOTpcdFx0XHQgICAgIV9fY3B1c2V0X3pvbmVfYWxsb3dlZCh6b25lLCBnZnApKSB7XG41MjIwOlx0XHRcdFx0Y29udGludWU7XG41MjIxOlx0XHRcdH1cbjUyMjI6XHRcbjUyMjM6XHRcdFx0aWYgKG5yX29ubGluZV9ub2RlcyBcdTAwM2UgMSBcdTAwMjZcdTAwMjYgem9uZSAhPSB6b25lbGlzdF96b25lKGFjLnByZWZlcnJlZF96b25lcmVmKSBcdTAwMjZcdTAwMjZcbjUyMjQ6XHRcdFx0ICAgIHpvbmVfdG9fbmlkKHpvbmUpICE9IHpvbmVsaXN0X25vZGVfaWR4KGFjLnByZWZlcnJlZF96b25lcmVmKSkge1xuNTIyNTpcdFx0XHRcdGdvdG8gZmFpbGVkO1xuNTIyNjpcdFx0XHR9XG41MjI3Olx0XG41MjI4Olx0XHRcdGNvbmRfYWNjZXB0X21lbW9yeSh6b25lLCAwLCBhbGxvY19mbGFncyk7XG41MjI5Olx0cmV0cnlfdGhpc196b25lOlxuNTIzMDpcdFx0XHRtYXJrID0gd21hcmtfcGFnZXMoem9uZSwgYWxsb2NfZmxhZ3MgXHUwMDI2IEFMTE9DX1dNQVJLX01BU0spICYjNDM7IG5yX3BhZ2VzIC0gbnJfcG9wdWxhdGVkO1xuNTIzMTpcdFx0XHRpZiAoem9uZV93YXRlcm1hcmtfZmFzdCh6b25lLCAwLCAgbWFyayxcbjUyMzI6XHRcdFx0XHRcdHpvbmVsaXN0X3pvbmVfaWR4KGFjLnByZWZlcnJlZF96b25lcmVmKSxcbjUyMzM6XHRcdFx0XHRcdGFsbG9jX2ZsYWdzLCBnZnApKSB7XG41MjM0Olx0XHRcdFx0YnJlYWs7XG41MjM1Olx0XHRcdH1cbjUyMzY6XHRcbjUyMzc6XHRcdFx0aWYgKGNvbmRfYWNjZXB0X21lbW9yeSh6b25lLCAwLCBhbGxvY19mbGFncykpXG41MjM4Olx0XHRcdFx0Z290byByZXRyeV90aGlzX3pvbmU7XG41MjM5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTI6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjc1NwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDUwMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBGdXp6aW5nIFdvcnRoaW5lc3MqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIGluIGBtbS9wYWdlX2FsbG9jLmNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gY29uZmlybSB0aGF0IGBtbS9wYWdlX2FsbG9jLmNgIGlzIGluZGVlZCBwYXJ0IG9mIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSAoYG1tL2ApLCB3aGljaCBpdCBpcy4gVGhhdCYjMzk7cyBhIGNoZWNrIGluIHRoZSBhZmZpcm1hdGl2ZSBmb3IgY29yZSBzdWJzeXN0ZW1zLCBhbmQgdGhlcmVmb3JlLCBhIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4KCkkgcXVpY2tseSBjaGVjayB0aGUgcG9zaXRpdmUgY3JpdGVyaWEgZm9yIGRldGVybWluaW5nIGZ1enppbmcgd29ydGhpbmVzczogJiMzNDtBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKS4uLiYjMzQ7IC0gWWVwLCB3ZSYjMzk7cmUgaW4gdGhlIHJpZ2h0IG5laWdoYm9yaG9vZC4KCkJ1dCBob2xkIG9uLCBiZWZvcmUgSSBqdW1wIHRvIGNvbmNsdXNpb25zLCBJIG5lZWQgdG8gcnVsZSBvdXQgYW55IG9mIHRoZSBuZWdhdGl2ZSBjcml0ZXJpYS4gVGhlIG5lZ2F0aXZlIGNyaXRlcmlhIHNheSBJICpvbmx5KiByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAgaWYgdGhlIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byB0aGUgbGlzdGVkIGNhdGVnb3JpZXMuIEkgbmVlZCB0byBiZSBzdXJlIHRoaXMgKmlzbiYjMzk7dCogYSBub24ta2VybmVsIGNoYW5nZSwgZGVjb3JhdGl2ZSBsb2dnaW5nLCBvciB1bnJlYWNoYWJsZSBjb2RlLgoKTGV0JiMzOTtzIHNlZSB3aGF0IHdhcyBhZGRlZC4gT2theSwgdGhlcmUmIzM5O3MgYHRyYWNlX21tX3BhZ2VfYWxsb2NgIHdoaWNoICpjb3VsZCogYmUgY29uc2lkZXJlZCBkZWNvcmF0aXZlLiBCdXQgdGhlcmUmIzM5O3MgYWxzbyBga21zYW5fYWxsb2NfcGFnZShwYWdlLCAwLCBnZnAgJmFtcDsgfl9fR0ZQX1JFQ0xBSU0pO2AuCgpXYWl0IGEgbWludXRlLi4uIGBrbXNhbl9hbGxvY19wYWdlYCBpcyAqbm90KiBqdXN0IGEgdHJhY2Vwb2ludC4gVGhhdCBpbml0aWFsaXplcyB0aGUgS01TQU4gc2hhZG93L29yaWdpbiBtZXRhZGF0YSBmb3IgdGhlIGFsbG9jYXRlZCBwYWdlISBXaXRob3V0IGl0LCBLTVNBTiB3b3VsZCBoYXZlIG1ham9yIGlzc3VlcywgdHJlYXRpbmcgdGhlIGJ1bGstYWxsb2NhdGVkIHBhZ2VzIGFzIHVuaW5pdGlhbGl6ZWQgb3Igd2l0aCBjb3JydXB0IHNoYWRvdyBtZW1vcnkuIFRoaXMgaXMgKmNyaXRpY2FsKiBmb3IgS01TQU4gZnVuY3Rpb25hbGl0eS4gVGhpcyBpcyBhIGxvZ2ljIGNoYW5nZSEKCkkgbmVlZCB0byBkaWcgaW50byBga21zYW5fYWxsb2NfcGFnZWAgZnVydGhlciB0byBjb25maXJtIGV4YWN0bHkgaG93IGl0IGltcGFjdHMgY29udHJvbCBmbG93LCBidXQgSSYjMzk7bSBsZWFuaW5nIGhlYXZpbHkgdG93YXJkcyB0aGlzIHBhdGNoIGJlaW5nIGZ1enppbmctd29ydGh5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMjowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2ttc2FuL3NoYWRvdy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTcxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNzE6XHR2b2lkIGttc2FuX2FsbG9jX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlciwgZ2ZwX3QgZmxhZ3MpXG4gMTcyOlx0e1xuIDE3MzpcdFx0Ym9vbCBpbml0aWFsaXplZCA9IChmbGFncyBcdTAwMjYgX19HRlBfWkVSTykgfHwgIWttc2FuX2VuYWJsZWQ7XG4gMTc0Olx0XHRzdHJ1Y3QgcGFnZSAqc2hhZG93LCAqb3JpZ2luO1xuIDE3NTpcdFx0ZGVwb3Rfc3RhY2tfaGFuZGxlX3QgaGFuZGxlO1xuIDE3NjpcdFx0aW50IHBhZ2VzID0gMSBcdTAwM2NcdTAwM2Mgb3JkZXI7XG4gMTc3Olx0XG4gMTc4Olx0XHRpZiAoIXBhZ2UpXG4gMTc5Olx0XHRcdHJldHVybjtcbiAxODA6XHRcbiAxODE6XHRcdHNoYWRvdyA9IHNoYWRvd19wYWdlX2ZvcihwYWdlKTtcbiAxODI6XHRcdG9yaWdpbiA9IG9yaWdpbl9wYWdlX2ZvcihwYWdlKTtcbiAxODM6XHRcbiAxODQ6XHRcdGlmIChpbml0aWFsaXplZCkge1xuIDE4NTpcdFx0XHRfX21lbXNldChwYWdlX2FkZHJlc3Moc2hhZG93KSwgMCwgUEFHRV9TSVpFICogcGFnZXMpO1xuIDE4NjpcdFx0XHRfX21lbXNldChwYWdlX2FkZHJlc3Mob3JpZ2luKSwgMCwgUEFHRV9TSVpFICogcGFnZXMpO1xuIDE4NzpcdFx0XHRyZXR1cm47XG4gMTg4Olx0XHR9XG4gMTg5Olx0XG4gMTkwOlx0XHQvKiBaZXJvIHBhZ2VzIGFsbG9jYXRlZCBieSB0aGUgcnVudGltZSBzaG91bGQgYWxzbyBiZSBpbml0aWFsaXplZC4gKi9cbiAxOTE6XHRcdGlmIChrbXNhbl9pbl9ydW50aW1lKCkpXG4gMTkyOlx0XHRcdHJldHVybjtcbiAxOTM6XHRcbiAxOTQ6XHRcdF9fbWVtc2V0KHBhZ2VfYWRkcmVzcyhzaGFkb3cpLCAtMSwgUEFHRV9TSVpFICogcGFnZXMpO1xuIDE5NTpcdFx0a21zYW5fZW50ZXJfcnVudGltZSgpO1xuIDE5NjpcdFx0aGFuZGxlID0ga21zYW5fc2F2ZV9zdGFja193aXRoX2ZsYWdzKGZsYWdzLCAvKmV4dHJhX2JpdHMqLyAwKTtcbiAxOTc6XHRcdGttc2FuX2xlYXZlX3J1bnRpbWUoKTtcbiAxOTg6XHRcdC8qXG4gMTk5Olx0XHQgKiBBZGRyZXNzZXMgYXJlIHBhZ2UtYWxpZ25lZCwgcGFnZXMgYXJlIGNvbnRpZ3VvdXMsIHNvIGl0JiMzOTtzIG9rXG4gMjAwOlx0XHQgKiB0byBqdXN0IGZpbGwgdGhlIG9yaWdpbiBwYWdlcyB3aXRoIEBoYW5kbGUuXG4gMjAxOlx0XHQgKi9cbiAyMDI6XHRcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyBQQUdFX1NJWkUgKiBwYWdlcyAvIHNpemVvZihoYW5kbGUpOyBpJiM0MzsmIzQzOylcbiAyMDM6XHRcdFx0KChkZXBvdF9zdGFja19oYW5kbGVfdCAqKXBhZ2VfYWRkcmVzcyhvcmlnaW4pKVtpXSA9IGhhbmRsZTtcbiAyMDQ6XHR9XG4gMjA1Olx0XG4gMjA2Olx0dm9pZCBrbXNhbl9mcmVlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcilcbiAyMDc6XHR7XG4gMjA4Olx0XHRpZiAoIWttc2FuX2VuYWJsZWQgfHwga21zYW5faW5fcnVudGltZSgpKVxuIDIwOTpcdFx0XHRyZXR1cm47XG4gMjEwOlx0XHRrbXNhbl9lbnRlcl9ydW50aW1lKCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDEyOjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgzMDYKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA2MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTWVtb3J5IEFsbG9jYXRpb24gaW4gdGhlIEtlcm5lbCoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgYGttc2FuX2FsbG9jX3BhZ2VgIGZ1bmN0aW9uLiBGcm9tIHdoYXQgSSBjYW4gZ2F0aGVyLCBpdCYjMzk7cyBjbGVhcmx5IGludm9sdmVkIGluIG1hbmFnaW5nIG1ldGFkYXRhLCBzaGFkb3cgcGFnZXMsIHN0YWNrIGRlcG90cywgb3JpZ2luIHBhZ2VzLCBhbmQgYWxsIHRoYXQgZnVuIHN0dWZmIHJlbGF0ZWQgdG8gbWVtb3J5LiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXM6IHdoYXQgYXJlIHRoZSB1cHN0cmVhbSBmdW5jdGlvbnMgdGhhdCBhcmUgY2FsbGluZyBgYWxsb2NfcGFnZXNfYnVsa2AgYW5kIGBhbGxvY19wYWdlc19idWxrX2FycmF5YD8gVGhlc2UgYXJlIGtleSwgYmVjYXVzZSBrbm93aW5nIHdobyYjMzk7cyAqcmVxdWVzdGluZyogdGhpcyBidWxrIGFsbG9jYXRpb24gd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIG92ZXJhbGwgbWVtb3J5IG1hbmFnZW1lbnQgc2NoZW1lLiBJIG5lZWQgdG8gdHJhY2UgdGhpcyBiYWNrLiBTbywgbGV0JiMzOTtzIHN0YXJ0IHdpdGggYSBzZWFyY2ggZm9yIGNhbGxlcnMgb2YgYGFsbG9jX3BhZ2VzX2J1bGtgLiBUaGF0JiMzOTtzIHdoZXJlIEkgbmVlZCB0byBmb2N1cyBteSBlZmZvcnRzLiBJJiMzOTtsbCBnZXQgdGhlIGxheSBvZiB0aGUgbGFuZCBmcm9tIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMjowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthbGxvY19wYWdlc19idWxrJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYz0xNzI9c3RhdGljIHN0cnVjdCBiaW8gKmJsa19jcnlwdG9fYWxsb2NfZW5jX2JpbyhzdHJ1Y3QgYmlvICpiaW9fc3JjLFxuLS1cbmJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYy0yMDQtXHQgKlxuYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jOjIwNTpcdCAqIE5vdGU6IGFsbG9jX3BhZ2VzX2J1bGsgbmVlZHMgdGhlIGFycmF5IHRvIGJlIHplcm9lZCwgYXMgaXQgYXNzdW1lc1xuYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jLTIwNi1cdCAqIGFueSBub24temVybyBzbG90IGFscmVhZHkgY29udGFpbnMgYSB2YWxpZCBhbGxvY2F0aW9uLlxuLS1cbmJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYy0yMDgtXHRtZW1zZXQocGFnZXMsIDAsIHNpemVvZihzdHJ1Y3QgcGFnZSAqKSAqIG5yX3NlZ3MpO1xuYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jOjIwOTpcdG5yX2FsbG9jYXRlZCA9IGFsbG9jX3BhZ2VzX2J1bGsoR0ZQX0tFUk5FTCwgbnJfc2VncywgcGFnZXMpO1xuYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jLTIxMC1cdGlmIChucl9hbGxvY2F0ZWQgXHUwMDNjIG5yX3NlZ3MpXG4tLVxuZHJpdmVycy9maXJld2lyZS9jb3JlLWlzby5jPTMxPWludCBmd19pc29fYnVmZmVyX2FsbG9jKHN0cnVjdCBmd19pc29fYnVmZmVyICpidWZmZXIsIGludCBwYWdlX2NvdW50KVxuLS1cbmRyaXZlcnMvZmlyZXdpcmUvY29yZS1pc28uYy00MS1cdC8vIGNvbnZlbmllbmNlIHRvIG1hcCB0aGVtIGludG8gdmlydHVhbCBhZGRyZXNzIHNwYWNlIG9mIHVzZXIgcHJvY2Vzcy5cbmRyaXZlcnMvZmlyZXdpcmUvY29yZS1pc28uYzo0MjpcdHVuc2lnbmVkIGxvbmcgbnJfcG9wdWxhdGVkID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfS0VSTkVMIHwgR0ZQX0RNQTMyIHwgX19HRlBfWkVSTyxcbmRyaXZlcnMvZmlyZXdpcmUvY29yZS1pc28uYy00My1cdFx0XHRcdFx0XHQgICAgICBwYWdlX2NvdW50LCBwYWdlX2FycmF5KTtcbi0tXG5kcml2ZXJzL2ZpcmV3aXJlL29oY2kuYz04NDg9c3RhdGljIGludCBhcl9jb250ZXh0X2luaXQoc3RydWN0IGFyX2NvbnRleHQgKmN0eCwgc3RydWN0IGZ3X29oY2kgKm9oY2ksXG4tLVxuZHJpdmVycy9maXJld2lyZS9vaGNpLmMtODY0LVx0Ly8gYWRkcmVzcyByYW5nZSBpbiBrZXJuZWwgdmlydHVhbCBhZGRyZXNzIHNwYWNlLlxuZHJpdmVycy9maXJld2lyZS9vaGNpLmM6ODY1Olx0dW5zaWduZWQgbG9uZyBucl9wb3B1bGF0ZWQgPSBhbGxvY19wYWdlc19idWxrKEdGUF9LRVJORUwgfCBHRlBfRE1BMzIsIEFSX0JVRkZFUlMsIHBhZ2VzKTtcbmRyaXZlcnMvZmlyZXdpcmUvb2hjaS5jLTg2Ni1cbi0tXG5kcml2ZXJzL3N0YWdpbmcvbWVkaWEvYXRvbWlzcC9wY2kvaG1tL2htbV9iby5jPTYyMT1zdGF0aWMgaW50IGFsbG9jX3ByaXZhdGVfcGFnZXMoc3RydWN0IGhtbV9idWZmZXJfb2JqZWN0ICpibylcbi0tXG5kcml2ZXJzL3N0YWdpbmcvbWVkaWEvYXRvbWlzcC9wY2kvaG1tL2htbV9iby5jLTYyNi1cbmRyaXZlcnMvc3RhZ2luZy9tZWRpYS9hdG9taXNwL3BjaS9obW0vaG1tX2JvLmM6NjI3Olx0bnJfYWxsb2NhdGVkID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfS0VSTkVMLCBiby1cdTAwM2VwZ25yLCBiby1cdTAwM2VwYWdlcyk7XG5kcml2ZXJzL3N0YWdpbmcvbWVkaWEvYXRvbWlzcC9wY2kvaG1tL2htbV9iby5jLTYyOC1cdC8qXG5kcml2ZXJzL3N0YWdpbmcvbWVkaWEvYXRvbWlzcC9wY2kvaG1tL2htbV9iby5jOjYyOTpcdCAqIGFsbG9jX3BhZ2VzX2J1bGsoKSBkb2VzIG5vdCB0cnkgdmVyeSBoYXJkIHRvIGdldCBwYWdlcyB1bmRlciBtZW1vcnlcbmRyaXZlcnMvc3RhZ2luZy9tZWRpYS9hdG9taXNwL3BjaS9obW0vaG1tX2JvLmMtNjMwLVx0ICogcHJlc3N1cmUuIElmIG5lY2Vzc2FyeSBmYWxsIGJhY2sgdG8gYWxsb2NfcGFnZSgpLlxuLS1cbmRyaXZlcnMvdmZpby9wY2kvbWx4NS9jbWQuYz00NjY9c3RhdGljIHZvaWQgZnJlZV9wYWdlX2xpc3QodTMyIG5wYWdlcywgc3RydWN0IHBhZ2UgKipwYWdlX2xpc3QpXG4tLVxuZHJpdmVycy92ZmlvL3BjaS9tbHg1L2NtZC5jLTQ2OS1cbmRyaXZlcnMvdmZpby9wY2kvbWx4NS9jbWQuYzo0NzA6XHQvKiBVbmRvIGFsbG9jX3BhZ2VzX2J1bGsoKSAqL1xuZHJpdmVycy92ZmlvL3BjaS9tbHg1L2NtZC5jLTQ3MS1cdGZvciAoaSA9IG5wYWdlcyAtIDE7IGkgXHUwMDNlPSAwOyBpLS0pXG4tLVxuZHJpdmVycy92ZmlvL3BjaS9tbHg1L2NtZC5jPTQ5Nj1zdGF0aWMgaW50IG1seDV2Zl9hZGRfcGFnZXMoc3RydWN0IHBhZ2UgKioqcGFnZV9saXN0LCB1bnNpZ25lZCBpbnQgbnBhZ2VzKVxuLS1cbmRyaXZlcnMvdmZpby9wY2kvbWx4NS9jbWQuYy01MDYtXHRmb3IgKDs7KSB7XG5kcml2ZXJzL3ZmaW8vcGNpL21seDUvY21kLmM6NTA3Olx0XHRmaWxsZWQgPSBhbGxvY19wYWdlc19idWxrKEdGUF9LRVJORUxfQUNDT1VOVCwgbnBhZ2VzIC0gZG9uZSxcbmRyaXZlcnMvdmZpby9wY2kvbWx4NS9jbWQuYy01MDgtXHRcdFx0XHRcdCAgKnBhZ2VfbGlzdCAmIzQzOyBkb25lKTtcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZpcnRpby9taWdyYXRlLmM9NjM9c3RhdGljIGludCB2aXJ0aW92Zl9hZGRfbWlncmF0aW9uX3BhZ2VzKHN0cnVjdCB2aXJ0aW92Zl9kYXRhX2J1ZmZlciAqYnVmLFxuLS1cbmRyaXZlcnMvdmZpby9wY2kvdmlydGlvL21pZ3JhdGUuYy03OC1cdGRvIHtcbmRyaXZlcnMvdmZpby9wY2kvdmlydGlvL21pZ3JhdGUuYzo3OTpcdFx0ZmlsbGVkID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfS0VSTkVMX0FDQ09VTlQsIHRvX2ZpbGwsXG5kcml2ZXJzL3ZmaW8vcGNpL3ZpcnRpby9taWdyYXRlLmMtODAtXHRcdFx0XHRcdCAgcGFnZV9saXN0KTtcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZpcnRpby9taWdyYXRlLmM9MTEwPXN0YXRpYyB2b2lkIHZpcnRpb3ZmX2ZyZWVfZGF0YV9idWZmZXIoc3RydWN0IHZpcnRpb3ZmX2RhdGFfYnVmZmVyICpidWYpXG4tLVxuZHJpdmVycy92ZmlvL3BjaS92aXJ0aW8vbWlncmF0ZS5jLTExMy1cbmRyaXZlcnMvdmZpby9wY2kvdmlydGlvL21pZ3JhdGUuYzoxMTQ6XHQvKiBVbmRvIGFsbG9jX3BhZ2VzX2J1bGsoKSAqL1xuZHJpdmVycy92ZmlvL3BjaS92aXJ0aW8vbWlncmF0ZS5jLTExNS1cdGZvcl9lYWNoX3NndGFibGVfcGFnZShcdTAwMjZidWYtXHUwMDNldGFibGUuc2d0LCBcdTAwMjZzZ19pdGVyLCAwKVxuLS1cbmZzL2J0cmZzL2V4dGVudF9pby5jPTY4ND1pbnQgYnRyZnNfYWxsb2NfcGFnZV9hcnJheSh1bnNpZ25lZCBpbnQgbnJfcGFnZXMsIHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheSwgZ2ZwX3QgZ2ZwKVxuLS1cbmZzL2J0cmZzL2V4dGVudF9pby5jLTY5MC1cbmZzL2J0cmZzL2V4dGVudF9pby5jOjY5MTpcdFx0YWxsb2NhdGVkID0gYWxsb2NfcGFnZXNfYnVsayhnZnAsIG5yX3BhZ2VzLCBwYWdlX2FycmF5KTtcbmZzL2J0cmZzL2V4dGVudF9pby5jLTY5Mi1cdFx0aWYgKHVubGlrZWx5KGFsbG9jYXRlZCA9PSBsYXN0KSkge1xuLS1cbmZzL2Vyb2ZzL3p1dGlsLmM9NjU9aW50IHpfZXJvZnNfZ2J1Zl9ncm93c2l6ZSh1bnNpZ25lZCBpbnQgbnJwYWdlcylcbi0tXG5mcy9lcm9mcy96dXRpbC5jLTg5LVx0XHRcdGxhc3QgPSBqO1xuZnMvZXJvZnMvenV0aWwuYzo5MDpcdFx0XHRqID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfS0VSTkVMLCBucnBhZ2VzLCB0bXBfcGFnZXMpO1xuZnMvZXJvZnMvenV0aWwuYy05MS1cdFx0XHRpZiAobGFzdCA9PSBqKVxuLS1cbmZzL2Z1c2UvcmVhZGRpci5jPTMzNj1zdGF0aWMgc3RydWN0IHBhZ2UgKipmdXNlX3JlYWRkaXJfYWxsb2NfYnVmKHN0cnVjdCBmdXNlX2FyZ3NfcGFnZXMgKmFwLCBzaXplX3QgKmJ1ZnNpemUpXG4tLVxuZnMvZnVzZS9yZWFkZGlyLmMtMzQzLVxuZnMvZnVzZS9yZWFkZGlyLmM6MzQ0Olx0bnJfYWxsb2MgPSBhbGxvY19wYWdlc19idWxrKEdGUF9LRVJORUwsIG5yX3BhZ2VzLCBwYWdlcyk7XG5mcy9mdXNlL3JlYWRkaXIuYy0zNDUtXHRpZiAoIW5yX2FsbG9jKVxuLS1cbmZzL25mc2QvbmZzNHN0YXRlLmM9MTMyNj1hbGxvY19pbml0X2Rpcl9kZWxlZyhzdHJ1Y3QgbmZzNF9jbGllbnQgKmNscCwgc3RydWN0IG5mczRfZmlsZSAqZnApXG4tLVxuZnMvbmZzZC9uZnM0c3RhdGUuYy0xMzM3LVxuZnMvbmZzZC9uZnM0c3RhdGUuYzoxMzM4Olx0bnBhZ2VzID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfS0VSTkVMLCBOT1RJRlk0X1BBR0VfQVJSQVlfU0laRSwgbmNuLVx1MDAzZW5jbl9wYWdlcyk7XG5mcy9uZnNkL25mczRzdGF0ZS5jLTEzMzktXHRpZiAobnBhZ2VzICE9IE5PVElGWTRfUEFHRV9BUlJBWV9TSVpFKSB7XG4tLVxuZnMvc3BsaWNlLmM9MzE4PXNzaXplX3QgY29weV9zcGxpY2VfcmVhZChzdHJ1Y3QgZmlsZSAqaW4sIGxvZmZfdCAqcHBvcyxcbi0tXG5mcy9zcGxpY2UuYy0zNDEtXHRwYWdlcyA9IChzdHJ1Y3QgcGFnZSAqKikoYnYgJiM0MzsgbnBhZ2VzKTtcbmZzL3NwbGljZS5jOjM0MjpcdG5wYWdlcyA9IGFsbG9jX3BhZ2VzX2J1bGsoR0ZQX1VTRVIsIG5wYWdlcywgcGFnZXMpO1xuZnMvc3BsaWNlLmMtMzQzLVx0aWYgKCFucGFnZXMpIHtcbi0tXG5pbmNsdWRlL2xpbnV4L2dmcC5oPTIwNz1zdHJ1Y3QgZm9saW8gKl9fZm9saW9fYWxsb2Nfbm9wcm9mKGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG9yZGVyLCBpbnQgcHJlZmVycmVkX25pZCxcbi0tXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIxMC1cbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjExOnVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoZ2ZwX3QgZ2ZwLCBpbnQgcHJlZmVycmVkX25pZCxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjEyLVx0XHRcdFx0bm9kZW1hc2tfdCAqbm9kZW1hc2ssIGludCBucl9wYWdlcyxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjEzLVx0XHRcdFx0c3RydWN0IHBhZ2UgKipwYWdlX2FycmF5KTtcbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjE0OiNkZWZpbmUgX19hbGxvY19wYWdlc19idWxrKC4uLilcdFx0XHRhbGxvY19ob29rcyhhbGxvY19wYWdlc19idWxrX25vcHJvZihfX1ZBX0FSR1NfXykpXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIxNS1cbmluY2x1ZGUvbGludXgvZ2ZwLmg9MjE2PXZvaWQgZnJlZV9wYWdlc19idWxrKHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheSwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyk7XG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIxNy1cbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjE4OnVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mKGdmcF90IGdmcCxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjE5LVx0XHRcdFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjIwLVx0XHRcdFx0c3RydWN0IHBhZ2UgKipwYWdlX2FycmF5KTtcbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjIxOiNkZWZpbmUgIGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5KC4uLilcdFx0XHRcdFxcXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjIyMjpcdGFsbG9jX2hvb2tzKGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZihfX1ZBX0FSR1NfXykpXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIyMy1cbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjI0LS8qIEJ1bGsgYWxsb2NhdGUgb3JkZXItMCBwYWdlcyAqL1xuaW5jbHVkZS9saW51eC9nZnAuaDoyMjU6I2RlZmluZSBhbGxvY19wYWdlc19idWxrKF9nZnAsIF9ucl9wYWdlcywgX3BhZ2VfYXJyYXkpXHRcdFxcXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjIyNjpcdF9fYWxsb2NfcGFnZXNfYnVsayhfZ2ZwLCBudW1hX21lbV9pZCgpLCBOVUxMLCBfbnJfcGFnZXMsIF9wYWdlX2FycmF5KVxuaW5jbHVkZS9saW51eC9nZnAuaC0yMjctXG5pbmNsdWRlL2xpbnV4L2dmcC5oPTIyOD1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmdcbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjI5OmFsbG9jX3BhZ2VzX2J1bGtfbm9kZV9ub3Byb2YoZ2ZwX3QgZ2ZwLCBpbnQgbmlkLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxuaW5jbHVkZS9saW51eC9nZnAuaC0yMzAtXHRcdFx0XHQgICBzdHJ1Y3QgcGFnZSAqKnBhZ2VfYXJyYXkpXG4tLVxuaW5jbHVkZS9saW51eC9nZnAuaC0yMzQtXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjIzNTpcdHJldHVybiBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnAsIG5pZCwgTlVMTCwgbnJfcGFnZXMsIHBhZ2VfYXJyYXkpO1xuaW5jbHVkZS9saW51eC9nZnAuaC0yMzYtfVxuaW5jbHVkZS9saW51eC9nZnAuaC0yMzctXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjIzODojZGVmaW5lIGFsbG9jX3BhZ2VzX2J1bGtfbm9kZSguLi4pXHRcdFx0XHRcXFxuaW5jbHVkZS9saW51eC9nZnAuaDoyMzk6XHRhbGxvY19ob29rcyhhbGxvY19wYWdlc19idWxrX25vZGVfbm9wcm9mKF9fVkFfQVJHU19fKSlcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjQwLVxuLS1cbmlvX3VyaW5nL21lbW1hcC5jPTE3ND1zdGF0aWMgaW50IGlvX3JlZ2lvbl9hbGxvY2F0ZV9wYWdlcyhzdHJ1Y3QgaW9fbWFwcGVkX3JlZ2lvbiAqbXIsXG4tLVxuaW9fdXJpbmcvbWVtbWFwLmMtMTkyLVxuaW9fdXJpbmcvbWVtbWFwLmM6MTkzOlx0bnJfYWxsb2NhdGVkID0gYWxsb2NfcGFnZXNfYnVsa19ub2RlKGdmcCwgTlVNQV9OT19OT0RFLFxuaW9fdXJpbmcvbWVtbWFwLmMtMTk0LVx0XHRcdFx0XHQgICAgIG1yLVx1MDAzZW5yX3BhZ2VzLCBwYWdlcyk7XG4tLVxua2VybmVsL2JwZi9hcmVuYS5jPTY2OD1zdGF0aWMgbG9uZyBhcmVuYV9hbGxvY19wYWdlcyhzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSwgbG9uZyB1YWRkciwgbG9uZyBwYWdlX2NudCwgaW50IG5vZGVfaWQsXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTczMi1cbmtlcm5lbC9icGYvYXJlbmEuYzo3MzM6XHRcdC8qIHplcm9pbmcgaXMgbmVlZGVkLCBzaW5jZSBhbGxvY19wYWdlc19idWxrKCkgb25seSBmaWxscyBpbiBub24temVybyBlbnRyaWVzICovXG5rZXJuZWwvYnBmL2FyZW5hLmMtNzM0LVx0XHRtZW1zZXQocGFnZXMsIDAsIHRoaXNfYmF0Y2ggKiBzaXplb2Yoc3RydWN0IHBhZ2UgKikpO1xuLS1cbmxpYi90ZXN0X3ZtYWxsb2MuYz0zOTE9dm1fbWFwX3JhbV90ZXN0KHZvaWQpXG4tLVxubGliL3Rlc3Rfdm1hbGxvYy5jLTQwMy1cbmxpYi90ZXN0X3ZtYWxsb2MuYzo0MDQ6XHRucl9hbGxvY2F0ZWQgPSBhbGxvY19wYWdlc19idWxrKEdGUF9LRVJORUwsIG1hcF9ucl9wYWdlcywgcGFnZXMpO1xubGliL3Rlc3Rfdm1hbGxvYy5jLTQwNS1cdGlmIChucl9hbGxvY2F0ZWQgIT0gbWFwX25yX3BhZ2VzKVxuLS1cbmxpYi90ZXN0cy9rdW5pdF9pb3ZfaXRlci5jPTUxPXN0YXRpYyB2b2lkICpfX2luaXQgaW92X2t1bml0X2NyZWF0ZV9idWZmZXIoc3RydWN0IGt1bml0ICp0ZXN0LFxuLS1cbmxpYi90ZXN0cy9rdW5pdF9pb3ZfaXRlci5jLTY2LVx0XHRsYXN0ID0gZ290O1xubGliL3Rlc3RzL2t1bml0X2lvdl9pdGVyLmM6Njc6XHRcdGdvdCA9IGFsbG9jX3BhZ2VzX2J1bGsoR0ZQX0tFUk5FTCwgbnBhZ2VzLCBwYWdlcyk7XG5saWIvdGVzdHMva3VuaXRfaW92X2l0ZXIuYy02OC1cbi0tXG5tbS9hbGxvY190YWcuYz03Nzc9c3RhdGljIGludCB2bV9tb2R1bGVfdGFnc19wb3B1bGF0ZSh2b2lkKVxuLS1cbm1tL2FsbG9jX3RhZy5jLTc5My1cbm1tL2FsbG9jX3RhZy5jOjc5NDpcdFx0XHRhbGxvY2F0ZWQgPSBhbGxvY19wYWdlc19idWxrX25vZGUoR0ZQX0tFUk5FTCB8IF9fR0ZQX05PV0FSTixcbm1tL2FsbG9jX3RhZy5jLTc5NS1cdFx0XHRcdE5VTUFfTk9fTk9ERSwgbW9yZV9wYWdlcyAtIG5yLCBuZXh0X3BhZ2UgJiM0MzsgbnIpO1xuLS1cbm1tL2thc2FuL3NoYWRvdy5jPTMyNz1zdGF0aWMgdm9pZCBfX19mcmVlX3BhZ2VzX2J1bGsoc3RydWN0IHBhZ2UgKipwYWdlcywgaW50IG5yX3BhZ2VzKVxuLS1cbm1tL2thc2FuL3NoYWRvdy5jLTMzOC1cbm1tL2thc2FuL3NoYWRvdy5jOjMzOTpzdGF0aWMgaW50IF9fX2FsbG9jX3BhZ2VzX2J1bGsoc3RydWN0IHBhZ2UgKipwYWdlcywgaW50IG5yX3BhZ2VzLCBnZnBfdCBnZnBfbWFzaylcbm1tL2thc2FuL3NoYWRvdy5jLTM0MC17XG4tLVxubW0va2FzYW4vc2hhZG93LmMtMzQ0LVx0d2hpbGUgKG5yX3BhZ2VzKSB7XG5tbS9rYXNhbi9zaGFkb3cuYzozNDU6XHRcdG5yX3BvcHVsYXRlZCA9IGFsbG9jX3BhZ2VzX2J1bGsoZ2ZwX21hc2ssIG5yX3BhZ2VzLCBwYWdlcyk7XG5tbS9rYXNhbi9zaGFkb3cuYy0zNDYtXHRcdGlmICghbnJfcG9wdWxhdGVkKSB7XG4tLVxubW0va2FzYW4vc2hhZG93LmM9MzU3PXN0YXRpYyBpbnQgX19rYXNhbl9wb3B1bGF0ZV92bWFsbG9jX2RvKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLCBnZnBfdCBnZnBfbWFzaylcbi0tXG5tbS9rYXNhbi9zaGFkb3cuYy0zNjktXHRcdG5yX3BhZ2VzID0gbWluKG5yX3RvdGFsLCBQQUdFX1NJWkUgLyBzaXplb2YoZGF0YS5wYWdlc1swXSkpO1xubW0va2FzYW4vc2hhZG93LmM6MzcwOlx0XHRyZXQgPSBfX19hbGxvY19wYWdlc19idWxrKGRhdGEucGFnZXMsIG5yX3BhZ2VzLCBnZnBfbWFzayk7XG5tbS9rYXNhbi9zaGFkb3cuYy0zNzEtXHRcdGlmIChyZXQpXG4tLVxubW0vbWVtcG9saWN5LmM9MjU4OT1FWFBPUlRfU1lNQk9MKGZvbGlvX2FsbG9jX25vcHJvZik7XG5tbS9tZW1wb2xpY3kuYy0yNTkwLVxubW0vbWVtcG9saWN5LmM6MjU5MTpzdGF0aWMgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX2ludGVybGVhdmUoZ2ZwX3QgZ2ZwLFxubW0vbWVtcG9saWN5LmMtMjU5Mi1cdFx0c3RydWN0IG1lbXBvbGljeSAqcG9sLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxuLS1cbm1tL21lbXBvbGljeS5jLTI2MDctXHRcdGlmIChkZWx0YSkge1xubW0vbWVtcG9saWN5LmM6MjYwODpcdFx0XHRucl9hbGxvY2F0ZWQgPSBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnAsXG5tbS9tZW1wb2xpY3kuYy0yNjA5LVx0XHRcdFx0XHRpbnRlcmxlYXZlX25vZGVzKHBvbCksIE5VTEwsXG4tLVxubW0vbWVtcG9saWN5LmMtMjYxMy1cdFx0fSBlbHNlIHtcbm1tL21lbXBvbGljeS5jOjI2MTQ6XHRcdFx0bnJfYWxsb2NhdGVkID0gYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoZ2ZwLFxubW0vbWVtcG9saWN5LmMtMjYxNS1cdFx0XHRcdFx0aW50ZXJsZWF2ZV9ub2Rlcyhwb2wpLCBOVUxMLFxuLS1cbm1tL21lbXBvbGljeS5jLTI2MjUtXG5tbS9tZW1wb2xpY3kuYzoyNjI2OnN0YXRpYyB1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZShnZnBfdCBnZnAsXG5tbS9tZW1wb2xpY3kuYy0yNjI3LVx0XHRzdHJ1Y3QgbWVtcG9saWN5ICpwb2wsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG4tLVxubW0vbWVtcG9saWN5LmMtMjY2NC1cdFx0bm9kZV9wYWdlcyA9IG1pbihyZW1fcGFnZXMsIHdlaWdodCk7XG5tbS9tZW1wb2xpY3kuYzoyNjY1Olx0XHRucl9hbGxvY2F0ZWQgPSBfX2FsbG9jX3BhZ2VzX2J1bGsoZ2ZwLCBub2RlLCBOVUxMLCBub2RlX3BhZ2VzLFxubW0vbWVtcG9saWN5LmMtMjY2Ni1cdFx0XHRcdFx0XHQgIHBhZ2VfYXJyYXkpO1xuLS1cbm1tL21lbXBvbGljeS5jLTI3MDEtXHQvKlxubW0vbWVtcG9saWN5LmM6MjcwMjpcdCAqIENhbGN1bGF0ZSByb3VuZHMvcGFydGlhbCByb3VuZHMgdG8gbWluaW1pemUgX19hbGxvY19wYWdlc19idWxrIGNhbGxzLlxubW0vbWVtcG9saWN5LmMtMjcwMy1cdCAqIFRyYWNrIHdoaWNoIG5vZGUgd2VpZ2h0ZWQgaW50ZXJsZWF2ZSBzaG91bGQgcmVzdW1lIGZyb20uXG4tLVxubW0vbWVtcG9saWN5LmMtMjcyOS1cdFx0XHRicmVhaztcbm1tL21lbXBvbGljeS5jOjI3MzA6XHRcdG5yX2FsbG9jYXRlZCA9IF9fYWxsb2NfcGFnZXNfYnVsayhnZnAsIG5vZGUsIE5VTEwsIG5vZGVfcGFnZXMsXG5tbS9tZW1wb2xpY3kuYy0yNzMxLVx0XHRcdFx0XHRcdCAgcGFnZV9hcnJheSk7XG4tLVxubW0vbWVtcG9saWN5LmMtMjc0My1cbm1tL21lbXBvbGljeS5jOjI3NDQ6c3RhdGljIHVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19wcmVmZXJyZWRfbWFueShnZnBfdCBnZnAsIGludCBuaWQsXG5tbS9tZW1wb2xpY3kuYy0yNzQ1LVx0XHRzdHJ1Y3QgbWVtcG9saWN5ICpwb2wsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG4tLVxubW0vbWVtcG9saWN5LmMtMjc1My1cbm1tL21lbXBvbGljeS5jOjI3NTQ6XHRucl9hbGxvY2F0ZWQgID0gYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YocHJlZmVycmVkX2dmcCwgbmlkLCBcdTAwMjZwb2wtXHUwMDNlbm9kZXMsXG5tbS9tZW1wb2xpY3kuYy0yNzU1LVx0XHRcdFx0XHQgICBucl9wYWdlcywgcGFnZV9hcnJheSk7XG4tLVxubW0vbWVtcG9saWN5LmMtMjc1Ny1cdGlmIChucl9hbGxvY2F0ZWQgXHUwMDNjIG5yX3BhZ2VzKVxubW0vbWVtcG9saWN5LmM6Mjc1ODpcdFx0bnJfYWxsb2NhdGVkICYjNDM7PSBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnAsIG51bWFfbm9kZV9pZCgpLCBOVUxMLFxubW0vbWVtcG9saWN5LmMtMjc1OS1cdFx0XHRcdG5yX3BhZ2VzIC0gbnJfYWxsb2NhdGVkLFxuLS1cbm1tL21lbXBvbGljeS5jLTI3NjktICovXG5tbS9tZW1wb2xpY3kuYzoyNzcwOnVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mKGdmcF90IGdmcCxcbm1tL21lbXBvbGljeS5jLTI3NzEtXHRcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsIHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheSlcbi0tXG5tbS9tZW1wb2xpY3kuYy0yNzgwLVx0aWYgKHBvbC1cdTAwM2Vtb2RlID09IE1QT0xfSU5URVJMRUFWRSlcbm1tL21lbXBvbGljeS5jOjI3ODE6XHRcdHJldHVybiBhbGxvY19wYWdlc19idWxrX2ludGVybGVhdmUoZ2ZwLCBwb2wsXG5tbS9tZW1wb2xpY3kuYy0yNzgyLVx0XHRcdFx0XHRcdFx0IG5yX3BhZ2VzLCBwYWdlX2FycmF5KTtcbi0tXG5tbS9tZW1wb2xpY3kuYy0yNzg0LVx0aWYgKHBvbC1cdTAwM2Vtb2RlID09IE1QT0xfV0VJR0hURURfSU5URVJMRUFWRSlcbm1tL21lbXBvbGljeS5jOjI3ODU6XHRcdHJldHVybiBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmUoXG5tbS9tZW1wb2xpY3kuYy0yNzg2LVx0XHRcdFx0ICBnZnAsIHBvbCwgbnJfcGFnZXMsIHBhZ2VfYXJyYXkpO1xuLS1cbm1tL21lbXBvbGljeS5jLTI3ODgtXHRpZiAocG9sLVx1MDAzZW1vZGUgPT0gTVBPTF9QUkVGRVJSRURfTUFOWSlcbm1tL21lbXBvbGljeS5jOjI3ODk6XHRcdHJldHVybiBhbGxvY19wYWdlc19idWxrX3ByZWZlcnJlZF9tYW55KGdmcCxcbm1tL21lbXBvbGljeS5jLTI3OTAtXHRcdFx0XHRudW1hX25vZGVfaWQoKSwgcG9sLCBucl9wYWdlcywgcGFnZV9hcnJheSk7XG4tLVxubW0vbWVtcG9saWN5LmMtMjc5My1cdG5vZGVtYXNrID0gcG9saWN5X25vZGVtYXNrKGdmcCwgcG9sLCBOT19JTlRFUkxFQVZFX0lOREVYLCBcdTAwMjZuaWQpO1xubW0vbWVtcG9saWN5LmM6Mjc5NDpcdHJldHVybiBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnAsIG5pZCwgbm9kZW1hc2ssXG5tbS9tZW1wb2xpY3kuYy0yNzk1LVx0XHRcdFx0ICAgICAgIG5yX3BhZ2VzLCBwYWdlX2FycmF5KTtcbi0tXG5tbS9wYWdlX2FsbG9jLmM9NTA5MT1zdGF0aWMgaW5saW5lIGJvb2wgcHJlcGFyZV9hbGxvY19wYWdlcyhnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyLFxuLS1cbm1tL3BhZ2VfYWxsb2MuYy01MTM5LS8qXG5tbS9wYWdlX2FsbG9jLmM6NTE0MDogKiBfX2FsbG9jX3BhZ2VzX2J1bGsgLSBBbGxvY2F0ZSBhIG51bWJlciBvZiBvcmRlci0wIHBhZ2VzIHRvIGFuIGFycmF5XG5tbS9wYWdlX2FsbG9jLmMtNTE0MS0gKiBAZ2ZwOiBHRlAgZmxhZ3MgZm9yIHRoZSBhbGxvY2F0aW9uXG4tLVxubW0vcGFnZV9hbGxvYy5jLTUxNTktICovXG5tbS9wYWdlX2FsbG9jLmM6NTE2MDp1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKGdmcF90IGdmcCwgaW50IHByZWZlcnJlZF9uaWQsXG5tbS9wYWdlX2FsbG9jLmMtNTE2MS1cdFx0XHRub2RlbWFza190ICpub2RlbWFzaywgaW50IG5yX3BhZ2VzLFxuLS1cbm1tL3BhZ2VfYWxsb2MuYy01MzAxLX1cbm1tL3BhZ2VfYWxsb2MuYzo1MzAyOkVYUE9SVF9TWU1CT0xfR1BMKGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKTtcbm1tL3BhZ2VfYWxsb2MuYy01MzAzLVxuLS1cbm1tL3NsdWIuYz03NDI2PXN0YXRpYyBib29sIF9fa21lbV9jYWNoZV9hbGxvY19idWxrKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBmbGFncyxcbi0tXG5tbS9zbHViLmMtNzQ3MC0gKlxubW0vc2x1Yi5jOjc0NzE6ICogVW5saWtlIGFsbG9jX3BhZ2VzX2J1bGsoKSwgdGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBjaGVjayBmb3IgYWxyZWFkeSBhbGxvY2F0ZWRcbm1tL3NsdWIuYy03NDcyLSAqIG9iamVjdHMgaW4gQHAsIGFuZCB0aHVzIHRoZSBjYWxsZXIgZG9lcyBub3QgbmVlZCB0byB6ZXJvIGl0LlxuLS1cbm1tL3ZtYWxsb2MuYz0zNjc2PXZtX2FyZWFfYWxsb2NfcGFnZXMoZ2ZwX3QgZ2ZwLCBpbnQgbmlkLFxuLS1cbm1tL3ZtYWxsb2MuYy0zNzQzLVx0XHRcdGlmIChJU19FTkFCTEVEKENPTkZJR19OVU1BKSBcdTAwMjZcdTAwMjYgbmlkID09IE5VTUFfTk9fTk9ERSlcbm1tL3ZtYWxsb2MuYzozNzQ0Olx0XHRcdFx0bnIgPSBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2YoZ2ZwLFxubW0vdm1hbGxvYy5jLTM3NDUtXHRcdFx0XHRcdFx0XHRucl9wYWdlc19yZXF1ZXN0LFxuLS1cbm1tL3ZtYWxsb2MuYy0zNzQ3LVx0XHRcdGVsc2Vcbm1tL3ZtYWxsb2MuYzozNzQ4Olx0XHRcdFx0bnIgPSBhbGxvY19wYWdlc19idWxrX25vZGVfbm9wcm9mKGdmcCwgbmlkLFxubW0vdm1hbGxvYy5jLTM3NDktXHRcdFx0XHRcdFx0XHRucl9wYWdlc19yZXF1ZXN0LFxuLS1cbm5ldC9jb3JlL3BhZ2VfcG9vbC5jPTYxMT1zdGF0aWMgbm9pbmxpbmUgbmV0bWVtX3JlZiBfX3BhZ2VfcG9vbF9hbGxvY19uZXRtZW1zX3Nsb3coc3RydWN0IHBhZ2VfcG9vbCAqcG9vbCxcbi0tXG5uZXQvY29yZS9wYWdlX3Bvb2wuYy02MzMtXG5uZXQvY29yZS9wYWdlX3Bvb2wuYzo2MzQ6XHQvKiBNYXJrIGVtcHR5IGFsbG9jLmNhY2hlIHNsb3RzIFwmIzM0O2VtcHR5XCYjMzQ7IGZvciBhbGxvY19wYWdlc19idWxrICovXG5uZXQvY29yZS9wYWdlX3Bvb2wuYy02MzUtXHRtZW1zZXQoXHUwMDI2cG9vbC1cdTAwM2VhbGxvYy5jYWNoZSwgMCwgc2l6ZW9mKHZvaWQgKikgKiBidWxrKTtcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTYzNi1cbm5ldC9jb3JlL3BhZ2VfcG9vbC5jOjYzNzpcdG5yX3BhZ2VzID0gYWxsb2NfcGFnZXNfYnVsa19ub2RlKGdmcCwgcG9vbC1cdTAwM2VwLm5pZCwgYnVsayxcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTYzOC1cdFx0XHRcdFx0IChzdHJ1Y3QgcGFnZSAqKilwb29sLVx1MDAzZWFsbG9jLmNhY2hlKTtcbi0tXG5uZXQvc3VucnBjL3N2Y194cHJ0LmM9Njg3PXN0YXRpYyBib29sIHN2Y19maWxsX3BhZ2VzKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsIHN0cnVjdCBwYWdlICoqcGFnZXMsXG4tLVxubmV0L3N1bnJwYy9zdmNfeHBydC5jLTY5Mi1cdGZvciAoZmlsbGVkID0gMDsgZmlsbGVkIFx1MDAzYyBucGFnZXM7IGZpbGxlZCA9IHJldCkge1xubmV0L3N1bnJwYy9zdmNfeHBydC5jOjY5MzpcdFx0cmV0ID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfS0VSTkVMLCBucGFnZXMsIHBhZ2VzKTtcbm5ldC9zdW5ycGMvc3ZjX3hwcnQuYy02OTQtXHRcdGlmIChyZXQgXHUwMDNlIGZpbGxlZClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTI6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQyNTcKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAxNTE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIFBhdGNoIGZvciBCdWxrIFBhZ2UgQWxsb2NhdGlvbiBhbmQgS01TQU4gSW50ZWdyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcywgJiMzNDtXaGVyZSBpcyBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIHVzZWQ/JiMzNDsuIFR1cm5zIG91dCwgaXQmIzM5O3MgdXNlZCAqZXZlcnl3aGVyZSogLSBgdm1hbGxvY2AsIGBwYWdlX3Bvb2xgLCBgaW9fdXJpbmdgLCBgc3BsaWNlYCwgYGJ0cmZzYCwgYGJwZl9hcmVuYWAsIGBzdW5ycGNgLCBhbmQgc28gb24uIFNvLCBpdCYjMzk7cyBkZWZpbml0ZWx5IGEgY29yZSBmdW5jdGlvbiwgd2hpY2ggaW1tZWRpYXRlbHkgY2F0Y2hlcyBteSBhdHRlbnRpb24uCgpUaGUgcGF0Y2ggaXRzZWxmIGlzIGFkZGluZyBgdHJhY2VfbW1fcGFnZV9hbGxvY2AgYW5kIGBrbXNhbl9hbGxvY19wYWdlYCB0byB0aGUgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCBmdW5jdGlvbiBpbiBgbW0vcGFnZV9hbGxvYy5jYC4gTXkgbmV4dCBxdWVzdGlvbiBpcywgJiMzNDtJcyB0aGlzIHdvcnRoIGZ1enppbmc/JiMzNDsuCgpJdCBjZXJ0YWlubHkgbW9kaWZpZXMgdGhlIHJ1bnRpbWUgYmVoYXZpb3Ig4oCTIEtNU0FOIG1ldGFkYXRhIGluaXRpYWxpemF0aW9uIGFuZCB0cmFjZXBvaW50IGVtaXNzaW9uIGFyZSBiZWluZyBhZGRlZC4gVGhpcyBkaXJlY3RseSBhbHRlcnMgaG93IHBhZ2Ugc2hhZG93IG1ldGFkYXRhIGlzIGhhbmRsZWQsIHBvdGVudGlhbGx5IGZpeGluZyB1bmluaXQgb3IgdHJhY2tpbmcgaXNzdWVzIHdoZW4gcGFnZXMgYXJlIGFsbG9jYXRlZCB2aWEgdGhlIFBDUCBsaXN0IGluIHRoZSBidWxrIGFsbG9jYXRvci4gVGhhdCYjMzk7cyBhIGdvb2Qgc2lnbi4KCkFjY29yZGluZyB0byB0aGUgJiMzNDtXb3J0aEZ1enppbmcmIzM0OyBjcml0ZXJpYSwgaXQmIzM5O3MgYSAmIzM0O3llcyYjMzQ7IHNpbmNlIGl0IHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpbiBhIGNvcmUgc3Vic3lzdGVtIChtZW1vcnkgbWFuYWdlbWVudCksIGFuZCB0aGlzIGlzIGxvZ2ljIG1vZGlmaWNhdGlvbi4KCk5vdywgdGhlIHJlYWwgcXVlc3Rpb246IGFyZSBhbnkgb2YgdGhlc2UgYWZmZWN0ZWQgZnVuY3Rpb25zIHViaXF1aXRvdXM/IEkgaGF2ZSB0byBjb25zaWRlciB0aGUgJiMzNDtBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFMmIzM0OyBydWxlLiBJIG5lZWQgdG8gYmUgY2FyZWZ1bCBub3QgdG8gZGlsdXRlIHRoZSBmdXp6aW5nIGVmZm9ydC4gSSBrbm93IHRoYXQgYGttYWxsb2NgIG9yIGBfX2FsbG9jX3BhZ2VzX25vcHJvZmAgYXJlIG91dCBzaW5jZSB0aGV5IGFyZSB1YmlxdWl0b3VzLiBCdXQgaXMgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCBnZW5lcmFsIG9yIGlzIGl0IG1vcmUgc3BlY2lmaWMgdG8gYnVsayBhbGxvY2F0aW9uIGNhbGxzPyBJdCYjMzk7cyBjYWxsZWQgYnkgdGhlIGJ1bGsgYWxsb2NhdGlvbiBjYWxsZXJzIGxpa2UgYHZtX2FyZWFfYWxsb2NfcGFnZXNgLCBgYnRyZnNfYWxsb2NfcGFnZV9hcnJheWAsIGV0Yy4gSSB0aGluayBpdCBpcyBhIHNwZWNpZmljIGJ1bGsgYWxsb2NhdG9yLgoKQnV0IHdhaXQsIGBrbXNhbl9hbGxvY19wYWdlYCBpcyBjYWxsZWQgZnJvbSBgX19hbGxvY19mcm96ZW5fcGFnZXNfbm9wcm9mYCwgd2hpY2ggaXMgY2FsbGVkIHdoZW5ldmVyIEtNU0FOIGlzIGVuYWJsZWQuICBUaGVyZWZvcmUsIGl0IGlzIHViaXF1aXRvdXMgaWYgS01TQU4gaXMgZW5hYmxlZC4KClNvLCBJIHRoaW5rIEkgY2FuIGluY2x1ZGUgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCBpbiBgRm9jdXNTeW1ib2xzYCBzaW5jZSB0aGF0JiMzOTtzIHdoZXJlIHRoZSAqc3BlY2lmaWMqIGNoYW5nZSBpcy4gVGhlIHJlbGV2YW50IGZ1bmN0aW9ucyBhcmU6IGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAsIGBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2ZgLCBgdm1fYXJlYV9hbGxvY19wYWdlc2AsIGBhcmVuYV9hbGxvY19wYWdlc2AsIGBpb19yZWdpb25fYWxsb2NhdGVfcGFnZXNgLCBhbmQgYGNvcHlfc3BsaWNlX3JlYWRgLgoKRmluYWxseSwgZG9lcyB0aGlzIGNvZGUgZGVwZW5kIG9uIGFueSBzcGVjaWFsIGNvbmZpZz8gWWVzLCBga21zYW5fYWxsb2NfcGFnZWAgaXMgcGFydCBvZiBLTVNBTiAoYENPTkZJR19LTVNBTmApLCBidXQgdGhlIGJ1bGsgYWxsb2NhdGlvbiBjb2RlIGl0c2VsZiBpcyBhbHdheXMgY29tcGlsZWQuIFNvLCBJIGhhdmUgdG8gYmUgbWluZGZ1bCB0aGF0IHRoZSBLTVNBTiBwYXJ0IG1pZ2h0IG5vdCBhbHdheXMgYmUgYWN0aXZlLiBCdXQgdGhlIG1vZGlmaWNhdGlvbiB0byBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIGl0c2VsZiBpcyBhbHdheXMgcHJlc2VudCwgd2hpY2ggbWFrZXMgaXQgYSBnb29kIHRhcmdldC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTI6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS01TQU4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMjowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjQ1NwoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJiMzOTttIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyBLTVNBTiBpbiB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgSSYjMzk7bSB0aGlua2luZywgJiMzNDtLTVNBTi4uLiB3aGVyZSBkb2VzIHRoYXQgZml0IGludG8gdGhlIHBpY3R1cmU/JiMzNDsgTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGNoZWNrIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhpcyBpcyBzb21ldGhpbmcgdGhhdCYjMzk7cyBldmVuICplbmFibGVkKiBvciAqY29uZmlndXJhYmxlKiBpbiB0aGUgY3VycmVudCBidWlsZC4gU28sIEkmIzM5O20gZ29pbmcgdG8ga2ljayBvZmYgYSBzZWFyY2ggZm9yICYjMzQ7S01TQU4mIzM0OyB3aXRoaW4gS2NvbmZpZy4gVGhhdCBzZWVtcyBsaWtlIHRoZSBsb2dpY2FsIGZpcnN0IHN0ZXAgdG8gZGV0ZXJtaW5lIGhvdyBkZWVwIHRoaXMgcmFiYml0IGhvbGUgZ29lcy4gSSBuZWVkIHRvIHF1aWNrbHkgZXN0YWJsaXNoIGlmIGl0JiMzOTtzIGV2ZW4gcHJlc2VudCBhcyBhIGNvbmZpZ3VyYWJsZSBvcHRpb24gYW5kIHdoYXQgZGVwZW5kZW5jaWVzIGl0IGhhcy4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiYXNlIHRvIGdvIGZyb20sIGVpdGhlciB0byBsb29rIGF0IHRoZSBvdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbnMsIG9yIHRvIHVzZSB0aGlzIGluZm9ybWF0aW9uIHRvIGRldGVybWluZSBob3cgdGhlIGNvbmZpZ3VyYXRpb24gYWZmZWN0cyB0aGUgYnVpbGQgaXRzZWxmLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMjowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS01TQU4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtsaWIvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2xpYi9LY29uZmlnLmttc2FuPTU9Y29uZmlnIEhBVkVfS01TQU5fQ09NUElMRVJcbi0tXG5saWIvS2NvbmZpZy5rbXNhbi03LVxubGliL0tjb25maWcua21zYW46ODpjb25maWcgS01TQU5cbmxpYi9LY29uZmlnLmttc2FuLTktXHRib29sIFwmIzM0O0tNU0FOOiBkZXRlY3RvciBvZiB1bmluaXRpYWxpemVkIHZhbHVlcyB1c2VcJiMzNDtcbi0tXG5saWIvS2NvbmZpZy5rbXNhbj0yNj1pZiBLTVNBTlxubGliL0tjb25maWcua21zYW4tMjctXG5saWIvS2NvbmZpZy5rbXNhbjoyODpjb25maWcgS01TQU5fQ0hFQ0tfUEFSQU1fUkVUVkFMXG5saWIvS2NvbmZpZy5rbXNhbi0yOS1cdGJvb2wgXCYjMzQ7Q2hlY2sgZm9yIHVuaW5pdGlhbGl6ZWQgdmFsdWVzIHBhc3NlZCB0byBhbmQgcmV0dXJuZWQgZnJvbSBmdW5jdGlvbnNcJiMzNDtcbi0tXG5saWIvS2NvbmZpZy5rbXNhbi00MS1cbmxpYi9LY29uZmlnLmttc2FuOjQyOmNvbmZpZyBLTVNBTl9LVU5JVF9URVNUXG5saWIvS2NvbmZpZy5rbXNhbi00My1cdHRyaXN0YXRlIFwmIzM0O0tNU0FOIGludGVncmF0aW9uIHRlc3Qgc3VpdGVcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMjowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjkwNgoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIENvbmZpZ3VyYXRpb24gQ2hlY2sqKgoKT2theSwgc28gYENPTkZJR19LTVNBTmAgaXMgZGVmaW5lZCB3aXRoaW4gYGxpYi9LY29uZmlnLmttc2FuYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGFjdCBvZiBlbmFibGluZyBvciBkaXNhYmxpbmcgdGhpcyBmZWF0dXJlLCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyBtZW1vcnkgYWxsb2NhdGlvbi4gTGV0JiMzOTtzIGRlbHZlIGludG8gYGluY2x1ZGUvbGludXgva21zYW4uaGAgcmlnaHQgYXdheS4gSSYjMzk7bGwgbmVlZCB0byBleGFtaW5lIHRoZSBkZWZpbml0aW9uIG9mIGBrbXNhbl9hbGxvY19wYWdlYCB1bmRlciBib3RoIHNjZW5hcmlvcyAtIHdpdGggYENPTkZJR19LTVNBTmAgZW5hYmxlZCBhbmQgZGlzYWJsZWQgLSB0byBzZWUgaG93IHRoZSBpbXBsZW1lbnRhdGlvbiBjaGFuZ2VzLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSByZWFsIGRpZmZlcmVuY2Ugd2lsbCBiZS4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGF0JiMzOTtzIHdoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDEyOjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ttc2FuX2FsbG9jX3BhZ2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2ttc2FuLmg9NTc9Ym9vbCBfX2luaXQgX19tdXN0X2NoZWNrIGttc2FuX21lbWJsb2NrX2ZyZWVfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UsXG4tLVxuaW5jbHVkZS9saW51eC9rbXNhbi5oLTYwLS8qKlxuaW5jbHVkZS9saW51eC9rbXNhbi5oOjYxOiAqIGttc2FuX2FsbG9jX3BhZ2UoKSAtIE5vdGlmeSBLTVNBTiBhYm91dCBhbiBhbGxvY19wYWdlcygpIGNhbGwuXG5pbmNsdWRlL2xpbnV4L2ttc2FuLmgtNjItICogQHBhZ2U6ICBzdHJ1Y3QgcGFnZSBwb2ludGVyIHJldHVybmVkIGJ5IGFsbG9jX3BhZ2VzKCkuXG4tLVxuaW5jbHVkZS9saW51eC9rbXNhbi5oLTY4LSAqL1xuaW5jbHVkZS9saW51eC9rbXNhbi5oOjY5OnZvaWQga21zYW5fYWxsb2NfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyLCBnZnBfdCBmbGFncyk7XG5pbmNsdWRlL2xpbnV4L2ttc2FuLmgtNzAtXG4tLVxuaW5jbHVkZS9saW51eC9rbXNhbi5oPTMxNT1zdGF0aWMgaW5saW5lIHZvaWQga21zYW5fdGFza19leGl0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaylcbi0tXG5pbmNsdWRlL2xpbnV4L2ttc2FuLmgtMzE4LVxuaW5jbHVkZS9saW51eC9rbXNhbi5oOjMxOTpzdGF0aWMgaW5saW5lIHZvaWQga21zYW5fYWxsb2NfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyLFxuaW5jbHVkZS9saW51eC9rbXNhbi5oLTMyMC1cdFx0XHRcdCAgICBnZnBfdCBmbGFncylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTI6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc0MTMKCQkJCQkJCW91dHB1dDogMTMzCgkJCQkJCQl0aG91Z2h0czogMzQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIFRoaXMgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBteSBicmFpbiB6ZXJvZXMgaW4gb24gdGhlIGNvbmRpdGlvbmFsIGxvZ2ljLiBga21zYW5fYWxsb2NfcGFnZSgpYCBpcyBhbiBlbXB0eSBpbmxpbmUgdW5sZXNzIGBDT05GSUdfS01TQU5gIGlzIGZsaXBwZWQgb24uIElmIEtNU0FOICppcyogZW5hYmxlZCwgaXQga2lja3Mgb2ZmIEtNU0FOJiMzOTtzIHNoYWRvdyBhbmQgb3JpZ2luIGluaXRpYWxpemF0aW9uLiBBbmQgdGhlbiB0aGVyZSYjMzk7cyBgdHJhY2VfbW1fcGFnZV9hbGxvY2AsIHdoaWNoIGlzIGd1YXJkZWQgYnkgZWl0aGVyIHRyYWNpbmcgb3IgYENPTkZJR19FVkVOVF9UUkFDSU5HYC4gU28sIHRvIGFjdHVhbGx5IGV4ZXJjaXNlIHRoZSBjaGFuZ2VzIG1hZGUgYnkgdGhpcyBwYXRjaCwgS01TQU4gaXMgYWJzb2x1dGVseSBrZXkuIFRoYXTigJlzIHRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gcmVtZW1iZXIuCgpMZXQmIzM5O3MgZG8gYSBxdWljayBydW5kb3duIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZy4gSSBzZWUgdGhhdCBgV29ydGhGdXp6aW5nYCBpcyBzZXQgdG8gYHRydWVgLCB3aGljaCBtYWtlcyBzZW5zZSBiZWNhdXNlIHdlJiMzOTtyZSB0b3VjaGluZyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGZ1bmN0aW9ucy4gVGhlIGBSZWFzb25pbmdgIHNlY3Rpb24gaGl0cyB0aGUgbmFpbCBvbiB0aGUgaGVhZCDigJMgdGhpcyBwYXRjaCBpcyBtb2RpZnlpbmcgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCAoYW5kIGl0cyBtZW1wb2xpY3kgY291bnRlcnBhcnQpIGluIGBtbS9wYWdlX2FsbG9jLmNgIGFuZCBpbnRyb2R1Y2luZyBjYWxscyB0byBgdHJhY2VfbW1fcGFnZV9hbGxvY2AgYW5kIGBrbXNhbl9hbGxvY19wYWdlYC4gVGhlIHB1cnBvc2UgaXMgdG8gY29ycmVjdGx5IGluaXRpYWxpemUgS01TQU4gc2hhZG93IG1ldGFkYXRhIGZvciBidWxrLWFsbG9jYXRlZCBwYWdlcy4gSSBhZ3JlZSwgdGhpcyBpcyBhIGNsZWFyIG1vZGlmaWNhdGlvbiB0byB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudC4KCkkgY29uZmlybSB0aGUgYEZvY3VzU3ltYm9sc2AgYXJlIGFwcHJvcHJpYXRlbHkgc2NvcGVkIHRvIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAgYW5kIGl0cyBtZW1wb2xpY3kgdmFyaWFudC4gTm8gd2lkZXIgc2NvcGUgbmVlZGVkIGFzIHRoZSBjb25jZXJuIGlzIGJ1bGsgYWxsb2NhdGlvbi4KCkFuZCBvYnZpb3VzbHksIHRoZSBgRW5hYmxlQ29uZmlnc2AgYXJlIGNvcnJlY3RseSBzcGVjaWZpZWQgYXMgYEtNU0FOYC4gV2UgbmVlZCBLTVNBTiBlbmFibGVkIGZvciBhbnkgb2YgdGhpcyBsb2dpYyB0byBhY3R1YWxseSBkbyBhbnl0aGluZy4KCkhtbSwgYW0gSSBtaXNzaW5nIGFueXRoaW5nPyBJIHRoaW5rIEkmIzM5O3ZlIGNvdmVyZWQgYWxsIHRoZSBiYXNlcy4gVGhlIHN5bWJvbHMgYW5kIGNvbmZpZ3Mgc2VlbSByaWdodCwgYW5kIHRoZXJlIGFyZW4mIzM5O3QgYW55IG90aGVyIG9idmlvdXMgZGVwZW5kZW5jaWVzIG9yIGNvbmZpZ3VyYXRpb25zIEkgbmVlZCB0byB3b3JyeSBhYm91dC4KClRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLiBJIHRoaW5rIEkmIzM5O20gZ29vZCB0byBnby4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTI6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tNU0FOJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YWxsb2NfcGFnZXNfYnVsa19ub3Byb2YmIzM0OywKICAgICYjMzQ7YWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIG1tL3BhZ2VfYWxsb2MuYyBieSBhZGRpbmcgdHJhY2VfbW1fcGFnZV9hbGxvYyBhbmQga21zYW5fYWxsb2NfcGFnZSB0byBhbGxvY19wYWdlc19idWxrX25vcHJvZi4gVGhpcyBlbnN1cmVzIGJ1bGstYWxsb2NhdGVkIHBhZ2VzIGhhdmUgcHJvcGVyIEtNU0FOIHNoYWRvdyBtZXRhZGF0YSBhbmQgYWxsb2NhdGlvbiB0cmFjaW5nLiBUaGUgY2hhbmdlIG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgYW5kIHdhcnJhbnRzIGZ1enppbmcsIGVzcGVjaWFsbHkgdW5kZXIgS01TQU4uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tNU0FOJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YWxsb2NfcGFnZXNfYnVsa19ub3Byb2YmIzM0OywKICAgICYjMzQ7YWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIG1tL3BhZ2VfYWxsb2MuYyBieSBhZGRpbmcgdHJhY2VfbW1fcGFnZV9hbGxvYyBhbmQga21zYW5fYWxsb2NfcGFnZSB0byBhbGxvY19wYWdlc19idWxrX25vcHJvZi4gVGhpcyBlbnN1cmVzIGJ1bGstYWxsb2NhdGVkIHBhZ2VzIGhhdmUgcHJvcGVyIEtNU0FOIHNoYWRvdyBtZXRhZGF0YSBhbmQgYWxsb2NhdGlvbiB0cmFjaW5nLiBUaGUgY2hhbmdlIG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgYW5kIHdhcnJhbnRzIGZ1enppbmcsIGVzcGVjaWFsbHkgdW5kZXIgS01TQU4uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDEyOjA5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTI6MDk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIG1pc3NpbmcgYHRyYWNlX21tX3BhZ2VfYWxsb2NgIGFuZCBga21zYW5fYWxsb2NfcGFnZWAgY2FsbHMgdG8gYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKClgIGluIGBtbS9wYWdlX2FsbG9jLmNgIGZvciBwYWdlcyBhbGxvY2F0ZWQgZnJvbSBwZXItQ1BVIGxpc3RzLlxuXG5UaGlzIG1vZGlmaWNhdGlvbiBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBrZXJuZWwgaW5mby1sZWFrcywgdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzLCBvciBmYXVsdHkgYnVmZmVyIGJvdW5kcy4gQW55IHBvdGVudGlhbCByZWdyZXNzaW9ucyAoc3VjaCBhcyBsb2NraW5nIG9yIGNvbnRleHQgaXNzdWVzIHdoaWxlIGhvbGRpbmcgdGhlIFBDUCBzcGlubG9jayBvciBpbnZhbGlkIHBhZ2UgcG9pbnRlcnMpIGFyZSBkZXRlY3RhYmxlIGJ5IExPQ0tERVAsIEtBU0FOLCBhbmQgc3RhbmRhcmQgZGVidWdnaW5nIGZhY2lsaXRpZXMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAyNmFiMzBkZDM5ZmM3ODY4ZmUzMjBjOTAyNmU3Y2Q5ZTY0ZWFhMzVmCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBTZXAgOCAxMjowODozNCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL3BhZ2VfYWxsb2MuYyBiL21tL3BhZ2VfYWxsb2MuYwppbmRleCAxMmZhYzkwODRjNDgzLi5lYWM0MTllZWY2OTdhIDEwMDY0NAotLS0gYS9tbS9wYWdlX2FsbG9jLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vcGFnZV9hbGxvYy5jCkBAIC01Mjc5LDYgJiM0Mzs1Mjc5LDggQEAgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnBfdCBnZnAsIGludCBwcmVmZXJyZWRfbmlkLAogCQlucl9hY2NvdW50JiM0MzsmIzQzOzsKIAogCQlwcmVwX25ld19wYWdlKHBhZ2UsIDAsIGdmcCwgQUxMT0NfREVGQVVMVCk7CiYjNDM7CQl0cmFjZV9tbV9wYWdlX2FsbG9jKHBhZ2UsIDAsIGdmcCwgYWMubWlncmF0ZXR5cGUpOwomIzQzOwkJa21zYW5fYWxsb2NfcGFnZShwYWdlLCAwLCBnZnAgJmFtcDsgfl9fR0ZQX1JFQ0xBSU0pOwogCQlzZXRfcGFnZV9yZWZjb3VudGVkKHBhZ2UpOwogCQlwYWdlX2FycmF5W25yX3BvcHVsYXRlZCYjNDM7JiM0MztdID0gcGFnZTsKIAl9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMjowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDk5CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogOTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRGl2aW5nIGludG8gdGhlIFBhZ2UgQWxsb2NhdGlvbiBDb2RlKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5IHdpdGggYG1tL3BhZ2VfYWxsb2MuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCBmdW5jdGlvbiBhbmQgaXRzIGludGVyYWN0aW9ucy4gRmlyc3QsIEkmIzM5O2xsIHNjcnV0aW5pemUgdGhlIGRpZmYgYW5kIHRoZSBjb2RlIHN1cnJvdW5kaW5nIGl0OyBJIHdhbnQgdG8gc2VlIGV4YWN0bHkgd2hhdCYjMzk7cyBjaGFuZ2VkIGFuZCB0aGUgY29udGV4dC4gCgpUaGVuLCBJJiMzOTtsbCBzd2l0Y2ggZ2VhcnMgYW5kIGxldmVyYWdlIG15IHRvb2xzLiBJJiMzOTtsbCBlaXRoZXIgdXNlIGBncmVwcGVyYCBvciBqdXN0IHJlYWQgdGhlIGZpbGUgZGlyZWN0bHksIHRvIHRyYWNlIHRoZSBjYWxscyBhbmQgaW50ZWdyYXRpb24gcG9pbnRzIGZvciBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgLCBlc3BlY2lhbGx5IGNvbmNlcm5pbmcgS01TQU4uIEkmIzM5O20gbG9va2luZyBmb3Igd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQsIHdoYXQgaXQmIzM5O3MgZG9pbmcsIGFuZCBob3cgaXQgcG90ZW50aWFsbHkgaW50ZXJhY3RzIHdpdGggbWVtb3J5IHNhZmV0eSBtZWNoYW5pc21zLgoKRmluYWxseSwgSSYjMzk7bGwgemVybyBpbiBvbiB0aGUgc3BlY2lmaWMgYXJlYSBhcm91bmQgbGluZSA1Mjc5IGluIGBtbS9wYWdlX2FsbG9jLmNgLiBUaGlzIGlzIGxpa2VseSB3aGVyZSB0aGUgY29yZSBsb2dpYyBvciBzb21lIGtleSBkZWNpc2lvbiBwb2ludCByZXNpZGVzLCBhbmQgSSBuZWVkIHRvIGNhcmVmdWxseSByZWFkIHRoZSBzdXJyb3VuZGluZyBsaW5lcyB0byBncmFzcCB0aGUgZmxvdyBhbmQgcG90ZW50aWFsIGlzc3VlcyBvciBvcHRpbWl6YXRpb25zLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDEyOjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vcGFnZV9hbGxvYy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTI2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs1MjYwOlx0XHRwY3BfbGlzdCA9IFx1MDAyNnBjcC1cdTAwM2VsaXN0c1tvcmRlcl90b19waW5kZXgoYWMubWlncmF0ZXR5cGUsIDApXTtcbjUyNjE6XHRcdHdoaWxlIChucl9wb3B1bGF0ZWQgXHUwMDNjIG5yX3BhZ2VzKSB7XG41MjYyOlx0XG41MjYzOlx0XHRcdC8qIFNraXAgZXhpc3RpbmcgcGFnZXMgKi9cbjUyNjQ6XHRcdFx0aWYgKHBhZ2VfYXJyYXlbbnJfcG9wdWxhdGVkXSkge1xuNTI2NTpcdFx0XHRcdG5yX3BvcHVsYXRlZCYjNDM7JiM0Mzs7XG41MjY2Olx0XHRcdFx0Y29udGludWU7XG41MjY3Olx0XHRcdH1cbjUyNjg6XHRcbjUyNjk6XHRcdFx0cGFnZSA9IF9fcm1xdWV1ZV9wY3BsaXN0KHpvbmUsIDAsIGFjLm1pZ3JhdGV0eXBlLCBhbGxvY19mbGFncyxcbjUyNzA6XHRcdFx0XHRcdFx0XHRcdFx0cGNwLCBwY3BfbGlzdCk7XG41MjcxOlx0XHRcdGlmICh1bmxpa2VseSghcGFnZSkpIHtcbjUyNzI6XHRcdFx0XHQvKiBUcnkgYW5kIGFsbG9jYXRlIGF0IGxlYXN0IG9uZSBwYWdlICovXG41MjczOlx0XHRcdFx0aWYgKCFucl9hY2NvdW50KSB7XG41Mjc0Olx0XHRcdFx0XHRwY3Bfc3Bpbl91bmxvY2socGNwKTtcbjUyNzU6XHRcdFx0XHRcdGdvdG8gZmFpbGVkO1xuNTI3NjpcdFx0XHRcdH1cbjUyNzc6XHRcdFx0XHRicmVhaztcbjUyNzg6XHRcdFx0fVxuNTI3OTpcdFx0XHRucl9hY2NvdW50JiM0MzsmIzQzOztcbjUyODA6XHRcbjUyODE6XHRcdFx0cHJlcF9uZXdfcGFnZShwYWdlLCAwLCBnZnAsIEFMTE9DX0RFRkFVTFQpO1xuNTI4MjpcdFx0XHR0cmFjZV9tbV9wYWdlX2FsbG9jKHBhZ2UsIDAsIGdmcCwgYWMubWlncmF0ZXR5cGUpO1xuNTI4MzpcdFx0XHRrbXNhbl9hbGxvY19wYWdlKHBhZ2UsIDAsIGdmcCBcdTAwMjYgfl9fR0ZQX1JFQ0xBSU0pO1xuNTI4NDpcdFx0XHRzZXRfcGFnZV9yZWZjb3VudGVkKHBhZ2UpO1xuNTI4NTpcdFx0XHRwYWdlX2FycmF5W25yX3BvcHVsYXRlZCYjNDM7JiM0MztdID0gcGFnZTtcbjUyODY6XHRcdH1cbjUyODc6XHRcbjUyODg6XHRcdHBjcF9zcGluX3VubG9jayhwY3ApO1xuNTI4OTpcdFxuNTI5MDpcdFx0X19jb3VudF96aWRfdm1fZXZlbnRzKFBHQUxMT0MsIHpvbmVfaWR4KHpvbmUpLCBucl9hY2NvdW50KTtcbjUyOTE6XHRcdHpvbmVfc3RhdGlzdGljcyh6b25lbGlzdF96b25lKGFjLnByZWZlcnJlZF96b25lcmVmKSwgem9uZSwgbnJfYWNjb3VudCk7XG41MjkyOlx0XG41MjkzOlx0b3V0OlxuNTI5NDpcdFx0cmV0dXJuIG5yX3BvcHVsYXRlZDtcbjUyOTU6XHRcbjUyOTY6XHRmYWlsZWQ6XG41Mjk3Olx0XHRwYWdlID0gX19hbGxvY19wYWdlc19ub3Byb2YoZ2ZwLCAwLCBwcmVmZXJyZWRfbmlkLCBub2RlbWFzaywgQUxMT0NfREVGQVVMVCk7XG41Mjk4Olx0XHRpZiAocGFnZSlcbjUyOTk6XHRcdFx0cGFnZV9hcnJheVtucl9wb3B1bGF0ZWQmIzQzOyYjNDM7XSA9IHBhZ2U7XG41MzAwOlx0XHRnb3RvIG91dDtcbjUzMDE6XHR9XG41MzAyOlx0RVhQT1JUX1NZTUJPTF9HUEwoYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YpO1xuNTMwMzpcdFxuNTMwNDpcdC8qXG41MzA1Olx0ICogZnJlZV9wYWdlc19idWxrIC0gRnJlZSBhbiBhcnJheSBvZiBvcmRlci0wIHBhZ2VzXG41MzA2Olx0ICogQHBhZ2VfYXJyYXk6IEFycmF5IG9mIHBhZ2VzIHRvIGZyZWVcbjUzMDc6XHQgKiBAbnJfcGFnZXM6IFRoZSBudW1iZXIgb2YgcGFnZXMgaW4gdGhlIGFycmF5XG41MzA4Olx0ICpcbjUzMDk6XHQgKiBGcmVlIHRoZSBvcmRlci0wIHBhZ2VzLiBBZGphY2VudCBlbnRyaWVzIHdob3NlIFBGTnMgZm9ybSBhIGNvbnRpZ3VvdXNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTI6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzIzMAoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBga21zYW5fYWxsb2NfcGFnZWAgVXNhZ2UqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUga2VybmVsIG1lbW9yeSBhbGxvY2F0b3IuIEkgbmVlZCB0byBnZXQgYSBmaXJtIGdyYXNwIG9uIHRoZSBzY29wZSBhbmQgaW1wYWN0IG9mIGBrbXNhbl9hbGxvY19wYWdlYC4gTXkgcHJpbWFyeSBmb2N1cyBpcyBwaW5wb2ludGluZyBldmVyeSBpbnN0YW5jZSB3aGVyZSBga21zYW5fYWxsb2NfcGFnZWAgaXMgaW52b2tlZCB3aXRoaW4gYG1tL3BhZ2VfYWxsb2MuY2AgYW5kLCBjcnVjaWFsbHksIGFueSBjYWxscyBmcm9tIG90aGVyIG1vZHVsZXMgdGhhdCBpbnRlcmFjdCB3aXRoIHRoZSBwYWdlIGFsbG9jYXRvci4gVW5kZXJzdGFuZGluZyB0aGUgY2FsbCBncmFwaCBhcm91bmQgdGhpcyBmdW5jdGlvbiBpcyBwYXJhbW91bnQgdG8gY29ycmVjdGx5IHVuZGVyc3RhbmRpbmcgaXQuIEkmIzM5O2xsIG5lZWQgdG8gdXNlIHRvb2xzIHRvIGFjY3VyYXRlbHkgYW5kIGVmZmljaWVudGx5IG1hcCB0aGUgY29kZSBiYXNlLiBJJiMzOTtsbCBuZWVkIHRvIHF1aWNrbHkgdW5kZXJzdGFuZCBpZiBpdCYjMzk7cyBvbmx5IGNhbGxlZCBkaXJlY3RseSBmcm9tIG90aGVyIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIHNhbWUgc291cmNlLCBvciBpZiBpdCBjcm9zc2VzIHNvdXJjZSBib3VuZGFyaWVzLiBJJiMzOTtsbCBmb2N1cyBvbiBob3cgdGhlIHJlc3VsdCBpcyBiZWluZyB1c2VkIGFuZCB3aGF0IGltcGxpY2F0aW9ucyBleGlzdCBkdWUgdG8gaG93IHRoZSBmdW5jdGlvbiYjMzk7cyBiZWhhdmlvciBjb3VsZCBkaWZmZXIgZnJvbSBhIG5vcm1hbCBwYWdlIGFsbG9jYXRpb24sIGFuZCBob3cgdGhpcyByZWxhdGVzIHRvIEtNU0FOJiMzOTtzIGluc3RydW1lbnRhdGlvbi4gSSBzdXNwZWN0IHRoaXMgd2lsbCBiZSBpbnRlcmVzdGluZywgYW5kIHBvc3NpYmx5IHJldmVhbCBzdWJ0bGUgaW50ZXJhY3Rpb25zIHJlbGF0ZWQgdG8gdGhlIG1lbW9yeSBzYW5pdGl6YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDEyOjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ttc2FuX2FsbG9jX3BhZ2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0va21zYW4vc2hhZG93LmM9MTY5PUVYUE9SVF9TWU1CT0woa21zYW5fY29weV9wYWdlX21ldGEpO1xubW0va21zYW4vc2hhZG93LmMtMTcwLVxubW0va21zYW4vc2hhZG93LmM6MTcxOnZvaWQga21zYW5fYWxsb2NfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyLCBnZnBfdCBmbGFncylcbm1tL2ttc2FuL3NoYWRvdy5jLTE3Mi17XG4tLVxubW0vcGFnZV9hbGxvYy5jPTUxNjA9dW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnBfdCBnZnAsIGludCBwcmVmZXJyZWRfbmlkLFxuLS1cbm1tL3BhZ2VfYWxsb2MuYy01MjgyLVx0XHR0cmFjZV9tbV9wYWdlX2FsbG9jKHBhZ2UsIDAsIGdmcCwgYWMubWlncmF0ZXR5cGUpO1xubW0vcGFnZV9hbGxvYy5jOjUyODM6XHRcdGttc2FuX2FsbG9jX3BhZ2UocGFnZSwgMCwgZ2ZwIFx1MDAyNiB+X19HRlBfUkVDTEFJTSk7XG5tbS9wYWdlX2FsbG9jLmMtNTI4NC1cdFx0c2V0X3BhZ2VfcmVmY291bnRlZChwYWdlKTtcbi0tXG5tbS9wYWdlX2FsbG9jLmM9NTM0NT1zdGF0aWMgaW5saW5lIGJvb2wgYWxsb2Nfbm9sb2NrX2FsbG93ZWQodm9pZClcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNTM3MC0gKlxubW0vcGFnZV9hbGxvYy5jOjUzNzE6ICogU3BlY2lmeSBfX0dGUF9aRVJPIHRvIG1ha2Ugc3VyZSB0aGF0IGNhbGwgdG8ga21zYW5fYWxsb2NfcGFnZSgpIGJlbG93XG5tbS9wYWdlX2FsbG9jLmMtNTM3Mi0gKiBpcyBzYWZlIGluIGFueSBjb250ZXh0LiBBbHNvIHplcm9pbmcgdGhlIHBhZ2UgaXMgbWFuZGF0b3J5IGZvclxuLS1cbm1tL3BhZ2VfYWxsb2MuYz01Mzg1PXN0cnVjdCBwYWdlICpfX2FsbG9jX2Zyb3plbl9wYWdlc19ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG4tLVxubW0vcGFnZV9hbGxvYy5jLTU0NjEtXHR0cmFjZV9tbV9wYWdlX2FsbG9jKHBhZ2UsIG9yZGVyLCBhbGxvY19nZnAsIGFjLm1pZ3JhdGV0eXBlKTtcbm1tL3BhZ2VfYWxsb2MuYzo1NDYyOlx0a21zYW5fYWxsb2NfcGFnZShwYWdlLCBvcmRlciwgYWxsb2NfZ2ZwKTtcbm1tL3BhZ2VfYWxsb2MuYy01NDYzLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMjowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTkzCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogNjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgUmVjZW50IE1lbW9yeSBBbGxvY2F0aW9uIEJlaGF2aW9yKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGluLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gd2hhdCBleGFjdGx5IGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAgd2FzIGRvaW5nIHByaW9yIHRvIHRoZSBjaGFuZ2UgSSYjMzk7bSBsb29raW5nIGF0LiBUaGUgYmVzdCB3YXkgdG8gdW5kZXJzdGFuZCBpdHMgcHJlLWNoYW5nZSBvcGVyYXRpb24gaXMgYnkgZXhhbWluaW5nIGFueSBhc3NvY2lhdGVkICYjMzQ7aG9vayYjMzQ7IGZ1bmN0aW9ucyB0aGF0IHdlcmUgZXhlY3V0ZWQgYWZ0ZXIgbWVtb3J5IHdhcyBhbGxvY2F0ZWQuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgZm9yIGEgYHBvc3RfYWxsb2NfaG9va2Agb3Igc29tZXRoaW5nIHNpbWlsYXIg4oCTIEkmIzM5O2xsIHN0YXJ0IGxvb2tpbmcgaW4gYG1tL3BhZ2VfYWxsb2MuY2AsIGFzIHRoYXQmIzM5O3MgdGhlIGxpa2VseSBsb2NhdGlvbiBmb3IgbWVtb3J5IGFsbG9jYXRpb24gcm91dGluZXMuIExldCBtZSBzcGVjaWZpY2FsbHkgc2VhcmNoIGZvciB0aGUgdGVybSBgcG9zdF9hbGxvY19ob29rYCB3aXRoaW4gYG1tL3BhZ2VfYWxsb2MuY2AgdG8gc2VlIGlmIGl0IGV4aXN0cyBhbmQsIGlmIHNvLCB3aGF0IGl0cyBjb250ZXh0IGlzLiBJJiMzOTttIGhvcGluZyB0byBxdWlja2x5IGdyYXNwIHRoZSBpbXBsaWNhdGlvbnMgb2YgYW55IGFsdGVyYXRpb25zIHRvIHRoYXQgcGFydCBvZiB0aGUgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTI6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cG9zdF9hbGxvY19ob29rJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2NvbXBhY3Rpb24uYz04ND1zdGF0aWMgc3RydWN0IHBhZ2UgKm1hcmtfYWxsb2NhdGVkX25vcHJvZihzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyLCBnZnBfdCBnZnBfZmxhZ3MpXG5tbS9jb21wYWN0aW9uLmMtODUte1xubW0vY29tcGFjdGlvbi5jOjg2Olx0cG9zdF9hbGxvY19ob29rKHBhZ2UsIG9yZGVyLCBfX0dGUF9NT1ZBQkxFLCBBTExPQ19ERUZBVUxUKTtcbm1tL2NvbXBhY3Rpb24uYy04Ny1cdHNldF9wYWdlX3JlZmNvdW50ZWQocGFnZSk7XG4tLVxubW0vY29tcGFjdGlvbi5jPTE4NDU9c3RhdGljIHN0cnVjdCBmb2xpbyAqY29tcGFjdGlvbl9hbGxvY19ub3Byb2Yoc3RydWN0IGZvbGlvICpzcmMsIHVuc2lnbmVkIGxvbmcgZGF0YSlcbi0tXG5tbS9jb21wYWN0aW9uLmMtMTg4Mi1cbm1tL2NvbXBhY3Rpb24uYzoxODgzOlx0cG9zdF9hbGxvY19ob29rKFx1MDAyNmRzdC1cdTAwM2VwYWdlLCBvcmRlciwgX19HRlBfTU9WQUJMRSwgQUxMT0NfREVGQVVMVCk7XG5tbS9jb21wYWN0aW9uLmMtMTg4NC1cdHNldF9wYWdlX3JlZmNvdW50ZWQoXHUwMDI2ZHN0LVx1MDAzZXBhZ2UpO1xuLS1cbm1tL21lbWNvbnRyb2wuYz0yNzc9c3RhdGljIHZvaWQgbWVtY2dfcmVwYXJlbnRfb2JqY2dzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbi0tXG5tbS9tZW1jb250cm9sLmMtMzEyLSAqIEEgbG90IG9mIHRoZSBjYWxscyB0byB0aGUgY2FjaGUgYWxsb2NhdGlvbiBmdW5jdGlvbnMgYXJlIGV4cGVjdGVkIHRvIGJlXG5tbS9tZW1jb250cm9sLmM6MzEzOiAqIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyLiBTaW5jZSB0aGUgY2FsbHMgdG8gbWVtY2dfc2xhYl9wb3N0X2FsbG9jX2hvb2soKSBhcmVcbm1tL21lbWNvbnRyb2wuYy0zMTQtICogY29uZGl0aW9uYWwgdG8gdGhpcyBzdGF0aWMgYnJhbmNoLCB3ZSYjMzk7bGwgaGF2ZSB0byBhbGxvdyBtb2R1bGVzIHRoYXQgZG9lc1xuLS1cbm1tL21lbWNvbnRyb2wuYz0zNTg5PXN0YXRpYyBpbmxpbmUgc2l6ZV90IG9ial9mdWxsX3NpemUoc3RydWN0IGttZW1fY2FjaGUgKnMpXG4tLVxubW0vbWVtY29udHJvbC5jLTM1OTctXG5tbS9tZW1jb250cm9sLmM6MzU5ODpib29sIF9fbWVtY2dfc2xhYl9wb3N0X2FsbG9jX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBsaXN0X2xydSAqbHJ1LFxubW0vbWVtY29udHJvbC5jLTM1OTktXHRcdFx0XHQgIGdmcF90IGZsYWdzLCB1bnNpZ25lZCBpbnQgc2xhYl9hbGxvY19mbGFncyxcbi0tXG5tbS9wYWdlX2FsbG9jLmM9MTgxMT1zdGF0aWMgaW5saW5lIGJvb2wgc2hvdWxkX3NraXBfaW5pdChnZnBfdCBmbGFncylcbi0tXG5tbS9wYWdlX2FsbG9jLmMtMTgyMC1cbm1tL3BhZ2VfYWxsb2MuYzoxODIxOmlubGluZSB2b2lkIHBvc3RfYWxsb2NfaG9vayhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyLFxubW0vcGFnZV9hbGxvYy5jLTE4MjItXHRcdFx0XHRnZnBfdCBnZnBfZmxhZ3MsIHVuc2lnbmVkIGludCBhbGxvY19mbGFncylcbi0tXG5tbS9wYWdlX2FsbG9jLmM9MTg3Nj1zdGF0aWMgdm9pZCBwcmVwX25ld19wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIsIGdmcF90IGdmcF9mbGFncyxcbi0tXG5tbS9wYWdlX2FsbG9jLmMtMTg3OC17XG5tbS9wYWdlX2FsbG9jLmM6MTg3OTpcdHBvc3RfYWxsb2NfaG9vayhwYWdlLCBvcmRlciwgZ2ZwX2ZsYWdzLCBhbGxvY19mbGFncyk7XG5tbS9wYWdlX2FsbG9jLmMtMTg4MC1cbi0tXG5tbS9wYWdlX2FsbG9jLmM9NzE5Nz1zdGF0aWMgdm9pZCBzcGxpdF9mcmVlX2Zyb3plbl9wYWdlcyhzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LCBnZnBfdCBnZnBfbWFzaylcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNzIwNy1cbm1tL3BhZ2VfYWxsb2MuYzo3MjA4Olx0XHRcdHBvc3RfYWxsb2NfaG9vayhwYWdlLCBvcmRlciwgZ2ZwX21hc2ssIEFMTE9DX0RFRkFVTFQpO1xubW0vcGFnZV9hbGxvYy5jLTcyMDktXHRcdFx0aWYgKCFvcmRlcilcbi0tXG5tbS9wYWdlX2FsbG9jLmg9MjIzPWV4dGVybiB2b2lkIF9fZnJlZV9wYWdlc19jb3JlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG4tLVxubW0vcGFnZV9hbGxvYy5oLTIyNS1cbm1tL3BhZ2VfYWxsb2MuaDoyMjY6dm9pZCBwb3N0X2FsbG9jX2hvb2soc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlciwgZ2ZwX3QgZ2ZwX2ZsYWdzLFxubW0vcGFnZV9hbGxvYy5oLTIyNy1cdFx0ICAgICB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MpO1xuLS1cbm1tL3BlcmNwdS5jPTE2MTY9c3RhdGljIGJvb2wgcGNwdV9tZW1jZ19wcmVfYWxsb2NfaG9vayhzaXplX3Qgc2l6ZSwgZ2ZwX3QgZ2ZwLFxuLS1cbm1tL3BlcmNwdS5jLTE2MzQtXG5tbS9wZXJjcHUuYzoxNjM1OnN0YXRpYyB2b2lkIHBjcHVfbWVtY2dfcG9zdF9hbGxvY19ob29rKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZyxcbm1tL3BlcmNwdS5jLTE2MzYtXHRcdFx0XHQgICAgICAgc3RydWN0IHBjcHVfY2h1bmsgKmNodW5rLCBpbnQgb2ZmLFxuLS1cbm1tL3BlcmNwdS5jPTE2Nzk9cGNwdV9tZW1jZ19wcmVfYWxsb2NfaG9vayhzaXplX3Qgc2l6ZSwgZ2ZwX3QgZ2ZwLCBzdHJ1Y3Qgb2JqX2Nncm91cCAqKm9iamNncClcbi0tXG5tbS9wZXJjcHUuYy0xNjgzLVxubW0vcGVyY3B1LmM6MTY4NDpzdGF0aWMgdm9pZCBwY3B1X21lbWNnX3Bvc3RfYWxsb2NfaG9vayhzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csXG5tbS9wZXJjcHUuYy0xNjg1LVx0XHRcdFx0ICAgICAgIHN0cnVjdCBwY3B1X2NodW5rICpjaHVuaywgaW50IG9mZixcbi0tXG5tbS9wZXJjcHUuYz0xNzM1PXZvaWQgX19wZXJjcHUgKnBjcHVfYWxsb2Nfbm9wcm9mKHNpemVfdCBzaXplLCBzaXplX3QgYWxpZ24sIGJvb2wgcmVzZXJ2ZWQsXG4tLVxubW0vcGVyY3B1LmMtMTc5Ni1cdFx0fSBlbHNlIGlmIChtdXRleF9sb2NrX2tpbGxhYmxlKFx1MDAyNnBjcHVfYWxsb2NfbXV0ZXgpKSB7XG5tbS9wZXJjcHUuYzoxNzk3Olx0XHRcdHBjcHVfbWVtY2dfcG9zdF9hbGxvY19ob29rKG9iamNnLCBOVUxMLCAwLCBzaXplKTtcbm1tL3BlcmNwdS5jLTE3OTgtXHRcdFx0cmV0dXJuIE5VTEw7XG4tLVxubW0vcGVyY3B1LmMtMTkwOS1cbm1tL3BlcmNwdS5jOjE5MTA6XHRwY3B1X21lbWNnX3Bvc3RfYWxsb2NfaG9vayhvYmpjZywgY2h1bmssIG9mZiwgc2l6ZSk7XG5tbS9wZXJjcHUuYy0xOTExLVxuLS1cbm1tL3BlcmNwdS5jLTE5NDEtXG5tbS9wZXJjcHUuYzoxOTQyOlx0cGNwdV9tZW1jZ19wb3N0X2FsbG9jX2hvb2sob2JqY2csIE5VTEwsIDAsIHNpemUpO1xubW0vcGVyY3B1LmMtMTk0My1cbi0tXG5tbS9zbGFiLmg9ODU0PXN0YXRpYyBpbmxpbmUgZW51bSBub2RlX3N0YXRfaXRlbSBjYWNoZV92bXN0YXRfaWR4KHN0cnVjdCBrbWVtX2NhY2hlICpzKVxuLS1cbm1tL3NsYWIuaC04NjAtI2lmZGVmIENPTkZJR19NRU1DR1xubW0vc2xhYi5oOjg2MTpib29sIF9fbWVtY2dfc2xhYl9wb3N0X2FsbG9jX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBsaXN0X2xydSAqbHJ1LFxubW0vc2xhYi5oLTg2Mi1cdFx0XHRcdCAgZ2ZwX3QgZmxhZ3MsIHVuc2lnbmVkIGludCBzbGFiX2FsbG9jX2ZsYWdzLFxuLS1cbm1tL3NsdWIuYz0yNTA2PXN0YXRpYyBfX2Zhc3RwYXRoX2lubGluZVxubW0vc2x1Yi5jOjI1MDc6Ym9vbCBtZW1jZ19zbGFiX3Bvc3RfYWxsb2NfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZmxhZ3MsXG5tbS9zbHViLmMtMjUwOC1cdFx0XHRcdHNpemVfdCBzaXplLCB2b2lkICoqcCxcbi0tXG5tbS9zbHViLmMtMjUxNi1cbm1tL3NsdWIuYzoyNTE3Olx0aWYgKGxpa2VseShfX21lbWNnX3NsYWJfcG9zdF9hbGxvY19ob29rKHMsIGFjLVx1MDAzZWxydSwgZmxhZ3MsXG5tbS9zbHViLmMtMjUxOC1cdFx0XHRcdFx0XHRhYy1cdTAwM2VhbGxvY19mbGFncywgc2l6ZSwgcCkpKVxuLS1cbm1tL3NsdWIuYz0yNTUzPWJvb2wgbWVtY2dfc2xhYl9wb3N0X2NoYXJnZSh2b2lkICpwLCBnZnBfdCBmbGFncylcbi0tXG5tbS9zbHViLmMtMjYwNi1cbm1tL3NsdWIuYzoyNjA3Olx0cmV0dXJuIF9fbWVtY2dfc2xhYl9wb3N0X2FsbG9jX2hvb2socywgTlVMTCwgZmxhZ3MsIFNMQUJfQUxMT0NfREVGQVVMVCxcbm1tL3NsdWIuYy0yNjA4LVx0XHRcdFx0XHQgICAgMSwgXHUwMDI2cCk7XG4tLVxubW0vc2x1Yi5jLTI2MTEtI2Vsc2UgLyogQ09ORklHX01FTUNHICovXG5tbS9zbHViLmM6MjYxMjpzdGF0aWMgaW5saW5lIGJvb2wgbWVtY2dfc2xhYl9wb3N0X2FsbG9jX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsXG5tbS9zbHViLmMtMjYxMy1cdFx0XHRcdFx0ICAgICAgZ2ZwX3QgZmxhZ3MsXG4tLVxubW0vc2x1Yi5jPTI2MzQ9c3RydWN0IHJjdV9kZWxheWVkX2ZyZWUge1xuLS1cbm1tL3NsdWIuYy0yNjUzLSAqIC0ga2FzYW5fc2xhYl9hbGxvYygpXG5tbS9zbHViLmM6MjY1NDogKiAtIG1lbWNnX3NsYWJfcG9zdF9hbGxvY19ob29rKClcbm1tL3NsdWIuYy0yNjU1LSAqIC0gYWxsb2NfdGFnZ2luZ19zbGFiX2FsbG9jX2hvb2soKVxuLS1cbm1tL3NsdWIuYz00NjQ0PXN0YXRpYyBfX2Zhc3RwYXRoX2lubGluZVxubW0vc2x1Yi5jOjQ2NDU6Ym9vbCBzbGFiX3Bvc3RfYWxsb2NfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZmxhZ3MsIHNpemVfdCBzaXplLFxubW0vc2x1Yi5jLTQ2NDYtXHRcdFx0ICB2b2lkICoqcCwgY29uc3Qgc3RydWN0IHNsYWJfYWxsb2NfY29udGV4dCAqYWMpXG4tLVxubW0vc2x1Yi5jLTQ3MDEtXG5tbS9zbHViLmM6NDcwMjpcdHJldHVybiBtZW1jZ19zbGFiX3Bvc3RfYWxsb2NfaG9vayhzLCBmbGFncywgc2l6ZSwgcCwgYWMpO1xubW0vc2x1Yi5jLTQ3MDMtfVxuLS1cbm1tL3NsdWIuYz00OTY5PXN0YXRpYyBfX2Zhc3RwYXRoX2lubGluZSB2b2lkICpzbGFiX2FsbG9jX25vZGUoc3RydWN0IGttZW1fY2FjaGUgKnMsXG4tLVxubW0vc2x1Yi5jLTQ5OTItXHQvKlxubW0vc2x1Yi5jOjQ5OTM6XHQgKiBJbiBjYXNlIHRoaXMgZmFpbHMgZHVlIHRvIG1lbWNnX3NsYWJfcG9zdF9hbGxvY19ob29rKCksXG5tbS9zbHViLmMtNDk5NC1cdCAqIG9iamVjdCBpcyBzZXQgdG8gTlVMTFxubW0vc2x1Yi5jLTQ5OTUtXHQgKi9cbm1tL3NsdWIuYzo0OTk2Olx0c2xhYl9wb3N0X2FsbG9jX2hvb2socywgZ2ZwZmxhZ3MsIDEsIFx1MDAyNm9iamVjdCwgYWMpO1xubW0vc2x1Yi5jLTQ5OTctXG4tLVxubW0vc2x1Yi5jPTUzMDc9a21lbV9jYWNoZV9hbGxvY19mcm9tX3NoZWFmX25vcHJvZihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZ2ZwLFxuLS1cbm1tL3NsdWIuYy01MzI0LVx0LyogYWRkIF9fR0ZQX05PRkFJTCB0byBmb3JjZSBzdWNjZXNzZnVsIG1lbWNnIGNoYXJnaW5nICovXG5tbS9zbHViLmM6NTMyNTpcdHNsYWJfcG9zdF9hbGxvY19ob29rKHMsIGdmcCB8IF9fR0ZQX05PRkFJTCwgMSwgXHUwMDI2cmV0LCBcdTAwMjZhYyk7XG5tbS9zbHViLmMtNTMyNi1vdXQ6XG4tLVxubW0vc2x1Yi5jPTU0NDQ9c3RhdGljIHZvaWQgKl9fa21hbGxvY19ub2xvY2tfbm9wcm9mKERFQ0xfVE9LRU5fUEFSQU1TKHNpemUsIHRva2VuKSwgZ2ZwX3QgZ2ZwX2ZsYWdzLFxuLS1cbm1tL3NsdWIuYy01NDkxLVx0ICoga2ZlbmNlX2FsbG9jLiBIZW5jZSBjYWxsIF9fX3NsYWJfYWxsb2MoKSAoYXQgbW9zdCB0d2ljZSlcbm1tL3NsdWIuYzo1NDkyOlx0ICogYW5kIHNsYWJfcG9zdF9hbGxvY19ob29rKCkgZGlyZWN0bHkuXG5tbS9zbHViLmMtNTQ5My1cdCAqL1xuLS1cbm1tL3NsdWIuYy01NTE2LVx0bWF5YmVfd2lwZV9vYmpfZnJlZXB0cihzLCByZXQpO1xubW0vc2x1Yi5jOjU1MTc6XHRzbGFiX3Bvc3RfYWxsb2NfaG9vayhzLCBnZnBfZmxhZ3MsIDEsIFx1MDAyNnJldCwgYWMpO1xubW0vc2x1Yi5jLTU1MTgtXG4tLVxubW0vc2x1Yi5jPTc0NzY9Ym9vbCBrbWVtX2NhY2hlX2FsbG9jX2J1bGtfbm9wcm9mKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBmbGFncyxcbi0tXG5tbS9zbHViLmMtNzUzNC1cdC8qIG1lbWNnIGFuZCBrbWVtX2NhY2hlIGRlYnVnIHN1cHBvcnQgYW5kIG1lbW9yeSBpbml0aWFsaXphdGlvbiAqL1xubW0vc2x1Yi5jOjc1MzU6XHRyZXR1cm4gbGlrZWx5KHNsYWJfcG9zdF9hbGxvY19ob29rKHMsIGZsYWdzLCBzaXplLCBwLCBcdTAwMjZhYykpO1xubW0vc2x1Yi5jLTc1MzYtfVxuLS1cbm1tL3ZtYWxsb2MuYz00MDMzPXZvaWQgKl9fdm1hbGxvY19ub2RlX3JhbmdlX25vcHJvZih1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgYWxpZ24sXG4tLVxubW0vdm1hbGxvYy5jLTQxMTgtXHQgKiBUaGUgY29uZGl0aW9uIGZvciBzZXR0aW5nIEtBU0FOX1ZNQUxMT0NfSU5JVCBzaG91bGQgY29tcGxlbWVudCB0aGVcbm1tL3ZtYWxsb2MuYzo0MTE5Olx0ICogb25lIGluIHBvc3RfYWxsb2NfaG9vaygpIHdpdGggcmVnYXJkcyB0byB0aGUgX19HRlBfU0tJUF9aRVJPIGNoZWNrXG5tbS92bWFsbG9jLmMtNDEyMC1cdCAqIHRvIG1ha2Ugc3VyZSB0aGF0IG1lbW9yeSBpcyBpbml0aWFsaXplZCB1bmRlciB0aGUgc2FtZSBjb25kaXRpb25zLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMjowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MTYyCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBmaXJzdC1wZXJzb24gc3VtbWFyeSwgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipEaXZpbmcgaW50byBgcG9zdF9hbGxvY19ob29rYCoqCgpPa2F5LCB0aW1lIHRvIGRpc3NlY3QgYHBvc3RfYWxsb2NfaG9va2AgaW4gYG1tL3BhZ2VfYWxsb2MuY2AuIFRoaXMgaG9vayBpcyBhIGNyaXRpY2FsIHBpZWNlLCBhbmQgSSB3YW50IHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBpdHMgcm9sZSBpbiB0aGUgb3ZlcmFsbCBtZW1vcnkgYWxsb2NhdGlvbiBwcm9jZXNzLiBJJiMzOTttIGdvaW5nIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gd2hlcmUgaXQmIzM5O3MgY2FsbGVkLCB1bmRlciB3aGF0IGNvbmRpdGlvbnMsIGFuZCB3aGF0IG9wZXJhdGlvbnMgaXQgcGVyZm9ybXMuIEkmIzM5O20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBOVU1BIGFyY2hpdGVjdHVyZSBhbmQgYW55IHBvdGVudGlhbCBtZW1vcnkgaG90LXBsdWcvdW5wbHVnIGNvbnNpZGVyYXRpb25zLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBudWFuY2VzIHRoYXQgaW1wYWN0IHBlcmZvcm1hbmNlIG9yIGludHJvZHVjZSBhbnkgc3VidGxlIG1lbW9yeSBsZWFrcy4gTGV0JiMzOTtzIHNlZSBpZiB0aGUgY29kZSBsaXZlcyB1cCB0byBteSBleHBlY3RhdGlvbnMgb3IgcHJlc2VudHMgYW55IHN1cnByaXNlcyEgSSYjMzk7bGwgYmUgY29tcGFyaW5nIGl0IHRvIHNpbWlsYXIgaG9va3MgaW4gb3RoZXIgbWVtb3J5IG1hbmFnZW1lbnQgc3lzdGVtcyB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBpbnRlcmVzdGluZyBkZXNpZ24gdHJhZGUgb2ZmcyBiZWluZyBtYWRlIGluIHRoZSBMaW51eCBrZXJuZWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDEyOjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vcGFnZV9hbGxvYy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTgyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxODIwOlx0XG4xODIxOlx0aW5saW5lIHZvaWQgcG9zdF9hbGxvY19ob29rKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG4xODIyOlx0XHRcdFx0XHRnZnBfdCBnZnBfZmxhZ3MsIHVuc2lnbmVkIGludCBhbGxvY19mbGFncylcbjE4MjM6XHR7XG4xODI0Olx0XHRjb25zdCBib29sIHplcm9fdGFncyA9IGdmcF9mbGFncyBcdTAwMjYgX19HRlBfWkVST1RBR1M7XG4xODI1Olx0XHRib29sIGluaXQgPSAhd2FudF9pbml0X29uX2ZyZWUoKSBcdTAwMjZcdTAwMjYgd2FudF9pbml0X29uX2FsbG9jKGdmcF9mbGFncykgXHUwMDI2XHUwMDI2XG4xODI2Olx0XHRcdFx0IXNob3VsZF9za2lwX2luaXQoZ2ZwX2ZsYWdzKTtcbjE4Mjc6XHRcdGludCBpO1xuMTgyODpcdFxuMTgyOTpcdFx0c2V0X3BhZ2VfcHJpdmF0ZShwYWdlLCAwKTtcbjE4MzA6XHRcbjE4MzE6XHRcdGFyY2hfYWxsb2NfcGFnZShwYWdlLCBvcmRlcik7XG4xODMyOlx0XHRkZWJ1Z19wYWdlYWxsb2NfbWFwX3BhZ2VzKHBhZ2UsIDEgXHUwMDNjXHUwMDNjIG9yZGVyKTtcbjE4MzM6XHRcbjE4MzQ6XHRcdC8qXG4xODM1Olx0XHQgKiBQYWdlIHVucG9pc29uaW5nIG11c3QgaGFwcGVuIGJlZm9yZSBtZW1vcnkgaW5pdGlhbGl6YXRpb24uXG4xODM2Olx0XHQgKiBPdGhlcndpc2UsIHRoZSBwb2lzb24gcGF0dGVybiB3aWxsIGJlIG92ZXJ3cml0dGVuIGZvciBfX0dGUF9aRVJPXG4xODM3Olx0XHQgKiBhbGxvY2F0aW9ucyBhbmQgdGhlIHBhZ2UgdW5wb2lzb25pbmcgY29kZSB3aWxsIGNvbXBsYWluLlxuMTgzODpcdFx0ICovXG4xODM5Olx0XHRrZXJuZWxfdW5wb2lzb25fcGFnZXMocGFnZSwgMSBcdTAwM2NcdTAwM2Mgb3JkZXIpO1xuMTg0MDpcdFxuMTg0MTpcdFx0LypcbjE4NDI6XHRcdCAqIEFzIG1lbW9yeSBpbml0aWFsaXphdGlvbiBtaWdodCBiZSBpbnRlZ3JhdGVkIGludG8gS0FTQU4sXG4xODQzOlx0XHQgKiBLQVNBTiB1bnBvaXNvbmluZyBhbmQgbWVtb3J5IGluaXRpYWxpemF0aW9uIGNvZGUgbXVzdCBiZVxuMTg0NDpcdFx0ICoga2VwdCB0b2dldGhlciB0byBhdm9pZCBkaXNjcmVwYW5jaWVzIGluIGJlaGF2aW9yLlxuMTg0NTpcdFx0ICovXG4xODQ2Olx0XG4xODQ3Olx0XHQvKlxuMTg0ODpcdFx0ICogQ2xlYXJpbmcgdGFncyBjYW4gZWZmaWNpZW50bHkgY2xlYXIgdGhlIG1lbW9yeSBmb3IgdXMgYXMgd2VsbCwgaWZcbjE4NDk6XHRcdCAqIHJlcXVpcmVkLlxuMTg1MDpcdFx0ICovXG4xODUxOlx0XHRpZiAoemVyb190YWdzKVxuMTg1MjpcdFx0XHRpbml0ID0gdGFnX2NsZWFyX2hpZ2hwYWdlcyhwYWdlLCAxIFx1MDAzY1x1MDAzYyBvcmRlciwgLyogY2xlYXJfcGFnZXM9ICovaW5pdCk7XG4xODUzOlx0XG4xODU0Olx0XHRpZiAoIXNob3VsZF9za2lwX2thc2FuX3VucG9pc29uKGdmcF9mbGFncykgXHUwMDI2XHUwMDI2XG4xODU1Olx0XHQgICAga2FzYW5fdW5wb2lzb25fcGFnZXMocGFnZSwgb3JkZXIsIGluaXQpKSB7XG4xODU2Olx0XHRcdC8qIFRha2Ugbm90ZSB0aGF0IG1lbW9yeSB3YXMgaW5pdGlhbGl6ZWQgYnkgS0FTQU4uICovXG4xODU3Olx0XHRcdGlmIChrYXNhbl9oYXNfaW50ZWdyYXRlZF9pbml0KCkpXG4xODU4Olx0XHRcdFx0aW5pdCA9IGZhbHNlO1xuMTg1OTpcdFx0fSBlbHNlIHtcbjE4NjA6XHRcdFx0LypcbjE4NjE6XHRcdFx0ICogSWYgbWVtb3J5IHRhZ3MgaGF2ZSBub3QgYmVlbiBzZXQgYnkgS0FTQU4sIHJlc2V0IHRoZSBwYWdlXG4xODYyOlx0XHRcdCAqIHRhZ3MgdG8gZW5zdXJlIHBhZ2VfYWRkcmVzcygpIGRlcmVmZXJlbmNpbmcgZG9lcyBub3QgZmF1bHQuXG4xODYzOlx0XHRcdCAqL1xuMTg2NDpcdFx0XHRmb3IgKGkgPSAwOyBpICE9IDEgXHUwMDNjXHUwMDNjIG9yZGVyOyAmIzQzOyYjNDM7aSlcbjE4NjU6XHRcdFx0XHRwYWdlX2thc2FuX3RhZ19yZXNldChwYWdlICYjNDM7IGkpO1xuMTg2NjpcdFx0fVxuMTg2NzpcdFx0LyogSWYgbWVtb3J5IGlzIHN0aWxsIG5vdCBpbml0aWFsaXplZCwgaW5pdGlhbGl6ZSBpdCBub3cuICovXG4xODY4Olx0XHRpZiAoaW5pdClcbjE4Njk6XHRcdFx0Y2xlYXJfaGlnaHBhZ2VzX2thc2FuX3RhZ2dlZChwYWdlLCAxIFx1MDAzY1x1MDAzYyBvcmRlcik7XG4xODcwOlx0XG4xODcxOlx0XHRzZXRfcGFnZV9vd25lcihwYWdlLCBvcmRlciwgZ2ZwX2ZsYWdzKTtcbjE4NzI6XHRcdHBhZ2VfdGFibGVfY2hlY2tfYWxsb2MocGFnZSwgb3JkZXIpO1xuMTg3MzpcdFx0cGdhbGxvY190YWdfYWRkKHBhZ2UsIGN1cnJlbnQsIDEgXHUwMDNjXHUwMDNjIG9yZGVyLCBhbGxvY19mbGFncyk7XG4xODc0Olx0fVxuMTg3NTpcdFxuMTg3NjpcdHN0YXRpYyB2b2lkIHByZXBfbmV3X3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlciwgZ2ZwX3QgZ2ZwX2ZsYWdzLFxuMTg3NzpcdFx0XHRcdFx0XHRcdFx0dW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzKVxuMTg3ODpcdHtcbjE4Nzk6XHRcdHBvc3RfYWxsb2NfaG9vayhwYWdlLCBvcmRlciwgZ2ZwX2ZsYWdzLCBhbGxvY19mbGFncyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDEyOjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgzODQKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA5NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgY29kZSBzbmlwcGV0OgoKKipEaXZpbmcgaW50byBgX19hbGxvY19mcm96ZW5fcGFnZXNfbm9wcm9mYCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYF9fYWxsb2NfZnJvemVuX3BhZ2VzX25vcHJvZmAgbm93LiBJdCBzZWVtcyBteSBmb2N1cyBzaG91bGQgYmUgb24gdGhlIHNlY3Rpb24gYXJvdW5kIGxpbmVzIDU0NTAtNTQ3MC4gSSBjYW4gc2VlIGl0JiMzOTtzIGNhbGxpbmcgdHdvIGtleSBmdW5jdGlvbnMgZGlyZWN0bHkgYWZ0ZXIgdGhlIHRyYWNpbmcgYW5kIEtNU0FOIGluc3RydW1lbnRhdGlvbjogYHRyYWNlX21tX3BhZ2VfYWxsb2NgIGFuZCBga21zYW5fYWxsb2NfcGFnZWAuIFRoaXMgaW1tZWRpYXRlbHkgdGVsbHMgbWUgc29tZXRoaW5nIHNpZ25pZmljYW50LiBJdCYjMzk7cyBjYXB0dXJpbmcgYWxsb2NhdGlvbiBkZXRhaWxzIHRocm91Z2ggYSB0cmFjaW5nIG1lY2hhbmlzbSBhbmQgdGhlbiBpbnRlZ3JhdGluZyB3aXRoIEtlcm5lbCBNZW1vcnkgU2FuaXRpemVyIChLTVNBTikgdG8gY2hlY2sgZm9yIG1lbW9yeSBlcnJvcnMuIFRoZSBmdW5jdGlvbiBwcmVzdW1hYmx5IGFsbG9jYXRlcyBmcm96ZW4gcGFnZXMuIEdpdmVuIHRoZSBjb250ZXh0LCB0aGUgZnVuY3Rpb24gbGlrZWx5IGhhbmRsZXMgc3BlY2lmaWMsIG9wdGltaXplZCwgb3Igc3BlY2lhbGl6ZWQgcGFnZSBhbGxvY2F0aW9uIHNjZW5hcmlvcyB3aXRoaW4gdGhlIGtlcm5lbC4gSSBzaG91bGQgbG9vayBpbnRvIHRoZSBzcGVjaWZpYyBkZXRhaWxzIG9mIHRoZXNlIGZ1bmN0aW9uIGNhbGxzIG5vdywgaW4gdGhlIGxhcmdlciBjYWxsIGdyYXBoLCBhbmQgdGhlIHJvbGUgb2YgdGhlIHBhZ2UgYWxsb2NhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTI6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9wYWdlX2FsbG9jLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1NDQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzU0NDA6XHRcdFx0Z290byBvdXQ7XG41NDQxOlx0XG41NDQyOlx0XHRhbGxvY19nZnAgPSBnZnA7XG41NDQzOlx0XHRhYy5zcHJlYWRfZGlydHlfcGFnZXMgPSBmYWxzZTtcbjU0NDQ6XHRcbjU0NDU6XHRcdC8qXG41NDQ2Olx0XHQgKiBSZXN0b3JlIHRoZSBvcmlnaW5hbCBub2RlbWFzayBpZiBpdCB3YXMgcG90ZW50aWFsbHkgcmVwbGFjZWQgd2l0aFxuNTQ0NzpcdFx0ICogXHUwMDI2Y3B1c2V0X2N1cnJlbnRfbWVtc19hbGxvd2VkIHRvIG9wdGltaXplIHRoZSBmYXN0LXBhdGggYXR0ZW1wdC5cbjU0NDg6XHRcdCAqL1xuNTQ0OTpcdFx0YWMubm9kZW1hc2sgPSBub2RlbWFzaztcbjU0NTA6XHRcbjU0NTE6XHRcdHBhZ2UgPSBfX2FsbG9jX3BhZ2VzX3Nsb3dwYXRoKGFsbG9jX2dmcCwgb3JkZXIsIFx1MDAyNmFjKTtcbjU0NTI6XHRcbjU0NTM6XHRvdXQ6XG41NDU0Olx0XHRpZiAobWVtY2dfa21lbV9vbmxpbmUoKSBcdTAwMjZcdTAwMjYgKGdmcCBcdTAwMjYgX19HRlBfQUNDT1VOVCkgXHUwMDI2XHUwMDI2IHBhZ2UgXHUwMDI2XHUwMDI2XG41NDU1Olx0XHQgICAgdW5saWtlbHkoX19tZW1jZ19rbWVtX2NoYXJnZV9wYWdlKHBhZ2UsIGdmcCwgb3JkZXIpICE9IDApKSB7XG41NDU2Olx0XHRcdF9fZnJlZV9mcm96ZW5fcGFnZXMocGFnZSwgb3JkZXIsXG41NDU3Olx0XHRcdFx0XHQgICAgYWxsb2NfZmxhZ3MgXHUwMDI2IEFMTE9DX05PTE9DSyA/IEZQSV9OT0xPQ0sgOiAwKTtcbjU0NTg6XHRcdFx0cGFnZSA9IE5VTEw7XG41NDU5Olx0XHR9XG41NDYwOlx0XG41NDYxOlx0XHR0cmFjZV9tbV9wYWdlX2FsbG9jKHBhZ2UsIG9yZGVyLCBhbGxvY19nZnAsIGFjLm1pZ3JhdGV0eXBlKTtcbjU0NjI6XHRcdGttc2FuX2FsbG9jX3BhZ2UocGFnZSwgb3JkZXIsIGFsbG9jX2dmcCk7XG41NDYzOlx0XG41NDY0Olx0XHRyZXR1cm4gcGFnZTtcbjU0NjU6XHR9XG41NDY2Olx0RVhQT1JUX1NZTUJPTChfX2FsbG9jX2Zyb3plbl9wYWdlc19ub3Byb2YpO1xuNTQ2NzpcdFxuNTQ2ODpcdHN0cnVjdCBwYWdlICpfX2FsbG9jX3BhZ2VzX25vcHJvZihnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBvcmRlcixcbjU0Njk6XHRcdFx0aW50IHByZWZlcnJlZF9uaWQsIG5vZGVtYXNrX3QgKm5vZGVtYXNrLCB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MpXG41NDcwOlx0e1xuNTQ3MTpcdFx0c3RydWN0IHBhZ2UgKnBhZ2U7XG41NDcyOlx0XG41NDczOlx0XHRwYWdlID0gX19hbGxvY19mcm96ZW5fcGFnZXNfbm9wcm9mKGdmcCwgb3JkZXIsIHByZWZlcnJlZF9uaWQsIG5vZGVtYXNrLFxuNTQ3NDpcdFx0XHRcdFx0XHQgICBhbGxvY19mbGFncyk7XG41NDc1Olx0XHRpZiAocGFnZSlcbjU0NzY6XHRcdFx0c2V0X3BhZ2VfcmVmY291bnRlZChwYWdlKTtcbjU0Nzc6XHRcdHJldHVybiBwYWdlO1xuNTQ3ODpcdH1cbjU0Nzk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTI6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTM0MgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI4MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUGFnZSBBbGxvY2F0aW9uIGluIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSSYjMzk7bSBsb29raW5nIGF0IGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAgYW5kIHNwZWNpZmljYWxseSB0aGlzIHNuaXBwZXQ6CgpgYGBjCgkJcHJlcF9uZXdfcGFnZShwYWdlLCAwLCBnZnAsIEFMTE9DX0RFRkFVTFQpOwomIzQzOwkJdHJhY2VfbW1fcGFnZV9hbGxvYyhwYWdlLCAwLCBnZnAsIGFjLm1pZ3JhdGV0eXBlKTsKJiM0MzsJCWttc2FuX2FsbG9jX3BhZ2UocGFnZSwgMCwgZ2ZwICZhbXA7IH5fX0dGUF9SRUNMQUlNKTsKCQlzZXRfcGFnZV9yZWZjb3VudGVkKHBhZ2UpOwoJCXBhZ2VfYXJyYXlbbnJfcG9wdWxhdGVkJiM0MzsmIzQzO10gPSBwYWdlOwpgYGAKClJpZ2h0LCBzbyBhZnRlciB0aGlzIHBhdGNoLCBpdCBzZWVtcyB0aGUgY29kZSBub3cgY2FsbHMgYGttc2FuX2FsbG9jX3BhZ2VgLiBCZWZvcmUsIGlmIEkgcmVjYWxsIGNvcnJlY3RseSwgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCB3YXMgcHVsbGluZyBwYWdlcyBkaXJlY3RseSBmcm9tIHRoZSBQQ1AgbGlzdCwgdXNpbmcgYF9fcm1xdWV1ZV9wY3BsaXN0YCwgdGhlbiBjYWxsaW5nIGBwcmVwX25ld19wYWdlYCwgYHNldF9wYWdlX3JlZmNvdW50ZWRgIGFuZCByZXR1cm5pbmcuIFRoZSBjcnVjaWFsIHBvaW50IGlzIHRoYXQgaXQgKndhc24mIzM5O3QqIGNhbGxpbmcgYGttc2FuX2FsbG9jX3BhZ2VgIGJlZm9yZS4KCldhaXQgYSBzZWNvbmQuIEkga25vdyB0aGF0IGBfX2FsbG9jX2Zyb3plbl9wYWdlc19ub3Byb2ZgIGNhbGxzIGBrbXNhbl9hbGxvY19wYWdlYCwgcGFzc2luZyBpbiBgb3JkZXJgIGFuZCBgYWxsb2NfZ2ZwYCwgYnV0IHdoYXQgZXhhY3RseSAqZG9lcyogYGttc2FuX2FsbG9jX3BhZ2VgIGRvPyBDbGVhcmx5LCBJIG5lZWQgdG8gY2hlY2sgaXRzIGltcGxlbWVudGF0aW9uIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZS4gTGV0IG1lIGdvIGZpbmQgdGhhdCBkZWZpbml0aW9uIGluIGBtbS9rbXNhbi9zaGFkb3cuY2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDEyOjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0va21zYW4vc2hhZG93LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE2NTpcdFx0X19tZW1jcHkoc2hhZG93X3B0cl9mb3IoZHN0KSwgc2hhZG93X3B0cl9mb3Ioc3JjKSwgUEFHRV9TSVpFKTtcbiAxNjY6XHRcdF9fbWVtY3B5KG9yaWdpbl9wdHJfZm9yKGRzdCksIG9yaWdpbl9wdHJfZm9yKHNyYyksIFBBR0VfU0laRSk7XG4gMTY3Olx0XHRrbXNhbl9sZWF2ZV9ydW50aW1lKCk7XG4gMTY4Olx0fVxuIDE2OTpcdEVYUE9SVF9TWU1CT0woa21zYW5fY29weV9wYWdlX21ldGEpO1xuIDE3MDpcdFxuIDE3MTpcdHZvaWQga21zYW5fYWxsb2NfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyLCBnZnBfdCBmbGFncylcbiAxNzI6XHR7XG4gMTczOlx0XHRib29sIGluaXRpYWxpemVkID0gKGZsYWdzIFx1MDAyNiBfX0dGUF9aRVJPKSB8fCAha21zYW5fZW5hYmxlZDtcbiAxNzQ6XHRcdHN0cnVjdCBwYWdlICpzaGFkb3csICpvcmlnaW47XG4gMTc1Olx0XHRkZXBvdF9zdGFja19oYW5kbGVfdCBoYW5kbGU7XG4gMTc2Olx0XHRpbnQgcGFnZXMgPSAxIFx1MDAzY1x1MDAzYyBvcmRlcjtcbiAxNzc6XHRcbiAxNzg6XHRcdGlmICghcGFnZSlcbiAxNzk6XHRcdFx0cmV0dXJuO1xuIDE4MDpcdFxuIDE4MTpcdFx0c2hhZG93ID0gc2hhZG93X3BhZ2VfZm9yKHBhZ2UpO1xuIDE4MjpcdFx0b3JpZ2luID0gb3JpZ2luX3BhZ2VfZm9yKHBhZ2UpO1xuIDE4MzpcdFxuIDE4NDpcdFx0aWYgKGluaXRpYWxpemVkKSB7XG4gMTg1Olx0XHRcdF9fbWVtc2V0KHBhZ2VfYWRkcmVzcyhzaGFkb3cpLCAwLCBQQUdFX1NJWkUgKiBwYWdlcyk7XG4gMTg2Olx0XHRcdF9fbWVtc2V0KHBhZ2VfYWRkcmVzcyhvcmlnaW4pLCAwLCBQQUdFX1NJWkUgKiBwYWdlcyk7XG4gMTg3Olx0XHRcdHJldHVybjtcbiAxODg6XHRcdH1cbiAxODk6XHRcbiAxOTA6XHRcdC8qIFplcm8gcGFnZXMgYWxsb2NhdGVkIGJ5IHRoZSBydW50aW1lIHNob3VsZCBhbHNvIGJlIGluaXRpYWxpemVkLiAqL1xuIDE5MTpcdFx0aWYgKGttc2FuX2luX3J1bnRpbWUoKSlcbiAxOTI6XHRcdFx0cmV0dXJuO1xuIDE5MzpcdFxuIDE5NDpcdFx0X19tZW1zZXQocGFnZV9hZGRyZXNzKHNoYWRvdyksIC0xLCBQQUdFX1NJWkUgKiBwYWdlcyk7XG4gMTk1Olx0XHRrbXNhbl9lbnRlcl9ydW50aW1lKCk7XG4gMTk2Olx0XHRoYW5kbGUgPSBrbXNhbl9zYXZlX3N0YWNrX3dpdGhfZmxhZ3MoZmxhZ3MsIC8qZXh0cmFfYml0cyovIDApO1xuIDE5NzpcdFx0a21zYW5fbGVhdmVfcnVudGltZSgpO1xuIDE5ODpcdFx0LypcbiAxOTk6XHRcdCAqIEFkZHJlc3NlcyBhcmUgcGFnZS1hbGlnbmVkLCBwYWdlcyBhcmUgY29udGlndW91cywgc28gaXQmIzM5O3Mgb2tcbiAyMDA6XHRcdCAqIHRvIGp1c3QgZmlsbCB0aGUgb3JpZ2luIHBhZ2VzIHdpdGggQGhhbmRsZS5cbiAyMDE6XHRcdCAqL1xuIDIwMjpcdFx0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIFBBR0VfU0laRSAqIHBhZ2VzIC8gc2l6ZW9mKGhhbmRsZSk7IGkmIzQzOyYjNDM7KVxuIDIwMzpcdFx0XHQoKGRlcG90X3N0YWNrX2hhbmRsZV90ICopcGFnZV9hZGRyZXNzKG9yaWdpbikpW2ldID0gaGFuZGxlO1xuIDIwNDpcdH1cbiAyMDU6XHRcbiAyMDY6XHR2b2lkIGttc2FuX2ZyZWVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKVxuIDIwNzpcdHtcbiAyMDg6XHRcdGlmICgha21zYW5fZW5hYmxlZCB8fCBrbXNhbl9pbl9ydW50aW1lKCkpXG4gMjA5Olx0XHRcdHJldHVybjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTI6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA3MTcKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAxNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhlc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhIGtlcm5lbCBleHBlcnQ6CgoqKktNU0FOIGFuZCBCdWxrIFBhZ2UgQWxsb2NhdGlvbjogQSBNaXNzaW5nIFBpZWNlKioKCkFscmlnaHQsIHNvIGBrbXNhbl9hbGxvY19wYWdlYCBpcyB0aGUga2V5IEtNU0FOIGhvb2sgZm9yIHRyYWNraW5nIHRoZSBhbGxvY2F0aW9uIG9mIG1lbW9yeSBwYWdlcy4gV2l0aG91dCBpdCwgS01TQU4gbWlzc2VzIHBhZ2VzIHRoYXQgYXJlIGFsbG9jYXRlZCB0aHJvdWdoIGBhbGxvY19wYWdlc19idWxrYC4gU3BlY2lmaWNhbGx5LCB0aGUgS01TQU4gc2hhZG93IG1lbW9yeSwgd2hpY2gga2VlcHMgdHJhY2sgb2YgdW5pbml0aWFsaXplZCBkYXRhLCBkb2VzbiYjMzk7dCBnZXQgdXBkYXRlZCBvciBwb2lzb25lZCAoaW5pdGlhbGl6ZWQgdG8gYSBzcGVjaWZpYyB2YWx1ZSB0byBtYWtlIGRlYnVnZ2luZyBlYXNpZXIpIHdoZW4gcGFnZXMgYXJlIGFsbG9jYXRlZCB3aXRoIGBhbGxvY19wYWdlc19idWxrYC4gRXNzZW50aWFsbHksIEtNU0FOIGRvZXNuJiMzOTt0ICYjMzQ7a25vdyYjMzQ7IGFib3V0IHRob3NlIHBhZ2VzLgoKSGFuZyBvbiBhIHNlY29uZOKApiB0aGlzIHBhdGNoIGlzIGFkZHJlc3NpbmcgdGhhdCBleGFjdCBpc3N1ZSEgSXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgZml4aW5nIGEgZ2FwIGluIHRyYWNpbmcgYW5kIGFkZGluZyBhIG1pc3NpbmcgS01TQU4gaG9vayAoYHRyYWNlX21tX3BhZ2VfYWxsb2NgIGFuZCBga21zYW5fYWxsb2NfcGFnZWApIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAgZnVuY3Rpb24uIFRoYXQmIzM5O3MgYSBjcml0aWNhbCBvdmVyc2lnaHQgYmVpbmcgcmVjdGlmaWVkLgoKTm93LCBob2xkIG9uLiBCZWZvcmUgSSBkaXZlIGZ1cnRoZXIsIGxldCYjMzk7cyBzdGVwIGJhY2sgYW5kIHVuZGVyc3RhbmQgdGhlIHNjb3BlLiBMZXQgbWUgcXVpY2tseSBzZWUgd2hlcmUgYGFsbG9jX3BhZ2VzX2J1bGtgIGlzIGNhbGxlZCBmcm9tIGluIHRoZSBrZXJuZWwuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB3aWRlc3ByZWFkIHRoaXMgY2hhbmdlIHdpbGwgaW1wYWN0IHRoZSBzeXN0ZW0uIEkmIzM5O2xsIHNlYXJjaCB0aGUga2VybmVsIHNvdXJjZSBmb3IgYWxsIGluc3RhbmNlcyBvZiBgYWxsb2NfcGFnZXNfYnVsa2AgYW5kIHNlZSB3aGF0JiMzOTtzIHVzaW5nIHRoaXMgYWxsb2NhdGlvbiBwYXRoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMjowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthbGxvY19wYWdlc19idWxrJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYz0xNzI9c3RhdGljIHN0cnVjdCBiaW8gKmJsa19jcnlwdG9fYWxsb2NfZW5jX2JpbyhzdHJ1Y3QgYmlvICpiaW9fc3JjLFxuLS1cbmJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYy0yMDQtXHQgKlxuYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jOjIwNTpcdCAqIE5vdGU6IGFsbG9jX3BhZ2VzX2J1bGsgbmVlZHMgdGhlIGFycmF5IHRvIGJlIHplcm9lZCwgYXMgaXQgYXNzdW1lc1xuYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jLTIwNi1cdCAqIGFueSBub24temVybyBzbG90IGFscmVhZHkgY29udGFpbnMgYSB2YWxpZCBhbGxvY2F0aW9uLlxuLS1cbmJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYy0yMDgtXHRtZW1zZXQocGFnZXMsIDAsIHNpemVvZihzdHJ1Y3QgcGFnZSAqKSAqIG5yX3NlZ3MpO1xuYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jOjIwOTpcdG5yX2FsbG9jYXRlZCA9IGFsbG9jX3BhZ2VzX2J1bGsoR0ZQX0tFUk5FTCwgbnJfc2VncywgcGFnZXMpO1xuYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jLTIxMC1cdGlmIChucl9hbGxvY2F0ZWQgXHUwMDNjIG5yX3NlZ3MpXG4tLVxuZHJpdmVycy9maXJld2lyZS9jb3JlLWlzby5jPTMxPWludCBmd19pc29fYnVmZmVyX2FsbG9jKHN0cnVjdCBmd19pc29fYnVmZmVyICpidWZmZXIsIGludCBwYWdlX2NvdW50KVxuLS1cbmRyaXZlcnMvZmlyZXdpcmUvY29yZS1pc28uYy00MS1cdC8vIGNvbnZlbmllbmNlIHRvIG1hcCB0aGVtIGludG8gdmlydHVhbCBhZGRyZXNzIHNwYWNlIG9mIHVzZXIgcHJvY2Vzcy5cbmRyaXZlcnMvZmlyZXdpcmUvY29yZS1pc28uYzo0MjpcdHVuc2lnbmVkIGxvbmcgbnJfcG9wdWxhdGVkID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfS0VSTkVMIHwgR0ZQX0RNQTMyIHwgX19HRlBfWkVSTyxcbmRyaXZlcnMvZmlyZXdpcmUvY29yZS1pc28uYy00My1cdFx0XHRcdFx0XHQgICAgICBwYWdlX2NvdW50LCBwYWdlX2FycmF5KTtcbi0tXG5kcml2ZXJzL2ZpcmV3aXJlL29oY2kuYz04NDg9c3RhdGljIGludCBhcl9jb250ZXh0X2luaXQoc3RydWN0IGFyX2NvbnRleHQgKmN0eCwgc3RydWN0IGZ3X29oY2kgKm9oY2ksXG4tLVxuZHJpdmVycy9maXJld2lyZS9vaGNpLmMtODY0LVx0Ly8gYWRkcmVzcyByYW5nZSBpbiBrZXJuZWwgdmlydHVhbCBhZGRyZXNzIHNwYWNlLlxuZHJpdmVycy9maXJld2lyZS9vaGNpLmM6ODY1Olx0dW5zaWduZWQgbG9uZyBucl9wb3B1bGF0ZWQgPSBhbGxvY19wYWdlc19idWxrKEdGUF9LRVJORUwgfCBHRlBfRE1BMzIsIEFSX0JVRkZFUlMsIHBhZ2VzKTtcbmRyaXZlcnMvZmlyZXdpcmUvb2hjaS5jLTg2Ni1cbi0tXG5kcml2ZXJzL3N0YWdpbmcvbWVkaWEvYXRvbWlzcC9wY2kvaG1tL2htbV9iby5jPTYyMT1zdGF0aWMgaW50IGFsbG9jX3ByaXZhdGVfcGFnZXMoc3RydWN0IGhtbV9idWZmZXJfb2JqZWN0ICpibylcbi0tXG5kcml2ZXJzL3N0YWdpbmcvbWVkaWEvYXRvbWlzcC9wY2kvaG1tL2htbV9iby5jLTYyNi1cbmRyaXZlcnMvc3RhZ2luZy9tZWRpYS9hdG9taXNwL3BjaS9obW0vaG1tX2JvLmM6NjI3Olx0bnJfYWxsb2NhdGVkID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfS0VSTkVMLCBiby1cdTAwM2VwZ25yLCBiby1cdTAwM2VwYWdlcyk7XG5kcml2ZXJzL3N0YWdpbmcvbWVkaWEvYXRvbWlzcC9wY2kvaG1tL2htbV9iby5jLTYyOC1cdC8qXG5kcml2ZXJzL3N0YWdpbmcvbWVkaWEvYXRvbWlzcC9wY2kvaG1tL2htbV9iby5jOjYyOTpcdCAqIGFsbG9jX3BhZ2VzX2J1bGsoKSBkb2VzIG5vdCB0cnkgdmVyeSBoYXJkIHRvIGdldCBwYWdlcyB1bmRlciBtZW1vcnlcbmRyaXZlcnMvc3RhZ2luZy9tZWRpYS9hdG9taXNwL3BjaS9obW0vaG1tX2JvLmMtNjMwLVx0ICogcHJlc3N1cmUuIElmIG5lY2Vzc2FyeSBmYWxsIGJhY2sgdG8gYWxsb2NfcGFnZSgpLlxuLS1cbmRyaXZlcnMvdmZpby9wY2kvbWx4NS9jbWQuYz00NjY9c3RhdGljIHZvaWQgZnJlZV9wYWdlX2xpc3QodTMyIG5wYWdlcywgc3RydWN0IHBhZ2UgKipwYWdlX2xpc3QpXG4tLVxuZHJpdmVycy92ZmlvL3BjaS9tbHg1L2NtZC5jLTQ2OS1cbmRyaXZlcnMvdmZpby9wY2kvbWx4NS9jbWQuYzo0NzA6XHQvKiBVbmRvIGFsbG9jX3BhZ2VzX2J1bGsoKSAqL1xuZHJpdmVycy92ZmlvL3BjaS9tbHg1L2NtZC5jLTQ3MS1cdGZvciAoaSA9IG5wYWdlcyAtIDE7IGkgXHUwMDNlPSAwOyBpLS0pXG4tLVxuZHJpdmVycy92ZmlvL3BjaS9tbHg1L2NtZC5jPTQ5Nj1zdGF0aWMgaW50IG1seDV2Zl9hZGRfcGFnZXMoc3RydWN0IHBhZ2UgKioqcGFnZV9saXN0LCB1bnNpZ25lZCBpbnQgbnBhZ2VzKVxuLS1cbmRyaXZlcnMvdmZpby9wY2kvbWx4NS9jbWQuYy01MDYtXHRmb3IgKDs7KSB7XG5kcml2ZXJzL3ZmaW8vcGNpL21seDUvY21kLmM6NTA3Olx0XHRmaWxsZWQgPSBhbGxvY19wYWdlc19idWxrKEdGUF9LRVJORUxfQUNDT1VOVCwgbnBhZ2VzIC0gZG9uZSxcbmRyaXZlcnMvdmZpby9wY2kvbWx4NS9jbWQuYy01MDgtXHRcdFx0XHRcdCAgKnBhZ2VfbGlzdCAmIzQzOyBkb25lKTtcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZpcnRpby9taWdyYXRlLmM9NjM9c3RhdGljIGludCB2aXJ0aW92Zl9hZGRfbWlncmF0aW9uX3BhZ2VzKHN0cnVjdCB2aXJ0aW92Zl9kYXRhX2J1ZmZlciAqYnVmLFxuLS1cbmRyaXZlcnMvdmZpby9wY2kvdmlydGlvL21pZ3JhdGUuYy03OC1cdGRvIHtcbmRyaXZlcnMvdmZpby9wY2kvdmlydGlvL21pZ3JhdGUuYzo3OTpcdFx0ZmlsbGVkID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfS0VSTkVMX0FDQ09VTlQsIHRvX2ZpbGwsXG5kcml2ZXJzL3ZmaW8vcGNpL3ZpcnRpby9taWdyYXRlLmMtODAtXHRcdFx0XHRcdCAgcGFnZV9saXN0KTtcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZpcnRpby9taWdyYXRlLmM9MTEwPXN0YXRpYyB2b2lkIHZpcnRpb3ZmX2ZyZWVfZGF0YV9idWZmZXIoc3RydWN0IHZpcnRpb3ZmX2RhdGFfYnVmZmVyICpidWYpXG4tLVxuZHJpdmVycy92ZmlvL3BjaS92aXJ0aW8vbWlncmF0ZS5jLTExMy1cbmRyaXZlcnMvdmZpby9wY2kvdmlydGlvL21pZ3JhdGUuYzoxMTQ6XHQvKiBVbmRvIGFsbG9jX3BhZ2VzX2J1bGsoKSAqL1xuZHJpdmVycy92ZmlvL3BjaS92aXJ0aW8vbWlncmF0ZS5jLTExNS1cdGZvcl9lYWNoX3NndGFibGVfcGFnZShcdTAwMjZidWYtXHUwMDNldGFibGUuc2d0LCBcdTAwMjZzZ19pdGVyLCAwKVxuLS1cbmZzL2J0cmZzL2V4dGVudF9pby5jPTY4ND1pbnQgYnRyZnNfYWxsb2NfcGFnZV9hcnJheSh1bnNpZ25lZCBpbnQgbnJfcGFnZXMsIHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheSwgZ2ZwX3QgZ2ZwKVxuLS1cbmZzL2J0cmZzL2V4dGVudF9pby5jLTY5MC1cbmZzL2J0cmZzL2V4dGVudF9pby5jOjY5MTpcdFx0YWxsb2NhdGVkID0gYWxsb2NfcGFnZXNfYnVsayhnZnAsIG5yX3BhZ2VzLCBwYWdlX2FycmF5KTtcbmZzL2J0cmZzL2V4dGVudF9pby5jLTY5Mi1cdFx0aWYgKHVubGlrZWx5KGFsbG9jYXRlZCA9PSBsYXN0KSkge1xuLS1cbmZzL2Vyb2ZzL3p1dGlsLmM9NjU9aW50IHpfZXJvZnNfZ2J1Zl9ncm93c2l6ZSh1bnNpZ25lZCBpbnQgbnJwYWdlcylcbi0tXG5mcy9lcm9mcy96dXRpbC5jLTg5LVx0XHRcdGxhc3QgPSBqO1xuZnMvZXJvZnMvenV0aWwuYzo5MDpcdFx0XHRqID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfS0VSTkVMLCBucnBhZ2VzLCB0bXBfcGFnZXMpO1xuZnMvZXJvZnMvenV0aWwuYy05MS1cdFx0XHRpZiAobGFzdCA9PSBqKVxuLS1cbmZzL2Z1c2UvcmVhZGRpci5jPTMzNj1zdGF0aWMgc3RydWN0IHBhZ2UgKipmdXNlX3JlYWRkaXJfYWxsb2NfYnVmKHN0cnVjdCBmdXNlX2FyZ3NfcGFnZXMgKmFwLCBzaXplX3QgKmJ1ZnNpemUpXG4tLVxuZnMvZnVzZS9yZWFkZGlyLmMtMzQzLVxuZnMvZnVzZS9yZWFkZGlyLmM6MzQ0Olx0bnJfYWxsb2MgPSBhbGxvY19wYWdlc19idWxrKEdGUF9LRVJORUwsIG5yX3BhZ2VzLCBwYWdlcyk7XG5mcy9mdXNlL3JlYWRkaXIuYy0zNDUtXHRpZiAoIW5yX2FsbG9jKVxuLS1cbmZzL25mc2QvbmZzNHN0YXRlLmM9MTMyNj1hbGxvY19pbml0X2Rpcl9kZWxlZyhzdHJ1Y3QgbmZzNF9jbGllbnQgKmNscCwgc3RydWN0IG5mczRfZmlsZSAqZnApXG4tLVxuZnMvbmZzZC9uZnM0c3RhdGUuYy0xMzM3LVxuZnMvbmZzZC9uZnM0c3RhdGUuYzoxMzM4Olx0bnBhZ2VzID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfS0VSTkVMLCBOT1RJRlk0X1BBR0VfQVJSQVlfU0laRSwgbmNuLVx1MDAzZW5jbl9wYWdlcyk7XG5mcy9uZnNkL25mczRzdGF0ZS5jLTEzMzktXHRpZiAobnBhZ2VzICE9IE5PVElGWTRfUEFHRV9BUlJBWV9TSVpFKSB7XG4tLVxuZnMvc3BsaWNlLmM9MzE4PXNzaXplX3QgY29weV9zcGxpY2VfcmVhZChzdHJ1Y3QgZmlsZSAqaW4sIGxvZmZfdCAqcHBvcyxcbi0tXG5mcy9zcGxpY2UuYy0zNDEtXHRwYWdlcyA9IChzdHJ1Y3QgcGFnZSAqKikoYnYgJiM0MzsgbnBhZ2VzKTtcbmZzL3NwbGljZS5jOjM0MjpcdG5wYWdlcyA9IGFsbG9jX3BhZ2VzX2J1bGsoR0ZQX1VTRVIsIG5wYWdlcywgcGFnZXMpO1xuZnMvc3BsaWNlLmMtMzQzLVx0aWYgKCFucGFnZXMpIHtcbi0tXG5pbmNsdWRlL2xpbnV4L2dmcC5oPTIwNz1zdHJ1Y3QgZm9saW8gKl9fZm9saW9fYWxsb2Nfbm9wcm9mKGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG9yZGVyLCBpbnQgcHJlZmVycmVkX25pZCxcbi0tXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIxMC1cbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjExOnVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoZ2ZwX3QgZ2ZwLCBpbnQgcHJlZmVycmVkX25pZCxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjEyLVx0XHRcdFx0bm9kZW1hc2tfdCAqbm9kZW1hc2ssIGludCBucl9wYWdlcyxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjEzLVx0XHRcdFx0c3RydWN0IHBhZ2UgKipwYWdlX2FycmF5KTtcbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjE0OiNkZWZpbmUgX19hbGxvY19wYWdlc19idWxrKC4uLilcdFx0XHRhbGxvY19ob29rcyhhbGxvY19wYWdlc19idWxrX25vcHJvZihfX1ZBX0FSR1NfXykpXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIxNS1cbmluY2x1ZGUvbGludXgvZ2ZwLmg9MjE2PXZvaWQgZnJlZV9wYWdlc19idWxrKHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheSwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyk7XG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIxNy1cbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjE4OnVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mKGdmcF90IGdmcCxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjE5LVx0XHRcdFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjIwLVx0XHRcdFx0c3RydWN0IHBhZ2UgKipwYWdlX2FycmF5KTtcbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjIxOiNkZWZpbmUgIGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5KC4uLilcdFx0XHRcdFxcXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjIyMjpcdGFsbG9jX2hvb2tzKGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZihfX1ZBX0FSR1NfXykpXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIyMy1cbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjI0LS8qIEJ1bGsgYWxsb2NhdGUgb3JkZXItMCBwYWdlcyAqL1xuaW5jbHVkZS9saW51eC9nZnAuaDoyMjU6I2RlZmluZSBhbGxvY19wYWdlc19idWxrKF9nZnAsIF9ucl9wYWdlcywgX3BhZ2VfYXJyYXkpXHRcdFxcXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjIyNjpcdF9fYWxsb2NfcGFnZXNfYnVsayhfZ2ZwLCBudW1hX21lbV9pZCgpLCBOVUxMLCBfbnJfcGFnZXMsIF9wYWdlX2FycmF5KVxuaW5jbHVkZS9saW51eC9nZnAuaC0yMjctXG5pbmNsdWRlL2xpbnV4L2dmcC5oPTIyOD1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmdcbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjI5OmFsbG9jX3BhZ2VzX2J1bGtfbm9kZV9ub3Byb2YoZ2ZwX3QgZ2ZwLCBpbnQgbmlkLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxuaW5jbHVkZS9saW51eC9nZnAuaC0yMzAtXHRcdFx0XHQgICBzdHJ1Y3QgcGFnZSAqKnBhZ2VfYXJyYXkpXG4tLVxuaW5jbHVkZS9saW51eC9nZnAuaC0yMzQtXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjIzNTpcdHJldHVybiBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnAsIG5pZCwgTlVMTCwgbnJfcGFnZXMsIHBhZ2VfYXJyYXkpO1xuaW5jbHVkZS9saW51eC9nZnAuaC0yMzYtfVxuaW5jbHVkZS9saW51eC9nZnAuaC0yMzctXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjIzODojZGVmaW5lIGFsbG9jX3BhZ2VzX2J1bGtfbm9kZSguLi4pXHRcdFx0XHRcXFxuaW5jbHVkZS9saW51eC9nZnAuaDoyMzk6XHRhbGxvY19ob29rcyhhbGxvY19wYWdlc19idWxrX25vZGVfbm9wcm9mKF9fVkFfQVJHU19fKSlcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjQwLVxuLS1cbmlvX3VyaW5nL21lbW1hcC5jPTE3ND1zdGF0aWMgaW50IGlvX3JlZ2lvbl9hbGxvY2F0ZV9wYWdlcyhzdHJ1Y3QgaW9fbWFwcGVkX3JlZ2lvbiAqbXIsXG4tLVxuaW9fdXJpbmcvbWVtbWFwLmMtMTkyLVxuaW9fdXJpbmcvbWVtbWFwLmM6MTkzOlx0bnJfYWxsb2NhdGVkID0gYWxsb2NfcGFnZXNfYnVsa19ub2RlKGdmcCwgTlVNQV9OT19OT0RFLFxuaW9fdXJpbmcvbWVtbWFwLmMtMTk0LVx0XHRcdFx0XHQgICAgIG1yLVx1MDAzZW5yX3BhZ2VzLCBwYWdlcyk7XG4tLVxua2VybmVsL2JwZi9hcmVuYS5jPTY2OD1zdGF0aWMgbG9uZyBhcmVuYV9hbGxvY19wYWdlcyhzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSwgbG9uZyB1YWRkciwgbG9uZyBwYWdlX2NudCwgaW50IG5vZGVfaWQsXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTczMi1cbmtlcm5lbC9icGYvYXJlbmEuYzo3MzM6XHRcdC8qIHplcm9pbmcgaXMgbmVlZGVkLCBzaW5jZSBhbGxvY19wYWdlc19idWxrKCkgb25seSBmaWxscyBpbiBub24temVybyBlbnRyaWVzICovXG5rZXJuZWwvYnBmL2FyZW5hLmMtNzM0LVx0XHRtZW1zZXQocGFnZXMsIDAsIHRoaXNfYmF0Y2ggKiBzaXplb2Yoc3RydWN0IHBhZ2UgKikpO1xuLS1cbmxpYi90ZXN0X3ZtYWxsb2MuYz0zOTE9dm1fbWFwX3JhbV90ZXN0KHZvaWQpXG4tLVxubGliL3Rlc3Rfdm1hbGxvYy5jLTQwMy1cbmxpYi90ZXN0X3ZtYWxsb2MuYzo0MDQ6XHRucl9hbGxvY2F0ZWQgPSBhbGxvY19wYWdlc19idWxrKEdGUF9LRVJORUwsIG1hcF9ucl9wYWdlcywgcGFnZXMpO1xubGliL3Rlc3Rfdm1hbGxvYy5jLTQwNS1cdGlmIChucl9hbGxvY2F0ZWQgIT0gbWFwX25yX3BhZ2VzKVxuLS1cbmxpYi90ZXN0cy9rdW5pdF9pb3ZfaXRlci5jPTUxPXN0YXRpYyB2b2lkICpfX2luaXQgaW92X2t1bml0X2NyZWF0ZV9idWZmZXIoc3RydWN0IGt1bml0ICp0ZXN0LFxuLS1cbmxpYi90ZXN0cy9rdW5pdF9pb3ZfaXRlci5jLTY2LVx0XHRsYXN0ID0gZ290O1xubGliL3Rlc3RzL2t1bml0X2lvdl9pdGVyLmM6Njc6XHRcdGdvdCA9IGFsbG9jX3BhZ2VzX2J1bGsoR0ZQX0tFUk5FTCwgbnBhZ2VzLCBwYWdlcyk7XG5saWIvdGVzdHMva3VuaXRfaW92X2l0ZXIuYy02OC1cbi0tXG5tbS9hbGxvY190YWcuYz03Nzc9c3RhdGljIGludCB2bV9tb2R1bGVfdGFnc19wb3B1bGF0ZSh2b2lkKVxuLS1cbm1tL2FsbG9jX3RhZy5jLTc5My1cbm1tL2FsbG9jX3RhZy5jOjc5NDpcdFx0XHRhbGxvY2F0ZWQgPSBhbGxvY19wYWdlc19idWxrX25vZGUoR0ZQX0tFUk5FTCB8IF9fR0ZQX05PV0FSTixcbm1tL2FsbG9jX3RhZy5jLTc5NS1cdFx0XHRcdE5VTUFfTk9fTk9ERSwgbW9yZV9wYWdlcyAtIG5yLCBuZXh0X3BhZ2UgJiM0MzsgbnIpO1xuLS1cbm1tL2thc2FuL3NoYWRvdy5jPTMyNz1zdGF0aWMgdm9pZCBfX19mcmVlX3BhZ2VzX2J1bGsoc3RydWN0IHBhZ2UgKipwYWdlcywgaW50IG5yX3BhZ2VzKVxuLS1cbm1tL2thc2FuL3NoYWRvdy5jLTMzOC1cbm1tL2thc2FuL3NoYWRvdy5jOjMzOTpzdGF0aWMgaW50IF9fX2FsbG9jX3BhZ2VzX2J1bGsoc3RydWN0IHBhZ2UgKipwYWdlcywgaW50IG5yX3BhZ2VzLCBnZnBfdCBnZnBfbWFzaylcbm1tL2thc2FuL3NoYWRvdy5jLTM0MC17XG4tLVxubW0va2FzYW4vc2hhZG93LmMtMzQ0LVx0d2hpbGUgKG5yX3BhZ2VzKSB7XG5tbS9rYXNhbi9zaGFkb3cuYzozNDU6XHRcdG5yX3BvcHVsYXRlZCA9IGFsbG9jX3BhZ2VzX2J1bGsoZ2ZwX21hc2ssIG5yX3BhZ2VzLCBwYWdlcyk7XG5tbS9rYXNhbi9zaGFkb3cuYy0zNDYtXHRcdGlmICghbnJfcG9wdWxhdGVkKSB7XG4tLVxubW0va2FzYW4vc2hhZG93LmM9MzU3PXN0YXRpYyBpbnQgX19rYXNhbl9wb3B1bGF0ZV92bWFsbG9jX2RvKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLCBnZnBfdCBnZnBfbWFzaylcbi0tXG5tbS9rYXNhbi9zaGFkb3cuYy0zNjktXHRcdG5yX3BhZ2VzID0gbWluKG5yX3RvdGFsLCBQQUdFX1NJWkUgLyBzaXplb2YoZGF0YS5wYWdlc1swXSkpO1xubW0va2FzYW4vc2hhZG93LmM6MzcwOlx0XHRyZXQgPSBfX19hbGxvY19wYWdlc19idWxrKGRhdGEucGFnZXMsIG5yX3BhZ2VzLCBnZnBfbWFzayk7XG5tbS9rYXNhbi9zaGFkb3cuYy0zNzEtXHRcdGlmIChyZXQpXG4tLVxubW0vbWVtcG9saWN5LmM9MjU4OT1FWFBPUlRfU1lNQk9MKGZvbGlvX2FsbG9jX25vcHJvZik7XG5tbS9tZW1wb2xpY3kuYy0yNTkwLVxubW0vbWVtcG9saWN5LmM6MjU5MTpzdGF0aWMgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX2ludGVybGVhdmUoZ2ZwX3QgZ2ZwLFxubW0vbWVtcG9saWN5LmMtMjU5Mi1cdFx0c3RydWN0IG1lbXBvbGljeSAqcG9sLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxuLS1cbm1tL21lbXBvbGljeS5jLTI2MDctXHRcdGlmIChkZWx0YSkge1xubW0vbWVtcG9saWN5LmM6MjYwODpcdFx0XHRucl9hbGxvY2F0ZWQgPSBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnAsXG5tbS9tZW1wb2xpY3kuYy0yNjA5LVx0XHRcdFx0XHRpbnRlcmxlYXZlX25vZGVzKHBvbCksIE5VTEwsXG4tLVxubW0vbWVtcG9saWN5LmMtMjYxMy1cdFx0fSBlbHNlIHtcbm1tL21lbXBvbGljeS5jOjI2MTQ6XHRcdFx0bnJfYWxsb2NhdGVkID0gYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoZ2ZwLFxubW0vbWVtcG9saWN5LmMtMjYxNS1cdFx0XHRcdFx0aW50ZXJsZWF2ZV9ub2Rlcyhwb2wpLCBOVUxMLFxuLS1cbm1tL21lbXBvbGljeS5jLTI2MjUtXG5tbS9tZW1wb2xpY3kuYzoyNjI2OnN0YXRpYyB1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZShnZnBfdCBnZnAsXG5tbS9tZW1wb2xpY3kuYy0yNjI3LVx0XHRzdHJ1Y3QgbWVtcG9saWN5ICpwb2wsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG4tLVxubW0vbWVtcG9saWN5LmMtMjY2NC1cdFx0bm9kZV9wYWdlcyA9IG1pbihyZW1fcGFnZXMsIHdlaWdodCk7XG5tbS9tZW1wb2xpY3kuYzoyNjY1Olx0XHRucl9hbGxvY2F0ZWQgPSBfX2FsbG9jX3BhZ2VzX2J1bGsoZ2ZwLCBub2RlLCBOVUxMLCBub2RlX3BhZ2VzLFxubW0vbWVtcG9saWN5LmMtMjY2Ni1cdFx0XHRcdFx0XHQgIHBhZ2VfYXJyYXkpO1xuLS1cbm1tL21lbXBvbGljeS5jLTI3MDEtXHQvKlxubW0vbWVtcG9saWN5LmM6MjcwMjpcdCAqIENhbGN1bGF0ZSByb3VuZHMvcGFydGlhbCByb3VuZHMgdG8gbWluaW1pemUgX19hbGxvY19wYWdlc19idWxrIGNhbGxzLlxubW0vbWVtcG9saWN5LmMtMjcwMy1cdCAqIFRyYWNrIHdoaWNoIG5vZGUgd2VpZ2h0ZWQgaW50ZXJsZWF2ZSBzaG91bGQgcmVzdW1lIGZyb20uXG4tLVxubW0vbWVtcG9saWN5LmMtMjcyOS1cdFx0XHRicmVhaztcbm1tL21lbXBvbGljeS5jOjI3MzA6XHRcdG5yX2FsbG9jYXRlZCA9IF9fYWxsb2NfcGFnZXNfYnVsayhnZnAsIG5vZGUsIE5VTEwsIG5vZGVfcGFnZXMsXG5tbS9tZW1wb2xpY3kuYy0yNzMxLVx0XHRcdFx0XHRcdCAgcGFnZV9hcnJheSk7XG4tLVxubW0vbWVtcG9saWN5LmMtMjc0My1cbm1tL21lbXBvbGljeS5jOjI3NDQ6c3RhdGljIHVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19wcmVmZXJyZWRfbWFueShnZnBfdCBnZnAsIGludCBuaWQsXG5tbS9tZW1wb2xpY3kuYy0yNzQ1LVx0XHRzdHJ1Y3QgbWVtcG9saWN5ICpwb2wsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG4tLVxubW0vbWVtcG9saWN5LmMtMjc1My1cbm1tL21lbXBvbGljeS5jOjI3NTQ6XHRucl9hbGxvY2F0ZWQgID0gYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YocHJlZmVycmVkX2dmcCwgbmlkLCBcdTAwMjZwb2wtXHUwMDNlbm9kZXMsXG5tbS9tZW1wb2xpY3kuYy0yNzU1LVx0XHRcdFx0XHQgICBucl9wYWdlcywgcGFnZV9hcnJheSk7XG4tLVxubW0vbWVtcG9saWN5LmMtMjc1Ny1cdGlmIChucl9hbGxvY2F0ZWQgXHUwMDNjIG5yX3BhZ2VzKVxubW0vbWVtcG9saWN5LmM6Mjc1ODpcdFx0bnJfYWxsb2NhdGVkICYjNDM7PSBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnAsIG51bWFfbm9kZV9pZCgpLCBOVUxMLFxubW0vbWVtcG9saWN5LmMtMjc1OS1cdFx0XHRcdG5yX3BhZ2VzIC0gbnJfYWxsb2NhdGVkLFxuLS1cbm1tL21lbXBvbGljeS5jLTI3NjktICovXG5tbS9tZW1wb2xpY3kuYzoyNzcwOnVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mKGdmcF90IGdmcCxcbm1tL21lbXBvbGljeS5jLTI3NzEtXHRcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsIHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheSlcbi0tXG5tbS9tZW1wb2xpY3kuYy0yNzgwLVx0aWYgKHBvbC1cdTAwM2Vtb2RlID09IE1QT0xfSU5URVJMRUFWRSlcbm1tL21lbXBvbGljeS5jOjI3ODE6XHRcdHJldHVybiBhbGxvY19wYWdlc19idWxrX2ludGVybGVhdmUoZ2ZwLCBwb2wsXG5tbS9tZW1wb2xpY3kuYy0yNzgyLVx0XHRcdFx0XHRcdFx0IG5yX3BhZ2VzLCBwYWdlX2FycmF5KTtcbi0tXG5tbS9tZW1wb2xpY3kuYy0yNzg0LVx0aWYgKHBvbC1cdTAwM2Vtb2RlID09IE1QT0xfV0VJR0hURURfSU5URVJMRUFWRSlcbm1tL21lbXBvbGljeS5jOjI3ODU6XHRcdHJldHVybiBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmUoXG5tbS9tZW1wb2xpY3kuYy0yNzg2LVx0XHRcdFx0ICBnZnAsIHBvbCwgbnJfcGFnZXMsIHBhZ2VfYXJyYXkpO1xuLS1cbm1tL21lbXBvbGljeS5jLTI3ODgtXHRpZiAocG9sLVx1MDAzZW1vZGUgPT0gTVBPTF9QUkVGRVJSRURfTUFOWSlcbm1tL21lbXBvbGljeS5jOjI3ODk6XHRcdHJldHVybiBhbGxvY19wYWdlc19idWxrX3ByZWZlcnJlZF9tYW55KGdmcCxcbm1tL21lbXBvbGljeS5jLTI3OTAtXHRcdFx0XHRudW1hX25vZGVfaWQoKSwgcG9sLCBucl9wYWdlcywgcGFnZV9hcnJheSk7XG4tLVxubW0vbWVtcG9saWN5LmMtMjc5My1cdG5vZGVtYXNrID0gcG9saWN5X25vZGVtYXNrKGdmcCwgcG9sLCBOT19JTlRFUkxFQVZFX0lOREVYLCBcdTAwMjZuaWQpO1xubW0vbWVtcG9saWN5LmM6Mjc5NDpcdHJldHVybiBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnAsIG5pZCwgbm9kZW1hc2ssXG5tbS9tZW1wb2xpY3kuYy0yNzk1LVx0XHRcdFx0ICAgICAgIG5yX3BhZ2VzLCBwYWdlX2FycmF5KTtcbi0tXG5tbS9wYWdlX2FsbG9jLmM9NTA5MT1zdGF0aWMgaW5saW5lIGJvb2wgcHJlcGFyZV9hbGxvY19wYWdlcyhnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyLFxuLS1cbm1tL3BhZ2VfYWxsb2MuYy01MTM5LS8qXG5tbS9wYWdlX2FsbG9jLmM6NTE0MDogKiBfX2FsbG9jX3BhZ2VzX2J1bGsgLSBBbGxvY2F0ZSBhIG51bWJlciBvZiBvcmRlci0wIHBhZ2VzIHRvIGFuIGFycmF5XG5tbS9wYWdlX2FsbG9jLmMtNTE0MS0gKiBAZ2ZwOiBHRlAgZmxhZ3MgZm9yIHRoZSBhbGxvY2F0aW9uXG4tLVxubW0vcGFnZV9hbGxvYy5jLTUxNTktICovXG5tbS9wYWdlX2FsbG9jLmM6NTE2MDp1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKGdmcF90IGdmcCwgaW50IHByZWZlcnJlZF9uaWQsXG5tbS9wYWdlX2FsbG9jLmMtNTE2MS1cdFx0XHRub2RlbWFza190ICpub2RlbWFzaywgaW50IG5yX3BhZ2VzLFxuLS1cbm1tL3BhZ2VfYWxsb2MuYy01MzAxLX1cbm1tL3BhZ2VfYWxsb2MuYzo1MzAyOkVYUE9SVF9TWU1CT0xfR1BMKGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKTtcbm1tL3BhZ2VfYWxsb2MuYy01MzAzLVxuLS1cbm1tL3NsdWIuYz03NDI2PXN0YXRpYyBib29sIF9fa21lbV9jYWNoZV9hbGxvY19idWxrKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBmbGFncyxcbi0tXG5tbS9zbHViLmMtNzQ3MC0gKlxubW0vc2x1Yi5jOjc0NzE6ICogVW5saWtlIGFsbG9jX3BhZ2VzX2J1bGsoKSwgdGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBjaGVjayBmb3IgYWxyZWFkeSBhbGxvY2F0ZWRcbm1tL3NsdWIuYy03NDcyLSAqIG9iamVjdHMgaW4gQHAsIGFuZCB0aHVzIHRoZSBjYWxsZXIgZG9lcyBub3QgbmVlZCB0byB6ZXJvIGl0LlxuLS1cbm1tL3ZtYWxsb2MuYz0zNjc2PXZtX2FyZWFfYWxsb2NfcGFnZXMoZ2ZwX3QgZ2ZwLCBpbnQgbmlkLFxuLS1cbm1tL3ZtYWxsb2MuYy0zNzQzLVx0XHRcdGlmIChJU19FTkFCTEVEKENPTkZJR19OVU1BKSBcdTAwMjZcdTAwMjYgbmlkID09IE5VTUFfTk9fTk9ERSlcbm1tL3ZtYWxsb2MuYzozNzQ0Olx0XHRcdFx0bnIgPSBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2YoZ2ZwLFxubW0vdm1hbGxvYy5jLTM3NDUtXHRcdFx0XHRcdFx0XHRucl9wYWdlc19yZXF1ZXN0LFxuLS1cbm1tL3ZtYWxsb2MuYy0zNzQ3LVx0XHRcdGVsc2Vcbm1tL3ZtYWxsb2MuYzozNzQ4Olx0XHRcdFx0bnIgPSBhbGxvY19wYWdlc19idWxrX25vZGVfbm9wcm9mKGdmcCwgbmlkLFxubW0vdm1hbGxvYy5jLTM3NDktXHRcdFx0XHRcdFx0XHRucl9wYWdlc19yZXF1ZXN0LFxuLS1cbm5ldC9jb3JlL3BhZ2VfcG9vbC5jPTYxMT1zdGF0aWMgbm9pbmxpbmUgbmV0bWVtX3JlZiBfX3BhZ2VfcG9vbF9hbGxvY19uZXRtZW1zX3Nsb3coc3RydWN0IHBhZ2VfcG9vbCAqcG9vbCxcbi0tXG5uZXQvY29yZS9wYWdlX3Bvb2wuYy02MzMtXG5uZXQvY29yZS9wYWdlX3Bvb2wuYzo2MzQ6XHQvKiBNYXJrIGVtcHR5IGFsbG9jLmNhY2hlIHNsb3RzIFwmIzM0O2VtcHR5XCYjMzQ7IGZvciBhbGxvY19wYWdlc19idWxrICovXG5uZXQvY29yZS9wYWdlX3Bvb2wuYy02MzUtXHRtZW1zZXQoXHUwMDI2cG9vbC1cdTAwM2VhbGxvYy5jYWNoZSwgMCwgc2l6ZW9mKHZvaWQgKikgKiBidWxrKTtcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTYzNi1cbm5ldC9jb3JlL3BhZ2VfcG9vbC5jOjYzNzpcdG5yX3BhZ2VzID0gYWxsb2NfcGFnZXNfYnVsa19ub2RlKGdmcCwgcG9vbC1cdTAwM2VwLm5pZCwgYnVsayxcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTYzOC1cdFx0XHRcdFx0IChzdHJ1Y3QgcGFnZSAqKilwb29sLVx1MDAzZWFsbG9jLmNhY2hlKTtcbi0tXG5uZXQvc3VucnBjL3N2Y194cHJ0LmM9Njg3PXN0YXRpYyBib29sIHN2Y19maWxsX3BhZ2VzKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsIHN0cnVjdCBwYWdlICoqcGFnZXMsXG4tLVxubmV0L3N1bnJwYy9zdmNfeHBydC5jLTY5Mi1cdGZvciAoZmlsbGVkID0gMDsgZmlsbGVkIFx1MDAzYyBucGFnZXM7IGZpbGxlZCA9IHJldCkge1xubmV0L3N1bnJwYy9zdmNfeHBydC5jOjY5MzpcdFx0cmV0ID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfS0VSTkVMLCBucGFnZXMsIHBhZ2VzKTtcbm5ldC9zdW5ycGMvc3ZjX3hwcnQuYy02OTQtXHRcdGlmIChyZXQgXHUwMDNlIGZpbGxlZClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTI6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY4NzUKCQkJCQkJCW91dHB1dDogMTU4CgkJCQkJCQl0aG91Z2h0czogMjcwMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBEZXRlcm1pbmF0aW9uOiBOZWVkc0tNU0FOID0gZmFsc2UqKgoKT2theSwgaGVyZSYjMzk7cyB0aGUgYnJlYWtkb3duIG9mIG15IHRob3VnaHQgcHJvY2Vzcy4gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCBpbnRyb2R1Y2VzIGBrbXNhbl9hbGxvY19wYWdlYCBhbmQgYHRyYWNlX21tX3BhZ2VfYWxsb2NgIGludG8gYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYC4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBkaWcgaW4gYW5kIHVuZGVyc3RhbmQgKndoeSogdGhpcyBjaGFuZ2UgaXMgaGFwcGVuaW5nLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoaXMgcGF0Y2ggaXRzZWxmIGludHJvZHVjZXMgYW55IG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcywgb3IgaWYgaXQgc2ltcGx5ICplbmFibGVzKiBLTVNBTiB0byBkZXRlY3QgZXhpc3Rpbmcgcmlza3MgYmV0dGVyLiBNeSBleHBlcnRpc2UgbGllcyBpbiB0aGVzZSBtZW1vcnkgZXJyb3IgZGV0ZWN0b3JzLCBzbyBJIG5lZWQgdG8gbWFrZSB0aGUgcmlnaHQgY2FsbC4KCkZpcnN0LCBJIGxvb2tlZCBhdCB3aGVyZSBgYWxsb2NfcGFnZXNfYnVsa2AgaXMgdXNlZC4gSSBzZWUgaXQmIzM5O3MgdXNlZCAqZXZlcnl3aGVyZSosIGluY2x1ZGluZyBjcnVjaWFsIGFyZWFzIGxpa2UgYHZtYWxsb2NgLCBgcGFnZV9wb29sYCwgYW5kIHNwbGljaW5nLiBUaGUgcHJvbXB0IGhpZ2hsaWdodHMgYSBjcml0aWNhbCBkaXN0aW5jdGlvbjogc3RhbmRhcmQgS0FTQU4gY292ZXJzIG1hbnkgYnVncywgYW5kIEtNU0FOIGlzIGZvciBjYXRjaGluZyAqc3BlY2lmaWNhbGx5KiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBhbmQgbGVha3MuIElmIEtBU0FOIGNhbiBjYXRjaCB0aGUgYnVnLCB3ZSBkb24mIzM5O3QgbmVlZCB0aGUgaGVhdnkgS01TQU4gc2Vzc2lvbi4KClRoZSBwYXRjaCYjMzk7cyBnb2FsIGlzIGFkZGluZyBLTVNBTiB0byBwYWdlcyBhbGxvY2F0ZWQgZnJvbSB0aGUgcGVyLWNwdSBwYWdlIGxpc3RzLiBTbywgSSBzZWUgdGhhdCB0aGUgcGF0Y2ggc2VlbXMgdG8gYmUgYW4gKmludGVybmFsIEtNU0FOIGluc3RydW1lbnRhdGlvbiBmaXgqLiBJIHNlZSB0aGlzIHBhdGNoIHdhc24mIzM5O3QgdGhlcmUgcHJldmlvdXNseSwgd2hpY2ggbWVhbnMgYnVsay1hbGxvY2F0ZWQgcGFnZXMgbWlnaHQgbm90IGhhdmUgYmVlbiB0cmFja2VkIGJ5IEtNU0FOLiBJZiB0aGV5IHdlcmVuJiMzOTt0LCB0aGVuIGFueSBjb2RlIHRoYXQgKnVzZXMqIHRob3NlIHBhZ2VzIChsaWtlIGB2bWFsbG9jYCBvciB0aGUgb3RoZXJzIEkgbWVudGlvbmVkKSBtaWdodCBoYXZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIHRoYXQgS01TQU4gd2lsbCBub3cgY2F0Y2guIE5vdywgbXkgbWluZCByYWNlczogRG9lcyB0aGUgcGF0Y2ggKmludHJvZHVjZSogdGhlIGJ1Zywgb3IgaXMgaXQgKmZpeGluZyogS01TQU4/CgpJIGNhcmVmdWxseSByZS1yZWFkIHRoZSBwcm9tcHQmIzM5O3MgY3JpdGVyaWEgZm9yIGBOZWVkc0tNU0FOPXRydWVgLiBJdCYjMzk7cyBhIHN0cnVjdHVyZWQgYXBwcm9hY2gsIHNvIEkgZm9sbG93IHRoZSBydWxlcy4gSXQgc2F5cyB0aGF0IHRoZSBmbGFnIHNob3VsZCBiZSBzZXQgdG8gdHJ1ZSBpZiB0aGUgcGF0Y2ggaW50cm9kdWNlczoKCjEuICBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXJzcGFjZS4KMi4gIENvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLgozLiAgQ29tcGxleCBkYXRhIHN0cnVjdHVyZSBhbGxvY2F0aW9uIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQuCjQuICBCb3VuZHMgY2hlY2tzIG9yIGxvZ2ljIHRoYXQgYWxsb3dzIGFjY2VzcyB0byB1bmluaXRpYWxpemVkIGJ5dGVzLgoKSSBnbyB0aHJvdWdoIGVhY2ggcG9pbnQgbWV0aWN1bG91c2x5LiBEb2VzIHRoZSBwYXRjaCBkbyBhbnkgb2YgdGhlc2UgdGhpbmdzPyBOby4gVGhlIHBhdGNoICphZGRzKiBmdW5jdGlvbiBjYWxsczogYHRyYWNlX21tX3BhZ2VfYWxsb2NgIGFuZCBga21zYW5fYWxsb2NfcGFnZWAuIFRoaXMgaXMgYWRkaW5nIHRyYWNpbmcgYW5kIGluc3RydW1lbnRhdGlvbiwgbm90IGludHJvZHVjaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJ1Z3MuCgpJIHRoZW4gY2hlY2sgdGhlIGNyaXRlcmlhIGZvciBgTmVlZHNLTVNBTj1mYWxzZWA6IGl0IG1lYW5zIHRoYXQgdGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlza3Mgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcywgYW5kIHRoYXQgaXQgZG9lc24mIzM5O3QgaGF2ZSBhbnkgYnVncyBjYXVnaHQgYnkgc3RhbmRhcmQgZGV0ZWN0b3JzLgoKT2theSwgbGV0JiMzOTtzIGxvb2sgYXQgdGhlIHBhdGNoIGl0c2VsZi4gSXMgdGhlcmUgYSByYWNlIGNvbmRpdGlvbiBvciBhIHNwaW5sb2NrIGlzc3VlIHRoYXQgY2FuIGhhcHBlbiB3aGVuIGBrbXNhbl9hbGxvY19wYWdlYCBpcyBjYWxsZWQ/IFRoZSBmdW5jdGlvbiBpcyBiZWluZyBjYWxsZWQgKmluc2lkZSogYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCwgc28gaXMgdGhlcmUgYW55IHBvc3NpYmlsaXR5IG9mIGRlYWRsb2NrcyBvciBjcmFzaGVzPyBJIGxvb2sgY2xvc2VseSBhdCB0aGUgY29kZS4gSSBub3RlIHRoYXQgdGhlcmUgaXMgYSBzcGlubG9jayBoZWxkIGR1cmluZyB0aGlzIGNvZGUgcGF0aC4gQnV0LCBhZnRlciBsb29raW5nLCBga21zYW5fYWxsb2NfcGFnZWAgaXMgc2FmZSB1bmRlciB0aGUgc3BpbmxvY2sgYmVjYXVzZSBzdGFuZGFyZCBkZXRlY3RvcnMsIExPQ0tERVAsIGFuZCBLQVNBTiBzaG91bGQgYmUgYWJsZSB0byBjYXRjaCBhbnkgaXNzdWVzIHRoZXJlLgoKVGhlIHBhdGNoIGl0c2VsZiAqZG9lcyBub3QqIGludHJvZHVjZSBhbnkgbmV3IHNvdXJjZXMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgYW55IGxlYWtzLiBUaGUgZ29hbCBvZiB0aGlzIHBhdGNoIGlzIHRoYXQgS01TQU4gY2FuIGRldGVjdCB0aGVzZSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gSWYgdGhlIHBhdGNoIGFkZHMgdHdvIGZ1bmN0aW9uIGNhbGxzLCBhbmQgaWYgdGhlIHBhdGNoIGRvZXNuJiMzOTt0IGludHJvZHVjZSB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZXMgb3IgbGVha3MsIHRoZW4gZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLgoKVGhlcmVmb3JlLCBiZWNhdXNlIHRoaXMgcGF0Y2ggZml4ZXMgS01TQU4gaW5zdHJ1bWVudGF0aW9uIChieSBhZGRpbmcgY2FsbHMgdG8gYHRyYWNlX21tX3BhZ2VfYWxsb2NgIGFuZCBga21zYW5fYWxsb2NfcGFnZWAgaW50byBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgKSB3aXRob3V0IGludHJvZHVjaW5nIGFueSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0aWVzLCBJIGFtIGNvbmNsdWRpbmcgdGhhdCBOZWVkc0tNU0FOIG11c3QgYmUgc2V0IHRvIGBmYWxzZWAuIEtBU0FOL0xPQ0tERVAvZXRjLiB3aWxsIGNhdGNoIGFueSBpc3N1ZXMgd2l0aCBsb2NraW5nL09PQiwgYW5kIHRoaXMgaXMgZml4aW5nIEtNU0FOIGludGVybmFsbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDEyOjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgbWlzc2luZyBgdHJhY2VfbW1fcGFnZV9hbGxvY2AgYW5kIGBrbXNhbl9hbGxvY19wYWdlYCBjYWxscyB0byBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoKWAgaW4gYG1tL3BhZ2VfYWxsb2MuY2AgZm9yIHBhZ2VzIGFsbG9jYXRlZCBmcm9tIHBlci1DUFUgbGlzdHMuXG5cblRoaXMgbW9kaWZpY2F0aW9uIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGtlcm5lbCBpbmZvLWxlYWtzLCB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMsIG9yIGZhdWx0eSBidWZmZXIgYm91bmRzLiBBbnkgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIChzdWNoIGFzIGxvY2tpbmcgb3IgY29udGV4dCBpc3N1ZXMgd2hpbGUgaG9sZGluZyB0aGUgUENQIHNwaW5sb2NrIG9yIGludmFsaWQgcGFnZSBwb2ludGVycykgYXJlIGRldGVjdGFibGUgYnkgTE9DS0RFUCwgS0FTQU4sIGFuZCBzdGFuZGFyZCBkZWJ1Z2dpbmcgZmFjaWxpdGllcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgbWlzc2luZyBgdHJhY2VfbW1fcGFnZV9hbGxvY2AgYW5kIGBrbXNhbl9hbGxvY19wYWdlYCBjYWxscyB0byBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoKWAgaW4gYG1tL3BhZ2VfYWxsb2MuY2AgZm9yIHBhZ2VzIGFsbG9jYXRlZCBmcm9tIHBlci1DUFUgbGlzdHMuXG5cblRoaXMgbW9kaWZpY2F0aW9uIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGtlcm5lbCBpbmZvLWxlYWtzLCB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMsIG9yIGZhdWx0eSBidWZmZXIgYm91bmRzLiBBbnkgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIChzdWNoIGFzIGxvY2tpbmcgb3IgY29udGV4dCBpc3N1ZXMgd2hpbGUgaG9sZGluZyB0aGUgUENQIHNwaW5sb2NrIG9yIGludmFsaWQgcGFnZSBwb2ludGVycykgYXJlIGRldGVjdGFibGUgYnkgTE9DS0RFUCwgS0FTQU4sIGFuZCBzdGFuZGFyZCBkZWJ1Z2dpbmcgZmFjaWxpdGllcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDhUMTI6MDg6MzQuOTY4MDAwMDQ2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzMyMzcxOTE3MzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS01TQU5cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhbGxvY19wYWdlc19idWxrX25vcHJvZlwiLFxuICAgIFwiYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIG1pc3NpbmcgYHRyYWNlX21tX3BhZ2VfYWxsb2NgIGFuZCBga21zYW5fYWxsb2NfcGFnZWAgY2FsbHMgdG8gYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKClgIGluIGBtbS9wYWdlX2FsbG9jLmNgIGZvciBwYWdlcyBhbGxvY2F0ZWQgZnJvbSBwZXItQ1BVIGxpc3RzLlxcblxcblRoaXMgbW9kaWZpY2F0aW9uIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGtlcm5lbCBpbmZvLWxlYWtzLCB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMsIG9yIGZhdWx0eSBidWZmZXIgYm91bmRzLiBBbnkgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIChzdWNoIGFzIGxvY2tpbmcgb3IgY29udGV4dCBpc3N1ZXMgd2hpbGUgaG9sZGluZyB0aGUgUENQIHNwaW5sb2NrIG9yIGludmFsaWQgcGFnZSBwb2ludGVycykgYXJlIGRldGVjdGFibGUgYnkgTE9DS0RFUCwgS0FTQU4sIGFuZCBzdGFuZGFyZCBkZWJ1Z2dpbmcgZmFjaWxpdGllcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBtbS9wYWdlX2FsbG9jLmMgYnkgYWRkaW5nIHRyYWNlX21tX3BhZ2VfYWxsb2MgYW5kIGttc2FuX2FsbG9jX3BhZ2UgdG8gYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YuIFRoaXMgZW5zdXJlcyBidWxrLWFsbG9jYXRlZCBwYWdlcyBoYXZlIHByb3BlciBLTVNBTiBzaGFkb3cgbWV0YWRhdGEgYW5kIGFsbG9jYXRpb24gdHJhY2luZy4gVGhlIGNoYW5nZSBtb2RpZmllcyByZWFjaGFibGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIGFuZCB3YXJyYW50cyBmdXp6aW5nLCBlc3BlY2lhbGx5IHVuZGVyIEtNU0FOLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxMjowODozNC45NjgwMDUxNTVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2MDIyNTk2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDI2YWIzMGRkMzlmYzc4NjhmZTMyMGM5MDI2ZTdjZDllNjRlYWEzNWZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBTZXAgOCAxMjowODozNCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS9wYWdlX2FsbG9jLmMgYi9tbS9wYWdlX2FsbG9jLmNcXG5pbmRleCAxMmZhYzkwODRjNDgzLi5lYWM0MTllZWY2OTdhIDEwMDY0NFxcbi0tLSBhL21tL3BhZ2VfYWxsb2MuY1xcbisrKyBiL21tL3BhZ2VfYWxsb2MuY1xcbkBAIC01Mjc5LDYgKzUyNzksOCBAQCB1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKGdmcF90IGdmcCwgaW50IHByZWZlcnJlZF9uaWQsXFxuIFxcdFxcdG5yX2FjY291bnQrKztcXG4gXFxuIFxcdFxcdHByZXBfbmV3X3BhZ2UocGFnZSwgMCwgZ2ZwLCBBTExPQ19ERUZBVUxUKTtcXG4rXFx0XFx0dHJhY2VfbW1fcGFnZV9hbGxvYyhwYWdlLCAwLCBnZnAsIGFjLm1pZ3JhdGV0eXBlKTtcXG4rXFx0XFx0a21zYW5fYWxsb2NfcGFnZShwYWdlLCAwLCBnZnAgXFx1MDAyNiB+X19HRlBfUkVDTEFJTSk7XFxuIFxcdFxcdHNldF9wYWdlX3JlZmNvdW50ZWQocGFnZSk7XFxuIFxcdFxcdHBhZ2VfYXJyYXlbbnJfcG9wdWxhdGVkKytdID0gcGFnZTtcXG4gXFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxMjowODozNS41Mjg5NjE0MTdaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjM4MTQ1OTk2NTM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktNU0FOXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZcIixcbiAgICBcImFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIG1tL3BhZ2VfYWxsb2MuYyBieSBhZGRpbmcgdHJhY2VfbW1fcGFnZV9hbGxvYyBhbmQga21zYW5fYWxsb2NfcGFnZSB0byBhbGxvY19wYWdlc19idWxrX25vcHJvZi4gVGhpcyBlbnN1cmVzIGJ1bGstYWxsb2NhdGVkIHBhZ2VzIGhhdmUgcHJvcGVyIEtNU0FOIHNoYWRvdyBtZXRhZGF0YSBhbmQgYWxsb2NhdGlvbiB0cmFjaW5nLiBUaGUgY2hhbmdlIG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgYW5kIHdhcnJhbnRzIGZ1enppbmcsIGVzcGVjaWFsbHkgdW5kZXIgS01TQU4uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMjZhYjMwZGQzOWZjNzg2OGZlMzIwYzkwMjZlN2NkOWU2NGVhYTM1ZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDggMTI6MDg6MzQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9wYWdlX2FsbG9jLmMgYi9tbS9wYWdlX2FsbG9jLmNcbmluZGV4IDEyZmFjOTA4NGM0ODMuLmVhYzQxOWVlZjY5N2EgMTAwNjQ0XG4tLS0gYS9tbS9wYWdlX2FsbG9jLmNcbisrKyBiL21tL3BhZ2VfYWxsb2MuY1xuQEAgLTUyNzksNiArNTI3OSw4IEBAIHVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoZ2ZwX3QgZ2ZwLCBpbnQgcHJlZmVycmVkX25pZCxcbiBcdFx0bnJfYWNjb3VudCsrO1xuIFxuIFx0XHRwcmVwX25ld19wYWdlKHBhZ2UsIDAsIGdmcCwgQUxMT0NfREVGQVVMVCk7XG4rXHRcdHRyYWNlX21tX3BhZ2VfYWxsb2MocGFnZSwgMCwgZ2ZwLCBhYy5taWdyYXRldHlwZSk7XG4rXHRcdGttc2FuX2FsbG9jX3BhZ2UocGFnZSwgMCwgZ2ZwIFx1MDAyNiB+X19HRlBfUkVDTEFJTSk7XG4gXHRcdHNldF9wYWdlX3JlZmNvdW50ZWQocGFnZSk7XG4gXHRcdHBhZ2VfYXJyYXlbbnJfcG9wdWxhdGVkKytdID0gcGFnZTtcbiBcdH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDEyOjA4OjM1LjUyODk2Mjg5N1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUzNTMwOTIxMjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBNZW1vcnkgQWxsb2NhdGlvbiBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBJIHNlZSBjaGFuZ2VzIGluIGBtbS9wYWdlX2FsbG9jLmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIGZ1bmN0aW9uLiBUaGUgZGlmZiBoaWdobGlnaHRzIHRoZSBhZGRpdGlvbiBvZiB0d28gbmV3IGxpbmVzIHdpdGhpbiB0aGUgbG9vcCB0aGF0IHByb2Nlc3NlcyB0aGUgYnVsayBwYWdlIGFsbG9jYXRpb24uIFxuXG5GaXJzdCwgYHRyYWNlX21tX3BhZ2VfYWxsb2NgIGlzIGJlaW5nIGFkZGVkLiBUaGlzIGlzIGludGVyZXN0aW5nLiBJdCBsaWtlbHkgaW50cm9kdWNlcyBhIG5ldyB0cmFjaW5nIHBvaW50IGZvciBtZW1vcnkgYWxsb2NhdGlvbiBldmVudHMuIEJhc2VkIG9uIHRoZSBhcmd1bWVudHMsIGl0IHNlZW1zIHRvIGJlIHJlY29yZGluZyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgYWxsb2NhdGVkIGBwYWdlYCwgYW4gaW5kZXgsIHRoZSBHRlAgZmxhZ3MsIGFuZCB0aGUgbWlncmF0aW9uIHR5cGUuIFRoaXMgY291bGQgYmUgaW5jcmVkaWJseSB1c2VmdWwgZm9yIGRlYnVnZ2luZyBhbGxvY2F0aW9uIHBhdHRlcm5zIGFuZCBwZXJmb3JtYW5jZSBhbmFseXNpcywgZ2l2aW5nIHVzIG1vcmUgZ3JhbnVsYXJpdHkgaW4gdW5kZXJzdGFuZGluZyBtZW1vcnkgYWxsb2NhdGlvbiBiZWhhdmlvci4gV2UgbWlnaHQgd2FudCB0byBsb29rIGF0IHRoZSByZWxldmFudCB0cmFjZXBvaW50cyB0byBzZWUgd2hhdCBkYXRhIGlzIGJlaW5nIGNvbGxlY3RlZCBhbmQgaG93IHdlIGNhbiB1dGlsaXplIGl0IGZvciBwZXJmb3JtYW5jZSBpbnNpZ2h0cy5cblxuU2Vjb25kLCB0aGUgYWRkaXRpb24gb2YgYGttc2FuX2FsbG9jX3BhZ2VgLiBUaGlzIHN1Z2dlc3RzIHRoZSBpbnRlZ3JhdGlvbiBvZiBLZXJuZWwgTWVtb3J5IFNhbml0aXplciAoS01TQU4pIGludG8gdGhlIHBhZ2UgYWxsb2NhdGlvbiBwcm9jZXNzLiBUaGUgY2FsbCBpcyBwYXNzaW5nIHRoZSBgcGFnZWAsIGluZGV4LCBhbmQgYSBtb2RpZmllZCBHRlAgZmxhZyB0aGF0IG1hc2tzIG91dCBgX19HRlBfUkVDTEFJTWAuIFRoaXMgaXMgcHJvYmFibHkgdG8gZW5zdXJlIHRoYXQgS01TQU4gaXMgZm9jdXNpbmcgb24gZnJlc2ggYWxsb2NhdGlvbnMsIG5vdCBwb3RlbnRpYWxseSBhbHJlYWR5IGZyZWVkIG1lbW9yeSwgd2hpY2ggY291bGQgY2F1c2UgZmFsc2UgcG9zaXRpdmVzIG9yIG90aGVyIGlzc3VlcyB3aXRoIEtNU0FOJ3MgY2hlY2tzLiBJJ2xsIG5lZWQgdG8gcmVtZW1iZXIgdG8gbG9vayBhdCBLTVNBTidzIGltcGxlbWVudGF0aW9uIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgaXQgaXMgdXNpbmcgdGhpcyBpbmZvcm1hdGlvbiBhbmQgd2hhdCBjaGVja3MgaXQncyBwZXJmb3JtaW5nLiBJdOKAmXMgYW4gaW1wb3J0YW50IGFkZGl0aW9uIGZvciBkZXRlY3RpbmcgbWVtb3J5IGVycm9ycyBlYXJseSBvbi5cblxuSSBzaG91bGQgcHJvYmFibHkgdXNlIG15IHRvb2xzIOKAkyBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAg4oCTIHRvIGNoZWNrIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGBtbS9wYWdlX2FsbG9jLmNgIG5lYXIgbGluZSA1Mjc5IHRvIGdldCBhIGJldHRlciBzZW5zZSBvZiBob3cgdGhlc2UgbmV3IGxpbmVzIGZpdCBpbnRvIHRoZSBicm9hZGVyIGNvbnRleHQgb2YgdGhlIHBhZ2UgYWxsb2NhdGlvbiBsb2dpYy4gVGhpcyB3aWxsIGdpdmUgbWUgYSBtb3JlIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhlIHBhdGNoJ3MgaW1wYWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODg3LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjc3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTI6MDg6NDAuODgyMDY2MDY5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTA5NjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3BhZ2VfYWxsb2MuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1MjYwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI1MjYwOlxcdFxcdHBjcF9saXN0ID0gXFx1MDAyNnBjcC1cXHUwMDNlbGlzdHNbb3JkZXJfdG9fcGluZGV4KGFjLm1pZ3JhdGV0eXBlLCAwKV07XFxuNTI2MTpcXHRcXHR3aGlsZSAobnJfcG9wdWxhdGVkIFxcdTAwM2MgbnJfcGFnZXMpIHtcXG41MjYyOlxcdFxcbjUyNjM6XFx0XFx0XFx0LyogU2tpcCBleGlzdGluZyBwYWdlcyAqL1xcbjUyNjQ6XFx0XFx0XFx0aWYgKHBhZ2VfYXJyYXlbbnJfcG9wdWxhdGVkXSkge1xcbjUyNjU6XFx0XFx0XFx0XFx0bnJfcG9wdWxhdGVkKys7XFxuNTI2NjpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG41MjY3OlxcdFxcdFxcdH1cXG41MjY4OlxcdFxcbjUyNjk6XFx0XFx0XFx0cGFnZSA9IF9fcm1xdWV1ZV9wY3BsaXN0KHpvbmUsIDAsIGFjLm1pZ3JhdGV0eXBlLCBhbGxvY19mbGFncyxcXG41MjcwOlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdHBjcCwgcGNwX2xpc3QpO1xcbjUyNzE6XFx0XFx0XFx0aWYgKHVubGlrZWx5KCFwYWdlKSkge1xcbjUyNzI6XFx0XFx0XFx0XFx0LyogVHJ5IGFuZCBhbGxvY2F0ZSBhdCBsZWFzdCBvbmUgcGFnZSAqL1xcbjUyNzM6XFx0XFx0XFx0XFx0aWYgKCFucl9hY2NvdW50KSB7XFxuNTI3NDpcXHRcXHRcXHRcXHRcXHRwY3Bfc3Bpbl91bmxvY2socGNwKTtcXG41Mjc1OlxcdFxcdFxcdFxcdFxcdGdvdG8gZmFpbGVkO1xcbjUyNzY6XFx0XFx0XFx0XFx0fVxcbjUyNzc6XFx0XFx0XFx0XFx0YnJlYWs7XFxuNTI3ODpcXHRcXHRcXHR9XFxuNTI3OTpcXHRcXHRcXHRucl9hY2NvdW50Kys7XFxuNTI4MDpcXHRcXG41MjgxOlxcdFxcdFxcdHByZXBfbmV3X3BhZ2UocGFnZSwgMCwgZ2ZwLCBBTExPQ19ERUZBVUxUKTtcXG41MjgyOlxcdFxcdFxcdHRyYWNlX21tX3BhZ2VfYWxsb2MocGFnZSwgMCwgZ2ZwLCBhYy5taWdyYXRldHlwZSk7XFxuNTI4MzpcXHRcXHRcXHRrbXNhbl9hbGxvY19wYWdlKHBhZ2UsIDAsIGdmcCBcXHUwMDI2IH5fX0dGUF9SRUNMQUlNKTtcXG41Mjg0OlxcdFxcdFxcdHNldF9wYWdlX3JlZmNvdW50ZWQocGFnZSk7XFxuNTI4NTpcXHRcXHRcXHRwYWdlX2FycmF5W25yX3BvcHVsYXRlZCsrXSA9IHBhZ2U7XFxuNTI4NjpcXHRcXHR9XFxuNTI4NzpcXHRcXG41Mjg4OlxcdFxcdHBjcF9zcGluX3VubG9jayhwY3ApO1xcbjUyODk6XFx0XFxuNTI5MDpcXHRcXHRfX2NvdW50X3ppZF92bV9ldmVudHMoUEdBTExPQywgem9uZV9pZHgoem9uZSksIG5yX2FjY291bnQpO1xcbjUyOTE6XFx0XFx0em9uZV9zdGF0aXN0aWNzKHpvbmVsaXN0X3pvbmUoYWMucHJlZmVycmVkX3pvbmVyZWYpLCB6b25lLCBucl9hY2NvdW50KTtcXG41MjkyOlxcdFxcbjUyOTM6XFx0b3V0OlxcbjUyOTQ6XFx0XFx0cmV0dXJuIG5yX3BvcHVsYXRlZDtcXG41Mjk1OlxcdFxcbjUyOTY6XFx0ZmFpbGVkOlxcbjUyOTc6XFx0XFx0cGFnZSA9IF9fYWxsb2NfcGFnZXNfbm9wcm9mKGdmcCwgMCwgcHJlZmVycmVkX25pZCwgbm9kZW1hc2ssIEFMTE9DX0RFRkFVTFQpO1xcbjUyOTg6XFx0XFx0aWYgKHBhZ2UpXFxuNTI5OTpcXHRcXHRcXHRwYWdlX2FycmF5W25yX3BvcHVsYXRlZCsrXSA9IHBhZ2U7XFxuNTMwMDpcXHRcXHRnb3RvIG91dDtcXG41MzAxOlxcdH1cXG41MzAyOlxcdEVYUE9SVF9TWU1CT0xfR1BMKGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKTtcXG41MzAzOlxcdFxcbjUzMDQ6XFx0LypcXG41MzA1OlxcdCAqIGZyZWVfcGFnZXNfYnVsayAtIEZyZWUgYW4gYXJyYXkgb2Ygb3JkZXItMCBwYWdlc1xcbjUzMDY6XFx0ICogQHBhZ2VfYXJyYXk6IEFycmF5IG9mIHBhZ2VzIHRvIGZyZWVcXG41MzA3OlxcdCAqIEBucl9wYWdlczogVGhlIG51bWJlciBvZiBwYWdlcyBpbiB0aGUgYXJyYXlcXG41MzA4OlxcdCAqXFxuNTMwOTpcXHQgKiBGcmVlIHRoZSBvcmRlci0wIHBhZ2VzLiBBZGphY2VudCBlbnRyaWVzIHdob3NlIFBGTnMgZm9ybSBhIGNvbnRpZ3VvdXNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTI6MDg6NDAuODgyNTc4Nzg5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjMzMDMyMjg2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNaXNzaW5nIFRyYWNlcG9pbnRzIGFuZCBLTVNBTiBDYWxscyBpbiBQQ1AgUGFnZSBBbGxvY2F0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCB3aXRoaW4gYG1tL3BhZ2VfYWxsb2MuY2AsIGFuZCBpdCBhcHBlYXJzIHRoYXQgdGhlIHRyYWNlcG9pbnRzIGFuZCBLTVNBTiBob29rcyBhcmUgYWJzZW50IHdoZW4gYWxsb2NhdGluZyBwYWdlcyBmcm9tIHRoZSBQQ1AgbGlzdC4gU3BlY2lmaWNhbGx5LCBJJ20gbm90IHNlZWluZyBgdHJhY2VfbW1fcGFnZV9hbGxvYyhwYWdlLCAwLCBnZnAsIGFjLm1pZ3JhdGV0eXBlKTtgIGFuZCBga21zYW5fYWxsb2NfcGFnZShwYWdlLCAwLCBnZnAgXHUwMDI2IH5fX0dGUF9SRUNMQUlNKTtgLiBUaGlzIG9taXNzaW9uIGltbWVkaWF0ZWx5IHJhaXNlcyBhIHJlZCBmbGFnOyB0aGVzZSBhcmUgcHJldHR5IGZ1bmRhbWVudGFsIGRlYnVnZ2luZyBhbmQgbWVtb3J5IHNhZmV0eSB0b29scy4gQmVmb3JlIEkganVtcCB0byBjb25jbHVzaW9ucyBhbmQgZmlsZSBhIHBhdGNoLCB0aG91Z2gsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeS4gSSdkIGJldHRlciBkaWcgZGVlcGVyLiBMZXQgbWUgcXVpY2tseSBleGFtaW5lIG90aGVyIGBhbGxvY19wYWdlc2AgZnVuY3Rpb25zIGFuZCB0aGUgY2FsbCBwYXRocyBpbnRvIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoaXMgaXMgYW4gaW50ZW50aW9uYWwgZGVzaWduIGRlY2lzaW9uLCBhIHJlZ3Jlc3Npb24sIG9yIHNpbXBseSBhbiBvdmVyc2lnaHQuIENoZWNraW5nIHRoZSBoaXN0b3J5IGFuZCBjYWxsZXJzIHdpbGwgcHJvdmlkZSBjcnVjaWFsIGNvbnRleHQg4oCTIGFyZSB0aGVzZSB0cmFjZXBvaW50cyBjb25zaXN0ZW50bHkgcHJlc2VudCBlbHNld2hlcmUsIGFuZCBpZiBzbywgd2hlbiBhbmQgd2h5IHdlcmUgdGhleSBwb3RlbnRpYWxseSByZW1vdmVkIGhlcmU/IExldCdzIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzNjYsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxMjowODo0My4yMTI5MDM5NTRaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTIwNzM0MDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia21zYW5fYWxsb2NfcGFnZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0va21zYW4vc2hhZG93LmM9MTY5PUVYUE9SVF9TWU1CT0woa21zYW5fY29weV9wYWdlX21ldGEpO1xcbm1tL2ttc2FuL3NoYWRvdy5jLTE3MC1cXG5tbS9rbXNhbi9zaGFkb3cuYzoxNzE6dm9pZCBrbXNhbl9hbGxvY19wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIsIGdmcF90IGZsYWdzKVxcbm1tL2ttc2FuL3NoYWRvdy5jLTE3Mi17XFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9NTE2MD11bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKGdmcF90IGdmcCwgaW50IHByZWZlcnJlZF9uaWQsXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNTI4Mi1cXHRcXHR0cmFjZV9tbV9wYWdlX2FsbG9jKHBhZ2UsIDAsIGdmcCwgYWMubWlncmF0ZXR5cGUpO1xcbm1tL3BhZ2VfYWxsb2MuYzo1MjgzOlxcdFxcdGttc2FuX2FsbG9jX3BhZ2UocGFnZSwgMCwgZ2ZwIFxcdTAwMjYgfl9fR0ZQX1JFQ0xBSU0pO1xcbm1tL3BhZ2VfYWxsb2MuYy01Mjg0LVxcdFxcdHNldF9wYWdlX3JlZmNvdW50ZWQocGFnZSk7XFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9NTM0NT1zdGF0aWMgaW5saW5lIGJvb2wgYWxsb2Nfbm9sb2NrX2FsbG93ZWQodm9pZClcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy01MzcwLSAqXFxubW0vcGFnZV9hbGxvYy5jOjUzNzE6ICogU3BlY2lmeSBfX0dGUF9aRVJPIHRvIG1ha2Ugc3VyZSB0aGF0IGNhbGwgdG8ga21zYW5fYWxsb2NfcGFnZSgpIGJlbG93XFxubW0vcGFnZV9hbGxvYy5jLTUzNzItICogaXMgc2FmZSBpbiBhbnkgY29udGV4dC4gQWxzbyB6ZXJvaW5nIHRoZSBwYWdlIGlzIG1hbmRhdG9yeSBmb3JcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz01Mzg1PXN0cnVjdCBwYWdlICpfX2FsbG9jX2Zyb3plbl9wYWdlc19ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNTQ2MS1cXHR0cmFjZV9tbV9wYWdlX2FsbG9jKHBhZ2UsIG9yZGVyLCBhbGxvY19nZnAsIGFjLm1pZ3JhdGV0eXBlKTtcXG5tbS9wYWdlX2FsbG9jLmM6NTQ2MjpcXHRrbXNhbl9hbGxvY19wYWdlKHBhZ2UsIG9yZGVyLCBhbGxvY19nZnApO1xcbm1tL3BhZ2VfYWxsb2MuYy01NDYzLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxMjowODo0My4yNjQ5ODE2NzNaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNTc0MTA4NTczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgUGFnZSBBbGxvY2F0aW9uIEJ1bGsgT3BlcmF0aW9ucyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSBjb25jZXJuIGlzIGVuc3VyaW5nIHRoZSBjb25zaXN0ZW5jeSBvZiBvdXIgcGFnZSBhbGxvY2F0aW9uIHN0cmF0ZWd5IGFjcm9zcyB0aGUgc3lzdGVtLiBJIG5lZWQgdG8gY29tcHJlaGVuc2l2ZWx5IHVuZGVyc3RhbmQgd2hlcmUgYGFsbG9jX3BhZ2VzX2J1bGtfYXJyYXlgLCBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgLCBhbmQgYGFsbG9jX3BhZ2VzX2J1bGtfbGlzdGAgYXJlIGludm9rZWQuIEEgdGhvcm91Z2ggYXVkaXQgaXMgZXNzZW50aWFsIHRvIGF2b2lkIGFueSBwb3RlbnRpYWwgcmVncmVzc2lvbnMgb3IgdW5mb3Jlc2VlbiBpbnRlcmFjdGlvbnMuXG5cbkZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAgKmFjdHVhbGx5KiBkb2VzIHVuZGVyIHRoZSBob29kLiBVbmRlcnN0YW5kaW5nIGl0cyBpbnRlcm5hbCBtZWNoYW5pY3MsIHRoZSBwYXJhbWV0ZXJzIGl0IHRha2VzLCBhbmQgaXRzIHBvdGVudGlhbCBzaWRlIGVmZmVjdHMgd2lsbCBiZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgZnVsbCBzY29wZSBvZiBvdXIgbWVtb3J5IG1hbmFnZW1lbnQgc3RyYXRlZ3kuIFRoYXQncyBteSBpbW1lZGlhdGUgZm9jdXMgbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MjMxLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTI6MDg6NDUuODM5MDk0MzA3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjg4NTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3BhZ2VfYWxsb2MuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1MTYwLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI1MTYwOlxcdHVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoZ2ZwX3QgZ2ZwLCBpbnQgcHJlZmVycmVkX25pZCxcXG41MTYxOlxcdFxcdFxcdFxcdG5vZGVtYXNrX3QgKm5vZGVtYXNrLCBpbnQgbnJfcGFnZXMsXFxuNTE2MjpcXHRcXHRcXHRcXHRzdHJ1Y3QgcGFnZSAqKnBhZ2VfYXJyYXkpXFxuNTE2MzpcXHR7XFxuNTE2NDpcXHRcXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcXG41MTY1OlxcdFxcdHN0cnVjdCB6b25lICp6b25lO1xcbjUxNjY6XFx0XFx0c3RydWN0IHpvbmVyZWYgKno7XFxuNTE2NzpcXHRcXHRzdHJ1Y3QgcGVyX2NwdV9wYWdlcyAqcGNwO1xcbjUxNjg6XFx0XFx0c3RydWN0IGxpc3RfaGVhZCAqcGNwX2xpc3Q7XFxuNTE2OTpcXHRcXHRzdHJ1Y3QgYWxsb2NfY29udGV4dCBhYztcXG41MTcwOlxcdFxcdHVuc2lnbmVkIGludCBhbGxvY19mbGFncyA9IEFMTE9DX1dNQVJLX0xPVztcXG41MTcxOlxcdFxcdGludCBucl9wb3B1bGF0ZWQgPSAwLCBucl9hY2NvdW50ID0gMDtcXG41MTcyOlxcdFxcbjUxNzM6XFx0XFx0LypcXG41MTc0OlxcdFxcdCAqIFNraXAgcG9wdWxhdGVkIGFycmF5IGVsZW1lbnRzIHRvIGRldGVybWluZSBpZiBhbnkgcGFnZXMgbmVlZFxcbjUxNzU6XFx0XFx0ICogdG8gYmUgYWxsb2NhdGVkIGJlZm9yZSBkaXNhYmxpbmcgSVJRcy5cXG41MTc2OlxcdFxcdCAqL1xcbjUxNzc6XFx0XFx0d2hpbGUgKG5yX3BvcHVsYXRlZCBcXHUwMDNjIG5yX3BhZ2VzIFxcdTAwMjZcXHUwMDI2IHBhZ2VfYXJyYXlbbnJfcG9wdWxhdGVkXSlcXG41MTc4OlxcdFxcdFxcdG5yX3BvcHVsYXRlZCsrO1xcbjUxNzk6XFx0XFxuNTE4MDpcXHRcXHQvKiBObyBwYWdlcyByZXF1ZXN0ZWQ/ICovXFxuNTE4MTpcXHRcXHRpZiAodW5saWtlbHkobnJfcGFnZXMgXFx1MDAzYz0gMCkpXFxuNTE4MjpcXHRcXHRcXHRnb3RvIG91dDtcXG41MTgzOlxcdFxcbjUxODQ6XFx0XFx0LyogQWxyZWFkeSBwb3B1bGF0ZWQgYXJyYXk/ICovXFxuNTE4NTpcXHRcXHRpZiAodW5saWtlbHkobnJfcGFnZXMgLSBucl9wb3B1bGF0ZWQgPT0gMCkpXFxuNTE4NjpcXHRcXHRcXHRnb3RvIG91dDtcXG41MTg3OlxcdFxcbjUxODg6XFx0XFx0LyogQnVsayBhbGxvY2F0b3IgZG9lcyBub3Qgc3VwcG9ydCBtZW1jZyBhY2NvdW50aW5nLiAqL1xcbjUxODk6XFx0XFx0aWYgKG1lbWNnX2ttZW1fb25saW5lKCkgXFx1MDAyNlxcdTAwMjYgKGdmcCBcXHUwMDI2IF9fR0ZQX0FDQ09VTlQpKVxcbjUxOTA6XFx0XFx0XFx0Z290byBmYWlsZWQ7XFxuNTE5MTpcXHRcXG41MTkyOlxcdFxcdC8qIFVzZSB0aGUgc2luZ2xlIHBhZ2UgYWxsb2NhdG9yIGZvciBvbmUgcGFnZS4gKi9cXG41MTkzOlxcdFxcdGlmIChucl9wYWdlcyAtIG5yX3BvcHVsYXRlZCA9PSAxKVxcbjUxOTQ6XFx0XFx0XFx0Z290byBmYWlsZWQ7XFxuNTE5NTpcXHRcXG41MTk2OlxcdCNpZmRlZiBDT05GSUdfUEFHRV9PV05FUlxcbjUxOTc6XFx0XFx0LypcXG41MTk4OlxcdFxcdCAqIFBBR0VfT1dORVIgbWF5IHJlY3Vyc2UgaW50byB0aGUgYWxsb2NhdG9yIHRvIGFsbG9jYXRlIHNwYWNlIHRvXFxuNTE5OTpcXHRcXHQgKiBzYXZlIHRoZSBzdGFjayB3aXRoIHBhZ2VzZXRzLmxvY2sgaGVsZC4gUmVsZWFzaW5nL3JlYWNxdWlyaW5nXFxuNTIwMDpcXHRcXHQgKiByZW1vdmVzIG11Y2ggb2YgdGhlIHBlcmZvcm1hbmNlIGJlbmVmaXQgb2YgYnVsayBhbGxvY2F0aW9uIHNvXFxuNTIwMTpcXHRcXHQgKiBmb3JjZSB0aGUgY2FsbGVyIHRvIGFsbG9jYXRlIG9uZSBwYWdlIGF0IGEgdGltZSBhcyBpdCdsbCBoYXZlXFxuNTIwMjpcXHRcXHQgKiBzaW1pbGFyIHBlcmZvcm1hbmNlIHRvIGFkZGVkIGNvbXBsZXhpdHkgdG8gdGhlIGJ1bGsgYWxsb2NhdG9yLlxcbjUyMDM6XFx0XFx0ICovXFxuNTIwNDpcXHRcXHRpZiAoc3RhdGljX2JyYW5jaF91bmxpa2VseShcXHUwMDI2cGFnZV9vd25lcl9pbml0ZWQpKVxcbjUyMDU6XFx0XFx0XFx0Z290byBmYWlsZWQ7XFxuNTIwNjpcXHQjZW5kaWZcXG41MjA3OlxcdFxcbjUyMDg6XFx0XFx0LyogTWF5IHNldCBBTExPQ19OT0ZSQUdNRU5ULCBmcmFnbWVudGF0aW9uIHdpbGwgcmV0dXJuIDEgcGFnZS4gKi9cXG41MjA5OlxcdFxcdGdmcCBcXHUwMDI2PSBnZnBfYWxsb3dlZF9tYXNrO1xcbjUyMTA6XFx0XFx0aWYgKCFwcmVwYXJlX2FsbG9jX3BhZ2VzKGdmcCwgMCwgcHJlZmVycmVkX25pZCwgbm9kZW1hc2ssIFxcdTAwMjZhYywgXFx1MDAyNmdmcCwgXFx1MDAyNmFsbG9jX2ZsYWdzKSlcXG41MjExOlxcdFxcdFxcdGdvdG8gb3V0O1xcbjUyMTI6XFx0XFxuNTIxMzpcXHRcXHQvKiBGaW5kIGFuIGFsbG93ZWQgbG9jYWwgem9uZSB0aGF0IG1lZXRzIHRoZSBsb3cgd2F0ZXJtYXJrLiAqL1xcbjUyMTQ6XFx0XFx0eiA9IGFjLnByZWZlcnJlZF96b25lcmVmO1xcbjUyMTU6XFx0XFx0Zm9yX25leHRfem9uZV96b25lbGlzdF9ub2RlbWFzayh6b25lLCB6LCBhYy5oaWdoZXN0X3pvbmVpZHgsIGFjLm5vZGVtYXNrKSB7XFxuNTIxNjpcXHRcXHRcXHR1bnNpZ25lZCBsb25nIG1hcms7XFxuNTIxNzpcXHRcXG41MjE4OlxcdFxcdFxcdGlmIChjcHVzZXRzX2VuYWJsZWQoKSBcXHUwMDI2XFx1MDAyNiAoYWxsb2NfZmxhZ3MgXFx1MDAyNiBBTExPQ19DUFVTRVQpIFxcdTAwMjZcXHUwMDI2XFxuNTIxOTpcXHRcXHRcXHQgICAgIV9fY3B1c2V0X3pvbmVfYWxsb3dlZCh6b25lLCBnZnApKSB7XFxuNTIyMDpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG41MjIxOlxcdFxcdFxcdH1cXG41MjIyOlxcdFxcbjUyMjM6XFx0XFx0XFx0aWYgKG5yX29ubGluZV9ub2RlcyBcXHUwMDNlIDEgXFx1MDAyNlxcdTAwMjYgem9uZSAhPSB6b25lbGlzdF96b25lKGFjLnByZWZlcnJlZF96b25lcmVmKSBcXHUwMDI2XFx1MDAyNlxcbjUyMjQ6XFx0XFx0XFx0ICAgIHpvbmVfdG9fbmlkKHpvbmUpICE9IHpvbmVsaXN0X25vZGVfaWR4KGFjLnByZWZlcnJlZF96b25lcmVmKSkge1xcbjUyMjU6XFx0XFx0XFx0XFx0Z290byBmYWlsZWQ7XFxuNTIyNjpcXHRcXHRcXHR9XFxuNTIyNzpcXHRcXG41MjI4OlxcdFxcdFxcdGNvbmRfYWNjZXB0X21lbW9yeSh6b25lLCAwLCBhbGxvY19mbGFncyk7XFxuNTIyOTpcXHRyZXRyeV90aGlzX3pvbmU6XFxuNTIzMDpcXHRcXHRcXHRtYXJrID0gd21hcmtfcGFnZXMoem9uZSwgYWxsb2NfZmxhZ3MgXFx1MDAyNiBBTExPQ19XTUFSS19NQVNLKSArIG5yX3BhZ2VzIC0gbnJfcG9wdWxhdGVkO1xcbjUyMzE6XFx0XFx0XFx0aWYgKHpvbmVfd2F0ZXJtYXJrX2Zhc3Qoem9uZSwgMCwgIG1hcmssXFxuNTIzMjpcXHRcXHRcXHRcXHRcXHR6b25lbGlzdF96b25lX2lkeChhYy5wcmVmZXJyZWRfem9uZXJlZiksXFxuNTIzMzpcXHRcXHRcXHRcXHRcXHRhbGxvY19mbGFncywgZ2ZwKSkge1xcbjUyMzQ6XFx0XFx0XFx0XFx0YnJlYWs7XFxuNTIzNTpcXHRcXHRcXHR9XFxuNTIzNjpcXHRcXG41MjM3OlxcdFxcdFxcdGlmIChjb25kX2FjY2VwdF9tZW1vcnkoem9uZSwgMCwgYWxsb2NfZmxhZ3MpKVxcbjUyMzg6XFx0XFx0XFx0XFx0Z290byByZXRyeV90aGlzX3pvbmU7XFxuNTIzOTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTI6MDg6NDUuODM5Mzg0NDU3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mzc2ODExMTk5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBGdXp6aW5nIFdvcnRoaW5lc3MqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCBpbiBgbW0vcGFnZV9hbGxvYy5jYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGNvbmZpcm0gdGhhdCBgbW0vcGFnZV9hbGxvYy5jYCBpcyBpbmRlZWQgcGFydCBvZiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gKGBtbS9gKSwgd2hpY2ggaXQgaXMuIFRoYXQncyBhIGNoZWNrIGluIHRoZSBhZmZpcm1hdGl2ZSBmb3IgY29yZSBzdWJzeXN0ZW1zLCBhbmQgdGhlcmVmb3JlLCBhIGNhbmRpZGF0ZSBmb3IgZnV6emluZy5cblxuSSBxdWlja2x5IGNoZWNrIHRoZSBwb3NpdGl2ZSBjcml0ZXJpYSBmb3IgZGV0ZXJtaW5pbmcgZnV6emluZyB3b3J0aGluZXNzOiBcIkFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLi4uXCIgLSBZZXAsIHdlJ3JlIGluIHRoZSByaWdodCBuZWlnaGJvcmhvb2QuXG5cbkJ1dCBob2xkIG9uLCBiZWZvcmUgSSBqdW1wIHRvIGNvbmNsdXNpb25zLCBJIG5lZWQgdG8gcnVsZSBvdXQgYW55IG9mIHRoZSBuZWdhdGl2ZSBjcml0ZXJpYS4gVGhlIG5lZ2F0aXZlIGNyaXRlcmlhIHNheSBJICpvbmx5KiByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAgaWYgdGhlIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byB0aGUgbGlzdGVkIGNhdGVnb3JpZXMuIEkgbmVlZCB0byBiZSBzdXJlIHRoaXMgKmlzbid0KiBhIG5vbi1rZXJuZWwgY2hhbmdlLCBkZWNvcmF0aXZlIGxvZ2dpbmcsIG9yIHVucmVhY2hhYmxlIGNvZGUuXG5cbkxldCdzIHNlZSB3aGF0IHdhcyBhZGRlZC4gT2theSwgdGhlcmUncyBgdHJhY2VfbW1fcGFnZV9hbGxvY2Agd2hpY2ggKmNvdWxkKiBiZSBjb25zaWRlcmVkIGRlY29yYXRpdmUuIEJ1dCB0aGVyZSdzIGFsc28gYGttc2FuX2FsbG9jX3BhZ2UocGFnZSwgMCwgZ2ZwIFx1MDAyNiB+X19HRlBfUkVDTEFJTSk7YC5cblxuV2FpdCBhIG1pbnV0ZS4uLiBga21zYW5fYWxsb2NfcGFnZWAgaXMgKm5vdCoganVzdCBhIHRyYWNlcG9pbnQuIFRoYXQgaW5pdGlhbGl6ZXMgdGhlIEtNU0FOIHNoYWRvdy9vcmlnaW4gbWV0YWRhdGEgZm9yIHRoZSBhbGxvY2F0ZWQgcGFnZSEgV2l0aG91dCBpdCwgS01TQU4gd291bGQgaGF2ZSBtYWpvciBpc3N1ZXMsIHRyZWF0aW5nIHRoZSBidWxrLWFsbG9jYXRlZCBwYWdlcyBhcyB1bmluaXRpYWxpemVkIG9yIHdpdGggY29ycnVwdCBzaGFkb3cgbWVtb3J5LiBUaGlzIGlzICpjcml0aWNhbCogZm9yIEtNU0FOIGZ1bmN0aW9uYWxpdHkuIFRoaXMgaXMgYSBsb2dpYyBjaGFuZ2UhXG5cbkkgbmVlZCB0byBkaWcgaW50byBga21zYW5fYWxsb2NfcGFnZWAgZnVydGhlciB0byBjb25maXJtIGV4YWN0bHkgaG93IGl0IGltcGFjdHMgY29udHJvbCBmbG93LCBidXQgSSdtIGxlYW5pbmcgaGVhdmlseSB0b3dhcmRzIHRoaXMgcGF0Y2ggYmVpbmcgZnV6emluZy13b3J0aHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY3NTcsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MDIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxMjowODo0OS42MDc0OTg3NTJaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzE2MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0va21zYW4vc2hhZG93LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTcxLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTcxOlxcdHZvaWQga21zYW5fYWxsb2NfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyLCBnZnBfdCBmbGFncylcXG4gMTcyOlxcdHtcXG4gMTczOlxcdFxcdGJvb2wgaW5pdGlhbGl6ZWQgPSAoZmxhZ3MgXFx1MDAyNiBfX0dGUF9aRVJPKSB8fCAha21zYW5fZW5hYmxlZDtcXG4gMTc0OlxcdFxcdHN0cnVjdCBwYWdlICpzaGFkb3csICpvcmlnaW47XFxuIDE3NTpcXHRcXHRkZXBvdF9zdGFja19oYW5kbGVfdCBoYW5kbGU7XFxuIDE3NjpcXHRcXHRpbnQgcGFnZXMgPSAxIFxcdTAwM2NcXHUwMDNjIG9yZGVyO1xcbiAxNzc6XFx0XFxuIDE3ODpcXHRcXHRpZiAoIXBhZ2UpXFxuIDE3OTpcXHRcXHRcXHRyZXR1cm47XFxuIDE4MDpcXHRcXG4gMTgxOlxcdFxcdHNoYWRvdyA9IHNoYWRvd19wYWdlX2ZvcihwYWdlKTtcXG4gMTgyOlxcdFxcdG9yaWdpbiA9IG9yaWdpbl9wYWdlX2ZvcihwYWdlKTtcXG4gMTgzOlxcdFxcbiAxODQ6XFx0XFx0aWYgKGluaXRpYWxpemVkKSB7XFxuIDE4NTpcXHRcXHRcXHRfX21lbXNldChwYWdlX2FkZHJlc3Moc2hhZG93KSwgMCwgUEFHRV9TSVpFICogcGFnZXMpO1xcbiAxODY6XFx0XFx0XFx0X19tZW1zZXQocGFnZV9hZGRyZXNzKG9yaWdpbiksIDAsIFBBR0VfU0laRSAqIHBhZ2VzKTtcXG4gMTg3OlxcdFxcdFxcdHJldHVybjtcXG4gMTg4OlxcdFxcdH1cXG4gMTg5OlxcdFxcbiAxOTA6XFx0XFx0LyogWmVybyBwYWdlcyBhbGxvY2F0ZWQgYnkgdGhlIHJ1bnRpbWUgc2hvdWxkIGFsc28gYmUgaW5pdGlhbGl6ZWQuICovXFxuIDE5MTpcXHRcXHRpZiAoa21zYW5faW5fcnVudGltZSgpKVxcbiAxOTI6XFx0XFx0XFx0cmV0dXJuO1xcbiAxOTM6XFx0XFxuIDE5NDpcXHRcXHRfX21lbXNldChwYWdlX2FkZHJlc3Moc2hhZG93KSwgLTEsIFBBR0VfU0laRSAqIHBhZ2VzKTtcXG4gMTk1OlxcdFxcdGttc2FuX2VudGVyX3J1bnRpbWUoKTtcXG4gMTk2OlxcdFxcdGhhbmRsZSA9IGttc2FuX3NhdmVfc3RhY2tfd2l0aF9mbGFncyhmbGFncywgLypleHRyYV9iaXRzKi8gMCk7XFxuIDE5NzpcXHRcXHRrbXNhbl9sZWF2ZV9ydW50aW1lKCk7XFxuIDE5ODpcXHRcXHQvKlxcbiAxOTk6XFx0XFx0ICogQWRkcmVzc2VzIGFyZSBwYWdlLWFsaWduZWQsIHBhZ2VzIGFyZSBjb250aWd1b3VzLCBzbyBpdCdzIG9rXFxuIDIwMDpcXHRcXHQgKiB0byBqdXN0IGZpbGwgdGhlIG9yaWdpbiBwYWdlcyB3aXRoIEBoYW5kbGUuXFxuIDIwMTpcXHRcXHQgKi9cXG4gMjAyOlxcdFxcdGZvciAoaW50IGkgPSAwOyBpIFxcdTAwM2MgUEFHRV9TSVpFICogcGFnZXMgLyBzaXplb2YoaGFuZGxlKTsgaSsrKVxcbiAyMDM6XFx0XFx0XFx0KChkZXBvdF9zdGFja19oYW5kbGVfdCAqKXBhZ2VfYWRkcmVzcyhvcmlnaW4pKVtpXSA9IGhhbmRsZTtcXG4gMjA0OlxcdH1cXG4gMjA1OlxcdFxcbiAyMDY6XFx0dm9pZCBrbXNhbl9mcmVlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcilcXG4gMjA3OlxcdHtcXG4gMjA4OlxcdFxcdGlmICgha21zYW5fZW5hYmxlZCB8fCBrbXNhbl9pbl9ydW50aW1lKCkpXFxuIDIwOTpcXHRcXHRcXHRyZXR1cm47XFxuIDIxMDpcXHRcXHRrbXNhbl9lbnRlcl9ydW50aW1lKCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDEyOjA4OjQ5LjYwNzU3Mzc5MloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTQyNzQxMzgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBNZW1vcnkgQWxsb2NhdGlvbiBpbiB0aGUgS2VybmVsKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgYGttc2FuX2FsbG9jX3BhZ2VgIGZ1bmN0aW9uLiBGcm9tIHdoYXQgSSBjYW4gZ2F0aGVyLCBpdCdzIGNsZWFybHkgaW52b2x2ZWQgaW4gbWFuYWdpbmcgbWV0YWRhdGEsIHNoYWRvdyBwYWdlcywgc3RhY2sgZGVwb3RzLCBvcmlnaW4gcGFnZXMsIGFuZCBhbGwgdGhhdCBmdW4gc3R1ZmYgcmVsYXRlZCB0byBtZW1vcnkuIE15IGltbWVkaWF0ZSBxdWVzdGlvbiBpczogd2hhdCBhcmUgdGhlIHVwc3RyZWFtIGZ1bmN0aW9ucyB0aGF0IGFyZSBjYWxsaW5nIGBhbGxvY19wYWdlc19idWxrYCBhbmQgYGFsbG9jX3BhZ2VzX2J1bGtfYXJyYXlgPyBUaGVzZSBhcmUga2V5LCBiZWNhdXNlIGtub3dpbmcgd2hvJ3MgKnJlcXVlc3RpbmcqIHRoaXMgYnVsayBhbGxvY2F0aW9uIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBvdmVyYWxsIG1lbW9yeSBtYW5hZ2VtZW50IHNjaGVtZS4gSSBuZWVkIHRvIHRyYWNlIHRoaXMgYmFjay4gU28sIGxldCdzIHN0YXJ0IHdpdGggYSBzZWFyY2ggZm9yIGNhbGxlcnMgb2YgYGFsbG9jX3BhZ2VzX2J1bGtgLiBUaGF0J3Mgd2hlcmUgSSBuZWVkIHRvIGZvY3VzIG15IGVmZm9ydHMuIEknbGwgZ2V0IHRoZSBsYXkgb2YgdGhlIGxhbmQgZnJvbSB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODMwNiwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTI6MDg6NTEuNTUwMzE4NjA0WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTgyNTExNjUyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFsbG9jX3BhZ2VzX2J1bGtcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jPTE3Mj1zdGF0aWMgc3RydWN0IGJpbyAqYmxrX2NyeXB0b19hbGxvY19lbmNfYmlvKHN0cnVjdCBiaW8gKmJpb19zcmMsXFxuLS1cXG5ibG9jay9ibGstY3J5cHRvLWZhbGxiYWNrLmMtMjA0LVxcdCAqXFxuYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jOjIwNTpcXHQgKiBOb3RlOiBhbGxvY19wYWdlc19idWxrIG5lZWRzIHRoZSBhcnJheSB0byBiZSB6ZXJvZWQsIGFzIGl0IGFzc3VtZXNcXG5ibG9jay9ibGstY3J5cHRvLWZhbGxiYWNrLmMtMjA2LVxcdCAqIGFueSBub24temVybyBzbG90IGFscmVhZHkgY29udGFpbnMgYSB2YWxpZCBhbGxvY2F0aW9uLlxcbi0tXFxuYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jLTIwOC1cXHRtZW1zZXQocGFnZXMsIDAsIHNpemVvZihzdHJ1Y3QgcGFnZSAqKSAqIG5yX3NlZ3MpO1xcbmJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYzoyMDk6XFx0bnJfYWxsb2NhdGVkID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfS0VSTkVMLCBucl9zZWdzLCBwYWdlcyk7XFxuYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jLTIxMC1cXHRpZiAobnJfYWxsb2NhdGVkIFxcdTAwM2MgbnJfc2VncylcXG4tLVxcbmRyaXZlcnMvZmlyZXdpcmUvY29yZS1pc28uYz0zMT1pbnQgZndfaXNvX2J1ZmZlcl9hbGxvYyhzdHJ1Y3QgZndfaXNvX2J1ZmZlciAqYnVmZmVyLCBpbnQgcGFnZV9jb3VudClcXG4tLVxcbmRyaXZlcnMvZmlyZXdpcmUvY29yZS1pc28uYy00MS1cXHQvLyBjb252ZW5pZW5jZSB0byBtYXAgdGhlbSBpbnRvIHZpcnR1YWwgYWRkcmVzcyBzcGFjZSBvZiB1c2VyIHByb2Nlc3MuXFxuZHJpdmVycy9maXJld2lyZS9jb3JlLWlzby5jOjQyOlxcdHVuc2lnbmVkIGxvbmcgbnJfcG9wdWxhdGVkID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfS0VSTkVMIHwgR0ZQX0RNQTMyIHwgX19HRlBfWkVSTyxcXG5kcml2ZXJzL2ZpcmV3aXJlL2NvcmUtaXNvLmMtNDMtXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgcGFnZV9jb3VudCwgcGFnZV9hcnJheSk7XFxuLS1cXG5kcml2ZXJzL2ZpcmV3aXJlL29oY2kuYz04NDg9c3RhdGljIGludCBhcl9jb250ZXh0X2luaXQoc3RydWN0IGFyX2NvbnRleHQgKmN0eCwgc3RydWN0IGZ3X29oY2kgKm9oY2ksXFxuLS1cXG5kcml2ZXJzL2ZpcmV3aXJlL29oY2kuYy04NjQtXFx0Ly8gYWRkcmVzcyByYW5nZSBpbiBrZXJuZWwgdmlydHVhbCBhZGRyZXNzIHNwYWNlLlxcbmRyaXZlcnMvZmlyZXdpcmUvb2hjaS5jOjg2NTpcXHR1bnNpZ25lZCBsb25nIG5yX3BvcHVsYXRlZCA9IGFsbG9jX3BhZ2VzX2J1bGsoR0ZQX0tFUk5FTCB8IEdGUF9ETUEzMiwgQVJfQlVGRkVSUywgcGFnZXMpO1xcbmRyaXZlcnMvZmlyZXdpcmUvb2hjaS5jLTg2Ni1cXG4tLVxcbmRyaXZlcnMvc3RhZ2luZy9tZWRpYS9hdG9taXNwL3BjaS9obW0vaG1tX2JvLmM9NjIxPXN0YXRpYyBpbnQgYWxsb2NfcHJpdmF0ZV9wYWdlcyhzdHJ1Y3QgaG1tX2J1ZmZlcl9vYmplY3QgKmJvKVxcbi0tXFxuZHJpdmVycy9zdGFnaW5nL21lZGlhL2F0b21pc3AvcGNpL2htbS9obW1fYm8uYy02MjYtXFxuZHJpdmVycy9zdGFnaW5nL21lZGlhL2F0b21pc3AvcGNpL2htbS9obW1fYm8uYzo2Mjc6XFx0bnJfYWxsb2NhdGVkID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfS0VSTkVMLCBiby1cXHUwMDNlcGduciwgYm8tXFx1MDAzZXBhZ2VzKTtcXG5kcml2ZXJzL3N0YWdpbmcvbWVkaWEvYXRvbWlzcC9wY2kvaG1tL2htbV9iby5jLTYyOC1cXHQvKlxcbmRyaXZlcnMvc3RhZ2luZy9tZWRpYS9hdG9taXNwL3BjaS9obW0vaG1tX2JvLmM6NjI5OlxcdCAqIGFsbG9jX3BhZ2VzX2J1bGsoKSBkb2VzIG5vdCB0cnkgdmVyeSBoYXJkIHRvIGdldCBwYWdlcyB1bmRlciBtZW1vcnlcXG5kcml2ZXJzL3N0YWdpbmcvbWVkaWEvYXRvbWlzcC9wY2kvaG1tL2htbV9iby5jLTYzMC1cXHQgKiBwcmVzc3VyZS4gSWYgbmVjZXNzYXJ5IGZhbGwgYmFjayB0byBhbGxvY19wYWdlKCkuXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL21seDUvY21kLmM9NDY2PXN0YXRpYyB2b2lkIGZyZWVfcGFnZV9saXN0KHUzMiBucGFnZXMsIHN0cnVjdCBwYWdlICoqcGFnZV9saXN0KVxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS9tbHg1L2NtZC5jLTQ2OS1cXG5kcml2ZXJzL3ZmaW8vcGNpL21seDUvY21kLmM6NDcwOlxcdC8qIFVuZG8gYWxsb2NfcGFnZXNfYnVsaygpICovXFxuZHJpdmVycy92ZmlvL3BjaS9tbHg1L2NtZC5jLTQ3MS1cXHRmb3IgKGkgPSBucGFnZXMgLSAxOyBpIFxcdTAwM2U9IDA7IGktLSlcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvbWx4NS9jbWQuYz00OTY9c3RhdGljIGludCBtbHg1dmZfYWRkX3BhZ2VzKHN0cnVjdCBwYWdlICoqKnBhZ2VfbGlzdCwgdW5zaWduZWQgaW50IG5wYWdlcylcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvbWx4NS9jbWQuYy01MDYtXFx0Zm9yICg7Oykge1xcbmRyaXZlcnMvdmZpby9wY2kvbWx4NS9jbWQuYzo1MDc6XFx0XFx0ZmlsbGVkID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfS0VSTkVMX0FDQ09VTlQsIG5wYWdlcyAtIGRvbmUsXFxuZHJpdmVycy92ZmlvL3BjaS9tbHg1L2NtZC5jLTUwOC1cXHRcXHRcXHRcXHRcXHQgICpwYWdlX2xpc3QgKyBkb25lKTtcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvdmlydGlvL21pZ3JhdGUuYz02Mz1zdGF0aWMgaW50IHZpcnRpb3ZmX2FkZF9taWdyYXRpb25fcGFnZXMoc3RydWN0IHZpcnRpb3ZmX2RhdGFfYnVmZmVyICpidWYsXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZpcnRpby9taWdyYXRlLmMtNzgtXFx0ZG8ge1xcbmRyaXZlcnMvdmZpby9wY2kvdmlydGlvL21pZ3JhdGUuYzo3OTpcXHRcXHRmaWxsZWQgPSBhbGxvY19wYWdlc19idWxrKEdGUF9LRVJORUxfQUNDT1VOVCwgdG9fZmlsbCxcXG5kcml2ZXJzL3ZmaW8vcGNpL3ZpcnRpby9taWdyYXRlLmMtODAtXFx0XFx0XFx0XFx0XFx0ICBwYWdlX2xpc3QpO1xcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS92aXJ0aW8vbWlncmF0ZS5jPTExMD1zdGF0aWMgdm9pZCB2aXJ0aW92Zl9mcmVlX2RhdGFfYnVmZmVyKHN0cnVjdCB2aXJ0aW92Zl9kYXRhX2J1ZmZlciAqYnVmKVxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS92aXJ0aW8vbWlncmF0ZS5jLTExMy1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZpcnRpby9taWdyYXRlLmM6MTE0OlxcdC8qIFVuZG8gYWxsb2NfcGFnZXNfYnVsaygpICovXFxuZHJpdmVycy92ZmlvL3BjaS92aXJ0aW8vbWlncmF0ZS5jLTExNS1cXHRmb3JfZWFjaF9zZ3RhYmxlX3BhZ2UoXFx1MDAyNmJ1Zi1cXHUwMDNldGFibGUuc2d0LCBcXHUwMDI2c2dfaXRlciwgMClcXG4tLVxcbmZzL2J0cmZzL2V4dGVudF9pby5jPTY4ND1pbnQgYnRyZnNfYWxsb2NfcGFnZV9hcnJheSh1bnNpZ25lZCBpbnQgbnJfcGFnZXMsIHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheSwgZ2ZwX3QgZ2ZwKVxcbi0tXFxuZnMvYnRyZnMvZXh0ZW50X2lvLmMtNjkwLVxcbmZzL2J0cmZzL2V4dGVudF9pby5jOjY5MTpcXHRcXHRhbGxvY2F0ZWQgPSBhbGxvY19wYWdlc19idWxrKGdmcCwgbnJfcGFnZXMsIHBhZ2VfYXJyYXkpO1xcbmZzL2J0cmZzL2V4dGVudF9pby5jLTY5Mi1cXHRcXHRpZiAodW5saWtlbHkoYWxsb2NhdGVkID09IGxhc3QpKSB7XFxuLS1cXG5mcy9lcm9mcy96dXRpbC5jPTY1PWludCB6X2Vyb2ZzX2didWZfZ3Jvd3NpemUodW5zaWduZWQgaW50IG5ycGFnZXMpXFxuLS1cXG5mcy9lcm9mcy96dXRpbC5jLTg5LVxcdFxcdFxcdGxhc3QgPSBqO1xcbmZzL2Vyb2ZzL3p1dGlsLmM6OTA6XFx0XFx0XFx0aiA9IGFsbG9jX3BhZ2VzX2J1bGsoR0ZQX0tFUk5FTCwgbnJwYWdlcywgdG1wX3BhZ2VzKTtcXG5mcy9lcm9mcy96dXRpbC5jLTkxLVxcdFxcdFxcdGlmIChsYXN0ID09IGopXFxuLS1cXG5mcy9mdXNlL3JlYWRkaXIuYz0zMzY9c3RhdGljIHN0cnVjdCBwYWdlICoqZnVzZV9yZWFkZGlyX2FsbG9jX2J1ZihzdHJ1Y3QgZnVzZV9hcmdzX3BhZ2VzICphcCwgc2l6ZV90ICpidWZzaXplKVxcbi0tXFxuZnMvZnVzZS9yZWFkZGlyLmMtMzQzLVxcbmZzL2Z1c2UvcmVhZGRpci5jOjM0NDpcXHRucl9hbGxvYyA9IGFsbG9jX3BhZ2VzX2J1bGsoR0ZQX0tFUk5FTCwgbnJfcGFnZXMsIHBhZ2VzKTtcXG5mcy9mdXNlL3JlYWRkaXIuYy0zNDUtXFx0aWYgKCFucl9hbGxvYylcXG4tLVxcbmZzL25mc2QvbmZzNHN0YXRlLmM9MTMyNj1hbGxvY19pbml0X2Rpcl9kZWxlZyhzdHJ1Y3QgbmZzNF9jbGllbnQgKmNscCwgc3RydWN0IG5mczRfZmlsZSAqZnApXFxuLS1cXG5mcy9uZnNkL25mczRzdGF0ZS5jLTEzMzctXFxuZnMvbmZzZC9uZnM0c3RhdGUuYzoxMzM4OlxcdG5wYWdlcyA9IGFsbG9jX3BhZ2VzX2J1bGsoR0ZQX0tFUk5FTCwgTk9USUZZNF9QQUdFX0FSUkFZX1NJWkUsIG5jbi1cXHUwMDNlbmNuX3BhZ2VzKTtcXG5mcy9uZnNkL25mczRzdGF0ZS5jLTEzMzktXFx0aWYgKG5wYWdlcyAhPSBOT1RJRlk0X1BBR0VfQVJSQVlfU0laRSkge1xcbi0tXFxuZnMvc3BsaWNlLmM9MzE4PXNzaXplX3QgY29weV9zcGxpY2VfcmVhZChzdHJ1Y3QgZmlsZSAqaW4sIGxvZmZfdCAqcHBvcyxcXG4tLVxcbmZzL3NwbGljZS5jLTM0MS1cXHRwYWdlcyA9IChzdHJ1Y3QgcGFnZSAqKikoYnYgKyBucGFnZXMpO1xcbmZzL3NwbGljZS5jOjM0MjpcXHRucGFnZXMgPSBhbGxvY19wYWdlc19idWxrKEdGUF9VU0VSLCBucGFnZXMsIHBhZ2VzKTtcXG5mcy9zcGxpY2UuYy0zNDMtXFx0aWYgKCFucGFnZXMpIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvZ2ZwLmg9MjA3PXN0cnVjdCBmb2xpbyAqX19mb2xpb19hbGxvY19ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsIGludCBwcmVmZXJyZWRfbmlkLFxcbi0tXFxuaW5jbHVkZS9saW51eC9nZnAuaC0yMTAtXFxuaW5jbHVkZS9saW51eC9nZnAuaDoyMTE6dW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnBfdCBnZnAsIGludCBwcmVmZXJyZWRfbmlkLFxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjEyLVxcdFxcdFxcdFxcdG5vZGVtYXNrX3QgKm5vZGVtYXNrLCBpbnQgbnJfcGFnZXMsXFxuaW5jbHVkZS9saW51eC9nZnAuaC0yMTMtXFx0XFx0XFx0XFx0c3RydWN0IHBhZ2UgKipwYWdlX2FycmF5KTtcXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjIxNDojZGVmaW5lIF9fYWxsb2NfcGFnZXNfYnVsayguLi4pXFx0XFx0XFx0YWxsb2NfaG9va3MoYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoX19WQV9BUkdTX18pKVxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjE1LVxcbmluY2x1ZGUvbGludXgvZ2ZwLmg9MjE2PXZvaWQgZnJlZV9wYWdlc19idWxrKHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheSwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyk7XFxuaW5jbHVkZS9saW51eC9nZnAuaC0yMTctXFxuaW5jbHVkZS9saW51eC9nZnAuaDoyMTg6dW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2YoZ2ZwX3QgZ2ZwLFxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjE5LVxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXFxuaW5jbHVkZS9saW51eC9nZnAuaC0yMjAtXFx0XFx0XFx0XFx0c3RydWN0IHBhZ2UgKipwYWdlX2FycmF5KTtcXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjIyMTojZGVmaW5lICBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeSguLi4pXFx0XFx0XFx0XFx0XFxcXFxcbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjIyOlxcdGFsbG9jX2hvb2tzKGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZihfX1ZBX0FSR1NfXykpXFxuaW5jbHVkZS9saW51eC9nZnAuaC0yMjMtXFxuaW5jbHVkZS9saW51eC9nZnAuaC0yMjQtLyogQnVsayBhbGxvY2F0ZSBvcmRlci0wIHBhZ2VzICovXFxuaW5jbHVkZS9saW51eC9nZnAuaDoyMjU6I2RlZmluZSBhbGxvY19wYWdlc19idWxrKF9nZnAsIF9ucl9wYWdlcywgX3BhZ2VfYXJyYXkpXFx0XFx0XFxcXFxcbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjI2OlxcdF9fYWxsb2NfcGFnZXNfYnVsayhfZ2ZwLCBudW1hX21lbV9pZCgpLCBOVUxMLCBfbnJfcGFnZXMsIF9wYWdlX2FycmF5KVxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjI3LVxcbmluY2x1ZGUvbGludXgvZ2ZwLmg9MjI4PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZ1xcbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjI5OmFsbG9jX3BhZ2VzX2J1bGtfbm9kZV9ub3Byb2YoZ2ZwX3QgZ2ZwLCBpbnQgbmlkLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjMwLVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheSlcXG4tLVxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjM0LVxcbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjM1OlxcdHJldHVybiBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnAsIG5pZCwgTlVMTCwgbnJfcGFnZXMsIHBhZ2VfYXJyYXkpO1xcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjM2LX1cXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIzNy1cXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjIzODojZGVmaW5lIGFsbG9jX3BhZ2VzX2J1bGtfbm9kZSguLi4pXFx0XFx0XFx0XFx0XFxcXFxcbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjM5OlxcdGFsbG9jX2hvb2tzKGFsbG9jX3BhZ2VzX2J1bGtfbm9kZV9ub3Byb2YoX19WQV9BUkdTX18pKVxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjQwLVxcbi0tXFxuaW9fdXJpbmcvbWVtbWFwLmM9MTc0PXN0YXRpYyBpbnQgaW9fcmVnaW9uX2FsbG9jYXRlX3BhZ2VzKHN0cnVjdCBpb19tYXBwZWRfcmVnaW9uICptcixcXG4tLVxcbmlvX3VyaW5nL21lbW1hcC5jLTE5Mi1cXG5pb191cmluZy9tZW1tYXAuYzoxOTM6XFx0bnJfYWxsb2NhdGVkID0gYWxsb2NfcGFnZXNfYnVsa19ub2RlKGdmcCwgTlVNQV9OT19OT0RFLFxcbmlvX3VyaW5nL21lbW1hcC5jLTE5NC1cXHRcXHRcXHRcXHRcXHQgICAgIG1yLVxcdTAwM2Vucl9wYWdlcywgcGFnZXMpO1xcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jPTY2OD1zdGF0aWMgbG9uZyBhcmVuYV9hbGxvY19wYWdlcyhzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSwgbG9uZyB1YWRkciwgbG9uZyBwYWdlX2NudCwgaW50IG5vZGVfaWQsXFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtNzMyLVxcbmtlcm5lbC9icGYvYXJlbmEuYzo3MzM6XFx0XFx0LyogemVyb2luZyBpcyBuZWVkZWQsIHNpbmNlIGFsbG9jX3BhZ2VzX2J1bGsoKSBvbmx5IGZpbGxzIGluIG5vbi16ZXJvIGVudHJpZXMgKi9cXG5rZXJuZWwvYnBmL2FyZW5hLmMtNzM0LVxcdFxcdG1lbXNldChwYWdlcywgMCwgdGhpc19iYXRjaCAqIHNpemVvZihzdHJ1Y3QgcGFnZSAqKSk7XFxuLS1cXG5saWIvdGVzdF92bWFsbG9jLmM9MzkxPXZtX21hcF9yYW1fdGVzdCh2b2lkKVxcbi0tXFxubGliL3Rlc3Rfdm1hbGxvYy5jLTQwMy1cXG5saWIvdGVzdF92bWFsbG9jLmM6NDA0OlxcdG5yX2FsbG9jYXRlZCA9IGFsbG9jX3BhZ2VzX2J1bGsoR0ZQX0tFUk5FTCwgbWFwX25yX3BhZ2VzLCBwYWdlcyk7XFxubGliL3Rlc3Rfdm1hbGxvYy5jLTQwNS1cXHRpZiAobnJfYWxsb2NhdGVkICE9IG1hcF9ucl9wYWdlcylcXG4tLVxcbmxpYi90ZXN0cy9rdW5pdF9pb3ZfaXRlci5jPTUxPXN0YXRpYyB2b2lkICpfX2luaXQgaW92X2t1bml0X2NyZWF0ZV9idWZmZXIoc3RydWN0IGt1bml0ICp0ZXN0LFxcbi0tXFxubGliL3Rlc3RzL2t1bml0X2lvdl9pdGVyLmMtNjYtXFx0XFx0bGFzdCA9IGdvdDtcXG5saWIvdGVzdHMva3VuaXRfaW92X2l0ZXIuYzo2NzpcXHRcXHRnb3QgPSBhbGxvY19wYWdlc19idWxrKEdGUF9LRVJORUwsIG5wYWdlcywgcGFnZXMpO1xcbmxpYi90ZXN0cy9rdW5pdF9pb3ZfaXRlci5jLTY4LVxcbi0tXFxubW0vYWxsb2NfdGFnLmM9Nzc3PXN0YXRpYyBpbnQgdm1fbW9kdWxlX3RhZ3NfcG9wdWxhdGUodm9pZClcXG4tLVxcbm1tL2FsbG9jX3RhZy5jLTc5My1cXG5tbS9hbGxvY190YWcuYzo3OTQ6XFx0XFx0XFx0YWxsb2NhdGVkID0gYWxsb2NfcGFnZXNfYnVsa19ub2RlKEdGUF9LRVJORUwgfCBfX0dGUF9OT1dBUk4sXFxubW0vYWxsb2NfdGFnLmMtNzk1LVxcdFxcdFxcdFxcdE5VTUFfTk9fTk9ERSwgbW9yZV9wYWdlcyAtIG5yLCBuZXh0X3BhZ2UgKyBucik7XFxuLS1cXG5tbS9rYXNhbi9zaGFkb3cuYz0zMjc9c3RhdGljIHZvaWQgX19fZnJlZV9wYWdlc19idWxrKHN0cnVjdCBwYWdlICoqcGFnZXMsIGludCBucl9wYWdlcylcXG4tLVxcbm1tL2thc2FuL3NoYWRvdy5jLTMzOC1cXG5tbS9rYXNhbi9zaGFkb3cuYzozMzk6c3RhdGljIGludCBfX19hbGxvY19wYWdlc19idWxrKHN0cnVjdCBwYWdlICoqcGFnZXMsIGludCBucl9wYWdlcywgZ2ZwX3QgZ2ZwX21hc2spXFxubW0va2FzYW4vc2hhZG93LmMtMzQwLXtcXG4tLVxcbm1tL2thc2FuL3NoYWRvdy5jLTM0NC1cXHR3aGlsZSAobnJfcGFnZXMpIHtcXG5tbS9rYXNhbi9zaGFkb3cuYzozNDU6XFx0XFx0bnJfcG9wdWxhdGVkID0gYWxsb2NfcGFnZXNfYnVsayhnZnBfbWFzaywgbnJfcGFnZXMsIHBhZ2VzKTtcXG5tbS9rYXNhbi9zaGFkb3cuYy0zNDYtXFx0XFx0aWYgKCFucl9wb3B1bGF0ZWQpIHtcXG4tLVxcbm1tL2thc2FuL3NoYWRvdy5jPTM1Nz1zdGF0aWMgaW50IF9fa2FzYW5fcG9wdWxhdGVfdm1hbGxvY19kbyh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwgZ2ZwX3QgZ2ZwX21hc2spXFxuLS1cXG5tbS9rYXNhbi9zaGFkb3cuYy0zNjktXFx0XFx0bnJfcGFnZXMgPSBtaW4obnJfdG90YWwsIFBBR0VfU0laRSAvIHNpemVvZihkYXRhLnBhZ2VzWzBdKSk7XFxubW0va2FzYW4vc2hhZG93LmM6MzcwOlxcdFxcdHJldCA9IF9fX2FsbG9jX3BhZ2VzX2J1bGsoZGF0YS5wYWdlcywgbnJfcGFnZXMsIGdmcF9tYXNrKTtcXG5tbS9rYXNhbi9zaGFkb3cuYy0zNzEtXFx0XFx0aWYgKHJldClcXG4tLVxcbm1tL21lbXBvbGljeS5jPTI1ODk9RVhQT1JUX1NZTUJPTChmb2xpb19hbGxvY19ub3Byb2YpO1xcbm1tL21lbXBvbGljeS5jLTI1OTAtXFxubW0vbWVtcG9saWN5LmM6MjU5MTpzdGF0aWMgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX2ludGVybGVhdmUoZ2ZwX3QgZ2ZwLFxcbm1tL21lbXBvbGljeS5jLTI1OTItXFx0XFx0c3RydWN0IG1lbXBvbGljeSAqcG9sLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbi0tXFxubW0vbWVtcG9saWN5LmMtMjYwNy1cXHRcXHRpZiAoZGVsdGEpIHtcXG5tbS9tZW1wb2xpY3kuYzoyNjA4OlxcdFxcdFxcdG5yX2FsbG9jYXRlZCA9IGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKGdmcCxcXG5tbS9tZW1wb2xpY3kuYy0yNjA5LVxcdFxcdFxcdFxcdFxcdGludGVybGVhdmVfbm9kZXMocG9sKSwgTlVMTCxcXG4tLVxcbm1tL21lbXBvbGljeS5jLTI2MTMtXFx0XFx0fSBlbHNlIHtcXG5tbS9tZW1wb2xpY3kuYzoyNjE0OlxcdFxcdFxcdG5yX2FsbG9jYXRlZCA9IGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKGdmcCxcXG5tbS9tZW1wb2xpY3kuYy0yNjE1LVxcdFxcdFxcdFxcdFxcdGludGVybGVhdmVfbm9kZXMocG9sKSwgTlVMTCxcXG4tLVxcbm1tL21lbXBvbGljeS5jLTI2MjUtXFxubW0vbWVtcG9saWN5LmM6MjYyNjpzdGF0aWMgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmUoZ2ZwX3QgZ2ZwLFxcbm1tL21lbXBvbGljeS5jLTI2MjctXFx0XFx0c3RydWN0IG1lbXBvbGljeSAqcG9sLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbi0tXFxubW0vbWVtcG9saWN5LmMtMjY2NC1cXHRcXHRub2RlX3BhZ2VzID0gbWluKHJlbV9wYWdlcywgd2VpZ2h0KTtcXG5tbS9tZW1wb2xpY3kuYzoyNjY1OlxcdFxcdG5yX2FsbG9jYXRlZCA9IF9fYWxsb2NfcGFnZXNfYnVsayhnZnAsIG5vZGUsIE5VTEwsIG5vZGVfcGFnZXMsXFxubW0vbWVtcG9saWN5LmMtMjY2Ni1cXHRcXHRcXHRcXHRcXHRcXHQgIHBhZ2VfYXJyYXkpO1xcbi0tXFxubW0vbWVtcG9saWN5LmMtMjcwMS1cXHQvKlxcbm1tL21lbXBvbGljeS5jOjI3MDI6XFx0ICogQ2FsY3VsYXRlIHJvdW5kcy9wYXJ0aWFsIHJvdW5kcyB0byBtaW5pbWl6ZSBfX2FsbG9jX3BhZ2VzX2J1bGsgY2FsbHMuXFxubW0vbWVtcG9saWN5LmMtMjcwMy1cXHQgKiBUcmFjayB3aGljaCBub2RlIHdlaWdodGVkIGludGVybGVhdmUgc2hvdWxkIHJlc3VtZSBmcm9tLlxcbi0tXFxubW0vbWVtcG9saWN5LmMtMjcyOS1cXHRcXHRcXHRicmVhaztcXG5tbS9tZW1wb2xpY3kuYzoyNzMwOlxcdFxcdG5yX2FsbG9jYXRlZCA9IF9fYWxsb2NfcGFnZXNfYnVsayhnZnAsIG5vZGUsIE5VTEwsIG5vZGVfcGFnZXMsXFxubW0vbWVtcG9saWN5LmMtMjczMS1cXHRcXHRcXHRcXHRcXHRcXHQgIHBhZ2VfYXJyYXkpO1xcbi0tXFxubW0vbWVtcG9saWN5LmMtMjc0My1cXG5tbS9tZW1wb2xpY3kuYzoyNzQ0OnN0YXRpYyB1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfcHJlZmVycmVkX21hbnkoZ2ZwX3QgZ2ZwLCBpbnQgbmlkLFxcbm1tL21lbXBvbGljeS5jLTI3NDUtXFx0XFx0c3RydWN0IG1lbXBvbGljeSAqcG9sLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbi0tXFxubW0vbWVtcG9saWN5LmMtMjc1My1cXG5tbS9tZW1wb2xpY3kuYzoyNzU0OlxcdG5yX2FsbG9jYXRlZCAgPSBhbGxvY19wYWdlc19idWxrX25vcHJvZihwcmVmZXJyZWRfZ2ZwLCBuaWQsIFxcdTAwMjZwb2wtXFx1MDAzZW5vZGVzLFxcbm1tL21lbXBvbGljeS5jLTI3NTUtXFx0XFx0XFx0XFx0XFx0ICAgbnJfcGFnZXMsIHBhZ2VfYXJyYXkpO1xcbi0tXFxubW0vbWVtcG9saWN5LmMtMjc1Ny1cXHRpZiAobnJfYWxsb2NhdGVkIFxcdTAwM2MgbnJfcGFnZXMpXFxubW0vbWVtcG9saWN5LmM6Mjc1ODpcXHRcXHRucl9hbGxvY2F0ZWQgKz0gYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoZ2ZwLCBudW1hX25vZGVfaWQoKSwgTlVMTCxcXG5tbS9tZW1wb2xpY3kuYy0yNzU5LVxcdFxcdFxcdFxcdG5yX3BhZ2VzIC0gbnJfYWxsb2NhdGVkLFxcbi0tXFxubW0vbWVtcG9saWN5LmMtMjc2OS0gKi9cXG5tbS9tZW1wb2xpY3kuYzoyNzcwOnVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mKGdmcF90IGdmcCxcXG5tbS9tZW1wb2xpY3kuYy0yNzcxLVxcdFxcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsIHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheSlcXG4tLVxcbm1tL21lbXBvbGljeS5jLTI3ODAtXFx0aWYgKHBvbC1cXHUwMDNlbW9kZSA9PSBNUE9MX0lOVEVSTEVBVkUpXFxubW0vbWVtcG9saWN5LmM6Mjc4MTpcXHRcXHRyZXR1cm4gYWxsb2NfcGFnZXNfYnVsa19pbnRlcmxlYXZlKGdmcCwgcG9sLFxcbm1tL21lbXBvbGljeS5jLTI3ODItXFx0XFx0XFx0XFx0XFx0XFx0XFx0IG5yX3BhZ2VzLCBwYWdlX2FycmF5KTtcXG4tLVxcbm1tL21lbXBvbGljeS5jLTI3ODQtXFx0aWYgKHBvbC1cXHUwMDNlbW9kZSA9PSBNUE9MX1dFSUdIVEVEX0lOVEVSTEVBVkUpXFxubW0vbWVtcG9saWN5LmM6Mjc4NTpcXHRcXHRyZXR1cm4gYWxsb2NfcGFnZXNfYnVsa193ZWlnaHRlZF9pbnRlcmxlYXZlKFxcbm1tL21lbXBvbGljeS5jLTI3ODYtXFx0XFx0XFx0XFx0ICBnZnAsIHBvbCwgbnJfcGFnZXMsIHBhZ2VfYXJyYXkpO1xcbi0tXFxubW0vbWVtcG9saWN5LmMtMjc4OC1cXHRpZiAocG9sLVxcdTAwM2Vtb2RlID09IE1QT0xfUFJFRkVSUkVEX01BTlkpXFxubW0vbWVtcG9saWN5LmM6Mjc4OTpcXHRcXHRyZXR1cm4gYWxsb2NfcGFnZXNfYnVsa19wcmVmZXJyZWRfbWFueShnZnAsXFxubW0vbWVtcG9saWN5LmMtMjc5MC1cXHRcXHRcXHRcXHRudW1hX25vZGVfaWQoKSwgcG9sLCBucl9wYWdlcywgcGFnZV9hcnJheSk7XFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0yNzkzLVxcdG5vZGVtYXNrID0gcG9saWN5X25vZGVtYXNrKGdmcCwgcG9sLCBOT19JTlRFUkxFQVZFX0lOREVYLCBcXHUwMDI2bmlkKTtcXG5tbS9tZW1wb2xpY3kuYzoyNzk0OlxcdHJldHVybiBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnAsIG5pZCwgbm9kZW1hc2ssXFxubW0vbWVtcG9saWN5LmMtMjc5NS1cXHRcXHRcXHRcXHQgICAgICAgbnJfcGFnZXMsIHBhZ2VfYXJyYXkpO1xcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTUwOTE9c3RhdGljIGlubGluZSBib29sIHByZXBhcmVfYWxsb2NfcGFnZXMoZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcixcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy01MTM5LS8qXFxubW0vcGFnZV9hbGxvYy5jOjUxNDA6ICogX19hbGxvY19wYWdlc19idWxrIC0gQWxsb2NhdGUgYSBudW1iZXIgb2Ygb3JkZXItMCBwYWdlcyB0byBhbiBhcnJheVxcbm1tL3BhZ2VfYWxsb2MuYy01MTQxLSAqIEBnZnA6IEdGUCBmbGFncyBmb3IgdGhlIGFsbG9jYXRpb25cXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy01MTU5LSAqL1xcbm1tL3BhZ2VfYWxsb2MuYzo1MTYwOnVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoZ2ZwX3QgZ2ZwLCBpbnQgcHJlZmVycmVkX25pZCxcXG5tbS9wYWdlX2FsbG9jLmMtNTE2MS1cXHRcXHRcXHRub2RlbWFza190ICpub2RlbWFzaywgaW50IG5yX3BhZ2VzLFxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTUzMDEtfVxcbm1tL3BhZ2VfYWxsb2MuYzo1MzAyOkVYUE9SVF9TWU1CT0xfR1BMKGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKTtcXG5tbS9wYWdlX2FsbG9jLmMtNTMwMy1cXG4tLVxcbm1tL3NsdWIuYz03NDI2PXN0YXRpYyBib29sIF9fa21lbV9jYWNoZV9hbGxvY19idWxrKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBmbGFncyxcXG4tLVxcbm1tL3NsdWIuYy03NDcwLSAqXFxubW0vc2x1Yi5jOjc0NzE6ICogVW5saWtlIGFsbG9jX3BhZ2VzX2J1bGsoKSwgdGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBjaGVjayBmb3IgYWxyZWFkeSBhbGxvY2F0ZWRcXG5tbS9zbHViLmMtNzQ3Mi0gKiBvYmplY3RzIGluIEBwLCBhbmQgdGh1cyB0aGUgY2FsbGVyIGRvZXMgbm90IG5lZWQgdG8gemVybyBpdC5cXG4tLVxcbm1tL3ZtYWxsb2MuYz0zNjc2PXZtX2FyZWFfYWxsb2NfcGFnZXMoZ2ZwX3QgZ2ZwLCBpbnQgbmlkLFxcbi0tXFxubW0vdm1hbGxvYy5jLTM3NDMtXFx0XFx0XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX05VTUEpIFxcdTAwMjZcXHUwMDI2IG5pZCA9PSBOVU1BX05PX05PREUpXFxubW0vdm1hbGxvYy5jOjM3NDQ6XFx0XFx0XFx0XFx0bnIgPSBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2YoZ2ZwLFxcbm1tL3ZtYWxsb2MuYy0zNzQ1LVxcdFxcdFxcdFxcdFxcdFxcdFxcdG5yX3BhZ2VzX3JlcXVlc3QsXFxuLS1cXG5tbS92bWFsbG9jLmMtMzc0Ny1cXHRcXHRcXHRlbHNlXFxubW0vdm1hbGxvYy5jOjM3NDg6XFx0XFx0XFx0XFx0bnIgPSBhbGxvY19wYWdlc19idWxrX25vZGVfbm9wcm9mKGdmcCwgbmlkLFxcbm1tL3ZtYWxsb2MuYy0zNzQ5LVxcdFxcdFxcdFxcdFxcdFxcdFxcdG5yX3BhZ2VzX3JlcXVlc3QsXFxuLS1cXG5uZXQvY29yZS9wYWdlX3Bvb2wuYz02MTE9c3RhdGljIG5vaW5saW5lIG5ldG1lbV9yZWYgX19wYWdlX3Bvb2xfYWxsb2NfbmV0bWVtc19zbG93KHN0cnVjdCBwYWdlX3Bvb2wgKnBvb2wsXFxuLS1cXG5uZXQvY29yZS9wYWdlX3Bvb2wuYy02MzMtXFxubmV0L2NvcmUvcGFnZV9wb29sLmM6NjM0OlxcdC8qIE1hcmsgZW1wdHkgYWxsb2MuY2FjaGUgc2xvdHMgXFxcImVtcHR5XFxcIiBmb3IgYWxsb2NfcGFnZXNfYnVsayAqL1xcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTYzNS1cXHRtZW1zZXQoXFx1MDAyNnBvb2wtXFx1MDAzZWFsbG9jLmNhY2hlLCAwLCBzaXplb2Yodm9pZCAqKSAqIGJ1bGspO1xcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTYzNi1cXG5uZXQvY29yZS9wYWdlX3Bvb2wuYzo2Mzc6XFx0bnJfcGFnZXMgPSBhbGxvY19wYWdlc19idWxrX25vZGUoZ2ZwLCBwb29sLVxcdTAwM2VwLm5pZCwgYnVsayxcXG5uZXQvY29yZS9wYWdlX3Bvb2wuYy02MzgtXFx0XFx0XFx0XFx0XFx0IChzdHJ1Y3QgcGFnZSAqKilwb29sLVxcdTAwM2VhbGxvYy5jYWNoZSk7XFxuLS1cXG5uZXQvc3VucnBjL3N2Y194cHJ0LmM9Njg3PXN0YXRpYyBib29sIHN2Y19maWxsX3BhZ2VzKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsIHN0cnVjdCBwYWdlICoqcGFnZXMsXFxuLS1cXG5uZXQvc3VucnBjL3N2Y194cHJ0LmMtNjkyLVxcdGZvciAoZmlsbGVkID0gMDsgZmlsbGVkIFxcdTAwM2MgbnBhZ2VzOyBmaWxsZWQgPSByZXQpIHtcXG5uZXQvc3VucnBjL3N2Y194cHJ0LmM6NjkzOlxcdFxcdHJldCA9IGFsbG9jX3BhZ2VzX2J1bGsoR0ZQX0tFUk5FTCwgbnBhZ2VzLCBwYWdlcyk7XFxubmV0L3N1bnJwYy9zdmNfeHBydC5jLTY5NC1cXHRcXHRpZiAocmV0IFxcdTAwM2UgZmlsbGVkKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxMjowODo1My41MzI4MzU3MTZaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzcwNTY2MzMzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBQYXRjaCBmb3IgQnVsayBQYWdlIEFsbG9jYXRpb24gYW5kIEtNU0FOIEludGVncmF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBcIldoZXJlIGlzIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAgdXNlZD9cIi4gVHVybnMgb3V0LCBpdCdzIHVzZWQgKmV2ZXJ5d2hlcmUqIC0gYHZtYWxsb2NgLCBgcGFnZV9wb29sYCwgYGlvX3VyaW5nYCwgYHNwbGljZWAsIGBidHJmc2AsIGBicGZfYXJlbmFgLCBgc3VucnBjYCwgYW5kIHNvIG9uLiBTbywgaXQncyBkZWZpbml0ZWx5IGEgY29yZSBmdW5jdGlvbiwgd2hpY2ggaW1tZWRpYXRlbHkgY2F0Y2hlcyBteSBhdHRlbnRpb24uXG5cblRoZSBwYXRjaCBpdHNlbGYgaXMgYWRkaW5nIGB0cmFjZV9tbV9wYWdlX2FsbG9jYCBhbmQgYGttc2FuX2FsbG9jX3BhZ2VgIHRvIHRoZSBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIGZ1bmN0aW9uIGluIGBtbS9wYWdlX2FsbG9jLmNgLiBNeSBuZXh0IHF1ZXN0aW9uIGlzLCBcIklzIHRoaXMgd29ydGggZnV6emluZz9cIi5cblxuSXQgY2VydGFpbmx5IG1vZGlmaWVzIHRoZSBydW50aW1lIGJlaGF2aW9yIOKAkyBLTVNBTiBtZXRhZGF0YSBpbml0aWFsaXphdGlvbiBhbmQgdHJhY2Vwb2ludCBlbWlzc2lvbiBhcmUgYmVpbmcgYWRkZWQuIFRoaXMgZGlyZWN0bHkgYWx0ZXJzIGhvdyBwYWdlIHNoYWRvdyBtZXRhZGF0YSBpcyBoYW5kbGVkLCBwb3RlbnRpYWxseSBmaXhpbmcgdW5pbml0IG9yIHRyYWNraW5nIGlzc3VlcyB3aGVuIHBhZ2VzIGFyZSBhbGxvY2F0ZWQgdmlhIHRoZSBQQ1AgbGlzdCBpbiB0aGUgYnVsayBhbGxvY2F0b3IuIFRoYXQncyBhIGdvb2Qgc2lnbi5cblxuQWNjb3JkaW5nIHRvIHRoZSBcIldvcnRoRnV6emluZ1wiIGNyaXRlcmlhLCBpdCdzIGEgXCJ5ZXNcIiBzaW5jZSBpdCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaW4gYSBjb3JlIHN1YnN5c3RlbSAobWVtb3J5IG1hbmFnZW1lbnQpLCBhbmQgdGhpcyBpcyBsb2dpYyBtb2RpZmljYXRpb24uXG5cbk5vdywgdGhlIHJlYWwgcXVlc3Rpb246IGFyZSBhbnkgb2YgdGhlc2UgYWZmZWN0ZWQgZnVuY3Rpb25zIHViaXF1aXRvdXM/IEkgaGF2ZSB0byBjb25zaWRlciB0aGUgXCJBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFNcIiBydWxlLiBJIG5lZWQgdG8gYmUgY2FyZWZ1bCBub3QgdG8gZGlsdXRlIHRoZSBmdXp6aW5nIGVmZm9ydC4gSSBrbm93IHRoYXQgYGttYWxsb2NgIG9yIGBfX2FsbG9jX3BhZ2VzX25vcHJvZmAgYXJlIG91dCBzaW5jZSB0aGV5IGFyZSB1YmlxdWl0b3VzLiBCdXQgaXMgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCBnZW5lcmFsIG9yIGlzIGl0IG1vcmUgc3BlY2lmaWMgdG8gYnVsayBhbGxvY2F0aW9uIGNhbGxzPyBJdCdzIGNhbGxlZCBieSB0aGUgYnVsayBhbGxvY2F0aW9uIGNhbGxlcnMgbGlrZSBgdm1fYXJlYV9hbGxvY19wYWdlc2AsIGBidHJmc19hbGxvY19wYWdlX2FycmF5YCwgZXRjLiBJIHRoaW5rIGl0IGlzIGEgc3BlY2lmaWMgYnVsayBhbGxvY2F0b3IuXG5cbkJ1dCB3YWl0LCBga21zYW5fYWxsb2NfcGFnZWAgaXMgY2FsbGVkIGZyb20gYF9fYWxsb2NfZnJvemVuX3BhZ2VzX25vcHJvZmAsIHdoaWNoIGlzIGNhbGxlZCB3aGVuZXZlciBLTVNBTiBpcyBlbmFibGVkLiAgVGhlcmVmb3JlLCBpdCBpcyB1YmlxdWl0b3VzIGlmIEtNU0FOIGlzIGVuYWJsZWQuXG5cblNvLCBJIHRoaW5rIEkgY2FuIGluY2x1ZGUgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCBpbiBgRm9jdXNTeW1ib2xzYCBzaW5jZSB0aGF0J3Mgd2hlcmUgdGhlICpzcGVjaWZpYyogY2hhbmdlIGlzLiBUaGUgcmVsZXZhbnQgZnVuY3Rpb25zIGFyZTogYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCwgYGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZmAsIGB2bV9hcmVhX2FsbG9jX3BhZ2VzYCwgYGFyZW5hX2FsbG9jX3BhZ2VzYCwgYGlvX3JlZ2lvbl9hbGxvY2F0ZV9wYWdlc2AsIGFuZCBgY29weV9zcGxpY2VfcmVhZGAuXG5cbkZpbmFsbHksIGRvZXMgdGhpcyBjb2RlIGRlcGVuZCBvbiBhbnkgc3BlY2lhbCBjb25maWc/IFllcywgYGttc2FuX2FsbG9jX3BhZ2VgIGlzIHBhcnQgb2YgS01TQU4gKGBDT05GSUdfS01TQU5gKSwgYnV0IHRoZSBidWxrIGFsbG9jYXRpb24gY29kZSBpdHNlbGYgaXMgYWx3YXlzIGNvbXBpbGVkLiBTbywgSSBoYXZlIHRvIGJlIG1pbmRmdWwgdGhhdCB0aGUgS01TQU4gcGFydCBtaWdodCBub3QgYWx3YXlzIGJlIGFjdGl2ZS4gQnV0IHRoZSBtb2RpZmljYXRpb24gdG8gYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCBpdHNlbGYgaXMgYWx3YXlzIHByZXNlbnQsIHdoaWNoIG1ha2VzIGl0IGEgZ29vZCB0YXJnZXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MjU3LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxMjowOTowMS4yMzg1MDE2ODFaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5NTk3NzQ5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS01TQU5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxMjowOTowMS4yODgxMDc5NVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyOTM5MjA0NDM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEknbSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6XG5cbioqSW52ZXN0aWdhdGluZyBLTVNBTiBpbiB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCBJJ20gdGhpbmtpbmcsIFwiS01TQU4uLi4gd2hlcmUgZG9lcyB0aGF0IGZpdCBpbnRvIHRoZSBwaWN0dXJlP1wiIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBjaGVjayB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoaXMgaXMgc29tZXRoaW5nIHRoYXQncyBldmVuICplbmFibGVkKiBvciAqY29uZmlndXJhYmxlKiBpbiB0aGUgY3VycmVudCBidWlsZC4gU28sIEknbSBnb2luZyB0byBraWNrIG9mZiBhIHNlYXJjaCBmb3IgXCJLTVNBTlwiIHdpdGhpbiBLY29uZmlnLiBUaGF0IHNlZW1zIGxpa2UgdGhlIGxvZ2ljYWwgZmlyc3Qgc3RlcCB0byBkZXRlcm1pbmUgaG93IGRlZXAgdGhpcyByYWJiaXQgaG9sZSBnb2VzLiBJIG5lZWQgdG8gcXVpY2tseSBlc3RhYmxpc2ggaWYgaXQncyBldmVuIHByZXNlbnQgYXMgYSBjb25maWd1cmFibGUgb3B0aW9uIGFuZCB3aGF0IGRlcGVuZGVuY2llcyBpdCBoYXMuIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmFzZSB0byBnbyBmcm9tLCBlaXRoZXIgdG8gbG9vayBhdCB0aGUgb3RoZXIgY29uZmlndXJhdGlvbiBvcHRpb25zLCBvciB0byB1c2UgdGhpcyBpbmZvcm1hdGlvbiB0byBkZXRlcm1pbmUgaG93IHRoZSBjb25maWd1cmF0aW9uIGFmZmVjdHMgdGhlIGJ1aWxkIGl0c2VsZi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY0NTcsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxMjowOTowNC4yMjczMTUwMDZaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY5MDc2OTQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLTVNBTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJsaWIvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImxpYi9LY29uZmlnLmttc2FuPTU9Y29uZmlnIEhBVkVfS01TQU5fQ09NUElMRVJcXG4tLVxcbmxpYi9LY29uZmlnLmttc2FuLTctXFxubGliL0tjb25maWcua21zYW46ODpjb25maWcgS01TQU5cXG5saWIvS2NvbmZpZy5rbXNhbi05LVxcdGJvb2wgXFxcIktNU0FOOiBkZXRlY3RvciBvZiB1bmluaXRpYWxpemVkIHZhbHVlcyB1c2VcXFwiXFxuLS1cXG5saWIvS2NvbmZpZy5rbXNhbj0yNj1pZiBLTVNBTlxcbmxpYi9LY29uZmlnLmttc2FuLTI3LVxcbmxpYi9LY29uZmlnLmttc2FuOjI4OmNvbmZpZyBLTVNBTl9DSEVDS19QQVJBTV9SRVRWQUxcXG5saWIvS2NvbmZpZy5rbXNhbi0yOS1cXHRib29sIFxcXCJDaGVjayBmb3IgdW5pbml0aWFsaXplZCB2YWx1ZXMgcGFzc2VkIHRvIGFuZCByZXR1cm5lZCBmcm9tIGZ1bmN0aW9uc1xcXCJcXG4tLVxcbmxpYi9LY29uZmlnLmttc2FuLTQxLVxcbmxpYi9LY29uZmlnLmttc2FuOjQyOmNvbmZpZyBLTVNBTl9LVU5JVF9URVNUXFxubGliL0tjb25maWcua21zYW4tNDMtXFx0dHJpc3RhdGUgXFxcIktNU0FOIGludGVncmF0aW9uIHRlc3Qgc3VpdGVcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTI6MDk6MDQuMjk2Mzk3OTE2WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5NDYzNzU2MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gQ29uZmlndXJhdGlvbiBDaGVjayoqXG5cbk9rYXksIHNvIGBDT05GSUdfS01TQU5gIGlzIGRlZmluZWQgd2l0aGluIGBsaWIvS2NvbmZpZy5rbXNhbmAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2YgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIHRoaXMgZmVhdHVyZSwgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgbWVtb3J5IGFsbG9jYXRpb24uIExldCdzIGRlbHZlIGludG8gYGluY2x1ZGUvbGludXgva21zYW4uaGAgcmlnaHQgYXdheS4gSSdsbCBuZWVkIHRvIGV4YW1pbmUgdGhlIGRlZmluaXRpb24gb2YgYGttc2FuX2FsbG9jX3BhZ2VgIHVuZGVyIGJvdGggc2NlbmFyaW9zIC0gd2l0aCBgQ09ORklHX0tNU0FOYCBlbmFibGVkIGFuZCBkaXNhYmxlZCAtIHRvIHNlZSBob3cgdGhlIGltcGxlbWVudGF0aW9uIGNoYW5nZXMuIFRoYXQncyB3aGVyZSB0aGUgcmVhbCBkaWZmZXJlbmNlIHdpbGwgYmUuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgd2hhdCdzIHdoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2OTA2LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTI6MDk6MDYuMjQyNzc3OTc2WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDg4NDc5OTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia21zYW5fYWxsb2NfcGFnZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2ttc2FuLmg9NTc9Ym9vbCBfX2luaXQgX19tdXN0X2NoZWNrIGttc2FuX21lbWJsb2NrX2ZyZWVfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2ttc2FuLmgtNjAtLyoqXFxuaW5jbHVkZS9saW51eC9rbXNhbi5oOjYxOiAqIGttc2FuX2FsbG9jX3BhZ2UoKSAtIE5vdGlmeSBLTVNBTiBhYm91dCBhbiBhbGxvY19wYWdlcygpIGNhbGwuXFxuaW5jbHVkZS9saW51eC9rbXNhbi5oLTYyLSAqIEBwYWdlOiAgc3RydWN0IHBhZ2UgcG9pbnRlciByZXR1cm5lZCBieSBhbGxvY19wYWdlcygpLlxcbi0tXFxuaW5jbHVkZS9saW51eC9rbXNhbi5oLTY4LSAqL1xcbmluY2x1ZGUvbGludXgva21zYW4uaDo2OTp2b2lkIGttc2FuX2FsbG9jX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlciwgZ2ZwX3QgZmxhZ3MpO1xcbmluY2x1ZGUvbGludXgva21zYW4uaC03MC1cXG4tLVxcbmluY2x1ZGUvbGludXgva21zYW4uaD0zMTU9c3RhdGljIGlubGluZSB2b2lkIGttc2FuX3Rhc2tfZXhpdChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2ttc2FuLmgtMzE4LVxcbmluY2x1ZGUvbGludXgva21zYW4uaDozMTk6c3RhdGljIGlubGluZSB2b2lkIGttc2FuX2FsbG9jX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcixcXG5pbmNsdWRlL2xpbnV4L2ttc2FuLmgtMzIwLVxcdFxcdFxcdFxcdCAgICBnZnBfdCBmbGFncylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTI6MDk6MDYuMzkxNjM4MTQ0WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjcxOTk3MzAzNTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgVGhpcyBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBteSBicmFpbiB6ZXJvZXMgaW4gb24gdGhlIGNvbmRpdGlvbmFsIGxvZ2ljLiBga21zYW5fYWxsb2NfcGFnZSgpYCBpcyBhbiBlbXB0eSBpbmxpbmUgdW5sZXNzIGBDT05GSUdfS01TQU5gIGlzIGZsaXBwZWQgb24uIElmIEtNU0FOICppcyogZW5hYmxlZCwgaXQga2lja3Mgb2ZmIEtNU0FOJ3Mgc2hhZG93IGFuZCBvcmlnaW4gaW5pdGlhbGl6YXRpb24uIEFuZCB0aGVuIHRoZXJlJ3MgYHRyYWNlX21tX3BhZ2VfYWxsb2NgLCB3aGljaCBpcyBndWFyZGVkIGJ5IGVpdGhlciB0cmFjaW5nIG9yIGBDT05GSUdfRVZFTlRfVFJBQ0lOR2AuIFNvLCB0byBhY3R1YWxseSBleGVyY2lzZSB0aGUgY2hhbmdlcyBtYWRlIGJ5IHRoaXMgcGF0Y2gsIEtNU0FOIGlzIGFic29sdXRlbHkga2V5LiBUaGF04oCZcyB0aGUgZmlyc3QgdGhpbmcgSSBuZWVkIHRvIHJlbWVtYmVyLlxuXG5MZXQncyBkbyBhIHF1aWNrIHJ1bmRvd24gdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcuIEkgc2VlIHRoYXQgYFdvcnRoRnV6emluZ2AgaXMgc2V0IHRvIGB0cnVlYCwgd2hpY2ggbWFrZXMgc2Vuc2UgYmVjYXVzZSB3ZSdyZSB0b3VjaGluZyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGZ1bmN0aW9ucy4gVGhlIGBSZWFzb25pbmdgIHNlY3Rpb24gaGl0cyB0aGUgbmFpbCBvbiB0aGUgaGVhZCDigJMgdGhpcyBwYXRjaCBpcyBtb2RpZnlpbmcgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCAoYW5kIGl0cyBtZW1wb2xpY3kgY291bnRlcnBhcnQpIGluIGBtbS9wYWdlX2FsbG9jLmNgIGFuZCBpbnRyb2R1Y2luZyBjYWxscyB0byBgdHJhY2VfbW1fcGFnZV9hbGxvY2AgYW5kIGBrbXNhbl9hbGxvY19wYWdlYC4gVGhlIHB1cnBvc2UgaXMgdG8gY29ycmVjdGx5IGluaXRpYWxpemUgS01TQU4gc2hhZG93IG1ldGFkYXRhIGZvciBidWxrLWFsbG9jYXRlZCBwYWdlcy4gSSBhZ3JlZSwgdGhpcyBpcyBhIGNsZWFyIG1vZGlmaWNhdGlvbiB0byB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudC5cblxuSSBjb25maXJtIHRoZSBgRm9jdXNTeW1ib2xzYCBhcmUgYXBwcm9wcmlhdGVseSBzY29wZWQgdG8gYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCBhbmQgaXRzIG1lbXBvbGljeSB2YXJpYW50LiBObyB3aWRlciBzY29wZSBuZWVkZWQgYXMgdGhlIGNvbmNlcm4gaXMgYnVsayBhbGxvY2F0aW9uLlxuXG5BbmQgb2J2aW91c2x5LCB0aGUgYEVuYWJsZUNvbmZpZ3NgIGFyZSBjb3JyZWN0bHkgc3BlY2lmaWVkIGFzIGBLTVNBTmAuIFdlIG5lZWQgS01TQU4gZW5hYmxlZCBmb3IgYW55IG9mIHRoaXMgbG9naWMgdG8gYWN0dWFsbHkgZG8gYW55dGhpbmcuXG5cbkhtbSwgYW0gSSBtaXNzaW5nIGFueXRoaW5nPyBJIHRoaW5rIEkndmUgY292ZXJlZCBhbGwgdGhlIGJhc2VzLiBUaGUgc3ltYm9scyBhbmQgY29uZmlncyBzZWVtIHJpZ2h0LCBhbmQgdGhlcmUgYXJlbid0IGFueSBvdGhlciBvYnZpb3VzIGRlcGVuZGVuY2llcyBvciBjb25maWd1cmF0aW9ucyBJIG5lZWQgdG8gd29ycnkgYWJvdXQuXG5cblRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLiBJIHRoaW5rIEknbSBnb29kIHRvIGdvLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzQxMywiT3V0cHV0VG9rZW5zIjoxMzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTI6MDk6MTMuNTkxMzcyMDQ3WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODM1ODE4NTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktNU0FOXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZcIixcbiAgICBcImFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIG1tL3BhZ2VfYWxsb2MuYyBieSBhZGRpbmcgdHJhY2VfbW1fcGFnZV9hbGxvYyBhbmQga21zYW5fYWxsb2NfcGFnZSB0byBhbGxvY19wYWdlc19idWxrX25vcHJvZi4gVGhpcyBlbnN1cmVzIGJ1bGstYWxsb2NhdGVkIHBhZ2VzIGhhdmUgcHJvcGVyIEtNU0FOIHNoYWRvdyBtZXRhZGF0YSBhbmQgYWxsb2NhdGlvbiB0cmFjaW5nLiBUaGUgY2hhbmdlIG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgYW5kIHdhcnJhbnRzIGZ1enppbmcsIGVzcGVjaWFsbHkgdW5kZXIgS01TQU4uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS01TQU5cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhbGxvY19wYWdlc19idWxrX25vcHJvZlwiLFxuICAgIFwiYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbW0vcGFnZV9hbGxvYy5jIGJ5IGFkZGluZyB0cmFjZV9tbV9wYWdlX2FsbG9jIGFuZCBrbXNhbl9hbGxvY19wYWdlIHRvIGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mLiBUaGlzIGVuc3VyZXMgYnVsay1hbGxvY2F0ZWQgcGFnZXMgaGF2ZSBwcm9wZXIgS01TQU4gc2hhZG93IG1ldGFkYXRhIGFuZCBhbGxvY2F0aW9uIHRyYWNpbmcuIFRoZSBjaGFuZ2UgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSBhbmQgd2FycmFudHMgZnV6emluZywgZXNwZWNpYWxseSB1bmRlciBLTVNBTi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTI6MDk6MTMuNjc0OTYzMTE2WiIsIlNlcSI6MjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNDUzMDIxODk0NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDEyOjA5OjEzLjY3NTU1NTI0NloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjM0NTI5NjIyNDQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIG1pc3NpbmcgYHRyYWNlX21tX3BhZ2VfYWxsb2NgIGFuZCBga21zYW5fYWxsb2NfcGFnZWAgY2FsbHMgdG8gYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKClgIGluIGBtbS9wYWdlX2FsbG9jLmNgIGZvciBwYWdlcyBhbGxvY2F0ZWQgZnJvbSBwZXItQ1BVIGxpc3RzLlxcblxcblRoaXMgbW9kaWZpY2F0aW9uIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGtlcm5lbCBpbmZvLWxlYWtzLCB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMsIG9yIGZhdWx0eSBidWZmZXIgYm91bmRzLiBBbnkgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIChzdWNoIGFzIGxvY2tpbmcgb3IgY29udGV4dCBpc3N1ZXMgd2hpbGUgaG9sZGluZyB0aGUgUENQIHNwaW5sb2NrIG9yIGludmFsaWQgcGFnZSBwb2ludGVycykgYXJlIGRldGVjdGFibGUgYnkgTE9DS0RFUCwgS0FTQU4sIGFuZCBzdGFuZGFyZCBkZWJ1Z2dpbmcgZmFjaWxpdGllcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAyNmFiMzBkZDM5ZmM3ODY4ZmUzMjBjOTAyNmU3Y2Q5ZTY0ZWFhMzVmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgOCAxMjowODozNCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL3BhZ2VfYWxsb2MuYyBiL21tL3BhZ2VfYWxsb2MuY1xuaW5kZXggMTJmYWM5MDg0YzQ4My4uZWFjNDE5ZWVmNjk3YSAxMDA2NDRcbi0tLSBhL21tL3BhZ2VfYWxsb2MuY1xuKysrIGIvbW0vcGFnZV9hbGxvYy5jXG5AQCAtNTI3OSw2ICs1Mjc5LDggQEAgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnBfdCBnZnAsIGludCBwcmVmZXJyZWRfbmlkLFxuIFx0XHRucl9hY2NvdW50Kys7XG4gXG4gXHRcdHByZXBfbmV3X3BhZ2UocGFnZSwgMCwgZ2ZwLCBBTExPQ19ERUZBVUxUKTtcbitcdFx0dHJhY2VfbW1fcGFnZV9hbGxvYyhwYWdlLCAwLCBnZnAsIGFjLm1pZ3JhdGV0eXBlKTtcbitcdFx0a21zYW5fYWxsb2NfcGFnZShwYWdlLCAwLCBnZnAgXHUwMDI2IH5fX0dGUF9SRUNMQUlNKTtcbiBcdFx0c2V0X3BhZ2VfcmVmY291bnRlZChwYWdlKTtcbiBcdFx0cGFnZV9hcnJheVtucl9wb3B1bGF0ZWQrK10gPSBwYWdlO1xuIFx0fVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTI6MDk6MTMuNjc1NTU2NTg2WiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ0MDEzMjY3NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRGl2aW5nIGludG8gdGhlIFBhZ2UgQWxsb2NhdGlvbiBDb2RlKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgd2l0aCBgbW0vcGFnZV9hbGxvYy5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIGZ1bmN0aW9uIGFuZCBpdHMgaW50ZXJhY3Rpb25zLiBGaXJzdCwgSSdsbCBzY3J1dGluaXplIHRoZSBkaWZmIGFuZCB0aGUgY29kZSBzdXJyb3VuZGluZyBpdDsgSSB3YW50IHRvIHNlZSBleGFjdGx5IHdoYXQncyBjaGFuZ2VkIGFuZCB0aGUgY29udGV4dC4gXG5cblRoZW4sIEknbGwgc3dpdGNoIGdlYXJzIGFuZCBsZXZlcmFnZSBteSB0b29scy4gSSdsbCBlaXRoZXIgdXNlIGBncmVwcGVyYCBvciBqdXN0IHJlYWQgdGhlIGZpbGUgZGlyZWN0bHksIHRvIHRyYWNlIHRoZSBjYWxscyBhbmQgaW50ZWdyYXRpb24gcG9pbnRzIGZvciBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgLCBlc3BlY2lhbGx5IGNvbmNlcm5pbmcgS01TQU4uIEknbSBsb29raW5nIGZvciB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCwgd2hhdCBpdCdzIGRvaW5nLCBhbmQgaG93IGl0IHBvdGVudGlhbGx5IGludGVyYWN0cyB3aXRoIG1lbW9yeSBzYWZldHkgbWVjaGFuaXNtcy5cblxuRmluYWxseSwgSSdsbCB6ZXJvIGluIG9uIHRoZSBzcGVjaWZpYyBhcmVhIGFyb3VuZCBsaW5lIDUyNzkgaW4gYG1tL3BhZ2VfYWxsb2MuY2AuIFRoaXMgaXMgbGlrZWx5IHdoZXJlIHRoZSBjb3JlIGxvZ2ljIG9yIHNvbWUga2V5IGRlY2lzaW9uIHBvaW50IHJlc2lkZXMsIGFuZCBJIG5lZWQgdG8gY2FyZWZ1bGx5IHJlYWQgdGhlIHN1cnJvdW5kaW5nIGxpbmVzIHRvIGdyYXNwIHRoZSBmbG93IGFuZCBwb3RlbnRpYWwgaXNzdWVzIG9yIG9wdGltaXphdGlvbnMuIExldCdzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDk5LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxMjowOToxOC4wNzY4ODY5OFoiLCJTZXEiOjI0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTM3ODEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vcGFnZV9hbGxvYy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUyNjAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjUyNjA6XFx0XFx0cGNwX2xpc3QgPSBcXHUwMDI2cGNwLVxcdTAwM2VsaXN0c1tvcmRlcl90b19waW5kZXgoYWMubWlncmF0ZXR5cGUsIDApXTtcXG41MjYxOlxcdFxcdHdoaWxlIChucl9wb3B1bGF0ZWQgXFx1MDAzYyBucl9wYWdlcykge1xcbjUyNjI6XFx0XFxuNTI2MzpcXHRcXHRcXHQvKiBTa2lwIGV4aXN0aW5nIHBhZ2VzICovXFxuNTI2NDpcXHRcXHRcXHRpZiAocGFnZV9hcnJheVtucl9wb3B1bGF0ZWRdKSB7XFxuNTI2NTpcXHRcXHRcXHRcXHRucl9wb3B1bGF0ZWQrKztcXG41MjY2OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjUyNjc6XFx0XFx0XFx0fVxcbjUyNjg6XFx0XFxuNTI2OTpcXHRcXHRcXHRwYWdlID0gX19ybXF1ZXVlX3BjcGxpc3Qoem9uZSwgMCwgYWMubWlncmF0ZXR5cGUsIGFsbG9jX2ZsYWdzLFxcbjUyNzA6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0cGNwLCBwY3BfbGlzdCk7XFxuNTI3MTpcXHRcXHRcXHRpZiAodW5saWtlbHkoIXBhZ2UpKSB7XFxuNTI3MjpcXHRcXHRcXHRcXHQvKiBUcnkgYW5kIGFsbG9jYXRlIGF0IGxlYXN0IG9uZSBwYWdlICovXFxuNTI3MzpcXHRcXHRcXHRcXHRpZiAoIW5yX2FjY291bnQpIHtcXG41Mjc0OlxcdFxcdFxcdFxcdFxcdHBjcF9zcGluX3VubG9jayhwY3ApO1xcbjUyNzU6XFx0XFx0XFx0XFx0XFx0Z290byBmYWlsZWQ7XFxuNTI3NjpcXHRcXHRcXHRcXHR9XFxuNTI3NzpcXHRcXHRcXHRcXHRicmVhaztcXG41Mjc4OlxcdFxcdFxcdH1cXG41Mjc5OlxcdFxcdFxcdG5yX2FjY291bnQrKztcXG41MjgwOlxcdFxcbjUyODE6XFx0XFx0XFx0cHJlcF9uZXdfcGFnZShwYWdlLCAwLCBnZnAsIEFMTE9DX0RFRkFVTFQpO1xcbjUyODI6XFx0XFx0XFx0dHJhY2VfbW1fcGFnZV9hbGxvYyhwYWdlLCAwLCBnZnAsIGFjLm1pZ3JhdGV0eXBlKTtcXG41MjgzOlxcdFxcdFxcdGttc2FuX2FsbG9jX3BhZ2UocGFnZSwgMCwgZ2ZwIFxcdTAwMjYgfl9fR0ZQX1JFQ0xBSU0pO1xcbjUyODQ6XFx0XFx0XFx0c2V0X3BhZ2VfcmVmY291bnRlZChwYWdlKTtcXG41Mjg1OlxcdFxcdFxcdHBhZ2VfYXJyYXlbbnJfcG9wdWxhdGVkKytdID0gcGFnZTtcXG41Mjg2OlxcdFxcdH1cXG41Mjg3OlxcdFxcbjUyODg6XFx0XFx0cGNwX3NwaW5fdW5sb2NrKHBjcCk7XFxuNTI4OTpcXHRcXG41MjkwOlxcdFxcdF9fY291bnRfemlkX3ZtX2V2ZW50cyhQR0FMTE9DLCB6b25lX2lkeCh6b25lKSwgbnJfYWNjb3VudCk7XFxuNTI5MTpcXHRcXHR6b25lX3N0YXRpc3RpY3Moem9uZWxpc3Rfem9uZShhYy5wcmVmZXJyZWRfem9uZXJlZiksIHpvbmUsIG5yX2FjY291bnQpO1xcbjUyOTI6XFx0XFxuNTI5MzpcXHRvdXQ6XFxuNTI5NDpcXHRcXHRyZXR1cm4gbnJfcG9wdWxhdGVkO1xcbjUyOTU6XFx0XFxuNTI5NjpcXHRmYWlsZWQ6XFxuNTI5NzpcXHRcXHRwYWdlID0gX19hbGxvY19wYWdlc19ub3Byb2YoZ2ZwLCAwLCBwcmVmZXJyZWRfbmlkLCBub2RlbWFzaywgQUxMT0NfREVGQVVMVCk7XFxuNTI5ODpcXHRcXHRpZiAocGFnZSlcXG41Mjk5OlxcdFxcdFxcdHBhZ2VfYXJyYXlbbnJfcG9wdWxhdGVkKytdID0gcGFnZTtcXG41MzAwOlxcdFxcdGdvdG8gb3V0O1xcbjUzMDE6XFx0fVxcbjUzMDI6XFx0RVhQT1JUX1NZTUJPTF9HUEwoYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YpO1xcbjUzMDM6XFx0XFxuNTMwNDpcXHQvKlxcbjUzMDU6XFx0ICogZnJlZV9wYWdlc19idWxrIC0gRnJlZSBhbiBhcnJheSBvZiBvcmRlci0wIHBhZ2VzXFxuNTMwNjpcXHQgKiBAcGFnZV9hcnJheTogQXJyYXkgb2YgcGFnZXMgdG8gZnJlZVxcbjUzMDc6XFx0ICogQG5yX3BhZ2VzOiBUaGUgbnVtYmVyIG9mIHBhZ2VzIGluIHRoZSBhcnJheVxcbjUzMDg6XFx0ICpcXG41MzA5OlxcdCAqIEZyZWUgdGhlIG9yZGVyLTAgcGFnZXMuIEFkamFjZW50IGVudHJpZXMgd2hvc2UgUEZOcyBmb3JtIGEgY29udGlndW91c1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxMjowOToxOC4wNzc0MDI5OFoiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNDM0MzIxMDgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgYGttc2FuX2FsbG9jX3BhZ2VgIFVzYWdlKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoZSBrZXJuZWwgbWVtb3J5IGFsbG9jYXRvci4gSSBuZWVkIHRvIGdldCBhIGZpcm0gZ3Jhc3Agb24gdGhlIHNjb3BlIGFuZCBpbXBhY3Qgb2YgYGttc2FuX2FsbG9jX3BhZ2VgLiBNeSBwcmltYXJ5IGZvY3VzIGlzIHBpbnBvaW50aW5nIGV2ZXJ5IGluc3RhbmNlIHdoZXJlIGBrbXNhbl9hbGxvY19wYWdlYCBpcyBpbnZva2VkIHdpdGhpbiBgbW0vcGFnZV9hbGxvYy5jYCBhbmQsIGNydWNpYWxseSwgYW55IGNhbGxzIGZyb20gb3RoZXIgbW9kdWxlcyB0aGF0IGludGVyYWN0IHdpdGggdGhlIHBhZ2UgYWxsb2NhdG9yLiBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsIGdyYXBoIGFyb3VuZCB0aGlzIGZ1bmN0aW9uIGlzIHBhcmFtb3VudCB0byBjb3JyZWN0bHkgdW5kZXJzdGFuZGluZyBpdC4gSSdsbCBuZWVkIHRvIHVzZSB0b29scyB0byBhY2N1cmF0ZWx5IGFuZCBlZmZpY2llbnRseSBtYXAgdGhlIGNvZGUgYmFzZS4gSSdsbCBuZWVkIHRvIHF1aWNrbHkgdW5kZXJzdGFuZCBpZiBpdCdzIG9ubHkgY2FsbGVkIGRpcmVjdGx5IGZyb20gb3RoZXIgZnVuY3Rpb25zIHdpdGhpbiB0aGUgc2FtZSBzb3VyY2UsIG9yIGlmIGl0IGNyb3NzZXMgc291cmNlIGJvdW5kYXJpZXMuIEknbGwgZm9jdXMgb24gaG93IHRoZSByZXN1bHQgaXMgYmVpbmcgdXNlZCBhbmQgd2hhdCBpbXBsaWNhdGlvbnMgZXhpc3QgZHVlIHRvIGhvdyB0aGUgZnVuY3Rpb24ncyBiZWhhdmlvciBjb3VsZCBkaWZmZXIgZnJvbSBhIG5vcm1hbCBwYWdlIGFsbG9jYXRpb24sIGFuZCBob3cgdGhpcyByZWxhdGVzIHRvIEtNU0FOJ3MgaW5zdHJ1bWVudGF0aW9uLiBJIHN1c3BlY3QgdGhpcyB3aWxsIGJlIGludGVyZXN0aW5nLCBhbmQgcG9zc2libHkgcmV2ZWFsIHN1YnRsZSBpbnRlcmFjdGlvbnMgcmVsYXRlZCB0byB0aGUgbWVtb3J5IHNhbml0aXphdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzIzMCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTI6MDk6MjAuNTExNzI3NjU0WiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDc4NzgxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrbXNhbl9hbGxvY19wYWdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9rbXNhbi9zaGFkb3cuYz0xNjk9RVhQT1JUX1NZTUJPTChrbXNhbl9jb3B5X3BhZ2VfbWV0YSk7XFxubW0va21zYW4vc2hhZG93LmMtMTcwLVxcbm1tL2ttc2FuL3NoYWRvdy5jOjE3MTp2b2lkIGttc2FuX2FsbG9jX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlciwgZ2ZwX3QgZmxhZ3MpXFxubW0va21zYW4vc2hhZG93LmMtMTcyLXtcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz01MTYwPXVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoZ2ZwX3QgZ2ZwLCBpbnQgcHJlZmVycmVkX25pZCxcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy01MjgyLVxcdFxcdHRyYWNlX21tX3BhZ2VfYWxsb2MocGFnZSwgMCwgZ2ZwLCBhYy5taWdyYXRldHlwZSk7XFxubW0vcGFnZV9hbGxvYy5jOjUyODM6XFx0XFx0a21zYW5fYWxsb2NfcGFnZShwYWdlLCAwLCBnZnAgXFx1MDAyNiB+X19HRlBfUkVDTEFJTSk7XFxubW0vcGFnZV9hbGxvYy5jLTUyODQtXFx0XFx0c2V0X3BhZ2VfcmVmY291bnRlZChwYWdlKTtcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz01MzQ1PXN0YXRpYyBpbmxpbmUgYm9vbCBhbGxvY19ub2xvY2tfYWxsb3dlZCh2b2lkKVxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTUzNzAtICpcXG5tbS9wYWdlX2FsbG9jLmM6NTM3MTogKiBTcGVjaWZ5IF9fR0ZQX1pFUk8gdG8gbWFrZSBzdXJlIHRoYXQgY2FsbCB0byBrbXNhbl9hbGxvY19wYWdlKCkgYmVsb3dcXG5tbS9wYWdlX2FsbG9jLmMtNTM3Mi0gKiBpcyBzYWZlIGluIGFueSBjb250ZXh0LiBBbHNvIHplcm9pbmcgdGhlIHBhZ2UgaXMgbWFuZGF0b3J5IGZvclxcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTUzODU9c3RydWN0IHBhZ2UgKl9fYWxsb2NfZnJvemVuX3BhZ2VzX25vcHJvZihnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBvcmRlcixcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy01NDYxLVxcdHRyYWNlX21tX3BhZ2VfYWxsb2MocGFnZSwgb3JkZXIsIGFsbG9jX2dmcCwgYWMubWlncmF0ZXR5cGUpO1xcbm1tL3BhZ2VfYWxsb2MuYzo1NDYyOlxcdGttc2FuX2FsbG9jX3BhZ2UocGFnZSwgb3JkZXIsIGFsbG9jX2dmcCk7XFxubW0vcGFnZV9hbGxvYy5jLTU0NjMtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDEyOjA5OjIwLjU2NjUzNDAwM1oiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTUyNTg5MjE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgdGhlIFJlY2VudCBNZW1vcnkgQWxsb2NhdGlvbiBCZWhhdmlvcioqXG5cbk9rYXksIGxldCdzIGRpdmUgaW4uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB3aGF0IGV4YWN0bHkgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCB3YXMgZG9pbmcgcHJpb3IgdG8gdGhlIGNoYW5nZSBJJ20gbG9va2luZyBhdC4gVGhlIGJlc3Qgd2F5IHRvIHVuZGVyc3RhbmQgaXRzIHByZS1jaGFuZ2Ugb3BlcmF0aW9uIGlzIGJ5IGV4YW1pbmluZyBhbnkgYXNzb2NpYXRlZCBcImhvb2tcIiBmdW5jdGlvbnMgdGhhdCB3ZXJlIGV4ZWN1dGVkIGFmdGVyIG1lbW9yeSB3YXMgYWxsb2NhdGVkLiBJJ2xsIG5lZWQgdG8gY2hlY2sgZm9yIGEgYHBvc3RfYWxsb2NfaG9va2Agb3Igc29tZXRoaW5nIHNpbWlsYXIg4oCTIEknbGwgc3RhcnQgbG9va2luZyBpbiBgbW0vcGFnZV9hbGxvYy5jYCwgYXMgdGhhdCdzIHRoZSBsaWtlbHkgbG9jYXRpb24gZm9yIG1lbW9yeSBhbGxvY2F0aW9uIHJvdXRpbmVzLiBMZXQgbWUgc3BlY2lmaWNhbGx5IHNlYXJjaCBmb3IgdGhlIHRlcm0gYHBvc3RfYWxsb2NfaG9va2Agd2l0aGluIGBtbS9wYWdlX2FsbG9jLmNgIHRvIHNlZSBpZiBpdCBleGlzdHMgYW5kLCBpZiBzbywgd2hhdCBpdHMgY29udGV4dCBpcy4gSSdtIGhvcGluZyB0byBxdWlja2x5IGdyYXNwIHRoZSBpbXBsaWNhdGlvbnMgb2YgYW55IGFsdGVyYXRpb25zIHRvIHRoYXQgcGFydCBvZiB0aGUgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzk5MywiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDEyOjA5OjIyLjcxOTEyNjMwMVoiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTM0MDA2ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicG9zdF9hbGxvY19ob29rXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9jb21wYWN0aW9uLmM9ODQ9c3RhdGljIHN0cnVjdCBwYWdlICptYXJrX2FsbG9jYXRlZF9ub3Byb2Yoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlciwgZ2ZwX3QgZ2ZwX2ZsYWdzKVxcbm1tL2NvbXBhY3Rpb24uYy04NS17XFxubW0vY29tcGFjdGlvbi5jOjg2OlxcdHBvc3RfYWxsb2NfaG9vayhwYWdlLCBvcmRlciwgX19HRlBfTU9WQUJMRSwgQUxMT0NfREVGQVVMVCk7XFxubW0vY29tcGFjdGlvbi5jLTg3LVxcdHNldF9wYWdlX3JlZmNvdW50ZWQocGFnZSk7XFxuLS1cXG5tbS9jb21wYWN0aW9uLmM9MTg0NT1zdGF0aWMgc3RydWN0IGZvbGlvICpjb21wYWN0aW9uX2FsbG9jX25vcHJvZihzdHJ1Y3QgZm9saW8gKnNyYywgdW5zaWduZWQgbG9uZyBkYXRhKVxcbi0tXFxubW0vY29tcGFjdGlvbi5jLTE4ODItXFxubW0vY29tcGFjdGlvbi5jOjE4ODM6XFx0cG9zdF9hbGxvY19ob29rKFxcdTAwMjZkc3QtXFx1MDAzZXBhZ2UsIG9yZGVyLCBfX0dGUF9NT1ZBQkxFLCBBTExPQ19ERUZBVUxUKTtcXG5tbS9jb21wYWN0aW9uLmMtMTg4NC1cXHRzZXRfcGFnZV9yZWZjb3VudGVkKFxcdTAwMjZkc3QtXFx1MDAzZXBhZ2UpO1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTI3Nz1zdGF0aWMgdm9pZCBtZW1jZ19yZXBhcmVudF9vYmpjZ3Moc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTMxMi0gKiBBIGxvdCBvZiB0aGUgY2FsbHMgdG8gdGhlIGNhY2hlIGFsbG9jYXRpb24gZnVuY3Rpb25zIGFyZSBleHBlY3RlZCB0byBiZVxcbm1tL21lbWNvbnRyb2wuYzozMTM6ICogaW5saW5lZCBieSB0aGUgY29tcGlsZXIuIFNpbmNlIHRoZSBjYWxscyB0byBtZW1jZ19zbGFiX3Bvc3RfYWxsb2NfaG9vaygpIGFyZVxcbm1tL21lbWNvbnRyb2wuYy0zMTQtICogY29uZGl0aW9uYWwgdG8gdGhpcyBzdGF0aWMgYnJhbmNoLCB3ZSdsbCBoYXZlIHRvIGFsbG93IG1vZHVsZXMgdGhhdCBkb2VzXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MzU4OT1zdGF0aWMgaW5saW5lIHNpemVfdCBvYmpfZnVsbF9zaXplKHN0cnVjdCBrbWVtX2NhY2hlICpzKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTM1OTctXFxubW0vbWVtY29udHJvbC5jOjM1OTg6Ym9vbCBfX21lbWNnX3NsYWJfcG9zdF9hbGxvY19ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3QgbGlzdF9scnUgKmxydSxcXG5tbS9tZW1jb250cm9sLmMtMzU5OS1cXHRcXHRcXHRcXHQgIGdmcF90IGZsYWdzLCB1bnNpZ25lZCBpbnQgc2xhYl9hbGxvY19mbGFncyxcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz0xODExPXN0YXRpYyBpbmxpbmUgYm9vbCBzaG91bGRfc2tpcF9pbml0KGdmcF90IGZsYWdzKVxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTE4MjAtXFxubW0vcGFnZV9hbGxvYy5jOjE4MjE6aW5saW5lIHZvaWQgcG9zdF9hbGxvY19ob29rKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIsXFxubW0vcGFnZV9hbGxvYy5jLTE4MjItXFx0XFx0XFx0XFx0Z2ZwX3QgZ2ZwX2ZsYWdzLCB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MpXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9MTg3Nj1zdGF0aWMgdm9pZCBwcmVwX25ld19wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIsIGdmcF90IGdmcF9mbGFncyxcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy0xODc4LXtcXG5tbS9wYWdlX2FsbG9jLmM6MTg3OTpcXHRwb3N0X2FsbG9jX2hvb2socGFnZSwgb3JkZXIsIGdmcF9mbGFncywgYWxsb2NfZmxhZ3MpO1xcbm1tL3BhZ2VfYWxsb2MuYy0xODgwLVxcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTcxOTc9c3RhdGljIHZvaWQgc3BsaXRfZnJlZV9mcm96ZW5fcGFnZXMoc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwgZ2ZwX3QgZ2ZwX21hc2spXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNzIwNy1cXG5tbS9wYWdlX2FsbG9jLmM6NzIwODpcXHRcXHRcXHRwb3N0X2FsbG9jX2hvb2socGFnZSwgb3JkZXIsIGdmcF9tYXNrLCBBTExPQ19ERUZBVUxUKTtcXG5tbS9wYWdlX2FsbG9jLmMtNzIwOS1cXHRcXHRcXHRpZiAoIW9yZGVyKVxcbi0tXFxubW0vcGFnZV9hbGxvYy5oPTIyMz1leHRlcm4gdm9pZCBfX2ZyZWVfcGFnZXNfY29yZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyLFxcbi0tXFxubW0vcGFnZV9hbGxvYy5oLTIyNS1cXG5tbS9wYWdlX2FsbG9jLmg6MjI2OnZvaWQgcG9zdF9hbGxvY19ob29rKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIsIGdmcF90IGdmcF9mbGFncyxcXG5tbS9wYWdlX2FsbG9jLmgtMjI3LVxcdFxcdCAgICAgdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzKTtcXG4tLVxcbm1tL3BlcmNwdS5jPTE2MTY9c3RhdGljIGJvb2wgcGNwdV9tZW1jZ19wcmVfYWxsb2NfaG9vayhzaXplX3Qgc2l6ZSwgZ2ZwX3QgZ2ZwLFxcbi0tXFxubW0vcGVyY3B1LmMtMTYzNC1cXG5tbS9wZXJjcHUuYzoxNjM1OnN0YXRpYyB2b2lkIHBjcHVfbWVtY2dfcG9zdF9hbGxvY19ob29rKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZyxcXG5tbS9wZXJjcHUuYy0xNjM2LVxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgcGNwdV9jaHVuayAqY2h1bmssIGludCBvZmYsXFxuLS1cXG5tbS9wZXJjcHUuYz0xNjc5PXBjcHVfbWVtY2dfcHJlX2FsbG9jX2hvb2soc2l6ZV90IHNpemUsIGdmcF90IGdmcCwgc3RydWN0IG9ial9jZ3JvdXAgKipvYmpjZ3ApXFxuLS1cXG5tbS9wZXJjcHUuYy0xNjgzLVxcbm1tL3BlcmNwdS5jOjE2ODQ6c3RhdGljIHZvaWQgcGNwdV9tZW1jZ19wb3N0X2FsbG9jX2hvb2soc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLFxcbm1tL3BlcmNwdS5jLTE2ODUtXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBwY3B1X2NodW5rICpjaHVuaywgaW50IG9mZixcXG4tLVxcbm1tL3BlcmNwdS5jPTE3MzU9dm9pZCBfX3BlcmNwdSAqcGNwdV9hbGxvY19ub3Byb2Yoc2l6ZV90IHNpemUsIHNpemVfdCBhbGlnbiwgYm9vbCByZXNlcnZlZCxcXG4tLVxcbm1tL3BlcmNwdS5jLTE3OTYtXFx0XFx0fSBlbHNlIGlmIChtdXRleF9sb2NrX2tpbGxhYmxlKFxcdTAwMjZwY3B1X2FsbG9jX211dGV4KSkge1xcbm1tL3BlcmNwdS5jOjE3OTc6XFx0XFx0XFx0cGNwdV9tZW1jZ19wb3N0X2FsbG9jX2hvb2sob2JqY2csIE5VTEwsIDAsIHNpemUpO1xcbm1tL3BlcmNwdS5jLTE3OTgtXFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuLS1cXG5tbS9wZXJjcHUuYy0xOTA5LVxcbm1tL3BlcmNwdS5jOjE5MTA6XFx0cGNwdV9tZW1jZ19wb3N0X2FsbG9jX2hvb2sob2JqY2csIGNodW5rLCBvZmYsIHNpemUpO1xcbm1tL3BlcmNwdS5jLTE5MTEtXFxuLS1cXG5tbS9wZXJjcHUuYy0xOTQxLVxcbm1tL3BlcmNwdS5jOjE5NDI6XFx0cGNwdV9tZW1jZ19wb3N0X2FsbG9jX2hvb2sob2JqY2csIE5VTEwsIDAsIHNpemUpO1xcbm1tL3BlcmNwdS5jLTE5NDMtXFxuLS1cXG5tbS9zbGFiLmg9ODU0PXN0YXRpYyBpbmxpbmUgZW51bSBub2RlX3N0YXRfaXRlbSBjYWNoZV92bXN0YXRfaWR4KHN0cnVjdCBrbWVtX2NhY2hlICpzKVxcbi0tXFxubW0vc2xhYi5oLTg2MC0jaWZkZWYgQ09ORklHX01FTUNHXFxubW0vc2xhYi5oOjg2MTpib29sIF9fbWVtY2dfc2xhYl9wb3N0X2FsbG9jX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBsaXN0X2xydSAqbHJ1LFxcbm1tL3NsYWIuaC04NjItXFx0XFx0XFx0XFx0ICBnZnBfdCBmbGFncywgdW5zaWduZWQgaW50IHNsYWJfYWxsb2NfZmxhZ3MsXFxuLS1cXG5tbS9zbHViLmM9MjUwNj1zdGF0aWMgX19mYXN0cGF0aF9pbmxpbmVcXG5tbS9zbHViLmM6MjUwNzpib29sIG1lbWNnX3NsYWJfcG9zdF9hbGxvY19ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBmbGFncyxcXG5tbS9zbHViLmMtMjUwOC1cXHRcXHRcXHRcXHRzaXplX3Qgc2l6ZSwgdm9pZCAqKnAsXFxuLS1cXG5tbS9zbHViLmMtMjUxNi1cXG5tbS9zbHViLmM6MjUxNzpcXHRpZiAobGlrZWx5KF9fbWVtY2dfc2xhYl9wb3N0X2FsbG9jX2hvb2socywgYWMtXFx1MDAzZWxydSwgZmxhZ3MsXFxubW0vc2x1Yi5jLTI1MTgtXFx0XFx0XFx0XFx0XFx0XFx0YWMtXFx1MDAzZWFsbG9jX2ZsYWdzLCBzaXplLCBwKSkpXFxuLS1cXG5tbS9zbHViLmM9MjU1Mz1ib29sIG1lbWNnX3NsYWJfcG9zdF9jaGFyZ2Uodm9pZCAqcCwgZ2ZwX3QgZmxhZ3MpXFxuLS1cXG5tbS9zbHViLmMtMjYwNi1cXG5tbS9zbHViLmM6MjYwNzpcXHRyZXR1cm4gX19tZW1jZ19zbGFiX3Bvc3RfYWxsb2NfaG9vayhzLCBOVUxMLCBmbGFncywgU0xBQl9BTExPQ19ERUZBVUxULFxcbm1tL3NsdWIuYy0yNjA4LVxcdFxcdFxcdFxcdFxcdCAgICAxLCBcXHUwMDI2cCk7XFxuLS1cXG5tbS9zbHViLmMtMjYxMS0jZWxzZSAvKiBDT05GSUdfTUVNQ0cgKi9cXG5tbS9zbHViLmM6MjYxMjpzdGF0aWMgaW5saW5lIGJvb2wgbWVtY2dfc2xhYl9wb3N0X2FsbG9jX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsXFxubW0vc2x1Yi5jLTI2MTMtXFx0XFx0XFx0XFx0XFx0ICAgICAgZ2ZwX3QgZmxhZ3MsXFxuLS1cXG5tbS9zbHViLmM9MjYzND1zdHJ1Y3QgcmN1X2RlbGF5ZWRfZnJlZSB7XFxuLS1cXG5tbS9zbHViLmMtMjY1My0gKiAtIGthc2FuX3NsYWJfYWxsb2MoKVxcbm1tL3NsdWIuYzoyNjU0OiAqIC0gbWVtY2dfc2xhYl9wb3N0X2FsbG9jX2hvb2soKVxcbm1tL3NsdWIuYy0yNjU1LSAqIC0gYWxsb2NfdGFnZ2luZ19zbGFiX2FsbG9jX2hvb2soKVxcbi0tXFxubW0vc2x1Yi5jPTQ2NDQ9c3RhdGljIF9fZmFzdHBhdGhfaW5saW5lXFxubW0vc2x1Yi5jOjQ2NDU6Ym9vbCBzbGFiX3Bvc3RfYWxsb2NfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZmxhZ3MsIHNpemVfdCBzaXplLFxcbm1tL3NsdWIuYy00NjQ2LVxcdFxcdFxcdCAgdm9pZCAqKnAsIGNvbnN0IHN0cnVjdCBzbGFiX2FsbG9jX2NvbnRleHQgKmFjKVxcbi0tXFxubW0vc2x1Yi5jLTQ3MDEtXFxubW0vc2x1Yi5jOjQ3MDI6XFx0cmV0dXJuIG1lbWNnX3NsYWJfcG9zdF9hbGxvY19ob29rKHMsIGZsYWdzLCBzaXplLCBwLCBhYyk7XFxubW0vc2x1Yi5jLTQ3MDMtfVxcbi0tXFxubW0vc2x1Yi5jPTQ5Njk9c3RhdGljIF9fZmFzdHBhdGhfaW5saW5lIHZvaWQgKnNsYWJfYWxsb2Nfbm9kZShzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcXG4tLVxcbm1tL3NsdWIuYy00OTkyLVxcdC8qXFxubW0vc2x1Yi5jOjQ5OTM6XFx0ICogSW4gY2FzZSB0aGlzIGZhaWxzIGR1ZSB0byBtZW1jZ19zbGFiX3Bvc3RfYWxsb2NfaG9vaygpLFxcbm1tL3NsdWIuYy00OTk0LVxcdCAqIG9iamVjdCBpcyBzZXQgdG8gTlVMTFxcbm1tL3NsdWIuYy00OTk1LVxcdCAqL1xcbm1tL3NsdWIuYzo0OTk2OlxcdHNsYWJfcG9zdF9hbGxvY19ob29rKHMsIGdmcGZsYWdzLCAxLCBcXHUwMDI2b2JqZWN0LCBhYyk7XFxubW0vc2x1Yi5jLTQ5OTctXFxuLS1cXG5tbS9zbHViLmM9NTMwNz1rbWVtX2NhY2hlX2FsbG9jX2Zyb21fc2hlYWZfbm9wcm9mKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBnZnAsXFxuLS1cXG5tbS9zbHViLmMtNTMyNC1cXHQvKiBhZGQgX19HRlBfTk9GQUlMIHRvIGZvcmNlIHN1Y2Nlc3NmdWwgbWVtY2cgY2hhcmdpbmcgKi9cXG5tbS9zbHViLmM6NTMyNTpcXHRzbGFiX3Bvc3RfYWxsb2NfaG9vayhzLCBnZnAgfCBfX0dGUF9OT0ZBSUwsIDEsIFxcdTAwMjZyZXQsIFxcdTAwMjZhYyk7XFxubW0vc2x1Yi5jLTUzMjYtb3V0Olxcbi0tXFxubW0vc2x1Yi5jPTU0NDQ9c3RhdGljIHZvaWQgKl9fa21hbGxvY19ub2xvY2tfbm9wcm9mKERFQ0xfVE9LRU5fUEFSQU1TKHNpemUsIHRva2VuKSwgZ2ZwX3QgZ2ZwX2ZsYWdzLFxcbi0tXFxubW0vc2x1Yi5jLTU0OTEtXFx0ICoga2ZlbmNlX2FsbG9jLiBIZW5jZSBjYWxsIF9fX3NsYWJfYWxsb2MoKSAoYXQgbW9zdCB0d2ljZSlcXG5tbS9zbHViLmM6NTQ5MjpcXHQgKiBhbmQgc2xhYl9wb3N0X2FsbG9jX2hvb2soKSBkaXJlY3RseS5cXG5tbS9zbHViLmMtNTQ5My1cXHQgKi9cXG4tLVxcbm1tL3NsdWIuYy01NTE2LVxcdG1heWJlX3dpcGVfb2JqX2ZyZWVwdHIocywgcmV0KTtcXG5tbS9zbHViLmM6NTUxNzpcXHRzbGFiX3Bvc3RfYWxsb2NfaG9vayhzLCBnZnBfZmxhZ3MsIDEsIFxcdTAwMjZyZXQsIGFjKTtcXG5tbS9zbHViLmMtNTUxOC1cXG4tLVxcbm1tL3NsdWIuYz03NDc2PWJvb2wga21lbV9jYWNoZV9hbGxvY19idWxrX25vcHJvZihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZmxhZ3MsXFxuLS1cXG5tbS9zbHViLmMtNzUzNC1cXHQvKiBtZW1jZyBhbmQga21lbV9jYWNoZSBkZWJ1ZyBzdXBwb3J0IGFuZCBtZW1vcnkgaW5pdGlhbGl6YXRpb24gKi9cXG5tbS9zbHViLmM6NzUzNTpcXHRyZXR1cm4gbGlrZWx5KHNsYWJfcG9zdF9hbGxvY19ob29rKHMsIGZsYWdzLCBzaXplLCBwLCBcXHUwMDI2YWMpKTtcXG5tbS9zbHViLmMtNzUzNi19XFxuLS1cXG5tbS92bWFsbG9jLmM9NDAzMz12b2lkICpfX3ZtYWxsb2Nfbm9kZV9yYW5nZV9ub3Byb2YodW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIGFsaWduLFxcbi0tXFxubW0vdm1hbGxvYy5jLTQxMTgtXFx0ICogVGhlIGNvbmRpdGlvbiBmb3Igc2V0dGluZyBLQVNBTl9WTUFMTE9DX0lOSVQgc2hvdWxkIGNvbXBsZW1lbnQgdGhlXFxubW0vdm1hbGxvYy5jOjQxMTk6XFx0ICogb25lIGluIHBvc3RfYWxsb2NfaG9vaygpIHdpdGggcmVnYXJkcyB0byB0aGUgX19HRlBfU0tJUF9aRVJPIGNoZWNrXFxubW0vdm1hbGxvYy5jLTQxMjAtXFx0ICogdG8gbWFrZSBzdXJlIHRoYXQgbWVtb3J5IGlzIGluaXRpYWxpemVkIHVuZGVyIHRoZSBzYW1lIGNvbmRpdGlvbnMuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDEyOjA5OjIyLjc3MjUzMjY2MVoiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTIwMTE0NjE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBmaXJzdC1wZXJzb24gc3VtbWFyeSwgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkRpdmluZyBpbnRvIGBwb3N0X2FsbG9jX2hvb2tgKipcblxuT2theSwgdGltZSB0byBkaXNzZWN0IGBwb3N0X2FsbG9jX2hvb2tgIGluIGBtbS9wYWdlX2FsbG9jLmNgLiBUaGlzIGhvb2sgaXMgYSBjcml0aWNhbCBwaWVjZSwgYW5kIEkgd2FudCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaXRzIHJvbGUgaW4gdGhlIG92ZXJhbGwgbWVtb3J5IGFsbG9jYXRpb24gcHJvY2Vzcy4gSSdtIGdvaW5nIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gd2hlcmUgaXQncyBjYWxsZWQsIHVuZGVyIHdoYXQgY29uZGl0aW9ucywgYW5kIHdoYXQgb3BlcmF0aW9ucyBpdCBwZXJmb3Jtcy4gSSdtIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgTlVNQSBhcmNoaXRlY3R1cmUgYW5kIGFueSBwb3RlbnRpYWwgbWVtb3J5IGhvdC1wbHVnL3VucGx1ZyBjb25zaWRlcmF0aW9ucy4gSSdsbCBiZSBsb29raW5nIGZvciBudWFuY2VzIHRoYXQgaW1wYWN0IHBlcmZvcm1hbmNlIG9yIGludHJvZHVjZSBhbnkgc3VidGxlIG1lbW9yeSBsZWFrcy4gTGV0J3Mgc2VlIGlmIHRoZSBjb2RlIGxpdmVzIHVwIHRvIG15IGV4cGVjdGF0aW9ucyBvciBwcmVzZW50cyBhbnkgc3VycHJpc2VzISBJJ2xsIGJlIGNvbXBhcmluZyBpdCB0byBzaW1pbGFyIGhvb2tzIGluIG90aGVyIG1lbW9yeSBtYW5hZ2VtZW50IHN5c3RlbXMgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgaW50ZXJlc3RpbmcgZGVzaWduIHRyYWRlIG9mZnMgYmVpbmcgbWFkZSBpbiB0aGUgTGludXgga2VybmVsLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MTYyLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTI6MDk6MjQuODkyNjUwMzc5WiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NDQ4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9wYWdlX2FsbG9jLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTgyMCxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTgyMDpcXHRcXG4xODIxOlxcdGlubGluZSB2b2lkIHBvc3RfYWxsb2NfaG9vayhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyLFxcbjE4MjI6XFx0XFx0XFx0XFx0XFx0Z2ZwX3QgZ2ZwX2ZsYWdzLCB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MpXFxuMTgyMzpcXHR7XFxuMTgyNDpcXHRcXHRjb25zdCBib29sIHplcm9fdGFncyA9IGdmcF9mbGFncyBcXHUwMDI2IF9fR0ZQX1pFUk9UQUdTO1xcbjE4MjU6XFx0XFx0Ym9vbCBpbml0ID0gIXdhbnRfaW5pdF9vbl9mcmVlKCkgXFx1MDAyNlxcdTAwMjYgd2FudF9pbml0X29uX2FsbG9jKGdmcF9mbGFncykgXFx1MDAyNlxcdTAwMjZcXG4xODI2OlxcdFxcdFxcdFxcdCFzaG91bGRfc2tpcF9pbml0KGdmcF9mbGFncyk7XFxuMTgyNzpcXHRcXHRpbnQgaTtcXG4xODI4OlxcdFxcbjE4Mjk6XFx0XFx0c2V0X3BhZ2VfcHJpdmF0ZShwYWdlLCAwKTtcXG4xODMwOlxcdFxcbjE4MzE6XFx0XFx0YXJjaF9hbGxvY19wYWdlKHBhZ2UsIG9yZGVyKTtcXG4xODMyOlxcdFxcdGRlYnVnX3BhZ2VhbGxvY19tYXBfcGFnZXMocGFnZSwgMSBcXHUwMDNjXFx1MDAzYyBvcmRlcik7XFxuMTgzMzpcXHRcXG4xODM0OlxcdFxcdC8qXFxuMTgzNTpcXHRcXHQgKiBQYWdlIHVucG9pc29uaW5nIG11c3QgaGFwcGVuIGJlZm9yZSBtZW1vcnkgaW5pdGlhbGl6YXRpb24uXFxuMTgzNjpcXHRcXHQgKiBPdGhlcndpc2UsIHRoZSBwb2lzb24gcGF0dGVybiB3aWxsIGJlIG92ZXJ3cml0dGVuIGZvciBfX0dGUF9aRVJPXFxuMTgzNzpcXHRcXHQgKiBhbGxvY2F0aW9ucyBhbmQgdGhlIHBhZ2UgdW5wb2lzb25pbmcgY29kZSB3aWxsIGNvbXBsYWluLlxcbjE4Mzg6XFx0XFx0ICovXFxuMTgzOTpcXHRcXHRrZXJuZWxfdW5wb2lzb25fcGFnZXMocGFnZSwgMSBcXHUwMDNjXFx1MDAzYyBvcmRlcik7XFxuMTg0MDpcXHRcXG4xODQxOlxcdFxcdC8qXFxuMTg0MjpcXHRcXHQgKiBBcyBtZW1vcnkgaW5pdGlhbGl6YXRpb24gbWlnaHQgYmUgaW50ZWdyYXRlZCBpbnRvIEtBU0FOLFxcbjE4NDM6XFx0XFx0ICogS0FTQU4gdW5wb2lzb25pbmcgYW5kIG1lbW9yeSBpbml0aWFsaXphdGlvbiBjb2RlIG11c3QgYmVcXG4xODQ0OlxcdFxcdCAqIGtlcHQgdG9nZXRoZXIgdG8gYXZvaWQgZGlzY3JlcGFuY2llcyBpbiBiZWhhdmlvci5cXG4xODQ1OlxcdFxcdCAqL1xcbjE4NDY6XFx0XFxuMTg0NzpcXHRcXHQvKlxcbjE4NDg6XFx0XFx0ICogQ2xlYXJpbmcgdGFncyBjYW4gZWZmaWNpZW50bHkgY2xlYXIgdGhlIG1lbW9yeSBmb3IgdXMgYXMgd2VsbCwgaWZcXG4xODQ5OlxcdFxcdCAqIHJlcXVpcmVkLlxcbjE4NTA6XFx0XFx0ICovXFxuMTg1MTpcXHRcXHRpZiAoemVyb190YWdzKVxcbjE4NTI6XFx0XFx0XFx0aW5pdCA9IHRhZ19jbGVhcl9oaWdocGFnZXMocGFnZSwgMSBcXHUwMDNjXFx1MDAzYyBvcmRlciwgLyogY2xlYXJfcGFnZXM9ICovaW5pdCk7XFxuMTg1MzpcXHRcXG4xODU0OlxcdFxcdGlmICghc2hvdWxkX3NraXBfa2FzYW5fdW5wb2lzb24oZ2ZwX2ZsYWdzKSBcXHUwMDI2XFx1MDAyNlxcbjE4NTU6XFx0XFx0ICAgIGthc2FuX3VucG9pc29uX3BhZ2VzKHBhZ2UsIG9yZGVyLCBpbml0KSkge1xcbjE4NTY6XFx0XFx0XFx0LyogVGFrZSBub3RlIHRoYXQgbWVtb3J5IHdhcyBpbml0aWFsaXplZCBieSBLQVNBTi4gKi9cXG4xODU3OlxcdFxcdFxcdGlmIChrYXNhbl9oYXNfaW50ZWdyYXRlZF9pbml0KCkpXFxuMTg1ODpcXHRcXHRcXHRcXHRpbml0ID0gZmFsc2U7XFxuMTg1OTpcXHRcXHR9IGVsc2Uge1xcbjE4NjA6XFx0XFx0XFx0LypcXG4xODYxOlxcdFxcdFxcdCAqIElmIG1lbW9yeSB0YWdzIGhhdmUgbm90IGJlZW4gc2V0IGJ5IEtBU0FOLCByZXNldCB0aGUgcGFnZVxcbjE4NjI6XFx0XFx0XFx0ICogdGFncyB0byBlbnN1cmUgcGFnZV9hZGRyZXNzKCkgZGVyZWZlcmVuY2luZyBkb2VzIG5vdCBmYXVsdC5cXG4xODYzOlxcdFxcdFxcdCAqL1xcbjE4NjQ6XFx0XFx0XFx0Zm9yIChpID0gMDsgaSAhPSAxIFxcdTAwM2NcXHUwMDNjIG9yZGVyOyArK2kpXFxuMTg2NTpcXHRcXHRcXHRcXHRwYWdlX2thc2FuX3RhZ19yZXNldChwYWdlICsgaSk7XFxuMTg2NjpcXHRcXHR9XFxuMTg2NzpcXHRcXHQvKiBJZiBtZW1vcnkgaXMgc3RpbGwgbm90IGluaXRpYWxpemVkLCBpbml0aWFsaXplIGl0IG5vdy4gKi9cXG4xODY4OlxcdFxcdGlmIChpbml0KVxcbjE4Njk6XFx0XFx0XFx0Y2xlYXJfaGlnaHBhZ2VzX2thc2FuX3RhZ2dlZChwYWdlLCAxIFxcdTAwM2NcXHUwMDNjIG9yZGVyKTtcXG4xODcwOlxcdFxcbjE4NzE6XFx0XFx0c2V0X3BhZ2Vfb3duZXIocGFnZSwgb3JkZXIsIGdmcF9mbGFncyk7XFxuMTg3MjpcXHRcXHRwYWdlX3RhYmxlX2NoZWNrX2FsbG9jKHBhZ2UsIG9yZGVyKTtcXG4xODczOlxcdFxcdHBnYWxsb2NfdGFnX2FkZChwYWdlLCBjdXJyZW50LCAxIFxcdTAwM2NcXHUwMDNjIG9yZGVyLCBhbGxvY19mbGFncyk7XFxuMTg3NDpcXHR9XFxuMTg3NTpcXHRcXG4xODc2OlxcdHN0YXRpYyB2b2lkIHByZXBfbmV3X3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlciwgZ2ZwX3QgZ2ZwX2ZsYWdzLFxcbjE4Nzc6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzKVxcbjE4Nzg6XFx0e1xcbjE4Nzk6XFx0XFx0cG9zdF9hbGxvY19ob29rKHBhZ2UsIG9yZGVyLCBnZnBfZmxhZ3MsIGFsbG9jX2ZsYWdzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTI6MDk6MjQuODkzMTE3Nzc5WiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI2ODM0Nzc3MDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgY29kZSBzbmlwcGV0OlxuXG4qKkRpdmluZyBpbnRvIGBfX2FsbG9jX2Zyb3plbl9wYWdlc19ub3Byb2ZgKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYF9fYWxsb2NfZnJvemVuX3BhZ2VzX25vcHJvZmAgbm93LiBJdCBzZWVtcyBteSBmb2N1cyBzaG91bGQgYmUgb24gdGhlIHNlY3Rpb24gYXJvdW5kIGxpbmVzIDU0NTAtNTQ3MC4gSSBjYW4gc2VlIGl0J3MgY2FsbGluZyB0d28ga2V5IGZ1bmN0aW9ucyBkaXJlY3RseSBhZnRlciB0aGUgdHJhY2luZyBhbmQgS01TQU4gaW5zdHJ1bWVudGF0aW9uOiBgdHJhY2VfbW1fcGFnZV9hbGxvY2AgYW5kIGBrbXNhbl9hbGxvY19wYWdlYC4gVGhpcyBpbW1lZGlhdGVseSB0ZWxscyBtZSBzb21ldGhpbmcgc2lnbmlmaWNhbnQuIEl0J3MgY2FwdHVyaW5nIGFsbG9jYXRpb24gZGV0YWlscyB0aHJvdWdoIGEgdHJhY2luZyBtZWNoYW5pc20gYW5kIHRoZW4gaW50ZWdyYXRpbmcgd2l0aCBLZXJuZWwgTWVtb3J5IFNhbml0aXplciAoS01TQU4pIHRvIGNoZWNrIGZvciBtZW1vcnkgZXJyb3JzLiBUaGUgZnVuY3Rpb24gcHJlc3VtYWJseSBhbGxvY2F0ZXMgZnJvemVuIHBhZ2VzLiBHaXZlbiB0aGUgY29udGV4dCwgdGhlIGZ1bmN0aW9uIGxpa2VseSBoYW5kbGVzIHNwZWNpZmljLCBvcHRpbWl6ZWQsIG9yIHNwZWNpYWxpemVkIHBhZ2UgYWxsb2NhdGlvbiBzY2VuYXJpb3Mgd2l0aGluIHRoZSBrZXJuZWwuIEkgc2hvdWxkIGxvb2sgaW50byB0aGUgc3BlY2lmaWMgZGV0YWlscyBvZiB0aGVzZSBmdW5jdGlvbiBjYWxscyBub3csIGluIHRoZSBsYXJnZXIgY2FsbCBncmFwaCwgYW5kIHRoZSByb2xlIG9mIHRoZSBwYWdlIGFsbG9jYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgzODQsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDEyOjA5OjI3LjU3NjU5ODk0OVoiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzMzMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vcGFnZV9hbGxvYy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU0NDAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjU0NDA6XFx0XFx0XFx0Z290byBvdXQ7XFxuNTQ0MTpcXHRcXG41NDQyOlxcdFxcdGFsbG9jX2dmcCA9IGdmcDtcXG41NDQzOlxcdFxcdGFjLnNwcmVhZF9kaXJ0eV9wYWdlcyA9IGZhbHNlO1xcbjU0NDQ6XFx0XFxuNTQ0NTpcXHRcXHQvKlxcbjU0NDY6XFx0XFx0ICogUmVzdG9yZSB0aGUgb3JpZ2luYWwgbm9kZW1hc2sgaWYgaXQgd2FzIHBvdGVudGlhbGx5IHJlcGxhY2VkIHdpdGhcXG41NDQ3OlxcdFxcdCAqIFxcdTAwMjZjcHVzZXRfY3VycmVudF9tZW1zX2FsbG93ZWQgdG8gb3B0aW1pemUgdGhlIGZhc3QtcGF0aCBhdHRlbXB0LlxcbjU0NDg6XFx0XFx0ICovXFxuNTQ0OTpcXHRcXHRhYy5ub2RlbWFzayA9IG5vZGVtYXNrO1xcbjU0NTA6XFx0XFxuNTQ1MTpcXHRcXHRwYWdlID0gX19hbGxvY19wYWdlc19zbG93cGF0aChhbGxvY19nZnAsIG9yZGVyLCBcXHUwMDI2YWMpO1xcbjU0NTI6XFx0XFxuNTQ1MzpcXHRvdXQ6XFxuNTQ1NDpcXHRcXHRpZiAobWVtY2dfa21lbV9vbmxpbmUoKSBcXHUwMDI2XFx1MDAyNiAoZ2ZwIFxcdTAwMjYgX19HRlBfQUNDT1VOVCkgXFx1MDAyNlxcdTAwMjYgcGFnZSBcXHUwMDI2XFx1MDAyNlxcbjU0NTU6XFx0XFx0ICAgIHVubGlrZWx5KF9fbWVtY2dfa21lbV9jaGFyZ2VfcGFnZShwYWdlLCBnZnAsIG9yZGVyKSAhPSAwKSkge1xcbjU0NTY6XFx0XFx0XFx0X19mcmVlX2Zyb3plbl9wYWdlcyhwYWdlLCBvcmRlcixcXG41NDU3OlxcdFxcdFxcdFxcdFxcdCAgICBhbGxvY19mbGFncyBcXHUwMDI2IEFMTE9DX05PTE9DSyA/IEZQSV9OT0xPQ0sgOiAwKTtcXG41NDU4OlxcdFxcdFxcdHBhZ2UgPSBOVUxMO1xcbjU0NTk6XFx0XFx0fVxcbjU0NjA6XFx0XFxuNTQ2MTpcXHRcXHR0cmFjZV9tbV9wYWdlX2FsbG9jKHBhZ2UsIG9yZGVyLCBhbGxvY19nZnAsIGFjLm1pZ3JhdGV0eXBlKTtcXG41NDYyOlxcdFxcdGttc2FuX2FsbG9jX3BhZ2UocGFnZSwgb3JkZXIsIGFsbG9jX2dmcCk7XFxuNTQ2MzpcXHRcXG41NDY0OlxcdFxcdHJldHVybiBwYWdlO1xcbjU0NjU6XFx0fVxcbjU0NjY6XFx0RVhQT1JUX1NZTUJPTChfX2FsbG9jX2Zyb3plbl9wYWdlc19ub3Byb2YpO1xcbjU0Njc6XFx0XFxuNTQ2ODpcXHRzdHJ1Y3QgcGFnZSAqX19hbGxvY19wYWdlc19ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsXFxuNTQ2OTpcXHRcXHRcXHRpbnQgcHJlZmVycmVkX25pZCwgbm9kZW1hc2tfdCAqbm9kZW1hc2ssIHVuc2lnbmVkIGludCBhbGxvY19mbGFncylcXG41NDcwOlxcdHtcXG41NDcxOlxcdFxcdHN0cnVjdCBwYWdlICpwYWdlO1xcbjU0NzI6XFx0XFxuNTQ3MzpcXHRcXHRwYWdlID0gX19hbGxvY19mcm96ZW5fcGFnZXNfbm9wcm9mKGdmcCwgb3JkZXIsIHByZWZlcnJlZF9uaWQsIG5vZGVtYXNrLFxcbjU0NzQ6XFx0XFx0XFx0XFx0XFx0XFx0ICAgYWxsb2NfZmxhZ3MpO1xcbjU0NzU6XFx0XFx0aWYgKHBhZ2UpXFxuNTQ3NjpcXHRcXHRcXHRzZXRfcGFnZV9yZWZjb3VudGVkKHBhZ2UpO1xcbjU0Nzc6XFx0XFx0cmV0dXJuIHBhZ2U7XFxuNTQ3ODpcXHR9XFxuNTQ3OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTI6MDk6MjcuNTc2ODc0Mjk5WiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQwOTg1ODU3NTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFBhZ2UgQWxsb2NhdGlvbiBpbiBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJJ20gbG9va2luZyBhdCBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIGFuZCBzcGVjaWZpY2FsbHkgdGhpcyBzbmlwcGV0OlxuXG5gYGBjXG5cdFx0cHJlcF9uZXdfcGFnZShwYWdlLCAwLCBnZnAsIEFMTE9DX0RFRkFVTFQpO1xuK1x0XHR0cmFjZV9tbV9wYWdlX2FsbG9jKHBhZ2UsIDAsIGdmcCwgYWMubWlncmF0ZXR5cGUpO1xuK1x0XHRrbXNhbl9hbGxvY19wYWdlKHBhZ2UsIDAsIGdmcCBcdTAwMjYgfl9fR0ZQX1JFQ0xBSU0pO1xuXHRcdHNldF9wYWdlX3JlZmNvdW50ZWQocGFnZSk7XG5cdFx0cGFnZV9hcnJheVtucl9wb3B1bGF0ZWQrK10gPSBwYWdlO1xuYGBgXG5cblJpZ2h0LCBzbyBhZnRlciB0aGlzIHBhdGNoLCBpdCBzZWVtcyB0aGUgY29kZSBub3cgY2FsbHMgYGttc2FuX2FsbG9jX3BhZ2VgLiBCZWZvcmUsIGlmIEkgcmVjYWxsIGNvcnJlY3RseSwgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCB3YXMgcHVsbGluZyBwYWdlcyBkaXJlY3RseSBmcm9tIHRoZSBQQ1AgbGlzdCwgdXNpbmcgYF9fcm1xdWV1ZV9wY3BsaXN0YCwgdGhlbiBjYWxsaW5nIGBwcmVwX25ld19wYWdlYCwgYHNldF9wYWdlX3JlZmNvdW50ZWRgIGFuZCByZXR1cm5pbmcuIFRoZSBjcnVjaWFsIHBvaW50IGlzIHRoYXQgaXQgKndhc24ndCogY2FsbGluZyBga21zYW5fYWxsb2NfcGFnZWAgYmVmb3JlLlxuXG5XYWl0IGEgc2Vjb25kLiBJIGtub3cgdGhhdCBgX19hbGxvY19mcm96ZW5fcGFnZXNfbm9wcm9mYCBjYWxscyBga21zYW5fYWxsb2NfcGFnZWAsIHBhc3NpbmcgaW4gYG9yZGVyYCBhbmQgYGFsbG9jX2dmcGAsIGJ1dCB3aGF0IGV4YWN0bHkgKmRvZXMqIGBrbXNhbl9hbGxvY19wYWdlYCBkbz8gQ2xlYXJseSwgSSBuZWVkIHRvIGNoZWNrIGl0cyBpbXBsZW1lbnRhdGlvbiB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UuIExldCBtZSBnbyBmaW5kIHRoYXQgZGVmaW5pdGlvbiBpbiBgbW0va21zYW4vc2hhZG93LmNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MzQyLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTI6MDk6MzEuNjc1NDY0MTU4WiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgyODEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2ttc2FuL3NoYWRvdy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE2NSxcbiAgXCJMaW5lQ291bnRcIjogNDVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE2NTpcXHRcXHRfX21lbWNweShzaGFkb3dfcHRyX2Zvcihkc3QpLCBzaGFkb3dfcHRyX2ZvcihzcmMpLCBQQUdFX1NJWkUpO1xcbiAxNjY6XFx0XFx0X19tZW1jcHkob3JpZ2luX3B0cl9mb3IoZHN0KSwgb3JpZ2luX3B0cl9mb3Ioc3JjKSwgUEFHRV9TSVpFKTtcXG4gMTY3OlxcdFxcdGttc2FuX2xlYXZlX3J1bnRpbWUoKTtcXG4gMTY4OlxcdH1cXG4gMTY5OlxcdEVYUE9SVF9TWU1CT0woa21zYW5fY29weV9wYWdlX21ldGEpO1xcbiAxNzA6XFx0XFxuIDE3MTpcXHR2b2lkIGttc2FuX2FsbG9jX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlciwgZ2ZwX3QgZmxhZ3MpXFxuIDE3MjpcXHR7XFxuIDE3MzpcXHRcXHRib29sIGluaXRpYWxpemVkID0gKGZsYWdzIFxcdTAwMjYgX19HRlBfWkVSTykgfHwgIWttc2FuX2VuYWJsZWQ7XFxuIDE3NDpcXHRcXHRzdHJ1Y3QgcGFnZSAqc2hhZG93LCAqb3JpZ2luO1xcbiAxNzU6XFx0XFx0ZGVwb3Rfc3RhY2tfaGFuZGxlX3QgaGFuZGxlO1xcbiAxNzY6XFx0XFx0aW50IHBhZ2VzID0gMSBcXHUwMDNjXFx1MDAzYyBvcmRlcjtcXG4gMTc3OlxcdFxcbiAxNzg6XFx0XFx0aWYgKCFwYWdlKVxcbiAxNzk6XFx0XFx0XFx0cmV0dXJuO1xcbiAxODA6XFx0XFxuIDE4MTpcXHRcXHRzaGFkb3cgPSBzaGFkb3dfcGFnZV9mb3IocGFnZSk7XFxuIDE4MjpcXHRcXHRvcmlnaW4gPSBvcmlnaW5fcGFnZV9mb3IocGFnZSk7XFxuIDE4MzpcXHRcXG4gMTg0OlxcdFxcdGlmIChpbml0aWFsaXplZCkge1xcbiAxODU6XFx0XFx0XFx0X19tZW1zZXQocGFnZV9hZGRyZXNzKHNoYWRvdyksIDAsIFBBR0VfU0laRSAqIHBhZ2VzKTtcXG4gMTg2OlxcdFxcdFxcdF9fbWVtc2V0KHBhZ2VfYWRkcmVzcyhvcmlnaW4pLCAwLCBQQUdFX1NJWkUgKiBwYWdlcyk7XFxuIDE4NzpcXHRcXHRcXHRyZXR1cm47XFxuIDE4ODpcXHRcXHR9XFxuIDE4OTpcXHRcXG4gMTkwOlxcdFxcdC8qIFplcm8gcGFnZXMgYWxsb2NhdGVkIGJ5IHRoZSBydW50aW1lIHNob3VsZCBhbHNvIGJlIGluaXRpYWxpemVkLiAqL1xcbiAxOTE6XFx0XFx0aWYgKGttc2FuX2luX3J1bnRpbWUoKSlcXG4gMTkyOlxcdFxcdFxcdHJldHVybjtcXG4gMTkzOlxcdFxcbiAxOTQ6XFx0XFx0X19tZW1zZXQocGFnZV9hZGRyZXNzKHNoYWRvdyksIC0xLCBQQUdFX1NJWkUgKiBwYWdlcyk7XFxuIDE5NTpcXHRcXHRrbXNhbl9lbnRlcl9ydW50aW1lKCk7XFxuIDE5NjpcXHRcXHRoYW5kbGUgPSBrbXNhbl9zYXZlX3N0YWNrX3dpdGhfZmxhZ3MoZmxhZ3MsIC8qZXh0cmFfYml0cyovIDApO1xcbiAxOTc6XFx0XFx0a21zYW5fbGVhdmVfcnVudGltZSgpO1xcbiAxOTg6XFx0XFx0LypcXG4gMTk5OlxcdFxcdCAqIEFkZHJlc3NlcyBhcmUgcGFnZS1hbGlnbmVkLCBwYWdlcyBhcmUgY29udGlndW91cywgc28gaXQncyBva1xcbiAyMDA6XFx0XFx0ICogdG8ganVzdCBmaWxsIHRoZSBvcmlnaW4gcGFnZXMgd2l0aCBAaGFuZGxlLlxcbiAyMDE6XFx0XFx0ICovXFxuIDIwMjpcXHRcXHRmb3IgKGludCBpID0gMDsgaSBcXHUwMDNjIFBBR0VfU0laRSAqIHBhZ2VzIC8gc2l6ZW9mKGhhbmRsZSk7IGkrKylcXG4gMjAzOlxcdFxcdFxcdCgoZGVwb3Rfc3RhY2tfaGFuZGxlX3QgKilwYWdlX2FkZHJlc3Mob3JpZ2luKSlbaV0gPSBoYW5kbGU7XFxuIDIwNDpcXHR9XFxuIDIwNTpcXHRcXG4gMjA2OlxcdHZvaWQga21zYW5fZnJlZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpXFxuIDIwNzpcXHR7XFxuIDIwODpcXHRcXHRpZiAoIWttc2FuX2VuYWJsZWQgfHwga21zYW5faW5fcnVudGltZSgpKVxcbiAyMDk6XFx0XFx0XFx0cmV0dXJuO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxMjowOTozMS42NzU1NDg3NDhaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjYzODQ2Njc2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoZXNlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYSBrZXJuZWwgZXhwZXJ0OlxuXG4qKktNU0FOIGFuZCBCdWxrIFBhZ2UgQWxsb2NhdGlvbjogQSBNaXNzaW5nIFBpZWNlKipcblxuQWxyaWdodCwgc28gYGttc2FuX2FsbG9jX3BhZ2VgIGlzIHRoZSBrZXkgS01TQU4gaG9vayBmb3IgdHJhY2tpbmcgdGhlIGFsbG9jYXRpb24gb2YgbWVtb3J5IHBhZ2VzLiBXaXRob3V0IGl0LCBLTVNBTiBtaXNzZXMgcGFnZXMgdGhhdCBhcmUgYWxsb2NhdGVkIHRocm91Z2ggYGFsbG9jX3BhZ2VzX2J1bGtgLiBTcGVjaWZpY2FsbHksIHRoZSBLTVNBTiBzaGFkb3cgbWVtb3J5LCB3aGljaCBrZWVwcyB0cmFjayBvZiB1bmluaXRpYWxpemVkIGRhdGEsIGRvZXNuJ3QgZ2V0IHVwZGF0ZWQgb3IgcG9pc29uZWQgKGluaXRpYWxpemVkIHRvIGEgc3BlY2lmaWMgdmFsdWUgdG8gbWFrZSBkZWJ1Z2dpbmcgZWFzaWVyKSB3aGVuIHBhZ2VzIGFyZSBhbGxvY2F0ZWQgd2l0aCBgYWxsb2NfcGFnZXNfYnVsa2AuIEVzc2VudGlhbGx5LCBLTVNBTiBkb2Vzbid0IFwia25vd1wiIGFib3V0IHRob3NlIHBhZ2VzLlxuXG5IYW5nIG9uIGEgc2Vjb25k4oCmIHRoaXMgcGF0Y2ggaXMgYWRkcmVzc2luZyB0aGF0IGV4YWN0IGlzc3VlISBJdCBsb29rcyBsaWtlIHdlJ3JlIGZpeGluZyBhIGdhcCBpbiB0cmFjaW5nIGFuZCBhZGRpbmcgYSBtaXNzaW5nIEtNU0FOIGhvb2sgKGB0cmFjZV9tbV9wYWdlX2FsbG9jYCBhbmQgYGttc2FuX2FsbG9jX3BhZ2VgKSBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIGZ1bmN0aW9uLiBUaGF0J3MgYSBjcml0aWNhbCBvdmVyc2lnaHQgYmVpbmcgcmVjdGlmaWVkLlxuXG5Ob3csIGhvbGQgb24uIEJlZm9yZSBJIGRpdmUgZnVydGhlciwgbGV0J3Mgc3RlcCBiYWNrIGFuZCB1bmRlcnN0YW5kIHRoZSBzY29wZS4gTGV0IG1lIHF1aWNrbHkgc2VlIHdoZXJlIGBhbGxvY19wYWdlc19idWxrYCBpcyBjYWxsZWQgZnJvbSBpbiB0aGUga2VybmVsLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgd2lkZXNwcmVhZCB0aGlzIGNoYW5nZSB3aWxsIGltcGFjdCB0aGUgc3lzdGVtLiBJJ2xsIHNlYXJjaCB0aGUga2VybmVsIHNvdXJjZSBmb3IgYWxsIGluc3RhbmNlcyBvZiBgYWxsb2NfcGFnZXNfYnVsa2AgYW5kIHNlZSB3aGF0J3MgdXNpbmcgdGhpcyBhbGxvY2F0aW9uIHBhdGguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNzE3LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTI6MDk6MzQuMzE0MDE3OTU5WiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTkwMTY2MTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFsbG9jX3BhZ2VzX2J1bGtcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jPTE3Mj1zdGF0aWMgc3RydWN0IGJpbyAqYmxrX2NyeXB0b19hbGxvY19lbmNfYmlvKHN0cnVjdCBiaW8gKmJpb19zcmMsXFxuLS1cXG5ibG9jay9ibGstY3J5cHRvLWZhbGxiYWNrLmMtMjA0LVxcdCAqXFxuYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jOjIwNTpcXHQgKiBOb3RlOiBhbGxvY19wYWdlc19idWxrIG5lZWRzIHRoZSBhcnJheSB0byBiZSB6ZXJvZWQsIGFzIGl0IGFzc3VtZXNcXG5ibG9jay9ibGstY3J5cHRvLWZhbGxiYWNrLmMtMjA2LVxcdCAqIGFueSBub24temVybyBzbG90IGFscmVhZHkgY29udGFpbnMgYSB2YWxpZCBhbGxvY2F0aW9uLlxcbi0tXFxuYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jLTIwOC1cXHRtZW1zZXQocGFnZXMsIDAsIHNpemVvZihzdHJ1Y3QgcGFnZSAqKSAqIG5yX3NlZ3MpO1xcbmJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYzoyMDk6XFx0bnJfYWxsb2NhdGVkID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfS0VSTkVMLCBucl9zZWdzLCBwYWdlcyk7XFxuYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jLTIxMC1cXHRpZiAobnJfYWxsb2NhdGVkIFxcdTAwM2MgbnJfc2VncylcXG4tLVxcbmRyaXZlcnMvZmlyZXdpcmUvY29yZS1pc28uYz0zMT1pbnQgZndfaXNvX2J1ZmZlcl9hbGxvYyhzdHJ1Y3QgZndfaXNvX2J1ZmZlciAqYnVmZmVyLCBpbnQgcGFnZV9jb3VudClcXG4tLVxcbmRyaXZlcnMvZmlyZXdpcmUvY29yZS1pc28uYy00MS1cXHQvLyBjb252ZW5pZW5jZSB0byBtYXAgdGhlbSBpbnRvIHZpcnR1YWwgYWRkcmVzcyBzcGFjZSBvZiB1c2VyIHByb2Nlc3MuXFxuZHJpdmVycy9maXJld2lyZS9jb3JlLWlzby5jOjQyOlxcdHVuc2lnbmVkIGxvbmcgbnJfcG9wdWxhdGVkID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfS0VSTkVMIHwgR0ZQX0RNQTMyIHwgX19HRlBfWkVSTyxcXG5kcml2ZXJzL2ZpcmV3aXJlL2NvcmUtaXNvLmMtNDMtXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgcGFnZV9jb3VudCwgcGFnZV9hcnJheSk7XFxuLS1cXG5kcml2ZXJzL2ZpcmV3aXJlL29oY2kuYz04NDg9c3RhdGljIGludCBhcl9jb250ZXh0X2luaXQoc3RydWN0IGFyX2NvbnRleHQgKmN0eCwgc3RydWN0IGZ3X29oY2kgKm9oY2ksXFxuLS1cXG5kcml2ZXJzL2ZpcmV3aXJlL29oY2kuYy04NjQtXFx0Ly8gYWRkcmVzcyByYW5nZSBpbiBrZXJuZWwgdmlydHVhbCBhZGRyZXNzIHNwYWNlLlxcbmRyaXZlcnMvZmlyZXdpcmUvb2hjaS5jOjg2NTpcXHR1bnNpZ25lZCBsb25nIG5yX3BvcHVsYXRlZCA9IGFsbG9jX3BhZ2VzX2J1bGsoR0ZQX0tFUk5FTCB8IEdGUF9ETUEzMiwgQVJfQlVGRkVSUywgcGFnZXMpO1xcbmRyaXZlcnMvZmlyZXdpcmUvb2hjaS5jLTg2Ni1cXG4tLVxcbmRyaXZlcnMvc3RhZ2luZy9tZWRpYS9hdG9taXNwL3BjaS9obW0vaG1tX2JvLmM9NjIxPXN0YXRpYyBpbnQgYWxsb2NfcHJpdmF0ZV9wYWdlcyhzdHJ1Y3QgaG1tX2J1ZmZlcl9vYmplY3QgKmJvKVxcbi0tXFxuZHJpdmVycy9zdGFnaW5nL21lZGlhL2F0b21pc3AvcGNpL2htbS9obW1fYm8uYy02MjYtXFxuZHJpdmVycy9zdGFnaW5nL21lZGlhL2F0b21pc3AvcGNpL2htbS9obW1fYm8uYzo2Mjc6XFx0bnJfYWxsb2NhdGVkID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfS0VSTkVMLCBiby1cXHUwMDNlcGduciwgYm8tXFx1MDAzZXBhZ2VzKTtcXG5kcml2ZXJzL3N0YWdpbmcvbWVkaWEvYXRvbWlzcC9wY2kvaG1tL2htbV9iby5jLTYyOC1cXHQvKlxcbmRyaXZlcnMvc3RhZ2luZy9tZWRpYS9hdG9taXNwL3BjaS9obW0vaG1tX2JvLmM6NjI5OlxcdCAqIGFsbG9jX3BhZ2VzX2J1bGsoKSBkb2VzIG5vdCB0cnkgdmVyeSBoYXJkIHRvIGdldCBwYWdlcyB1bmRlciBtZW1vcnlcXG5kcml2ZXJzL3N0YWdpbmcvbWVkaWEvYXRvbWlzcC9wY2kvaG1tL2htbV9iby5jLTYzMC1cXHQgKiBwcmVzc3VyZS4gSWYgbmVjZXNzYXJ5IGZhbGwgYmFjayB0byBhbGxvY19wYWdlKCkuXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL21seDUvY21kLmM9NDY2PXN0YXRpYyB2b2lkIGZyZWVfcGFnZV9saXN0KHUzMiBucGFnZXMsIHN0cnVjdCBwYWdlICoqcGFnZV9saXN0KVxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS9tbHg1L2NtZC5jLTQ2OS1cXG5kcml2ZXJzL3ZmaW8vcGNpL21seDUvY21kLmM6NDcwOlxcdC8qIFVuZG8gYWxsb2NfcGFnZXNfYnVsaygpICovXFxuZHJpdmVycy92ZmlvL3BjaS9tbHg1L2NtZC5jLTQ3MS1cXHRmb3IgKGkgPSBucGFnZXMgLSAxOyBpIFxcdTAwM2U9IDA7IGktLSlcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvbWx4NS9jbWQuYz00OTY9c3RhdGljIGludCBtbHg1dmZfYWRkX3BhZ2VzKHN0cnVjdCBwYWdlICoqKnBhZ2VfbGlzdCwgdW5zaWduZWQgaW50IG5wYWdlcylcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvbWx4NS9jbWQuYy01MDYtXFx0Zm9yICg7Oykge1xcbmRyaXZlcnMvdmZpby9wY2kvbWx4NS9jbWQuYzo1MDc6XFx0XFx0ZmlsbGVkID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfS0VSTkVMX0FDQ09VTlQsIG5wYWdlcyAtIGRvbmUsXFxuZHJpdmVycy92ZmlvL3BjaS9tbHg1L2NtZC5jLTUwOC1cXHRcXHRcXHRcXHRcXHQgICpwYWdlX2xpc3QgKyBkb25lKTtcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvdmlydGlvL21pZ3JhdGUuYz02Mz1zdGF0aWMgaW50IHZpcnRpb3ZmX2FkZF9taWdyYXRpb25fcGFnZXMoc3RydWN0IHZpcnRpb3ZmX2RhdGFfYnVmZmVyICpidWYsXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZpcnRpby9taWdyYXRlLmMtNzgtXFx0ZG8ge1xcbmRyaXZlcnMvdmZpby9wY2kvdmlydGlvL21pZ3JhdGUuYzo3OTpcXHRcXHRmaWxsZWQgPSBhbGxvY19wYWdlc19idWxrKEdGUF9LRVJORUxfQUNDT1VOVCwgdG9fZmlsbCxcXG5kcml2ZXJzL3ZmaW8vcGNpL3ZpcnRpby9taWdyYXRlLmMtODAtXFx0XFx0XFx0XFx0XFx0ICBwYWdlX2xpc3QpO1xcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS92aXJ0aW8vbWlncmF0ZS5jPTExMD1zdGF0aWMgdm9pZCB2aXJ0aW92Zl9mcmVlX2RhdGFfYnVmZmVyKHN0cnVjdCB2aXJ0aW92Zl9kYXRhX2J1ZmZlciAqYnVmKVxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS92aXJ0aW8vbWlncmF0ZS5jLTExMy1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZpcnRpby9taWdyYXRlLmM6MTE0OlxcdC8qIFVuZG8gYWxsb2NfcGFnZXNfYnVsaygpICovXFxuZHJpdmVycy92ZmlvL3BjaS92aXJ0aW8vbWlncmF0ZS5jLTExNS1cXHRmb3JfZWFjaF9zZ3RhYmxlX3BhZ2UoXFx1MDAyNmJ1Zi1cXHUwMDNldGFibGUuc2d0LCBcXHUwMDI2c2dfaXRlciwgMClcXG4tLVxcbmZzL2J0cmZzL2V4dGVudF9pby5jPTY4ND1pbnQgYnRyZnNfYWxsb2NfcGFnZV9hcnJheSh1bnNpZ25lZCBpbnQgbnJfcGFnZXMsIHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheSwgZ2ZwX3QgZ2ZwKVxcbi0tXFxuZnMvYnRyZnMvZXh0ZW50X2lvLmMtNjkwLVxcbmZzL2J0cmZzL2V4dGVudF9pby5jOjY5MTpcXHRcXHRhbGxvY2F0ZWQgPSBhbGxvY19wYWdlc19idWxrKGdmcCwgbnJfcGFnZXMsIHBhZ2VfYXJyYXkpO1xcbmZzL2J0cmZzL2V4dGVudF9pby5jLTY5Mi1cXHRcXHRpZiAodW5saWtlbHkoYWxsb2NhdGVkID09IGxhc3QpKSB7XFxuLS1cXG5mcy9lcm9mcy96dXRpbC5jPTY1PWludCB6X2Vyb2ZzX2didWZfZ3Jvd3NpemUodW5zaWduZWQgaW50IG5ycGFnZXMpXFxuLS1cXG5mcy9lcm9mcy96dXRpbC5jLTg5LVxcdFxcdFxcdGxhc3QgPSBqO1xcbmZzL2Vyb2ZzL3p1dGlsLmM6OTA6XFx0XFx0XFx0aiA9IGFsbG9jX3BhZ2VzX2J1bGsoR0ZQX0tFUk5FTCwgbnJwYWdlcywgdG1wX3BhZ2VzKTtcXG5mcy9lcm9mcy96dXRpbC5jLTkxLVxcdFxcdFxcdGlmIChsYXN0ID09IGopXFxuLS1cXG5mcy9mdXNlL3JlYWRkaXIuYz0zMzY9c3RhdGljIHN0cnVjdCBwYWdlICoqZnVzZV9yZWFkZGlyX2FsbG9jX2J1ZihzdHJ1Y3QgZnVzZV9hcmdzX3BhZ2VzICphcCwgc2l6ZV90ICpidWZzaXplKVxcbi0tXFxuZnMvZnVzZS9yZWFkZGlyLmMtMzQzLVxcbmZzL2Z1c2UvcmVhZGRpci5jOjM0NDpcXHRucl9hbGxvYyA9IGFsbG9jX3BhZ2VzX2J1bGsoR0ZQX0tFUk5FTCwgbnJfcGFnZXMsIHBhZ2VzKTtcXG5mcy9mdXNlL3JlYWRkaXIuYy0zNDUtXFx0aWYgKCFucl9hbGxvYylcXG4tLVxcbmZzL25mc2QvbmZzNHN0YXRlLmM9MTMyNj1hbGxvY19pbml0X2Rpcl9kZWxlZyhzdHJ1Y3QgbmZzNF9jbGllbnQgKmNscCwgc3RydWN0IG5mczRfZmlsZSAqZnApXFxuLS1cXG5mcy9uZnNkL25mczRzdGF0ZS5jLTEzMzctXFxuZnMvbmZzZC9uZnM0c3RhdGUuYzoxMzM4OlxcdG5wYWdlcyA9IGFsbG9jX3BhZ2VzX2J1bGsoR0ZQX0tFUk5FTCwgTk9USUZZNF9QQUdFX0FSUkFZX1NJWkUsIG5jbi1cXHUwMDNlbmNuX3BhZ2VzKTtcXG5mcy9uZnNkL25mczRzdGF0ZS5jLTEzMzktXFx0aWYgKG5wYWdlcyAhPSBOT1RJRlk0X1BBR0VfQVJSQVlfU0laRSkge1xcbi0tXFxuZnMvc3BsaWNlLmM9MzE4PXNzaXplX3QgY29weV9zcGxpY2VfcmVhZChzdHJ1Y3QgZmlsZSAqaW4sIGxvZmZfdCAqcHBvcyxcXG4tLVxcbmZzL3NwbGljZS5jLTM0MS1cXHRwYWdlcyA9IChzdHJ1Y3QgcGFnZSAqKikoYnYgKyBucGFnZXMpO1xcbmZzL3NwbGljZS5jOjM0MjpcXHRucGFnZXMgPSBhbGxvY19wYWdlc19idWxrKEdGUF9VU0VSLCBucGFnZXMsIHBhZ2VzKTtcXG5mcy9zcGxpY2UuYy0zNDMtXFx0aWYgKCFucGFnZXMpIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvZ2ZwLmg9MjA3PXN0cnVjdCBmb2xpbyAqX19mb2xpb19hbGxvY19ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsIGludCBwcmVmZXJyZWRfbmlkLFxcbi0tXFxuaW5jbHVkZS9saW51eC9nZnAuaC0yMTAtXFxuaW5jbHVkZS9saW51eC9nZnAuaDoyMTE6dW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnBfdCBnZnAsIGludCBwcmVmZXJyZWRfbmlkLFxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjEyLVxcdFxcdFxcdFxcdG5vZGVtYXNrX3QgKm5vZGVtYXNrLCBpbnQgbnJfcGFnZXMsXFxuaW5jbHVkZS9saW51eC9nZnAuaC0yMTMtXFx0XFx0XFx0XFx0c3RydWN0IHBhZ2UgKipwYWdlX2FycmF5KTtcXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjIxNDojZGVmaW5lIF9fYWxsb2NfcGFnZXNfYnVsayguLi4pXFx0XFx0XFx0YWxsb2NfaG9va3MoYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoX19WQV9BUkdTX18pKVxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjE1LVxcbmluY2x1ZGUvbGludXgvZ2ZwLmg9MjE2PXZvaWQgZnJlZV9wYWdlc19idWxrKHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheSwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyk7XFxuaW5jbHVkZS9saW51eC9nZnAuaC0yMTctXFxuaW5jbHVkZS9saW51eC9nZnAuaDoyMTg6dW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2YoZ2ZwX3QgZ2ZwLFxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjE5LVxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXFxuaW5jbHVkZS9saW51eC9nZnAuaC0yMjAtXFx0XFx0XFx0XFx0c3RydWN0IHBhZ2UgKipwYWdlX2FycmF5KTtcXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjIyMTojZGVmaW5lICBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeSguLi4pXFx0XFx0XFx0XFx0XFxcXFxcbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjIyOlxcdGFsbG9jX2hvb2tzKGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZihfX1ZBX0FSR1NfXykpXFxuaW5jbHVkZS9saW51eC9nZnAuaC0yMjMtXFxuaW5jbHVkZS9saW51eC9nZnAuaC0yMjQtLyogQnVsayBhbGxvY2F0ZSBvcmRlci0wIHBhZ2VzICovXFxuaW5jbHVkZS9saW51eC9nZnAuaDoyMjU6I2RlZmluZSBhbGxvY19wYWdlc19idWxrKF9nZnAsIF9ucl9wYWdlcywgX3BhZ2VfYXJyYXkpXFx0XFx0XFxcXFxcbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjI2OlxcdF9fYWxsb2NfcGFnZXNfYnVsayhfZ2ZwLCBudW1hX21lbV9pZCgpLCBOVUxMLCBfbnJfcGFnZXMsIF9wYWdlX2FycmF5KVxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjI3LVxcbmluY2x1ZGUvbGludXgvZ2ZwLmg9MjI4PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZ1xcbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjI5OmFsbG9jX3BhZ2VzX2J1bGtfbm9kZV9ub3Byb2YoZ2ZwX3QgZ2ZwLCBpbnQgbmlkLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjMwLVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheSlcXG4tLVxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjM0LVxcbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjM1OlxcdHJldHVybiBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnAsIG5pZCwgTlVMTCwgbnJfcGFnZXMsIHBhZ2VfYXJyYXkpO1xcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjM2LX1cXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIzNy1cXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjIzODojZGVmaW5lIGFsbG9jX3BhZ2VzX2J1bGtfbm9kZSguLi4pXFx0XFx0XFx0XFx0XFxcXFxcbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjM5OlxcdGFsbG9jX2hvb2tzKGFsbG9jX3BhZ2VzX2J1bGtfbm9kZV9ub3Byb2YoX19WQV9BUkdTX18pKVxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjQwLVxcbi0tXFxuaW9fdXJpbmcvbWVtbWFwLmM9MTc0PXN0YXRpYyBpbnQgaW9fcmVnaW9uX2FsbG9jYXRlX3BhZ2VzKHN0cnVjdCBpb19tYXBwZWRfcmVnaW9uICptcixcXG4tLVxcbmlvX3VyaW5nL21lbW1hcC5jLTE5Mi1cXG5pb191cmluZy9tZW1tYXAuYzoxOTM6XFx0bnJfYWxsb2NhdGVkID0gYWxsb2NfcGFnZXNfYnVsa19ub2RlKGdmcCwgTlVNQV9OT19OT0RFLFxcbmlvX3VyaW5nL21lbW1hcC5jLTE5NC1cXHRcXHRcXHRcXHRcXHQgICAgIG1yLVxcdTAwM2Vucl9wYWdlcywgcGFnZXMpO1xcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jPTY2OD1zdGF0aWMgbG9uZyBhcmVuYV9hbGxvY19wYWdlcyhzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSwgbG9uZyB1YWRkciwgbG9uZyBwYWdlX2NudCwgaW50IG5vZGVfaWQsXFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtNzMyLVxcbmtlcm5lbC9icGYvYXJlbmEuYzo3MzM6XFx0XFx0LyogemVyb2luZyBpcyBuZWVkZWQsIHNpbmNlIGFsbG9jX3BhZ2VzX2J1bGsoKSBvbmx5IGZpbGxzIGluIG5vbi16ZXJvIGVudHJpZXMgKi9cXG5rZXJuZWwvYnBmL2FyZW5hLmMtNzM0LVxcdFxcdG1lbXNldChwYWdlcywgMCwgdGhpc19iYXRjaCAqIHNpemVvZihzdHJ1Y3QgcGFnZSAqKSk7XFxuLS1cXG5saWIvdGVzdF92bWFsbG9jLmM9MzkxPXZtX21hcF9yYW1fdGVzdCh2b2lkKVxcbi0tXFxubGliL3Rlc3Rfdm1hbGxvYy5jLTQwMy1cXG5saWIvdGVzdF92bWFsbG9jLmM6NDA0OlxcdG5yX2FsbG9jYXRlZCA9IGFsbG9jX3BhZ2VzX2J1bGsoR0ZQX0tFUk5FTCwgbWFwX25yX3BhZ2VzLCBwYWdlcyk7XFxubGliL3Rlc3Rfdm1hbGxvYy5jLTQwNS1cXHRpZiAobnJfYWxsb2NhdGVkICE9IG1hcF9ucl9wYWdlcylcXG4tLVxcbmxpYi90ZXN0cy9rdW5pdF9pb3ZfaXRlci5jPTUxPXN0YXRpYyB2b2lkICpfX2luaXQgaW92X2t1bml0X2NyZWF0ZV9idWZmZXIoc3RydWN0IGt1bml0ICp0ZXN0LFxcbi0tXFxubGliL3Rlc3RzL2t1bml0X2lvdl9pdGVyLmMtNjYtXFx0XFx0bGFzdCA9IGdvdDtcXG5saWIvdGVzdHMva3VuaXRfaW92X2l0ZXIuYzo2NzpcXHRcXHRnb3QgPSBhbGxvY19wYWdlc19idWxrKEdGUF9LRVJORUwsIG5wYWdlcywgcGFnZXMpO1xcbmxpYi90ZXN0cy9rdW5pdF9pb3ZfaXRlci5jLTY4LVxcbi0tXFxubW0vYWxsb2NfdGFnLmM9Nzc3PXN0YXRpYyBpbnQgdm1fbW9kdWxlX3RhZ3NfcG9wdWxhdGUodm9pZClcXG4tLVxcbm1tL2FsbG9jX3RhZy5jLTc5My1cXG5tbS9hbGxvY190YWcuYzo3OTQ6XFx0XFx0XFx0YWxsb2NhdGVkID0gYWxsb2NfcGFnZXNfYnVsa19ub2RlKEdGUF9LRVJORUwgfCBfX0dGUF9OT1dBUk4sXFxubW0vYWxsb2NfdGFnLmMtNzk1LVxcdFxcdFxcdFxcdE5VTUFfTk9fTk9ERSwgbW9yZV9wYWdlcyAtIG5yLCBuZXh0X3BhZ2UgKyBucik7XFxuLS1cXG5tbS9rYXNhbi9zaGFkb3cuYz0zMjc9c3RhdGljIHZvaWQgX19fZnJlZV9wYWdlc19idWxrKHN0cnVjdCBwYWdlICoqcGFnZXMsIGludCBucl9wYWdlcylcXG4tLVxcbm1tL2thc2FuL3NoYWRvdy5jLTMzOC1cXG5tbS9rYXNhbi9zaGFkb3cuYzozMzk6c3RhdGljIGludCBfX19hbGxvY19wYWdlc19idWxrKHN0cnVjdCBwYWdlICoqcGFnZXMsIGludCBucl9wYWdlcywgZ2ZwX3QgZ2ZwX21hc2spXFxubW0va2FzYW4vc2hhZG93LmMtMzQwLXtcXG4tLVxcbm1tL2thc2FuL3NoYWRvdy5jLTM0NC1cXHR3aGlsZSAobnJfcGFnZXMpIHtcXG5tbS9rYXNhbi9zaGFkb3cuYzozNDU6XFx0XFx0bnJfcG9wdWxhdGVkID0gYWxsb2NfcGFnZXNfYnVsayhnZnBfbWFzaywgbnJfcGFnZXMsIHBhZ2VzKTtcXG5tbS9rYXNhbi9zaGFkb3cuYy0zNDYtXFx0XFx0aWYgKCFucl9wb3B1bGF0ZWQpIHtcXG4tLVxcbm1tL2thc2FuL3NoYWRvdy5jPTM1Nz1zdGF0aWMgaW50IF9fa2FzYW5fcG9wdWxhdGVfdm1hbGxvY19kbyh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwgZ2ZwX3QgZ2ZwX21hc2spXFxuLS1cXG5tbS9rYXNhbi9zaGFkb3cuYy0zNjktXFx0XFx0bnJfcGFnZXMgPSBtaW4obnJfdG90YWwsIFBBR0VfU0laRSAvIHNpemVvZihkYXRhLnBhZ2VzWzBdKSk7XFxubW0va2FzYW4vc2hhZG93LmM6MzcwOlxcdFxcdHJldCA9IF9fX2FsbG9jX3BhZ2VzX2J1bGsoZGF0YS5wYWdlcywgbnJfcGFnZXMsIGdmcF9tYXNrKTtcXG5tbS9rYXNhbi9zaGFkb3cuYy0zNzEtXFx0XFx0aWYgKHJldClcXG4tLVxcbm1tL21lbXBvbGljeS5jPTI1ODk9RVhQT1JUX1NZTUJPTChmb2xpb19hbGxvY19ub3Byb2YpO1xcbm1tL21lbXBvbGljeS5jLTI1OTAtXFxubW0vbWVtcG9saWN5LmM6MjU5MTpzdGF0aWMgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX2ludGVybGVhdmUoZ2ZwX3QgZ2ZwLFxcbm1tL21lbXBvbGljeS5jLTI1OTItXFx0XFx0c3RydWN0IG1lbXBvbGljeSAqcG9sLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbi0tXFxubW0vbWVtcG9saWN5LmMtMjYwNy1cXHRcXHRpZiAoZGVsdGEpIHtcXG5tbS9tZW1wb2xpY3kuYzoyNjA4OlxcdFxcdFxcdG5yX2FsbG9jYXRlZCA9IGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKGdmcCxcXG5tbS9tZW1wb2xpY3kuYy0yNjA5LVxcdFxcdFxcdFxcdFxcdGludGVybGVhdmVfbm9kZXMocG9sKSwgTlVMTCxcXG4tLVxcbm1tL21lbXBvbGljeS5jLTI2MTMtXFx0XFx0fSBlbHNlIHtcXG5tbS9tZW1wb2xpY3kuYzoyNjE0OlxcdFxcdFxcdG5yX2FsbG9jYXRlZCA9IGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKGdmcCxcXG5tbS9tZW1wb2xpY3kuYy0yNjE1LVxcdFxcdFxcdFxcdFxcdGludGVybGVhdmVfbm9kZXMocG9sKSwgTlVMTCxcXG4tLVxcbm1tL21lbXBvbGljeS5jLTI2MjUtXFxubW0vbWVtcG9saWN5LmM6MjYyNjpzdGF0aWMgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmUoZ2ZwX3QgZ2ZwLFxcbm1tL21lbXBvbGljeS5jLTI2MjctXFx0XFx0c3RydWN0IG1lbXBvbGljeSAqcG9sLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbi0tXFxubW0vbWVtcG9saWN5LmMtMjY2NC1cXHRcXHRub2RlX3BhZ2VzID0gbWluKHJlbV9wYWdlcywgd2VpZ2h0KTtcXG5tbS9tZW1wb2xpY3kuYzoyNjY1OlxcdFxcdG5yX2FsbG9jYXRlZCA9IF9fYWxsb2NfcGFnZXNfYnVsayhnZnAsIG5vZGUsIE5VTEwsIG5vZGVfcGFnZXMsXFxubW0vbWVtcG9saWN5LmMtMjY2Ni1cXHRcXHRcXHRcXHRcXHRcXHQgIHBhZ2VfYXJyYXkpO1xcbi0tXFxubW0vbWVtcG9saWN5LmMtMjcwMS1cXHQvKlxcbm1tL21lbXBvbGljeS5jOjI3MDI6XFx0ICogQ2FsY3VsYXRlIHJvdW5kcy9wYXJ0aWFsIHJvdW5kcyB0byBtaW5pbWl6ZSBfX2FsbG9jX3BhZ2VzX2J1bGsgY2FsbHMuXFxubW0vbWVtcG9saWN5LmMtMjcwMy1cXHQgKiBUcmFjayB3aGljaCBub2RlIHdlaWdodGVkIGludGVybGVhdmUgc2hvdWxkIHJlc3VtZSBmcm9tLlxcbi0tXFxubW0vbWVtcG9saWN5LmMtMjcyOS1cXHRcXHRcXHRicmVhaztcXG5tbS9tZW1wb2xpY3kuYzoyNzMwOlxcdFxcdG5yX2FsbG9jYXRlZCA9IF9fYWxsb2NfcGFnZXNfYnVsayhnZnAsIG5vZGUsIE5VTEwsIG5vZGVfcGFnZXMsXFxubW0vbWVtcG9saWN5LmMtMjczMS1cXHRcXHRcXHRcXHRcXHRcXHQgIHBhZ2VfYXJyYXkpO1xcbi0tXFxubW0vbWVtcG9saWN5LmMtMjc0My1cXG5tbS9tZW1wb2xpY3kuYzoyNzQ0OnN0YXRpYyB1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfcHJlZmVycmVkX21hbnkoZ2ZwX3QgZ2ZwLCBpbnQgbmlkLFxcbm1tL21lbXBvbGljeS5jLTI3NDUtXFx0XFx0c3RydWN0IG1lbXBvbGljeSAqcG9sLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbi0tXFxubW0vbWVtcG9saWN5LmMtMjc1My1cXG5tbS9tZW1wb2xpY3kuYzoyNzU0OlxcdG5yX2FsbG9jYXRlZCAgPSBhbGxvY19wYWdlc19idWxrX25vcHJvZihwcmVmZXJyZWRfZ2ZwLCBuaWQsIFxcdTAwMjZwb2wtXFx1MDAzZW5vZGVzLFxcbm1tL21lbXBvbGljeS5jLTI3NTUtXFx0XFx0XFx0XFx0XFx0ICAgbnJfcGFnZXMsIHBhZ2VfYXJyYXkpO1xcbi0tXFxubW0vbWVtcG9saWN5LmMtMjc1Ny1cXHRpZiAobnJfYWxsb2NhdGVkIFxcdTAwM2MgbnJfcGFnZXMpXFxubW0vbWVtcG9saWN5LmM6Mjc1ODpcXHRcXHRucl9hbGxvY2F0ZWQgKz0gYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoZ2ZwLCBudW1hX25vZGVfaWQoKSwgTlVMTCxcXG5tbS9tZW1wb2xpY3kuYy0yNzU5LVxcdFxcdFxcdFxcdG5yX3BhZ2VzIC0gbnJfYWxsb2NhdGVkLFxcbi0tXFxubW0vbWVtcG9saWN5LmMtMjc2OS0gKi9cXG5tbS9tZW1wb2xpY3kuYzoyNzcwOnVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mKGdmcF90IGdmcCxcXG5tbS9tZW1wb2xpY3kuYy0yNzcxLVxcdFxcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsIHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheSlcXG4tLVxcbm1tL21lbXBvbGljeS5jLTI3ODAtXFx0aWYgKHBvbC1cXHUwMDNlbW9kZSA9PSBNUE9MX0lOVEVSTEVBVkUpXFxubW0vbWVtcG9saWN5LmM6Mjc4MTpcXHRcXHRyZXR1cm4gYWxsb2NfcGFnZXNfYnVsa19pbnRlcmxlYXZlKGdmcCwgcG9sLFxcbm1tL21lbXBvbGljeS5jLTI3ODItXFx0XFx0XFx0XFx0XFx0XFx0XFx0IG5yX3BhZ2VzLCBwYWdlX2FycmF5KTtcXG4tLVxcbm1tL21lbXBvbGljeS5jLTI3ODQtXFx0aWYgKHBvbC1cXHUwMDNlbW9kZSA9PSBNUE9MX1dFSUdIVEVEX0lOVEVSTEVBVkUpXFxubW0vbWVtcG9saWN5LmM6Mjc4NTpcXHRcXHRyZXR1cm4gYWxsb2NfcGFnZXNfYnVsa193ZWlnaHRlZF9pbnRlcmxlYXZlKFxcbm1tL21lbXBvbGljeS5jLTI3ODYtXFx0XFx0XFx0XFx0ICBnZnAsIHBvbCwgbnJfcGFnZXMsIHBhZ2VfYXJyYXkpO1xcbi0tXFxubW0vbWVtcG9saWN5LmMtMjc4OC1cXHRpZiAocG9sLVxcdTAwM2Vtb2RlID09IE1QT0xfUFJFRkVSUkVEX01BTlkpXFxubW0vbWVtcG9saWN5LmM6Mjc4OTpcXHRcXHRyZXR1cm4gYWxsb2NfcGFnZXNfYnVsa19wcmVmZXJyZWRfbWFueShnZnAsXFxubW0vbWVtcG9saWN5LmMtMjc5MC1cXHRcXHRcXHRcXHRudW1hX25vZGVfaWQoKSwgcG9sLCBucl9wYWdlcywgcGFnZV9hcnJheSk7XFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0yNzkzLVxcdG5vZGVtYXNrID0gcG9saWN5X25vZGVtYXNrKGdmcCwgcG9sLCBOT19JTlRFUkxFQVZFX0lOREVYLCBcXHUwMDI2bmlkKTtcXG5tbS9tZW1wb2xpY3kuYzoyNzk0OlxcdHJldHVybiBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnAsIG5pZCwgbm9kZW1hc2ssXFxubW0vbWVtcG9saWN5LmMtMjc5NS1cXHRcXHRcXHRcXHQgICAgICAgbnJfcGFnZXMsIHBhZ2VfYXJyYXkpO1xcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTUwOTE9c3RhdGljIGlubGluZSBib29sIHByZXBhcmVfYWxsb2NfcGFnZXMoZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcixcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy01MTM5LS8qXFxubW0vcGFnZV9hbGxvYy5jOjUxNDA6ICogX19hbGxvY19wYWdlc19idWxrIC0gQWxsb2NhdGUgYSBudW1iZXIgb2Ygb3JkZXItMCBwYWdlcyB0byBhbiBhcnJheVxcbm1tL3BhZ2VfYWxsb2MuYy01MTQxLSAqIEBnZnA6IEdGUCBmbGFncyBmb3IgdGhlIGFsbG9jYXRpb25cXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy01MTU5LSAqL1xcbm1tL3BhZ2VfYWxsb2MuYzo1MTYwOnVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoZ2ZwX3QgZ2ZwLCBpbnQgcHJlZmVycmVkX25pZCxcXG5tbS9wYWdlX2FsbG9jLmMtNTE2MS1cXHRcXHRcXHRub2RlbWFza190ICpub2RlbWFzaywgaW50IG5yX3BhZ2VzLFxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTUzMDEtfVxcbm1tL3BhZ2VfYWxsb2MuYzo1MzAyOkVYUE9SVF9TWU1CT0xfR1BMKGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKTtcXG5tbS9wYWdlX2FsbG9jLmMtNTMwMy1cXG4tLVxcbm1tL3NsdWIuYz03NDI2PXN0YXRpYyBib29sIF9fa21lbV9jYWNoZV9hbGxvY19idWxrKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBmbGFncyxcXG4tLVxcbm1tL3NsdWIuYy03NDcwLSAqXFxubW0vc2x1Yi5jOjc0NzE6ICogVW5saWtlIGFsbG9jX3BhZ2VzX2J1bGsoKSwgdGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBjaGVjayBmb3IgYWxyZWFkeSBhbGxvY2F0ZWRcXG5tbS9zbHViLmMtNzQ3Mi0gKiBvYmplY3RzIGluIEBwLCBhbmQgdGh1cyB0aGUgY2FsbGVyIGRvZXMgbm90IG5lZWQgdG8gemVybyBpdC5cXG4tLVxcbm1tL3ZtYWxsb2MuYz0zNjc2PXZtX2FyZWFfYWxsb2NfcGFnZXMoZ2ZwX3QgZ2ZwLCBpbnQgbmlkLFxcbi0tXFxubW0vdm1hbGxvYy5jLTM3NDMtXFx0XFx0XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX05VTUEpIFxcdTAwMjZcXHUwMDI2IG5pZCA9PSBOVU1BX05PX05PREUpXFxubW0vdm1hbGxvYy5jOjM3NDQ6XFx0XFx0XFx0XFx0bnIgPSBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2YoZ2ZwLFxcbm1tL3ZtYWxsb2MuYy0zNzQ1LVxcdFxcdFxcdFxcdFxcdFxcdFxcdG5yX3BhZ2VzX3JlcXVlc3QsXFxuLS1cXG5tbS92bWFsbG9jLmMtMzc0Ny1cXHRcXHRcXHRlbHNlXFxubW0vdm1hbGxvYy5jOjM3NDg6XFx0XFx0XFx0XFx0bnIgPSBhbGxvY19wYWdlc19idWxrX25vZGVfbm9wcm9mKGdmcCwgbmlkLFxcbm1tL3ZtYWxsb2MuYy0zNzQ5LVxcdFxcdFxcdFxcdFxcdFxcdFxcdG5yX3BhZ2VzX3JlcXVlc3QsXFxuLS1cXG5uZXQvY29yZS9wYWdlX3Bvb2wuYz02MTE9c3RhdGljIG5vaW5saW5lIG5ldG1lbV9yZWYgX19wYWdlX3Bvb2xfYWxsb2NfbmV0bWVtc19zbG93KHN0cnVjdCBwYWdlX3Bvb2wgKnBvb2wsXFxuLS1cXG5uZXQvY29yZS9wYWdlX3Bvb2wuYy02MzMtXFxubmV0L2NvcmUvcGFnZV9wb29sLmM6NjM0OlxcdC8qIE1hcmsgZW1wdHkgYWxsb2MuY2FjaGUgc2xvdHMgXFxcImVtcHR5XFxcIiBmb3IgYWxsb2NfcGFnZXNfYnVsayAqL1xcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTYzNS1cXHRtZW1zZXQoXFx1MDAyNnBvb2wtXFx1MDAzZWFsbG9jLmNhY2hlLCAwLCBzaXplb2Yodm9pZCAqKSAqIGJ1bGspO1xcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTYzNi1cXG5uZXQvY29yZS9wYWdlX3Bvb2wuYzo2Mzc6XFx0bnJfcGFnZXMgPSBhbGxvY19wYWdlc19idWxrX25vZGUoZ2ZwLCBwb29sLVxcdTAwM2VwLm5pZCwgYnVsayxcXG5uZXQvY29yZS9wYWdlX3Bvb2wuYy02MzgtXFx0XFx0XFx0XFx0XFx0IChzdHJ1Y3QgcGFnZSAqKilwb29sLVxcdTAwM2VhbGxvYy5jYWNoZSk7XFxuLS1cXG5uZXQvc3VucnBjL3N2Y194cHJ0LmM9Njg3PXN0YXRpYyBib29sIHN2Y19maWxsX3BhZ2VzKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsIHN0cnVjdCBwYWdlICoqcGFnZXMsXFxuLS1cXG5uZXQvc3VucnBjL3N2Y194cHJ0LmMtNjkyLVxcdGZvciAoZmlsbGVkID0gMDsgZmlsbGVkIFxcdTAwM2MgbnBhZ2VzOyBmaWxsZWQgPSByZXQpIHtcXG5uZXQvc3VucnBjL3N2Y194cHJ0LmM6NjkzOlxcdFxcdHJldCA9IGFsbG9jX3BhZ2VzX2J1bGsoR0ZQX0tFUk5FTCwgbnBhZ2VzLCBwYWdlcyk7XFxubmV0L3N1bnJwYy9zdmNfeHBydC5jLTY5NC1cXHRcXHRpZiAocmV0IFxcdTAwM2UgZmlsbGVkKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxMjowOTozNi4zMDQxODkyMjlaIiwiU2VxIjozNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTE5MDA5NjM5NzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gRGV0ZXJtaW5hdGlvbjogTmVlZHNLTVNBTiA9IGZhbHNlKipcblxuT2theSwgaGVyZSdzIHRoZSBicmVha2Rvd24gb2YgbXkgdGhvdWdodCBwcm9jZXNzLiBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgaW50cm9kdWNlcyBga21zYW5fYWxsb2NfcGFnZWAgYW5kIGB0cmFjZV9tbV9wYWdlX2FsbG9jYCBpbnRvIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZGlnIGluIGFuZCB1bmRlcnN0YW5kICp3aHkqIHRoaXMgY2hhbmdlIGlzIGhhcHBlbmluZy4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGlzIHBhdGNoIGl0c2VsZiBpbnRyb2R1Y2VzIGFueSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIG9yIGlmIGl0IHNpbXBseSAqZW5hYmxlcyogS01TQU4gdG8gZGV0ZWN0IGV4aXN0aW5nIHJpc2tzIGJldHRlci4gTXkgZXhwZXJ0aXNlIGxpZXMgaW4gdGhlc2UgbWVtb3J5IGVycm9yIGRldGVjdG9ycywgc28gSSBuZWVkIHRvIG1ha2UgdGhlIHJpZ2h0IGNhbGwuXG5cbkZpcnN0LCBJIGxvb2tlZCBhdCB3aGVyZSBgYWxsb2NfcGFnZXNfYnVsa2AgaXMgdXNlZC4gSSBzZWUgaXQncyB1c2VkICpldmVyeXdoZXJlKiwgaW5jbHVkaW5nIGNydWNpYWwgYXJlYXMgbGlrZSBgdm1hbGxvY2AsIGBwYWdlX3Bvb2xgLCBhbmQgc3BsaWNpbmcuIFRoZSBwcm9tcHQgaGlnaGxpZ2h0cyBhIGNyaXRpY2FsIGRpc3RpbmN0aW9uOiBzdGFuZGFyZCBLQVNBTiBjb3ZlcnMgbWFueSBidWdzLCBhbmQgS01TQU4gaXMgZm9yIGNhdGNoaW5nICpzcGVjaWZpY2FsbHkqIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIGFuZCBsZWFrcy4gSWYgS0FTQU4gY2FuIGNhdGNoIHRoZSBidWcsIHdlIGRvbid0IG5lZWQgdGhlIGhlYXZ5IEtNU0FOIHNlc3Npb24uXG5cblRoZSBwYXRjaCdzIGdvYWwgaXMgYWRkaW5nIEtNU0FOIHRvIHBhZ2VzIGFsbG9jYXRlZCBmcm9tIHRoZSBwZXItY3B1IHBhZ2UgbGlzdHMuIFNvLCBJIHNlZSB0aGF0IHRoZSBwYXRjaCBzZWVtcyB0byBiZSBhbiAqaW50ZXJuYWwgS01TQU4gaW5zdHJ1bWVudGF0aW9uIGZpeCouIEkgc2VlIHRoaXMgcGF0Y2ggd2Fzbid0IHRoZXJlIHByZXZpb3VzbHksIHdoaWNoIG1lYW5zIGJ1bGstYWxsb2NhdGVkIHBhZ2VzIG1pZ2h0IG5vdCBoYXZlIGJlZW4gdHJhY2tlZCBieSBLTVNBTi4gSWYgdGhleSB3ZXJlbid0LCB0aGVuIGFueSBjb2RlIHRoYXQgKnVzZXMqIHRob3NlIHBhZ2VzIChsaWtlIGB2bWFsbG9jYCBvciB0aGUgb3RoZXJzIEkgbWVudGlvbmVkKSBtaWdodCBoYXZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIHRoYXQgS01TQU4gd2lsbCBub3cgY2F0Y2guIE5vdywgbXkgbWluZCByYWNlczogRG9lcyB0aGUgcGF0Y2ggKmludHJvZHVjZSogdGhlIGJ1Zywgb3IgaXMgaXQgKmZpeGluZyogS01TQU4/XG5cbkkgY2FyZWZ1bGx5IHJlLXJlYWQgdGhlIHByb21wdCdzIGNyaXRlcmlhIGZvciBgTmVlZHNLTVNBTj10cnVlYC4gSXQncyBhIHN0cnVjdHVyZWQgYXBwcm9hY2gsIHNvIEkgZm9sbG93IHRoZSBydWxlcy4gSXQgc2F5cyB0aGF0IHRoZSBmbGFnIHNob3VsZCBiZSBzZXQgdG8gdHJ1ZSBpZiB0aGUgcGF0Y2ggaW50cm9kdWNlczpcblxuMS4gIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlcnNwYWNlLlxuMi4gIENvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLlxuMy4gIENvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgYWxsb2NhdGlvbiB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkLlxuNC4gIEJvdW5kcyBjaGVja3Mgb3IgbG9naWMgdGhhdCBhbGxvd3MgYWNjZXNzIHRvIHVuaW5pdGlhbGl6ZWQgYnl0ZXMuXG5cbkkgZ28gdGhyb3VnaCBlYWNoIHBvaW50IG1ldGljdWxvdXNseS4gRG9lcyB0aGUgcGF0Y2ggZG8gYW55IG9mIHRoZXNlIHRoaW5ncz8gTm8uIFRoZSBwYXRjaCAqYWRkcyogZnVuY3Rpb24gY2FsbHM6IGB0cmFjZV9tbV9wYWdlX2FsbG9jYCBhbmQgYGttc2FuX2FsbG9jX3BhZ2VgLiBUaGlzIGlzIGFkZGluZyB0cmFjaW5nIGFuZCBpbnN0cnVtZW50YXRpb24sIG5vdCBpbnRyb2R1Y2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSBidWdzLlxuXG5JIHRoZW4gY2hlY2sgdGhlIGNyaXRlcmlhIGZvciBgTmVlZHNLTVNBTj1mYWxzZWA6IGl0IG1lYW5zIHRoYXQgdGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlza3Mgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcywgYW5kIHRoYXQgaXQgZG9lc24ndCBoYXZlIGFueSBidWdzIGNhdWdodCBieSBzdGFuZGFyZCBkZXRlY3RvcnMuXG5cbk9rYXksIGxldCdzIGxvb2sgYXQgdGhlIHBhdGNoIGl0c2VsZi4gSXMgdGhlcmUgYSByYWNlIGNvbmRpdGlvbiBvciBhIHNwaW5sb2NrIGlzc3VlIHRoYXQgY2FuIGhhcHBlbiB3aGVuIGBrbXNhbl9hbGxvY19wYWdlYCBpcyBjYWxsZWQ/IFRoZSBmdW5jdGlvbiBpcyBiZWluZyBjYWxsZWQgKmluc2lkZSogYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCwgc28gaXMgdGhlcmUgYW55IHBvc3NpYmlsaXR5IG9mIGRlYWRsb2NrcyBvciBjcmFzaGVzPyBJIGxvb2sgY2xvc2VseSBhdCB0aGUgY29kZS4gSSBub3RlIHRoYXQgdGhlcmUgaXMgYSBzcGlubG9jayBoZWxkIGR1cmluZyB0aGlzIGNvZGUgcGF0aC4gQnV0LCBhZnRlciBsb29raW5nLCBga21zYW5fYWxsb2NfcGFnZWAgaXMgc2FmZSB1bmRlciB0aGUgc3BpbmxvY2sgYmVjYXVzZSBzdGFuZGFyZCBkZXRlY3RvcnMsIExPQ0tERVAsIGFuZCBLQVNBTiBzaG91bGQgYmUgYWJsZSB0byBjYXRjaCBhbnkgaXNzdWVzIHRoZXJlLlxuXG5UaGUgcGF0Y2ggaXRzZWxmICpkb2VzIG5vdCogaW50cm9kdWNlIGFueSBuZXcgc291cmNlcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBhbnkgbGVha3MuIFRoZSBnb2FsIG9mIHRoaXMgcGF0Y2ggaXMgdGhhdCBLTVNBTiBjYW4gZGV0ZWN0IHRoZXNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBJZiB0aGUgcGF0Y2ggYWRkcyB0d28gZnVuY3Rpb24gY2FsbHMsIGFuZCBpZiB0aGUgcGF0Y2ggZG9lc24ndCBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2VzIG9yIGxlYWtzLCB0aGVuIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cblxuVGhlcmVmb3JlLCBiZWNhdXNlIHRoaXMgcGF0Y2ggZml4ZXMgS01TQU4gaW5zdHJ1bWVudGF0aW9uIChieSBhZGRpbmcgY2FsbHMgdG8gYHRyYWNlX21tX3BhZ2VfYWxsb2NgIGFuZCBga21zYW5fYWxsb2NfcGFnZWAgaW50byBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgKSB3aXRob3V0IGludHJvZHVjaW5nIGFueSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0aWVzLCBJIGFtIGNvbmNsdWRpbmcgdGhhdCBOZWVkc0tNU0FOIG11c3QgYmUgc2V0IHRvIGBmYWxzZWAuIEtBU0FOL0xPQ0tERVAvZXRjLiB3aWxsIGNhdGNoIGFueSBpc3N1ZXMgd2l0aCBsb2NraW5nL09PQiwgYW5kIHRoaXMgaXMgZml4aW5nIEtNU0FOIGludGVybmFsbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2ODc1LCJPdXRwdXRUb2tlbnMiOjE1OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3MDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTI6MDk6NDguMjA1MTU2ODUyWiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY2MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIG1pc3NpbmcgYHRyYWNlX21tX3BhZ2VfYWxsb2NgIGFuZCBga21zYW5fYWxsb2NfcGFnZWAgY2FsbHMgdG8gYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKClgIGluIGBtbS9wYWdlX2FsbG9jLmNgIGZvciBwYWdlcyBhbGxvY2F0ZWQgZnJvbSBwZXItQ1BVIGxpc3RzLlxcblxcblRoaXMgbW9kaWZpY2F0aW9uIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGtlcm5lbCBpbmZvLWxlYWtzLCB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMsIG9yIGZhdWx0eSBidWZmZXIgYm91bmRzLiBBbnkgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIChzdWNoIGFzIGxvY2tpbmcgb3IgY29udGV4dCBpc3N1ZXMgd2hpbGUgaG9sZGluZyB0aGUgUENQIHNwaW5sb2NrIG9yIGludmFsaWQgcGFnZSBwb2ludGVycykgYXJlIGRldGVjdGFibGUgYnkgTE9DS0RFUCwgS0FTQU4sIGFuZCBzdGFuZGFyZCBkZWJ1Z2dpbmcgZmFjaWxpdGllcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIG1pc3NpbmcgYHRyYWNlX21tX3BhZ2VfYWxsb2NgIGFuZCBga21zYW5fYWxsb2NfcGFnZWAgY2FsbHMgdG8gYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKClgIGluIGBtbS9wYWdlX2FsbG9jLmNgIGZvciBwYWdlcyBhbGxvY2F0ZWQgZnJvbSBwZXItQ1BVIGxpc3RzLlxcblxcblRoaXMgbW9kaWZpY2F0aW9uIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGtlcm5lbCBpbmZvLWxlYWtzLCB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMsIG9yIGZhdWx0eSBidWZmZXIgYm91bmRzLiBBbnkgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIChzdWNoIGFzIGxvY2tpbmcgb3IgY29udGV4dCBpc3N1ZXMgd2hpbGUgaG9sZGluZyB0aGUgUENQIHNwaW5sb2NrIG9yIGludmFsaWQgcGFnZSBwb2ludGVycykgYXJlIGRldGVjdGFibGUgYnkgTE9DS0RFUCwgS0FTQU4sIGFuZCBzdGFuZGFyZCBkZWJ1Z2dpbmcgZmFjaWxpdGllcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow45vwq[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-08 11:49:33 +0000 UTC FinishedAt: 2026-09-08 12:09:49 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "7406dbbcf0b5513612d7291f5b92f31c92134bde", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KMSAN" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "7406dbbcf0b5513612d7291f5b92f31c92134bde", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KMSAN" ], "series_id": "095225b1-6573-49ad-bfd9-b9a7dffeaa92" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "alloc_pages_bulk_noprof", "alloc_pages_bulk_mempolicy_noprof" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDEyOjA4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tNU0FOJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YWxsb2NfcGFnZXNfYnVsa19ub3Byb2YmIzM0OywKICAgICYjMzQ7YWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBtaXNzaW5nIGB0cmFjZV9tbV9wYWdlX2FsbG9jYCBhbmQgYGttc2FuX2FsbG9jX3BhZ2VgIGNhbGxzIHRvIGBhbGxvY19wYWdlc19idWxrX25vcHJvZigpYCBpbiBgbW0vcGFnZV9hbGxvYy5jYCBmb3IgcGFnZXMgYWxsb2NhdGVkIGZyb20gcGVyLUNQVSBsaXN0cy5cblxuVGhpcyBtb2RpZmljYXRpb24gZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcywga2VybmVsIGluZm8tbGVha3MsIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcywgb3IgZmF1bHR5IGJ1ZmZlciBib3VuZHMuIEFueSBwb3RlbnRpYWwgcmVncmVzc2lvbnMgKHN1Y2ggYXMgbG9ja2luZyBvciBjb250ZXh0IGlzc3VlcyB3aGlsZSBob2xkaW5nIHRoZSBQQ1Agc3BpbmxvY2sgb3IgaW52YWxpZCBwYWdlIHBvaW50ZXJzKSBhcmUgZGV0ZWN0YWJsZSBieSBMT0NLREVQLCBLQVNBTiwgYW5kIHN0YW5kYXJkIGRlYnVnZ2luZyBmYWNpbGl0aWVzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBtbS9wYWdlX2FsbG9jLmMgYnkgYWRkaW5nIHRyYWNlX21tX3BhZ2VfYWxsb2MgYW5kIGttc2FuX2FsbG9jX3BhZ2UgdG8gYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YuIFRoaXMgZW5zdXJlcyBidWxrLWFsbG9jYXRlZCBwYWdlcyBoYXZlIHByb3BlciBLTVNBTiBzaGFkb3cgbWV0YWRhdGEgYW5kIGFsbG9jYXRpb24gdHJhY2luZy4gVGhlIGNoYW5nZSBtb2RpZmllcyByZWFjaGFibGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIGFuZCB3YXJyYW50cyBmdXp6aW5nLCBlc3BlY2lhbGx5IHVuZGVyIEtNU0FOLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDEyOjA4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMjZhYjMwZGQzOWZjNzg2OGZlMzIwYzkwMjZlN2NkOWU2NGVhYTM1ZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDggMTI6MDg6MzQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vcGFnZV9hbGxvYy5jIGIvbW0vcGFnZV9hbGxvYy5jXG5pbmRleCAxMmZhYzkwODRjNDgzLi5lYWM0MTllZWY2OTdhIDEwMDY0NFxuLS0tIGEvbW0vcGFnZV9hbGxvYy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9wYWdlX2FsbG9jLmNcbkBAIC01Mjc5LDYgJiM0Mzs1Mjc5LDggQEAgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnBfdCBnZnAsIGludCBwcmVmZXJyZWRfbmlkLFxuIFx0XHRucl9hY2NvdW50JiM0MzsmIzQzOztcbiBcbiBcdFx0cHJlcF9uZXdfcGFnZShwYWdlLCAwLCBnZnAsIEFMTE9DX0RFRkFVTFQpO1xuJiM0MztcdFx0dHJhY2VfbW1fcGFnZV9hbGxvYyhwYWdlLCAwLCBnZnAsIGFjLm1pZ3JhdGV0eXBlKTtcbiYjNDM7XHRcdGttc2FuX2FsbG9jX3BhZ2UocGFnZSwgMCwgZ2ZwIFx1MDAyNiB+X19HRlBfUkVDTEFJTSk7XG4gXHRcdHNldF9wYWdlX3JlZmNvdW50ZWQocGFnZSk7XG4gXHRcdHBhZ2VfYXJyYXlbbnJfcG9wdWxhdGVkJiM0MzsmIzQzO10gPSBwYWdlO1xuIFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDEyOjA4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tNU0FOJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YWxsb2NfcGFnZXNfYnVsa19ub3Byb2YmIzM0OywKICAgICYjMzQ7YWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIG1tL3BhZ2VfYWxsb2MuYyBieSBhZGRpbmcgdHJhY2VfbW1fcGFnZV9hbGxvYyBhbmQga21zYW5fYWxsb2NfcGFnZSB0byBhbGxvY19wYWdlc19idWxrX25vcHJvZi4gVGhpcyBlbnN1cmVzIGJ1bGstYWxsb2NhdGVkIHBhZ2VzIGhhdmUgcHJvcGVyIEtNU0FOIHNoYWRvdyBtZXRhZGF0YSBhbmQgYWxsb2NhdGlvbiB0cmFjaW5nLiBUaGUgY2hhbmdlIG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgYW5kIHdhcnJhbnRzIGZ1enppbmcsIGVzcGVjaWFsbHkgdW5kZXIgS01TQU4uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAyNmFiMzBkZDM5ZmM3ODY4ZmUzMjBjOTAyNmU3Y2Q5ZTY0ZWFhMzVmCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBTZXAgOCAxMjowODozNCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL3BhZ2VfYWxsb2MuYyBiL21tL3BhZ2VfYWxsb2MuYwppbmRleCAxMmZhYzkwODRjNDgzLi5lYWM0MTllZWY2OTdhIDEwMDY0NAotLS0gYS9tbS9wYWdlX2FsbG9jLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vcGFnZV9hbGxvYy5jCkBAIC01Mjc5LDYgJiM0Mzs1Mjc5LDggQEAgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnBfdCBnZnAsIGludCBwcmVmZXJyZWRfbmlkLAogCQlucl9hY2NvdW50JiM0MzsmIzQzOzsKIAogCQlwcmVwX25ld19wYWdlKHBhZ2UsIDAsIGdmcCwgQUxMT0NfREVGQVVMVCk7CiYjNDM7CQl0cmFjZV9tbV9wYWdlX2FsbG9jKHBhZ2UsIDAsIGdmcCwgYWMubWlncmF0ZXR5cGUpOwomIzQzOwkJa21zYW5fYWxsb2NfcGFnZShwYWdlLCAwLCBnZnAgJmFtcDsgfl9fR0ZQX1JFQ0xBSU0pOwogCQlzZXRfcGFnZV9yZWZjb3VudGVkKHBhZ2UpOwogCQlwYWdlX2FycmF5W25yX3BvcHVsYXRlZCYjNDM7JiM0MztdID0gcGFnZTsKIAl9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDEyOjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4ODcKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyNzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBNZW1vcnkgQWxsb2NhdGlvbiBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIEkgc2VlIGNoYW5nZXMgaW4gYG1tL3BhZ2VfYWxsb2MuY2AsIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAgZnVuY3Rpb24uIFRoZSBkaWZmIGhpZ2hsaWdodHMgdGhlIGFkZGl0aW9uIG9mIHR3byBuZXcgbGluZXMgd2l0aGluIHRoZSBsb29wIHRoYXQgcHJvY2Vzc2VzIHRoZSBidWxrIHBhZ2UgYWxsb2NhdGlvbi4gCgpGaXJzdCwgYHRyYWNlX21tX3BhZ2VfYWxsb2NgIGlzIGJlaW5nIGFkZGVkLiBUaGlzIGlzIGludGVyZXN0aW5nLiBJdCBsaWtlbHkgaW50cm9kdWNlcyBhIG5ldyB0cmFjaW5nIHBvaW50IGZvciBtZW1vcnkgYWxsb2NhdGlvbiBldmVudHMuIEJhc2VkIG9uIHRoZSBhcmd1bWVudHMsIGl0IHNlZW1zIHRvIGJlIHJlY29yZGluZyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgYWxsb2NhdGVkIGBwYWdlYCwgYW4gaW5kZXgsIHRoZSBHRlAgZmxhZ3MsIGFuZCB0aGUgbWlncmF0aW9uIHR5cGUuIFRoaXMgY291bGQgYmUgaW5jcmVkaWJseSB1c2VmdWwgZm9yIGRlYnVnZ2luZyBhbGxvY2F0aW9uIHBhdHRlcm5zIGFuZCBwZXJmb3JtYW5jZSBhbmFseXNpcywgZ2l2aW5nIHVzIG1vcmUgZ3JhbnVsYXJpdHkgaW4gdW5kZXJzdGFuZGluZyBtZW1vcnkgYWxsb2NhdGlvbiBiZWhhdmlvci4gV2UgbWlnaHQgd2FudCB0byBsb29rIGF0IHRoZSByZWxldmFudCB0cmFjZXBvaW50cyB0byBzZWUgd2hhdCBkYXRhIGlzIGJlaW5nIGNvbGxlY3RlZCBhbmQgaG93IHdlIGNhbiB1dGlsaXplIGl0IGZvciBwZXJmb3JtYW5jZSBpbnNpZ2h0cy4KClNlY29uZCwgdGhlIGFkZGl0aW9uIG9mIGBrbXNhbl9hbGxvY19wYWdlYC4gVGhpcyBzdWdnZXN0cyB0aGUgaW50ZWdyYXRpb24gb2YgS2VybmVsIE1lbW9yeSBTYW5pdGl6ZXIgKEtNU0FOKSBpbnRvIHRoZSBwYWdlIGFsbG9jYXRpb24gcHJvY2Vzcy4gVGhlIGNhbGwgaXMgcGFzc2luZyB0aGUgYHBhZ2VgLCBpbmRleCwgYW5kIGEgbW9kaWZpZWQgR0ZQIGZsYWcgdGhhdCBtYXNrcyBvdXQgYF9fR0ZQX1JFQ0xBSU1gLiBUaGlzIGlzIHByb2JhYmx5IHRvIGVuc3VyZSB0aGF0IEtNU0FOIGlzIGZvY3VzaW5nIG9uIGZyZXNoIGFsbG9jYXRpb25zLCBub3QgcG90ZW50aWFsbHkgYWxyZWFkeSBmcmVlZCBtZW1vcnksIHdoaWNoIGNvdWxkIGNhdXNlIGZhbHNlIHBvc2l0aXZlcyBvciBvdGhlciBpc3N1ZXMgd2l0aCBLTVNBTiYjMzk7cyBjaGVja3MuIEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgdG8gbG9vayBhdCBLTVNBTiYjMzk7cyBpbXBsZW1lbnRhdGlvbiB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IGl0IGlzIHVzaW5nIHRoaXMgaW5mb3JtYXRpb24gYW5kIHdoYXQgY2hlY2tzIGl0JiMzOTtzIHBlcmZvcm1pbmcuIEl04oCZcyBhbiBpbXBvcnRhbnQgYWRkaXRpb24gZm9yIGRldGVjdGluZyBtZW1vcnkgZXJyb3JzIGVhcmx5IG9uLgoKSSBzaG91bGQgcHJvYmFibHkgdXNlIG15IHRvb2xzIOKAkyBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAg4oCTIHRvIGNoZWNrIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGBtbS9wYWdlX2FsbG9jLmNgIG5lYXIgbGluZSA1Mjc5IHRvIGdldCBhIGJldHRlciBzZW5zZSBvZiBob3cgdGhlc2UgbmV3IGxpbmVzIGZpdCBpbnRvIHRoZSBicm9hZGVyIGNvbnRleHQgb2YgdGhlIHBhZ2UgYWxsb2NhdGlvbiBsb2dpYy4gVGhpcyB3aWxsIGdpdmUgbWUgYSBtb3JlIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhlIHBhdGNoJiMzOTtzIGltcGFjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMjowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3BhZ2VfYWxsb2MuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDUyNjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NTI2MDpcdFx0cGNwX2xpc3QgPSBcdTAwMjZwY3AtXHUwMDNlbGlzdHNbb3JkZXJfdG9fcGluZGV4KGFjLm1pZ3JhdGV0eXBlLCAwKV07XG41MjYxOlx0XHR3aGlsZSAobnJfcG9wdWxhdGVkIFx1MDAzYyBucl9wYWdlcykge1xuNTI2MjpcdFxuNTI2MzpcdFx0XHQvKiBTa2lwIGV4aXN0aW5nIHBhZ2VzICovXG41MjY0Olx0XHRcdGlmIChwYWdlX2FycmF5W25yX3BvcHVsYXRlZF0pIHtcbjUyNjU6XHRcdFx0XHRucl9wb3B1bGF0ZWQmIzQzOyYjNDM7O1xuNTI2NjpcdFx0XHRcdGNvbnRpbnVlO1xuNTI2NzpcdFx0XHR9XG41MjY4Olx0XG41MjY5Olx0XHRcdHBhZ2UgPSBfX3JtcXVldWVfcGNwbGlzdCh6b25lLCAwLCBhYy5taWdyYXRldHlwZSwgYWxsb2NfZmxhZ3MsXG41MjcwOlx0XHRcdFx0XHRcdFx0XHRcdHBjcCwgcGNwX2xpc3QpO1xuNTI3MTpcdFx0XHRpZiAodW5saWtlbHkoIXBhZ2UpKSB7XG41MjcyOlx0XHRcdFx0LyogVHJ5IGFuZCBhbGxvY2F0ZSBhdCBsZWFzdCBvbmUgcGFnZSAqL1xuNTI3MzpcdFx0XHRcdGlmICghbnJfYWNjb3VudCkge1xuNTI3NDpcdFx0XHRcdFx0cGNwX3NwaW5fdW5sb2NrKHBjcCk7XG41Mjc1Olx0XHRcdFx0XHRnb3RvIGZhaWxlZDtcbjUyNzY6XHRcdFx0XHR9XG41Mjc3Olx0XHRcdFx0YnJlYWs7XG41Mjc4Olx0XHRcdH1cbjUyNzk6XHRcdFx0bnJfYWNjb3VudCYjNDM7JiM0Mzs7XG41MjgwOlx0XG41MjgxOlx0XHRcdHByZXBfbmV3X3BhZ2UocGFnZSwgMCwgZ2ZwLCBBTExPQ19ERUZBVUxUKTtcbjUyODI6XHRcdFx0dHJhY2VfbW1fcGFnZV9hbGxvYyhwYWdlLCAwLCBnZnAsIGFjLm1pZ3JhdGV0eXBlKTtcbjUyODM6XHRcdFx0a21zYW5fYWxsb2NfcGFnZShwYWdlLCAwLCBnZnAgXHUwMDI2IH5fX0dGUF9SRUNMQUlNKTtcbjUyODQ6XHRcdFx0c2V0X3BhZ2VfcmVmY291bnRlZChwYWdlKTtcbjUyODU6XHRcdFx0cGFnZV9hcnJheVtucl9wb3B1bGF0ZWQmIzQzOyYjNDM7XSA9IHBhZ2U7XG41Mjg2Olx0XHR9XG41Mjg3Olx0XG41Mjg4Olx0XHRwY3Bfc3Bpbl91bmxvY2socGNwKTtcbjUyODk6XHRcbjUyOTA6XHRcdF9fY291bnRfemlkX3ZtX2V2ZW50cyhQR0FMTE9DLCB6b25lX2lkeCh6b25lKSwgbnJfYWNjb3VudCk7XG41MjkxOlx0XHR6b25lX3N0YXRpc3RpY3Moem9uZWxpc3Rfem9uZShhYy5wcmVmZXJyZWRfem9uZXJlZiksIHpvbmUsIG5yX2FjY291bnQpO1xuNTI5MjpcdFxuNTI5MzpcdG91dDpcbjUyOTQ6XHRcdHJldHVybiBucl9wb3B1bGF0ZWQ7XG41Mjk1Olx0XG41Mjk2Olx0ZmFpbGVkOlxuNTI5NzpcdFx0cGFnZSA9IF9fYWxsb2NfcGFnZXNfbm9wcm9mKGdmcCwgMCwgcHJlZmVycmVkX25pZCwgbm9kZW1hc2ssIEFMTE9DX0RFRkFVTFQpO1xuNTI5ODpcdFx0aWYgKHBhZ2UpXG41Mjk5Olx0XHRcdHBhZ2VfYXJyYXlbbnJfcG9wdWxhdGVkJiM0MzsmIzQzO10gPSBwYWdlO1xuNTMwMDpcdFx0Z290byBvdXQ7XG41MzAxOlx0fVxuNTMwMjpcdEVYUE9SVF9TWU1CT0xfR1BMKGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKTtcbjUzMDM6XHRcbjUzMDQ6XHQvKlxuNTMwNTpcdCAqIGZyZWVfcGFnZXNfYnVsayAtIEZyZWUgYW4gYXJyYXkgb2Ygb3JkZXItMCBwYWdlc1xuNTMwNjpcdCAqIEBwYWdlX2FycmF5OiBBcnJheSBvZiBwYWdlcyB0byBmcmVlXG41MzA3Olx0ICogQG5yX3BhZ2VzOiBUaGUgbnVtYmVyIG9mIHBhZ2VzIGluIHRoZSBhcnJheVxuNTMwODpcdCAqXG41MzA5Olx0ICogRnJlZSB0aGUgb3JkZXItMCBwYWdlcy4gQWRqYWNlbnQgZW50cmllcyB3aG9zZSBQRk5zIGZvcm0gYSBjb250aWd1b3VzXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTI6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDM2NgoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDEwNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNaXNzaW5nIFRyYWNlcG9pbnRzIGFuZCBLTVNBTiBDYWxscyBpbiBQQ1AgUGFnZSBBbGxvY2F0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIHdpdGhpbiBgbW0vcGFnZV9hbGxvYy5jYCwgYW5kIGl0IGFwcGVhcnMgdGhhdCB0aGUgdHJhY2Vwb2ludHMgYW5kIEtNU0FOIGhvb2tzIGFyZSBhYnNlbnQgd2hlbiBhbGxvY2F0aW5nIHBhZ2VzIGZyb20gdGhlIFBDUCBsaXN0LiBTcGVjaWZpY2FsbHksIEkmIzM5O20gbm90IHNlZWluZyBgdHJhY2VfbW1fcGFnZV9hbGxvYyhwYWdlLCAwLCBnZnAsIGFjLm1pZ3JhdGV0eXBlKTtgIGFuZCBga21zYW5fYWxsb2NfcGFnZShwYWdlLCAwLCBnZnAgJmFtcDsgfl9fR0ZQX1JFQ0xBSU0pO2AuIFRoaXMgb21pc3Npb24gaW1tZWRpYXRlbHkgcmFpc2VzIGEgcmVkIGZsYWc7IHRoZXNlIGFyZSBwcmV0dHkgZnVuZGFtZW50YWwgZGVidWdnaW5nIGFuZCBtZW1vcnkgc2FmZXR5IHRvb2xzLiBCZWZvcmUgSSBqdW1wIHRvIGNvbmNsdXNpb25zIGFuZCBmaWxlIGEgcGF0Y2gsIHRob3VnaCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5LiBJJiMzOTtkIGJldHRlciBkaWcgZGVlcGVyLiBMZXQgbWUgcXVpY2tseSBleGFtaW5lIG90aGVyIGBhbGxvY19wYWdlc2AgZnVuY3Rpb25zIGFuZCB0aGUgY2FsbCBwYXRocyBpbnRvIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoaXMgaXMgYW4gaW50ZW50aW9uYWwgZGVzaWduIGRlY2lzaW9uLCBhIHJlZ3Jlc3Npb24sIG9yIHNpbXBseSBhbiBvdmVyc2lnaHQuIENoZWNraW5nIHRoZSBoaXN0b3J5IGFuZCBjYWxsZXJzIHdpbGwgcHJvdmlkZSBjcnVjaWFsIGNvbnRleHQg4oCTIGFyZSB0aGVzZSB0cmFjZXBvaW50cyBjb25zaXN0ZW50bHkgcHJlc2VudCBlbHNld2hlcmUsIGFuZCBpZiBzbywgd2hlbiBhbmQgd2h5IHdlcmUgdGhleSBwb3RlbnRpYWxseSByZW1vdmVkIGhlcmU/IExldCYjMzk7cyBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDEyOjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ttc2FuX2FsbG9jX3BhZ2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0va21zYW4vc2hhZG93LmM9MTY5PUVYUE9SVF9TWU1CT0woa21zYW5fY29weV9wYWdlX21ldGEpO1xubW0va21zYW4vc2hhZG93LmMtMTcwLVxubW0va21zYW4vc2hhZG93LmM6MTcxOnZvaWQga21zYW5fYWxsb2NfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyLCBnZnBfdCBmbGFncylcbm1tL2ttc2FuL3NoYWRvdy5jLTE3Mi17XG4tLVxubW0vcGFnZV9hbGxvYy5jPTUxNjA9dW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnBfdCBnZnAsIGludCBwcmVmZXJyZWRfbmlkLFxuLS1cbm1tL3BhZ2VfYWxsb2MuYy01MjgyLVx0XHR0cmFjZV9tbV9wYWdlX2FsbG9jKHBhZ2UsIDAsIGdmcCwgYWMubWlncmF0ZXR5cGUpO1xubW0vcGFnZV9hbGxvYy5jOjUyODM6XHRcdGttc2FuX2FsbG9jX3BhZ2UocGFnZSwgMCwgZ2ZwIFx1MDAyNiB+X19HRlBfUkVDTEFJTSk7XG5tbS9wYWdlX2FsbG9jLmMtNTI4NC1cdFx0c2V0X3BhZ2VfcmVmY291bnRlZChwYWdlKTtcbi0tXG5tbS9wYWdlX2FsbG9jLmM9NTM0NT1zdGF0aWMgaW5saW5lIGJvb2wgYWxsb2Nfbm9sb2NrX2FsbG93ZWQodm9pZClcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNTM3MC0gKlxubW0vcGFnZV9hbGxvYy5jOjUzNzE6ICogU3BlY2lmeSBfX0dGUF9aRVJPIHRvIG1ha2Ugc3VyZSB0aGF0IGNhbGwgdG8ga21zYW5fYWxsb2NfcGFnZSgpIGJlbG93XG5tbS9wYWdlX2FsbG9jLmMtNTM3Mi0gKiBpcyBzYWZlIGluIGFueSBjb250ZXh0LiBBbHNvIHplcm9pbmcgdGhlIHBhZ2UgaXMgbWFuZGF0b3J5IGZvclxuLS1cbm1tL3BhZ2VfYWxsb2MuYz01Mzg1PXN0cnVjdCBwYWdlICpfX2FsbG9jX2Zyb3plbl9wYWdlc19ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG4tLVxubW0vcGFnZV9hbGxvYy5jLTU0NjEtXHR0cmFjZV9tbV9wYWdlX2FsbG9jKHBhZ2UsIG9yZGVyLCBhbGxvY19nZnAsIGFjLm1pZ3JhdGV0eXBlKTtcbm1tL3BhZ2VfYWxsb2MuYzo1NDYyOlx0a21zYW5fYWxsb2NfcGFnZShwYWdlLCBvcmRlciwgYWxsb2NfZ2ZwKTtcbm1tL3BhZ2VfYWxsb2MuYy01NDYzLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDEyOjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUyMzEKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA2MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIFBhZ2UgQWxsb2NhdGlvbiBCdWxrIE9wZXJhdGlvbnMqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSBjb25jZXJuIGlzIGVuc3VyaW5nIHRoZSBjb25zaXN0ZW5jeSBvZiBvdXIgcGFnZSBhbGxvY2F0aW9uIHN0cmF0ZWd5IGFjcm9zcyB0aGUgc3lzdGVtLiBJIG5lZWQgdG8gY29tcHJlaGVuc2l2ZWx5IHVuZGVyc3RhbmQgd2hlcmUgYGFsbG9jX3BhZ2VzX2J1bGtfYXJyYXlgLCBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgLCBhbmQgYGFsbG9jX3BhZ2VzX2J1bGtfbGlzdGAgYXJlIGludm9rZWQuIEEgdGhvcm91Z2ggYXVkaXQgaXMgZXNzZW50aWFsIHRvIGF2b2lkIGFueSBwb3RlbnRpYWwgcmVncmVzc2lvbnMgb3IgdW5mb3Jlc2VlbiBpbnRlcmFjdGlvbnMuCgpGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgICphY3R1YWxseSogZG9lcyB1bmRlciB0aGUgaG9vZC4gVW5kZXJzdGFuZGluZyBpdHMgaW50ZXJuYWwgbWVjaGFuaWNzLCB0aGUgcGFyYW1ldGVycyBpdCB0YWtlcywgYW5kIGl0cyBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzIHdpbGwgYmUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGZ1bGwgc2NvcGUgb2Ygb3VyIG1lbW9yeSBtYW5hZ2VtZW50IHN0cmF0ZWd5LiBUaGF0JiMzOTtzIG15IGltbWVkaWF0ZSBmb2N1cyBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTI6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9wYWdlX2FsbG9jLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MTYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzUxNjA6XHR1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKGdmcF90IGdmcCwgaW50IHByZWZlcnJlZF9uaWQsXG41MTYxOlx0XHRcdFx0bm9kZW1hc2tfdCAqbm9kZW1hc2ssIGludCBucl9wYWdlcyxcbjUxNjI6XHRcdFx0XHRzdHJ1Y3QgcGFnZSAqKnBhZ2VfYXJyYXkpXG41MTYzOlx0e1xuNTE2NDpcdFx0c3RydWN0IHBhZ2UgKnBhZ2U7XG41MTY1Olx0XHRzdHJ1Y3Qgem9uZSAqem9uZTtcbjUxNjY6XHRcdHN0cnVjdCB6b25lcmVmICp6O1xuNTE2NzpcdFx0c3RydWN0IHBlcl9jcHVfcGFnZXMgKnBjcDtcbjUxNjg6XHRcdHN0cnVjdCBsaXN0X2hlYWQgKnBjcF9saXN0O1xuNTE2OTpcdFx0c3RydWN0IGFsbG9jX2NvbnRleHQgYWM7XG41MTcwOlx0XHR1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MgPSBBTExPQ19XTUFSS19MT1c7XG41MTcxOlx0XHRpbnQgbnJfcG9wdWxhdGVkID0gMCwgbnJfYWNjb3VudCA9IDA7XG41MTcyOlx0XG41MTczOlx0XHQvKlxuNTE3NDpcdFx0ICogU2tpcCBwb3B1bGF0ZWQgYXJyYXkgZWxlbWVudHMgdG8gZGV0ZXJtaW5lIGlmIGFueSBwYWdlcyBuZWVkXG41MTc1Olx0XHQgKiB0byBiZSBhbGxvY2F0ZWQgYmVmb3JlIGRpc2FibGluZyBJUlFzLlxuNTE3NjpcdFx0ICovXG41MTc3Olx0XHR3aGlsZSAobnJfcG9wdWxhdGVkIFx1MDAzYyBucl9wYWdlcyBcdTAwMjZcdTAwMjYgcGFnZV9hcnJheVtucl9wb3B1bGF0ZWRdKVxuNTE3ODpcdFx0XHRucl9wb3B1bGF0ZWQmIzQzOyYjNDM7O1xuNTE3OTpcdFxuNTE4MDpcdFx0LyogTm8gcGFnZXMgcmVxdWVzdGVkPyAqL1xuNTE4MTpcdFx0aWYgKHVubGlrZWx5KG5yX3BhZ2VzIFx1MDAzYz0gMCkpXG41MTgyOlx0XHRcdGdvdG8gb3V0O1xuNTE4MzpcdFxuNTE4NDpcdFx0LyogQWxyZWFkeSBwb3B1bGF0ZWQgYXJyYXk/ICovXG41MTg1Olx0XHRpZiAodW5saWtlbHkobnJfcGFnZXMgLSBucl9wb3B1bGF0ZWQgPT0gMCkpXG41MTg2Olx0XHRcdGdvdG8gb3V0O1xuNTE4NzpcdFxuNTE4ODpcdFx0LyogQnVsayBhbGxvY2F0b3IgZG9lcyBub3Qgc3VwcG9ydCBtZW1jZyBhY2NvdW50aW5nLiAqL1xuNTE4OTpcdFx0aWYgKG1lbWNnX2ttZW1fb25saW5lKCkgXHUwMDI2XHUwMDI2IChnZnAgXHUwMDI2IF9fR0ZQX0FDQ09VTlQpKVxuNTE5MDpcdFx0XHRnb3RvIGZhaWxlZDtcbjUxOTE6XHRcbjUxOTI6XHRcdC8qIFVzZSB0aGUgc2luZ2xlIHBhZ2UgYWxsb2NhdG9yIGZvciBvbmUgcGFnZS4gKi9cbjUxOTM6XHRcdGlmIChucl9wYWdlcyAtIG5yX3BvcHVsYXRlZCA9PSAxKVxuNTE5NDpcdFx0XHRnb3RvIGZhaWxlZDtcbjUxOTU6XHRcbjUxOTY6XHQjaWZkZWYgQ09ORklHX1BBR0VfT1dORVJcbjUxOTc6XHRcdC8qXG41MTk4Olx0XHQgKiBQQUdFX09XTkVSIG1heSByZWN1cnNlIGludG8gdGhlIGFsbG9jYXRvciB0byBhbGxvY2F0ZSBzcGFjZSB0b1xuNTE5OTpcdFx0ICogc2F2ZSB0aGUgc3RhY2sgd2l0aCBwYWdlc2V0cy5sb2NrIGhlbGQuIFJlbGVhc2luZy9yZWFjcXVpcmluZ1xuNTIwMDpcdFx0ICogcmVtb3ZlcyBtdWNoIG9mIHRoZSBwZXJmb3JtYW5jZSBiZW5lZml0IG9mIGJ1bGsgYWxsb2NhdGlvbiBzb1xuNTIwMTpcdFx0ICogZm9yY2UgdGhlIGNhbGxlciB0byBhbGxvY2F0ZSBvbmUgcGFnZSBhdCBhIHRpbWUgYXMgaXQmIzM5O2xsIGhhdmVcbjUyMDI6XHRcdCAqIHNpbWlsYXIgcGVyZm9ybWFuY2UgdG8gYWRkZWQgY29tcGxleGl0eSB0byB0aGUgYnVsayBhbGxvY2F0b3IuXG41MjAzOlx0XHQgKi9cbjUyMDQ6XHRcdGlmIChzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFx1MDAyNnBhZ2Vfb3duZXJfaW5pdGVkKSlcbjUyMDU6XHRcdFx0Z290byBmYWlsZWQ7XG41MjA2Olx0I2VuZGlmXG41MjA3Olx0XG41MjA4Olx0XHQvKiBNYXkgc2V0IEFMTE9DX05PRlJBR01FTlQsIGZyYWdtZW50YXRpb24gd2lsbCByZXR1cm4gMSBwYWdlLiAqL1xuNTIwOTpcdFx0Z2ZwIFx1MDAyNj0gZ2ZwX2FsbG93ZWRfbWFzaztcbjUyMTA6XHRcdGlmICghcHJlcGFyZV9hbGxvY19wYWdlcyhnZnAsIDAsIHByZWZlcnJlZF9uaWQsIG5vZGVtYXNrLCBcdTAwMjZhYywgXHUwMDI2Z2ZwLCBcdTAwMjZhbGxvY19mbGFncykpXG41MjExOlx0XHRcdGdvdG8gb3V0O1xuNTIxMjpcdFxuNTIxMzpcdFx0LyogRmluZCBhbiBhbGxvd2VkIGxvY2FsIHpvbmUgdGhhdCBtZWV0cyB0aGUgbG93IHdhdGVybWFyay4gKi9cbjUyMTQ6XHRcdHogPSBhYy5wcmVmZXJyZWRfem9uZXJlZjtcbjUyMTU6XHRcdGZvcl9uZXh0X3pvbmVfem9uZWxpc3Rfbm9kZW1hc2soem9uZSwgeiwgYWMuaGlnaGVzdF96b25laWR4LCBhYy5ub2RlbWFzaykge1xuNTIxNjpcdFx0XHR1bnNpZ25lZCBsb25nIG1hcms7XG41MjE3Olx0XG41MjE4Olx0XHRcdGlmIChjcHVzZXRzX2VuYWJsZWQoKSBcdTAwMjZcdTAwMjYgKGFsbG9jX2ZsYWdzIFx1MDAyNiBBTExPQ19DUFVTRVQpIFx1MDAyNlx1MDAyNlxuNTIxOTpcdFx0XHQgICAgIV9fY3B1c2V0X3pvbmVfYWxsb3dlZCh6b25lLCBnZnApKSB7XG41MjIwOlx0XHRcdFx0Y29udGludWU7XG41MjIxOlx0XHRcdH1cbjUyMjI6XHRcbjUyMjM6XHRcdFx0aWYgKG5yX29ubGluZV9ub2RlcyBcdTAwM2UgMSBcdTAwMjZcdTAwMjYgem9uZSAhPSB6b25lbGlzdF96b25lKGFjLnByZWZlcnJlZF96b25lcmVmKSBcdTAwMjZcdTAwMjZcbjUyMjQ6XHRcdFx0ICAgIHpvbmVfdG9fbmlkKHpvbmUpICE9IHpvbmVsaXN0X25vZGVfaWR4KGFjLnByZWZlcnJlZF96b25lcmVmKSkge1xuNTIyNTpcdFx0XHRcdGdvdG8gZmFpbGVkO1xuNTIyNjpcdFx0XHR9XG41MjI3Olx0XG41MjI4Olx0XHRcdGNvbmRfYWNjZXB0X21lbW9yeSh6b25lLCAwLCBhbGxvY19mbGFncyk7XG41MjI5Olx0cmV0cnlfdGhpc196b25lOlxuNTIzMDpcdFx0XHRtYXJrID0gd21hcmtfcGFnZXMoem9uZSwgYWxsb2NfZmxhZ3MgXHUwMDI2IEFMTE9DX1dNQVJLX01BU0spICYjNDM7IG5yX3BhZ2VzIC0gbnJfcG9wdWxhdGVkO1xuNTIzMTpcdFx0XHRpZiAoem9uZV93YXRlcm1hcmtfZmFzdCh6b25lLCAwLCAgbWFyayxcbjUyMzI6XHRcdFx0XHRcdHpvbmVsaXN0X3pvbmVfaWR4KGFjLnByZWZlcnJlZF96b25lcmVmKSxcbjUyMzM6XHRcdFx0XHRcdGFsbG9jX2ZsYWdzLCBnZnApKSB7XG41MjM0Olx0XHRcdFx0YnJlYWs7XG41MjM1Olx0XHRcdH1cbjUyMzY6XHRcbjUyMzc6XHRcdFx0aWYgKGNvbmRfYWNjZXB0X21lbW9yeSh6b25lLCAwLCBhbGxvY19mbGFncykpXG41MjM4Olx0XHRcdFx0Z290byByZXRyeV90aGlzX3pvbmU7XG41MjM5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTI6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjc1NwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDUwMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBGdXp6aW5nIFdvcnRoaW5lc3MqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIGluIGBtbS9wYWdlX2FsbG9jLmNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gY29uZmlybSB0aGF0IGBtbS9wYWdlX2FsbG9jLmNgIGlzIGluZGVlZCBwYXJ0IG9mIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSAoYG1tL2ApLCB3aGljaCBpdCBpcy4gVGhhdCYjMzk7cyBhIGNoZWNrIGluIHRoZSBhZmZpcm1hdGl2ZSBmb3IgY29yZSBzdWJzeXN0ZW1zLCBhbmQgdGhlcmVmb3JlLCBhIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4KCkkgcXVpY2tseSBjaGVjayB0aGUgcG9zaXRpdmUgY3JpdGVyaWEgZm9yIGRldGVybWluaW5nIGZ1enppbmcgd29ydGhpbmVzczogJiMzNDtBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKS4uLiYjMzQ7IC0gWWVwLCB3ZSYjMzk7cmUgaW4gdGhlIHJpZ2h0IG5laWdoYm9yaG9vZC4KCkJ1dCBob2xkIG9uLCBiZWZvcmUgSSBqdW1wIHRvIGNvbmNsdXNpb25zLCBJIG5lZWQgdG8gcnVsZSBvdXQgYW55IG9mIHRoZSBuZWdhdGl2ZSBjcml0ZXJpYS4gVGhlIG5lZ2F0aXZlIGNyaXRlcmlhIHNheSBJICpvbmx5KiByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAgaWYgdGhlIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byB0aGUgbGlzdGVkIGNhdGVnb3JpZXMuIEkgbmVlZCB0byBiZSBzdXJlIHRoaXMgKmlzbiYjMzk7dCogYSBub24ta2VybmVsIGNoYW5nZSwgZGVjb3JhdGl2ZSBsb2dnaW5nLCBvciB1bnJlYWNoYWJsZSBjb2RlLgoKTGV0JiMzOTtzIHNlZSB3aGF0IHdhcyBhZGRlZC4gT2theSwgdGhlcmUmIzM5O3MgYHRyYWNlX21tX3BhZ2VfYWxsb2NgIHdoaWNoICpjb3VsZCogYmUgY29uc2lkZXJlZCBkZWNvcmF0aXZlLiBCdXQgdGhlcmUmIzM5O3MgYWxzbyBga21zYW5fYWxsb2NfcGFnZShwYWdlLCAwLCBnZnAgJmFtcDsgfl9fR0ZQX1JFQ0xBSU0pO2AuCgpXYWl0IGEgbWludXRlLi4uIGBrbXNhbl9hbGxvY19wYWdlYCBpcyAqbm90KiBqdXN0IGEgdHJhY2Vwb2ludC4gVGhhdCBpbml0aWFsaXplcyB0aGUgS01TQU4gc2hhZG93L29yaWdpbiBtZXRhZGF0YSBmb3IgdGhlIGFsbG9jYXRlZCBwYWdlISBXaXRob3V0IGl0LCBLTVNBTiB3b3VsZCBoYXZlIG1ham9yIGlzc3VlcywgdHJlYXRpbmcgdGhlIGJ1bGstYWxsb2NhdGVkIHBhZ2VzIGFzIHVuaW5pdGlhbGl6ZWQgb3Igd2l0aCBjb3JydXB0IHNoYWRvdyBtZW1vcnkuIFRoaXMgaXMgKmNyaXRpY2FsKiBmb3IgS01TQU4gZnVuY3Rpb25hbGl0eS4gVGhpcyBpcyBhIGxvZ2ljIGNoYW5nZSEKCkkgbmVlZCB0byBkaWcgaW50byBga21zYW5fYWxsb2NfcGFnZWAgZnVydGhlciB0byBjb25maXJtIGV4YWN0bHkgaG93IGl0IGltcGFjdHMgY29udHJvbCBmbG93LCBidXQgSSYjMzk7bSBsZWFuaW5nIGhlYXZpbHkgdG93YXJkcyB0aGlzIHBhdGNoIGJlaW5nIGZ1enppbmctd29ydGh5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMjowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2ttc2FuL3NoYWRvdy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTcxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNzE6XHR2b2lkIGttc2FuX2FsbG9jX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlciwgZ2ZwX3QgZmxhZ3MpXG4gMTcyOlx0e1xuIDE3MzpcdFx0Ym9vbCBpbml0aWFsaXplZCA9IChmbGFncyBcdTAwMjYgX19HRlBfWkVSTykgfHwgIWttc2FuX2VuYWJsZWQ7XG4gMTc0Olx0XHRzdHJ1Y3QgcGFnZSAqc2hhZG93LCAqb3JpZ2luO1xuIDE3NTpcdFx0ZGVwb3Rfc3RhY2tfaGFuZGxlX3QgaGFuZGxlO1xuIDE3NjpcdFx0aW50IHBhZ2VzID0gMSBcdTAwM2NcdTAwM2Mgb3JkZXI7XG4gMTc3Olx0XG4gMTc4Olx0XHRpZiAoIXBhZ2UpXG4gMTc5Olx0XHRcdHJldHVybjtcbiAxODA6XHRcbiAxODE6XHRcdHNoYWRvdyA9IHNoYWRvd19wYWdlX2ZvcihwYWdlKTtcbiAxODI6XHRcdG9yaWdpbiA9IG9yaWdpbl9wYWdlX2ZvcihwYWdlKTtcbiAxODM6XHRcbiAxODQ6XHRcdGlmIChpbml0aWFsaXplZCkge1xuIDE4NTpcdFx0XHRfX21lbXNldChwYWdlX2FkZHJlc3Moc2hhZG93KSwgMCwgUEFHRV9TSVpFICogcGFnZXMpO1xuIDE4NjpcdFx0XHRfX21lbXNldChwYWdlX2FkZHJlc3Mob3JpZ2luKSwgMCwgUEFHRV9TSVpFICogcGFnZXMpO1xuIDE4NzpcdFx0XHRyZXR1cm47XG4gMTg4Olx0XHR9XG4gMTg5Olx0XG4gMTkwOlx0XHQvKiBaZXJvIHBhZ2VzIGFsbG9jYXRlZCBieSB0aGUgcnVudGltZSBzaG91bGQgYWxzbyBiZSBpbml0aWFsaXplZC4gKi9cbiAxOTE6XHRcdGlmIChrbXNhbl9pbl9ydW50aW1lKCkpXG4gMTkyOlx0XHRcdHJldHVybjtcbiAxOTM6XHRcbiAxOTQ6XHRcdF9fbWVtc2V0KHBhZ2VfYWRkcmVzcyhzaGFkb3cpLCAtMSwgUEFHRV9TSVpFICogcGFnZXMpO1xuIDE5NTpcdFx0a21zYW5fZW50ZXJfcnVudGltZSgpO1xuIDE5NjpcdFx0aGFuZGxlID0ga21zYW5fc2F2ZV9zdGFja193aXRoX2ZsYWdzKGZsYWdzLCAvKmV4dHJhX2JpdHMqLyAwKTtcbiAxOTc6XHRcdGttc2FuX2xlYXZlX3J1bnRpbWUoKTtcbiAxOTg6XHRcdC8qXG4gMTk5Olx0XHQgKiBBZGRyZXNzZXMgYXJlIHBhZ2UtYWxpZ25lZCwgcGFnZXMgYXJlIGNvbnRpZ3VvdXMsIHNvIGl0JiMzOTtzIG9rXG4gMjAwOlx0XHQgKiB0byBqdXN0IGZpbGwgdGhlIG9yaWdpbiBwYWdlcyB3aXRoIEBoYW5kbGUuXG4gMjAxOlx0XHQgKi9cbiAyMDI6XHRcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyBQQUdFX1NJWkUgKiBwYWdlcyAvIHNpemVvZihoYW5kbGUpOyBpJiM0MzsmIzQzOylcbiAyMDM6XHRcdFx0KChkZXBvdF9zdGFja19oYW5kbGVfdCAqKXBhZ2VfYWRkcmVzcyhvcmlnaW4pKVtpXSA9IGhhbmRsZTtcbiAyMDQ6XHR9XG4gMjA1Olx0XG4gMjA2Olx0dm9pZCBrbXNhbl9mcmVlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcilcbiAyMDc6XHR7XG4gMjA4Olx0XHRpZiAoIWttc2FuX2VuYWJsZWQgfHwga21zYW5faW5fcnVudGltZSgpKVxuIDIwOTpcdFx0XHRyZXR1cm47XG4gMjEwOlx0XHRrbXNhbl9lbnRlcl9ydW50aW1lKCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDEyOjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgzMDYKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA2MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTWVtb3J5IEFsbG9jYXRpb24gaW4gdGhlIEtlcm5lbCoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgYGttc2FuX2FsbG9jX3BhZ2VgIGZ1bmN0aW9uLiBGcm9tIHdoYXQgSSBjYW4gZ2F0aGVyLCBpdCYjMzk7cyBjbGVhcmx5IGludm9sdmVkIGluIG1hbmFnaW5nIG1ldGFkYXRhLCBzaGFkb3cgcGFnZXMsIHN0YWNrIGRlcG90cywgb3JpZ2luIHBhZ2VzLCBhbmQgYWxsIHRoYXQgZnVuIHN0dWZmIHJlbGF0ZWQgdG8gbWVtb3J5LiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXM6IHdoYXQgYXJlIHRoZSB1cHN0cmVhbSBmdW5jdGlvbnMgdGhhdCBhcmUgY2FsbGluZyBgYWxsb2NfcGFnZXNfYnVsa2AgYW5kIGBhbGxvY19wYWdlc19idWxrX2FycmF5YD8gVGhlc2UgYXJlIGtleSwgYmVjYXVzZSBrbm93aW5nIHdobyYjMzk7cyAqcmVxdWVzdGluZyogdGhpcyBidWxrIGFsbG9jYXRpb24gd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIG92ZXJhbGwgbWVtb3J5IG1hbmFnZW1lbnQgc2NoZW1lLiBJIG5lZWQgdG8gdHJhY2UgdGhpcyBiYWNrLiBTbywgbGV0JiMzOTtzIHN0YXJ0IHdpdGggYSBzZWFyY2ggZm9yIGNhbGxlcnMgb2YgYGFsbG9jX3BhZ2VzX2J1bGtgLiBUaGF0JiMzOTtzIHdoZXJlIEkgbmVlZCB0byBmb2N1cyBteSBlZmZvcnRzLiBJJiMzOTtsbCBnZXQgdGhlIGxheSBvZiB0aGUgbGFuZCBmcm9tIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMjowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthbGxvY19wYWdlc19idWxrJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYz0xNzI9c3RhdGljIHN0cnVjdCBiaW8gKmJsa19jcnlwdG9fYWxsb2NfZW5jX2JpbyhzdHJ1Y3QgYmlvICpiaW9fc3JjLFxuLS1cbmJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYy0yMDQtXHQgKlxuYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jOjIwNTpcdCAqIE5vdGU6IGFsbG9jX3BhZ2VzX2J1bGsgbmVlZHMgdGhlIGFycmF5IHRvIGJlIHplcm9lZCwgYXMgaXQgYXNzdW1lc1xuYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jLTIwNi1cdCAqIGFueSBub24temVybyBzbG90IGFscmVhZHkgY29udGFpbnMgYSB2YWxpZCBhbGxvY2F0aW9uLlxuLS1cbmJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYy0yMDgtXHRtZW1zZXQocGFnZXMsIDAsIHNpemVvZihzdHJ1Y3QgcGFnZSAqKSAqIG5yX3NlZ3MpO1xuYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jOjIwOTpcdG5yX2FsbG9jYXRlZCA9IGFsbG9jX3BhZ2VzX2J1bGsoR0ZQX0tFUk5FTCwgbnJfc2VncywgcGFnZXMpO1xuYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jLTIxMC1cdGlmIChucl9hbGxvY2F0ZWQgXHUwMDNjIG5yX3NlZ3MpXG4tLVxuZHJpdmVycy9maXJld2lyZS9jb3JlLWlzby5jPTMxPWludCBmd19pc29fYnVmZmVyX2FsbG9jKHN0cnVjdCBmd19pc29fYnVmZmVyICpidWZmZXIsIGludCBwYWdlX2NvdW50KVxuLS1cbmRyaXZlcnMvZmlyZXdpcmUvY29yZS1pc28uYy00MS1cdC8vIGNvbnZlbmllbmNlIHRvIG1hcCB0aGVtIGludG8gdmlydHVhbCBhZGRyZXNzIHNwYWNlIG9mIHVzZXIgcHJvY2Vzcy5cbmRyaXZlcnMvZmlyZXdpcmUvY29yZS1pc28uYzo0MjpcdHVuc2lnbmVkIGxvbmcgbnJfcG9wdWxhdGVkID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfS0VSTkVMIHwgR0ZQX0RNQTMyIHwgX19HRlBfWkVSTyxcbmRyaXZlcnMvZmlyZXdpcmUvY29yZS1pc28uYy00My1cdFx0XHRcdFx0XHQgICAgICBwYWdlX2NvdW50LCBwYWdlX2FycmF5KTtcbi0tXG5kcml2ZXJzL2ZpcmV3aXJlL29oY2kuYz04NDg9c3RhdGljIGludCBhcl9jb250ZXh0X2luaXQoc3RydWN0IGFyX2NvbnRleHQgKmN0eCwgc3RydWN0IGZ3X29oY2kgKm9oY2ksXG4tLVxuZHJpdmVycy9maXJld2lyZS9vaGNpLmMtODY0LVx0Ly8gYWRkcmVzcyByYW5nZSBpbiBrZXJuZWwgdmlydHVhbCBhZGRyZXNzIHNwYWNlLlxuZHJpdmVycy9maXJld2lyZS9vaGNpLmM6ODY1Olx0dW5zaWduZWQgbG9uZyBucl9wb3B1bGF0ZWQgPSBhbGxvY19wYWdlc19idWxrKEdGUF9LRVJORUwgfCBHRlBfRE1BMzIsIEFSX0JVRkZFUlMsIHBhZ2VzKTtcbmRyaXZlcnMvZmlyZXdpcmUvb2hjaS5jLTg2Ni1cbi0tXG5kcml2ZXJzL3N0YWdpbmcvbWVkaWEvYXRvbWlzcC9wY2kvaG1tL2htbV9iby5jPTYyMT1zdGF0aWMgaW50IGFsbG9jX3ByaXZhdGVfcGFnZXMoc3RydWN0IGhtbV9idWZmZXJfb2JqZWN0ICpibylcbi0tXG5kcml2ZXJzL3N0YWdpbmcvbWVkaWEvYXRvbWlzcC9wY2kvaG1tL2htbV9iby5jLTYyNi1cbmRyaXZlcnMvc3RhZ2luZy9tZWRpYS9hdG9taXNwL3BjaS9obW0vaG1tX2JvLmM6NjI3Olx0bnJfYWxsb2NhdGVkID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfS0VSTkVMLCBiby1cdTAwM2VwZ25yLCBiby1cdTAwM2VwYWdlcyk7XG5kcml2ZXJzL3N0YWdpbmcvbWVkaWEvYXRvbWlzcC9wY2kvaG1tL2htbV9iby5jLTYyOC1cdC8qXG5kcml2ZXJzL3N0YWdpbmcvbWVkaWEvYXRvbWlzcC9wY2kvaG1tL2htbV9iby5jOjYyOTpcdCAqIGFsbG9jX3BhZ2VzX2J1bGsoKSBkb2VzIG5vdCB0cnkgdmVyeSBoYXJkIHRvIGdldCBwYWdlcyB1bmRlciBtZW1vcnlcbmRyaXZlcnMvc3RhZ2luZy9tZWRpYS9hdG9taXNwL3BjaS9obW0vaG1tX2JvLmMtNjMwLVx0ICogcHJlc3N1cmUuIElmIG5lY2Vzc2FyeSBmYWxsIGJhY2sgdG8gYWxsb2NfcGFnZSgpLlxuLS1cbmRyaXZlcnMvdmZpby9wY2kvbWx4NS9jbWQuYz00NjY9c3RhdGljIHZvaWQgZnJlZV9wYWdlX2xpc3QodTMyIG5wYWdlcywgc3RydWN0IHBhZ2UgKipwYWdlX2xpc3QpXG4tLVxuZHJpdmVycy92ZmlvL3BjaS9tbHg1L2NtZC5jLTQ2OS1cbmRyaXZlcnMvdmZpby9wY2kvbWx4NS9jbWQuYzo0NzA6XHQvKiBVbmRvIGFsbG9jX3BhZ2VzX2J1bGsoKSAqL1xuZHJpdmVycy92ZmlvL3BjaS9tbHg1L2NtZC5jLTQ3MS1cdGZvciAoaSA9IG5wYWdlcyAtIDE7IGkgXHUwMDNlPSAwOyBpLS0pXG4tLVxuZHJpdmVycy92ZmlvL3BjaS9tbHg1L2NtZC5jPTQ5Nj1zdGF0aWMgaW50IG1seDV2Zl9hZGRfcGFnZXMoc3RydWN0IHBhZ2UgKioqcGFnZV9saXN0LCB1bnNpZ25lZCBpbnQgbnBhZ2VzKVxuLS1cbmRyaXZlcnMvdmZpby9wY2kvbWx4NS9jbWQuYy01MDYtXHRmb3IgKDs7KSB7XG5kcml2ZXJzL3ZmaW8vcGNpL21seDUvY21kLmM6NTA3Olx0XHRmaWxsZWQgPSBhbGxvY19wYWdlc19idWxrKEdGUF9LRVJORUxfQUNDT1VOVCwgbnBhZ2VzIC0gZG9uZSxcbmRyaXZlcnMvdmZpby9wY2kvbWx4NS9jbWQuYy01MDgtXHRcdFx0XHRcdCAgKnBhZ2VfbGlzdCAmIzQzOyBkb25lKTtcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZpcnRpby9taWdyYXRlLmM9NjM9c3RhdGljIGludCB2aXJ0aW92Zl9hZGRfbWlncmF0aW9uX3BhZ2VzKHN0cnVjdCB2aXJ0aW92Zl9kYXRhX2J1ZmZlciAqYnVmLFxuLS1cbmRyaXZlcnMvdmZpby9wY2kvdmlydGlvL21pZ3JhdGUuYy03OC1cdGRvIHtcbmRyaXZlcnMvdmZpby9wY2kvdmlydGlvL21pZ3JhdGUuYzo3OTpcdFx0ZmlsbGVkID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfS0VSTkVMX0FDQ09VTlQsIHRvX2ZpbGwsXG5kcml2ZXJzL3ZmaW8vcGNpL3ZpcnRpby9taWdyYXRlLmMtODAtXHRcdFx0XHRcdCAgcGFnZV9saXN0KTtcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZpcnRpby9taWdyYXRlLmM9MTEwPXN0YXRpYyB2b2lkIHZpcnRpb3ZmX2ZyZWVfZGF0YV9idWZmZXIoc3RydWN0IHZpcnRpb3ZmX2RhdGFfYnVmZmVyICpidWYpXG4tLVxuZHJpdmVycy92ZmlvL3BjaS92aXJ0aW8vbWlncmF0ZS5jLTExMy1cbmRyaXZlcnMvdmZpby9wY2kvdmlydGlvL21pZ3JhdGUuYzoxMTQ6XHQvKiBVbmRvIGFsbG9jX3BhZ2VzX2J1bGsoKSAqL1xuZHJpdmVycy92ZmlvL3BjaS92aXJ0aW8vbWlncmF0ZS5jLTExNS1cdGZvcl9lYWNoX3NndGFibGVfcGFnZShcdTAwMjZidWYtXHUwMDNldGFibGUuc2d0LCBcdTAwMjZzZ19pdGVyLCAwKVxuLS1cbmZzL2J0cmZzL2V4dGVudF9pby5jPTY4ND1pbnQgYnRyZnNfYWxsb2NfcGFnZV9hcnJheSh1bnNpZ25lZCBpbnQgbnJfcGFnZXMsIHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheSwgZ2ZwX3QgZ2ZwKVxuLS1cbmZzL2J0cmZzL2V4dGVudF9pby5jLTY5MC1cbmZzL2J0cmZzL2V4dGVudF9pby5jOjY5MTpcdFx0YWxsb2NhdGVkID0gYWxsb2NfcGFnZXNfYnVsayhnZnAsIG5yX3BhZ2VzLCBwYWdlX2FycmF5KTtcbmZzL2J0cmZzL2V4dGVudF9pby5jLTY5Mi1cdFx0aWYgKHVubGlrZWx5KGFsbG9jYXRlZCA9PSBsYXN0KSkge1xuLS1cbmZzL2Vyb2ZzL3p1dGlsLmM9NjU9aW50IHpfZXJvZnNfZ2J1Zl9ncm93c2l6ZSh1bnNpZ25lZCBpbnQgbnJwYWdlcylcbi0tXG5mcy9lcm9mcy96dXRpbC5jLTg5LVx0XHRcdGxhc3QgPSBqO1xuZnMvZXJvZnMvenV0aWwuYzo5MDpcdFx0XHRqID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfS0VSTkVMLCBucnBhZ2VzLCB0bXBfcGFnZXMpO1xuZnMvZXJvZnMvenV0aWwuYy05MS1cdFx0XHRpZiAobGFzdCA9PSBqKVxuLS1cbmZzL2Z1c2UvcmVhZGRpci5jPTMzNj1zdGF0aWMgc3RydWN0IHBhZ2UgKipmdXNlX3JlYWRkaXJfYWxsb2NfYnVmKHN0cnVjdCBmdXNlX2FyZ3NfcGFnZXMgKmFwLCBzaXplX3QgKmJ1ZnNpemUpXG4tLVxuZnMvZnVzZS9yZWFkZGlyLmMtMzQzLVxuZnMvZnVzZS9yZWFkZGlyLmM6MzQ0Olx0bnJfYWxsb2MgPSBhbGxvY19wYWdlc19idWxrKEdGUF9LRVJORUwsIG5yX3BhZ2VzLCBwYWdlcyk7XG5mcy9mdXNlL3JlYWRkaXIuYy0zNDUtXHRpZiAoIW5yX2FsbG9jKVxuLS1cbmZzL25mc2QvbmZzNHN0YXRlLmM9MTMyNj1hbGxvY19pbml0X2Rpcl9kZWxlZyhzdHJ1Y3QgbmZzNF9jbGllbnQgKmNscCwgc3RydWN0IG5mczRfZmlsZSAqZnApXG4tLVxuZnMvbmZzZC9uZnM0c3RhdGUuYy0xMzM3LVxuZnMvbmZzZC9uZnM0c3RhdGUuYzoxMzM4Olx0bnBhZ2VzID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfS0VSTkVMLCBOT1RJRlk0X1BBR0VfQVJSQVlfU0laRSwgbmNuLVx1MDAzZW5jbl9wYWdlcyk7XG5mcy9uZnNkL25mczRzdGF0ZS5jLTEzMzktXHRpZiAobnBhZ2VzICE9IE5PVElGWTRfUEFHRV9BUlJBWV9TSVpFKSB7XG4tLVxuZnMvc3BsaWNlLmM9MzE4PXNzaXplX3QgY29weV9zcGxpY2VfcmVhZChzdHJ1Y3QgZmlsZSAqaW4sIGxvZmZfdCAqcHBvcyxcbi0tXG5mcy9zcGxpY2UuYy0zNDEtXHRwYWdlcyA9IChzdHJ1Y3QgcGFnZSAqKikoYnYgJiM0MzsgbnBhZ2VzKTtcbmZzL3NwbGljZS5jOjM0MjpcdG5wYWdlcyA9IGFsbG9jX3BhZ2VzX2J1bGsoR0ZQX1VTRVIsIG5wYWdlcywgcGFnZXMpO1xuZnMvc3BsaWNlLmMtMzQzLVx0aWYgKCFucGFnZXMpIHtcbi0tXG5pbmNsdWRlL2xpbnV4L2dmcC5oPTIwNz1zdHJ1Y3QgZm9saW8gKl9fZm9saW9fYWxsb2Nfbm9wcm9mKGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG9yZGVyLCBpbnQgcHJlZmVycmVkX25pZCxcbi0tXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIxMC1cbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjExOnVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoZ2ZwX3QgZ2ZwLCBpbnQgcHJlZmVycmVkX25pZCxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjEyLVx0XHRcdFx0bm9kZW1hc2tfdCAqbm9kZW1hc2ssIGludCBucl9wYWdlcyxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjEzLVx0XHRcdFx0c3RydWN0IHBhZ2UgKipwYWdlX2FycmF5KTtcbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjE0OiNkZWZpbmUgX19hbGxvY19wYWdlc19idWxrKC4uLilcdFx0XHRhbGxvY19ob29rcyhhbGxvY19wYWdlc19idWxrX25vcHJvZihfX1ZBX0FSR1NfXykpXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIxNS1cbmluY2x1ZGUvbGludXgvZ2ZwLmg9MjE2PXZvaWQgZnJlZV9wYWdlc19idWxrKHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheSwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyk7XG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIxNy1cbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjE4OnVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mKGdmcF90IGdmcCxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjE5LVx0XHRcdFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjIwLVx0XHRcdFx0c3RydWN0IHBhZ2UgKipwYWdlX2FycmF5KTtcbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjIxOiNkZWZpbmUgIGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5KC4uLilcdFx0XHRcdFxcXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjIyMjpcdGFsbG9jX2hvb2tzKGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZihfX1ZBX0FSR1NfXykpXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIyMy1cbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjI0LS8qIEJ1bGsgYWxsb2NhdGUgb3JkZXItMCBwYWdlcyAqL1xuaW5jbHVkZS9saW51eC9nZnAuaDoyMjU6I2RlZmluZSBhbGxvY19wYWdlc19idWxrKF9nZnAsIF9ucl9wYWdlcywgX3BhZ2VfYXJyYXkpXHRcdFxcXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjIyNjpcdF9fYWxsb2NfcGFnZXNfYnVsayhfZ2ZwLCBudW1hX21lbV9pZCgpLCBOVUxMLCBfbnJfcGFnZXMsIF9wYWdlX2FycmF5KVxuaW5jbHVkZS9saW51eC9nZnAuaC0yMjctXG5pbmNsdWRlL2xpbnV4L2dmcC5oPTIyOD1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmdcbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjI5OmFsbG9jX3BhZ2VzX2J1bGtfbm9kZV9ub3Byb2YoZ2ZwX3QgZ2ZwLCBpbnQgbmlkLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxuaW5jbHVkZS9saW51eC9nZnAuaC0yMzAtXHRcdFx0XHQgICBzdHJ1Y3QgcGFnZSAqKnBhZ2VfYXJyYXkpXG4tLVxuaW5jbHVkZS9saW51eC9nZnAuaC0yMzQtXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjIzNTpcdHJldHVybiBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnAsIG5pZCwgTlVMTCwgbnJfcGFnZXMsIHBhZ2VfYXJyYXkpO1xuaW5jbHVkZS9saW51eC9nZnAuaC0yMzYtfVxuaW5jbHVkZS9saW51eC9nZnAuaC0yMzctXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjIzODojZGVmaW5lIGFsbG9jX3BhZ2VzX2J1bGtfbm9kZSguLi4pXHRcdFx0XHRcXFxuaW5jbHVkZS9saW51eC9nZnAuaDoyMzk6XHRhbGxvY19ob29rcyhhbGxvY19wYWdlc19idWxrX25vZGVfbm9wcm9mKF9fVkFfQVJHU19fKSlcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjQwLVxuLS1cbmlvX3VyaW5nL21lbW1hcC5jPTE3ND1zdGF0aWMgaW50IGlvX3JlZ2lvbl9hbGxvY2F0ZV9wYWdlcyhzdHJ1Y3QgaW9fbWFwcGVkX3JlZ2lvbiAqbXIsXG4tLVxuaW9fdXJpbmcvbWVtbWFwLmMtMTkyLVxuaW9fdXJpbmcvbWVtbWFwLmM6MTkzOlx0bnJfYWxsb2NhdGVkID0gYWxsb2NfcGFnZXNfYnVsa19ub2RlKGdmcCwgTlVNQV9OT19OT0RFLFxuaW9fdXJpbmcvbWVtbWFwLmMtMTk0LVx0XHRcdFx0XHQgICAgIG1yLVx1MDAzZW5yX3BhZ2VzLCBwYWdlcyk7XG4tLVxua2VybmVsL2JwZi9hcmVuYS5jPTY2OD1zdGF0aWMgbG9uZyBhcmVuYV9hbGxvY19wYWdlcyhzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSwgbG9uZyB1YWRkciwgbG9uZyBwYWdlX2NudCwgaW50IG5vZGVfaWQsXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTczMi1cbmtlcm5lbC9icGYvYXJlbmEuYzo3MzM6XHRcdC8qIHplcm9pbmcgaXMgbmVlZGVkLCBzaW5jZSBhbGxvY19wYWdlc19idWxrKCkgb25seSBmaWxscyBpbiBub24temVybyBlbnRyaWVzICovXG5rZXJuZWwvYnBmL2FyZW5hLmMtNzM0LVx0XHRtZW1zZXQocGFnZXMsIDAsIHRoaXNfYmF0Y2ggKiBzaXplb2Yoc3RydWN0IHBhZ2UgKikpO1xuLS1cbmxpYi90ZXN0X3ZtYWxsb2MuYz0zOTE9dm1fbWFwX3JhbV90ZXN0KHZvaWQpXG4tLVxubGliL3Rlc3Rfdm1hbGxvYy5jLTQwMy1cbmxpYi90ZXN0X3ZtYWxsb2MuYzo0MDQ6XHRucl9hbGxvY2F0ZWQgPSBhbGxvY19wYWdlc19idWxrKEdGUF9LRVJORUwsIG1hcF9ucl9wYWdlcywgcGFnZXMpO1xubGliL3Rlc3Rfdm1hbGxvYy5jLTQwNS1cdGlmIChucl9hbGxvY2F0ZWQgIT0gbWFwX25yX3BhZ2VzKVxuLS1cbmxpYi90ZXN0cy9rdW5pdF9pb3ZfaXRlci5jPTUxPXN0YXRpYyB2b2lkICpfX2luaXQgaW92X2t1bml0X2NyZWF0ZV9idWZmZXIoc3RydWN0IGt1bml0ICp0ZXN0LFxuLS1cbmxpYi90ZXN0cy9rdW5pdF9pb3ZfaXRlci5jLTY2LVx0XHRsYXN0ID0gZ290O1xubGliL3Rlc3RzL2t1bml0X2lvdl9pdGVyLmM6Njc6XHRcdGdvdCA9IGFsbG9jX3BhZ2VzX2J1bGsoR0ZQX0tFUk5FTCwgbnBhZ2VzLCBwYWdlcyk7XG5saWIvdGVzdHMva3VuaXRfaW92X2l0ZXIuYy02OC1cbi0tXG5tbS9hbGxvY190YWcuYz03Nzc9c3RhdGljIGludCB2bV9tb2R1bGVfdGFnc19wb3B1bGF0ZSh2b2lkKVxuLS1cbm1tL2FsbG9jX3RhZy5jLTc5My1cbm1tL2FsbG9jX3RhZy5jOjc5NDpcdFx0XHRhbGxvY2F0ZWQgPSBhbGxvY19wYWdlc19idWxrX25vZGUoR0ZQX0tFUk5FTCB8IF9fR0ZQX05PV0FSTixcbm1tL2FsbG9jX3RhZy5jLTc5NS1cdFx0XHRcdE5VTUFfTk9fTk9ERSwgbW9yZV9wYWdlcyAtIG5yLCBuZXh0X3BhZ2UgJiM0MzsgbnIpO1xuLS1cbm1tL2thc2FuL3NoYWRvdy5jPTMyNz1zdGF0aWMgdm9pZCBfX19mcmVlX3BhZ2VzX2J1bGsoc3RydWN0IHBhZ2UgKipwYWdlcywgaW50IG5yX3BhZ2VzKVxuLS1cbm1tL2thc2FuL3NoYWRvdy5jLTMzOC1cbm1tL2thc2FuL3NoYWRvdy5jOjMzOTpzdGF0aWMgaW50IF9fX2FsbG9jX3BhZ2VzX2J1bGsoc3RydWN0IHBhZ2UgKipwYWdlcywgaW50IG5yX3BhZ2VzLCBnZnBfdCBnZnBfbWFzaylcbm1tL2thc2FuL3NoYWRvdy5jLTM0MC17XG4tLVxubW0va2FzYW4vc2hhZG93LmMtMzQ0LVx0d2hpbGUgKG5yX3BhZ2VzKSB7XG5tbS9rYXNhbi9zaGFkb3cuYzozNDU6XHRcdG5yX3BvcHVsYXRlZCA9IGFsbG9jX3BhZ2VzX2J1bGsoZ2ZwX21hc2ssIG5yX3BhZ2VzLCBwYWdlcyk7XG5tbS9rYXNhbi9zaGFkb3cuYy0zNDYtXHRcdGlmICghbnJfcG9wdWxhdGVkKSB7XG4tLVxubW0va2FzYW4vc2hhZG93LmM9MzU3PXN0YXRpYyBpbnQgX19rYXNhbl9wb3B1bGF0ZV92bWFsbG9jX2RvKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLCBnZnBfdCBnZnBfbWFzaylcbi0tXG5tbS9rYXNhbi9zaGFkb3cuYy0zNjktXHRcdG5yX3BhZ2VzID0gbWluKG5yX3RvdGFsLCBQQUdFX1NJWkUgLyBzaXplb2YoZGF0YS5wYWdlc1swXSkpO1xubW0va2FzYW4vc2hhZG93LmM6MzcwOlx0XHRyZXQgPSBfX19hbGxvY19wYWdlc19idWxrKGRhdGEucGFnZXMsIG5yX3BhZ2VzLCBnZnBfbWFzayk7XG5tbS9rYXNhbi9zaGFkb3cuYy0zNzEtXHRcdGlmIChyZXQpXG4tLVxubW0vbWVtcG9saWN5LmM9MjU4OT1FWFBPUlRfU1lNQk9MKGZvbGlvX2FsbG9jX25vcHJvZik7XG5tbS9tZW1wb2xpY3kuYy0yNTkwLVxubW0vbWVtcG9saWN5LmM6MjU5MTpzdGF0aWMgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX2ludGVybGVhdmUoZ2ZwX3QgZ2ZwLFxubW0vbWVtcG9saWN5LmMtMjU5Mi1cdFx0c3RydWN0IG1lbXBvbGljeSAqcG9sLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxuLS1cbm1tL21lbXBvbGljeS5jLTI2MDctXHRcdGlmIChkZWx0YSkge1xubW0vbWVtcG9saWN5LmM6MjYwODpcdFx0XHRucl9hbGxvY2F0ZWQgPSBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnAsXG5tbS9tZW1wb2xpY3kuYy0yNjA5LVx0XHRcdFx0XHRpbnRlcmxlYXZlX25vZGVzKHBvbCksIE5VTEwsXG4tLVxubW0vbWVtcG9saWN5LmMtMjYxMy1cdFx0fSBlbHNlIHtcbm1tL21lbXBvbGljeS5jOjI2MTQ6XHRcdFx0bnJfYWxsb2NhdGVkID0gYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoZ2ZwLFxubW0vbWVtcG9saWN5LmMtMjYxNS1cdFx0XHRcdFx0aW50ZXJsZWF2ZV9ub2Rlcyhwb2wpLCBOVUxMLFxuLS1cbm1tL21lbXBvbGljeS5jLTI2MjUtXG5tbS9tZW1wb2xpY3kuYzoyNjI2OnN0YXRpYyB1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZShnZnBfdCBnZnAsXG5tbS9tZW1wb2xpY3kuYy0yNjI3LVx0XHRzdHJ1Y3QgbWVtcG9saWN5ICpwb2wsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG4tLVxubW0vbWVtcG9saWN5LmMtMjY2NC1cdFx0bm9kZV9wYWdlcyA9IG1pbihyZW1fcGFnZXMsIHdlaWdodCk7XG5tbS9tZW1wb2xpY3kuYzoyNjY1Olx0XHRucl9hbGxvY2F0ZWQgPSBfX2FsbG9jX3BhZ2VzX2J1bGsoZ2ZwLCBub2RlLCBOVUxMLCBub2RlX3BhZ2VzLFxubW0vbWVtcG9saWN5LmMtMjY2Ni1cdFx0XHRcdFx0XHQgIHBhZ2VfYXJyYXkpO1xuLS1cbm1tL21lbXBvbGljeS5jLTI3MDEtXHQvKlxubW0vbWVtcG9saWN5LmM6MjcwMjpcdCAqIENhbGN1bGF0ZSByb3VuZHMvcGFydGlhbCByb3VuZHMgdG8gbWluaW1pemUgX19hbGxvY19wYWdlc19idWxrIGNhbGxzLlxubW0vbWVtcG9saWN5LmMtMjcwMy1cdCAqIFRyYWNrIHdoaWNoIG5vZGUgd2VpZ2h0ZWQgaW50ZXJsZWF2ZSBzaG91bGQgcmVzdW1lIGZyb20uXG4tLVxubW0vbWVtcG9saWN5LmMtMjcyOS1cdFx0XHRicmVhaztcbm1tL21lbXBvbGljeS5jOjI3MzA6XHRcdG5yX2FsbG9jYXRlZCA9IF9fYWxsb2NfcGFnZXNfYnVsayhnZnAsIG5vZGUsIE5VTEwsIG5vZGVfcGFnZXMsXG5tbS9tZW1wb2xpY3kuYy0yNzMxLVx0XHRcdFx0XHRcdCAgcGFnZV9hcnJheSk7XG4tLVxubW0vbWVtcG9saWN5LmMtMjc0My1cbm1tL21lbXBvbGljeS5jOjI3NDQ6c3RhdGljIHVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19wcmVmZXJyZWRfbWFueShnZnBfdCBnZnAsIGludCBuaWQsXG5tbS9tZW1wb2xpY3kuYy0yNzQ1LVx0XHRzdHJ1Y3QgbWVtcG9saWN5ICpwb2wsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG4tLVxubW0vbWVtcG9saWN5LmMtMjc1My1cbm1tL21lbXBvbGljeS5jOjI3NTQ6XHRucl9hbGxvY2F0ZWQgID0gYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YocHJlZmVycmVkX2dmcCwgbmlkLCBcdTAwMjZwb2wtXHUwMDNlbm9kZXMsXG5tbS9tZW1wb2xpY3kuYy0yNzU1LVx0XHRcdFx0XHQgICBucl9wYWdlcywgcGFnZV9hcnJheSk7XG4tLVxubW0vbWVtcG9saWN5LmMtMjc1Ny1cdGlmIChucl9hbGxvY2F0ZWQgXHUwMDNjIG5yX3BhZ2VzKVxubW0vbWVtcG9saWN5LmM6Mjc1ODpcdFx0bnJfYWxsb2NhdGVkICYjNDM7PSBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnAsIG51bWFfbm9kZV9pZCgpLCBOVUxMLFxubW0vbWVtcG9saWN5LmMtMjc1OS1cdFx0XHRcdG5yX3BhZ2VzIC0gbnJfYWxsb2NhdGVkLFxuLS1cbm1tL21lbXBvbGljeS5jLTI3NjktICovXG5tbS9tZW1wb2xpY3kuYzoyNzcwOnVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mKGdmcF90IGdmcCxcbm1tL21lbXBvbGljeS5jLTI3NzEtXHRcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsIHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheSlcbi0tXG5tbS9tZW1wb2xpY3kuYy0yNzgwLVx0aWYgKHBvbC1cdTAwM2Vtb2RlID09IE1QT0xfSU5URVJMRUFWRSlcbm1tL21lbXBvbGljeS5jOjI3ODE6XHRcdHJldHVybiBhbGxvY19wYWdlc19idWxrX2ludGVybGVhdmUoZ2ZwLCBwb2wsXG5tbS9tZW1wb2xpY3kuYy0yNzgyLVx0XHRcdFx0XHRcdFx0IG5yX3BhZ2VzLCBwYWdlX2FycmF5KTtcbi0tXG5tbS9tZW1wb2xpY3kuYy0yNzg0LVx0aWYgKHBvbC1cdTAwM2Vtb2RlID09IE1QT0xfV0VJR0hURURfSU5URVJMRUFWRSlcbm1tL21lbXBvbGljeS5jOjI3ODU6XHRcdHJldHVybiBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmUoXG5tbS9tZW1wb2xpY3kuYy0yNzg2LVx0XHRcdFx0ICBnZnAsIHBvbCwgbnJfcGFnZXMsIHBhZ2VfYXJyYXkpO1xuLS1cbm1tL21lbXBvbGljeS5jLTI3ODgtXHRpZiAocG9sLVx1MDAzZW1vZGUgPT0gTVBPTF9QUkVGRVJSRURfTUFOWSlcbm1tL21lbXBvbGljeS5jOjI3ODk6XHRcdHJldHVybiBhbGxvY19wYWdlc19idWxrX3ByZWZlcnJlZF9tYW55KGdmcCxcbm1tL21lbXBvbGljeS5jLTI3OTAtXHRcdFx0XHRudW1hX25vZGVfaWQoKSwgcG9sLCBucl9wYWdlcywgcGFnZV9hcnJheSk7XG4tLVxubW0vbWVtcG9saWN5LmMtMjc5My1cdG5vZGVtYXNrID0gcG9saWN5X25vZGVtYXNrKGdmcCwgcG9sLCBOT19JTlRFUkxFQVZFX0lOREVYLCBcdTAwMjZuaWQpO1xubW0vbWVtcG9saWN5LmM6Mjc5NDpcdHJldHVybiBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnAsIG5pZCwgbm9kZW1hc2ssXG5tbS9tZW1wb2xpY3kuYy0yNzk1LVx0XHRcdFx0ICAgICAgIG5yX3BhZ2VzLCBwYWdlX2FycmF5KTtcbi0tXG5tbS9wYWdlX2FsbG9jLmM9NTA5MT1zdGF0aWMgaW5saW5lIGJvb2wgcHJlcGFyZV9hbGxvY19wYWdlcyhnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyLFxuLS1cbm1tL3BhZ2VfYWxsb2MuYy01MTM5LS8qXG5tbS9wYWdlX2FsbG9jLmM6NTE0MDogKiBfX2FsbG9jX3BhZ2VzX2J1bGsgLSBBbGxvY2F0ZSBhIG51bWJlciBvZiBvcmRlci0wIHBhZ2VzIHRvIGFuIGFycmF5XG5tbS9wYWdlX2FsbG9jLmMtNTE0MS0gKiBAZ2ZwOiBHRlAgZmxhZ3MgZm9yIHRoZSBhbGxvY2F0aW9uXG4tLVxubW0vcGFnZV9hbGxvYy5jLTUxNTktICovXG5tbS9wYWdlX2FsbG9jLmM6NTE2MDp1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKGdmcF90IGdmcCwgaW50IHByZWZlcnJlZF9uaWQsXG5tbS9wYWdlX2FsbG9jLmMtNTE2MS1cdFx0XHRub2RlbWFza190ICpub2RlbWFzaywgaW50IG5yX3BhZ2VzLFxuLS1cbm1tL3BhZ2VfYWxsb2MuYy01MzAxLX1cbm1tL3BhZ2VfYWxsb2MuYzo1MzAyOkVYUE9SVF9TWU1CT0xfR1BMKGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKTtcbm1tL3BhZ2VfYWxsb2MuYy01MzAzLVxuLS1cbm1tL3NsdWIuYz03NDI2PXN0YXRpYyBib29sIF9fa21lbV9jYWNoZV9hbGxvY19idWxrKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBmbGFncyxcbi0tXG5tbS9zbHViLmMtNzQ3MC0gKlxubW0vc2x1Yi5jOjc0NzE6ICogVW5saWtlIGFsbG9jX3BhZ2VzX2J1bGsoKSwgdGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBjaGVjayBmb3IgYWxyZWFkeSBhbGxvY2F0ZWRcbm1tL3NsdWIuYy03NDcyLSAqIG9iamVjdHMgaW4gQHAsIGFuZCB0aHVzIHRoZSBjYWxsZXIgZG9lcyBub3QgbmVlZCB0byB6ZXJvIGl0LlxuLS1cbm1tL3ZtYWxsb2MuYz0zNjc2PXZtX2FyZWFfYWxsb2NfcGFnZXMoZ2ZwX3QgZ2ZwLCBpbnQgbmlkLFxuLS1cbm1tL3ZtYWxsb2MuYy0zNzQzLVx0XHRcdGlmIChJU19FTkFCTEVEKENPTkZJR19OVU1BKSBcdTAwMjZcdTAwMjYgbmlkID09IE5VTUFfTk9fTk9ERSlcbm1tL3ZtYWxsb2MuYzozNzQ0Olx0XHRcdFx0bnIgPSBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2YoZ2ZwLFxubW0vdm1hbGxvYy5jLTM3NDUtXHRcdFx0XHRcdFx0XHRucl9wYWdlc19yZXF1ZXN0LFxuLS1cbm1tL3ZtYWxsb2MuYy0zNzQ3LVx0XHRcdGVsc2Vcbm1tL3ZtYWxsb2MuYzozNzQ4Olx0XHRcdFx0bnIgPSBhbGxvY19wYWdlc19idWxrX25vZGVfbm9wcm9mKGdmcCwgbmlkLFxubW0vdm1hbGxvYy5jLTM3NDktXHRcdFx0XHRcdFx0XHRucl9wYWdlc19yZXF1ZXN0LFxuLS1cbm5ldC9jb3JlL3BhZ2VfcG9vbC5jPTYxMT1zdGF0aWMgbm9pbmxpbmUgbmV0bWVtX3JlZiBfX3BhZ2VfcG9vbF9hbGxvY19uZXRtZW1zX3Nsb3coc3RydWN0IHBhZ2VfcG9vbCAqcG9vbCxcbi0tXG5uZXQvY29yZS9wYWdlX3Bvb2wuYy02MzMtXG5uZXQvY29yZS9wYWdlX3Bvb2wuYzo2MzQ6XHQvKiBNYXJrIGVtcHR5IGFsbG9jLmNhY2hlIHNsb3RzIFwmIzM0O2VtcHR5XCYjMzQ7IGZvciBhbGxvY19wYWdlc19idWxrICovXG5uZXQvY29yZS9wYWdlX3Bvb2wuYy02MzUtXHRtZW1zZXQoXHUwMDI2cG9vbC1cdTAwM2VhbGxvYy5jYWNoZSwgMCwgc2l6ZW9mKHZvaWQgKikgKiBidWxrKTtcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTYzNi1cbm5ldC9jb3JlL3BhZ2VfcG9vbC5jOjYzNzpcdG5yX3BhZ2VzID0gYWxsb2NfcGFnZXNfYnVsa19ub2RlKGdmcCwgcG9vbC1cdTAwM2VwLm5pZCwgYnVsayxcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTYzOC1cdFx0XHRcdFx0IChzdHJ1Y3QgcGFnZSAqKilwb29sLVx1MDAzZWFsbG9jLmNhY2hlKTtcbi0tXG5uZXQvc3VucnBjL3N2Y194cHJ0LmM9Njg3PXN0YXRpYyBib29sIHN2Y19maWxsX3BhZ2VzKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsIHN0cnVjdCBwYWdlICoqcGFnZXMsXG4tLVxubmV0L3N1bnJwYy9zdmNfeHBydC5jLTY5Mi1cdGZvciAoZmlsbGVkID0gMDsgZmlsbGVkIFx1MDAzYyBucGFnZXM7IGZpbGxlZCA9IHJldCkge1xubmV0L3N1bnJwYy9zdmNfeHBydC5jOjY5MzpcdFx0cmV0ID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfS0VSTkVMLCBucGFnZXMsIHBhZ2VzKTtcbm5ldC9zdW5ycGMvc3ZjX3hwcnQuYy02OTQtXHRcdGlmIChyZXQgXHUwMDNlIGZpbGxlZClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTI6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQyNTcKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAxNTE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIFBhdGNoIGZvciBCdWxrIFBhZ2UgQWxsb2NhdGlvbiBhbmQgS01TQU4gSW50ZWdyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcywgJiMzNDtXaGVyZSBpcyBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIHVzZWQ/JiMzNDsuIFR1cm5zIG91dCwgaXQmIzM5O3MgdXNlZCAqZXZlcnl3aGVyZSogLSBgdm1hbGxvY2AsIGBwYWdlX3Bvb2xgLCBgaW9fdXJpbmdgLCBgc3BsaWNlYCwgYGJ0cmZzYCwgYGJwZl9hcmVuYWAsIGBzdW5ycGNgLCBhbmQgc28gb24uIFNvLCBpdCYjMzk7cyBkZWZpbml0ZWx5IGEgY29yZSBmdW5jdGlvbiwgd2hpY2ggaW1tZWRpYXRlbHkgY2F0Y2hlcyBteSBhdHRlbnRpb24uCgpUaGUgcGF0Y2ggaXRzZWxmIGlzIGFkZGluZyBgdHJhY2VfbW1fcGFnZV9hbGxvY2AgYW5kIGBrbXNhbl9hbGxvY19wYWdlYCB0byB0aGUgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCBmdW5jdGlvbiBpbiBgbW0vcGFnZV9hbGxvYy5jYC4gTXkgbmV4dCBxdWVzdGlvbiBpcywgJiMzNDtJcyB0aGlzIHdvcnRoIGZ1enppbmc/JiMzNDsuCgpJdCBjZXJ0YWlubHkgbW9kaWZpZXMgdGhlIHJ1bnRpbWUgYmVoYXZpb3Ig4oCTIEtNU0FOIG1ldGFkYXRhIGluaXRpYWxpemF0aW9uIGFuZCB0cmFjZXBvaW50IGVtaXNzaW9uIGFyZSBiZWluZyBhZGRlZC4gVGhpcyBkaXJlY3RseSBhbHRlcnMgaG93IHBhZ2Ugc2hhZG93IG1ldGFkYXRhIGlzIGhhbmRsZWQsIHBvdGVudGlhbGx5IGZpeGluZyB1bmluaXQgb3IgdHJhY2tpbmcgaXNzdWVzIHdoZW4gcGFnZXMgYXJlIGFsbG9jYXRlZCB2aWEgdGhlIFBDUCBsaXN0IGluIHRoZSBidWxrIGFsbG9jYXRvci4gVGhhdCYjMzk7cyBhIGdvb2Qgc2lnbi4KCkFjY29yZGluZyB0byB0aGUgJiMzNDtXb3J0aEZ1enppbmcmIzM0OyBjcml0ZXJpYSwgaXQmIzM5O3MgYSAmIzM0O3llcyYjMzQ7IHNpbmNlIGl0IHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpbiBhIGNvcmUgc3Vic3lzdGVtIChtZW1vcnkgbWFuYWdlbWVudCksIGFuZCB0aGlzIGlzIGxvZ2ljIG1vZGlmaWNhdGlvbi4KCk5vdywgdGhlIHJlYWwgcXVlc3Rpb246IGFyZSBhbnkgb2YgdGhlc2UgYWZmZWN0ZWQgZnVuY3Rpb25zIHViaXF1aXRvdXM/IEkgaGF2ZSB0byBjb25zaWRlciB0aGUgJiMzNDtBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFMmIzM0OyBydWxlLiBJIG5lZWQgdG8gYmUgY2FyZWZ1bCBub3QgdG8gZGlsdXRlIHRoZSBmdXp6aW5nIGVmZm9ydC4gSSBrbm93IHRoYXQgYGttYWxsb2NgIG9yIGBfX2FsbG9jX3BhZ2VzX25vcHJvZmAgYXJlIG91dCBzaW5jZSB0aGV5IGFyZSB1YmlxdWl0b3VzLiBCdXQgaXMgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCBnZW5lcmFsIG9yIGlzIGl0IG1vcmUgc3BlY2lmaWMgdG8gYnVsayBhbGxvY2F0aW9uIGNhbGxzPyBJdCYjMzk7cyBjYWxsZWQgYnkgdGhlIGJ1bGsgYWxsb2NhdGlvbiBjYWxsZXJzIGxpa2UgYHZtX2FyZWFfYWxsb2NfcGFnZXNgLCBgYnRyZnNfYWxsb2NfcGFnZV9hcnJheWAsIGV0Yy4gSSB0aGluayBpdCBpcyBhIHNwZWNpZmljIGJ1bGsgYWxsb2NhdG9yLgoKQnV0IHdhaXQsIGBrbXNhbl9hbGxvY19wYWdlYCBpcyBjYWxsZWQgZnJvbSBgX19hbGxvY19mcm96ZW5fcGFnZXNfbm9wcm9mYCwgd2hpY2ggaXMgY2FsbGVkIHdoZW5ldmVyIEtNU0FOIGlzIGVuYWJsZWQuICBUaGVyZWZvcmUsIGl0IGlzIHViaXF1aXRvdXMgaWYgS01TQU4gaXMgZW5hYmxlZC4KClNvLCBJIHRoaW5rIEkgY2FuIGluY2x1ZGUgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCBpbiBgRm9jdXNTeW1ib2xzYCBzaW5jZSB0aGF0JiMzOTtzIHdoZXJlIHRoZSAqc3BlY2lmaWMqIGNoYW5nZSBpcy4gVGhlIHJlbGV2YW50IGZ1bmN0aW9ucyBhcmU6IGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAsIGBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2ZgLCBgdm1fYXJlYV9hbGxvY19wYWdlc2AsIGBhcmVuYV9hbGxvY19wYWdlc2AsIGBpb19yZWdpb25fYWxsb2NhdGVfcGFnZXNgLCBhbmQgYGNvcHlfc3BsaWNlX3JlYWRgLgoKRmluYWxseSwgZG9lcyB0aGlzIGNvZGUgZGVwZW5kIG9uIGFueSBzcGVjaWFsIGNvbmZpZz8gWWVzLCBga21zYW5fYWxsb2NfcGFnZWAgaXMgcGFydCBvZiBLTVNBTiAoYENPTkZJR19LTVNBTmApLCBidXQgdGhlIGJ1bGsgYWxsb2NhdGlvbiBjb2RlIGl0c2VsZiBpcyBhbHdheXMgY29tcGlsZWQuIFNvLCBJIGhhdmUgdG8gYmUgbWluZGZ1bCB0aGF0IHRoZSBLTVNBTiBwYXJ0IG1pZ2h0IG5vdCBhbHdheXMgYmUgYWN0aXZlLiBCdXQgdGhlIG1vZGlmaWNhdGlvbiB0byBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIGl0c2VsZiBpcyBhbHdheXMgcHJlc2VudCwgd2hpY2ggbWFrZXMgaXQgYSBnb29kIHRhcmdldC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTI6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS01TQU4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMjowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjQ1NwoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJiMzOTttIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyBLTVNBTiBpbiB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgSSYjMzk7bSB0aGlua2luZywgJiMzNDtLTVNBTi4uLiB3aGVyZSBkb2VzIHRoYXQgZml0IGludG8gdGhlIHBpY3R1cmU/JiMzNDsgTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGNoZWNrIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhpcyBpcyBzb21ldGhpbmcgdGhhdCYjMzk7cyBldmVuICplbmFibGVkKiBvciAqY29uZmlndXJhYmxlKiBpbiB0aGUgY3VycmVudCBidWlsZC4gU28sIEkmIzM5O20gZ29pbmcgdG8ga2ljayBvZmYgYSBzZWFyY2ggZm9yICYjMzQ7S01TQU4mIzM0OyB3aXRoaW4gS2NvbmZpZy4gVGhhdCBzZWVtcyBsaWtlIHRoZSBsb2dpY2FsIGZpcnN0IHN0ZXAgdG8gZGV0ZXJtaW5lIGhvdyBkZWVwIHRoaXMgcmFiYml0IGhvbGUgZ29lcy4gSSBuZWVkIHRvIHF1aWNrbHkgZXN0YWJsaXNoIGlmIGl0JiMzOTtzIGV2ZW4gcHJlc2VudCBhcyBhIGNvbmZpZ3VyYWJsZSBvcHRpb24gYW5kIHdoYXQgZGVwZW5kZW5jaWVzIGl0IGhhcy4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiYXNlIHRvIGdvIGZyb20sIGVpdGhlciB0byBsb29rIGF0IHRoZSBvdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbnMsIG9yIHRvIHVzZSB0aGlzIGluZm9ybWF0aW9uIHRvIGRldGVybWluZSBob3cgdGhlIGNvbmZpZ3VyYXRpb24gYWZmZWN0cyB0aGUgYnVpbGQgaXRzZWxmLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMjowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS01TQU4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtsaWIvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2xpYi9LY29uZmlnLmttc2FuPTU9Y29uZmlnIEhBVkVfS01TQU5fQ09NUElMRVJcbi0tXG5saWIvS2NvbmZpZy5rbXNhbi03LVxubGliL0tjb25maWcua21zYW46ODpjb25maWcgS01TQU5cbmxpYi9LY29uZmlnLmttc2FuLTktXHRib29sIFwmIzM0O0tNU0FOOiBkZXRlY3RvciBvZiB1bmluaXRpYWxpemVkIHZhbHVlcyB1c2VcJiMzNDtcbi0tXG5saWIvS2NvbmZpZy5rbXNhbj0yNj1pZiBLTVNBTlxubGliL0tjb25maWcua21zYW4tMjctXG5saWIvS2NvbmZpZy5rbXNhbjoyODpjb25maWcgS01TQU5fQ0hFQ0tfUEFSQU1fUkVUVkFMXG5saWIvS2NvbmZpZy5rbXNhbi0yOS1cdGJvb2wgXCYjMzQ7Q2hlY2sgZm9yIHVuaW5pdGlhbGl6ZWQgdmFsdWVzIHBhc3NlZCB0byBhbmQgcmV0dXJuZWQgZnJvbSBmdW5jdGlvbnNcJiMzNDtcbi0tXG5saWIvS2NvbmZpZy5rbXNhbi00MS1cbmxpYi9LY29uZmlnLmttc2FuOjQyOmNvbmZpZyBLTVNBTl9LVU5JVF9URVNUXG5saWIvS2NvbmZpZy5rbXNhbi00My1cdHRyaXN0YXRlIFwmIzM0O0tNU0FOIGludGVncmF0aW9uIHRlc3Qgc3VpdGVcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMjowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjkwNgoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIENvbmZpZ3VyYXRpb24gQ2hlY2sqKgoKT2theSwgc28gYENPTkZJR19LTVNBTmAgaXMgZGVmaW5lZCB3aXRoaW4gYGxpYi9LY29uZmlnLmttc2FuYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGFjdCBvZiBlbmFibGluZyBvciBkaXNhYmxpbmcgdGhpcyBmZWF0dXJlLCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyBtZW1vcnkgYWxsb2NhdGlvbi4gTGV0JiMzOTtzIGRlbHZlIGludG8gYGluY2x1ZGUvbGludXgva21zYW4uaGAgcmlnaHQgYXdheS4gSSYjMzk7bGwgbmVlZCB0byBleGFtaW5lIHRoZSBkZWZpbml0aW9uIG9mIGBrbXNhbl9hbGxvY19wYWdlYCB1bmRlciBib3RoIHNjZW5hcmlvcyAtIHdpdGggYENPTkZJR19LTVNBTmAgZW5hYmxlZCBhbmQgZGlzYWJsZWQgLSB0byBzZWUgaG93IHRoZSBpbXBsZW1lbnRhdGlvbiBjaGFuZ2VzLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSByZWFsIGRpZmZlcmVuY2Ugd2lsbCBiZS4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGF0JiMzOTtzIHdoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDEyOjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ttc2FuX2FsbG9jX3BhZ2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2ttc2FuLmg9NTc9Ym9vbCBfX2luaXQgX19tdXN0X2NoZWNrIGttc2FuX21lbWJsb2NrX2ZyZWVfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UsXG4tLVxuaW5jbHVkZS9saW51eC9rbXNhbi5oLTYwLS8qKlxuaW5jbHVkZS9saW51eC9rbXNhbi5oOjYxOiAqIGttc2FuX2FsbG9jX3BhZ2UoKSAtIE5vdGlmeSBLTVNBTiBhYm91dCBhbiBhbGxvY19wYWdlcygpIGNhbGwuXG5pbmNsdWRlL2xpbnV4L2ttc2FuLmgtNjItICogQHBhZ2U6ICBzdHJ1Y3QgcGFnZSBwb2ludGVyIHJldHVybmVkIGJ5IGFsbG9jX3BhZ2VzKCkuXG4tLVxuaW5jbHVkZS9saW51eC9rbXNhbi5oLTY4LSAqL1xuaW5jbHVkZS9saW51eC9rbXNhbi5oOjY5OnZvaWQga21zYW5fYWxsb2NfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyLCBnZnBfdCBmbGFncyk7XG5pbmNsdWRlL2xpbnV4L2ttc2FuLmgtNzAtXG4tLVxuaW5jbHVkZS9saW51eC9rbXNhbi5oPTMxNT1zdGF0aWMgaW5saW5lIHZvaWQga21zYW5fdGFza19leGl0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaylcbi0tXG5pbmNsdWRlL2xpbnV4L2ttc2FuLmgtMzE4LVxuaW5jbHVkZS9saW51eC9rbXNhbi5oOjMxOTpzdGF0aWMgaW5saW5lIHZvaWQga21zYW5fYWxsb2NfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyLFxuaW5jbHVkZS9saW51eC9rbXNhbi5oLTMyMC1cdFx0XHRcdCAgICBnZnBfdCBmbGFncylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTI6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc0MTMKCQkJCQkJCW91dHB1dDogMTMzCgkJCQkJCQl0aG91Z2h0czogMzQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIFRoaXMgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBteSBicmFpbiB6ZXJvZXMgaW4gb24gdGhlIGNvbmRpdGlvbmFsIGxvZ2ljLiBga21zYW5fYWxsb2NfcGFnZSgpYCBpcyBhbiBlbXB0eSBpbmxpbmUgdW5sZXNzIGBDT05GSUdfS01TQU5gIGlzIGZsaXBwZWQgb24uIElmIEtNU0FOICppcyogZW5hYmxlZCwgaXQga2lja3Mgb2ZmIEtNU0FOJiMzOTtzIHNoYWRvdyBhbmQgb3JpZ2luIGluaXRpYWxpemF0aW9uLiBBbmQgdGhlbiB0aGVyZSYjMzk7cyBgdHJhY2VfbW1fcGFnZV9hbGxvY2AsIHdoaWNoIGlzIGd1YXJkZWQgYnkgZWl0aGVyIHRyYWNpbmcgb3IgYENPTkZJR19FVkVOVF9UUkFDSU5HYC4gU28sIHRvIGFjdHVhbGx5IGV4ZXJjaXNlIHRoZSBjaGFuZ2VzIG1hZGUgYnkgdGhpcyBwYXRjaCwgS01TQU4gaXMgYWJzb2x1dGVseSBrZXkuIFRoYXTigJlzIHRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gcmVtZW1iZXIuCgpMZXQmIzM5O3MgZG8gYSBxdWljayBydW5kb3duIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZy4gSSBzZWUgdGhhdCBgV29ydGhGdXp6aW5nYCBpcyBzZXQgdG8gYHRydWVgLCB3aGljaCBtYWtlcyBzZW5zZSBiZWNhdXNlIHdlJiMzOTtyZSB0b3VjaGluZyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGZ1bmN0aW9ucy4gVGhlIGBSZWFzb25pbmdgIHNlY3Rpb24gaGl0cyB0aGUgbmFpbCBvbiB0aGUgaGVhZCDigJMgdGhpcyBwYXRjaCBpcyBtb2RpZnlpbmcgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCAoYW5kIGl0cyBtZW1wb2xpY3kgY291bnRlcnBhcnQpIGluIGBtbS9wYWdlX2FsbG9jLmNgIGFuZCBpbnRyb2R1Y2luZyBjYWxscyB0byBgdHJhY2VfbW1fcGFnZV9hbGxvY2AgYW5kIGBrbXNhbl9hbGxvY19wYWdlYC4gVGhlIHB1cnBvc2UgaXMgdG8gY29ycmVjdGx5IGluaXRpYWxpemUgS01TQU4gc2hhZG93IG1ldGFkYXRhIGZvciBidWxrLWFsbG9jYXRlZCBwYWdlcy4gSSBhZ3JlZSwgdGhpcyBpcyBhIGNsZWFyIG1vZGlmaWNhdGlvbiB0byB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudC4KCkkgY29uZmlybSB0aGUgYEZvY3VzU3ltYm9sc2AgYXJlIGFwcHJvcHJpYXRlbHkgc2NvcGVkIHRvIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAgYW5kIGl0cyBtZW1wb2xpY3kgdmFyaWFudC4gTm8gd2lkZXIgc2NvcGUgbmVlZGVkIGFzIHRoZSBjb25jZXJuIGlzIGJ1bGsgYWxsb2NhdGlvbi4KCkFuZCBvYnZpb3VzbHksIHRoZSBgRW5hYmxlQ29uZmlnc2AgYXJlIGNvcnJlY3RseSBzcGVjaWZpZWQgYXMgYEtNU0FOYC4gV2UgbmVlZCBLTVNBTiBlbmFibGVkIGZvciBhbnkgb2YgdGhpcyBsb2dpYyB0byBhY3R1YWxseSBkbyBhbnl0aGluZy4KCkhtbSwgYW0gSSBtaXNzaW5nIGFueXRoaW5nPyBJIHRoaW5rIEkmIzM5O3ZlIGNvdmVyZWQgYWxsIHRoZSBiYXNlcy4gVGhlIHN5bWJvbHMgYW5kIGNvbmZpZ3Mgc2VlbSByaWdodCwgYW5kIHRoZXJlIGFyZW4mIzM5O3QgYW55IG90aGVyIG9idmlvdXMgZGVwZW5kZW5jaWVzIG9yIGNvbmZpZ3VyYXRpb25zIEkgbmVlZCB0byB3b3JyeSBhYm91dC4KClRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLiBJIHRoaW5rIEkmIzM5O20gZ29vZCB0byBnby4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTI6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tNU0FOJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YWxsb2NfcGFnZXNfYnVsa19ub3Byb2YmIzM0OywKICAgICYjMzQ7YWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIG1tL3BhZ2VfYWxsb2MuYyBieSBhZGRpbmcgdHJhY2VfbW1fcGFnZV9hbGxvYyBhbmQga21zYW5fYWxsb2NfcGFnZSB0byBhbGxvY19wYWdlc19idWxrX25vcHJvZi4gVGhpcyBlbnN1cmVzIGJ1bGstYWxsb2NhdGVkIHBhZ2VzIGhhdmUgcHJvcGVyIEtNU0FOIHNoYWRvdyBtZXRhZGF0YSBhbmQgYWxsb2NhdGlvbiB0cmFjaW5nLiBUaGUgY2hhbmdlIG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgYW5kIHdhcnJhbnRzIGZ1enppbmcsIGVzcGVjaWFsbHkgdW5kZXIgS01TQU4uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tNU0FOJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YWxsb2NfcGFnZXNfYnVsa19ub3Byb2YmIzM0OywKICAgICYjMzQ7YWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIG1tL3BhZ2VfYWxsb2MuYyBieSBhZGRpbmcgdHJhY2VfbW1fcGFnZV9hbGxvYyBhbmQga21zYW5fYWxsb2NfcGFnZSB0byBhbGxvY19wYWdlc19idWxrX25vcHJvZi4gVGhpcyBlbnN1cmVzIGJ1bGstYWxsb2NhdGVkIHBhZ2VzIGhhdmUgcHJvcGVyIEtNU0FOIHNoYWRvdyBtZXRhZGF0YSBhbmQgYWxsb2NhdGlvbiB0cmFjaW5nLiBUaGUgY2hhbmdlIG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgYW5kIHdhcnJhbnRzIGZ1enppbmcsIGVzcGVjaWFsbHkgdW5kZXIgS01TQU4uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDEyOjA5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTI6MDk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIG1pc3NpbmcgYHRyYWNlX21tX3BhZ2VfYWxsb2NgIGFuZCBga21zYW5fYWxsb2NfcGFnZWAgY2FsbHMgdG8gYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKClgIGluIGBtbS9wYWdlX2FsbG9jLmNgIGZvciBwYWdlcyBhbGxvY2F0ZWQgZnJvbSBwZXItQ1BVIGxpc3RzLlxuXG5UaGlzIG1vZGlmaWNhdGlvbiBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBrZXJuZWwgaW5mby1sZWFrcywgdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzLCBvciBmYXVsdHkgYnVmZmVyIGJvdW5kcy4gQW55IHBvdGVudGlhbCByZWdyZXNzaW9ucyAoc3VjaCBhcyBsb2NraW5nIG9yIGNvbnRleHQgaXNzdWVzIHdoaWxlIGhvbGRpbmcgdGhlIFBDUCBzcGlubG9jayBvciBpbnZhbGlkIHBhZ2UgcG9pbnRlcnMpIGFyZSBkZXRlY3RhYmxlIGJ5IExPQ0tERVAsIEtBU0FOLCBhbmQgc3RhbmRhcmQgZGVidWdnaW5nIGZhY2lsaXRpZXMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAyNmFiMzBkZDM5ZmM3ODY4ZmUzMjBjOTAyNmU3Y2Q5ZTY0ZWFhMzVmCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBTZXAgOCAxMjowODozNCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL3BhZ2VfYWxsb2MuYyBiL21tL3BhZ2VfYWxsb2MuYwppbmRleCAxMmZhYzkwODRjNDgzLi5lYWM0MTllZWY2OTdhIDEwMDY0NAotLS0gYS9tbS9wYWdlX2FsbG9jLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vcGFnZV9hbGxvYy5jCkBAIC01Mjc5LDYgJiM0Mzs1Mjc5LDggQEAgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnBfdCBnZnAsIGludCBwcmVmZXJyZWRfbmlkLAogCQlucl9hY2NvdW50JiM0MzsmIzQzOzsKIAogCQlwcmVwX25ld19wYWdlKHBhZ2UsIDAsIGdmcCwgQUxMT0NfREVGQVVMVCk7CiYjNDM7CQl0cmFjZV9tbV9wYWdlX2FsbG9jKHBhZ2UsIDAsIGdmcCwgYWMubWlncmF0ZXR5cGUpOwomIzQzOwkJa21zYW5fYWxsb2NfcGFnZShwYWdlLCAwLCBnZnAgJmFtcDsgfl9fR0ZQX1JFQ0xBSU0pOwogCQlzZXRfcGFnZV9yZWZjb3VudGVkKHBhZ2UpOwogCQlwYWdlX2FycmF5W25yX3BvcHVsYXRlZCYjNDM7JiM0MztdID0gcGFnZTsKIAl9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMjowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDk5CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogOTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRGl2aW5nIGludG8gdGhlIFBhZ2UgQWxsb2NhdGlvbiBDb2RlKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5IHdpdGggYG1tL3BhZ2VfYWxsb2MuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCBmdW5jdGlvbiBhbmQgaXRzIGludGVyYWN0aW9ucy4gRmlyc3QsIEkmIzM5O2xsIHNjcnV0aW5pemUgdGhlIGRpZmYgYW5kIHRoZSBjb2RlIHN1cnJvdW5kaW5nIGl0OyBJIHdhbnQgdG8gc2VlIGV4YWN0bHkgd2hhdCYjMzk7cyBjaGFuZ2VkIGFuZCB0aGUgY29udGV4dC4gCgpUaGVuLCBJJiMzOTtsbCBzd2l0Y2ggZ2VhcnMgYW5kIGxldmVyYWdlIG15IHRvb2xzLiBJJiMzOTtsbCBlaXRoZXIgdXNlIGBncmVwcGVyYCBvciBqdXN0IHJlYWQgdGhlIGZpbGUgZGlyZWN0bHksIHRvIHRyYWNlIHRoZSBjYWxscyBhbmQgaW50ZWdyYXRpb24gcG9pbnRzIGZvciBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgLCBlc3BlY2lhbGx5IGNvbmNlcm5pbmcgS01TQU4uIEkmIzM5O20gbG9va2luZyBmb3Igd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQsIHdoYXQgaXQmIzM5O3MgZG9pbmcsIGFuZCBob3cgaXQgcG90ZW50aWFsbHkgaW50ZXJhY3RzIHdpdGggbWVtb3J5IHNhZmV0eSBtZWNoYW5pc21zLgoKRmluYWxseSwgSSYjMzk7bGwgemVybyBpbiBvbiB0aGUgc3BlY2lmaWMgYXJlYSBhcm91bmQgbGluZSA1Mjc5IGluIGBtbS9wYWdlX2FsbG9jLmNgLiBUaGlzIGlzIGxpa2VseSB3aGVyZSB0aGUgY29yZSBsb2dpYyBvciBzb21lIGtleSBkZWNpc2lvbiBwb2ludCByZXNpZGVzLCBhbmQgSSBuZWVkIHRvIGNhcmVmdWxseSByZWFkIHRoZSBzdXJyb3VuZGluZyBsaW5lcyB0byBncmFzcCB0aGUgZmxvdyBhbmQgcG90ZW50aWFsIGlzc3VlcyBvciBvcHRpbWl6YXRpb25zLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDEyOjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vcGFnZV9hbGxvYy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTI2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs1MjYwOlx0XHRwY3BfbGlzdCA9IFx1MDAyNnBjcC1cdTAwM2VsaXN0c1tvcmRlcl90b19waW5kZXgoYWMubWlncmF0ZXR5cGUsIDApXTtcbjUyNjE6XHRcdHdoaWxlIChucl9wb3B1bGF0ZWQgXHUwMDNjIG5yX3BhZ2VzKSB7XG41MjYyOlx0XG41MjYzOlx0XHRcdC8qIFNraXAgZXhpc3RpbmcgcGFnZXMgKi9cbjUyNjQ6XHRcdFx0aWYgKHBhZ2VfYXJyYXlbbnJfcG9wdWxhdGVkXSkge1xuNTI2NTpcdFx0XHRcdG5yX3BvcHVsYXRlZCYjNDM7JiM0Mzs7XG41MjY2Olx0XHRcdFx0Y29udGludWU7XG41MjY3Olx0XHRcdH1cbjUyNjg6XHRcbjUyNjk6XHRcdFx0cGFnZSA9IF9fcm1xdWV1ZV9wY3BsaXN0KHpvbmUsIDAsIGFjLm1pZ3JhdGV0eXBlLCBhbGxvY19mbGFncyxcbjUyNzA6XHRcdFx0XHRcdFx0XHRcdFx0cGNwLCBwY3BfbGlzdCk7XG41MjcxOlx0XHRcdGlmICh1bmxpa2VseSghcGFnZSkpIHtcbjUyNzI6XHRcdFx0XHQvKiBUcnkgYW5kIGFsbG9jYXRlIGF0IGxlYXN0IG9uZSBwYWdlICovXG41MjczOlx0XHRcdFx0aWYgKCFucl9hY2NvdW50KSB7XG41Mjc0Olx0XHRcdFx0XHRwY3Bfc3Bpbl91bmxvY2socGNwKTtcbjUyNzU6XHRcdFx0XHRcdGdvdG8gZmFpbGVkO1xuNTI3NjpcdFx0XHRcdH1cbjUyNzc6XHRcdFx0XHRicmVhaztcbjUyNzg6XHRcdFx0fVxuNTI3OTpcdFx0XHRucl9hY2NvdW50JiM0MzsmIzQzOztcbjUyODA6XHRcbjUyODE6XHRcdFx0cHJlcF9uZXdfcGFnZShwYWdlLCAwLCBnZnAsIEFMTE9DX0RFRkFVTFQpO1xuNTI4MjpcdFx0XHR0cmFjZV9tbV9wYWdlX2FsbG9jKHBhZ2UsIDAsIGdmcCwgYWMubWlncmF0ZXR5cGUpO1xuNTI4MzpcdFx0XHRrbXNhbl9hbGxvY19wYWdlKHBhZ2UsIDAsIGdmcCBcdTAwMjYgfl9fR0ZQX1JFQ0xBSU0pO1xuNTI4NDpcdFx0XHRzZXRfcGFnZV9yZWZjb3VudGVkKHBhZ2UpO1xuNTI4NTpcdFx0XHRwYWdlX2FycmF5W25yX3BvcHVsYXRlZCYjNDM7JiM0MztdID0gcGFnZTtcbjUyODY6XHRcdH1cbjUyODc6XHRcbjUyODg6XHRcdHBjcF9zcGluX3VubG9jayhwY3ApO1xuNTI4OTpcdFxuNTI5MDpcdFx0X19jb3VudF96aWRfdm1fZXZlbnRzKFBHQUxMT0MsIHpvbmVfaWR4KHpvbmUpLCBucl9hY2NvdW50KTtcbjUyOTE6XHRcdHpvbmVfc3RhdGlzdGljcyh6b25lbGlzdF96b25lKGFjLnByZWZlcnJlZF96b25lcmVmKSwgem9uZSwgbnJfYWNjb3VudCk7XG41MjkyOlx0XG41MjkzOlx0b3V0OlxuNTI5NDpcdFx0cmV0dXJuIG5yX3BvcHVsYXRlZDtcbjUyOTU6XHRcbjUyOTY6XHRmYWlsZWQ6XG41Mjk3Olx0XHRwYWdlID0gX19hbGxvY19wYWdlc19ub3Byb2YoZ2ZwLCAwLCBwcmVmZXJyZWRfbmlkLCBub2RlbWFzaywgQUxMT0NfREVGQVVMVCk7XG41Mjk4Olx0XHRpZiAocGFnZSlcbjUyOTk6XHRcdFx0cGFnZV9hcnJheVtucl9wb3B1bGF0ZWQmIzQzOyYjNDM7XSA9IHBhZ2U7XG41MzAwOlx0XHRnb3RvIG91dDtcbjUzMDE6XHR9XG41MzAyOlx0RVhQT1JUX1NZTUJPTF9HUEwoYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YpO1xuNTMwMzpcdFxuNTMwNDpcdC8qXG41MzA1Olx0ICogZnJlZV9wYWdlc19idWxrIC0gRnJlZSBhbiBhcnJheSBvZiBvcmRlci0wIHBhZ2VzXG41MzA2Olx0ICogQHBhZ2VfYXJyYXk6IEFycmF5IG9mIHBhZ2VzIHRvIGZyZWVcbjUzMDc6XHQgKiBAbnJfcGFnZXM6IFRoZSBudW1iZXIgb2YgcGFnZXMgaW4gdGhlIGFycmF5XG41MzA4Olx0ICpcbjUzMDk6XHQgKiBGcmVlIHRoZSBvcmRlci0wIHBhZ2VzLiBBZGphY2VudCBlbnRyaWVzIHdob3NlIFBGTnMgZm9ybSBhIGNvbnRpZ3VvdXNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTI6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzIzMAoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBga21zYW5fYWxsb2NfcGFnZWAgVXNhZ2UqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUga2VybmVsIG1lbW9yeSBhbGxvY2F0b3IuIEkgbmVlZCB0byBnZXQgYSBmaXJtIGdyYXNwIG9uIHRoZSBzY29wZSBhbmQgaW1wYWN0IG9mIGBrbXNhbl9hbGxvY19wYWdlYC4gTXkgcHJpbWFyeSBmb2N1cyBpcyBwaW5wb2ludGluZyBldmVyeSBpbnN0YW5jZSB3aGVyZSBga21zYW5fYWxsb2NfcGFnZWAgaXMgaW52b2tlZCB3aXRoaW4gYG1tL3BhZ2VfYWxsb2MuY2AgYW5kLCBjcnVjaWFsbHksIGFueSBjYWxscyBmcm9tIG90aGVyIG1vZHVsZXMgdGhhdCBpbnRlcmFjdCB3aXRoIHRoZSBwYWdlIGFsbG9jYXRvci4gVW5kZXJzdGFuZGluZyB0aGUgY2FsbCBncmFwaCBhcm91bmQgdGhpcyBmdW5jdGlvbiBpcyBwYXJhbW91bnQgdG8gY29ycmVjdGx5IHVuZGVyc3RhbmRpbmcgaXQuIEkmIzM5O2xsIG5lZWQgdG8gdXNlIHRvb2xzIHRvIGFjY3VyYXRlbHkgYW5kIGVmZmljaWVudGx5IG1hcCB0aGUgY29kZSBiYXNlLiBJJiMzOTtsbCBuZWVkIHRvIHF1aWNrbHkgdW5kZXJzdGFuZCBpZiBpdCYjMzk7cyBvbmx5IGNhbGxlZCBkaXJlY3RseSBmcm9tIG90aGVyIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIHNhbWUgc291cmNlLCBvciBpZiBpdCBjcm9zc2VzIHNvdXJjZSBib3VuZGFyaWVzLiBJJiMzOTtsbCBmb2N1cyBvbiBob3cgdGhlIHJlc3VsdCBpcyBiZWluZyB1c2VkIGFuZCB3aGF0IGltcGxpY2F0aW9ucyBleGlzdCBkdWUgdG8gaG93IHRoZSBmdW5jdGlvbiYjMzk7cyBiZWhhdmlvciBjb3VsZCBkaWZmZXIgZnJvbSBhIG5vcm1hbCBwYWdlIGFsbG9jYXRpb24sIGFuZCBob3cgdGhpcyByZWxhdGVzIHRvIEtNU0FOJiMzOTtzIGluc3RydW1lbnRhdGlvbi4gSSBzdXNwZWN0IHRoaXMgd2lsbCBiZSBpbnRlcmVzdGluZywgYW5kIHBvc3NpYmx5IHJldmVhbCBzdWJ0bGUgaW50ZXJhY3Rpb25zIHJlbGF0ZWQgdG8gdGhlIG1lbW9yeSBzYW5pdGl6YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDEyOjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ttc2FuX2FsbG9jX3BhZ2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0va21zYW4vc2hhZG93LmM9MTY5PUVYUE9SVF9TWU1CT0woa21zYW5fY29weV9wYWdlX21ldGEpO1xubW0va21zYW4vc2hhZG93LmMtMTcwLVxubW0va21zYW4vc2hhZG93LmM6MTcxOnZvaWQga21zYW5fYWxsb2NfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyLCBnZnBfdCBmbGFncylcbm1tL2ttc2FuL3NoYWRvdy5jLTE3Mi17XG4tLVxubW0vcGFnZV9hbGxvYy5jPTUxNjA9dW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnBfdCBnZnAsIGludCBwcmVmZXJyZWRfbmlkLFxuLS1cbm1tL3BhZ2VfYWxsb2MuYy01MjgyLVx0XHR0cmFjZV9tbV9wYWdlX2FsbG9jKHBhZ2UsIDAsIGdmcCwgYWMubWlncmF0ZXR5cGUpO1xubW0vcGFnZV9hbGxvYy5jOjUyODM6XHRcdGttc2FuX2FsbG9jX3BhZ2UocGFnZSwgMCwgZ2ZwIFx1MDAyNiB+X19HRlBfUkVDTEFJTSk7XG5tbS9wYWdlX2FsbG9jLmMtNTI4NC1cdFx0c2V0X3BhZ2VfcmVmY291bnRlZChwYWdlKTtcbi0tXG5tbS9wYWdlX2FsbG9jLmM9NTM0NT1zdGF0aWMgaW5saW5lIGJvb2wgYWxsb2Nfbm9sb2NrX2FsbG93ZWQodm9pZClcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNTM3MC0gKlxubW0vcGFnZV9hbGxvYy5jOjUzNzE6ICogU3BlY2lmeSBfX0dGUF9aRVJPIHRvIG1ha2Ugc3VyZSB0aGF0IGNhbGwgdG8ga21zYW5fYWxsb2NfcGFnZSgpIGJlbG93XG5tbS9wYWdlX2FsbG9jLmMtNTM3Mi0gKiBpcyBzYWZlIGluIGFueSBjb250ZXh0LiBBbHNvIHplcm9pbmcgdGhlIHBhZ2UgaXMgbWFuZGF0b3J5IGZvclxuLS1cbm1tL3BhZ2VfYWxsb2MuYz01Mzg1PXN0cnVjdCBwYWdlICpfX2FsbG9jX2Zyb3plbl9wYWdlc19ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG4tLVxubW0vcGFnZV9hbGxvYy5jLTU0NjEtXHR0cmFjZV9tbV9wYWdlX2FsbG9jKHBhZ2UsIG9yZGVyLCBhbGxvY19nZnAsIGFjLm1pZ3JhdGV0eXBlKTtcbm1tL3BhZ2VfYWxsb2MuYzo1NDYyOlx0a21zYW5fYWxsb2NfcGFnZShwYWdlLCBvcmRlciwgYWxsb2NfZ2ZwKTtcbm1tL3BhZ2VfYWxsb2MuYy01NDYzLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMjowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTkzCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogNjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgUmVjZW50IE1lbW9yeSBBbGxvY2F0aW9uIEJlaGF2aW9yKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGluLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gd2hhdCBleGFjdGx5IGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAgd2FzIGRvaW5nIHByaW9yIHRvIHRoZSBjaGFuZ2UgSSYjMzk7bSBsb29raW5nIGF0LiBUaGUgYmVzdCB3YXkgdG8gdW5kZXJzdGFuZCBpdHMgcHJlLWNoYW5nZSBvcGVyYXRpb24gaXMgYnkgZXhhbWluaW5nIGFueSBhc3NvY2lhdGVkICYjMzQ7aG9vayYjMzQ7IGZ1bmN0aW9ucyB0aGF0IHdlcmUgZXhlY3V0ZWQgYWZ0ZXIgbWVtb3J5IHdhcyBhbGxvY2F0ZWQuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgZm9yIGEgYHBvc3RfYWxsb2NfaG9va2Agb3Igc29tZXRoaW5nIHNpbWlsYXIg4oCTIEkmIzM5O2xsIHN0YXJ0IGxvb2tpbmcgaW4gYG1tL3BhZ2VfYWxsb2MuY2AsIGFzIHRoYXQmIzM5O3MgdGhlIGxpa2VseSBsb2NhdGlvbiBmb3IgbWVtb3J5IGFsbG9jYXRpb24gcm91dGluZXMuIExldCBtZSBzcGVjaWZpY2FsbHkgc2VhcmNoIGZvciB0aGUgdGVybSBgcG9zdF9hbGxvY19ob29rYCB3aXRoaW4gYG1tL3BhZ2VfYWxsb2MuY2AgdG8gc2VlIGlmIGl0IGV4aXN0cyBhbmQsIGlmIHNvLCB3aGF0IGl0cyBjb250ZXh0IGlzLiBJJiMzOTttIGhvcGluZyB0byBxdWlja2x5IGdyYXNwIHRoZSBpbXBsaWNhdGlvbnMgb2YgYW55IGFsdGVyYXRpb25zIHRvIHRoYXQgcGFydCBvZiB0aGUgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTI6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cG9zdF9hbGxvY19ob29rJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2NvbXBhY3Rpb24uYz04ND1zdGF0aWMgc3RydWN0IHBhZ2UgKm1hcmtfYWxsb2NhdGVkX25vcHJvZihzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyLCBnZnBfdCBnZnBfZmxhZ3MpXG5tbS9jb21wYWN0aW9uLmMtODUte1xubW0vY29tcGFjdGlvbi5jOjg2Olx0cG9zdF9hbGxvY19ob29rKHBhZ2UsIG9yZGVyLCBfX0dGUF9NT1ZBQkxFLCBBTExPQ19ERUZBVUxUKTtcbm1tL2NvbXBhY3Rpb24uYy04Ny1cdHNldF9wYWdlX3JlZmNvdW50ZWQocGFnZSk7XG4tLVxubW0vY29tcGFjdGlvbi5jPTE4NDU9c3RhdGljIHN0cnVjdCBmb2xpbyAqY29tcGFjdGlvbl9hbGxvY19ub3Byb2Yoc3RydWN0IGZvbGlvICpzcmMsIHVuc2lnbmVkIGxvbmcgZGF0YSlcbi0tXG5tbS9jb21wYWN0aW9uLmMtMTg4Mi1cbm1tL2NvbXBhY3Rpb24uYzoxODgzOlx0cG9zdF9hbGxvY19ob29rKFx1MDAyNmRzdC1cdTAwM2VwYWdlLCBvcmRlciwgX19HRlBfTU9WQUJMRSwgQUxMT0NfREVGQVVMVCk7XG5tbS9jb21wYWN0aW9uLmMtMTg4NC1cdHNldF9wYWdlX3JlZmNvdW50ZWQoXHUwMDI2ZHN0LVx1MDAzZXBhZ2UpO1xuLS1cbm1tL21lbWNvbnRyb2wuYz0yNzc9c3RhdGljIHZvaWQgbWVtY2dfcmVwYXJlbnRfb2JqY2dzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbi0tXG5tbS9tZW1jb250cm9sLmMtMzEyLSAqIEEgbG90IG9mIHRoZSBjYWxscyB0byB0aGUgY2FjaGUgYWxsb2NhdGlvbiBmdW5jdGlvbnMgYXJlIGV4cGVjdGVkIHRvIGJlXG5tbS9tZW1jb250cm9sLmM6MzEzOiAqIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyLiBTaW5jZSB0aGUgY2FsbHMgdG8gbWVtY2dfc2xhYl9wb3N0X2FsbG9jX2hvb2soKSBhcmVcbm1tL21lbWNvbnRyb2wuYy0zMTQtICogY29uZGl0aW9uYWwgdG8gdGhpcyBzdGF0aWMgYnJhbmNoLCB3ZSYjMzk7bGwgaGF2ZSB0byBhbGxvdyBtb2R1bGVzIHRoYXQgZG9lc1xuLS1cbm1tL21lbWNvbnRyb2wuYz0zNTg5PXN0YXRpYyBpbmxpbmUgc2l6ZV90IG9ial9mdWxsX3NpemUoc3RydWN0IGttZW1fY2FjaGUgKnMpXG4tLVxubW0vbWVtY29udHJvbC5jLTM1OTctXG5tbS9tZW1jb250cm9sLmM6MzU5ODpib29sIF9fbWVtY2dfc2xhYl9wb3N0X2FsbG9jX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBsaXN0X2xydSAqbHJ1LFxubW0vbWVtY29udHJvbC5jLTM1OTktXHRcdFx0XHQgIGdmcF90IGZsYWdzLCB1bnNpZ25lZCBpbnQgc2xhYl9hbGxvY19mbGFncyxcbi0tXG5tbS9wYWdlX2FsbG9jLmM9MTgxMT1zdGF0aWMgaW5saW5lIGJvb2wgc2hvdWxkX3NraXBfaW5pdChnZnBfdCBmbGFncylcbi0tXG5tbS9wYWdlX2FsbG9jLmMtMTgyMC1cbm1tL3BhZ2VfYWxsb2MuYzoxODIxOmlubGluZSB2b2lkIHBvc3RfYWxsb2NfaG9vayhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyLFxubW0vcGFnZV9hbGxvYy5jLTE4MjItXHRcdFx0XHRnZnBfdCBnZnBfZmxhZ3MsIHVuc2lnbmVkIGludCBhbGxvY19mbGFncylcbi0tXG5tbS9wYWdlX2FsbG9jLmM9MTg3Nj1zdGF0aWMgdm9pZCBwcmVwX25ld19wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIsIGdmcF90IGdmcF9mbGFncyxcbi0tXG5tbS9wYWdlX2FsbG9jLmMtMTg3OC17XG5tbS9wYWdlX2FsbG9jLmM6MTg3OTpcdHBvc3RfYWxsb2NfaG9vayhwYWdlLCBvcmRlciwgZ2ZwX2ZsYWdzLCBhbGxvY19mbGFncyk7XG5tbS9wYWdlX2FsbG9jLmMtMTg4MC1cbi0tXG5tbS9wYWdlX2FsbG9jLmM9NzE5Nz1zdGF0aWMgdm9pZCBzcGxpdF9mcmVlX2Zyb3plbl9wYWdlcyhzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LCBnZnBfdCBnZnBfbWFzaylcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNzIwNy1cbm1tL3BhZ2VfYWxsb2MuYzo3MjA4Olx0XHRcdHBvc3RfYWxsb2NfaG9vayhwYWdlLCBvcmRlciwgZ2ZwX21hc2ssIEFMTE9DX0RFRkFVTFQpO1xubW0vcGFnZV9hbGxvYy5jLTcyMDktXHRcdFx0aWYgKCFvcmRlcilcbi0tXG5tbS9wYWdlX2FsbG9jLmg9MjIzPWV4dGVybiB2b2lkIF9fZnJlZV9wYWdlc19jb3JlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG4tLVxubW0vcGFnZV9hbGxvYy5oLTIyNS1cbm1tL3BhZ2VfYWxsb2MuaDoyMjY6dm9pZCBwb3N0X2FsbG9jX2hvb2soc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlciwgZ2ZwX3QgZ2ZwX2ZsYWdzLFxubW0vcGFnZV9hbGxvYy5oLTIyNy1cdFx0ICAgICB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MpO1xuLS1cbm1tL3BlcmNwdS5jPTE2MTY9c3RhdGljIGJvb2wgcGNwdV9tZW1jZ19wcmVfYWxsb2NfaG9vayhzaXplX3Qgc2l6ZSwgZ2ZwX3QgZ2ZwLFxuLS1cbm1tL3BlcmNwdS5jLTE2MzQtXG5tbS9wZXJjcHUuYzoxNjM1OnN0YXRpYyB2b2lkIHBjcHVfbWVtY2dfcG9zdF9hbGxvY19ob29rKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZyxcbm1tL3BlcmNwdS5jLTE2MzYtXHRcdFx0XHQgICAgICAgc3RydWN0IHBjcHVfY2h1bmsgKmNodW5rLCBpbnQgb2ZmLFxuLS1cbm1tL3BlcmNwdS5jPTE2Nzk9cGNwdV9tZW1jZ19wcmVfYWxsb2NfaG9vayhzaXplX3Qgc2l6ZSwgZ2ZwX3QgZ2ZwLCBzdHJ1Y3Qgb2JqX2Nncm91cCAqKm9iamNncClcbi0tXG5tbS9wZXJjcHUuYy0xNjgzLVxubW0vcGVyY3B1LmM6MTY4NDpzdGF0aWMgdm9pZCBwY3B1X21lbWNnX3Bvc3RfYWxsb2NfaG9vayhzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csXG5tbS9wZXJjcHUuYy0xNjg1LVx0XHRcdFx0ICAgICAgIHN0cnVjdCBwY3B1X2NodW5rICpjaHVuaywgaW50IG9mZixcbi0tXG5tbS9wZXJjcHUuYz0xNzM1PXZvaWQgX19wZXJjcHUgKnBjcHVfYWxsb2Nfbm9wcm9mKHNpemVfdCBzaXplLCBzaXplX3QgYWxpZ24sIGJvb2wgcmVzZXJ2ZWQsXG4tLVxubW0vcGVyY3B1LmMtMTc5Ni1cdFx0fSBlbHNlIGlmIChtdXRleF9sb2NrX2tpbGxhYmxlKFx1MDAyNnBjcHVfYWxsb2NfbXV0ZXgpKSB7XG5tbS9wZXJjcHUuYzoxNzk3Olx0XHRcdHBjcHVfbWVtY2dfcG9zdF9hbGxvY19ob29rKG9iamNnLCBOVUxMLCAwLCBzaXplKTtcbm1tL3BlcmNwdS5jLTE3OTgtXHRcdFx0cmV0dXJuIE5VTEw7XG4tLVxubW0vcGVyY3B1LmMtMTkwOS1cbm1tL3BlcmNwdS5jOjE5MTA6XHRwY3B1X21lbWNnX3Bvc3RfYWxsb2NfaG9vayhvYmpjZywgY2h1bmssIG9mZiwgc2l6ZSk7XG5tbS9wZXJjcHUuYy0xOTExLVxuLS1cbm1tL3BlcmNwdS5jLTE5NDEtXG5tbS9wZXJjcHUuYzoxOTQyOlx0cGNwdV9tZW1jZ19wb3N0X2FsbG9jX2hvb2sob2JqY2csIE5VTEwsIDAsIHNpemUpO1xubW0vcGVyY3B1LmMtMTk0My1cbi0tXG5tbS9zbGFiLmg9ODU0PXN0YXRpYyBpbmxpbmUgZW51bSBub2RlX3N0YXRfaXRlbSBjYWNoZV92bXN0YXRfaWR4KHN0cnVjdCBrbWVtX2NhY2hlICpzKVxuLS1cbm1tL3NsYWIuaC04NjAtI2lmZGVmIENPTkZJR19NRU1DR1xubW0vc2xhYi5oOjg2MTpib29sIF9fbWVtY2dfc2xhYl9wb3N0X2FsbG9jX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBsaXN0X2xydSAqbHJ1LFxubW0vc2xhYi5oLTg2Mi1cdFx0XHRcdCAgZ2ZwX3QgZmxhZ3MsIHVuc2lnbmVkIGludCBzbGFiX2FsbG9jX2ZsYWdzLFxuLS1cbm1tL3NsdWIuYz0yNTA2PXN0YXRpYyBfX2Zhc3RwYXRoX2lubGluZVxubW0vc2x1Yi5jOjI1MDc6Ym9vbCBtZW1jZ19zbGFiX3Bvc3RfYWxsb2NfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZmxhZ3MsXG5tbS9zbHViLmMtMjUwOC1cdFx0XHRcdHNpemVfdCBzaXplLCB2b2lkICoqcCxcbi0tXG5tbS9zbHViLmMtMjUxNi1cbm1tL3NsdWIuYzoyNTE3Olx0aWYgKGxpa2VseShfX21lbWNnX3NsYWJfcG9zdF9hbGxvY19ob29rKHMsIGFjLVx1MDAzZWxydSwgZmxhZ3MsXG5tbS9zbHViLmMtMjUxOC1cdFx0XHRcdFx0XHRhYy1cdTAwM2VhbGxvY19mbGFncywgc2l6ZSwgcCkpKVxuLS1cbm1tL3NsdWIuYz0yNTUzPWJvb2wgbWVtY2dfc2xhYl9wb3N0X2NoYXJnZSh2b2lkICpwLCBnZnBfdCBmbGFncylcbi0tXG5tbS9zbHViLmMtMjYwNi1cbm1tL3NsdWIuYzoyNjA3Olx0cmV0dXJuIF9fbWVtY2dfc2xhYl9wb3N0X2FsbG9jX2hvb2socywgTlVMTCwgZmxhZ3MsIFNMQUJfQUxMT0NfREVGQVVMVCxcbm1tL3NsdWIuYy0yNjA4LVx0XHRcdFx0XHQgICAgMSwgXHUwMDI2cCk7XG4tLVxubW0vc2x1Yi5jLTI2MTEtI2Vsc2UgLyogQ09ORklHX01FTUNHICovXG5tbS9zbHViLmM6MjYxMjpzdGF0aWMgaW5saW5lIGJvb2wgbWVtY2dfc2xhYl9wb3N0X2FsbG9jX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsXG5tbS9zbHViLmMtMjYxMy1cdFx0XHRcdFx0ICAgICAgZ2ZwX3QgZmxhZ3MsXG4tLVxubW0vc2x1Yi5jPTI2MzQ9c3RydWN0IHJjdV9kZWxheWVkX2ZyZWUge1xuLS1cbm1tL3NsdWIuYy0yNjUzLSAqIC0ga2FzYW5fc2xhYl9hbGxvYygpXG5tbS9zbHViLmM6MjY1NDogKiAtIG1lbWNnX3NsYWJfcG9zdF9hbGxvY19ob29rKClcbm1tL3NsdWIuYy0yNjU1LSAqIC0gYWxsb2NfdGFnZ2luZ19zbGFiX2FsbG9jX2hvb2soKVxuLS1cbm1tL3NsdWIuYz00NjQ0PXN0YXRpYyBfX2Zhc3RwYXRoX2lubGluZVxubW0vc2x1Yi5jOjQ2NDU6Ym9vbCBzbGFiX3Bvc3RfYWxsb2NfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZmxhZ3MsIHNpemVfdCBzaXplLFxubW0vc2x1Yi5jLTQ2NDYtXHRcdFx0ICB2b2lkICoqcCwgY29uc3Qgc3RydWN0IHNsYWJfYWxsb2NfY29udGV4dCAqYWMpXG4tLVxubW0vc2x1Yi5jLTQ3MDEtXG5tbS9zbHViLmM6NDcwMjpcdHJldHVybiBtZW1jZ19zbGFiX3Bvc3RfYWxsb2NfaG9vayhzLCBmbGFncywgc2l6ZSwgcCwgYWMpO1xubW0vc2x1Yi5jLTQ3MDMtfVxuLS1cbm1tL3NsdWIuYz00OTY5PXN0YXRpYyBfX2Zhc3RwYXRoX2lubGluZSB2b2lkICpzbGFiX2FsbG9jX25vZGUoc3RydWN0IGttZW1fY2FjaGUgKnMsXG4tLVxubW0vc2x1Yi5jLTQ5OTItXHQvKlxubW0vc2x1Yi5jOjQ5OTM6XHQgKiBJbiBjYXNlIHRoaXMgZmFpbHMgZHVlIHRvIG1lbWNnX3NsYWJfcG9zdF9hbGxvY19ob29rKCksXG5tbS9zbHViLmMtNDk5NC1cdCAqIG9iamVjdCBpcyBzZXQgdG8gTlVMTFxubW0vc2x1Yi5jLTQ5OTUtXHQgKi9cbm1tL3NsdWIuYzo0OTk2Olx0c2xhYl9wb3N0X2FsbG9jX2hvb2socywgZ2ZwZmxhZ3MsIDEsIFx1MDAyNm9iamVjdCwgYWMpO1xubW0vc2x1Yi5jLTQ5OTctXG4tLVxubW0vc2x1Yi5jPTUzMDc9a21lbV9jYWNoZV9hbGxvY19mcm9tX3NoZWFmX25vcHJvZihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZ2ZwLFxuLS1cbm1tL3NsdWIuYy01MzI0LVx0LyogYWRkIF9fR0ZQX05PRkFJTCB0byBmb3JjZSBzdWNjZXNzZnVsIG1lbWNnIGNoYXJnaW5nICovXG5tbS9zbHViLmM6NTMyNTpcdHNsYWJfcG9zdF9hbGxvY19ob29rKHMsIGdmcCB8IF9fR0ZQX05PRkFJTCwgMSwgXHUwMDI2cmV0LCBcdTAwMjZhYyk7XG5tbS9zbHViLmMtNTMyNi1vdXQ6XG4tLVxubW0vc2x1Yi5jPTU0NDQ9c3RhdGljIHZvaWQgKl9fa21hbGxvY19ub2xvY2tfbm9wcm9mKERFQ0xfVE9LRU5fUEFSQU1TKHNpemUsIHRva2VuKSwgZ2ZwX3QgZ2ZwX2ZsYWdzLFxuLS1cbm1tL3NsdWIuYy01NDkxLVx0ICoga2ZlbmNlX2FsbG9jLiBIZW5jZSBjYWxsIF9fX3NsYWJfYWxsb2MoKSAoYXQgbW9zdCB0d2ljZSlcbm1tL3NsdWIuYzo1NDkyOlx0ICogYW5kIHNsYWJfcG9zdF9hbGxvY19ob29rKCkgZGlyZWN0bHkuXG5tbS9zbHViLmMtNTQ5My1cdCAqL1xuLS1cbm1tL3NsdWIuYy01NTE2LVx0bWF5YmVfd2lwZV9vYmpfZnJlZXB0cihzLCByZXQpO1xubW0vc2x1Yi5jOjU1MTc6XHRzbGFiX3Bvc3RfYWxsb2NfaG9vayhzLCBnZnBfZmxhZ3MsIDEsIFx1MDAyNnJldCwgYWMpO1xubW0vc2x1Yi5jLTU1MTgtXG4tLVxubW0vc2x1Yi5jPTc0NzY9Ym9vbCBrbWVtX2NhY2hlX2FsbG9jX2J1bGtfbm9wcm9mKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBmbGFncyxcbi0tXG5tbS9zbHViLmMtNzUzNC1cdC8qIG1lbWNnIGFuZCBrbWVtX2NhY2hlIGRlYnVnIHN1cHBvcnQgYW5kIG1lbW9yeSBpbml0aWFsaXphdGlvbiAqL1xubW0vc2x1Yi5jOjc1MzU6XHRyZXR1cm4gbGlrZWx5KHNsYWJfcG9zdF9hbGxvY19ob29rKHMsIGZsYWdzLCBzaXplLCBwLCBcdTAwMjZhYykpO1xubW0vc2x1Yi5jLTc1MzYtfVxuLS1cbm1tL3ZtYWxsb2MuYz00MDMzPXZvaWQgKl9fdm1hbGxvY19ub2RlX3JhbmdlX25vcHJvZih1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgYWxpZ24sXG4tLVxubW0vdm1hbGxvYy5jLTQxMTgtXHQgKiBUaGUgY29uZGl0aW9uIGZvciBzZXR0aW5nIEtBU0FOX1ZNQUxMT0NfSU5JVCBzaG91bGQgY29tcGxlbWVudCB0aGVcbm1tL3ZtYWxsb2MuYzo0MTE5Olx0ICogb25lIGluIHBvc3RfYWxsb2NfaG9vaygpIHdpdGggcmVnYXJkcyB0byB0aGUgX19HRlBfU0tJUF9aRVJPIGNoZWNrXG5tbS92bWFsbG9jLmMtNDEyMC1cdCAqIHRvIG1ha2Ugc3VyZSB0aGF0IG1lbW9yeSBpcyBpbml0aWFsaXplZCB1bmRlciB0aGUgc2FtZSBjb25kaXRpb25zLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMjowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MTYyCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBmaXJzdC1wZXJzb24gc3VtbWFyeSwgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipEaXZpbmcgaW50byBgcG9zdF9hbGxvY19ob29rYCoqCgpPa2F5LCB0aW1lIHRvIGRpc3NlY3QgYHBvc3RfYWxsb2NfaG9va2AgaW4gYG1tL3BhZ2VfYWxsb2MuY2AuIFRoaXMgaG9vayBpcyBhIGNyaXRpY2FsIHBpZWNlLCBhbmQgSSB3YW50IHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBpdHMgcm9sZSBpbiB0aGUgb3ZlcmFsbCBtZW1vcnkgYWxsb2NhdGlvbiBwcm9jZXNzLiBJJiMzOTttIGdvaW5nIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gd2hlcmUgaXQmIzM5O3MgY2FsbGVkLCB1bmRlciB3aGF0IGNvbmRpdGlvbnMsIGFuZCB3aGF0IG9wZXJhdGlvbnMgaXQgcGVyZm9ybXMuIEkmIzM5O20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBOVU1BIGFyY2hpdGVjdHVyZSBhbmQgYW55IHBvdGVudGlhbCBtZW1vcnkgaG90LXBsdWcvdW5wbHVnIGNvbnNpZGVyYXRpb25zLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBudWFuY2VzIHRoYXQgaW1wYWN0IHBlcmZvcm1hbmNlIG9yIGludHJvZHVjZSBhbnkgc3VidGxlIG1lbW9yeSBsZWFrcy4gTGV0JiMzOTtzIHNlZSBpZiB0aGUgY29kZSBsaXZlcyB1cCB0byBteSBleHBlY3RhdGlvbnMgb3IgcHJlc2VudHMgYW55IHN1cnByaXNlcyEgSSYjMzk7bGwgYmUgY29tcGFyaW5nIGl0IHRvIHNpbWlsYXIgaG9va3MgaW4gb3RoZXIgbWVtb3J5IG1hbmFnZW1lbnQgc3lzdGVtcyB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBpbnRlcmVzdGluZyBkZXNpZ24gdHJhZGUgb2ZmcyBiZWluZyBtYWRlIGluIHRoZSBMaW51eCBrZXJuZWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDEyOjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vcGFnZV9hbGxvYy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTgyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxODIwOlx0XG4xODIxOlx0aW5saW5lIHZvaWQgcG9zdF9hbGxvY19ob29rKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG4xODIyOlx0XHRcdFx0XHRnZnBfdCBnZnBfZmxhZ3MsIHVuc2lnbmVkIGludCBhbGxvY19mbGFncylcbjE4MjM6XHR7XG4xODI0Olx0XHRjb25zdCBib29sIHplcm9fdGFncyA9IGdmcF9mbGFncyBcdTAwMjYgX19HRlBfWkVST1RBR1M7XG4xODI1Olx0XHRib29sIGluaXQgPSAhd2FudF9pbml0X29uX2ZyZWUoKSBcdTAwMjZcdTAwMjYgd2FudF9pbml0X29uX2FsbG9jKGdmcF9mbGFncykgXHUwMDI2XHUwMDI2XG4xODI2Olx0XHRcdFx0IXNob3VsZF9za2lwX2luaXQoZ2ZwX2ZsYWdzKTtcbjE4Mjc6XHRcdGludCBpO1xuMTgyODpcdFxuMTgyOTpcdFx0c2V0X3BhZ2VfcHJpdmF0ZShwYWdlLCAwKTtcbjE4MzA6XHRcbjE4MzE6XHRcdGFyY2hfYWxsb2NfcGFnZShwYWdlLCBvcmRlcik7XG4xODMyOlx0XHRkZWJ1Z19wYWdlYWxsb2NfbWFwX3BhZ2VzKHBhZ2UsIDEgXHUwMDNjXHUwMDNjIG9yZGVyKTtcbjE4MzM6XHRcbjE4MzQ6XHRcdC8qXG4xODM1Olx0XHQgKiBQYWdlIHVucG9pc29uaW5nIG11c3QgaGFwcGVuIGJlZm9yZSBtZW1vcnkgaW5pdGlhbGl6YXRpb24uXG4xODM2Olx0XHQgKiBPdGhlcndpc2UsIHRoZSBwb2lzb24gcGF0dGVybiB3aWxsIGJlIG92ZXJ3cml0dGVuIGZvciBfX0dGUF9aRVJPXG4xODM3Olx0XHQgKiBhbGxvY2F0aW9ucyBhbmQgdGhlIHBhZ2UgdW5wb2lzb25pbmcgY29kZSB3aWxsIGNvbXBsYWluLlxuMTgzODpcdFx0ICovXG4xODM5Olx0XHRrZXJuZWxfdW5wb2lzb25fcGFnZXMocGFnZSwgMSBcdTAwM2NcdTAwM2Mgb3JkZXIpO1xuMTg0MDpcdFxuMTg0MTpcdFx0LypcbjE4NDI6XHRcdCAqIEFzIG1lbW9yeSBpbml0aWFsaXphdGlvbiBtaWdodCBiZSBpbnRlZ3JhdGVkIGludG8gS0FTQU4sXG4xODQzOlx0XHQgKiBLQVNBTiB1bnBvaXNvbmluZyBhbmQgbWVtb3J5IGluaXRpYWxpemF0aW9uIGNvZGUgbXVzdCBiZVxuMTg0NDpcdFx0ICoga2VwdCB0b2dldGhlciB0byBhdm9pZCBkaXNjcmVwYW5jaWVzIGluIGJlaGF2aW9yLlxuMTg0NTpcdFx0ICovXG4xODQ2Olx0XG4xODQ3Olx0XHQvKlxuMTg0ODpcdFx0ICogQ2xlYXJpbmcgdGFncyBjYW4gZWZmaWNpZW50bHkgY2xlYXIgdGhlIG1lbW9yeSBmb3IgdXMgYXMgd2VsbCwgaWZcbjE4NDk6XHRcdCAqIHJlcXVpcmVkLlxuMTg1MDpcdFx0ICovXG4xODUxOlx0XHRpZiAoemVyb190YWdzKVxuMTg1MjpcdFx0XHRpbml0ID0gdGFnX2NsZWFyX2hpZ2hwYWdlcyhwYWdlLCAxIFx1MDAzY1x1MDAzYyBvcmRlciwgLyogY2xlYXJfcGFnZXM9ICovaW5pdCk7XG4xODUzOlx0XG4xODU0Olx0XHRpZiAoIXNob3VsZF9za2lwX2thc2FuX3VucG9pc29uKGdmcF9mbGFncykgXHUwMDI2XHUwMDI2XG4xODU1Olx0XHQgICAga2FzYW5fdW5wb2lzb25fcGFnZXMocGFnZSwgb3JkZXIsIGluaXQpKSB7XG4xODU2Olx0XHRcdC8qIFRha2Ugbm90ZSB0aGF0IG1lbW9yeSB3YXMgaW5pdGlhbGl6ZWQgYnkgS0FTQU4uICovXG4xODU3Olx0XHRcdGlmIChrYXNhbl9oYXNfaW50ZWdyYXRlZF9pbml0KCkpXG4xODU4Olx0XHRcdFx0aW5pdCA9IGZhbHNlO1xuMTg1OTpcdFx0fSBlbHNlIHtcbjE4NjA6XHRcdFx0LypcbjE4NjE6XHRcdFx0ICogSWYgbWVtb3J5IHRhZ3MgaGF2ZSBub3QgYmVlbiBzZXQgYnkgS0FTQU4sIHJlc2V0IHRoZSBwYWdlXG4xODYyOlx0XHRcdCAqIHRhZ3MgdG8gZW5zdXJlIHBhZ2VfYWRkcmVzcygpIGRlcmVmZXJlbmNpbmcgZG9lcyBub3QgZmF1bHQuXG4xODYzOlx0XHRcdCAqL1xuMTg2NDpcdFx0XHRmb3IgKGkgPSAwOyBpICE9IDEgXHUwMDNjXHUwMDNjIG9yZGVyOyAmIzQzOyYjNDM7aSlcbjE4NjU6XHRcdFx0XHRwYWdlX2thc2FuX3RhZ19yZXNldChwYWdlICYjNDM7IGkpO1xuMTg2NjpcdFx0fVxuMTg2NzpcdFx0LyogSWYgbWVtb3J5IGlzIHN0aWxsIG5vdCBpbml0aWFsaXplZCwgaW5pdGlhbGl6ZSBpdCBub3cuICovXG4xODY4Olx0XHRpZiAoaW5pdClcbjE4Njk6XHRcdFx0Y2xlYXJfaGlnaHBhZ2VzX2thc2FuX3RhZ2dlZChwYWdlLCAxIFx1MDAzY1x1MDAzYyBvcmRlcik7XG4xODcwOlx0XG4xODcxOlx0XHRzZXRfcGFnZV9vd25lcihwYWdlLCBvcmRlciwgZ2ZwX2ZsYWdzKTtcbjE4NzI6XHRcdHBhZ2VfdGFibGVfY2hlY2tfYWxsb2MocGFnZSwgb3JkZXIpO1xuMTg3MzpcdFx0cGdhbGxvY190YWdfYWRkKHBhZ2UsIGN1cnJlbnQsIDEgXHUwMDNjXHUwMDNjIG9yZGVyLCBhbGxvY19mbGFncyk7XG4xODc0Olx0fVxuMTg3NTpcdFxuMTg3NjpcdHN0YXRpYyB2b2lkIHByZXBfbmV3X3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlciwgZ2ZwX3QgZ2ZwX2ZsYWdzLFxuMTg3NzpcdFx0XHRcdFx0XHRcdFx0dW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzKVxuMTg3ODpcdHtcbjE4Nzk6XHRcdHBvc3RfYWxsb2NfaG9vayhwYWdlLCBvcmRlciwgZ2ZwX2ZsYWdzLCBhbGxvY19mbGFncyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDEyOjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgzODQKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA5NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgY29kZSBzbmlwcGV0OgoKKipEaXZpbmcgaW50byBgX19hbGxvY19mcm96ZW5fcGFnZXNfbm9wcm9mYCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYF9fYWxsb2NfZnJvemVuX3BhZ2VzX25vcHJvZmAgbm93LiBJdCBzZWVtcyBteSBmb2N1cyBzaG91bGQgYmUgb24gdGhlIHNlY3Rpb24gYXJvdW5kIGxpbmVzIDU0NTAtNTQ3MC4gSSBjYW4gc2VlIGl0JiMzOTtzIGNhbGxpbmcgdHdvIGtleSBmdW5jdGlvbnMgZGlyZWN0bHkgYWZ0ZXIgdGhlIHRyYWNpbmcgYW5kIEtNU0FOIGluc3RydW1lbnRhdGlvbjogYHRyYWNlX21tX3BhZ2VfYWxsb2NgIGFuZCBga21zYW5fYWxsb2NfcGFnZWAuIFRoaXMgaW1tZWRpYXRlbHkgdGVsbHMgbWUgc29tZXRoaW5nIHNpZ25pZmljYW50LiBJdCYjMzk7cyBjYXB0dXJpbmcgYWxsb2NhdGlvbiBkZXRhaWxzIHRocm91Z2ggYSB0cmFjaW5nIG1lY2hhbmlzbSBhbmQgdGhlbiBpbnRlZ3JhdGluZyB3aXRoIEtlcm5lbCBNZW1vcnkgU2FuaXRpemVyIChLTVNBTikgdG8gY2hlY2sgZm9yIG1lbW9yeSBlcnJvcnMuIFRoZSBmdW5jdGlvbiBwcmVzdW1hYmx5IGFsbG9jYXRlcyBmcm96ZW4gcGFnZXMuIEdpdmVuIHRoZSBjb250ZXh0LCB0aGUgZnVuY3Rpb24gbGlrZWx5IGhhbmRsZXMgc3BlY2lmaWMsIG9wdGltaXplZCwgb3Igc3BlY2lhbGl6ZWQgcGFnZSBhbGxvY2F0aW9uIHNjZW5hcmlvcyB3aXRoaW4gdGhlIGtlcm5lbC4gSSBzaG91bGQgbG9vayBpbnRvIHRoZSBzcGVjaWZpYyBkZXRhaWxzIG9mIHRoZXNlIGZ1bmN0aW9uIGNhbGxzIG5vdywgaW4gdGhlIGxhcmdlciBjYWxsIGdyYXBoLCBhbmQgdGhlIHJvbGUgb2YgdGhlIHBhZ2UgYWxsb2NhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTI6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9wYWdlX2FsbG9jLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1NDQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzU0NDA6XHRcdFx0Z290byBvdXQ7XG41NDQxOlx0XG41NDQyOlx0XHRhbGxvY19nZnAgPSBnZnA7XG41NDQzOlx0XHRhYy5zcHJlYWRfZGlydHlfcGFnZXMgPSBmYWxzZTtcbjU0NDQ6XHRcbjU0NDU6XHRcdC8qXG41NDQ2Olx0XHQgKiBSZXN0b3JlIHRoZSBvcmlnaW5hbCBub2RlbWFzayBpZiBpdCB3YXMgcG90ZW50aWFsbHkgcmVwbGFjZWQgd2l0aFxuNTQ0NzpcdFx0ICogXHUwMDI2Y3B1c2V0X2N1cnJlbnRfbWVtc19hbGxvd2VkIHRvIG9wdGltaXplIHRoZSBmYXN0LXBhdGggYXR0ZW1wdC5cbjU0NDg6XHRcdCAqL1xuNTQ0OTpcdFx0YWMubm9kZW1hc2sgPSBub2RlbWFzaztcbjU0NTA6XHRcbjU0NTE6XHRcdHBhZ2UgPSBfX2FsbG9jX3BhZ2VzX3Nsb3dwYXRoKGFsbG9jX2dmcCwgb3JkZXIsIFx1MDAyNmFjKTtcbjU0NTI6XHRcbjU0NTM6XHRvdXQ6XG41NDU0Olx0XHRpZiAobWVtY2dfa21lbV9vbmxpbmUoKSBcdTAwMjZcdTAwMjYgKGdmcCBcdTAwMjYgX19HRlBfQUNDT1VOVCkgXHUwMDI2XHUwMDI2IHBhZ2UgXHUwMDI2XHUwMDI2XG41NDU1Olx0XHQgICAgdW5saWtlbHkoX19tZW1jZ19rbWVtX2NoYXJnZV9wYWdlKHBhZ2UsIGdmcCwgb3JkZXIpICE9IDApKSB7XG41NDU2Olx0XHRcdF9fZnJlZV9mcm96ZW5fcGFnZXMocGFnZSwgb3JkZXIsXG41NDU3Olx0XHRcdFx0XHQgICAgYWxsb2NfZmxhZ3MgXHUwMDI2IEFMTE9DX05PTE9DSyA/IEZQSV9OT0xPQ0sgOiAwKTtcbjU0NTg6XHRcdFx0cGFnZSA9IE5VTEw7XG41NDU5Olx0XHR9XG41NDYwOlx0XG41NDYxOlx0XHR0cmFjZV9tbV9wYWdlX2FsbG9jKHBhZ2UsIG9yZGVyLCBhbGxvY19nZnAsIGFjLm1pZ3JhdGV0eXBlKTtcbjU0NjI6XHRcdGttc2FuX2FsbG9jX3BhZ2UocGFnZSwgb3JkZXIsIGFsbG9jX2dmcCk7XG41NDYzOlx0XG41NDY0Olx0XHRyZXR1cm4gcGFnZTtcbjU0NjU6XHR9XG41NDY2Olx0RVhQT1JUX1NZTUJPTChfX2FsbG9jX2Zyb3plbl9wYWdlc19ub3Byb2YpO1xuNTQ2NzpcdFxuNTQ2ODpcdHN0cnVjdCBwYWdlICpfX2FsbG9jX3BhZ2VzX25vcHJvZihnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBvcmRlcixcbjU0Njk6XHRcdFx0aW50IHByZWZlcnJlZF9uaWQsIG5vZGVtYXNrX3QgKm5vZGVtYXNrLCB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MpXG41NDcwOlx0e1xuNTQ3MTpcdFx0c3RydWN0IHBhZ2UgKnBhZ2U7XG41NDcyOlx0XG41NDczOlx0XHRwYWdlID0gX19hbGxvY19mcm96ZW5fcGFnZXNfbm9wcm9mKGdmcCwgb3JkZXIsIHByZWZlcnJlZF9uaWQsIG5vZGVtYXNrLFxuNTQ3NDpcdFx0XHRcdFx0XHQgICBhbGxvY19mbGFncyk7XG41NDc1Olx0XHRpZiAocGFnZSlcbjU0NzY6XHRcdFx0c2V0X3BhZ2VfcmVmY291bnRlZChwYWdlKTtcbjU0Nzc6XHRcdHJldHVybiBwYWdlO1xuNTQ3ODpcdH1cbjU0Nzk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTI6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTM0MgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI4MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUGFnZSBBbGxvY2F0aW9uIGluIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSSYjMzk7bSBsb29raW5nIGF0IGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAgYW5kIHNwZWNpZmljYWxseSB0aGlzIHNuaXBwZXQ6CgpgYGBjCgkJcHJlcF9uZXdfcGFnZShwYWdlLCAwLCBnZnAsIEFMTE9DX0RFRkFVTFQpOwomIzQzOwkJdHJhY2VfbW1fcGFnZV9hbGxvYyhwYWdlLCAwLCBnZnAsIGFjLm1pZ3JhdGV0eXBlKTsKJiM0MzsJCWttc2FuX2FsbG9jX3BhZ2UocGFnZSwgMCwgZ2ZwICZhbXA7IH5fX0dGUF9SRUNMQUlNKTsKCQlzZXRfcGFnZV9yZWZjb3VudGVkKHBhZ2UpOwoJCXBhZ2VfYXJyYXlbbnJfcG9wdWxhdGVkJiM0MzsmIzQzO10gPSBwYWdlOwpgYGAKClJpZ2h0LCBzbyBhZnRlciB0aGlzIHBhdGNoLCBpdCBzZWVtcyB0aGUgY29kZSBub3cgY2FsbHMgYGttc2FuX2FsbG9jX3BhZ2VgLiBCZWZvcmUsIGlmIEkgcmVjYWxsIGNvcnJlY3RseSwgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCB3YXMgcHVsbGluZyBwYWdlcyBkaXJlY3RseSBmcm9tIHRoZSBQQ1AgbGlzdCwgdXNpbmcgYF9fcm1xdWV1ZV9wY3BsaXN0YCwgdGhlbiBjYWxsaW5nIGBwcmVwX25ld19wYWdlYCwgYHNldF9wYWdlX3JlZmNvdW50ZWRgIGFuZCByZXR1cm5pbmcuIFRoZSBjcnVjaWFsIHBvaW50IGlzIHRoYXQgaXQgKndhc24mIzM5O3QqIGNhbGxpbmcgYGttc2FuX2FsbG9jX3BhZ2VgIGJlZm9yZS4KCldhaXQgYSBzZWNvbmQuIEkga25vdyB0aGF0IGBfX2FsbG9jX2Zyb3plbl9wYWdlc19ub3Byb2ZgIGNhbGxzIGBrbXNhbl9hbGxvY19wYWdlYCwgcGFzc2luZyBpbiBgb3JkZXJgIGFuZCBgYWxsb2NfZ2ZwYCwgYnV0IHdoYXQgZXhhY3RseSAqZG9lcyogYGttc2FuX2FsbG9jX3BhZ2VgIGRvPyBDbGVhcmx5LCBJIG5lZWQgdG8gY2hlY2sgaXRzIGltcGxlbWVudGF0aW9uIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZS4gTGV0IG1lIGdvIGZpbmQgdGhhdCBkZWZpbml0aW9uIGluIGBtbS9rbXNhbi9zaGFkb3cuY2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDEyOjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0va21zYW4vc2hhZG93LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE2NTpcdFx0X19tZW1jcHkoc2hhZG93X3B0cl9mb3IoZHN0KSwgc2hhZG93X3B0cl9mb3Ioc3JjKSwgUEFHRV9TSVpFKTtcbiAxNjY6XHRcdF9fbWVtY3B5KG9yaWdpbl9wdHJfZm9yKGRzdCksIG9yaWdpbl9wdHJfZm9yKHNyYyksIFBBR0VfU0laRSk7XG4gMTY3Olx0XHRrbXNhbl9sZWF2ZV9ydW50aW1lKCk7XG4gMTY4Olx0fVxuIDE2OTpcdEVYUE9SVF9TWU1CT0woa21zYW5fY29weV9wYWdlX21ldGEpO1xuIDE3MDpcdFxuIDE3MTpcdHZvaWQga21zYW5fYWxsb2NfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyLCBnZnBfdCBmbGFncylcbiAxNzI6XHR7XG4gMTczOlx0XHRib29sIGluaXRpYWxpemVkID0gKGZsYWdzIFx1MDAyNiBfX0dGUF9aRVJPKSB8fCAha21zYW5fZW5hYmxlZDtcbiAxNzQ6XHRcdHN0cnVjdCBwYWdlICpzaGFkb3csICpvcmlnaW47XG4gMTc1Olx0XHRkZXBvdF9zdGFja19oYW5kbGVfdCBoYW5kbGU7XG4gMTc2Olx0XHRpbnQgcGFnZXMgPSAxIFx1MDAzY1x1MDAzYyBvcmRlcjtcbiAxNzc6XHRcbiAxNzg6XHRcdGlmICghcGFnZSlcbiAxNzk6XHRcdFx0cmV0dXJuO1xuIDE4MDpcdFxuIDE4MTpcdFx0c2hhZG93ID0gc2hhZG93X3BhZ2VfZm9yKHBhZ2UpO1xuIDE4MjpcdFx0b3JpZ2luID0gb3JpZ2luX3BhZ2VfZm9yKHBhZ2UpO1xuIDE4MzpcdFxuIDE4NDpcdFx0aWYgKGluaXRpYWxpemVkKSB7XG4gMTg1Olx0XHRcdF9fbWVtc2V0KHBhZ2VfYWRkcmVzcyhzaGFkb3cpLCAwLCBQQUdFX1NJWkUgKiBwYWdlcyk7XG4gMTg2Olx0XHRcdF9fbWVtc2V0KHBhZ2VfYWRkcmVzcyhvcmlnaW4pLCAwLCBQQUdFX1NJWkUgKiBwYWdlcyk7XG4gMTg3Olx0XHRcdHJldHVybjtcbiAxODg6XHRcdH1cbiAxODk6XHRcbiAxOTA6XHRcdC8qIFplcm8gcGFnZXMgYWxsb2NhdGVkIGJ5IHRoZSBydW50aW1lIHNob3VsZCBhbHNvIGJlIGluaXRpYWxpemVkLiAqL1xuIDE5MTpcdFx0aWYgKGttc2FuX2luX3J1bnRpbWUoKSlcbiAxOTI6XHRcdFx0cmV0dXJuO1xuIDE5MzpcdFxuIDE5NDpcdFx0X19tZW1zZXQocGFnZV9hZGRyZXNzKHNoYWRvdyksIC0xLCBQQUdFX1NJWkUgKiBwYWdlcyk7XG4gMTk1Olx0XHRrbXNhbl9lbnRlcl9ydW50aW1lKCk7XG4gMTk2Olx0XHRoYW5kbGUgPSBrbXNhbl9zYXZlX3N0YWNrX3dpdGhfZmxhZ3MoZmxhZ3MsIC8qZXh0cmFfYml0cyovIDApO1xuIDE5NzpcdFx0a21zYW5fbGVhdmVfcnVudGltZSgpO1xuIDE5ODpcdFx0LypcbiAxOTk6XHRcdCAqIEFkZHJlc3NlcyBhcmUgcGFnZS1hbGlnbmVkLCBwYWdlcyBhcmUgY29udGlndW91cywgc28gaXQmIzM5O3Mgb2tcbiAyMDA6XHRcdCAqIHRvIGp1c3QgZmlsbCB0aGUgb3JpZ2luIHBhZ2VzIHdpdGggQGhhbmRsZS5cbiAyMDE6XHRcdCAqL1xuIDIwMjpcdFx0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIFBBR0VfU0laRSAqIHBhZ2VzIC8gc2l6ZW9mKGhhbmRsZSk7IGkmIzQzOyYjNDM7KVxuIDIwMzpcdFx0XHQoKGRlcG90X3N0YWNrX2hhbmRsZV90ICopcGFnZV9hZGRyZXNzKG9yaWdpbikpW2ldID0gaGFuZGxlO1xuIDIwNDpcdH1cbiAyMDU6XHRcbiAyMDY6XHR2b2lkIGttc2FuX2ZyZWVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKVxuIDIwNzpcdHtcbiAyMDg6XHRcdGlmICgha21zYW5fZW5hYmxlZCB8fCBrbXNhbl9pbl9ydW50aW1lKCkpXG4gMjA5Olx0XHRcdHJldHVybjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTI6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA3MTcKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAxNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhlc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhIGtlcm5lbCBleHBlcnQ6CgoqKktNU0FOIGFuZCBCdWxrIFBhZ2UgQWxsb2NhdGlvbjogQSBNaXNzaW5nIFBpZWNlKioKCkFscmlnaHQsIHNvIGBrbXNhbl9hbGxvY19wYWdlYCBpcyB0aGUga2V5IEtNU0FOIGhvb2sgZm9yIHRyYWNraW5nIHRoZSBhbGxvY2F0aW9uIG9mIG1lbW9yeSBwYWdlcy4gV2l0aG91dCBpdCwgS01TQU4gbWlzc2VzIHBhZ2VzIHRoYXQgYXJlIGFsbG9jYXRlZCB0aHJvdWdoIGBhbGxvY19wYWdlc19idWxrYC4gU3BlY2lmaWNhbGx5LCB0aGUgS01TQU4gc2hhZG93IG1lbW9yeSwgd2hpY2gga2VlcHMgdHJhY2sgb2YgdW5pbml0aWFsaXplZCBkYXRhLCBkb2VzbiYjMzk7dCBnZXQgdXBkYXRlZCBvciBwb2lzb25lZCAoaW5pdGlhbGl6ZWQgdG8gYSBzcGVjaWZpYyB2YWx1ZSB0byBtYWtlIGRlYnVnZ2luZyBlYXNpZXIpIHdoZW4gcGFnZXMgYXJlIGFsbG9jYXRlZCB3aXRoIGBhbGxvY19wYWdlc19idWxrYC4gRXNzZW50aWFsbHksIEtNU0FOIGRvZXNuJiMzOTt0ICYjMzQ7a25vdyYjMzQ7IGFib3V0IHRob3NlIHBhZ2VzLgoKSGFuZyBvbiBhIHNlY29uZOKApiB0aGlzIHBhdGNoIGlzIGFkZHJlc3NpbmcgdGhhdCBleGFjdCBpc3N1ZSEgSXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgZml4aW5nIGEgZ2FwIGluIHRyYWNpbmcgYW5kIGFkZGluZyBhIG1pc3NpbmcgS01TQU4gaG9vayAoYHRyYWNlX21tX3BhZ2VfYWxsb2NgIGFuZCBga21zYW5fYWxsb2NfcGFnZWApIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAgZnVuY3Rpb24uIFRoYXQmIzM5O3MgYSBjcml0aWNhbCBvdmVyc2lnaHQgYmVpbmcgcmVjdGlmaWVkLgoKTm93LCBob2xkIG9uLiBCZWZvcmUgSSBkaXZlIGZ1cnRoZXIsIGxldCYjMzk7cyBzdGVwIGJhY2sgYW5kIHVuZGVyc3RhbmQgdGhlIHNjb3BlLiBMZXQgbWUgcXVpY2tseSBzZWUgd2hlcmUgYGFsbG9jX3BhZ2VzX2J1bGtgIGlzIGNhbGxlZCBmcm9tIGluIHRoZSBrZXJuZWwuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB3aWRlc3ByZWFkIHRoaXMgY2hhbmdlIHdpbGwgaW1wYWN0IHRoZSBzeXN0ZW0uIEkmIzM5O2xsIHNlYXJjaCB0aGUga2VybmVsIHNvdXJjZSBmb3IgYWxsIGluc3RhbmNlcyBvZiBgYWxsb2NfcGFnZXNfYnVsa2AgYW5kIHNlZSB3aGF0JiMzOTtzIHVzaW5nIHRoaXMgYWxsb2NhdGlvbiBwYXRoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMjowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthbGxvY19wYWdlc19idWxrJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYz0xNzI9c3RhdGljIHN0cnVjdCBiaW8gKmJsa19jcnlwdG9fYWxsb2NfZW5jX2JpbyhzdHJ1Y3QgYmlvICpiaW9fc3JjLFxuLS1cbmJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYy0yMDQtXHQgKlxuYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jOjIwNTpcdCAqIE5vdGU6IGFsbG9jX3BhZ2VzX2J1bGsgbmVlZHMgdGhlIGFycmF5IHRvIGJlIHplcm9lZCwgYXMgaXQgYXNzdW1lc1xuYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jLTIwNi1cdCAqIGFueSBub24temVybyBzbG90IGFscmVhZHkgY29udGFpbnMgYSB2YWxpZCBhbGxvY2F0aW9uLlxuLS1cbmJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYy0yMDgtXHRtZW1zZXQocGFnZXMsIDAsIHNpemVvZihzdHJ1Y3QgcGFnZSAqKSAqIG5yX3NlZ3MpO1xuYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jOjIwOTpcdG5yX2FsbG9jYXRlZCA9IGFsbG9jX3BhZ2VzX2J1bGsoR0ZQX0tFUk5FTCwgbnJfc2VncywgcGFnZXMpO1xuYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jLTIxMC1cdGlmIChucl9hbGxvY2F0ZWQgXHUwMDNjIG5yX3NlZ3MpXG4tLVxuZHJpdmVycy9maXJld2lyZS9jb3JlLWlzby5jPTMxPWludCBmd19pc29fYnVmZmVyX2FsbG9jKHN0cnVjdCBmd19pc29fYnVmZmVyICpidWZmZXIsIGludCBwYWdlX2NvdW50KVxuLS1cbmRyaXZlcnMvZmlyZXdpcmUvY29yZS1pc28uYy00MS1cdC8vIGNvbnZlbmllbmNlIHRvIG1hcCB0aGVtIGludG8gdmlydHVhbCBhZGRyZXNzIHNwYWNlIG9mIHVzZXIgcHJvY2Vzcy5cbmRyaXZlcnMvZmlyZXdpcmUvY29yZS1pc28uYzo0MjpcdHVuc2lnbmVkIGxvbmcgbnJfcG9wdWxhdGVkID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfS0VSTkVMIHwgR0ZQX0RNQTMyIHwgX19HRlBfWkVSTyxcbmRyaXZlcnMvZmlyZXdpcmUvY29yZS1pc28uYy00My1cdFx0XHRcdFx0XHQgICAgICBwYWdlX2NvdW50LCBwYWdlX2FycmF5KTtcbi0tXG5kcml2ZXJzL2ZpcmV3aXJlL29oY2kuYz04NDg9c3RhdGljIGludCBhcl9jb250ZXh0X2luaXQoc3RydWN0IGFyX2NvbnRleHQgKmN0eCwgc3RydWN0IGZ3X29oY2kgKm9oY2ksXG4tLVxuZHJpdmVycy9maXJld2lyZS9vaGNpLmMtODY0LVx0Ly8gYWRkcmVzcyByYW5nZSBpbiBrZXJuZWwgdmlydHVhbCBhZGRyZXNzIHNwYWNlLlxuZHJpdmVycy9maXJld2lyZS9vaGNpLmM6ODY1Olx0dW5zaWduZWQgbG9uZyBucl9wb3B1bGF0ZWQgPSBhbGxvY19wYWdlc19idWxrKEdGUF9LRVJORUwgfCBHRlBfRE1BMzIsIEFSX0JVRkZFUlMsIHBhZ2VzKTtcbmRyaXZlcnMvZmlyZXdpcmUvb2hjaS5jLTg2Ni1cbi0tXG5kcml2ZXJzL3N0YWdpbmcvbWVkaWEvYXRvbWlzcC9wY2kvaG1tL2htbV9iby5jPTYyMT1zdGF0aWMgaW50IGFsbG9jX3ByaXZhdGVfcGFnZXMoc3RydWN0IGhtbV9idWZmZXJfb2JqZWN0ICpibylcbi0tXG5kcml2ZXJzL3N0YWdpbmcvbWVkaWEvYXRvbWlzcC9wY2kvaG1tL2htbV9iby5jLTYyNi1cbmRyaXZlcnMvc3RhZ2luZy9tZWRpYS9hdG9taXNwL3BjaS9obW0vaG1tX2JvLmM6NjI3Olx0bnJfYWxsb2NhdGVkID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfS0VSTkVMLCBiby1cdTAwM2VwZ25yLCBiby1cdTAwM2VwYWdlcyk7XG5kcml2ZXJzL3N0YWdpbmcvbWVkaWEvYXRvbWlzcC9wY2kvaG1tL2htbV9iby5jLTYyOC1cdC8qXG5kcml2ZXJzL3N0YWdpbmcvbWVkaWEvYXRvbWlzcC9wY2kvaG1tL2htbV9iby5jOjYyOTpcdCAqIGFsbG9jX3BhZ2VzX2J1bGsoKSBkb2VzIG5vdCB0cnkgdmVyeSBoYXJkIHRvIGdldCBwYWdlcyB1bmRlciBtZW1vcnlcbmRyaXZlcnMvc3RhZ2luZy9tZWRpYS9hdG9taXNwL3BjaS9obW0vaG1tX2JvLmMtNjMwLVx0ICogcHJlc3N1cmUuIElmIG5lY2Vzc2FyeSBmYWxsIGJhY2sgdG8gYWxsb2NfcGFnZSgpLlxuLS1cbmRyaXZlcnMvdmZpby9wY2kvbWx4NS9jbWQuYz00NjY9c3RhdGljIHZvaWQgZnJlZV9wYWdlX2xpc3QodTMyIG5wYWdlcywgc3RydWN0IHBhZ2UgKipwYWdlX2xpc3QpXG4tLVxuZHJpdmVycy92ZmlvL3BjaS9tbHg1L2NtZC5jLTQ2OS1cbmRyaXZlcnMvdmZpby9wY2kvbWx4NS9jbWQuYzo0NzA6XHQvKiBVbmRvIGFsbG9jX3BhZ2VzX2J1bGsoKSAqL1xuZHJpdmVycy92ZmlvL3BjaS9tbHg1L2NtZC5jLTQ3MS1cdGZvciAoaSA9IG5wYWdlcyAtIDE7IGkgXHUwMDNlPSAwOyBpLS0pXG4tLVxuZHJpdmVycy92ZmlvL3BjaS9tbHg1L2NtZC5jPTQ5Nj1zdGF0aWMgaW50IG1seDV2Zl9hZGRfcGFnZXMoc3RydWN0IHBhZ2UgKioqcGFnZV9saXN0LCB1bnNpZ25lZCBpbnQgbnBhZ2VzKVxuLS1cbmRyaXZlcnMvdmZpby9wY2kvbWx4NS9jbWQuYy01MDYtXHRmb3IgKDs7KSB7XG5kcml2ZXJzL3ZmaW8vcGNpL21seDUvY21kLmM6NTA3Olx0XHRmaWxsZWQgPSBhbGxvY19wYWdlc19idWxrKEdGUF9LRVJORUxfQUNDT1VOVCwgbnBhZ2VzIC0gZG9uZSxcbmRyaXZlcnMvdmZpby9wY2kvbWx4NS9jbWQuYy01MDgtXHRcdFx0XHRcdCAgKnBhZ2VfbGlzdCAmIzQzOyBkb25lKTtcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZpcnRpby9taWdyYXRlLmM9NjM9c3RhdGljIGludCB2aXJ0aW92Zl9hZGRfbWlncmF0aW9uX3BhZ2VzKHN0cnVjdCB2aXJ0aW92Zl9kYXRhX2J1ZmZlciAqYnVmLFxuLS1cbmRyaXZlcnMvdmZpby9wY2kvdmlydGlvL21pZ3JhdGUuYy03OC1cdGRvIHtcbmRyaXZlcnMvdmZpby9wY2kvdmlydGlvL21pZ3JhdGUuYzo3OTpcdFx0ZmlsbGVkID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfS0VSTkVMX0FDQ09VTlQsIHRvX2ZpbGwsXG5kcml2ZXJzL3ZmaW8vcGNpL3ZpcnRpby9taWdyYXRlLmMtODAtXHRcdFx0XHRcdCAgcGFnZV9saXN0KTtcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZpcnRpby9taWdyYXRlLmM9MTEwPXN0YXRpYyB2b2lkIHZpcnRpb3ZmX2ZyZWVfZGF0YV9idWZmZXIoc3RydWN0IHZpcnRpb3ZmX2RhdGFfYnVmZmVyICpidWYpXG4tLVxuZHJpdmVycy92ZmlvL3BjaS92aXJ0aW8vbWlncmF0ZS5jLTExMy1cbmRyaXZlcnMvdmZpby9wY2kvdmlydGlvL21pZ3JhdGUuYzoxMTQ6XHQvKiBVbmRvIGFsbG9jX3BhZ2VzX2J1bGsoKSAqL1xuZHJpdmVycy92ZmlvL3BjaS92aXJ0aW8vbWlncmF0ZS5jLTExNS1cdGZvcl9lYWNoX3NndGFibGVfcGFnZShcdTAwMjZidWYtXHUwMDNldGFibGUuc2d0LCBcdTAwMjZzZ19pdGVyLCAwKVxuLS1cbmZzL2J0cmZzL2V4dGVudF9pby5jPTY4ND1pbnQgYnRyZnNfYWxsb2NfcGFnZV9hcnJheSh1bnNpZ25lZCBpbnQgbnJfcGFnZXMsIHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheSwgZ2ZwX3QgZ2ZwKVxuLS1cbmZzL2J0cmZzL2V4dGVudF9pby5jLTY5MC1cbmZzL2J0cmZzL2V4dGVudF9pby5jOjY5MTpcdFx0YWxsb2NhdGVkID0gYWxsb2NfcGFnZXNfYnVsayhnZnAsIG5yX3BhZ2VzLCBwYWdlX2FycmF5KTtcbmZzL2J0cmZzL2V4dGVudF9pby5jLTY5Mi1cdFx0aWYgKHVubGlrZWx5KGFsbG9jYXRlZCA9PSBsYXN0KSkge1xuLS1cbmZzL2Vyb2ZzL3p1dGlsLmM9NjU9aW50IHpfZXJvZnNfZ2J1Zl9ncm93c2l6ZSh1bnNpZ25lZCBpbnQgbnJwYWdlcylcbi0tXG5mcy9lcm9mcy96dXRpbC5jLTg5LVx0XHRcdGxhc3QgPSBqO1xuZnMvZXJvZnMvenV0aWwuYzo5MDpcdFx0XHRqID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfS0VSTkVMLCBucnBhZ2VzLCB0bXBfcGFnZXMpO1xuZnMvZXJvZnMvenV0aWwuYy05MS1cdFx0XHRpZiAobGFzdCA9PSBqKVxuLS1cbmZzL2Z1c2UvcmVhZGRpci5jPTMzNj1zdGF0aWMgc3RydWN0IHBhZ2UgKipmdXNlX3JlYWRkaXJfYWxsb2NfYnVmKHN0cnVjdCBmdXNlX2FyZ3NfcGFnZXMgKmFwLCBzaXplX3QgKmJ1ZnNpemUpXG4tLVxuZnMvZnVzZS9yZWFkZGlyLmMtMzQzLVxuZnMvZnVzZS9yZWFkZGlyLmM6MzQ0Olx0bnJfYWxsb2MgPSBhbGxvY19wYWdlc19idWxrKEdGUF9LRVJORUwsIG5yX3BhZ2VzLCBwYWdlcyk7XG5mcy9mdXNlL3JlYWRkaXIuYy0zNDUtXHRpZiAoIW5yX2FsbG9jKVxuLS1cbmZzL25mc2QvbmZzNHN0YXRlLmM9MTMyNj1hbGxvY19pbml0X2Rpcl9kZWxlZyhzdHJ1Y3QgbmZzNF9jbGllbnQgKmNscCwgc3RydWN0IG5mczRfZmlsZSAqZnApXG4tLVxuZnMvbmZzZC9uZnM0c3RhdGUuYy0xMzM3LVxuZnMvbmZzZC9uZnM0c3RhdGUuYzoxMzM4Olx0bnBhZ2VzID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfS0VSTkVMLCBOT1RJRlk0X1BBR0VfQVJSQVlfU0laRSwgbmNuLVx1MDAzZW5jbl9wYWdlcyk7XG5mcy9uZnNkL25mczRzdGF0ZS5jLTEzMzktXHRpZiAobnBhZ2VzICE9IE5PVElGWTRfUEFHRV9BUlJBWV9TSVpFKSB7XG4tLVxuZnMvc3BsaWNlLmM9MzE4PXNzaXplX3QgY29weV9zcGxpY2VfcmVhZChzdHJ1Y3QgZmlsZSAqaW4sIGxvZmZfdCAqcHBvcyxcbi0tXG5mcy9zcGxpY2UuYy0zNDEtXHRwYWdlcyA9IChzdHJ1Y3QgcGFnZSAqKikoYnYgJiM0MzsgbnBhZ2VzKTtcbmZzL3NwbGljZS5jOjM0MjpcdG5wYWdlcyA9IGFsbG9jX3BhZ2VzX2J1bGsoR0ZQX1VTRVIsIG5wYWdlcywgcGFnZXMpO1xuZnMvc3BsaWNlLmMtMzQzLVx0aWYgKCFucGFnZXMpIHtcbi0tXG5pbmNsdWRlL2xpbnV4L2dmcC5oPTIwNz1zdHJ1Y3QgZm9saW8gKl9fZm9saW9fYWxsb2Nfbm9wcm9mKGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG9yZGVyLCBpbnQgcHJlZmVycmVkX25pZCxcbi0tXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIxMC1cbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjExOnVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoZ2ZwX3QgZ2ZwLCBpbnQgcHJlZmVycmVkX25pZCxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjEyLVx0XHRcdFx0bm9kZW1hc2tfdCAqbm9kZW1hc2ssIGludCBucl9wYWdlcyxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjEzLVx0XHRcdFx0c3RydWN0IHBhZ2UgKipwYWdlX2FycmF5KTtcbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjE0OiNkZWZpbmUgX19hbGxvY19wYWdlc19idWxrKC4uLilcdFx0XHRhbGxvY19ob29rcyhhbGxvY19wYWdlc19idWxrX25vcHJvZihfX1ZBX0FSR1NfXykpXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIxNS1cbmluY2x1ZGUvbGludXgvZ2ZwLmg9MjE2PXZvaWQgZnJlZV9wYWdlc19idWxrKHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheSwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyk7XG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIxNy1cbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjE4OnVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mKGdmcF90IGdmcCxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjE5LVx0XHRcdFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjIwLVx0XHRcdFx0c3RydWN0IHBhZ2UgKipwYWdlX2FycmF5KTtcbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjIxOiNkZWZpbmUgIGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5KC4uLilcdFx0XHRcdFxcXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjIyMjpcdGFsbG9jX2hvb2tzKGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZihfX1ZBX0FSR1NfXykpXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIyMy1cbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjI0LS8qIEJ1bGsgYWxsb2NhdGUgb3JkZXItMCBwYWdlcyAqL1xuaW5jbHVkZS9saW51eC9nZnAuaDoyMjU6I2RlZmluZSBhbGxvY19wYWdlc19idWxrKF9nZnAsIF9ucl9wYWdlcywgX3BhZ2VfYXJyYXkpXHRcdFxcXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjIyNjpcdF9fYWxsb2NfcGFnZXNfYnVsayhfZ2ZwLCBudW1hX21lbV9pZCgpLCBOVUxMLCBfbnJfcGFnZXMsIF9wYWdlX2FycmF5KVxuaW5jbHVkZS9saW51eC9nZnAuaC0yMjctXG5pbmNsdWRlL2xpbnV4L2dmcC5oPTIyOD1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmdcbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjI5OmFsbG9jX3BhZ2VzX2J1bGtfbm9kZV9ub3Byb2YoZ2ZwX3QgZ2ZwLCBpbnQgbmlkLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxuaW5jbHVkZS9saW51eC9nZnAuaC0yMzAtXHRcdFx0XHQgICBzdHJ1Y3QgcGFnZSAqKnBhZ2VfYXJyYXkpXG4tLVxuaW5jbHVkZS9saW51eC9nZnAuaC0yMzQtXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjIzNTpcdHJldHVybiBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnAsIG5pZCwgTlVMTCwgbnJfcGFnZXMsIHBhZ2VfYXJyYXkpO1xuaW5jbHVkZS9saW51eC9nZnAuaC0yMzYtfVxuaW5jbHVkZS9saW51eC9nZnAuaC0yMzctXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjIzODojZGVmaW5lIGFsbG9jX3BhZ2VzX2J1bGtfbm9kZSguLi4pXHRcdFx0XHRcXFxuaW5jbHVkZS9saW51eC9nZnAuaDoyMzk6XHRhbGxvY19ob29rcyhhbGxvY19wYWdlc19idWxrX25vZGVfbm9wcm9mKF9fVkFfQVJHU19fKSlcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjQwLVxuLS1cbmlvX3VyaW5nL21lbW1hcC5jPTE3ND1zdGF0aWMgaW50IGlvX3JlZ2lvbl9hbGxvY2F0ZV9wYWdlcyhzdHJ1Y3QgaW9fbWFwcGVkX3JlZ2lvbiAqbXIsXG4tLVxuaW9fdXJpbmcvbWVtbWFwLmMtMTkyLVxuaW9fdXJpbmcvbWVtbWFwLmM6MTkzOlx0bnJfYWxsb2NhdGVkID0gYWxsb2NfcGFnZXNfYnVsa19ub2RlKGdmcCwgTlVNQV9OT19OT0RFLFxuaW9fdXJpbmcvbWVtbWFwLmMtMTk0LVx0XHRcdFx0XHQgICAgIG1yLVx1MDAzZW5yX3BhZ2VzLCBwYWdlcyk7XG4tLVxua2VybmVsL2JwZi9hcmVuYS5jPTY2OD1zdGF0aWMgbG9uZyBhcmVuYV9hbGxvY19wYWdlcyhzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSwgbG9uZyB1YWRkciwgbG9uZyBwYWdlX2NudCwgaW50IG5vZGVfaWQsXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTczMi1cbmtlcm5lbC9icGYvYXJlbmEuYzo3MzM6XHRcdC8qIHplcm9pbmcgaXMgbmVlZGVkLCBzaW5jZSBhbGxvY19wYWdlc19idWxrKCkgb25seSBmaWxscyBpbiBub24temVybyBlbnRyaWVzICovXG5rZXJuZWwvYnBmL2FyZW5hLmMtNzM0LVx0XHRtZW1zZXQocGFnZXMsIDAsIHRoaXNfYmF0Y2ggKiBzaXplb2Yoc3RydWN0IHBhZ2UgKikpO1xuLS1cbmxpYi90ZXN0X3ZtYWxsb2MuYz0zOTE9dm1fbWFwX3JhbV90ZXN0KHZvaWQpXG4tLVxubGliL3Rlc3Rfdm1hbGxvYy5jLTQwMy1cbmxpYi90ZXN0X3ZtYWxsb2MuYzo0MDQ6XHRucl9hbGxvY2F0ZWQgPSBhbGxvY19wYWdlc19idWxrKEdGUF9LRVJORUwsIG1hcF9ucl9wYWdlcywgcGFnZXMpO1xubGliL3Rlc3Rfdm1hbGxvYy5jLTQwNS1cdGlmIChucl9hbGxvY2F0ZWQgIT0gbWFwX25yX3BhZ2VzKVxuLS1cbmxpYi90ZXN0cy9rdW5pdF9pb3ZfaXRlci5jPTUxPXN0YXRpYyB2b2lkICpfX2luaXQgaW92X2t1bml0X2NyZWF0ZV9idWZmZXIoc3RydWN0IGt1bml0ICp0ZXN0LFxuLS1cbmxpYi90ZXN0cy9rdW5pdF9pb3ZfaXRlci5jLTY2LVx0XHRsYXN0ID0gZ290O1xubGliL3Rlc3RzL2t1bml0X2lvdl9pdGVyLmM6Njc6XHRcdGdvdCA9IGFsbG9jX3BhZ2VzX2J1bGsoR0ZQX0tFUk5FTCwgbnBhZ2VzLCBwYWdlcyk7XG5saWIvdGVzdHMva3VuaXRfaW92X2l0ZXIuYy02OC1cbi0tXG5tbS9hbGxvY190YWcuYz03Nzc9c3RhdGljIGludCB2bV9tb2R1bGVfdGFnc19wb3B1bGF0ZSh2b2lkKVxuLS1cbm1tL2FsbG9jX3RhZy5jLTc5My1cbm1tL2FsbG9jX3RhZy5jOjc5NDpcdFx0XHRhbGxvY2F0ZWQgPSBhbGxvY19wYWdlc19idWxrX25vZGUoR0ZQX0tFUk5FTCB8IF9fR0ZQX05PV0FSTixcbm1tL2FsbG9jX3RhZy5jLTc5NS1cdFx0XHRcdE5VTUFfTk9fTk9ERSwgbW9yZV9wYWdlcyAtIG5yLCBuZXh0X3BhZ2UgJiM0MzsgbnIpO1xuLS1cbm1tL2thc2FuL3NoYWRvdy5jPTMyNz1zdGF0aWMgdm9pZCBfX19mcmVlX3BhZ2VzX2J1bGsoc3RydWN0IHBhZ2UgKipwYWdlcywgaW50IG5yX3BhZ2VzKVxuLS1cbm1tL2thc2FuL3NoYWRvdy5jLTMzOC1cbm1tL2thc2FuL3NoYWRvdy5jOjMzOTpzdGF0aWMgaW50IF9fX2FsbG9jX3BhZ2VzX2J1bGsoc3RydWN0IHBhZ2UgKipwYWdlcywgaW50IG5yX3BhZ2VzLCBnZnBfdCBnZnBfbWFzaylcbm1tL2thc2FuL3NoYWRvdy5jLTM0MC17XG4tLVxubW0va2FzYW4vc2hhZG93LmMtMzQ0LVx0d2hpbGUgKG5yX3BhZ2VzKSB7XG5tbS9rYXNhbi9zaGFkb3cuYzozNDU6XHRcdG5yX3BvcHVsYXRlZCA9IGFsbG9jX3BhZ2VzX2J1bGsoZ2ZwX21hc2ssIG5yX3BhZ2VzLCBwYWdlcyk7XG5tbS9rYXNhbi9zaGFkb3cuYy0zNDYtXHRcdGlmICghbnJfcG9wdWxhdGVkKSB7XG4tLVxubW0va2FzYW4vc2hhZG93LmM9MzU3PXN0YXRpYyBpbnQgX19rYXNhbl9wb3B1bGF0ZV92bWFsbG9jX2RvKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLCBnZnBfdCBnZnBfbWFzaylcbi0tXG5tbS9rYXNhbi9zaGFkb3cuYy0zNjktXHRcdG5yX3BhZ2VzID0gbWluKG5yX3RvdGFsLCBQQUdFX1NJWkUgLyBzaXplb2YoZGF0YS5wYWdlc1swXSkpO1xubW0va2FzYW4vc2hhZG93LmM6MzcwOlx0XHRyZXQgPSBfX19hbGxvY19wYWdlc19idWxrKGRhdGEucGFnZXMsIG5yX3BhZ2VzLCBnZnBfbWFzayk7XG5tbS9rYXNhbi9zaGFkb3cuYy0zNzEtXHRcdGlmIChyZXQpXG4tLVxubW0vbWVtcG9saWN5LmM9MjU4OT1FWFBPUlRfU1lNQk9MKGZvbGlvX2FsbG9jX25vcHJvZik7XG5tbS9tZW1wb2xpY3kuYy0yNTkwLVxubW0vbWVtcG9saWN5LmM6MjU5MTpzdGF0aWMgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX2ludGVybGVhdmUoZ2ZwX3QgZ2ZwLFxubW0vbWVtcG9saWN5LmMtMjU5Mi1cdFx0c3RydWN0IG1lbXBvbGljeSAqcG9sLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxuLS1cbm1tL21lbXBvbGljeS5jLTI2MDctXHRcdGlmIChkZWx0YSkge1xubW0vbWVtcG9saWN5LmM6MjYwODpcdFx0XHRucl9hbGxvY2F0ZWQgPSBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnAsXG5tbS9tZW1wb2xpY3kuYy0yNjA5LVx0XHRcdFx0XHRpbnRlcmxlYXZlX25vZGVzKHBvbCksIE5VTEwsXG4tLVxubW0vbWVtcG9saWN5LmMtMjYxMy1cdFx0fSBlbHNlIHtcbm1tL21lbXBvbGljeS5jOjI2MTQ6XHRcdFx0bnJfYWxsb2NhdGVkID0gYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoZ2ZwLFxubW0vbWVtcG9saWN5LmMtMjYxNS1cdFx0XHRcdFx0aW50ZXJsZWF2ZV9ub2Rlcyhwb2wpLCBOVUxMLFxuLS1cbm1tL21lbXBvbGljeS5jLTI2MjUtXG5tbS9tZW1wb2xpY3kuYzoyNjI2OnN0YXRpYyB1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfd2VpZ2h0ZWRfaW50ZXJsZWF2ZShnZnBfdCBnZnAsXG5tbS9tZW1wb2xpY3kuYy0yNjI3LVx0XHRzdHJ1Y3QgbWVtcG9saWN5ICpwb2wsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG4tLVxubW0vbWVtcG9saWN5LmMtMjY2NC1cdFx0bm9kZV9wYWdlcyA9IG1pbihyZW1fcGFnZXMsIHdlaWdodCk7XG5tbS9tZW1wb2xpY3kuYzoyNjY1Olx0XHRucl9hbGxvY2F0ZWQgPSBfX2FsbG9jX3BhZ2VzX2J1bGsoZ2ZwLCBub2RlLCBOVUxMLCBub2RlX3BhZ2VzLFxubW0vbWVtcG9saWN5LmMtMjY2Ni1cdFx0XHRcdFx0XHQgIHBhZ2VfYXJyYXkpO1xuLS1cbm1tL21lbXBvbGljeS5jLTI3MDEtXHQvKlxubW0vbWVtcG9saWN5LmM6MjcwMjpcdCAqIENhbGN1bGF0ZSByb3VuZHMvcGFydGlhbCByb3VuZHMgdG8gbWluaW1pemUgX19hbGxvY19wYWdlc19idWxrIGNhbGxzLlxubW0vbWVtcG9saWN5LmMtMjcwMy1cdCAqIFRyYWNrIHdoaWNoIG5vZGUgd2VpZ2h0ZWQgaW50ZXJsZWF2ZSBzaG91bGQgcmVzdW1lIGZyb20uXG4tLVxubW0vbWVtcG9saWN5LmMtMjcyOS1cdFx0XHRicmVhaztcbm1tL21lbXBvbGljeS5jOjI3MzA6XHRcdG5yX2FsbG9jYXRlZCA9IF9fYWxsb2NfcGFnZXNfYnVsayhnZnAsIG5vZGUsIE5VTEwsIG5vZGVfcGFnZXMsXG5tbS9tZW1wb2xpY3kuYy0yNzMxLVx0XHRcdFx0XHRcdCAgcGFnZV9hcnJheSk7XG4tLVxubW0vbWVtcG9saWN5LmMtMjc0My1cbm1tL21lbXBvbGljeS5jOjI3NDQ6c3RhdGljIHVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19wcmVmZXJyZWRfbWFueShnZnBfdCBnZnAsIGludCBuaWQsXG5tbS9tZW1wb2xpY3kuYy0yNzQ1LVx0XHRzdHJ1Y3QgbWVtcG9saWN5ICpwb2wsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG4tLVxubW0vbWVtcG9saWN5LmMtMjc1My1cbm1tL21lbXBvbGljeS5jOjI3NTQ6XHRucl9hbGxvY2F0ZWQgID0gYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YocHJlZmVycmVkX2dmcCwgbmlkLCBcdTAwMjZwb2wtXHUwMDNlbm9kZXMsXG5tbS9tZW1wb2xpY3kuYy0yNzU1LVx0XHRcdFx0XHQgICBucl9wYWdlcywgcGFnZV9hcnJheSk7XG4tLVxubW0vbWVtcG9saWN5LmMtMjc1Ny1cdGlmIChucl9hbGxvY2F0ZWQgXHUwMDNjIG5yX3BhZ2VzKVxubW0vbWVtcG9saWN5LmM6Mjc1ODpcdFx0bnJfYWxsb2NhdGVkICYjNDM7PSBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnAsIG51bWFfbm9kZV9pZCgpLCBOVUxMLFxubW0vbWVtcG9saWN5LmMtMjc1OS1cdFx0XHRcdG5yX3BhZ2VzIC0gbnJfYWxsb2NhdGVkLFxuLS1cbm1tL21lbXBvbGljeS5jLTI3NjktICovXG5tbS9tZW1wb2xpY3kuYzoyNzcwOnVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mKGdmcF90IGdmcCxcbm1tL21lbXBvbGljeS5jLTI3NzEtXHRcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsIHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheSlcbi0tXG5tbS9tZW1wb2xpY3kuYy0yNzgwLVx0aWYgKHBvbC1cdTAwM2Vtb2RlID09IE1QT0xfSU5URVJMRUFWRSlcbm1tL21lbXBvbGljeS5jOjI3ODE6XHRcdHJldHVybiBhbGxvY19wYWdlc19idWxrX2ludGVybGVhdmUoZ2ZwLCBwb2wsXG5tbS9tZW1wb2xpY3kuYy0yNzgyLVx0XHRcdFx0XHRcdFx0IG5yX3BhZ2VzLCBwYWdlX2FycmF5KTtcbi0tXG5tbS9tZW1wb2xpY3kuYy0yNzg0LVx0aWYgKHBvbC1cdTAwM2Vtb2RlID09IE1QT0xfV0VJR0hURURfSU5URVJMRUFWRSlcbm1tL21lbXBvbGljeS5jOjI3ODU6XHRcdHJldHVybiBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmUoXG5tbS9tZW1wb2xpY3kuYy0yNzg2LVx0XHRcdFx0ICBnZnAsIHBvbCwgbnJfcGFnZXMsIHBhZ2VfYXJyYXkpO1xuLS1cbm1tL21lbXBvbGljeS5jLTI3ODgtXHRpZiAocG9sLVx1MDAzZW1vZGUgPT0gTVBPTF9QUkVGRVJSRURfTUFOWSlcbm1tL21lbXBvbGljeS5jOjI3ODk6XHRcdHJldHVybiBhbGxvY19wYWdlc19idWxrX3ByZWZlcnJlZF9tYW55KGdmcCxcbm1tL21lbXBvbGljeS5jLTI3OTAtXHRcdFx0XHRudW1hX25vZGVfaWQoKSwgcG9sLCBucl9wYWdlcywgcGFnZV9hcnJheSk7XG4tLVxubW0vbWVtcG9saWN5LmMtMjc5My1cdG5vZGVtYXNrID0gcG9saWN5X25vZGVtYXNrKGdmcCwgcG9sLCBOT19JTlRFUkxFQVZFX0lOREVYLCBcdTAwMjZuaWQpO1xubW0vbWVtcG9saWN5LmM6Mjc5NDpcdHJldHVybiBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnAsIG5pZCwgbm9kZW1hc2ssXG5tbS9tZW1wb2xpY3kuYy0yNzk1LVx0XHRcdFx0ICAgICAgIG5yX3BhZ2VzLCBwYWdlX2FycmF5KTtcbi0tXG5tbS9wYWdlX2FsbG9jLmM9NTA5MT1zdGF0aWMgaW5saW5lIGJvb2wgcHJlcGFyZV9hbGxvY19wYWdlcyhnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyLFxuLS1cbm1tL3BhZ2VfYWxsb2MuYy01MTM5LS8qXG5tbS9wYWdlX2FsbG9jLmM6NTE0MDogKiBfX2FsbG9jX3BhZ2VzX2J1bGsgLSBBbGxvY2F0ZSBhIG51bWJlciBvZiBvcmRlci0wIHBhZ2VzIHRvIGFuIGFycmF5XG5tbS9wYWdlX2FsbG9jLmMtNTE0MS0gKiBAZ2ZwOiBHRlAgZmxhZ3MgZm9yIHRoZSBhbGxvY2F0aW9uXG4tLVxubW0vcGFnZV9hbGxvYy5jLTUxNTktICovXG5tbS9wYWdlX2FsbG9jLmM6NTE2MDp1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKGdmcF90IGdmcCwgaW50IHByZWZlcnJlZF9uaWQsXG5tbS9wYWdlX2FsbG9jLmMtNTE2MS1cdFx0XHRub2RlbWFza190ICpub2RlbWFzaywgaW50IG5yX3BhZ2VzLFxuLS1cbm1tL3BhZ2VfYWxsb2MuYy01MzAxLX1cbm1tL3BhZ2VfYWxsb2MuYzo1MzAyOkVYUE9SVF9TWU1CT0xfR1BMKGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKTtcbm1tL3BhZ2VfYWxsb2MuYy01MzAzLVxuLS1cbm1tL3NsdWIuYz03NDI2PXN0YXRpYyBib29sIF9fa21lbV9jYWNoZV9hbGxvY19idWxrKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBmbGFncyxcbi0tXG5tbS9zbHViLmMtNzQ3MC0gKlxubW0vc2x1Yi5jOjc0NzE6ICogVW5saWtlIGFsbG9jX3BhZ2VzX2J1bGsoKSwgdGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBjaGVjayBmb3IgYWxyZWFkeSBhbGxvY2F0ZWRcbm1tL3NsdWIuYy03NDcyLSAqIG9iamVjdHMgaW4gQHAsIGFuZCB0aHVzIHRoZSBjYWxsZXIgZG9lcyBub3QgbmVlZCB0byB6ZXJvIGl0LlxuLS1cbm1tL3ZtYWxsb2MuYz0zNjc2PXZtX2FyZWFfYWxsb2NfcGFnZXMoZ2ZwX3QgZ2ZwLCBpbnQgbmlkLFxuLS1cbm1tL3ZtYWxsb2MuYy0zNzQzLVx0XHRcdGlmIChJU19FTkFCTEVEKENPTkZJR19OVU1BKSBcdTAwMjZcdTAwMjYgbmlkID09IE5VTUFfTk9fTk9ERSlcbm1tL3ZtYWxsb2MuYzozNzQ0Olx0XHRcdFx0bnIgPSBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2YoZ2ZwLFxubW0vdm1hbGxvYy5jLTM3NDUtXHRcdFx0XHRcdFx0XHRucl9wYWdlc19yZXF1ZXN0LFxuLS1cbm1tL3ZtYWxsb2MuYy0zNzQ3LVx0XHRcdGVsc2Vcbm1tL3ZtYWxsb2MuYzozNzQ4Olx0XHRcdFx0bnIgPSBhbGxvY19wYWdlc19idWxrX25vZGVfbm9wcm9mKGdmcCwgbmlkLFxubW0vdm1hbGxvYy5jLTM3NDktXHRcdFx0XHRcdFx0XHRucl9wYWdlc19yZXF1ZXN0LFxuLS1cbm5ldC9jb3JlL3BhZ2VfcG9vbC5jPTYxMT1zdGF0aWMgbm9pbmxpbmUgbmV0bWVtX3JlZiBfX3BhZ2VfcG9vbF9hbGxvY19uZXRtZW1zX3Nsb3coc3RydWN0IHBhZ2VfcG9vbCAqcG9vbCxcbi0tXG5uZXQvY29yZS9wYWdlX3Bvb2wuYy02MzMtXG5uZXQvY29yZS9wYWdlX3Bvb2wuYzo2MzQ6XHQvKiBNYXJrIGVtcHR5IGFsbG9jLmNhY2hlIHNsb3RzIFwmIzM0O2VtcHR5XCYjMzQ7IGZvciBhbGxvY19wYWdlc19idWxrICovXG5uZXQvY29yZS9wYWdlX3Bvb2wuYy02MzUtXHRtZW1zZXQoXHUwMDI2cG9vbC1cdTAwM2VhbGxvYy5jYWNoZSwgMCwgc2l6ZW9mKHZvaWQgKikgKiBidWxrKTtcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTYzNi1cbm5ldC9jb3JlL3BhZ2VfcG9vbC5jOjYzNzpcdG5yX3BhZ2VzID0gYWxsb2NfcGFnZXNfYnVsa19ub2RlKGdmcCwgcG9vbC1cdTAwM2VwLm5pZCwgYnVsayxcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTYzOC1cdFx0XHRcdFx0IChzdHJ1Y3QgcGFnZSAqKilwb29sLVx1MDAzZWFsbG9jLmNhY2hlKTtcbi0tXG5uZXQvc3VucnBjL3N2Y194cHJ0LmM9Njg3PXN0YXRpYyBib29sIHN2Y19maWxsX3BhZ2VzKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsIHN0cnVjdCBwYWdlICoqcGFnZXMsXG4tLVxubmV0L3N1bnJwYy9zdmNfeHBydC5jLTY5Mi1cdGZvciAoZmlsbGVkID0gMDsgZmlsbGVkIFx1MDAzYyBucGFnZXM7IGZpbGxlZCA9IHJldCkge1xubmV0L3N1bnJwYy9zdmNfeHBydC5jOjY5MzpcdFx0cmV0ID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfS0VSTkVMLCBucGFnZXMsIHBhZ2VzKTtcbm5ldC9zdW5ycGMvc3ZjX3hwcnQuYy02OTQtXHRcdGlmIChyZXQgXHUwMDNlIGZpbGxlZClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTI6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY4NzUKCQkJCQkJCW91dHB1dDogMTU4CgkJCQkJCQl0aG91Z2h0czogMjcwMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBEZXRlcm1pbmF0aW9uOiBOZWVkc0tNU0FOID0gZmFsc2UqKgoKT2theSwgaGVyZSYjMzk7cyB0aGUgYnJlYWtkb3duIG9mIG15IHRob3VnaHQgcHJvY2Vzcy4gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCBpbnRyb2R1Y2VzIGBrbXNhbl9hbGxvY19wYWdlYCBhbmQgYHRyYWNlX21tX3BhZ2VfYWxsb2NgIGludG8gYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYC4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBkaWcgaW4gYW5kIHVuZGVyc3RhbmQgKndoeSogdGhpcyBjaGFuZ2UgaXMgaGFwcGVuaW5nLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoaXMgcGF0Y2ggaXRzZWxmIGludHJvZHVjZXMgYW55IG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcywgb3IgaWYgaXQgc2ltcGx5ICplbmFibGVzKiBLTVNBTiB0byBkZXRlY3QgZXhpc3Rpbmcgcmlza3MgYmV0dGVyLiBNeSBleHBlcnRpc2UgbGllcyBpbiB0aGVzZSBtZW1vcnkgZXJyb3IgZGV0ZWN0b3JzLCBzbyBJIG5lZWQgdG8gbWFrZSB0aGUgcmlnaHQgY2FsbC4KCkZpcnN0LCBJIGxvb2tlZCBhdCB3aGVyZSBgYWxsb2NfcGFnZXNfYnVsa2AgaXMgdXNlZC4gSSBzZWUgaXQmIzM5O3MgdXNlZCAqZXZlcnl3aGVyZSosIGluY2x1ZGluZyBjcnVjaWFsIGFyZWFzIGxpa2UgYHZtYWxsb2NgLCBgcGFnZV9wb29sYCwgYW5kIHNwbGljaW5nLiBUaGUgcHJvbXB0IGhpZ2hsaWdodHMgYSBjcml0aWNhbCBkaXN0aW5jdGlvbjogc3RhbmRhcmQgS0FTQU4gY292ZXJzIG1hbnkgYnVncywgYW5kIEtNU0FOIGlzIGZvciBjYXRjaGluZyAqc3BlY2lmaWNhbGx5KiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBhbmQgbGVha3MuIElmIEtBU0FOIGNhbiBjYXRjaCB0aGUgYnVnLCB3ZSBkb24mIzM5O3QgbmVlZCB0aGUgaGVhdnkgS01TQU4gc2Vzc2lvbi4KClRoZSBwYXRjaCYjMzk7cyBnb2FsIGlzIGFkZGluZyBLTVNBTiB0byBwYWdlcyBhbGxvY2F0ZWQgZnJvbSB0aGUgcGVyLWNwdSBwYWdlIGxpc3RzLiBTbywgSSBzZWUgdGhhdCB0aGUgcGF0Y2ggc2VlbXMgdG8gYmUgYW4gKmludGVybmFsIEtNU0FOIGluc3RydW1lbnRhdGlvbiBmaXgqLiBJIHNlZSB0aGlzIHBhdGNoIHdhc24mIzM5O3QgdGhlcmUgcHJldmlvdXNseSwgd2hpY2ggbWVhbnMgYnVsay1hbGxvY2F0ZWQgcGFnZXMgbWlnaHQgbm90IGhhdmUgYmVlbiB0cmFja2VkIGJ5IEtNU0FOLiBJZiB0aGV5IHdlcmVuJiMzOTt0LCB0aGVuIGFueSBjb2RlIHRoYXQgKnVzZXMqIHRob3NlIHBhZ2VzIChsaWtlIGB2bWFsbG9jYCBvciB0aGUgb3RoZXJzIEkgbWVudGlvbmVkKSBtaWdodCBoYXZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIHRoYXQgS01TQU4gd2lsbCBub3cgY2F0Y2guIE5vdywgbXkgbWluZCByYWNlczogRG9lcyB0aGUgcGF0Y2ggKmludHJvZHVjZSogdGhlIGJ1Zywgb3IgaXMgaXQgKmZpeGluZyogS01TQU4/CgpJIGNhcmVmdWxseSByZS1yZWFkIHRoZSBwcm9tcHQmIzM5O3MgY3JpdGVyaWEgZm9yIGBOZWVkc0tNU0FOPXRydWVgLiBJdCYjMzk7cyBhIHN0cnVjdHVyZWQgYXBwcm9hY2gsIHNvIEkgZm9sbG93IHRoZSBydWxlcy4gSXQgc2F5cyB0aGF0IHRoZSBmbGFnIHNob3VsZCBiZSBzZXQgdG8gdHJ1ZSBpZiB0aGUgcGF0Y2ggaW50cm9kdWNlczoKCjEuICBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXJzcGFjZS4KMi4gIENvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLgozLiAgQ29tcGxleCBkYXRhIHN0cnVjdHVyZSBhbGxvY2F0aW9uIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQuCjQuICBCb3VuZHMgY2hlY2tzIG9yIGxvZ2ljIHRoYXQgYWxsb3dzIGFjY2VzcyB0byB1bmluaXRpYWxpemVkIGJ5dGVzLgoKSSBnbyB0aHJvdWdoIGVhY2ggcG9pbnQgbWV0aWN1bG91c2x5LiBEb2VzIHRoZSBwYXRjaCBkbyBhbnkgb2YgdGhlc2UgdGhpbmdzPyBOby4gVGhlIHBhdGNoICphZGRzKiBmdW5jdGlvbiBjYWxsczogYHRyYWNlX21tX3BhZ2VfYWxsb2NgIGFuZCBga21zYW5fYWxsb2NfcGFnZWAuIFRoaXMgaXMgYWRkaW5nIHRyYWNpbmcgYW5kIGluc3RydW1lbnRhdGlvbiwgbm90IGludHJvZHVjaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJ1Z3MuCgpJIHRoZW4gY2hlY2sgdGhlIGNyaXRlcmlhIGZvciBgTmVlZHNLTVNBTj1mYWxzZWA6IGl0IG1lYW5zIHRoYXQgdGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlza3Mgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcywgYW5kIHRoYXQgaXQgZG9lc24mIzM5O3QgaGF2ZSBhbnkgYnVncyBjYXVnaHQgYnkgc3RhbmRhcmQgZGV0ZWN0b3JzLgoKT2theSwgbGV0JiMzOTtzIGxvb2sgYXQgdGhlIHBhdGNoIGl0c2VsZi4gSXMgdGhlcmUgYSByYWNlIGNvbmRpdGlvbiBvciBhIHNwaW5sb2NrIGlzc3VlIHRoYXQgY2FuIGhhcHBlbiB3aGVuIGBrbXNhbl9hbGxvY19wYWdlYCBpcyBjYWxsZWQ/IFRoZSBmdW5jdGlvbiBpcyBiZWluZyBjYWxsZWQgKmluc2lkZSogYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCwgc28gaXMgdGhlcmUgYW55IHBvc3NpYmlsaXR5IG9mIGRlYWRsb2NrcyBvciBjcmFzaGVzPyBJIGxvb2sgY2xvc2VseSBhdCB0aGUgY29kZS4gSSBub3RlIHRoYXQgdGhlcmUgaXMgYSBzcGlubG9jayBoZWxkIGR1cmluZyB0aGlzIGNvZGUgcGF0aC4gQnV0LCBhZnRlciBsb29raW5nLCBga21zYW5fYWxsb2NfcGFnZWAgaXMgc2FmZSB1bmRlciB0aGUgc3BpbmxvY2sgYmVjYXVzZSBzdGFuZGFyZCBkZXRlY3RvcnMsIExPQ0tERVAsIGFuZCBLQVNBTiBzaG91bGQgYmUgYWJsZSB0byBjYXRjaCBhbnkgaXNzdWVzIHRoZXJlLgoKVGhlIHBhdGNoIGl0c2VsZiAqZG9lcyBub3QqIGludHJvZHVjZSBhbnkgbmV3IHNvdXJjZXMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgYW55IGxlYWtzLiBUaGUgZ29hbCBvZiB0aGlzIHBhdGNoIGlzIHRoYXQgS01TQU4gY2FuIGRldGVjdCB0aGVzZSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gSWYgdGhlIHBhdGNoIGFkZHMgdHdvIGZ1bmN0aW9uIGNhbGxzLCBhbmQgaWYgdGhlIHBhdGNoIGRvZXNuJiMzOTt0IGludHJvZHVjZSB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZXMgb3IgbGVha3MsIHRoZW4gZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLgoKVGhlcmVmb3JlLCBiZWNhdXNlIHRoaXMgcGF0Y2ggZml4ZXMgS01TQU4gaW5zdHJ1bWVudGF0aW9uIChieSBhZGRpbmcgY2FsbHMgdG8gYHRyYWNlX21tX3BhZ2VfYWxsb2NgIGFuZCBga21zYW5fYWxsb2NfcGFnZWAgaW50byBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgKSB3aXRob3V0IGludHJvZHVjaW5nIGFueSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0aWVzLCBJIGFtIGNvbmNsdWRpbmcgdGhhdCBOZWVkc0tNU0FOIG11c3QgYmUgc2V0IHRvIGBmYWxzZWAuIEtBU0FOL0xPQ0tERVAvZXRjLiB3aWxsIGNhdGNoIGFueSBpc3N1ZXMgd2l0aCBsb2NraW5nL09PQiwgYW5kIHRoaXMgaXMgZml4aW5nIEtNU0FOIGludGVybmFsbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDEyOjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgbWlzc2luZyBgdHJhY2VfbW1fcGFnZV9hbGxvY2AgYW5kIGBrbXNhbl9hbGxvY19wYWdlYCBjYWxscyB0byBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoKWAgaW4gYG1tL3BhZ2VfYWxsb2MuY2AgZm9yIHBhZ2VzIGFsbG9jYXRlZCBmcm9tIHBlci1DUFUgbGlzdHMuXG5cblRoaXMgbW9kaWZpY2F0aW9uIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGtlcm5lbCBpbmZvLWxlYWtzLCB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMsIG9yIGZhdWx0eSBidWZmZXIgYm91bmRzLiBBbnkgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIChzdWNoIGFzIGxvY2tpbmcgb3IgY29udGV4dCBpc3N1ZXMgd2hpbGUgaG9sZGluZyB0aGUgUENQIHNwaW5sb2NrIG9yIGludmFsaWQgcGFnZSBwb2ludGVycykgYXJlIGRldGVjdGFibGUgYnkgTE9DS0RFUCwgS0FTQU4sIGFuZCBzdGFuZGFyZCBkZWJ1Z2dpbmcgZmFjaWxpdGllcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgbWlzc2luZyBgdHJhY2VfbW1fcGFnZV9hbGxvY2AgYW5kIGBrbXNhbl9hbGxvY19wYWdlYCBjYWxscyB0byBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoKWAgaW4gYG1tL3BhZ2VfYWxsb2MuY2AgZm9yIHBhZ2VzIGFsbG9jYXRlZCBmcm9tIHBlci1DUFUgbGlzdHMuXG5cblRoaXMgbW9kaWZpY2F0aW9uIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGtlcm5lbCBpbmZvLWxlYWtzLCB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMsIG9yIGZhdWx0eSBidWZmZXIgYm91bmRzLiBBbnkgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIChzdWNoIGFzIGxvY2tpbmcgb3IgY29udGV4dCBpc3N1ZXMgd2hpbGUgaG9sZGluZyB0aGUgUENQIHNwaW5sb2NrIG9yIGludmFsaWQgcGFnZSBwb2ludGVycykgYXJlIGRldGVjdGFibGUgYnkgTE9DS0RFUCwgS0FTQU4sIGFuZCBzdGFuZGFyZCBkZWJ1Z2dpbmcgZmFjaWxpdGllcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDhUMTI6MDg6MzQuOTY4MDAwMDQ2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzMyMzcxOTE3MzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS01TQU5cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhbGxvY19wYWdlc19idWxrX25vcHJvZlwiLFxuICAgIFwiYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIG1pc3NpbmcgYHRyYWNlX21tX3BhZ2VfYWxsb2NgIGFuZCBga21zYW5fYWxsb2NfcGFnZWAgY2FsbHMgdG8gYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKClgIGluIGBtbS9wYWdlX2FsbG9jLmNgIGZvciBwYWdlcyBhbGxvY2F0ZWQgZnJvbSBwZXItQ1BVIGxpc3RzLlxcblxcblRoaXMgbW9kaWZpY2F0aW9uIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGtlcm5lbCBpbmZvLWxlYWtzLCB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMsIG9yIGZhdWx0eSBidWZmZXIgYm91bmRzLiBBbnkgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIChzdWNoIGFzIGxvY2tpbmcgb3IgY29udGV4dCBpc3N1ZXMgd2hpbGUgaG9sZGluZyB0aGUgUENQIHNwaW5sb2NrIG9yIGludmFsaWQgcGFnZSBwb2ludGVycykgYXJlIGRldGVjdGFibGUgYnkgTE9DS0RFUCwgS0FTQU4sIGFuZCBzdGFuZGFyZCBkZWJ1Z2dpbmcgZmFjaWxpdGllcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBtbS9wYWdlX2FsbG9jLmMgYnkgYWRkaW5nIHRyYWNlX21tX3BhZ2VfYWxsb2MgYW5kIGttc2FuX2FsbG9jX3BhZ2UgdG8gYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YuIFRoaXMgZW5zdXJlcyBidWxrLWFsbG9jYXRlZCBwYWdlcyBoYXZlIHByb3BlciBLTVNBTiBzaGFkb3cgbWV0YWRhdGEgYW5kIGFsbG9jYXRpb24gdHJhY2luZy4gVGhlIGNoYW5nZSBtb2RpZmllcyByZWFjaGFibGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIGFuZCB3YXJyYW50cyBmdXp6aW5nLCBlc3BlY2lhbGx5IHVuZGVyIEtNU0FOLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxMjowODozNC45NjgwMDUxNTVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2MDIyNTk2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDI2YWIzMGRkMzlmYzc4NjhmZTMyMGM5MDI2ZTdjZDllNjRlYWEzNWZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBTZXAgOCAxMjowODozNCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS9wYWdlX2FsbG9jLmMgYi9tbS9wYWdlX2FsbG9jLmNcXG5pbmRleCAxMmZhYzkwODRjNDgzLi5lYWM0MTllZWY2OTdhIDEwMDY0NFxcbi0tLSBhL21tL3BhZ2VfYWxsb2MuY1xcbisrKyBiL21tL3BhZ2VfYWxsb2MuY1xcbkBAIC01Mjc5LDYgKzUyNzksOCBAQCB1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKGdmcF90IGdmcCwgaW50IHByZWZlcnJlZF9uaWQsXFxuIFxcdFxcdG5yX2FjY291bnQrKztcXG4gXFxuIFxcdFxcdHByZXBfbmV3X3BhZ2UocGFnZSwgMCwgZ2ZwLCBBTExPQ19ERUZBVUxUKTtcXG4rXFx0XFx0dHJhY2VfbW1fcGFnZV9hbGxvYyhwYWdlLCAwLCBnZnAsIGFjLm1pZ3JhdGV0eXBlKTtcXG4rXFx0XFx0a21zYW5fYWxsb2NfcGFnZShwYWdlLCAwLCBnZnAgXFx1MDAyNiB+X19HRlBfUkVDTEFJTSk7XFxuIFxcdFxcdHNldF9wYWdlX3JlZmNvdW50ZWQocGFnZSk7XFxuIFxcdFxcdHBhZ2VfYXJyYXlbbnJfcG9wdWxhdGVkKytdID0gcGFnZTtcXG4gXFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxMjowODozNS41Mjg5NjE0MTdaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjM4MTQ1OTk2NTM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktNU0FOXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZcIixcbiAgICBcImFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIG1tL3BhZ2VfYWxsb2MuYyBieSBhZGRpbmcgdHJhY2VfbW1fcGFnZV9hbGxvYyBhbmQga21zYW5fYWxsb2NfcGFnZSB0byBhbGxvY19wYWdlc19idWxrX25vcHJvZi4gVGhpcyBlbnN1cmVzIGJ1bGstYWxsb2NhdGVkIHBhZ2VzIGhhdmUgcHJvcGVyIEtNU0FOIHNoYWRvdyBtZXRhZGF0YSBhbmQgYWxsb2NhdGlvbiB0cmFjaW5nLiBUaGUgY2hhbmdlIG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgYW5kIHdhcnJhbnRzIGZ1enppbmcsIGVzcGVjaWFsbHkgdW5kZXIgS01TQU4uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMjZhYjMwZGQzOWZjNzg2OGZlMzIwYzkwMjZlN2NkOWU2NGVhYTM1ZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDggMTI6MDg6MzQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9wYWdlX2FsbG9jLmMgYi9tbS9wYWdlX2FsbG9jLmNcbmluZGV4IDEyZmFjOTA4NGM0ODMuLmVhYzQxOWVlZjY5N2EgMTAwNjQ0XG4tLS0gYS9tbS9wYWdlX2FsbG9jLmNcbisrKyBiL21tL3BhZ2VfYWxsb2MuY1xuQEAgLTUyNzksNiArNTI3OSw4IEBAIHVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoZ2ZwX3QgZ2ZwLCBpbnQgcHJlZmVycmVkX25pZCxcbiBcdFx0bnJfYWNjb3VudCsrO1xuIFxuIFx0XHRwcmVwX25ld19wYWdlKHBhZ2UsIDAsIGdmcCwgQUxMT0NfREVGQVVMVCk7XG4rXHRcdHRyYWNlX21tX3BhZ2VfYWxsb2MocGFnZSwgMCwgZ2ZwLCBhYy5taWdyYXRldHlwZSk7XG4rXHRcdGttc2FuX2FsbG9jX3BhZ2UocGFnZSwgMCwgZ2ZwIFx1MDAyNiB+X19HRlBfUkVDTEFJTSk7XG4gXHRcdHNldF9wYWdlX3JlZmNvdW50ZWQocGFnZSk7XG4gXHRcdHBhZ2VfYXJyYXlbbnJfcG9wdWxhdGVkKytdID0gcGFnZTtcbiBcdH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDEyOjA4OjM1LjUyODk2Mjg5N1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUzNTMwOTIxMjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBNZW1vcnkgQWxsb2NhdGlvbiBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBJIHNlZSBjaGFuZ2VzIGluIGBtbS9wYWdlX2FsbG9jLmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIGZ1bmN0aW9uLiBUaGUgZGlmZiBoaWdobGlnaHRzIHRoZSBhZGRpdGlvbiBvZiB0d28gbmV3IGxpbmVzIHdpdGhpbiB0aGUgbG9vcCB0aGF0IHByb2Nlc3NlcyB0aGUgYnVsayBwYWdlIGFsbG9jYXRpb24uIFxuXG5GaXJzdCwgYHRyYWNlX21tX3BhZ2VfYWxsb2NgIGlzIGJlaW5nIGFkZGVkLiBUaGlzIGlzIGludGVyZXN0aW5nLiBJdCBsaWtlbHkgaW50cm9kdWNlcyBhIG5ldyB0cmFjaW5nIHBvaW50IGZvciBtZW1vcnkgYWxsb2NhdGlvbiBldmVudHMuIEJhc2VkIG9uIHRoZSBhcmd1bWVudHMsIGl0IHNlZW1zIHRvIGJlIHJlY29yZGluZyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgYWxsb2NhdGVkIGBwYWdlYCwgYW4gaW5kZXgsIHRoZSBHRlAgZmxhZ3MsIGFuZCB0aGUgbWlncmF0aW9uIHR5cGUuIFRoaXMgY291bGQgYmUgaW5jcmVkaWJseSB1c2VmdWwgZm9yIGRlYnVnZ2luZyBhbGxvY2F0aW9uIHBhdHRlcm5zIGFuZCBwZXJmb3JtYW5jZSBhbmFseXNpcywgZ2l2aW5nIHVzIG1vcmUgZ3JhbnVsYXJpdHkgaW4gdW5kZXJzdGFuZGluZyBtZW1vcnkgYWxsb2NhdGlvbiBiZWhhdmlvci4gV2UgbWlnaHQgd2FudCB0byBsb29rIGF0IHRoZSByZWxldmFudCB0cmFjZXBvaW50cyB0byBzZWUgd2hhdCBkYXRhIGlzIGJlaW5nIGNvbGxlY3RlZCBhbmQgaG93IHdlIGNhbiB1dGlsaXplIGl0IGZvciBwZXJmb3JtYW5jZSBpbnNpZ2h0cy5cblxuU2Vjb25kLCB0aGUgYWRkaXRpb24gb2YgYGttc2FuX2FsbG9jX3BhZ2VgLiBUaGlzIHN1Z2dlc3RzIHRoZSBpbnRlZ3JhdGlvbiBvZiBLZXJuZWwgTWVtb3J5IFNhbml0aXplciAoS01TQU4pIGludG8gdGhlIHBhZ2UgYWxsb2NhdGlvbiBwcm9jZXNzLiBUaGUgY2FsbCBpcyBwYXNzaW5nIHRoZSBgcGFnZWAsIGluZGV4LCBhbmQgYSBtb2RpZmllZCBHRlAgZmxhZyB0aGF0IG1hc2tzIG91dCBgX19HRlBfUkVDTEFJTWAuIFRoaXMgaXMgcHJvYmFibHkgdG8gZW5zdXJlIHRoYXQgS01TQU4gaXMgZm9jdXNpbmcgb24gZnJlc2ggYWxsb2NhdGlvbnMsIG5vdCBwb3RlbnRpYWxseSBhbHJlYWR5IGZyZWVkIG1lbW9yeSwgd2hpY2ggY291bGQgY2F1c2UgZmFsc2UgcG9zaXRpdmVzIG9yIG90aGVyIGlzc3VlcyB3aXRoIEtNU0FOJ3MgY2hlY2tzLiBJJ2xsIG5lZWQgdG8gcmVtZW1iZXIgdG8gbG9vayBhdCBLTVNBTidzIGltcGxlbWVudGF0aW9uIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgaXQgaXMgdXNpbmcgdGhpcyBpbmZvcm1hdGlvbiBhbmQgd2hhdCBjaGVja3MgaXQncyBwZXJmb3JtaW5nLiBJdOKAmXMgYW4gaW1wb3J0YW50IGFkZGl0aW9uIGZvciBkZXRlY3RpbmcgbWVtb3J5IGVycm9ycyBlYXJseSBvbi5cblxuSSBzaG91bGQgcHJvYmFibHkgdXNlIG15IHRvb2xzIOKAkyBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAg4oCTIHRvIGNoZWNrIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGBtbS9wYWdlX2FsbG9jLmNgIG5lYXIgbGluZSA1Mjc5IHRvIGdldCBhIGJldHRlciBzZW5zZSBvZiBob3cgdGhlc2UgbmV3IGxpbmVzIGZpdCBpbnRvIHRoZSBicm9hZGVyIGNvbnRleHQgb2YgdGhlIHBhZ2UgYWxsb2NhdGlvbiBsb2dpYy4gVGhpcyB3aWxsIGdpdmUgbWUgYSBtb3JlIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhlIHBhdGNoJ3MgaW1wYWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODg3LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjc3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTI6MDg6NDAuODgyMDY2MDY5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTA5NjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3BhZ2VfYWxsb2MuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1MjYwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI1MjYwOlxcdFxcdHBjcF9saXN0ID0gXFx1MDAyNnBjcC1cXHUwMDNlbGlzdHNbb3JkZXJfdG9fcGluZGV4KGFjLm1pZ3JhdGV0eXBlLCAwKV07XFxuNTI2MTpcXHRcXHR3aGlsZSAobnJfcG9wdWxhdGVkIFxcdTAwM2MgbnJfcGFnZXMpIHtcXG41MjYyOlxcdFxcbjUyNjM6XFx0XFx0XFx0LyogU2tpcCBleGlzdGluZyBwYWdlcyAqL1xcbjUyNjQ6XFx0XFx0XFx0aWYgKHBhZ2VfYXJyYXlbbnJfcG9wdWxhdGVkXSkge1xcbjUyNjU6XFx0XFx0XFx0XFx0bnJfcG9wdWxhdGVkKys7XFxuNTI2NjpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG41MjY3OlxcdFxcdFxcdH1cXG41MjY4OlxcdFxcbjUyNjk6XFx0XFx0XFx0cGFnZSA9IF9fcm1xdWV1ZV9wY3BsaXN0KHpvbmUsIDAsIGFjLm1pZ3JhdGV0eXBlLCBhbGxvY19mbGFncyxcXG41MjcwOlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdHBjcCwgcGNwX2xpc3QpO1xcbjUyNzE6XFx0XFx0XFx0aWYgKHVubGlrZWx5KCFwYWdlKSkge1xcbjUyNzI6XFx0XFx0XFx0XFx0LyogVHJ5IGFuZCBhbGxvY2F0ZSBhdCBsZWFzdCBvbmUgcGFnZSAqL1xcbjUyNzM6XFx0XFx0XFx0XFx0aWYgKCFucl9hY2NvdW50KSB7XFxuNTI3NDpcXHRcXHRcXHRcXHRcXHRwY3Bfc3Bpbl91bmxvY2socGNwKTtcXG41Mjc1OlxcdFxcdFxcdFxcdFxcdGdvdG8gZmFpbGVkO1xcbjUyNzY6XFx0XFx0XFx0XFx0fVxcbjUyNzc6XFx0XFx0XFx0XFx0YnJlYWs7XFxuNTI3ODpcXHRcXHRcXHR9XFxuNTI3OTpcXHRcXHRcXHRucl9hY2NvdW50Kys7XFxuNTI4MDpcXHRcXG41MjgxOlxcdFxcdFxcdHByZXBfbmV3X3BhZ2UocGFnZSwgMCwgZ2ZwLCBBTExPQ19ERUZBVUxUKTtcXG41MjgyOlxcdFxcdFxcdHRyYWNlX21tX3BhZ2VfYWxsb2MocGFnZSwgMCwgZ2ZwLCBhYy5taWdyYXRldHlwZSk7XFxuNTI4MzpcXHRcXHRcXHRrbXNhbl9hbGxvY19wYWdlKHBhZ2UsIDAsIGdmcCBcXHUwMDI2IH5fX0dGUF9SRUNMQUlNKTtcXG41Mjg0OlxcdFxcdFxcdHNldF9wYWdlX3JlZmNvdW50ZWQocGFnZSk7XFxuNTI4NTpcXHRcXHRcXHRwYWdlX2FycmF5W25yX3BvcHVsYXRlZCsrXSA9IHBhZ2U7XFxuNTI4NjpcXHRcXHR9XFxuNTI4NzpcXHRcXG41Mjg4OlxcdFxcdHBjcF9zcGluX3VubG9jayhwY3ApO1xcbjUyODk6XFx0XFxuNTI5MDpcXHRcXHRfX2NvdW50X3ppZF92bV9ldmVudHMoUEdBTExPQywgem9uZV9pZHgoem9uZSksIG5yX2FjY291bnQpO1xcbjUyOTE6XFx0XFx0em9uZV9zdGF0aXN0aWNzKHpvbmVsaXN0X3pvbmUoYWMucHJlZmVycmVkX3pvbmVyZWYpLCB6b25lLCBucl9hY2NvdW50KTtcXG41MjkyOlxcdFxcbjUyOTM6XFx0b3V0OlxcbjUyOTQ6XFx0XFx0cmV0dXJuIG5yX3BvcHVsYXRlZDtcXG41Mjk1OlxcdFxcbjUyOTY6XFx0ZmFpbGVkOlxcbjUyOTc6XFx0XFx0cGFnZSA9IF9fYWxsb2NfcGFnZXNfbm9wcm9mKGdmcCwgMCwgcHJlZmVycmVkX25pZCwgbm9kZW1hc2ssIEFMTE9DX0RFRkFVTFQpO1xcbjUyOTg6XFx0XFx0aWYgKHBhZ2UpXFxuNTI5OTpcXHRcXHRcXHRwYWdlX2FycmF5W25yX3BvcHVsYXRlZCsrXSA9IHBhZ2U7XFxuNTMwMDpcXHRcXHRnb3RvIG91dDtcXG41MzAxOlxcdH1cXG41MzAyOlxcdEVYUE9SVF9TWU1CT0xfR1BMKGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKTtcXG41MzAzOlxcdFxcbjUzMDQ6XFx0LypcXG41MzA1OlxcdCAqIGZyZWVfcGFnZXNfYnVsayAtIEZyZWUgYW4gYXJyYXkgb2Ygb3JkZXItMCBwYWdlc1xcbjUzMDY6XFx0ICogQHBhZ2VfYXJyYXk6IEFycmF5IG9mIHBhZ2VzIHRvIGZyZWVcXG41MzA3OlxcdCAqIEBucl9wYWdlczogVGhlIG51bWJlciBvZiBwYWdlcyBpbiB0aGUgYXJyYXlcXG41MzA4OlxcdCAqXFxuNTMwOTpcXHQgKiBGcmVlIHRoZSBvcmRlci0wIHBhZ2VzLiBBZGphY2VudCBlbnRyaWVzIHdob3NlIFBGTnMgZm9ybSBhIGNvbnRpZ3VvdXNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTI6MDg6NDAuODgyNTc4Nzg5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjMzMDMyMjg2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNaXNzaW5nIFRyYWNlcG9pbnRzIGFuZCBLTVNBTiBDYWxscyBpbiBQQ1AgUGFnZSBBbGxvY2F0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCB3aXRoaW4gYG1tL3BhZ2VfYWxsb2MuY2AsIGFuZCBpdCBhcHBlYXJzIHRoYXQgdGhlIHRyYWNlcG9pbnRzIGFuZCBLTVNBTiBob29rcyBhcmUgYWJzZW50IHdoZW4gYWxsb2NhdGluZyBwYWdlcyBmcm9tIHRoZSBQQ1AgbGlzdC4gU3BlY2lmaWNhbGx5LCBJJ20gbm90IHNlZWluZyBgdHJhY2VfbW1fcGFnZV9hbGxvYyhwYWdlLCAwLCBnZnAsIGFjLm1pZ3JhdGV0eXBlKTtgIGFuZCBga21zYW5fYWxsb2NfcGFnZShwYWdlLCAwLCBnZnAgXHUwMDI2IH5fX0dGUF9SRUNMQUlNKTtgLiBUaGlzIG9taXNzaW9uIGltbWVkaWF0ZWx5IHJhaXNlcyBhIHJlZCBmbGFnOyB0aGVzZSBhcmUgcHJldHR5IGZ1bmRhbWVudGFsIGRlYnVnZ2luZyBhbmQgbWVtb3J5IHNhZmV0eSB0b29scy4gQmVmb3JlIEkganVtcCB0byBjb25jbHVzaW9ucyBhbmQgZmlsZSBhIHBhdGNoLCB0aG91Z2gsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeS4gSSdkIGJldHRlciBkaWcgZGVlcGVyLiBMZXQgbWUgcXVpY2tseSBleGFtaW5lIG90aGVyIGBhbGxvY19wYWdlc2AgZnVuY3Rpb25zIGFuZCB0aGUgY2FsbCBwYXRocyBpbnRvIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoaXMgaXMgYW4gaW50ZW50aW9uYWwgZGVzaWduIGRlY2lzaW9uLCBhIHJlZ3Jlc3Npb24sIG9yIHNpbXBseSBhbiBvdmVyc2lnaHQuIENoZWNraW5nIHRoZSBoaXN0b3J5IGFuZCBjYWxsZXJzIHdpbGwgcHJvdmlkZSBjcnVjaWFsIGNvbnRleHQg4oCTIGFyZSB0aGVzZSB0cmFjZXBvaW50cyBjb25zaXN0ZW50bHkgcHJlc2VudCBlbHNld2hlcmUsIGFuZCBpZiBzbywgd2hlbiBhbmQgd2h5IHdlcmUgdGhleSBwb3RlbnRpYWxseSByZW1vdmVkIGhlcmU/IExldCdzIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzNjYsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxMjowODo0My4yMTI5MDM5NTRaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTIwNzM0MDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia21zYW5fYWxsb2NfcGFnZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0va21zYW4vc2hhZG93LmM9MTY5PUVYUE9SVF9TWU1CT0woa21zYW5fY29weV9wYWdlX21ldGEpO1xcbm1tL2ttc2FuL3NoYWRvdy5jLTE3MC1cXG5tbS9rbXNhbi9zaGFkb3cuYzoxNzE6dm9pZCBrbXNhbl9hbGxvY19wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIsIGdmcF90IGZsYWdzKVxcbm1tL2ttc2FuL3NoYWRvdy5jLTE3Mi17XFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9NTE2MD11bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKGdmcF90IGdmcCwgaW50IHByZWZlcnJlZF9uaWQsXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNTI4Mi1cXHRcXHR0cmFjZV9tbV9wYWdlX2FsbG9jKHBhZ2UsIDAsIGdmcCwgYWMubWlncmF0ZXR5cGUpO1xcbm1tL3BhZ2VfYWxsb2MuYzo1MjgzOlxcdFxcdGttc2FuX2FsbG9jX3BhZ2UocGFnZSwgMCwgZ2ZwIFxcdTAwMjYgfl9fR0ZQX1JFQ0xBSU0pO1xcbm1tL3BhZ2VfYWxsb2MuYy01Mjg0LVxcdFxcdHNldF9wYWdlX3JlZmNvdW50ZWQocGFnZSk7XFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9NTM0NT1zdGF0aWMgaW5saW5lIGJvb2wgYWxsb2Nfbm9sb2NrX2FsbG93ZWQodm9pZClcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy01MzcwLSAqXFxubW0vcGFnZV9hbGxvYy5jOjUzNzE6ICogU3BlY2lmeSBfX0dGUF9aRVJPIHRvIG1ha2Ugc3VyZSB0aGF0IGNhbGwgdG8ga21zYW5fYWxsb2NfcGFnZSgpIGJlbG93XFxubW0vcGFnZV9hbGxvYy5jLTUzNzItICogaXMgc2FmZSBpbiBhbnkgY29udGV4dC4gQWxzbyB6ZXJvaW5nIHRoZSBwYWdlIGlzIG1hbmRhdG9yeSBmb3JcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz01Mzg1PXN0cnVjdCBwYWdlICpfX2FsbG9jX2Zyb3plbl9wYWdlc19ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNTQ2MS1cXHR0cmFjZV9tbV9wYWdlX2FsbG9jKHBhZ2UsIG9yZGVyLCBhbGxvY19nZnAsIGFjLm1pZ3JhdGV0eXBlKTtcXG5tbS9wYWdlX2FsbG9jLmM6NTQ2MjpcXHRrbXNhbl9hbGxvY19wYWdlKHBhZ2UsIG9yZGVyLCBhbGxvY19nZnApO1xcbm1tL3BhZ2VfYWxsb2MuYy01NDYzLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxMjowODo0My4yNjQ5ODE2NzNaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNTc0MTA4NTczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgUGFnZSBBbGxvY2F0aW9uIEJ1bGsgT3BlcmF0aW9ucyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSBjb25jZXJuIGlzIGVuc3VyaW5nIHRoZSBjb25zaXN0ZW5jeSBvZiBvdXIgcGFnZSBhbGxvY2F0aW9uIHN0cmF0ZWd5IGFjcm9zcyB0aGUgc3lzdGVtLiBJIG5lZWQgdG8gY29tcHJlaGVuc2l2ZWx5IHVuZGVyc3RhbmQgd2hlcmUgYGFsbG9jX3BhZ2VzX2J1bGtfYXJyYXlgLCBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgLCBhbmQgYGFsbG9jX3BhZ2VzX2J1bGtfbGlzdGAgYXJlIGludm9rZWQuIEEgdGhvcm91Z2ggYXVkaXQgaXMgZXNzZW50aWFsIHRvIGF2b2lkIGFueSBwb3RlbnRpYWwgcmVncmVzc2lvbnMgb3IgdW5mb3Jlc2VlbiBpbnRlcmFjdGlvbnMuXG5cbkZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAgKmFjdHVhbGx5KiBkb2VzIHVuZGVyIHRoZSBob29kLiBVbmRlcnN0YW5kaW5nIGl0cyBpbnRlcm5hbCBtZWNoYW5pY3MsIHRoZSBwYXJhbWV0ZXJzIGl0IHRha2VzLCBhbmQgaXRzIHBvdGVudGlhbCBzaWRlIGVmZmVjdHMgd2lsbCBiZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgZnVsbCBzY29wZSBvZiBvdXIgbWVtb3J5IG1hbmFnZW1lbnQgc3RyYXRlZ3kuIFRoYXQncyBteSBpbW1lZGlhdGUgZm9jdXMgbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MjMxLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTI6MDg6NDUuODM5MDk0MzA3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjg4NTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3BhZ2VfYWxsb2MuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1MTYwLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI1MTYwOlxcdHVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoZ2ZwX3QgZ2ZwLCBpbnQgcHJlZmVycmVkX25pZCxcXG41MTYxOlxcdFxcdFxcdFxcdG5vZGVtYXNrX3QgKm5vZGVtYXNrLCBpbnQgbnJfcGFnZXMsXFxuNTE2MjpcXHRcXHRcXHRcXHRzdHJ1Y3QgcGFnZSAqKnBhZ2VfYXJyYXkpXFxuNTE2MzpcXHR7XFxuNTE2NDpcXHRcXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcXG41MTY1OlxcdFxcdHN0cnVjdCB6b25lICp6b25lO1xcbjUxNjY6XFx0XFx0c3RydWN0IHpvbmVyZWYgKno7XFxuNTE2NzpcXHRcXHRzdHJ1Y3QgcGVyX2NwdV9wYWdlcyAqcGNwO1xcbjUxNjg6XFx0XFx0c3RydWN0IGxpc3RfaGVhZCAqcGNwX2xpc3Q7XFxuNTE2OTpcXHRcXHRzdHJ1Y3QgYWxsb2NfY29udGV4dCBhYztcXG41MTcwOlxcdFxcdHVuc2lnbmVkIGludCBhbGxvY19mbGFncyA9IEFMTE9DX1dNQVJLX0xPVztcXG41MTcxOlxcdFxcdGludCBucl9wb3B1bGF0ZWQgPSAwLCBucl9hY2NvdW50ID0gMDtcXG41MTcyOlxcdFxcbjUxNzM6XFx0XFx0LypcXG41MTc0OlxcdFxcdCAqIFNraXAgcG9wdWxhdGVkIGFycmF5IGVsZW1lbnRzIHRvIGRldGVybWluZSBpZiBhbnkgcGFnZXMgbmVlZFxcbjUxNzU6XFx0XFx0ICogdG8gYmUgYWxsb2NhdGVkIGJlZm9yZSBkaXNhYmxpbmcgSVJRcy5cXG41MTc2OlxcdFxcdCAqL1xcbjUxNzc6XFx0XFx0d2hpbGUgKG5yX3BvcHVsYXRlZCBcXHUwMDNjIG5yX3BhZ2VzIFxcdTAwMjZcXHUwMDI2IHBhZ2VfYXJyYXlbbnJfcG9wdWxhdGVkXSlcXG41MTc4OlxcdFxcdFxcdG5yX3BvcHVsYXRlZCsrO1xcbjUxNzk6XFx0XFxuNTE4MDpcXHRcXHQvKiBObyBwYWdlcyByZXF1ZXN0ZWQ/ICovXFxuNTE4MTpcXHRcXHRpZiAodW5saWtlbHkobnJfcGFnZXMgXFx1MDAzYz0gMCkpXFxuNTE4MjpcXHRcXHRcXHRnb3RvIG91dDtcXG41MTgzOlxcdFxcbjUxODQ6XFx0XFx0LyogQWxyZWFkeSBwb3B1bGF0ZWQgYXJyYXk/ICovXFxuNTE4NTpcXHRcXHRpZiAodW5saWtlbHkobnJfcGFnZXMgLSBucl9wb3B1bGF0ZWQgPT0gMCkpXFxuNTE4NjpcXHRcXHRcXHRnb3RvIG91dDtcXG41MTg3OlxcdFxcbjUxODg6XFx0XFx0LyogQnVsayBhbGxvY2F0b3IgZG9lcyBub3Qgc3VwcG9ydCBtZW1jZyBhY2NvdW50aW5nLiAqL1xcbjUxODk6XFx0XFx0aWYgKG1lbWNnX2ttZW1fb25saW5lKCkgXFx1MDAyNlxcdTAwMjYgKGdmcCBcXHUwMDI2IF9fR0ZQX0FDQ09VTlQpKVxcbjUxOTA6XFx0XFx0XFx0Z290byBmYWlsZWQ7XFxuNTE5MTpcXHRcXG41MTkyOlxcdFxcdC8qIFVzZSB0aGUgc2luZ2xlIHBhZ2UgYWxsb2NhdG9yIGZvciBvbmUgcGFnZS4gKi9cXG41MTkzOlxcdFxcdGlmIChucl9wYWdlcyAtIG5yX3BvcHVsYXRlZCA9PSAxKVxcbjUxOTQ6XFx0XFx0XFx0Z290byBmYWlsZWQ7XFxuNTE5NTpcXHRcXG41MTk2OlxcdCNpZmRlZiBDT05GSUdfUEFHRV9PV05FUlxcbjUxOTc6XFx0XFx0LypcXG41MTk4OlxcdFxcdCAqIFBBR0VfT1dORVIgbWF5IHJlY3Vyc2UgaW50byB0aGUgYWxsb2NhdG9yIHRvIGFsbG9jYXRlIHNwYWNlIHRvXFxuNTE5OTpcXHRcXHQgKiBzYXZlIHRoZSBzdGFjayB3aXRoIHBhZ2VzZXRzLmxvY2sgaGVsZC4gUmVsZWFzaW5nL3JlYWNxdWlyaW5nXFxuNTIwMDpcXHRcXHQgKiByZW1vdmVzIG11Y2ggb2YgdGhlIHBlcmZvcm1hbmNlIGJlbmVmaXQgb2YgYnVsayBhbGxvY2F0aW9uIHNvXFxuNTIwMTpcXHRcXHQgKiBmb3JjZSB0aGUgY2FsbGVyIHRvIGFsbG9jYXRlIG9uZSBwYWdlIGF0IGEgdGltZSBhcyBpdCdsbCBoYXZlXFxuNTIwMjpcXHRcXHQgKiBzaW1pbGFyIHBlcmZvcm1hbmNlIHRvIGFkZGVkIGNvbXBsZXhpdHkgdG8gdGhlIGJ1bGsgYWxsb2NhdG9yLlxcbjUyMDM6XFx0XFx0ICovXFxuNTIwNDpcXHRcXHRpZiAoc3RhdGljX2JyYW5jaF91bmxpa2VseShcXHUwMDI2cGFnZV9vd25lcl9pbml0ZWQpKVxcbjUyMDU6XFx0XFx0XFx0Z290byBmYWlsZWQ7XFxuNTIwNjpcXHQjZW5kaWZcXG41MjA3OlxcdFxcbjUyMDg6XFx0XFx0LyogTWF5IHNldCBBTExPQ19OT0ZSQUdNRU5ULCBmcmFnbWVudGF0aW9uIHdpbGwgcmV0dXJuIDEgcGFnZS4gKi9cXG41MjA5OlxcdFxcdGdmcCBcXHUwMDI2PSBnZnBfYWxsb3dlZF9tYXNrO1xcbjUyMTA6XFx0XFx0aWYgKCFwcmVwYXJlX2FsbG9jX3BhZ2VzKGdmcCwgMCwgcHJlZmVycmVkX25pZCwgbm9kZW1hc2ssIFxcdTAwMjZhYywgXFx1MDAyNmdmcCwgXFx1MDAyNmFsbG9jX2ZsYWdzKSlcXG41MjExOlxcdFxcdFxcdGdvdG8gb3V0O1xcbjUyMTI6XFx0XFxuNTIxMzpcXHRcXHQvKiBGaW5kIGFuIGFsbG93ZWQgbG9jYWwgem9uZSB0aGF0IG1lZXRzIHRoZSBsb3cgd2F0ZXJtYXJrLiAqL1xcbjUyMTQ6XFx0XFx0eiA9IGFjLnByZWZlcnJlZF96b25lcmVmO1xcbjUyMTU6XFx0XFx0Zm9yX25leHRfem9uZV96b25lbGlzdF9ub2RlbWFzayh6b25lLCB6LCBhYy5oaWdoZXN0X3pvbmVpZHgsIGFjLm5vZGVtYXNrKSB7XFxuNTIxNjpcXHRcXHRcXHR1bnNpZ25lZCBsb25nIG1hcms7XFxuNTIxNzpcXHRcXG41MjE4OlxcdFxcdFxcdGlmIChjcHVzZXRzX2VuYWJsZWQoKSBcXHUwMDI2XFx1MDAyNiAoYWxsb2NfZmxhZ3MgXFx1MDAyNiBBTExPQ19DUFVTRVQpIFxcdTAwMjZcXHUwMDI2XFxuNTIxOTpcXHRcXHRcXHQgICAgIV9fY3B1c2V0X3pvbmVfYWxsb3dlZCh6b25lLCBnZnApKSB7XFxuNTIyMDpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG41MjIxOlxcdFxcdFxcdH1cXG41MjIyOlxcdFxcbjUyMjM6XFx0XFx0XFx0aWYgKG5yX29ubGluZV9ub2RlcyBcXHUwMDNlIDEgXFx1MDAyNlxcdTAwMjYgem9uZSAhPSB6b25lbGlzdF96b25lKGFjLnByZWZlcnJlZF96b25lcmVmKSBcXHUwMDI2XFx1MDAyNlxcbjUyMjQ6XFx0XFx0XFx0ICAgIHpvbmVfdG9fbmlkKHpvbmUpICE9IHpvbmVsaXN0X25vZGVfaWR4KGFjLnByZWZlcnJlZF96b25lcmVmKSkge1xcbjUyMjU6XFx0XFx0XFx0XFx0Z290byBmYWlsZWQ7XFxuNTIyNjpcXHRcXHRcXHR9XFxuNTIyNzpcXHRcXG41MjI4OlxcdFxcdFxcdGNvbmRfYWNjZXB0X21lbW9yeSh6b25lLCAwLCBhbGxvY19mbGFncyk7XFxuNTIyOTpcXHRyZXRyeV90aGlzX3pvbmU6XFxuNTIzMDpcXHRcXHRcXHRtYXJrID0gd21hcmtfcGFnZXMoem9uZSwgYWxsb2NfZmxhZ3MgXFx1MDAyNiBBTExPQ19XTUFSS19NQVNLKSArIG5yX3BhZ2VzIC0gbnJfcG9wdWxhdGVkO1xcbjUyMzE6XFx0XFx0XFx0aWYgKHpvbmVfd2F0ZXJtYXJrX2Zhc3Qoem9uZSwgMCwgIG1hcmssXFxuNTIzMjpcXHRcXHRcXHRcXHRcXHR6b25lbGlzdF96b25lX2lkeChhYy5wcmVmZXJyZWRfem9uZXJlZiksXFxuNTIzMzpcXHRcXHRcXHRcXHRcXHRhbGxvY19mbGFncywgZ2ZwKSkge1xcbjUyMzQ6XFx0XFx0XFx0XFx0YnJlYWs7XFxuNTIzNTpcXHRcXHRcXHR9XFxuNTIzNjpcXHRcXG41MjM3OlxcdFxcdFxcdGlmIChjb25kX2FjY2VwdF9tZW1vcnkoem9uZSwgMCwgYWxsb2NfZmxhZ3MpKVxcbjUyMzg6XFx0XFx0XFx0XFx0Z290byByZXRyeV90aGlzX3pvbmU7XFxuNTIzOTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTI6MDg6NDUuODM5Mzg0NDU3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mzc2ODExMTk5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBGdXp6aW5nIFdvcnRoaW5lc3MqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCBpbiBgbW0vcGFnZV9hbGxvYy5jYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGNvbmZpcm0gdGhhdCBgbW0vcGFnZV9hbGxvYy5jYCBpcyBpbmRlZWQgcGFydCBvZiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gKGBtbS9gKSwgd2hpY2ggaXQgaXMuIFRoYXQncyBhIGNoZWNrIGluIHRoZSBhZmZpcm1hdGl2ZSBmb3IgY29yZSBzdWJzeXN0ZW1zLCBhbmQgdGhlcmVmb3JlLCBhIGNhbmRpZGF0ZSBmb3IgZnV6emluZy5cblxuSSBxdWlja2x5IGNoZWNrIHRoZSBwb3NpdGl2ZSBjcml0ZXJpYSBmb3IgZGV0ZXJtaW5pbmcgZnV6emluZyB3b3J0aGluZXNzOiBcIkFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLi4uXCIgLSBZZXAsIHdlJ3JlIGluIHRoZSByaWdodCBuZWlnaGJvcmhvb2QuXG5cbkJ1dCBob2xkIG9uLCBiZWZvcmUgSSBqdW1wIHRvIGNvbmNsdXNpb25zLCBJIG5lZWQgdG8gcnVsZSBvdXQgYW55IG9mIHRoZSBuZWdhdGl2ZSBjcml0ZXJpYS4gVGhlIG5lZ2F0aXZlIGNyaXRlcmlhIHNheSBJICpvbmx5KiByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAgaWYgdGhlIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byB0aGUgbGlzdGVkIGNhdGVnb3JpZXMuIEkgbmVlZCB0byBiZSBzdXJlIHRoaXMgKmlzbid0KiBhIG5vbi1rZXJuZWwgY2hhbmdlLCBkZWNvcmF0aXZlIGxvZ2dpbmcsIG9yIHVucmVhY2hhYmxlIGNvZGUuXG5cbkxldCdzIHNlZSB3aGF0IHdhcyBhZGRlZC4gT2theSwgdGhlcmUncyBgdHJhY2VfbW1fcGFnZV9hbGxvY2Agd2hpY2ggKmNvdWxkKiBiZSBjb25zaWRlcmVkIGRlY29yYXRpdmUuIEJ1dCB0aGVyZSdzIGFsc28gYGttc2FuX2FsbG9jX3BhZ2UocGFnZSwgMCwgZ2ZwIFx1MDAyNiB+X19HRlBfUkVDTEFJTSk7YC5cblxuV2FpdCBhIG1pbnV0ZS4uLiBga21zYW5fYWxsb2NfcGFnZWAgaXMgKm5vdCoganVzdCBhIHRyYWNlcG9pbnQuIFRoYXQgaW5pdGlhbGl6ZXMgdGhlIEtNU0FOIHNoYWRvdy9vcmlnaW4gbWV0YWRhdGEgZm9yIHRoZSBhbGxvY2F0ZWQgcGFnZSEgV2l0aG91dCBpdCwgS01TQU4gd291bGQgaGF2ZSBtYWpvciBpc3N1ZXMsIHRyZWF0aW5nIHRoZSBidWxrLWFsbG9jYXRlZCBwYWdlcyBhcyB1bmluaXRpYWxpemVkIG9yIHdpdGggY29ycnVwdCBzaGFkb3cgbWVtb3J5LiBUaGlzIGlzICpjcml0aWNhbCogZm9yIEtNU0FOIGZ1bmN0aW9uYWxpdHkuIFRoaXMgaXMgYSBsb2dpYyBjaGFuZ2UhXG5cbkkgbmVlZCB0byBkaWcgaW50byBga21zYW5fYWxsb2NfcGFnZWAgZnVydGhlciB0byBjb25maXJtIGV4YWN0bHkgaG93IGl0IGltcGFjdHMgY29udHJvbCBmbG93LCBidXQgSSdtIGxlYW5pbmcgaGVhdmlseSB0b3dhcmRzIHRoaXMgcGF0Y2ggYmVpbmcgZnV6emluZy13b3J0aHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY3NTcsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MDIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxMjowODo0OS42MDc0OTg3NTJaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzE2MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0va21zYW4vc2hhZG93LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTcxLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTcxOlxcdHZvaWQga21zYW5fYWxsb2NfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyLCBnZnBfdCBmbGFncylcXG4gMTcyOlxcdHtcXG4gMTczOlxcdFxcdGJvb2wgaW5pdGlhbGl6ZWQgPSAoZmxhZ3MgXFx1MDAyNiBfX0dGUF9aRVJPKSB8fCAha21zYW5fZW5hYmxlZDtcXG4gMTc0OlxcdFxcdHN0cnVjdCBwYWdlICpzaGFkb3csICpvcmlnaW47XFxuIDE3NTpcXHRcXHRkZXBvdF9zdGFja19oYW5kbGVfdCBoYW5kbGU7XFxuIDE3NjpcXHRcXHRpbnQgcGFnZXMgPSAxIFxcdTAwM2NcXHUwMDNjIG9yZGVyO1xcbiAxNzc6XFx0XFxuIDE3ODpcXHRcXHRpZiAoIXBhZ2UpXFxuIDE3OTpcXHRcXHRcXHRyZXR1cm47XFxuIDE4MDpcXHRcXG4gMTgxOlxcdFxcdHNoYWRvdyA9IHNoYWRvd19wYWdlX2ZvcihwYWdlKTtcXG4gMTgyOlxcdFxcdG9yaWdpbiA9IG9yaWdpbl9wYWdlX2ZvcihwYWdlKTtcXG4gMTgzOlxcdFxcbiAxODQ6XFx0XFx0aWYgKGluaXRpYWxpemVkKSB7XFxuIDE4NTpcXHRcXHRcXHRfX21lbXNldChwYWdlX2FkZHJlc3Moc2hhZG93KSwgMCwgUEFHRV9TSVpFICogcGFnZXMpO1xcbiAxODY6XFx0XFx0XFx0X19tZW1zZXQocGFnZV9hZGRyZXNzKG9yaWdpbiksIDAsIFBBR0VfU0laRSAqIHBhZ2VzKTtcXG4gMTg3OlxcdFxcdFxcdHJldHVybjtcXG4gMTg4OlxcdFxcdH1cXG4gMTg5OlxcdFxcbiAxOTA6XFx0XFx0LyogWmVybyBwYWdlcyBhbGxvY2F0ZWQgYnkgdGhlIHJ1bnRpbWUgc2hvdWxkIGFsc28gYmUgaW5pdGlhbGl6ZWQuICovXFxuIDE5MTpcXHRcXHRpZiAoa21zYW5faW5fcnVudGltZSgpKVxcbiAxOTI6XFx0XFx0XFx0cmV0dXJuO1xcbiAxOTM6XFx0XFxuIDE5NDpcXHRcXHRfX21lbXNldChwYWdlX2FkZHJlc3Moc2hhZG93KSwgLTEsIFBBR0VfU0laRSAqIHBhZ2VzKTtcXG4gMTk1OlxcdFxcdGttc2FuX2VudGVyX3J1bnRpbWUoKTtcXG4gMTk2OlxcdFxcdGhhbmRsZSA9IGttc2FuX3NhdmVfc3RhY2tfd2l0aF9mbGFncyhmbGFncywgLypleHRyYV9iaXRzKi8gMCk7XFxuIDE5NzpcXHRcXHRrbXNhbl9sZWF2ZV9ydW50aW1lKCk7XFxuIDE5ODpcXHRcXHQvKlxcbiAxOTk6XFx0XFx0ICogQWRkcmVzc2VzIGFyZSBwYWdlLWFsaWduZWQsIHBhZ2VzIGFyZSBjb250aWd1b3VzLCBzbyBpdCdzIG9rXFxuIDIwMDpcXHRcXHQgKiB0byBqdXN0IGZpbGwgdGhlIG9yaWdpbiBwYWdlcyB3aXRoIEBoYW5kbGUuXFxuIDIwMTpcXHRcXHQgKi9cXG4gMjAyOlxcdFxcdGZvciAoaW50IGkgPSAwOyBpIFxcdTAwM2MgUEFHRV9TSVpFICogcGFnZXMgLyBzaXplb2YoaGFuZGxlKTsgaSsrKVxcbiAyMDM6XFx0XFx0XFx0KChkZXBvdF9zdGFja19oYW5kbGVfdCAqKXBhZ2VfYWRkcmVzcyhvcmlnaW4pKVtpXSA9IGhhbmRsZTtcXG4gMjA0OlxcdH1cXG4gMjA1OlxcdFxcbiAyMDY6XFx0dm9pZCBrbXNhbl9mcmVlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcilcXG4gMjA3OlxcdHtcXG4gMjA4OlxcdFxcdGlmICgha21zYW5fZW5hYmxlZCB8fCBrbXNhbl9pbl9ydW50aW1lKCkpXFxuIDIwOTpcXHRcXHRcXHRyZXR1cm47XFxuIDIxMDpcXHRcXHRrbXNhbl9lbnRlcl9ydW50aW1lKCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDEyOjA4OjQ5LjYwNzU3Mzc5MloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTQyNzQxMzgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBNZW1vcnkgQWxsb2NhdGlvbiBpbiB0aGUgS2VybmVsKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgYGttc2FuX2FsbG9jX3BhZ2VgIGZ1bmN0aW9uLiBGcm9tIHdoYXQgSSBjYW4gZ2F0aGVyLCBpdCdzIGNsZWFybHkgaW52b2x2ZWQgaW4gbWFuYWdpbmcgbWV0YWRhdGEsIHNoYWRvdyBwYWdlcywgc3RhY2sgZGVwb3RzLCBvcmlnaW4gcGFnZXMsIGFuZCBhbGwgdGhhdCBmdW4gc3R1ZmYgcmVsYXRlZCB0byBtZW1vcnkuIE15IGltbWVkaWF0ZSBxdWVzdGlvbiBpczogd2hhdCBhcmUgdGhlIHVwc3RyZWFtIGZ1bmN0aW9ucyB0aGF0IGFyZSBjYWxsaW5nIGBhbGxvY19wYWdlc19idWxrYCBhbmQgYGFsbG9jX3BhZ2VzX2J1bGtfYXJyYXlgPyBUaGVzZSBhcmUga2V5LCBiZWNhdXNlIGtub3dpbmcgd2hvJ3MgKnJlcXVlc3RpbmcqIHRoaXMgYnVsayBhbGxvY2F0aW9uIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBvdmVyYWxsIG1lbW9yeSBtYW5hZ2VtZW50IHNjaGVtZS4gSSBuZWVkIHRvIHRyYWNlIHRoaXMgYmFjay4gU28sIGxldCdzIHN0YXJ0IHdpdGggYSBzZWFyY2ggZm9yIGNhbGxlcnMgb2YgYGFsbG9jX3BhZ2VzX2J1bGtgLiBUaGF0J3Mgd2hlcmUgSSBuZWVkIHRvIGZvY3VzIG15IGVmZm9ydHMuIEknbGwgZ2V0IHRoZSBsYXkgb2YgdGhlIGxhbmQgZnJvbSB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODMwNiwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTI6MDg6NTEuNTUwMzE4NjA0WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTgyNTExNjUyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFsbG9jX3BhZ2VzX2J1bGtcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jPTE3Mj1zdGF0aWMgc3RydWN0IGJpbyAqYmxrX2NyeXB0b19hbGxvY19lbmNfYmlvKHN0cnVjdCBiaW8gKmJpb19zcmMsXFxuLS1cXG5ibG9jay9ibGstY3J5cHRvLWZhbGxiYWNrLmMtMjA0LVxcdCAqXFxuYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jOjIwNTpcXHQgKiBOb3RlOiBhbGxvY19wYWdlc19idWxrIG5lZWRzIHRoZSBhcnJheSB0byBiZSB6ZXJvZWQsIGFzIGl0IGFzc3VtZXNcXG5ibG9jay9ibGstY3J5cHRvLWZhbGxiYWNrLmMtMjA2LVxcdCAqIGFueSBub24temVybyBzbG90IGFscmVhZHkgY29udGFpbnMgYSB2YWxpZCBhbGxvY2F0aW9uLlxcbi0tXFxuYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jLTIwOC1cXHRtZW1zZXQocGFnZXMsIDAsIHNpemVvZihzdHJ1Y3QgcGFnZSAqKSAqIG5yX3NlZ3MpO1xcbmJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYzoyMDk6XFx0bnJfYWxsb2NhdGVkID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfS0VSTkVMLCBucl9zZWdzLCBwYWdlcyk7XFxuYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jLTIxMC1cXHRpZiAobnJfYWxsb2NhdGVkIFxcdTAwM2MgbnJfc2VncylcXG4tLVxcbmRyaXZlcnMvZmlyZXdpcmUvY29yZS1pc28uYz0zMT1pbnQgZndfaXNvX2J1ZmZlcl9hbGxvYyhzdHJ1Y3QgZndfaXNvX2J1ZmZlciAqYnVmZmVyLCBpbnQgcGFnZV9jb3VudClcXG4tLVxcbmRyaXZlcnMvZmlyZXdpcmUvY29yZS1pc28uYy00MS1cXHQvLyBjb252ZW5pZW5jZSB0byBtYXAgdGhlbSBpbnRvIHZpcnR1YWwgYWRkcmVzcyBzcGFjZSBvZiB1c2VyIHByb2Nlc3MuXFxuZHJpdmVycy9maXJld2lyZS9jb3JlLWlzby5jOjQyOlxcdHVuc2lnbmVkIGxvbmcgbnJfcG9wdWxhdGVkID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfS0VSTkVMIHwgR0ZQX0RNQTMyIHwgX19HRlBfWkVSTyxcXG5kcml2ZXJzL2ZpcmV3aXJlL2NvcmUtaXNvLmMtNDMtXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgcGFnZV9jb3VudCwgcGFnZV9hcnJheSk7XFxuLS1cXG5kcml2ZXJzL2ZpcmV3aXJlL29oY2kuYz04NDg9c3RhdGljIGludCBhcl9jb250ZXh0X2luaXQoc3RydWN0IGFyX2NvbnRleHQgKmN0eCwgc3RydWN0IGZ3X29oY2kgKm9oY2ksXFxuLS1cXG5kcml2ZXJzL2ZpcmV3aXJlL29oY2kuYy04NjQtXFx0Ly8gYWRkcmVzcyByYW5nZSBpbiBrZXJuZWwgdmlydHVhbCBhZGRyZXNzIHNwYWNlLlxcbmRyaXZlcnMvZmlyZXdpcmUvb2hjaS5jOjg2NTpcXHR1bnNpZ25lZCBsb25nIG5yX3BvcHVsYXRlZCA9IGFsbG9jX3BhZ2VzX2J1bGsoR0ZQX0tFUk5FTCB8IEdGUF9ETUEzMiwgQVJfQlVGRkVSUywgcGFnZXMpO1xcbmRyaXZlcnMvZmlyZXdpcmUvb2hjaS5jLTg2Ni1cXG4tLVxcbmRyaXZlcnMvc3RhZ2luZy9tZWRpYS9hdG9taXNwL3BjaS9obW0vaG1tX2JvLmM9NjIxPXN0YXRpYyBpbnQgYWxsb2NfcHJpdmF0ZV9wYWdlcyhzdHJ1Y3QgaG1tX2J1ZmZlcl9vYmplY3QgKmJvKVxcbi0tXFxuZHJpdmVycy9zdGFnaW5nL21lZGlhL2F0b21pc3AvcGNpL2htbS9obW1fYm8uYy02MjYtXFxuZHJpdmVycy9zdGFnaW5nL21lZGlhL2F0b21pc3AvcGNpL2htbS9obW1fYm8uYzo2Mjc6XFx0bnJfYWxsb2NhdGVkID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfS0VSTkVMLCBiby1cXHUwMDNlcGduciwgYm8tXFx1MDAzZXBhZ2VzKTtcXG5kcml2ZXJzL3N0YWdpbmcvbWVkaWEvYXRvbWlzcC9wY2kvaG1tL2htbV9iby5jLTYyOC1cXHQvKlxcbmRyaXZlcnMvc3RhZ2luZy9tZWRpYS9hdG9taXNwL3BjaS9obW0vaG1tX2JvLmM6NjI5OlxcdCAqIGFsbG9jX3BhZ2VzX2J1bGsoKSBkb2VzIG5vdCB0cnkgdmVyeSBoYXJkIHRvIGdldCBwYWdlcyB1bmRlciBtZW1vcnlcXG5kcml2ZXJzL3N0YWdpbmcvbWVkaWEvYXRvbWlzcC9wY2kvaG1tL2htbV9iby5jLTYzMC1cXHQgKiBwcmVzc3VyZS4gSWYgbmVjZXNzYXJ5IGZhbGwgYmFjayB0byBhbGxvY19wYWdlKCkuXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL21seDUvY21kLmM9NDY2PXN0YXRpYyB2b2lkIGZyZWVfcGFnZV9saXN0KHUzMiBucGFnZXMsIHN0cnVjdCBwYWdlICoqcGFnZV9saXN0KVxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS9tbHg1L2NtZC5jLTQ2OS1cXG5kcml2ZXJzL3ZmaW8vcGNpL21seDUvY21kLmM6NDcwOlxcdC8qIFVuZG8gYWxsb2NfcGFnZXNfYnVsaygpICovXFxuZHJpdmVycy92ZmlvL3BjaS9tbHg1L2NtZC5jLTQ3MS1cXHRmb3IgKGkgPSBucGFnZXMgLSAxOyBpIFxcdTAwM2U9IDA7IGktLSlcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvbWx4NS9jbWQuYz00OTY9c3RhdGljIGludCBtbHg1dmZfYWRkX3BhZ2VzKHN0cnVjdCBwYWdlICoqKnBhZ2VfbGlzdCwgdW5zaWduZWQgaW50IG5wYWdlcylcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvbWx4NS9jbWQuYy01MDYtXFx0Zm9yICg7Oykge1xcbmRyaXZlcnMvdmZpby9wY2kvbWx4NS9jbWQuYzo1MDc6XFx0XFx0ZmlsbGVkID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfS0VSTkVMX0FDQ09VTlQsIG5wYWdlcyAtIGRvbmUsXFxuZHJpdmVycy92ZmlvL3BjaS9tbHg1L2NtZC5jLTUwOC1cXHRcXHRcXHRcXHRcXHQgICpwYWdlX2xpc3QgKyBkb25lKTtcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvdmlydGlvL21pZ3JhdGUuYz02Mz1zdGF0aWMgaW50IHZpcnRpb3ZmX2FkZF9taWdyYXRpb25fcGFnZXMoc3RydWN0IHZpcnRpb3ZmX2RhdGFfYnVmZmVyICpidWYsXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZpcnRpby9taWdyYXRlLmMtNzgtXFx0ZG8ge1xcbmRyaXZlcnMvdmZpby9wY2kvdmlydGlvL21pZ3JhdGUuYzo3OTpcXHRcXHRmaWxsZWQgPSBhbGxvY19wYWdlc19idWxrKEdGUF9LRVJORUxfQUNDT1VOVCwgdG9fZmlsbCxcXG5kcml2ZXJzL3ZmaW8vcGNpL3ZpcnRpby9taWdyYXRlLmMtODAtXFx0XFx0XFx0XFx0XFx0ICBwYWdlX2xpc3QpO1xcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS92aXJ0aW8vbWlncmF0ZS5jPTExMD1zdGF0aWMgdm9pZCB2aXJ0aW92Zl9mcmVlX2RhdGFfYnVmZmVyKHN0cnVjdCB2aXJ0aW92Zl9kYXRhX2J1ZmZlciAqYnVmKVxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS92aXJ0aW8vbWlncmF0ZS5jLTExMy1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZpcnRpby9taWdyYXRlLmM6MTE0OlxcdC8qIFVuZG8gYWxsb2NfcGFnZXNfYnVsaygpICovXFxuZHJpdmVycy92ZmlvL3BjaS92aXJ0aW8vbWlncmF0ZS5jLTExNS1cXHRmb3JfZWFjaF9zZ3RhYmxlX3BhZ2UoXFx1MDAyNmJ1Zi1cXHUwMDNldGFibGUuc2d0LCBcXHUwMDI2c2dfaXRlciwgMClcXG4tLVxcbmZzL2J0cmZzL2V4dGVudF9pby5jPTY4ND1pbnQgYnRyZnNfYWxsb2NfcGFnZV9hcnJheSh1bnNpZ25lZCBpbnQgbnJfcGFnZXMsIHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheSwgZ2ZwX3QgZ2ZwKVxcbi0tXFxuZnMvYnRyZnMvZXh0ZW50X2lvLmMtNjkwLVxcbmZzL2J0cmZzL2V4dGVudF9pby5jOjY5MTpcXHRcXHRhbGxvY2F0ZWQgPSBhbGxvY19wYWdlc19idWxrKGdmcCwgbnJfcGFnZXMsIHBhZ2VfYXJyYXkpO1xcbmZzL2J0cmZzL2V4dGVudF9pby5jLTY5Mi1cXHRcXHRpZiAodW5saWtlbHkoYWxsb2NhdGVkID09IGxhc3QpKSB7XFxuLS1cXG5mcy9lcm9mcy96dXRpbC5jPTY1PWludCB6X2Vyb2ZzX2didWZfZ3Jvd3NpemUodW5zaWduZWQgaW50IG5ycGFnZXMpXFxuLS1cXG5mcy9lcm9mcy96dXRpbC5jLTg5LVxcdFxcdFxcdGxhc3QgPSBqO1xcbmZzL2Vyb2ZzL3p1dGlsLmM6OTA6XFx0XFx0XFx0aiA9IGFsbG9jX3BhZ2VzX2J1bGsoR0ZQX0tFUk5FTCwgbnJwYWdlcywgdG1wX3BhZ2VzKTtcXG5mcy9lcm9mcy96dXRpbC5jLTkxLVxcdFxcdFxcdGlmIChsYXN0ID09IGopXFxuLS1cXG5mcy9mdXNlL3JlYWRkaXIuYz0zMzY9c3RhdGljIHN0cnVjdCBwYWdlICoqZnVzZV9yZWFkZGlyX2FsbG9jX2J1ZihzdHJ1Y3QgZnVzZV9hcmdzX3BhZ2VzICphcCwgc2l6ZV90ICpidWZzaXplKVxcbi0tXFxuZnMvZnVzZS9yZWFkZGlyLmMtMzQzLVxcbmZzL2Z1c2UvcmVhZGRpci5jOjM0NDpcXHRucl9hbGxvYyA9IGFsbG9jX3BhZ2VzX2J1bGsoR0ZQX0tFUk5FTCwgbnJfcGFnZXMsIHBhZ2VzKTtcXG5mcy9mdXNlL3JlYWRkaXIuYy0zNDUtXFx0aWYgKCFucl9hbGxvYylcXG4tLVxcbmZzL25mc2QvbmZzNHN0YXRlLmM9MTMyNj1hbGxvY19pbml0X2Rpcl9kZWxlZyhzdHJ1Y3QgbmZzNF9jbGllbnQgKmNscCwgc3RydWN0IG5mczRfZmlsZSAqZnApXFxuLS1cXG5mcy9uZnNkL25mczRzdGF0ZS5jLTEzMzctXFxuZnMvbmZzZC9uZnM0c3RhdGUuYzoxMzM4OlxcdG5wYWdlcyA9IGFsbG9jX3BhZ2VzX2J1bGsoR0ZQX0tFUk5FTCwgTk9USUZZNF9QQUdFX0FSUkFZX1NJWkUsIG5jbi1cXHUwMDNlbmNuX3BhZ2VzKTtcXG5mcy9uZnNkL25mczRzdGF0ZS5jLTEzMzktXFx0aWYgKG5wYWdlcyAhPSBOT1RJRlk0X1BBR0VfQVJSQVlfU0laRSkge1xcbi0tXFxuZnMvc3BsaWNlLmM9MzE4PXNzaXplX3QgY29weV9zcGxpY2VfcmVhZChzdHJ1Y3QgZmlsZSAqaW4sIGxvZmZfdCAqcHBvcyxcXG4tLVxcbmZzL3NwbGljZS5jLTM0MS1cXHRwYWdlcyA9IChzdHJ1Y3QgcGFnZSAqKikoYnYgKyBucGFnZXMpO1xcbmZzL3NwbGljZS5jOjM0MjpcXHRucGFnZXMgPSBhbGxvY19wYWdlc19idWxrKEdGUF9VU0VSLCBucGFnZXMsIHBhZ2VzKTtcXG5mcy9zcGxpY2UuYy0zNDMtXFx0aWYgKCFucGFnZXMpIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvZ2ZwLmg9MjA3PXN0cnVjdCBmb2xpbyAqX19mb2xpb19hbGxvY19ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsIGludCBwcmVmZXJyZWRfbmlkLFxcbi0tXFxuaW5jbHVkZS9saW51eC9nZnAuaC0yMTAtXFxuaW5jbHVkZS9saW51eC9nZnAuaDoyMTE6dW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnBfdCBnZnAsIGludCBwcmVmZXJyZWRfbmlkLFxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjEyLVxcdFxcdFxcdFxcdG5vZGVtYXNrX3QgKm5vZGVtYXNrLCBpbnQgbnJfcGFnZXMsXFxuaW5jbHVkZS9saW51eC9nZnAuaC0yMTMtXFx0XFx0XFx0XFx0c3RydWN0IHBhZ2UgKipwYWdlX2FycmF5KTtcXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjIxNDojZGVmaW5lIF9fYWxsb2NfcGFnZXNfYnVsayguLi4pXFx0XFx0XFx0YWxsb2NfaG9va3MoYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoX19WQV9BUkdTX18pKVxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjE1LVxcbmluY2x1ZGUvbGludXgvZ2ZwLmg9MjE2PXZvaWQgZnJlZV9wYWdlc19idWxrKHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheSwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyk7XFxuaW5jbHVkZS9saW51eC9nZnAuaC0yMTctXFxuaW5jbHVkZS9saW51eC9nZnAuaDoyMTg6dW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2YoZ2ZwX3QgZ2ZwLFxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjE5LVxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXFxuaW5jbHVkZS9saW51eC9nZnAuaC0yMjAtXFx0XFx0XFx0XFx0c3RydWN0IHBhZ2UgKipwYWdlX2FycmF5KTtcXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjIyMTojZGVmaW5lICBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeSguLi4pXFx0XFx0XFx0XFx0XFxcXFxcbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjIyOlxcdGFsbG9jX2hvb2tzKGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZihfX1ZBX0FSR1NfXykpXFxuaW5jbHVkZS9saW51eC9nZnAuaC0yMjMtXFxuaW5jbHVkZS9saW51eC9nZnAuaC0yMjQtLyogQnVsayBhbGxvY2F0ZSBvcmRlci0wIHBhZ2VzICovXFxuaW5jbHVkZS9saW51eC9nZnAuaDoyMjU6I2RlZmluZSBhbGxvY19wYWdlc19idWxrKF9nZnAsIF9ucl9wYWdlcywgX3BhZ2VfYXJyYXkpXFx0XFx0XFxcXFxcbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjI2OlxcdF9fYWxsb2NfcGFnZXNfYnVsayhfZ2ZwLCBudW1hX21lbV9pZCgpLCBOVUxMLCBfbnJfcGFnZXMsIF9wYWdlX2FycmF5KVxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjI3LVxcbmluY2x1ZGUvbGludXgvZ2ZwLmg9MjI4PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZ1xcbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjI5OmFsbG9jX3BhZ2VzX2J1bGtfbm9kZV9ub3Byb2YoZ2ZwX3QgZ2ZwLCBpbnQgbmlkLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjMwLVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheSlcXG4tLVxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjM0LVxcbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjM1OlxcdHJldHVybiBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnAsIG5pZCwgTlVMTCwgbnJfcGFnZXMsIHBhZ2VfYXJyYXkpO1xcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjM2LX1cXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIzNy1cXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjIzODojZGVmaW5lIGFsbG9jX3BhZ2VzX2J1bGtfbm9kZSguLi4pXFx0XFx0XFx0XFx0XFxcXFxcbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjM5OlxcdGFsbG9jX2hvb2tzKGFsbG9jX3BhZ2VzX2J1bGtfbm9kZV9ub3Byb2YoX19WQV9BUkdTX18pKVxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjQwLVxcbi0tXFxuaW9fdXJpbmcvbWVtbWFwLmM9MTc0PXN0YXRpYyBpbnQgaW9fcmVnaW9uX2FsbG9jYXRlX3BhZ2VzKHN0cnVjdCBpb19tYXBwZWRfcmVnaW9uICptcixcXG4tLVxcbmlvX3VyaW5nL21lbW1hcC5jLTE5Mi1cXG5pb191cmluZy9tZW1tYXAuYzoxOTM6XFx0bnJfYWxsb2NhdGVkID0gYWxsb2NfcGFnZXNfYnVsa19ub2RlKGdmcCwgTlVNQV9OT19OT0RFLFxcbmlvX3VyaW5nL21lbW1hcC5jLTE5NC1cXHRcXHRcXHRcXHRcXHQgICAgIG1yLVxcdTAwM2Vucl9wYWdlcywgcGFnZXMpO1xcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jPTY2OD1zdGF0aWMgbG9uZyBhcmVuYV9hbGxvY19wYWdlcyhzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSwgbG9uZyB1YWRkciwgbG9uZyBwYWdlX2NudCwgaW50IG5vZGVfaWQsXFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtNzMyLVxcbmtlcm5lbC9icGYvYXJlbmEuYzo3MzM6XFx0XFx0LyogemVyb2luZyBpcyBuZWVkZWQsIHNpbmNlIGFsbG9jX3BhZ2VzX2J1bGsoKSBvbmx5IGZpbGxzIGluIG5vbi16ZXJvIGVudHJpZXMgKi9cXG5rZXJuZWwvYnBmL2FyZW5hLmMtNzM0LVxcdFxcdG1lbXNldChwYWdlcywgMCwgdGhpc19iYXRjaCAqIHNpemVvZihzdHJ1Y3QgcGFnZSAqKSk7XFxuLS1cXG5saWIvdGVzdF92bWFsbG9jLmM9MzkxPXZtX21hcF9yYW1fdGVzdCh2b2lkKVxcbi0tXFxubGliL3Rlc3Rfdm1hbGxvYy5jLTQwMy1cXG5saWIvdGVzdF92bWFsbG9jLmM6NDA0OlxcdG5yX2FsbG9jYXRlZCA9IGFsbG9jX3BhZ2VzX2J1bGsoR0ZQX0tFUk5FTCwgbWFwX25yX3BhZ2VzLCBwYWdlcyk7XFxubGliL3Rlc3Rfdm1hbGxvYy5jLTQwNS1cXHRpZiAobnJfYWxsb2NhdGVkICE9IG1hcF9ucl9wYWdlcylcXG4tLVxcbmxpYi90ZXN0cy9rdW5pdF9pb3ZfaXRlci5jPTUxPXN0YXRpYyB2b2lkICpfX2luaXQgaW92X2t1bml0X2NyZWF0ZV9idWZmZXIoc3RydWN0IGt1bml0ICp0ZXN0LFxcbi0tXFxubGliL3Rlc3RzL2t1bml0X2lvdl9pdGVyLmMtNjYtXFx0XFx0bGFzdCA9IGdvdDtcXG5saWIvdGVzdHMva3VuaXRfaW92X2l0ZXIuYzo2NzpcXHRcXHRnb3QgPSBhbGxvY19wYWdlc19idWxrKEdGUF9LRVJORUwsIG5wYWdlcywgcGFnZXMpO1xcbmxpYi90ZXN0cy9rdW5pdF9pb3ZfaXRlci5jLTY4LVxcbi0tXFxubW0vYWxsb2NfdGFnLmM9Nzc3PXN0YXRpYyBpbnQgdm1fbW9kdWxlX3RhZ3NfcG9wdWxhdGUodm9pZClcXG4tLVxcbm1tL2FsbG9jX3RhZy5jLTc5My1cXG5tbS9hbGxvY190YWcuYzo3OTQ6XFx0XFx0XFx0YWxsb2NhdGVkID0gYWxsb2NfcGFnZXNfYnVsa19ub2RlKEdGUF9LRVJORUwgfCBfX0dGUF9OT1dBUk4sXFxubW0vYWxsb2NfdGFnLmMtNzk1LVxcdFxcdFxcdFxcdE5VTUFfTk9fTk9ERSwgbW9yZV9wYWdlcyAtIG5yLCBuZXh0X3BhZ2UgKyBucik7XFxuLS1cXG5tbS9rYXNhbi9zaGFkb3cuYz0zMjc9c3RhdGljIHZvaWQgX19fZnJlZV9wYWdlc19idWxrKHN0cnVjdCBwYWdlICoqcGFnZXMsIGludCBucl9wYWdlcylcXG4tLVxcbm1tL2thc2FuL3NoYWRvdy5jLTMzOC1cXG5tbS9rYXNhbi9zaGFkb3cuYzozMzk6c3RhdGljIGludCBfX19hbGxvY19wYWdlc19idWxrKHN0cnVjdCBwYWdlICoqcGFnZXMsIGludCBucl9wYWdlcywgZ2ZwX3QgZ2ZwX21hc2spXFxubW0va2FzYW4vc2hhZG93LmMtMzQwLXtcXG4tLVxcbm1tL2thc2FuL3NoYWRvdy5jLTM0NC1cXHR3aGlsZSAobnJfcGFnZXMpIHtcXG5tbS9rYXNhbi9zaGFkb3cuYzozNDU6XFx0XFx0bnJfcG9wdWxhdGVkID0gYWxsb2NfcGFnZXNfYnVsayhnZnBfbWFzaywgbnJfcGFnZXMsIHBhZ2VzKTtcXG5tbS9rYXNhbi9zaGFkb3cuYy0zNDYtXFx0XFx0aWYgKCFucl9wb3B1bGF0ZWQpIHtcXG4tLVxcbm1tL2thc2FuL3NoYWRvdy5jPTM1Nz1zdGF0aWMgaW50IF9fa2FzYW5fcG9wdWxhdGVfdm1hbGxvY19kbyh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwgZ2ZwX3QgZ2ZwX21hc2spXFxuLS1cXG5tbS9rYXNhbi9zaGFkb3cuYy0zNjktXFx0XFx0bnJfcGFnZXMgPSBtaW4obnJfdG90YWwsIFBBR0VfU0laRSAvIHNpemVvZihkYXRhLnBhZ2VzWzBdKSk7XFxubW0va2FzYW4vc2hhZG93LmM6MzcwOlxcdFxcdHJldCA9IF9fX2FsbG9jX3BhZ2VzX2J1bGsoZGF0YS5wYWdlcywgbnJfcGFnZXMsIGdmcF9tYXNrKTtcXG5tbS9rYXNhbi9zaGFkb3cuYy0zNzEtXFx0XFx0aWYgKHJldClcXG4tLVxcbm1tL21lbXBvbGljeS5jPTI1ODk9RVhQT1JUX1NZTUJPTChmb2xpb19hbGxvY19ub3Byb2YpO1xcbm1tL21lbXBvbGljeS5jLTI1OTAtXFxubW0vbWVtcG9saWN5LmM6MjU5MTpzdGF0aWMgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX2ludGVybGVhdmUoZ2ZwX3QgZ2ZwLFxcbm1tL21lbXBvbGljeS5jLTI1OTItXFx0XFx0c3RydWN0IG1lbXBvbGljeSAqcG9sLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbi0tXFxubW0vbWVtcG9saWN5LmMtMjYwNy1cXHRcXHRpZiAoZGVsdGEpIHtcXG5tbS9tZW1wb2xpY3kuYzoyNjA4OlxcdFxcdFxcdG5yX2FsbG9jYXRlZCA9IGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKGdmcCxcXG5tbS9tZW1wb2xpY3kuYy0yNjA5LVxcdFxcdFxcdFxcdFxcdGludGVybGVhdmVfbm9kZXMocG9sKSwgTlVMTCxcXG4tLVxcbm1tL21lbXBvbGljeS5jLTI2MTMtXFx0XFx0fSBlbHNlIHtcXG5tbS9tZW1wb2xpY3kuYzoyNjE0OlxcdFxcdFxcdG5yX2FsbG9jYXRlZCA9IGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKGdmcCxcXG5tbS9tZW1wb2xpY3kuYy0yNjE1LVxcdFxcdFxcdFxcdFxcdGludGVybGVhdmVfbm9kZXMocG9sKSwgTlVMTCxcXG4tLVxcbm1tL21lbXBvbGljeS5jLTI2MjUtXFxubW0vbWVtcG9saWN5LmM6MjYyNjpzdGF0aWMgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmUoZ2ZwX3QgZ2ZwLFxcbm1tL21lbXBvbGljeS5jLTI2MjctXFx0XFx0c3RydWN0IG1lbXBvbGljeSAqcG9sLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbi0tXFxubW0vbWVtcG9saWN5LmMtMjY2NC1cXHRcXHRub2RlX3BhZ2VzID0gbWluKHJlbV9wYWdlcywgd2VpZ2h0KTtcXG5tbS9tZW1wb2xpY3kuYzoyNjY1OlxcdFxcdG5yX2FsbG9jYXRlZCA9IF9fYWxsb2NfcGFnZXNfYnVsayhnZnAsIG5vZGUsIE5VTEwsIG5vZGVfcGFnZXMsXFxubW0vbWVtcG9saWN5LmMtMjY2Ni1cXHRcXHRcXHRcXHRcXHRcXHQgIHBhZ2VfYXJyYXkpO1xcbi0tXFxubW0vbWVtcG9saWN5LmMtMjcwMS1cXHQvKlxcbm1tL21lbXBvbGljeS5jOjI3MDI6XFx0ICogQ2FsY3VsYXRlIHJvdW5kcy9wYXJ0aWFsIHJvdW5kcyB0byBtaW5pbWl6ZSBfX2FsbG9jX3BhZ2VzX2J1bGsgY2FsbHMuXFxubW0vbWVtcG9saWN5LmMtMjcwMy1cXHQgKiBUcmFjayB3aGljaCBub2RlIHdlaWdodGVkIGludGVybGVhdmUgc2hvdWxkIHJlc3VtZSBmcm9tLlxcbi0tXFxubW0vbWVtcG9saWN5LmMtMjcyOS1cXHRcXHRcXHRicmVhaztcXG5tbS9tZW1wb2xpY3kuYzoyNzMwOlxcdFxcdG5yX2FsbG9jYXRlZCA9IF9fYWxsb2NfcGFnZXNfYnVsayhnZnAsIG5vZGUsIE5VTEwsIG5vZGVfcGFnZXMsXFxubW0vbWVtcG9saWN5LmMtMjczMS1cXHRcXHRcXHRcXHRcXHRcXHQgIHBhZ2VfYXJyYXkpO1xcbi0tXFxubW0vbWVtcG9saWN5LmMtMjc0My1cXG5tbS9tZW1wb2xpY3kuYzoyNzQ0OnN0YXRpYyB1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfcHJlZmVycmVkX21hbnkoZ2ZwX3QgZ2ZwLCBpbnQgbmlkLFxcbm1tL21lbXBvbGljeS5jLTI3NDUtXFx0XFx0c3RydWN0IG1lbXBvbGljeSAqcG9sLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbi0tXFxubW0vbWVtcG9saWN5LmMtMjc1My1cXG5tbS9tZW1wb2xpY3kuYzoyNzU0OlxcdG5yX2FsbG9jYXRlZCAgPSBhbGxvY19wYWdlc19idWxrX25vcHJvZihwcmVmZXJyZWRfZ2ZwLCBuaWQsIFxcdTAwMjZwb2wtXFx1MDAzZW5vZGVzLFxcbm1tL21lbXBvbGljeS5jLTI3NTUtXFx0XFx0XFx0XFx0XFx0ICAgbnJfcGFnZXMsIHBhZ2VfYXJyYXkpO1xcbi0tXFxubW0vbWVtcG9saWN5LmMtMjc1Ny1cXHRpZiAobnJfYWxsb2NhdGVkIFxcdTAwM2MgbnJfcGFnZXMpXFxubW0vbWVtcG9saWN5LmM6Mjc1ODpcXHRcXHRucl9hbGxvY2F0ZWQgKz0gYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoZ2ZwLCBudW1hX25vZGVfaWQoKSwgTlVMTCxcXG5tbS9tZW1wb2xpY3kuYy0yNzU5LVxcdFxcdFxcdFxcdG5yX3BhZ2VzIC0gbnJfYWxsb2NhdGVkLFxcbi0tXFxubW0vbWVtcG9saWN5LmMtMjc2OS0gKi9cXG5tbS9tZW1wb2xpY3kuYzoyNzcwOnVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mKGdmcF90IGdmcCxcXG5tbS9tZW1wb2xpY3kuYy0yNzcxLVxcdFxcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsIHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheSlcXG4tLVxcbm1tL21lbXBvbGljeS5jLTI3ODAtXFx0aWYgKHBvbC1cXHUwMDNlbW9kZSA9PSBNUE9MX0lOVEVSTEVBVkUpXFxubW0vbWVtcG9saWN5LmM6Mjc4MTpcXHRcXHRyZXR1cm4gYWxsb2NfcGFnZXNfYnVsa19pbnRlcmxlYXZlKGdmcCwgcG9sLFxcbm1tL21lbXBvbGljeS5jLTI3ODItXFx0XFx0XFx0XFx0XFx0XFx0XFx0IG5yX3BhZ2VzLCBwYWdlX2FycmF5KTtcXG4tLVxcbm1tL21lbXBvbGljeS5jLTI3ODQtXFx0aWYgKHBvbC1cXHUwMDNlbW9kZSA9PSBNUE9MX1dFSUdIVEVEX0lOVEVSTEVBVkUpXFxubW0vbWVtcG9saWN5LmM6Mjc4NTpcXHRcXHRyZXR1cm4gYWxsb2NfcGFnZXNfYnVsa193ZWlnaHRlZF9pbnRlcmxlYXZlKFxcbm1tL21lbXBvbGljeS5jLTI3ODYtXFx0XFx0XFx0XFx0ICBnZnAsIHBvbCwgbnJfcGFnZXMsIHBhZ2VfYXJyYXkpO1xcbi0tXFxubW0vbWVtcG9saWN5LmMtMjc4OC1cXHRpZiAocG9sLVxcdTAwM2Vtb2RlID09IE1QT0xfUFJFRkVSUkVEX01BTlkpXFxubW0vbWVtcG9saWN5LmM6Mjc4OTpcXHRcXHRyZXR1cm4gYWxsb2NfcGFnZXNfYnVsa19wcmVmZXJyZWRfbWFueShnZnAsXFxubW0vbWVtcG9saWN5LmMtMjc5MC1cXHRcXHRcXHRcXHRudW1hX25vZGVfaWQoKSwgcG9sLCBucl9wYWdlcywgcGFnZV9hcnJheSk7XFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0yNzkzLVxcdG5vZGVtYXNrID0gcG9saWN5X25vZGVtYXNrKGdmcCwgcG9sLCBOT19JTlRFUkxFQVZFX0lOREVYLCBcXHUwMDI2bmlkKTtcXG5tbS9tZW1wb2xpY3kuYzoyNzk0OlxcdHJldHVybiBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnAsIG5pZCwgbm9kZW1hc2ssXFxubW0vbWVtcG9saWN5LmMtMjc5NS1cXHRcXHRcXHRcXHQgICAgICAgbnJfcGFnZXMsIHBhZ2VfYXJyYXkpO1xcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTUwOTE9c3RhdGljIGlubGluZSBib29sIHByZXBhcmVfYWxsb2NfcGFnZXMoZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcixcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy01MTM5LS8qXFxubW0vcGFnZV9hbGxvYy5jOjUxNDA6ICogX19hbGxvY19wYWdlc19idWxrIC0gQWxsb2NhdGUgYSBudW1iZXIgb2Ygb3JkZXItMCBwYWdlcyB0byBhbiBhcnJheVxcbm1tL3BhZ2VfYWxsb2MuYy01MTQxLSAqIEBnZnA6IEdGUCBmbGFncyBmb3IgdGhlIGFsbG9jYXRpb25cXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy01MTU5LSAqL1xcbm1tL3BhZ2VfYWxsb2MuYzo1MTYwOnVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoZ2ZwX3QgZ2ZwLCBpbnQgcHJlZmVycmVkX25pZCxcXG5tbS9wYWdlX2FsbG9jLmMtNTE2MS1cXHRcXHRcXHRub2RlbWFza190ICpub2RlbWFzaywgaW50IG5yX3BhZ2VzLFxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTUzMDEtfVxcbm1tL3BhZ2VfYWxsb2MuYzo1MzAyOkVYUE9SVF9TWU1CT0xfR1BMKGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKTtcXG5tbS9wYWdlX2FsbG9jLmMtNTMwMy1cXG4tLVxcbm1tL3NsdWIuYz03NDI2PXN0YXRpYyBib29sIF9fa21lbV9jYWNoZV9hbGxvY19idWxrKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBmbGFncyxcXG4tLVxcbm1tL3NsdWIuYy03NDcwLSAqXFxubW0vc2x1Yi5jOjc0NzE6ICogVW5saWtlIGFsbG9jX3BhZ2VzX2J1bGsoKSwgdGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBjaGVjayBmb3IgYWxyZWFkeSBhbGxvY2F0ZWRcXG5tbS9zbHViLmMtNzQ3Mi0gKiBvYmplY3RzIGluIEBwLCBhbmQgdGh1cyB0aGUgY2FsbGVyIGRvZXMgbm90IG5lZWQgdG8gemVybyBpdC5cXG4tLVxcbm1tL3ZtYWxsb2MuYz0zNjc2PXZtX2FyZWFfYWxsb2NfcGFnZXMoZ2ZwX3QgZ2ZwLCBpbnQgbmlkLFxcbi0tXFxubW0vdm1hbGxvYy5jLTM3NDMtXFx0XFx0XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX05VTUEpIFxcdTAwMjZcXHUwMDI2IG5pZCA9PSBOVU1BX05PX05PREUpXFxubW0vdm1hbGxvYy5jOjM3NDQ6XFx0XFx0XFx0XFx0bnIgPSBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2YoZ2ZwLFxcbm1tL3ZtYWxsb2MuYy0zNzQ1LVxcdFxcdFxcdFxcdFxcdFxcdFxcdG5yX3BhZ2VzX3JlcXVlc3QsXFxuLS1cXG5tbS92bWFsbG9jLmMtMzc0Ny1cXHRcXHRcXHRlbHNlXFxubW0vdm1hbGxvYy5jOjM3NDg6XFx0XFx0XFx0XFx0bnIgPSBhbGxvY19wYWdlc19idWxrX25vZGVfbm9wcm9mKGdmcCwgbmlkLFxcbm1tL3ZtYWxsb2MuYy0zNzQ5LVxcdFxcdFxcdFxcdFxcdFxcdFxcdG5yX3BhZ2VzX3JlcXVlc3QsXFxuLS1cXG5uZXQvY29yZS9wYWdlX3Bvb2wuYz02MTE9c3RhdGljIG5vaW5saW5lIG5ldG1lbV9yZWYgX19wYWdlX3Bvb2xfYWxsb2NfbmV0bWVtc19zbG93KHN0cnVjdCBwYWdlX3Bvb2wgKnBvb2wsXFxuLS1cXG5uZXQvY29yZS9wYWdlX3Bvb2wuYy02MzMtXFxubmV0L2NvcmUvcGFnZV9wb29sLmM6NjM0OlxcdC8qIE1hcmsgZW1wdHkgYWxsb2MuY2FjaGUgc2xvdHMgXFxcImVtcHR5XFxcIiBmb3IgYWxsb2NfcGFnZXNfYnVsayAqL1xcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTYzNS1cXHRtZW1zZXQoXFx1MDAyNnBvb2wtXFx1MDAzZWFsbG9jLmNhY2hlLCAwLCBzaXplb2Yodm9pZCAqKSAqIGJ1bGspO1xcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTYzNi1cXG5uZXQvY29yZS9wYWdlX3Bvb2wuYzo2Mzc6XFx0bnJfcGFnZXMgPSBhbGxvY19wYWdlc19idWxrX25vZGUoZ2ZwLCBwb29sLVxcdTAwM2VwLm5pZCwgYnVsayxcXG5uZXQvY29yZS9wYWdlX3Bvb2wuYy02MzgtXFx0XFx0XFx0XFx0XFx0IChzdHJ1Y3QgcGFnZSAqKilwb29sLVxcdTAwM2VhbGxvYy5jYWNoZSk7XFxuLS1cXG5uZXQvc3VucnBjL3N2Y194cHJ0LmM9Njg3PXN0YXRpYyBib29sIHN2Y19maWxsX3BhZ2VzKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsIHN0cnVjdCBwYWdlICoqcGFnZXMsXFxuLS1cXG5uZXQvc3VucnBjL3N2Y194cHJ0LmMtNjkyLVxcdGZvciAoZmlsbGVkID0gMDsgZmlsbGVkIFxcdTAwM2MgbnBhZ2VzOyBmaWxsZWQgPSByZXQpIHtcXG5uZXQvc3VucnBjL3N2Y194cHJ0LmM6NjkzOlxcdFxcdHJldCA9IGFsbG9jX3BhZ2VzX2J1bGsoR0ZQX0tFUk5FTCwgbnBhZ2VzLCBwYWdlcyk7XFxubmV0L3N1bnJwYy9zdmNfeHBydC5jLTY5NC1cXHRcXHRpZiAocmV0IFxcdTAwM2UgZmlsbGVkKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxMjowODo1My41MzI4MzU3MTZaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzcwNTY2MzMzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBQYXRjaCBmb3IgQnVsayBQYWdlIEFsbG9jYXRpb24gYW5kIEtNU0FOIEludGVncmF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBcIldoZXJlIGlzIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAgdXNlZD9cIi4gVHVybnMgb3V0LCBpdCdzIHVzZWQgKmV2ZXJ5d2hlcmUqIC0gYHZtYWxsb2NgLCBgcGFnZV9wb29sYCwgYGlvX3VyaW5nYCwgYHNwbGljZWAsIGBidHJmc2AsIGBicGZfYXJlbmFgLCBgc3VucnBjYCwgYW5kIHNvIG9uLiBTbywgaXQncyBkZWZpbml0ZWx5IGEgY29yZSBmdW5jdGlvbiwgd2hpY2ggaW1tZWRpYXRlbHkgY2F0Y2hlcyBteSBhdHRlbnRpb24uXG5cblRoZSBwYXRjaCBpdHNlbGYgaXMgYWRkaW5nIGB0cmFjZV9tbV9wYWdlX2FsbG9jYCBhbmQgYGttc2FuX2FsbG9jX3BhZ2VgIHRvIHRoZSBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIGZ1bmN0aW9uIGluIGBtbS9wYWdlX2FsbG9jLmNgLiBNeSBuZXh0IHF1ZXN0aW9uIGlzLCBcIklzIHRoaXMgd29ydGggZnV6emluZz9cIi5cblxuSXQgY2VydGFpbmx5IG1vZGlmaWVzIHRoZSBydW50aW1lIGJlaGF2aW9yIOKAkyBLTVNBTiBtZXRhZGF0YSBpbml0aWFsaXphdGlvbiBhbmQgdHJhY2Vwb2ludCBlbWlzc2lvbiBhcmUgYmVpbmcgYWRkZWQuIFRoaXMgZGlyZWN0bHkgYWx0ZXJzIGhvdyBwYWdlIHNoYWRvdyBtZXRhZGF0YSBpcyBoYW5kbGVkLCBwb3RlbnRpYWxseSBmaXhpbmcgdW5pbml0IG9yIHRyYWNraW5nIGlzc3VlcyB3aGVuIHBhZ2VzIGFyZSBhbGxvY2F0ZWQgdmlhIHRoZSBQQ1AgbGlzdCBpbiB0aGUgYnVsayBhbGxvY2F0b3IuIFRoYXQncyBhIGdvb2Qgc2lnbi5cblxuQWNjb3JkaW5nIHRvIHRoZSBcIldvcnRoRnV6emluZ1wiIGNyaXRlcmlhLCBpdCdzIGEgXCJ5ZXNcIiBzaW5jZSBpdCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaW4gYSBjb3JlIHN1YnN5c3RlbSAobWVtb3J5IG1hbmFnZW1lbnQpLCBhbmQgdGhpcyBpcyBsb2dpYyBtb2RpZmljYXRpb24uXG5cbk5vdywgdGhlIHJlYWwgcXVlc3Rpb246IGFyZSBhbnkgb2YgdGhlc2UgYWZmZWN0ZWQgZnVuY3Rpb25zIHViaXF1aXRvdXM/IEkgaGF2ZSB0byBjb25zaWRlciB0aGUgXCJBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFNcIiBydWxlLiBJIG5lZWQgdG8gYmUgY2FyZWZ1bCBub3QgdG8gZGlsdXRlIHRoZSBmdXp6aW5nIGVmZm9ydC4gSSBrbm93IHRoYXQgYGttYWxsb2NgIG9yIGBfX2FsbG9jX3BhZ2VzX25vcHJvZmAgYXJlIG91dCBzaW5jZSB0aGV5IGFyZSB1YmlxdWl0b3VzLiBCdXQgaXMgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCBnZW5lcmFsIG9yIGlzIGl0IG1vcmUgc3BlY2lmaWMgdG8gYnVsayBhbGxvY2F0aW9uIGNhbGxzPyBJdCdzIGNhbGxlZCBieSB0aGUgYnVsayBhbGxvY2F0aW9uIGNhbGxlcnMgbGlrZSBgdm1fYXJlYV9hbGxvY19wYWdlc2AsIGBidHJmc19hbGxvY19wYWdlX2FycmF5YCwgZXRjLiBJIHRoaW5rIGl0IGlzIGEgc3BlY2lmaWMgYnVsayBhbGxvY2F0b3IuXG5cbkJ1dCB3YWl0LCBga21zYW5fYWxsb2NfcGFnZWAgaXMgY2FsbGVkIGZyb20gYF9fYWxsb2NfZnJvemVuX3BhZ2VzX25vcHJvZmAsIHdoaWNoIGlzIGNhbGxlZCB3aGVuZXZlciBLTVNBTiBpcyBlbmFibGVkLiAgVGhlcmVmb3JlLCBpdCBpcyB1YmlxdWl0b3VzIGlmIEtNU0FOIGlzIGVuYWJsZWQuXG5cblNvLCBJIHRoaW5rIEkgY2FuIGluY2x1ZGUgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCBpbiBgRm9jdXNTeW1ib2xzYCBzaW5jZSB0aGF0J3Mgd2hlcmUgdGhlICpzcGVjaWZpYyogY2hhbmdlIGlzLiBUaGUgcmVsZXZhbnQgZnVuY3Rpb25zIGFyZTogYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCwgYGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZmAsIGB2bV9hcmVhX2FsbG9jX3BhZ2VzYCwgYGFyZW5hX2FsbG9jX3BhZ2VzYCwgYGlvX3JlZ2lvbl9hbGxvY2F0ZV9wYWdlc2AsIGFuZCBgY29weV9zcGxpY2VfcmVhZGAuXG5cbkZpbmFsbHksIGRvZXMgdGhpcyBjb2RlIGRlcGVuZCBvbiBhbnkgc3BlY2lhbCBjb25maWc/IFllcywgYGttc2FuX2FsbG9jX3BhZ2VgIGlzIHBhcnQgb2YgS01TQU4gKGBDT05GSUdfS01TQU5gKSwgYnV0IHRoZSBidWxrIGFsbG9jYXRpb24gY29kZSBpdHNlbGYgaXMgYWx3YXlzIGNvbXBpbGVkLiBTbywgSSBoYXZlIHRvIGJlIG1pbmRmdWwgdGhhdCB0aGUgS01TQU4gcGFydCBtaWdodCBub3QgYWx3YXlzIGJlIGFjdGl2ZS4gQnV0IHRoZSBtb2RpZmljYXRpb24gdG8gYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCBpdHNlbGYgaXMgYWx3YXlzIHByZXNlbnQsIHdoaWNoIG1ha2VzIGl0IGEgZ29vZCB0YXJnZXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MjU3LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxMjowOTowMS4yMzg1MDE2ODFaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5NTk3NzQ5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS01TQU5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxMjowOTowMS4yODgxMDc5NVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyOTM5MjA0NDM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEknbSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6XG5cbioqSW52ZXN0aWdhdGluZyBLTVNBTiBpbiB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCBJJ20gdGhpbmtpbmcsIFwiS01TQU4uLi4gd2hlcmUgZG9lcyB0aGF0IGZpdCBpbnRvIHRoZSBwaWN0dXJlP1wiIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBjaGVjayB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoaXMgaXMgc29tZXRoaW5nIHRoYXQncyBldmVuICplbmFibGVkKiBvciAqY29uZmlndXJhYmxlKiBpbiB0aGUgY3VycmVudCBidWlsZC4gU28sIEknbSBnb2luZyB0byBraWNrIG9mZiBhIHNlYXJjaCBmb3IgXCJLTVNBTlwiIHdpdGhpbiBLY29uZmlnLiBUaGF0IHNlZW1zIGxpa2UgdGhlIGxvZ2ljYWwgZmlyc3Qgc3RlcCB0byBkZXRlcm1pbmUgaG93IGRlZXAgdGhpcyByYWJiaXQgaG9sZSBnb2VzLiBJIG5lZWQgdG8gcXVpY2tseSBlc3RhYmxpc2ggaWYgaXQncyBldmVuIHByZXNlbnQgYXMgYSBjb25maWd1cmFibGUgb3B0aW9uIGFuZCB3aGF0IGRlcGVuZGVuY2llcyBpdCBoYXMuIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmFzZSB0byBnbyBmcm9tLCBlaXRoZXIgdG8gbG9vayBhdCB0aGUgb3RoZXIgY29uZmlndXJhdGlvbiBvcHRpb25zLCBvciB0byB1c2UgdGhpcyBpbmZvcm1hdGlvbiB0byBkZXRlcm1pbmUgaG93IHRoZSBjb25maWd1cmF0aW9uIGFmZmVjdHMgdGhlIGJ1aWxkIGl0c2VsZi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY0NTcsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxMjowOTowNC4yMjczMTUwMDZaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY5MDc2OTQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLTVNBTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJsaWIvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImxpYi9LY29uZmlnLmttc2FuPTU9Y29uZmlnIEhBVkVfS01TQU5fQ09NUElMRVJcXG4tLVxcbmxpYi9LY29uZmlnLmttc2FuLTctXFxubGliL0tjb25maWcua21zYW46ODpjb25maWcgS01TQU5cXG5saWIvS2NvbmZpZy5rbXNhbi05LVxcdGJvb2wgXFxcIktNU0FOOiBkZXRlY3RvciBvZiB1bmluaXRpYWxpemVkIHZhbHVlcyB1c2VcXFwiXFxuLS1cXG5saWIvS2NvbmZpZy5rbXNhbj0yNj1pZiBLTVNBTlxcbmxpYi9LY29uZmlnLmttc2FuLTI3LVxcbmxpYi9LY29uZmlnLmttc2FuOjI4OmNvbmZpZyBLTVNBTl9DSEVDS19QQVJBTV9SRVRWQUxcXG5saWIvS2NvbmZpZy5rbXNhbi0yOS1cXHRib29sIFxcXCJDaGVjayBmb3IgdW5pbml0aWFsaXplZCB2YWx1ZXMgcGFzc2VkIHRvIGFuZCByZXR1cm5lZCBmcm9tIGZ1bmN0aW9uc1xcXCJcXG4tLVxcbmxpYi9LY29uZmlnLmttc2FuLTQxLVxcbmxpYi9LY29uZmlnLmttc2FuOjQyOmNvbmZpZyBLTVNBTl9LVU5JVF9URVNUXFxubGliL0tjb25maWcua21zYW4tNDMtXFx0dHJpc3RhdGUgXFxcIktNU0FOIGludGVncmF0aW9uIHRlc3Qgc3VpdGVcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTI6MDk6MDQuMjk2Mzk3OTE2WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5NDYzNzU2MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gQ29uZmlndXJhdGlvbiBDaGVjayoqXG5cbk9rYXksIHNvIGBDT05GSUdfS01TQU5gIGlzIGRlZmluZWQgd2l0aGluIGBsaWIvS2NvbmZpZy5rbXNhbmAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2YgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIHRoaXMgZmVhdHVyZSwgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgbWVtb3J5IGFsbG9jYXRpb24uIExldCdzIGRlbHZlIGludG8gYGluY2x1ZGUvbGludXgva21zYW4uaGAgcmlnaHQgYXdheS4gSSdsbCBuZWVkIHRvIGV4YW1pbmUgdGhlIGRlZmluaXRpb24gb2YgYGttc2FuX2FsbG9jX3BhZ2VgIHVuZGVyIGJvdGggc2NlbmFyaW9zIC0gd2l0aCBgQ09ORklHX0tNU0FOYCBlbmFibGVkIGFuZCBkaXNhYmxlZCAtIHRvIHNlZSBob3cgdGhlIGltcGxlbWVudGF0aW9uIGNoYW5nZXMuIFRoYXQncyB3aGVyZSB0aGUgcmVhbCBkaWZmZXJlbmNlIHdpbGwgYmUuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgd2hhdCdzIHdoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2OTA2LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTI6MDk6MDYuMjQyNzc3OTc2WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDg4NDc5OTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia21zYW5fYWxsb2NfcGFnZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2ttc2FuLmg9NTc9Ym9vbCBfX2luaXQgX19tdXN0X2NoZWNrIGttc2FuX21lbWJsb2NrX2ZyZWVfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2ttc2FuLmgtNjAtLyoqXFxuaW5jbHVkZS9saW51eC9rbXNhbi5oOjYxOiAqIGttc2FuX2FsbG9jX3BhZ2UoKSAtIE5vdGlmeSBLTVNBTiBhYm91dCBhbiBhbGxvY19wYWdlcygpIGNhbGwuXFxuaW5jbHVkZS9saW51eC9rbXNhbi5oLTYyLSAqIEBwYWdlOiAgc3RydWN0IHBhZ2UgcG9pbnRlciByZXR1cm5lZCBieSBhbGxvY19wYWdlcygpLlxcbi0tXFxuaW5jbHVkZS9saW51eC9rbXNhbi5oLTY4LSAqL1xcbmluY2x1ZGUvbGludXgva21zYW4uaDo2OTp2b2lkIGttc2FuX2FsbG9jX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlciwgZ2ZwX3QgZmxhZ3MpO1xcbmluY2x1ZGUvbGludXgva21zYW4uaC03MC1cXG4tLVxcbmluY2x1ZGUvbGludXgva21zYW4uaD0zMTU9c3RhdGljIGlubGluZSB2b2lkIGttc2FuX3Rhc2tfZXhpdChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2ttc2FuLmgtMzE4LVxcbmluY2x1ZGUvbGludXgva21zYW4uaDozMTk6c3RhdGljIGlubGluZSB2b2lkIGttc2FuX2FsbG9jX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcixcXG5pbmNsdWRlL2xpbnV4L2ttc2FuLmgtMzIwLVxcdFxcdFxcdFxcdCAgICBnZnBfdCBmbGFncylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTI6MDk6MDYuMzkxNjM4MTQ0WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjcxOTk3MzAzNTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgVGhpcyBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBteSBicmFpbiB6ZXJvZXMgaW4gb24gdGhlIGNvbmRpdGlvbmFsIGxvZ2ljLiBga21zYW5fYWxsb2NfcGFnZSgpYCBpcyBhbiBlbXB0eSBpbmxpbmUgdW5sZXNzIGBDT05GSUdfS01TQU5gIGlzIGZsaXBwZWQgb24uIElmIEtNU0FOICppcyogZW5hYmxlZCwgaXQga2lja3Mgb2ZmIEtNU0FOJ3Mgc2hhZG93IGFuZCBvcmlnaW4gaW5pdGlhbGl6YXRpb24uIEFuZCB0aGVuIHRoZXJlJ3MgYHRyYWNlX21tX3BhZ2VfYWxsb2NgLCB3aGljaCBpcyBndWFyZGVkIGJ5IGVpdGhlciB0cmFjaW5nIG9yIGBDT05GSUdfRVZFTlRfVFJBQ0lOR2AuIFNvLCB0byBhY3R1YWxseSBleGVyY2lzZSB0aGUgY2hhbmdlcyBtYWRlIGJ5IHRoaXMgcGF0Y2gsIEtNU0FOIGlzIGFic29sdXRlbHkga2V5LiBUaGF04oCZcyB0aGUgZmlyc3QgdGhpbmcgSSBuZWVkIHRvIHJlbWVtYmVyLlxuXG5MZXQncyBkbyBhIHF1aWNrIHJ1bmRvd24gdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcuIEkgc2VlIHRoYXQgYFdvcnRoRnV6emluZ2AgaXMgc2V0IHRvIGB0cnVlYCwgd2hpY2ggbWFrZXMgc2Vuc2UgYmVjYXVzZSB3ZSdyZSB0b3VjaGluZyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGZ1bmN0aW9ucy4gVGhlIGBSZWFzb25pbmdgIHNlY3Rpb24gaGl0cyB0aGUgbmFpbCBvbiB0aGUgaGVhZCDigJMgdGhpcyBwYXRjaCBpcyBtb2RpZnlpbmcgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCAoYW5kIGl0cyBtZW1wb2xpY3kgY291bnRlcnBhcnQpIGluIGBtbS9wYWdlX2FsbG9jLmNgIGFuZCBpbnRyb2R1Y2luZyBjYWxscyB0byBgdHJhY2VfbW1fcGFnZV9hbGxvY2AgYW5kIGBrbXNhbl9hbGxvY19wYWdlYC4gVGhlIHB1cnBvc2UgaXMgdG8gY29ycmVjdGx5IGluaXRpYWxpemUgS01TQU4gc2hhZG93IG1ldGFkYXRhIGZvciBidWxrLWFsbG9jYXRlZCBwYWdlcy4gSSBhZ3JlZSwgdGhpcyBpcyBhIGNsZWFyIG1vZGlmaWNhdGlvbiB0byB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudC5cblxuSSBjb25maXJtIHRoZSBgRm9jdXNTeW1ib2xzYCBhcmUgYXBwcm9wcmlhdGVseSBzY29wZWQgdG8gYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCBhbmQgaXRzIG1lbXBvbGljeSB2YXJpYW50LiBObyB3aWRlciBzY29wZSBuZWVkZWQgYXMgdGhlIGNvbmNlcm4gaXMgYnVsayBhbGxvY2F0aW9uLlxuXG5BbmQgb2J2aW91c2x5LCB0aGUgYEVuYWJsZUNvbmZpZ3NgIGFyZSBjb3JyZWN0bHkgc3BlY2lmaWVkIGFzIGBLTVNBTmAuIFdlIG5lZWQgS01TQU4gZW5hYmxlZCBmb3IgYW55IG9mIHRoaXMgbG9naWMgdG8gYWN0dWFsbHkgZG8gYW55dGhpbmcuXG5cbkhtbSwgYW0gSSBtaXNzaW5nIGFueXRoaW5nPyBJIHRoaW5rIEkndmUgY292ZXJlZCBhbGwgdGhlIGJhc2VzLiBUaGUgc3ltYm9scyBhbmQgY29uZmlncyBzZWVtIHJpZ2h0LCBhbmQgdGhlcmUgYXJlbid0IGFueSBvdGhlciBvYnZpb3VzIGRlcGVuZGVuY2llcyBvciBjb25maWd1cmF0aW9ucyBJIG5lZWQgdG8gd29ycnkgYWJvdXQuXG5cblRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLiBJIHRoaW5rIEknbSBnb29kIHRvIGdvLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzQxMywiT3V0cHV0VG9rZW5zIjoxMzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTI6MDk6MTMuNTkxMzcyMDQ3WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODM1ODE4NTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktNU0FOXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZcIixcbiAgICBcImFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIG1tL3BhZ2VfYWxsb2MuYyBieSBhZGRpbmcgdHJhY2VfbW1fcGFnZV9hbGxvYyBhbmQga21zYW5fYWxsb2NfcGFnZSB0byBhbGxvY19wYWdlc19idWxrX25vcHJvZi4gVGhpcyBlbnN1cmVzIGJ1bGstYWxsb2NhdGVkIHBhZ2VzIGhhdmUgcHJvcGVyIEtNU0FOIHNoYWRvdyBtZXRhZGF0YSBhbmQgYWxsb2NhdGlvbiB0cmFjaW5nLiBUaGUgY2hhbmdlIG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgYW5kIHdhcnJhbnRzIGZ1enppbmcsIGVzcGVjaWFsbHkgdW5kZXIgS01TQU4uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS01TQU5cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhbGxvY19wYWdlc19idWxrX25vcHJvZlwiLFxuICAgIFwiYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbW0vcGFnZV9hbGxvYy5jIGJ5IGFkZGluZyB0cmFjZV9tbV9wYWdlX2FsbG9jIGFuZCBrbXNhbl9hbGxvY19wYWdlIHRvIGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mLiBUaGlzIGVuc3VyZXMgYnVsay1hbGxvY2F0ZWQgcGFnZXMgaGF2ZSBwcm9wZXIgS01TQU4gc2hhZG93IG1ldGFkYXRhIGFuZCBhbGxvY2F0aW9uIHRyYWNpbmcuIFRoZSBjaGFuZ2UgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSBhbmQgd2FycmFudHMgZnV6emluZywgZXNwZWNpYWxseSB1bmRlciBLTVNBTi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTI6MDk6MTMuNjc0OTYzMTE2WiIsIlNlcSI6MjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNDUzMDIxODk0NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDEyOjA5OjEzLjY3NTU1NTI0NloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjM0NTI5NjIyNDQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIG1pc3NpbmcgYHRyYWNlX21tX3BhZ2VfYWxsb2NgIGFuZCBga21zYW5fYWxsb2NfcGFnZWAgY2FsbHMgdG8gYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKClgIGluIGBtbS9wYWdlX2FsbG9jLmNgIGZvciBwYWdlcyBhbGxvY2F0ZWQgZnJvbSBwZXItQ1BVIGxpc3RzLlxcblxcblRoaXMgbW9kaWZpY2F0aW9uIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGtlcm5lbCBpbmZvLWxlYWtzLCB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMsIG9yIGZhdWx0eSBidWZmZXIgYm91bmRzLiBBbnkgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIChzdWNoIGFzIGxvY2tpbmcgb3IgY29udGV4dCBpc3N1ZXMgd2hpbGUgaG9sZGluZyB0aGUgUENQIHNwaW5sb2NrIG9yIGludmFsaWQgcGFnZSBwb2ludGVycykgYXJlIGRldGVjdGFibGUgYnkgTE9DS0RFUCwgS0FTQU4sIGFuZCBzdGFuZGFyZCBkZWJ1Z2dpbmcgZmFjaWxpdGllcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAyNmFiMzBkZDM5ZmM3ODY4ZmUzMjBjOTAyNmU3Y2Q5ZTY0ZWFhMzVmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgOCAxMjowODozNCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL3BhZ2VfYWxsb2MuYyBiL21tL3BhZ2VfYWxsb2MuY1xuaW5kZXggMTJmYWM5MDg0YzQ4My4uZWFjNDE5ZWVmNjk3YSAxMDA2NDRcbi0tLSBhL21tL3BhZ2VfYWxsb2MuY1xuKysrIGIvbW0vcGFnZV9hbGxvYy5jXG5AQCAtNTI3OSw2ICs1Mjc5LDggQEAgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnBfdCBnZnAsIGludCBwcmVmZXJyZWRfbmlkLFxuIFx0XHRucl9hY2NvdW50Kys7XG4gXG4gXHRcdHByZXBfbmV3X3BhZ2UocGFnZSwgMCwgZ2ZwLCBBTExPQ19ERUZBVUxUKTtcbitcdFx0dHJhY2VfbW1fcGFnZV9hbGxvYyhwYWdlLCAwLCBnZnAsIGFjLm1pZ3JhdGV0eXBlKTtcbitcdFx0a21zYW5fYWxsb2NfcGFnZShwYWdlLCAwLCBnZnAgXHUwMDI2IH5fX0dGUF9SRUNMQUlNKTtcbiBcdFx0c2V0X3BhZ2VfcmVmY291bnRlZChwYWdlKTtcbiBcdFx0cGFnZV9hcnJheVtucl9wb3B1bGF0ZWQrK10gPSBwYWdlO1xuIFx0fVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTI6MDk6MTMuNjc1NTU2NTg2WiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ0MDEzMjY3NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRGl2aW5nIGludG8gdGhlIFBhZ2UgQWxsb2NhdGlvbiBDb2RlKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgd2l0aCBgbW0vcGFnZV9hbGxvYy5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIGZ1bmN0aW9uIGFuZCBpdHMgaW50ZXJhY3Rpb25zLiBGaXJzdCwgSSdsbCBzY3J1dGluaXplIHRoZSBkaWZmIGFuZCB0aGUgY29kZSBzdXJyb3VuZGluZyBpdDsgSSB3YW50IHRvIHNlZSBleGFjdGx5IHdoYXQncyBjaGFuZ2VkIGFuZCB0aGUgY29udGV4dC4gXG5cblRoZW4sIEknbGwgc3dpdGNoIGdlYXJzIGFuZCBsZXZlcmFnZSBteSB0b29scy4gSSdsbCBlaXRoZXIgdXNlIGBncmVwcGVyYCBvciBqdXN0IHJlYWQgdGhlIGZpbGUgZGlyZWN0bHksIHRvIHRyYWNlIHRoZSBjYWxscyBhbmQgaW50ZWdyYXRpb24gcG9pbnRzIGZvciBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgLCBlc3BlY2lhbGx5IGNvbmNlcm5pbmcgS01TQU4uIEknbSBsb29raW5nIGZvciB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCwgd2hhdCBpdCdzIGRvaW5nLCBhbmQgaG93IGl0IHBvdGVudGlhbGx5IGludGVyYWN0cyB3aXRoIG1lbW9yeSBzYWZldHkgbWVjaGFuaXNtcy5cblxuRmluYWxseSwgSSdsbCB6ZXJvIGluIG9uIHRoZSBzcGVjaWZpYyBhcmVhIGFyb3VuZCBsaW5lIDUyNzkgaW4gYG1tL3BhZ2VfYWxsb2MuY2AuIFRoaXMgaXMgbGlrZWx5IHdoZXJlIHRoZSBjb3JlIGxvZ2ljIG9yIHNvbWUga2V5IGRlY2lzaW9uIHBvaW50IHJlc2lkZXMsIGFuZCBJIG5lZWQgdG8gY2FyZWZ1bGx5IHJlYWQgdGhlIHN1cnJvdW5kaW5nIGxpbmVzIHRvIGdyYXNwIHRoZSBmbG93IGFuZCBwb3RlbnRpYWwgaXNzdWVzIG9yIG9wdGltaXphdGlvbnMuIExldCdzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDk5LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxMjowOToxOC4wNzY4ODY5OFoiLCJTZXEiOjI0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTM3ODEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vcGFnZV9hbGxvYy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUyNjAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjUyNjA6XFx0XFx0cGNwX2xpc3QgPSBcXHUwMDI2cGNwLVxcdTAwM2VsaXN0c1tvcmRlcl90b19waW5kZXgoYWMubWlncmF0ZXR5cGUsIDApXTtcXG41MjYxOlxcdFxcdHdoaWxlIChucl9wb3B1bGF0ZWQgXFx1MDAzYyBucl9wYWdlcykge1xcbjUyNjI6XFx0XFxuNTI2MzpcXHRcXHRcXHQvKiBTa2lwIGV4aXN0aW5nIHBhZ2VzICovXFxuNTI2NDpcXHRcXHRcXHRpZiAocGFnZV9hcnJheVtucl9wb3B1bGF0ZWRdKSB7XFxuNTI2NTpcXHRcXHRcXHRcXHRucl9wb3B1bGF0ZWQrKztcXG41MjY2OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjUyNjc6XFx0XFx0XFx0fVxcbjUyNjg6XFx0XFxuNTI2OTpcXHRcXHRcXHRwYWdlID0gX19ybXF1ZXVlX3BjcGxpc3Qoem9uZSwgMCwgYWMubWlncmF0ZXR5cGUsIGFsbG9jX2ZsYWdzLFxcbjUyNzA6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0cGNwLCBwY3BfbGlzdCk7XFxuNTI3MTpcXHRcXHRcXHRpZiAodW5saWtlbHkoIXBhZ2UpKSB7XFxuNTI3MjpcXHRcXHRcXHRcXHQvKiBUcnkgYW5kIGFsbG9jYXRlIGF0IGxlYXN0IG9uZSBwYWdlICovXFxuNTI3MzpcXHRcXHRcXHRcXHRpZiAoIW5yX2FjY291bnQpIHtcXG41Mjc0OlxcdFxcdFxcdFxcdFxcdHBjcF9zcGluX3VubG9jayhwY3ApO1xcbjUyNzU6XFx0XFx0XFx0XFx0XFx0Z290byBmYWlsZWQ7XFxuNTI3NjpcXHRcXHRcXHRcXHR9XFxuNTI3NzpcXHRcXHRcXHRcXHRicmVhaztcXG41Mjc4OlxcdFxcdFxcdH1cXG41Mjc5OlxcdFxcdFxcdG5yX2FjY291bnQrKztcXG41MjgwOlxcdFxcbjUyODE6XFx0XFx0XFx0cHJlcF9uZXdfcGFnZShwYWdlLCAwLCBnZnAsIEFMTE9DX0RFRkFVTFQpO1xcbjUyODI6XFx0XFx0XFx0dHJhY2VfbW1fcGFnZV9hbGxvYyhwYWdlLCAwLCBnZnAsIGFjLm1pZ3JhdGV0eXBlKTtcXG41MjgzOlxcdFxcdFxcdGttc2FuX2FsbG9jX3BhZ2UocGFnZSwgMCwgZ2ZwIFxcdTAwMjYgfl9fR0ZQX1JFQ0xBSU0pO1xcbjUyODQ6XFx0XFx0XFx0c2V0X3BhZ2VfcmVmY291bnRlZChwYWdlKTtcXG41Mjg1OlxcdFxcdFxcdHBhZ2VfYXJyYXlbbnJfcG9wdWxhdGVkKytdID0gcGFnZTtcXG41Mjg2OlxcdFxcdH1cXG41Mjg3OlxcdFxcbjUyODg6XFx0XFx0cGNwX3NwaW5fdW5sb2NrKHBjcCk7XFxuNTI4OTpcXHRcXG41MjkwOlxcdFxcdF9fY291bnRfemlkX3ZtX2V2ZW50cyhQR0FMTE9DLCB6b25lX2lkeCh6b25lKSwgbnJfYWNjb3VudCk7XFxuNTI5MTpcXHRcXHR6b25lX3N0YXRpc3RpY3Moem9uZWxpc3Rfem9uZShhYy5wcmVmZXJyZWRfem9uZXJlZiksIHpvbmUsIG5yX2FjY291bnQpO1xcbjUyOTI6XFx0XFxuNTI5MzpcXHRvdXQ6XFxuNTI5NDpcXHRcXHRyZXR1cm4gbnJfcG9wdWxhdGVkO1xcbjUyOTU6XFx0XFxuNTI5NjpcXHRmYWlsZWQ6XFxuNTI5NzpcXHRcXHRwYWdlID0gX19hbGxvY19wYWdlc19ub3Byb2YoZ2ZwLCAwLCBwcmVmZXJyZWRfbmlkLCBub2RlbWFzaywgQUxMT0NfREVGQVVMVCk7XFxuNTI5ODpcXHRcXHRpZiAocGFnZSlcXG41Mjk5OlxcdFxcdFxcdHBhZ2VfYXJyYXlbbnJfcG9wdWxhdGVkKytdID0gcGFnZTtcXG41MzAwOlxcdFxcdGdvdG8gb3V0O1xcbjUzMDE6XFx0fVxcbjUzMDI6XFx0RVhQT1JUX1NZTUJPTF9HUEwoYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YpO1xcbjUzMDM6XFx0XFxuNTMwNDpcXHQvKlxcbjUzMDU6XFx0ICogZnJlZV9wYWdlc19idWxrIC0gRnJlZSBhbiBhcnJheSBvZiBvcmRlci0wIHBhZ2VzXFxuNTMwNjpcXHQgKiBAcGFnZV9hcnJheTogQXJyYXkgb2YgcGFnZXMgdG8gZnJlZVxcbjUzMDc6XFx0ICogQG5yX3BhZ2VzOiBUaGUgbnVtYmVyIG9mIHBhZ2VzIGluIHRoZSBhcnJheVxcbjUzMDg6XFx0ICpcXG41MzA5OlxcdCAqIEZyZWUgdGhlIG9yZGVyLTAgcGFnZXMuIEFkamFjZW50IGVudHJpZXMgd2hvc2UgUEZOcyBmb3JtIGEgY29udGlndW91c1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxMjowOToxOC4wNzc0MDI5OFoiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNDM0MzIxMDgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgYGttc2FuX2FsbG9jX3BhZ2VgIFVzYWdlKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoZSBrZXJuZWwgbWVtb3J5IGFsbG9jYXRvci4gSSBuZWVkIHRvIGdldCBhIGZpcm0gZ3Jhc3Agb24gdGhlIHNjb3BlIGFuZCBpbXBhY3Qgb2YgYGttc2FuX2FsbG9jX3BhZ2VgLiBNeSBwcmltYXJ5IGZvY3VzIGlzIHBpbnBvaW50aW5nIGV2ZXJ5IGluc3RhbmNlIHdoZXJlIGBrbXNhbl9hbGxvY19wYWdlYCBpcyBpbnZva2VkIHdpdGhpbiBgbW0vcGFnZV9hbGxvYy5jYCBhbmQsIGNydWNpYWxseSwgYW55IGNhbGxzIGZyb20gb3RoZXIgbW9kdWxlcyB0aGF0IGludGVyYWN0IHdpdGggdGhlIHBhZ2UgYWxsb2NhdG9yLiBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsIGdyYXBoIGFyb3VuZCB0aGlzIGZ1bmN0aW9uIGlzIHBhcmFtb3VudCB0byBjb3JyZWN0bHkgdW5kZXJzdGFuZGluZyBpdC4gSSdsbCBuZWVkIHRvIHVzZSB0b29scyB0byBhY2N1cmF0ZWx5IGFuZCBlZmZpY2llbnRseSBtYXAgdGhlIGNvZGUgYmFzZS4gSSdsbCBuZWVkIHRvIHF1aWNrbHkgdW5kZXJzdGFuZCBpZiBpdCdzIG9ubHkgY2FsbGVkIGRpcmVjdGx5IGZyb20gb3RoZXIgZnVuY3Rpb25zIHdpdGhpbiB0aGUgc2FtZSBzb3VyY2UsIG9yIGlmIGl0IGNyb3NzZXMgc291cmNlIGJvdW5kYXJpZXMuIEknbGwgZm9jdXMgb24gaG93IHRoZSByZXN1bHQgaXMgYmVpbmcgdXNlZCBhbmQgd2hhdCBpbXBsaWNhdGlvbnMgZXhpc3QgZHVlIHRvIGhvdyB0aGUgZnVuY3Rpb24ncyBiZWhhdmlvciBjb3VsZCBkaWZmZXIgZnJvbSBhIG5vcm1hbCBwYWdlIGFsbG9jYXRpb24sIGFuZCBob3cgdGhpcyByZWxhdGVzIHRvIEtNU0FOJ3MgaW5zdHJ1bWVudGF0aW9uLiBJIHN1c3BlY3QgdGhpcyB3aWxsIGJlIGludGVyZXN0aW5nLCBhbmQgcG9zc2libHkgcmV2ZWFsIHN1YnRsZSBpbnRlcmFjdGlvbnMgcmVsYXRlZCB0byB0aGUgbWVtb3J5IHNhbml0aXphdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzIzMCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTI6MDk6MjAuNTExNzI3NjU0WiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDc4NzgxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrbXNhbl9hbGxvY19wYWdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9rbXNhbi9zaGFkb3cuYz0xNjk9RVhQT1JUX1NZTUJPTChrbXNhbl9jb3B5X3BhZ2VfbWV0YSk7XFxubW0va21zYW4vc2hhZG93LmMtMTcwLVxcbm1tL2ttc2FuL3NoYWRvdy5jOjE3MTp2b2lkIGttc2FuX2FsbG9jX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlciwgZ2ZwX3QgZmxhZ3MpXFxubW0va21zYW4vc2hhZG93LmMtMTcyLXtcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz01MTYwPXVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoZ2ZwX3QgZ2ZwLCBpbnQgcHJlZmVycmVkX25pZCxcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy01MjgyLVxcdFxcdHRyYWNlX21tX3BhZ2VfYWxsb2MocGFnZSwgMCwgZ2ZwLCBhYy5taWdyYXRldHlwZSk7XFxubW0vcGFnZV9hbGxvYy5jOjUyODM6XFx0XFx0a21zYW5fYWxsb2NfcGFnZShwYWdlLCAwLCBnZnAgXFx1MDAyNiB+X19HRlBfUkVDTEFJTSk7XFxubW0vcGFnZV9hbGxvYy5jLTUyODQtXFx0XFx0c2V0X3BhZ2VfcmVmY291bnRlZChwYWdlKTtcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz01MzQ1PXN0YXRpYyBpbmxpbmUgYm9vbCBhbGxvY19ub2xvY2tfYWxsb3dlZCh2b2lkKVxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTUzNzAtICpcXG5tbS9wYWdlX2FsbG9jLmM6NTM3MTogKiBTcGVjaWZ5IF9fR0ZQX1pFUk8gdG8gbWFrZSBzdXJlIHRoYXQgY2FsbCB0byBrbXNhbl9hbGxvY19wYWdlKCkgYmVsb3dcXG5tbS9wYWdlX2FsbG9jLmMtNTM3Mi0gKiBpcyBzYWZlIGluIGFueSBjb250ZXh0LiBBbHNvIHplcm9pbmcgdGhlIHBhZ2UgaXMgbWFuZGF0b3J5IGZvclxcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTUzODU9c3RydWN0IHBhZ2UgKl9fYWxsb2NfZnJvemVuX3BhZ2VzX25vcHJvZihnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBvcmRlcixcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy01NDYxLVxcdHRyYWNlX21tX3BhZ2VfYWxsb2MocGFnZSwgb3JkZXIsIGFsbG9jX2dmcCwgYWMubWlncmF0ZXR5cGUpO1xcbm1tL3BhZ2VfYWxsb2MuYzo1NDYyOlxcdGttc2FuX2FsbG9jX3BhZ2UocGFnZSwgb3JkZXIsIGFsbG9jX2dmcCk7XFxubW0vcGFnZV9hbGxvYy5jLTU0NjMtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDEyOjA5OjIwLjU2NjUzNDAwM1oiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTUyNTg5MjE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgdGhlIFJlY2VudCBNZW1vcnkgQWxsb2NhdGlvbiBCZWhhdmlvcioqXG5cbk9rYXksIGxldCdzIGRpdmUgaW4uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB3aGF0IGV4YWN0bHkgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCB3YXMgZG9pbmcgcHJpb3IgdG8gdGhlIGNoYW5nZSBJJ20gbG9va2luZyBhdC4gVGhlIGJlc3Qgd2F5IHRvIHVuZGVyc3RhbmQgaXRzIHByZS1jaGFuZ2Ugb3BlcmF0aW9uIGlzIGJ5IGV4YW1pbmluZyBhbnkgYXNzb2NpYXRlZCBcImhvb2tcIiBmdW5jdGlvbnMgdGhhdCB3ZXJlIGV4ZWN1dGVkIGFmdGVyIG1lbW9yeSB3YXMgYWxsb2NhdGVkLiBJJ2xsIG5lZWQgdG8gY2hlY2sgZm9yIGEgYHBvc3RfYWxsb2NfaG9va2Agb3Igc29tZXRoaW5nIHNpbWlsYXIg4oCTIEknbGwgc3RhcnQgbG9va2luZyBpbiBgbW0vcGFnZV9hbGxvYy5jYCwgYXMgdGhhdCdzIHRoZSBsaWtlbHkgbG9jYXRpb24gZm9yIG1lbW9yeSBhbGxvY2F0aW9uIHJvdXRpbmVzLiBMZXQgbWUgc3BlY2lmaWNhbGx5IHNlYXJjaCBmb3IgdGhlIHRlcm0gYHBvc3RfYWxsb2NfaG9va2Agd2l0aGluIGBtbS9wYWdlX2FsbG9jLmNgIHRvIHNlZSBpZiBpdCBleGlzdHMgYW5kLCBpZiBzbywgd2hhdCBpdHMgY29udGV4dCBpcy4gSSdtIGhvcGluZyB0byBxdWlja2x5IGdyYXNwIHRoZSBpbXBsaWNhdGlvbnMgb2YgYW55IGFsdGVyYXRpb25zIHRvIHRoYXQgcGFydCBvZiB0aGUgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzk5MywiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDEyOjA5OjIyLjcxOTEyNjMwMVoiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTM0MDA2ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicG9zdF9hbGxvY19ob29rXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9jb21wYWN0aW9uLmM9ODQ9c3RhdGljIHN0cnVjdCBwYWdlICptYXJrX2FsbG9jYXRlZF9ub3Byb2Yoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlciwgZ2ZwX3QgZ2ZwX2ZsYWdzKVxcbm1tL2NvbXBhY3Rpb24uYy04NS17XFxubW0vY29tcGFjdGlvbi5jOjg2OlxcdHBvc3RfYWxsb2NfaG9vayhwYWdlLCBvcmRlciwgX19HRlBfTU9WQUJMRSwgQUxMT0NfREVGQVVMVCk7XFxubW0vY29tcGFjdGlvbi5jLTg3LVxcdHNldF9wYWdlX3JlZmNvdW50ZWQocGFnZSk7XFxuLS1cXG5tbS9jb21wYWN0aW9uLmM9MTg0NT1zdGF0aWMgc3RydWN0IGZvbGlvICpjb21wYWN0aW9uX2FsbG9jX25vcHJvZihzdHJ1Y3QgZm9saW8gKnNyYywgdW5zaWduZWQgbG9uZyBkYXRhKVxcbi0tXFxubW0vY29tcGFjdGlvbi5jLTE4ODItXFxubW0vY29tcGFjdGlvbi5jOjE4ODM6XFx0cG9zdF9hbGxvY19ob29rKFxcdTAwMjZkc3QtXFx1MDAzZXBhZ2UsIG9yZGVyLCBfX0dGUF9NT1ZBQkxFLCBBTExPQ19ERUZBVUxUKTtcXG5tbS9jb21wYWN0aW9uLmMtMTg4NC1cXHRzZXRfcGFnZV9yZWZjb3VudGVkKFxcdTAwMjZkc3QtXFx1MDAzZXBhZ2UpO1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTI3Nz1zdGF0aWMgdm9pZCBtZW1jZ19yZXBhcmVudF9vYmpjZ3Moc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTMxMi0gKiBBIGxvdCBvZiB0aGUgY2FsbHMgdG8gdGhlIGNhY2hlIGFsbG9jYXRpb24gZnVuY3Rpb25zIGFyZSBleHBlY3RlZCB0byBiZVxcbm1tL21lbWNvbnRyb2wuYzozMTM6ICogaW5saW5lZCBieSB0aGUgY29tcGlsZXIuIFNpbmNlIHRoZSBjYWxscyB0byBtZW1jZ19zbGFiX3Bvc3RfYWxsb2NfaG9vaygpIGFyZVxcbm1tL21lbWNvbnRyb2wuYy0zMTQtICogY29uZGl0aW9uYWwgdG8gdGhpcyBzdGF0aWMgYnJhbmNoLCB3ZSdsbCBoYXZlIHRvIGFsbG93IG1vZHVsZXMgdGhhdCBkb2VzXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MzU4OT1zdGF0aWMgaW5saW5lIHNpemVfdCBvYmpfZnVsbF9zaXplKHN0cnVjdCBrbWVtX2NhY2hlICpzKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTM1OTctXFxubW0vbWVtY29udHJvbC5jOjM1OTg6Ym9vbCBfX21lbWNnX3NsYWJfcG9zdF9hbGxvY19ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3QgbGlzdF9scnUgKmxydSxcXG5tbS9tZW1jb250cm9sLmMtMzU5OS1cXHRcXHRcXHRcXHQgIGdmcF90IGZsYWdzLCB1bnNpZ25lZCBpbnQgc2xhYl9hbGxvY19mbGFncyxcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz0xODExPXN0YXRpYyBpbmxpbmUgYm9vbCBzaG91bGRfc2tpcF9pbml0KGdmcF90IGZsYWdzKVxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTE4MjAtXFxubW0vcGFnZV9hbGxvYy5jOjE4MjE6aW5saW5lIHZvaWQgcG9zdF9hbGxvY19ob29rKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIsXFxubW0vcGFnZV9hbGxvYy5jLTE4MjItXFx0XFx0XFx0XFx0Z2ZwX3QgZ2ZwX2ZsYWdzLCB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MpXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9MTg3Nj1zdGF0aWMgdm9pZCBwcmVwX25ld19wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIsIGdmcF90IGdmcF9mbGFncyxcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy0xODc4LXtcXG5tbS9wYWdlX2FsbG9jLmM6MTg3OTpcXHRwb3N0X2FsbG9jX2hvb2socGFnZSwgb3JkZXIsIGdmcF9mbGFncywgYWxsb2NfZmxhZ3MpO1xcbm1tL3BhZ2VfYWxsb2MuYy0xODgwLVxcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTcxOTc9c3RhdGljIHZvaWQgc3BsaXRfZnJlZV9mcm96ZW5fcGFnZXMoc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwgZ2ZwX3QgZ2ZwX21hc2spXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNzIwNy1cXG5tbS9wYWdlX2FsbG9jLmM6NzIwODpcXHRcXHRcXHRwb3N0X2FsbG9jX2hvb2socGFnZSwgb3JkZXIsIGdmcF9tYXNrLCBBTExPQ19ERUZBVUxUKTtcXG5tbS9wYWdlX2FsbG9jLmMtNzIwOS1cXHRcXHRcXHRpZiAoIW9yZGVyKVxcbi0tXFxubW0vcGFnZV9hbGxvYy5oPTIyMz1leHRlcm4gdm9pZCBfX2ZyZWVfcGFnZXNfY29yZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyLFxcbi0tXFxubW0vcGFnZV9hbGxvYy5oLTIyNS1cXG5tbS9wYWdlX2FsbG9jLmg6MjI2OnZvaWQgcG9zdF9hbGxvY19ob29rKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIsIGdmcF90IGdmcF9mbGFncyxcXG5tbS9wYWdlX2FsbG9jLmgtMjI3LVxcdFxcdCAgICAgdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzKTtcXG4tLVxcbm1tL3BlcmNwdS5jPTE2MTY9c3RhdGljIGJvb2wgcGNwdV9tZW1jZ19wcmVfYWxsb2NfaG9vayhzaXplX3Qgc2l6ZSwgZ2ZwX3QgZ2ZwLFxcbi0tXFxubW0vcGVyY3B1LmMtMTYzNC1cXG5tbS9wZXJjcHUuYzoxNjM1OnN0YXRpYyB2b2lkIHBjcHVfbWVtY2dfcG9zdF9hbGxvY19ob29rKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZyxcXG5tbS9wZXJjcHUuYy0xNjM2LVxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgcGNwdV9jaHVuayAqY2h1bmssIGludCBvZmYsXFxuLS1cXG5tbS9wZXJjcHUuYz0xNjc5PXBjcHVfbWVtY2dfcHJlX2FsbG9jX2hvb2soc2l6ZV90IHNpemUsIGdmcF90IGdmcCwgc3RydWN0IG9ial9jZ3JvdXAgKipvYmpjZ3ApXFxuLS1cXG5tbS9wZXJjcHUuYy0xNjgzLVxcbm1tL3BlcmNwdS5jOjE2ODQ6c3RhdGljIHZvaWQgcGNwdV9tZW1jZ19wb3N0X2FsbG9jX2hvb2soc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLFxcbm1tL3BlcmNwdS5jLTE2ODUtXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBwY3B1X2NodW5rICpjaHVuaywgaW50IG9mZixcXG4tLVxcbm1tL3BlcmNwdS5jPTE3MzU9dm9pZCBfX3BlcmNwdSAqcGNwdV9hbGxvY19ub3Byb2Yoc2l6ZV90IHNpemUsIHNpemVfdCBhbGlnbiwgYm9vbCByZXNlcnZlZCxcXG4tLVxcbm1tL3BlcmNwdS5jLTE3OTYtXFx0XFx0fSBlbHNlIGlmIChtdXRleF9sb2NrX2tpbGxhYmxlKFxcdTAwMjZwY3B1X2FsbG9jX211dGV4KSkge1xcbm1tL3BlcmNwdS5jOjE3OTc6XFx0XFx0XFx0cGNwdV9tZW1jZ19wb3N0X2FsbG9jX2hvb2sob2JqY2csIE5VTEwsIDAsIHNpemUpO1xcbm1tL3BlcmNwdS5jLTE3OTgtXFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuLS1cXG5tbS9wZXJjcHUuYy0xOTA5LVxcbm1tL3BlcmNwdS5jOjE5MTA6XFx0cGNwdV9tZW1jZ19wb3N0X2FsbG9jX2hvb2sob2JqY2csIGNodW5rLCBvZmYsIHNpemUpO1xcbm1tL3BlcmNwdS5jLTE5MTEtXFxuLS1cXG5tbS9wZXJjcHUuYy0xOTQxLVxcbm1tL3BlcmNwdS5jOjE5NDI6XFx0cGNwdV9tZW1jZ19wb3N0X2FsbG9jX2hvb2sob2JqY2csIE5VTEwsIDAsIHNpemUpO1xcbm1tL3BlcmNwdS5jLTE5NDMtXFxuLS1cXG5tbS9zbGFiLmg9ODU0PXN0YXRpYyBpbmxpbmUgZW51bSBub2RlX3N0YXRfaXRlbSBjYWNoZV92bXN0YXRfaWR4KHN0cnVjdCBrbWVtX2NhY2hlICpzKVxcbi0tXFxubW0vc2xhYi5oLTg2MC0jaWZkZWYgQ09ORklHX01FTUNHXFxubW0vc2xhYi5oOjg2MTpib29sIF9fbWVtY2dfc2xhYl9wb3N0X2FsbG9jX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBsaXN0X2xydSAqbHJ1LFxcbm1tL3NsYWIuaC04NjItXFx0XFx0XFx0XFx0ICBnZnBfdCBmbGFncywgdW5zaWduZWQgaW50IHNsYWJfYWxsb2NfZmxhZ3MsXFxuLS1cXG5tbS9zbHViLmM9MjUwNj1zdGF0aWMgX19mYXN0cGF0aF9pbmxpbmVcXG5tbS9zbHViLmM6MjUwNzpib29sIG1lbWNnX3NsYWJfcG9zdF9hbGxvY19ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBmbGFncyxcXG5tbS9zbHViLmMtMjUwOC1cXHRcXHRcXHRcXHRzaXplX3Qgc2l6ZSwgdm9pZCAqKnAsXFxuLS1cXG5tbS9zbHViLmMtMjUxNi1cXG5tbS9zbHViLmM6MjUxNzpcXHRpZiAobGlrZWx5KF9fbWVtY2dfc2xhYl9wb3N0X2FsbG9jX2hvb2socywgYWMtXFx1MDAzZWxydSwgZmxhZ3MsXFxubW0vc2x1Yi5jLTI1MTgtXFx0XFx0XFx0XFx0XFx0XFx0YWMtXFx1MDAzZWFsbG9jX2ZsYWdzLCBzaXplLCBwKSkpXFxuLS1cXG5tbS9zbHViLmM9MjU1Mz1ib29sIG1lbWNnX3NsYWJfcG9zdF9jaGFyZ2Uodm9pZCAqcCwgZ2ZwX3QgZmxhZ3MpXFxuLS1cXG5tbS9zbHViLmMtMjYwNi1cXG5tbS9zbHViLmM6MjYwNzpcXHRyZXR1cm4gX19tZW1jZ19zbGFiX3Bvc3RfYWxsb2NfaG9vayhzLCBOVUxMLCBmbGFncywgU0xBQl9BTExPQ19ERUZBVUxULFxcbm1tL3NsdWIuYy0yNjA4LVxcdFxcdFxcdFxcdFxcdCAgICAxLCBcXHUwMDI2cCk7XFxuLS1cXG5tbS9zbHViLmMtMjYxMS0jZWxzZSAvKiBDT05GSUdfTUVNQ0cgKi9cXG5tbS9zbHViLmM6MjYxMjpzdGF0aWMgaW5saW5lIGJvb2wgbWVtY2dfc2xhYl9wb3N0X2FsbG9jX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsXFxubW0vc2x1Yi5jLTI2MTMtXFx0XFx0XFx0XFx0XFx0ICAgICAgZ2ZwX3QgZmxhZ3MsXFxuLS1cXG5tbS9zbHViLmM9MjYzND1zdHJ1Y3QgcmN1X2RlbGF5ZWRfZnJlZSB7XFxuLS1cXG5tbS9zbHViLmMtMjY1My0gKiAtIGthc2FuX3NsYWJfYWxsb2MoKVxcbm1tL3NsdWIuYzoyNjU0OiAqIC0gbWVtY2dfc2xhYl9wb3N0X2FsbG9jX2hvb2soKVxcbm1tL3NsdWIuYy0yNjU1LSAqIC0gYWxsb2NfdGFnZ2luZ19zbGFiX2FsbG9jX2hvb2soKVxcbi0tXFxubW0vc2x1Yi5jPTQ2NDQ9c3RhdGljIF9fZmFzdHBhdGhfaW5saW5lXFxubW0vc2x1Yi5jOjQ2NDU6Ym9vbCBzbGFiX3Bvc3RfYWxsb2NfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZmxhZ3MsIHNpemVfdCBzaXplLFxcbm1tL3NsdWIuYy00NjQ2LVxcdFxcdFxcdCAgdm9pZCAqKnAsIGNvbnN0IHN0cnVjdCBzbGFiX2FsbG9jX2NvbnRleHQgKmFjKVxcbi0tXFxubW0vc2x1Yi5jLTQ3MDEtXFxubW0vc2x1Yi5jOjQ3MDI6XFx0cmV0dXJuIG1lbWNnX3NsYWJfcG9zdF9hbGxvY19ob29rKHMsIGZsYWdzLCBzaXplLCBwLCBhYyk7XFxubW0vc2x1Yi5jLTQ3MDMtfVxcbi0tXFxubW0vc2x1Yi5jPTQ5Njk9c3RhdGljIF9fZmFzdHBhdGhfaW5saW5lIHZvaWQgKnNsYWJfYWxsb2Nfbm9kZShzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcXG4tLVxcbm1tL3NsdWIuYy00OTkyLVxcdC8qXFxubW0vc2x1Yi5jOjQ5OTM6XFx0ICogSW4gY2FzZSB0aGlzIGZhaWxzIGR1ZSB0byBtZW1jZ19zbGFiX3Bvc3RfYWxsb2NfaG9vaygpLFxcbm1tL3NsdWIuYy00OTk0LVxcdCAqIG9iamVjdCBpcyBzZXQgdG8gTlVMTFxcbm1tL3NsdWIuYy00OTk1LVxcdCAqL1xcbm1tL3NsdWIuYzo0OTk2OlxcdHNsYWJfcG9zdF9hbGxvY19ob29rKHMsIGdmcGZsYWdzLCAxLCBcXHUwMDI2b2JqZWN0LCBhYyk7XFxubW0vc2x1Yi5jLTQ5OTctXFxuLS1cXG5tbS9zbHViLmM9NTMwNz1rbWVtX2NhY2hlX2FsbG9jX2Zyb21fc2hlYWZfbm9wcm9mKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBnZnAsXFxuLS1cXG5tbS9zbHViLmMtNTMyNC1cXHQvKiBhZGQgX19HRlBfTk9GQUlMIHRvIGZvcmNlIHN1Y2Nlc3NmdWwgbWVtY2cgY2hhcmdpbmcgKi9cXG5tbS9zbHViLmM6NTMyNTpcXHRzbGFiX3Bvc3RfYWxsb2NfaG9vayhzLCBnZnAgfCBfX0dGUF9OT0ZBSUwsIDEsIFxcdTAwMjZyZXQsIFxcdTAwMjZhYyk7XFxubW0vc2x1Yi5jLTUzMjYtb3V0Olxcbi0tXFxubW0vc2x1Yi5jPTU0NDQ9c3RhdGljIHZvaWQgKl9fa21hbGxvY19ub2xvY2tfbm9wcm9mKERFQ0xfVE9LRU5fUEFSQU1TKHNpemUsIHRva2VuKSwgZ2ZwX3QgZ2ZwX2ZsYWdzLFxcbi0tXFxubW0vc2x1Yi5jLTU0OTEtXFx0ICoga2ZlbmNlX2FsbG9jLiBIZW5jZSBjYWxsIF9fX3NsYWJfYWxsb2MoKSAoYXQgbW9zdCB0d2ljZSlcXG5tbS9zbHViLmM6NTQ5MjpcXHQgKiBhbmQgc2xhYl9wb3N0X2FsbG9jX2hvb2soKSBkaXJlY3RseS5cXG5tbS9zbHViLmMtNTQ5My1cXHQgKi9cXG4tLVxcbm1tL3NsdWIuYy01NTE2LVxcdG1heWJlX3dpcGVfb2JqX2ZyZWVwdHIocywgcmV0KTtcXG5tbS9zbHViLmM6NTUxNzpcXHRzbGFiX3Bvc3RfYWxsb2NfaG9vayhzLCBnZnBfZmxhZ3MsIDEsIFxcdTAwMjZyZXQsIGFjKTtcXG5tbS9zbHViLmMtNTUxOC1cXG4tLVxcbm1tL3NsdWIuYz03NDc2PWJvb2wga21lbV9jYWNoZV9hbGxvY19idWxrX25vcHJvZihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZmxhZ3MsXFxuLS1cXG5tbS9zbHViLmMtNzUzNC1cXHQvKiBtZW1jZyBhbmQga21lbV9jYWNoZSBkZWJ1ZyBzdXBwb3J0IGFuZCBtZW1vcnkgaW5pdGlhbGl6YXRpb24gKi9cXG5tbS9zbHViLmM6NzUzNTpcXHRyZXR1cm4gbGlrZWx5KHNsYWJfcG9zdF9hbGxvY19ob29rKHMsIGZsYWdzLCBzaXplLCBwLCBcXHUwMDI2YWMpKTtcXG5tbS9zbHViLmMtNzUzNi19XFxuLS1cXG5tbS92bWFsbG9jLmM9NDAzMz12b2lkICpfX3ZtYWxsb2Nfbm9kZV9yYW5nZV9ub3Byb2YodW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIGFsaWduLFxcbi0tXFxubW0vdm1hbGxvYy5jLTQxMTgtXFx0ICogVGhlIGNvbmRpdGlvbiBmb3Igc2V0dGluZyBLQVNBTl9WTUFMTE9DX0lOSVQgc2hvdWxkIGNvbXBsZW1lbnQgdGhlXFxubW0vdm1hbGxvYy5jOjQxMTk6XFx0ICogb25lIGluIHBvc3RfYWxsb2NfaG9vaygpIHdpdGggcmVnYXJkcyB0byB0aGUgX19HRlBfU0tJUF9aRVJPIGNoZWNrXFxubW0vdm1hbGxvYy5jLTQxMjAtXFx0ICogdG8gbWFrZSBzdXJlIHRoYXQgbWVtb3J5IGlzIGluaXRpYWxpemVkIHVuZGVyIHRoZSBzYW1lIGNvbmRpdGlvbnMuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDEyOjA5OjIyLjc3MjUzMjY2MVoiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTIwMTE0NjE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBmaXJzdC1wZXJzb24gc3VtbWFyeSwgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkRpdmluZyBpbnRvIGBwb3N0X2FsbG9jX2hvb2tgKipcblxuT2theSwgdGltZSB0byBkaXNzZWN0IGBwb3N0X2FsbG9jX2hvb2tgIGluIGBtbS9wYWdlX2FsbG9jLmNgLiBUaGlzIGhvb2sgaXMgYSBjcml0aWNhbCBwaWVjZSwgYW5kIEkgd2FudCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaXRzIHJvbGUgaW4gdGhlIG92ZXJhbGwgbWVtb3J5IGFsbG9jYXRpb24gcHJvY2Vzcy4gSSdtIGdvaW5nIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gd2hlcmUgaXQncyBjYWxsZWQsIHVuZGVyIHdoYXQgY29uZGl0aW9ucywgYW5kIHdoYXQgb3BlcmF0aW9ucyBpdCBwZXJmb3Jtcy4gSSdtIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgTlVNQSBhcmNoaXRlY3R1cmUgYW5kIGFueSBwb3RlbnRpYWwgbWVtb3J5IGhvdC1wbHVnL3VucGx1ZyBjb25zaWRlcmF0aW9ucy4gSSdsbCBiZSBsb29raW5nIGZvciBudWFuY2VzIHRoYXQgaW1wYWN0IHBlcmZvcm1hbmNlIG9yIGludHJvZHVjZSBhbnkgc3VidGxlIG1lbW9yeSBsZWFrcy4gTGV0J3Mgc2VlIGlmIHRoZSBjb2RlIGxpdmVzIHVwIHRvIG15IGV4cGVjdGF0aW9ucyBvciBwcmVzZW50cyBhbnkgc3VycHJpc2VzISBJJ2xsIGJlIGNvbXBhcmluZyBpdCB0byBzaW1pbGFyIGhvb2tzIGluIG90aGVyIG1lbW9yeSBtYW5hZ2VtZW50IHN5c3RlbXMgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgaW50ZXJlc3RpbmcgZGVzaWduIHRyYWRlIG9mZnMgYmVpbmcgbWFkZSBpbiB0aGUgTGludXgga2VybmVsLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MTYyLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTI6MDk6MjQuODkyNjUwMzc5WiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NDQ4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9wYWdlX2FsbG9jLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTgyMCxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTgyMDpcXHRcXG4xODIxOlxcdGlubGluZSB2b2lkIHBvc3RfYWxsb2NfaG9vayhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyLFxcbjE4MjI6XFx0XFx0XFx0XFx0XFx0Z2ZwX3QgZ2ZwX2ZsYWdzLCB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MpXFxuMTgyMzpcXHR7XFxuMTgyNDpcXHRcXHRjb25zdCBib29sIHplcm9fdGFncyA9IGdmcF9mbGFncyBcXHUwMDI2IF9fR0ZQX1pFUk9UQUdTO1xcbjE4MjU6XFx0XFx0Ym9vbCBpbml0ID0gIXdhbnRfaW5pdF9vbl9mcmVlKCkgXFx1MDAyNlxcdTAwMjYgd2FudF9pbml0X29uX2FsbG9jKGdmcF9mbGFncykgXFx1MDAyNlxcdTAwMjZcXG4xODI2OlxcdFxcdFxcdFxcdCFzaG91bGRfc2tpcF9pbml0KGdmcF9mbGFncyk7XFxuMTgyNzpcXHRcXHRpbnQgaTtcXG4xODI4OlxcdFxcbjE4Mjk6XFx0XFx0c2V0X3BhZ2VfcHJpdmF0ZShwYWdlLCAwKTtcXG4xODMwOlxcdFxcbjE4MzE6XFx0XFx0YXJjaF9hbGxvY19wYWdlKHBhZ2UsIG9yZGVyKTtcXG4xODMyOlxcdFxcdGRlYnVnX3BhZ2VhbGxvY19tYXBfcGFnZXMocGFnZSwgMSBcXHUwMDNjXFx1MDAzYyBvcmRlcik7XFxuMTgzMzpcXHRcXG4xODM0OlxcdFxcdC8qXFxuMTgzNTpcXHRcXHQgKiBQYWdlIHVucG9pc29uaW5nIG11c3QgaGFwcGVuIGJlZm9yZSBtZW1vcnkgaW5pdGlhbGl6YXRpb24uXFxuMTgzNjpcXHRcXHQgKiBPdGhlcndpc2UsIHRoZSBwb2lzb24gcGF0dGVybiB3aWxsIGJlIG92ZXJ3cml0dGVuIGZvciBfX0dGUF9aRVJPXFxuMTgzNzpcXHRcXHQgKiBhbGxvY2F0aW9ucyBhbmQgdGhlIHBhZ2UgdW5wb2lzb25pbmcgY29kZSB3aWxsIGNvbXBsYWluLlxcbjE4Mzg6XFx0XFx0ICovXFxuMTgzOTpcXHRcXHRrZXJuZWxfdW5wb2lzb25fcGFnZXMocGFnZSwgMSBcXHUwMDNjXFx1MDAzYyBvcmRlcik7XFxuMTg0MDpcXHRcXG4xODQxOlxcdFxcdC8qXFxuMTg0MjpcXHRcXHQgKiBBcyBtZW1vcnkgaW5pdGlhbGl6YXRpb24gbWlnaHQgYmUgaW50ZWdyYXRlZCBpbnRvIEtBU0FOLFxcbjE4NDM6XFx0XFx0ICogS0FTQU4gdW5wb2lzb25pbmcgYW5kIG1lbW9yeSBpbml0aWFsaXphdGlvbiBjb2RlIG11c3QgYmVcXG4xODQ0OlxcdFxcdCAqIGtlcHQgdG9nZXRoZXIgdG8gYXZvaWQgZGlzY3JlcGFuY2llcyBpbiBiZWhhdmlvci5cXG4xODQ1OlxcdFxcdCAqL1xcbjE4NDY6XFx0XFxuMTg0NzpcXHRcXHQvKlxcbjE4NDg6XFx0XFx0ICogQ2xlYXJpbmcgdGFncyBjYW4gZWZmaWNpZW50bHkgY2xlYXIgdGhlIG1lbW9yeSBmb3IgdXMgYXMgd2VsbCwgaWZcXG4xODQ5OlxcdFxcdCAqIHJlcXVpcmVkLlxcbjE4NTA6XFx0XFx0ICovXFxuMTg1MTpcXHRcXHRpZiAoemVyb190YWdzKVxcbjE4NTI6XFx0XFx0XFx0aW5pdCA9IHRhZ19jbGVhcl9oaWdocGFnZXMocGFnZSwgMSBcXHUwMDNjXFx1MDAzYyBvcmRlciwgLyogY2xlYXJfcGFnZXM9ICovaW5pdCk7XFxuMTg1MzpcXHRcXG4xODU0OlxcdFxcdGlmICghc2hvdWxkX3NraXBfa2FzYW5fdW5wb2lzb24oZ2ZwX2ZsYWdzKSBcXHUwMDI2XFx1MDAyNlxcbjE4NTU6XFx0XFx0ICAgIGthc2FuX3VucG9pc29uX3BhZ2VzKHBhZ2UsIG9yZGVyLCBpbml0KSkge1xcbjE4NTY6XFx0XFx0XFx0LyogVGFrZSBub3RlIHRoYXQgbWVtb3J5IHdhcyBpbml0aWFsaXplZCBieSBLQVNBTi4gKi9cXG4xODU3OlxcdFxcdFxcdGlmIChrYXNhbl9oYXNfaW50ZWdyYXRlZF9pbml0KCkpXFxuMTg1ODpcXHRcXHRcXHRcXHRpbml0ID0gZmFsc2U7XFxuMTg1OTpcXHRcXHR9IGVsc2Uge1xcbjE4NjA6XFx0XFx0XFx0LypcXG4xODYxOlxcdFxcdFxcdCAqIElmIG1lbW9yeSB0YWdzIGhhdmUgbm90IGJlZW4gc2V0IGJ5IEtBU0FOLCByZXNldCB0aGUgcGFnZVxcbjE4NjI6XFx0XFx0XFx0ICogdGFncyB0byBlbnN1cmUgcGFnZV9hZGRyZXNzKCkgZGVyZWZlcmVuY2luZyBkb2VzIG5vdCBmYXVsdC5cXG4xODYzOlxcdFxcdFxcdCAqL1xcbjE4NjQ6XFx0XFx0XFx0Zm9yIChpID0gMDsgaSAhPSAxIFxcdTAwM2NcXHUwMDNjIG9yZGVyOyArK2kpXFxuMTg2NTpcXHRcXHRcXHRcXHRwYWdlX2thc2FuX3RhZ19yZXNldChwYWdlICsgaSk7XFxuMTg2NjpcXHRcXHR9XFxuMTg2NzpcXHRcXHQvKiBJZiBtZW1vcnkgaXMgc3RpbGwgbm90IGluaXRpYWxpemVkLCBpbml0aWFsaXplIGl0IG5vdy4gKi9cXG4xODY4OlxcdFxcdGlmIChpbml0KVxcbjE4Njk6XFx0XFx0XFx0Y2xlYXJfaGlnaHBhZ2VzX2thc2FuX3RhZ2dlZChwYWdlLCAxIFxcdTAwM2NcXHUwMDNjIG9yZGVyKTtcXG4xODcwOlxcdFxcbjE4NzE6XFx0XFx0c2V0X3BhZ2Vfb3duZXIocGFnZSwgb3JkZXIsIGdmcF9mbGFncyk7XFxuMTg3MjpcXHRcXHRwYWdlX3RhYmxlX2NoZWNrX2FsbG9jKHBhZ2UsIG9yZGVyKTtcXG4xODczOlxcdFxcdHBnYWxsb2NfdGFnX2FkZChwYWdlLCBjdXJyZW50LCAxIFxcdTAwM2NcXHUwMDNjIG9yZGVyLCBhbGxvY19mbGFncyk7XFxuMTg3NDpcXHR9XFxuMTg3NTpcXHRcXG4xODc2OlxcdHN0YXRpYyB2b2lkIHByZXBfbmV3X3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlciwgZ2ZwX3QgZ2ZwX2ZsYWdzLFxcbjE4Nzc6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzKVxcbjE4Nzg6XFx0e1xcbjE4Nzk6XFx0XFx0cG9zdF9hbGxvY19ob29rKHBhZ2UsIG9yZGVyLCBnZnBfZmxhZ3MsIGFsbG9jX2ZsYWdzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTI6MDk6MjQuODkzMTE3Nzc5WiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI2ODM0Nzc3MDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgY29kZSBzbmlwcGV0OlxuXG4qKkRpdmluZyBpbnRvIGBfX2FsbG9jX2Zyb3plbl9wYWdlc19ub3Byb2ZgKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYF9fYWxsb2NfZnJvemVuX3BhZ2VzX25vcHJvZmAgbm93LiBJdCBzZWVtcyBteSBmb2N1cyBzaG91bGQgYmUgb24gdGhlIHNlY3Rpb24gYXJvdW5kIGxpbmVzIDU0NTAtNTQ3MC4gSSBjYW4gc2VlIGl0J3MgY2FsbGluZyB0d28ga2V5IGZ1bmN0aW9ucyBkaXJlY3RseSBhZnRlciB0aGUgdHJhY2luZyBhbmQgS01TQU4gaW5zdHJ1bWVudGF0aW9uOiBgdHJhY2VfbW1fcGFnZV9hbGxvY2AgYW5kIGBrbXNhbl9hbGxvY19wYWdlYC4gVGhpcyBpbW1lZGlhdGVseSB0ZWxscyBtZSBzb21ldGhpbmcgc2lnbmlmaWNhbnQuIEl0J3MgY2FwdHVyaW5nIGFsbG9jYXRpb24gZGV0YWlscyB0aHJvdWdoIGEgdHJhY2luZyBtZWNoYW5pc20gYW5kIHRoZW4gaW50ZWdyYXRpbmcgd2l0aCBLZXJuZWwgTWVtb3J5IFNhbml0aXplciAoS01TQU4pIHRvIGNoZWNrIGZvciBtZW1vcnkgZXJyb3JzLiBUaGUgZnVuY3Rpb24gcHJlc3VtYWJseSBhbGxvY2F0ZXMgZnJvemVuIHBhZ2VzLiBHaXZlbiB0aGUgY29udGV4dCwgdGhlIGZ1bmN0aW9uIGxpa2VseSBoYW5kbGVzIHNwZWNpZmljLCBvcHRpbWl6ZWQsIG9yIHNwZWNpYWxpemVkIHBhZ2UgYWxsb2NhdGlvbiBzY2VuYXJpb3Mgd2l0aGluIHRoZSBrZXJuZWwuIEkgc2hvdWxkIGxvb2sgaW50byB0aGUgc3BlY2lmaWMgZGV0YWlscyBvZiB0aGVzZSBmdW5jdGlvbiBjYWxscyBub3csIGluIHRoZSBsYXJnZXIgY2FsbCBncmFwaCwgYW5kIHRoZSByb2xlIG9mIHRoZSBwYWdlIGFsbG9jYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgzODQsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDEyOjA5OjI3LjU3NjU5ODk0OVoiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzMzMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vcGFnZV9hbGxvYy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU0NDAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjU0NDA6XFx0XFx0XFx0Z290byBvdXQ7XFxuNTQ0MTpcXHRcXG41NDQyOlxcdFxcdGFsbG9jX2dmcCA9IGdmcDtcXG41NDQzOlxcdFxcdGFjLnNwcmVhZF9kaXJ0eV9wYWdlcyA9IGZhbHNlO1xcbjU0NDQ6XFx0XFxuNTQ0NTpcXHRcXHQvKlxcbjU0NDY6XFx0XFx0ICogUmVzdG9yZSB0aGUgb3JpZ2luYWwgbm9kZW1hc2sgaWYgaXQgd2FzIHBvdGVudGlhbGx5IHJlcGxhY2VkIHdpdGhcXG41NDQ3OlxcdFxcdCAqIFxcdTAwMjZjcHVzZXRfY3VycmVudF9tZW1zX2FsbG93ZWQgdG8gb3B0aW1pemUgdGhlIGZhc3QtcGF0aCBhdHRlbXB0LlxcbjU0NDg6XFx0XFx0ICovXFxuNTQ0OTpcXHRcXHRhYy5ub2RlbWFzayA9IG5vZGVtYXNrO1xcbjU0NTA6XFx0XFxuNTQ1MTpcXHRcXHRwYWdlID0gX19hbGxvY19wYWdlc19zbG93cGF0aChhbGxvY19nZnAsIG9yZGVyLCBcXHUwMDI2YWMpO1xcbjU0NTI6XFx0XFxuNTQ1MzpcXHRvdXQ6XFxuNTQ1NDpcXHRcXHRpZiAobWVtY2dfa21lbV9vbmxpbmUoKSBcXHUwMDI2XFx1MDAyNiAoZ2ZwIFxcdTAwMjYgX19HRlBfQUNDT1VOVCkgXFx1MDAyNlxcdTAwMjYgcGFnZSBcXHUwMDI2XFx1MDAyNlxcbjU0NTU6XFx0XFx0ICAgIHVubGlrZWx5KF9fbWVtY2dfa21lbV9jaGFyZ2VfcGFnZShwYWdlLCBnZnAsIG9yZGVyKSAhPSAwKSkge1xcbjU0NTY6XFx0XFx0XFx0X19mcmVlX2Zyb3plbl9wYWdlcyhwYWdlLCBvcmRlcixcXG41NDU3OlxcdFxcdFxcdFxcdFxcdCAgICBhbGxvY19mbGFncyBcXHUwMDI2IEFMTE9DX05PTE9DSyA/IEZQSV9OT0xPQ0sgOiAwKTtcXG41NDU4OlxcdFxcdFxcdHBhZ2UgPSBOVUxMO1xcbjU0NTk6XFx0XFx0fVxcbjU0NjA6XFx0XFxuNTQ2MTpcXHRcXHR0cmFjZV9tbV9wYWdlX2FsbG9jKHBhZ2UsIG9yZGVyLCBhbGxvY19nZnAsIGFjLm1pZ3JhdGV0eXBlKTtcXG41NDYyOlxcdFxcdGttc2FuX2FsbG9jX3BhZ2UocGFnZSwgb3JkZXIsIGFsbG9jX2dmcCk7XFxuNTQ2MzpcXHRcXG41NDY0OlxcdFxcdHJldHVybiBwYWdlO1xcbjU0NjU6XFx0fVxcbjU0NjY6XFx0RVhQT1JUX1NZTUJPTChfX2FsbG9jX2Zyb3plbl9wYWdlc19ub3Byb2YpO1xcbjU0Njc6XFx0XFxuNTQ2ODpcXHRzdHJ1Y3QgcGFnZSAqX19hbGxvY19wYWdlc19ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsXFxuNTQ2OTpcXHRcXHRcXHRpbnQgcHJlZmVycmVkX25pZCwgbm9kZW1hc2tfdCAqbm9kZW1hc2ssIHVuc2lnbmVkIGludCBhbGxvY19mbGFncylcXG41NDcwOlxcdHtcXG41NDcxOlxcdFxcdHN0cnVjdCBwYWdlICpwYWdlO1xcbjU0NzI6XFx0XFxuNTQ3MzpcXHRcXHRwYWdlID0gX19hbGxvY19mcm96ZW5fcGFnZXNfbm9wcm9mKGdmcCwgb3JkZXIsIHByZWZlcnJlZF9uaWQsIG5vZGVtYXNrLFxcbjU0NzQ6XFx0XFx0XFx0XFx0XFx0XFx0ICAgYWxsb2NfZmxhZ3MpO1xcbjU0NzU6XFx0XFx0aWYgKHBhZ2UpXFxuNTQ3NjpcXHRcXHRcXHRzZXRfcGFnZV9yZWZjb3VudGVkKHBhZ2UpO1xcbjU0Nzc6XFx0XFx0cmV0dXJuIHBhZ2U7XFxuNTQ3ODpcXHR9XFxuNTQ3OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTI6MDk6MjcuNTc2ODc0Mjk5WiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQwOTg1ODU3NTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFBhZ2UgQWxsb2NhdGlvbiBpbiBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJJ20gbG9va2luZyBhdCBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIGFuZCBzcGVjaWZpY2FsbHkgdGhpcyBzbmlwcGV0OlxuXG5gYGBjXG5cdFx0cHJlcF9uZXdfcGFnZShwYWdlLCAwLCBnZnAsIEFMTE9DX0RFRkFVTFQpO1xuK1x0XHR0cmFjZV9tbV9wYWdlX2FsbG9jKHBhZ2UsIDAsIGdmcCwgYWMubWlncmF0ZXR5cGUpO1xuK1x0XHRrbXNhbl9hbGxvY19wYWdlKHBhZ2UsIDAsIGdmcCBcdTAwMjYgfl9fR0ZQX1JFQ0xBSU0pO1xuXHRcdHNldF9wYWdlX3JlZmNvdW50ZWQocGFnZSk7XG5cdFx0cGFnZV9hcnJheVtucl9wb3B1bGF0ZWQrK10gPSBwYWdlO1xuYGBgXG5cblJpZ2h0LCBzbyBhZnRlciB0aGlzIHBhdGNoLCBpdCBzZWVtcyB0aGUgY29kZSBub3cgY2FsbHMgYGttc2FuX2FsbG9jX3BhZ2VgLiBCZWZvcmUsIGlmIEkgcmVjYWxsIGNvcnJlY3RseSwgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCB3YXMgcHVsbGluZyBwYWdlcyBkaXJlY3RseSBmcm9tIHRoZSBQQ1AgbGlzdCwgdXNpbmcgYF9fcm1xdWV1ZV9wY3BsaXN0YCwgdGhlbiBjYWxsaW5nIGBwcmVwX25ld19wYWdlYCwgYHNldF9wYWdlX3JlZmNvdW50ZWRgIGFuZCByZXR1cm5pbmcuIFRoZSBjcnVjaWFsIHBvaW50IGlzIHRoYXQgaXQgKndhc24ndCogY2FsbGluZyBga21zYW5fYWxsb2NfcGFnZWAgYmVmb3JlLlxuXG5XYWl0IGEgc2Vjb25kLiBJIGtub3cgdGhhdCBgX19hbGxvY19mcm96ZW5fcGFnZXNfbm9wcm9mYCBjYWxscyBga21zYW5fYWxsb2NfcGFnZWAsIHBhc3NpbmcgaW4gYG9yZGVyYCBhbmQgYGFsbG9jX2dmcGAsIGJ1dCB3aGF0IGV4YWN0bHkgKmRvZXMqIGBrbXNhbl9hbGxvY19wYWdlYCBkbz8gQ2xlYXJseSwgSSBuZWVkIHRvIGNoZWNrIGl0cyBpbXBsZW1lbnRhdGlvbiB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UuIExldCBtZSBnbyBmaW5kIHRoYXQgZGVmaW5pdGlvbiBpbiBgbW0va21zYW4vc2hhZG93LmNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MzQyLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTI6MDk6MzEuNjc1NDY0MTU4WiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgyODEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2ttc2FuL3NoYWRvdy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE2NSxcbiAgXCJMaW5lQ291bnRcIjogNDVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE2NTpcXHRcXHRfX21lbWNweShzaGFkb3dfcHRyX2Zvcihkc3QpLCBzaGFkb3dfcHRyX2ZvcihzcmMpLCBQQUdFX1NJWkUpO1xcbiAxNjY6XFx0XFx0X19tZW1jcHkob3JpZ2luX3B0cl9mb3IoZHN0KSwgb3JpZ2luX3B0cl9mb3Ioc3JjKSwgUEFHRV9TSVpFKTtcXG4gMTY3OlxcdFxcdGttc2FuX2xlYXZlX3J1bnRpbWUoKTtcXG4gMTY4OlxcdH1cXG4gMTY5OlxcdEVYUE9SVF9TWU1CT0woa21zYW5fY29weV9wYWdlX21ldGEpO1xcbiAxNzA6XFx0XFxuIDE3MTpcXHR2b2lkIGttc2FuX2FsbG9jX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlciwgZ2ZwX3QgZmxhZ3MpXFxuIDE3MjpcXHR7XFxuIDE3MzpcXHRcXHRib29sIGluaXRpYWxpemVkID0gKGZsYWdzIFxcdTAwMjYgX19HRlBfWkVSTykgfHwgIWttc2FuX2VuYWJsZWQ7XFxuIDE3NDpcXHRcXHRzdHJ1Y3QgcGFnZSAqc2hhZG93LCAqb3JpZ2luO1xcbiAxNzU6XFx0XFx0ZGVwb3Rfc3RhY2tfaGFuZGxlX3QgaGFuZGxlO1xcbiAxNzY6XFx0XFx0aW50IHBhZ2VzID0gMSBcXHUwMDNjXFx1MDAzYyBvcmRlcjtcXG4gMTc3OlxcdFxcbiAxNzg6XFx0XFx0aWYgKCFwYWdlKVxcbiAxNzk6XFx0XFx0XFx0cmV0dXJuO1xcbiAxODA6XFx0XFxuIDE4MTpcXHRcXHRzaGFkb3cgPSBzaGFkb3dfcGFnZV9mb3IocGFnZSk7XFxuIDE4MjpcXHRcXHRvcmlnaW4gPSBvcmlnaW5fcGFnZV9mb3IocGFnZSk7XFxuIDE4MzpcXHRcXG4gMTg0OlxcdFxcdGlmIChpbml0aWFsaXplZCkge1xcbiAxODU6XFx0XFx0XFx0X19tZW1zZXQocGFnZV9hZGRyZXNzKHNoYWRvdyksIDAsIFBBR0VfU0laRSAqIHBhZ2VzKTtcXG4gMTg2OlxcdFxcdFxcdF9fbWVtc2V0KHBhZ2VfYWRkcmVzcyhvcmlnaW4pLCAwLCBQQUdFX1NJWkUgKiBwYWdlcyk7XFxuIDE4NzpcXHRcXHRcXHRyZXR1cm47XFxuIDE4ODpcXHRcXHR9XFxuIDE4OTpcXHRcXG4gMTkwOlxcdFxcdC8qIFplcm8gcGFnZXMgYWxsb2NhdGVkIGJ5IHRoZSBydW50aW1lIHNob3VsZCBhbHNvIGJlIGluaXRpYWxpemVkLiAqL1xcbiAxOTE6XFx0XFx0aWYgKGttc2FuX2luX3J1bnRpbWUoKSlcXG4gMTkyOlxcdFxcdFxcdHJldHVybjtcXG4gMTkzOlxcdFxcbiAxOTQ6XFx0XFx0X19tZW1zZXQocGFnZV9hZGRyZXNzKHNoYWRvdyksIC0xLCBQQUdFX1NJWkUgKiBwYWdlcyk7XFxuIDE5NTpcXHRcXHRrbXNhbl9lbnRlcl9ydW50aW1lKCk7XFxuIDE5NjpcXHRcXHRoYW5kbGUgPSBrbXNhbl9zYXZlX3N0YWNrX3dpdGhfZmxhZ3MoZmxhZ3MsIC8qZXh0cmFfYml0cyovIDApO1xcbiAxOTc6XFx0XFx0a21zYW5fbGVhdmVfcnVudGltZSgpO1xcbiAxOTg6XFx0XFx0LypcXG4gMTk5OlxcdFxcdCAqIEFkZHJlc3NlcyBhcmUgcGFnZS1hbGlnbmVkLCBwYWdlcyBhcmUgY29udGlndW91cywgc28gaXQncyBva1xcbiAyMDA6XFx0XFx0ICogdG8ganVzdCBmaWxsIHRoZSBvcmlnaW4gcGFnZXMgd2l0aCBAaGFuZGxlLlxcbiAyMDE6XFx0XFx0ICovXFxuIDIwMjpcXHRcXHRmb3IgKGludCBpID0gMDsgaSBcXHUwMDNjIFBBR0VfU0laRSAqIHBhZ2VzIC8gc2l6ZW9mKGhhbmRsZSk7IGkrKylcXG4gMjAzOlxcdFxcdFxcdCgoZGVwb3Rfc3RhY2tfaGFuZGxlX3QgKilwYWdlX2FkZHJlc3Mob3JpZ2luKSlbaV0gPSBoYW5kbGU7XFxuIDIwNDpcXHR9XFxuIDIwNTpcXHRcXG4gMjA2OlxcdHZvaWQga21zYW5fZnJlZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpXFxuIDIwNzpcXHR7XFxuIDIwODpcXHRcXHRpZiAoIWttc2FuX2VuYWJsZWQgfHwga21zYW5faW5fcnVudGltZSgpKVxcbiAyMDk6XFx0XFx0XFx0cmV0dXJuO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxMjowOTozMS42NzU1NDg3NDhaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjYzODQ2Njc2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoZXNlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYSBrZXJuZWwgZXhwZXJ0OlxuXG4qKktNU0FOIGFuZCBCdWxrIFBhZ2UgQWxsb2NhdGlvbjogQSBNaXNzaW5nIFBpZWNlKipcblxuQWxyaWdodCwgc28gYGttc2FuX2FsbG9jX3BhZ2VgIGlzIHRoZSBrZXkgS01TQU4gaG9vayBmb3IgdHJhY2tpbmcgdGhlIGFsbG9jYXRpb24gb2YgbWVtb3J5IHBhZ2VzLiBXaXRob3V0IGl0LCBLTVNBTiBtaXNzZXMgcGFnZXMgdGhhdCBhcmUgYWxsb2NhdGVkIHRocm91Z2ggYGFsbG9jX3BhZ2VzX2J1bGtgLiBTcGVjaWZpY2FsbHksIHRoZSBLTVNBTiBzaGFkb3cgbWVtb3J5LCB3aGljaCBrZWVwcyB0cmFjayBvZiB1bmluaXRpYWxpemVkIGRhdGEsIGRvZXNuJ3QgZ2V0IHVwZGF0ZWQgb3IgcG9pc29uZWQgKGluaXRpYWxpemVkIHRvIGEgc3BlY2lmaWMgdmFsdWUgdG8gbWFrZSBkZWJ1Z2dpbmcgZWFzaWVyKSB3aGVuIHBhZ2VzIGFyZSBhbGxvY2F0ZWQgd2l0aCBgYWxsb2NfcGFnZXNfYnVsa2AuIEVzc2VudGlhbGx5LCBLTVNBTiBkb2Vzbid0IFwia25vd1wiIGFib3V0IHRob3NlIHBhZ2VzLlxuXG5IYW5nIG9uIGEgc2Vjb25k4oCmIHRoaXMgcGF0Y2ggaXMgYWRkcmVzc2luZyB0aGF0IGV4YWN0IGlzc3VlISBJdCBsb29rcyBsaWtlIHdlJ3JlIGZpeGluZyBhIGdhcCBpbiB0cmFjaW5nIGFuZCBhZGRpbmcgYSBtaXNzaW5nIEtNU0FOIGhvb2sgKGB0cmFjZV9tbV9wYWdlX2FsbG9jYCBhbmQgYGttc2FuX2FsbG9jX3BhZ2VgKSBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgIGZ1bmN0aW9uLiBUaGF0J3MgYSBjcml0aWNhbCBvdmVyc2lnaHQgYmVpbmcgcmVjdGlmaWVkLlxuXG5Ob3csIGhvbGQgb24uIEJlZm9yZSBJIGRpdmUgZnVydGhlciwgbGV0J3Mgc3RlcCBiYWNrIGFuZCB1bmRlcnN0YW5kIHRoZSBzY29wZS4gTGV0IG1lIHF1aWNrbHkgc2VlIHdoZXJlIGBhbGxvY19wYWdlc19idWxrYCBpcyBjYWxsZWQgZnJvbSBpbiB0aGUga2VybmVsLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgd2lkZXNwcmVhZCB0aGlzIGNoYW5nZSB3aWxsIGltcGFjdCB0aGUgc3lzdGVtLiBJJ2xsIHNlYXJjaCB0aGUga2VybmVsIHNvdXJjZSBmb3IgYWxsIGluc3RhbmNlcyBvZiBgYWxsb2NfcGFnZXNfYnVsa2AgYW5kIHNlZSB3aGF0J3MgdXNpbmcgdGhpcyBhbGxvY2F0aW9uIHBhdGguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNzE3LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTI6MDk6MzQuMzE0MDE3OTU5WiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTkwMTY2MTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFsbG9jX3BhZ2VzX2J1bGtcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jPTE3Mj1zdGF0aWMgc3RydWN0IGJpbyAqYmxrX2NyeXB0b19hbGxvY19lbmNfYmlvKHN0cnVjdCBiaW8gKmJpb19zcmMsXFxuLS1cXG5ibG9jay9ibGstY3J5cHRvLWZhbGxiYWNrLmMtMjA0LVxcdCAqXFxuYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jOjIwNTpcXHQgKiBOb3RlOiBhbGxvY19wYWdlc19idWxrIG5lZWRzIHRoZSBhcnJheSB0byBiZSB6ZXJvZWQsIGFzIGl0IGFzc3VtZXNcXG5ibG9jay9ibGstY3J5cHRvLWZhbGxiYWNrLmMtMjA2LVxcdCAqIGFueSBub24temVybyBzbG90IGFscmVhZHkgY29udGFpbnMgYSB2YWxpZCBhbGxvY2F0aW9uLlxcbi0tXFxuYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jLTIwOC1cXHRtZW1zZXQocGFnZXMsIDAsIHNpemVvZihzdHJ1Y3QgcGFnZSAqKSAqIG5yX3NlZ3MpO1xcbmJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYzoyMDk6XFx0bnJfYWxsb2NhdGVkID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfS0VSTkVMLCBucl9zZWdzLCBwYWdlcyk7XFxuYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jLTIxMC1cXHRpZiAobnJfYWxsb2NhdGVkIFxcdTAwM2MgbnJfc2VncylcXG4tLVxcbmRyaXZlcnMvZmlyZXdpcmUvY29yZS1pc28uYz0zMT1pbnQgZndfaXNvX2J1ZmZlcl9hbGxvYyhzdHJ1Y3QgZndfaXNvX2J1ZmZlciAqYnVmZmVyLCBpbnQgcGFnZV9jb3VudClcXG4tLVxcbmRyaXZlcnMvZmlyZXdpcmUvY29yZS1pc28uYy00MS1cXHQvLyBjb252ZW5pZW5jZSB0byBtYXAgdGhlbSBpbnRvIHZpcnR1YWwgYWRkcmVzcyBzcGFjZSBvZiB1c2VyIHByb2Nlc3MuXFxuZHJpdmVycy9maXJld2lyZS9jb3JlLWlzby5jOjQyOlxcdHVuc2lnbmVkIGxvbmcgbnJfcG9wdWxhdGVkID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfS0VSTkVMIHwgR0ZQX0RNQTMyIHwgX19HRlBfWkVSTyxcXG5kcml2ZXJzL2ZpcmV3aXJlL2NvcmUtaXNvLmMtNDMtXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgcGFnZV9jb3VudCwgcGFnZV9hcnJheSk7XFxuLS1cXG5kcml2ZXJzL2ZpcmV3aXJlL29oY2kuYz04NDg9c3RhdGljIGludCBhcl9jb250ZXh0X2luaXQoc3RydWN0IGFyX2NvbnRleHQgKmN0eCwgc3RydWN0IGZ3X29oY2kgKm9oY2ksXFxuLS1cXG5kcml2ZXJzL2ZpcmV3aXJlL29oY2kuYy04NjQtXFx0Ly8gYWRkcmVzcyByYW5nZSBpbiBrZXJuZWwgdmlydHVhbCBhZGRyZXNzIHNwYWNlLlxcbmRyaXZlcnMvZmlyZXdpcmUvb2hjaS5jOjg2NTpcXHR1bnNpZ25lZCBsb25nIG5yX3BvcHVsYXRlZCA9IGFsbG9jX3BhZ2VzX2J1bGsoR0ZQX0tFUk5FTCB8IEdGUF9ETUEzMiwgQVJfQlVGRkVSUywgcGFnZXMpO1xcbmRyaXZlcnMvZmlyZXdpcmUvb2hjaS5jLTg2Ni1cXG4tLVxcbmRyaXZlcnMvc3RhZ2luZy9tZWRpYS9hdG9taXNwL3BjaS9obW0vaG1tX2JvLmM9NjIxPXN0YXRpYyBpbnQgYWxsb2NfcHJpdmF0ZV9wYWdlcyhzdHJ1Y3QgaG1tX2J1ZmZlcl9vYmplY3QgKmJvKVxcbi0tXFxuZHJpdmVycy9zdGFnaW5nL21lZGlhL2F0b21pc3AvcGNpL2htbS9obW1fYm8uYy02MjYtXFxuZHJpdmVycy9zdGFnaW5nL21lZGlhL2F0b21pc3AvcGNpL2htbS9obW1fYm8uYzo2Mjc6XFx0bnJfYWxsb2NhdGVkID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfS0VSTkVMLCBiby1cXHUwMDNlcGduciwgYm8tXFx1MDAzZXBhZ2VzKTtcXG5kcml2ZXJzL3N0YWdpbmcvbWVkaWEvYXRvbWlzcC9wY2kvaG1tL2htbV9iby5jLTYyOC1cXHQvKlxcbmRyaXZlcnMvc3RhZ2luZy9tZWRpYS9hdG9taXNwL3BjaS9obW0vaG1tX2JvLmM6NjI5OlxcdCAqIGFsbG9jX3BhZ2VzX2J1bGsoKSBkb2VzIG5vdCB0cnkgdmVyeSBoYXJkIHRvIGdldCBwYWdlcyB1bmRlciBtZW1vcnlcXG5kcml2ZXJzL3N0YWdpbmcvbWVkaWEvYXRvbWlzcC9wY2kvaG1tL2htbV9iby5jLTYzMC1cXHQgKiBwcmVzc3VyZS4gSWYgbmVjZXNzYXJ5IGZhbGwgYmFjayB0byBhbGxvY19wYWdlKCkuXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL21seDUvY21kLmM9NDY2PXN0YXRpYyB2b2lkIGZyZWVfcGFnZV9saXN0KHUzMiBucGFnZXMsIHN0cnVjdCBwYWdlICoqcGFnZV9saXN0KVxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS9tbHg1L2NtZC5jLTQ2OS1cXG5kcml2ZXJzL3ZmaW8vcGNpL21seDUvY21kLmM6NDcwOlxcdC8qIFVuZG8gYWxsb2NfcGFnZXNfYnVsaygpICovXFxuZHJpdmVycy92ZmlvL3BjaS9tbHg1L2NtZC5jLTQ3MS1cXHRmb3IgKGkgPSBucGFnZXMgLSAxOyBpIFxcdTAwM2U9IDA7IGktLSlcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvbWx4NS9jbWQuYz00OTY9c3RhdGljIGludCBtbHg1dmZfYWRkX3BhZ2VzKHN0cnVjdCBwYWdlICoqKnBhZ2VfbGlzdCwgdW5zaWduZWQgaW50IG5wYWdlcylcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvbWx4NS9jbWQuYy01MDYtXFx0Zm9yICg7Oykge1xcbmRyaXZlcnMvdmZpby9wY2kvbWx4NS9jbWQuYzo1MDc6XFx0XFx0ZmlsbGVkID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfS0VSTkVMX0FDQ09VTlQsIG5wYWdlcyAtIGRvbmUsXFxuZHJpdmVycy92ZmlvL3BjaS9tbHg1L2NtZC5jLTUwOC1cXHRcXHRcXHRcXHRcXHQgICpwYWdlX2xpc3QgKyBkb25lKTtcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvdmlydGlvL21pZ3JhdGUuYz02Mz1zdGF0aWMgaW50IHZpcnRpb3ZmX2FkZF9taWdyYXRpb25fcGFnZXMoc3RydWN0IHZpcnRpb3ZmX2RhdGFfYnVmZmVyICpidWYsXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZpcnRpby9taWdyYXRlLmMtNzgtXFx0ZG8ge1xcbmRyaXZlcnMvdmZpby9wY2kvdmlydGlvL21pZ3JhdGUuYzo3OTpcXHRcXHRmaWxsZWQgPSBhbGxvY19wYWdlc19idWxrKEdGUF9LRVJORUxfQUNDT1VOVCwgdG9fZmlsbCxcXG5kcml2ZXJzL3ZmaW8vcGNpL3ZpcnRpby9taWdyYXRlLmMtODAtXFx0XFx0XFx0XFx0XFx0ICBwYWdlX2xpc3QpO1xcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS92aXJ0aW8vbWlncmF0ZS5jPTExMD1zdGF0aWMgdm9pZCB2aXJ0aW92Zl9mcmVlX2RhdGFfYnVmZmVyKHN0cnVjdCB2aXJ0aW92Zl9kYXRhX2J1ZmZlciAqYnVmKVxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS92aXJ0aW8vbWlncmF0ZS5jLTExMy1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZpcnRpby9taWdyYXRlLmM6MTE0OlxcdC8qIFVuZG8gYWxsb2NfcGFnZXNfYnVsaygpICovXFxuZHJpdmVycy92ZmlvL3BjaS92aXJ0aW8vbWlncmF0ZS5jLTExNS1cXHRmb3JfZWFjaF9zZ3RhYmxlX3BhZ2UoXFx1MDAyNmJ1Zi1cXHUwMDNldGFibGUuc2d0LCBcXHUwMDI2c2dfaXRlciwgMClcXG4tLVxcbmZzL2J0cmZzL2V4dGVudF9pby5jPTY4ND1pbnQgYnRyZnNfYWxsb2NfcGFnZV9hcnJheSh1bnNpZ25lZCBpbnQgbnJfcGFnZXMsIHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheSwgZ2ZwX3QgZ2ZwKVxcbi0tXFxuZnMvYnRyZnMvZXh0ZW50X2lvLmMtNjkwLVxcbmZzL2J0cmZzL2V4dGVudF9pby5jOjY5MTpcXHRcXHRhbGxvY2F0ZWQgPSBhbGxvY19wYWdlc19idWxrKGdmcCwgbnJfcGFnZXMsIHBhZ2VfYXJyYXkpO1xcbmZzL2J0cmZzL2V4dGVudF9pby5jLTY5Mi1cXHRcXHRpZiAodW5saWtlbHkoYWxsb2NhdGVkID09IGxhc3QpKSB7XFxuLS1cXG5mcy9lcm9mcy96dXRpbC5jPTY1PWludCB6X2Vyb2ZzX2didWZfZ3Jvd3NpemUodW5zaWduZWQgaW50IG5ycGFnZXMpXFxuLS1cXG5mcy9lcm9mcy96dXRpbC5jLTg5LVxcdFxcdFxcdGxhc3QgPSBqO1xcbmZzL2Vyb2ZzL3p1dGlsLmM6OTA6XFx0XFx0XFx0aiA9IGFsbG9jX3BhZ2VzX2J1bGsoR0ZQX0tFUk5FTCwgbnJwYWdlcywgdG1wX3BhZ2VzKTtcXG5mcy9lcm9mcy96dXRpbC5jLTkxLVxcdFxcdFxcdGlmIChsYXN0ID09IGopXFxuLS1cXG5mcy9mdXNlL3JlYWRkaXIuYz0zMzY9c3RhdGljIHN0cnVjdCBwYWdlICoqZnVzZV9yZWFkZGlyX2FsbG9jX2J1ZihzdHJ1Y3QgZnVzZV9hcmdzX3BhZ2VzICphcCwgc2l6ZV90ICpidWZzaXplKVxcbi0tXFxuZnMvZnVzZS9yZWFkZGlyLmMtMzQzLVxcbmZzL2Z1c2UvcmVhZGRpci5jOjM0NDpcXHRucl9hbGxvYyA9IGFsbG9jX3BhZ2VzX2J1bGsoR0ZQX0tFUk5FTCwgbnJfcGFnZXMsIHBhZ2VzKTtcXG5mcy9mdXNlL3JlYWRkaXIuYy0zNDUtXFx0aWYgKCFucl9hbGxvYylcXG4tLVxcbmZzL25mc2QvbmZzNHN0YXRlLmM9MTMyNj1hbGxvY19pbml0X2Rpcl9kZWxlZyhzdHJ1Y3QgbmZzNF9jbGllbnQgKmNscCwgc3RydWN0IG5mczRfZmlsZSAqZnApXFxuLS1cXG5mcy9uZnNkL25mczRzdGF0ZS5jLTEzMzctXFxuZnMvbmZzZC9uZnM0c3RhdGUuYzoxMzM4OlxcdG5wYWdlcyA9IGFsbG9jX3BhZ2VzX2J1bGsoR0ZQX0tFUk5FTCwgTk9USUZZNF9QQUdFX0FSUkFZX1NJWkUsIG5jbi1cXHUwMDNlbmNuX3BhZ2VzKTtcXG5mcy9uZnNkL25mczRzdGF0ZS5jLTEzMzktXFx0aWYgKG5wYWdlcyAhPSBOT1RJRlk0X1BBR0VfQVJSQVlfU0laRSkge1xcbi0tXFxuZnMvc3BsaWNlLmM9MzE4PXNzaXplX3QgY29weV9zcGxpY2VfcmVhZChzdHJ1Y3QgZmlsZSAqaW4sIGxvZmZfdCAqcHBvcyxcXG4tLVxcbmZzL3NwbGljZS5jLTM0MS1cXHRwYWdlcyA9IChzdHJ1Y3QgcGFnZSAqKikoYnYgKyBucGFnZXMpO1xcbmZzL3NwbGljZS5jOjM0MjpcXHRucGFnZXMgPSBhbGxvY19wYWdlc19idWxrKEdGUF9VU0VSLCBucGFnZXMsIHBhZ2VzKTtcXG5mcy9zcGxpY2UuYy0zNDMtXFx0aWYgKCFucGFnZXMpIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvZ2ZwLmg9MjA3PXN0cnVjdCBmb2xpbyAqX19mb2xpb19hbGxvY19ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsIGludCBwcmVmZXJyZWRfbmlkLFxcbi0tXFxuaW5jbHVkZS9saW51eC9nZnAuaC0yMTAtXFxuaW5jbHVkZS9saW51eC9nZnAuaDoyMTE6dW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnBfdCBnZnAsIGludCBwcmVmZXJyZWRfbmlkLFxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjEyLVxcdFxcdFxcdFxcdG5vZGVtYXNrX3QgKm5vZGVtYXNrLCBpbnQgbnJfcGFnZXMsXFxuaW5jbHVkZS9saW51eC9nZnAuaC0yMTMtXFx0XFx0XFx0XFx0c3RydWN0IHBhZ2UgKipwYWdlX2FycmF5KTtcXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjIxNDojZGVmaW5lIF9fYWxsb2NfcGFnZXNfYnVsayguLi4pXFx0XFx0XFx0YWxsb2NfaG9va3MoYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoX19WQV9BUkdTX18pKVxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjE1LVxcbmluY2x1ZGUvbGludXgvZ2ZwLmg9MjE2PXZvaWQgZnJlZV9wYWdlc19idWxrKHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheSwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyk7XFxuaW5jbHVkZS9saW51eC9nZnAuaC0yMTctXFxuaW5jbHVkZS9saW51eC9nZnAuaDoyMTg6dW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2YoZ2ZwX3QgZ2ZwLFxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjE5LVxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXFxuaW5jbHVkZS9saW51eC9nZnAuaC0yMjAtXFx0XFx0XFx0XFx0c3RydWN0IHBhZ2UgKipwYWdlX2FycmF5KTtcXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjIyMTojZGVmaW5lICBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeSguLi4pXFx0XFx0XFx0XFx0XFxcXFxcbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjIyOlxcdGFsbG9jX2hvb2tzKGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZihfX1ZBX0FSR1NfXykpXFxuaW5jbHVkZS9saW51eC9nZnAuaC0yMjMtXFxuaW5jbHVkZS9saW51eC9nZnAuaC0yMjQtLyogQnVsayBhbGxvY2F0ZSBvcmRlci0wIHBhZ2VzICovXFxuaW5jbHVkZS9saW51eC9nZnAuaDoyMjU6I2RlZmluZSBhbGxvY19wYWdlc19idWxrKF9nZnAsIF9ucl9wYWdlcywgX3BhZ2VfYXJyYXkpXFx0XFx0XFxcXFxcbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjI2OlxcdF9fYWxsb2NfcGFnZXNfYnVsayhfZ2ZwLCBudW1hX21lbV9pZCgpLCBOVUxMLCBfbnJfcGFnZXMsIF9wYWdlX2FycmF5KVxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjI3LVxcbmluY2x1ZGUvbGludXgvZ2ZwLmg9MjI4PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZ1xcbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjI5OmFsbG9jX3BhZ2VzX2J1bGtfbm9kZV9ub3Byb2YoZ2ZwX3QgZ2ZwLCBpbnQgbmlkLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjMwLVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheSlcXG4tLVxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjM0LVxcbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjM1OlxcdHJldHVybiBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnAsIG5pZCwgTlVMTCwgbnJfcGFnZXMsIHBhZ2VfYXJyYXkpO1xcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjM2LX1cXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTIzNy1cXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjIzODojZGVmaW5lIGFsbG9jX3BhZ2VzX2J1bGtfbm9kZSguLi4pXFx0XFx0XFx0XFx0XFxcXFxcbmluY2x1ZGUvbGludXgvZ2ZwLmg6MjM5OlxcdGFsbG9jX2hvb2tzKGFsbG9jX3BhZ2VzX2J1bGtfbm9kZV9ub3Byb2YoX19WQV9BUkdTX18pKVxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjQwLVxcbi0tXFxuaW9fdXJpbmcvbWVtbWFwLmM9MTc0PXN0YXRpYyBpbnQgaW9fcmVnaW9uX2FsbG9jYXRlX3BhZ2VzKHN0cnVjdCBpb19tYXBwZWRfcmVnaW9uICptcixcXG4tLVxcbmlvX3VyaW5nL21lbW1hcC5jLTE5Mi1cXG5pb191cmluZy9tZW1tYXAuYzoxOTM6XFx0bnJfYWxsb2NhdGVkID0gYWxsb2NfcGFnZXNfYnVsa19ub2RlKGdmcCwgTlVNQV9OT19OT0RFLFxcbmlvX3VyaW5nL21lbW1hcC5jLTE5NC1cXHRcXHRcXHRcXHRcXHQgICAgIG1yLVxcdTAwM2Vucl9wYWdlcywgcGFnZXMpO1xcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jPTY2OD1zdGF0aWMgbG9uZyBhcmVuYV9hbGxvY19wYWdlcyhzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSwgbG9uZyB1YWRkciwgbG9uZyBwYWdlX2NudCwgaW50IG5vZGVfaWQsXFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtNzMyLVxcbmtlcm5lbC9icGYvYXJlbmEuYzo3MzM6XFx0XFx0LyogemVyb2luZyBpcyBuZWVkZWQsIHNpbmNlIGFsbG9jX3BhZ2VzX2J1bGsoKSBvbmx5IGZpbGxzIGluIG5vbi16ZXJvIGVudHJpZXMgKi9cXG5rZXJuZWwvYnBmL2FyZW5hLmMtNzM0LVxcdFxcdG1lbXNldChwYWdlcywgMCwgdGhpc19iYXRjaCAqIHNpemVvZihzdHJ1Y3QgcGFnZSAqKSk7XFxuLS1cXG5saWIvdGVzdF92bWFsbG9jLmM9MzkxPXZtX21hcF9yYW1fdGVzdCh2b2lkKVxcbi0tXFxubGliL3Rlc3Rfdm1hbGxvYy5jLTQwMy1cXG5saWIvdGVzdF92bWFsbG9jLmM6NDA0OlxcdG5yX2FsbG9jYXRlZCA9IGFsbG9jX3BhZ2VzX2J1bGsoR0ZQX0tFUk5FTCwgbWFwX25yX3BhZ2VzLCBwYWdlcyk7XFxubGliL3Rlc3Rfdm1hbGxvYy5jLTQwNS1cXHRpZiAobnJfYWxsb2NhdGVkICE9IG1hcF9ucl9wYWdlcylcXG4tLVxcbmxpYi90ZXN0cy9rdW5pdF9pb3ZfaXRlci5jPTUxPXN0YXRpYyB2b2lkICpfX2luaXQgaW92X2t1bml0X2NyZWF0ZV9idWZmZXIoc3RydWN0IGt1bml0ICp0ZXN0LFxcbi0tXFxubGliL3Rlc3RzL2t1bml0X2lvdl9pdGVyLmMtNjYtXFx0XFx0bGFzdCA9IGdvdDtcXG5saWIvdGVzdHMva3VuaXRfaW92X2l0ZXIuYzo2NzpcXHRcXHRnb3QgPSBhbGxvY19wYWdlc19idWxrKEdGUF9LRVJORUwsIG5wYWdlcywgcGFnZXMpO1xcbmxpYi90ZXN0cy9rdW5pdF9pb3ZfaXRlci5jLTY4LVxcbi0tXFxubW0vYWxsb2NfdGFnLmM9Nzc3PXN0YXRpYyBpbnQgdm1fbW9kdWxlX3RhZ3NfcG9wdWxhdGUodm9pZClcXG4tLVxcbm1tL2FsbG9jX3RhZy5jLTc5My1cXG5tbS9hbGxvY190YWcuYzo3OTQ6XFx0XFx0XFx0YWxsb2NhdGVkID0gYWxsb2NfcGFnZXNfYnVsa19ub2RlKEdGUF9LRVJORUwgfCBfX0dGUF9OT1dBUk4sXFxubW0vYWxsb2NfdGFnLmMtNzk1LVxcdFxcdFxcdFxcdE5VTUFfTk9fTk9ERSwgbW9yZV9wYWdlcyAtIG5yLCBuZXh0X3BhZ2UgKyBucik7XFxuLS1cXG5tbS9rYXNhbi9zaGFkb3cuYz0zMjc9c3RhdGljIHZvaWQgX19fZnJlZV9wYWdlc19idWxrKHN0cnVjdCBwYWdlICoqcGFnZXMsIGludCBucl9wYWdlcylcXG4tLVxcbm1tL2thc2FuL3NoYWRvdy5jLTMzOC1cXG5tbS9rYXNhbi9zaGFkb3cuYzozMzk6c3RhdGljIGludCBfX19hbGxvY19wYWdlc19idWxrKHN0cnVjdCBwYWdlICoqcGFnZXMsIGludCBucl9wYWdlcywgZ2ZwX3QgZ2ZwX21hc2spXFxubW0va2FzYW4vc2hhZG93LmMtMzQwLXtcXG4tLVxcbm1tL2thc2FuL3NoYWRvdy5jLTM0NC1cXHR3aGlsZSAobnJfcGFnZXMpIHtcXG5tbS9rYXNhbi9zaGFkb3cuYzozNDU6XFx0XFx0bnJfcG9wdWxhdGVkID0gYWxsb2NfcGFnZXNfYnVsayhnZnBfbWFzaywgbnJfcGFnZXMsIHBhZ2VzKTtcXG5tbS9rYXNhbi9zaGFkb3cuYy0zNDYtXFx0XFx0aWYgKCFucl9wb3B1bGF0ZWQpIHtcXG4tLVxcbm1tL2thc2FuL3NoYWRvdy5jPTM1Nz1zdGF0aWMgaW50IF9fa2FzYW5fcG9wdWxhdGVfdm1hbGxvY19kbyh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwgZ2ZwX3QgZ2ZwX21hc2spXFxuLS1cXG5tbS9rYXNhbi9zaGFkb3cuYy0zNjktXFx0XFx0bnJfcGFnZXMgPSBtaW4obnJfdG90YWwsIFBBR0VfU0laRSAvIHNpemVvZihkYXRhLnBhZ2VzWzBdKSk7XFxubW0va2FzYW4vc2hhZG93LmM6MzcwOlxcdFxcdHJldCA9IF9fX2FsbG9jX3BhZ2VzX2J1bGsoZGF0YS5wYWdlcywgbnJfcGFnZXMsIGdmcF9tYXNrKTtcXG5tbS9rYXNhbi9zaGFkb3cuYy0zNzEtXFx0XFx0aWYgKHJldClcXG4tLVxcbm1tL21lbXBvbGljeS5jPTI1ODk9RVhQT1JUX1NZTUJPTChmb2xpb19hbGxvY19ub3Byb2YpO1xcbm1tL21lbXBvbGljeS5jLTI1OTAtXFxubW0vbWVtcG9saWN5LmM6MjU5MTpzdGF0aWMgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX2ludGVybGVhdmUoZ2ZwX3QgZ2ZwLFxcbm1tL21lbXBvbGljeS5jLTI1OTItXFx0XFx0c3RydWN0IG1lbXBvbGljeSAqcG9sLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbi0tXFxubW0vbWVtcG9saWN5LmMtMjYwNy1cXHRcXHRpZiAoZGVsdGEpIHtcXG5tbS9tZW1wb2xpY3kuYzoyNjA4OlxcdFxcdFxcdG5yX2FsbG9jYXRlZCA9IGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKGdmcCxcXG5tbS9tZW1wb2xpY3kuYy0yNjA5LVxcdFxcdFxcdFxcdFxcdGludGVybGVhdmVfbm9kZXMocG9sKSwgTlVMTCxcXG4tLVxcbm1tL21lbXBvbGljeS5jLTI2MTMtXFx0XFx0fSBlbHNlIHtcXG5tbS9tZW1wb2xpY3kuYzoyNjE0OlxcdFxcdFxcdG5yX2FsbG9jYXRlZCA9IGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKGdmcCxcXG5tbS9tZW1wb2xpY3kuYy0yNjE1LVxcdFxcdFxcdFxcdFxcdGludGVybGVhdmVfbm9kZXMocG9sKSwgTlVMTCxcXG4tLVxcbm1tL21lbXBvbGljeS5jLTI2MjUtXFxubW0vbWVtcG9saWN5LmM6MjYyNjpzdGF0aWMgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX3dlaWdodGVkX2ludGVybGVhdmUoZ2ZwX3QgZ2ZwLFxcbm1tL21lbXBvbGljeS5jLTI2MjctXFx0XFx0c3RydWN0IG1lbXBvbGljeSAqcG9sLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbi0tXFxubW0vbWVtcG9saWN5LmMtMjY2NC1cXHRcXHRub2RlX3BhZ2VzID0gbWluKHJlbV9wYWdlcywgd2VpZ2h0KTtcXG5tbS9tZW1wb2xpY3kuYzoyNjY1OlxcdFxcdG5yX2FsbG9jYXRlZCA9IF9fYWxsb2NfcGFnZXNfYnVsayhnZnAsIG5vZGUsIE5VTEwsIG5vZGVfcGFnZXMsXFxubW0vbWVtcG9saWN5LmMtMjY2Ni1cXHRcXHRcXHRcXHRcXHRcXHQgIHBhZ2VfYXJyYXkpO1xcbi0tXFxubW0vbWVtcG9saWN5LmMtMjcwMS1cXHQvKlxcbm1tL21lbXBvbGljeS5jOjI3MDI6XFx0ICogQ2FsY3VsYXRlIHJvdW5kcy9wYXJ0aWFsIHJvdW5kcyB0byBtaW5pbWl6ZSBfX2FsbG9jX3BhZ2VzX2J1bGsgY2FsbHMuXFxubW0vbWVtcG9saWN5LmMtMjcwMy1cXHQgKiBUcmFjayB3aGljaCBub2RlIHdlaWdodGVkIGludGVybGVhdmUgc2hvdWxkIHJlc3VtZSBmcm9tLlxcbi0tXFxubW0vbWVtcG9saWN5LmMtMjcyOS1cXHRcXHRcXHRicmVhaztcXG5tbS9tZW1wb2xpY3kuYzoyNzMwOlxcdFxcdG5yX2FsbG9jYXRlZCA9IF9fYWxsb2NfcGFnZXNfYnVsayhnZnAsIG5vZGUsIE5VTEwsIG5vZGVfcGFnZXMsXFxubW0vbWVtcG9saWN5LmMtMjczMS1cXHRcXHRcXHRcXHRcXHRcXHQgIHBhZ2VfYXJyYXkpO1xcbi0tXFxubW0vbWVtcG9saWN5LmMtMjc0My1cXG5tbS9tZW1wb2xpY3kuYzoyNzQ0OnN0YXRpYyB1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfcHJlZmVycmVkX21hbnkoZ2ZwX3QgZ2ZwLCBpbnQgbmlkLFxcbm1tL21lbXBvbGljeS5jLTI3NDUtXFx0XFx0c3RydWN0IG1lbXBvbGljeSAqcG9sLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbi0tXFxubW0vbWVtcG9saWN5LmMtMjc1My1cXG5tbS9tZW1wb2xpY3kuYzoyNzU0OlxcdG5yX2FsbG9jYXRlZCAgPSBhbGxvY19wYWdlc19idWxrX25vcHJvZihwcmVmZXJyZWRfZ2ZwLCBuaWQsIFxcdTAwMjZwb2wtXFx1MDAzZW5vZGVzLFxcbm1tL21lbXBvbGljeS5jLTI3NTUtXFx0XFx0XFx0XFx0XFx0ICAgbnJfcGFnZXMsIHBhZ2VfYXJyYXkpO1xcbi0tXFxubW0vbWVtcG9saWN5LmMtMjc1Ny1cXHRpZiAobnJfYWxsb2NhdGVkIFxcdTAwM2MgbnJfcGFnZXMpXFxubW0vbWVtcG9saWN5LmM6Mjc1ODpcXHRcXHRucl9hbGxvY2F0ZWQgKz0gYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoZ2ZwLCBudW1hX25vZGVfaWQoKSwgTlVMTCxcXG5tbS9tZW1wb2xpY3kuYy0yNzU5LVxcdFxcdFxcdFxcdG5yX3BhZ2VzIC0gbnJfYWxsb2NhdGVkLFxcbi0tXFxubW0vbWVtcG9saWN5LmMtMjc2OS0gKi9cXG5tbS9tZW1wb2xpY3kuYzoyNzcwOnVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19tZW1wb2xpY3lfbm9wcm9mKGdmcF90IGdmcCxcXG5tbS9tZW1wb2xpY3kuYy0yNzcxLVxcdFxcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsIHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheSlcXG4tLVxcbm1tL21lbXBvbGljeS5jLTI3ODAtXFx0aWYgKHBvbC1cXHUwMDNlbW9kZSA9PSBNUE9MX0lOVEVSTEVBVkUpXFxubW0vbWVtcG9saWN5LmM6Mjc4MTpcXHRcXHRyZXR1cm4gYWxsb2NfcGFnZXNfYnVsa19pbnRlcmxlYXZlKGdmcCwgcG9sLFxcbm1tL21lbXBvbGljeS5jLTI3ODItXFx0XFx0XFx0XFx0XFx0XFx0XFx0IG5yX3BhZ2VzLCBwYWdlX2FycmF5KTtcXG4tLVxcbm1tL21lbXBvbGljeS5jLTI3ODQtXFx0aWYgKHBvbC1cXHUwMDNlbW9kZSA9PSBNUE9MX1dFSUdIVEVEX0lOVEVSTEVBVkUpXFxubW0vbWVtcG9saWN5LmM6Mjc4NTpcXHRcXHRyZXR1cm4gYWxsb2NfcGFnZXNfYnVsa193ZWlnaHRlZF9pbnRlcmxlYXZlKFxcbm1tL21lbXBvbGljeS5jLTI3ODYtXFx0XFx0XFx0XFx0ICBnZnAsIHBvbCwgbnJfcGFnZXMsIHBhZ2VfYXJyYXkpO1xcbi0tXFxubW0vbWVtcG9saWN5LmMtMjc4OC1cXHRpZiAocG9sLVxcdTAwM2Vtb2RlID09IE1QT0xfUFJFRkVSUkVEX01BTlkpXFxubW0vbWVtcG9saWN5LmM6Mjc4OTpcXHRcXHRyZXR1cm4gYWxsb2NfcGFnZXNfYnVsa19wcmVmZXJyZWRfbWFueShnZnAsXFxubW0vbWVtcG9saWN5LmMtMjc5MC1cXHRcXHRcXHRcXHRudW1hX25vZGVfaWQoKSwgcG9sLCBucl9wYWdlcywgcGFnZV9hcnJheSk7XFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0yNzkzLVxcdG5vZGVtYXNrID0gcG9saWN5X25vZGVtYXNrKGdmcCwgcG9sLCBOT19JTlRFUkxFQVZFX0lOREVYLCBcXHUwMDI2bmlkKTtcXG5tbS9tZW1wb2xpY3kuYzoyNzk0OlxcdHJldHVybiBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnAsIG5pZCwgbm9kZW1hc2ssXFxubW0vbWVtcG9saWN5LmMtMjc5NS1cXHRcXHRcXHRcXHQgICAgICAgbnJfcGFnZXMsIHBhZ2VfYXJyYXkpO1xcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTUwOTE9c3RhdGljIGlubGluZSBib29sIHByZXBhcmVfYWxsb2NfcGFnZXMoZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcixcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy01MTM5LS8qXFxubW0vcGFnZV9hbGxvYy5jOjUxNDA6ICogX19hbGxvY19wYWdlc19idWxrIC0gQWxsb2NhdGUgYSBudW1iZXIgb2Ygb3JkZXItMCBwYWdlcyB0byBhbiBhcnJheVxcbm1tL3BhZ2VfYWxsb2MuYy01MTQxLSAqIEBnZnA6IEdGUCBmbGFncyBmb3IgdGhlIGFsbG9jYXRpb25cXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy01MTU5LSAqL1xcbm1tL3BhZ2VfYWxsb2MuYzo1MTYwOnVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoZ2ZwX3QgZ2ZwLCBpbnQgcHJlZmVycmVkX25pZCxcXG5tbS9wYWdlX2FsbG9jLmMtNTE2MS1cXHRcXHRcXHRub2RlbWFza190ICpub2RlbWFzaywgaW50IG5yX3BhZ2VzLFxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTUzMDEtfVxcbm1tL3BhZ2VfYWxsb2MuYzo1MzAyOkVYUE9SVF9TWU1CT0xfR1BMKGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKTtcXG5tbS9wYWdlX2FsbG9jLmMtNTMwMy1cXG4tLVxcbm1tL3NsdWIuYz03NDI2PXN0YXRpYyBib29sIF9fa21lbV9jYWNoZV9hbGxvY19idWxrKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBmbGFncyxcXG4tLVxcbm1tL3NsdWIuYy03NDcwLSAqXFxubW0vc2x1Yi5jOjc0NzE6ICogVW5saWtlIGFsbG9jX3BhZ2VzX2J1bGsoKSwgdGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBjaGVjayBmb3IgYWxyZWFkeSBhbGxvY2F0ZWRcXG5tbS9zbHViLmMtNzQ3Mi0gKiBvYmplY3RzIGluIEBwLCBhbmQgdGh1cyB0aGUgY2FsbGVyIGRvZXMgbm90IG5lZWQgdG8gemVybyBpdC5cXG4tLVxcbm1tL3ZtYWxsb2MuYz0zNjc2PXZtX2FyZWFfYWxsb2NfcGFnZXMoZ2ZwX3QgZ2ZwLCBpbnQgbmlkLFxcbi0tXFxubW0vdm1hbGxvYy5jLTM3NDMtXFx0XFx0XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX05VTUEpIFxcdTAwMjZcXHUwMDI2IG5pZCA9PSBOVU1BX05PX05PREUpXFxubW0vdm1hbGxvYy5jOjM3NDQ6XFx0XFx0XFx0XFx0bnIgPSBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2YoZ2ZwLFxcbm1tL3ZtYWxsb2MuYy0zNzQ1LVxcdFxcdFxcdFxcdFxcdFxcdFxcdG5yX3BhZ2VzX3JlcXVlc3QsXFxuLS1cXG5tbS92bWFsbG9jLmMtMzc0Ny1cXHRcXHRcXHRlbHNlXFxubW0vdm1hbGxvYy5jOjM3NDg6XFx0XFx0XFx0XFx0bnIgPSBhbGxvY19wYWdlc19idWxrX25vZGVfbm9wcm9mKGdmcCwgbmlkLFxcbm1tL3ZtYWxsb2MuYy0zNzQ5LVxcdFxcdFxcdFxcdFxcdFxcdFxcdG5yX3BhZ2VzX3JlcXVlc3QsXFxuLS1cXG5uZXQvY29yZS9wYWdlX3Bvb2wuYz02MTE9c3RhdGljIG5vaW5saW5lIG5ldG1lbV9yZWYgX19wYWdlX3Bvb2xfYWxsb2NfbmV0bWVtc19zbG93KHN0cnVjdCBwYWdlX3Bvb2wgKnBvb2wsXFxuLS1cXG5uZXQvY29yZS9wYWdlX3Bvb2wuYy02MzMtXFxubmV0L2NvcmUvcGFnZV9wb29sLmM6NjM0OlxcdC8qIE1hcmsgZW1wdHkgYWxsb2MuY2FjaGUgc2xvdHMgXFxcImVtcHR5XFxcIiBmb3IgYWxsb2NfcGFnZXNfYnVsayAqL1xcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTYzNS1cXHRtZW1zZXQoXFx1MDAyNnBvb2wtXFx1MDAzZWFsbG9jLmNhY2hlLCAwLCBzaXplb2Yodm9pZCAqKSAqIGJ1bGspO1xcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTYzNi1cXG5uZXQvY29yZS9wYWdlX3Bvb2wuYzo2Mzc6XFx0bnJfcGFnZXMgPSBhbGxvY19wYWdlc19idWxrX25vZGUoZ2ZwLCBwb29sLVxcdTAwM2VwLm5pZCwgYnVsayxcXG5uZXQvY29yZS9wYWdlX3Bvb2wuYy02MzgtXFx0XFx0XFx0XFx0XFx0IChzdHJ1Y3QgcGFnZSAqKilwb29sLVxcdTAwM2VhbGxvYy5jYWNoZSk7XFxuLS1cXG5uZXQvc3VucnBjL3N2Y194cHJ0LmM9Njg3PXN0YXRpYyBib29sIHN2Y19maWxsX3BhZ2VzKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsIHN0cnVjdCBwYWdlICoqcGFnZXMsXFxuLS1cXG5uZXQvc3VucnBjL3N2Y194cHJ0LmMtNjkyLVxcdGZvciAoZmlsbGVkID0gMDsgZmlsbGVkIFxcdTAwM2MgbnBhZ2VzOyBmaWxsZWQgPSByZXQpIHtcXG5uZXQvc3VucnBjL3N2Y194cHJ0LmM6NjkzOlxcdFxcdHJldCA9IGFsbG9jX3BhZ2VzX2J1bGsoR0ZQX0tFUk5FTCwgbnBhZ2VzLCBwYWdlcyk7XFxubmV0L3N1bnJwYy9zdmNfeHBydC5jLTY5NC1cXHRcXHRpZiAocmV0IFxcdTAwM2UgZmlsbGVkKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxMjowOTozNi4zMDQxODkyMjlaIiwiU2VxIjozNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTE5MDA5NjM5NzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gRGV0ZXJtaW5hdGlvbjogTmVlZHNLTVNBTiA9IGZhbHNlKipcblxuT2theSwgaGVyZSdzIHRoZSBicmVha2Rvd24gb2YgbXkgdGhvdWdodCBwcm9jZXNzLiBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgaW50cm9kdWNlcyBga21zYW5fYWxsb2NfcGFnZWAgYW5kIGB0cmFjZV9tbV9wYWdlX2FsbG9jYCBpbnRvIGBhbGxvY19wYWdlc19idWxrX25vcHJvZmAuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZGlnIGluIGFuZCB1bmRlcnN0YW5kICp3aHkqIHRoaXMgY2hhbmdlIGlzIGhhcHBlbmluZy4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGlzIHBhdGNoIGl0c2VsZiBpbnRyb2R1Y2VzIGFueSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIG9yIGlmIGl0IHNpbXBseSAqZW5hYmxlcyogS01TQU4gdG8gZGV0ZWN0IGV4aXN0aW5nIHJpc2tzIGJldHRlci4gTXkgZXhwZXJ0aXNlIGxpZXMgaW4gdGhlc2UgbWVtb3J5IGVycm9yIGRldGVjdG9ycywgc28gSSBuZWVkIHRvIG1ha2UgdGhlIHJpZ2h0IGNhbGwuXG5cbkZpcnN0LCBJIGxvb2tlZCBhdCB3aGVyZSBgYWxsb2NfcGFnZXNfYnVsa2AgaXMgdXNlZC4gSSBzZWUgaXQncyB1c2VkICpldmVyeXdoZXJlKiwgaW5jbHVkaW5nIGNydWNpYWwgYXJlYXMgbGlrZSBgdm1hbGxvY2AsIGBwYWdlX3Bvb2xgLCBhbmQgc3BsaWNpbmcuIFRoZSBwcm9tcHQgaGlnaGxpZ2h0cyBhIGNyaXRpY2FsIGRpc3RpbmN0aW9uOiBzdGFuZGFyZCBLQVNBTiBjb3ZlcnMgbWFueSBidWdzLCBhbmQgS01TQU4gaXMgZm9yIGNhdGNoaW5nICpzcGVjaWZpY2FsbHkqIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIGFuZCBsZWFrcy4gSWYgS0FTQU4gY2FuIGNhdGNoIHRoZSBidWcsIHdlIGRvbid0IG5lZWQgdGhlIGhlYXZ5IEtNU0FOIHNlc3Npb24uXG5cblRoZSBwYXRjaCdzIGdvYWwgaXMgYWRkaW5nIEtNU0FOIHRvIHBhZ2VzIGFsbG9jYXRlZCBmcm9tIHRoZSBwZXItY3B1IHBhZ2UgbGlzdHMuIFNvLCBJIHNlZSB0aGF0IHRoZSBwYXRjaCBzZWVtcyB0byBiZSBhbiAqaW50ZXJuYWwgS01TQU4gaW5zdHJ1bWVudGF0aW9uIGZpeCouIEkgc2VlIHRoaXMgcGF0Y2ggd2Fzbid0IHRoZXJlIHByZXZpb3VzbHksIHdoaWNoIG1lYW5zIGJ1bGstYWxsb2NhdGVkIHBhZ2VzIG1pZ2h0IG5vdCBoYXZlIGJlZW4gdHJhY2tlZCBieSBLTVNBTi4gSWYgdGhleSB3ZXJlbid0LCB0aGVuIGFueSBjb2RlIHRoYXQgKnVzZXMqIHRob3NlIHBhZ2VzIChsaWtlIGB2bWFsbG9jYCBvciB0aGUgb3RoZXJzIEkgbWVudGlvbmVkKSBtaWdodCBoYXZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIHRoYXQgS01TQU4gd2lsbCBub3cgY2F0Y2guIE5vdywgbXkgbWluZCByYWNlczogRG9lcyB0aGUgcGF0Y2ggKmludHJvZHVjZSogdGhlIGJ1Zywgb3IgaXMgaXQgKmZpeGluZyogS01TQU4/XG5cbkkgY2FyZWZ1bGx5IHJlLXJlYWQgdGhlIHByb21wdCdzIGNyaXRlcmlhIGZvciBgTmVlZHNLTVNBTj10cnVlYC4gSXQncyBhIHN0cnVjdHVyZWQgYXBwcm9hY2gsIHNvIEkgZm9sbG93IHRoZSBydWxlcy4gSXQgc2F5cyB0aGF0IHRoZSBmbGFnIHNob3VsZCBiZSBzZXQgdG8gdHJ1ZSBpZiB0aGUgcGF0Y2ggaW50cm9kdWNlczpcblxuMS4gIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlcnNwYWNlLlxuMi4gIENvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLlxuMy4gIENvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgYWxsb2NhdGlvbiB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkLlxuNC4gIEJvdW5kcyBjaGVja3Mgb3IgbG9naWMgdGhhdCBhbGxvd3MgYWNjZXNzIHRvIHVuaW5pdGlhbGl6ZWQgYnl0ZXMuXG5cbkkgZ28gdGhyb3VnaCBlYWNoIHBvaW50IG1ldGljdWxvdXNseS4gRG9lcyB0aGUgcGF0Y2ggZG8gYW55IG9mIHRoZXNlIHRoaW5ncz8gTm8uIFRoZSBwYXRjaCAqYWRkcyogZnVuY3Rpb24gY2FsbHM6IGB0cmFjZV9tbV9wYWdlX2FsbG9jYCBhbmQgYGttc2FuX2FsbG9jX3BhZ2VgLiBUaGlzIGlzIGFkZGluZyB0cmFjaW5nIGFuZCBpbnN0cnVtZW50YXRpb24sIG5vdCBpbnRyb2R1Y2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSBidWdzLlxuXG5JIHRoZW4gY2hlY2sgdGhlIGNyaXRlcmlhIGZvciBgTmVlZHNLTVNBTj1mYWxzZWA6IGl0IG1lYW5zIHRoYXQgdGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlza3Mgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcywgYW5kIHRoYXQgaXQgZG9lc24ndCBoYXZlIGFueSBidWdzIGNhdWdodCBieSBzdGFuZGFyZCBkZXRlY3RvcnMuXG5cbk9rYXksIGxldCdzIGxvb2sgYXQgdGhlIHBhdGNoIGl0c2VsZi4gSXMgdGhlcmUgYSByYWNlIGNvbmRpdGlvbiBvciBhIHNwaW5sb2NrIGlzc3VlIHRoYXQgY2FuIGhhcHBlbiB3aGVuIGBrbXNhbl9hbGxvY19wYWdlYCBpcyBjYWxsZWQ/IFRoZSBmdW5jdGlvbiBpcyBiZWluZyBjYWxsZWQgKmluc2lkZSogYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCwgc28gaXMgdGhlcmUgYW55IHBvc3NpYmlsaXR5IG9mIGRlYWRsb2NrcyBvciBjcmFzaGVzPyBJIGxvb2sgY2xvc2VseSBhdCB0aGUgY29kZS4gSSBub3RlIHRoYXQgdGhlcmUgaXMgYSBzcGlubG9jayBoZWxkIGR1cmluZyB0aGlzIGNvZGUgcGF0aC4gQnV0LCBhZnRlciBsb29raW5nLCBga21zYW5fYWxsb2NfcGFnZWAgaXMgc2FmZSB1bmRlciB0aGUgc3BpbmxvY2sgYmVjYXVzZSBzdGFuZGFyZCBkZXRlY3RvcnMsIExPQ0tERVAsIGFuZCBLQVNBTiBzaG91bGQgYmUgYWJsZSB0byBjYXRjaCBhbnkgaXNzdWVzIHRoZXJlLlxuXG5UaGUgcGF0Y2ggaXRzZWxmICpkb2VzIG5vdCogaW50cm9kdWNlIGFueSBuZXcgc291cmNlcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBhbnkgbGVha3MuIFRoZSBnb2FsIG9mIHRoaXMgcGF0Y2ggaXMgdGhhdCBLTVNBTiBjYW4gZGV0ZWN0IHRoZXNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBJZiB0aGUgcGF0Y2ggYWRkcyB0d28gZnVuY3Rpb24gY2FsbHMsIGFuZCBpZiB0aGUgcGF0Y2ggZG9lc24ndCBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2VzIG9yIGxlYWtzLCB0aGVuIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cblxuVGhlcmVmb3JlLCBiZWNhdXNlIHRoaXMgcGF0Y2ggZml4ZXMgS01TQU4gaW5zdHJ1bWVudGF0aW9uIChieSBhZGRpbmcgY2FsbHMgdG8gYHRyYWNlX21tX3BhZ2VfYWxsb2NgIGFuZCBga21zYW5fYWxsb2NfcGFnZWAgaW50byBgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2ZgKSB3aXRob3V0IGludHJvZHVjaW5nIGFueSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0aWVzLCBJIGFtIGNvbmNsdWRpbmcgdGhhdCBOZWVkc0tNU0FOIG11c3QgYmUgc2V0IHRvIGBmYWxzZWAuIEtBU0FOL0xPQ0tERVAvZXRjLiB3aWxsIGNhdGNoIGFueSBpc3N1ZXMgd2l0aCBsb2NraW5nL09PQiwgYW5kIHRoaXMgaXMgZml4aW5nIEtNU0FOIGludGVybmFsbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2ODc1LCJPdXRwdXRUb2tlbnMiOjE1OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3MDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTI6MDk6NDguMjA1MTU2ODUyWiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY2MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIG1pc3NpbmcgYHRyYWNlX21tX3BhZ2VfYWxsb2NgIGFuZCBga21zYW5fYWxsb2NfcGFnZWAgY2FsbHMgdG8gYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKClgIGluIGBtbS9wYWdlX2FsbG9jLmNgIGZvciBwYWdlcyBhbGxvY2F0ZWQgZnJvbSBwZXItQ1BVIGxpc3RzLlxcblxcblRoaXMgbW9kaWZpY2F0aW9uIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGtlcm5lbCBpbmZvLWxlYWtzLCB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMsIG9yIGZhdWx0eSBidWZmZXIgYm91bmRzLiBBbnkgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIChzdWNoIGFzIGxvY2tpbmcgb3IgY29udGV4dCBpc3N1ZXMgd2hpbGUgaG9sZGluZyB0aGUgUENQIHNwaW5sb2NrIG9yIGludmFsaWQgcGFnZSBwb2ludGVycykgYXJlIGRldGVjdGFibGUgYnkgTE9DS0RFUCwgS0FTQU4sIGFuZCBzdGFuZGFyZCBkZWJ1Z2dpbmcgZmFjaWxpdGllcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIG1pc3NpbmcgYHRyYWNlX21tX3BhZ2VfYWxsb2NgIGFuZCBga21zYW5fYWxsb2NfcGFnZWAgY2FsbHMgdG8gYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKClgIGluIGBtbS9wYWdlX2FsbG9jLmNgIGZvciBwYWdlcyBhbGxvY2F0ZWQgZnJvbSBwZXItQ1BVIGxpc3RzLlxcblxcblRoaXMgbW9kaWZpY2F0aW9uIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGtlcm5lbCBpbmZvLWxlYWtzLCB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMsIG9yIGZhdWx0eSBidWZmZXIgYm91bmRzLiBBbnkgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIChzdWNoIGFzIGxvY2tpbmcgb3IgY29udGV4dCBpc3N1ZXMgd2hpbGUgaG9sZGluZyB0aGUgUENQIHNwaW5sb2NrIG9yIGludmFsaWQgcGFnZSBwb2ludGVycykgYXJlIGRldGVjdGFibGUgYnkgTE9DS0RFUCwgS0FTQU4sIGFuZCBzdGFuZGFyZCBkZWJ1Z2dpbmcgZmFjaWxpdGllcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow45vwq[1] Phase: Succeeded StartedAt: 2026-09-08 12:09:58 +0000 UTC FinishedAt: 2026-09-08 12:09:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow45vwq[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-08 12:09:58 +0000 UTC FinishedAt: 2026-09-08 12:09:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow45vwq[2] Phase: Succeeded StartedAt: 2026-09-08 12:09:58 +0000 UTC FinishedAt: 2026-09-08 15:49:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow45vwq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof","alloc_pages_bulk_mempolicy_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"095225b1-6573-49ad-bfd9-b9a7dffeaa92","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-08 12:09:58 +0000 UTC FinishedAt: 2026-09-08 15:49:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof","alloc_pages_bulk_mempolicy_noprof"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"095225b1-6573-49ad-bfd9-b9a7dffeaa92","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow45vwq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof","alloc_pages_bulk_mempolicy_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"095225b1-6573-49ad-bfd9-b9a7dffeaa92","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-08 12:09:58 +0000 UTC FinishedAt: 2026-09-08 12:10:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow45vwq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof","alloc_pages_bulk_mempolicy_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"095225b1-6573-49ad-bfd9-b9a7dffeaa92","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-08 12:09:58 +0000 UTC FinishedAt: 2026-09-08 12:10:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.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-workflow45vwq/series-workflow45vwq-convert-artifact-4272627425/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow45vwq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof","alloc_pages_bulk_mempolicy_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"095225b1-6573-49ad-bfd9-b9a7dffeaa92","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-08 12:10:09 +0000 UTC FinishedAt: 2026-09-08 12:26:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow45vwq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof","alloc_pages_bulk_mempolicy_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"095225b1-6573-49ad-bfd9-b9a7dffeaa92","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-08 12:10:09 +0000 UTC FinishedAt: 2026-09-08 12:26:54 +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:*7ccf2067-638a-49c2-a211-e60a11ae3103,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-workflow45vwq/series-workflow45vwq-convert-artifact-4272627425/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": "d8d16da1-0e76-4d87-8a21-16778f20e235", "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-workflow45vwq/series-workflow45vwq-build-action-1063971855/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow45vwq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof","alloc_pages_bulk_mempolicy_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"095225b1-6573-49ad-bfd9-b9a7dffeaa92","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-08 12:10:09 +0000 UTC FinishedAt: 2026-09-08 12:26:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*7ccf2067-638a-49c2-a211-e60a11ae3103,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-workflow45vwq/series-workflow45vwq-convert-artifact-4272627425/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": "d8d16da1-0e76-4d87-8a21-16778f20e235", "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-workflow45vwq/series-workflow45vwq-build-action-1063971855/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow45vwq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof","alloc_pages_bulk_mempolicy_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"095225b1-6573-49ad-bfd9-b9a7dffeaa92","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-08 12:26:54 +0000 UTC FinishedAt: 2026-09-08 12:26:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow45vwq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof","alloc_pages_bulk_mempolicy_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"095225b1-6573-49ad-bfd9-b9a7dffeaa92","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-08 12:26:54 +0000 UTC FinishedAt: 2026-09-08 12:26:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow45vwq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof","alloc_pages_bulk_mempolicy_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"095225b1-6573-49ad-bfd9-b9a7dffeaa92","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-08 12:26:54 +0000 UTC FinishedAt: 2026-09-08 12:27:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow45vwq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof","alloc_pages_bulk_mempolicy_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"095225b1-6573-49ad-bfd9-b9a7dffeaa92","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-08 12:26:54 +0000 UTC FinishedAt: 2026-09-08 12:26:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"095225b1-6573-49ad-bfd9-b9a7dffeaa92","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.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-workflow45vwq/series-workflow45vwq-convert-artifact-224047924/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow45vwq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof","alloc_pages_bulk_mempolicy_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"095225b1-6573-49ad-bfd9-b9a7dffeaa92","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-08 12:27:04 +0000 UTC FinishedAt: 2026-09-08 12:28:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow45vwq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof","alloc_pages_bulk_mempolicy_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"095225b1-6573-49ad-bfd9-b9a7dffeaa92","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-08 12:27:04 +0000 UTC FinishedAt: 2026-09-08 12:28:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*d8d16da1-0e76-4d87-8a21-16778f20e235,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-workflow45vwq/series-workflow45vwq-build-action-1063971855/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-workflow45vwq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof","alloc_pages_bulk_mempolicy_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"095225b1-6573-49ad-bfd9-b9a7dffeaa92","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-08 12:28:55 +0000 UTC FinishedAt: 2026-09-08 12:28:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow45vwq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof","alloc_pages_bulk_mempolicy_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"095225b1-6573-49ad-bfd9-b9a7dffeaa92","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-08 12:28:55 +0000 UTC FinishedAt: 2026-09-08 12:28:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow45vwq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof","alloc_pages_bulk_mempolicy_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"095225b1-6573-49ad-bfd9-b9a7dffeaa92","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-08 12:28:55 +0000 UTC FinishedAt: 2026-09-08 12:45:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow45vwq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof","alloc_pages_bulk_mempolicy_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"095225b1-6573-49ad-bfd9-b9a7dffeaa92","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-08 12:28:55 +0000 UTC FinishedAt: 2026-09-08 12:45:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*7ccf2067-638a-49c2-a211-e60a11ae3103,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-workflow45vwq/series-workflow45vwq-convert-artifact-224047924/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": "136b265d-947b-455d-8a80-008ec959e202", "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-workflow45vwq/series-workflow45vwq-build-action-2107970816/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow45vwq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof","alloc_pages_bulk_mempolicy_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"095225b1-6573-49ad-bfd9-b9a7dffeaa92","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-08 12:28:55 +0000 UTC FinishedAt: 2026-09-08 12:45:04 +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:*7ccf2067-638a-49c2-a211-e60a11ae3103,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-workflow45vwq/series-workflow45vwq-convert-artifact-224047924/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": "136b265d-947b-455d-8a80-008ec959e202", "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-workflow45vwq/series-workflow45vwq-build-action-2107970816/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow45vwq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof","alloc_pages_bulk_mempolicy_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"095225b1-6573-49ad-bfd9-b9a7dffeaa92","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-08 12:45:13 +0000 UTC FinishedAt: 2026-09-08 12:45:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow45vwq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof","alloc_pages_bulk_mempolicy_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"095225b1-6573-49ad-bfd9-b9a7dffeaa92","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-08 12:45:13 +0000 UTC FinishedAt: 2026-09-08 12:45:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow45vwq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof","alloc_pages_bulk_mempolicy_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"095225b1-6573-49ad-bfd9-b9a7dffeaa92","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-08 12:45:13 +0000 UTC FinishedAt: 2026-09-08 12:47:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow45vwq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof","alloc_pages_bulk_mempolicy_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"095225b1-6573-49ad-bfd9-b9a7dffeaa92","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-08 12:45:13 +0000 UTC FinishedAt: 2026-09-08 12:47:00 +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:*136b265d-947b-455d-8a80-008ec959e202,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-workflow45vwq/series-workflow45vwq-build-action-2107970816/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-workflow45vwq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof","alloc_pages_bulk_mempolicy_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"095225b1-6573-49ad-bfd9-b9a7dffeaa92","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-08 12:47:10 +0000 UTC FinishedAt: 2026-09-08 15:49:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow45vwq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof","alloc_pages_bulk_mempolicy_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"095225b1-6573-49ad-bfd9-b9a7dffeaa92","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-08 12:47:10 +0000 UTC FinishedAt: 2026-09-08 15:49:01 +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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof","alloc_pages_bulk_mempolicy_noprof"],"skip_cover_check":true},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:*d8d16da1-0e76-4d87-8a21-16778f20e235,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*136b265d-947b-455d-8a80-008ec959e202,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-workflow45vwq/series-workflow45vwq-build-action-1063971855/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-workflow45vwq/series-workflow45vwq-build-action-2107970816/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow45vwq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof","alloc_pages_bulk_mempolicy_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"095225b1-6573-49ad-bfd9-b9a7dffeaa92","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-08 12:47:10 +0000 UTC FinishedAt: 2026-09-08 12:47:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow45vwq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof","alloc_pages_bulk_mempolicy_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"095225b1-6573-49ad-bfd9-b9a7dffeaa92","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-08 12:47:10 +0000 UTC FinishedAt: 2026-09-08 12:47:41 +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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof","alloc_pages_bulk_mempolicy_noprof"],"skip_cover_check":true},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-workflow45vwq/series-workflow45vwq-convert-artifact-2148792669/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow45vwq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof","alloc_pages_bulk_mempolicy_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"095225b1-6573-49ad-bfd9-b9a7dffeaa92","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-08 12:47:10 +0000 UTC FinishedAt: 2026-09-08 12:47:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow45vwq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof","alloc_pages_bulk_mempolicy_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"095225b1-6573-49ad-bfd9-b9a7dffeaa92","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-08 12:47:10 +0000 UTC FinishedAt: 2026-09-08 12:47:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow45vwq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof","alloc_pages_bulk_mempolicy_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"095225b1-6573-49ad-bfd9-b9a7dffeaa92","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-08 12:47:10 +0000 UTC FinishedAt: 2026-09-08 12:47:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow45vwq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof","alloc_pages_bulk_mempolicy_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"095225b1-6573-49ad-bfd9-b9a7dffeaa92","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-08 12:47:48 +0000 UTC FinishedAt: 2026-09-08 15:49:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow45vwq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_bulk_noprof","alloc_pages_bulk_mempolicy_noprof"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7406dbbcf0b5513612d7291f5b92f31c92134bde","config_name":"upstream-apparmor-kasan.config","enable_configs":["KMSAN"],"series_id":"095225b1-6573-49ad-bfd9-b9a7dffeaa92","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-08 12:47:48 +0000 UTC FinishedAt: 2026-09-08 15:48:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*d8d16da1-0e76-4d87-8a21-16778f20e235,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*136b265d-947b-455d-8a80-008ec959e202,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-workflow45vwq/series-workflow45vwq-build-action-1063971855/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-workflow45vwq/series-workflow45vwq-build-action-2107970816/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-workflow45vwq/series-workflow45vwq-convert-artifact-2148792669/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,}