Name: series-workflownw88z Phase: Succeeded StartedAt: 2026-09-13 11:16:40 +0000 UTC FinishedAt: 2026-09-13 15:41:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflownw88z[0] Phase: Succeeded StartedAt: 2026-09-13 11:16:41 +0000 UTC FinishedAt: 2026-09-13 11:55:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflownw88z[0].run-triage Phase: Succeeded StartedAt: 2026-09-13 11:16:41 +0000 UTC FinishedAt: 2026-09-13 11:55:30 +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": "383fc05d4650b021f3c17e36a145106dcc61a294", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_SYSFS", "DAMON_PADDR", "DAMON_VADDR", "DAMON_RECLAIM" ], "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": "383fc05d4650b021f3c17e36a145106dcc61a294", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_SYSFS", "DAMON_PADDR", "DAMON_VADDR", "DAMON_RECLAIM" ], "series_id": "32f09c4e-3877-49c0-8c0b-a92117e19643" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "damos_adjust_quota", "kdamond_apply_schemes" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "", "base_commit": "383fc05d4650b021f3c17e36a145106dcc61a294", "base_tree": "mm-new" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDExOjUyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBTU9OJiMzNDssCiAgICAmIzM0O0RBTU9OX1NZU0ZTJiMzNDssCiAgICAmIzM0O0RBTU9OX1BBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX1ZBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX1JFQ0xBSU0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkYW1vc19hZGp1c3RfcXVvdGEmIzM0OywKICAgICYjMzQ7a2RhbW9uZF9hcHBseV9zY2hlbWVzJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhbiBlYXJseSByZXR1cm4gaW4gZGFtb3NfYWRqdXN0X3F1b3RhKCkgaWYgdGhlIHF1b3RhIGlzIGFscmVhZHkgZXhoYXVzdGVkIChkYW1vc19xdW90YV9pc19mdWxsKCkpLiBUaGlzIHNraXBzIHJlY2FsY3VsYXRpb24gb2YgdGhlIHNjaGVtZSBzY29yZSBoaXN0b2dyYW0gYW5kIG1pbl9zY29yZS5cblxuTm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3IgbWVtb3J5IGFsbG9jYXRpb25zIGFyZSBpbnRyb2R1Y2VkIG9yIHJlYWQuIFRoZSBza2lwcGVkIGhpc3RvZ3JhbSBidWZmZXIgKGMtXHUwMDNlcmVnaW9uc19zY29yZV9oaXN0b2dyYW0pIGlzIHN0cmljdGx5IGludGVybmFsIHRvIHRoaXMgZnVuY3Rpb24gYW5kIGlzIGFsd2F5cyB6ZXJvZWQgdmlhIG1lbXNldCgpIHByaW9yIHRvIHVzZSB3aGVuIGFjY2Vzc2VkLiBObyBkYXRhIGlzIGNvcGllZCB0byB1c2VyIHNwYWNlIG9yIHVzZWQgaW4gdW5pbml0aWFsaXplZCBzdGF0ZS4gQW55IHBvdGVudGlhbCBtZW1vcnkgc2FmZXR5IGlzc3VlcyAoc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzKSB3b3VsZCBiZSBkZXRlY3RlZCBieSBzdGFuZGFyZCBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBydW4gaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBpbiBEQU1PTiAobW0vZGFtb24vY29yZS5jKSBieSBpbnRyb2R1Y2luZyBhbiBlYXJseSBleGl0IGNoZWNrIGluIGRhbW9zX2FkanVzdF9xdW90YSgpIHdoZW4gdGhlIHF1b3RhIGlzIGFscmVhZHkgZnVsbC4gVGhpcyBhdm9pZHMgdW5uZWNlc3NhcnkgcmVnaW9uIHNjb3JlIGhpc3RvZ3JhbSBjYWxjdWxhdGlvbnMuIEJlY2F1c2UgdGhpcyBjaGFuZ2VzIHJlYWNoYWJsZSBleGVjdXRpb24gbG9naWMgaW4gYSBjb3JlIE1NIHN1YnN5c3RlbSBhY2Nlc3NpYmxlIHZpYSBEQU1PTiBzeXNmcyBhbmQgbW9kdWxlIGludGVyZmFjZXMgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBpdCBpcyB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDExOjUyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNzcwZjI5MDA3OTY4ZTgzYzk5NjczMDhjMWRjNjJhMTk5MWZkZjYzMVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gU2VwIDEzIDExOjUyOjAzIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL2NvcmUuYyBiL21tL2RhbW9uL2NvcmUuY1xuaW5kZXggMGM5OGY3ZTI2N2QwNy4uM2Q3YTk3M2VhOGI2ZiAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL2NvcmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vY29yZS5jXG5AQCAtMzMzNiw2ICYjNDM7MzMzNiw4IEBAIHN0YXRpYyB2b2lkIGRhbW9zX2FkanVzdF9xdW90YShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb3MgKnMpXG4gXHRcdFx0ZGFtb3NfdHJhY2VfZXN6KGMsIHMsIHF1b3RhKTtcbiBcdH1cbiBcbiYjNDM7XHRpZiAoZGFtb3NfcXVvdGFfaXNfZnVsbChxdW90YSwgYy1cdTAwM2VtaW5fcmVnaW9uX3N6KSlcbiYjNDM7XHRcdHJldHVybjtcbiBcdGlmICghYy1cdTAwM2VvcHMuZ2V0X3NjaGVtZV9zY29yZSlcbiBcdFx0cmV0dXJuO1xuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDExOjUyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBTU9OJiMzNDssCiAgICAmIzM0O0RBTU9OX1NZU0ZTJiMzNDssCiAgICAmIzM0O0RBTU9OX1BBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX1ZBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX1JFQ0xBSU0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkYW1vc19hZGp1c3RfcXVvdGEmIzM0OywKICAgICYjMzQ7a2RhbW9uZF9hcHBseV9zY2hlbWVzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgaW4gREFNT04gKG1tL2RhbW9uL2NvcmUuYykgYnkgaW50cm9kdWNpbmcgYW4gZWFybHkgZXhpdCBjaGVjayBpbiBkYW1vc19hZGp1c3RfcXVvdGEoKSB3aGVuIHRoZSBxdW90YSBpcyBhbHJlYWR5IGZ1bGwuIFRoaXMgYXZvaWRzIHVubmVjZXNzYXJ5IHJlZ2lvbiBzY29yZSBoaXN0b2dyYW0gY2FsY3VsYXRpb25zLiBCZWNhdXNlIHRoaXMgY2hhbmdlcyByZWFjaGFibGUgZXhlY3V0aW9uIGxvZ2ljIGluIGEgY29yZSBNTSBzdWJzeXN0ZW0gYWNjZXNzaWJsZSB2aWEgREFNT04gc3lzZnMgYW5kIG1vZHVsZSBpbnRlcmZhY2VzIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgaXQgaXMgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDc3MGYyOTAwNzk2OGU4M2M5OTY3MzA4YzFkYzYyYTE5OTFmZGY2MzEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU3VuIFNlcCAxMyAxMTo1MjowMyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL2RhbW9uL2NvcmUuYyBiL21tL2RhbW9uL2NvcmUuYwppbmRleCAwYzk4ZjdlMjY3ZDA3Li4zZDdhOTczZWE4YjZmIDEwMDY0NAotLS0gYS9tbS9kYW1vbi9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vY29yZS5jCkBAIC0zMzM2LDYgJiM0MzszMzM2LDggQEAgc3RhdGljIHZvaWQgZGFtb3NfYWRqdXN0X3F1b3RhKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vcyAqcykKIAkJCWRhbW9zX3RyYWNlX2VzeihjLCBzLCBxdW90YSk7CiAJfQogCiYjNDM7CWlmIChkYW1vc19xdW90YV9pc19mdWxsKHF1b3RhLCBjLSZndDttaW5fcmVnaW9uX3N6KSkKJiM0MzsJCXJldHVybjsKIAlpZiAoIWMtJmd0O29wcy5nZXRfc2NoZW1lX3Njb3JlKQogCQlyZXR1cm47CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTE6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg1OQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI4MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBEQU1PTiBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYG1tL2RhbW9uL2NvcmUuY2AuIEl0JiMzOTtzIGZvY3VzZWQgYXJvdW5kIHRoZSBgZGFtb3NfYWRqdXN0X3F1b3RhYCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IGxpbmUgMzMzNi4gVGhlIGtleSBhZGRpdGlvbiBzZWVtcyB0byBiZSB0aGlzIGNoZWNrOiBgaWYgKGRhbW9zX3F1b3RhX2lzX2Z1bGwocXVvdGEsIGMtJmd0O21pbl9yZWdpb25fc3opKSByZXR1cm47YC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgd2hhdCB0aGlzIGBkYW1vc19xdW90YV9pc19mdWxsYCBmdW5jdGlvbiBhY3R1YWxseSBkb2VzIGFuZCBpdHMgaW1wbGljYXRpb25zLgoKSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgaGVyZS4gSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciB0aGUgcHVycG9zZSBvZiBgZGFtb3NfYWRqdXN0X3F1b3RhYCwgaXRzIGludGVyYWN0aW9uIHdpdGggdGhlIERBTU9OIHN1YnN5c3RlbSwgYW5kIGl0cyByb2xlIGluIG1lbW9yeSBtYW5hZ2VtZW50IG9wdGltaXphdGlvbi4gV2hhdCBhcmUgaXRzIGNhbGxlcnMgYW5kIHdoYXQgZG9lcyB0aGlzIGNoYW5nZSBtb2RpZnk/IEl0JiMzOTtzIGFsbCBhYm91dCBob3cgd2UgYWRqdXN0IHRoZSBxdW90YXMuCgpJIHNob3VsZCBhbHNvIGNvbnNpZGVyIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBEQU1PTi4gQXJlIHRoZXJlIGFueSByZWxldmFudCBjb25maWd1cmF0aW9ucyB0aGF0IGNvdWxkIGltcGFjdCB0aGUgYmVoYXZpb3Igb2YgdGhpcyBwYXRjaD8gVGhlIGBjLSZndDttaW5fcmVnaW9uX3N6YCBpcyBpbXBvcnRhbnQsIHNvIEkgbmVlZCB0byBrbm93IGhvdyB0aGF0JiMzOTtzIGRlZmluZWQsIHVzZWQsIGFuZCBzZXQuIEkmIzM5O2xsIG5lZWQgdG8gdHJhY2UgdGhlIHVzYWdlIG9mIHRoZXNlIHZhcmlhYmxlcyBhbmQgdW5kZXJzdGFuZCB0aGVpciBpbmZsdWVuY2UuCgpTbywgSSBuZWVkIHRvIHVzZSBgcmVhZC1maWxlYCB0byBnZXQgdGhlIGNvbnRleHQgYXJvdW5kIGxpbmUgMzMzNiwgYW5kIGZpZ3VyZSBvdXQgd2hhdCYjMzk7cyBnb2luZyBvbiB3aXRoIHRoZSBxdW90YSBhZGp1c3RtZW50cy4gVGhlbiBJIG5lZWQgdG8gY29uZmlybSByZWFjaGFiaWxpdHkgYW5kIHBvdGVudGlhbCBpc3N1ZXMgaW50cm9kdWNlZCBieSB0aGlzIHNlZW1pbmdseSBzaW1wbGUgY29uZGl0aW9uYWwgc3RhdGVtZW50LiBUaGlzIGlzIGEgcG90ZW50aWFsIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiBvciBjaGFuZ2UgaW4gYmVoYXZpb3IuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTE6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMzIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzMzMjA6XHRcdFx0XHRkYW1vc190cmFjZV9lc3ooYywgcywgcXVvdGEpO1xuMzMyMTpcdFx0fVxuMzMyMjpcdFxuMzMyMzpcdFx0LyogTmV3IGNoYXJnZSB3aW5kb3cgc3RhcnRzICovXG4zMzI0Olx0XHRpZiAoIXRpbWVfaW5fcmFuZ2Vfb3BlbihqaWZmaWVzLCBxdW90YS1cdTAwM2VjaGFyZ2VkX2Zyb20sXG4zMzI1Olx0XHRcdFx0XHRxdW90YS1cdTAwM2VjaGFyZ2VkX2Zyb20gJiM0MztcbjMzMjY6XHRcdFx0XHRcdG1zZWNzX3RvX2ppZmZpZXMocXVvdGEtXHUwMDNlcmVzZXRfaW50ZXJ2YWwpKSkge1xuMzMyNzpcdFx0XHRpZiAoZGFtb3NfcXVvdGFfaXNfZnVsbChxdW90YSwgYy1cdTAwM2VtaW5fcmVnaW9uX3N6KSlcbjMzMjg6XHRcdFx0XHRzLVx1MDAzZXN0YXQucXRfZXhjZWVkcyYjNDM7JiM0Mzs7XG4zMzI5Olx0XHRcdHF1b3RhLVx1MDAzZXRvdGFsX2NoYXJnZWRfc3ogJiM0Mzs9IHF1b3RhLVx1MDAzZWNoYXJnZWRfc3o7XG4zMzMwOlx0XHRcdHF1b3RhLVx1MDAzZWNoYXJnZWRfZnJvbSA9IGppZmZpZXM7XG4zMzMxOlx0XHRcdHF1b3RhLVx1MDAzZWNoYXJnZWRfc3ogPSAwO1xuMzMzMjpcdFx0XHRpZiAodHJhY2VfZGFtb3NfZXN6X2VuYWJsZWQoKSlcbjMzMzM6XHRcdFx0XHRjYWNoZWRfZXN6ID0gcXVvdGEtXHUwMDNlZXN6O1xuMzMzNDpcdFx0XHRkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhKGMsIHMpO1xuMzMzNTpcdFx0XHRpZiAodHJhY2VfZGFtb3NfZXN6X2VuYWJsZWQoKSBcdTAwMjZcdTAwMjYgcXVvdGEtXHUwMDNlZXN6ICE9IGNhY2hlZF9lc3opXG4zMzM2Olx0XHRcdFx0ZGFtb3NfdHJhY2VfZXN6KGMsIHMsIHF1b3RhKTtcbjMzMzc6XHRcdH1cbjMzMzg6XHRcbjMzMzk6XHRcdGlmIChkYW1vc19xdW90YV9pc19mdWxsKHF1b3RhLCBjLVx1MDAzZW1pbl9yZWdpb25fc3opKVxuMzM0MDpcdFx0XHRyZXR1cm47XG4zMzQxOlx0XHRpZiAoIWMtXHUwMDNlb3BzLmdldF9zY2hlbWVfc2NvcmUpXG4zMzQyOlx0XHRcdHJldHVybjtcbjMzNDM6XHRcbjMzNDQ6XHRcdC8qIEZpbGwgdXAgdGhlIHNjb3JlIGhpc3RvZ3JhbSAqL1xuMzM0NTpcdFx0bWVtc2V0KGMtXHUwMDNlcmVnaW9uc19zY29yZV9oaXN0b2dyYW0sIDAsXG4zMzQ2Olx0XHRcdFx0c2l6ZW9mKCpjLVx1MDAzZXJlZ2lvbnNfc2NvcmVfaGlzdG9ncmFtKSAqXG4zMzQ3Olx0XHRcdFx0KERBTU9TX01BWF9TQ09SRSAmIzQzOyAxKSk7XG4zMzQ4Olx0XHRkYW1vbl9mb3JfZWFjaF90YXJnZXQodCwgYykge1xuMzM0OTpcdFx0XHRkYW1vbl9mb3JfZWFjaF9yZWdpb24ociwgdCkge1xuMzM1MDpcdFx0XHRcdGlmICghX19kYW1vc192YWxpZF90YXJnZXQociwgcywgYykpXG4zMzUxOlx0XHRcdFx0XHRjb250aW51ZTtcbjMzNTI6XHRcdFx0XHRpZiAoZGFtb3NfY29yZV9maWx0ZXJfb3V0KGMsIHQsIHIsIHMpKVxuMzM1MzpcdFx0XHRcdFx0Y29udGludWU7XG4zMzU0Olx0XHRcdFx0c2NvcmUgPSBjLVx1MDAzZW9wcy5nZXRfc2NoZW1lX3Njb3JlKGMsIHIsIHMpO1xuMzM1NTpcdFx0XHRcdGMtXHUwMDNlcmVnaW9uc19zY29yZV9oaXN0b2dyYW1bc2NvcmVdICYjNDM7PVxuMzM1NjpcdFx0XHRcdFx0ZGFtb25fc3pfcmVnaW9uKHIpO1xuMzM1NzpcdFx0XHRcdGlmIChzY29yZSBcdTAwM2UgbWF4X3Njb3JlKVxuMzM1ODpcdFx0XHRcdFx0bWF4X3Njb3JlID0gc2NvcmU7XG4zMzU5Olx0XHRcdH1cbjMzNjA6XHRcdH1cbjMzNjE6XHRcbjMzNjI6XHRcdC8qIFNldCB0aGUgbWluIHNjb3JlIGxpbWl0ICovXG4zMzYzOlx0XHRmb3IgKGN1bXVsYXRlZF9zeiA9IDAsIHNjb3JlID0gbWF4X3Njb3JlOyA7IHNjb3JlLS0pIHtcbjMzNjQ6XHRcdFx0Y3VtdWxhdGVkX3N6ICYjNDM7PSBjLVx1MDAzZXJlZ2lvbnNfc2NvcmVfaGlzdG9ncmFtW3Njb3JlXTtcbjMzNjU6XHRcdFx0aWYgKGN1bXVsYXRlZF9zeiBcdTAwM2U9IHF1b3RhLVx1MDAzZWVzeiB8fCAhc2NvcmUpXG4zMzY2Olx0XHRcdFx0YnJlYWs7XG4zMzY3Olx0XHR9XG4zMzY4Olx0XHRxdW90YS1cdTAwM2VtaW5fc2NvcmUgPSBzY29yZTtcbjMzNjk6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTE6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDMxNwoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDExNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEQU1PTiBBbmFseXNpcyAtIFF1aWNrIENoZWNrKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgZGFtb3NfYWRqdXN0X3F1b3RhYCwgYW5kIGl0JiMzOTtzIHJpZ2h0IHRoZXJlIGluIGBtbS9kYW1vbi9jb3JlLmNgLiBTdGFuZGFyZCBEQU1PTiB0ZXJyaXRvcnksIGFzIGV4cGVjdGVkLiBNeSBmaXJzdCBxdWVzdGlvbnMgYXJlIGFsd2F5cyBhYm91dCByZWFjaGFiaWxpdHkgYW5kIGZ1enppbmcgLSBpcyB0aGlzIGNvZGUgcGF0aCBleHBvc2VkIHRvIGFueSBpbnRlcmVzdGluZyBpbnB1dHMsIGFuZCBoYXZlIHdlIHRocm93biBldmVyeXRoaW5nIGF0IGl0IGFscmVhZHk/IFdlIHNob3VsZCBjaGVjayBmb3IgdXNlci1zcGFjZSBjb250cm9sLCB3aGljaCBpcyB0aGUgbW9zdCBsaWtlbHkgYXZlbnVlIGZvciBwcm9ibGVtcy4gQWgsIHllcywgREFNT04mIzM5O3Mgc3lzZnMgaW50ZXJmYWNlIChgL3N5cy9rZXJuZWwvbW0vZGFtb24vYWRtaW4vLi4uYCkgYW5kIGRlYnVnZnMgaW50ZXJmYWNlIChgL3N5cy9rZXJuZWwvZGVidWcvZGFtb24vLi4uYCkgLSB0aGF0JiMzOTtzIG91ciBlbnRyeSBwb2ludC4gTm93LCBsZXQmIzM5O3MganVzdCBxdWlja2x5IGNvbmZpcm0gdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24gdXNpbmcgS2NvbmZpZy4gQ2hlY2sgaWYgaXQmIzM5O3MgZXZlbiBlbmFibGVkIGFuZCBob3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTE6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIERBTU9OJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vS2NvbmZpZz0zPW1lbnUgXCYjMzQ7RGF0YSBBY2Nlc3MgTW9uaXRvcmluZ1wmIzM0O1xubW0vZGFtb24vS2NvbmZpZy00LVxubW0vZGFtb24vS2NvbmZpZzo1OmNvbmZpZyBEQU1PTlxubW0vZGFtb24vS2NvbmZpZy02LVx0Ym9vbCBcJiMzNDtEQU1PTjogRGF0YSBBY2Nlc3MgTW9uaXRvcmluZyBGcmFtZXdvcmtcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTE0LVxubW0vZGFtb24vS2NvbmZpZzoxNTpjb25maWcgREFNT05fREVCVUdfU0FOSVRZXG5tbS9kYW1vbi9LY29uZmlnLTE2LVx0Ym9vbCBcJiMzNDtDaGVjayBzYW5pdHkgb2YgREFNT04gY29kZVwmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctMjUtXG5tbS9kYW1vbi9LY29uZmlnOjI2OmNvbmZpZyBEQU1PTl9LVU5JVF9URVNUXG5tbS9kYW1vbi9LY29uZmlnLTI3LVx0Ym9vbCBcJiMzNDtUZXN0IGZvciBkYW1vblwmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4tLVxubW0vZGFtb24vS2NvbmZpZy0zNy1cbm1tL2RhbW9uL0tjb25maWc6Mzg6Y29uZmlnIERBTU9OX1ZBRERSXG5tbS9kYW1vbi9LY29uZmlnLTM5LVx0Ym9vbCBcJiMzNDtEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXNcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTQ2LVxubW0vZGFtb24vS2NvbmZpZzo0Nzpjb25maWcgREFNT05fUEFERFJcbm1tL2RhbW9uL0tjb25maWctNDgtXHRib29sIFwmIzM0O0RhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2VcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTU1LVxubW0vZGFtb24vS2NvbmZpZzo1Njpjb25maWcgREFNT05fVkFERFJfS1VOSVRfVEVTVFxubW0vZGFtb24vS2NvbmZpZy01Ny1cdGJvb2wgXCYjMzQ7VGVzdCBmb3IgREFNT04gb3BlcmF0aW9uc1wmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4tLVxubW0vZGFtb24vS2NvbmZpZy02Ny1cbm1tL2RhbW9uL0tjb25maWc6Njg6Y29uZmlnIERBTU9OX1NZU0ZTXG5tbS9kYW1vbi9LY29uZmlnLTY5LVx0Ym9vbCBcJiMzNDtEQU1PTiBzeXNmcyBpbnRlcmZhY2VcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTc1LVxubW0vZGFtb24vS2NvbmZpZzo3Njpjb25maWcgREFNT05fU1lTRlNfS1VOSVRfVEVTVFxubW0vZGFtb24vS2NvbmZpZy03Ny1cdGJvb2wgXCYjMzQ7VGVzdCBmb3IgZGFtb24gc3lzZnMgaW50ZXJmYWNlXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTg3LVxubW0vZGFtb24vS2NvbmZpZzo4ODpjb25maWcgREFNT05fUkVDTEFJTVxubW0vZGFtb24vS2NvbmZpZy04OS1cdGJvb2wgXCYjMzQ7QnVpbGQgREFNT04tYmFzZWQgcmVjbGFpbSAoREFNT05fUkVDTEFJTSlcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTk5LVxubW0vZGFtb24vS2NvbmZpZzoxMDA6Y29uZmlnIERBTU9OX0xSVV9TT1JUXG5tbS9kYW1vbi9LY29uZmlnLTEwMS1cdGJvb2wgXCYjMzQ7QnVpbGQgREFNT04tYmFzZWQgTFJVLWxpc3RzIHNvcnRpbmcgKERBTU9OX0xSVV9TT1JUKVwmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctMTA3LVxubW0vZGFtb24vS2NvbmZpZzoxMDg6Y29uZmlnIERBTU9OX1NUQVRcbm1tL2RhbW9uL0tjb25maWctMTA5LVx0Ym9vbCBcJiMzNDtCdWlsZCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIHN0YXQgKERBTU9OX1NUQVQpXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy0xMTUtXG5tbS9kYW1vbi9LY29uZmlnOjExNjpjb25maWcgREFNT05fU1RBVF9FTkFCTEVEX0RFRkFVTFRcbm1tL2RhbW9uL0tjb25maWctMTE3LVx0Ym9vbCBcJiMzNDtFbmFibGUgREFNT05fU1RBVCBieSBkZWZhdWx0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTE6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTM4MAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSBpbW1lZGlhdGUgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBEQU1PTiYjMzk7cyBNYWtlZmlsZSBhbmQgS2NvbmZpZyoqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IHRoZSBjb3JlIGJ1aWxkIGluZnJhc3RydWN0dXJlIGZvciB0aGUgRGF0YSBBY2Nlc3MgTW9uaXRvciAoREFNT04pIGltcGxlbWVudGF0aW9uLiBNeSBmaXJzdCBzdGVwIGlzIHRvIG9wZW4gdXAgYG1tL2RhbW9uL01ha2VmaWxlYCBhbmQgYG1tL2RhbW9uL0tjb25maWdgLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHRoZSBzdGFuZGFyZCBidWlsZCBydWxlcyBhbmQgbGlrZWx5IHRoZSBtb2R1bGUgZGVmaW5pdGlvbnMgaW4gdGhlIE1ha2VmaWxlLiBGcm9tIGEgS2NvbmZpZyBwZXJzcGVjdGl2ZSwgSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGdvdmVybiBEQU1PTiYjMzk7cyBmZWF0dXJlcywgZGVwZW5kZW5jaWVzLCBhbmQgYW55IHJ1bnRpbWUgYmVoYXZpb3JzIHRoYXQgYXJlIGNvbnRyb2xsZWQgdGhyb3VnaCBrZXJuZWwgY29uZmlndXJhdGlvbnMuIEkmIzM5O20ga2VlbiB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYnVpbGQgc3lzdGVtIGludGVncmF0ZXMgREFNT04gYW5kIHRvIHNlZSB0aGUgbW9kdWxhcml0eSBvZiB0aGUgZGVzaWduLCB3aGljaCBtaWdodCByZXZlYWwgYXNwZWN0cyByZWxhdGVkIHRvIGl0cyBzY2FsYWJpbGl0eSBhbmQgY29uZmlndXJhYmlsaXR5LiBBbmFseXppbmcgdGhlIE1ha2VmaWxlIHdpbGwgcXVpY2tseSBnaXZlIG1lIGluc2lnaHQgaW50byB0aGUgYnVpbGQgcHJvY2Vzcywgd2hpbGUgS2NvbmZpZyB3aWxsIGlsbHVtaW5hdGUgdGhlIGF2YWlsYWJsZSBjb25maWd1cmF0aW9uIGNob2ljZXMuIFRoaXMgaXMgbXkgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IERBTU9OIGlzIGJha2VkIGludG8gdGhlIGtlcm5lbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMTo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL01ha2VmaWxlJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdFxuICAgMzpcdG9iai15XHRcdFx0XHQ6PSBjb3JlLm9cbiAgIDQ6XHRvYmotJChDT05GSUdfREFNT05fVkFERFIpXHQmIzQzOz0gb3BzLWNvbW1vbi5vIHZhZGRyLm9cbiAgIDU6XHRvYmotJChDT05GSUdfREFNT05fUEFERFIpXHQmIzQzOz0gb3BzLWNvbW1vbi5vIHBhZGRyLm9cbiAgIDY6XHRvYmotJChDT05GSUdfREFNT05fU1lTRlMpXHQmIzQzOz0gc3lzZnMtY29tbW9uLm8gc3lzZnMtc2NoZW1lcy5vIHN5c2ZzLm9cbiAgIDc6XHRvYmotJChDT05GSUdfREFNT05fUkVDTEFJTSlcdCYjNDM7PSBtb2R1bGVzLWNvbW1vbi5vIHJlY2xhaW0ub1xuICAgODpcdG9iai0kKENPTkZJR19EQU1PTl9MUlVfU09SVClcdCYjNDM7PSBtb2R1bGVzLWNvbW1vbi5vIGxydV9zb3J0Lm9cbiAgIDk6XHRvYmotJChDT05GSUdfREFNT05fU1RBVClcdCYjNDM7PSBtb2R1bGVzLWNvbW1vbi5vIHN0YXQub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDExOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU4NjUKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiA0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aGUgZXhwZXJ0OgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBEQU1PTiBDb21waWxhdGlvbioqCgpPa2F5LCBzbyBgb2JqLXkgOj0gY29yZS5vYCBpbiBgbW0vZGFtb24vYCBpcyBvbmx5IGJ1aWx0IGlmIGBDT05GSUdfREFNT049eWAuIFRoaXMgbWVhbnMgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayBgbW0vTWFrZWZpbGVgIHRvIGNvbmZpcm0gdGhlIGJ1aWxkIGRlcGVuZGVuY2llcyBhbmQgaG93IGBDT05GSUdfREFNT05gIGlzIGhhbmRsZWQgaW4gdGhhdCBjb250ZXh0LiBJIG5lZWQgdG8gc2VlIHdoYXQgZWxzZSBpbiB0aGF0IE1ha2VmaWxlIHBvdGVudGlhbGx5IGluZmx1ZW5jZXMgd2hldGhlciBvciBub3QgYGNvcmUub2AgZXZlbiBnZXRzIGNvbnNpZGVyZWQgZm9yIGNvbXBpbGF0aW9uIGFuZCBsaW5raW5nLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgaG9saXN0aWMgdmlldyBvZiB0aGUgZGVwZW5kZW5jeSBjaGFpbi4gSSBhbSBwcmV0dHkgc3VyZSB0aGlzIGlzIGEgd2VsbCB0cm9kZGVuIHBhcnQgb2YgdGhlIGNvZGUsIGJ1dCBiZXN0IHRvIGRvdWJsZSBjaGVjayBhbmQgcnVsZSBvdXQgYW55IHVuZXhwZWN0ZWQgaW50ZXJhY3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMTo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYW1vbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlPTEzNj1vYmotJChDT05GSUdfREVCVUdfUEFHRV9SRUYpICYjNDM7PSBkZWJ1Z19wYWdlX3JlZi5vXG5tbS9NYWtlZmlsZToxMzc6b2JqLSQoQ09ORklHX0RBTU9OKSAmIzQzOz0gZGFtb24vXG5tbS9NYWtlZmlsZS0xMzgtb2JqLSQoQ09ORklHX0hBUkRFTkVEX1VTRVJDT1BZKSAmIzQzOz0gdXNlcmNvcHkub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMTo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MTY4CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkludmVzdGlnYXRpbmcgdGhlIERBTU9OIENvbmZpZ3VyYXRpb24gYW5kIFF1b3RhIEFkanVzdG1lbnQqKgoKQWxyaWdodCwgc28gYENPTkZJR19EQU1PTmAgZGlyZWN0bHkgbGVhZHMgdG8gdGhlIGJ1aWxkIG9mIHRoZSBgZGFtb24vYCBkaXJlY3RvcnkuIFRoYXQgbXVjaCBpcyBjbGVhci4gTXkgbmV4dCBtb3ZlIGlzIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBxdW90YSBmb3IgREFNT04gaXMgYWRqdXN0ZWQuIFRvIGRvIHRoaXMsIEkgbmVlZCB0byBwaW5wb2ludCBldmVyeSBpbnN0YW5jZSBvZiB0aGUgYGRhbW9zX2FkanVzdF9xdW90YWAgZnVuY3Rpb24gY2FsbCB3aXRoaW4gdGhlIGBtbS9kYW1vbi9jb3JlLmNgIGZpbGUuIFRoaXMgaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zLiBUaGUgYWRqdXN0bWVudCBvZiB0aGUgcXVvdGEgaXMgd2hlcmUgSSYjMzk7bGwgZmluZCB0aGUgaW5mb3JtYXRpb24gZm9yIG9wdGltaXppbmcgaXRzIG9wZXJhdGlvbnMuIEkmIzM5O2xsIG5lZWQgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBwYXRoIGZyb20gdGhvc2UgY2FsbHMgdG8gc2VlIHdoZXJlIHRoZXNlIHF1b3RhIGFkanVzdG1lbnRzIGhhcHBlbiBhbmQgdW5kZXIgd2hhdCBjb25kaXRpb25zLiBGcm9tIHRoZXJlLCBJIGNhbiBkZXRlcm1pbmUgaWYgYW55IGNoYW5nZXMgYXJlIG5lZWRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTE6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb3NfYWRqdXN0X3F1b3RhJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jPTMyOTA9c3RhdGljIHZvaWQgZGFtb3NfdHJhY2VfZXN6KHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vcyAqcyxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzMwMy1cbm1tL2RhbW9uL2NvcmUuYzozMzA0OnN0YXRpYyB2b2lkIGRhbW9zX2FkanVzdF9xdW90YShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb3MgKnMpXG5tbS9kYW1vbi9jb3JlLmMtMzMwNS17XG4tLVxubW0vZGFtb24vY29yZS5jPTMzODc9c3RhdGljIHZvaWQga2RhbW9uZF9hcHBseV9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmMpXG4tLVxubW0vZGFtb24vY29yZS5jLTM0MDItXG5tbS9kYW1vbi9jb3JlLmM6MzQwMzpcdFx0ZGFtb3NfYWRqdXN0X3F1b3RhKGMsIHMpO1xubW0vZGFtb24vY29yZS5jLTM0MDQtXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDExOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY2MjAKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIGBrZGFtb25kX2FwcGx5X3NjaGVtZXNgKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IGBrZGFtb25kX2FwcGx5X3NjaGVtZXNgLiBUaGF0IGZ1bmN0aW9uIGluIGBtbS9kYW1vbi9jb3JlLmNgIGlzIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyLCB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucyDigJMgd2hlcmUgREFNT04gYWN0dWFsbHkgZXhlY3V0ZXMgaXRzIHNjaGVtZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IGl0JiMzOTtzIG9yY2hlc3RyYXRpbmcgdGhlIG1vbml0b3JpbmcgYW5kIGFkYXB0YXRpb24uIEkgc2hvdWxkIGNoZWNrIHRoZSBzdXJyb3VuZGluZyBjb2RlIGZvciBob3cgaXQmIzM5O3MgY2FsbGVkIGFuZCB3aGVuLiBUaGUgY29udGV4dCBpcyBjcnVjaWFsIGhlcmUuIFdoYXQgdHJpZ2dlcnMgaXRzIGV4ZWN1dGlvbj8gV2hhdCBkYXRhIGlzIGl0IHdvcmtpbmcgd2l0aD8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIGJvdHRsZW5lY2tzIG9yIHBvdGVudGlhbCBhcmVhcyBmb3IgaW1wcm92ZW1lbnQgaW4gdGhlIGNvcmUgYWxnb3JpdGhtPyBJJiMzOTtsbCBwcm9iYWJseSBzdGFydCBieSB0cmFjaW5nIHRoZSBleGVjdXRpb24gcGF0aCBhbmQgdGhlbiBkaXZlIGludG8gdGhlIGRldGFpbHMuIEkgd2lsbCBhbHNvIG1ha2Ugbm90ZXMgb2YgaG93IHRoZSBwcm9jZXNzIGludGVyYWN0cyB3aXRoIGFsbCB0aGUgc2NoZW1lcy4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMTo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMzODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzM4MDpcdFx0XHRpZiAoc2l0ZXIgPT0gcylcbjMzODE6XHRcdFx0XHRicmVhaztcbjMzODI6XHRcdFx0c2lkeCYjNDM7JiM0Mzs7XG4zMzgzOlx0XHR9XG4zMzg0Olx0XHR0cmFjZV9jYWxsX19kYW1vc19zdGF0X2FmdGVyX2FwcGx5X2ludGVydmFsKGNpZHgsIHNpZHgsIFx1MDAyNnMtXHUwMDNlc3RhdCk7XG4zMzg1Olx0fVxuMzM4NjpcdFxuMzM4NzpcdHN0YXRpYyB2b2lkIGtkYW1vbmRfYXBwbHlfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjKVxuMzM4ODpcdHtcbjMzODk6XHRcdHN0cnVjdCBkYW1vbl90YXJnZXQgKnQ7XG4zMzkwOlx0XHRzdHJ1Y3QgZGFtb3MgKnM7XG4zMzkxOlx0XHRib29sIGhhc19zY2hlbWVzX3RvX2FwcGx5ID0gZmFsc2U7XG4zMzkyOlx0XHR1bnNpZ25lZCBsb25nIG1heF9yZWdpb25fc3o7XG4zMzkzOlx0XG4zMzk0Olx0XHRkYW1vbl9mb3JfZWFjaF9zY2hlbWUocywgYykge1xuMzM5NTpcdFx0XHRpZiAodGltZV9iZWZvcmUoYy1cdTAwM2VwYXNzZWRfc2FtcGxlX2ludGVydmFscywgcy1cdTAwM2VuZXh0X2FwcGx5X3NpcykpXG4zMzk2Olx0XHRcdFx0Y29udGludWU7XG4zMzk3Olx0XG4zMzk4Olx0XHRcdGlmICghcy1cdTAwM2V3bWFya3MuYWN0aXZhdGVkKVxuMzM5OTpcdFx0XHRcdGNvbnRpbnVlO1xuMzQwMDpcdFxuMzQwMTpcdFx0XHRoYXNfc2NoZW1lc190b19hcHBseSA9IHRydWU7XG4zNDAyOlx0XG4zNDAzOlx0XHRcdGRhbW9zX2FkanVzdF9xdW90YShjLCBzKTtcbjM0MDQ6XHRcdH1cbjM0MDU6XHRcbjM0MDY6XHRcdGlmICghaGFzX3NjaGVtZXNfdG9fYXBwbHkpXG4zNDA3Olx0XHRcdHJldHVybjtcbjM0MDg6XHRcbjM0MDk6XHRcdG1heF9yZWdpb25fc3ogPSBkYW1vbl9yZWdpb25fc3pfbGltaXQoYyk7XG4zNDEwOlx0XHRtdXRleF9sb2NrKFx1MDAyNmMtXHUwMDNld2Fsa19jb250cm9sX2xvY2spO1xuMzQxMTpcdFx0ZGFtb25fZm9yX2VhY2hfdGFyZ2V0KHQsIGMpIHtcbjM0MTI6XHRcdFx0aWYgKGMtXHUwMDNlb3BzLnRhcmdldF92YWxpZCBcdTAwMjZcdTAwMjYgYy1cdTAwM2VvcHMudGFyZ2V0X3ZhbGlkKHQpID09IGZhbHNlKSB7XG4zNDEzOlx0XHRcdFx0ZGFtb25fZm9yX2VhY2hfc2NoZW1lKHMsIGMpIHtcbjM0MTQ6XHRcdFx0XHRcdGlmIChzLVx1MDAzZXF1b3RhLmNoYXJnZV90YXJnZXRfZnJvbSAhPSB0KVxuMzQxNTpcdFx0XHRcdFx0XHRjb250aW51ZTtcbjM0MTY6XHRcdFx0XHRcdHMtXHUwMDNlcXVvdGEuY2hhcmdlX3RhcmdldF9mcm9tID0gTlVMTDtcbjM0MTc6XHRcdFx0XHRcdHMtXHUwMDNlcXVvdGEuY2hhcmdlX2FkZHJfZnJvbSA9IDA7XG4zNDE4Olx0XHRcdFx0fVxuMzQxOTpcdFx0XHRcdGNvbnRpbnVlO1xuMzQyMDpcdFx0XHR9XG4zNDIxOlx0XHRcdGRhbW9zX2FwcGx5X3RhcmdldChjLCB0LCBtYXhfcmVnaW9uX3N6KTtcbjM0MjI6XHRcdH1cbjM0MjM6XHRcbjM0MjQ6XHRcdGRhbW9uX2Zvcl9lYWNoX3NjaGVtZShzLCBjKSB7XG4zNDI1Olx0XHRcdGlmICh0aW1lX2JlZm9yZShjLVx1MDAzZXBhc3NlZF9zYW1wbGVfaW50ZXJ2YWxzLCBzLVx1MDAzZW5leHRfYXBwbHlfc2lzKSlcbjM0MjY6XHRcdFx0XHRjb250aW51ZTtcbjM0Mjc6XHRcdFx0ZGFtb3Nfd2Fsa19jb21wbGV0ZShjLCBzKTtcbjM0Mjg6XHRcdFx0ZGFtb3Nfc2V0X25leHRfYXBwbHlfc2lzKHMsIGMpO1xuMzQyOTpcdFx0XHRzLVx1MDAzZWxhc3RfYXBwbGllZCA9IE5VTEw7XG4zNDMwOlx0XHRcdGRhbW9zX3RyYWNlX3N0YXQoYywgcyk7XG4zNDMxOlx0XHR9XG4zNDMyOlx0XHRtdXRleF91bmxvY2soXHUwMDI2Yy1cdTAwM2V3YWxrX2NvbnRyb2xfbG9jayk7XG4zNDMzOlx0fVxuMzQzNDpcdFxuMzQzNTpcdCNpZmRlZiBDT05GSUdfREFNT05fREVCVUdfU0FOSVRZXG4zNDM2Olx0c3RhdGljIHZvaWQgZGFtb25fdmVyaWZ5X21lcmdlX3R3b19yZWdpb25zKFxuMzQzNzpcdFx0XHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpsLCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyKVxuMzQzODpcdHtcbjM0Mzk6XHRcdC8qIGRhbW9uX21lcmdlX3R3b19yZWdpb25zKCkgbWF5IGNyZWF0ZWQgaW5jb3JyZWN0IGxlZnQgcmVnaW9uICovXG4zNDQwOlx0XHRXQVJOX09OQ0UobC1cdTAwM2Vhci5zdGFydCBcdTAwM2U9IGwtXHUwMDNlYXIuZW5kLCBcJiMzNDtsOiAlbHUtJWx1LCByOiAlbHUtJWx1XFxuXCYjMzQ7LFxuMzQ0MTpcdFx0XHRcdGwtXHUwMDNlYXIuc3RhcnQsIGwtXHUwMDNlYXIuZW5kLCByLVx1MDAzZWFyLnN0YXJ0LCByLVx1MDAzZWFyLmVuZCk7XG4zNDQyOlx0fVxuMzQ0MzpcdCNlbHNlXG4zNDQ0Olx0c3RhdGljIHZvaWQgZGFtb25fdmVyaWZ5X21lcmdlX3R3b19yZWdpb25zKFxuMzQ0NTpcdFx0XHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpsLCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyKVxuMzQ0NjpcdHtcbjM0NDc6XHR9XG4zNDQ4Olx0I2VuZGlmXG4zNDQ5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDExOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc5NTgKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA2NTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgZGFtb3NfYWRqdXN0X3F1b3RhYCBGdW5jdGlvbjogQSBEZWVwIERpdmUqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIGRvd24gd2hhdCYjMzk7cyBoYXBwZW5pbmcgd2l0aGluIGBkYW1vc19hZGp1c3RfcXVvdGFgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIGl0cyBjb3JlIGZ1bmN0aW9uLCBhbmQgZnJvbSB0aGUgY29kZSwgaXQgc2VlbXMgdG8gYmUgbWFuYWdpbmcgYW5kIGFkanVzdGluZyBxdW90YXMgcmVsYXRlZCB0byBtZW1vcnkgcmVnaW9ucywgbGlrZWx5IHdpdGhpbiBhIERBTU9OIGNvbnRleHQuIEkgc2VlIHNldmVyYWwga2V5IGNvbXBvbmVudHM6IHF1b3RhcywgdGFyZ2V0cywgcmVnaW9ucywgYW5kIHRpbWVzdGFtcHMuIEl0IHNlZW1zIHRvIGhhdmUgYSBwZXJpb2RpYyBpbnRlcnZhbC4KCkZpcnN0LCBJIHNlZSB0aGUgY29kZSBpcyBjaGVja2luZyBpZiB0aGUgcXVvdGEgaXMgYWN0aXZlLCBlYXJseSBleGl0aW5nIGlmIG5vdC4gVGhlbiBJJiMzOTttIGZvbGxvd2luZyB0aGlzIHBhcnQgdGhhdCBkZWZpbmVzIHRoZSBzdGFydCBvZiBhIG5ldyB3aW5kb3cgZm9yIGF1dG8gdHVuaW5nLiBJZiBhbiBhdXRvLXR1bmluZyBpbnRlcnZhbCBpcyBzZXQsIGl0IGNoZWNrcyBpZiB0aGUgY3VycmVudCB0aW1lIGlzIHdpdGhpbiB0aGUgdmFsaWQgcmFuZ2UuIElmIG5vdCwgaXQgdXBkYXRlcyB0aGUgJiMzNDt0dW5lZCBmcm9tJiMzNDsgdGltZXN0YW1wIGFuZCBjYWxscyBgZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YWAuIFRyYWNpbmcgb2YgYGVzemAgKGVmZmVjdGl2ZSBzaXplKSBjaGFuZ2VzIGFyZSBpbmNsdWRlZC4gQSB2ZXJ5IHNpbWlsYXIgdGhpbmcgaXMgaGFwcGVuaW5nIGZvciBhICYjMzQ7Y2hhcmdlIHdpbmRvdyYjMzQ7LCBhbmQgYGRhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGFgIGlzIGNhbGxlZCBhZ2Fpbi4KClRoZSBpbnRlcmVzdGluZyBiaXQsIGhlcmUsIGlzIHRoZSBjb25kaXRpb25hbC4gUHJpb3IgdG8gYSBjZXJ0YWluIHBhdGNoLCB0aGUgY29kZSB3b3VsZCBjYWxjdWxhdGUgdGhlIGhpc3RvZ3JhbSBhbmQgdGhlIG1pbmltdW0gc2NvcmUuIFRoZSBjb2RlIGN1cnJlbnRseSBza2lwcyBhbGwgdGhpcyBpZiB0aGUgcXVvdGEgaXMgZnVsbCwgdGhlIHJlYXNvbiBiZWluZzoKCkJlZm9yZSB0aGUgcGF0Y2g6Ckl0IGNoZWNrZWQgYGlmICghYy0mZ3Q7b3BzLmdldF9zY2hlbWVfc2NvcmUpIHJldHVybjtgIGFuZCB0aGVuIGNhbGN1bGF0ZWQgaGlzdG9ncmFtIGFuZCBgcXVvdGEtJmd0O21pbl9zY29yZWAuCldpdGggdGhlIHBhdGNoOgpgaWYgKGRhbW9zX3F1b3RhX2lzX2Z1bGwocXVvdGEsIGMtJmd0O21pbl9yZWdpb25fc3opKSByZXR1cm47YApJZiB0aGUgcXVvdGEgaXMgZnVsbCwgc2tpcCBjYWxjdWxhdGluZyB0aGUgc2NvcmUgaGlzdG9ncmFtIGFuZCBtaW4gc2NvcmUgbGltaXQhCgpUaGlzIG9wdGltaXphdGlvbiBsaWtlbHkgYWltcyB0byBhdm9pZCB1bm5lY2Vzc2FyeSBjb21wdXRhdGlvbiB3aGVuIHRoZSBxdW90YSBpcyBhbHJlYWR5IGV4aGF1c3RlZC4gSXQmIzM5O3MgYSBwZXJmb3JtYW5jZSB0d2VhayDigJMgd2h5IGNhbGN1bGF0ZSBzY29yZXMgd2hlbiB5b3UgY2FuJiMzOTt0IGFsbG9jYXRlIG1vcmUgYW55d2F5PyBCdXQsIEkmIzM5O2QgbGlrZSB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IGEgYml0IG1vcmUuIEkgdGhpbmsgaXQgd291bGQgYmUgd2lzZSB0byByZWFkIHRoZSBjb21taXQgbG9nIHRvIGdldCB0aGUgcmF0aW9uYWxlIGZvciB0aGlzIGNoYW5nZSBhbmQgdGhlIGlzc3VlcyBpdCBhZGRyZXNzZWQsIHRvIGdldCBhIGRlZXBlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSB0cmFkZS1vZmZzLiBJdCYjMzk7cyBsaWtlbHkgYW4gaW1wb3J0YW50IG9wdGltaXphdGlvbiBpbiBhIGNyaXRpY2FsIHBhdGguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDExOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9zX3F1b3RhX2lzX2Z1bGwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmM9MjY2OD1zdGF0aWMgdm9pZCBkYW1vc19jaGFyZ2VfcXVvdGEoc3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjY4NC1cbm1tL2RhbW9uL2NvcmUuYzoyNjg1OnN0YXRpYyBib29sIGRhbW9zX3F1b3RhX2lzX2Z1bGwoc3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSxcbm1tL2RhbW9uL2NvcmUuYy0yNjg2LVx0XHR1bnNpZ25lZCBsb25nIG1pbl9yZWdpb25fc3opXG4tLVxubW0vZGFtb24vY29yZS5jPTI2OTk9c3RhdGljIHZvaWQgZGFtb3NfYXBwbHlfc2NoZW1lKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG4tLVxubW0vZGFtb24vY29yZS5jLTI3NTctXHRcdGRhbW9zX2NoYXJnZV9xdW90YShxdW90YSwgc3osIHN6X2FwcGxpZWQpO1xubW0vZGFtb24vY29yZS5jOjI3NTg6XHRcdGlmIChkYW1vc19xdW90YV9pc19mdWxsKHF1b3RhLCBjLVx1MDAzZW1pbl9yZWdpb25fc3opKSB7XG5tbS9kYW1vbi9jb3JlLmMtMjc1OS1cdFx0XHRxdW90YS1cdTAwM2VjaGFyZ2VfdGFyZ2V0X2Zyb20gPSB0O1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0yNzcwPXN0YXRpYyB2b2lkIGRhbW9uX2RvX2FwcGx5X3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqYyxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjc4NS1cdFx0LyogQ2hlY2sgdGhlIHF1b3RhICovXG5tbS9kYW1vbi9jb3JlLmM6Mjc4NjpcdFx0aWYgKGRhbW9zX3F1b3RhX2lzX2Z1bGwocXVvdGEsIGMtXHUwMDNlbWluX3JlZ2lvbl9zeikpXG5tbS9kYW1vbi9jb3JlLmMtMjc4Ny1cdFx0XHRjb250aW51ZTtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MzMwND1zdGF0aWMgdm9pZCBkYW1vc19hZGp1c3RfcXVvdGEoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zMzI2LVx0XHRcdFx0bXNlY3NfdG9famlmZmllcyhxdW90YS1cdTAwM2VyZXNldF9pbnRlcnZhbCkpKSB7XG5tbS9kYW1vbi9jb3JlLmM6MzMyNzpcdFx0aWYgKGRhbW9zX3F1b3RhX2lzX2Z1bGwocXVvdGEsIGMtXHUwMDNlbWluX3JlZ2lvbl9zeikpXG5tbS9kYW1vbi9jb3JlLmMtMzMyOC1cdFx0XHRzLVx1MDAzZXN0YXQucXRfZXhjZWVkcyYjNDM7JiM0Mzs7XG4tLVxubW0vZGFtb24vY29yZS5jLTMzMzgtXG5tbS9kYW1vbi9jb3JlLmM6MzMzOTpcdGlmIChkYW1vc19xdW90YV9pc19mdWxsKHF1b3RhLCBjLVx1MDAzZW1pbl9yZWdpb25fc3opKVxubW0vZGFtb24vY29yZS5jLTMzNDAtXHRcdHJldHVybjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTE6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTY2MgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlRyYWNpbmcgdGhlIGBkYW1vc19hZGp1c3RfcXVvdGFgIEZ1bmN0aW9uIENhbGwqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSSBzZWUgdGhhdCBgZGFtb3NfYWRqdXN0X3F1b3RhYCBpcyBkZWZpbmVkIGFzIHN0YXRpYywgd2hpY2ggaXMgdGhlIGZpcnN0IGltcG9ydGFudCBwb2ludC4gVGhpcyBtZWFucyBpdHMgc2NvcGUgaXMgcmVzdHJpY3RlZCB0byB0aGUgY3VycmVudCBjb21waWxhdGlvbiB1bml0LCBzbyBJIGRvbiYjMzk7dCBuZWVkIHRvIHdvcnJ5IGFib3V0IGl0IGJlaW5nIGRpcmVjdGx5IGFjY2Vzc2libGUgZnJvbSBvdXRzaWRlIGl0cyBzb3VyY2UgZmlsZS4gTmV4dCwgSSYjMzk7bSBub3RpbmcgdGhhdCBgZGFtb3NfYWRqdXN0X3F1b3RhYCBpcyBjYWxsZWQgZnJvbSBga2RhbW9uZF9hcHBseV9zY2hlbWVzYC4gQW5kLCBsb29raW5nIGZ1cnRoZXIgdXAgdGhlIGNhbGwgc3RhY2ssIGBrZGFtb25kX2FwcGx5X3NjaGVtZXNgIGlzIGNhbGxlZCBmcm9tIGBrZGFtb25kX2ZuYCDigJMgdGhlIGt0aHJlYWQgZGVkaWNhdGVkIHRvIERBTU9OLCB3aGljaCBjb25maXJtcyBteSB1bmRlcnN0YW5kaW5nLgoKR2l2ZW4gdGhpcyBjb250ZXh0LCBJIG5vdyB3YW50IHRvIGludmVzdGlnYXRlIGhvdyBmcmVxdWVudGx5IGBrZGFtb25kX2FwcGx5X3NjaGVtZXNgIGlzIGNhbGxlZCwgYW5kIGZyb20gd2hlcmUuIEtub3dpbmcgdGhlIGNhbGxlcnMgb2YgdGhpcyBmdW5jdGlvbiB3aWxsIHByb3ZpZGUgYSBnb29kIHBpY3R1cmUgb2YgdGhlIGludGVyYWN0aW9uIGFuZCBpbnRlZ3JhdGlvbiBvZiBkaWZmZXJlbnQgREFNT04gcGFydHMuIFNwZWNpZmljYWxseSwgaXQgd2lsbCBnaXZlIG1lIHNvbWUgaW5zaWdodCBvbiB3aGF0JiMzOTtzIHRyaWdnZXJpbmcgdGhlIGV4ZWN1dGlvbiBvZiBgZGFtb3NfYWRqdXN0X3F1b3RhYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTE6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a2RhbW9uZF9hcHBseV9zY2hlbWVzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jPTMzNzE9c3RhdGljIHZvaWQgZGFtb3NfdHJhY2Vfc3RhdChzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb3MgKnMpXG4tLVxubW0vZGFtb24vY29yZS5jLTMzODYtXG5tbS9kYW1vbi9jb3JlLmM6MzM4NzpzdGF0aWMgdm9pZCBrZGFtb25kX2FwcGx5X3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqYylcbm1tL2RhbW9uL2NvcmUuYy0zMzg4LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MzkyMD1zdGF0aWMgaW50IGtkYW1vbmRfZm4odm9pZCAqZGF0YSlcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzk5Ni1cdFx0Lypcbm1tL2RhbW9uL2NvcmUuYzozOTk3Olx0XHQgKiBkbyBrZGFtb25kX2NhbGwoKSBhbmQga2RhbW9uZF9hcHBseV9zY2hlbWVzKCkgYWZ0ZXJcbm1tL2RhbW9uL2NvcmUuYy0zOTk4LVx0XHQgKiBrZGFtb25kX21lcmdlX3JlZ2lvbnMoKSBpZiBwb3NzaWJsZSwgdG8gcmVkdWNlIG92ZXJoZWFkXG4tLVxubW0vZGFtb24vY29yZS5jLTQwMTEtXHRcdGlmICghbGlzdF9lbXB0eShcdTAwMjZjdHgtXHUwMDNlc2NoZW1lcykpXG5tbS9kYW1vbi9jb3JlLmM6NDAxMjpcdFx0XHRrZGFtb25kX2FwcGx5X3NjaGVtZXMoY3R4KTtcbm1tL2RhbW9uL2NvcmUuYy00MDEzLVx0XHRlbHNlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDExOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMjg0CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjYwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IERBTU9OIEludmVzdGlnYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSB0cnlpbmcgdG8gZmlndXJlIG91dCBob3cgc3l6a2FsbGVyIHBsYXlzIHdpdGggREFNT04uIEZpcnN0IHRob3VnaHQgaXMsIGRvZXMgc3l6a2FsbGVyIGV2ZW4gKmtub3cqIGFib3V0IERBTU9OPyBEb2VzIGl0IGhhdmUgc3BlY2lmaWMgREFNT04gZGVzY3JpcHRpb25zPyBIb2xkIG9uLCBzeXpsYW5nJiMzOTtzIHRvb2xzIGNhbiYjMzk7dCBqdXN0IGJsaW5kbHkgc2VhcmNoIHRoZSBrZXJuZWwgc291cmNlcy4gV2UgbmVlZCB0byBjaGVjayBzeXprYWxsZXImIzM5O3Mgc3VwcG9ydCBpbmRpcmVjdGx5LCBtYXliZSB2aWEgc3lzZnMuIEFoLCB3YWl0LCB0aGVyZSYjMzk7cyBhIGNydWNpYWwgcG9pbnQgaGVyZSB0aGF0IEkgYWxtb3N0IG1pc3NlZCEgVGhpcyBgZ3JlcHBlcmAgdG9vbCAqZXhwbGljaXRseSogc2F5cyBpdCBjYW4mIzM5O3QgaGFuZGxlIHN5emxhbmcgZGVzY3JpcHRpb25zIG9yIHRob3NlIHBzZXVkby1zeXNjYWxscyBzdGFydGluZyB3aXRoICYjMzQ7c3l6XyYjMzQ7LiBUaGF0JiMzOTtzIGJlY2F1c2UgdGhvc2UgYXJlbiYjMzk7dCBhY3R1YWxseSAqaW4qIHRoZSBrZXJuZWwgc291cmNlIGl0c2VsZi4gV2UmIzM5O3JlIHN1cHBvc2VkIHRvIGJlIHVzaW5nIGByZWFkLXN5ei1zcGVjYCBhbmQgYHN5ei1ncmVwcGVyYCBpbnN0ZWFkLCBidXQgYXJlIHRob3NlIGV2ZW4gZGVmaW5lZD8KCkxldCBtZSBxdWlja2x5IHJldmlldyB0aGUgZGVjbGFyZWQgdG9vbHMuLi4gTm9wZSEgTG9va3MgbGlrZSBgcmVhZC1zeXotc3BlY2AgYW5kIGBzeXotZ3JlcHBlcmAgYXJlIG5vdCBhdmFpbGFibGUsIHNvIHRoYXQmIzM5O3MgdGhhdC4gTm8gbmVlZCB0byB3b3JyeSBhYm91dCB0aGVtIGZvciBub3cuCgpBbHJpZ2h0LCBsZXQmIzM5O3MgcmVmb2N1cy4gRm9yZ2V0IHN5emthbGxlciBmb3IgYSBtb21lbnQsIGFuZCB0aGluayBhYm91dCBEQU1PTiBkaXJlY3RseS4gQ2FuIGl0IGJlIHJlYWNoZWQgZnJvbSB1c2Vyc3BhY2U/IEhvdyBpcyBEQU1PTiBjb250cm9sbGVkIGZyb20gdXNlcnNwYWNlPyBUaW1lIHRvIGRlbHZlIGludG8gdGhlIGBtbS9kYW1vbi9zeXNmcy5jYCBmaWxlIGFuZCBzZWUgd2hhdCYjMzk7cyB3aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMTo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL3N5c2ZzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdC8qXG4gICAzOlx0ICogREFNT04gc3lzZnMgSW50ZXJmYWNlXG4gICA0Olx0ICovXG4gICA1Olx0XG4gICA2Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQuaFx1MDAzZVxuICAgNzpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuICAgODpcdFxuICAgOTpcdCNpbmNsdWRlIFwmIzM0O3N5c2ZzLWNvbW1vbi5oXCYjMzQ7XG4gIDEwOlx0XG4gIDExOlx0LypcbiAgMTI6XHQgKiBpbml0IHJlZ2lvbiBkaXJlY3RvcnlcbiAgMTM6XHQgKi9cbiAgMTQ6XHRcbiAgMTU6XHRzdHJ1Y3QgZGFtb25fc3lzZnNfcmVnaW9uIHtcbiAgMTY6XHRcdHN0cnVjdCBrb2JqZWN0IGtvYmo7XG4gIDE3Olx0XHRzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZSBhcjtcbiAgMTg6XHR9O1xuICAxOTpcdFxuICAyMDpcdHN0YXRpYyBzdHJ1Y3QgZGFtb25fc3lzZnNfcmVnaW9uICpkYW1vbl9zeXNmc19yZWdpb25fYWxsb2Modm9pZClcbiAgMjE6XHR7XG4gIDIyOlx0XHRyZXR1cm4ga3phbGxvY19vYmooc3RydWN0IGRhbW9uX3N5c2ZzX3JlZ2lvbik7XG4gIDIzOlx0fVxuICAyNDpcdFxuICAyNTpcdHN0YXRpYyBzc2l6ZV90IHN0YXJ0X3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcbiAgMjY6XHRcdFx0Y2hhciAqYnVmKVxuICAyNzpcdHtcbiAgMjg6XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19yZWdpb24gKnJlZ2lvbiA9IGNvbnRhaW5lcl9vZihrb2JqLFxuICAyOTpcdFx0XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19yZWdpb24sIGtvYmopO1xuICAzMDpcdFxuICAzMTpcdFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcJiMzNDslbHVcXG5cJiMzNDssIHJlZ2lvbi1cdTAwM2Vhci5zdGFydCk7XG4gIDMyOlx0fVxuICAzMzpcdFxuICAzNDpcdHN0YXRpYyBzc2l6ZV90IHN0YXJ0X3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXG4gIDM1Olx0XHRcdGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxuICAzNjpcdHtcbiAgMzc6XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19yZWdpb24gKnJlZ2lvbiA9IGNvbnRhaW5lcl9vZihrb2JqLFxuICAzODpcdFx0XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19yZWdpb24sIGtvYmopO1xuICAzOTpcdFx0aW50IGVyciA9IGtzdHJ0b3VsKGJ1ZiwgMCwgXHUwMDI2cmVnaW9uLVx1MDAzZWFyLnN0YXJ0KTtcbiAgNDA6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTE6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEzOTkKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA2MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgdGhlIERBTU9OIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBEQU1PTiBzaXR1YXRpb24uIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBEQU1PTi4gRmlyc3QsIEkmIzM5O20gbm90aW5nIGBDT05GSUdfREFNT05gIGFuZCBgQ09ORklHX0RBTU9OX1NZU0ZTYC4gQnV0IGlzIHRoYXQgKmFsbCo/IEkgaGF2ZSBhIGZlZWxpbmcgdGhlcmUgbWlnaHQgYmUgbW9yZSB0byBpdC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGludmVzdGlnYXRlIHdoZXRoZXIgdGhlIERBTU9OIHJlY2xhaW0gb3IgREFNT04gbHJ1X3NvcnQgY29tcG9uZW50cyBhcmUgYWxzbyBsZXZlcmFnaW5nIERBTU9OLiBJdCYjMzk7cyBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIGFuZCBpbnRlcmNvbm5lY3Rpb25zIG9mIHRoZXNlIGZlYXR1cmVzLgoKVGhlIHF1aWNrZXN0IHdheSB0byBnZXQgYSBkZWZpbml0aXZlIGFuc3dlciwgYW5kIHJlYWxseSB1bmRlcnN0YW5kIHRoZSBicm9hZGVyIGNvbnRleHQsIGlzIHRvIGNoZWNrIGBtbS9kYW1vbi9LY29uZmlnYC4gVGhhdCBLY29uZmlnIGZpbGUgc2hvdWxkIGxheSBvdXQgKmFsbCogdGhlIGRlcGVuZGVuY2llcywgdGhlIGFzc29jaWF0ZWQgb3B0aW9ucywgYW5kIGdpdmUgbWUgYSBjb21wbGV0ZSwgdG9wLWRvd24gdmlldyBvZiBob3cgZXZlcnl0aGluZyBmaXRzIHRvZ2V0aGVyIHdpdGhpbiB0aGUgREFNT04gZWNvc3lzdGVtLiBJdOKAmXMgdGhlIHNvdXJjZSBvZiB0cnV0aCBmb3IgdGhlIGNvbmZpZ3VyYXRpb24gbG9naWMgYW5kIHdpbGwgZ2l2ZSBtZSB3aGF0IEkgbmVlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTE6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9kYW1vbi9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0XG4gICAzOlx0bWVudSBcJiMzNDtEYXRhIEFjY2VzcyBNb25pdG9yaW5nXCYjMzQ7XG4gICA0Olx0XG4gICA1Olx0Y29uZmlnIERBTU9OXG4gICA2Olx0XHRib29sIFwmIzM0O0RBTU9OOiBEYXRhIEFjY2VzcyBNb25pdG9yaW5nIEZyYW1ld29ya1wmIzM0O1xuICAgNzpcdFx0aGVscFxuICAgODpcdFx0ICBUaGlzIGJ1aWxkcyBhIGZyYW1ld29yayB0aGF0IGFsbG93cyBrZXJuZWwgc3Vic3lzdGVtcyB0byBtb25pdG9yXG4gICA5Olx0XHQgIGFjY2VzcyBmcmVxdWVuY3kgb2YgZWFjaCBtZW1vcnkgcmVnaW9uLiBUaGUgaW5mb3JtYXRpb24gY2FuIGJlIHVzZWZ1bFxuICAxMDpcdFx0ICBmb3IgcGVyZm9ybWFuY2UtY2VudHJpYyBEUkFNIGxldmVsIG1lbW9yeSBtYW5hZ2VtZW50LlxuICAxMTpcdFxuICAxMjpcdFx0ICBTZWUgaHR0cHM6Ly93d3cua2VybmVsLm9yZy9kb2MvaHRtbC9sYXRlc3QvbW0vZGFtb24vaW5kZXguaHRtbCBmb3JcbiAgMTM6XHRcdCAgbW9yZSBpbmZvcm1hdGlvbi5cbiAgMTQ6XHRcbiAgMTU6XHRjb25maWcgREFNT05fREVCVUdfU0FOSVRZXG4gIDE2Olx0XHRib29sIFwmIzM0O0NoZWNrIHNhbml0eSBvZiBEQU1PTiBjb2RlXCYjMzQ7XG4gIDE3Olx0XHRkZXBlbmRzIG9uIERBTU9OXG4gIDE4Olx0XHRoZWxwXG4gIDE5Olx0XHQgIFRoaXMgZW5hYmxlcyBhZGRpdGlvbmFsIERBTU9OIGRlYnVnZ2luZy1wdXJwb3NlIHNhbml0eSBjaGVja3MgaW5cbiAgMjA6XHRcdCAgREFNT04gY29kZS4gIFRoaXMgY2FuIGJlIHVzZWZ1bCBmb3IgZmluZGluZyBidWdzLCBidXQgaW1wb3NlXG4gIDIxOlx0XHQgIGFkZGl0aW9uYWwgb3ZlcmhlYWQuICBUaGlzIGlzIHRoZXJlZm9yZSByZWNvbW1lbmRlZCB0byBiZSBlbmFibGVkIG9uXG4gIDIyOlx0XHQgIG9ubHkgZGV2ZWxvcG1lbnQgYW5kIHRlc3Qgc2V0dXBzLlxuICAyMzpcdFxuICAyNDpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuICAyNTpcdFxuICAyNjpcdGNvbmZpZyBEQU1PTl9LVU5JVF9URVNUXG4gIDI3Olx0XHRib29sIFwmIzM0O1Rlc3QgZm9yIGRhbW9uXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbiAgMjg6XHRcdGRlcGVuZHMgb24gREFNT04gXHUwMDI2XHUwMDI2IEtVTklUPXlcbiAgMjk6XHRcdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXG4gIDMwOlx0XHRoZWxwXG4gIDMxOlx0XHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTiBLdW5pdCB0ZXN0IHN1aXRlLlxuICAzMjpcdFxuICAzMzpcdFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBLVW5pdCBhbmQgdW5pdCB0ZXN0cyBpbiBnZW5lcmFsLCBwbGVhc2UgcmVmZXJcbiAgMzQ6XHRcdCAgdG8gdGhlIEtVbml0IGRvY3VtZW50YXRpb24uXG4gIDM1Olx0XG4gIDM2Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gIDM3Olx0XG4gIDM4Olx0Y29uZmlnIERBTU9OX1ZBRERSXG4gIDM5Olx0XHRib29sIFwmIzM0O0RhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlc1wmIzM0O1xuICA0MDpcdFx0ZGVwZW5kcyBvbiBEQU1PTiBcdTAwMjZcdTAwMjYgTU1VXG4gIDQxOlx0XHRzZWxlY3QgUEFHRV9JRExFX0ZMQUdcbiAgNDI6XHRcdGRlZmF1bHQgREFNT05cbiAgNDM6XHRcdGhlbHBcbiAgNDQ6XHRcdCAgVGhpcyBidWlsZHMgdGhlIGRlZmF1bHQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciBEQU1PTlxuICA0NTpcdFx0ICB0aGF0IHdvcmsgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXMuXG4gIDQ2Olx0XG4gIDQ3Olx0Y29uZmlnIERBTU9OX1BBRERSXG4gIDQ4Olx0XHRib29sIFwmIzM0O0RhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2VcJiMzNDtcbiAgNDk6XHRcdGRlcGVuZHMgb24gREFNT04gXHUwMDI2XHUwMDI2IE1NVVxuICA1MDpcdFx0c2VsZWN0IFBBR0VfSURMRV9GTEFHXG4gIDUxOlx0XHRkZWZhdWx0IERBTU9OXG4gIDUyOlx0XHRoZWxwXG4gIDUzOlx0XHQgIFRoaXMgYnVpbGRzIHRoZSBkZWZhdWx0IGRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgREFNT05cbiAgNTQ6XHRcdCAgdGhhdCB3b3JrcyBmb3IgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2UuXG4gIDU1Olx0XG4gIDU2Olx0Y29uZmlnIERBTU9OX1ZBRERSX0tVTklUX1RFU1RcbiAgNTc6XHRcdGJvb2wgXCYjMzQ7VGVzdCBmb3IgREFNT04gb3BlcmF0aW9uc1wmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4gIDU4Olx0XHRkZXBlbmRzIG9uIERBTU9OX1ZBRERSIFx1MDAyNlx1MDAyNiBLVU5JVD15XG4gIDU5Olx0XHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xuICA2MDpcdFx0aGVscFxuICA2MTpcdFx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04gdmlydHVhbCBhZGRyZXNzZXMgb3BlcmF0aW9ucyBLdW5pdCB0ZXN0IHN1aXRlLlxuICA2MjpcdFxuICA2MzpcdFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBLVW5pdCBhbmQgdW5pdCB0ZXN0cyBpbiBnZW5lcmFsLCBwbGVhc2UgcmVmZXJcbiAgNjQ6XHRcdCAgdG8gdGhlIEtVbml0IGRvY3VtZW50YXRpb24uXG4gIDY1Olx0XG4gIDY2Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gIDY3Olx0XG4gIDY4Olx0Y29uZmlnIERBTU9OX1NZU0ZTXG4gIDY5Olx0XHRib29sIFwmIzM0O0RBTU9OIHN5c2ZzIGludGVyZmFjZVwmIzM0O1xuICA3MDpcdFx0ZGVwZW5kcyBvbiBEQU1PTiBcdTAwMjZcdTAwMjYgU1lTRlNcbiAgNzE6XHRcdGRlZmF1bHQgREFNT05cbiAgNzI6XHRcdGhlbHBcbiAgNzM6XHRcdCAgVGhpcyBidWlsZHMgdGhlIHN5c2ZzIGludGVyZmFjZSBmb3IgREFNT04uICBUaGUgdXNlciBzcGFjZSBjYW4gdXNlXG4gIDc0Olx0XHQgIHRoZSBpbnRlcmZhY2UgZm9yIGFyYml0cmFyeSBkYXRhIGFjY2VzcyBtb25pdG9yaW5nLlxuICA3NTpcdFxuICA3NjpcdGNvbmZpZyBEQU1PTl9TWVNGU19LVU5JVF9URVNUXG4gIDc3Olx0XHRib29sIFwmIzM0O1Rlc3QgZm9yIGRhbW9uIHN5c2ZzIGludGVyZmFjZVwmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4gIDc4Olx0XHRkZXBlbmRzIG9uIERBTU9OX1NZU0ZTIFx1MDAyNlx1MDAyNiBLVU5JVD15XG4gIDc5Olx0XHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xuICA4MDpcdFx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMTo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjc0NAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipOYXZpZ2F0aW5nIHRoZSBLY29uZmlnIExhbmRzY2FwZTogQSBRdWljayBBdWRpdCoqCgpSaWdodCwgbGV0JiMzOTtzIHNlZS4uLiB0aGUgY29kZSByZXZpZXcgaGFzIGZsYWdnZWQgc29tZXRoaW5nIGluIHRoZSBgbW0vZGFtb24vS2NvbmZpZ2AgZmlsZS4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgSSYjMzk7bSBhbHJlYWR5IGFudGljaXBhdGluZyB3aGF0IG1pZ2h0IGJlIGhhcHBlbmluZyBoZXJlLiBHaXZlbiB0aGUgc2NvcGUgb2YgdGhlIHBvdGVudGlhbCBpbXBhY3QsIGl0JiMzOTtzIGVzc2VudGlhbCB0byBxdWlja2x5IGFuZCBjYXJlZnVsbHkgcmV2aWV3IHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIGRlcGVuZGVuY2llcyB3aXRoaW4gdGhpcyBzcGVjaWZpYyBLY29uZmlnIGZpbGUuIFRoaXMgbGlrZWx5IHJlbGF0ZXMgdG8gdGhlIER5bmFtaWMgQWRhcHRpdmUgTWVtb3J5IE9wdGltaXplciAoREFNT04pIGZyYW1ld29yaywgc28gSSB3YW50IHRvIG1ha2Ugc3VyZSBJIGdyYXNwIHRoZSBkZXBlbmRlbmNpZXMgYW5kIHBvdGVudGlhbCBpbXBhY3RzIG9mIGFueSBjaGFuZ2VzIGJlaW5nIHByb3Bvc2VkLiBUaGlzIHF1aWNrIGNoZWNrIHdpbGwgZ2l2ZSBtZSBhIGJhc2VsaW5lIHRvIGRlY2lkZSB0aGUgbmV4dCBhY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDExOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZGFtb24vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDgxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgODE6XHRcdCAgVGhpcyBidWlsZHMgdGhlIERBTU9OIHN5c2ZzIGludGVyZmFjZSBLdW5pdCB0ZXN0IHN1aXRlLlxuICA4MjpcdFxuICA4MzpcdFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBLVW5pdCBhbmQgdW5pdCB0ZXN0cyBpbiBnZW5lcmFsLCBwbGVhc2UgcmVmZXJcbiAgODQ6XHRcdCAgdG8gdGhlIEtVbml0IGRvY3VtZW50YXRpb24uXG4gIDg1Olx0XG4gIDg2Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gIDg3Olx0XG4gIDg4Olx0Y29uZmlnIERBTU9OX1JFQ0xBSU1cbiAgODk6XHRcdGJvb2wgXCYjMzQ7QnVpbGQgREFNT04tYmFzZWQgcmVjbGFpbSAoREFNT05fUkVDTEFJTSlcJiMzNDtcbiAgOTA6XHRcdGRlcGVuZHMgb24gREFNT05fUEFERFJcbiAgOTE6XHRcdGhlbHBcbiAgOTI6XHRcdCAgVGhpcyBidWlsZHMgdGhlIERBTU9OLWJhc2VkIHJlY2xhbWF0aW9uIHN1YnN5c3RlbS4gIEl0IGZpbmRzIHBhZ2VzXG4gIDkzOlx0XHQgIHRoYXQgbm90IGFjY2Vzc2VkIGZvciBhIGxvbmcgdGltZSAoY29sZCkgdXNpbmcgREFNT04gYW5kIHJlY2xhaW1cbiAgOTQ6XHRcdCAgdGhvc2UuXG4gIDk1Olx0XG4gIDk2Olx0XHQgIFRoaXMgaXMgc3VnZ2VzdGVkIHRvIGJlIHVzZWQgYXMgYSBwcm9hY3RpdmUgYW5kIGxpZ2h0d2VpZ2h0XG4gIDk3Olx0XHQgIHJlY2xhbWF0aW9uIHVuZGVyIGxpZ2h0IG1lbW9yeSBwcmVzc3VyZSwgd2hpbGUgdGhlIHRyYWRpdGlvbmFsIHBhZ2VcbiAgOTg6XHRcdCAgc2Nhbm5pbmctYmFzZWQgcmVjbGFtYXRpb24gaXMgdXNlZCBmb3IgaGVhdnkgcHJlc3N1cmUuXG4gIDk5Olx0XG4gMTAwOlx0Y29uZmlnIERBTU9OX0xSVV9TT1JUXG4gMTAxOlx0XHRib29sIFwmIzM0O0J1aWxkIERBTU9OLWJhc2VkIExSVS1saXN0cyBzb3J0aW5nIChEQU1PTl9MUlVfU09SVClcJiMzNDtcbiAxMDI6XHRcdGRlcGVuZHMgb24gREFNT05fUEFERFJcbiAxMDM6XHRcdGhlbHBcbiAxMDQ6XHRcdCAgVGhpcyBidWlsZHMgdGhlIERBTU9OLWJhc2VkIExSVS1saXN0cyBzb3J0aW5nIHN1YnN5c3RlbS4gIEl0IHRyaWVzIHRvXG4gMTA1Olx0XHQgIHByb3RlY3QgZnJlcXVlbnRseSBhY2Nlc3NlZCAoaG90KSBwYWdlcyB3aGlsZSByYXJlbHkgYWNjZXNzZWQgKGNvbGQpXG4gMTA2Olx0XHQgIHBhZ2VzIHJlY2xhaW1lZCBmaXJzdCB1bmRlciBtZW1vcnkgcHJlc3N1cmUuXG4gMTA3Olx0XG4gMTA4Olx0Y29uZmlnIERBTU9OX1NUQVRcbiAxMDk6XHRcdGJvb2wgXCYjMzQ7QnVpbGQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBzdGF0IChEQU1PTl9TVEFUKVwmIzM0O1xuIDExMDpcdFx0ZGVwZW5kcyBvbiBEQU1PTl9QQUREUlxuIDExMTpcdFx0aGVscFxuIDExMjpcdFx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04tYmFzZWQgYWNjZXNzIG1vbml0b3Jpbmcgc3RhdGlzdGljcyBzdWJzeXN0ZW0uXG4gMTEzOlx0XHQgIEl0IHJ1bnMgREFNT04gYW5kIGV4cG9zZSBhY2Nlc3MgbW9uaXRvcmluZyByZXN1bHRzIGluIHNpbXBsZSBzdGF0XG4gMTE0Olx0XHQgIG1ldHJpY3MuXG4gMTE1Olx0XG4gMTE2Olx0Y29uZmlnIERBTU9OX1NUQVRfRU5BQkxFRF9ERUZBVUxUXG4gMTE3Olx0XHRib29sIFwmIzM0O0VuYWJsZSBEQU1PTl9TVEFUIGJ5IGRlZmF1bHRcJiMzNDtcbiAxMTg6XHRcdGRlcGVuZHMgb24gREFNT05fU1RBVFxuIDExOTpcdFx0ZGVmYXVsdCBEQU1PTl9TVEFUXG4gMTIwOlx0XHRoZWxwXG4gMTIxOlx0XHQgIFdoZXRoZXIgdG8gZW5hYmxlIERBTU9OX1NUQVQgYnkgZGVmYXVsdC4gIFVzZXJzIGNhbiBkaXNhYmxlIGl0IGluXG4gMTIyOlx0XHQgIGJvb3Qgb3IgcnVudGltZSB1c2luZyBpdHMgJiMzOTtlbmFibGVkJiMzOTsgcGFyYW1ldGVyLlxuIDEyMzpcdFxuIDEyNDpcdGVuZG1lbnVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTE6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM1ODcKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA1ODUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqV29ydGhGdXp6aW5nIERlY2lzaW9uIGZvciBtbS9kYW1vbi9jb3JlLmMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgYG1tL2RhbW9uL2NvcmUuY2AgaXMgcGFydCBvZiBtZW1vcnkgbWFuYWdlbWVudCwgc28gaXQgZmFsbHMgc3F1YXJlbHkgd2l0aGluIHRoZSAmIzM0O2NvcmUgc3Vic3lzdGVtcyYjMzQ7IGNhdGVnb3J5LiBUaGVyZWZvcmUsIGJhc2VkIG9uIHRoZSBjcml0ZXJpYSwgbW9kaWZ5aW5nIGNvZGUgaGVyZSBzdHJvbmdseSBzdWdnZXN0cyBpdCYjMzk7cyAqV29ydGhGdXp6aW5nPXRydWUqLgoKRmlyc3QsIGxldCYjMzk7cyBlbGltaW5hdGUgdGhlIG5lZ2F0aXZlcy4gSXMgdGhpcyBhIGRvY3VtZW50YXRpb24gY2hhbmdlPyBOby4gSXMgaXQgaGFyZHdhcmUtc3BlY2lmaWMgYW5kIHVucmVhY2hhYmxlPyBOb3BlLCB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHB1cmUgTU0sIGFuZCBhbWQ2NCBpcyBzdXBwb3J0ZWQuIEFuZCBpdCYjMzk7cyBkZWZpbml0ZWx5IG5vdCBzb21lIHVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoLiBTbywgd2UmIzM5O3JlIGNsZWFyIG9uIHRoZSAqZmFsc2UqIGNvbmRpdGlvbnMuCgpOb3cgZm9yIHRoZSAqdHJ1ZSogYXNzZXNzbWVudC4gU2luY2Ugd2UgYXJlIG1vZGlmeWluZyBjb2RlIGluc2lkZSBhIGNvcmUgc3Vic3lzdGVtLCBgV29ydGhGdXp6aW5nPXRydWVgIQoKTm93LCB0aGUgaW1wb3J0YW50IHBhcnQ6IGVuYWJsaW5nIGFuZCByZWFjaGluZyBgZGFtb3NfYWRqdXN0X3F1b3RhYC4gVG8gZmlndXJlIG91dCB0aGUgY29uZmlncywgYG1tL2RhbW9uL2NvcmUuY2AgaXMgdGhlIHRhcmdldCwgc3BlY2lmaWNhbGx5LCBgZGFtb3NfYWRqdXN0X3F1b3RhYC4gV2Ugc2VlIGl0JiMzOTtzIGxpbmtlZCB0byBgQ09ORklHX0RBTU9OYCwgY29uZmlybWVkIGJ5IHRoZSBgTWFrZWZpbGVgLiBPa2F5LCBidXQgaG93IGlzIHRoaXMgYWN0dWFsbHkgdHJpZ2dlcmVkPyBJdCYjMzk7cyBjYWxsZWQgZnJvbSBga2RhbW9uZF9hcHBseV9zY2hlbWVzYCwgYW5kIHRoYXQgcmVxdWlyZXMgREFNT04gdG8gYmUgY29uZmlndXJlZCB3aXRoIHNjaGVtZXMgYW5kIHJ1bm5pbmcuIFNvLCB0aGUgcXVlc3Rpb24gaXMsIGhvdyBkbyB5b3Ugc2V0IHVwIERBTU9OIHdpdGggc2NoZW1lcz8gRWl0aGVyIHVzaW5nIGBEQU1PTl9TWVNGU2AsIG9yIHdpdGggdGhlIERBTU9OIG1vZHVsZXMgbGlrZSBgREFNT05fUkVDTEFJTWAgb3IgYERBTU9OX0xSVV9TT1JUYCBvciBgREFNT05fU1RBVGAgb3IgY3VzdG9tIG9wZXJhdGlvbnMgKGBEQU1PTl9WQUREUmAsIGBEQU1PTl9QQUREUmApLgoKSG9sZCBvbi4gTG9va2luZyBhdCBgZGFtb3NfYWRqdXN0X3F1b3RhYCwgdGhlcmUmIzM5O3MgYSBrZXkgY2hlY2sgaGVyZTogYGMtJmd0O29wcy5nZXRfc2NoZW1lX3Njb3JlYC4gVGhhdCBmdW5jdGlvbiBwb2ludGVyIGhhcyB0byBiZSBzZXQgdXAuIFdoZXJlIGlzICp0aGF0KiBhc3NpZ25lZD8gTm93IEkgbmVlZCB0byBkbyBzb21lIG1vcmUgZGlnZ2luZyBhbmQgZ3JlcCBmb3IgYGdldF9zY2hlbWVfc2NvcmVgLiBUaGlzIHBvaW50ZXIgdG8gYSBmdW5jdGlvbiB3aWxsIGxlYWQgbWUgdG8gZmlndXJlIG91dCBob3cgdG8gYmVzdCBmdXp6IHRoaXMgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTE6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Z2V0X3NjaGVtZV9zY29yZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYz0yNDIyPXN0YXRpYyBib29sIGRhbW9zX3ZhbGlkX3RhcmdldChzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0yNDI2LVxubW0vZGFtb24vY29yZS5jOjI0Mjc6XHRpZiAoIXJldCB8fCAhZGFtb3NfcXVvdGFfaXNfc2V0KFx1MDAyNnMtXHUwMDNlcXVvdGEpIHx8ICFjLVx1MDAzZW9wcy5nZXRfc2NoZW1lX3Njb3JlKVxubW0vZGFtb24vY29yZS5jLTI0MjgtXHRcdHJldHVybiByZXQ7XG5tbS9kYW1vbi9jb3JlLmMtMjQyOS1cbm1tL2RhbW9uL2NvcmUuYzoyNDMwOlx0cmV0dXJuIGMtXHUwMDNlb3BzLmdldF9zY2hlbWVfc2NvcmUoYywgciwgcykgXHUwMDNlPSBzLVx1MDAzZXF1b3RhLm1pbl9zY29yZTtcbm1tL2RhbW9uL2NvcmUuYy0yNDMxLX1cbi0tXG5tbS9kYW1vbi9jb3JlLmM9MzMwND1zdGF0aWMgdm9pZCBkYW1vc19hZGp1c3RfcXVvdGEoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zMzQwLVx0XHRyZXR1cm47XG5tbS9kYW1vbi9jb3JlLmM6MzM0MTpcdGlmICghYy1cdTAwM2VvcHMuZ2V0X3NjaGVtZV9zY29yZSlcbm1tL2RhbW9uL2NvcmUuYy0zMzQyLVx0XHRyZXR1cm47XG4tLVxubW0vZGFtb24vY29yZS5jLTMzNTMtXHRcdFx0XHRjb250aW51ZTtcbm1tL2RhbW9uL2NvcmUuYzozMzU0Olx0XHRcdHNjb3JlID0gYy1cdTAwM2VvcHMuZ2V0X3NjaGVtZV9zY29yZShjLCByLCBzKTtcbm1tL2RhbW9uL2NvcmUuYy0zMzU1LVx0XHRcdGMtXHUwMDNlcmVnaW9uc19zY29yZV9oaXN0b2dyYW1bc2NvcmVdICYjNDM7PVxuLS1cbm1tL2RhbW9uL3BhZGRyLmM9NDYyPXN0YXRpYyBpbnQgX19pbml0IGRhbW9uX3BhX2luaXRjYWxsKHZvaWQpXG4tLVxubW0vZGFtb24vcGFkZHIuYy00NzMtXHRcdC5hcHBseV9zY2hlbWUgPSBkYW1vbl9wYV9hcHBseV9zY2hlbWUsXG5tbS9kYW1vbi9wYWRkci5jOjQ3NDpcdFx0LmdldF9zY2hlbWVfc2NvcmUgPSBkYW1vbl9wYV9zY2hlbWVfc2NvcmUsXG5tbS9kYW1vbi9wYWRkci5jLTQ3NS1cdH07XG4tLVxubW0vZGFtb24vdmFkZHIuYz0xMTQzPXN0YXRpYyBpbnQgX19pbml0IGRhbW9uX3ZhX2luaXRjYWxsKHZvaWQpXG4tLVxubW0vZGFtb24vdmFkZHIuYy0xMTU1LVx0XHQuYXBwbHlfc2NoZW1lID0gZGFtb25fdmFfYXBwbHlfc2NoZW1lLFxubW0vZGFtb24vdmFkZHIuYzoxMTU2Olx0XHQuZ2V0X3NjaGVtZV9zY29yZSA9IGRhbW9uX3ZhX3NjaGVtZV9zY29yZSxcbm1tL2RhbW9uL3ZhZGRyLmMtMTE1Ny1cdH07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDExOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MjU5CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTY5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRBTU9OIFNjaGVtZSBTY29yZSBhbmQgQ29udHJvbCoqCgpPa2F5LCBzbyB0aGUgYGdldF9zY2hlbWVfc2NvcmVgIGZ1bmN0aW9uLCB0aGF0JiMzOTtzIGRlZmluZWQgaW4gdHdvIHBsYWNlcyBkZXBlbmRpbmcgb24gd2hldGhlciB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHBoeXNpY2FsIG9yIHZpcnR1YWwgYWRkcmVzc2VzLCByaWdodD8gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGxvb2tpbmcgYXQgYG1tL2RhbW9uL3BhZGRyLmNgIGZvciBwaHlzaWNhbCBhZGRyZXNzZXMsIHVuZGVyIGBDT05GSUdfREFNT05fUEFERFJgLCBhbmQgYG1tL2RhbW9uL3ZhZGRyLmNgIGZvciB2aXJ0dWFsLCB1bmRlciBgQ09ORklHX0RBTU9OX1ZBRERSYC4gVGhhdCYjMzk7cyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLgoKTm93LCBob3cgZG9lcyB1c2Vyc3BhY2UgYWN0dWFsbHkgKnRhbGsqIHRvIERBTU9OPyBBaCwgeWVzLCBpdCYjMzk7cyB0aGUgYENPTkZJR19EQU1PTl9TWVNGU2Agb3B0aW9uLCBvciBkZWJ1Z2ZzIGlmIHdlJiMzOTtyZSBmZWVsaW5nIG9sZCBzY2hvb2wsIGJ1dCBzeXNmcyBpcyB0aGUgc3RhbmRhcmQgdGhlc2UgZGF5cy4gR29vZCwgZ29vZC4KCkhtbSwgd2FpdCBhIHNlY29uZC4gSSBuZWVkIHRvIGJlIHN1cmUuIERvZXMgYERBTU9OX1JFQ0xBSU1gIG9yIGBEQU1PTl9MUlVfU09SVGAgYWxzbyBsZXZlcmFnZSB0aGVzZSBEQU1PTiBzY2hlbWVzIHdpdGggYSBxdW90YT8gVGltZSB0byBkaWcgaW50byBgbW0vZGFtb24vcmVjbGFpbS5jYCBhbmQgYG1tL2RhbW9uL2xydV9zb3J0LmNgIGFuZCBmaW5kIG91dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTE6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cXVvdGEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbi9yZWNsYWltLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vcmVjbGFpbS5jPTQ4PW1vZHVsZV9wYXJhbShtaW5fYWdlLCB1bG9uZywgMDYwMCk7XG5tbS9kYW1vbi9yZWNsYWltLmMtNDktXG5tbS9kYW1vbi9yZWNsYWltLmM6NTA6c3RhdGljIHN0cnVjdCBkYW1vc19xdW90YSBkYW1vbl9yZWNsYWltX3F1b3RhID0ge1xubW0vZGFtb24vcmVjbGFpbS5jLTUxLVx0LyogdXNlIHVwIHRvIDEwIG1zIHRpbWUsIHJlY2xhaW0gdXAgdG8gMTI4IE1pQiBwZXIgMSBzZWMgYnkgZGVmYXVsdCAqL1xuLS1cbm1tL2RhbW9uL3JlY2xhaW0uYy01NC1cdC5yZXNldF9pbnRlcnZhbCA9IDEwMDAsXG5tbS9kYW1vbi9yZWNsYWltLmM6NTU6XHQvKiBXaXRoaW4gdGhlIHF1b3RhLCBwYWdlIG91dCBvbGRlciByZWdpb25zIGZpcnN0LiAqL1xubW0vZGFtb24vcmVjbGFpbS5jLTU2LVx0LndlaWdodF9zeiA9IDAsXG4tLVxubW0vZGFtb24vcmVjbGFpbS5jLTU5LX07XG5tbS9kYW1vbi9yZWNsYWltLmM6NjA6REVGSU5FX0RBTU9OX01PRFVMRVNfREFNT1NfUVVPVEFTKGRhbW9uX3JlY2xhaW1fcXVvdGEpO1xubW0vZGFtb24vcmVjbGFpbS5jLTYxLVxuLS1cbm1tL2RhbW9uL3JlY2xhaW0uYy02NC0gKlxubW0vZGFtb24vcmVjbGFpbS5jOjY1OiAqIFdoaWxlIGtlZXBpbmcgdGhlIGNhcHMgdGhhdCBzZXQgYnkgb3RoZXIgcXVvdGFzLCBEQU1PTl9SRUNMQUlNIGF1dG9tYXRpY2FsbHlcbm1tL2RhbW9uL3JlY2xhaW0uYzo2NjogKiBpbmNyZWFzZXMgYW5kIGRlY3JlYXNlcyB0aGUgZWZmZWN0aXZlIGxldmVsIG9mIHRoZSBxdW90YSBhaW1pbmcgdGhpcyBsZXZlbCBvZlxubW0vZGFtb24vcmVjbGFpbS5jLTY3LSAqIG1lbW9yeSBwcmVzc3VyZSBpcyBpbmN1cnJlZC4gIFN5c3RlbS13aWRlIGBgc29tZWBgIG1lbW9yeSBQU0kgaW4gbWljcm9zZWNvbmRzXG5tbS9kYW1vbi9yZWNsYWltLmM6Njg6ICogcGVyIHF1b3RhIHJlc2V0IGludGVydmFsIChgYHF1b3RhX3Jlc2V0X2ludGVydmFsX21zYGApIGlzIGNvbGxlY3RlZCBhbmRcbm1tL2RhbW9uL3JlY2xhaW0uYy02OS0gKiBjb21wYXJlZCB0byB0aGlzIHZhbHVlIHRvIHNlZSBpZiB0aGUgYWltIGlzIHNhdGlzZmllZC4gIFZhbHVlIHplcm8gbWVhbnNcbi0tXG5tbS9kYW1vbi9yZWNsYWltLmMtNzMtICovXG5tbS9kYW1vbi9yZWNsYWltLmM6NzQ6c3RhdGljIHVuc2lnbmVkIGxvbmcgcXVvdGFfbWVtX3ByZXNzdXJlX3VzIF9fcmVhZF9tb3N0bHk7XG5tbS9kYW1vbi9yZWNsYWltLmM6NzU6bW9kdWxlX3BhcmFtKHF1b3RhX21lbV9wcmVzc3VyZV91cywgdWxvbmcsIDA2MDApO1xubW0vZGFtb24vcmVjbGFpbS5jLTc2LVxubW0vZGFtb24vcmVjbGFpbS5jLTc3LS8qXG5tbS9kYW1vbi9yZWNsYWltLmM6Nzg6ICogVXNlci1zcGVjaWZpYWJsZSBmZWVkYmFjayBmb3IgYXV0by10dW5pbmcgb2YgdGhlIGVmZmVjdGl2ZSBxdW90YS5cbm1tL2RhbW9uL3JlY2xhaW0uYy03OS0gKlxubW0vZGFtb24vcmVjbGFpbS5jOjgwOiAqIFdoaWxlIGtlZXBpbmcgdGhlIGNhcHMgdGhhdCBzZXQgYnkgb3RoZXIgcXVvdGFzLCBEQU1PTl9SRUNMQUlNIGF1dG9tYXRpY2FsbHlcbm1tL2RhbW9uL3JlY2xhaW0uYzo4MTogKiBpbmNyZWFzZXMgYW5kIGRlY3JlYXNlcyB0aGUgZWZmZWN0aXZlIGxldmVsIG9mIHRoZSBxdW90YSBhaW1pbmcgcmVjZWl2aW5nIHRoaXNcbm1tL2RhbW9uL3JlY2xhaW0uYy04Mi0gKiBmZWVkYmFjayBvZiB2YWx1ZSBgYDEwLDAwMGBgIGZyb20gdGhlIHVzZXIuICBEQU1PTl9SRUNMQUlNIGFzc3VtZXMgdGhlIGZlZWRiYWNrXG5tbS9kYW1vbi9yZWNsYWltLmM6ODM6ICogdmFsdWUgYW5kIHRoZSBxdW90YSBhcmUgcG9zaXRpdmVseSBwcm9wb3J0aW9uYWwuICBWYWx1ZSB6ZXJvIG1lYW5zIGRpc2FibGluZ1xubW0vZGFtb24vcmVjbGFpbS5jLTg0LSAqIHRoaXMgYXV0by10dW5pbmcgZmVhdHVyZS5cbi0tXG5tbS9kYW1vbi9yZWNsYWltLmMtODgtICovXG5tbS9kYW1vbi9yZWNsYWltLmM6ODk6c3RhdGljIHVuc2lnbmVkIGxvbmcgcXVvdGFfYXV0b3R1bmVfZmVlZGJhY2sgX19yZWFkX21vc3RseTtcbm1tL2RhbW9uL3JlY2xhaW0uYzo5MDptb2R1bGVfcGFyYW0ocXVvdGFfYXV0b3R1bmVfZmVlZGJhY2ssIHVsb25nLCAwNjAwKTtcbm1tL2RhbW9uL3JlY2xhaW0uYy05MS1cbi0tXG5tbS9kYW1vbi9yZWNsYWltLmM9MTYxPURFRklORV9EQU1PTl9NT0RVTEVTX0RBTU9TX1NUQVRTX1BBUkFNUyhkYW1vbl9yZWNsYWltX3N0YXQsXG5tbS9kYW1vbi9yZWNsYWltLmM6MTYyOlx0XHRyZWNsYWltX3RyaWVkX3JlZ2lvbnMsIHJlY2xhaW1lZF9yZWdpb25zLCBxdW90YV9leGNlZWRzKTtcbm1tL2RhbW9uL3JlY2xhaW0uYy0xNjMtXG4tLVxubW0vZGFtb24vcmVjbGFpbS5jPTE2Nz1zdGF0aWMgc3RydWN0IGRhbW9zICpkYW1vbl9yZWNsYWltX25ld19zY2hlbWUodW5zaWduZWQgbG9uZyBhZ2dyX2ludGVydmFsKVxuLS1cbm1tL2RhbW9uL3JlY2xhaW0uYy0xODYtXHRcdFx0MCxcbm1tL2RhbW9uL3JlY2xhaW0uYzoxODc6XHRcdFx0LyogdW5kZXIgdGhlIHF1b3RhLiAqL1xubW0vZGFtb24vcmVjbGFpbS5jOjE4ODpcdFx0XHRcdTAwMjZkYW1vbl9yZWNsYWltX3F1b3RhLFxubW0vZGFtb24vcmVjbGFpbS5jLTE4OS1cdFx0XHQvKiAoRGUpYWN0aXZhdGUgdGhpcyBhY2NvcmRpbmcgdG8gdGhlIHdhdGVybWFya3MuICovXG4tLVxubW0vZGFtb24vcmVjbGFpbS5jPTE5ND1zdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fYXBwbHlfcGFyYW1ldGVycyh2b2lkKVxuLS1cbm1tL2RhbW9uL3JlY2xhaW0uYy0xOTktXHRzdHJ1Y3QgZGFtb3MgKnNjaGVtZTtcbm1tL2RhbW9uL3JlY2xhaW0uYzoyMDA6XHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZ29hbDtcbm1tL2RhbW9uL3JlY2xhaW0uYy0yMDEtXHRzdHJ1Y3QgZGFtb3NfZmlsdGVyICpmaWx0ZXI7XG4tLVxubW0vZGFtb24vcmVjbGFpbS5jLTIzNC1cbm1tL2RhbW9uL3JlY2xhaW0uYzoyMzU6XHRpZiAocXVvdGFfbWVtX3ByZXNzdXJlX3VzKSB7XG5tbS9kYW1vbi9yZWNsYWltLmM6MjM2Olx0XHRnb2FsID0gZGFtb3NfbmV3X3F1b3RhX2dvYWwoREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTLFxubW0vZGFtb24vcmVjbGFpbS5jOjIzNzpcdFx0XHRcdHF1b3RhX21lbV9wcmVzc3VyZV91cyk7XG5tbS9kYW1vbi9yZWNsYWltLmMtMjM4LVx0XHRpZiAoIWdvYWwpXG5tbS9kYW1vbi9yZWNsYWltLmMtMjM5LVx0XHRcdGdvdG8gb3V0O1xubW0vZGFtb24vcmVjbGFpbS5jOjI0MDpcdFx0ZGFtb3NfYWRkX3F1b3RhX2dvYWwoXHUwMDI2c2NoZW1lLVx1MDAzZXF1b3RhLCBnb2FsKTtcbm1tL2RhbW9uL3JlY2xhaW0uYy0yNDEtXHR9XG5tbS9kYW1vbi9yZWNsYWltLmMtMjQyLVxubW0vZGFtb24vcmVjbGFpbS5jOjI0MzpcdGlmIChxdW90YV9hdXRvdHVuZV9mZWVkYmFjaykge1xubW0vZGFtb24vcmVjbGFpbS5jOjI0NDpcdFx0Z29hbCA9IGRhbW9zX25ld19xdW90YV9nb2FsKERBTU9TX1FVT1RBX1VTRVJfSU5QVVQsIDEwMDAwKTtcbm1tL2RhbW9uL3JlY2xhaW0uYy0yNDUtXHRcdGlmICghZ29hbClcbm1tL2RhbW9uL3JlY2xhaW0uYy0yNDYtXHRcdFx0Z290byBvdXQ7XG5tbS9kYW1vbi9yZWNsYWltLmM6MjQ3Olx0XHRnb2FsLVx1MDAzZWN1cnJlbnRfdmFsdWUgPSBxdW90YV9hdXRvdHVuZV9mZWVkYmFjaztcbm1tL2RhbW9uL3JlY2xhaW0uYzoyNDg6XHRcdGRhbW9zX2FkZF9xdW90YV9nb2FsKFx1MDAyNnNjaGVtZS1cdTAwM2VxdW90YSwgZ29hbCk7XG5tbS9kYW1vbi9yZWNsYWltLmMtMjQ5LVx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMTo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzI1NwoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDk3MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGb2N1cyBTeW1ib2wgSWRlbnRpZmljYXRpb24gZm9yIERBTU9OIFF1b3RhIEFkanVzdG1lbnQqKgoKT2theSwgc28gSSYjMzk7bSB0cnlpbmcgdG8gZmlndXJlIG91dCB0aGUgbW9zdCByZWxldmFudCBmb2N1cyBzeW1ib2xzIGZvciB0aGlzIERBTU9OIHF1b3RhIGFkanVzdG1lbnQgZmVhdHVyZS4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgdG8gbG9vayBhdCB0aGUga2V5IGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgd2hpY2ggSSBrbm93IGFyZSBgQ09ORklHX0RBTU9OYCwgYENPTkZJR19EQU1PTl9TWVNGU2AsIGBDT05GSUdfREFNT05fUEFERFJgLCBgQ09ORklHX0RBTU9OX1ZBRERSYCwgYW5kIGBDT05GSUdfREFNT05fUkVDTEFJTWAuIEkgbmVlZCB0byBlbnN1cmUgdGhlIG5lY2Vzc2FyeSBkZXBlbmRlbmNpZXMgYXJlIG1ldC4gRnJvbSB0aGUgS2NvbmZpZyBmaWxlcywgSSBzZWUgdGhhdCBlbmFibGluZyBgREFNT05gIGF1dG9tYXRpY2FsbHkgZW5hYmxlcyB0aGUgb3RoZXJzLCBhc3N1bWluZyB0aGUgc3lzdGVtIGhhcyBhbiBNTVUuCgpOb3csIGZvY3VzaW5nIG9uIHRoZSBjb2RlLCBgREFNT05fUkVDTEFJTWAgYXBwZWFycyB0byBiZSB0aGUgcGxhY2Ugd2hlcmUgYGRhbW9uX3JlY2xhaW1fcXVvdGFgIGlzIHNldCwgYW5kIGl0IGFkZHMgcXVvdGEgZ29hbHMsIHdpdGggYERBTU9OX1BBRERSYCBkZXBlbmRpbmcgb24gaXQuIGBEQU1PTl9TWVNGU2AgaXMgaW1wb3J0YW50IGZvciB1c2VyLXNwYWNlIGNvbnRyb2wuIE15IGdvYWwgaXMgdG8gZGV0ZXJtaW5lIHRoZSBiZXN0IHN5bWJvbChzKSB0byByZXByZXNlbnQgdGhlIGNoYW5nZXMuCgpJJiMzOTt2ZSBob21lZCBpbiBvbiBgZGFtb3NfYWRqdXN0X3F1b3RhYCwgYSBzdGF0aWMgZnVuY3Rpb24gd2l0aGluIGBtbS9kYW1vbi9jb3JlLmNgLiBNeSBmaXJzdCBpbnN0aW5jdCB3YXMgdG8gY2hlY2sgaWYgaXQmIzM5O3MgaW5saW5lZCwgYnV0IGl0JiMzOTtzIG5vdC4gSXQgaXMgYHN0YXRpYyB2b2lkYC4gSSB0aGVuIG5lZWRlZCB0byBjb25maXJtIHdoZXRoZXIgaXQgaXMgYWN0dWFsbHkgaW5saW5lZCBieSB0aGUgY29tcGlsZXIuIEkgZm91bmQgaXQmIzM5O3Mgb25seSBjYWxsZWQgZnJvbSBga2RhbW9uZF9hcHBseV9zY2hlbWVzYCwgd2hpY2ggaW4gdHVybiBpcyBvbmx5IGNhbGxlZCBieSBga2RhbW9uZF9mbmAuIE5vdywgdGhlIGtleSBpcyB3aGV0aGVyIHRvIGxpc3QgYGRhbW9zX2FkanVzdF9xdW90YWAgaXRzZWxmLCBvciBvbmUgb2YgaXRzIGNhbGxlcnMuCgpCYXNlZCBvbiB0aGUgaW5zdHJ1Y3Rpb25zLCBzaW5jZSBgZGFtb3NfYWRqdXN0X3F1b3RhYCBpc24mIzM5O3QgaW4gYSBoZWFkZXIgYW5kIGlzIGZlYXR1cmUtc3BlY2lmaWMsIGl0ICpjb3VsZCogYmUgYSBmb2N1cyBzeW1ib2wsIG9yIG9uZSBvZiBpdHMgY2FsbGVycy4gU28sIEkgbmVlZCB0byBjaGVjayB0aGUgc3Vycm91bmRpbmcgZnVuY3Rpb25zLiBUaGUga2V5IGZ1bmN0aW9ucyBhcmUgYGRhbW9zX2FkanVzdF9xdW90YWAsIGBkYW1vc19xdW90YV9pc19mdWxsYCwgYW5kIGBrZGFtb25kX2FwcGx5X3NjaGVtZXNgLgoKSSBuZWVkIHRvIGFsc28gZXhhbWluZSBhbnkgc3lzZnMgZW50cnkgcG9pbnRzIG9yIGNvcmUgREFNT04gZW50cnlwb2ludHMuIFRoZSBxdWVzdGlvbnMgSSYjMzk7bSBhc2tpbmcgbXlzZWxmIGFyZTogSG93IGFyZSB0aGUgc2NoZW1lcyBhZGRlZD8gQXJlIHRoZXJlIGZ1bmN0aW9ucyBsaWtlIGBkYW1vc19uZXdfc2NoZW1lYCBvciBzeXNmcyBzY2hlbWUgY29tbWl0IHRoYXQgbWlnaHQgYmUgbW9yZSByZWxldmFudD8gSSBuZWVkIHRvIGxpc3QgZnVuY3Rpb25zIHRoYXQgaW1wbGVtZW50IHRoZSBzcGVjaWZpYyBsb2dpYy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTE6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb25fc2V0X3NjaGVtZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmM9MTEyMz1pbnQgZGFtb25fc2V0X2F0dHJzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX2F0dHJzICphdHRycylcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTE2Mi0vKipcbm1tL2RhbW9uL2NvcmUuYzoxMTYzOiAqIGRhbW9uX3NldF9zY2hlbWVzKCkgLSBTZXQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBiYXNlZCBvcGVyYXRpb24gc2NoZW1lcy5cbm1tL2RhbW9uL2NvcmUuYy0xMTY0LSAqIEBjdHg6XHRtb25pdG9yaW5nIGNvbnRleHRcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTE3MC0gKi9cbm1tL2RhbW9uL2NvcmUuYzoxMTcxOnZvaWQgZGFtb25fc2V0X3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb3MgKipzY2hlbWVzLFxubW0vZGFtb24vY29yZS5jLTExNzItXHRcdFx0c3NpemVfdCBucl9zY2hlbWVzKVxuLS1cbm1tL2RhbW9uL2xydV9zb3J0LmM9MjcxPXN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfYXBwbHlfcGFyYW1ldGVycyh2b2lkKVxuLS1cbm1tL2RhbW9uL2xydV9zb3J0LmMtMzE4LVxubW0vZGFtb24vbHJ1X3NvcnQuYzozMTk6XHRkYW1vbl9zZXRfc2NoZW1lcyhwYXJhbV9jdHgsIFx1MDAyNmhvdF9zY2hlbWUsIDEpO1xubW0vZGFtb24vbHJ1X3NvcnQuYy0zMjAtXHRkYW1vbl9hZGRfc2NoZW1lKHBhcmFtX2N0eCwgY29sZF9zY2hlbWUpO1xuLS1cbm1tL2RhbW9uL3JlY2xhaW0uYz0xOTQ9c3RhdGljIGludCBkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnModm9pZClcbi0tXG5tbS9kYW1vbi9yZWNsYWltLmMtMjMyLVx0XHRnb3RvIG91dDtcbm1tL2RhbW9uL3JlY2xhaW0uYzoyMzM6XHRkYW1vbl9zZXRfc2NoZW1lcyhwYXJhbV9jdHgsIFx1MDAyNnNjaGVtZSwgMSk7XG5tbS9kYW1vbi9yZWNsYWltLmMtMjM0LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMTo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTE4MwoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipEaXZpbmcgaW50byBEQU1PTiBDb3JlOiBDaGVja2luZyB0aGUgRW50cnkgUG9pbnRzKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhlIGhlYXJ0IG9mIHRoZSBEeW5hbWljIEFkYXB0aXZlIE1lbW9yeSBPcHRpbWl6ZXIgKERBTU9OKSBjb3JlLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGluaXRpYXRpb24gYW5kIG1haW4gZnVuY3Rpb24uIExldCYjMzk7cyBzZWUuLi4gSSYjMzk7bSB0aGlua2luZyBJJiMzOTtsbCBuZWVkIHRvIHJldmlzaXQgYGtkYW1vbmRfZm5gIGFuZCBgZGFtb25fc3RhcnRgIOKAkyB0aG9zZSBhcmUgdGhlIGtleSBlbnRyeSBwb2ludHMgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBtb25pdG9yaW5nIGFuZCBhZGFwdGF0aW9uIGFyZSBraWNrZWQgb2ZmIHdpdGhpbiBgbW0vZGFtb24vY29yZS5jYC4gSSYjMzk7bGwgaGF2ZSBhIGxvb2sgYXQgaG93IHRob3NlIGZ1bmN0aW9ucyBhcmUgY2FsbGVkIGFuZCBob3cgdGhleSBpbnRlcmFjdC4gUHJvYmFibHkgbmVlZCB0byBxdWlja2x5IGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZ2V0IHRoZSBjb250ZXh0LiBUaGF0JiMzOTtzIGEgZ29vZCBwbGFjZSB0byBzdGFydC4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMTo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYW1vbl9zdGFydCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYz0xMDg4PXN0YXRpYyBib29sIGRhbW9uX3ZhbGlkX2ludGVydmFsc19nb2FsKHN0cnVjdCBkYW1vbl9hdHRycyAqYXR0cnMpXG4tLVxubW0vZGFtb24vY29yZS5jLTExMTMtICogSW4gZGV0YWlsLCBhbGwgREFNT04gQVBJIGNhbGxlcnMgZGlyZWN0bHkgY2FsbCB0aGlzIGZ1bmN0aW9uIGZvciBpbml0aWFsXG5tbS9kYW1vbi9jb3JlLmM6MTExNDogKiBzZXR1cCBvZiBkYW1vbl9jdHggYmVmb3JlIGNhbGxpbmcgZGFtb25fc3RhcnQoKS4gIFNvbWUgb2YgdGhlIEFQSSBjYWxsZXJzXG5tbS9kYW1vbi9jb3JlLmMtMTExNS0gKiBhbHNvIGluZGlyZWN0bHkgY2FsbCB0aGlzIGZ1bmN0aW9uIHZpYSBkYW1vbl9jYWxsKCkgLVx1MDAzZSBkYW1vbl9jb21taXQoKSBmb3Jcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MjA0OD1zdGF0aWMgaW50IGtkYW1vbmRfZm4odm9pZCAqZGF0YSk7XG4tLVxubW0vZGFtb24vY29yZS5jLTIwNTAtLypcbm1tL2RhbW9uL2NvcmUuYzoyMDUxOiAqIF9fZGFtb25fc3RhcnQoKSAtIFN0YXJ0cyBtb25pdG9yaW5nIHdpdGggZ2l2ZW4gY29udGV4dC5cbm1tL2RhbW9uL2NvcmUuYy0yMDUyLSAqIEBjdHg6XHRtb25pdG9yaW5nIGNvbnRleHRcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjA1Ny0gKi9cbm1tL2RhbW9uL2NvcmUuYzoyMDU4OnN0YXRpYyBpbnQgX19kYW1vbl9zdGFydChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG5tbS9kYW1vbi9jb3JlLmMtMjA1OS17XG4tLVxubW0vZGFtb24vY29yZS5jLTIwODAtLyoqXG5tbS9kYW1vbi9jb3JlLmM6MjA4MTogKiBkYW1vbl9zdGFydCgpIC0gU3RhcnRzIHRoZSBtb25pdG9yaW5ncyBmb3IgYSBnaXZlbiBncm91cCBvZiBjb250ZXh0cy5cbm1tL2RhbW9uL2NvcmUuYy0yMDgyLSAqIEBjdHhzOlx0YW4gYXJyYXkgb2YgdGhlIHBvaW50ZXJzIGZvciBjb250ZXh0cyB0byBzdGFydCBtb25pdG9yaW5nXG4tLVxubW0vZGFtb24vY29yZS5jLTIwODktICogQGV4Y2x1c2l2ZSBpcyB0cnVlIGFuZCBhIGdyb3VwIG9mIHRocmVhZHMgdGhhdCBjcmVhdGVkIGJ5IG90aGVyXG5tbS9kYW1vbi9jb3JlLmM6MjA5MDogKiAmIzM5O2RhbW9uX3N0YXJ0KCkmIzM5OyBjYWxsIGlzIGN1cnJlbnRseSBydW5uaW5nLCB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90aGluZyBidXRcbm1tL2RhbW9uL2NvcmUuYy0yMDkxLSAqIHJldHVybnMgLUVCVVNZLlxuLS1cbm1tL2RhbW9uL2NvcmUuYy0yMDk0LSAqL1xubW0vZGFtb24vY29yZS5jOjIwOTU6aW50IGRhbW9uX3N0YXJ0KHN0cnVjdCBkYW1vbl9jdHggKipjdHhzLCBpbnQgbnJfY3R4cywgYm9vbCBleGNsdXNpdmUpXG5tbS9kYW1vbi9jb3JlLmMtMjA5Ni17XG4tLVxubW0vZGFtb24vY29yZS5jLTIxMjAtXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9jdHhzOyBpJiM0MzsmIzQzOykge1xubW0vZGFtb24vY29yZS5jOjIxMjE6XHRcdGVyciA9IF9fZGFtb25fc3RhcnQoY3R4c1tpXSk7XG5tbS9kYW1vbi9jb3JlLmMtMjEyMi1cdFx0aWYgKGVycilcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MjIyMz1pbnQgZGFtb25fY2FsbChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl9jYWxsX2NvbnRyb2wgKmNvbnRyb2wpXG4tLVxubW0vZGFtb24vY29yZS5jLTIyNzEtICpcbm1tL2RhbW9uL2NvcmUuYzoyMjcyOiAqIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgb25seSBhZnRlciBkYW1vbl9zdGFydCgpIHdpdGggdGhlXG5tbS9kYW1vbi9jb3JlLmMtMjI3My0gKiBAY3R4IGhhcyBzdWNjZWVkZWQuICBPdGhlcndpc2UsIHRoaXMgZnVuY3Rpb24gY291bGQgZmFsbCBpbnRvIGFuIGluZGVmaW5pdGVcbi0tXG5tbS9kYW1vbi9scnVfc29ydC5jPTQwMT1zdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X3R1cm4oYm9vbCBvbilcbi0tXG5tbS9kYW1vbi9scnVfc29ydC5jLTQxMy1cbm1tL2RhbW9uL2xydV9zb3J0LmM6NDE0Olx0ZXJyID0gZGFtb25fc3RhcnQoXHUwMDI2Y3R4LCAxLCB0cnVlKTtcbm1tL2RhbW9uL2xydV9zb3J0LmMtNDE1LVx0aWYgKGVycilcbi0tXG5tbS9kYW1vbi9yZWNsYWltLmM9MzI0PXN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV90dXJuKGJvb2wgb24pXG4tLVxubW0vZGFtb24vcmVjbGFpbS5jLTMzNi1cbm1tL2RhbW9uL3JlY2xhaW0uYzozMzc6XHRlcnIgPSBkYW1vbl9zdGFydChcdTAwMjZjdHgsIDEsIHRydWUpO1xubW0vZGFtb24vcmVjbGFpbS5jLTMzOC1cdGlmIChlcnIpXG4tLVxubW0vZGFtb24vc3RhdC5jPTIwMD1zdGF0aWMgaW50IGRhbW9uX3N0YXRfc3RhcnQodm9pZClcbi0tXG5tbS9kYW1vbi9zdGF0LmMtMjEyLVx0XHRyZXR1cm4gLUVOT01FTTtcbm1tL2RhbW9uL3N0YXQuYzoyMTM6XHRlcnIgPSBkYW1vbl9zdGFydChcdTAwMjZkYW1vbl9zdGF0X2NvbnRleHQsIDEsIHRydWUpO1xubW0vZGFtb24vc3RhdC5jLTIxNC1cdGlmIChlcnIpIHtcbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTI1MTU9c3RhdGljIGludCBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uKHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kICprZGFtb25kKVxuLS1cbm1tL2RhbW9uL3N5c2ZzLmMtMjUzOS1cdH1cbm1tL2RhbW9uL3N5c2ZzLmM6MjU0MDpcdGVyciA9IGRhbW9uX3N0YXJ0KFx1MDAyNmN0eCwgMSwgZmFsc2UpO1xubW0vZGFtb24vc3lzZnMuYy0yNTQxLVx0aWYgKGVycikge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMTo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDYwMAoJCQkJCQkJb3V0cHV0OiAxNjYKCQkJCQkJCXRob3VnaHRzOiAxMTA4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRBTU9OIENvZGUgQW5hbHlzaXMgU3VtbWFyeSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHRoZSBjb2RlIGluIGBtbS9kYW1vbi9jb3JlLmNgLCB0aGUga2V5IGZ1bmN0aW9uIGltcGFjdGVkIGJ5IHRoZSBjb21taXQgaXMgYGRhbW9zX2FkanVzdF9xdW90YWAsIHdoaWNoIGlzIGNhbGxlZCBkaXJlY3RseSBieSBga2RhbW9uZF9hcHBseV9zY2hlbWVzYC4gIGBkYW1vc19hZGp1c3RfcXVvdGFgIGFsc28gdXNlcyBgZGFtb3NfcXVvdGFfaXNfZnVsbGAgYXMgYSBoZWxwZXIuIENvbnNpZGVyaW5nIHRoZSBpbnN0cnVjdGlvbnMsIEkgbmVlZCB0byBpZGVudGlmeSBzcGVjaWZpYyBmZWF0dXJlIGxvZ2ljIG9yIGVudHJ5cG9pbnRzLgoKYGRhbW9zX2FkanVzdF9xdW90YWAgaXMgbm9uLWlubGluZSBhbmQgc3RhdGljLCBzbyBpdCYjMzk7cyBhIGdvb2QgdGFyZ2V0IGZvciBmb2N1cywgYW5kIGl0cyBjYWxsZXIsIGBrZGFtb25kX2FwcGx5X3NjaGVtZXNgLCBpcyBhbHNvIG5vbi1pbmxpbmUuIGBkYW1vbl9zdGFydGAgaXMgdWJpcXVpdG91cyBpbiBEQU1PTiwgc28gaXQmIzM5O3Mgbm90IGEgZ29vZCBjaG9pY2UgYmFzZWQgb24gdGhlIGluc3RydWN0aW9ucy4gIEkmIzM5O20gY29uZmlkZW50IGBkYW1vc19hZGp1c3RfcXVvdGFgIGlzIHRoZSBmdW5jdGlvbiAqZGlyZWN0bHkqIG1vZGlmaWVkLCBhbmQgYGtkYW1vbmRfYXBwbHlfc2NoZW1lc2AgaXMgaXRzIGNhbGxlci4gVGhlc2UgYXJlIHRoZSAqZm9jdXMgc3ltYm9scyogSSBzaG91bGQgbGlzdC4KCk5vdyBmb3IgY29uZmlndXJhdGlvbnMuIFRvIGdldCB0byB0aGUgbW9kaWZpZWQgY29kZSBpbiBgZGFtb3NfYWRqdXN0X3F1b3RhYCwgSSBzZWUgdGhhdCBga2RhbW9uZF9hcHBseV9zY2hlbWVzYCBuZWVkcyBgIWxpc3RfZW1wdHkoJmFtcDtjdHgtJmd0O3NjaGVtZXMpYC4gRnVydGhlcm1vcmUsIGluc2lkZSBgZGFtb3NfYWRqdXN0X3F1b3RhYCwgdGhlIHF1b3RhIGNoZWNrIGFuZCBoaXN0b2dyYW0gY29kZSBpcyBvbmx5IGV4ZWN1dGVkIGlmIGBjLSZndDtvcHMuZ2V0X3NjaGVtZV9zY29yZWAgaXMgc2V0LiBUaGlzIG1lYW5zIGBEQU1PTl9QQUREUmAgb3IgYERBTU9OX1ZBRERSYCBtdXN0IGJlIGVuYWJsZWQuIFNpbmNlIHRoZSBzY2hlbWVzIGFyZSBzZXQgdmlhIGBEQU1PTl9TWVNGU2AgKHVzZXIgc3BhY2UpIG9yIGBEQU1PTl9SRUNMQUlNYCBvciBgREFNT05fTFJVX1NPUlRgLCBJIG5lZWQgdG8gZW5hYmxlOiBgREFNT05gLCBgREFNT05fUEFERFJgLCBgREFNT05fVkFERFJgLCBgREFNT05fU1lTRlNgLCBhbmQgYERBTU9OX1JFQ0xBSU1gLiAgSSYjMzk7dmUgY2hlY2tlZCB0aGUgS2NvbmZpZyBkZXBlbmRlbmNpZXMsIGFuZCB0aGVzZSBhbGwgbWFrZSBzZW5zZS4KCkkmIzM5O3ZlIG1hZGUgc3VyZSB0byBjb3ZlciBhbGwgdGhlIGRlcGVuZGVuY2llcywgaW5jbHVkaW5nIGBTWVNGU2AgYW5kIGBNTVVgIHdoaWNoIGFyZSBzdGFuZGFyZCBvbiBhbWQ2NC4gVGhlcmVmb3JlLCBJIGNhbiBjb25maXJtIHRoYXQgdGhlIGBXb3J0aEZ1enppbmdgIGJvb2xlYW4gaXMgdHJ1ZSwgdGhlIHJlYXNvbmluZyBpcyBjb25jaXNlLCB0aGUgYEZvY3VzU3ltYm9sc2AgYXJlIGBkYW1vc19hZGp1c3RfcXVvdGFgIGFuZCBga2RhbW9uZF9hcHBseV9zY2hlbWVzYCwgYW5kIHRoZSBgRW5hYmxlQ29uZmlnc2AgYXJlIGBEQU1PTmAsIGBEQU1PTl9TWVNGU2AsIGBEQU1PTl9QQUREUmAsIGBEQU1PTl9WQUREUmAsIGFuZCBgREFNT05fUkVDTEFJTWAuIExvb2tzIGdvb2QuIFRpbWUgdG8gbW92ZSBvbiBhbmQgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMTo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7REFNT04mIzM0OywKICAgICYjMzQ7REFNT05fU1lTRlMmIzM0OywKICAgICYjMzQ7REFNT05fUEFERFImIzM0OywKICAgICYjMzQ7REFNT05fVkFERFImIzM0OywKICAgICYjMzQ7REFNT05fUkVDTEFJTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RhbW9zX2FkanVzdF9xdW90YSYjMzQ7LAogICAgJiMzNDtrZGFtb25kX2FwcGx5X3NjaGVtZXMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBpbiBEQU1PTiAobW0vZGFtb24vY29yZS5jKSBieSBpbnRyb2R1Y2luZyBhbiBlYXJseSBleGl0IGNoZWNrIGluIGRhbW9zX2FkanVzdF9xdW90YSgpIHdoZW4gdGhlIHF1b3RhIGlzIGFscmVhZHkgZnVsbC4gVGhpcyBhdm9pZHMgdW5uZWNlc3NhcnkgcmVnaW9uIHNjb3JlIGhpc3RvZ3JhbSBjYWxjdWxhdGlvbnMuIEJlY2F1c2UgdGhpcyBjaGFuZ2VzIHJlYWNoYWJsZSBleGVjdXRpb24gbG9naWMgaW4gYSBjb3JlIE1NIHN1YnN5c3RlbSBhY2Nlc3NpYmxlIHZpYSBEQU1PTiBzeXNmcyBhbmQgbW9kdWxlIGludGVyZmFjZXMgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBpdCBpcyB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtEQU1PTiYjMzQ7LAogICAgJiMzNDtEQU1PTl9TWVNGUyYjMzQ7LAogICAgJiMzNDtEQU1PTl9QQUREUiYjMzQ7LAogICAgJiMzNDtEQU1PTl9WQUREUiYjMzQ7LAogICAgJiMzNDtEQU1PTl9SRUNMQUlNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGFtb3NfYWRqdXN0X3F1b3RhJiMzNDssCiAgICAmIzM0O2tkYW1vbmRfYXBwbHlfc2NoZW1lcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGluIERBTU9OIChtbS9kYW1vbi9jb3JlLmMpIGJ5IGludHJvZHVjaW5nIGFuIGVhcmx5IGV4aXQgY2hlY2sgaW4gZGFtb3NfYWRqdXN0X3F1b3RhKCkgd2hlbiB0aGUgcXVvdGEgaXMgYWxyZWFkeSBmdWxsLiBUaGlzIGF2b2lkcyB1bm5lY2Vzc2FyeSByZWdpb24gc2NvcmUgaGlzdG9ncmFtIGNhbGN1bGF0aW9ucy4gQmVjYXVzZSB0aGlzIGNoYW5nZXMgcmVhY2hhYmxlIGV4ZWN1dGlvbiBsb2dpYyBpbiBhIGNvcmUgTU0gc3Vic3lzdGVtIGFjY2Vzc2libGUgdmlhIERBTU9OIHN5c2ZzIGFuZCBtb2R1bGUgaW50ZXJmYWNlcyBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIGl0IGlzIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDExOjUzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTE6NTM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGFuIGVhcmx5IHJldHVybiBpbiBkYW1vc19hZGp1c3RfcXVvdGEoKSBpZiB0aGUgcXVvdGEgaXMgYWxyZWFkeSBleGhhdXN0ZWQgKGRhbW9zX3F1b3RhX2lzX2Z1bGwoKSkuIFRoaXMgc2tpcHMgcmVjYWxjdWxhdGlvbiBvZiB0aGUgc2NoZW1lIHNjb3JlIGhpc3RvZ3JhbSBhbmQgbWluX3Njb3JlLlxuXG5ObyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBtZW1vcnkgYWxsb2NhdGlvbnMgYXJlIGludHJvZHVjZWQgb3IgcmVhZC4gVGhlIHNraXBwZWQgaGlzdG9ncmFtIGJ1ZmZlciAoYy1cdTAwM2VyZWdpb25zX3Njb3JlX2hpc3RvZ3JhbSkgaXMgc3RyaWN0bHkgaW50ZXJuYWwgdG8gdGhpcyBmdW5jdGlvbiBhbmQgaXMgYWx3YXlzIHplcm9lZCB2aWEgbWVtc2V0KCkgcHJpb3IgdG8gdXNlIHdoZW4gYWNjZXNzZWQuIE5vIGRhdGEgaXMgY29waWVkIHRvIHVzZXIgc3BhY2Ugb3IgdXNlZCBpbiB1bmluaXRpYWxpemVkIHN0YXRlLiBBbnkgcG90ZW50aWFsIG1lbW9yeSBzYWZldHkgaXNzdWVzIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMpIHdvdWxkIGJlIGRldGVjdGVkIGJ5IHN0YW5kYXJkIEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIHJ1biBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNzcwZjI5MDA3OTY4ZTgzYzk5NjczMDhjMWRjNjJhMTk5MWZkZjYzMQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gU2VwIDEzIDExOjUyOjAzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vZGFtb24vY29yZS5jIGIvbW0vZGFtb24vY29yZS5jCmluZGV4IDBjOThmN2UyNjdkMDcuLjNkN2E5NzNlYThiNmYgMTAwNjQ0Ci0tLSBhL21tL2RhbW9uL2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi9jb3JlLmMKQEAgLTMzMzYsNiAmIzQzOzMzMzYsOCBAQCBzdGF0aWMgdm9pZCBkYW1vc19hZGp1c3RfcXVvdGEoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzKQogCQkJZGFtb3NfdHJhY2VfZXN6KGMsIHMsIHF1b3RhKTsKIAl9CiAKJiM0MzsJaWYgKGRhbW9zX3F1b3RhX2lzX2Z1bGwocXVvdGEsIGMtJmd0O21pbl9yZWdpb25fc3opKQomIzQzOwkJcmV0dXJuOwogCWlmICghYy0mZ3Q7b3BzLmdldF9zY2hlbWVfc2NvcmUpCiAJCXJldHVybjsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTE6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA3MQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggdGhpcyBhbmFseXNpczoKCioqQW5hbHl6aW5nIHRoZSBQYXRjaDogSW5pdGlhbCBUaG91Z2h0cyoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHN0YXJ0IGJ5IHVuZGVyc3RhbmRpbmcgdGhpcyBwYXRjaCBhbmQgaXRzIGNvbnRleHQuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHplcm8gaW4gb24gYG1tL2RhbW9uL2NvcmUuY2AgYXJvdW5kIGxpbmUgMzMzNi4gSSYjMzk7bGwga2ljayB0aGluZ3Mgb2ZmIGJ5IHVzaW5nIG15IHN0YW5kYXJkIHRvb2xzIC0gSSYjMzk7bGwgYHJlYWQtZmlsZWAgdGhhdCBzZWN0aW9uIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIHN1cnJvdW5kaW5nIGNvZGUgYW5kIGlkZW50aWZ5IHRoZSBleGFjdCBhcmVhIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcuIEkgY2FuIGFscmVhZHkgaW1hZ2luZSB0aGUgdHlwZSBvZiBkYXRhIHN0cnVjdHVyZXMgYW5kIGxvZ2ljIEkmIzM5O20gZ29pbmcgdG8gYmUgbG9va2luZyBhdCBpbiB0aGF0IGZpbGUuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBmb3VuZGF0aW9uIGJlZm9yZSBJIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgY2hhbmdlcyB0aGVtc2VsdmVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMTo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMzMjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzMyMDpcdFx0XHRcdGRhbW9zX3RyYWNlX2VzeihjLCBzLCBxdW90YSk7XG4zMzIxOlx0XHR9XG4zMzIyOlx0XG4zMzIzOlx0XHQvKiBOZXcgY2hhcmdlIHdpbmRvdyBzdGFydHMgKi9cbjMzMjQ6XHRcdGlmICghdGltZV9pbl9yYW5nZV9vcGVuKGppZmZpZXMsIHF1b3RhLVx1MDAzZWNoYXJnZWRfZnJvbSxcbjMzMjU6XHRcdFx0XHRcdHF1b3RhLVx1MDAzZWNoYXJnZWRfZnJvbSAmIzQzO1xuMzMyNjpcdFx0XHRcdFx0bXNlY3NfdG9famlmZmllcyhxdW90YS1cdTAwM2VyZXNldF9pbnRlcnZhbCkpKSB7XG4zMzI3Olx0XHRcdGlmIChkYW1vc19xdW90YV9pc19mdWxsKHF1b3RhLCBjLVx1MDAzZW1pbl9yZWdpb25fc3opKVxuMzMyODpcdFx0XHRcdHMtXHUwMDNlc3RhdC5xdF9leGNlZWRzJiM0MzsmIzQzOztcbjMzMjk6XHRcdFx0cXVvdGEtXHUwMDNldG90YWxfY2hhcmdlZF9zeiAmIzQzOz0gcXVvdGEtXHUwMDNlY2hhcmdlZF9zejtcbjMzMzA6XHRcdFx0cXVvdGEtXHUwMDNlY2hhcmdlZF9mcm9tID0gamlmZmllcztcbjMzMzE6XHRcdFx0cXVvdGEtXHUwMDNlY2hhcmdlZF9zeiA9IDA7XG4zMzMyOlx0XHRcdGlmICh0cmFjZV9kYW1vc19lc3pfZW5hYmxlZCgpKVxuMzMzMzpcdFx0XHRcdGNhY2hlZF9lc3ogPSBxdW90YS1cdTAwM2Vlc3o7XG4zMzM0Olx0XHRcdGRhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGEoYywgcyk7XG4zMzM1Olx0XHRcdGlmICh0cmFjZV9kYW1vc19lc3pfZW5hYmxlZCgpIFx1MDAyNlx1MDAyNiBxdW90YS1cdTAwM2Vlc3ogIT0gY2FjaGVkX2VzeilcbjMzMzY6XHRcdFx0XHRkYW1vc190cmFjZV9lc3ooYywgcywgcXVvdGEpO1xuMzMzNzpcdFx0fVxuMzMzODpcdFxuMzMzOTpcdFx0aWYgKGRhbW9zX3F1b3RhX2lzX2Z1bGwocXVvdGEsIGMtXHUwMDNlbWluX3JlZ2lvbl9zeikpXG4zMzQwOlx0XHRcdHJldHVybjtcbjMzNDE6XHRcdGlmICghYy1cdTAwM2VvcHMuZ2V0X3NjaGVtZV9zY29yZSlcbjMzNDI6XHRcdFx0cmV0dXJuO1xuMzM0MzpcdFxuMzM0NDpcdFx0LyogRmlsbCB1cCB0aGUgc2NvcmUgaGlzdG9ncmFtICovXG4zMzQ1Olx0XHRtZW1zZXQoYy1cdTAwM2VyZWdpb25zX3Njb3JlX2hpc3RvZ3JhbSwgMCxcbjMzNDY6XHRcdFx0XHRzaXplb2YoKmMtXHUwMDNlcmVnaW9uc19zY29yZV9oaXN0b2dyYW0pICpcbjMzNDc6XHRcdFx0XHQoREFNT1NfTUFYX1NDT1JFICYjNDM7IDEpKTtcbjMzNDg6XHRcdGRhbW9uX2Zvcl9lYWNoX3RhcmdldCh0LCBjKSB7XG4zMzQ5Olx0XHRcdGRhbW9uX2Zvcl9lYWNoX3JlZ2lvbihyLCB0KSB7XG4zMzUwOlx0XHRcdFx0aWYgKCFfX2RhbW9zX3ZhbGlkX3RhcmdldChyLCBzLCBjKSlcbjMzNTE6XHRcdFx0XHRcdGNvbnRpbnVlO1xuMzM1MjpcdFx0XHRcdGlmIChkYW1vc19jb3JlX2ZpbHRlcl9vdXQoYywgdCwgciwgcykpXG4zMzUzOlx0XHRcdFx0XHRjb250aW51ZTtcbjMzNTQ6XHRcdFx0XHRzY29yZSA9IGMtXHUwMDNlb3BzLmdldF9zY2hlbWVfc2NvcmUoYywgciwgcyk7XG4zMzU1Olx0XHRcdFx0Yy1cdTAwM2VyZWdpb25zX3Njb3JlX2hpc3RvZ3JhbVtzY29yZV0gJiM0Mzs9XG4zMzU2Olx0XHRcdFx0XHRkYW1vbl9zel9yZWdpb24ocik7XG4zMzU3Olx0XHRcdFx0aWYgKHNjb3JlIFx1MDAzZSBtYXhfc2NvcmUpXG4zMzU4Olx0XHRcdFx0XHRtYXhfc2NvcmUgPSBzY29yZTtcbjMzNTk6XHRcdFx0fVxuMzM2MDpcdFx0fVxuMzM2MTpcdFxuMzM2MjpcdFx0LyogU2V0IHRoZSBtaW4gc2NvcmUgbGltaXQgKi9cbjMzNjM6XHRcdGZvciAoY3VtdWxhdGVkX3N6ID0gMCwgc2NvcmUgPSBtYXhfc2NvcmU7IDsgc2NvcmUtLSkge1xuMzM2NDpcdFx0XHRjdW11bGF0ZWRfc3ogJiM0Mzs9IGMtXHUwMDNlcmVnaW9uc19zY29yZV9oaXN0b2dyYW1bc2NvcmVdO1xuMzM2NTpcdFx0XHRpZiAoY3VtdWxhdGVkX3N6IFx1MDAzZT0gcXVvdGEtXHUwMDNlZXN6IHx8ICFzY29yZSlcbjMzNjY6XHRcdFx0XHRicmVhaztcbjMzNjc6XHRcdH1cbjMzNjg6XHRcdHF1b3RhLVx1MDAzZW1pbl9zY29yZSA9IHNjb3JlO1xuMzM2OTpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTE6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzEzMgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuCgoqKkV4YW1pbmluZyB0aGUgYGRhbW9zX2FkanVzdF9xdW90YWAgRnVuY3Rpb24qKgoKUmlnaHQsIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHdpdGggYGRhbW9zX2FkanVzdF9xdW90YWAsIHNvIEkmIzM5O2xsIGJlIGNoZWNraW5nIGl0cyBpbXBsZW1lbnRhdGlvbiB3aXRoaW4gYG1tL2RhbW9uL2NvcmUuY2AuIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0gbWFuYWdlcyBhbmQgYWRqdXN0cyBxdW90YXMuIEkgd2lsbCBmb2N1cyBvbiBsaW5lcyAzMzAwIHRocm91Z2ggMzM0MCwgYXMgdGhlIGNvZGUgYXJvdW5kIGEgZnVuY3Rpb24gb2Z0ZW4gZ2l2ZXMgY3JpdGljYWwgaW5zaWdodHMgaW50byBpdHMgcHVycG9zZSBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBzdXJyb3VuZGluZyBhcmNoaXRlY3R1cmUuIFJlYWRpbmcgdGhhdCBibG9jayBzaG91bGQgcHJvdmlkZSBhIGNyaXRpY2FsIHNuYXBzaG90IGludG8gdGhlIHF1b3RhIGFkanVzdG1lbnQgcHJvY2Vzcy4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gbG9va2luZyBmb3IgaG93IHRoZSBhZGp1c3RtZW50cyBhcmUgdHJpZ2dlcmVkLCBhbmQgd2hhdCBwYXJhbWV0ZXJzIGl0IG1heSB1c2UuIFBlcmhhcHMgdGhlIGNvbmRpdGlvbmFsIGJyYW5jaGVzLCB2YXJpYWJsZSBhc3NpZ25tZW50cywgYW5kIGZ1bmN0aW9uIGNhbGxzIHdpbGwgZ2l2ZSBhd2F5IHRoZSBzZWNyZXRzIG9mIGBkYW1vc19hZGp1c3RfcXVvdGFgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMTo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMzMDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzMwMDpcdFx0fVxuMzMwMTpcdFx0dHJhY2VfZGFtb3NfZXN6KGNpZHgsIHNpZHgsIHF1b3RhLVx1MDAzZWVzeik7XG4zMzAyOlx0fVxuMzMwMzpcdFxuMzMwNDpcdHN0YXRpYyB2b2lkIGRhbW9zX2FkanVzdF9xdW90YShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb3MgKnMpXG4zMzA1Olx0e1xuMzMwNjpcdFx0c3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSA9IFx1MDAyNnMtXHUwMDNlcXVvdGE7XG4zMzA3Olx0XHRzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0O1xuMzMwODpcdFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqcjtcbjMzMDk6XHRcdHVuc2lnbmVkIGxvbmcgY3VtdWxhdGVkX3N6LCBjYWNoZWRfZXN6O1xuMzMxMDpcdFx0dW5zaWduZWQgaW50IHNjb3JlLCBtYXhfc2NvcmUgPSAwO1xuMzMxMTpcdFxuMzMxMjpcdFx0aWYgKCFxdW90YS1cdTAwM2VtcyBcdTAwMjZcdTAwMjYgIXF1b3RhLVx1MDAzZXN6IFx1MDAyNlx1MDAyNiBsaXN0X2VtcHR5KFx1MDAyNnF1b3RhLVx1MDAzZWdvYWxzKSlcbjMzMTM6XHRcdFx0cmV0dXJuO1xuMzMxNDpcdFxuMzMxNTpcdFx0LyogRmlyc3QgY2hhcmdlIHdpbmRvdyAqL1xuMzMxNjpcdFx0aWYgKCFxdW90YS1cdTAwM2V0b3RhbF9jaGFyZ2VkX3N6IFx1MDAyNlx1MDAyNiAhcXVvdGEtXHUwMDNlY2hhcmdlZF9mcm9tKSB7XG4zMzE3Olx0XHRcdHF1b3RhLVx1MDAzZWNoYXJnZWRfZnJvbSA9IGppZmZpZXM7XG4zMzE4Olx0XHRcdGRhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGEoYywgcyk7XG4zMzE5Olx0XHRcdGlmICh0cmFjZV9kYW1vc19lc3pfZW5hYmxlZCgpKVxuMzMyMDpcdFx0XHRcdGRhbW9zX3RyYWNlX2VzeihjLCBzLCBxdW90YSk7XG4zMzIxOlx0XHR9XG4zMzIyOlx0XG4zMzIzOlx0XHQvKiBOZXcgY2hhcmdlIHdpbmRvdyBzdGFydHMgKi9cbjMzMjQ6XHRcdGlmICghdGltZV9pbl9yYW5nZV9vcGVuKGppZmZpZXMsIHF1b3RhLVx1MDAzZWNoYXJnZWRfZnJvbSxcbjMzMjU6XHRcdFx0XHRcdHF1b3RhLVx1MDAzZWNoYXJnZWRfZnJvbSAmIzQzO1xuMzMyNjpcdFx0XHRcdFx0bXNlY3NfdG9famlmZmllcyhxdW90YS1cdTAwM2VyZXNldF9pbnRlcnZhbCkpKSB7XG4zMzI3Olx0XHRcdGlmIChkYW1vc19xdW90YV9pc19mdWxsKHF1b3RhLCBjLVx1MDAzZW1pbl9yZWdpb25fc3opKVxuMzMyODpcdFx0XHRcdHMtXHUwMDNlc3RhdC5xdF9leGNlZWRzJiM0MzsmIzQzOztcbjMzMjk6XHRcdFx0cXVvdGEtXHUwMDNldG90YWxfY2hhcmdlZF9zeiAmIzQzOz0gcXVvdGEtXHUwMDNlY2hhcmdlZF9zejtcbjMzMzA6XHRcdFx0cXVvdGEtXHUwMDNlY2hhcmdlZF9mcm9tID0gamlmZmllcztcbjMzMzE6XHRcdFx0cXVvdGEtXHUwMDNlY2hhcmdlZF9zeiA9IDA7XG4zMzMyOlx0XHRcdGlmICh0cmFjZV9kYW1vc19lc3pfZW5hYmxlZCgpKVxuMzMzMzpcdFx0XHRcdGNhY2hlZF9lc3ogPSBxdW90YS1cdTAwM2Vlc3o7XG4zMzM0Olx0XHRcdGRhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGEoYywgcyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDExOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5NzkKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA3OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBDb2RlIENoYW5nZSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBzZWUgYSBkaWZmIGludHJvZHVjaW5nIHNvbWUgbmV3IGxvZ2ljLiBTcGVjaWZpY2FsbHksIHRoaXMgYmxvY2s6CgpgYGBjCiYjNDM7CWlmIChkYW1vc19xdW90YV9pc19mdWxsKHF1b3RhLCBjLSZndDttaW5fcmVnaW9uX3N6KSkKJiM0MzsJCXJldHVybjsKIAlpZiAoIWMtJmd0O29wcy5nZXRfc2NoZW1lX3Njb3JlKQogCQlyZXR1cm47CmBgYAoKSXQgc2VlbXMgbGlrZSB3ZSYjMzk7cmUgYWRkaW5nIGEgY2hlY2sgcmVsYXRlZCB0byBhICYjMzQ7ZGFtb3NfcXVvdGEmIzM0Oy4gVGhlIGltbWVkaWF0ZSBhY3Rpb24gaXMgYSBgcmV0dXJuO2AsIHNvIGl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIHNob3J0LWNpcmN1aXRpbmcgZXhlY3V0aW9uIGlmIHNvbWUgY29uZGl0aW9uIGlzIG1ldC4gVGhlIGZpcnN0IHBhcnQgZm9jdXNlcyBvbiBhIGNoZWNrIHVzaW5nIGBkYW1vc19xdW90YV9pc19mdWxsYCBhbmQgY29tcGFyaW5nIHRoZSBxdW90YSB3aXRoIGBjLSZndDttaW5fcmVnaW9uX3N6YC4gVGhhdCByYWlzZXMgc29tZSBxdWVzdGlvbnM7IGl0IHdvdWxkIGJlIGdvb2QgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY29uZGl0aW9uLgoKSWYgdGhlIHF1b3RhIGlzIGZ1bGwsIHRoZW4gd2hhdD8gQXJlIHRoZXJlIHN1YnNlcXVlbnQgZnVuY3Rpb25zIHRoYXQgYXR0ZW1wdCB0byBhbGxvY2F0ZSBwYXN0IHRoYXQ/IElzIHRoaXMgYW4gYXR0ZW1wdCBhdCBtZW1vcnkgcHJvdGVjdGlvbj8KClRoZSBzZWNvbmQgcGFydCBjaGVja3MgZm9yIHRoZSBleGlzdGVuY2Ugb2YgYGMtJmd0O29wcy5nZXRfc2NoZW1lX3Njb3JlYCwgYW5kIGlmIGl0IGRvZXMgbm90IGV4aXN0LCBpdCBhbHNvIHJldHVybnMuIFRoaXMgaXMgcHJvYmFibHkgYSBwb2ludGVyIHZhbGlkYXRpb24gaXNzdWUuIEl0JiMzOTtzIGEgZmFpcmx5IGNvbW1vbiBwYXR0ZXJuIGluIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzLiAKCk5vdywgdGltZSB0byBkaXZlIGRlZXBlciBhbmQgc2VlIHdoYXQgdGhhdCBgZGFtb3NfcXVvdGFfaXNfZnVsbGAgZnVuY3Rpb24gYWN0dWFsbHkgZG9lcy4gSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBxdW90YSBtYW5hZ2VtZW50IHNjaGVtZSBpbiBwbGFjZSB0byBwcm9wZXJseSBhc3Nlc3MgdGhlIGNoYW5nZSYjMzk7cyBpbXBhY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDExOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9zX3F1b3RhX2lzX2Z1bGwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmM9MjY2OD1zdGF0aWMgdm9pZCBkYW1vc19jaGFyZ2VfcXVvdGEoc3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjY4NC1cbm1tL2RhbW9uL2NvcmUuYzoyNjg1OnN0YXRpYyBib29sIGRhbW9zX3F1b3RhX2lzX2Z1bGwoc3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSxcbm1tL2RhbW9uL2NvcmUuYy0yNjg2LVx0XHR1bnNpZ25lZCBsb25nIG1pbl9yZWdpb25fc3opXG4tLVxubW0vZGFtb24vY29yZS5jPTI2OTk9c3RhdGljIHZvaWQgZGFtb3NfYXBwbHlfc2NoZW1lKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG4tLVxubW0vZGFtb24vY29yZS5jLTI3NTctXHRcdGRhbW9zX2NoYXJnZV9xdW90YShxdW90YSwgc3osIHN6X2FwcGxpZWQpO1xubW0vZGFtb24vY29yZS5jOjI3NTg6XHRcdGlmIChkYW1vc19xdW90YV9pc19mdWxsKHF1b3RhLCBjLVx1MDAzZW1pbl9yZWdpb25fc3opKSB7XG5tbS9kYW1vbi9jb3JlLmMtMjc1OS1cdFx0XHRxdW90YS1cdTAwM2VjaGFyZ2VfdGFyZ2V0X2Zyb20gPSB0O1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0yNzcwPXN0YXRpYyB2b2lkIGRhbW9uX2RvX2FwcGx5X3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqYyxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjc4NS1cdFx0LyogQ2hlY2sgdGhlIHF1b3RhICovXG5tbS9kYW1vbi9jb3JlLmM6Mjc4NjpcdFx0aWYgKGRhbW9zX3F1b3RhX2lzX2Z1bGwocXVvdGEsIGMtXHUwMDNlbWluX3JlZ2lvbl9zeikpXG5tbS9kYW1vbi9jb3JlLmMtMjc4Ny1cdFx0XHRjb250aW51ZTtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MzMwND1zdGF0aWMgdm9pZCBkYW1vc19hZGp1c3RfcXVvdGEoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zMzI2LVx0XHRcdFx0bXNlY3NfdG9famlmZmllcyhxdW90YS1cdTAwM2VyZXNldF9pbnRlcnZhbCkpKSB7XG5tbS9kYW1vbi9jb3JlLmM6MzMyNzpcdFx0aWYgKGRhbW9zX3F1b3RhX2lzX2Z1bGwocXVvdGEsIGMtXHUwMDNlbWluX3JlZ2lvbl9zeikpXG5tbS9kYW1vbi9jb3JlLmMtMzMyOC1cdFx0XHRzLVx1MDAzZXN0YXQucXRfZXhjZWVkcyYjNDM7JiM0Mzs7XG4tLVxubW0vZGFtb24vY29yZS5jLTMzMzgtXG5tbS9kYW1vbi9jb3JlLmM6MzMzOTpcdGlmIChkYW1vc19xdW90YV9pc19mdWxsKHF1b3RhLCBjLVx1MDAzZW1pbl9yZWdpb25fc3opKVxubW0vZGFtb24vY29yZS5jLTMzNDAtXHRcdHJldHVybjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTE6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDk3NAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIHRoZSBzdW1tYXJ5LCByZW5kZXJlZCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhc3N1bWluZyBJJiMzOTttIGFuIGV4cGVydCBpbiB0aGlzIGZpZWxkOgoKKipBbmFseXppbmcgYGRhbW9zX3F1b3RhX2lzX2Z1bGxgKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgYGRhbW9zX3F1b3RhX2lzX2Z1bGxgIGZ1bmN0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpcyB0byBjb25zaWRlciBhIGZldyBhbmdsZXMuIEZpcnN0LCB3aGF0IGRvZXMgJiMzNDtkYW1vcyYjMzQ7IHJlZmVyIHRvIGluIHRoaXMgY29udGV4dD8gSXMgaXQgYSBzcGVjaWZpYyBkYXRhIHN0b3JlLCBhIHJlc291cmNlIHBvb2wsIGEgc2VydmljZSwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IFRoZSBuYW1lIGl0c2VsZiBzdWdnZXN0cyBhIHF1b3RhLCBzbyBpdCYjMzk7cyBwcm9iYWJseSByZWxhdGVkIHRvIHNvbWUga2luZCBvZiBsaW1pdC4gVGhpcyBsaWtlbHkgbWVhbnMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCByZXNvdXJjZSBtYW5hZ2VtZW50LCBjYXBhY2l0eSBwbGFubmluZywgYW5kIHBvdGVudGlhbGx5IGV2ZW4gdXNlciBhY2Nlc3MgY29udHJvbC4gSSYjMzk7bGwgbmVlZCB0byBsb29rIGF0IHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgKmhvdyogaXTigJlzIGJlaW5nIGNhbGxlZC4gQXJlIHdlIGNoZWNraW5nIHRoZSBxdW90YSBwcm9hY3RpdmVseSwgcmVhY3RpdmVseSwgb3IgYm90aD8gQXJlIHRoZXJlIGFueSByZXRyeSBtZWNoYW5pc21zIGlmIHRoZSBxdW90YSBpcyBpbml0aWFsbHkgZXhjZWVkZWQ/IFdoYXQgaGFwcGVucyB3aGVuIHRoZSBjb25kaXRpb24gaXMgKnRydWUqPyBJcyBhbiBlcnJvciB0aHJvd24sIGEgcmVxdWVzdCByZWplY3RlZCwgb3IgaXMgdGhlcmUgYSBmYWxsYmFjayBzdHJhdGVneT8gVGhlIGVycm9yIGhhbmRsaW5nIGlzIGNyaXRpY2FsIGJlY2F1c2UgaXQgd2lsbCByZXZlYWwgaG93IHJvYnVzdCB0aGlzIHN5c3RlbSBpcy4gSSBhbHNvIG5lZWQgdG8gYXNzZXNzIHRoZSB1bmRlcmx5aW5nIGRhdGEgc3RydWN0dXJlcyBvciBBUEkgY2FsbHMgdGhhdCBkZXRlcm1pbmUgdGhlIHF1b3RhIHN0YXR1cy4gSXMgaXQgYSBzaW1wbGUgY291bnRlciwgYSBjb21wbGV4IHBlcm1pc3Npb24gbW9kZWwsIG9yIHNvbWV0aGluZyBpbiBiZXR3ZWVuPyBBbnkgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIHdpbGwgYmUgcmV2ZWFsZWQgaW4gdGhlIGltcGxlbWVudGF0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIGtub3cgd2hpY2ggb3BlcmF0aW9ucyBtb2RpZnkgdGhlIHF1b3RhLiBBcmUgdGhlc2Ugb3BlcmF0aW9ucyBhdG9taWM/IEFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zPyBJJiMzOTttIGFudGljaXBhdGluZyB0aGF0IHVuZGVyc3RhbmRpbmcgdGhlIGNvbXBsZXRlIHN5c3RlbSBpcyBlc3NlbnRpYWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDExOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjY4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyNjgwOlx0XHRcdFx0XHQoc3pfcmVnaW9uIC0gc3pfYXBwbGllZCksXG4yNjgxOlx0XHRcdFx0XHRxdW90YS1cdTAwM2VmYWlsX2NoYXJnZV9udW0sXG4yNjgyOlx0XHRcdFx0XHRxdW90YS1cdTAwM2VmYWlsX2NoYXJnZV9kZW5vbSk7XG4yNjgzOlx0fVxuMjY4NDpcdFxuMjY4NTpcdHN0YXRpYyBib29sIGRhbW9zX3F1b3RhX2lzX2Z1bGwoc3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSxcbjI2ODY6XHRcdFx0dW5zaWduZWQgbG9uZyBtaW5fcmVnaW9uX3N6KVxuMjY4NzpcdHtcbjI2ODg6XHRcdGlmICghZGFtb3NfcXVvdGFfaXNfc2V0KHF1b3RhKSlcbjI2ODk6XHRcdFx0cmV0dXJuIGZhbHNlO1xuMjY5MDpcdFx0aWYgKHF1b3RhLVx1MDAzZWNoYXJnZWRfc3ogXHUwMDNlPSBxdW90YS1cdTAwM2Vlc3opXG4yNjkxOlx0XHRcdHJldHVybiB0cnVlO1xuMjY5MjpcdFx0LypcbjI2OTM6XHRcdCAqIERBTU9TIGFjdGlvbiBpcyBhcHBsaWVkIHBlciByZWdpb24sIHNvIFx1MDAzY21pbl9yZWdpb25fc3ogcmVtYWluaW5nXG4yNjk0Olx0XHQgKiBxdW90YSBtZWFucyB0aGUgcXVvdGEgaXMgZWZmZWN0aXZlbHkgZnVsbC5cbjI2OTU6XHRcdCAqL1xuMjY5NjpcdFx0cmV0dXJuIHF1b3RhLVx1MDAzZWVzeiAtIHF1b3RhLVx1MDAzZWNoYXJnZWRfc3ogXHUwMDNjIG1pbl9yZWdpb25fc3o7XG4yNjk3Olx0fVxuMjY5ODpcdFxuMjY5OTpcdHN0YXRpYyB2b2lkIGRhbW9zX2FwcGx5X3NjaGVtZShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMTo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NjU3CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogODUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCBtZSB0YWtlIGEgbG9vayBhdCB0aGlzLgoKKipTdHJlYW1saW5pbmcgdGhlIFF1b3RhIEFkanVzdG1lbnQgTG9naWMqKgoKQWxyaWdodCwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIGBkYW1vc19hZGp1c3RfcXVvdGFgIGZ1bmN0aW9uIGFuZCwgaG9sZCBvbiBhIHNlY29uZOKApiBJIHNlZSB3aGF0IHRoZXkgd2VyZSBkb2luZyBiZWZvcmUuIFRoZXkgd2VyZSBtZXRpY3Vsb3VzbHkgaXRlcmF0aW5nIHRocm91Z2ggdGFyZ2V0cyBhbmQgcmVnaW9ucywgY2FsY3VsYXRpbmcgc2NvcmVzIGFuZCB0aGF0IGBxdW90YS0mZ3Q7bWluX3Njb3JlYCB2YWx1ZS4gU2VlbXMgZmFpcmx5IHN0YW5kYXJkIGZvciBhIHF1b3RhIHN5c3RlbS4KCkJ1dCB3YWl0IGEgbWludXRlLCBJJiMzOTttIHRoaW5raW5nLCBpZiB0aGUgcXVvdGEmIzM5O3MgYWxyZWFkeSAqZnVsbCosIHdoeSBhcmUgd2UgZXZlbiBib3RoZXJpbmcgd2l0aCBhbGwgdGhhdCBjb21wdXRhdGlvbj8gVGhlcmUmIzM5O3MgYSBjbGVhciBvcHRpbWl6YXRpb24gb3Bwb3J0dW5pdHkgaGVyZS4gSWYgdGhlIHF1b3RhJiMzOTtzIG1heGVkIG91dCwgaXQgZG9lc24mIzM5O3QgbmVlZCBhZGp1c3RpbmcsIGp1c3QgZXhpdCBlYXJseS4gSXQmIzM5O3Mgd2FzdGluZyBjeWNsZXMgdG8gY29udGludWUuIEkgY2FuIGltcHJvdmUgdGhlIHBlcmZvcm1hbmNlIGJ5IHNob3J0LWNpcmN1aXRpbmcgdGhhdCBwcm9jZXNzLiBMZXQmIzM5O3Mgc2VlIGlmIHRoaXMgbG9naWMgY2FuIGJlIGFwcGxpZWQgdG8gdGhpcyBzaXR1YXRpb24uIEkgc2hvdWxkIHRoaW5rIGFib3V0IHdoZXJlIGBkYW1vc19hZGp1c3RfcXVvdGFgIGlzIGNhbGxlZCB0byBtYWtlIHN1cmUgdGhhdCB0aGlzIGlzIHRoZSBjb3JyZWN0IHBsYWNlIHRvIGFkanVzdCB0aGUgbG9naWMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDExOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9zX2FkanVzdF9xdW90YSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYz0zMjkwPXN0YXRpYyB2b2lkIGRhbW9zX3RyYWNlX2VzeihzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb3MgKnMsXG4tLVxubW0vZGFtb24vY29yZS5jLTMzMDMtXG5tbS9kYW1vbi9jb3JlLmM6MzMwNDpzdGF0aWMgdm9pZCBkYW1vc19hZGp1c3RfcXVvdGEoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzKVxubW0vZGFtb24vY29yZS5jLTMzMDUte1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0zMzg3PXN0YXRpYyB2b2lkIGtkYW1vbmRfYXBwbHlfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zNDAyLVxubW0vZGFtb24vY29yZS5jOjM0MDM6XHRcdGRhbW9zX2FkanVzdF9xdW90YShjLCBzKTtcbm1tL2RhbW9uL2NvcmUuYy0zNDA0LVx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMTo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MTkzCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gZGVlcGx5IGZhbWlsaWFyIHdpdGggYGtkYW1vbmRfYXBwbHlfc2NoZW1lc2AgYW5kIHRoZSBicm9hZGVyIGNvbnRleHQ6CgoqKkFuYWx5emluZyBga2RhbW9uZF9hcHBseV9zY2hlbWVzYCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW50byBga2RhbW9uZF9hcHBseV9zY2hlbWVzYC4gIE15IGZpcnN0IHRob3VnaHQgaXMgYWx3YXlzIHRvIHF1aWNrbHkgYXNzZXNzIGl0cyBwdXJwb3NlIGFuZCBwbGFjZSB3aXRoaW4gdGhlIGxhcmdlciBzeXN0ZW0uIElzIGl0IHRoZSBjb3JlIGVuZ2luZSwgYSBwZXJpcGhlcmFsIHRvb2wsIG9yIGEgdXRpbGl0eSBmdW5jdGlvbj8gV2hhdCBzY2hlbWVzIGFyZSBpbnZvbHZlZD8gR2l2ZW4gdGhlIG5hbWUsIEkmIzM5O20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgdGhhdCB0aGlzIGlzIHRoZSBmdW5jdGlvbiByZXNwb25zaWJsZSBmb3IgYXBwbHlpbmcgZGlmZmVyZW50IG9wZXJhdGlvbmFsIG1ldGhvZG9sb2dpZXMgb3IgcGVyaGFwcyBvcHRpbWl6YXRpb24gdGVjaG5pcXVlcyB3aXRoaW4gdGhlIGRhZW1vbi4gSSYjMzk7bGwgbmVlZCB0byBpbW1lZGlhdGVseSBjb25zaWRlciB0aGUgcG90ZW50aWFsIGZvciBjb25mbGljdHMgYmV0d2VlbiB0aG9zZSBtZXRob2RvbG9naWVzLCBhbmQgYWxzbyBob3cgZXJyb3IgY29uZGl0aW9ucyBhcmUgaGFuZGxlZC4gSXQmIzM5O3MgbGlrZWx5IGludm9sdmVkIGluIGFwcGx5aW5nIHNvbWUgZm9ybSBvZiBrbm93bGVkZ2UtYmFzZWQgb3BlcmF0aW9uYWwgc2NoZW1lcy4gSSB3b25kZXIgaWYgaXQgdXNlcyBhbiBpbmZlcmVuY2UgZW5naW5lLCBvciBpZiBpdCYjMzk7cyBiYXNlZCBvbiBoYXJkLWNvZGVkIHJ1bGVzPyBUaGUgc2NvcGUgaXMgdW5jbGVhciwgYnV0IEkmIzM5O2xsIGJlZ2luIGJ5IGFuYWx5emluZyB0aGUgZnVuY3Rpb24mIzM5O3MgaW5wdXRzIGFuZCBvdXRwdXRzLiBJJiMzOTtsbCBuZWVkIHRvIHRyYWNrIGhvdyBpdCBoYW5kbGVzIHNjaGVtZSBwcmlvcml0eS4gV2hhdCBhcmUgdGhlIGRlcGVuZGVuY2llcz8gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBsb29raW5nIGZvciB0aGUgcG9pbnRzIHdoZXJlIGVycm9ycyBhcmUgY2F1Z2h0LCB3aGVyZSBsb2dnaW5nIGhhcHBlbnMsIGFuZCB3aGVyZSBpdCBtYWtlcyBkZWNpc2lvbnMgYWJvdXQgd2hpY2ggc2NoZW1lIHRvIGFwcGx5IGFuZCBpbiB3aGF0IG9yZGVyLiBUaGVuLCBJJiMzOTtsbCBtb3ZlIG9uIHRvIGRpc3NlY3RpbmcgaG93IGl0IGV2YWx1YXRlcyB0aGUgZWZmZWN0aXZlbmVzcyBvZiB0aG9zZSBzY2hlbWVzIGFuZCBlbnN1cmVzIHRoYXQgd2UmIzM5O3JlIG1ha2luZyBmb3J3YXJkIHByb2dyZXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMTo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMzOTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzM5MDpcdFx0c3RydWN0IGRhbW9zICpzO1xuMzM5MTpcdFx0Ym9vbCBoYXNfc2NoZW1lc190b19hcHBseSA9IGZhbHNlO1xuMzM5MjpcdFx0dW5zaWduZWQgbG9uZyBtYXhfcmVnaW9uX3N6O1xuMzM5MzpcdFxuMzM5NDpcdFx0ZGFtb25fZm9yX2VhY2hfc2NoZW1lKHMsIGMpIHtcbjMzOTU6XHRcdFx0aWYgKHRpbWVfYmVmb3JlKGMtXHUwMDNlcGFzc2VkX3NhbXBsZV9pbnRlcnZhbHMsIHMtXHUwMDNlbmV4dF9hcHBseV9zaXMpKVxuMzM5NjpcdFx0XHRcdGNvbnRpbnVlO1xuMzM5NzpcdFxuMzM5ODpcdFx0XHRpZiAoIXMtXHUwMDNld21hcmtzLmFjdGl2YXRlZClcbjMzOTk6XHRcdFx0XHRjb250aW51ZTtcbjM0MDA6XHRcbjM0MDE6XHRcdFx0aGFzX3NjaGVtZXNfdG9fYXBwbHkgPSB0cnVlO1xuMzQwMjpcdFxuMzQwMzpcdFx0XHRkYW1vc19hZGp1c3RfcXVvdGEoYywgcyk7XG4zNDA0Olx0XHR9XG4zNDA1Olx0XG4zNDA2Olx0XHRpZiAoIWhhc19zY2hlbWVzX3RvX2FwcGx5KVxuMzQwNzpcdFx0XHRyZXR1cm47XG4zNDA4Olx0XG4zNDA5Olx0XHRtYXhfcmVnaW9uX3N6ID0gZGFtb25fcmVnaW9uX3N6X2xpbWl0KGMpO1xuMzQxMDpcdFx0bXV0ZXhfbG9jayhcdTAwMjZjLVx1MDAzZXdhbGtfY29udHJvbF9sb2NrKTtcbjM0MTE6XHRcdGRhbW9uX2Zvcl9lYWNoX3RhcmdldCh0LCBjKSB7XG4zNDEyOlx0XHRcdGlmIChjLVx1MDAzZW9wcy50YXJnZXRfdmFsaWQgXHUwMDI2XHUwMDI2IGMtXHUwMDNlb3BzLnRhcmdldF92YWxpZCh0KSA9PSBmYWxzZSkge1xuMzQxMzpcdFx0XHRcdGRhbW9uX2Zvcl9lYWNoX3NjaGVtZShzLCBjKSB7XG4zNDE0Olx0XHRcdFx0XHRpZiAocy1cdTAwM2VxdW90YS5jaGFyZ2VfdGFyZ2V0X2Zyb20gIT0gdClcbjM0MTU6XHRcdFx0XHRcdFx0Y29udGludWU7XG4zNDE2Olx0XHRcdFx0XHRzLVx1MDAzZXF1b3RhLmNoYXJnZV90YXJnZXRfZnJvbSA9IE5VTEw7XG4zNDE3Olx0XHRcdFx0XHRzLVx1MDAzZXF1b3RhLmNoYXJnZV9hZGRyX2Zyb20gPSAwO1xuMzQxODpcdFx0XHRcdH1cbjM0MTk6XHRcdFx0XHRjb250aW51ZTtcbjM0MjA6XHRcdFx0fVxuMzQyMTpcdFx0XHRkYW1vc19hcHBseV90YXJnZXQoYywgdCwgbWF4X3JlZ2lvbl9zeik7XG4zNDIyOlx0XHR9XG4zNDIzOlx0XG4zNDI0Olx0XHRkYW1vbl9mb3JfZWFjaF9zY2hlbWUocywgYykge1xuMzQyNTpcdFx0XHRpZiAodGltZV9iZWZvcmUoYy1cdTAwM2VwYXNzZWRfc2FtcGxlX2ludGVydmFscywgcy1cdTAwM2VuZXh0X2FwcGx5X3NpcykpXG4zNDI2Olx0XHRcdFx0Y29udGludWU7XG4zNDI3Olx0XHRcdGRhbW9zX3dhbGtfY29tcGxldGUoYywgcyk7XG4zNDI4Olx0XHRcdGRhbW9zX3NldF9uZXh0X2FwcGx5X3NpcyhzLCBjKTtcbjM0Mjk6XHRcdFx0cy1cdTAwM2VsYXN0X2FwcGxpZWQgPSBOVUxMO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMTo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MTU1CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMTk2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYGRhbW9zX2FkanVzdF9xdW90YWAgRnVuY3Rpb24qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBgZGFtb3NfYWRqdXN0X3F1b3RhYCBmdW5jdGlvbi4gSSBzZWUgYSBuZXcgY29uZGl0aW9uYWwgY2hlY2sgaGFzIGJlZW4gYWRkZWQsIHNwZWNpZmljYWxseSBjaGVja2luZyBpZiB0aGUgcXVvdGEgaXMgZnVsbCB1c2luZyBgZGFtb3NfcXVvdGFfaXNfZnVsbGAuIFRoZSBpbnRlcmVzdGluZyBwYXJ0IGlzIHRoYXQgaWYgdGhlIHF1b3RhICppcyogZnVsbCwgdGhlIGZ1bmN0aW9uIHNpbXBseSByZXR1cm5zLiBUaGlzIG1lYW5zIHRoYXQgaWYgdGhlIHF1b3RhIGlzIGZ1bGwsIHRoZSBzY29yZSBoaXN0b2dyYW0gd29uJiMzOTt0IGdldCB1cGRhdGVkLCBhbmQgY3J1Y2lhbGx5LCBgcXVvdGEtJmd0O21pbl9zY29yZWAgd29uJiMzOTt0IGJlIHVwZGF0ZWQuCgpOb3csIG15IGV4cGVydCBpbnR1aXRpb24gdGVsbHMgbWUgdG8gZGlnIGEgbGl0dGxlIGRlZXBlci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXM6IElzIGBxdW90YS0mZ3Q7bWluX3Njb3JlYCBldmVuICp1c2VkKiB3aGVuIHRoZSBxdW90YSBpcyBmdWxsPyBJZiBpdCBpc24mIzM5O3QsIHRoZW4gdGhpcyBlYXJseSByZXR1cm4gbWlnaHQgYmUgcGVyZmVjdGx5IGZpbmUsIGV2ZW4gYW4gb3B0aW1pemF0aW9uLiBCdXQgaWYgYG1pbl9zY29yZWAgKmlzKiB1c2VkIGV2ZW4gd2hlbiB0aGUgcXVvdGEgaXMgZnVsbCwgdGhlbiB0aGVyZSYjMzk7cyBhIHBvdGVudGlhbCBsb2dpYyBmbGF3IGhlcmUgdGhhdCBuZWVkcyBpbnZlc3RpZ2F0aW9uLiBJIG5lZWQgdG8gc2VhcmNoIHRocm91Z2ggdGhlIGNvZGViYXNlIGZvciBhbGwgaW5zdGFuY2VzIHdoZXJlIGBtaW5fc2NvcmVgIGlzIHVzZWQgdG8gY2xhcmlmeSB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMTo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttaW5fc2NvcmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmM9MjQyMj1zdGF0aWMgYm9vbCBkYW1vc192YWxpZF90YXJnZXQoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjQyOS1cbm1tL2RhbW9uL2NvcmUuYzoyNDMwOlx0cmV0dXJuIGMtXHUwMDNlb3BzLmdldF9zY2hlbWVfc2NvcmUoYywgciwgcykgXHUwMDNlPSBzLVx1MDAzZXF1b3RhLm1pbl9zY29yZTtcbm1tL2RhbW9uL2NvcmUuYy0yNDMxLX1cbi0tXG5tbS9kYW1vbi9jb3JlLmM9MzMwND1zdGF0aWMgdm9pZCBkYW1vc19hZGp1c3RfcXVvdGEoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zMzY3LVx0fVxubW0vZGFtb24vY29yZS5jOjMzNjg6XHRxdW90YS1cdTAwM2VtaW5fc2NvcmUgPSBzY29yZTtcbm1tL2RhbW9uL2NvcmUuYy0zMzY5LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTE6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzgzMAoJCQkJCQkJb3V0cHV0OiAxNwoJCQkJCQkJdGhvdWdodHM6IDU0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBgcy0mZ3Q7cXVvdGEubWluX3Njb3JlYCBWYXJpYWJsZSoqCgpSaWdodCwgc28gYHMtJmd0O3F1b3RhLm1pbl9zY29yZWAuLi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGxpZmVjeWNsZS4gVGhlIG5vdGUgc2F5cyBpdCYjMzk7cyAqb25seSogcmVhZCBpbiBgZGFtb3NfdmFsaWRfdGFyZ2V0YCwgd2hpY2ggaXMgaGVscGZ1bCwgYnV0IHRlbGxzIG1lIG5vdGhpbmcgYWJvdXQgKmhvdyogaXQgZ2V0cyBpdHMgdmFsdWUuIFNvLCBJIG5lZWQgdG8gdHJhY2UgYmFjay4gV2hlcmUgaXMgYHMtJmd0O3F1b3RhYCBhY3R1YWxseSAqYWxsb2NhdGVkKiBhbmQgKmluaXRpYWxpemVkKj8gR2l2ZW4gdGhlIG5hbWluZyBjb252ZW50aW9uIGFuZCB0aGUgY29udGV4dCBvZiB0aGUgY29kZSBiYXNlLCBJIHN1c3BlY3QgdGhlIGFsbG9jYXRpb24vaW5pdGlhbGl6YXRpb24gaGFwcGVucyBpbiBhIGZ1bmN0aW9uIHJlbGF0ZWQgdG8gY3JlYXRpbmcgYSBuZXcgc2NoZW1lLiBTb21ldGhpbmcgbGlrZSBgZGFtb3NfbmV3X3NjaGVtZWAgc2VlbXMgYSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0LiBUaGF0JiMzOTtzIHRoZSBmaXJzdCBwbGFjZSBJJiMzOTttIGdvaW5nIHRvIGRpZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBgcXVvdGFgIHN0cnVjdHVyZSBpcyBwb3B1bGF0ZWQsIGJlY2F1c2UgdGhhdCYjMzk7cyB3aGF0IHdpbGwgZ2l2ZSBtZSB0aGUgY29udGV4dCBJIG5lZWQgYXJvdW5kIHRoZSBtZWFuaW5nIGFuZCBleHBlY3RlZCBiZWhhdmlvciBvZiBgbWluX3Njb3JlYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTE6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWluX3Njb3JlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvZ3B1L2RybS9zY2hlZHVsZXIvc2NoZWRfbWFpbi5jPTk1OT1kcm1fc2NoZWRfcGlja19iZXN0KHN0cnVjdCBkcm1fZ3B1X3NjaGVkdWxlciAqKnNjaGVkX2xpc3QsXG4tLVxuZHJpdmVycy9ncHUvZHJtL3NjaGVkdWxlci9zY2hlZF9tYWluLmMtOTYzLVx0aW50IGk7XG5kcml2ZXJzL2dwdS9kcm0vc2NoZWR1bGVyL3NjaGVkX21haW4uYzo5NjQ6XHR1bnNpZ25lZCBpbnQgbWluX3Njb3JlID0gVUlOVF9NQVgsIG51bV9zY29yZTtcbmRyaXZlcnMvZ3B1L2RybS9zY2hlZHVsZXIvc2NoZWRfbWFpbi5jLTk2NS1cbi0tXG5kcml2ZXJzL2dwdS9kcm0vc2NoZWR1bGVyL3NjaGVkX21haW4uYy05NzUtXHRcdG51bV9zY29yZSA9IGF0b21pY19yZWFkKHNjaGVkLVx1MDAzZXNjb3JlKTtcbmRyaXZlcnMvZ3B1L2RybS9zY2hlZHVsZXIvc2NoZWRfbWFpbi5jOjk3NjpcdFx0aWYgKG51bV9zY29yZSBcdTAwM2MgbWluX3Njb3JlKSB7XG5kcml2ZXJzL2dwdS9kcm0vc2NoZWR1bGVyL3NjaGVkX21haW4uYzo5Nzc6XHRcdFx0bWluX3Njb3JlID0gbnVtX3Njb3JlO1xuZHJpdmVycy9ncHUvZHJtL3NjaGVkdWxlci9zY2hlZF9tYWluLmMtOTc4LVx0XHRcdHBpY2tlZF9zY2hlZCA9IHNjaGVkO1xuLS1cbmluY2x1ZGUvbGludXgvZGFtb24uaD0yNzY9c3RydWN0IGRhbW9zX3F1b3RhIHtcbi0tXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMzA0LVx0LyogRm9yIHByaW9yaXRpemF0aW9uICovXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6MzA1Olx0dW5zaWduZWQgaW50IG1pbl9zY29yZTtcbmluY2x1ZGUvbGludXgvZGFtb24uaC0zMDYtXG4tLVxubW0vZGFtb24vY29yZS5jPTI0MjI9c3RhdGljIGJvb2wgZGFtb3NfdmFsaWRfdGFyZ2V0KHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXG4tLVxubW0vZGFtb24vY29yZS5jLTI0MjktXG5tbS9kYW1vbi9jb3JlLmM6MjQzMDpcdHJldHVybiBjLVx1MDAzZW9wcy5nZXRfc2NoZW1lX3Njb3JlKGMsIHIsIHMpIFx1MDAzZT0gcy1cdTAwM2VxdW90YS5taW5fc2NvcmU7XG5tbS9kYW1vbi9jb3JlLmMtMjQzMS19XG4tLVxubW0vZGFtb24vY29yZS5jPTMzMDQ9c3RhdGljIHZvaWQgZGFtb3NfYWRqdXN0X3F1b3RhKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vcyAqcylcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzM2Ny1cdH1cbm1tL2RhbW9uL2NvcmUuYzozMzY4Olx0cXVvdGEtXHUwMDNlbWluX3Njb3JlID0gc2NvcmU7XG5tbS9kYW1vbi9jb3JlLmMtMzM2OS19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDExOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg2NDAKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIGJyZWFrZG93biBvZiBteSB0aG91Z2h0IHByb2Nlc3MgcmVnYXJkaW5nIHRoZSBhbGxvY2F0aW9uIG9mIGBzdHJ1Y3QgZGFtb3NgIHdpdGhpbiB0aGUgRGFtb24gc3lzdGVtLgoKKipEaXZpbmcgaW50byBgc3RydWN0IGRhbW9zYCBBbGxvY2F0aW9uIGluIERBTU9OKioKCkFscmlnaHQsIHNvIHRoZSBmaXJzdCB0aGluZyBJJiMzOTttIGRvaW5nIGlzIHRyeWluZyB0byB1bmRlcnN0YW5kIGhvdyBgc3RydWN0IGRhbW9zYOKAlHRoZSBjb3JlIGRhdGEgc3RydWN0dXJlIGZvciBEYW1vbuKAlGdldHMgYWxsb2NhdGVkLiBJIG5lZWQgdG8ga25vdzogSXMgaXQgc3RhdGljYWxseSBhbGxvY2F0ZWQ/IER5bmFtaWNhbGx5PyBXaGVyZSBleGFjdGx5IGluIG1lbW9yeSBpcyBpdCByZXNpZGluZywgYW5kIGhvdyBpcyBpdHMgbGlmZXRpbWUgbWFuYWdlZD8gVGhpcyBpcyBjcml0aWNhbCBmb3IgdW5kZXJzdGFuZGluZyBEYW1vbiYjMzk7cyBvdmVyYWxsIHBlcmZvcm1hbmNlIHByb2ZpbGUgYW5kIHBvdGVudGlhbCBib3R0bGVuZWNrcywgZXNwZWNpYWxseSBhcyB0aGUgbW9uaXRvcmVkIHN5c3RlbSBzY2FsZXMuIElzIGl0IGEgZ2xvYmFsIHZhcmlhYmxlLCBvciBhcmUgdGhlcmUgbXVsdGlwbGUgaW5zdGFuY2VzIGNyZWF0ZWQgZGVwZW5kaW5nIG9uIGNvbmZpZ3VyYXRpb24/IElmIGl0JiMzOTtzIGR5bmFtaWMsIGhvdyBhcmUgdGhvc2UgYWxsb2NhdGlvbnMgdGllZCBpbnRvIHRoZSB1bmRlcmx5aW5nIG1lbW9yeSBtYW5hZ2VtZW50IHN5c3RlbT8gRG8gdGhleSB1c2UgYGttYWxsb2NgLCBgdm1fYWxsb2NgLCBvciBzb21ldGhpbmcgZWxzZT8gVW5kZXJzdGFuZGluZyB0aGlzIHdpbGwgbGV0IG1lIGV2YWx1YXRlIHBvdGVudGlhbCBtZW1vcnkgZnJhZ21lbnRhdGlvbiBpc3N1ZXMsIGNvbnRlbnRpb24sIGFuZCB0aGUgaW1wYWN0IG9mIHRoZSBhbGxvY2F0aW9uIHN0cmF0ZWd5IG9uIHRoZSBnYXJiYWdlIGNvbGxlY3Rpb24uIFRoZW4gaXQgd2lsbCBhbGxvdyBtZSB0byBsb29rIGRlZXBlciwgSSBzaG91bGQgYWxzbyBzZWUgaG93IHRoZSBpbmZvcm1hdGlvbiBpbiBgc3RydWN0IGRhbW9zYCBpcyB1dGlsaXplZCwgc3BlY2lmaWNhbGx5IGhvdyB0aGUgcG9pbnRlcnMgYW5kIHJlZmVyZW5jZXMgaXQgY29udGFpbnMgYXJlIHVzZWQgd2l0aGluIHRoZSBkYWVtb24gdG8gbW9uaXRvciB0aGUgbWVtb3J5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMTo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYW1vbl9uZXdfc2NoZW1lJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jPTczNz1zdGF0aWMgc3RydWN0IGRhbW9zX3F1b3RhICpkYW1vc19xdW90YV9pbml0KHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEpXG4tLVxubW0vZGFtb24vY29yZS5jLTc0OS1cbm1tL2RhbW9uL2NvcmUuYzo3NTA6c3RydWN0IGRhbW9zICpkYW1vbl9uZXdfc2NoZW1lKHN0cnVjdCBkYW1vc19hY2Nlc3NfcGF0dGVybiAqcGF0dGVybixcbm1tL2RhbW9uL2NvcmUuYy03NTEtXHRcdFx0ZW51bSBkYW1vc19hY3Rpb24gYWN0aW9uLFxuLS1cbm1tL2RhbW9uL2NvcmUuYz0xNTcyPXN0YXRpYyBpbnQgZGFtb25fY29tbWl0X3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqZHN0LCBzdHJ1Y3QgZGFtb25fY3R4ICpzcmMpXG4tLVxubW0vZGFtb24vY29yZS5jLTE1OTAtXHRcdFx0Y29udGludWU7XG5tbS9kYW1vbi9jb3JlLmM6MTU5MTpcdFx0bmV3X3NjaGVtZSA9IGRhbW9uX25ld19zY2hlbWUoXHUwMDI2c3JjX3NjaGVtZS1cdTAwM2VwYXR0ZXJuLFxubW0vZGFtb24vY29yZS5jLTE1OTItXHRcdFx0XHRzcmNfc2NoZW1lLVx1MDAzZWFjdGlvbixcbi0tXG5tbS9kYW1vbi9scnVfc29ydC5jPTE4OD1zdGF0aWMgc3RydWN0IGRhbW9zICpkYW1vbl9scnVfc29ydF9uZXdfc2NoZW1lKFxuLS1cbm1tL2RhbW9uL2xydV9zb3J0LmMtMTk1LVxubW0vZGFtb24vbHJ1X3NvcnQuYzoxOTY6XHRyZXR1cm4gZGFtb25fbmV3X3NjaGVtZShcbm1tL2RhbW9uL2xydV9zb3J0LmMtMTk3LVx0XHRcdC8qIGZpbmQgdGhlIHBhdHRlcm4sIGFuZCAqL1xuLS1cbm1tL2RhbW9uL3JlY2xhaW0uYz0xNjc9c3RhdGljIHN0cnVjdCBkYW1vcyAqZGFtb25fcmVjbGFpbV9uZXdfc2NoZW1lKHVuc2lnbmVkIGxvbmcgYWdncl9pbnRlcnZhbClcbi0tXG5tbS9kYW1vbi9yZWNsYWltLmMtMTgwLVxubW0vZGFtb24vcmVjbGFpbS5jOjE4MTpcdHJldHVybiBkYW1vbl9uZXdfc2NoZW1lKFxubW0vZGFtb24vcmVjbGFpbS5jLTE4Mi1cdFx0XHRcdTAwMjZwYXR0ZXJuLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0yOTg3PXN0YXRpYyBzdHJ1Y3QgZGFtb3MgKmRhbW9uX3N5c2ZzX21rX3NjaGVtZShcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzAyNC1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozMDI1Olx0c2NoZW1lID0gZGFtb25fbmV3X3NjaGVtZShcdTAwMjZwYXR0ZXJuLCBzeXNmc19zY2hlbWUtXHUwMDNlYWN0aW9uLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTMwMjYtXHRcdFx0c3lzZnNfc2NoZW1lLVx1MDAzZWFwcGx5X2ludGVydmFsX3VzLCBcdTAwMjZxdW90YSwgXHUwMDI2d21hcmtzLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMTo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NDg5CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IGltbWVkaWF0ZSB0aG91Z2h0IHByb2Nlc3M6CgoqKkluaXRpYWwgQXNzZXNzbWVudDogQ29kZSBJbnNwZWN0aW9uKioKCk9rYXksIHRpbWUgdG8gZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHR3byBzcGVjaWZpYyBlbGVtZW50czogYGRhbW9uX25ld19zY2hlbWVgIGFuZCBgZGFtb3NfcXVvdGFfaW5pdGAuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgcnVubmluZyB0aHJvdWdoIHRoZXNlLCB3aXRoIG15IHNwZWNpYWxpc3Qga25vd2xlZGdlIEkgd2lsbCB0cnkgdG8gZGV0ZXJtaW5lIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVtLCBhbmQgdW5kZXJzdGFuZCBob3cgdGhleSB3b3JrLCBhcyB0aGVzZSBtaWdodCByZWxhdGUgdG8gYSBuZXcgZGV2ZWxvcG1lbnQgcGxhbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTE6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3MzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDczNTpcdFxuIDczNjpcdC8qIGluaXRpYWxpemUgZmllbGRzIG9mIEBxdW90YSB0aGF0IG5vcm1hbGx5IEFQSSB1c2VycyB3b3VsZG4mIzM5O3Qgc2V0ICovXG4gNzM3Olx0c3RhdGljIHN0cnVjdCBkYW1vc19xdW90YSAqZGFtb3NfcXVvdGFfaW5pdChzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhKVxuIDczODpcdHtcbiA3Mzk6XHRcdHF1b3RhLVx1MDAzZWVzeiA9IDA7XG4gNzQwOlx0XHRxdW90YS1cdTAwM2V0b3RhbF9jaGFyZ2VkX3N6ID0gMDtcbiA3NDE6XHRcdHF1b3RhLVx1MDAzZXRvdGFsX2NoYXJnZWRfbnMgPSAwO1xuIDc0MjpcdFx0cXVvdGEtXHUwMDNlY2hhcmdlZF9zeiA9IDA7XG4gNzQzOlx0XHRxdW90YS1cdTAwM2VjaGFyZ2VkX2Zyb20gPSAwO1xuIDc0NDpcdFx0cXVvdGEtXHUwMDNlY2hhcmdlX3RhcmdldF9mcm9tID0gTlVMTDtcbiA3NDU6XHRcdHF1b3RhLVx1MDAzZWNoYXJnZV9hZGRyX2Zyb20gPSAwO1xuIDc0NjpcdFx0cXVvdGEtXHUwMDNlZXN6X2JwID0gMDtcbiA3NDc6XHRcdHJldHVybiBxdW90YTtcbiA3NDg6XHR9XG4gNzQ5Olx0XG4gNzUwOlx0c3RydWN0IGRhbW9zICpkYW1vbl9uZXdfc2NoZW1lKHN0cnVjdCBkYW1vc19hY2Nlc3NfcGF0dGVybiAqcGF0dGVybixcbiA3NTE6XHRcdFx0XHRlbnVtIGRhbW9zX2FjdGlvbiBhY3Rpb24sXG4gNzUyOlx0XHRcdFx0dW5zaWduZWQgbG9uZyBhcHBseV9pbnRlcnZhbF91cyxcbiA3NTM6XHRcdFx0XHRzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhLFxuIDc1NDpcdFx0XHRcdHN0cnVjdCBkYW1vc193YXRlcm1hcmtzICp3bWFya3MsXG4gNzU1Olx0XHRcdFx0aW50IHRhcmdldF9uaWQpXG4gNzU2Olx0e1xuIDc1NzpcdFx0c3RydWN0IGRhbW9zICpzY2hlbWU7XG4gNzU4Olx0XG4gNzU5Olx0XHRzY2hlbWUgPSBrbWFsbG9jX29iaigqc2NoZW1lKTtcbiA3NjA6XHRcdGlmICghc2NoZW1lKVxuIDc2MTpcdFx0XHRyZXR1cm4gTlVMTDtcbiA3NjI6XHRcdHNjaGVtZS1cdTAwM2VwYXR0ZXJuID0gKnBhdHRlcm47XG4gNzYzOlx0XHRzY2hlbWUtXHUwMDNlYWN0aW9uID0gYWN0aW9uO1xuIDc2NDpcdFx0c2NoZW1lLVx1MDAzZWFwcGx5X2ludGVydmFsX3VzID0gYXBwbHlfaW50ZXJ2YWxfdXM7XG4gNzY1Olx0XHQvKlxuIDc2NjpcdFx0ICogbmV4dF9hcHBseV9zaXMgd2lsbCBiZSBzZXQgd2hlbiBrZGFtb25kIHN0YXJ0cy4gIFdoaWxlIGtkYW1vbmQgaXNcbiA3Njc6XHRcdCAqIHJ1bm5pbmcsIGl0IHdpbGwgYWxzbyB1cGRhdGVkIHdoZW4gaXQgaXMgYWRkZWQgdG8gdGhlIERBTU9OIGNvbnRleHQsXG4gNzY4Olx0XHQgKiBvciBkYW1vbl9hdHRycyBhcmUgdXBkYXRlZC5cbiA3Njk6XHRcdCAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMTo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDE2OAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkEgTW9tZW50IG9mIERvdWJ0LCBUaGVuIGEgRGVlcCBEaXZlIGludG8gQ29kZSoqCgpPa2F5LCBob2xkIG9uIGEgc2Vjb25kISBMaW5lIDc1OSBqdXN0IGp1bXBlZCBvdXQgYXQgbWU6IGBzY2hlbWUgPSBrbWFsbG9jX29iaigqc2NoZW1lKTtgIFdoeSBhcmUgd2UgYWxsb2NhdGluZyBhIG5ldyBgc2NoZW1lYCBvYmplY3QsIGFuZCB3aGF0IGV4YWN0bHkgaXMgZ29pbmcgb24gaGVyZT8gVGhlIGZhY3QgdGhhdCB3ZSYjMzk7cmUgcmVhbGxvY2F0aW5nLCBzdWdnZXN0cyB0aGUgb3JpZ2luYWwgb2JqZWN0JiMzOTtzIGRhdGEgYXJlIGxvc3QsIGFuZCBpdCYjMzk7cyBub3QgaW1tZWRpYXRlbHkgY2xlYXIgd2hhdCYjMzk7cyBoYXBwZW5pbmcgdG8gdGhlIGN1cnJlbnQgdmFsdWUgb2YgYHNjaGVtZS0mZ3Q7cXVvdGFgLiBUaGF04oCZcyBhIGNyaXRpY2FsIHBpZWNlIG9mIGluZm9ybWF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGJldHRlci4gT2theSwgSSYjMzk7bSBoZWFkaW5nIHRvIGBtbS9kYW1vbi9jb3JlLmNgLCBzcGVjaWZpY2FsbHkgbGluZXMgNzY1IHRocm91Z2ggODAwLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIHN1YnNlcXVlbnQgY29kZSBkb2VzIHdpdGggdGhhdCBzdHJ1Y3R1cmUuIEnigJltIGhvcGluZyBpdOKAmXMgYWxsIGNyeXN0YWwgY2xlYXIgYWZ0ZXIgbG9va2luZyBhdCB0aG9zZSBsaW5lcy4gSSBuZWVkIHRvIGJlIHN1cmUgdGhpcyByZWFsbG9jYXRpb24gaXNuJiMzOTt0IGdvaW5nIHRvIGludHJvZHVjZSBhIHN1YnRsZSBtZW1vcnkgbGVhayBvciwgZXZlbiB3b3JzZSwgZGF0YSBjb3JydXB0aW9uIHJlbGF0ZWQgdG8gcXVvdGFzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMTo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDc2NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNzY1Olx0XHQvKlxuIDc2NjpcdFx0ICogbmV4dF9hcHBseV9zaXMgd2lsbCBiZSBzZXQgd2hlbiBrZGFtb25kIHN0YXJ0cy4gIFdoaWxlIGtkYW1vbmQgaXNcbiA3Njc6XHRcdCAqIHJ1bm5pbmcsIGl0IHdpbGwgYWxzbyB1cGRhdGVkIHdoZW4gaXQgaXMgYWRkZWQgdG8gdGhlIERBTU9OIGNvbnRleHQsXG4gNzY4Olx0XHQgKiBvciBkYW1vbl9hdHRycyBhcmUgdXBkYXRlZC5cbiA3Njk6XHRcdCAqL1xuIDc3MDpcdFx0c2NoZW1lLVx1MDAzZW5leHRfYXBwbHlfc2lzID0gMDtcbiA3NzE6XHRcdHNjaGVtZS1cdTAwM2V3YWxrX2NvbXBsZXRlZCA9IGZhbHNlO1xuIDc3MjpcdFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2c2NoZW1lLVx1MDAzZWNvcmVfZmlsdGVycyk7XG4gNzczOlx0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZzY2hlbWUtXHUwMDNlb3BzX2ZpbHRlcnMpO1xuIDc3NDpcdFx0c2NoZW1lLVx1MDAzZXN0YXQgPSAoc3RydWN0IGRhbW9zX3N0YXQpe307XG4gNzc1Olx0XHRzY2hlbWUtXHUwMDNlbWF4X25yX3NuYXBzaG90cyA9IDA7XG4gNzc2Olx0XHRzY2hlbWUtXHUwMDNlbGFzdF9hcHBsaWVkID0gTlVMTDtcbiA3Nzc6XHRcdElOSVRfTElTVF9IRUFEKFx1MDAyNnNjaGVtZS1cdTAwM2VsaXN0KTtcbiA3Nzg6XHRcbiA3Nzk6XHRcdHNjaGVtZS1cdTAwM2VxdW90YSA9ICooZGFtb3NfcXVvdGFfaW5pdChxdW90YSkpO1xuIDc4MDpcdFx0LyogcXVvdGEuZ29hbHMgc2hvdWxkIGJlIHNlcGFyYXRlbHkgc2V0IGJ5IGNhbGxlciAqL1xuIDc4MTpcdFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2c2NoZW1lLVx1MDAzZXF1b3RhLmdvYWxzKTtcbiA3ODI6XHRcbiA3ODM6XHRcdHNjaGVtZS1cdTAwM2V3bWFya3MgPSAqd21hcmtzO1xuIDc4NDpcdFx0c2NoZW1lLVx1MDAzZXdtYXJrcy5hY3RpdmF0ZWQgPSB0cnVlO1xuIDc4NTpcdFxuIDc4NjpcdFx0c2NoZW1lLVx1MDAzZW1pZ3JhdGVfZGVzdHMgPSAoc3RydWN0IGRhbW9zX21pZ3JhdGVfZGVzdHMpe307XG4gNzg3Olx0XHRzY2hlbWUtXHUwMDNldGFyZ2V0X25pZCA9IHRhcmdldF9uaWQ7XG4gNzg4Olx0XG4gNzg5Olx0XHRyZXR1cm4gc2NoZW1lO1xuIDc5MDpcdH1cbiA3OTE6XHRcbiA3OTI6XHRzdGF0aWMgdm9pZCBkYW1vc19zZXRfbmV4dF9hcHBseV9zaXMoc3RydWN0IGRhbW9zICpzLCBzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4gNzkzOlx0e1xuIDc5NDpcdFx0dW5zaWduZWQgbG9uZyBzYW1wbGVfaW50ZXJ2YWwgPSBjdHgtXHUwMDNlYXR0cnMuc2FtcGxlX2ludGVydmFsID9cbiA3OTU6XHRcdFx0Y3R4LVx1MDAzZWF0dHJzLnNhbXBsZV9pbnRlcnZhbCA6IDE7XG4gNzk2Olx0XHR1bnNpZ25lZCBsb25nIGFwcGx5X2ludGVydmFsID0gcy1cdTAwM2VhcHBseV9pbnRlcnZhbF91cyA/XG4gNzk3Olx0XHRcdHMtXHUwMDNlYXBwbHlfaW50ZXJ2YWxfdXMgOiBjdHgtXHUwMDNlYXR0cnMuYWdncl9pbnRlcnZhbDtcbiA3OTg6XHRcbiA3OTk6XHRcdHMtXHUwMDNlbmV4dF9hcHBseV9zaXMgPSBjdHgtXHUwMDNlcGFzc2VkX3NhbXBsZV9pbnRlcnZhbHMgJiM0MztcbiA4MDA6XHRcdFx0YXBwbHlfaW50ZXJ2YWwgLyBzYW1wbGVfaW50ZXJ2YWw7XG4gODAxOlx0fVxuIDgwMjpcdFxuIDgwMzpcdHZvaWQgZGFtb25fYWRkX3NjaGVtZShzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vcyAqcylcbiA4MDQ6XHR7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDExOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMTA5CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYGRhbW9zX3F1b3RhX2luaXRgIEZ1bmN0aW9uIGFuZCBpdHMgVXNlKioKCk9rYXksIGhvbGQgb24gYSBtaW51dGUuIExldCBtZSBmb2N1cyBvbiB0aGlzIGBkYW1vc19xdW90YV9pbml0YCBmdW5jdGlvbi4gSXQgc2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCwgaW5pdGlhbGl6aW5nIHRoZSBmaWVsZHMgb2YgYSBgZGFtb3NfcXVvdGFgIHN0cnVjdHVyZSB0byB0aGVpciBkZWZhdWx0IHZhbHVlczogemVyb2luZyBvdXQgdGhlIHNpemUgYW5kIHRpbWluZyByZWxhdGVkIHZhcmlhYmxlcywgYWxvbmcgd2l0aCB0aGUgcG9pbnRlcnMuICBOb3cgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgcXVvdGEgc3RydWN0dXJlIGlzIGFjdHVhbGx5ICp1c2VkKi4gV2hlcmUgaXMgdGhpcyBgcXVvdGFgIHZhcmlhYmxlIGJlaW5nIGluaXRpYWxpemVkIGFuZCBwYXNzZWQgYXJvdW5kPwoKVGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHRyYWNlIHdoZXJlIGBkYW1vbl9uZXdfc2NoZW1lYCBpcyBiZWluZyBjYWxsZWQsIGFzIHRoZSBgcXVvdGFgIGFyZ3VtZW50IG9mIGBkYW1vc19xdW90YV9pbml0YCBpcyBwYXNzZWQgdG8gYGRhbW9uX25ld19zY2hlbWVgCgpMb29raW5nIGF0IHRoZSBjYWxsIHNpdGVzLCBJIHNlZSB0d286IGBkYW1vbl9jb21taXRfc2NoZW1lc2AgYW5kIGBkYW1vbl9scnVfc29ydF9uZXdfc2NoZW1lYC4gSW4gdGhlIGZpcnN0IGNhc2UsIGBzcmNfc2NoZW1lLSZndDtxdW90YWAgaXMgcGFzc2VkLCBzbyBJIG5lZWQgdG8gdHJhY2sgdGhlIG9yaWdpbiBvZiB0aGF0LiBUaGUgb3RoZXIgY2FzZSBpcyB0aHJvdWdoIGBkYW1vbl9scnVfc29ydF9uZXdfc2NoZW1lYC4gT2theSwgc28gbGV0JiMzOTtzIHNlZSB3aGF0IGlzIGhhcHBlbmluZyBpbnNpZGUgYGRhbW9uX2xydV9zb3J0X25ld19zY2hlbWVgIG5leHQuIFRoaXMgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgaG93IHRoaXMgcXVvdGEgaXMgYmVpbmcgc2V0IHVwIGluIHRoZSBiaWdnZXIgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTE6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9kYW1vbi9scnVfc29ydC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTg1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxODU6XHRzdGF0aWMgc3RydWN0IGRhbW9uX2N0eCAqY3R4O1xuIDE4NjpcdHN0YXRpYyBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0YXJnZXQ7XG4gMTg3Olx0XG4gMTg4Olx0c3RhdGljIHN0cnVjdCBkYW1vcyAqZGFtb25fbHJ1X3NvcnRfbmV3X3NjaGVtZShcbiAxODk6XHRcdFx0c3RydWN0IGRhbW9zX2FjY2Vzc19wYXR0ZXJuICpwYXR0ZXJuLCBlbnVtIGRhbW9zX2FjdGlvbiBhY3Rpb24pXG4gMTkwOlx0e1xuIDE5MTpcdFx0c3RydWN0IGRhbW9zX3F1b3RhIHF1b3RhID0gZGFtb25fbHJ1X3NvcnRfcXVvdGE7XG4gMTkyOlx0XG4gMTkzOlx0XHQvKiBVc2UgaGFsZiBvZiB0b3RhbCBxdW90YSBmb3IgaG90L2NvbGQgcGFnZXMgc29ydGluZyAqL1xuIDE5NDpcdFx0cXVvdGEubXMgPSBxdW90YS5tcyAvIDI7XG4gMTk1Olx0XG4gMTk2Olx0XHRyZXR1cm4gZGFtb25fbmV3X3NjaGVtZShcbiAxOTc6XHRcdFx0XHQvKiBmaW5kIHRoZSBwYXR0ZXJuLCBhbmQgKi9cbiAxOTg6XHRcdFx0XHRwYXR0ZXJuLFxuIDE5OTpcdFx0XHRcdC8qIChkZSlwcmlvcml0aXplIG9uIExSVS1saXN0cyAqL1xuIDIwMDpcdFx0XHRcdGFjdGlvbixcbiAyMDE6XHRcdFx0XHQvKiBmb3IgZWFjaCBhZ2dyZWdhdGlvbiBpbnRlcnZhbCAqL1xuIDIwMjpcdFx0XHRcdDAsXG4gMjAzOlx0XHRcdFx0LyogdW5kZXIgdGhlIHF1b3RhLiAqL1xuIDIwNDpcdFx0XHRcdFx1MDAyNnF1b3RhLFxuIDIwNTpcdFx0XHRcdC8qIChEZSlhY3RpdmF0ZSB0aGlzIGFjY29yZGluZyB0byB0aGUgd2F0ZXJtYXJrcy4gKi9cbiAyMDY6XHRcdFx0XHRcdTAwMjZkYW1vbl9scnVfc29ydF93bWFya3MsXG4gMjA3Olx0XHRcdFx0TlVNQV9OT19OT0RFKTtcbiAyMDg6XHR9XG4gMjA5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDExOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMDA5CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogODQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgSSBkZWx2ZSBpbnRvIHRoaXMgY29kZToKCioqQW5hbHl6aW5nIERBTU9OJiMzOTtzIE1lbW9yeSBSZWNsYW1hdGlvbiBRdW90YSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBob3cgREFNT04gaGFuZGxlcyBpdHMgbWVtb3J5IHJlY2xhbWF0aW9uIHF1b3Rhcy4gSXQgc2VlbXMgbGlrZSBhIGZldyBrZXkgdmFyaWFibGVzIGFyZSBhdCBwbGF5IGhlcmUuIEZpcnN0LCBpbiBgZGFtb25fbHJ1X3NvcnRfcXVvdGFgLCBJIHNlZSBhIGdsb2JhbCB2YXJpYWJsZSwgaW5pdGlhbGl6ZWQgdG8gemVyby4gVGhhdCYjMzk7cyBnb29kIHRvIGtub3cg4oCTIGl0IHNldHMgYSBiYXNlbGluZSwgcHJlc3VtYWJseSBmb3IgdHJhY2tpbmcgc29tZXRoaW5nIHJlbGF0ZWQgdG8gTFJVIHNvcnRpbmcgYW5kIHF1b3RhIG1hbmFnZW1lbnQuIFRoZW4sIGxvb2tpbmcgYXQgYGRhbW9uX3JlY2xhaW1fbmV3X3NjaGVtZWAsIEkgZmluZCBhbm90aGVyIG9uZTogYGRhbW9uX3JlY2xhaW1fcXVvdGFgLCBhbHNvIGEgc3RhdGljIGdsb2JhbC4gU28sIHdlJiMzOTt2ZSBnb3QgYXQgbGVhc3QgdHdvIHN0YXRpYyBnbG9iYWwgdmFyaWFibGVzIGhlcmUgaGFuZGxpbmcgcXVvdGEgbWVjaGFuaXNtcywgd2hpY2ggaXMgdHlwaWNhbCBmb3IgcGVyZm9ybWFuY2UtY3JpdGljYWwgb3BlcmF0aW9ucy4gTGV0JiMzOTtzIGRpZyBkZWVwZXI7IHRvIGJlIHRob3JvdWdoLCBJIHNob3VsZCBub3cgbW92ZSBvbiBhbmQgY2hlY2sgdGhlIGBkYW1vbl9zeXNmc19ta19zY2hlbWVgIGZ1bmN0aW9uIOKAkyB0aGF0JiMzOTtzIG9mdGVuIHdoZXJlIHRoZSBrbm9icyBnZXQgdHVybmVkLCBzbyB0aGF0JiMzOTtzIG15IG5leHQgc3RvcC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTE6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMDE1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzMwMTU6XHRcdFx0LmZhaWxfY2hhcmdlX2Rlbm9tID0gc3lzZnNfcXVvdGFzLVx1MDAzZWZhaWxfY2hhcmdlX2Rlbm9tLFxuMzAxNjpcdFx0fTtcbjMwMTc6XHRcdHN0cnVjdCBkYW1vc193YXRlcm1hcmtzIHdtYXJrcyA9IHtcbjMwMTg6XHRcdFx0Lm1ldHJpYyA9IHN5c2ZzX3dtYXJrcy1cdTAwM2VtZXRyaWMsXG4zMDE5Olx0XHRcdC5pbnRlcnZhbCA9IHN5c2ZzX3dtYXJrcy1cdTAwM2VpbnRlcnZhbF91cyxcbjMwMjA6XHRcdFx0LmhpZ2ggPSBzeXNmc193bWFya3MtXHUwMDNlaGlnaCxcbjMwMjE6XHRcdFx0Lm1pZCA9IHN5c2ZzX3dtYXJrcy1cdTAwM2VtaWQsXG4zMDIyOlx0XHRcdC5sb3cgPSBzeXNmc193bWFya3MtXHUwMDNlbG93LFxuMzAyMzpcdFx0fTtcbjMwMjQ6XHRcbjMwMjU6XHRcdHNjaGVtZSA9IGRhbW9uX25ld19zY2hlbWUoXHUwMDI2cGF0dGVybiwgc3lzZnNfc2NoZW1lLVx1MDAzZWFjdGlvbixcbjMwMjY6XHRcdFx0XHRzeXNmc19zY2hlbWUtXHUwMDNlYXBwbHlfaW50ZXJ2YWxfdXMsIFx1MDAyNnF1b3RhLCBcdTAwMjZ3bWFya3MsXG4zMDI3Olx0XHRcdFx0c3lzZnNfc2NoZW1lLVx1MDAzZXRhcmdldF9uaWQpO1xuMzAyODpcdFx0aWYgKCFzY2hlbWUpXG4zMDI5Olx0XHRcdHJldHVybiBOVUxMO1xuMzAzMDpcdFxuMzAzMTpcdFx0ZXJyID0gZGFtb3Nfc3lzZnNfYWRkX3F1b3RhX3Njb3JlKHN5c2ZzX3F1b3Rhcy1cdTAwM2Vnb2FscywgXHUwMDI2c2NoZW1lLVx1MDAzZXF1b3RhKTtcbjMwMzI6XHRcdGlmIChlcnIpIHtcbjMwMzM6XHRcdFx0ZGFtb25fZGVzdHJveV9zY2hlbWUoc2NoZW1lKTtcbjMwMzQ6XHRcdFx0cmV0dXJuIE5VTEw7XG4zMDM1Olx0XHR9XG4zMDM2Olx0XG4zMDM3Olx0XHRlcnIgPSBkYW1vbl9zeXNmc19hZGRfc2NoZW1lX2ZpbHRlcnMoc2NoZW1lLCBzeXNmc19zY2hlbWUtXHUwMDNlY29yZV9maWx0ZXJzKTtcbjMwMzg6XHRcdGlmIChlcnIpIHtcbjMwMzk6XHRcdFx0ZGFtb25fZGVzdHJveV9zY2hlbWUoc2NoZW1lKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42My8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTE6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI3NTgKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA0NjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgREFNT04mIzM5O3MgUXVvdGEgSGFuZGxpbmcqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSW4gYGRhbW9uX3N5c2ZzX21rX3NjaGVtZWAsIEkgc2VlIGBzdHJ1Y3QgZGFtb3NfcXVvdGEgcXVvdGEgPSB7IC4uLiB9O2AgYmVpbmcgaW5pdGlhbGl6ZWQgd2l0aCBkZXNpZ25hdGVkIGluaXRpYWxpemVycy4gVGhpcyBpcyBwcmV0dHkgc3RhbmRhcmQsIGJ1dCB0aGUgaW1wb3J0YW50IGJpdCBpcyB0aGF0IGFueSB1bnNwZWNpZmllZCBmaWVsZHMgYXJlIHplcm9lZCBvdXQuIFRoYXQgKnNob3VsZCogaW5jbHVkZSBgbWluX3Njb3JlYCBhbmQgcGFkZGluZy4gTm93LCBoYW5nIG9uIGEgc2Vjb25kLi4uIHdoYXQgYWJvdXQgYGRhbW9zX3F1b3RhX2luaXRgPyBJIG5lZWQgdG8ga2VlcCB0aGF0IGZ1bmN0aW9uIGluIG1pbmQsIGFzIGl0IGNvdWxkIGJlIGltcG9ydGFudC4KClJpZ2h0LCBsb29raW5nIGZ1cnRoZXIsIGluIGBkYW1vbl9uZXdfc2NoZW1lYCwgaXQgYXBwZWFycyBsaWtlIHRoaXMgaXMgd2hhdCYjMzk7cyBoYXBwZW5pbmc6CmBzY2hlbWUgPSBrbWFsbG9jX29iaigqc2NoZW1lKTtgCmBzY2hlbWUtJmd0O3F1b3RhID0gKihkYW1vc19xdW90YV9pbml0KHF1b3RhKSk7YApTbyB3ZSBhcmUgYXNzaWduaW5nIHRoZSByZXN1bHQgb2YgYGRhbW9zX3F1b3RhX2luaXRgIHRvIHRoZSBhbGxvY2F0ZWQgc2NoZW1lLgoKTm93LCBJJiMzOTttIGdldHRpbmcgYSBsaXR0bGUgY29uY2VybmVkLiBJZiBgZGFtb3NfcXVvdGFfaXNfZnVsbGAgcmV0dXJucyB0cnVlLCBpcyBgbWluX3Njb3JlYCBldmVuICpyZWFkKiBhbnl3aGVyZT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdyBoZXJlLiBXaGVyZSBkb2VzIGV4ZWN1dGlvbiBnbyBpZiBgZGFtb3NfcXVvdGFfaXNfZnVsbGAgaXMgdHJ1ZT8gSSBuZWVkIHRvIHRyYWNrIHRoaXMgZG93bi4KCkxldCYjMzk7cyBsb29rIGF0IGBrZGFtb25kX2FwcGx5X3NjaGVtZXNgIGFuZCBmb2xsb3cgdGhlIGV4ZWN1dGlvbiBmbG93LiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgcGFyc2UgdGhpcyBhbmQgZm9jdXMgb24gdGhlIGltcG9ydGFudCBwYXJ0cy4KCk9rYXksIGhlcmUmIzM5O3Mgd2hhdCYjMzk7cyBoYXBwZW5pbmc6IFdlIGl0ZXJhdGUgdGhyb3VnaCB0aGUgc2NoZW1lcy4gSWYgYHRpbWVfYmVmb3JlKGMtJmd0O3Bhc3NlZF9zYW1wbGVfaW50ZXJ2YWxzLCBzLSZndDtuZXh0X2FwcGx5X3NpcylgIGlzIHRydWUsIHdlIGBjb250aW51ZWAuIElmIGAhcy0mZ3Q7d21hcmtzLmFjdGl2YXRlZGAgd2UgYGNvbnRpbnVlYC4gU28sIGlmIHRoZSBzY2hlbWUgaGFzICpwYXNzZWQqIHRoZSBzYW1wbGluZyBpbnRlcnZhbCwgYW5kIGlzIGBhY3RpdmF0ZWRgIHRoZW4gaXQmIzM5O3MgZWxpZ2libGUgdG8gYXBwbHkuCklmIHRoZXJlIGFyZSBzY2hlbWVzIHRvIGFwcGx5LCB3ZSBncmFiIHRoZSBtYXggcmVnaW9uIHNpemUgZnJvbSBgZGFtb25fcmVnaW9uX3N6X2xpbWl0KGMpYC4KClRoZW4sIHdlIGxvY2sgdGhlIGB3YWxrX2NvbnRyb2xfbG9ja2AuIEFmdGVyIHRoYXQsIHdlIGdvIHRocm91Z2ggdGhlIHRhcmdldHMuCgpJbnNpZGUgdGhlIHRhcmdldCBsb29wLCB0aGVyZSYjMzk7cyBhIGNoZWNrOiBgaWYgKGMtJmd0O29wcy50YXJnZXRfdmFsaWQgJmFtcDsmYW1wOyBjLSZndDtvcHMudGFyZ2V0X3ZhbGlkKHQpID09IGZhbHNlKWAuIFRoaXMgc2VlbXMgdG8gYmUgc29tZSBraW5kIG9mIHZhbGlkaXR5IGNoZWNrIG9uIHRoZSB0YXJnZXQsIEkmIzM5O2xsIGhhdmUgdG8gc2VlIHdoZXJlIHRoYXQgZnVuY3Rpb24gaXMgZGVmaW5lZC4gSWYgdGhlIHRhcmdldCBpc24mIzM5O3QgdmFsaWQsIHdlIG5lZWQgdG8gY2xlYXIgdGhlIHF1b3RhIGFzc29jaWF0ZWQgd2l0aCB0aGF0IHRhcmdldCwgaWYgdGhlIHF1b3RhIGlzIGFzc29jaWF0ZWQgd2l0aCB0aGF0IHRhcmdldC4KClRoZW4sIGltcG9ydGFudGx5LCBgZGFtb3NfYXBwbHlfdGFyZ2V0KGMsIHQsIG1heF9yZWdpb25fc3opYCBpcyBjYWxsZWQuIEkgbmVlZCB0byBkaWcgaW50byB0aGF0IGZ1bmN0aW9uIG5vdyB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIGFuZCBmaWd1cmUgb3V0IG15IGVhcmxpZXIgcXVlc3Rpb25zIGFib3V0IGBtaW5fc2NvcmVgLiBMZXQmIzM5O3MgZ2V0IHRvIHRoZSBib3R0b20gb2YgdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTE6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb3NfYXBwbHlfdGFyZ2V0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jPTI3NzA9c3RhdGljIHZvaWQgZGFtb25fZG9fYXBwbHlfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjLFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0yODA0LS8qXG5tbS9kYW1vbi9jb3JlLmM6MjgwNTogKiBkYW1vc19hcHBseV90YXJnZXQoKSAtIEFwcGx5IERBTU9TIHNjaGVtZXMgdG8gYSBnaXZlbiB0YXJnZXQuXG5tbS9kYW1vbi9jb3JlLmMtMjgwNi0gKiBAYzpcdFx0XHRtb25pdG9yaW5nIGNvbnRleHQgdG8gYXBwbHkgaXRzIERBTU9TIHNjaGVtZXMgdG8uLlxuLS1cbm1tL2RhbW9uL2NvcmUuYy0yODIxLSAqL1xubW0vZGFtb24vY29yZS5jOjI4MjI6c3RhdGljIHZvaWQgZGFtb3NfYXBwbHlfdGFyZ2V0KHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG5tbS9kYW1vbi9jb3JlLmMtMjgyMy1cdFx0dW5zaWduZWQgbG9uZyBtYXhfcmVnaW9uX3N6KVxuLS1cbm1tL2RhbW9uL2NvcmUuYz0zMzg3PXN0YXRpYyB2b2lkIGtkYW1vbmRfYXBwbHlfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zNDIwLVx0XHR9XG5tbS9kYW1vbi9jb3JlLmM6MzQyMTpcdFx0ZGFtb3NfYXBwbHlfdGFyZ2V0KGMsIHQsIG1heF9yZWdpb25fc3opO1xubW0vZGFtb24vY29yZS5jLTM0MjItXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDExOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MTYwCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2Ygd2hhdCBJIHdvdWxkIGJlIHRoaW5raW5nLCBmb3JtYXR0ZWQgYXMgcmVxdWVzdGVkOgoKKipBbmFseXppbmcgdGhlIEFwcGxpY2F0aW9uIFNjaGVtZXMqKgoKQWxyaWdodCwgdGltZSB0byBkaWcgaW4uIFRoZSB0YXNrIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IExldCYjMzk7cyBnZXQgaW50byBgZGFtb25fZG9fYXBwbHlfc2NoZW1lc2AgYW5kIGBkYW1vc19hcHBseV90YXJnZXRgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgdHdvIGNvbXBvbmVudHMgaW50ZXJhY3QgYW5kLCBtb3JlIGltcG9ydGFudGx5LCBob3cgdGhleSByZWxhdGUgdG8gdGhlIGJpZ2dlciBwaWN0dXJlIG9mIHRoZSBvdmVyYWxsIHN5c3RlbS4gSSYjMzk7bSBhbHJlYWR5IGFudGljaXBhdGluZyBzb21lIGludGVyZXN0aW5nIGRlc2lnbiBjaG9pY2VzIGFuZCBwb3RlbnRpYWwgYXJlYXMgZm9yIG9wdGltaXphdGlvbiwgZGVwZW5kaW5nIG9uIHRoZSBhcmNoaXRlY3R1cmUuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoZSBzcGVjaWZpYyBtZXRob2RvbG9naWVzIGFuZCBsb2dpYyBvZiB0aGUgc3lzdGVtLiBJJiMzOTtsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGFwcGxpY2F0aW9uIHNjaGVtZSBpbXBsZW1lbnRhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTE6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNzcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQ1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI3NzA6XHRzdGF0aWMgdm9pZCBkYW1vbl9kb19hcHBseV9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmMsXG4yNzcxOlx0XHRcdFx0XHQgICBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxuMjc3MjpcdFx0XHRcdFx0ICAgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcilcbjI3NzM6XHR7XG4yNzc0Olx0XHRzdHJ1Y3QgZGFtb3MgKnM7XG4yNzc1Olx0XG4yNzc2Olx0XHRkYW1vbl9mb3JfZWFjaF9zY2hlbWUocywgYykge1xuMjc3NzpcdFx0XHRzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhID0gXHUwMDI2cy1cdTAwM2VxdW90YTtcbjI3Nzg6XHRcbjI3Nzk6XHRcdFx0aWYgKHRpbWVfYmVmb3JlKGMtXHUwMDNlcGFzc2VkX3NhbXBsZV9pbnRlcnZhbHMsIHMtXHUwMDNlbmV4dF9hcHBseV9zaXMpKVxuMjc4MDpcdFx0XHRcdGNvbnRpbnVlO1xuMjc4MTpcdFxuMjc4MjpcdFx0XHRpZiAoIXMtXHUwMDNld21hcmtzLmFjdGl2YXRlZClcbjI3ODM6XHRcdFx0XHRjb250aW51ZTtcbjI3ODQ6XHRcbjI3ODU6XHRcdFx0LyogQ2hlY2sgdGhlIHF1b3RhICovXG4yNzg2Olx0XHRcdGlmIChkYW1vc19xdW90YV9pc19mdWxsKHF1b3RhLCBjLVx1MDAzZW1pbl9yZWdpb25fc3opKVxuMjc4NzpcdFx0XHRcdGNvbnRpbnVlO1xuMjc4ODpcdFxuMjc4OTpcdFx0XHRpZiAoZGFtb3Nfc2tpcF9jaGFyZ2VkX3JlZ2lvbih0LCByLCBzLCBjLVx1MDAzZW1pbl9yZWdpb25fc3opKVxuMjc5MDpcdFx0XHRcdGNvbnRpbnVlO1xuMjc5MTpcdFxuMjc5MjpcdFx0XHRpZiAocy1cdTAwM2VtYXhfbnJfc25hcHNob3RzIFx1MDAyNlx1MDAyNlxuMjc5MzpcdFx0XHRcdFx0cy1cdTAwM2VtYXhfbnJfc25hcHNob3RzIFx1MDAzYz0gcy1cdTAwM2VzdGF0Lm5yX3NuYXBzaG90cylcbjI3OTQ6XHRcdFx0XHRjb250aW51ZTtcbjI3OTU6XHRcbjI3OTY6XHRcdFx0aWYgKGRhbW9zX3ZhbGlkX3RhcmdldChjLCByLCBzKSlcbjI3OTc6XHRcdFx0XHRkYW1vc19hcHBseV9zY2hlbWUoYywgdCwgciwgcyk7XG4yNzk4Olx0XG4yNzk5Olx0XHRcdGlmIChkYW1vbl9pc19sYXN0X3JlZ2lvbihyLCB0KSlcbjI4MDA6XHRcdFx0XHRzLVx1MDAzZXN0YXQubnJfc25hcHNob3RzJiM0MzsmIzQzOztcbjI4MDE6XHRcdH1cbjI4MDI6XHR9XG4yODAzOlx0XG4yODA0Olx0LypcbjI4MDU6XHQgKiBkYW1vc19hcHBseV90YXJnZXQoKSAtIEFwcGx5IERBTU9TIHNjaGVtZXMgdG8gYSBnaXZlbiB0YXJnZXQuXG4yODA2Olx0ICogQGM6XHRcdFx0bW9uaXRvcmluZyBjb250ZXh0IHRvIGFwcGx5IGl0cyBEQU1PUyBzY2hlbWVzIHRvLi5cbjI4MDc6XHQgKiBAdDpcdFx0XHRtb25pdG9yaW5nIHRhcmdldCB0byBhcHBseSB0aGUgc2NoZW1lcyB0by5cbjI4MDg6XHQgKiBAbWF4X3JlZ2lvbl9zejpcdG1heGltdW0gcmVnaW9uIHNpemUgZm9yIEBjLlxuMjgwOTpcdCAqXG4yODEwOlx0ICogVGhpcyBmdW5jdGlvbiBjb3VsZCBzcGxpdCByZWdpb25zIGZvciBrZWVwaW5nIHRoZSBxdW90YS4gIFRvIG1pbmltaXplXG4yODExOlx0ICogb3ZlcmhlYWQgZnJvbSB0aGUgc3BsaXQgb3BlcmF0aW9ucyBpbmNyZWFzZWQgbnVtYmVyIG9mIHJlZ2lvbnMsIHRoaXNcbjI4MTI6XHQgKiBmdW5jdGlvbiB3aWxsIGFsc28gbWVyZ2UgcmVnaW9ucyBhZnRlciB0aGUgc2NoZW1lcyBhcHBseWluZyBhdHRlbXB0IGlzIGRvbmUsXG4yODEzOlx0ICogZm9yIGVhY2ggcmVnaW9uLiAgVGhlIG1lcmdlIG9wZXJhdGlvbiBpcyBtYWRlIG9ubHkgd2hlbiBpdCBkb2VzbiYjMzk7dCBsb3NlIHRoZVxuMjgxNDpcdCAqIG1vbml0b3JpbmcgaW5mb3JtYXRpb24gYW5kIG5vdCB2aW9sYXRpbmcgQG1heF9yZWdpb25fc3ouXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDExOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MDY3CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMjk5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFF1b3RhLVJlbGF0ZWQgT3B0aW1pemF0aW9uKioKCk9rYXksIGhlcmUgd2UgZ28uIExldCYjMzk7cyBkaWcgaW50byBsaW5lIDI3ODYgb2YgdGhpcyBjb2RlLiBSaWdodCwgc28gaWYgYGRhbW9zX3F1b3RhX2lzX2Z1bGxgIHJldHVybnMgdHJ1ZSwgaXQmIzM5O3MgYSBkaXJlY3QgYGNvbnRpbnVlYC4gVGhlIHNjaGVtZSBhcHBsaWNhdGlvbiBpcyAqY29tcGxldGVseSogYnlwYXNzZWQuIEludGVyZXN0aW5nLiBTbywgYGRhbW9zX3ZhbGlkX3RhcmdldGAgaXNuJiMzOTt0IGV2ZW4gY2hlY2tlZCBpZiB0aGUgcXVvdGEgaXMgZnVsbC4gVGhhdCYjMzk7cyBhIGtleSBvYnNlcnZhdGlvbi4KCk5vdywgdGhpbmtpbmcgYWJvdXQgYGRhbW9zX2FkanVzdF9xdW90YWAsIGl0IGxvb2tzIGxpa2UgdGhlIG9sZCB2ZXJzaW9uIHdhcyBpbmVmZmljaWVudC4gSXQgd2FzIHVwZGF0aW5nIHRoZSBxdW90YSB3aW5kb3cgY29ycmVjdGx5IGlmIGV4cGlyZWQsIGJ1dCB0aGVuIGl0JiMzOTtkIHN0aWxsIGNhbGN1bGF0ZSBoaXN0b2dyYW1zIGFuZCBzZXQgYHF1b3RhLSZndDttaW5fc2NvcmVgICpldmVuIGlmKiB0aGUgcXVvdGEgd2FzIGFscmVhZHkgZnVsbC4gVGhhdCYjMzk7cyBhIGRlZmluaXRlIHJlZHVuZGFuY3kuCgpTbyB0aGUgY2hhbmdlIGluIHRoZSBjb21taXQgbWFrZXMgc2Vuc2UsIG9wdGltaXppbmcgYmFzZWQgb24gdGhlIGZ1bGwtcXVvdGEgc3RhdGUuLi4gYnV0IEkgd29uZGVyICp3aHkqIHRoaXMgb3B0aW1pemF0aW9uIHdhcyBkZWVtZWQgbmVjZXNzYXJ5LiBXZXJlIHRoZXJlIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLCBvciB3ZXJlIHRoZXkganVzdCB0cnlpbmcgdG8gYmUgdGlkeT8gSSYjMzk7bSBnb2luZyB0byBjaGVjayB0aGUgZ2l0IGxvZy4gQ29udGV4dCBpcyBraW5nLCBhbmQgc2ltaWxhciBjb21taXRzIG1pZ2h0IHNoaW5lIGxpZ2h0IG9uIHRoaXMuIFRoaXMgb3B0aW1pemF0aW9uIGNvdWxkIGhhdmUgc2lnbmlmaWNhbnQgZWZmZWN0cyBpZiB0aGlzIGlzIGZyZXF1ZW50bHkgY2FsbGVkLCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMTo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYW1vc19hZGp1c3RfcXVvdGEmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jPTMyOTA9c3RhdGljIHZvaWQgZGFtb3NfdHJhY2VfZXN6KHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vcyAqcyxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzMwMy1cbm1tL2RhbW9uL2NvcmUuYzozMzA0OnN0YXRpYyB2b2lkIGRhbW9zX2FkanVzdF9xdW90YShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb3MgKnMpXG5tbS9kYW1vbi9jb3JlLmMtMzMwNS17XG4tLVxubW0vZGFtb24vY29yZS5jPTMzODc9c3RhdGljIHZvaWQga2RhbW9uZF9hcHBseV9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmMpXG4tLVxubW0vZGFtb24vY29yZS5jLTM0MDItXG5tbS9kYW1vbi9jb3JlLmM6MzQwMzpcdFx0ZGFtb3NfYWRqdXN0X3F1b3RhKGMsIHMpO1xubW0vZGFtb24vY29yZS5jLTM0MDQtXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDExOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1ODQ5CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMzExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBgZGFtb3NfYWRqdXN0X3F1b3RhYCBGdW5jdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZXhhbWluZSB0aGUgY29yZSBsb2dpYzogaWYgYHF1b3RhLSZndDtjaGFyZ2VkX3N6YCBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gYHF1b3RhLSZndDtlc3pgLCB0aGVuIGBkYW1vc19xdW90YV9pc19mdWxsYCBpcyB0cnVlLCByaWdodD8gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoYXQgY29uZGl0aW9uIGFuZCB3aGF0IGhhcHBlbnMgaWYgd2Ugc2tpcCBzb21lIHNldHVwIHN0ZXBzLgoKSSBzZWUgdGhhdCB3aGVuIGBkYW1vc19xdW90YV9pc19mdWxsYCBpcyB0cnVlLCB0aGUgY29kZSBoYXMgdGhlc2UgYHJldHVybmAgc3RhdGVtZW50czoKYGBgYwoJaWYgKGRhbW9zX3F1b3RhX2lzX2Z1bGwocXVvdGEsIGMtJmd0O21pbl9yZWdpb25fc3opKQoJCXJldHVybjsKCWlmICghYy0mZ3Q7b3BzLmdldF9zY2hlbWVfc2NvcmUpCgkJcmV0dXJuOwpgYGAKd2hpY2ggd2lsbCBsZWFkIHRvIGFuIGVhcmx5IGV4aXQuIFRoaXMgbWVhbnMgaXQgKmF2b2lkcyogdGhlIGxvb3AgdGhhdCB3b3VsZCBpbml0aWFsaXplIGFuZCBwb3B1bGF0ZSBgYy0mZ3Q7cmVnaW9uc19zY29yZV9oaXN0b2dyYW1gLiBUaGF0IG1ha2VzIG1lIHRoaW5rLi4uIGlzIHRoaXMgYnlwYXNzaW5nIHNvbWUgaW1wb3J0YW50IGluaXRpYWxpemF0aW9uIG9yIHNvbWUgb3RoZXIgb3BlcmF0aW9uPyBUaGUgY29kZSBpcyBzdXBwb3NlZCB0byBzdGFydCB3aXRoOgpgYGBjCgkJbWVtc2V0KGMtJmd0O3JlZ2lvbnNfc2NvcmVfaGlzdG9ncmFtLCAwLAoJCQkJc2l6ZW9mKCpjLSZndDtyZWdpb25zX3Njb3JlX2hpc3RvZ3JhbSkgKgoJCQkJKERBTU9TX01BWF9TQ09SRSAmIzQzOyAxKSk7CgkJZGFtb25fZm9yX2VhY2hfdGFyZ2V0KHQsIGMpIHsKLi4uCmBgYApJJiMzOTttIHdvbmRlcmluZywgaWYgYGRhbW9zX2FkanVzdF9xdW90YWAgcmV0dXJucyBlYXJseSBiZWNhdXNlIG9mIHRoYXQgY2hlY2ssIHRoZW4gYGMtJmd0O3JlZ2lvbnNfc2NvcmVfaGlzdG9ncmFtYCBtaWdodCByZW1haW4gdW5pbml0aWFsaXplZC4gSSBoYXZlIHRvIGZpZ3VyZSBvdXQgaWYgdGhhdCBjYXVzZXMgYSBwcm9ibGVtIGxhdGVyLiBJcyBgYy0mZ3Q7cmVnaW9uc19zY29yZV9oaXN0b2dyYW1gIGV2ZXIgcmVhZCBvdXRzaWRlIG9mIHRoYXQgbWFpbiBsb29wIGluIGBkYW1vc19hZGp1c3RfcXVvdGFgPyBJIG5lZWQgdG8ga25vdyB3aGVyZSB0aGlzIHZhcmlhYmxlIGlzIHVzZWQuIExldCBtZSBnbyBmaW5kIGl0IHdpdGggYSBxdWljayBncmVwIHRvIGJlIHN1cmUhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDExOjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3JlZ2lvbnNfc2NvcmVfaGlzdG9ncmFtJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvZGFtb24uaD04OTc9c3RydWN0IGRhbW9uX2N0eCB7XG4tLVxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTkyMC1cdC8qIGZvciBzY2hlbWUgcXVvdGFzIHByaW9yaXRpemF0aW9uICovXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6OTIxOlx0dW5zaWduZWQgbG9uZyAqcmVnaW9uc19zY29yZV9oaXN0b2dyYW07XG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtOTIyLVxuLS1cbm1tL2RhbW9uL2NvcmUuYz0zMzA0PXN0YXRpYyB2b2lkIGRhbW9zX2FkanVzdF9xdW90YShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb3MgKnMpXG4tLVxubW0vZGFtb24vY29yZS5jLTMzNDQtXHQvKiBGaWxsIHVwIHRoZSBzY29yZSBoaXN0b2dyYW0gKi9cbm1tL2RhbW9uL2NvcmUuYzozMzQ1Olx0bWVtc2V0KGMtXHUwMDNlcmVnaW9uc19zY29yZV9oaXN0b2dyYW0sIDAsXG5tbS9kYW1vbi9jb3JlLmM6MzM0NjpcdFx0XHRzaXplb2YoKmMtXHUwMDNlcmVnaW9uc19zY29yZV9oaXN0b2dyYW0pICpcbm1tL2RhbW9uL2NvcmUuYy0zMzQ3LVx0XHRcdChEQU1PU19NQVhfU0NPUkUgJiM0MzsgMSkpO1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0zMzU0LVx0XHRcdHNjb3JlID0gYy1cdTAwM2VvcHMuZ2V0X3NjaGVtZV9zY29yZShjLCByLCBzKTtcbm1tL2RhbW9uL2NvcmUuYzozMzU1Olx0XHRcdGMtXHUwMDNlcmVnaW9uc19zY29yZV9oaXN0b2dyYW1bc2NvcmVdICYjNDM7PVxubW0vZGFtb24vY29yZS5jLTMzNTYtXHRcdFx0XHRkYW1vbl9zel9yZWdpb24ocik7XG4tLVxubW0vZGFtb24vY29yZS5jLTMzNjMtXHRmb3IgKGN1bXVsYXRlZF9zeiA9IDAsIHNjb3JlID0gbWF4X3Njb3JlOyA7IHNjb3JlLS0pIHtcbm1tL2RhbW9uL2NvcmUuYzozMzY0Olx0XHRjdW11bGF0ZWRfc3ogJiM0Mzs9IGMtXHUwMDNlcmVnaW9uc19zY29yZV9oaXN0b2dyYW1bc2NvcmVdO1xubW0vZGFtb24vY29yZS5jLTMzNjUtXHRcdGlmIChjdW11bGF0ZWRfc3ogXHUwMDNlPSBxdW90YS1cdTAwM2Vlc3ogfHwgIXNjb3JlKVxuLS1cbm1tL2RhbW9uL2NvcmUuYz0zOTIwPXN0YXRpYyBpbnQga2RhbW9uZF9mbih2b2lkICpkYXRhKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zOTM1LVx0XHRjdHgtXHUwMDNlb3BzLmluaXQoY3R4KTtcbm1tL2RhbW9uL2NvcmUuYzozOTM2Olx0Y3R4LVx1MDAzZXJlZ2lvbnNfc2NvcmVfaGlzdG9ncmFtID0ga21hbGxvY19hcnJheShEQU1PU19NQVhfU0NPUkUgJiM0MzsgMSxcbm1tL2RhbW9uL2NvcmUuYzozOTM3Olx0XHRcdHNpemVvZigqY3R4LVx1MDAzZXJlZ2lvbnNfc2NvcmVfaGlzdG9ncmFtKSwgR0ZQX0tFUk5FTCk7XG5tbS9kYW1vbi9jb3JlLmM6MzkzODpcdGlmICghY3R4LVx1MDAzZXJlZ2lvbnNfc2NvcmVfaGlzdG9ncmFtKVxubW0vZGFtb24vY29yZS5jLTM5MzktXHRcdGdvdG8gZG9uZTtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtNDA2Ny1cbm1tL2RhbW9uL2NvcmUuYzo0MDY4Olx0a2ZyZWUoY3R4LVx1MDAzZXJlZ2lvbnNfc2NvcmVfaGlzdG9ncmFtKTtcbm1tL2RhbW9uL2NvcmUuYy00MDY5LVx0bXV0ZXhfbG9jayhcdTAwMjZjdHgtXHUwMDNlY2FsbF9jb250cm9sc19sb2NrKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTE6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcyMzQKCQkJCQkJCW91dHB1dDogMTcwCgkJCQkJCQl0aG91Z2h0czogMTE0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBBc3Nlc3NtZW50OiBObyBSaXNrIG9mIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IFVzYWdlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGFuYWx5c2lzIGZvY3VzZXMgb24gdGhlIGludHJvZHVjZWQgY29kZSYjMzk7cyBwb3RlbnRpYWwgdG8gZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgY29yZSBjaGFuZ2UgaXMgYSBzaW5nbGUgYGlmYCBzdGF0ZW1lbnQsIGBpZiAoZGFtb3NfcXVvdGFfaXNfZnVsbChxdW90YSwgYy0mZ3Q7bWluX3JlZ2lvbl9zeikpIHJldHVybjtgLCBhZGRlZCB0byBgZGFtb3NfYWRqdXN0X3F1b3RhKClgLiBUaGlzIGFjdHMgYXMgYW4gb3B0aW1pemF0aW9uLCBzaG9ydC1jaXJjdWl0aW5nIHRoZSBxdW90YSBhZGp1c3RtZW50IHByb2Nlc3MgaWYgdGhlIHF1b3RhIGlzIGFscmVhZHkgZXhoYXVzdGVkLgoKVGhlIGtleSBvYnNlcnZhdGlvbiBpcyBob3cgYGMtJmd0O3JlZ2lvbnNfc2NvcmVfaGlzdG9ncmFtYCBpcyBoYW5kbGVkLiBJdCYjMzk7cyAqb25seSogdXNlZCB3aXRoaW4gYGRhbW9zX2FkanVzdF9xdW90YSgpYC4gQ3J1Y2lhbGx5LCByaWdodCBhdCB0aGUgc3RhcnQgb2YgdGhlIGJsb2NrIHRoYXQgdXNlcyBpdCwgdGhlcmUmIzM5O3MgYSBgbWVtc2V0KClgIHRoYXQgZXhwbGljaXRseSB6ZXJvZXMgdGhlIGVudGlyZSBoaXN0b2dyYW0uIFRoaXMgZ3VhcmFudGVlcyB0aGF0IGFueSByZWFkIGZyb20gaXQgaXMgZnJvbSBpbml0aWFsaXplZCBtZW1vcnkuIFRoZSBoaXN0b2dyYW0gaXMgYnVpbHQgYW5kIGltbWVkaWF0ZWx5IGNvbnN1bWVkIHdpdGhpbiB0aGUgZnVuY3Rpb247IGl0cyB2YWx1ZXMgYXJlIG5vdCBwZXJzaXN0ZWQgb3IgZXhwb3NlZCBlbHNld2hlcmUuIGBxdW90YS0mZ3Q7bWluX3Njb3JlYCBpcyBhbHNvIGluaXRpYWxpemVkIHVwb24gYWxsb2NhdGlvbiBhbmQgcmVjYWxjdWxhdGVkIHdpdGhpbiB0aGUgZnVuY3Rpb24sIGJ1dCBpdCBpcyBub3QgZXZlbiB1c2VkIGluIGBkYW1vbl9kb19hcHBseV9zY2hlbWVzYCBpZiB0aGUgcXVvdGEgaXMgZnVsbCwgbWFraW5nIHRoZSBjYWxjdWxhdGlvbiByZWR1bmRhbnQuIEV2ZW4gaWYgaXQgd2VyZSBsYXRlciBjaGVja2VkLCBpdCB3b3VsZCBiZSByZWNhbGN1bGF0ZWQgYW5kIHNvIG5vIGlzc3VlLgoKVGhlcmVmb3JlLCB0aGUgcGF0Y2ggZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgZGVwZW5kZW5jaWVzIGluIGNvbmRpdGlvbmFsIGxvZ2ljLCBjb21wbGV4IGRhdGEgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uIGlzc3Vlcywgb3IgYnVmZmVyIG92ZXJydW4gcG9zc2liaWxpdGllcy4gVGhlIGFkZGVkIGBkYW1vc19xdW90YV9pc19mdWxsYCBjaGVjayB1c2VzIGluaXRpYWxpemVkIHZhcmlhYmxlcyAoYHF1b3RhYCBhbmQgYGMtJmd0O21pbl9yZWdpb25fc3pgKS4gVGhlIGhpc3RvZ3JhbSwgdGhlIG1vc3Qgc2Vuc2l0aXZlIHBhcnQsIGlzIGV4cGxpY2l0bHkgemVyb2VkIGJlZm9yZSB1c2UuCgpUaGUgb3ZlcmFsbCBjb25jZXJuIGlzIGlmIHRoaXMgcGF0Y2ggbGVhZHMgdG8gYSBzY2VuYXJpbyB0aGF0IGFsbG93cyB0aGUga2VybmVsIHRvIHJlYWQgdW5pbml0aWFsaXplZCBtZW1vcnksIHdoaWNoIGlzbiYjMzk7dCB0aGUgY2FzZSBoZXJlLiBUaGlzIGlzIHB1cmUgbG9naWMvb3B0aW1pemF0aW9uLiBBIEtNU0FOIGFuYWx5c2lzIGlzIG5vdCBuZWVkZWQgaGVyZTsgc3RhbmRhcmQgc2FuaXRpemVycyB3aWxsIGFkZXF1YXRlbHkgZGV0ZWN0IG1lbW9yeSBjb3JydXB0aW9uLiBXZSBjYW4ganVzdGlmeSB0aGUgbmVlZCBmb3IgS01TQU4gd2l0aCB0aGUgZm9sbG93aW5nIHJlYXNvbmluZzogdGhlIHBhdGNoIHNpbXBseSBhZGRzIGFuIGVhcmx5IHJldHVybiBpbiBgZGFtb3NfYWRqdXN0X3F1b3RhKClgIGlmIHRoZSBxdW90YSBpcyBmdWxsLCBhdm9pZGluZyBidWlsZGluZyBgYy0mZ3Q7cmVnaW9uc19zY29yZV9oaXN0b2dyYW1gIGFuZCB1cGRhdGluZyBgcXVvdGEtJmd0O21pbl9zY29yZWAuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQgb3IgbGVha2VkLiBgYy0mZ3Q7cmVnaW9uc19zY29yZV9oaXN0b2dyYW1gIGlzIG9ubHkgYWNjZXNzZWQgd2l0aGluIGBkYW1vc19hZGp1c3RfcXVvdGEoKWAgYW5kIGlzIGFsd2F5cyBleHBsaWNpdGx5IHplcm9lZCB3aXRoIGBtZW1zZXQoKWAgYmVmb3JlIHVzZS4gS0FTQU4gaXMgc3VmZmljaWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTE6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhbiBlYXJseSByZXR1cm4gaW4gZGFtb3NfYWRqdXN0X3F1b3RhKCkgaWYgdGhlIHF1b3RhIGlzIGFscmVhZHkgZXhoYXVzdGVkIChkYW1vc19xdW90YV9pc19mdWxsKCkpLiBUaGlzIHNraXBzIHJlY2FsY3VsYXRpb24gb2YgdGhlIHNjaGVtZSBzY29yZSBoaXN0b2dyYW0gYW5kIG1pbl9zY29yZS5cblxuTm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3IgbWVtb3J5IGFsbG9jYXRpb25zIGFyZSBpbnRyb2R1Y2VkIG9yIHJlYWQuIFRoZSBza2lwcGVkIGhpc3RvZ3JhbSBidWZmZXIgKGMtXHUwMDNlcmVnaW9uc19zY29yZV9oaXN0b2dyYW0pIGlzIHN0cmljdGx5IGludGVybmFsIHRvIHRoaXMgZnVuY3Rpb24gYW5kIGlzIGFsd2F5cyB6ZXJvZWQgdmlhIG1lbXNldCgpIHByaW9yIHRvIHVzZSB3aGVuIGFjY2Vzc2VkLiBObyBkYXRhIGlzIGNvcGllZCB0byB1c2VyIHNwYWNlIG9yIHVzZWQgaW4gdW5pbml0aWFsaXplZCBzdGF0ZS4gQW55IHBvdGVudGlhbCBtZW1vcnkgc2FmZXR5IGlzc3VlcyAoc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzKSB3b3VsZCBiZSBkZXRlY3RlZCBieSBzdGFuZGFyZCBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBydW4gaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYW4gZWFybHkgcmV0dXJuIGluIGRhbW9zX2FkanVzdF9xdW90YSgpIGlmIHRoZSBxdW90YSBpcyBhbHJlYWR5IGV4aGF1c3RlZCAoZGFtb3NfcXVvdGFfaXNfZnVsbCgpKS4gVGhpcyBza2lwcyByZWNhbGN1bGF0aW9uIG9mIHRoZSBzY2hlbWUgc2NvcmUgaGlzdG9ncmFtIGFuZCBtaW5fc2NvcmUuXG5cbk5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIG1lbW9yeSBhbGxvY2F0aW9ucyBhcmUgaW50cm9kdWNlZCBvciByZWFkLiBUaGUgc2tpcHBlZCBoaXN0b2dyYW0gYnVmZmVyIChjLVx1MDAzZXJlZ2lvbnNfc2NvcmVfaGlzdG9ncmFtKSBpcyBzdHJpY3RseSBpbnRlcm5hbCB0byB0aGlzIGZ1bmN0aW9uIGFuZCBpcyBhbHdheXMgemVyb2VkIHZpYSBtZW1zZXQoKSBwcmlvciB0byB1c2Ugd2hlbiBhY2Nlc3NlZC4gTm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSBvciB1c2VkIGluIHVuaW5pdGlhbGl6ZWQgc3RhdGUuIEFueSBwb3RlbnRpYWwgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcykgd291bGQgYmUgZGV0ZWN0ZWQgYnkgc3RhbmRhcmQgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gcnVuIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDExOjUyOjA0LjYwNzk2Mjg2M1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NDU5MjUwMTE3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJEQU1PTlwiLFxuICAgIFwiREFNT05fU1lTRlNcIixcbiAgICBcIkRBTU9OX1BBRERSXCIsXG4gICAgXCJEQU1PTl9WQUREUlwiLFxuICAgIFwiREFNT05fUkVDTEFJTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRhbW9zX2FkanVzdF9xdW90YVwiLFxuICAgIFwia2RhbW9uZF9hcHBseV9zY2hlbWVzXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGFuIGVhcmx5IHJldHVybiBpbiBkYW1vc19hZGp1c3RfcXVvdGEoKSBpZiB0aGUgcXVvdGEgaXMgYWxyZWFkeSBleGhhdXN0ZWQgKGRhbW9zX3F1b3RhX2lzX2Z1bGwoKSkuIFRoaXMgc2tpcHMgcmVjYWxjdWxhdGlvbiBvZiB0aGUgc2NoZW1lIHNjb3JlIGhpc3RvZ3JhbSBhbmQgbWluX3Njb3JlLlxcblxcbk5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIG1lbW9yeSBhbGxvY2F0aW9ucyBhcmUgaW50cm9kdWNlZCBvciByZWFkLiBUaGUgc2tpcHBlZCBoaXN0b2dyYW0gYnVmZmVyIChjLVxcdTAwM2VyZWdpb25zX3Njb3JlX2hpc3RvZ3JhbSkgaXMgc3RyaWN0bHkgaW50ZXJuYWwgdG8gdGhpcyBmdW5jdGlvbiBhbmQgaXMgYWx3YXlzIHplcm9lZCB2aWEgbWVtc2V0KCkgcHJpb3IgdG8gdXNlIHdoZW4gYWNjZXNzZWQuIE5vIGRhdGEgaXMgY29waWVkIHRvIHVzZXIgc3BhY2Ugb3IgdXNlZCBpbiB1bmluaXRpYWxpemVkIHN0YXRlLiBBbnkgcG90ZW50aWFsIG1lbW9yeSBzYWZldHkgaXNzdWVzIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMpIHdvdWxkIGJlIGRldGVjdGVkIGJ5IHN0YW5kYXJkIEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIHJ1biBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgaW4gREFNT04gKG1tL2RhbW9uL2NvcmUuYykgYnkgaW50cm9kdWNpbmcgYW4gZWFybHkgZXhpdCBjaGVjayBpbiBkYW1vc19hZGp1c3RfcXVvdGEoKSB3aGVuIHRoZSBxdW90YSBpcyBhbHJlYWR5IGZ1bGwuIFRoaXMgYXZvaWRzIHVubmVjZXNzYXJ5IHJlZ2lvbiBzY29yZSBoaXN0b2dyYW0gY2FsY3VsYXRpb25zLiBCZWNhdXNlIHRoaXMgY2hhbmdlcyByZWFjaGFibGUgZXhlY3V0aW9uIGxvZ2ljIGluIGEgY29yZSBNTSBzdWJzeXN0ZW0gYWNjZXNzaWJsZSB2aWEgREFNT04gc3lzZnMgYW5kIG1vZHVsZSBpbnRlcmZhY2VzIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgaXQgaXMgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTE6NTI6MDQuNjA3OTY4OTczWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTQwNDE3NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA3NzBmMjkwMDc5NjhlODNjOTk2NzMwOGMxZGM2MmExOTkxZmRmNjMxXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTdW4gU2VwIDEzIDExOjUyOjAzIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL2NvcmUuYyBiL21tL2RhbW9uL2NvcmUuY1xcbmluZGV4IDBjOThmN2UyNjdkMDcuLjNkN2E5NzNlYThiNmYgMTAwNjQ0XFxuLS0tIGEvbW0vZGFtb24vY29yZS5jXFxuKysrIGIvbW0vZGFtb24vY29yZS5jXFxuQEAgLTMzMzYsNiArMzMzNiw4IEBAIHN0YXRpYyB2b2lkIGRhbW9zX2FkanVzdF9xdW90YShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb3MgKnMpXFxuIFxcdFxcdFxcdGRhbW9zX3RyYWNlX2VzeihjLCBzLCBxdW90YSk7XFxuIFxcdH1cXG4gXFxuK1xcdGlmIChkYW1vc19xdW90YV9pc19mdWxsKHF1b3RhLCBjLVxcdTAwM2VtaW5fcmVnaW9uX3N6KSlcXG4rXFx0XFx0cmV0dXJuO1xcbiBcXHRpZiAoIWMtXFx1MDAzZW9wcy5nZXRfc2NoZW1lX3Njb3JlKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMTo1MjowNS4wNjI1NzI0NTZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjk2NTUzODEyOTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRBTU9OXCIsXG4gICAgXCJEQU1PTl9TWVNGU1wiLFxuICAgIFwiREFNT05fUEFERFJcIixcbiAgICBcIkRBTU9OX1ZBRERSXCIsXG4gICAgXCJEQU1PTl9SRUNMQUlNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGFtb3NfYWRqdXN0X3F1b3RhXCIsXG4gICAgXCJrZGFtb25kX2FwcGx5X3NjaGVtZXNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGluIERBTU9OIChtbS9kYW1vbi9jb3JlLmMpIGJ5IGludHJvZHVjaW5nIGFuIGVhcmx5IGV4aXQgY2hlY2sgaW4gZGFtb3NfYWRqdXN0X3F1b3RhKCkgd2hlbiB0aGUgcXVvdGEgaXMgYWxyZWFkeSBmdWxsLiBUaGlzIGF2b2lkcyB1bm5lY2Vzc2FyeSByZWdpb24gc2NvcmUgaGlzdG9ncmFtIGNhbGN1bGF0aW9ucy4gQmVjYXVzZSB0aGlzIGNoYW5nZXMgcmVhY2hhYmxlIGV4ZWN1dGlvbiBsb2dpYyBpbiBhIGNvcmUgTU0gc3Vic3lzdGVtIGFjY2Vzc2libGUgdmlhIERBTU9OIHN5c2ZzIGFuZCBtb2R1bGUgaW50ZXJmYWNlcyBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIGl0IGlzIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNzcwZjI5MDA3OTY4ZTgzYzk5NjczMDhjMWRjNjJhMTk5MWZkZjYzMVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gU2VwIDEzIDExOjUyOjAzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vY29yZS5jIGIvbW0vZGFtb24vY29yZS5jXG5pbmRleCAwYzk4ZjdlMjY3ZDA3Li4zZDdhOTczZWE4YjZmIDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vY29yZS5jXG4rKysgYi9tbS9kYW1vbi9jb3JlLmNcbkBAIC0zMzM2LDYgKzMzMzYsOCBAQCBzdGF0aWMgdm9pZCBkYW1vc19hZGp1c3RfcXVvdGEoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzKVxuIFx0XHRcdGRhbW9zX3RyYWNlX2VzeihjLCBzLCBxdW90YSk7XG4gXHR9XG4gXG4rXHRpZiAoZGFtb3NfcXVvdGFfaXNfZnVsbChxdW90YSwgYy1cdTAwM2VtaW5fcmVnaW9uX3N6KSlcbitcdFx0cmV0dXJuO1xuIFx0aWYgKCFjLVx1MDAzZW9wcy5nZXRfc2NoZW1lX3Njb3JlKVxuIFx0XHRyZXR1cm47XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMTo1MjowNS4wNjI1NzQzOTZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo2NDc2NTMzMjkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIERBTU9OIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYG1tL2RhbW9uL2NvcmUuY2AuIEl0J3MgZm9jdXNlZCBhcm91bmQgdGhlIGBkYW1vc19hZGp1c3RfcXVvdGFgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgbGluZSAzMzM2LiBUaGUga2V5IGFkZGl0aW9uIHNlZW1zIHRvIGJlIHRoaXMgY2hlY2s6IGBpZiAoZGFtb3NfcXVvdGFfaXNfZnVsbChxdW90YSwgYy1cdTAwM2VtaW5fcmVnaW9uX3N6KSkgcmV0dXJuO2AuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IHdoYXQgdGhpcyBgZGFtb3NfcXVvdGFfaXNfZnVsbGAgZnVuY3Rpb24gYWN0dWFsbHkgZG9lcyBhbmQgaXRzIGltcGxpY2F0aW9ucy5cblxuSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgaGVyZS4gSSdsbCBuZWVkIHRvIHJlbWVtYmVyIHRoZSBwdXJwb3NlIG9mIGBkYW1vc19hZGp1c3RfcXVvdGFgLCBpdHMgaW50ZXJhY3Rpb24gd2l0aCB0aGUgREFNT04gc3Vic3lzdGVtLCBhbmQgaXRzIHJvbGUgaW4gbWVtb3J5IG1hbmFnZW1lbnQgb3B0aW1pemF0aW9uLiBXaGF0IGFyZSBpdHMgY2FsbGVycyBhbmQgd2hhdCBkb2VzIHRoaXMgY2hhbmdlIG1vZGlmeT8gSXQncyBhbGwgYWJvdXQgaG93IHdlIGFkanVzdCB0aGUgcXVvdGFzLlxuXG5JIHNob3VsZCBhbHNvIGNvbnNpZGVyIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBEQU1PTi4gQXJlIHRoZXJlIGFueSByZWxldmFudCBjb25maWd1cmF0aW9ucyB0aGF0IGNvdWxkIGltcGFjdCB0aGUgYmVoYXZpb3Igb2YgdGhpcyBwYXRjaD8gVGhlIGBjLVx1MDAzZW1pbl9yZWdpb25fc3pgIGlzIGltcG9ydGFudCwgc28gSSBuZWVkIHRvIGtub3cgaG93IHRoYXQncyBkZWZpbmVkLCB1c2VkLCBhbmQgc2V0LiBJJ2xsIG5lZWQgdG8gdHJhY2UgdGhlIHVzYWdlIG9mIHRoZXNlIHZhcmlhYmxlcyBhbmQgdW5kZXJzdGFuZCB0aGVpciBpbmZsdWVuY2UuXG5cblNvLCBJIG5lZWQgdG8gdXNlIGByZWFkLWZpbGVgIHRvIGdldCB0aGUgY29udGV4dCBhcm91bmQgbGluZSAzMzM2LCBhbmQgZmlndXJlIG91dCB3aGF0J3MgZ29pbmcgb24gd2l0aCB0aGUgcXVvdGEgYWRqdXN0bWVudHMuIFRoZW4gSSBuZWVkIHRvIGNvbmZpcm0gcmVhY2hhYmlsaXR5IGFuZCBwb3RlbnRpYWwgaXNzdWVzIGludHJvZHVjZWQgYnkgdGhpcyBzZWVtaW5nbHkgc2ltcGxlIGNvbmRpdGlvbmFsIHN0YXRlbWVudC4gVGhpcyBpcyBhIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24gb3IgY2hhbmdlIGluIGJlaGF2aW9yLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODU5LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTE6NTI6MTEuNTM5MTEwMTc4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMyMzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2RhbW9uL2NvcmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMzIwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzMzIwOlxcdFxcdFxcdFxcdGRhbW9zX3RyYWNlX2VzeihjLCBzLCBxdW90YSk7XFxuMzMyMTpcXHRcXHR9XFxuMzMyMjpcXHRcXG4zMzIzOlxcdFxcdC8qIE5ldyBjaGFyZ2Ugd2luZG93IHN0YXJ0cyAqL1xcbjMzMjQ6XFx0XFx0aWYgKCF0aW1lX2luX3JhbmdlX29wZW4oamlmZmllcywgcXVvdGEtXFx1MDAzZWNoYXJnZWRfZnJvbSxcXG4zMzI1OlxcdFxcdFxcdFxcdFxcdHF1b3RhLVxcdTAwM2VjaGFyZ2VkX2Zyb20gK1xcbjMzMjY6XFx0XFx0XFx0XFx0XFx0bXNlY3NfdG9famlmZmllcyhxdW90YS1cXHUwMDNlcmVzZXRfaW50ZXJ2YWwpKSkge1xcbjMzMjc6XFx0XFx0XFx0aWYgKGRhbW9zX3F1b3RhX2lzX2Z1bGwocXVvdGEsIGMtXFx1MDAzZW1pbl9yZWdpb25fc3opKVxcbjMzMjg6XFx0XFx0XFx0XFx0cy1cXHUwMDNlc3RhdC5xdF9leGNlZWRzKys7XFxuMzMyOTpcXHRcXHRcXHRxdW90YS1cXHUwMDNldG90YWxfY2hhcmdlZF9zeiArPSBxdW90YS1cXHUwMDNlY2hhcmdlZF9zejtcXG4zMzMwOlxcdFxcdFxcdHF1b3RhLVxcdTAwM2VjaGFyZ2VkX2Zyb20gPSBqaWZmaWVzO1xcbjMzMzE6XFx0XFx0XFx0cXVvdGEtXFx1MDAzZWNoYXJnZWRfc3ogPSAwO1xcbjMzMzI6XFx0XFx0XFx0aWYgKHRyYWNlX2RhbW9zX2Vzel9lbmFibGVkKCkpXFxuMzMzMzpcXHRcXHRcXHRcXHRjYWNoZWRfZXN6ID0gcXVvdGEtXFx1MDAzZWVzejtcXG4zMzM0OlxcdFxcdFxcdGRhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGEoYywgcyk7XFxuMzMzNTpcXHRcXHRcXHRpZiAodHJhY2VfZGFtb3NfZXN6X2VuYWJsZWQoKSBcXHUwMDI2XFx1MDAyNiBxdW90YS1cXHUwMDNlZXN6ICE9IGNhY2hlZF9lc3opXFxuMzMzNjpcXHRcXHRcXHRcXHRkYW1vc190cmFjZV9lc3ooYywgcywgcXVvdGEpO1xcbjMzMzc6XFx0XFx0fVxcbjMzMzg6XFx0XFxuMzMzOTpcXHRcXHRpZiAoZGFtb3NfcXVvdGFfaXNfZnVsbChxdW90YSwgYy1cXHUwMDNlbWluX3JlZ2lvbl9zeikpXFxuMzM0MDpcXHRcXHRcXHRyZXR1cm47XFxuMzM0MTpcXHRcXHRpZiAoIWMtXFx1MDAzZW9wcy5nZXRfc2NoZW1lX3Njb3JlKVxcbjMzNDI6XFx0XFx0XFx0cmV0dXJuO1xcbjMzNDM6XFx0XFxuMzM0NDpcXHRcXHQvKiBGaWxsIHVwIHRoZSBzY29yZSBoaXN0b2dyYW0gKi9cXG4zMzQ1OlxcdFxcdG1lbXNldChjLVxcdTAwM2VyZWdpb25zX3Njb3JlX2hpc3RvZ3JhbSwgMCxcXG4zMzQ2OlxcdFxcdFxcdFxcdHNpemVvZigqYy1cXHUwMDNlcmVnaW9uc19zY29yZV9oaXN0b2dyYW0pICpcXG4zMzQ3OlxcdFxcdFxcdFxcdChEQU1PU19NQVhfU0NPUkUgKyAxKSk7XFxuMzM0ODpcXHRcXHRkYW1vbl9mb3JfZWFjaF90YXJnZXQodCwgYykge1xcbjMzNDk6XFx0XFx0XFx0ZGFtb25fZm9yX2VhY2hfcmVnaW9uKHIsIHQpIHtcXG4zMzUwOlxcdFxcdFxcdFxcdGlmICghX19kYW1vc192YWxpZF90YXJnZXQociwgcywgYykpXFxuMzM1MTpcXHRcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4zMzUyOlxcdFxcdFxcdFxcdGlmIChkYW1vc19jb3JlX2ZpbHRlcl9vdXQoYywgdCwgciwgcykpXFxuMzM1MzpcXHRcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4zMzU0OlxcdFxcdFxcdFxcdHNjb3JlID0gYy1cXHUwMDNlb3BzLmdldF9zY2hlbWVfc2NvcmUoYywgciwgcyk7XFxuMzM1NTpcXHRcXHRcXHRcXHRjLVxcdTAwM2VyZWdpb25zX3Njb3JlX2hpc3RvZ3JhbVtzY29yZV0gKz1cXG4zMzU2OlxcdFxcdFxcdFxcdFxcdGRhbW9uX3N6X3JlZ2lvbihyKTtcXG4zMzU3OlxcdFxcdFxcdFxcdGlmIChzY29yZSBcXHUwMDNlIG1heF9zY29yZSlcXG4zMzU4OlxcdFxcdFxcdFxcdFxcdG1heF9zY29yZSA9IHNjb3JlO1xcbjMzNTk6XFx0XFx0XFx0fVxcbjMzNjA6XFx0XFx0fVxcbjMzNjE6XFx0XFxuMzM2MjpcXHRcXHQvKiBTZXQgdGhlIG1pbiBzY29yZSBsaW1pdCAqL1xcbjMzNjM6XFx0XFx0Zm9yIChjdW11bGF0ZWRfc3ogPSAwLCBzY29yZSA9IG1heF9zY29yZTsgOyBzY29yZS0tKSB7XFxuMzM2NDpcXHRcXHRcXHRjdW11bGF0ZWRfc3ogKz0gYy1cXHUwMDNlcmVnaW9uc19zY29yZV9oaXN0b2dyYW1bc2NvcmVdO1xcbjMzNjU6XFx0XFx0XFx0aWYgKGN1bXVsYXRlZF9zeiBcXHUwMDNlPSBxdW90YS1cXHUwMDNlZXN6IHx8ICFzY29yZSlcXG4zMzY2OlxcdFxcdFxcdFxcdGJyZWFrO1xcbjMzNjc6XFx0XFx0fVxcbjMzNjg6XFx0XFx0cXVvdGEtXFx1MDAzZW1pbl9zY29yZSA9IHNjb3JlO1xcbjMzNjk6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMTo1MjoxMS41MzkzNDUyNThaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyNjYwMDUwMTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRBTU9OIEFuYWx5c2lzIC0gUXVpY2sgQ2hlY2sqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgZGFtb3NfYWRqdXN0X3F1b3RhYCwgYW5kIGl0J3MgcmlnaHQgdGhlcmUgaW4gYG1tL2RhbW9uL2NvcmUuY2AuIFN0YW5kYXJkIERBTU9OIHRlcnJpdG9yeSwgYXMgZXhwZWN0ZWQuIE15IGZpcnN0IHF1ZXN0aW9ucyBhcmUgYWx3YXlzIGFib3V0IHJlYWNoYWJpbGl0eSBhbmQgZnV6emluZyAtIGlzIHRoaXMgY29kZSBwYXRoIGV4cG9zZWQgdG8gYW55IGludGVyZXN0aW5nIGlucHV0cywgYW5kIGhhdmUgd2UgdGhyb3duIGV2ZXJ5dGhpbmcgYXQgaXQgYWxyZWFkeT8gV2Ugc2hvdWxkIGNoZWNrIGZvciB1c2VyLXNwYWNlIGNvbnRyb2wsIHdoaWNoIGlzIHRoZSBtb3N0IGxpa2VseSBhdmVudWUgZm9yIHByb2JsZW1zLiBBaCwgeWVzLCBEQU1PTidzIHN5c2ZzIGludGVyZmFjZSAoYC9zeXMva2VybmVsL21tL2RhbW9uL2FkbWluLy4uLmApIGFuZCBkZWJ1Z2ZzIGludGVyZmFjZSAoYC9zeXMva2VybmVsL2RlYnVnL2RhbW9uLy4uLmApIC0gdGhhdCdzIG91ciBlbnRyeSBwb2ludC4gTm93LCBsZXQncyBqdXN0IHF1aWNrbHkgY29uZmlybSB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiB1c2luZyBLY29uZmlnLiBDaGVjayBpZiBpdCdzIGV2ZW4gZW5hYmxlZCBhbmQgaG93LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MzE3LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTE6NTI6MTQuMTk5Mzk4MjE3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MTg5NTM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBEQU1PTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9LY29uZmlnPTM9bWVudSBcXFwiRGF0YSBBY2Nlc3MgTW9uaXRvcmluZ1xcXCJcXG5tbS9kYW1vbi9LY29uZmlnLTQtXFxubW0vZGFtb24vS2NvbmZpZzo1OmNvbmZpZyBEQU1PTlxcbm1tL2RhbW9uL0tjb25maWctNi1cXHRib29sIFxcXCJEQU1PTjogRGF0YSBBY2Nlc3MgTW9uaXRvcmluZyBGcmFtZXdvcmtcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTE0LVxcbm1tL2RhbW9uL0tjb25maWc6MTU6Y29uZmlnIERBTU9OX0RFQlVHX1NBTklUWVxcbm1tL2RhbW9uL0tjb25maWctMTYtXFx0Ym9vbCBcXFwiQ2hlY2sgc2FuaXR5IG9mIERBTU9OIGNvZGVcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTI1LVxcbm1tL2RhbW9uL0tjb25maWc6MjY6Y29uZmlnIERBTU9OX0tVTklUX1RFU1RcXG5tbS9kYW1vbi9LY29uZmlnLTI3LVxcdGJvb2wgXFxcIlRlc3QgZm9yIGRhbW9uXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTM3LVxcbm1tL2RhbW9uL0tjb25maWc6Mzg6Y29uZmlnIERBTU9OX1ZBRERSXFxubW0vZGFtb24vS2NvbmZpZy0zOS1cXHRib29sIFxcXCJEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXNcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTQ2LVxcbm1tL2RhbW9uL0tjb25maWc6NDc6Y29uZmlnIERBTU9OX1BBRERSXFxubW0vZGFtb24vS2NvbmZpZy00OC1cXHRib29sIFxcXCJEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy01NS1cXG5tbS9kYW1vbi9LY29uZmlnOjU2OmNvbmZpZyBEQU1PTl9WQUREUl9LVU5JVF9URVNUXFxubW0vZGFtb24vS2NvbmZpZy01Ny1cXHRib29sIFxcXCJUZXN0IGZvciBEQU1PTiBvcGVyYXRpb25zXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTY3LVxcbm1tL2RhbW9uL0tjb25maWc6Njg6Y29uZmlnIERBTU9OX1NZU0ZTXFxubW0vZGFtb24vS2NvbmZpZy02OS1cXHRib29sIFxcXCJEQU1PTiBzeXNmcyBpbnRlcmZhY2VcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTc1LVxcbm1tL2RhbW9uL0tjb25maWc6NzY6Y29uZmlnIERBTU9OX1NZU0ZTX0tVTklUX1RFU1RcXG5tbS9kYW1vbi9LY29uZmlnLTc3LVxcdGJvb2wgXFxcIlRlc3QgZm9yIGRhbW9uIHN5c2ZzIGludGVyZmFjZVxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbi0tXFxubW0vZGFtb24vS2NvbmZpZy04Ny1cXG5tbS9kYW1vbi9LY29uZmlnOjg4OmNvbmZpZyBEQU1PTl9SRUNMQUlNXFxubW0vZGFtb24vS2NvbmZpZy04OS1cXHRib29sIFxcXCJCdWlsZCBEQU1PTi1iYXNlZCByZWNsYWltIChEQU1PTl9SRUNMQUlNKVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctOTktXFxubW0vZGFtb24vS2NvbmZpZzoxMDA6Y29uZmlnIERBTU9OX0xSVV9TT1JUXFxubW0vZGFtb24vS2NvbmZpZy0xMDEtXFx0Ym9vbCBcXFwiQnVpbGQgREFNT04tYmFzZWQgTFJVLWxpc3RzIHNvcnRpbmcgKERBTU9OX0xSVV9TT1JUKVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctMTA3LVxcbm1tL2RhbW9uL0tjb25maWc6MTA4OmNvbmZpZyBEQU1PTl9TVEFUXFxubW0vZGFtb24vS2NvbmZpZy0xMDktXFx0Ym9vbCBcXFwiQnVpbGQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBzdGF0IChEQU1PTl9TVEFUKVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctMTE1LVxcbm1tL2RhbW9uL0tjb25maWc6MTE2OmNvbmZpZyBEQU1PTl9TVEFUX0VOQUJMRURfREVGQVVMVFxcbm1tL2RhbW9uL0tjb25maWctMTE3LVxcdGJvb2wgXFxcIkVuYWJsZSBEQU1PTl9TVEFUIGJ5IGRlZmF1bHRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDExOjUyOjE0LjI0NDU5MzA0N1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI2NTAzNjE4MjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgaW1tZWRpYXRlIHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBEQU1PTidzIE1ha2VmaWxlIGFuZCBLY29uZmlnKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGUgY29yZSBidWlsZCBpbmZyYXN0cnVjdHVyZSBmb3IgdGhlIERhdGEgQWNjZXNzIE1vbml0b3IgKERBTU9OKSBpbXBsZW1lbnRhdGlvbi4gTXkgZmlyc3Qgc3RlcCBpcyB0byBvcGVuIHVwIGBtbS9kYW1vbi9NYWtlZmlsZWAgYW5kIGBtbS9kYW1vbi9LY29uZmlnYC4gSSdtIGV4cGVjdGluZyB0byBmaW5kIHRoZSBzdGFuZGFyZCBidWlsZCBydWxlcyBhbmQgbGlrZWx5IHRoZSBtb2R1bGUgZGVmaW5pdGlvbnMgaW4gdGhlIE1ha2VmaWxlLiBGcm9tIGEgS2NvbmZpZyBwZXJzcGVjdGl2ZSwgSSdsbCBiZSBsb29raW5nIGZvciB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgZ292ZXJuIERBTU9OJ3MgZmVhdHVyZXMsIGRlcGVuZGVuY2llcywgYW5kIGFueSBydW50aW1lIGJlaGF2aW9ycyB0aGF0IGFyZSBjb250cm9sbGVkIHRocm91Z2gga2VybmVsIGNvbmZpZ3VyYXRpb25zLiBJJ20ga2VlbiB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYnVpbGQgc3lzdGVtIGludGVncmF0ZXMgREFNT04gYW5kIHRvIHNlZSB0aGUgbW9kdWxhcml0eSBvZiB0aGUgZGVzaWduLCB3aGljaCBtaWdodCByZXZlYWwgYXNwZWN0cyByZWxhdGVkIHRvIGl0cyBzY2FsYWJpbGl0eSBhbmQgY29uZmlndXJhYmlsaXR5LiBBbmFseXppbmcgdGhlIE1ha2VmaWxlIHdpbGwgcXVpY2tseSBnaXZlIG1lIGluc2lnaHQgaW50byB0aGUgYnVpbGQgcHJvY2Vzcywgd2hpbGUgS2NvbmZpZyB3aWxsIGlsbHVtaW5hdGUgdGhlIGF2YWlsYWJsZSBjb25maWd1cmF0aW9uIGNob2ljZXMuIFRoaXMgaXMgbXkgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IERBTU9OIGlzIGJha2VkIGludG8gdGhlIGtlcm5lbC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTM4MCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDExOjUyOjE2Ljg5NDk1Njg2N1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzNTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2RhbW9uL01ha2VmaWxlXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0XFxuICAgMzpcXHRvYmoteVxcdFxcdFxcdFxcdDo9IGNvcmUub1xcbiAgIDQ6XFx0b2JqLSQoQ09ORklHX0RBTU9OX1ZBRERSKVxcdCs9IG9wcy1jb21tb24ubyB2YWRkci5vXFxuICAgNTpcXHRvYmotJChDT05GSUdfREFNT05fUEFERFIpXFx0Kz0gb3BzLWNvbW1vbi5vIHBhZGRyLm9cXG4gICA2OlxcdG9iai0kKENPTkZJR19EQU1PTl9TWVNGUylcXHQrPSBzeXNmcy1jb21tb24ubyBzeXNmcy1zY2hlbWVzLm8gc3lzZnMub1xcbiAgIDc6XFx0b2JqLSQoQ09ORklHX0RBTU9OX1JFQ0xBSU0pXFx0Kz0gbW9kdWxlcy1jb21tb24ubyByZWNsYWltLm9cXG4gICA4OlxcdG9iai0kKENPTkZJR19EQU1PTl9MUlVfU09SVClcXHQrPSBtb2R1bGVzLWNvbW1vbi5vIGxydV9zb3J0Lm9cXG4gICA5OlxcdG9iai0kKENPTkZJR19EQU1PTl9TVEFUKVxcdCs9IG1vZHVsZXMtY29tbW9uLm8gc3RhdC5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDExOjUyOjE2Ljg5NTAxMjE3NloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIwMzcyMDkzMDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aGUgZXhwZXJ0OlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIERBTU9OIENvbXBpbGF0aW9uKipcblxuT2theSwgc28gYG9iai15IDo9IGNvcmUub2AgaW4gYG1tL2RhbW9uL2AgaXMgb25seSBidWlsdCBpZiBgQ09ORklHX0RBTU9OPXlgLiBUaGlzIG1lYW5zIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgYG1tL01ha2VmaWxlYCB0byBjb25maXJtIHRoZSBidWlsZCBkZXBlbmRlbmNpZXMgYW5kIGhvdyBgQ09ORklHX0RBTU9OYCBpcyBoYW5kbGVkIGluIHRoYXQgY29udGV4dC4gSSBuZWVkIHRvIHNlZSB3aGF0IGVsc2UgaW4gdGhhdCBNYWtlZmlsZSBwb3RlbnRpYWxseSBpbmZsdWVuY2VzIHdoZXRoZXIgb3Igbm90IGBjb3JlLm9gIGV2ZW4gZ2V0cyBjb25zaWRlcmVkIGZvciBjb21waWxhdGlvbiBhbmQgbGlua2luZy4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGhvbGlzdGljIHZpZXcgb2YgdGhlIGRlcGVuZGVuY3kgY2hhaW4uIEkgYW0gcHJldHR5IHN1cmUgdGhpcyBpcyBhIHdlbGwgdHJvZGRlbiBwYXJ0IG9mIHRoZSBjb2RlLCBidXQgYmVzdCB0byBkb3VibGUgY2hlY2sgYW5kIHJ1bGUgb3V0IGFueSB1bmV4cGVjdGVkIGludGVyYWN0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTg2NSwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTE6NTI6MTguOTMyMjI1MzM2WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzE1MTExOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9NYWtlZmlsZT0xMzY9b2JqLSQoQ09ORklHX0RFQlVHX1BBR0VfUkVGKSArPSBkZWJ1Z19wYWdlX3JlZi5vXFxubW0vTWFrZWZpbGU6MTM3Om9iai0kKENPTkZJR19EQU1PTikgKz0gZGFtb24vXFxubW0vTWFrZWZpbGUtMTM4LW9iai0kKENPTkZJR19IQVJERU5FRF9VU0VSQ09QWSkgKz0gdXNlcmNvcHkub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMTo1MjoxOC45NzkzODYwMTVaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NzA3MzQyOTM1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIERBTU9OIENvbmZpZ3VyYXRpb24gYW5kIFF1b3RhIEFkanVzdG1lbnQqKlxuXG5BbHJpZ2h0LCBzbyBgQ09ORklHX0RBTU9OYCBkaXJlY3RseSBsZWFkcyB0byB0aGUgYnVpbGQgb2YgdGhlIGBkYW1vbi9gIGRpcmVjdG9yeS4gVGhhdCBtdWNoIGlzIGNsZWFyLiBNeSBuZXh0IG1vdmUgaXMgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHF1b3RhIGZvciBEQU1PTiBpcyBhZGp1c3RlZC4gVG8gZG8gdGhpcywgSSBuZWVkIHRvIHBpbnBvaW50IGV2ZXJ5IGluc3RhbmNlIG9mIHRoZSBgZGFtb3NfYWRqdXN0X3F1b3RhYCBmdW5jdGlvbiBjYWxsIHdpdGhpbiB0aGUgYG1tL2RhbW9uL2NvcmUuY2AgZmlsZS4gVGhpcyBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMuIFRoZSBhZGp1c3RtZW50IG9mIHRoZSBxdW90YSBpcyB3aGVyZSBJJ2xsIGZpbmQgdGhlIGluZm9ybWF0aW9uIGZvciBvcHRpbWl6aW5nIGl0cyBvcGVyYXRpb25zLiBJJ2xsIG5lZWQgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBwYXRoIGZyb20gdGhvc2UgY2FsbHMgdG8gc2VlIHdoZXJlIHRoZXNlIHF1b3RhIGFkanVzdG1lbnRzIGhhcHBlbiBhbmQgdW5kZXIgd2hhdCBjb25kaXRpb25zLiBGcm9tIHRoZXJlLCBJIGNhbiBkZXRlcm1pbmUgaWYgYW55IGNoYW5nZXMgYXJlIG5lZWRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjE2OCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDExOjUyOjI2LjA1MjgxNzMxOVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY0MTMwNjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb3NfYWRqdXN0X3F1b3RhXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL2NvcmUuYz0zMjkwPXN0YXRpYyB2b2lkIGRhbW9zX3RyYWNlX2VzeihzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb3MgKnMsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzMwMy1cXG5tbS9kYW1vbi9jb3JlLmM6MzMwNDpzdGF0aWMgdm9pZCBkYW1vc19hZGp1c3RfcXVvdGEoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzKVxcbm1tL2RhbW9uL2NvcmUuYy0zMzA1LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0zMzg3PXN0YXRpYyB2b2lkIGtkYW1vbmRfYXBwbHlfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTM0MDItXFxubW0vZGFtb24vY29yZS5jOjM0MDM6XFx0XFx0ZGFtb3NfYWRqdXN0X3F1b3RhKGMsIHMpO1xcbm1tL2RhbW9uL2NvcmUuYy0zNDA0LVxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTE6NTI6MjYuMDk5MjQ3NDI4WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI5NDM5MTQwMzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gYGtkYW1vbmRfYXBwbHlfc2NoZW1lc2AqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCBga2RhbW9uZF9hcHBseV9zY2hlbWVzYC4gVGhhdCBmdW5jdGlvbiBpbiBgbW0vZGFtb24vY29yZS5jYCBpcyB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlciwgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMg4oCTIHdoZXJlIERBTU9OIGFjdHVhbGx5IGV4ZWN1dGVzIGl0cyBzY2hlbWVzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyBpdCdzIG9yY2hlc3RyYXRpbmcgdGhlIG1vbml0b3JpbmcgYW5kIGFkYXB0YXRpb24uIEkgc2hvdWxkIGNoZWNrIHRoZSBzdXJyb3VuZGluZyBjb2RlIGZvciBob3cgaXQncyBjYWxsZWQgYW5kIHdoZW4uIFRoZSBjb250ZXh0IGlzIGNydWNpYWwgaGVyZS4gV2hhdCB0cmlnZ2VycyBpdHMgZXhlY3V0aW9uPyBXaGF0IGRhdGEgaXMgaXQgd29ya2luZyB3aXRoPyBBcmUgdGhlcmUgYW55IG9idmlvdXMgYm90dGxlbmVja3Mgb3IgcG90ZW50aWFsIGFyZWFzIGZvciBpbXByb3ZlbWVudCBpbiB0aGUgY29yZSBhbGdvcml0aG0/IEknbGwgcHJvYmFibHkgc3RhcnQgYnkgdHJhY2luZyB0aGUgZXhlY3V0aW9uIHBhdGggYW5kIHRoZW4gZGl2ZSBpbnRvIHRoZSBkZXRhaWxzLiBJIHdpbGwgYWxzbyBtYWtlIG5vdGVzIG9mIGhvdyB0aGUgcHJvY2VzcyBpbnRlcmFjdHMgd2l0aCBhbGwgdGhlIHNjaGVtZXMuIExldCdzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NjIwLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTE6NTI6MjkuMDQzMTYzOTM0WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NTgwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi9jb3JlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzM4MCxcbiAgXCJMaW5lQ291bnRcIjogNzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzM4MDpcXHRcXHRcXHRpZiAoc2l0ZXIgPT0gcylcXG4zMzgxOlxcdFxcdFxcdFxcdGJyZWFrO1xcbjMzODI6XFx0XFx0XFx0c2lkeCsrO1xcbjMzODM6XFx0XFx0fVxcbjMzODQ6XFx0XFx0dHJhY2VfY2FsbF9fZGFtb3Nfc3RhdF9hZnRlcl9hcHBseV9pbnRlcnZhbChjaWR4LCBzaWR4LCBcXHUwMDI2cy1cXHUwMDNlc3RhdCk7XFxuMzM4NTpcXHR9XFxuMzM4NjpcXHRcXG4zMzg3OlxcdHN0YXRpYyB2b2lkIGtkYW1vbmRfYXBwbHlfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjKVxcbjMzODg6XFx0e1xcbjMzODk6XFx0XFx0c3RydWN0IGRhbW9uX3RhcmdldCAqdDtcXG4zMzkwOlxcdFxcdHN0cnVjdCBkYW1vcyAqcztcXG4zMzkxOlxcdFxcdGJvb2wgaGFzX3NjaGVtZXNfdG9fYXBwbHkgPSBmYWxzZTtcXG4zMzkyOlxcdFxcdHVuc2lnbmVkIGxvbmcgbWF4X3JlZ2lvbl9zejtcXG4zMzkzOlxcdFxcbjMzOTQ6XFx0XFx0ZGFtb25fZm9yX2VhY2hfc2NoZW1lKHMsIGMpIHtcXG4zMzk1OlxcdFxcdFxcdGlmICh0aW1lX2JlZm9yZShjLVxcdTAwM2VwYXNzZWRfc2FtcGxlX2ludGVydmFscywgcy1cXHUwMDNlbmV4dF9hcHBseV9zaXMpKVxcbjMzOTY6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMzM5NzpcXHRcXG4zMzk4OlxcdFxcdFxcdGlmICghcy1cXHUwMDNld21hcmtzLmFjdGl2YXRlZClcXG4zMzk5OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjM0MDA6XFx0XFxuMzQwMTpcXHRcXHRcXHRoYXNfc2NoZW1lc190b19hcHBseSA9IHRydWU7XFxuMzQwMjpcXHRcXG4zNDAzOlxcdFxcdFxcdGRhbW9zX2FkanVzdF9xdW90YShjLCBzKTtcXG4zNDA0OlxcdFxcdH1cXG4zNDA1OlxcdFxcbjM0MDY6XFx0XFx0aWYgKCFoYXNfc2NoZW1lc190b19hcHBseSlcXG4zNDA3OlxcdFxcdFxcdHJldHVybjtcXG4zNDA4OlxcdFxcbjM0MDk6XFx0XFx0bWF4X3JlZ2lvbl9zeiA9IGRhbW9uX3JlZ2lvbl9zel9saW1pdChjKTtcXG4zNDEwOlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNmMtXFx1MDAzZXdhbGtfY29udHJvbF9sb2NrKTtcXG4zNDExOlxcdFxcdGRhbW9uX2Zvcl9lYWNoX3RhcmdldCh0LCBjKSB7XFxuMzQxMjpcXHRcXHRcXHRpZiAoYy1cXHUwMDNlb3BzLnRhcmdldF92YWxpZCBcXHUwMDI2XFx1MDAyNiBjLVxcdTAwM2VvcHMudGFyZ2V0X3ZhbGlkKHQpID09IGZhbHNlKSB7XFxuMzQxMzpcXHRcXHRcXHRcXHRkYW1vbl9mb3JfZWFjaF9zY2hlbWUocywgYykge1xcbjM0MTQ6XFx0XFx0XFx0XFx0XFx0aWYgKHMtXFx1MDAzZXF1b3RhLmNoYXJnZV90YXJnZXRfZnJvbSAhPSB0KVxcbjM0MTU6XFx0XFx0XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMzQxNjpcXHRcXHRcXHRcXHRcXHRzLVxcdTAwM2VxdW90YS5jaGFyZ2VfdGFyZ2V0X2Zyb20gPSBOVUxMO1xcbjM0MTc6XFx0XFx0XFx0XFx0XFx0cy1cXHUwMDNlcXVvdGEuY2hhcmdlX2FkZHJfZnJvbSA9IDA7XFxuMzQxODpcXHRcXHRcXHRcXHR9XFxuMzQxOTpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4zNDIwOlxcdFxcdFxcdH1cXG4zNDIxOlxcdFxcdFxcdGRhbW9zX2FwcGx5X3RhcmdldChjLCB0LCBtYXhfcmVnaW9uX3N6KTtcXG4zNDIyOlxcdFxcdH1cXG4zNDIzOlxcdFxcbjM0MjQ6XFx0XFx0ZGFtb25fZm9yX2VhY2hfc2NoZW1lKHMsIGMpIHtcXG4zNDI1OlxcdFxcdFxcdGlmICh0aW1lX2JlZm9yZShjLVxcdTAwM2VwYXNzZWRfc2FtcGxlX2ludGVydmFscywgcy1cXHUwMDNlbmV4dF9hcHBseV9zaXMpKVxcbjM0MjY6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMzQyNzpcXHRcXHRcXHRkYW1vc193YWxrX2NvbXBsZXRlKGMsIHMpO1xcbjM0Mjg6XFx0XFx0XFx0ZGFtb3Nfc2V0X25leHRfYXBwbHlfc2lzKHMsIGMpO1xcbjM0Mjk6XFx0XFx0XFx0cy1cXHUwMDNlbGFzdF9hcHBsaWVkID0gTlVMTDtcXG4zNDMwOlxcdFxcdFxcdGRhbW9zX3RyYWNlX3N0YXQoYywgcyk7XFxuMzQzMTpcXHRcXHR9XFxuMzQzMjpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmMtXFx1MDAzZXdhbGtfY29udHJvbF9sb2NrKTtcXG4zNDMzOlxcdH1cXG4zNDM0OlxcdFxcbjM0MzU6XFx0I2lmZGVmIENPTkZJR19EQU1PTl9ERUJVR19TQU5JVFlcXG4zNDM2OlxcdHN0YXRpYyB2b2lkIGRhbW9uX3ZlcmlmeV9tZXJnZV90d29fcmVnaW9ucyhcXG4zNDM3OlxcdFxcdFxcdHN0cnVjdCBkYW1vbl9yZWdpb24gKmwsIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIpXFxuMzQzODpcXHR7XFxuMzQzOTpcXHRcXHQvKiBkYW1vbl9tZXJnZV90d29fcmVnaW9ucygpIG1heSBjcmVhdGVkIGluY29ycmVjdCBsZWZ0IHJlZ2lvbiAqL1xcbjM0NDA6XFx0XFx0V0FSTl9PTkNFKGwtXFx1MDAzZWFyLnN0YXJ0IFxcdTAwM2U9IGwtXFx1MDAzZWFyLmVuZCwgXFxcImw6ICVsdS0lbHUsIHI6ICVsdS0lbHVcXFxcblxcXCIsXFxuMzQ0MTpcXHRcXHRcXHRcXHRsLVxcdTAwM2Vhci5zdGFydCwgbC1cXHUwMDNlYXIuZW5kLCByLVxcdTAwM2Vhci5zdGFydCwgci1cXHUwMDNlYXIuZW5kKTtcXG4zNDQyOlxcdH1cXG4zNDQzOlxcdCNlbHNlXFxuMzQ0NDpcXHRzdGF0aWMgdm9pZCBkYW1vbl92ZXJpZnlfbWVyZ2VfdHdvX3JlZ2lvbnMoXFxuMzQ0NTpcXHRcXHRcXHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpsLCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyKVxcbjM0NDY6XFx0e1xcbjM0NDc6XFx0fVxcbjM0NDg6XFx0I2VuZGlmXFxuMzQ0OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTE6NTI6MjkuMDQzMzUxNjI0WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQ0MDcwMzQzODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgZGFtb3NfYWRqdXN0X3F1b3RhYCBGdW5jdGlvbjogQSBEZWVwIERpdmUqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayBkb3duIHdoYXQncyBoYXBwZW5pbmcgd2l0aGluIGBkYW1vc19hZGp1c3RfcXVvdGFgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIGl0cyBjb3JlIGZ1bmN0aW9uLCBhbmQgZnJvbSB0aGUgY29kZSwgaXQgc2VlbXMgdG8gYmUgbWFuYWdpbmcgYW5kIGFkanVzdGluZyBxdW90YXMgcmVsYXRlZCB0byBtZW1vcnkgcmVnaW9ucywgbGlrZWx5IHdpdGhpbiBhIERBTU9OIGNvbnRleHQuIEkgc2VlIHNldmVyYWwga2V5IGNvbXBvbmVudHM6IHF1b3RhcywgdGFyZ2V0cywgcmVnaW9ucywgYW5kIHRpbWVzdGFtcHMuIEl0IHNlZW1zIHRvIGhhdmUgYSBwZXJpb2RpYyBpbnRlcnZhbC5cblxuRmlyc3QsIEkgc2VlIHRoZSBjb2RlIGlzIGNoZWNraW5nIGlmIHRoZSBxdW90YSBpcyBhY3RpdmUsIGVhcmx5IGV4aXRpbmcgaWYgbm90LiBUaGVuIEknbSBmb2xsb3dpbmcgdGhpcyBwYXJ0IHRoYXQgZGVmaW5lcyB0aGUgc3RhcnQgb2YgYSBuZXcgd2luZG93IGZvciBhdXRvIHR1bmluZy4gSWYgYW4gYXV0by10dW5pbmcgaW50ZXJ2YWwgaXMgc2V0LCBpdCBjaGVja3MgaWYgdGhlIGN1cnJlbnQgdGltZSBpcyB3aXRoaW4gdGhlIHZhbGlkIHJhbmdlLiBJZiBub3QsIGl0IHVwZGF0ZXMgdGhlIFwidHVuZWQgZnJvbVwiIHRpbWVzdGFtcCBhbmQgY2FsbHMgYGRhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGFgLiBUcmFjaW5nIG9mIGBlc3pgIChlZmZlY3RpdmUgc2l6ZSkgY2hhbmdlcyBhcmUgaW5jbHVkZWQuIEEgdmVyeSBzaW1pbGFyIHRoaW5nIGlzIGhhcHBlbmluZyBmb3IgYSBcImNoYXJnZSB3aW5kb3dcIiwgYW5kIGBkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhYCBpcyBjYWxsZWQgYWdhaW4uXG5cblRoZSBpbnRlcmVzdGluZyBiaXQsIGhlcmUsIGlzIHRoZSBjb25kaXRpb25hbC4gUHJpb3IgdG8gYSBjZXJ0YWluIHBhdGNoLCB0aGUgY29kZSB3b3VsZCBjYWxjdWxhdGUgdGhlIGhpc3RvZ3JhbSBhbmQgdGhlIG1pbmltdW0gc2NvcmUuIFRoZSBjb2RlIGN1cnJlbnRseSBza2lwcyBhbGwgdGhpcyBpZiB0aGUgcXVvdGEgaXMgZnVsbCwgdGhlIHJlYXNvbiBiZWluZzpcblxuQmVmb3JlIHRoZSBwYXRjaDpcbkl0IGNoZWNrZWQgYGlmICghYy1cdTAwM2VvcHMuZ2V0X3NjaGVtZV9zY29yZSkgcmV0dXJuO2AgYW5kIHRoZW4gY2FsY3VsYXRlZCBoaXN0b2dyYW0gYW5kIGBxdW90YS1cdTAwM2VtaW5fc2NvcmVgLlxuV2l0aCB0aGUgcGF0Y2g6XG5gaWYgKGRhbW9zX3F1b3RhX2lzX2Z1bGwocXVvdGEsIGMtXHUwMDNlbWluX3JlZ2lvbl9zeikpIHJldHVybjtgXG5JZiB0aGUgcXVvdGEgaXMgZnVsbCwgc2tpcCBjYWxjdWxhdGluZyB0aGUgc2NvcmUgaGlzdG9ncmFtIGFuZCBtaW4gc2NvcmUgbGltaXQhXG5cblRoaXMgb3B0aW1pemF0aW9uIGxpa2VseSBhaW1zIHRvIGF2b2lkIHVubmVjZXNzYXJ5IGNvbXB1dGF0aW9uIHdoZW4gdGhlIHF1b3RhIGlzIGFscmVhZHkgZXhoYXVzdGVkLiBJdCdzIGEgcGVyZm9ybWFuY2UgdHdlYWsg4oCTIHdoeSBjYWxjdWxhdGUgc2NvcmVzIHdoZW4geW91IGNhbid0IGFsbG9jYXRlIG1vcmUgYW55d2F5PyBCdXQsIEknZCBsaWtlIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgYSBiaXQgbW9yZS4gSSB0aGluayBpdCB3b3VsZCBiZSB3aXNlIHRvIHJlYWQgdGhlIGNvbW1pdCBsb2cgdG8gZ2V0IHRoZSByYXRpb25hbGUgZm9yIHRoaXMgY2hhbmdlIGFuZCB0aGUgaXNzdWVzIGl0IGFkZHJlc3NlZCwgdG8gZ2V0IGEgZGVlcGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHRyYWRlLW9mZnMuIEl0J3MgbGlrZWx5IGFuIGltcG9ydGFudCBvcHRpbWl6YXRpb24gaW4gYSBjcml0aWNhbCBwYXRoLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3OTU4LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjUyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTE6NTI6MzMuNDUwMzg4NjE4WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjY5MzE2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vc19xdW90YV9pc19mdWxsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL2NvcmUuYz0yNjY4PXN0YXRpYyB2b2lkIGRhbW9zX2NoYXJnZV9xdW90YShzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhLFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTI2ODQtXFxubW0vZGFtb24vY29yZS5jOjI2ODU6c3RhdGljIGJvb2wgZGFtb3NfcXVvdGFfaXNfZnVsbChzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhLFxcbm1tL2RhbW9uL2NvcmUuYy0yNjg2LVxcdFxcdHVuc2lnbmVkIGxvbmcgbWluX3JlZ2lvbl9zeilcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0yNjk5PXN0YXRpYyB2b2lkIGRhbW9zX2FwcGx5X3NjaGVtZShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTI3NTctXFx0XFx0ZGFtb3NfY2hhcmdlX3F1b3RhKHF1b3RhLCBzeiwgc3pfYXBwbGllZCk7XFxubW0vZGFtb24vY29yZS5jOjI3NTg6XFx0XFx0aWYgKGRhbW9zX3F1b3RhX2lzX2Z1bGwocXVvdGEsIGMtXFx1MDAzZW1pbl9yZWdpb25fc3opKSB7XFxubW0vZGFtb24vY29yZS5jLTI3NTktXFx0XFx0XFx0cXVvdGEtXFx1MDAzZWNoYXJnZV90YXJnZXRfZnJvbSA9IHQ7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9Mjc3MD1zdGF0aWMgdm9pZCBkYW1vbl9kb19hcHBseV9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmMsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjc4NS1cXHRcXHQvKiBDaGVjayB0aGUgcXVvdGEgKi9cXG5tbS9kYW1vbi9jb3JlLmM6Mjc4NjpcXHRcXHRpZiAoZGFtb3NfcXVvdGFfaXNfZnVsbChxdW90YSwgYy1cXHUwMDNlbWluX3JlZ2lvbl9zeikpXFxubW0vZGFtb24vY29yZS5jLTI3ODctXFx0XFx0XFx0Y29udGludWU7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MzMwND1zdGF0aWMgdm9pZCBkYW1vc19hZGp1c3RfcXVvdGEoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTMzMjYtXFx0XFx0XFx0XFx0bXNlY3NfdG9famlmZmllcyhxdW90YS1cXHUwMDNlcmVzZXRfaW50ZXJ2YWwpKSkge1xcbm1tL2RhbW9uL2NvcmUuYzozMzI3OlxcdFxcdGlmIChkYW1vc19xdW90YV9pc19mdWxsKHF1b3RhLCBjLVxcdTAwM2VtaW5fcmVnaW9uX3N6KSlcXG5tbS9kYW1vbi9jb3JlLmMtMzMyOC1cXHRcXHRcXHRzLVxcdTAwM2VzdGF0LnF0X2V4Y2VlZHMrKztcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zMzM4LVxcbm1tL2RhbW9uL2NvcmUuYzozMzM5OlxcdGlmIChkYW1vc19xdW90YV9pc19mdWxsKHF1b3RhLCBjLVxcdTAwM2VtaW5fcmVnaW9uX3N6KSlcXG5tbS9kYW1vbi9jb3JlLmMtMzM0MC1cXHRcXHRyZXR1cm47XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDExOjUyOjMzLjQ5NzA4NjY1N1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMDE5Njg5NjA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlRyYWNpbmcgdGhlIGBkYW1vc19hZGp1c3RfcXVvdGFgIEZ1bmN0aW9uIENhbGwqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEkgc2VlIHRoYXQgYGRhbW9zX2FkanVzdF9xdW90YWAgaXMgZGVmaW5lZCBhcyBzdGF0aWMsIHdoaWNoIGlzIHRoZSBmaXJzdCBpbXBvcnRhbnQgcG9pbnQuIFRoaXMgbWVhbnMgaXRzIHNjb3BlIGlzIHJlc3RyaWN0ZWQgdG8gdGhlIGN1cnJlbnQgY29tcGlsYXRpb24gdW5pdCwgc28gSSBkb24ndCBuZWVkIHRvIHdvcnJ5IGFib3V0IGl0IGJlaW5nIGRpcmVjdGx5IGFjY2Vzc2libGUgZnJvbSBvdXRzaWRlIGl0cyBzb3VyY2UgZmlsZS4gTmV4dCwgSSdtIG5vdGluZyB0aGF0IGBkYW1vc19hZGp1c3RfcXVvdGFgIGlzIGNhbGxlZCBmcm9tIGBrZGFtb25kX2FwcGx5X3NjaGVtZXNgLiBBbmQsIGxvb2tpbmcgZnVydGhlciB1cCB0aGUgY2FsbCBzdGFjaywgYGtkYW1vbmRfYXBwbHlfc2NoZW1lc2AgaXMgY2FsbGVkIGZyb20gYGtkYW1vbmRfZm5gIOKAkyB0aGUga3RocmVhZCBkZWRpY2F0ZWQgdG8gREFNT04sIHdoaWNoIGNvbmZpcm1zIG15IHVuZGVyc3RhbmRpbmcuXG5cbkdpdmVuIHRoaXMgY29udGV4dCwgSSBub3cgd2FudCB0byBpbnZlc3RpZ2F0ZSBob3cgZnJlcXVlbnRseSBga2RhbW9uZF9hcHBseV9zY2hlbWVzYCBpcyBjYWxsZWQsIGFuZCBmcm9tIHdoZXJlLiBLbm93aW5nIHRoZSBjYWxsZXJzIG9mIHRoaXMgZnVuY3Rpb24gd2lsbCBwcm92aWRlIGEgZ29vZCBwaWN0dXJlIG9mIHRoZSBpbnRlcmFjdGlvbiBhbmQgaW50ZWdyYXRpb24gb2YgZGlmZmVyZW50IERBTU9OIHBhcnRzLiBTcGVjaWZpY2FsbHksIGl0IHdpbGwgZ2l2ZSBtZSBzb21lIGluc2lnaHQgb24gd2hhdCdzIHRyaWdnZXJpbmcgdGhlIGV4ZWN1dGlvbiBvZiBgZGFtb3NfYWRqdXN0X3F1b3RhYC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTY2MiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDExOjUyOjM1LjUxNjc3OTMzNloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUxNDIyMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia2RhbW9uZF9hcHBseV9zY2hlbWVzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL2NvcmUuYz0zMzcxPXN0YXRpYyB2b2lkIGRhbW9zX3RyYWNlX3N0YXQoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTMzODYtXFxubW0vZGFtb24vY29yZS5jOjMzODc6c3RhdGljIHZvaWQga2RhbW9uZF9hcHBseV9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmMpXFxubW0vZGFtb24vY29yZS5jLTMzODgte1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTM5MjA9c3RhdGljIGludCBrZGFtb25kX2ZuKHZvaWQgKmRhdGEpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzk5Ni1cXHRcXHQvKlxcbm1tL2RhbW9uL2NvcmUuYzozOTk3OlxcdFxcdCAqIGRvIGtkYW1vbmRfY2FsbCgpIGFuZCBrZGFtb25kX2FwcGx5X3NjaGVtZXMoKSBhZnRlclxcbm1tL2RhbW9uL2NvcmUuYy0zOTk4LVxcdFxcdCAqIGtkYW1vbmRfbWVyZ2VfcmVnaW9ucygpIGlmIHBvc3NpYmxlLCB0byByZWR1Y2Ugb3ZlcmhlYWRcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy00MDExLVxcdFxcdGlmICghbGlzdF9lbXB0eShcXHUwMDI2Y3R4LVxcdTAwM2VzY2hlbWVzKSlcXG5tbS9kYW1vbi9jb3JlLmM6NDAxMjpcXHRcXHRcXHRrZGFtb25kX2FwcGx5X3NjaGVtZXMoY3R4KTtcXG5tbS9kYW1vbi9jb3JlLmMtNDAxMy1cXHRcXHRlbHNlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDExOjUyOjM1LjU2MTkyNTYzNloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0MzQ3Mjk0Mjk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IERBTU9OIEludmVzdGlnYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaG93IHN5emthbGxlciBwbGF5cyB3aXRoIERBTU9OLiBGaXJzdCB0aG91Z2h0IGlzLCBkb2VzIHN5emthbGxlciBldmVuICprbm93KiBhYm91dCBEQU1PTj8gRG9lcyBpdCBoYXZlIHNwZWNpZmljIERBTU9OIGRlc2NyaXB0aW9ucz8gSG9sZCBvbiwgc3l6bGFuZydzIHRvb2xzIGNhbid0IGp1c3QgYmxpbmRseSBzZWFyY2ggdGhlIGtlcm5lbCBzb3VyY2VzLiBXZSBuZWVkIHRvIGNoZWNrIHN5emthbGxlcidzIHN1cHBvcnQgaW5kaXJlY3RseSwgbWF5YmUgdmlhIHN5c2ZzLiBBaCwgd2FpdCwgdGhlcmUncyBhIGNydWNpYWwgcG9pbnQgaGVyZSB0aGF0IEkgYWxtb3N0IG1pc3NlZCEgVGhpcyBgZ3JlcHBlcmAgdG9vbCAqZXhwbGljaXRseSogc2F5cyBpdCBjYW4ndCBoYW5kbGUgc3l6bGFuZyBkZXNjcmlwdGlvbnMgb3IgdGhvc2UgcHNldWRvLXN5c2NhbGxzIHN0YXJ0aW5nIHdpdGggXCJzeXpfXCIuIFRoYXQncyBiZWNhdXNlIHRob3NlIGFyZW4ndCBhY3R1YWxseSAqaW4qIHRoZSBrZXJuZWwgc291cmNlIGl0c2VsZi4gV2UncmUgc3VwcG9zZWQgdG8gYmUgdXNpbmcgYHJlYWQtc3l6LXNwZWNgIGFuZCBgc3l6LWdyZXBwZXJgIGluc3RlYWQsIGJ1dCBhcmUgdGhvc2UgZXZlbiBkZWZpbmVkP1xuXG5MZXQgbWUgcXVpY2tseSByZXZpZXcgdGhlIGRlY2xhcmVkIHRvb2xzLi4uIE5vcGUhIExvb2tzIGxpa2UgYHJlYWQtc3l6LXNwZWNgIGFuZCBgc3l6LWdyZXBwZXJgIGFyZSBub3QgYXZhaWxhYmxlLCBzbyB0aGF0J3MgdGhhdC4gTm8gbmVlZCB0byB3b3JyeSBhYm91dCB0aGVtIGZvciBub3cuXG5cbkFscmlnaHQsIGxldCdzIHJlZm9jdXMuIEZvcmdldCBzeXprYWxsZXIgZm9yIGEgbW9tZW50LCBhbmQgdGhpbmsgYWJvdXQgREFNT04gZGlyZWN0bHkuIENhbiBpdCBiZSByZWFjaGVkIGZyb20gdXNlcnNwYWNlPyBIb3cgaXMgREFNT04gY29udHJvbGxlZCBmcm9tIHVzZXJzcGFjZT8gVGltZSB0byBkZWx2ZSBpbnRvIHRoZSBgbW0vZGFtb24vc3lzZnMuY2AgZmlsZSBhbmQgc2VlIHdoYXQncyB3aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDI4NCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMTo1MjozOS45MDkyMjI2WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2ODIxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi9zeXNmcy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gICAyOlxcdC8qXFxuICAgMzpcXHQgKiBEQU1PTiBzeXNmcyBJbnRlcmZhY2VcXG4gICA0OlxcdCAqL1xcbiAgIDU6XFx0XFxuICAgNjpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvc2NoZWQuaFxcdTAwM2VcXG4gICA3OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9zbGFiLmhcXHUwMDNlXFxuICAgODpcXHRcXG4gICA5OlxcdCNpbmNsdWRlIFxcXCJzeXNmcy1jb21tb24uaFxcXCJcXG4gIDEwOlxcdFxcbiAgMTE6XFx0LypcXG4gIDEyOlxcdCAqIGluaXQgcmVnaW9uIGRpcmVjdG9yeVxcbiAgMTM6XFx0ICovXFxuICAxNDpcXHRcXG4gIDE1OlxcdHN0cnVjdCBkYW1vbl9zeXNmc19yZWdpb24ge1xcbiAgMTY6XFx0XFx0c3RydWN0IGtvYmplY3Qga29iajtcXG4gIDE3OlxcdFxcdHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlIGFyO1xcbiAgMTg6XFx0fTtcXG4gIDE5OlxcdFxcbiAgMjA6XFx0c3RhdGljIHN0cnVjdCBkYW1vbl9zeXNmc19yZWdpb24gKmRhbW9uX3N5c2ZzX3JlZ2lvbl9hbGxvYyh2b2lkKVxcbiAgMjE6XFx0e1xcbiAgMjI6XFx0XFx0cmV0dXJuIGt6YWxsb2Nfb2JqKHN0cnVjdCBkYW1vbl9zeXNmc19yZWdpb24pO1xcbiAgMjM6XFx0fVxcbiAgMjQ6XFx0XFxuICAyNTpcXHRzdGF0aWMgc3NpemVfdCBzdGFydF9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXFxuICAyNjpcXHRcXHRcXHRjaGFyICpidWYpXFxuICAyNzpcXHR7XFxuICAyODpcXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfcmVnaW9uICpyZWdpb24gPSBjb250YWluZXJfb2Yoa29iaixcXG4gIDI5OlxcdFxcdFxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19yZWdpb24sIGtvYmopO1xcbiAgMzA6XFx0XFxuICAzMTpcXHRcXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFxcXCIlbHVcXFxcblxcXCIsIHJlZ2lvbi1cXHUwMDNlYXIuc3RhcnQpO1xcbiAgMzI6XFx0fVxcbiAgMzM6XFx0XFxuICAzNDpcXHRzdGF0aWMgc3NpemVfdCBzdGFydF9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxcbiAgMzU6XFx0XFx0XFx0Y29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXFxuICAzNjpcXHR7XFxuICAzNzpcXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfcmVnaW9uICpyZWdpb24gPSBjb250YWluZXJfb2Yoa29iaixcXG4gIDM4OlxcdFxcdFxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19yZWdpb24sIGtvYmopO1xcbiAgMzk6XFx0XFx0aW50IGVyciA9IGtzdHJ0b3VsKGJ1ZiwgMCwgXFx1MDAyNnJlZ2lvbi1cXHUwMDNlYXIuc3RhcnQpO1xcbiAgNDA6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDExOjUyOjM5LjkwOTM5MjY4WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjU5NjY5NTg1NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIHRoZSBEQU1PTiBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIERBTU9OIHNpdHVhdGlvbi4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIERBTU9OLiBGaXJzdCwgSSdtIG5vdGluZyBgQ09ORklHX0RBTU9OYCBhbmQgYENPTkZJR19EQU1PTl9TWVNGU2AuIEJ1dCBpcyB0aGF0ICphbGwqPyBJIGhhdmUgYSBmZWVsaW5nIHRoZXJlIG1pZ2h0IGJlIG1vcmUgdG8gaXQuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBpbnZlc3RpZ2F0ZSB3aGV0aGVyIHRoZSBEQU1PTiByZWNsYWltIG9yIERBTU9OIGxydV9zb3J0IGNvbXBvbmVudHMgYXJlIGFsc28gbGV2ZXJhZ2luZyBEQU1PTi4gSXQncyBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIGFuZCBpbnRlcmNvbm5lY3Rpb25zIG9mIHRoZXNlIGZlYXR1cmVzLlxuXG5UaGUgcXVpY2tlc3Qgd2F5IHRvIGdldCBhIGRlZmluaXRpdmUgYW5zd2VyLCBhbmQgcmVhbGx5IHVuZGVyc3RhbmQgdGhlIGJyb2FkZXIgY29udGV4dCwgaXMgdG8gY2hlY2sgYG1tL2RhbW9uL0tjb25maWdgLiBUaGF0IEtjb25maWcgZmlsZSBzaG91bGQgbGF5IG91dCAqYWxsKiB0aGUgZGVwZW5kZW5jaWVzLCB0aGUgYXNzb2NpYXRlZCBvcHRpb25zLCBhbmQgZ2l2ZSBtZSBhIGNvbXBsZXRlLCB0b3AtZG93biB2aWV3IG9mIGhvdyBldmVyeXRoaW5nIGZpdHMgdG9nZXRoZXIgd2l0aGluIHRoZSBEQU1PTiBlY29zeXN0ZW0uIEl04oCZcyB0aGUgc291cmNlIG9mIHRydXRoIGZvciB0aGUgY29uZmlndXJhdGlvbiBsb2dpYyBhbmQgd2lsbCBnaXZlIG1lIHdoYXQgSSBuZWVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTM5OSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTE6NTI6NDUuODc2MzU0MDNaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODQyOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0XFxuICAgMzpcXHRtZW51IFxcXCJEYXRhIEFjY2VzcyBNb25pdG9yaW5nXFxcIlxcbiAgIDQ6XFx0XFxuICAgNTpcXHRjb25maWcgREFNT05cXG4gICA2OlxcdFxcdGJvb2wgXFxcIkRBTU9OOiBEYXRhIEFjY2VzcyBNb25pdG9yaW5nIEZyYW1ld29ya1xcXCJcXG4gICA3OlxcdFxcdGhlbHBcXG4gICA4OlxcdFxcdCAgVGhpcyBidWlsZHMgYSBmcmFtZXdvcmsgdGhhdCBhbGxvd3Mga2VybmVsIHN1YnN5c3RlbXMgdG8gbW9uaXRvclxcbiAgIDk6XFx0XFx0ICBhY2Nlc3MgZnJlcXVlbmN5IG9mIGVhY2ggbWVtb3J5IHJlZ2lvbi4gVGhlIGluZm9ybWF0aW9uIGNhbiBiZSB1c2VmdWxcXG4gIDEwOlxcdFxcdCAgZm9yIHBlcmZvcm1hbmNlLWNlbnRyaWMgRFJBTSBsZXZlbCBtZW1vcnkgbWFuYWdlbWVudC5cXG4gIDExOlxcdFxcbiAgMTI6XFx0XFx0ICBTZWUgaHR0cHM6Ly93d3cua2VybmVsLm9yZy9kb2MvaHRtbC9sYXRlc3QvbW0vZGFtb24vaW5kZXguaHRtbCBmb3JcXG4gIDEzOlxcdFxcdCAgbW9yZSBpbmZvcm1hdGlvbi5cXG4gIDE0OlxcdFxcbiAgMTU6XFx0Y29uZmlnIERBTU9OX0RFQlVHX1NBTklUWVxcbiAgMTY6XFx0XFx0Ym9vbCBcXFwiQ2hlY2sgc2FuaXR5IG9mIERBTU9OIGNvZGVcXFwiXFxuICAxNzpcXHRcXHRkZXBlbmRzIG9uIERBTU9OXFxuICAxODpcXHRcXHRoZWxwXFxuICAxOTpcXHRcXHQgIFRoaXMgZW5hYmxlcyBhZGRpdGlvbmFsIERBTU9OIGRlYnVnZ2luZy1wdXJwb3NlIHNhbml0eSBjaGVja3MgaW5cXG4gIDIwOlxcdFxcdCAgREFNT04gY29kZS4gIFRoaXMgY2FuIGJlIHVzZWZ1bCBmb3IgZmluZGluZyBidWdzLCBidXQgaW1wb3NlXFxuICAyMTpcXHRcXHQgIGFkZGl0aW9uYWwgb3ZlcmhlYWQuICBUaGlzIGlzIHRoZXJlZm9yZSByZWNvbW1lbmRlZCB0byBiZSBlbmFibGVkIG9uXFxuICAyMjpcXHRcXHQgIG9ubHkgZGV2ZWxvcG1lbnQgYW5kIHRlc3Qgc2V0dXBzLlxcbiAgMjM6XFx0XFxuICAyNDpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICAyNTpcXHRcXG4gIDI2OlxcdGNvbmZpZyBEQU1PTl9LVU5JVF9URVNUXFxuICAyNzpcXHRcXHRib29sIFxcXCJUZXN0IGZvciBkYW1vblxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbiAgMjg6XFx0XFx0ZGVwZW5kcyBvbiBEQU1PTiBcXHUwMDI2XFx1MDAyNiBLVU5JVD15XFxuICAyOTpcXHRcXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xcbiAgMzA6XFx0XFx0aGVscFxcbiAgMzE6XFx0XFx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04gS3VuaXQgdGVzdCBzdWl0ZS5cXG4gIDMyOlxcdFxcbiAgMzM6XFx0XFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBLVW5pdCBhbmQgdW5pdCB0ZXN0cyBpbiBnZW5lcmFsLCBwbGVhc2UgcmVmZXJcXG4gIDM0OlxcdFxcdCAgdG8gdGhlIEtVbml0IGRvY3VtZW50YXRpb24uXFxuICAzNTpcXHRcXG4gIDM2OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDM3OlxcdFxcbiAgMzg6XFx0Y29uZmlnIERBTU9OX1ZBRERSXFxuICAzOTpcXHRcXHRib29sIFxcXCJEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXNcXFwiXFxuICA0MDpcXHRcXHRkZXBlbmRzIG9uIERBTU9OIFxcdTAwMjZcXHUwMDI2IE1NVVxcbiAgNDE6XFx0XFx0c2VsZWN0IFBBR0VfSURMRV9GTEFHXFxuICA0MjpcXHRcXHRkZWZhdWx0IERBTU9OXFxuICA0MzpcXHRcXHRoZWxwXFxuICA0NDpcXHRcXHQgIFRoaXMgYnVpbGRzIHRoZSBkZWZhdWx0IGRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgREFNT05cXG4gIDQ1OlxcdFxcdCAgdGhhdCB3b3JrIGZvciB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2VzLlxcbiAgNDY6XFx0XFxuICA0NzpcXHRjb25maWcgREFNT05fUEFERFJcXG4gIDQ4OlxcdFxcdGJvb2wgXFxcIkRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2VcXFwiXFxuICA0OTpcXHRcXHRkZXBlbmRzIG9uIERBTU9OIFxcdTAwMjZcXHUwMDI2IE1NVVxcbiAgNTA6XFx0XFx0c2VsZWN0IFBBR0VfSURMRV9GTEFHXFxuICA1MTpcXHRcXHRkZWZhdWx0IERBTU9OXFxuICA1MjpcXHRcXHRoZWxwXFxuICA1MzpcXHRcXHQgIFRoaXMgYnVpbGRzIHRoZSBkZWZhdWx0IGRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgREFNT05cXG4gIDU0OlxcdFxcdCAgdGhhdCB3b3JrcyBmb3IgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2UuXFxuICA1NTpcXHRcXG4gIDU2OlxcdGNvbmZpZyBEQU1PTl9WQUREUl9LVU5JVF9URVNUXFxuICA1NzpcXHRcXHRib29sIFxcXCJUZXN0IGZvciBEQU1PTiBvcGVyYXRpb25zXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuICA1ODpcXHRcXHRkZXBlbmRzIG9uIERBTU9OX1ZBRERSIFxcdTAwMjZcXHUwMDI2IEtVTklUPXlcXG4gIDU5OlxcdFxcdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXFxuICA2MDpcXHRcXHRoZWxwXFxuICA2MTpcXHRcXHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTiB2aXJ0dWFsIGFkZHJlc3NlcyBvcGVyYXRpb25zIEt1bml0IHRlc3Qgc3VpdGUuXFxuICA2MjpcXHRcXG4gIDYzOlxcdFxcdCAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gS1VuaXQgYW5kIHVuaXQgdGVzdHMgaW4gZ2VuZXJhbCwgcGxlYXNlIHJlZmVyXFxuICA2NDpcXHRcXHQgIHRvIHRoZSBLVW5pdCBkb2N1bWVudGF0aW9uLlxcbiAgNjU6XFx0XFxuICA2NjpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICA2NzpcXHRcXG4gIDY4OlxcdGNvbmZpZyBEQU1PTl9TWVNGU1xcbiAgNjk6XFx0XFx0Ym9vbCBcXFwiREFNT04gc3lzZnMgaW50ZXJmYWNlXFxcIlxcbiAgNzA6XFx0XFx0ZGVwZW5kcyBvbiBEQU1PTiBcXHUwMDI2XFx1MDAyNiBTWVNGU1xcbiAgNzE6XFx0XFx0ZGVmYXVsdCBEQU1PTlxcbiAgNzI6XFx0XFx0aGVscFxcbiAgNzM6XFx0XFx0ICBUaGlzIGJ1aWxkcyB0aGUgc3lzZnMgaW50ZXJmYWNlIGZvciBEQU1PTi4gIFRoZSB1c2VyIHNwYWNlIGNhbiB1c2VcXG4gIDc0OlxcdFxcdCAgdGhlIGludGVyZmFjZSBmb3IgYXJiaXRyYXJ5IGRhdGEgYWNjZXNzIG1vbml0b3JpbmcuXFxuICA3NTpcXHRcXG4gIDc2OlxcdGNvbmZpZyBEQU1PTl9TWVNGU19LVU5JVF9URVNUXFxuICA3NzpcXHRcXHRib29sIFxcXCJUZXN0IGZvciBkYW1vbiBzeXNmcyBpbnRlcmZhY2VcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG4gIDc4OlxcdFxcdGRlcGVuZHMgb24gREFNT05fU1lTRlMgXFx1MDAyNlxcdTAwMjYgS1VOSVQ9eVxcbiAgNzk6XFx0XFx0ZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcXG4gIDgwOlxcdFxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTE6NTI6NDUuODc2NDQwMTJaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTg2NjA4MTU1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKk5hdmlnYXRpbmcgdGhlIEtjb25maWcgTGFuZHNjYXBlOiBBIFF1aWNrIEF1ZGl0KipcblxuUmlnaHQsIGxldCdzIHNlZS4uLiB0aGUgY29kZSByZXZpZXcgaGFzIGZsYWdnZWQgc29tZXRoaW5nIGluIHRoZSBgbW0vZGFtb24vS2NvbmZpZ2AgZmlsZS4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgSSdtIGFscmVhZHkgYW50aWNpcGF0aW5nIHdoYXQgbWlnaHQgYmUgaGFwcGVuaW5nIGhlcmUuIEdpdmVuIHRoZSBzY29wZSBvZiB0aGUgcG90ZW50aWFsIGltcGFjdCwgaXQncyBlc3NlbnRpYWwgdG8gcXVpY2tseSBhbmQgY2FyZWZ1bGx5IHJldmlldyB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCBkZXBlbmRlbmNpZXMgd2l0aGluIHRoaXMgc3BlY2lmaWMgS2NvbmZpZyBmaWxlLiBUaGlzIGxpa2VseSByZWxhdGVzIHRvIHRoZSBEeW5hbWljIEFkYXB0aXZlIE1lbW9yeSBPcHRpbWl6ZXIgKERBTU9OKSBmcmFtZXdvcmssIHNvIEkgd2FudCB0byBtYWtlIHN1cmUgSSBncmFzcCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBwb3RlbnRpYWwgaW1wYWN0cyBvZiBhbnkgY2hhbmdlcyBiZWluZyBwcm9wb3NlZC4gVGhpcyBxdWljayBjaGVjayB3aWxsIGdpdmUgbWUgYSBiYXNlbGluZSB0byBkZWNpZGUgdGhlIG5leHQgYWN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjc0NCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTE6NTI6NDcuNzQyNTI1MTMyWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcwMDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2RhbW9uL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogODEsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgODE6XFx0XFx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04gc3lzZnMgaW50ZXJmYWNlIEt1bml0IHRlc3Qgc3VpdGUuXFxuICA4MjpcXHRcXG4gIDgzOlxcdFxcdCAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gS1VuaXQgYW5kIHVuaXQgdGVzdHMgaW4gZ2VuZXJhbCwgcGxlYXNlIHJlZmVyXFxuICA4NDpcXHRcXHQgIHRvIHRoZSBLVW5pdCBkb2N1bWVudGF0aW9uLlxcbiAgODU6XFx0XFxuICA4NjpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICA4NzpcXHRcXG4gIDg4OlxcdGNvbmZpZyBEQU1PTl9SRUNMQUlNXFxuICA4OTpcXHRcXHRib29sIFxcXCJCdWlsZCBEQU1PTi1iYXNlZCByZWNsYWltIChEQU1PTl9SRUNMQUlNKVxcXCJcXG4gIDkwOlxcdFxcdGRlcGVuZHMgb24gREFNT05fUEFERFJcXG4gIDkxOlxcdFxcdGhlbHBcXG4gIDkyOlxcdFxcdCAgVGhpcyBidWlsZHMgdGhlIERBTU9OLWJhc2VkIHJlY2xhbWF0aW9uIHN1YnN5c3RlbS4gIEl0IGZpbmRzIHBhZ2VzXFxuICA5MzpcXHRcXHQgIHRoYXQgbm90IGFjY2Vzc2VkIGZvciBhIGxvbmcgdGltZSAoY29sZCkgdXNpbmcgREFNT04gYW5kIHJlY2xhaW1cXG4gIDk0OlxcdFxcdCAgdGhvc2UuXFxuICA5NTpcXHRcXG4gIDk2OlxcdFxcdCAgVGhpcyBpcyBzdWdnZXN0ZWQgdG8gYmUgdXNlZCBhcyBhIHByb2FjdGl2ZSBhbmQgbGlnaHR3ZWlnaHRcXG4gIDk3OlxcdFxcdCAgcmVjbGFtYXRpb24gdW5kZXIgbGlnaHQgbWVtb3J5IHByZXNzdXJlLCB3aGlsZSB0aGUgdHJhZGl0aW9uYWwgcGFnZVxcbiAgOTg6XFx0XFx0ICBzY2FubmluZy1iYXNlZCByZWNsYW1hdGlvbiBpcyB1c2VkIGZvciBoZWF2eSBwcmVzc3VyZS5cXG4gIDk5OlxcdFxcbiAxMDA6XFx0Y29uZmlnIERBTU9OX0xSVV9TT1JUXFxuIDEwMTpcXHRcXHRib29sIFxcXCJCdWlsZCBEQU1PTi1iYXNlZCBMUlUtbGlzdHMgc29ydGluZyAoREFNT05fTFJVX1NPUlQpXFxcIlxcbiAxMDI6XFx0XFx0ZGVwZW5kcyBvbiBEQU1PTl9QQUREUlxcbiAxMDM6XFx0XFx0aGVscFxcbiAxMDQ6XFx0XFx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04tYmFzZWQgTFJVLWxpc3RzIHNvcnRpbmcgc3Vic3lzdGVtLiAgSXQgdHJpZXMgdG9cXG4gMTA1OlxcdFxcdCAgcHJvdGVjdCBmcmVxdWVudGx5IGFjY2Vzc2VkIChob3QpIHBhZ2VzIHdoaWxlIHJhcmVseSBhY2Nlc3NlZCAoY29sZClcXG4gMTA2OlxcdFxcdCAgcGFnZXMgcmVjbGFpbWVkIGZpcnN0IHVuZGVyIG1lbW9yeSBwcmVzc3VyZS5cXG4gMTA3OlxcdFxcbiAxMDg6XFx0Y29uZmlnIERBTU9OX1NUQVRcXG4gMTA5OlxcdFxcdGJvb2wgXFxcIkJ1aWxkIGRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgc3RhdCAoREFNT05fU1RBVClcXFwiXFxuIDExMDpcXHRcXHRkZXBlbmRzIG9uIERBTU9OX1BBRERSXFxuIDExMTpcXHRcXHRoZWxwXFxuIDExMjpcXHRcXHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTi1iYXNlZCBhY2Nlc3MgbW9uaXRvcmluZyBzdGF0aXN0aWNzIHN1YnN5c3RlbS5cXG4gMTEzOlxcdFxcdCAgSXQgcnVucyBEQU1PTiBhbmQgZXhwb3NlIGFjY2VzcyBtb25pdG9yaW5nIHJlc3VsdHMgaW4gc2ltcGxlIHN0YXRcXG4gMTE0OlxcdFxcdCAgbWV0cmljcy5cXG4gMTE1OlxcdFxcbiAxMTY6XFx0Y29uZmlnIERBTU9OX1NUQVRfRU5BQkxFRF9ERUZBVUxUXFxuIDExNzpcXHRcXHRib29sIFxcXCJFbmFibGUgREFNT05fU1RBVCBieSBkZWZhdWx0XFxcIlxcbiAxMTg6XFx0XFx0ZGVwZW5kcyBvbiBEQU1PTl9TVEFUXFxuIDExOTpcXHRcXHRkZWZhdWx0IERBTU9OX1NUQVRcXG4gMTIwOlxcdFxcdGhlbHBcXG4gMTIxOlxcdFxcdCAgV2hldGhlciB0byBlbmFibGUgREFNT05fU1RBVCBieSBkZWZhdWx0LiAgVXNlcnMgY2FuIGRpc2FibGUgaXQgaW5cXG4gMTIyOlxcdFxcdCAgYm9vdCBvciBydW50aW1lIHVzaW5nIGl0cyAnZW5hYmxlZCcgcGFyYW1ldGVyLlxcbiAxMjM6XFx0XFxuIDEyNDpcXHRlbmRtZW51XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDExOjUyOjQ3Ljc0MjU5NzE2MloiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxNTA1NjMwODM0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipXb3J0aEZ1enppbmcgRGVjaXNpb24gZm9yIG1tL2RhbW9uL2NvcmUuYyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgYG1tL2RhbW9uL2NvcmUuY2AgaXMgcGFydCBvZiBtZW1vcnkgbWFuYWdlbWVudCwgc28gaXQgZmFsbHMgc3F1YXJlbHkgd2l0aGluIHRoZSBcImNvcmUgc3Vic3lzdGVtc1wiIGNhdGVnb3J5LiBUaGVyZWZvcmUsIGJhc2VkIG9uIHRoZSBjcml0ZXJpYSwgbW9kaWZ5aW5nIGNvZGUgaGVyZSBzdHJvbmdseSBzdWdnZXN0cyBpdCdzICpXb3J0aEZ1enppbmc9dHJ1ZSouXG5cbkZpcnN0LCBsZXQncyBlbGltaW5hdGUgdGhlIG5lZ2F0aXZlcy4gSXMgdGhpcyBhIGRvY3VtZW50YXRpb24gY2hhbmdlPyBOby4gSXMgaXQgaGFyZHdhcmUtc3BlY2lmaWMgYW5kIHVucmVhY2hhYmxlPyBOb3BlLCB3ZSdyZSBkZWFsaW5nIHdpdGggcHVyZSBNTSwgYW5kIGFtZDY0IGlzIHN1cHBvcnRlZC4gQW5kIGl0J3MgZGVmaW5pdGVseSBub3Qgc29tZSB1bnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aC4gU28sIHdlJ3JlIGNsZWFyIG9uIHRoZSAqZmFsc2UqIGNvbmRpdGlvbnMuXG5cbk5vdyBmb3IgdGhlICp0cnVlKiBhc3Nlc3NtZW50LiBTaW5jZSB3ZSBhcmUgbW9kaWZ5aW5nIGNvZGUgaW5zaWRlIGEgY29yZSBzdWJzeXN0ZW0sIGBXb3J0aEZ1enppbmc9dHJ1ZWAhXG5cbk5vdywgdGhlIGltcG9ydGFudCBwYXJ0OiBlbmFibGluZyBhbmQgcmVhY2hpbmcgYGRhbW9zX2FkanVzdF9xdW90YWAuIFRvIGZpZ3VyZSBvdXQgdGhlIGNvbmZpZ3MsIGBtbS9kYW1vbi9jb3JlLmNgIGlzIHRoZSB0YXJnZXQsIHNwZWNpZmljYWxseSwgYGRhbW9zX2FkanVzdF9xdW90YWAuIFdlIHNlZSBpdCdzIGxpbmtlZCB0byBgQ09ORklHX0RBTU9OYCwgY29uZmlybWVkIGJ5IHRoZSBgTWFrZWZpbGVgLiBPa2F5LCBidXQgaG93IGlzIHRoaXMgYWN0dWFsbHkgdHJpZ2dlcmVkPyBJdCdzIGNhbGxlZCBmcm9tIGBrZGFtb25kX2FwcGx5X3NjaGVtZXNgLCBhbmQgdGhhdCByZXF1aXJlcyBEQU1PTiB0byBiZSBjb25maWd1cmVkIHdpdGggc2NoZW1lcyBhbmQgcnVubmluZy4gU28sIHRoZSBxdWVzdGlvbiBpcywgaG93IGRvIHlvdSBzZXQgdXAgREFNT04gd2l0aCBzY2hlbWVzPyBFaXRoZXIgdXNpbmcgYERBTU9OX1NZU0ZTYCwgb3Igd2l0aCB0aGUgREFNT04gbW9kdWxlcyBsaWtlIGBEQU1PTl9SRUNMQUlNYCBvciBgREFNT05fTFJVX1NPUlRgIG9yIGBEQU1PTl9TVEFUYCBvciBjdXN0b20gb3BlcmF0aW9ucyAoYERBTU9OX1ZBRERSYCwgYERBTU9OX1BBRERSYCkuXG5cbkhvbGQgb24uIExvb2tpbmcgYXQgYGRhbW9zX2FkanVzdF9xdW90YWAsIHRoZXJlJ3MgYSBrZXkgY2hlY2sgaGVyZTogYGMtXHUwMDNlb3BzLmdldF9zY2hlbWVfc2NvcmVgLiBUaGF0IGZ1bmN0aW9uIHBvaW50ZXIgaGFzIHRvIGJlIHNldCB1cC4gV2hlcmUgaXMgKnRoYXQqIGFzc2lnbmVkPyBOb3cgSSBuZWVkIHRvIGRvIHNvbWUgbW9yZSBkaWdnaW5nIGFuZCBncmVwIGZvciBgZ2V0X3NjaGVtZV9zY29yZWAuIFRoaXMgcG9pbnRlciB0byBhIGZ1bmN0aW9uIHdpbGwgbGVhZCBtZSB0byBmaWd1cmUgb3V0IGhvdyB0byBiZXN0IGZ1enogdGhpcyBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzU4NywiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU4NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDExOjUzOjAyLjc5ODkwNzU4NFoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzc5MjEyOTI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImdldF9zY2hlbWVfc2NvcmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb25cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vY29yZS5jPTI0MjI9c3RhdGljIGJvb2wgZGFtb3NfdmFsaWRfdGFyZ2V0KHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjQyNi1cXG5tbS9kYW1vbi9jb3JlLmM6MjQyNzpcXHRpZiAoIXJldCB8fCAhZGFtb3NfcXVvdGFfaXNfc2V0KFxcdTAwMjZzLVxcdTAwM2VxdW90YSkgfHwgIWMtXFx1MDAzZW9wcy5nZXRfc2NoZW1lX3Njb3JlKVxcbm1tL2RhbW9uL2NvcmUuYy0yNDI4LVxcdFxcdHJldHVybiByZXQ7XFxubW0vZGFtb24vY29yZS5jLTI0MjktXFxubW0vZGFtb24vY29yZS5jOjI0MzA6XFx0cmV0dXJuIGMtXFx1MDAzZW9wcy5nZXRfc2NoZW1lX3Njb3JlKGMsIHIsIHMpIFxcdTAwM2U9IHMtXFx1MDAzZXF1b3RhLm1pbl9zY29yZTtcXG5tbS9kYW1vbi9jb3JlLmMtMjQzMS19XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MzMwND1zdGF0aWMgdm9pZCBkYW1vc19hZGp1c3RfcXVvdGEoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTMzNDAtXFx0XFx0cmV0dXJuO1xcbm1tL2RhbW9uL2NvcmUuYzozMzQxOlxcdGlmICghYy1cXHUwMDNlb3BzLmdldF9zY2hlbWVfc2NvcmUpXFxubW0vZGFtb24vY29yZS5jLTMzNDItXFx0XFx0cmV0dXJuO1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTMzNTMtXFx0XFx0XFx0XFx0Y29udGludWU7XFxubW0vZGFtb24vY29yZS5jOjMzNTQ6XFx0XFx0XFx0c2NvcmUgPSBjLVxcdTAwM2VvcHMuZ2V0X3NjaGVtZV9zY29yZShjLCByLCBzKTtcXG5tbS9kYW1vbi9jb3JlLmMtMzM1NS1cXHRcXHRcXHRjLVxcdTAwM2VyZWdpb25zX3Njb3JlX2hpc3RvZ3JhbVtzY29yZV0gKz1cXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmM9NDYyPXN0YXRpYyBpbnQgX19pbml0IGRhbW9uX3BhX2luaXRjYWxsKHZvaWQpXFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jLTQ3My1cXHRcXHQuYXBwbHlfc2NoZW1lID0gZGFtb25fcGFfYXBwbHlfc2NoZW1lLFxcbm1tL2RhbW9uL3BhZGRyLmM6NDc0OlxcdFxcdC5nZXRfc2NoZW1lX3Njb3JlID0gZGFtb25fcGFfc2NoZW1lX3Njb3JlLFxcbm1tL2RhbW9uL3BhZGRyLmMtNDc1LVxcdH07XFxuLS1cXG5tbS9kYW1vbi92YWRkci5jPTExNDM9c3RhdGljIGludCBfX2luaXQgZGFtb25fdmFfaW5pdGNhbGwodm9pZClcXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmMtMTE1NS1cXHRcXHQuYXBwbHlfc2NoZW1lID0gZGFtb25fdmFfYXBwbHlfc2NoZW1lLFxcbm1tL2RhbW9uL3ZhZGRyLmM6MTE1NjpcXHRcXHQuZ2V0X3NjaGVtZV9zY29yZSA9IGRhbW9uX3ZhX3NjaGVtZV9zY29yZSxcXG5tbS9kYW1vbi92YWRkci5jLTExNTctXFx0fTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTE6NTM6MDMuMTc4MTI3NjM5WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjEzNDA4MDIxMDQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRBTU9OIFNjaGVtZSBTY29yZSBhbmQgQ29udHJvbCoqXG5cbk9rYXksIHNvIHRoZSBgZ2V0X3NjaGVtZV9zY29yZWAgZnVuY3Rpb24sIHRoYXQncyBkZWZpbmVkIGluIHR3byBwbGFjZXMgZGVwZW5kaW5nIG9uIHdoZXRoZXIgd2UncmUgZGVhbGluZyB3aXRoIHBoeXNpY2FsIG9yIHZpcnR1YWwgYWRkcmVzc2VzLCByaWdodD8gU3BlY2lmaWNhbGx5LCBJJ20gbG9va2luZyBhdCBgbW0vZGFtb24vcGFkZHIuY2AgZm9yIHBoeXNpY2FsIGFkZHJlc3NlcywgdW5kZXIgYENPTkZJR19EQU1PTl9QQUREUmAsIGFuZCBgbW0vZGFtb24vdmFkZHIuY2AgZm9yIHZpcnR1YWwsIHVuZGVyIGBDT05GSUdfREFNT05fVkFERFJgLiBUaGF0J3Mgc3RyYWlnaHRmb3J3YXJkIGVub3VnaC5cblxuTm93LCBob3cgZG9lcyB1c2Vyc3BhY2UgYWN0dWFsbHkgKnRhbGsqIHRvIERBTU9OPyBBaCwgeWVzLCBpdCdzIHRoZSBgQ09ORklHX0RBTU9OX1NZU0ZTYCBvcHRpb24sIG9yIGRlYnVnZnMgaWYgd2UncmUgZmVlbGluZyBvbGQgc2Nob29sLCBidXQgc3lzZnMgaXMgdGhlIHN0YW5kYXJkIHRoZXNlIGRheXMuIEdvb2QsIGdvb2QuXG5cbkhtbSwgd2FpdCBhIHNlY29uZC4gSSBuZWVkIHRvIGJlIHN1cmUuIERvZXMgYERBTU9OX1JFQ0xBSU1gIG9yIGBEQU1PTl9MUlVfU09SVGAgYWxzbyBsZXZlcmFnZSB0aGVzZSBEQU1PTiBzY2hlbWVzIHdpdGggYSBxdW90YT8gVGltZSB0byBkaWcgaW50byBgbW0vZGFtb24vcmVjbGFpbS5jYCBhbmQgYG1tL2RhbW9uL2xydV9zb3J0LmNgIGFuZCBmaW5kIG91dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUyNTksIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTE6NTM6MTYuNTg2MTUwOTk2WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDA0OTg0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJxdW90YVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9yZWNsYWltLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vcmVjbGFpbS5jPTQ4PW1vZHVsZV9wYXJhbShtaW5fYWdlLCB1bG9uZywgMDYwMCk7XFxubW0vZGFtb24vcmVjbGFpbS5jLTQ5LVxcbm1tL2RhbW9uL3JlY2xhaW0uYzo1MDpzdGF0aWMgc3RydWN0IGRhbW9zX3F1b3RhIGRhbW9uX3JlY2xhaW1fcXVvdGEgPSB7XFxubW0vZGFtb24vcmVjbGFpbS5jLTUxLVxcdC8qIHVzZSB1cCB0byAxMCBtcyB0aW1lLCByZWNsYWltIHVwIHRvIDEyOCBNaUIgcGVyIDEgc2VjIGJ5IGRlZmF1bHQgKi9cXG4tLVxcbm1tL2RhbW9uL3JlY2xhaW0uYy01NC1cXHQucmVzZXRfaW50ZXJ2YWwgPSAxMDAwLFxcbm1tL2RhbW9uL3JlY2xhaW0uYzo1NTpcXHQvKiBXaXRoaW4gdGhlIHF1b3RhLCBwYWdlIG91dCBvbGRlciByZWdpb25zIGZpcnN0LiAqL1xcbm1tL2RhbW9uL3JlY2xhaW0uYy01Ni1cXHQud2VpZ2h0X3N6ID0gMCxcXG4tLVxcbm1tL2RhbW9uL3JlY2xhaW0uYy01OS19O1xcbm1tL2RhbW9uL3JlY2xhaW0uYzo2MDpERUZJTkVfREFNT05fTU9EVUxFU19EQU1PU19RVU9UQVMoZGFtb25fcmVjbGFpbV9xdW90YSk7XFxubW0vZGFtb24vcmVjbGFpbS5jLTYxLVxcbi0tXFxubW0vZGFtb24vcmVjbGFpbS5jLTY0LSAqXFxubW0vZGFtb24vcmVjbGFpbS5jOjY1OiAqIFdoaWxlIGtlZXBpbmcgdGhlIGNhcHMgdGhhdCBzZXQgYnkgb3RoZXIgcXVvdGFzLCBEQU1PTl9SRUNMQUlNIGF1dG9tYXRpY2FsbHlcXG5tbS9kYW1vbi9yZWNsYWltLmM6NjY6ICogaW5jcmVhc2VzIGFuZCBkZWNyZWFzZXMgdGhlIGVmZmVjdGl2ZSBsZXZlbCBvZiB0aGUgcXVvdGEgYWltaW5nIHRoaXMgbGV2ZWwgb2ZcXG5tbS9kYW1vbi9yZWNsYWltLmMtNjctICogbWVtb3J5IHByZXNzdXJlIGlzIGluY3VycmVkLiAgU3lzdGVtLXdpZGUgYGBzb21lYGAgbWVtb3J5IFBTSSBpbiBtaWNyb3NlY29uZHNcXG5tbS9kYW1vbi9yZWNsYWltLmM6Njg6ICogcGVyIHF1b3RhIHJlc2V0IGludGVydmFsIChgYHF1b3RhX3Jlc2V0X2ludGVydmFsX21zYGApIGlzIGNvbGxlY3RlZCBhbmRcXG5tbS9kYW1vbi9yZWNsYWltLmMtNjktICogY29tcGFyZWQgdG8gdGhpcyB2YWx1ZSB0byBzZWUgaWYgdGhlIGFpbSBpcyBzYXRpc2ZpZWQuICBWYWx1ZSB6ZXJvIG1lYW5zXFxuLS1cXG5tbS9kYW1vbi9yZWNsYWltLmMtNzMtICovXFxubW0vZGFtb24vcmVjbGFpbS5jOjc0OnN0YXRpYyB1bnNpZ25lZCBsb25nIHF1b3RhX21lbV9wcmVzc3VyZV91cyBfX3JlYWRfbW9zdGx5O1xcbm1tL2RhbW9uL3JlY2xhaW0uYzo3NTptb2R1bGVfcGFyYW0ocXVvdGFfbWVtX3ByZXNzdXJlX3VzLCB1bG9uZywgMDYwMCk7XFxubW0vZGFtb24vcmVjbGFpbS5jLTc2LVxcbm1tL2RhbW9uL3JlY2xhaW0uYy03Ny0vKlxcbm1tL2RhbW9uL3JlY2xhaW0uYzo3ODogKiBVc2VyLXNwZWNpZmlhYmxlIGZlZWRiYWNrIGZvciBhdXRvLXR1bmluZyBvZiB0aGUgZWZmZWN0aXZlIHF1b3RhLlxcbm1tL2RhbW9uL3JlY2xhaW0uYy03OS0gKlxcbm1tL2RhbW9uL3JlY2xhaW0uYzo4MDogKiBXaGlsZSBrZWVwaW5nIHRoZSBjYXBzIHRoYXQgc2V0IGJ5IG90aGVyIHF1b3RhcywgREFNT05fUkVDTEFJTSBhdXRvbWF0aWNhbGx5XFxubW0vZGFtb24vcmVjbGFpbS5jOjgxOiAqIGluY3JlYXNlcyBhbmQgZGVjcmVhc2VzIHRoZSBlZmZlY3RpdmUgbGV2ZWwgb2YgdGhlIHF1b3RhIGFpbWluZyByZWNlaXZpbmcgdGhpc1xcbm1tL2RhbW9uL3JlY2xhaW0uYy04Mi0gKiBmZWVkYmFjayBvZiB2YWx1ZSBgYDEwLDAwMGBgIGZyb20gdGhlIHVzZXIuICBEQU1PTl9SRUNMQUlNIGFzc3VtZXMgdGhlIGZlZWRiYWNrXFxubW0vZGFtb24vcmVjbGFpbS5jOjgzOiAqIHZhbHVlIGFuZCB0aGUgcXVvdGEgYXJlIHBvc2l0aXZlbHkgcHJvcG9ydGlvbmFsLiAgVmFsdWUgemVybyBtZWFucyBkaXNhYmxpbmdcXG5tbS9kYW1vbi9yZWNsYWltLmMtODQtICogdGhpcyBhdXRvLXR1bmluZyBmZWF0dXJlLlxcbi0tXFxubW0vZGFtb24vcmVjbGFpbS5jLTg4LSAqL1xcbm1tL2RhbW9uL3JlY2xhaW0uYzo4OTpzdGF0aWMgdW5zaWduZWQgbG9uZyBxdW90YV9hdXRvdHVuZV9mZWVkYmFjayBfX3JlYWRfbW9zdGx5O1xcbm1tL2RhbW9uL3JlY2xhaW0uYzo5MDptb2R1bGVfcGFyYW0ocXVvdGFfYXV0b3R1bmVfZmVlZGJhY2ssIHVsb25nLCAwNjAwKTtcXG5tbS9kYW1vbi9yZWNsYWltLmMtOTEtXFxuLS1cXG5tbS9kYW1vbi9yZWNsYWltLmM9MTYxPURFRklORV9EQU1PTl9NT0RVTEVTX0RBTU9TX1NUQVRTX1BBUkFNUyhkYW1vbl9yZWNsYWltX3N0YXQsXFxubW0vZGFtb24vcmVjbGFpbS5jOjE2MjpcXHRcXHRyZWNsYWltX3RyaWVkX3JlZ2lvbnMsIHJlY2xhaW1lZF9yZWdpb25zLCBxdW90YV9leGNlZWRzKTtcXG5tbS9kYW1vbi9yZWNsYWltLmMtMTYzLVxcbi0tXFxubW0vZGFtb24vcmVjbGFpbS5jPTE2Nz1zdGF0aWMgc3RydWN0IGRhbW9zICpkYW1vbl9yZWNsYWltX25ld19zY2hlbWUodW5zaWduZWQgbG9uZyBhZ2dyX2ludGVydmFsKVxcbi0tXFxubW0vZGFtb24vcmVjbGFpbS5jLTE4Ni1cXHRcXHRcXHQwLFxcbm1tL2RhbW9uL3JlY2xhaW0uYzoxODc6XFx0XFx0XFx0LyogdW5kZXIgdGhlIHF1b3RhLiAqL1xcbm1tL2RhbW9uL3JlY2xhaW0uYzoxODg6XFx0XFx0XFx0XFx1MDAyNmRhbW9uX3JlY2xhaW1fcXVvdGEsXFxubW0vZGFtb24vcmVjbGFpbS5jLTE4OS1cXHRcXHRcXHQvKiAoRGUpYWN0aXZhdGUgdGhpcyBhY2NvcmRpbmcgdG8gdGhlIHdhdGVybWFya3MuICovXFxuLS1cXG5tbS9kYW1vbi9yZWNsYWltLmM9MTk0PXN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzKHZvaWQpXFxuLS1cXG5tbS9kYW1vbi9yZWNsYWltLmMtMTk5LVxcdHN0cnVjdCBkYW1vcyAqc2NoZW1lO1xcbm1tL2RhbW9uL3JlY2xhaW0uYzoyMDA6XFx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmdvYWw7XFxubW0vZGFtb24vcmVjbGFpbS5jLTIwMS1cXHRzdHJ1Y3QgZGFtb3NfZmlsdGVyICpmaWx0ZXI7XFxuLS1cXG5tbS9kYW1vbi9yZWNsYWltLmMtMjM0LVxcbm1tL2RhbW9uL3JlY2xhaW0uYzoyMzU6XFx0aWYgKHF1b3RhX21lbV9wcmVzc3VyZV91cykge1xcbm1tL2RhbW9uL3JlY2xhaW0uYzoyMzY6XFx0XFx0Z29hbCA9IGRhbW9zX25ld19xdW90YV9nb2FsKERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VUyxcXG5tbS9kYW1vbi9yZWNsYWltLmM6MjM3OlxcdFxcdFxcdFxcdHF1b3RhX21lbV9wcmVzc3VyZV91cyk7XFxubW0vZGFtb24vcmVjbGFpbS5jLTIzOC1cXHRcXHRpZiAoIWdvYWwpXFxubW0vZGFtb24vcmVjbGFpbS5jLTIzOS1cXHRcXHRcXHRnb3RvIG91dDtcXG5tbS9kYW1vbi9yZWNsYWltLmM6MjQwOlxcdFxcdGRhbW9zX2FkZF9xdW90YV9nb2FsKFxcdTAwMjZzY2hlbWUtXFx1MDAzZXF1b3RhLCBnb2FsKTtcXG5tbS9kYW1vbi9yZWNsYWltLmMtMjQxLVxcdH1cXG5tbS9kYW1vbi9yZWNsYWltLmMtMjQyLVxcbm1tL2RhbW9uL3JlY2xhaW0uYzoyNDM6XFx0aWYgKHF1b3RhX2F1dG90dW5lX2ZlZWRiYWNrKSB7XFxubW0vZGFtb24vcmVjbGFpbS5jOjI0NDpcXHRcXHRnb2FsID0gZGFtb3NfbmV3X3F1b3RhX2dvYWwoREFNT1NfUVVPVEFfVVNFUl9JTlBVVCwgMTAwMDApO1xcbm1tL2RhbW9uL3JlY2xhaW0uYy0yNDUtXFx0XFx0aWYgKCFnb2FsKVxcbm1tL2RhbW9uL3JlY2xhaW0uYy0yNDYtXFx0XFx0XFx0Z290byBvdXQ7XFxubW0vZGFtb24vcmVjbGFpbS5jOjI0NzpcXHRcXHRnb2FsLVxcdTAwM2VjdXJyZW50X3ZhbHVlID0gcXVvdGFfYXV0b3R1bmVfZmVlZGJhY2s7XFxubW0vZGFtb24vcmVjbGFpbS5jOjI0ODpcXHRcXHRkYW1vc19hZGRfcXVvdGFfZ29hbChcXHUwMDI2c2NoZW1lLVxcdTAwM2VxdW90YSwgZ29hbCk7XFxubW0vZGFtb24vcmVjbGFpbS5jLTI0OS1cXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDExOjUzOjE2LjYzNjIwNDc1NVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo2ODU4MTM4ODQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZvY3VzIFN5bWJvbCBJZGVudGlmaWNhdGlvbiBmb3IgREFNT04gUXVvdGEgQWRqdXN0bWVudCoqXG5cbk9rYXksIHNvIEknbSB0cnlpbmcgdG8gZmlndXJlIG91dCB0aGUgbW9zdCByZWxldmFudCBmb2N1cyBzeW1ib2xzIGZvciB0aGlzIERBTU9OIHF1b3RhIGFkanVzdG1lbnQgZmVhdHVyZS4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgdG8gbG9vayBhdCB0aGUga2V5IGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgd2hpY2ggSSBrbm93IGFyZSBgQ09ORklHX0RBTU9OYCwgYENPTkZJR19EQU1PTl9TWVNGU2AsIGBDT05GSUdfREFNT05fUEFERFJgLCBgQ09ORklHX0RBTU9OX1ZBRERSYCwgYW5kIGBDT05GSUdfREFNT05fUkVDTEFJTWAuIEkgbmVlZCB0byBlbnN1cmUgdGhlIG5lY2Vzc2FyeSBkZXBlbmRlbmNpZXMgYXJlIG1ldC4gRnJvbSB0aGUgS2NvbmZpZyBmaWxlcywgSSBzZWUgdGhhdCBlbmFibGluZyBgREFNT05gIGF1dG9tYXRpY2FsbHkgZW5hYmxlcyB0aGUgb3RoZXJzLCBhc3N1bWluZyB0aGUgc3lzdGVtIGhhcyBhbiBNTVUuXG5cbk5vdywgZm9jdXNpbmcgb24gdGhlIGNvZGUsIGBEQU1PTl9SRUNMQUlNYCBhcHBlYXJzIHRvIGJlIHRoZSBwbGFjZSB3aGVyZSBgZGFtb25fcmVjbGFpbV9xdW90YWAgaXMgc2V0LCBhbmQgaXQgYWRkcyBxdW90YSBnb2Fscywgd2l0aCBgREFNT05fUEFERFJgIGRlcGVuZGluZyBvbiBpdC4gYERBTU9OX1NZU0ZTYCBpcyBpbXBvcnRhbnQgZm9yIHVzZXItc3BhY2UgY29udHJvbC4gTXkgZ29hbCBpcyB0byBkZXRlcm1pbmUgdGhlIGJlc3Qgc3ltYm9sKHMpIHRvIHJlcHJlc2VudCB0aGUgY2hhbmdlcy5cblxuSSd2ZSBob21lZCBpbiBvbiBgZGFtb3NfYWRqdXN0X3F1b3RhYCwgYSBzdGF0aWMgZnVuY3Rpb24gd2l0aGluIGBtbS9kYW1vbi9jb3JlLmNgLiBNeSBmaXJzdCBpbnN0aW5jdCB3YXMgdG8gY2hlY2sgaWYgaXQncyBpbmxpbmVkLCBidXQgaXQncyBub3QuIEl0IGlzIGBzdGF0aWMgdm9pZGAuIEkgdGhlbiBuZWVkZWQgdG8gY29uZmlybSB3aGV0aGVyIGl0IGlzIGFjdHVhbGx5IGlubGluZWQgYnkgdGhlIGNvbXBpbGVyLiBJIGZvdW5kIGl0J3Mgb25seSBjYWxsZWQgZnJvbSBga2RhbW9uZF9hcHBseV9zY2hlbWVzYCwgd2hpY2ggaW4gdHVybiBpcyBvbmx5IGNhbGxlZCBieSBga2RhbW9uZF9mbmAuIE5vdywgdGhlIGtleSBpcyB3aGV0aGVyIHRvIGxpc3QgYGRhbW9zX2FkanVzdF9xdW90YWAgaXRzZWxmLCBvciBvbmUgb2YgaXRzIGNhbGxlcnMuXG5cbkJhc2VkIG9uIHRoZSBpbnN0cnVjdGlvbnMsIHNpbmNlIGBkYW1vc19hZGp1c3RfcXVvdGFgIGlzbid0IGluIGEgaGVhZGVyIGFuZCBpcyBmZWF0dXJlLXNwZWNpZmljLCBpdCAqY291bGQqIGJlIGEgZm9jdXMgc3ltYm9sLCBvciBvbmUgb2YgaXRzIGNhbGxlcnMuIFNvLCBJIG5lZWQgdG8gY2hlY2sgdGhlIHN1cnJvdW5kaW5nIGZ1bmN0aW9ucy4gVGhlIGtleSBmdW5jdGlvbnMgYXJlIGBkYW1vc19hZGp1c3RfcXVvdGFgLCBgZGFtb3NfcXVvdGFfaXNfZnVsbGAsIGFuZCBga2RhbW9uZF9hcHBseV9zY2hlbWVzYC5cblxuSSBuZWVkIHRvIGFsc28gZXhhbWluZSBhbnkgc3lzZnMgZW50cnkgcG9pbnRzIG9yIGNvcmUgREFNT04gZW50cnlwb2ludHMuIFRoZSBxdWVzdGlvbnMgSSdtIGFza2luZyBteXNlbGYgYXJlOiBIb3cgYXJlIHRoZSBzY2hlbWVzIGFkZGVkPyBBcmUgdGhlcmUgZnVuY3Rpb25zIGxpa2UgYGRhbW9zX25ld19zY2hlbWVgIG9yIHN5c2ZzIHNjaGVtZSBjb21taXQgdGhhdCBtaWdodCBiZSBtb3JlIHJlbGV2YW50PyBJIG5lZWQgdG8gbGlzdCBmdW5jdGlvbnMgdGhhdCBpbXBsZW1lbnQgdGhlIHNwZWNpZmljIGxvZ2ljLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzI1NywiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk3MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMTo1MzoyMy40OTQzNDU5NjJaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MzE4OTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRhbW9uX3NldF9zY2hlbWVzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL2NvcmUuYz0xMTIzPWludCBkYW1vbl9zZXRfYXR0cnMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb25fYXR0cnMgKmF0dHJzKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTExNjItLyoqXFxubW0vZGFtb24vY29yZS5jOjExNjM6ICogZGFtb25fc2V0X3NjaGVtZXMoKSAtIFNldCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIGJhc2VkIG9wZXJhdGlvbiBzY2hlbWVzLlxcbm1tL2RhbW9uL2NvcmUuYy0xMTY0LSAqIEBjdHg6XFx0bW9uaXRvcmluZyBjb250ZXh0XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTE3MC0gKi9cXG5tbS9kYW1vbi9jb3JlLmM6MTE3MTp2b2lkIGRhbW9uX3NldF9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9zICoqc2NoZW1lcyxcXG5tbS9kYW1vbi9jb3JlLmMtMTE3Mi1cXHRcXHRcXHRzc2l6ZV90IG5yX3NjaGVtZXMpXFxuLS1cXG5tbS9kYW1vbi9scnVfc29ydC5jPTI3MT1zdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X2FwcGx5X3BhcmFtZXRlcnModm9pZClcXG4tLVxcbm1tL2RhbW9uL2xydV9zb3J0LmMtMzE4LVxcbm1tL2RhbW9uL2xydV9zb3J0LmM6MzE5OlxcdGRhbW9uX3NldF9zY2hlbWVzKHBhcmFtX2N0eCwgXFx1MDAyNmhvdF9zY2hlbWUsIDEpO1xcbm1tL2RhbW9uL2xydV9zb3J0LmMtMzIwLVxcdGRhbW9uX2FkZF9zY2hlbWUocGFyYW1fY3R4LCBjb2xkX3NjaGVtZSk7XFxuLS1cXG5tbS9kYW1vbi9yZWNsYWltLmM9MTk0PXN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzKHZvaWQpXFxuLS1cXG5tbS9kYW1vbi9yZWNsYWltLmMtMjMyLVxcdFxcdGdvdG8gb3V0O1xcbm1tL2RhbW9uL3JlY2xhaW0uYzoyMzM6XFx0ZGFtb25fc2V0X3NjaGVtZXMocGFyYW1fY3R4LCBcXHUwMDI2c2NoZW1lLCAxKTtcXG5tbS9kYW1vbi9yZWNsYWltLmMtMjM0LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMTo1MzoyMy41Mzk2NzA1MDFaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzIxMjY0NzQ5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqRGl2aW5nIGludG8gREFNT04gQ29yZTogQ2hlY2tpbmcgdGhlIEVudHJ5IFBvaW50cyoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhlIGhlYXJ0IG9mIHRoZSBEeW5hbWljIEFkYXB0aXZlIE1lbW9yeSBPcHRpbWl6ZXIgKERBTU9OKSBjb3JlLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGluaXRpYXRpb24gYW5kIG1haW4gZnVuY3Rpb24uIExldCdzIHNlZS4uLiBJJ20gdGhpbmtpbmcgSSdsbCBuZWVkIHRvIHJldmlzaXQgYGtkYW1vbmRfZm5gIGFuZCBgZGFtb25fc3RhcnRgIOKAkyB0aG9zZSBhcmUgdGhlIGtleSBlbnRyeSBwb2ludHMgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBtb25pdG9yaW5nIGFuZCBhZGFwdGF0aW9uIGFyZSBraWNrZWQgb2ZmIHdpdGhpbiBgbW0vZGFtb24vY29yZS5jYC4gSSdsbCBoYXZlIGEgbG9vayBhdCBob3cgdGhvc2UgZnVuY3Rpb25zIGFyZSBjYWxsZWQgYW5kIGhvdyB0aGV5IGludGVyYWN0LiBQcm9iYWJseSBuZWVkIHRvIHF1aWNrbHkgbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBnZXQgdGhlIGNvbnRleHQuIFRoYXQncyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQuIExldCdzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTE4MywiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDExOjUzOjI2Ljc1MjMyMDM5M1oiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUwNjk0MTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb25fc3RhcnRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb25cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vY29yZS5jPTEwODg9c3RhdGljIGJvb2wgZGFtb25fdmFsaWRfaW50ZXJ2YWxzX2dvYWwoc3RydWN0IGRhbW9uX2F0dHJzICphdHRycylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMTEzLSAqIEluIGRldGFpbCwgYWxsIERBTU9OIEFQSSBjYWxsZXJzIGRpcmVjdGx5IGNhbGwgdGhpcyBmdW5jdGlvbiBmb3IgaW5pdGlhbFxcbm1tL2RhbW9uL2NvcmUuYzoxMTE0OiAqIHNldHVwIG9mIGRhbW9uX2N0eCBiZWZvcmUgY2FsbGluZyBkYW1vbl9zdGFydCgpLiAgU29tZSBvZiB0aGUgQVBJIGNhbGxlcnNcXG5tbS9kYW1vbi9jb3JlLmMtMTExNS0gKiBhbHNvIGluZGlyZWN0bHkgY2FsbCB0aGlzIGZ1bmN0aW9uIHZpYSBkYW1vbl9jYWxsKCkgLVxcdTAwM2UgZGFtb25fY29tbWl0KCkgZm9yXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MjA0OD1zdGF0aWMgaW50IGtkYW1vbmRfZm4odm9pZCAqZGF0YSk7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjA1MC0vKlxcbm1tL2RhbW9uL2NvcmUuYzoyMDUxOiAqIF9fZGFtb25fc3RhcnQoKSAtIFN0YXJ0cyBtb25pdG9yaW5nIHdpdGggZ2l2ZW4gY29udGV4dC5cXG5tbS9kYW1vbi9jb3JlLmMtMjA1Mi0gKiBAY3R4OlxcdG1vbml0b3JpbmcgY29udGV4dFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTIwNTctICovXFxubW0vZGFtb24vY29yZS5jOjIwNTg6c3RhdGljIGludCBfX2RhbW9uX3N0YXJ0KHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG5tbS9kYW1vbi9jb3JlLmMtMjA1OS17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjA4MC0vKipcXG5tbS9kYW1vbi9jb3JlLmM6MjA4MTogKiBkYW1vbl9zdGFydCgpIC0gU3RhcnRzIHRoZSBtb25pdG9yaW5ncyBmb3IgYSBnaXZlbiBncm91cCBvZiBjb250ZXh0cy5cXG5tbS9kYW1vbi9jb3JlLmMtMjA4Mi0gKiBAY3R4czpcXHRhbiBhcnJheSBvZiB0aGUgcG9pbnRlcnMgZm9yIGNvbnRleHRzIHRvIHN0YXJ0IG1vbml0b3JpbmdcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yMDg5LSAqIEBleGNsdXNpdmUgaXMgdHJ1ZSBhbmQgYSBncm91cCBvZiB0aHJlYWRzIHRoYXQgY3JlYXRlZCBieSBvdGhlclxcbm1tL2RhbW9uL2NvcmUuYzoyMDkwOiAqICdkYW1vbl9zdGFydCgpJyBjYWxsIGlzIGN1cnJlbnRseSBydW5uaW5nLCB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90aGluZyBidXRcXG5tbS9kYW1vbi9jb3JlLmMtMjA5MS0gKiByZXR1cm5zIC1FQlVTWS5cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yMDk0LSAqL1xcbm1tL2RhbW9uL2NvcmUuYzoyMDk1OmludCBkYW1vbl9zdGFydChzdHJ1Y3QgZGFtb25fY3R4ICoqY3R4cywgaW50IG5yX2N0eHMsIGJvb2wgZXhjbHVzaXZlKVxcbm1tL2RhbW9uL2NvcmUuYy0yMDk2LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yMTIwLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucl9jdHhzOyBpKyspIHtcXG5tbS9kYW1vbi9jb3JlLmM6MjEyMTpcXHRcXHRlcnIgPSBfX2RhbW9uX3N0YXJ0KGN0eHNbaV0pO1xcbm1tL2RhbW9uL2NvcmUuYy0yMTIyLVxcdFxcdGlmIChlcnIpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MjIyMz1pbnQgZGFtb25fY2FsbChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl9jYWxsX2NvbnRyb2wgKmNvbnRyb2wpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjI3MS0gKlxcbm1tL2RhbW9uL2NvcmUuYzoyMjcyOiAqIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgb25seSBhZnRlciBkYW1vbl9zdGFydCgpIHdpdGggdGhlXFxubW0vZGFtb24vY29yZS5jLTIyNzMtICogQGN0eCBoYXMgc3VjY2VlZGVkLiAgT3RoZXJ3aXNlLCB0aGlzIGZ1bmN0aW9uIGNvdWxkIGZhbGwgaW50byBhbiBpbmRlZmluaXRlXFxuLS1cXG5tbS9kYW1vbi9scnVfc29ydC5jPTQwMT1zdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X3R1cm4oYm9vbCBvbilcXG4tLVxcbm1tL2RhbW9uL2xydV9zb3J0LmMtNDEzLVxcbm1tL2RhbW9uL2xydV9zb3J0LmM6NDE0OlxcdGVyciA9IGRhbW9uX3N0YXJ0KFxcdTAwMjZjdHgsIDEsIHRydWUpO1xcbm1tL2RhbW9uL2xydV9zb3J0LmMtNDE1LVxcdGlmIChlcnIpXFxuLS1cXG5tbS9kYW1vbi9yZWNsYWltLmM9MzI0PXN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV90dXJuKGJvb2wgb24pXFxuLS1cXG5tbS9kYW1vbi9yZWNsYWltLmMtMzM2LVxcbm1tL2RhbW9uL3JlY2xhaW0uYzozMzc6XFx0ZXJyID0gZGFtb25fc3RhcnQoXFx1MDAyNmN0eCwgMSwgdHJ1ZSk7XFxubW0vZGFtb24vcmVjbGFpbS5jLTMzOC1cXHRpZiAoZXJyKVxcbi0tXFxubW0vZGFtb24vc3RhdC5jPTIwMD1zdGF0aWMgaW50IGRhbW9uX3N0YXRfc3RhcnQodm9pZClcXG4tLVxcbm1tL2RhbW9uL3N0YXQuYy0yMTItXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxubW0vZGFtb24vc3RhdC5jOjIxMzpcXHRlcnIgPSBkYW1vbl9zdGFydChcXHUwMDI2ZGFtb25fc3RhdF9jb250ZXh0LCAxLCB0cnVlKTtcXG5tbS9kYW1vbi9zdGF0LmMtMjE0LVxcdGlmIChlcnIpIHtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9MjUxNT1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3R1cm5fZGFtb25fb24oc3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmQgKmtkYW1vbmQpXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTI1MzktXFx0fVxcbm1tL2RhbW9uL3N5c2ZzLmM6MjU0MDpcXHRlcnIgPSBkYW1vbl9zdGFydChcXHUwMDI2Y3R4LCAxLCBmYWxzZSk7XFxubW0vZGFtb24vc3lzZnMuYy0yNTQxLVxcdGlmIChlcnIpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTE6NTM6MjYuNzk3MzkzNjgyWiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE0NzQwMDM2MTk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRBTU9OIENvZGUgQW5hbHlzaXMgU3VtbWFyeSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB0aGUgY29kZSBpbiBgbW0vZGFtb24vY29yZS5jYCwgdGhlIGtleSBmdW5jdGlvbiBpbXBhY3RlZCBieSB0aGUgY29tbWl0IGlzIGBkYW1vc19hZGp1c3RfcXVvdGFgLCB3aGljaCBpcyBjYWxsZWQgZGlyZWN0bHkgYnkgYGtkYW1vbmRfYXBwbHlfc2NoZW1lc2AuICBgZGFtb3NfYWRqdXN0X3F1b3RhYCBhbHNvIHVzZXMgYGRhbW9zX3F1b3RhX2lzX2Z1bGxgIGFzIGEgaGVscGVyLiBDb25zaWRlcmluZyB0aGUgaW5zdHJ1Y3Rpb25zLCBJIG5lZWQgdG8gaWRlbnRpZnkgc3BlY2lmaWMgZmVhdHVyZSBsb2dpYyBvciBlbnRyeXBvaW50cy5cblxuYGRhbW9zX2FkanVzdF9xdW90YWAgaXMgbm9uLWlubGluZSBhbmQgc3RhdGljLCBzbyBpdCdzIGEgZ29vZCB0YXJnZXQgZm9yIGZvY3VzLCBhbmQgaXRzIGNhbGxlciwgYGtkYW1vbmRfYXBwbHlfc2NoZW1lc2AsIGlzIGFsc28gbm9uLWlubGluZS4gYGRhbW9uX3N0YXJ0YCBpcyB1YmlxdWl0b3VzIGluIERBTU9OLCBzbyBpdCdzIG5vdCBhIGdvb2QgY2hvaWNlIGJhc2VkIG9uIHRoZSBpbnN0cnVjdGlvbnMuICBJJ20gY29uZmlkZW50IGBkYW1vc19hZGp1c3RfcXVvdGFgIGlzIHRoZSBmdW5jdGlvbiAqZGlyZWN0bHkqIG1vZGlmaWVkLCBhbmQgYGtkYW1vbmRfYXBwbHlfc2NoZW1lc2AgaXMgaXRzIGNhbGxlci4gVGhlc2UgYXJlIHRoZSAqZm9jdXMgc3ltYm9scyogSSBzaG91bGQgbGlzdC5cblxuTm93IGZvciBjb25maWd1cmF0aW9ucy4gVG8gZ2V0IHRvIHRoZSBtb2RpZmllZCBjb2RlIGluIGBkYW1vc19hZGp1c3RfcXVvdGFgLCBJIHNlZSB0aGF0IGBrZGFtb25kX2FwcGx5X3NjaGVtZXNgIG5lZWRzIGAhbGlzdF9lbXB0eShcdTAwMjZjdHgtXHUwMDNlc2NoZW1lcylgLiBGdXJ0aGVybW9yZSwgaW5zaWRlIGBkYW1vc19hZGp1c3RfcXVvdGFgLCB0aGUgcXVvdGEgY2hlY2sgYW5kIGhpc3RvZ3JhbSBjb2RlIGlzIG9ubHkgZXhlY3V0ZWQgaWYgYGMtXHUwMDNlb3BzLmdldF9zY2hlbWVfc2NvcmVgIGlzIHNldC4gVGhpcyBtZWFucyBgREFNT05fUEFERFJgIG9yIGBEQU1PTl9WQUREUmAgbXVzdCBiZSBlbmFibGVkLiBTaW5jZSB0aGUgc2NoZW1lcyBhcmUgc2V0IHZpYSBgREFNT05fU1lTRlNgICh1c2VyIHNwYWNlKSBvciBgREFNT05fUkVDTEFJTWAgb3IgYERBTU9OX0xSVV9TT1JUYCwgSSBuZWVkIHRvIGVuYWJsZTogYERBTU9OYCwgYERBTU9OX1BBRERSYCwgYERBTU9OX1ZBRERSYCwgYERBTU9OX1NZU0ZTYCwgYW5kIGBEQU1PTl9SRUNMQUlNYC4gIEkndmUgY2hlY2tlZCB0aGUgS2NvbmZpZyBkZXBlbmRlbmNpZXMsIGFuZCB0aGVzZSBhbGwgbWFrZSBzZW5zZS5cblxuSSd2ZSBtYWRlIHN1cmUgdG8gY292ZXIgYWxsIHRoZSBkZXBlbmRlbmNpZXMsIGluY2x1ZGluZyBgU1lTRlNgIGFuZCBgTU1VYCB3aGljaCBhcmUgc3RhbmRhcmQgb24gYW1kNjQuIFRoZXJlZm9yZSwgSSBjYW4gY29uZmlybSB0aGF0IHRoZSBgV29ydGhGdXp6aW5nYCBib29sZWFuIGlzIHRydWUsIHRoZSByZWFzb25pbmcgaXMgY29uY2lzZSwgdGhlIGBGb2N1c1N5bWJvbHNgIGFyZSBgZGFtb3NfYWRqdXN0X3F1b3RhYCBhbmQgYGtkYW1vbmRfYXBwbHlfc2NoZW1lc2AsIGFuZCB0aGUgYEVuYWJsZUNvbmZpZ3NgIGFyZSBgREFNT05gLCBgREFNT05fU1lTRlNgLCBgREFNT05fUEFERFJgLCBgREFNT05fVkFERFJgLCBhbmQgYERBTU9OX1JFQ0xBSU1gLiBMb29rcyBnb29kLiBUaW1lIHRvIG1vdmUgb24gYW5kIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA2MDAsIk91dHB1dFRva2VucyI6MTY2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEwOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMTo1Mzo0MS41Mzc0MzI3ODhaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3ODk0ODQ4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiREFNT05cIixcbiAgICBcIkRBTU9OX1NZU0ZTXCIsXG4gICAgXCJEQU1PTl9QQUREUlwiLFxuICAgIFwiREFNT05fVkFERFJcIixcbiAgICBcIkRBTU9OX1JFQ0xBSU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkYW1vc19hZGp1c3RfcXVvdGFcIixcbiAgICBcImtkYW1vbmRfYXBwbHlfc2NoZW1lc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgaW4gREFNT04gKG1tL2RhbW9uL2NvcmUuYykgYnkgaW50cm9kdWNpbmcgYW4gZWFybHkgZXhpdCBjaGVjayBpbiBkYW1vc19hZGp1c3RfcXVvdGEoKSB3aGVuIHRoZSBxdW90YSBpcyBhbHJlYWR5IGZ1bGwuIFRoaXMgYXZvaWRzIHVubmVjZXNzYXJ5IHJlZ2lvbiBzY29yZSBoaXN0b2dyYW0gY2FsY3VsYXRpb25zLiBCZWNhdXNlIHRoaXMgY2hhbmdlcyByZWFjaGFibGUgZXhlY3V0aW9uIGxvZ2ljIGluIGEgY29yZSBNTSBzdWJzeXN0ZW0gYWNjZXNzaWJsZSB2aWEgREFNT04gc3lzZnMgYW5kIG1vZHVsZSBpbnRlcmZhY2VzIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgaXQgaXMgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJEQU1PTlwiLFxuICAgIFwiREFNT05fU1lTRlNcIixcbiAgICBcIkRBTU9OX1BBRERSXCIsXG4gICAgXCJEQU1PTl9WQUREUlwiLFxuICAgIFwiREFNT05fUkVDTEFJTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRhbW9zX2FkanVzdF9xdW90YVwiLFxuICAgIFwia2RhbW9uZF9hcHBseV9zY2hlbWVzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBpbiBEQU1PTiAobW0vZGFtb24vY29yZS5jKSBieSBpbnRyb2R1Y2luZyBhbiBlYXJseSBleGl0IGNoZWNrIGluIGRhbW9zX2FkanVzdF9xdW90YSgpIHdoZW4gdGhlIHF1b3RhIGlzIGFscmVhZHkgZnVsbC4gVGhpcyBhdm9pZHMgdW5uZWNlc3NhcnkgcmVnaW9uIHNjb3JlIGhpc3RvZ3JhbSBjYWxjdWxhdGlvbnMuIEJlY2F1c2UgdGhpcyBjaGFuZ2VzIHJlYWNoYWJsZSBleGVjdXRpb24gbG9naWMgaW4gYSBjb3JlIE1NIHN1YnN5c3RlbSBhY2Nlc3NpYmxlIHZpYSBEQU1PTiBzeXNmcyBhbmQgbW9kdWxlIGludGVyZmFjZXMgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBpdCBpcyB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMTo1Mzo0MS42MTYzODk2NTZaIiwiU2VxIjozNSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk3NTg0MDYzOTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTE6NTM6NDEuNjE2ODI2MzM2WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6OTc1ODM2MjI3NjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYW4gZWFybHkgcmV0dXJuIGluIGRhbW9zX2FkanVzdF9xdW90YSgpIGlmIHRoZSBxdW90YSBpcyBhbHJlYWR5IGV4aGF1c3RlZCAoZGFtb3NfcXVvdGFfaXNfZnVsbCgpKS4gVGhpcyBza2lwcyByZWNhbGN1bGF0aW9uIG9mIHRoZSBzY2hlbWUgc2NvcmUgaGlzdG9ncmFtIGFuZCBtaW5fc2NvcmUuXFxuXFxuTm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3IgbWVtb3J5IGFsbG9jYXRpb25zIGFyZSBpbnRyb2R1Y2VkIG9yIHJlYWQuIFRoZSBza2lwcGVkIGhpc3RvZ3JhbSBidWZmZXIgKGMtXFx1MDAzZXJlZ2lvbnNfc2NvcmVfaGlzdG9ncmFtKSBpcyBzdHJpY3RseSBpbnRlcm5hbCB0byB0aGlzIGZ1bmN0aW9uIGFuZCBpcyBhbHdheXMgemVyb2VkIHZpYSBtZW1zZXQoKSBwcmlvciB0byB1c2Ugd2hlbiBhY2Nlc3NlZC4gTm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSBvciB1c2VkIGluIHVuaW5pdGlhbGl6ZWQgc3RhdGUuIEFueSBwb3RlbnRpYWwgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcykgd291bGQgYmUgZGV0ZWN0ZWQgYnkgc3RhbmRhcmQgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gcnVuIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNzcwZjI5MDA3OTY4ZTgzYzk5NjczMDhjMWRjNjJhMTk5MWZkZjYzMVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gU2VwIDEzIDExOjUyOjAzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vY29yZS5jIGIvbW0vZGFtb24vY29yZS5jXG5pbmRleCAwYzk4ZjdlMjY3ZDA3Li4zZDdhOTczZWE4YjZmIDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vY29yZS5jXG4rKysgYi9tbS9kYW1vbi9jb3JlLmNcbkBAIC0zMzM2LDYgKzMzMzYsOCBAQCBzdGF0aWMgdm9pZCBkYW1vc19hZGp1c3RfcXVvdGEoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzKVxuIFx0XHRcdGRhbW9zX3RyYWNlX2VzeihjLCBzLCBxdW90YSk7XG4gXHR9XG4gXG4rXHRpZiAoZGFtb3NfcXVvdGFfaXNfZnVsbChxdW90YSwgYy1cdTAwM2VtaW5fcmVnaW9uX3N6KSlcbitcdFx0cmV0dXJuO1xuIFx0aWYgKCFjLVx1MDAzZW9wcy5nZXRfc2NoZW1lX3Njb3JlKVxuIFx0XHRyZXR1cm47XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMTo1Mzo0MS42MTY4MjcyNDZaIiwiU2VxIjozNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6ODE1OTAxOTgwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBob3cgSSdkIGFwcHJvYWNoIHRoaXMgYW5hbHlzaXM6XG5cbioqQW5hbHl6aW5nIHRoZSBQYXRjaDogSW5pdGlhbCBUaG91Z2h0cyoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gc3RhcnQgYnkgdW5kZXJzdGFuZGluZyB0aGlzIHBhdGNoIGFuZCBpdHMgY29udGV4dC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gemVybyBpbiBvbiBgbW0vZGFtb24vY29yZS5jYCBhcm91bmQgbGluZSAzMzM2LiBJJ2xsIGtpY2sgdGhpbmdzIG9mZiBieSB1c2luZyBteSBzdGFuZGFyZCB0b29scyAtIEknbGwgYHJlYWQtZmlsZWAgdGhhdCBzZWN0aW9uIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIHN1cnJvdW5kaW5nIGNvZGUgYW5kIGlkZW50aWZ5IHRoZSBleGFjdCBhcmVhIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcuIEkgY2FuIGFscmVhZHkgaW1hZ2luZSB0aGUgdHlwZSBvZiBkYXRhIHN0cnVjdHVyZXMgYW5kIGxvZ2ljIEknbSBnb2luZyB0byBiZSBsb29raW5nIGF0IGluIHRoYXQgZmlsZS4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGZvdW5kYXRpb24gYmVmb3JlIEkgc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBjaGFuZ2VzIHRoZW1zZWx2ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNzEsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDExOjUzOjQ5Ljc3NTg1MDExMVoiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTY4MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMzMjAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjMzMjA6XFx0XFx0XFx0XFx0ZGFtb3NfdHJhY2VfZXN6KGMsIHMsIHF1b3RhKTtcXG4zMzIxOlxcdFxcdH1cXG4zMzIyOlxcdFxcbjMzMjM6XFx0XFx0LyogTmV3IGNoYXJnZSB3aW5kb3cgc3RhcnRzICovXFxuMzMyNDpcXHRcXHRpZiAoIXRpbWVfaW5fcmFuZ2Vfb3BlbihqaWZmaWVzLCBxdW90YS1cXHUwMDNlY2hhcmdlZF9mcm9tLFxcbjMzMjU6XFx0XFx0XFx0XFx0XFx0cXVvdGEtXFx1MDAzZWNoYXJnZWRfZnJvbSArXFxuMzMyNjpcXHRcXHRcXHRcXHRcXHRtc2Vjc190b19qaWZmaWVzKHF1b3RhLVxcdTAwM2VyZXNldF9pbnRlcnZhbCkpKSB7XFxuMzMyNzpcXHRcXHRcXHRpZiAoZGFtb3NfcXVvdGFfaXNfZnVsbChxdW90YSwgYy1cXHUwMDNlbWluX3JlZ2lvbl9zeikpXFxuMzMyODpcXHRcXHRcXHRcXHRzLVxcdTAwM2VzdGF0LnF0X2V4Y2VlZHMrKztcXG4zMzI5OlxcdFxcdFxcdHF1b3RhLVxcdTAwM2V0b3RhbF9jaGFyZ2VkX3N6ICs9IHF1b3RhLVxcdTAwM2VjaGFyZ2VkX3N6O1xcbjMzMzA6XFx0XFx0XFx0cXVvdGEtXFx1MDAzZWNoYXJnZWRfZnJvbSA9IGppZmZpZXM7XFxuMzMzMTpcXHRcXHRcXHRxdW90YS1cXHUwMDNlY2hhcmdlZF9zeiA9IDA7XFxuMzMzMjpcXHRcXHRcXHRpZiAodHJhY2VfZGFtb3NfZXN6X2VuYWJsZWQoKSlcXG4zMzMzOlxcdFxcdFxcdFxcdGNhY2hlZF9lc3ogPSBxdW90YS1cXHUwMDNlZXN6O1xcbjMzMzQ6XFx0XFx0XFx0ZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YShjLCBzKTtcXG4zMzM1OlxcdFxcdFxcdGlmICh0cmFjZV9kYW1vc19lc3pfZW5hYmxlZCgpIFxcdTAwMjZcXHUwMDI2IHF1b3RhLVxcdTAwM2Vlc3ogIT0gY2FjaGVkX2VzeilcXG4zMzM2OlxcdFxcdFxcdFxcdGRhbW9zX3RyYWNlX2VzeihjLCBzLCBxdW90YSk7XFxuMzMzNzpcXHRcXHR9XFxuMzMzODpcXHRcXG4zMzM5OlxcdFxcdGlmIChkYW1vc19xdW90YV9pc19mdWxsKHF1b3RhLCBjLVxcdTAwM2VtaW5fcmVnaW9uX3N6KSlcXG4zMzQwOlxcdFxcdFxcdHJldHVybjtcXG4zMzQxOlxcdFxcdGlmICghYy1cXHUwMDNlb3BzLmdldF9zY2hlbWVfc2NvcmUpXFxuMzM0MjpcXHRcXHRcXHRyZXR1cm47XFxuMzM0MzpcXHRcXG4zMzQ0OlxcdFxcdC8qIEZpbGwgdXAgdGhlIHNjb3JlIGhpc3RvZ3JhbSAqL1xcbjMzNDU6XFx0XFx0bWVtc2V0KGMtXFx1MDAzZXJlZ2lvbnNfc2NvcmVfaGlzdG9ncmFtLCAwLFxcbjMzNDY6XFx0XFx0XFx0XFx0c2l6ZW9mKCpjLVxcdTAwM2VyZWdpb25zX3Njb3JlX2hpc3RvZ3JhbSkgKlxcbjMzNDc6XFx0XFx0XFx0XFx0KERBTU9TX01BWF9TQ09SRSArIDEpKTtcXG4zMzQ4OlxcdFxcdGRhbW9uX2Zvcl9lYWNoX3RhcmdldCh0LCBjKSB7XFxuMzM0OTpcXHRcXHRcXHRkYW1vbl9mb3JfZWFjaF9yZWdpb24ociwgdCkge1xcbjMzNTA6XFx0XFx0XFx0XFx0aWYgKCFfX2RhbW9zX3ZhbGlkX3RhcmdldChyLCBzLCBjKSlcXG4zMzUxOlxcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjMzNTI6XFx0XFx0XFx0XFx0aWYgKGRhbW9zX2NvcmVfZmlsdGVyX291dChjLCB0LCByLCBzKSlcXG4zMzUzOlxcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjMzNTQ6XFx0XFx0XFx0XFx0c2NvcmUgPSBjLVxcdTAwM2VvcHMuZ2V0X3NjaGVtZV9zY29yZShjLCByLCBzKTtcXG4zMzU1OlxcdFxcdFxcdFxcdGMtXFx1MDAzZXJlZ2lvbnNfc2NvcmVfaGlzdG9ncmFtW3Njb3JlXSArPVxcbjMzNTY6XFx0XFx0XFx0XFx0XFx0ZGFtb25fc3pfcmVnaW9uKHIpO1xcbjMzNTc6XFx0XFx0XFx0XFx0aWYgKHNjb3JlIFxcdTAwM2UgbWF4X3Njb3JlKVxcbjMzNTg6XFx0XFx0XFx0XFx0XFx0bWF4X3Njb3JlID0gc2NvcmU7XFxuMzM1OTpcXHRcXHRcXHR9XFxuMzM2MDpcXHRcXHR9XFxuMzM2MTpcXHRcXG4zMzYyOlxcdFxcdC8qIFNldCB0aGUgbWluIHNjb3JlIGxpbWl0ICovXFxuMzM2MzpcXHRcXHRmb3IgKGN1bXVsYXRlZF9zeiA9IDAsIHNjb3JlID0gbWF4X3Njb3JlOyA7IHNjb3JlLS0pIHtcXG4zMzY0OlxcdFxcdFxcdGN1bXVsYXRlZF9zeiArPSBjLVxcdTAwM2VyZWdpb25zX3Njb3JlX2hpc3RvZ3JhbVtzY29yZV07XFxuMzM2NTpcXHRcXHRcXHRpZiAoY3VtdWxhdGVkX3N6IFxcdTAwM2U9IHF1b3RhLVxcdTAwM2Vlc3ogfHwgIXNjb3JlKVxcbjMzNjY6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMzM2NzpcXHRcXHR9XFxuMzM2ODpcXHRcXHRxdW90YS1cXHUwMDNlbWluX3Njb3JlID0gc2NvcmU7XFxuMzM2OTpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDExOjUzOjQ5Ljc3NjEwOTI4MloiLCJTZXEiOjM5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMjQ0MzQ1MjY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy5cblxuKipFeGFtaW5pbmcgdGhlIGBkYW1vc19hZGp1c3RfcXVvdGFgIEZ1bmN0aW9uKipcblxuUmlnaHQsIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQncyBoYXBwZW5pbmcgd2l0aCBgZGFtb3NfYWRqdXN0X3F1b3RhYCwgc28gSSdsbCBiZSBjaGVja2luZyBpdHMgaW1wbGVtZW50YXRpb24gd2l0aGluIGBtbS9kYW1vbi9jb3JlLmNgLiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc3lzdGVtIG1hbmFnZXMgYW5kIGFkanVzdHMgcXVvdGFzLiBJIHdpbGwgZm9jdXMgb24gbGluZXMgMzMwMCB0aHJvdWdoIDMzNDAsIGFzIHRoZSBjb2RlIGFyb3VuZCBhIGZ1bmN0aW9uIG9mdGVuIGdpdmVzIGNyaXRpY2FsIGluc2lnaHRzIGludG8gaXRzIHB1cnBvc2UgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgc3Vycm91bmRpbmcgYXJjaGl0ZWN0dXJlLiBSZWFkaW5nIHRoYXQgYmxvY2sgc2hvdWxkIHByb3ZpZGUgYSBjcml0aWNhbCBzbmFwc2hvdCBpbnRvIHRoZSBxdW90YSBhZGp1c3RtZW50IHByb2Nlc3MuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gbG9va2luZyBmb3IgaG93IHRoZSBhZGp1c3RtZW50cyBhcmUgdHJpZ2dlcmVkLCBhbmQgd2hhdCBwYXJhbWV0ZXJzIGl0IG1heSB1c2UuIFBlcmhhcHMgdGhlIGNvbmRpdGlvbmFsIGJyYW5jaGVzLCB2YXJpYWJsZSBhc3NpZ25tZW50cywgYW5kIGZ1bmN0aW9uIGNhbGxzIHdpbGwgZ2l2ZSBhd2F5IHRoZSBzZWNyZXRzIG9mIGBkYW1vc19hZGp1c3RfcXVvdGFgLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTMyLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMTo1Mzo1Mi4wMjA0NTcxODhaIiwiU2VxIjo0MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQwMDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2RhbW9uL2NvcmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMzAwLFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzMzAwOlxcdFxcdH1cXG4zMzAxOlxcdFxcdHRyYWNlX2RhbW9zX2VzeihjaWR4LCBzaWR4LCBxdW90YS1cXHUwMDNlZXN6KTtcXG4zMzAyOlxcdH1cXG4zMzAzOlxcdFxcbjMzMDQ6XFx0c3RhdGljIHZvaWQgZGFtb3NfYWRqdXN0X3F1b3RhKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vcyAqcylcXG4zMzA1OlxcdHtcXG4zMzA2OlxcdFxcdHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEgPSBcXHUwMDI2cy1cXHUwMDNlcXVvdGE7XFxuMzMwNzpcXHRcXHRzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0O1xcbjMzMDg6XFx0XFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqcjtcXG4zMzA5OlxcdFxcdHVuc2lnbmVkIGxvbmcgY3VtdWxhdGVkX3N6LCBjYWNoZWRfZXN6O1xcbjMzMTA6XFx0XFx0dW5zaWduZWQgaW50IHNjb3JlLCBtYXhfc2NvcmUgPSAwO1xcbjMzMTE6XFx0XFxuMzMxMjpcXHRcXHRpZiAoIXF1b3RhLVxcdTAwM2VtcyBcXHUwMDI2XFx1MDAyNiAhcXVvdGEtXFx1MDAzZXN6IFxcdTAwMjZcXHUwMDI2IGxpc3RfZW1wdHkoXFx1MDAyNnF1b3RhLVxcdTAwM2Vnb2FscykpXFxuMzMxMzpcXHRcXHRcXHRyZXR1cm47XFxuMzMxNDpcXHRcXG4zMzE1OlxcdFxcdC8qIEZpcnN0IGNoYXJnZSB3aW5kb3cgKi9cXG4zMzE2OlxcdFxcdGlmICghcXVvdGEtXFx1MDAzZXRvdGFsX2NoYXJnZWRfc3ogXFx1MDAyNlxcdTAwMjYgIXF1b3RhLVxcdTAwM2VjaGFyZ2VkX2Zyb20pIHtcXG4zMzE3OlxcdFxcdFxcdHF1b3RhLVxcdTAwM2VjaGFyZ2VkX2Zyb20gPSBqaWZmaWVzO1xcbjMzMTg6XFx0XFx0XFx0ZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YShjLCBzKTtcXG4zMzE5OlxcdFxcdFxcdGlmICh0cmFjZV9kYW1vc19lc3pfZW5hYmxlZCgpKVxcbjMzMjA6XFx0XFx0XFx0XFx0ZGFtb3NfdHJhY2VfZXN6KGMsIHMsIHF1b3RhKTtcXG4zMzIxOlxcdFxcdH1cXG4zMzIyOlxcdFxcbjMzMjM6XFx0XFx0LyogTmV3IGNoYXJnZSB3aW5kb3cgc3RhcnRzICovXFxuMzMyNDpcXHRcXHRpZiAoIXRpbWVfaW5fcmFuZ2Vfb3BlbihqaWZmaWVzLCBxdW90YS1cXHUwMDNlY2hhcmdlZF9mcm9tLFxcbjMzMjU6XFx0XFx0XFx0XFx0XFx0cXVvdGEtXFx1MDAzZWNoYXJnZWRfZnJvbSArXFxuMzMyNjpcXHRcXHRcXHRcXHRcXHRtc2Vjc190b19qaWZmaWVzKHF1b3RhLVxcdTAwM2VyZXNldF9pbnRlcnZhbCkpKSB7XFxuMzMyNzpcXHRcXHRcXHRpZiAoZGFtb3NfcXVvdGFfaXNfZnVsbChxdW90YSwgYy1cXHUwMDNlbWluX3JlZ2lvbl9zeikpXFxuMzMyODpcXHRcXHRcXHRcXHRzLVxcdTAwM2VzdGF0LnF0X2V4Y2VlZHMrKztcXG4zMzI5OlxcdFxcdFxcdHF1b3RhLVxcdTAwM2V0b3RhbF9jaGFyZ2VkX3N6ICs9IHF1b3RhLVxcdTAwM2VjaGFyZ2VkX3N6O1xcbjMzMzA6XFx0XFx0XFx0cXVvdGEtXFx1MDAzZWNoYXJnZWRfZnJvbSA9IGppZmZpZXM7XFxuMzMzMTpcXHRcXHRcXHRxdW90YS1cXHUwMDNlY2hhcmdlZF9zeiA9IDA7XFxuMzMzMjpcXHRcXHRcXHRpZiAodHJhY2VfZGFtb3NfZXN6X2VuYWJsZWQoKSlcXG4zMzMzOlxcdFxcdFxcdFxcdGNhY2hlZF9lc3ogPSBxdW90YS1cXHUwMDNlZXN6O1xcbjMzMzQ6XFx0XFx0XFx0ZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YShjLCBzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTE6NTM6NTIuMDIwNjk5Njk4WiIsIlNlcSI6NDEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIzMzg4OTQ3NTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgQ29kZSBDaGFuZ2UqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIHNlZSBhIGRpZmYgaW50cm9kdWNpbmcgc29tZSBuZXcgbG9naWMuIFNwZWNpZmljYWxseSwgdGhpcyBibG9jazpcblxuYGBgY1xuK1x0aWYgKGRhbW9zX3F1b3RhX2lzX2Z1bGwocXVvdGEsIGMtXHUwMDNlbWluX3JlZ2lvbl9zeikpXG4rXHRcdHJldHVybjtcbiBcdGlmICghYy1cdTAwM2VvcHMuZ2V0X3NjaGVtZV9zY29yZSlcbiBcdFx0cmV0dXJuO1xuYGBgXG5cbkl0IHNlZW1zIGxpa2Ugd2UncmUgYWRkaW5nIGEgY2hlY2sgcmVsYXRlZCB0byBhIFwiZGFtb3NfcXVvdGFcIi4gVGhlIGltbWVkaWF0ZSBhY3Rpb24gaXMgYSBgcmV0dXJuO2AsIHNvIGl0IGxvb2tzIGxpa2Ugd2UncmUgc2hvcnQtY2lyY3VpdGluZyBleGVjdXRpb24gaWYgc29tZSBjb25kaXRpb24gaXMgbWV0LiBUaGUgZmlyc3QgcGFydCBmb2N1c2VzIG9uIGEgY2hlY2sgdXNpbmcgYGRhbW9zX3F1b3RhX2lzX2Z1bGxgIGFuZCBjb21wYXJpbmcgdGhlIHF1b3RhIHdpdGggYGMtXHUwMDNlbWluX3JlZ2lvbl9zemAuIFRoYXQgcmFpc2VzIHNvbWUgcXVlc3Rpb25zOyBpdCB3b3VsZCBiZSBnb29kIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNvbmRpdGlvbi5cblxuSWYgdGhlIHF1b3RhIGlzIGZ1bGwsIHRoZW4gd2hhdD8gQXJlIHRoZXJlIHN1YnNlcXVlbnQgZnVuY3Rpb25zIHRoYXQgYXR0ZW1wdCB0byBhbGxvY2F0ZSBwYXN0IHRoYXQ/IElzIHRoaXMgYW4gYXR0ZW1wdCBhdCBtZW1vcnkgcHJvdGVjdGlvbj9cblxuVGhlIHNlY29uZCBwYXJ0IGNoZWNrcyBmb3IgdGhlIGV4aXN0ZW5jZSBvZiBgYy1cdTAwM2VvcHMuZ2V0X3NjaGVtZV9zY29yZWAsIGFuZCBpZiBpdCBkb2VzIG5vdCBleGlzdCwgaXQgYWxzbyByZXR1cm5zLiBUaGlzIGlzIHByb2JhYmx5IGEgcG9pbnRlciB2YWxpZGF0aW9uIGlzc3VlLiBJdCdzIGEgZmFpcmx5IGNvbW1vbiBwYXR0ZXJuIGluIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzLiBcblxuTm93LCB0aW1lIHRvIGRpdmUgZGVlcGVyIGFuZCBzZWUgd2hhdCB0aGF0IGBkYW1vc19xdW90YV9pc19mdWxsYCBmdW5jdGlvbiBhY3R1YWxseSBkb2VzLiBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcXVvdGEgbWFuYWdlbWVudCBzY2hlbWUgaW4gcGxhY2UgdG8gcHJvcGVybHkgYXNzZXNzIHRoZSBjaGFuZ2UncyBpbXBhY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5NzksIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDExOjUzOjU0LjM1OTU5NzA2M1oiLCJTZXEiOjQyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg5NDY0NTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb3NfcXVvdGFfaXNfZnVsbFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9jb3JlLmM9MjY2OD1zdGF0aWMgdm9pZCBkYW1vc19jaGFyZ2VfcXVvdGEoc3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yNjg0LVxcbm1tL2RhbW9uL2NvcmUuYzoyNjg1OnN0YXRpYyBib29sIGRhbW9zX3F1b3RhX2lzX2Z1bGwoc3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSxcXG5tbS9kYW1vbi9jb3JlLmMtMjY4Ni1cXHRcXHR1bnNpZ25lZCBsb25nIG1pbl9yZWdpb25fc3opXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MjY5OT1zdGF0aWMgdm9pZCBkYW1vc19hcHBseV9zY2hlbWUoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yNzU3LVxcdFxcdGRhbW9zX2NoYXJnZV9xdW90YShxdW90YSwgc3osIHN6X2FwcGxpZWQpO1xcbm1tL2RhbW9uL2NvcmUuYzoyNzU4OlxcdFxcdGlmIChkYW1vc19xdW90YV9pc19mdWxsKHF1b3RhLCBjLVxcdTAwM2VtaW5fcmVnaW9uX3N6KSkge1xcbm1tL2RhbW9uL2NvcmUuYy0yNzU5LVxcdFxcdFxcdHF1b3RhLVxcdTAwM2VjaGFyZ2VfdGFyZ2V0X2Zyb20gPSB0O1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTI3NzA9c3RhdGljIHZvaWQgZGFtb25fZG9fYXBwbHlfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjLFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTI3ODUtXFx0XFx0LyogQ2hlY2sgdGhlIHF1b3RhICovXFxubW0vZGFtb24vY29yZS5jOjI3ODY6XFx0XFx0aWYgKGRhbW9zX3F1b3RhX2lzX2Z1bGwocXVvdGEsIGMtXFx1MDAzZW1pbl9yZWdpb25fc3opKVxcbm1tL2RhbW9uL2NvcmUuYy0yNzg3LVxcdFxcdFxcdGNvbnRpbnVlO1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTMzMDQ9c3RhdGljIHZvaWQgZGFtb3NfYWRqdXN0X3F1b3RhKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vcyAqcylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zMzI2LVxcdFxcdFxcdFxcdG1zZWNzX3RvX2ppZmZpZXMocXVvdGEtXFx1MDAzZXJlc2V0X2ludGVydmFsKSkpIHtcXG5tbS9kYW1vbi9jb3JlLmM6MzMyNzpcXHRcXHRpZiAoZGFtb3NfcXVvdGFfaXNfZnVsbChxdW90YSwgYy1cXHUwMDNlbWluX3JlZ2lvbl9zeikpXFxubW0vZGFtb24vY29yZS5jLTMzMjgtXFx0XFx0XFx0cy1cXHUwMDNlc3RhdC5xdF9leGNlZWRzKys7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzMzOC1cXG5tbS9kYW1vbi9jb3JlLmM6MzMzOTpcXHRpZiAoZGFtb3NfcXVvdGFfaXNfZnVsbChxdW90YSwgYy1cXHUwMDNlbWluX3JlZ2lvbl9zeikpXFxubW0vZGFtb24vY29yZS5jLTMzNDAtXFx0XFx0cmV0dXJuO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMTo1Mzo1NC40MDg1NDgxODJaIiwiU2VxIjo0MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjU2MzI5OTQ5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIHRoZSBzdW1tYXJ5LCByZW5kZXJlZCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhc3N1bWluZyBJJ20gYW4gZXhwZXJ0IGluIHRoaXMgZmllbGQ6XG5cbioqQW5hbHl6aW5nIGBkYW1vc19xdW90YV9pc19mdWxsYCoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBgZGFtb3NfcXVvdGFfaXNfZnVsbGAgZnVuY3Rpb24uIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGlzIHRvIGNvbnNpZGVyIGEgZmV3IGFuZ2xlcy4gRmlyc3QsIHdoYXQgZG9lcyBcImRhbW9zXCIgcmVmZXIgdG8gaW4gdGhpcyBjb250ZXh0PyBJcyBpdCBhIHNwZWNpZmljIGRhdGEgc3RvcmUsIGEgcmVzb3VyY2UgcG9vbCwgYSBzZXJ2aWNlLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gVGhlIG5hbWUgaXRzZWxmIHN1Z2dlc3RzIGEgcXVvdGEsIHNvIGl0J3MgcHJvYmFibHkgcmVsYXRlZCB0byBzb21lIGtpbmQgb2YgbGltaXQuIFRoaXMgbGlrZWx5IG1lYW5zIHdlJ3JlIGRlYWxpbmcgd2l0aCByZXNvdXJjZSBtYW5hZ2VtZW50LCBjYXBhY2l0eSBwbGFubmluZywgYW5kIHBvdGVudGlhbGx5IGV2ZW4gdXNlciBhY2Nlc3MgY29udHJvbC4gSSdsbCBuZWVkIHRvIGxvb2sgYXQgd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYW5kLCBtb3JlIGltcG9ydGFudGx5LCAqaG93KiBpdOKAmXMgYmVpbmcgY2FsbGVkLiBBcmUgd2UgY2hlY2tpbmcgdGhlIHF1b3RhIHByb2FjdGl2ZWx5LCByZWFjdGl2ZWx5LCBvciBib3RoPyBBcmUgdGhlcmUgYW55IHJldHJ5IG1lY2hhbmlzbXMgaWYgdGhlIHF1b3RhIGlzIGluaXRpYWxseSBleGNlZWRlZD8gV2hhdCBoYXBwZW5zIHdoZW4gdGhlIGNvbmRpdGlvbiBpcyAqdHJ1ZSo/IElzIGFuIGVycm9yIHRocm93biwgYSByZXF1ZXN0IHJlamVjdGVkLCBvciBpcyB0aGVyZSBhIGZhbGxiYWNrIHN0cmF0ZWd5PyBUaGUgZXJyb3IgaGFuZGxpbmcgaXMgY3JpdGljYWwgYmVjYXVzZSBpdCB3aWxsIHJldmVhbCBob3cgcm9idXN0IHRoaXMgc3lzdGVtIGlzLiBJIGFsc28gbmVlZCB0byBhc3Nlc3MgdGhlIHVuZGVybHlpbmcgZGF0YSBzdHJ1Y3R1cmVzIG9yIEFQSSBjYWxscyB0aGF0IGRldGVybWluZSB0aGUgcXVvdGEgc3RhdHVzLiBJcyBpdCBhIHNpbXBsZSBjb3VudGVyLCBhIGNvbXBsZXggcGVybWlzc2lvbiBtb2RlbCwgb3Igc29tZXRoaW5nIGluIGJldHdlZW4/IEFueSBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVja3Mgd2lsbCBiZSByZXZlYWxlZCBpbiB0aGUgaW1wbGVtZW50YXRpb24uIEknbGwgbmVlZCB0byBrbm93IHdoaWNoIG9wZXJhdGlvbnMgbW9kaWZ5IHRoZSBxdW90YS4gQXJlIHRoZXNlIG9wZXJhdGlvbnMgYXRvbWljPyBBbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucz8gSSdtIGFudGljaXBhdGluZyB0aGF0IHVuZGVyc3RhbmRpbmcgdGhlIGNvbXBsZXRlIHN5c3RlbSBpcyBlc3NlbnRpYWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ5NzQsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMTo1Mzo1Ni45NzE4NTAwNjRaIiwiU2VxIjo0NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQyOTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2RhbW9uL2NvcmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNjgwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyNjgwOlxcdFxcdFxcdFxcdFxcdChzel9yZWdpb24gLSBzel9hcHBsaWVkKSxcXG4yNjgxOlxcdFxcdFxcdFxcdFxcdHF1b3RhLVxcdTAwM2VmYWlsX2NoYXJnZV9udW0sXFxuMjY4MjpcXHRcXHRcXHRcXHRcXHRxdW90YS1cXHUwMDNlZmFpbF9jaGFyZ2VfZGVub20pO1xcbjI2ODM6XFx0fVxcbjI2ODQ6XFx0XFxuMjY4NTpcXHRzdGF0aWMgYm9vbCBkYW1vc19xdW90YV9pc19mdWxsKHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEsXFxuMjY4NjpcXHRcXHRcXHR1bnNpZ25lZCBsb25nIG1pbl9yZWdpb25fc3opXFxuMjY4NzpcXHR7XFxuMjY4ODpcXHRcXHRpZiAoIWRhbW9zX3F1b3RhX2lzX3NldChxdW90YSkpXFxuMjY4OTpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuMjY5MDpcXHRcXHRpZiAocXVvdGEtXFx1MDAzZWNoYXJnZWRfc3ogXFx1MDAzZT0gcXVvdGEtXFx1MDAzZWVzeilcXG4yNjkxOlxcdFxcdFxcdHJldHVybiB0cnVlO1xcbjI2OTI6XFx0XFx0LypcXG4yNjkzOlxcdFxcdCAqIERBTU9TIGFjdGlvbiBpcyBhcHBsaWVkIHBlciByZWdpb24sIHNvIFxcdTAwM2NtaW5fcmVnaW9uX3N6IHJlbWFpbmluZ1xcbjI2OTQ6XFx0XFx0ICogcXVvdGEgbWVhbnMgdGhlIHF1b3RhIGlzIGVmZmVjdGl2ZWx5IGZ1bGwuXFxuMjY5NTpcXHRcXHQgKi9cXG4yNjk2OlxcdFxcdHJldHVybiBxdW90YS1cXHUwMDNlZXN6IC0gcXVvdGEtXFx1MDAzZWNoYXJnZWRfc3ogXFx1MDAzYyBtaW5fcmVnaW9uX3N6O1xcbjI2OTc6XFx0fVxcbjI2OTg6XFx0XFxuMjY5OTpcXHRzdGF0aWMgdm9pZCBkYW1vc19hcHBseV9zY2hlbWUoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTE6NTM6NTYuOTcyMDk1NzQ0WiIsIlNlcSI6NDUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIyMDI3ODIwNzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCBtZSB0YWtlIGEgbG9vayBhdCB0aGlzLlxuXG4qKlN0cmVhbWxpbmluZyB0aGUgUXVvdGEgQWRqdXN0bWVudCBMb2dpYyoqXG5cbkFscmlnaHQsIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIGBkYW1vc19hZGp1c3RfcXVvdGFgIGZ1bmN0aW9uIGFuZCwgaG9sZCBvbiBhIHNlY29uZOKApiBJIHNlZSB3aGF0IHRoZXkgd2VyZSBkb2luZyBiZWZvcmUuIFRoZXkgd2VyZSBtZXRpY3Vsb3VzbHkgaXRlcmF0aW5nIHRocm91Z2ggdGFyZ2V0cyBhbmQgcmVnaW9ucywgY2FsY3VsYXRpbmcgc2NvcmVzIGFuZCB0aGF0IGBxdW90YS1cdTAwM2VtaW5fc2NvcmVgIHZhbHVlLiBTZWVtcyBmYWlybHkgc3RhbmRhcmQgZm9yIGEgcXVvdGEgc3lzdGVtLlxuXG5CdXQgd2FpdCBhIG1pbnV0ZSwgSSdtIHRoaW5raW5nLCBpZiB0aGUgcXVvdGEncyBhbHJlYWR5ICpmdWxsKiwgd2h5IGFyZSB3ZSBldmVuIGJvdGhlcmluZyB3aXRoIGFsbCB0aGF0IGNvbXB1dGF0aW9uPyBUaGVyZSdzIGEgY2xlYXIgb3B0aW1pemF0aW9uIG9wcG9ydHVuaXR5IGhlcmUuIElmIHRoZSBxdW90YSdzIG1heGVkIG91dCwgaXQgZG9lc24ndCBuZWVkIGFkanVzdGluZywganVzdCBleGl0IGVhcmx5LiBJdCdzIHdhc3RpbmcgY3ljbGVzIHRvIGNvbnRpbnVlLiBJIGNhbiBpbXByb3ZlIHRoZSBwZXJmb3JtYW5jZSBieSBzaG9ydC1jaXJjdWl0aW5nIHRoYXQgcHJvY2Vzcy4gTGV0J3Mgc2VlIGlmIHRoaXMgbG9naWMgY2FuIGJlIGFwcGxpZWQgdG8gdGhpcyBzaXR1YXRpb24uIEkgc2hvdWxkIHRoaW5rIGFib3V0IHdoZXJlIGBkYW1vc19hZGp1c3RfcXVvdGFgIGlzIGNhbGxlZCB0byBtYWtlIHN1cmUgdGhhdCB0aGlzIGlzIHRoZSBjb3JyZWN0IHBsYWNlIHRvIGFkanVzdCB0aGUgbG9naWMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU2NTcsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDExOjUzOjU5LjE3NDg4MDM1MVoiLCJTZXEiOjQ2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU0MDE2MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb3NfYWRqdXN0X3F1b3RhXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL2NvcmUuYz0zMjkwPXN0YXRpYyB2b2lkIGRhbW9zX3RyYWNlX2VzeihzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb3MgKnMsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzMwMy1cXG5tbS9kYW1vbi9jb3JlLmM6MzMwNDpzdGF0aWMgdm9pZCBkYW1vc19hZGp1c3RfcXVvdGEoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzKVxcbm1tL2RhbW9uL2NvcmUuYy0zMzA1LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0zMzg3PXN0YXRpYyB2b2lkIGtkYW1vbmRfYXBwbHlfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTM0MDItXFxubW0vZGFtb24vY29yZS5jOjM0MDM6XFx0XFx0ZGFtb3NfYWRqdXN0X3F1b3RhKGMsIHMpO1xcbm1tL2RhbW9uL2NvcmUuYy0zNDA0LVxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTE6NTM6NTkuMjIwMjg5MDZaIiwiU2VxIjo0NywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6Mjc0NjI2MTYwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gZGVlcGx5IGZhbWlsaWFyIHdpdGggYGtkYW1vbmRfYXBwbHlfc2NoZW1lc2AgYW5kIHRoZSBicm9hZGVyIGNvbnRleHQ6XG5cbioqQW5hbHl6aW5nIGBrZGFtb25kX2FwcGx5X3NjaGVtZXNgKipcblxuQWxyaWdodCwgdGltZSB0byBkaXZlIGludG8gYGtkYW1vbmRfYXBwbHlfc2NoZW1lc2AuICBNeSBmaXJzdCB0aG91Z2h0IGlzIGFsd2F5cyB0byBxdWlja2x5IGFzc2VzcyBpdHMgcHVycG9zZSBhbmQgcGxhY2Ugd2l0aGluIHRoZSBsYXJnZXIgc3lzdGVtLiBJcyBpdCB0aGUgY29yZSBlbmdpbmUsIGEgcGVyaXBoZXJhbCB0b29sLCBvciBhIHV0aWxpdHkgZnVuY3Rpb24/IFdoYXQgc2NoZW1lcyBhcmUgaW52b2x2ZWQ/IEdpdmVuIHRoZSBuYW1lLCBJJ20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgdGhhdCB0aGlzIGlzIHRoZSBmdW5jdGlvbiByZXNwb25zaWJsZSBmb3IgYXBwbHlpbmcgZGlmZmVyZW50IG9wZXJhdGlvbmFsIG1ldGhvZG9sb2dpZXMgb3IgcGVyaGFwcyBvcHRpbWl6YXRpb24gdGVjaG5pcXVlcyB3aXRoaW4gdGhlIGRhZW1vbi4gSSdsbCBuZWVkIHRvIGltbWVkaWF0ZWx5IGNvbnNpZGVyIHRoZSBwb3RlbnRpYWwgZm9yIGNvbmZsaWN0cyBiZXR3ZWVuIHRob3NlIG1ldGhvZG9sb2dpZXMsIGFuZCBhbHNvIGhvdyBlcnJvciBjb25kaXRpb25zIGFyZSBoYW5kbGVkLiBJdCdzIGxpa2VseSBpbnZvbHZlZCBpbiBhcHBseWluZyBzb21lIGZvcm0gb2Yga25vd2xlZGdlLWJhc2VkIG9wZXJhdGlvbmFsIHNjaGVtZXMuIEkgd29uZGVyIGlmIGl0IHVzZXMgYW4gaW5mZXJlbmNlIGVuZ2luZSwgb3IgaWYgaXQncyBiYXNlZCBvbiBoYXJkLWNvZGVkIHJ1bGVzPyBUaGUgc2NvcGUgaXMgdW5jbGVhciwgYnV0IEknbGwgYmVnaW4gYnkgYW5hbHl6aW5nIHRoZSBmdW5jdGlvbidzIGlucHV0cyBhbmQgb3V0cHV0cy4gSSdsbCBuZWVkIHRvIHRyYWNrIGhvdyBpdCBoYW5kbGVzIHNjaGVtZSBwcmlvcml0eS4gV2hhdCBhcmUgdGhlIGRlcGVuZGVuY2llcz8gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IGxvb2tpbmcgZm9yIHRoZSBwb2ludHMgd2hlcmUgZXJyb3JzIGFyZSBjYXVnaHQsIHdoZXJlIGxvZ2dpbmcgaGFwcGVucywgYW5kIHdoZXJlIGl0IG1ha2VzIGRlY2lzaW9ucyBhYm91dCB3aGljaCBzY2hlbWUgdG8gYXBwbHkgYW5kIGluIHdoYXQgb3JkZXIuIFRoZW4sIEknbGwgbW92ZSBvbiB0byBkaXNzZWN0aW5nIGhvdyBpdCBldmFsdWF0ZXMgdGhlIGVmZmVjdGl2ZW5lc3Mgb2YgdGhvc2Ugc2NoZW1lcyBhbmQgZW5zdXJlcyB0aGF0IHdlJ3JlIG1ha2luZyBmb3J3YXJkIHByb2dyZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MTkzLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTE6NTQ6MDEuOTY2NTUzMTU3WiIsIlNlcSI6NDgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM5ODQ1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi9jb3JlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzM5MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzM5MDpcXHRcXHRzdHJ1Y3QgZGFtb3MgKnM7XFxuMzM5MTpcXHRcXHRib29sIGhhc19zY2hlbWVzX3RvX2FwcGx5ID0gZmFsc2U7XFxuMzM5MjpcXHRcXHR1bnNpZ25lZCBsb25nIG1heF9yZWdpb25fc3o7XFxuMzM5MzpcXHRcXG4zMzk0OlxcdFxcdGRhbW9uX2Zvcl9lYWNoX3NjaGVtZShzLCBjKSB7XFxuMzM5NTpcXHRcXHRcXHRpZiAodGltZV9iZWZvcmUoYy1cXHUwMDNlcGFzc2VkX3NhbXBsZV9pbnRlcnZhbHMsIHMtXFx1MDAzZW5leHRfYXBwbHlfc2lzKSlcXG4zMzk2OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjMzOTc6XFx0XFxuMzM5ODpcXHRcXHRcXHRpZiAoIXMtXFx1MDAzZXdtYXJrcy5hY3RpdmF0ZWQpXFxuMzM5OTpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4zNDAwOlxcdFxcbjM0MDE6XFx0XFx0XFx0aGFzX3NjaGVtZXNfdG9fYXBwbHkgPSB0cnVlO1xcbjM0MDI6XFx0XFxuMzQwMzpcXHRcXHRcXHRkYW1vc19hZGp1c3RfcXVvdGEoYywgcyk7XFxuMzQwNDpcXHRcXHR9XFxuMzQwNTpcXHRcXG4zNDA2OlxcdFxcdGlmICghaGFzX3NjaGVtZXNfdG9fYXBwbHkpXFxuMzQwNzpcXHRcXHRcXHRyZXR1cm47XFxuMzQwODpcXHRcXG4zNDA5OlxcdFxcdG1heF9yZWdpb25fc3ogPSBkYW1vbl9yZWdpb25fc3pfbGltaXQoYyk7XFxuMzQxMDpcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZjLVxcdTAwM2V3YWxrX2NvbnRyb2xfbG9jayk7XFxuMzQxMTpcXHRcXHRkYW1vbl9mb3JfZWFjaF90YXJnZXQodCwgYykge1xcbjM0MTI6XFx0XFx0XFx0aWYgKGMtXFx1MDAzZW9wcy50YXJnZXRfdmFsaWQgXFx1MDAyNlxcdTAwMjYgYy1cXHUwMDNlb3BzLnRhcmdldF92YWxpZCh0KSA9PSBmYWxzZSkge1xcbjM0MTM6XFx0XFx0XFx0XFx0ZGFtb25fZm9yX2VhY2hfc2NoZW1lKHMsIGMpIHtcXG4zNDE0OlxcdFxcdFxcdFxcdFxcdGlmIChzLVxcdTAwM2VxdW90YS5jaGFyZ2VfdGFyZ2V0X2Zyb20gIT0gdClcXG4zNDE1OlxcdFxcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjM0MTY6XFx0XFx0XFx0XFx0XFx0cy1cXHUwMDNlcXVvdGEuY2hhcmdlX3RhcmdldF9mcm9tID0gTlVMTDtcXG4zNDE3OlxcdFxcdFxcdFxcdFxcdHMtXFx1MDAzZXF1b3RhLmNoYXJnZV9hZGRyX2Zyb20gPSAwO1xcbjM0MTg6XFx0XFx0XFx0XFx0fVxcbjM0MTk6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMzQyMDpcXHRcXHRcXHR9XFxuMzQyMTpcXHRcXHRcXHRkYW1vc19hcHBseV90YXJnZXQoYywgdCwgbWF4X3JlZ2lvbl9zeik7XFxuMzQyMjpcXHRcXHR9XFxuMzQyMzpcXHRcXG4zNDI0OlxcdFxcdGRhbW9uX2Zvcl9lYWNoX3NjaGVtZShzLCBjKSB7XFxuMzQyNTpcXHRcXHRcXHRpZiAodGltZV9iZWZvcmUoYy1cXHUwMDNlcGFzc2VkX3NhbXBsZV9pbnRlcnZhbHMsIHMtXFx1MDAzZW5leHRfYXBwbHlfc2lzKSlcXG4zNDI2OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjM0Mjc6XFx0XFx0XFx0ZGFtb3Nfd2Fsa19jb21wbGV0ZShjLCBzKTtcXG4zNDI4OlxcdFxcdFxcdGRhbW9zX3NldF9uZXh0X2FwcGx5X3NpcyhzLCBjKTtcXG4zNDI5OlxcdFxcdFxcdHMtXFx1MDAzZWxhc3RfYXBwbGllZCA9IE5VTEw7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDExOjU0OjAxLjk2Njk1NTcxN1oiLCJTZXEiOjQ5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyNjUxOTU1NDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYGRhbW9zX2FkanVzdF9xdW90YWAgRnVuY3Rpb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayBkb3duIHRoaXMgYGRhbW9zX2FkanVzdF9xdW90YWAgZnVuY3Rpb24uIEkgc2VlIGEgbmV3IGNvbmRpdGlvbmFsIGNoZWNrIGhhcyBiZWVuIGFkZGVkLCBzcGVjaWZpY2FsbHkgY2hlY2tpbmcgaWYgdGhlIHF1b3RhIGlzIGZ1bGwgdXNpbmcgYGRhbW9zX3F1b3RhX2lzX2Z1bGxgLiBUaGUgaW50ZXJlc3RpbmcgcGFydCBpcyB0aGF0IGlmIHRoZSBxdW90YSAqaXMqIGZ1bGwsIHRoZSBmdW5jdGlvbiBzaW1wbHkgcmV0dXJucy4gVGhpcyBtZWFucyB0aGF0IGlmIHRoZSBxdW90YSBpcyBmdWxsLCB0aGUgc2NvcmUgaGlzdG9ncmFtIHdvbid0IGdldCB1cGRhdGVkLCBhbmQgY3J1Y2lhbGx5LCBgcXVvdGEtXHUwMDNlbWluX3Njb3JlYCB3b24ndCBiZSB1cGRhdGVkLlxuXG5Ob3csIG15IGV4cGVydCBpbnR1aXRpb24gdGVsbHMgbWUgdG8gZGlnIGEgbGl0dGxlIGRlZXBlci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXM6IElzIGBxdW90YS1cdTAwM2VtaW5fc2NvcmVgIGV2ZW4gKnVzZWQqIHdoZW4gdGhlIHF1b3RhIGlzIGZ1bGw/IElmIGl0IGlzbid0LCB0aGVuIHRoaXMgZWFybHkgcmV0dXJuIG1pZ2h0IGJlIHBlcmZlY3RseSBmaW5lLCBldmVuIGFuIG9wdGltaXphdGlvbi4gQnV0IGlmIGBtaW5fc2NvcmVgICppcyogdXNlZCBldmVuIHdoZW4gdGhlIHF1b3RhIGlzIGZ1bGwsIHRoZW4gdGhlcmUncyBhIHBvdGVudGlhbCBsb2dpYyBmbGF3IGhlcmUgdGhhdCBuZWVkcyBpbnZlc3RpZ2F0aW9uLiBJIG5lZWQgdG8gc2VhcmNoIHRocm91Z2ggdGhlIGNvZGViYXNlIGZvciBhbGwgaW5zdGFuY2VzIHdoZXJlIGBtaW5fc2NvcmVgIGlzIHVzZWQgdG8gY2xhcmlmeSB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MTU1LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTk2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTE6NTQ6MDQuNjE4OTE0MDA2WiIsIlNlcSI6NTAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjgzNjA5ODIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWluX3Njb3JlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL2NvcmUuYz0yNDIyPXN0YXRpYyBib29sIGRhbW9zX3ZhbGlkX3RhcmdldChzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTI0MjktXFxubW0vZGFtb24vY29yZS5jOjI0MzA6XFx0cmV0dXJuIGMtXFx1MDAzZW9wcy5nZXRfc2NoZW1lX3Njb3JlKGMsIHIsIHMpIFxcdTAwM2U9IHMtXFx1MDAzZXF1b3RhLm1pbl9zY29yZTtcXG5tbS9kYW1vbi9jb3JlLmMtMjQzMS19XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MzMwND1zdGF0aWMgdm9pZCBkYW1vc19hZGp1c3RfcXVvdGEoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTMzNjctXFx0fVxcbm1tL2RhbW9uL2NvcmUuYzozMzY4OlxcdHF1b3RhLVxcdTAwM2VtaW5fc2NvcmUgPSBzY29yZTtcXG5tbS9kYW1vbi9jb3JlLmMtMzM2OS19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDExOjU0OjA1LjA0NzI3OTc5WiIsIlNlcSI6NTEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQ1MTQ0MTIxMzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBgcy1cdTAwM2VxdW90YS5taW5fc2NvcmVgIFZhcmlhYmxlKipcblxuUmlnaHQsIHNvIGBzLVx1MDAzZXF1b3RhLm1pbl9zY29yZWAuLi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGxpZmVjeWNsZS4gVGhlIG5vdGUgc2F5cyBpdCdzICpvbmx5KiByZWFkIGluIGBkYW1vc192YWxpZF90YXJnZXRgLCB3aGljaCBpcyBoZWxwZnVsLCBidXQgdGVsbHMgbWUgbm90aGluZyBhYm91dCAqaG93KiBpdCBnZXRzIGl0cyB2YWx1ZS4gU28sIEkgbmVlZCB0byB0cmFjZSBiYWNrLiBXaGVyZSBpcyBgcy1cdTAwM2VxdW90YWAgYWN0dWFsbHkgKmFsbG9jYXRlZCogYW5kICppbml0aWFsaXplZCo/IEdpdmVuIHRoZSBuYW1pbmcgY29udmVudGlvbiBhbmQgdGhlIGNvbnRleHQgb2YgdGhlIGNvZGUgYmFzZSwgSSBzdXNwZWN0IHRoZSBhbGxvY2F0aW9uL2luaXRpYWxpemF0aW9uIGhhcHBlbnMgaW4gYSBmdW5jdGlvbiByZWxhdGVkIHRvIGNyZWF0aW5nIGEgbmV3IHNjaGVtZS4gU29tZXRoaW5nIGxpa2UgYGRhbW9zX25ld19zY2hlbWVgIHNlZW1zIGEgbG9naWNhbCBwbGFjZSB0byBzdGFydC4gVGhhdCdzIHRoZSBmaXJzdCBwbGFjZSBJJ20gZ29pbmcgdG8gZGlnLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGBxdW90YWAgc3RydWN0dXJlIGlzIHBvcHVsYXRlZCwgYmVjYXVzZSB0aGF0J3Mgd2hhdCB3aWxsIGdpdmUgbWUgdGhlIGNvbnRleHQgSSBuZWVkIGFyb3VuZCB0aGUgbWVhbmluZyBhbmQgZXhwZWN0ZWQgYmVoYXZpb3Igb2YgYG1pbl9zY29yZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc4MzAsIk91dHB1dFRva2VucyI6MTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMTo1NDowOS41NjE2OTUzNDFaIiwiU2VxIjo1MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NzMzODY3NTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWluX3Njb3JlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvZ3B1L2RybS9zY2hlZHVsZXIvc2NoZWRfbWFpbi5jPTk1OT1kcm1fc2NoZWRfcGlja19iZXN0KHN0cnVjdCBkcm1fZ3B1X3NjaGVkdWxlciAqKnNjaGVkX2xpc3QsXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vc2NoZWR1bGVyL3NjaGVkX21haW4uYy05NjMtXFx0aW50IGk7XFxuZHJpdmVycy9ncHUvZHJtL3NjaGVkdWxlci9zY2hlZF9tYWluLmM6OTY0OlxcdHVuc2lnbmVkIGludCBtaW5fc2NvcmUgPSBVSU5UX01BWCwgbnVtX3Njb3JlO1xcbmRyaXZlcnMvZ3B1L2RybS9zY2hlZHVsZXIvc2NoZWRfbWFpbi5jLTk2NS1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9zY2hlZHVsZXIvc2NoZWRfbWFpbi5jLTk3NS1cXHRcXHRudW1fc2NvcmUgPSBhdG9taWNfcmVhZChzY2hlZC1cXHUwMDNlc2NvcmUpO1xcbmRyaXZlcnMvZ3B1L2RybS9zY2hlZHVsZXIvc2NoZWRfbWFpbi5jOjk3NjpcXHRcXHRpZiAobnVtX3Njb3JlIFxcdTAwM2MgbWluX3Njb3JlKSB7XFxuZHJpdmVycy9ncHUvZHJtL3NjaGVkdWxlci9zY2hlZF9tYWluLmM6OTc3OlxcdFxcdFxcdG1pbl9zY29yZSA9IG51bV9zY29yZTtcXG5kcml2ZXJzL2dwdS9kcm0vc2NoZWR1bGVyL3NjaGVkX21haW4uYy05NzgtXFx0XFx0XFx0cGlja2VkX3NjaGVkID0gc2NoZWQ7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg9Mjc2PXN0cnVjdCBkYW1vc19xdW90YSB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMzA0LVxcdC8qIEZvciBwcmlvcml0aXphdGlvbiAqL1xcbmluY2x1ZGUvbGludXgvZGFtb24uaDozMDU6XFx0dW5zaWduZWQgaW50IG1pbl9zY29yZTtcXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMzA2LVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTI0MjI9c3RhdGljIGJvb2wgZGFtb3NfdmFsaWRfdGFyZ2V0KHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjQyOS1cXG5tbS9kYW1vbi9jb3JlLmM6MjQzMDpcXHRyZXR1cm4gYy1cXHUwMDNlb3BzLmdldF9zY2hlbWVfc2NvcmUoYywgciwgcykgXFx1MDAzZT0gcy1cXHUwMDNlcXVvdGEubWluX3Njb3JlO1xcbm1tL2RhbW9uL2NvcmUuYy0yNDMxLX1cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0zMzA0PXN0YXRpYyB2b2lkIGRhbW9zX2FkanVzdF9xdW90YShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb3MgKnMpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzM2Ny1cXHR9XFxubW0vZGFtb24vY29yZS5jOjMzNjg6XFx0cXVvdGEtXFx1MDAzZW1pbl9zY29yZSA9IHNjb3JlO1xcbm1tL2RhbW9uL2NvcmUuYy0zMzY5LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTE6NTQ6MTEuMjM1MDg5MTE2WiIsIlNlcSI6NTMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIyNTA0ODMxMzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIGJyZWFrZG93biBvZiBteSB0aG91Z2h0IHByb2Nlc3MgcmVnYXJkaW5nIHRoZSBhbGxvY2F0aW9uIG9mIGBzdHJ1Y3QgZGFtb3NgIHdpdGhpbiB0aGUgRGFtb24gc3lzdGVtLlxuXG4qKkRpdmluZyBpbnRvIGBzdHJ1Y3QgZGFtb3NgIEFsbG9jYXRpb24gaW4gREFNT04qKlxuXG5BbHJpZ2h0LCBzbyB0aGUgZmlyc3QgdGhpbmcgSSdtIGRvaW5nIGlzIHRyeWluZyB0byB1bmRlcnN0YW5kIGhvdyBgc3RydWN0IGRhbW9zYOKAlHRoZSBjb3JlIGRhdGEgc3RydWN0dXJlIGZvciBEYW1vbuKAlGdldHMgYWxsb2NhdGVkLiBJIG5lZWQgdG8ga25vdzogSXMgaXQgc3RhdGljYWxseSBhbGxvY2F0ZWQ/IER5bmFtaWNhbGx5PyBXaGVyZSBleGFjdGx5IGluIG1lbW9yeSBpcyBpdCByZXNpZGluZywgYW5kIGhvdyBpcyBpdHMgbGlmZXRpbWUgbWFuYWdlZD8gVGhpcyBpcyBjcml0aWNhbCBmb3IgdW5kZXJzdGFuZGluZyBEYW1vbidzIG92ZXJhbGwgcGVyZm9ybWFuY2UgcHJvZmlsZSBhbmQgcG90ZW50aWFsIGJvdHRsZW5lY2tzLCBlc3BlY2lhbGx5IGFzIHRoZSBtb25pdG9yZWQgc3lzdGVtIHNjYWxlcy4gSXMgaXQgYSBnbG9iYWwgdmFyaWFibGUsIG9yIGFyZSB0aGVyZSBtdWx0aXBsZSBpbnN0YW5jZXMgY3JlYXRlZCBkZXBlbmRpbmcgb24gY29uZmlndXJhdGlvbj8gSWYgaXQncyBkeW5hbWljLCBob3cgYXJlIHRob3NlIGFsbG9jYXRpb25zIHRpZWQgaW50byB0aGUgdW5kZXJseWluZyBtZW1vcnkgbWFuYWdlbWVudCBzeXN0ZW0/IERvIHRoZXkgdXNlIGBrbWFsbG9jYCwgYHZtX2FsbG9jYCwgb3Igc29tZXRoaW5nIGVsc2U/IFVuZGVyc3RhbmRpbmcgdGhpcyB3aWxsIGxldCBtZSBldmFsdWF0ZSBwb3RlbnRpYWwgbWVtb3J5IGZyYWdtZW50YXRpb24gaXNzdWVzLCBjb250ZW50aW9uLCBhbmQgdGhlIGltcGFjdCBvZiB0aGUgYWxsb2NhdGlvbiBzdHJhdGVneSBvbiB0aGUgZ2FyYmFnZSBjb2xsZWN0aW9uLiBUaGVuIGl0IHdpbGwgYWxsb3cgbWUgdG8gbG9vayBkZWVwZXIsIEkgc2hvdWxkIGFsc28gc2VlIGhvdyB0aGUgaW5mb3JtYXRpb24gaW4gYHN0cnVjdCBkYW1vc2AgaXMgdXRpbGl6ZWQsIHNwZWNpZmljYWxseSBob3cgdGhlIHBvaW50ZXJzIGFuZCByZWZlcmVuY2VzIGl0IGNvbnRhaW5zIGFyZSB1c2VkIHdpdGhpbiB0aGUgZGFlbW9uIHRvIG1vbml0b3IgdGhlIG1lbW9yeS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODY0MCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDExOjU0OjEzLjQ4NTU3NDk2M1oiLCJTZXEiOjU0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU3MzAwNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb25fbmV3X3NjaGVtZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9jb3JlLmM9NzM3PXN0YXRpYyBzdHJ1Y3QgZGFtb3NfcXVvdGEgKmRhbW9zX3F1b3RhX2luaXQoc3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSlcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy03NDktXFxubW0vZGFtb24vY29yZS5jOjc1MDpzdHJ1Y3QgZGFtb3MgKmRhbW9uX25ld19zY2hlbWUoc3RydWN0IGRhbW9zX2FjY2Vzc19wYXR0ZXJuICpwYXR0ZXJuLFxcbm1tL2RhbW9uL2NvcmUuYy03NTEtXFx0XFx0XFx0ZW51bSBkYW1vc19hY3Rpb24gYWN0aW9uLFxcbi0tXFxubW0vZGFtb24vY29yZS5jPTE1NzI9c3RhdGljIGludCBkYW1vbl9jb21taXRfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpkc3QsIHN0cnVjdCBkYW1vbl9jdHggKnNyYylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xNTkwLVxcdFxcdFxcdGNvbnRpbnVlO1xcbm1tL2RhbW9uL2NvcmUuYzoxNTkxOlxcdFxcdG5ld19zY2hlbWUgPSBkYW1vbl9uZXdfc2NoZW1lKFxcdTAwMjZzcmNfc2NoZW1lLVxcdTAwM2VwYXR0ZXJuLFxcbm1tL2RhbW9uL2NvcmUuYy0xNTkyLVxcdFxcdFxcdFxcdHNyY19zY2hlbWUtXFx1MDAzZWFjdGlvbixcXG4tLVxcbm1tL2RhbW9uL2xydV9zb3J0LmM9MTg4PXN0YXRpYyBzdHJ1Y3QgZGFtb3MgKmRhbW9uX2xydV9zb3J0X25ld19zY2hlbWUoXFxuLS1cXG5tbS9kYW1vbi9scnVfc29ydC5jLTE5NS1cXG5tbS9kYW1vbi9scnVfc29ydC5jOjE5NjpcXHRyZXR1cm4gZGFtb25fbmV3X3NjaGVtZShcXG5tbS9kYW1vbi9scnVfc29ydC5jLTE5Ny1cXHRcXHRcXHQvKiBmaW5kIHRoZSBwYXR0ZXJuLCBhbmQgKi9cXG4tLVxcbm1tL2RhbW9uL3JlY2xhaW0uYz0xNjc9c3RhdGljIHN0cnVjdCBkYW1vcyAqZGFtb25fcmVjbGFpbV9uZXdfc2NoZW1lKHVuc2lnbmVkIGxvbmcgYWdncl9pbnRlcnZhbClcXG4tLVxcbm1tL2RhbW9uL3JlY2xhaW0uYy0xODAtXFxubW0vZGFtb24vcmVjbGFpbS5jOjE4MTpcXHRyZXR1cm4gZGFtb25fbmV3X3NjaGVtZShcXG5tbS9kYW1vbi9yZWNsYWltLmMtMTgyLVxcdFxcdFxcdFxcdTAwMjZwYXR0ZXJuLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTI5ODc9c3RhdGljIHN0cnVjdCBkYW1vcyAqZGFtb25fc3lzZnNfbWtfc2NoZW1lKFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTMwMjQtXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjMwMjU6XFx0c2NoZW1lID0gZGFtb25fbmV3X3NjaGVtZShcXHUwMDI2cGF0dGVybiwgc3lzZnNfc2NoZW1lLVxcdTAwM2VhY3Rpb24sXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTMwMjYtXFx0XFx0XFx0c3lzZnNfc2NoZW1lLVxcdTAwM2VhcHBseV9pbnRlcnZhbF91cywgXFx1MDAyNnF1b3RhLCBcXHUwMDI2d21hcmtzLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMTo1NDoxMy41MzEzMTE5NTNaIiwiU2VxIjo1NSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTU1OTIwODM2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSBpbW1lZGlhdGUgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkluaXRpYWwgQXNzZXNzbWVudDogQ29kZSBJbnNwZWN0aW9uKipcblxuT2theSwgdGltZSB0byBkaXZlIGluLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gdHdvIHNwZWNpZmljIGVsZW1lbnRzOiBgZGFtb25fbmV3X3NjaGVtZWAgYW5kIGBkYW1vc19xdW90YV9pbml0YC4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IHJ1bm5pbmcgdGhyb3VnaCB0aGVzZSwgd2l0aCBteSBzcGVjaWFsaXN0IGtub3dsZWRnZSBJIHdpbGwgdHJ5IHRvIGRldGVybWluZSB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlbSwgYW5kIHVuZGVyc3RhbmQgaG93IHRoZXkgd29yaywgYXMgdGhlc2UgbWlnaHQgcmVsYXRlIHRvIGEgbmV3IGRldmVsb3BtZW50IHBsYW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk0ODksIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMTo1NDoxNS4wOTA1MjMxMTlaIiwiU2VxIjo1NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU3OTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2RhbW9uL2NvcmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3MzUsXG4gIFwiTGluZUNvdW50XCI6IDM1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA3MzU6XFx0XFxuIDczNjpcXHQvKiBpbml0aWFsaXplIGZpZWxkcyBvZiBAcXVvdGEgdGhhdCBub3JtYWxseSBBUEkgdXNlcnMgd291bGRuJ3Qgc2V0ICovXFxuIDczNzpcXHRzdGF0aWMgc3RydWN0IGRhbW9zX3F1b3RhICpkYW1vc19xdW90YV9pbml0KHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEpXFxuIDczODpcXHR7XFxuIDczOTpcXHRcXHRxdW90YS1cXHUwMDNlZXN6ID0gMDtcXG4gNzQwOlxcdFxcdHF1b3RhLVxcdTAwM2V0b3RhbF9jaGFyZ2VkX3N6ID0gMDtcXG4gNzQxOlxcdFxcdHF1b3RhLVxcdTAwM2V0b3RhbF9jaGFyZ2VkX25zID0gMDtcXG4gNzQyOlxcdFxcdHF1b3RhLVxcdTAwM2VjaGFyZ2VkX3N6ID0gMDtcXG4gNzQzOlxcdFxcdHF1b3RhLVxcdTAwM2VjaGFyZ2VkX2Zyb20gPSAwO1xcbiA3NDQ6XFx0XFx0cXVvdGEtXFx1MDAzZWNoYXJnZV90YXJnZXRfZnJvbSA9IE5VTEw7XFxuIDc0NTpcXHRcXHRxdW90YS1cXHUwMDNlY2hhcmdlX2FkZHJfZnJvbSA9IDA7XFxuIDc0NjpcXHRcXHRxdW90YS1cXHUwMDNlZXN6X2JwID0gMDtcXG4gNzQ3OlxcdFxcdHJldHVybiBxdW90YTtcXG4gNzQ4OlxcdH1cXG4gNzQ5OlxcdFxcbiA3NTA6XFx0c3RydWN0IGRhbW9zICpkYW1vbl9uZXdfc2NoZW1lKHN0cnVjdCBkYW1vc19hY2Nlc3NfcGF0dGVybiAqcGF0dGVybixcXG4gNzUxOlxcdFxcdFxcdFxcdGVudW0gZGFtb3NfYWN0aW9uIGFjdGlvbixcXG4gNzUyOlxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgYXBwbHlfaW50ZXJ2YWxfdXMsXFxuIDc1MzpcXHRcXHRcXHRcXHRzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhLFxcbiA3NTQ6XFx0XFx0XFx0XFx0c3RydWN0IGRhbW9zX3dhdGVybWFya3MgKndtYXJrcyxcXG4gNzU1OlxcdFxcdFxcdFxcdGludCB0YXJnZXRfbmlkKVxcbiA3NTY6XFx0e1xcbiA3NTc6XFx0XFx0c3RydWN0IGRhbW9zICpzY2hlbWU7XFxuIDc1ODpcXHRcXG4gNzU5OlxcdFxcdHNjaGVtZSA9IGttYWxsb2Nfb2JqKCpzY2hlbWUpO1xcbiA3NjA6XFx0XFx0aWYgKCFzY2hlbWUpXFxuIDc2MTpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gNzYyOlxcdFxcdHNjaGVtZS1cXHUwMDNlcGF0dGVybiA9ICpwYXR0ZXJuO1xcbiA3NjM6XFx0XFx0c2NoZW1lLVxcdTAwM2VhY3Rpb24gPSBhY3Rpb247XFxuIDc2NDpcXHRcXHRzY2hlbWUtXFx1MDAzZWFwcGx5X2ludGVydmFsX3VzID0gYXBwbHlfaW50ZXJ2YWxfdXM7XFxuIDc2NTpcXHRcXHQvKlxcbiA3NjY6XFx0XFx0ICogbmV4dF9hcHBseV9zaXMgd2lsbCBiZSBzZXQgd2hlbiBrZGFtb25kIHN0YXJ0cy4gIFdoaWxlIGtkYW1vbmQgaXNcXG4gNzY3OlxcdFxcdCAqIHJ1bm5pbmcsIGl0IHdpbGwgYWxzbyB1cGRhdGVkIHdoZW4gaXQgaXMgYWRkZWQgdG8gdGhlIERBTU9OIGNvbnRleHQsXFxuIDc2ODpcXHRcXHQgKiBvciBkYW1vbl9hdHRycyBhcmUgdXBkYXRlZC5cXG4gNzY5OlxcdFxcdCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMTo1NDoxNS4wOTA2ODMzMDlaIiwiU2VxIjo1NywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjMxNTYwNzM3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBIE1vbWVudCBvZiBEb3VidCwgVGhlbiBhIERlZXAgRGl2ZSBpbnRvIENvZGUqKlxuXG5Pa2F5LCBob2xkIG9uIGEgc2Vjb25kISBMaW5lIDc1OSBqdXN0IGp1bXBlZCBvdXQgYXQgbWU6IGBzY2hlbWUgPSBrbWFsbG9jX29iaigqc2NoZW1lKTtgIFdoeSBhcmUgd2UgYWxsb2NhdGluZyBhIG5ldyBgc2NoZW1lYCBvYmplY3QsIGFuZCB3aGF0IGV4YWN0bHkgaXMgZ29pbmcgb24gaGVyZT8gVGhlIGZhY3QgdGhhdCB3ZSdyZSByZWFsbG9jYXRpbmcsIHN1Z2dlc3RzIHRoZSBvcmlnaW5hbCBvYmplY3QncyBkYXRhIGFyZSBsb3N0LCBhbmQgaXQncyBub3QgaW1tZWRpYXRlbHkgY2xlYXIgd2hhdCdzIGhhcHBlbmluZyB0byB0aGUgY3VycmVudCB2YWx1ZSBvZiBgc2NoZW1lLVx1MDAzZXF1b3RhYC4gVGhhdOKAmXMgYSBjcml0aWNhbCBwaWVjZSBvZiBpbmZvcm1hdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBiZXR0ZXIuIE9rYXksIEknbSBoZWFkaW5nIHRvIGBtbS9kYW1vbi9jb3JlLmNgLCBzcGVjaWZpY2FsbHkgbGluZXMgNzY1IHRocm91Z2ggODAwLiBMZXQncyBzZWUgd2hhdCB0aGUgc3Vic2VxdWVudCBjb2RlIGRvZXMgd2l0aCB0aGF0IHN0cnVjdHVyZS4gSeKAmW0gaG9waW5nIGl04oCZcyBhbGwgY3J5c3RhbCBjbGVhciBhZnRlciBsb29raW5nIGF0IHRob3NlIGxpbmVzLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGlzIHJlYWxsb2NhdGlvbiBpc24ndCBnb2luZyB0byBpbnRyb2R1Y2UgYSBzdWJ0bGUgbWVtb3J5IGxlYWsgb3IsIGV2ZW4gd29yc2UsIGRhdGEgY29ycnVwdGlvbiByZWxhdGVkIHRvIHF1b3Rhcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAxNjgsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDExOjU0OjE3LjQwNjI5MzExNVoiLCJTZXEiOjU4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjU0MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDc2NSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDc2NTpcXHRcXHQvKlxcbiA3NjY6XFx0XFx0ICogbmV4dF9hcHBseV9zaXMgd2lsbCBiZSBzZXQgd2hlbiBrZGFtb25kIHN0YXJ0cy4gIFdoaWxlIGtkYW1vbmQgaXNcXG4gNzY3OlxcdFxcdCAqIHJ1bm5pbmcsIGl0IHdpbGwgYWxzbyB1cGRhdGVkIHdoZW4gaXQgaXMgYWRkZWQgdG8gdGhlIERBTU9OIGNvbnRleHQsXFxuIDc2ODpcXHRcXHQgKiBvciBkYW1vbl9hdHRycyBhcmUgdXBkYXRlZC5cXG4gNzY5OlxcdFxcdCAqL1xcbiA3NzA6XFx0XFx0c2NoZW1lLVxcdTAwM2VuZXh0X2FwcGx5X3NpcyA9IDA7XFxuIDc3MTpcXHRcXHRzY2hlbWUtXFx1MDAzZXdhbGtfY29tcGxldGVkID0gZmFsc2U7XFxuIDc3MjpcXHRcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2c2NoZW1lLVxcdTAwM2Vjb3JlX2ZpbHRlcnMpO1xcbiA3NzM6XFx0XFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNnNjaGVtZS1cXHUwMDNlb3BzX2ZpbHRlcnMpO1xcbiA3NzQ6XFx0XFx0c2NoZW1lLVxcdTAwM2VzdGF0ID0gKHN0cnVjdCBkYW1vc19zdGF0KXt9O1xcbiA3NzU6XFx0XFx0c2NoZW1lLVxcdTAwM2VtYXhfbnJfc25hcHNob3RzID0gMDtcXG4gNzc2OlxcdFxcdHNjaGVtZS1cXHUwMDNlbGFzdF9hcHBsaWVkID0gTlVMTDtcXG4gNzc3OlxcdFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZzY2hlbWUtXFx1MDAzZWxpc3QpO1xcbiA3Nzg6XFx0XFxuIDc3OTpcXHRcXHRzY2hlbWUtXFx1MDAzZXF1b3RhID0gKihkYW1vc19xdW90YV9pbml0KHF1b3RhKSk7XFxuIDc4MDpcXHRcXHQvKiBxdW90YS5nb2FscyBzaG91bGQgYmUgc2VwYXJhdGVseSBzZXQgYnkgY2FsbGVyICovXFxuIDc4MTpcXHRcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2c2NoZW1lLVxcdTAwM2VxdW90YS5nb2Fscyk7XFxuIDc4MjpcXHRcXG4gNzgzOlxcdFxcdHNjaGVtZS1cXHUwMDNld21hcmtzID0gKndtYXJrcztcXG4gNzg0OlxcdFxcdHNjaGVtZS1cXHUwMDNld21hcmtzLmFjdGl2YXRlZCA9IHRydWU7XFxuIDc4NTpcXHRcXG4gNzg2OlxcdFxcdHNjaGVtZS1cXHUwMDNlbWlncmF0ZV9kZXN0cyA9IChzdHJ1Y3QgZGFtb3NfbWlncmF0ZV9kZXN0cyl7fTtcXG4gNzg3OlxcdFxcdHNjaGVtZS1cXHUwMDNldGFyZ2V0X25pZCA9IHRhcmdldF9uaWQ7XFxuIDc4ODpcXHRcXG4gNzg5OlxcdFxcdHJldHVybiBzY2hlbWU7XFxuIDc5MDpcXHR9XFxuIDc5MTpcXHRcXG4gNzkyOlxcdHN0YXRpYyB2b2lkIGRhbW9zX3NldF9uZXh0X2FwcGx5X3NpcyhzdHJ1Y3QgZGFtb3MgKnMsIHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG4gNzkzOlxcdHtcXG4gNzk0OlxcdFxcdHVuc2lnbmVkIGxvbmcgc2FtcGxlX2ludGVydmFsID0gY3R4LVxcdTAwM2VhdHRycy5zYW1wbGVfaW50ZXJ2YWwgP1xcbiA3OTU6XFx0XFx0XFx0Y3R4LVxcdTAwM2VhdHRycy5zYW1wbGVfaW50ZXJ2YWwgOiAxO1xcbiA3OTY6XFx0XFx0dW5zaWduZWQgbG9uZyBhcHBseV9pbnRlcnZhbCA9IHMtXFx1MDAzZWFwcGx5X2ludGVydmFsX3VzID9cXG4gNzk3OlxcdFxcdFxcdHMtXFx1MDAzZWFwcGx5X2ludGVydmFsX3VzIDogY3R4LVxcdTAwM2VhdHRycy5hZ2dyX2ludGVydmFsO1xcbiA3OTg6XFx0XFxuIDc5OTpcXHRcXHRzLVxcdTAwM2VuZXh0X2FwcGx5X3NpcyA9IGN0eC1cXHUwMDNlcGFzc2VkX3NhbXBsZV9pbnRlcnZhbHMgK1xcbiA4MDA6XFx0XFx0XFx0YXBwbHlfaW50ZXJ2YWwgLyBzYW1wbGVfaW50ZXJ2YWw7XFxuIDgwMTpcXHR9XFxuIDgwMjpcXHRcXG4gODAzOlxcdHZvaWQgZGFtb25fYWRkX3NjaGVtZShzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vcyAqcylcXG4gODA0OlxcdHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTE6NTQ6MTcuNDA2NDYwNTY1WiIsIlNlcSI6NTksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQ2MzI1NDAyMTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgZGFtb3NfcXVvdGFfaW5pdGAgRnVuY3Rpb24gYW5kIGl0cyBVc2UqKlxuXG5Pa2F5LCBob2xkIG9uIGEgbWludXRlLiBMZXQgbWUgZm9jdXMgb24gdGhpcyBgZGFtb3NfcXVvdGFfaW5pdGAgZnVuY3Rpb24uIEl0IHNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIGluaXRpYWxpemluZyB0aGUgZmllbGRzIG9mIGEgYGRhbW9zX3F1b3RhYCBzdHJ1Y3R1cmUgdG8gdGhlaXIgZGVmYXVsdCB2YWx1ZXM6IHplcm9pbmcgb3V0IHRoZSBzaXplIGFuZCB0aW1pbmcgcmVsYXRlZCB2YXJpYWJsZXMsIGFsb25nIHdpdGggdGhlIHBvaW50ZXJzLiAgTm93IEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIHF1b3RhIHN0cnVjdHVyZSBpcyBhY3R1YWxseSAqdXNlZCouIFdoZXJlIGlzIHRoaXMgYHF1b3RhYCB2YXJpYWJsZSBiZWluZyBpbml0aWFsaXplZCBhbmQgcGFzc2VkIGFyb3VuZD9cblxuVGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHRyYWNlIHdoZXJlIGBkYW1vbl9uZXdfc2NoZW1lYCBpcyBiZWluZyBjYWxsZWQsIGFzIHRoZSBgcXVvdGFgIGFyZ3VtZW50IG9mIGBkYW1vc19xdW90YV9pbml0YCBpcyBwYXNzZWQgdG8gYGRhbW9uX25ld19zY2hlbWVgXG5cbkxvb2tpbmcgYXQgdGhlIGNhbGwgc2l0ZXMsIEkgc2VlIHR3bzogYGRhbW9uX2NvbW1pdF9zY2hlbWVzYCBhbmQgYGRhbW9uX2xydV9zb3J0X25ld19zY2hlbWVgLiBJbiB0aGUgZmlyc3QgY2FzZSwgYHNyY19zY2hlbWUtXHUwMDNlcXVvdGFgIGlzIHBhc3NlZCwgc28gSSBuZWVkIHRvIHRyYWNrIHRoZSBvcmlnaW4gb2YgdGhhdC4gVGhlIG90aGVyIGNhc2UgaXMgdGhyb3VnaCBgZGFtb25fbHJ1X3NvcnRfbmV3X3NjaGVtZWAuIE9rYXksIHNvIGxldCdzIHNlZSB3aGF0IGlzIGhhcHBlbmluZyBpbnNpZGUgYGRhbW9uX2xydV9zb3J0X25ld19zY2hlbWVgIG5leHQuIFRoaXMgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgaG93IHRoaXMgcXVvdGEgaXMgYmVpbmcgc2V0IHVwIGluIHRoZSBiaWdnZXIgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTExMDksIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMTo1NDoyMi4wMzkwMDMxODZaIiwiU2VxIjo2MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODM5NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vbHJ1X3NvcnQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxODUsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxODU6XFx0c3RhdGljIHN0cnVjdCBkYW1vbl9jdHggKmN0eDtcXG4gMTg2OlxcdHN0YXRpYyBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0YXJnZXQ7XFxuIDE4NzpcXHRcXG4gMTg4OlxcdHN0YXRpYyBzdHJ1Y3QgZGFtb3MgKmRhbW9uX2xydV9zb3J0X25ld19zY2hlbWUoXFxuIDE4OTpcXHRcXHRcXHRzdHJ1Y3QgZGFtb3NfYWNjZXNzX3BhdHRlcm4gKnBhdHRlcm4sIGVudW0gZGFtb3NfYWN0aW9uIGFjdGlvbilcXG4gMTkwOlxcdHtcXG4gMTkxOlxcdFxcdHN0cnVjdCBkYW1vc19xdW90YSBxdW90YSA9IGRhbW9uX2xydV9zb3J0X3F1b3RhO1xcbiAxOTI6XFx0XFxuIDE5MzpcXHRcXHQvKiBVc2UgaGFsZiBvZiB0b3RhbCBxdW90YSBmb3IgaG90L2NvbGQgcGFnZXMgc29ydGluZyAqL1xcbiAxOTQ6XFx0XFx0cXVvdGEubXMgPSBxdW90YS5tcyAvIDI7XFxuIDE5NTpcXHRcXG4gMTk2OlxcdFxcdHJldHVybiBkYW1vbl9uZXdfc2NoZW1lKFxcbiAxOTc6XFx0XFx0XFx0XFx0LyogZmluZCB0aGUgcGF0dGVybiwgYW5kICovXFxuIDE5ODpcXHRcXHRcXHRcXHRwYXR0ZXJuLFxcbiAxOTk6XFx0XFx0XFx0XFx0LyogKGRlKXByaW9yaXRpemUgb24gTFJVLWxpc3RzICovXFxuIDIwMDpcXHRcXHRcXHRcXHRhY3Rpb24sXFxuIDIwMTpcXHRcXHRcXHRcXHQvKiBmb3IgZWFjaCBhZ2dyZWdhdGlvbiBpbnRlcnZhbCAqL1xcbiAyMDI6XFx0XFx0XFx0XFx0MCxcXG4gMjAzOlxcdFxcdFxcdFxcdC8qIHVuZGVyIHRoZSBxdW90YS4gKi9cXG4gMjA0OlxcdFxcdFxcdFxcdFxcdTAwMjZxdW90YSxcXG4gMjA1OlxcdFxcdFxcdFxcdC8qIChEZSlhY3RpdmF0ZSB0aGlzIGFjY29yZGluZyB0byB0aGUgd2F0ZXJtYXJrcy4gKi9cXG4gMjA2OlxcdFxcdFxcdFxcdFxcdTAwMjZkYW1vbl9scnVfc29ydF93bWFya3MsXFxuIDIwNzpcXHRcXHRcXHRcXHROVU1BX05PX05PREUpO1xcbiAyMDg6XFx0fVxcbiAyMDk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDExOjU0OjIyLjAzOTA4OTMyNloiLCJTZXEiOjYxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyNzkwODAxMDk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgSSBkZWx2ZSBpbnRvIHRoaXMgY29kZTpcblxuKipBbmFseXppbmcgREFNT04ncyBNZW1vcnkgUmVjbGFtYXRpb24gUXVvdGEqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGhvdyBEQU1PTiBoYW5kbGVzIGl0cyBtZW1vcnkgcmVjbGFtYXRpb24gcXVvdGFzLiBJdCBzZWVtcyBsaWtlIGEgZmV3IGtleSB2YXJpYWJsZXMgYXJlIGF0IHBsYXkgaGVyZS4gRmlyc3QsIGluIGBkYW1vbl9scnVfc29ydF9xdW90YWAsIEkgc2VlIGEgZ2xvYmFsIHZhcmlhYmxlLCBpbml0aWFsaXplZCB0byB6ZXJvLiBUaGF0J3MgZ29vZCB0byBrbm93IOKAkyBpdCBzZXRzIGEgYmFzZWxpbmUsIHByZXN1bWFibHkgZm9yIHRyYWNraW5nIHNvbWV0aGluZyByZWxhdGVkIHRvIExSVSBzb3J0aW5nIGFuZCBxdW90YSBtYW5hZ2VtZW50LiBUaGVuLCBsb29raW5nIGF0IGBkYW1vbl9yZWNsYWltX25ld19zY2hlbWVgLCBJIGZpbmQgYW5vdGhlciBvbmU6IGBkYW1vbl9yZWNsYWltX3F1b3RhYCwgYWxzbyBhIHN0YXRpYyBnbG9iYWwuIFNvLCB3ZSd2ZSBnb3QgYXQgbGVhc3QgdHdvIHN0YXRpYyBnbG9iYWwgdmFyaWFibGVzIGhlcmUgaGFuZGxpbmcgcXVvdGEgbWVjaGFuaXNtcywgd2hpY2ggaXMgdHlwaWNhbCBmb3IgcGVyZm9ybWFuY2UtY3JpdGljYWwgb3BlcmF0aW9ucy4gTGV0J3MgZGlnIGRlZXBlcjsgdG8gYmUgdGhvcm91Z2gsIEkgc2hvdWxkIG5vdyBtb3ZlIG9uIGFuZCBjaGVjayB0aGUgYGRhbW9uX3N5c2ZzX21rX3NjaGVtZWAgZnVuY3Rpb24g4oCTIHRoYXQncyBvZnRlbiB3aGVyZSB0aGUga25vYnMgZ2V0IHR1cm5lZCwgc28gdGhhdCdzIG15IG5leHQgc3RvcC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIwMDksIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDExOjU0OjI0LjgyOTg5MzAxNFoiLCJTZXEiOjYyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjUxMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMwMTUsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjMwMTU6XFx0XFx0XFx0LmZhaWxfY2hhcmdlX2Rlbm9tID0gc3lzZnNfcXVvdGFzLVxcdTAwM2VmYWlsX2NoYXJnZV9kZW5vbSxcXG4zMDE2OlxcdFxcdH07XFxuMzAxNzpcXHRcXHRzdHJ1Y3QgZGFtb3Nfd2F0ZXJtYXJrcyB3bWFya3MgPSB7XFxuMzAxODpcXHRcXHRcXHQubWV0cmljID0gc3lzZnNfd21hcmtzLVxcdTAwM2VtZXRyaWMsXFxuMzAxOTpcXHRcXHRcXHQuaW50ZXJ2YWwgPSBzeXNmc193bWFya3MtXFx1MDAzZWludGVydmFsX3VzLFxcbjMwMjA6XFx0XFx0XFx0LmhpZ2ggPSBzeXNmc193bWFya3MtXFx1MDAzZWhpZ2gsXFxuMzAyMTpcXHRcXHRcXHQubWlkID0gc3lzZnNfd21hcmtzLVxcdTAwM2VtaWQsXFxuMzAyMjpcXHRcXHRcXHQubG93ID0gc3lzZnNfd21hcmtzLVxcdTAwM2Vsb3csXFxuMzAyMzpcXHRcXHR9O1xcbjMwMjQ6XFx0XFxuMzAyNTpcXHRcXHRzY2hlbWUgPSBkYW1vbl9uZXdfc2NoZW1lKFxcdTAwMjZwYXR0ZXJuLCBzeXNmc19zY2hlbWUtXFx1MDAzZWFjdGlvbixcXG4zMDI2OlxcdFxcdFxcdFxcdHN5c2ZzX3NjaGVtZS1cXHUwMDNlYXBwbHlfaW50ZXJ2YWxfdXMsIFxcdTAwMjZxdW90YSwgXFx1MDAyNndtYXJrcyxcXG4zMDI3OlxcdFxcdFxcdFxcdHN5c2ZzX3NjaGVtZS1cXHUwMDNldGFyZ2V0X25pZCk7XFxuMzAyODpcXHRcXHRpZiAoIXNjaGVtZSlcXG4zMDI5OlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbjMwMzA6XFx0XFxuMzAzMTpcXHRcXHRlcnIgPSBkYW1vc19zeXNmc19hZGRfcXVvdGFfc2NvcmUoc3lzZnNfcXVvdGFzLVxcdTAwM2Vnb2FscywgXFx1MDAyNnNjaGVtZS1cXHUwMDNlcXVvdGEpO1xcbjMwMzI6XFx0XFx0aWYgKGVycikge1xcbjMwMzM6XFx0XFx0XFx0ZGFtb25fZGVzdHJveV9zY2hlbWUoc2NoZW1lKTtcXG4zMDM0OlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbjMwMzU6XFx0XFx0fVxcbjMwMzY6XFx0XFxuMzAzNzpcXHRcXHRlcnIgPSBkYW1vbl9zeXNmc19hZGRfc2NoZW1lX2ZpbHRlcnMoc2NoZW1lLCBzeXNmc19zY2hlbWUtXFx1MDAzZWNvcmVfZmlsdGVycyk7XFxuMzAzODpcXHRcXHRpZiAoZXJyKSB7XFxuMzAzOTpcXHRcXHRcXHRkYW1vbl9kZXN0cm95X3NjaGVtZShzY2hlbWUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMTo1NDoyNC44MzAwMzUzNzRaIiwiU2VxIjo2MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6ODQ3ODYyMjY1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBEQU1PTidzIFF1b3RhIEhhbmRsaW5nKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJbiBgZGFtb25fc3lzZnNfbWtfc2NoZW1lYCwgSSBzZWUgYHN0cnVjdCBkYW1vc19xdW90YSBxdW90YSA9IHsgLi4uIH07YCBiZWluZyBpbml0aWFsaXplZCB3aXRoIGRlc2lnbmF0ZWQgaW5pdGlhbGl6ZXJzLiBUaGlzIGlzIHByZXR0eSBzdGFuZGFyZCwgYnV0IHRoZSBpbXBvcnRhbnQgYml0IGlzIHRoYXQgYW55IHVuc3BlY2lmaWVkIGZpZWxkcyBhcmUgemVyb2VkIG91dC4gVGhhdCAqc2hvdWxkKiBpbmNsdWRlIGBtaW5fc2NvcmVgIGFuZCBwYWRkaW5nLiBOb3csIGhhbmcgb24gYSBzZWNvbmQuLi4gd2hhdCBhYm91dCBgZGFtb3NfcXVvdGFfaW5pdGA/IEkgbmVlZCB0byBrZWVwIHRoYXQgZnVuY3Rpb24gaW4gbWluZCwgYXMgaXQgY291bGQgYmUgaW1wb3J0YW50LlxuXG5SaWdodCwgbG9va2luZyBmdXJ0aGVyLCBpbiBgZGFtb25fbmV3X3NjaGVtZWAsIGl0IGFwcGVhcnMgbGlrZSB0aGlzIGlzIHdoYXQncyBoYXBwZW5pbmc6XG5gc2NoZW1lID0ga21hbGxvY19vYmooKnNjaGVtZSk7YFxuYHNjaGVtZS1cdTAwM2VxdW90YSA9ICooZGFtb3NfcXVvdGFfaW5pdChxdW90YSkpO2BcblNvIHdlIGFyZSBhc3NpZ25pbmcgdGhlIHJlc3VsdCBvZiBgZGFtb3NfcXVvdGFfaW5pdGAgdG8gdGhlIGFsbG9jYXRlZCBzY2hlbWUuXG5cbk5vdywgSSdtIGdldHRpbmcgYSBsaXR0bGUgY29uY2VybmVkLiBJZiBgZGFtb3NfcXVvdGFfaXNfZnVsbGAgcmV0dXJucyB0cnVlLCBpcyBgbWluX3Njb3JlYCBldmVuICpyZWFkKiBhbnl3aGVyZT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdyBoZXJlLiBXaGVyZSBkb2VzIGV4ZWN1dGlvbiBnbyBpZiBgZGFtb3NfcXVvdGFfaXNfZnVsbGAgaXMgdHJ1ZT8gSSBuZWVkIHRvIHRyYWNrIHRoaXMgZG93bi5cblxuTGV0J3MgbG9vayBhdCBga2RhbW9uZF9hcHBseV9zY2hlbWVzYCBhbmQgZm9sbG93IHRoZSBleGVjdXRpb24gZmxvdy4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgcGFyc2UgdGhpcyBhbmQgZm9jdXMgb24gdGhlIGltcG9ydGFudCBwYXJ0cy5cblxuT2theSwgaGVyZSdzIHdoYXQncyBoYXBwZW5pbmc6IFdlIGl0ZXJhdGUgdGhyb3VnaCB0aGUgc2NoZW1lcy4gSWYgYHRpbWVfYmVmb3JlKGMtXHUwMDNlcGFzc2VkX3NhbXBsZV9pbnRlcnZhbHMsIHMtXHUwMDNlbmV4dF9hcHBseV9zaXMpYCBpcyB0cnVlLCB3ZSBgY29udGludWVgLiBJZiBgIXMtXHUwMDNld21hcmtzLmFjdGl2YXRlZGAgd2UgYGNvbnRpbnVlYC4gU28sIGlmIHRoZSBzY2hlbWUgaGFzICpwYXNzZWQqIHRoZSBzYW1wbGluZyBpbnRlcnZhbCwgYW5kIGlzIGBhY3RpdmF0ZWRgIHRoZW4gaXQncyBlbGlnaWJsZSB0byBhcHBseS5cbklmIHRoZXJlIGFyZSBzY2hlbWVzIHRvIGFwcGx5LCB3ZSBncmFiIHRoZSBtYXggcmVnaW9uIHNpemUgZnJvbSBgZGFtb25fcmVnaW9uX3N6X2xpbWl0KGMpYC5cblxuVGhlbiwgd2UgbG9jayB0aGUgYHdhbGtfY29udHJvbF9sb2NrYC4gQWZ0ZXIgdGhhdCwgd2UgZ28gdGhyb3VnaCB0aGUgdGFyZ2V0cy5cblxuSW5zaWRlIHRoZSB0YXJnZXQgbG9vcCwgdGhlcmUncyBhIGNoZWNrOiBgaWYgKGMtXHUwMDNlb3BzLnRhcmdldF92YWxpZCBcdTAwMjZcdTAwMjYgYy1cdTAwM2VvcHMudGFyZ2V0X3ZhbGlkKHQpID09IGZhbHNlKWAuIFRoaXMgc2VlbXMgdG8gYmUgc29tZSBraW5kIG9mIHZhbGlkaXR5IGNoZWNrIG9uIHRoZSB0YXJnZXQsIEknbGwgaGF2ZSB0byBzZWUgd2hlcmUgdGhhdCBmdW5jdGlvbiBpcyBkZWZpbmVkLiBJZiB0aGUgdGFyZ2V0IGlzbid0IHZhbGlkLCB3ZSBuZWVkIHRvIGNsZWFyIHRoZSBxdW90YSBhc3NvY2lhdGVkIHdpdGggdGhhdCB0YXJnZXQsIGlmIHRoZSBxdW90YSBpcyBhc3NvY2lhdGVkIHdpdGggdGhhdCB0YXJnZXQuXG5cblRoZW4sIGltcG9ydGFudGx5LCBgZGFtb3NfYXBwbHlfdGFyZ2V0KGMsIHQsIG1heF9yZWdpb25fc3opYCBpcyBjYWxsZWQuIEkgbmVlZCB0byBkaWcgaW50byB0aGF0IGZ1bmN0aW9uIG5vdyB0byB1bmRlcnN0YW5kIHdoYXQncyBoYXBwZW5pbmcgYW5kIGZpZ3VyZSBvdXQgbXkgZWFybGllciBxdWVzdGlvbnMgYWJvdXQgYG1pbl9zY29yZWAuIExldCdzIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNzU4LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDY4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTE6NTQ6MzMuMzA4NjYwNDU4WiIsIlNlcSI6NjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTg2MDE2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vc19hcHBseV90YXJnZXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb25cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vY29yZS5jPTI3NzA9c3RhdGljIHZvaWQgZGFtb25fZG9fYXBwbHlfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjLFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTI4MDQtLypcXG5tbS9kYW1vbi9jb3JlLmM6MjgwNTogKiBkYW1vc19hcHBseV90YXJnZXQoKSAtIEFwcGx5IERBTU9TIHNjaGVtZXMgdG8gYSBnaXZlbiB0YXJnZXQuXFxubW0vZGFtb24vY29yZS5jLTI4MDYtICogQGM6XFx0XFx0XFx0bW9uaXRvcmluZyBjb250ZXh0IHRvIGFwcGx5IGl0cyBEQU1PUyBzY2hlbWVzIHRvLi5cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yODIxLSAqL1xcbm1tL2RhbW9uL2NvcmUuYzoyODIyOnN0YXRpYyB2b2lkIGRhbW9zX2FwcGx5X3RhcmdldChzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxcbm1tL2RhbW9uL2NvcmUuYy0yODIzLVxcdFxcdHVuc2lnbmVkIGxvbmcgbWF4X3JlZ2lvbl9zeilcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0zMzg3PXN0YXRpYyB2b2lkIGtkYW1vbmRfYXBwbHlfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTM0MjAtXFx0XFx0fVxcbm1tL2RhbW9uL2NvcmUuYzozNDIxOlxcdFxcdGRhbW9zX2FwcGx5X3RhcmdldChjLCB0LCBtYXhfcmVnaW9uX3N6KTtcXG5tbS9kYW1vbi9jb3JlLmMtMzQyMi1cXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDExOjU0OjMzLjM1ODUyMzg0N1oiLCJTZXEiOjY1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo1MzkxMzY1NzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2Ygd2hhdCBJIHdvdWxkIGJlIHRoaW5raW5nLCBmb3JtYXR0ZWQgYXMgcmVxdWVzdGVkOlxuXG4qKkFuYWx5emluZyB0aGUgQXBwbGljYXRpb24gU2NoZW1lcyoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlnIGluLiBUaGUgdGFzayBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiBMZXQncyBnZXQgaW50byBgZGFtb25fZG9fYXBwbHlfc2NoZW1lc2AgYW5kIGBkYW1vc19hcHBseV90YXJnZXRgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgdHdvIGNvbXBvbmVudHMgaW50ZXJhY3QgYW5kLCBtb3JlIGltcG9ydGFudGx5LCBob3cgdGhleSByZWxhdGUgdG8gdGhlIGJpZ2dlciBwaWN0dXJlIG9mIHRoZSBvdmVyYWxsIHN5c3RlbS4gSSdtIGFscmVhZHkgYW50aWNpcGF0aW5nIHNvbWUgaW50ZXJlc3RpbmcgZGVzaWduIGNob2ljZXMgYW5kIHBvdGVudGlhbCBhcmVhcyBmb3Igb3B0aW1pemF0aW9uLCBkZXBlbmRpbmcgb24gdGhlIGFyY2hpdGVjdHVyZS4gSSdsbCBiZSBsb29raW5nIGZvciB0aGUgc3BlY2lmaWMgbWV0aG9kb2xvZ2llcyBhbmQgbG9naWMgb2YgdGhlIHN5c3RlbS4gSSdsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGFwcGxpY2F0aW9uIHNjaGVtZSBpbXBsZW1lbnRhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQxNjAsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMTo1NDozOC43NDk4OTMxNjdaIiwiU2VxIjo2NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc4NDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2RhbW9uL2NvcmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNzcwLFxuICBcIkxpbmVDb3VudFwiOiA0NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyNzcwOlxcdHN0YXRpYyB2b2lkIGRhbW9uX2RvX2FwcGx5X3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqYyxcXG4yNzcxOlxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXFxuMjc3MjpcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyKVxcbjI3NzM6XFx0e1xcbjI3NzQ6XFx0XFx0c3RydWN0IGRhbW9zICpzO1xcbjI3NzU6XFx0XFxuMjc3NjpcXHRcXHRkYW1vbl9mb3JfZWFjaF9zY2hlbWUocywgYykge1xcbjI3Nzc6XFx0XFx0XFx0c3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSA9IFxcdTAwMjZzLVxcdTAwM2VxdW90YTtcXG4yNzc4OlxcdFxcbjI3Nzk6XFx0XFx0XFx0aWYgKHRpbWVfYmVmb3JlKGMtXFx1MDAzZXBhc3NlZF9zYW1wbGVfaW50ZXJ2YWxzLCBzLVxcdTAwM2VuZXh0X2FwcGx5X3NpcykpXFxuMjc4MDpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4yNzgxOlxcdFxcbjI3ODI6XFx0XFx0XFx0aWYgKCFzLVxcdTAwM2V3bWFya3MuYWN0aXZhdGVkKVxcbjI3ODM6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMjc4NDpcXHRcXG4yNzg1OlxcdFxcdFxcdC8qIENoZWNrIHRoZSBxdW90YSAqL1xcbjI3ODY6XFx0XFx0XFx0aWYgKGRhbW9zX3F1b3RhX2lzX2Z1bGwocXVvdGEsIGMtXFx1MDAzZW1pbl9yZWdpb25fc3opKVxcbjI3ODc6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMjc4ODpcXHRcXG4yNzg5OlxcdFxcdFxcdGlmIChkYW1vc19za2lwX2NoYXJnZWRfcmVnaW9uKHQsIHIsIHMsIGMtXFx1MDAzZW1pbl9yZWdpb25fc3opKVxcbjI3OTA6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMjc5MTpcXHRcXG4yNzkyOlxcdFxcdFxcdGlmIChzLVxcdTAwM2VtYXhfbnJfc25hcHNob3RzIFxcdTAwMjZcXHUwMDI2XFxuMjc5MzpcXHRcXHRcXHRcXHRcXHRzLVxcdTAwM2VtYXhfbnJfc25hcHNob3RzIFxcdTAwM2M9IHMtXFx1MDAzZXN0YXQubnJfc25hcHNob3RzKVxcbjI3OTQ6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMjc5NTpcXHRcXG4yNzk2OlxcdFxcdFxcdGlmIChkYW1vc192YWxpZF90YXJnZXQoYywgciwgcykpXFxuMjc5NzpcXHRcXHRcXHRcXHRkYW1vc19hcHBseV9zY2hlbWUoYywgdCwgciwgcyk7XFxuMjc5ODpcXHRcXG4yNzk5OlxcdFxcdFxcdGlmIChkYW1vbl9pc19sYXN0X3JlZ2lvbihyLCB0KSlcXG4yODAwOlxcdFxcdFxcdFxcdHMtXFx1MDAzZXN0YXQubnJfc25hcHNob3RzKys7XFxuMjgwMTpcXHRcXHR9XFxuMjgwMjpcXHR9XFxuMjgwMzpcXHRcXG4yODA0OlxcdC8qXFxuMjgwNTpcXHQgKiBkYW1vc19hcHBseV90YXJnZXQoKSAtIEFwcGx5IERBTU9TIHNjaGVtZXMgdG8gYSBnaXZlbiB0YXJnZXQuXFxuMjgwNjpcXHQgKiBAYzpcXHRcXHRcXHRtb25pdG9yaW5nIGNvbnRleHQgdG8gYXBwbHkgaXRzIERBTU9TIHNjaGVtZXMgdG8uLlxcbjI4MDc6XFx0ICogQHQ6XFx0XFx0XFx0bW9uaXRvcmluZyB0YXJnZXQgdG8gYXBwbHkgdGhlIHNjaGVtZXMgdG8uXFxuMjgwODpcXHQgKiBAbWF4X3JlZ2lvbl9zejpcXHRtYXhpbXVtIHJlZ2lvbiBzaXplIGZvciBAYy5cXG4yODA5OlxcdCAqXFxuMjgxMDpcXHQgKiBUaGlzIGZ1bmN0aW9uIGNvdWxkIHNwbGl0IHJlZ2lvbnMgZm9yIGtlZXBpbmcgdGhlIHF1b3RhLiAgVG8gbWluaW1pemVcXG4yODExOlxcdCAqIG92ZXJoZWFkIGZyb20gdGhlIHNwbGl0IG9wZXJhdGlvbnMgaW5jcmVhc2VkIG51bWJlciBvZiByZWdpb25zLCB0aGlzXFxuMjgxMjpcXHQgKiBmdW5jdGlvbiB3aWxsIGFsc28gbWVyZ2UgcmVnaW9ucyBhZnRlciB0aGUgc2NoZW1lcyBhcHBseWluZyBhdHRlbXB0IGlzIGRvbmUsXFxuMjgxMzpcXHQgKiBmb3IgZWFjaCByZWdpb24uICBUaGUgbWVyZ2Ugb3BlcmF0aW9uIGlzIG1hZGUgb25seSB3aGVuIGl0IGRvZXNuJ3QgbG9zZSB0aGVcXG4yODE0OlxcdCAqIG1vbml0b3JpbmcgaW5mb3JtYXRpb24gYW5kIG5vdCB2aW9sYXRpbmcgQG1heF9yZWdpb25fc3ouXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDExOjU0OjM4Ljc1MDA3MzY4N1oiLCJTZXEiOjY3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo2NTI2MDAwNTUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFF1b3RhLVJlbGF0ZWQgT3B0aW1pemF0aW9uKipcblxuT2theSwgaGVyZSB3ZSBnby4gTGV0J3MgZGlnIGludG8gbGluZSAyNzg2IG9mIHRoaXMgY29kZS4gUmlnaHQsIHNvIGlmIGBkYW1vc19xdW90YV9pc19mdWxsYCByZXR1cm5zIHRydWUsIGl0J3MgYSBkaXJlY3QgYGNvbnRpbnVlYC4gVGhlIHNjaGVtZSBhcHBsaWNhdGlvbiBpcyAqY29tcGxldGVseSogYnlwYXNzZWQuIEludGVyZXN0aW5nLiBTbywgYGRhbW9zX3ZhbGlkX3RhcmdldGAgaXNuJ3QgZXZlbiBjaGVja2VkIGlmIHRoZSBxdW90YSBpcyBmdWxsLiBUaGF0J3MgYSBrZXkgb2JzZXJ2YXRpb24uXG5cbk5vdywgdGhpbmtpbmcgYWJvdXQgYGRhbW9zX2FkanVzdF9xdW90YWAsIGl0IGxvb2tzIGxpa2UgdGhlIG9sZCB2ZXJzaW9uIHdhcyBpbmVmZmljaWVudC4gSXQgd2FzIHVwZGF0aW5nIHRoZSBxdW90YSB3aW5kb3cgY29ycmVjdGx5IGlmIGV4cGlyZWQsIGJ1dCB0aGVuIGl0J2Qgc3RpbGwgY2FsY3VsYXRlIGhpc3RvZ3JhbXMgYW5kIHNldCBgcXVvdGEtXHUwMDNlbWluX3Njb3JlYCAqZXZlbiBpZiogdGhlIHF1b3RhIHdhcyBhbHJlYWR5IGZ1bGwuIFRoYXQncyBhIGRlZmluaXRlIHJlZHVuZGFuY3kuXG5cblNvIHRoZSBjaGFuZ2UgaW4gdGhlIGNvbW1pdCBtYWtlcyBzZW5zZSwgb3B0aW1pemluZyBiYXNlZCBvbiB0aGUgZnVsbC1xdW90YSBzdGF0ZS4uLiBidXQgSSB3b25kZXIgKndoeSogdGhpcyBvcHRpbWl6YXRpb24gd2FzIGRlZW1lZCBuZWNlc3NhcnkuIFdlcmUgdGhlcmUgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MsIG9yIHdlcmUgdGhleSBqdXN0IHRyeWluZyB0byBiZSB0aWR5PyBJJ20gZ29pbmcgdG8gY2hlY2sgdGhlIGdpdCBsb2cuIENvbnRleHQgaXMga2luZywgYW5kIHNpbWlsYXIgY29tbWl0cyBtaWdodCBzaGluZSBsaWdodCBvbiB0aGlzLiBUaGlzIG9wdGltaXphdGlvbiBjb3VsZCBoYXZlIHNpZ25pZmljYW50IGVmZmVjdHMgaWYgdGhpcyBpcyBmcmVxdWVudGx5IGNhbGxlZCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGludGVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUwNjcsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOTksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMTo1NDo0NS4yNzYwNzcwMloiLCJTZXEiOjY4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcwNTAwNTM3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vc19hZGp1c3RfcXVvdGFcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vY29yZS5jPTMyOTA9c3RhdGljIHZvaWQgZGFtb3NfdHJhY2VfZXN6KHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vcyAqcyxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zMzAzLVxcbm1tL2RhbW9uL2NvcmUuYzozMzA0OnN0YXRpYyB2b2lkIGRhbW9zX2FkanVzdF9xdW90YShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb3MgKnMpXFxubW0vZGFtb24vY29yZS5jLTMzMDUte1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTMzODc9c3RhdGljIHZvaWQga2RhbW9uZF9hcHBseV9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmMpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzQwMi1cXG5tbS9kYW1vbi9jb3JlLmM6MzQwMzpcXHRcXHRkYW1vc19hZGp1c3RfcXVvdGEoYywgcyk7XFxubW0vZGFtb24vY29yZS5jLTM0MDQtXFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMTo1NDo0Ni45ODEwOTA0NTRaIiwiU2VxIjo2OSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTQxMDgzNzM2OTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIGBkYW1vc19hZGp1c3RfcXVvdGFgIEZ1bmN0aW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZXhhbWluZSB0aGUgY29yZSBsb2dpYzogaWYgYHF1b3RhLVx1MDAzZWNoYXJnZWRfc3pgIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBgcXVvdGEtXHUwMDNlZXN6YCwgdGhlbiBgZGFtb3NfcXVvdGFfaXNfZnVsbGAgaXMgdHJ1ZSwgcmlnaHQ/IE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGF0IGNvbmRpdGlvbiBhbmQgd2hhdCBoYXBwZW5zIGlmIHdlIHNraXAgc29tZSBzZXR1cCBzdGVwcy5cblxuSSBzZWUgdGhhdCB3aGVuIGBkYW1vc19xdW90YV9pc19mdWxsYCBpcyB0cnVlLCB0aGUgY29kZSBoYXMgdGhlc2UgYHJldHVybmAgc3RhdGVtZW50czpcbmBgYGNcblx0aWYgKGRhbW9zX3F1b3RhX2lzX2Z1bGwocXVvdGEsIGMtXHUwMDNlbWluX3JlZ2lvbl9zeikpXG5cdFx0cmV0dXJuO1xuXHRpZiAoIWMtXHUwMDNlb3BzLmdldF9zY2hlbWVfc2NvcmUpXG5cdFx0cmV0dXJuO1xuYGBgXG53aGljaCB3aWxsIGxlYWQgdG8gYW4gZWFybHkgZXhpdC4gVGhpcyBtZWFucyBpdCAqYXZvaWRzKiB0aGUgbG9vcCB0aGF0IHdvdWxkIGluaXRpYWxpemUgYW5kIHBvcHVsYXRlIGBjLVx1MDAzZXJlZ2lvbnNfc2NvcmVfaGlzdG9ncmFtYC4gVGhhdCBtYWtlcyBtZSB0aGluay4uLiBpcyB0aGlzIGJ5cGFzc2luZyBzb21lIGltcG9ydGFudCBpbml0aWFsaXphdGlvbiBvciBzb21lIG90aGVyIG9wZXJhdGlvbj8gVGhlIGNvZGUgaXMgc3VwcG9zZWQgdG8gc3RhcnQgd2l0aDpcbmBgYGNcblx0XHRtZW1zZXQoYy1cdTAwM2VyZWdpb25zX3Njb3JlX2hpc3RvZ3JhbSwgMCxcblx0XHRcdFx0c2l6ZW9mKCpjLVx1MDAzZXJlZ2lvbnNfc2NvcmVfaGlzdG9ncmFtKSAqXG5cdFx0XHRcdChEQU1PU19NQVhfU0NPUkUgKyAxKSk7XG5cdFx0ZGFtb25fZm9yX2VhY2hfdGFyZ2V0KHQsIGMpIHtcbi4uLlxuYGBgXG5JJ20gd29uZGVyaW5nLCBpZiBgZGFtb3NfYWRqdXN0X3F1b3RhYCByZXR1cm5zIGVhcmx5IGJlY2F1c2Ugb2YgdGhhdCBjaGVjaywgdGhlbiBgYy1cdTAwM2VyZWdpb25zX3Njb3JlX2hpc3RvZ3JhbWAgbWlnaHQgcmVtYWluIHVuaW5pdGlhbGl6ZWQuIEkgaGF2ZSB0byBmaWd1cmUgb3V0IGlmIHRoYXQgY2F1c2VzIGEgcHJvYmxlbSBsYXRlci4gSXMgYGMtXHUwMDNlcmVnaW9uc19zY29yZV9oaXN0b2dyYW1gIGV2ZXIgcmVhZCBvdXRzaWRlIG9mIHRoYXQgbWFpbiBsb29wIGluIGBkYW1vc19hZGp1c3RfcXVvdGFgPyBJIG5lZWQgdG8ga25vdyB3aGVyZSB0aGlzIHZhcmlhYmxlIGlzIHVzZWQuIExldCBtZSBnbyBmaW5kIGl0IHdpdGggYSBxdWljayBncmVwIHRvIGJlIHN1cmUhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1ODQ5LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDExOjU1OjAxLjA4OTQ2NjMwNVoiLCJTZXEiOjcwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU5NTk0MzM1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyZWdpb25zX3Njb3JlX2hpc3RvZ3JhbVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2RhbW9uLmg9ODk3PXN0cnVjdCBkYW1vbl9jdHgge1xcbi0tXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTkyMC1cXHQvKiBmb3Igc2NoZW1lIHF1b3RhcyBwcmlvcml0aXphdGlvbiAqL1xcbmluY2x1ZGUvbGludXgvZGFtb24uaDo5MjE6XFx0dW5zaWduZWQgbG9uZyAqcmVnaW9uc19zY29yZV9oaXN0b2dyYW07XFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTkyMi1cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0zMzA0PXN0YXRpYyB2b2lkIGRhbW9zX2FkanVzdF9xdW90YShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb3MgKnMpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzM0NC1cXHQvKiBGaWxsIHVwIHRoZSBzY29yZSBoaXN0b2dyYW0gKi9cXG5tbS9kYW1vbi9jb3JlLmM6MzM0NTpcXHRtZW1zZXQoYy1cXHUwMDNlcmVnaW9uc19zY29yZV9oaXN0b2dyYW0sIDAsXFxubW0vZGFtb24vY29yZS5jOjMzNDY6XFx0XFx0XFx0c2l6ZW9mKCpjLVxcdTAwM2VyZWdpb25zX3Njb3JlX2hpc3RvZ3JhbSkgKlxcbm1tL2RhbW9uL2NvcmUuYy0zMzQ3LVxcdFxcdFxcdChEQU1PU19NQVhfU0NPUkUgKyAxKSk7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzM1NC1cXHRcXHRcXHRzY29yZSA9IGMtXFx1MDAzZW9wcy5nZXRfc2NoZW1lX3Njb3JlKGMsIHIsIHMpO1xcbm1tL2RhbW9uL2NvcmUuYzozMzU1OlxcdFxcdFxcdGMtXFx1MDAzZXJlZ2lvbnNfc2NvcmVfaGlzdG9ncmFtW3Njb3JlXSArPVxcbm1tL2RhbW9uL2NvcmUuYy0zMzU2LVxcdFxcdFxcdFxcdGRhbW9uX3N6X3JlZ2lvbihyKTtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zMzYzLVxcdGZvciAoY3VtdWxhdGVkX3N6ID0gMCwgc2NvcmUgPSBtYXhfc2NvcmU7IDsgc2NvcmUtLSkge1xcbm1tL2RhbW9uL2NvcmUuYzozMzY0OlxcdFxcdGN1bXVsYXRlZF9zeiArPSBjLVxcdTAwM2VyZWdpb25zX3Njb3JlX2hpc3RvZ3JhbVtzY29yZV07XFxubW0vZGFtb24vY29yZS5jLTMzNjUtXFx0XFx0aWYgKGN1bXVsYXRlZF9zeiBcXHUwMDNlPSBxdW90YS1cXHUwMDNlZXN6IHx8ICFzY29yZSlcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0zOTIwPXN0YXRpYyBpbnQga2RhbW9uZF9mbih2b2lkICpkYXRhKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTM5MzUtXFx0XFx0Y3R4LVxcdTAwM2VvcHMuaW5pdChjdHgpO1xcbm1tL2RhbW9uL2NvcmUuYzozOTM2OlxcdGN0eC1cXHUwMDNlcmVnaW9uc19zY29yZV9oaXN0b2dyYW0gPSBrbWFsbG9jX2FycmF5KERBTU9TX01BWF9TQ09SRSArIDEsXFxubW0vZGFtb24vY29yZS5jOjM5Mzc6XFx0XFx0XFx0c2l6ZW9mKCpjdHgtXFx1MDAzZXJlZ2lvbnNfc2NvcmVfaGlzdG9ncmFtKSwgR0ZQX0tFUk5FTCk7XFxubW0vZGFtb24vY29yZS5jOjM5Mzg6XFx0aWYgKCFjdHgtXFx1MDAzZXJlZ2lvbnNfc2NvcmVfaGlzdG9ncmFtKVxcbm1tL2RhbW9uL2NvcmUuYy0zOTM5LVxcdFxcdGdvdG8gZG9uZTtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy00MDY3LVxcbm1tL2RhbW9uL2NvcmUuYzo0MDY4OlxcdGtmcmVlKGN0eC1cXHUwMDNlcmVnaW9uc19zY29yZV9oaXN0b2dyYW0pO1xcbm1tL2RhbW9uL2NvcmUuYy00MDY5LVxcdG11dGV4X2xvY2soXFx1MDAyNmN0eC1cXHUwMDNlY2FsbF9jb250cm9sc19sb2NrKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTE6NTU6MDIuNjg1NDE1NDkxWiIsIlNlcSI6NzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE2NTE1MDA5MzE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEFzc2Vzc21lbnQ6IE5vIFJpc2sgb2YgVW5pbml0aWFsaXplZCBNZW1vcnkgVXNhZ2UqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGFuYWx5c2lzIGZvY3VzZXMgb24gdGhlIGludHJvZHVjZWQgY29kZSdzIHBvdGVudGlhbCB0byBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZSBjb3JlIGNoYW5nZSBpcyBhIHNpbmdsZSBgaWZgIHN0YXRlbWVudCwgYGlmIChkYW1vc19xdW90YV9pc19mdWxsKHF1b3RhLCBjLVx1MDAzZW1pbl9yZWdpb25fc3opKSByZXR1cm47YCwgYWRkZWQgdG8gYGRhbW9zX2FkanVzdF9xdW90YSgpYC4gVGhpcyBhY3RzIGFzIGFuIG9wdGltaXphdGlvbiwgc2hvcnQtY2lyY3VpdGluZyB0aGUgcXVvdGEgYWRqdXN0bWVudCBwcm9jZXNzIGlmIHRoZSBxdW90YSBpcyBhbHJlYWR5IGV4aGF1c3RlZC5cblxuVGhlIGtleSBvYnNlcnZhdGlvbiBpcyBob3cgYGMtXHUwMDNlcmVnaW9uc19zY29yZV9oaXN0b2dyYW1gIGlzIGhhbmRsZWQuIEl0J3MgKm9ubHkqIHVzZWQgd2l0aGluIGBkYW1vc19hZGp1c3RfcXVvdGEoKWAuIENydWNpYWxseSwgcmlnaHQgYXQgdGhlIHN0YXJ0IG9mIHRoZSBibG9jayB0aGF0IHVzZXMgaXQsIHRoZXJlJ3MgYSBgbWVtc2V0KClgIHRoYXQgZXhwbGljaXRseSB6ZXJvZXMgdGhlIGVudGlyZSBoaXN0b2dyYW0uIFRoaXMgZ3VhcmFudGVlcyB0aGF0IGFueSByZWFkIGZyb20gaXQgaXMgZnJvbSBpbml0aWFsaXplZCBtZW1vcnkuIFRoZSBoaXN0b2dyYW0gaXMgYnVpbHQgYW5kIGltbWVkaWF0ZWx5IGNvbnN1bWVkIHdpdGhpbiB0aGUgZnVuY3Rpb247IGl0cyB2YWx1ZXMgYXJlIG5vdCBwZXJzaXN0ZWQgb3IgZXhwb3NlZCBlbHNld2hlcmUuIGBxdW90YS1cdTAwM2VtaW5fc2NvcmVgIGlzIGFsc28gaW5pdGlhbGl6ZWQgdXBvbiBhbGxvY2F0aW9uIGFuZCByZWNhbGN1bGF0ZWQgd2l0aGluIHRoZSBmdW5jdGlvbiwgYnV0IGl0IGlzIG5vdCBldmVuIHVzZWQgaW4gYGRhbW9uX2RvX2FwcGx5X3NjaGVtZXNgIGlmIHRoZSBxdW90YSBpcyBmdWxsLCBtYWtpbmcgdGhlIGNhbGN1bGF0aW9uIHJlZHVuZGFudC4gRXZlbiBpZiBpdCB3ZXJlIGxhdGVyIGNoZWNrZWQsIGl0IHdvdWxkIGJlIHJlY2FsY3VsYXRlZCBhbmQgc28gbm8gaXNzdWUuXG5cblRoZXJlZm9yZSwgdGhlIHBhdGNoIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgZGVwZW5kZW5jaWVzIGluIGNvbmRpdGlvbmFsIGxvZ2ljLCBjb21wbGV4IGRhdGEgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uIGlzc3Vlcywgb3IgYnVmZmVyIG92ZXJydW4gcG9zc2liaWxpdGllcy4gVGhlIGFkZGVkIGBkYW1vc19xdW90YV9pc19mdWxsYCBjaGVjayB1c2VzIGluaXRpYWxpemVkIHZhcmlhYmxlcyAoYHF1b3RhYCBhbmQgYGMtXHUwMDNlbWluX3JlZ2lvbl9zemApLiBUaGUgaGlzdG9ncmFtLCB0aGUgbW9zdCBzZW5zaXRpdmUgcGFydCwgaXMgZXhwbGljaXRseSB6ZXJvZWQgYmVmb3JlIHVzZS5cblxuVGhlIG92ZXJhbGwgY29uY2VybiBpcyBpZiB0aGlzIHBhdGNoIGxlYWRzIHRvIGEgc2NlbmFyaW8gdGhhdCBhbGxvd3MgdGhlIGtlcm5lbCB0byByZWFkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCB3aGljaCBpc24ndCB0aGUgY2FzZSBoZXJlLiBUaGlzIGlzIHB1cmUgbG9naWMvb3B0aW1pemF0aW9uLiBBIEtNU0FOIGFuYWx5c2lzIGlzIG5vdCBuZWVkZWQgaGVyZTsgc3RhbmRhcmQgc2FuaXRpemVycyB3aWxsIGFkZXF1YXRlbHkgZGV0ZWN0IG1lbW9yeSBjb3JydXB0aW9uLiBXZSBjYW4ganVzdGlmeSB0aGUgbmVlZCBmb3IgS01TQU4gd2l0aCB0aGUgZm9sbG93aW5nIHJlYXNvbmluZzogdGhlIHBhdGNoIHNpbXBseSBhZGRzIGFuIGVhcmx5IHJldHVybiBpbiBgZGFtb3NfYWRqdXN0X3F1b3RhKClgIGlmIHRoZSBxdW90YSBpcyBmdWxsLCBhdm9pZGluZyBidWlsZGluZyBgYy1cdTAwM2VyZWdpb25zX3Njb3JlX2hpc3RvZ3JhbWAgYW5kIHVwZGF0aW5nIGBxdW90YS1cdTAwM2VtaW5fc2NvcmVgLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkIG9yIGxlYWtlZC4gYGMtXHUwMDNlcmVnaW9uc19zY29yZV9oaXN0b2dyYW1gIGlzIG9ubHkgYWNjZXNzZWQgd2l0aGluIGBkYW1vc19hZGp1c3RfcXVvdGEoKWAgYW5kIGlzIGFsd2F5cyBleHBsaWNpdGx5IHplcm9lZCB3aXRoIGBtZW1zZXQoKWAgYmVmb3JlIHVzZS4gS0FTQU4gaXMgc3VmZmljaWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTcyMzQsIk91dHB1dFRva2VucyI6MTcwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE0OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMTo1NToxOS4yMDA0MjczNTZaIiwiU2VxIjo3MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTk3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYW4gZWFybHkgcmV0dXJuIGluIGRhbW9zX2FkanVzdF9xdW90YSgpIGlmIHRoZSBxdW90YSBpcyBhbHJlYWR5IGV4aGF1c3RlZCAoZGFtb3NfcXVvdGFfaXNfZnVsbCgpKS4gVGhpcyBza2lwcyByZWNhbGN1bGF0aW9uIG9mIHRoZSBzY2hlbWUgc2NvcmUgaGlzdG9ncmFtIGFuZCBtaW5fc2NvcmUuXFxuXFxuTm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3IgbWVtb3J5IGFsbG9jYXRpb25zIGFyZSBpbnRyb2R1Y2VkIG9yIHJlYWQuIFRoZSBza2lwcGVkIGhpc3RvZ3JhbSBidWZmZXIgKGMtXFx1MDAzZXJlZ2lvbnNfc2NvcmVfaGlzdG9ncmFtKSBpcyBzdHJpY3RseSBpbnRlcm5hbCB0byB0aGlzIGZ1bmN0aW9uIGFuZCBpcyBhbHdheXMgemVyb2VkIHZpYSBtZW1zZXQoKSBwcmlvciB0byB1c2Ugd2hlbiBhY2Nlc3NlZC4gTm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSBvciB1c2VkIGluIHVuaW5pdGlhbGl6ZWQgc3RhdGUuIEFueSBwb3RlbnRpYWwgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcykgd291bGQgYmUgZGV0ZWN0ZWQgYnkgc3RhbmRhcmQgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gcnVuIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhbiBlYXJseSByZXR1cm4gaW4gZGFtb3NfYWRqdXN0X3F1b3RhKCkgaWYgdGhlIHF1b3RhIGlzIGFscmVhZHkgZXhoYXVzdGVkIChkYW1vc19xdW90YV9pc19mdWxsKCkpLiBUaGlzIHNraXBzIHJlY2FsY3VsYXRpb24gb2YgdGhlIHNjaGVtZSBzY29yZSBoaXN0b2dyYW0gYW5kIG1pbl9zY29yZS5cXG5cXG5ObyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBtZW1vcnkgYWxsb2NhdGlvbnMgYXJlIGludHJvZHVjZWQgb3IgcmVhZC4gVGhlIHNraXBwZWQgaGlzdG9ncmFtIGJ1ZmZlciAoYy1cXHUwMDNlcmVnaW9uc19zY29yZV9oaXN0b2dyYW0pIGlzIHN0cmljdGx5IGludGVybmFsIHRvIHRoaXMgZnVuY3Rpb24gYW5kIGlzIGFsd2F5cyB6ZXJvZWQgdmlhIG1lbXNldCgpIHByaW9yIHRvIHVzZSB3aGVuIGFjY2Vzc2VkLiBObyBkYXRhIGlzIGNvcGllZCB0byB1c2VyIHNwYWNlIG9yIHVzZWQgaW4gdW5pbml0aWFsaXplZCBzdGF0ZS4gQW55IHBvdGVudGlhbCBtZW1vcnkgc2FmZXR5IGlzc3VlcyAoc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzKSB3b3VsZCBiZSBkZXRlY3RlZCBieSBzdGFuZGFyZCBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBydW4gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflownw88z[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-13 11:16:41 +0000 UTC FinishedAt: 2026-09-13 11:55:21 +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": "383fc05d4650b021f3c17e36a145106dcc61a294", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_SYSFS", "DAMON_PADDR", "DAMON_VADDR", "DAMON_RECLAIM" ], "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": "383fc05d4650b021f3c17e36a145106dcc61a294", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_SYSFS", "DAMON_PADDR", "DAMON_VADDR", "DAMON_RECLAIM" ], "series_id": "32f09c4e-3877-49c0-8c0b-a92117e19643" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "damos_adjust_quota", "kdamond_apply_schemes" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "", "base_commit": "383fc05d4650b021f3c17e36a145106dcc61a294", "base_tree": "mm-new" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDExOjUyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBTU9OJiMzNDssCiAgICAmIzM0O0RBTU9OX1NZU0ZTJiMzNDssCiAgICAmIzM0O0RBTU9OX1BBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX1ZBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX1JFQ0xBSU0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkYW1vc19hZGp1c3RfcXVvdGEmIzM0OywKICAgICYjMzQ7a2RhbW9uZF9hcHBseV9zY2hlbWVzJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhbiBlYXJseSByZXR1cm4gaW4gZGFtb3NfYWRqdXN0X3F1b3RhKCkgaWYgdGhlIHF1b3RhIGlzIGFscmVhZHkgZXhoYXVzdGVkIChkYW1vc19xdW90YV9pc19mdWxsKCkpLiBUaGlzIHNraXBzIHJlY2FsY3VsYXRpb24gb2YgdGhlIHNjaGVtZSBzY29yZSBoaXN0b2dyYW0gYW5kIG1pbl9zY29yZS5cblxuTm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3IgbWVtb3J5IGFsbG9jYXRpb25zIGFyZSBpbnRyb2R1Y2VkIG9yIHJlYWQuIFRoZSBza2lwcGVkIGhpc3RvZ3JhbSBidWZmZXIgKGMtXHUwMDNlcmVnaW9uc19zY29yZV9oaXN0b2dyYW0pIGlzIHN0cmljdGx5IGludGVybmFsIHRvIHRoaXMgZnVuY3Rpb24gYW5kIGlzIGFsd2F5cyB6ZXJvZWQgdmlhIG1lbXNldCgpIHByaW9yIHRvIHVzZSB3aGVuIGFjY2Vzc2VkLiBObyBkYXRhIGlzIGNvcGllZCB0byB1c2VyIHNwYWNlIG9yIHVzZWQgaW4gdW5pbml0aWFsaXplZCBzdGF0ZS4gQW55IHBvdGVudGlhbCBtZW1vcnkgc2FmZXR5IGlzc3VlcyAoc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzKSB3b3VsZCBiZSBkZXRlY3RlZCBieSBzdGFuZGFyZCBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBydW4gaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBpbiBEQU1PTiAobW0vZGFtb24vY29yZS5jKSBieSBpbnRyb2R1Y2luZyBhbiBlYXJseSBleGl0IGNoZWNrIGluIGRhbW9zX2FkanVzdF9xdW90YSgpIHdoZW4gdGhlIHF1b3RhIGlzIGFscmVhZHkgZnVsbC4gVGhpcyBhdm9pZHMgdW5uZWNlc3NhcnkgcmVnaW9uIHNjb3JlIGhpc3RvZ3JhbSBjYWxjdWxhdGlvbnMuIEJlY2F1c2UgdGhpcyBjaGFuZ2VzIHJlYWNoYWJsZSBleGVjdXRpb24gbG9naWMgaW4gYSBjb3JlIE1NIHN1YnN5c3RlbSBhY2Nlc3NpYmxlIHZpYSBEQU1PTiBzeXNmcyBhbmQgbW9kdWxlIGludGVyZmFjZXMgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBpdCBpcyB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDExOjUyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNzcwZjI5MDA3OTY4ZTgzYzk5NjczMDhjMWRjNjJhMTk5MWZkZjYzMVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gU2VwIDEzIDExOjUyOjAzIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL2NvcmUuYyBiL21tL2RhbW9uL2NvcmUuY1xuaW5kZXggMGM5OGY3ZTI2N2QwNy4uM2Q3YTk3M2VhOGI2ZiAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL2NvcmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vY29yZS5jXG5AQCAtMzMzNiw2ICYjNDM7MzMzNiw4IEBAIHN0YXRpYyB2b2lkIGRhbW9zX2FkanVzdF9xdW90YShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb3MgKnMpXG4gXHRcdFx0ZGFtb3NfdHJhY2VfZXN6KGMsIHMsIHF1b3RhKTtcbiBcdH1cbiBcbiYjNDM7XHRpZiAoZGFtb3NfcXVvdGFfaXNfZnVsbChxdW90YSwgYy1cdTAwM2VtaW5fcmVnaW9uX3N6KSlcbiYjNDM7XHRcdHJldHVybjtcbiBcdGlmICghYy1cdTAwM2VvcHMuZ2V0X3NjaGVtZV9zY29yZSlcbiBcdFx0cmV0dXJuO1xuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDExOjUyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBTU9OJiMzNDssCiAgICAmIzM0O0RBTU9OX1NZU0ZTJiMzNDssCiAgICAmIzM0O0RBTU9OX1BBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX1ZBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX1JFQ0xBSU0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkYW1vc19hZGp1c3RfcXVvdGEmIzM0OywKICAgICYjMzQ7a2RhbW9uZF9hcHBseV9zY2hlbWVzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgaW4gREFNT04gKG1tL2RhbW9uL2NvcmUuYykgYnkgaW50cm9kdWNpbmcgYW4gZWFybHkgZXhpdCBjaGVjayBpbiBkYW1vc19hZGp1c3RfcXVvdGEoKSB3aGVuIHRoZSBxdW90YSBpcyBhbHJlYWR5IGZ1bGwuIFRoaXMgYXZvaWRzIHVubmVjZXNzYXJ5IHJlZ2lvbiBzY29yZSBoaXN0b2dyYW0gY2FsY3VsYXRpb25zLiBCZWNhdXNlIHRoaXMgY2hhbmdlcyByZWFjaGFibGUgZXhlY3V0aW9uIGxvZ2ljIGluIGEgY29yZSBNTSBzdWJzeXN0ZW0gYWNjZXNzaWJsZSB2aWEgREFNT04gc3lzZnMgYW5kIG1vZHVsZSBpbnRlcmZhY2VzIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgaXQgaXMgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDc3MGYyOTAwNzk2OGU4M2M5OTY3MzA4YzFkYzYyYTE5OTFmZGY2MzEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU3VuIFNlcCAxMyAxMTo1MjowMyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL2RhbW9uL2NvcmUuYyBiL21tL2RhbW9uL2NvcmUuYwppbmRleCAwYzk4ZjdlMjY3ZDA3Li4zZDdhOTczZWE4YjZmIDEwMDY0NAotLS0gYS9tbS9kYW1vbi9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vY29yZS5jCkBAIC0zMzM2LDYgJiM0MzszMzM2LDggQEAgc3RhdGljIHZvaWQgZGFtb3NfYWRqdXN0X3F1b3RhKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vcyAqcykKIAkJCWRhbW9zX3RyYWNlX2VzeihjLCBzLCBxdW90YSk7CiAJfQogCiYjNDM7CWlmIChkYW1vc19xdW90YV9pc19mdWxsKHF1b3RhLCBjLSZndDttaW5fcmVnaW9uX3N6KSkKJiM0MzsJCXJldHVybjsKIAlpZiAoIWMtJmd0O29wcy5nZXRfc2NoZW1lX3Njb3JlKQogCQlyZXR1cm47CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTE6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg1OQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI4MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBEQU1PTiBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYG1tL2RhbW9uL2NvcmUuY2AuIEl0JiMzOTtzIGZvY3VzZWQgYXJvdW5kIHRoZSBgZGFtb3NfYWRqdXN0X3F1b3RhYCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IGxpbmUgMzMzNi4gVGhlIGtleSBhZGRpdGlvbiBzZWVtcyB0byBiZSB0aGlzIGNoZWNrOiBgaWYgKGRhbW9zX3F1b3RhX2lzX2Z1bGwocXVvdGEsIGMtJmd0O21pbl9yZWdpb25fc3opKSByZXR1cm47YC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgd2hhdCB0aGlzIGBkYW1vc19xdW90YV9pc19mdWxsYCBmdW5jdGlvbiBhY3R1YWxseSBkb2VzIGFuZCBpdHMgaW1wbGljYXRpb25zLgoKSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgaGVyZS4gSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciB0aGUgcHVycG9zZSBvZiBgZGFtb3NfYWRqdXN0X3F1b3RhYCwgaXRzIGludGVyYWN0aW9uIHdpdGggdGhlIERBTU9OIHN1YnN5c3RlbSwgYW5kIGl0cyByb2xlIGluIG1lbW9yeSBtYW5hZ2VtZW50IG9wdGltaXphdGlvbi4gV2hhdCBhcmUgaXRzIGNhbGxlcnMgYW5kIHdoYXQgZG9lcyB0aGlzIGNoYW5nZSBtb2RpZnk/IEl0JiMzOTtzIGFsbCBhYm91dCBob3cgd2UgYWRqdXN0IHRoZSBxdW90YXMuCgpJIHNob3VsZCBhbHNvIGNvbnNpZGVyIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBEQU1PTi4gQXJlIHRoZXJlIGFueSByZWxldmFudCBjb25maWd1cmF0aW9ucyB0aGF0IGNvdWxkIGltcGFjdCB0aGUgYmVoYXZpb3Igb2YgdGhpcyBwYXRjaD8gVGhlIGBjLSZndDttaW5fcmVnaW9uX3N6YCBpcyBpbXBvcnRhbnQsIHNvIEkgbmVlZCB0byBrbm93IGhvdyB0aGF0JiMzOTtzIGRlZmluZWQsIHVzZWQsIGFuZCBzZXQuIEkmIzM5O2xsIG5lZWQgdG8gdHJhY2UgdGhlIHVzYWdlIG9mIHRoZXNlIHZhcmlhYmxlcyBhbmQgdW5kZXJzdGFuZCB0aGVpciBpbmZsdWVuY2UuCgpTbywgSSBuZWVkIHRvIHVzZSBgcmVhZC1maWxlYCB0byBnZXQgdGhlIGNvbnRleHQgYXJvdW5kIGxpbmUgMzMzNiwgYW5kIGZpZ3VyZSBvdXQgd2hhdCYjMzk7cyBnb2luZyBvbiB3aXRoIHRoZSBxdW90YSBhZGp1c3RtZW50cy4gVGhlbiBJIG5lZWQgdG8gY29uZmlybSByZWFjaGFiaWxpdHkgYW5kIHBvdGVudGlhbCBpc3N1ZXMgaW50cm9kdWNlZCBieSB0aGlzIHNlZW1pbmdseSBzaW1wbGUgY29uZGl0aW9uYWwgc3RhdGVtZW50LiBUaGlzIGlzIGEgcG90ZW50aWFsIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiBvciBjaGFuZ2UgaW4gYmVoYXZpb3IuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTE6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMzIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzMzMjA6XHRcdFx0XHRkYW1vc190cmFjZV9lc3ooYywgcywgcXVvdGEpO1xuMzMyMTpcdFx0fVxuMzMyMjpcdFxuMzMyMzpcdFx0LyogTmV3IGNoYXJnZSB3aW5kb3cgc3RhcnRzICovXG4zMzI0Olx0XHRpZiAoIXRpbWVfaW5fcmFuZ2Vfb3BlbihqaWZmaWVzLCBxdW90YS1cdTAwM2VjaGFyZ2VkX2Zyb20sXG4zMzI1Olx0XHRcdFx0XHRxdW90YS1cdTAwM2VjaGFyZ2VkX2Zyb20gJiM0MztcbjMzMjY6XHRcdFx0XHRcdG1zZWNzX3RvX2ppZmZpZXMocXVvdGEtXHUwMDNlcmVzZXRfaW50ZXJ2YWwpKSkge1xuMzMyNzpcdFx0XHRpZiAoZGFtb3NfcXVvdGFfaXNfZnVsbChxdW90YSwgYy1cdTAwM2VtaW5fcmVnaW9uX3N6KSlcbjMzMjg6XHRcdFx0XHRzLVx1MDAzZXN0YXQucXRfZXhjZWVkcyYjNDM7JiM0Mzs7XG4zMzI5Olx0XHRcdHF1b3RhLVx1MDAzZXRvdGFsX2NoYXJnZWRfc3ogJiM0Mzs9IHF1b3RhLVx1MDAzZWNoYXJnZWRfc3o7XG4zMzMwOlx0XHRcdHF1b3RhLVx1MDAzZWNoYXJnZWRfZnJvbSA9IGppZmZpZXM7XG4zMzMxOlx0XHRcdHF1b3RhLVx1MDAzZWNoYXJnZWRfc3ogPSAwO1xuMzMzMjpcdFx0XHRpZiAodHJhY2VfZGFtb3NfZXN6X2VuYWJsZWQoKSlcbjMzMzM6XHRcdFx0XHRjYWNoZWRfZXN6ID0gcXVvdGEtXHUwMDNlZXN6O1xuMzMzNDpcdFx0XHRkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhKGMsIHMpO1xuMzMzNTpcdFx0XHRpZiAodHJhY2VfZGFtb3NfZXN6X2VuYWJsZWQoKSBcdTAwMjZcdTAwMjYgcXVvdGEtXHUwMDNlZXN6ICE9IGNhY2hlZF9lc3opXG4zMzM2Olx0XHRcdFx0ZGFtb3NfdHJhY2VfZXN6KGMsIHMsIHF1b3RhKTtcbjMzMzc6XHRcdH1cbjMzMzg6XHRcbjMzMzk6XHRcdGlmIChkYW1vc19xdW90YV9pc19mdWxsKHF1b3RhLCBjLVx1MDAzZW1pbl9yZWdpb25fc3opKVxuMzM0MDpcdFx0XHRyZXR1cm47XG4zMzQxOlx0XHRpZiAoIWMtXHUwMDNlb3BzLmdldF9zY2hlbWVfc2NvcmUpXG4zMzQyOlx0XHRcdHJldHVybjtcbjMzNDM6XHRcbjMzNDQ6XHRcdC8qIEZpbGwgdXAgdGhlIHNjb3JlIGhpc3RvZ3JhbSAqL1xuMzM0NTpcdFx0bWVtc2V0KGMtXHUwMDNlcmVnaW9uc19zY29yZV9oaXN0b2dyYW0sIDAsXG4zMzQ2Olx0XHRcdFx0c2l6ZW9mKCpjLVx1MDAzZXJlZ2lvbnNfc2NvcmVfaGlzdG9ncmFtKSAqXG4zMzQ3Olx0XHRcdFx0KERBTU9TX01BWF9TQ09SRSAmIzQzOyAxKSk7XG4zMzQ4Olx0XHRkYW1vbl9mb3JfZWFjaF90YXJnZXQodCwgYykge1xuMzM0OTpcdFx0XHRkYW1vbl9mb3JfZWFjaF9yZWdpb24ociwgdCkge1xuMzM1MDpcdFx0XHRcdGlmICghX19kYW1vc192YWxpZF90YXJnZXQociwgcywgYykpXG4zMzUxOlx0XHRcdFx0XHRjb250aW51ZTtcbjMzNTI6XHRcdFx0XHRpZiAoZGFtb3NfY29yZV9maWx0ZXJfb3V0KGMsIHQsIHIsIHMpKVxuMzM1MzpcdFx0XHRcdFx0Y29udGludWU7XG4zMzU0Olx0XHRcdFx0c2NvcmUgPSBjLVx1MDAzZW9wcy5nZXRfc2NoZW1lX3Njb3JlKGMsIHIsIHMpO1xuMzM1NTpcdFx0XHRcdGMtXHUwMDNlcmVnaW9uc19zY29yZV9oaXN0b2dyYW1bc2NvcmVdICYjNDM7PVxuMzM1NjpcdFx0XHRcdFx0ZGFtb25fc3pfcmVnaW9uKHIpO1xuMzM1NzpcdFx0XHRcdGlmIChzY29yZSBcdTAwM2UgbWF4X3Njb3JlKVxuMzM1ODpcdFx0XHRcdFx0bWF4X3Njb3JlID0gc2NvcmU7XG4zMzU5Olx0XHRcdH1cbjMzNjA6XHRcdH1cbjMzNjE6XHRcbjMzNjI6XHRcdC8qIFNldCB0aGUgbWluIHNjb3JlIGxpbWl0ICovXG4zMzYzOlx0XHRmb3IgKGN1bXVsYXRlZF9zeiA9IDAsIHNjb3JlID0gbWF4X3Njb3JlOyA7IHNjb3JlLS0pIHtcbjMzNjQ6XHRcdFx0Y3VtdWxhdGVkX3N6ICYjNDM7PSBjLVx1MDAzZXJlZ2lvbnNfc2NvcmVfaGlzdG9ncmFtW3Njb3JlXTtcbjMzNjU6XHRcdFx0aWYgKGN1bXVsYXRlZF9zeiBcdTAwM2U9IHF1b3RhLVx1MDAzZWVzeiB8fCAhc2NvcmUpXG4zMzY2Olx0XHRcdFx0YnJlYWs7XG4zMzY3Olx0XHR9XG4zMzY4Olx0XHRxdW90YS1cdTAwM2VtaW5fc2NvcmUgPSBzY29yZTtcbjMzNjk6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTE6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDMxNwoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDExNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEQU1PTiBBbmFseXNpcyAtIFF1aWNrIENoZWNrKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgZGFtb3NfYWRqdXN0X3F1b3RhYCwgYW5kIGl0JiMzOTtzIHJpZ2h0IHRoZXJlIGluIGBtbS9kYW1vbi9jb3JlLmNgLiBTdGFuZGFyZCBEQU1PTiB0ZXJyaXRvcnksIGFzIGV4cGVjdGVkLiBNeSBmaXJzdCBxdWVzdGlvbnMgYXJlIGFsd2F5cyBhYm91dCByZWFjaGFiaWxpdHkgYW5kIGZ1enppbmcgLSBpcyB0aGlzIGNvZGUgcGF0aCBleHBvc2VkIHRvIGFueSBpbnRlcmVzdGluZyBpbnB1dHMsIGFuZCBoYXZlIHdlIHRocm93biBldmVyeXRoaW5nIGF0IGl0IGFscmVhZHk/IFdlIHNob3VsZCBjaGVjayBmb3IgdXNlci1zcGFjZSBjb250cm9sLCB3aGljaCBpcyB0aGUgbW9zdCBsaWtlbHkgYXZlbnVlIGZvciBwcm9ibGVtcy4gQWgsIHllcywgREFNT04mIzM5O3Mgc3lzZnMgaW50ZXJmYWNlIChgL3N5cy9rZXJuZWwvbW0vZGFtb24vYWRtaW4vLi4uYCkgYW5kIGRlYnVnZnMgaW50ZXJmYWNlIChgL3N5cy9rZXJuZWwvZGVidWcvZGFtb24vLi4uYCkgLSB0aGF0JiMzOTtzIG91ciBlbnRyeSBwb2ludC4gTm93LCBsZXQmIzM5O3MganVzdCBxdWlja2x5IGNvbmZpcm0gdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24gdXNpbmcgS2NvbmZpZy4gQ2hlY2sgaWYgaXQmIzM5O3MgZXZlbiBlbmFibGVkIGFuZCBob3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTE6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIERBTU9OJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vS2NvbmZpZz0zPW1lbnUgXCYjMzQ7RGF0YSBBY2Nlc3MgTW9uaXRvcmluZ1wmIzM0O1xubW0vZGFtb24vS2NvbmZpZy00LVxubW0vZGFtb24vS2NvbmZpZzo1OmNvbmZpZyBEQU1PTlxubW0vZGFtb24vS2NvbmZpZy02LVx0Ym9vbCBcJiMzNDtEQU1PTjogRGF0YSBBY2Nlc3MgTW9uaXRvcmluZyBGcmFtZXdvcmtcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTE0LVxubW0vZGFtb24vS2NvbmZpZzoxNTpjb25maWcgREFNT05fREVCVUdfU0FOSVRZXG5tbS9kYW1vbi9LY29uZmlnLTE2LVx0Ym9vbCBcJiMzNDtDaGVjayBzYW5pdHkgb2YgREFNT04gY29kZVwmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctMjUtXG5tbS9kYW1vbi9LY29uZmlnOjI2OmNvbmZpZyBEQU1PTl9LVU5JVF9URVNUXG5tbS9kYW1vbi9LY29uZmlnLTI3LVx0Ym9vbCBcJiMzNDtUZXN0IGZvciBkYW1vblwmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4tLVxubW0vZGFtb24vS2NvbmZpZy0zNy1cbm1tL2RhbW9uL0tjb25maWc6Mzg6Y29uZmlnIERBTU9OX1ZBRERSXG5tbS9kYW1vbi9LY29uZmlnLTM5LVx0Ym9vbCBcJiMzNDtEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXNcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTQ2LVxubW0vZGFtb24vS2NvbmZpZzo0Nzpjb25maWcgREFNT05fUEFERFJcbm1tL2RhbW9uL0tjb25maWctNDgtXHRib29sIFwmIzM0O0RhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2VcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTU1LVxubW0vZGFtb24vS2NvbmZpZzo1Njpjb25maWcgREFNT05fVkFERFJfS1VOSVRfVEVTVFxubW0vZGFtb24vS2NvbmZpZy01Ny1cdGJvb2wgXCYjMzQ7VGVzdCBmb3IgREFNT04gb3BlcmF0aW9uc1wmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4tLVxubW0vZGFtb24vS2NvbmZpZy02Ny1cbm1tL2RhbW9uL0tjb25maWc6Njg6Y29uZmlnIERBTU9OX1NZU0ZTXG5tbS9kYW1vbi9LY29uZmlnLTY5LVx0Ym9vbCBcJiMzNDtEQU1PTiBzeXNmcyBpbnRlcmZhY2VcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTc1LVxubW0vZGFtb24vS2NvbmZpZzo3Njpjb25maWcgREFNT05fU1lTRlNfS1VOSVRfVEVTVFxubW0vZGFtb24vS2NvbmZpZy03Ny1cdGJvb2wgXCYjMzQ7VGVzdCBmb3IgZGFtb24gc3lzZnMgaW50ZXJmYWNlXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTg3LVxubW0vZGFtb24vS2NvbmZpZzo4ODpjb25maWcgREFNT05fUkVDTEFJTVxubW0vZGFtb24vS2NvbmZpZy04OS1cdGJvb2wgXCYjMzQ7QnVpbGQgREFNT04tYmFzZWQgcmVjbGFpbSAoREFNT05fUkVDTEFJTSlcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTk5LVxubW0vZGFtb24vS2NvbmZpZzoxMDA6Y29uZmlnIERBTU9OX0xSVV9TT1JUXG5tbS9kYW1vbi9LY29uZmlnLTEwMS1cdGJvb2wgXCYjMzQ7QnVpbGQgREFNT04tYmFzZWQgTFJVLWxpc3RzIHNvcnRpbmcgKERBTU9OX0xSVV9TT1JUKVwmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctMTA3LVxubW0vZGFtb24vS2NvbmZpZzoxMDg6Y29uZmlnIERBTU9OX1NUQVRcbm1tL2RhbW9uL0tjb25maWctMTA5LVx0Ym9vbCBcJiMzNDtCdWlsZCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIHN0YXQgKERBTU9OX1NUQVQpXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy0xMTUtXG5tbS9kYW1vbi9LY29uZmlnOjExNjpjb25maWcgREFNT05fU1RBVF9FTkFCTEVEX0RFRkFVTFRcbm1tL2RhbW9uL0tjb25maWctMTE3LVx0Ym9vbCBcJiMzNDtFbmFibGUgREFNT05fU1RBVCBieSBkZWZhdWx0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTE6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTM4MAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSBpbW1lZGlhdGUgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBEQU1PTiYjMzk7cyBNYWtlZmlsZSBhbmQgS2NvbmZpZyoqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IHRoZSBjb3JlIGJ1aWxkIGluZnJhc3RydWN0dXJlIGZvciB0aGUgRGF0YSBBY2Nlc3MgTW9uaXRvciAoREFNT04pIGltcGxlbWVudGF0aW9uLiBNeSBmaXJzdCBzdGVwIGlzIHRvIG9wZW4gdXAgYG1tL2RhbW9uL01ha2VmaWxlYCBhbmQgYG1tL2RhbW9uL0tjb25maWdgLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHRoZSBzdGFuZGFyZCBidWlsZCBydWxlcyBhbmQgbGlrZWx5IHRoZSBtb2R1bGUgZGVmaW5pdGlvbnMgaW4gdGhlIE1ha2VmaWxlLiBGcm9tIGEgS2NvbmZpZyBwZXJzcGVjdGl2ZSwgSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGdvdmVybiBEQU1PTiYjMzk7cyBmZWF0dXJlcywgZGVwZW5kZW5jaWVzLCBhbmQgYW55IHJ1bnRpbWUgYmVoYXZpb3JzIHRoYXQgYXJlIGNvbnRyb2xsZWQgdGhyb3VnaCBrZXJuZWwgY29uZmlndXJhdGlvbnMuIEkmIzM5O20ga2VlbiB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYnVpbGQgc3lzdGVtIGludGVncmF0ZXMgREFNT04gYW5kIHRvIHNlZSB0aGUgbW9kdWxhcml0eSBvZiB0aGUgZGVzaWduLCB3aGljaCBtaWdodCByZXZlYWwgYXNwZWN0cyByZWxhdGVkIHRvIGl0cyBzY2FsYWJpbGl0eSBhbmQgY29uZmlndXJhYmlsaXR5LiBBbmFseXppbmcgdGhlIE1ha2VmaWxlIHdpbGwgcXVpY2tseSBnaXZlIG1lIGluc2lnaHQgaW50byB0aGUgYnVpbGQgcHJvY2Vzcywgd2hpbGUgS2NvbmZpZyB3aWxsIGlsbHVtaW5hdGUgdGhlIGF2YWlsYWJsZSBjb25maWd1cmF0aW9uIGNob2ljZXMuIFRoaXMgaXMgbXkgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IERBTU9OIGlzIGJha2VkIGludG8gdGhlIGtlcm5lbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMTo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL01ha2VmaWxlJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdFxuICAgMzpcdG9iai15XHRcdFx0XHQ6PSBjb3JlLm9cbiAgIDQ6XHRvYmotJChDT05GSUdfREFNT05fVkFERFIpXHQmIzQzOz0gb3BzLWNvbW1vbi5vIHZhZGRyLm9cbiAgIDU6XHRvYmotJChDT05GSUdfREFNT05fUEFERFIpXHQmIzQzOz0gb3BzLWNvbW1vbi5vIHBhZGRyLm9cbiAgIDY6XHRvYmotJChDT05GSUdfREFNT05fU1lTRlMpXHQmIzQzOz0gc3lzZnMtY29tbW9uLm8gc3lzZnMtc2NoZW1lcy5vIHN5c2ZzLm9cbiAgIDc6XHRvYmotJChDT05GSUdfREFNT05fUkVDTEFJTSlcdCYjNDM7PSBtb2R1bGVzLWNvbW1vbi5vIHJlY2xhaW0ub1xuICAgODpcdG9iai0kKENPTkZJR19EQU1PTl9MUlVfU09SVClcdCYjNDM7PSBtb2R1bGVzLWNvbW1vbi5vIGxydV9zb3J0Lm9cbiAgIDk6XHRvYmotJChDT05GSUdfREFNT05fU1RBVClcdCYjNDM7PSBtb2R1bGVzLWNvbW1vbi5vIHN0YXQub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDExOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU4NjUKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiA0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aGUgZXhwZXJ0OgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBEQU1PTiBDb21waWxhdGlvbioqCgpPa2F5LCBzbyBgb2JqLXkgOj0gY29yZS5vYCBpbiBgbW0vZGFtb24vYCBpcyBvbmx5IGJ1aWx0IGlmIGBDT05GSUdfREFNT049eWAuIFRoaXMgbWVhbnMgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayBgbW0vTWFrZWZpbGVgIHRvIGNvbmZpcm0gdGhlIGJ1aWxkIGRlcGVuZGVuY2llcyBhbmQgaG93IGBDT05GSUdfREFNT05gIGlzIGhhbmRsZWQgaW4gdGhhdCBjb250ZXh0LiBJIG5lZWQgdG8gc2VlIHdoYXQgZWxzZSBpbiB0aGF0IE1ha2VmaWxlIHBvdGVudGlhbGx5IGluZmx1ZW5jZXMgd2hldGhlciBvciBub3QgYGNvcmUub2AgZXZlbiBnZXRzIGNvbnNpZGVyZWQgZm9yIGNvbXBpbGF0aW9uIGFuZCBsaW5raW5nLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgaG9saXN0aWMgdmlldyBvZiB0aGUgZGVwZW5kZW5jeSBjaGFpbi4gSSBhbSBwcmV0dHkgc3VyZSB0aGlzIGlzIGEgd2VsbCB0cm9kZGVuIHBhcnQgb2YgdGhlIGNvZGUsIGJ1dCBiZXN0IHRvIGRvdWJsZSBjaGVjayBhbmQgcnVsZSBvdXQgYW55IHVuZXhwZWN0ZWQgaW50ZXJhY3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMTo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYW1vbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlPTEzNj1vYmotJChDT05GSUdfREVCVUdfUEFHRV9SRUYpICYjNDM7PSBkZWJ1Z19wYWdlX3JlZi5vXG5tbS9NYWtlZmlsZToxMzc6b2JqLSQoQ09ORklHX0RBTU9OKSAmIzQzOz0gZGFtb24vXG5tbS9NYWtlZmlsZS0xMzgtb2JqLSQoQ09ORklHX0hBUkRFTkVEX1VTRVJDT1BZKSAmIzQzOz0gdXNlcmNvcHkub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMTo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MTY4CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkludmVzdGlnYXRpbmcgdGhlIERBTU9OIENvbmZpZ3VyYXRpb24gYW5kIFF1b3RhIEFkanVzdG1lbnQqKgoKQWxyaWdodCwgc28gYENPTkZJR19EQU1PTmAgZGlyZWN0bHkgbGVhZHMgdG8gdGhlIGJ1aWxkIG9mIHRoZSBgZGFtb24vYCBkaXJlY3RvcnkuIFRoYXQgbXVjaCBpcyBjbGVhci4gTXkgbmV4dCBtb3ZlIGlzIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBxdW90YSBmb3IgREFNT04gaXMgYWRqdXN0ZWQuIFRvIGRvIHRoaXMsIEkgbmVlZCB0byBwaW5wb2ludCBldmVyeSBpbnN0YW5jZSBvZiB0aGUgYGRhbW9zX2FkanVzdF9xdW90YWAgZnVuY3Rpb24gY2FsbCB3aXRoaW4gdGhlIGBtbS9kYW1vbi9jb3JlLmNgIGZpbGUuIFRoaXMgaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zLiBUaGUgYWRqdXN0bWVudCBvZiB0aGUgcXVvdGEgaXMgd2hlcmUgSSYjMzk7bGwgZmluZCB0aGUgaW5mb3JtYXRpb24gZm9yIG9wdGltaXppbmcgaXRzIG9wZXJhdGlvbnMuIEkmIzM5O2xsIG5lZWQgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBwYXRoIGZyb20gdGhvc2UgY2FsbHMgdG8gc2VlIHdoZXJlIHRoZXNlIHF1b3RhIGFkanVzdG1lbnRzIGhhcHBlbiBhbmQgdW5kZXIgd2hhdCBjb25kaXRpb25zLiBGcm9tIHRoZXJlLCBJIGNhbiBkZXRlcm1pbmUgaWYgYW55IGNoYW5nZXMgYXJlIG5lZWRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTE6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb3NfYWRqdXN0X3F1b3RhJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jPTMyOTA9c3RhdGljIHZvaWQgZGFtb3NfdHJhY2VfZXN6KHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vcyAqcyxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzMwMy1cbm1tL2RhbW9uL2NvcmUuYzozMzA0OnN0YXRpYyB2b2lkIGRhbW9zX2FkanVzdF9xdW90YShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb3MgKnMpXG5tbS9kYW1vbi9jb3JlLmMtMzMwNS17XG4tLVxubW0vZGFtb24vY29yZS5jPTMzODc9c3RhdGljIHZvaWQga2RhbW9uZF9hcHBseV9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmMpXG4tLVxubW0vZGFtb24vY29yZS5jLTM0MDItXG5tbS9kYW1vbi9jb3JlLmM6MzQwMzpcdFx0ZGFtb3NfYWRqdXN0X3F1b3RhKGMsIHMpO1xubW0vZGFtb24vY29yZS5jLTM0MDQtXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDExOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY2MjAKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIGBrZGFtb25kX2FwcGx5X3NjaGVtZXNgKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IGBrZGFtb25kX2FwcGx5X3NjaGVtZXNgLiBUaGF0IGZ1bmN0aW9uIGluIGBtbS9kYW1vbi9jb3JlLmNgIGlzIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyLCB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucyDigJMgd2hlcmUgREFNT04gYWN0dWFsbHkgZXhlY3V0ZXMgaXRzIHNjaGVtZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IGl0JiMzOTtzIG9yY2hlc3RyYXRpbmcgdGhlIG1vbml0b3JpbmcgYW5kIGFkYXB0YXRpb24uIEkgc2hvdWxkIGNoZWNrIHRoZSBzdXJyb3VuZGluZyBjb2RlIGZvciBob3cgaXQmIzM5O3MgY2FsbGVkIGFuZCB3aGVuLiBUaGUgY29udGV4dCBpcyBjcnVjaWFsIGhlcmUuIFdoYXQgdHJpZ2dlcnMgaXRzIGV4ZWN1dGlvbj8gV2hhdCBkYXRhIGlzIGl0IHdvcmtpbmcgd2l0aD8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIGJvdHRsZW5lY2tzIG9yIHBvdGVudGlhbCBhcmVhcyBmb3IgaW1wcm92ZW1lbnQgaW4gdGhlIGNvcmUgYWxnb3JpdGhtPyBJJiMzOTtsbCBwcm9iYWJseSBzdGFydCBieSB0cmFjaW5nIHRoZSBleGVjdXRpb24gcGF0aCBhbmQgdGhlbiBkaXZlIGludG8gdGhlIGRldGFpbHMuIEkgd2lsbCBhbHNvIG1ha2Ugbm90ZXMgb2YgaG93IHRoZSBwcm9jZXNzIGludGVyYWN0cyB3aXRoIGFsbCB0aGUgc2NoZW1lcy4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMTo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMzODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzM4MDpcdFx0XHRpZiAoc2l0ZXIgPT0gcylcbjMzODE6XHRcdFx0XHRicmVhaztcbjMzODI6XHRcdFx0c2lkeCYjNDM7JiM0Mzs7XG4zMzgzOlx0XHR9XG4zMzg0Olx0XHR0cmFjZV9jYWxsX19kYW1vc19zdGF0X2FmdGVyX2FwcGx5X2ludGVydmFsKGNpZHgsIHNpZHgsIFx1MDAyNnMtXHUwMDNlc3RhdCk7XG4zMzg1Olx0fVxuMzM4NjpcdFxuMzM4NzpcdHN0YXRpYyB2b2lkIGtkYW1vbmRfYXBwbHlfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjKVxuMzM4ODpcdHtcbjMzODk6XHRcdHN0cnVjdCBkYW1vbl90YXJnZXQgKnQ7XG4zMzkwOlx0XHRzdHJ1Y3QgZGFtb3MgKnM7XG4zMzkxOlx0XHRib29sIGhhc19zY2hlbWVzX3RvX2FwcGx5ID0gZmFsc2U7XG4zMzkyOlx0XHR1bnNpZ25lZCBsb25nIG1heF9yZWdpb25fc3o7XG4zMzkzOlx0XG4zMzk0Olx0XHRkYW1vbl9mb3JfZWFjaF9zY2hlbWUocywgYykge1xuMzM5NTpcdFx0XHRpZiAodGltZV9iZWZvcmUoYy1cdTAwM2VwYXNzZWRfc2FtcGxlX2ludGVydmFscywgcy1cdTAwM2VuZXh0X2FwcGx5X3NpcykpXG4zMzk2Olx0XHRcdFx0Y29udGludWU7XG4zMzk3Olx0XG4zMzk4Olx0XHRcdGlmICghcy1cdTAwM2V3bWFya3MuYWN0aXZhdGVkKVxuMzM5OTpcdFx0XHRcdGNvbnRpbnVlO1xuMzQwMDpcdFxuMzQwMTpcdFx0XHRoYXNfc2NoZW1lc190b19hcHBseSA9IHRydWU7XG4zNDAyOlx0XG4zNDAzOlx0XHRcdGRhbW9zX2FkanVzdF9xdW90YShjLCBzKTtcbjM0MDQ6XHRcdH1cbjM0MDU6XHRcbjM0MDY6XHRcdGlmICghaGFzX3NjaGVtZXNfdG9fYXBwbHkpXG4zNDA3Olx0XHRcdHJldHVybjtcbjM0MDg6XHRcbjM0MDk6XHRcdG1heF9yZWdpb25fc3ogPSBkYW1vbl9yZWdpb25fc3pfbGltaXQoYyk7XG4zNDEwOlx0XHRtdXRleF9sb2NrKFx1MDAyNmMtXHUwMDNld2Fsa19jb250cm9sX2xvY2spO1xuMzQxMTpcdFx0ZGFtb25fZm9yX2VhY2hfdGFyZ2V0KHQsIGMpIHtcbjM0MTI6XHRcdFx0aWYgKGMtXHUwMDNlb3BzLnRhcmdldF92YWxpZCBcdTAwMjZcdTAwMjYgYy1cdTAwM2VvcHMudGFyZ2V0X3ZhbGlkKHQpID09IGZhbHNlKSB7XG4zNDEzOlx0XHRcdFx0ZGFtb25fZm9yX2VhY2hfc2NoZW1lKHMsIGMpIHtcbjM0MTQ6XHRcdFx0XHRcdGlmIChzLVx1MDAzZXF1b3RhLmNoYXJnZV90YXJnZXRfZnJvbSAhPSB0KVxuMzQxNTpcdFx0XHRcdFx0XHRjb250aW51ZTtcbjM0MTY6XHRcdFx0XHRcdHMtXHUwMDNlcXVvdGEuY2hhcmdlX3RhcmdldF9mcm9tID0gTlVMTDtcbjM0MTc6XHRcdFx0XHRcdHMtXHUwMDNlcXVvdGEuY2hhcmdlX2FkZHJfZnJvbSA9IDA7XG4zNDE4Olx0XHRcdFx0fVxuMzQxOTpcdFx0XHRcdGNvbnRpbnVlO1xuMzQyMDpcdFx0XHR9XG4zNDIxOlx0XHRcdGRhbW9zX2FwcGx5X3RhcmdldChjLCB0LCBtYXhfcmVnaW9uX3N6KTtcbjM0MjI6XHRcdH1cbjM0MjM6XHRcbjM0MjQ6XHRcdGRhbW9uX2Zvcl9lYWNoX3NjaGVtZShzLCBjKSB7XG4zNDI1Olx0XHRcdGlmICh0aW1lX2JlZm9yZShjLVx1MDAzZXBhc3NlZF9zYW1wbGVfaW50ZXJ2YWxzLCBzLVx1MDAzZW5leHRfYXBwbHlfc2lzKSlcbjM0MjY6XHRcdFx0XHRjb250aW51ZTtcbjM0Mjc6XHRcdFx0ZGFtb3Nfd2Fsa19jb21wbGV0ZShjLCBzKTtcbjM0Mjg6XHRcdFx0ZGFtb3Nfc2V0X25leHRfYXBwbHlfc2lzKHMsIGMpO1xuMzQyOTpcdFx0XHRzLVx1MDAzZWxhc3RfYXBwbGllZCA9IE5VTEw7XG4zNDMwOlx0XHRcdGRhbW9zX3RyYWNlX3N0YXQoYywgcyk7XG4zNDMxOlx0XHR9XG4zNDMyOlx0XHRtdXRleF91bmxvY2soXHUwMDI2Yy1cdTAwM2V3YWxrX2NvbnRyb2xfbG9jayk7XG4zNDMzOlx0fVxuMzQzNDpcdFxuMzQzNTpcdCNpZmRlZiBDT05GSUdfREFNT05fREVCVUdfU0FOSVRZXG4zNDM2Olx0c3RhdGljIHZvaWQgZGFtb25fdmVyaWZ5X21lcmdlX3R3b19yZWdpb25zKFxuMzQzNzpcdFx0XHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpsLCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyKVxuMzQzODpcdHtcbjM0Mzk6XHRcdC8qIGRhbW9uX21lcmdlX3R3b19yZWdpb25zKCkgbWF5IGNyZWF0ZWQgaW5jb3JyZWN0IGxlZnQgcmVnaW9uICovXG4zNDQwOlx0XHRXQVJOX09OQ0UobC1cdTAwM2Vhci5zdGFydCBcdTAwM2U9IGwtXHUwMDNlYXIuZW5kLCBcJiMzNDtsOiAlbHUtJWx1LCByOiAlbHUtJWx1XFxuXCYjMzQ7LFxuMzQ0MTpcdFx0XHRcdGwtXHUwMDNlYXIuc3RhcnQsIGwtXHUwMDNlYXIuZW5kLCByLVx1MDAzZWFyLnN0YXJ0LCByLVx1MDAzZWFyLmVuZCk7XG4zNDQyOlx0fVxuMzQ0MzpcdCNlbHNlXG4zNDQ0Olx0c3RhdGljIHZvaWQgZGFtb25fdmVyaWZ5X21lcmdlX3R3b19yZWdpb25zKFxuMzQ0NTpcdFx0XHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpsLCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyKVxuMzQ0NjpcdHtcbjM0NDc6XHR9XG4zNDQ4Olx0I2VuZGlmXG4zNDQ5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDExOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc5NTgKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA2NTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgZGFtb3NfYWRqdXN0X3F1b3RhYCBGdW5jdGlvbjogQSBEZWVwIERpdmUqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIGRvd24gd2hhdCYjMzk7cyBoYXBwZW5pbmcgd2l0aGluIGBkYW1vc19hZGp1c3RfcXVvdGFgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIGl0cyBjb3JlIGZ1bmN0aW9uLCBhbmQgZnJvbSB0aGUgY29kZSwgaXQgc2VlbXMgdG8gYmUgbWFuYWdpbmcgYW5kIGFkanVzdGluZyBxdW90YXMgcmVsYXRlZCB0byBtZW1vcnkgcmVnaW9ucywgbGlrZWx5IHdpdGhpbiBhIERBTU9OIGNvbnRleHQuIEkgc2VlIHNldmVyYWwga2V5IGNvbXBvbmVudHM6IHF1b3RhcywgdGFyZ2V0cywgcmVnaW9ucywgYW5kIHRpbWVzdGFtcHMuIEl0IHNlZW1zIHRvIGhhdmUgYSBwZXJpb2RpYyBpbnRlcnZhbC4KCkZpcnN0LCBJIHNlZSB0aGUgY29kZSBpcyBjaGVja2luZyBpZiB0aGUgcXVvdGEgaXMgYWN0aXZlLCBlYXJseSBleGl0aW5nIGlmIG5vdC4gVGhlbiBJJiMzOTttIGZvbGxvd2luZyB0aGlzIHBhcnQgdGhhdCBkZWZpbmVzIHRoZSBzdGFydCBvZiBhIG5ldyB3aW5kb3cgZm9yIGF1dG8gdHVuaW5nLiBJZiBhbiBhdXRvLXR1bmluZyBpbnRlcnZhbCBpcyBzZXQsIGl0IGNoZWNrcyBpZiB0aGUgY3VycmVudCB0aW1lIGlzIHdpdGhpbiB0aGUgdmFsaWQgcmFuZ2UuIElmIG5vdCwgaXQgdXBkYXRlcyB0aGUgJiMzNDt0dW5lZCBmcm9tJiMzNDsgdGltZXN0YW1wIGFuZCBjYWxscyBgZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YWAuIFRyYWNpbmcgb2YgYGVzemAgKGVmZmVjdGl2ZSBzaXplKSBjaGFuZ2VzIGFyZSBpbmNsdWRlZC4gQSB2ZXJ5IHNpbWlsYXIgdGhpbmcgaXMgaGFwcGVuaW5nIGZvciBhICYjMzQ7Y2hhcmdlIHdpbmRvdyYjMzQ7LCBhbmQgYGRhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGFgIGlzIGNhbGxlZCBhZ2Fpbi4KClRoZSBpbnRlcmVzdGluZyBiaXQsIGhlcmUsIGlzIHRoZSBjb25kaXRpb25hbC4gUHJpb3IgdG8gYSBjZXJ0YWluIHBhdGNoLCB0aGUgY29kZSB3b3VsZCBjYWxjdWxhdGUgdGhlIGhpc3RvZ3JhbSBhbmQgdGhlIG1pbmltdW0gc2NvcmUuIFRoZSBjb2RlIGN1cnJlbnRseSBza2lwcyBhbGwgdGhpcyBpZiB0aGUgcXVvdGEgaXMgZnVsbCwgdGhlIHJlYXNvbiBiZWluZzoKCkJlZm9yZSB0aGUgcGF0Y2g6Ckl0IGNoZWNrZWQgYGlmICghYy0mZ3Q7b3BzLmdldF9zY2hlbWVfc2NvcmUpIHJldHVybjtgIGFuZCB0aGVuIGNhbGN1bGF0ZWQgaGlzdG9ncmFtIGFuZCBgcXVvdGEtJmd0O21pbl9zY29yZWAuCldpdGggdGhlIHBhdGNoOgpgaWYgKGRhbW9zX3F1b3RhX2lzX2Z1bGwocXVvdGEsIGMtJmd0O21pbl9yZWdpb25fc3opKSByZXR1cm47YApJZiB0aGUgcXVvdGEgaXMgZnVsbCwgc2tpcCBjYWxjdWxhdGluZyB0aGUgc2NvcmUgaGlzdG9ncmFtIGFuZCBtaW4gc2NvcmUgbGltaXQhCgpUaGlzIG9wdGltaXphdGlvbiBsaWtlbHkgYWltcyB0byBhdm9pZCB1bm5lY2Vzc2FyeSBjb21wdXRhdGlvbiB3aGVuIHRoZSBxdW90YSBpcyBhbHJlYWR5IGV4aGF1c3RlZC4gSXQmIzM5O3MgYSBwZXJmb3JtYW5jZSB0d2VhayDigJMgd2h5IGNhbGN1bGF0ZSBzY29yZXMgd2hlbiB5b3UgY2FuJiMzOTt0IGFsbG9jYXRlIG1vcmUgYW55d2F5PyBCdXQsIEkmIzM5O2QgbGlrZSB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IGEgYml0IG1vcmUuIEkgdGhpbmsgaXQgd291bGQgYmUgd2lzZSB0byByZWFkIHRoZSBjb21taXQgbG9nIHRvIGdldCB0aGUgcmF0aW9uYWxlIGZvciB0aGlzIGNoYW5nZSBhbmQgdGhlIGlzc3VlcyBpdCBhZGRyZXNzZWQsIHRvIGdldCBhIGRlZXBlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSB0cmFkZS1vZmZzLiBJdCYjMzk7cyBsaWtlbHkgYW4gaW1wb3J0YW50IG9wdGltaXphdGlvbiBpbiBhIGNyaXRpY2FsIHBhdGguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDExOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9zX3F1b3RhX2lzX2Z1bGwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmM9MjY2OD1zdGF0aWMgdm9pZCBkYW1vc19jaGFyZ2VfcXVvdGEoc3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjY4NC1cbm1tL2RhbW9uL2NvcmUuYzoyNjg1OnN0YXRpYyBib29sIGRhbW9zX3F1b3RhX2lzX2Z1bGwoc3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSxcbm1tL2RhbW9uL2NvcmUuYy0yNjg2LVx0XHR1bnNpZ25lZCBsb25nIG1pbl9yZWdpb25fc3opXG4tLVxubW0vZGFtb24vY29yZS5jPTI2OTk9c3RhdGljIHZvaWQgZGFtb3NfYXBwbHlfc2NoZW1lKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG4tLVxubW0vZGFtb24vY29yZS5jLTI3NTctXHRcdGRhbW9zX2NoYXJnZV9xdW90YShxdW90YSwgc3osIHN6X2FwcGxpZWQpO1xubW0vZGFtb24vY29yZS5jOjI3NTg6XHRcdGlmIChkYW1vc19xdW90YV9pc19mdWxsKHF1b3RhLCBjLVx1MDAzZW1pbl9yZWdpb25fc3opKSB7XG5tbS9kYW1vbi9jb3JlLmMtMjc1OS1cdFx0XHRxdW90YS1cdTAwM2VjaGFyZ2VfdGFyZ2V0X2Zyb20gPSB0O1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0yNzcwPXN0YXRpYyB2b2lkIGRhbW9uX2RvX2FwcGx5X3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqYyxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjc4NS1cdFx0LyogQ2hlY2sgdGhlIHF1b3RhICovXG5tbS9kYW1vbi9jb3JlLmM6Mjc4NjpcdFx0aWYgKGRhbW9zX3F1b3RhX2lzX2Z1bGwocXVvdGEsIGMtXHUwMDNlbWluX3JlZ2lvbl9zeikpXG5tbS9kYW1vbi9jb3JlLmMtMjc4Ny1cdFx0XHRjb250aW51ZTtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MzMwND1zdGF0aWMgdm9pZCBkYW1vc19hZGp1c3RfcXVvdGEoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zMzI2LVx0XHRcdFx0bXNlY3NfdG9famlmZmllcyhxdW90YS1cdTAwM2VyZXNldF9pbnRlcnZhbCkpKSB7XG5tbS9kYW1vbi9jb3JlLmM6MzMyNzpcdFx0aWYgKGRhbW9zX3F1b3RhX2lzX2Z1bGwocXVvdGEsIGMtXHUwMDNlbWluX3JlZ2lvbl9zeikpXG5tbS9kYW1vbi9jb3JlLmMtMzMyOC1cdFx0XHRzLVx1MDAzZXN0YXQucXRfZXhjZWVkcyYjNDM7JiM0Mzs7XG4tLVxubW0vZGFtb24vY29yZS5jLTMzMzgtXG5tbS9kYW1vbi9jb3JlLmM6MzMzOTpcdGlmIChkYW1vc19xdW90YV9pc19mdWxsKHF1b3RhLCBjLVx1MDAzZW1pbl9yZWdpb25fc3opKVxubW0vZGFtb24vY29yZS5jLTMzNDAtXHRcdHJldHVybjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTE6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTY2MgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlRyYWNpbmcgdGhlIGBkYW1vc19hZGp1c3RfcXVvdGFgIEZ1bmN0aW9uIENhbGwqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSSBzZWUgdGhhdCBgZGFtb3NfYWRqdXN0X3F1b3RhYCBpcyBkZWZpbmVkIGFzIHN0YXRpYywgd2hpY2ggaXMgdGhlIGZpcnN0IGltcG9ydGFudCBwb2ludC4gVGhpcyBtZWFucyBpdHMgc2NvcGUgaXMgcmVzdHJpY3RlZCB0byB0aGUgY3VycmVudCBjb21waWxhdGlvbiB1bml0LCBzbyBJIGRvbiYjMzk7dCBuZWVkIHRvIHdvcnJ5IGFib3V0IGl0IGJlaW5nIGRpcmVjdGx5IGFjY2Vzc2libGUgZnJvbSBvdXRzaWRlIGl0cyBzb3VyY2UgZmlsZS4gTmV4dCwgSSYjMzk7bSBub3RpbmcgdGhhdCBgZGFtb3NfYWRqdXN0X3F1b3RhYCBpcyBjYWxsZWQgZnJvbSBga2RhbW9uZF9hcHBseV9zY2hlbWVzYC4gQW5kLCBsb29raW5nIGZ1cnRoZXIgdXAgdGhlIGNhbGwgc3RhY2ssIGBrZGFtb25kX2FwcGx5X3NjaGVtZXNgIGlzIGNhbGxlZCBmcm9tIGBrZGFtb25kX2ZuYCDigJMgdGhlIGt0aHJlYWQgZGVkaWNhdGVkIHRvIERBTU9OLCB3aGljaCBjb25maXJtcyBteSB1bmRlcnN0YW5kaW5nLgoKR2l2ZW4gdGhpcyBjb250ZXh0LCBJIG5vdyB3YW50IHRvIGludmVzdGlnYXRlIGhvdyBmcmVxdWVudGx5IGBrZGFtb25kX2FwcGx5X3NjaGVtZXNgIGlzIGNhbGxlZCwgYW5kIGZyb20gd2hlcmUuIEtub3dpbmcgdGhlIGNhbGxlcnMgb2YgdGhpcyBmdW5jdGlvbiB3aWxsIHByb3ZpZGUgYSBnb29kIHBpY3R1cmUgb2YgdGhlIGludGVyYWN0aW9uIGFuZCBpbnRlZ3JhdGlvbiBvZiBkaWZmZXJlbnQgREFNT04gcGFydHMuIFNwZWNpZmljYWxseSwgaXQgd2lsbCBnaXZlIG1lIHNvbWUgaW5zaWdodCBvbiB3aGF0JiMzOTtzIHRyaWdnZXJpbmcgdGhlIGV4ZWN1dGlvbiBvZiBgZGFtb3NfYWRqdXN0X3F1b3RhYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTE6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a2RhbW9uZF9hcHBseV9zY2hlbWVzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jPTMzNzE9c3RhdGljIHZvaWQgZGFtb3NfdHJhY2Vfc3RhdChzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb3MgKnMpXG4tLVxubW0vZGFtb24vY29yZS5jLTMzODYtXG5tbS9kYW1vbi9jb3JlLmM6MzM4NzpzdGF0aWMgdm9pZCBrZGFtb25kX2FwcGx5X3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqYylcbm1tL2RhbW9uL2NvcmUuYy0zMzg4LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MzkyMD1zdGF0aWMgaW50IGtkYW1vbmRfZm4odm9pZCAqZGF0YSlcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzk5Ni1cdFx0Lypcbm1tL2RhbW9uL2NvcmUuYzozOTk3Olx0XHQgKiBkbyBrZGFtb25kX2NhbGwoKSBhbmQga2RhbW9uZF9hcHBseV9zY2hlbWVzKCkgYWZ0ZXJcbm1tL2RhbW9uL2NvcmUuYy0zOTk4LVx0XHQgKiBrZGFtb25kX21lcmdlX3JlZ2lvbnMoKSBpZiBwb3NzaWJsZSwgdG8gcmVkdWNlIG92ZXJoZWFkXG4tLVxubW0vZGFtb24vY29yZS5jLTQwMTEtXHRcdGlmICghbGlzdF9lbXB0eShcdTAwMjZjdHgtXHUwMDNlc2NoZW1lcykpXG5tbS9kYW1vbi9jb3JlLmM6NDAxMjpcdFx0XHRrZGFtb25kX2FwcGx5X3NjaGVtZXMoY3R4KTtcbm1tL2RhbW9uL2NvcmUuYy00MDEzLVx0XHRlbHNlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDExOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMjg0CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjYwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IERBTU9OIEludmVzdGlnYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSB0cnlpbmcgdG8gZmlndXJlIG91dCBob3cgc3l6a2FsbGVyIHBsYXlzIHdpdGggREFNT04uIEZpcnN0IHRob3VnaHQgaXMsIGRvZXMgc3l6a2FsbGVyIGV2ZW4gKmtub3cqIGFib3V0IERBTU9OPyBEb2VzIGl0IGhhdmUgc3BlY2lmaWMgREFNT04gZGVzY3JpcHRpb25zPyBIb2xkIG9uLCBzeXpsYW5nJiMzOTtzIHRvb2xzIGNhbiYjMzk7dCBqdXN0IGJsaW5kbHkgc2VhcmNoIHRoZSBrZXJuZWwgc291cmNlcy4gV2UgbmVlZCB0byBjaGVjayBzeXprYWxsZXImIzM5O3Mgc3VwcG9ydCBpbmRpcmVjdGx5LCBtYXliZSB2aWEgc3lzZnMuIEFoLCB3YWl0LCB0aGVyZSYjMzk7cyBhIGNydWNpYWwgcG9pbnQgaGVyZSB0aGF0IEkgYWxtb3N0IG1pc3NlZCEgVGhpcyBgZ3JlcHBlcmAgdG9vbCAqZXhwbGljaXRseSogc2F5cyBpdCBjYW4mIzM5O3QgaGFuZGxlIHN5emxhbmcgZGVzY3JpcHRpb25zIG9yIHRob3NlIHBzZXVkby1zeXNjYWxscyBzdGFydGluZyB3aXRoICYjMzQ7c3l6XyYjMzQ7LiBUaGF0JiMzOTtzIGJlY2F1c2UgdGhvc2UgYXJlbiYjMzk7dCBhY3R1YWxseSAqaW4qIHRoZSBrZXJuZWwgc291cmNlIGl0c2VsZi4gV2UmIzM5O3JlIHN1cHBvc2VkIHRvIGJlIHVzaW5nIGByZWFkLXN5ei1zcGVjYCBhbmQgYHN5ei1ncmVwcGVyYCBpbnN0ZWFkLCBidXQgYXJlIHRob3NlIGV2ZW4gZGVmaW5lZD8KCkxldCBtZSBxdWlja2x5IHJldmlldyB0aGUgZGVjbGFyZWQgdG9vbHMuLi4gTm9wZSEgTG9va3MgbGlrZSBgcmVhZC1zeXotc3BlY2AgYW5kIGBzeXotZ3JlcHBlcmAgYXJlIG5vdCBhdmFpbGFibGUsIHNvIHRoYXQmIzM5O3MgdGhhdC4gTm8gbmVlZCB0byB3b3JyeSBhYm91dCB0aGVtIGZvciBub3cuCgpBbHJpZ2h0LCBsZXQmIzM5O3MgcmVmb2N1cy4gRm9yZ2V0IHN5emthbGxlciBmb3IgYSBtb21lbnQsIGFuZCB0aGluayBhYm91dCBEQU1PTiBkaXJlY3RseS4gQ2FuIGl0IGJlIHJlYWNoZWQgZnJvbSB1c2Vyc3BhY2U/IEhvdyBpcyBEQU1PTiBjb250cm9sbGVkIGZyb20gdXNlcnNwYWNlPyBUaW1lIHRvIGRlbHZlIGludG8gdGhlIGBtbS9kYW1vbi9zeXNmcy5jYCBmaWxlIGFuZCBzZWUgd2hhdCYjMzk7cyB3aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMTo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL3N5c2ZzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdC8qXG4gICAzOlx0ICogREFNT04gc3lzZnMgSW50ZXJmYWNlXG4gICA0Olx0ICovXG4gICA1Olx0XG4gICA2Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQuaFx1MDAzZVxuICAgNzpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuICAgODpcdFxuICAgOTpcdCNpbmNsdWRlIFwmIzM0O3N5c2ZzLWNvbW1vbi5oXCYjMzQ7XG4gIDEwOlx0XG4gIDExOlx0LypcbiAgMTI6XHQgKiBpbml0IHJlZ2lvbiBkaXJlY3RvcnlcbiAgMTM6XHQgKi9cbiAgMTQ6XHRcbiAgMTU6XHRzdHJ1Y3QgZGFtb25fc3lzZnNfcmVnaW9uIHtcbiAgMTY6XHRcdHN0cnVjdCBrb2JqZWN0IGtvYmo7XG4gIDE3Olx0XHRzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZSBhcjtcbiAgMTg6XHR9O1xuICAxOTpcdFxuICAyMDpcdHN0YXRpYyBzdHJ1Y3QgZGFtb25fc3lzZnNfcmVnaW9uICpkYW1vbl9zeXNmc19yZWdpb25fYWxsb2Modm9pZClcbiAgMjE6XHR7XG4gIDIyOlx0XHRyZXR1cm4ga3phbGxvY19vYmooc3RydWN0IGRhbW9uX3N5c2ZzX3JlZ2lvbik7XG4gIDIzOlx0fVxuICAyNDpcdFxuICAyNTpcdHN0YXRpYyBzc2l6ZV90IHN0YXJ0X3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcbiAgMjY6XHRcdFx0Y2hhciAqYnVmKVxuICAyNzpcdHtcbiAgMjg6XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19yZWdpb24gKnJlZ2lvbiA9IGNvbnRhaW5lcl9vZihrb2JqLFxuICAyOTpcdFx0XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19yZWdpb24sIGtvYmopO1xuICAzMDpcdFxuICAzMTpcdFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcJiMzNDslbHVcXG5cJiMzNDssIHJlZ2lvbi1cdTAwM2Vhci5zdGFydCk7XG4gIDMyOlx0fVxuICAzMzpcdFxuICAzNDpcdHN0YXRpYyBzc2l6ZV90IHN0YXJ0X3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXG4gIDM1Olx0XHRcdGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxuICAzNjpcdHtcbiAgMzc6XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19yZWdpb24gKnJlZ2lvbiA9IGNvbnRhaW5lcl9vZihrb2JqLFxuICAzODpcdFx0XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19yZWdpb24sIGtvYmopO1xuICAzOTpcdFx0aW50IGVyciA9IGtzdHJ0b3VsKGJ1ZiwgMCwgXHUwMDI2cmVnaW9uLVx1MDAzZWFyLnN0YXJ0KTtcbiAgNDA6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTE6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEzOTkKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA2MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgdGhlIERBTU9OIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBEQU1PTiBzaXR1YXRpb24uIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBEQU1PTi4gRmlyc3QsIEkmIzM5O20gbm90aW5nIGBDT05GSUdfREFNT05gIGFuZCBgQ09ORklHX0RBTU9OX1NZU0ZTYC4gQnV0IGlzIHRoYXQgKmFsbCo/IEkgaGF2ZSBhIGZlZWxpbmcgdGhlcmUgbWlnaHQgYmUgbW9yZSB0byBpdC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGludmVzdGlnYXRlIHdoZXRoZXIgdGhlIERBTU9OIHJlY2xhaW0gb3IgREFNT04gbHJ1X3NvcnQgY29tcG9uZW50cyBhcmUgYWxzbyBsZXZlcmFnaW5nIERBTU9OLiBJdCYjMzk7cyBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIGFuZCBpbnRlcmNvbm5lY3Rpb25zIG9mIHRoZXNlIGZlYXR1cmVzLgoKVGhlIHF1aWNrZXN0IHdheSB0byBnZXQgYSBkZWZpbml0aXZlIGFuc3dlciwgYW5kIHJlYWxseSB1bmRlcnN0YW5kIHRoZSBicm9hZGVyIGNvbnRleHQsIGlzIHRvIGNoZWNrIGBtbS9kYW1vbi9LY29uZmlnYC4gVGhhdCBLY29uZmlnIGZpbGUgc2hvdWxkIGxheSBvdXQgKmFsbCogdGhlIGRlcGVuZGVuY2llcywgdGhlIGFzc29jaWF0ZWQgb3B0aW9ucywgYW5kIGdpdmUgbWUgYSBjb21wbGV0ZSwgdG9wLWRvd24gdmlldyBvZiBob3cgZXZlcnl0aGluZyBmaXRzIHRvZ2V0aGVyIHdpdGhpbiB0aGUgREFNT04gZWNvc3lzdGVtLiBJdOKAmXMgdGhlIHNvdXJjZSBvZiB0cnV0aCBmb3IgdGhlIGNvbmZpZ3VyYXRpb24gbG9naWMgYW5kIHdpbGwgZ2l2ZSBtZSB3aGF0IEkgbmVlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTE6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9kYW1vbi9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0XG4gICAzOlx0bWVudSBcJiMzNDtEYXRhIEFjY2VzcyBNb25pdG9yaW5nXCYjMzQ7XG4gICA0Olx0XG4gICA1Olx0Y29uZmlnIERBTU9OXG4gICA2Olx0XHRib29sIFwmIzM0O0RBTU9OOiBEYXRhIEFjY2VzcyBNb25pdG9yaW5nIEZyYW1ld29ya1wmIzM0O1xuICAgNzpcdFx0aGVscFxuICAgODpcdFx0ICBUaGlzIGJ1aWxkcyBhIGZyYW1ld29yayB0aGF0IGFsbG93cyBrZXJuZWwgc3Vic3lzdGVtcyB0byBtb25pdG9yXG4gICA5Olx0XHQgIGFjY2VzcyBmcmVxdWVuY3kgb2YgZWFjaCBtZW1vcnkgcmVnaW9uLiBUaGUgaW5mb3JtYXRpb24gY2FuIGJlIHVzZWZ1bFxuICAxMDpcdFx0ICBmb3IgcGVyZm9ybWFuY2UtY2VudHJpYyBEUkFNIGxldmVsIG1lbW9yeSBtYW5hZ2VtZW50LlxuICAxMTpcdFxuICAxMjpcdFx0ICBTZWUgaHR0cHM6Ly93d3cua2VybmVsLm9yZy9kb2MvaHRtbC9sYXRlc3QvbW0vZGFtb24vaW5kZXguaHRtbCBmb3JcbiAgMTM6XHRcdCAgbW9yZSBpbmZvcm1hdGlvbi5cbiAgMTQ6XHRcbiAgMTU6XHRjb25maWcgREFNT05fREVCVUdfU0FOSVRZXG4gIDE2Olx0XHRib29sIFwmIzM0O0NoZWNrIHNhbml0eSBvZiBEQU1PTiBjb2RlXCYjMzQ7XG4gIDE3Olx0XHRkZXBlbmRzIG9uIERBTU9OXG4gIDE4Olx0XHRoZWxwXG4gIDE5Olx0XHQgIFRoaXMgZW5hYmxlcyBhZGRpdGlvbmFsIERBTU9OIGRlYnVnZ2luZy1wdXJwb3NlIHNhbml0eSBjaGVja3MgaW5cbiAgMjA6XHRcdCAgREFNT04gY29kZS4gIFRoaXMgY2FuIGJlIHVzZWZ1bCBmb3IgZmluZGluZyBidWdzLCBidXQgaW1wb3NlXG4gIDIxOlx0XHQgIGFkZGl0aW9uYWwgb3ZlcmhlYWQuICBUaGlzIGlzIHRoZXJlZm9yZSByZWNvbW1lbmRlZCB0byBiZSBlbmFibGVkIG9uXG4gIDIyOlx0XHQgIG9ubHkgZGV2ZWxvcG1lbnQgYW5kIHRlc3Qgc2V0dXBzLlxuICAyMzpcdFxuICAyNDpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuICAyNTpcdFxuICAyNjpcdGNvbmZpZyBEQU1PTl9LVU5JVF9URVNUXG4gIDI3Olx0XHRib29sIFwmIzM0O1Rlc3QgZm9yIGRhbW9uXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbiAgMjg6XHRcdGRlcGVuZHMgb24gREFNT04gXHUwMDI2XHUwMDI2IEtVTklUPXlcbiAgMjk6XHRcdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXG4gIDMwOlx0XHRoZWxwXG4gIDMxOlx0XHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTiBLdW5pdCB0ZXN0IHN1aXRlLlxuICAzMjpcdFxuICAzMzpcdFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBLVW5pdCBhbmQgdW5pdCB0ZXN0cyBpbiBnZW5lcmFsLCBwbGVhc2UgcmVmZXJcbiAgMzQ6XHRcdCAgdG8gdGhlIEtVbml0IGRvY3VtZW50YXRpb24uXG4gIDM1Olx0XG4gIDM2Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gIDM3Olx0XG4gIDM4Olx0Y29uZmlnIERBTU9OX1ZBRERSXG4gIDM5Olx0XHRib29sIFwmIzM0O0RhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlc1wmIzM0O1xuICA0MDpcdFx0ZGVwZW5kcyBvbiBEQU1PTiBcdTAwMjZcdTAwMjYgTU1VXG4gIDQxOlx0XHRzZWxlY3QgUEFHRV9JRExFX0ZMQUdcbiAgNDI6XHRcdGRlZmF1bHQgREFNT05cbiAgNDM6XHRcdGhlbHBcbiAgNDQ6XHRcdCAgVGhpcyBidWlsZHMgdGhlIGRlZmF1bHQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciBEQU1PTlxuICA0NTpcdFx0ICB0aGF0IHdvcmsgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXMuXG4gIDQ2Olx0XG4gIDQ3Olx0Y29uZmlnIERBTU9OX1BBRERSXG4gIDQ4Olx0XHRib29sIFwmIzM0O0RhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2VcJiMzNDtcbiAgNDk6XHRcdGRlcGVuZHMgb24gREFNT04gXHUwMDI2XHUwMDI2IE1NVVxuICA1MDpcdFx0c2VsZWN0IFBBR0VfSURMRV9GTEFHXG4gIDUxOlx0XHRkZWZhdWx0IERBTU9OXG4gIDUyOlx0XHRoZWxwXG4gIDUzOlx0XHQgIFRoaXMgYnVpbGRzIHRoZSBkZWZhdWx0IGRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgREFNT05cbiAgNTQ6XHRcdCAgdGhhdCB3b3JrcyBmb3IgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2UuXG4gIDU1Olx0XG4gIDU2Olx0Y29uZmlnIERBTU9OX1ZBRERSX0tVTklUX1RFU1RcbiAgNTc6XHRcdGJvb2wgXCYjMzQ7VGVzdCBmb3IgREFNT04gb3BlcmF0aW9uc1wmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4gIDU4Olx0XHRkZXBlbmRzIG9uIERBTU9OX1ZBRERSIFx1MDAyNlx1MDAyNiBLVU5JVD15XG4gIDU5Olx0XHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xuICA2MDpcdFx0aGVscFxuICA2MTpcdFx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04gdmlydHVhbCBhZGRyZXNzZXMgb3BlcmF0aW9ucyBLdW5pdCB0ZXN0IHN1aXRlLlxuICA2MjpcdFxuICA2MzpcdFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBLVW5pdCBhbmQgdW5pdCB0ZXN0cyBpbiBnZW5lcmFsLCBwbGVhc2UgcmVmZXJcbiAgNjQ6XHRcdCAgdG8gdGhlIEtVbml0IGRvY3VtZW50YXRpb24uXG4gIDY1Olx0XG4gIDY2Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gIDY3Olx0XG4gIDY4Olx0Y29uZmlnIERBTU9OX1NZU0ZTXG4gIDY5Olx0XHRib29sIFwmIzM0O0RBTU9OIHN5c2ZzIGludGVyZmFjZVwmIzM0O1xuICA3MDpcdFx0ZGVwZW5kcyBvbiBEQU1PTiBcdTAwMjZcdTAwMjYgU1lTRlNcbiAgNzE6XHRcdGRlZmF1bHQgREFNT05cbiAgNzI6XHRcdGhlbHBcbiAgNzM6XHRcdCAgVGhpcyBidWlsZHMgdGhlIHN5c2ZzIGludGVyZmFjZSBmb3IgREFNT04uICBUaGUgdXNlciBzcGFjZSBjYW4gdXNlXG4gIDc0Olx0XHQgIHRoZSBpbnRlcmZhY2UgZm9yIGFyYml0cmFyeSBkYXRhIGFjY2VzcyBtb25pdG9yaW5nLlxuICA3NTpcdFxuICA3NjpcdGNvbmZpZyBEQU1PTl9TWVNGU19LVU5JVF9URVNUXG4gIDc3Olx0XHRib29sIFwmIzM0O1Rlc3QgZm9yIGRhbW9uIHN5c2ZzIGludGVyZmFjZVwmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4gIDc4Olx0XHRkZXBlbmRzIG9uIERBTU9OX1NZU0ZTIFx1MDAyNlx1MDAyNiBLVU5JVD15XG4gIDc5Olx0XHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xuICA4MDpcdFx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMTo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjc0NAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipOYXZpZ2F0aW5nIHRoZSBLY29uZmlnIExhbmRzY2FwZTogQSBRdWljayBBdWRpdCoqCgpSaWdodCwgbGV0JiMzOTtzIHNlZS4uLiB0aGUgY29kZSByZXZpZXcgaGFzIGZsYWdnZWQgc29tZXRoaW5nIGluIHRoZSBgbW0vZGFtb24vS2NvbmZpZ2AgZmlsZS4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgSSYjMzk7bSBhbHJlYWR5IGFudGljaXBhdGluZyB3aGF0IG1pZ2h0IGJlIGhhcHBlbmluZyBoZXJlLiBHaXZlbiB0aGUgc2NvcGUgb2YgdGhlIHBvdGVudGlhbCBpbXBhY3QsIGl0JiMzOTtzIGVzc2VudGlhbCB0byBxdWlja2x5IGFuZCBjYXJlZnVsbHkgcmV2aWV3IHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIGRlcGVuZGVuY2llcyB3aXRoaW4gdGhpcyBzcGVjaWZpYyBLY29uZmlnIGZpbGUuIFRoaXMgbGlrZWx5IHJlbGF0ZXMgdG8gdGhlIER5bmFtaWMgQWRhcHRpdmUgTWVtb3J5IE9wdGltaXplciAoREFNT04pIGZyYW1ld29yaywgc28gSSB3YW50IHRvIG1ha2Ugc3VyZSBJIGdyYXNwIHRoZSBkZXBlbmRlbmNpZXMgYW5kIHBvdGVudGlhbCBpbXBhY3RzIG9mIGFueSBjaGFuZ2VzIGJlaW5nIHByb3Bvc2VkLiBUaGlzIHF1aWNrIGNoZWNrIHdpbGwgZ2l2ZSBtZSBhIGJhc2VsaW5lIHRvIGRlY2lkZSB0aGUgbmV4dCBhY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDExOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZGFtb24vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDgxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgODE6XHRcdCAgVGhpcyBidWlsZHMgdGhlIERBTU9OIHN5c2ZzIGludGVyZmFjZSBLdW5pdCB0ZXN0IHN1aXRlLlxuICA4MjpcdFxuICA4MzpcdFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBLVW5pdCBhbmQgdW5pdCB0ZXN0cyBpbiBnZW5lcmFsLCBwbGVhc2UgcmVmZXJcbiAgODQ6XHRcdCAgdG8gdGhlIEtVbml0IGRvY3VtZW50YXRpb24uXG4gIDg1Olx0XG4gIDg2Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gIDg3Olx0XG4gIDg4Olx0Y29uZmlnIERBTU9OX1JFQ0xBSU1cbiAgODk6XHRcdGJvb2wgXCYjMzQ7QnVpbGQgREFNT04tYmFzZWQgcmVjbGFpbSAoREFNT05fUkVDTEFJTSlcJiMzNDtcbiAgOTA6XHRcdGRlcGVuZHMgb24gREFNT05fUEFERFJcbiAgOTE6XHRcdGhlbHBcbiAgOTI6XHRcdCAgVGhpcyBidWlsZHMgdGhlIERBTU9OLWJhc2VkIHJlY2xhbWF0aW9uIHN1YnN5c3RlbS4gIEl0IGZpbmRzIHBhZ2VzXG4gIDkzOlx0XHQgIHRoYXQgbm90IGFjY2Vzc2VkIGZvciBhIGxvbmcgdGltZSAoY29sZCkgdXNpbmcgREFNT04gYW5kIHJlY2xhaW1cbiAgOTQ6XHRcdCAgdGhvc2UuXG4gIDk1Olx0XG4gIDk2Olx0XHQgIFRoaXMgaXMgc3VnZ2VzdGVkIHRvIGJlIHVzZWQgYXMgYSBwcm9hY3RpdmUgYW5kIGxpZ2h0d2VpZ2h0XG4gIDk3Olx0XHQgIHJlY2xhbWF0aW9uIHVuZGVyIGxpZ2h0IG1lbW9yeSBwcmVzc3VyZSwgd2hpbGUgdGhlIHRyYWRpdGlvbmFsIHBhZ2VcbiAgOTg6XHRcdCAgc2Nhbm5pbmctYmFzZWQgcmVjbGFtYXRpb24gaXMgdXNlZCBmb3IgaGVhdnkgcHJlc3N1cmUuXG4gIDk5Olx0XG4gMTAwOlx0Y29uZmlnIERBTU9OX0xSVV9TT1JUXG4gMTAxOlx0XHRib29sIFwmIzM0O0J1aWxkIERBTU9OLWJhc2VkIExSVS1saXN0cyBzb3J0aW5nIChEQU1PTl9MUlVfU09SVClcJiMzNDtcbiAxMDI6XHRcdGRlcGVuZHMgb24gREFNT05fUEFERFJcbiAxMDM6XHRcdGhlbHBcbiAxMDQ6XHRcdCAgVGhpcyBidWlsZHMgdGhlIERBTU9OLWJhc2VkIExSVS1saXN0cyBzb3J0aW5nIHN1YnN5c3RlbS4gIEl0IHRyaWVzIHRvXG4gMTA1Olx0XHQgIHByb3RlY3QgZnJlcXVlbnRseSBhY2Nlc3NlZCAoaG90KSBwYWdlcyB3aGlsZSByYXJlbHkgYWNjZXNzZWQgKGNvbGQpXG4gMTA2Olx0XHQgIHBhZ2VzIHJlY2xhaW1lZCBmaXJzdCB1bmRlciBtZW1vcnkgcHJlc3N1cmUuXG4gMTA3Olx0XG4gMTA4Olx0Y29uZmlnIERBTU9OX1NUQVRcbiAxMDk6XHRcdGJvb2wgXCYjMzQ7QnVpbGQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBzdGF0IChEQU1PTl9TVEFUKVwmIzM0O1xuIDExMDpcdFx0ZGVwZW5kcyBvbiBEQU1PTl9QQUREUlxuIDExMTpcdFx0aGVscFxuIDExMjpcdFx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04tYmFzZWQgYWNjZXNzIG1vbml0b3Jpbmcgc3RhdGlzdGljcyBzdWJzeXN0ZW0uXG4gMTEzOlx0XHQgIEl0IHJ1bnMgREFNT04gYW5kIGV4cG9zZSBhY2Nlc3MgbW9uaXRvcmluZyByZXN1bHRzIGluIHNpbXBsZSBzdGF0XG4gMTE0Olx0XHQgIG1ldHJpY3MuXG4gMTE1Olx0XG4gMTE2Olx0Y29uZmlnIERBTU9OX1NUQVRfRU5BQkxFRF9ERUZBVUxUXG4gMTE3Olx0XHRib29sIFwmIzM0O0VuYWJsZSBEQU1PTl9TVEFUIGJ5IGRlZmF1bHRcJiMzNDtcbiAxMTg6XHRcdGRlcGVuZHMgb24gREFNT05fU1RBVFxuIDExOTpcdFx0ZGVmYXVsdCBEQU1PTl9TVEFUXG4gMTIwOlx0XHRoZWxwXG4gMTIxOlx0XHQgIFdoZXRoZXIgdG8gZW5hYmxlIERBTU9OX1NUQVQgYnkgZGVmYXVsdC4gIFVzZXJzIGNhbiBkaXNhYmxlIGl0IGluXG4gMTIyOlx0XHQgIGJvb3Qgb3IgcnVudGltZSB1c2luZyBpdHMgJiMzOTtlbmFibGVkJiMzOTsgcGFyYW1ldGVyLlxuIDEyMzpcdFxuIDEyNDpcdGVuZG1lbnVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTE6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM1ODcKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA1ODUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqV29ydGhGdXp6aW5nIERlY2lzaW9uIGZvciBtbS9kYW1vbi9jb3JlLmMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgYG1tL2RhbW9uL2NvcmUuY2AgaXMgcGFydCBvZiBtZW1vcnkgbWFuYWdlbWVudCwgc28gaXQgZmFsbHMgc3F1YXJlbHkgd2l0aGluIHRoZSAmIzM0O2NvcmUgc3Vic3lzdGVtcyYjMzQ7IGNhdGVnb3J5LiBUaGVyZWZvcmUsIGJhc2VkIG9uIHRoZSBjcml0ZXJpYSwgbW9kaWZ5aW5nIGNvZGUgaGVyZSBzdHJvbmdseSBzdWdnZXN0cyBpdCYjMzk7cyAqV29ydGhGdXp6aW5nPXRydWUqLgoKRmlyc3QsIGxldCYjMzk7cyBlbGltaW5hdGUgdGhlIG5lZ2F0aXZlcy4gSXMgdGhpcyBhIGRvY3VtZW50YXRpb24gY2hhbmdlPyBOby4gSXMgaXQgaGFyZHdhcmUtc3BlY2lmaWMgYW5kIHVucmVhY2hhYmxlPyBOb3BlLCB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHB1cmUgTU0sIGFuZCBhbWQ2NCBpcyBzdXBwb3J0ZWQuIEFuZCBpdCYjMzk7cyBkZWZpbml0ZWx5IG5vdCBzb21lIHVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoLiBTbywgd2UmIzM5O3JlIGNsZWFyIG9uIHRoZSAqZmFsc2UqIGNvbmRpdGlvbnMuCgpOb3cgZm9yIHRoZSAqdHJ1ZSogYXNzZXNzbWVudC4gU2luY2Ugd2UgYXJlIG1vZGlmeWluZyBjb2RlIGluc2lkZSBhIGNvcmUgc3Vic3lzdGVtLCBgV29ydGhGdXp6aW5nPXRydWVgIQoKTm93LCB0aGUgaW1wb3J0YW50IHBhcnQ6IGVuYWJsaW5nIGFuZCByZWFjaGluZyBgZGFtb3NfYWRqdXN0X3F1b3RhYC4gVG8gZmlndXJlIG91dCB0aGUgY29uZmlncywgYG1tL2RhbW9uL2NvcmUuY2AgaXMgdGhlIHRhcmdldCwgc3BlY2lmaWNhbGx5LCBgZGFtb3NfYWRqdXN0X3F1b3RhYC4gV2Ugc2VlIGl0JiMzOTtzIGxpbmtlZCB0byBgQ09ORklHX0RBTU9OYCwgY29uZmlybWVkIGJ5IHRoZSBgTWFrZWZpbGVgLiBPa2F5LCBidXQgaG93IGlzIHRoaXMgYWN0dWFsbHkgdHJpZ2dlcmVkPyBJdCYjMzk7cyBjYWxsZWQgZnJvbSBga2RhbW9uZF9hcHBseV9zY2hlbWVzYCwgYW5kIHRoYXQgcmVxdWlyZXMgREFNT04gdG8gYmUgY29uZmlndXJlZCB3aXRoIHNjaGVtZXMgYW5kIHJ1bm5pbmcuIFNvLCB0aGUgcXVlc3Rpb24gaXMsIGhvdyBkbyB5b3Ugc2V0IHVwIERBTU9OIHdpdGggc2NoZW1lcz8gRWl0aGVyIHVzaW5nIGBEQU1PTl9TWVNGU2AsIG9yIHdpdGggdGhlIERBTU9OIG1vZHVsZXMgbGlrZSBgREFNT05fUkVDTEFJTWAgb3IgYERBTU9OX0xSVV9TT1JUYCBvciBgREFNT05fU1RBVGAgb3IgY3VzdG9tIG9wZXJhdGlvbnMgKGBEQU1PTl9WQUREUmAsIGBEQU1PTl9QQUREUmApLgoKSG9sZCBvbi4gTG9va2luZyBhdCBgZGFtb3NfYWRqdXN0X3F1b3RhYCwgdGhlcmUmIzM5O3MgYSBrZXkgY2hlY2sgaGVyZTogYGMtJmd0O29wcy5nZXRfc2NoZW1lX3Njb3JlYC4gVGhhdCBmdW5jdGlvbiBwb2ludGVyIGhhcyB0byBiZSBzZXQgdXAuIFdoZXJlIGlzICp0aGF0KiBhc3NpZ25lZD8gTm93IEkgbmVlZCB0byBkbyBzb21lIG1vcmUgZGlnZ2luZyBhbmQgZ3JlcCBmb3IgYGdldF9zY2hlbWVfc2NvcmVgLiBUaGlzIHBvaW50ZXIgdG8gYSBmdW5jdGlvbiB3aWxsIGxlYWQgbWUgdG8gZmlndXJlIG91dCBob3cgdG8gYmVzdCBmdXp6IHRoaXMgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTE6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Z2V0X3NjaGVtZV9zY29yZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYz0yNDIyPXN0YXRpYyBib29sIGRhbW9zX3ZhbGlkX3RhcmdldChzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0yNDI2LVxubW0vZGFtb24vY29yZS5jOjI0Mjc6XHRpZiAoIXJldCB8fCAhZGFtb3NfcXVvdGFfaXNfc2V0KFx1MDAyNnMtXHUwMDNlcXVvdGEpIHx8ICFjLVx1MDAzZW9wcy5nZXRfc2NoZW1lX3Njb3JlKVxubW0vZGFtb24vY29yZS5jLTI0MjgtXHRcdHJldHVybiByZXQ7XG5tbS9kYW1vbi9jb3JlLmMtMjQyOS1cbm1tL2RhbW9uL2NvcmUuYzoyNDMwOlx0cmV0dXJuIGMtXHUwMDNlb3BzLmdldF9zY2hlbWVfc2NvcmUoYywgciwgcykgXHUwMDNlPSBzLVx1MDAzZXF1b3RhLm1pbl9zY29yZTtcbm1tL2RhbW9uL2NvcmUuYy0yNDMxLX1cbi0tXG5tbS9kYW1vbi9jb3JlLmM9MzMwND1zdGF0aWMgdm9pZCBkYW1vc19hZGp1c3RfcXVvdGEoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zMzQwLVx0XHRyZXR1cm47XG5tbS9kYW1vbi9jb3JlLmM6MzM0MTpcdGlmICghYy1cdTAwM2VvcHMuZ2V0X3NjaGVtZV9zY29yZSlcbm1tL2RhbW9uL2NvcmUuYy0zMzQyLVx0XHRyZXR1cm47XG4tLVxubW0vZGFtb24vY29yZS5jLTMzNTMtXHRcdFx0XHRjb250aW51ZTtcbm1tL2RhbW9uL2NvcmUuYzozMzU0Olx0XHRcdHNjb3JlID0gYy1cdTAwM2VvcHMuZ2V0X3NjaGVtZV9zY29yZShjLCByLCBzKTtcbm1tL2RhbW9uL2NvcmUuYy0zMzU1LVx0XHRcdGMtXHUwMDNlcmVnaW9uc19zY29yZV9oaXN0b2dyYW1bc2NvcmVdICYjNDM7PVxuLS1cbm1tL2RhbW9uL3BhZGRyLmM9NDYyPXN0YXRpYyBpbnQgX19pbml0IGRhbW9uX3BhX2luaXRjYWxsKHZvaWQpXG4tLVxubW0vZGFtb24vcGFkZHIuYy00NzMtXHRcdC5hcHBseV9zY2hlbWUgPSBkYW1vbl9wYV9hcHBseV9zY2hlbWUsXG5tbS9kYW1vbi9wYWRkci5jOjQ3NDpcdFx0LmdldF9zY2hlbWVfc2NvcmUgPSBkYW1vbl9wYV9zY2hlbWVfc2NvcmUsXG5tbS9kYW1vbi9wYWRkci5jLTQ3NS1cdH07XG4tLVxubW0vZGFtb24vdmFkZHIuYz0xMTQzPXN0YXRpYyBpbnQgX19pbml0IGRhbW9uX3ZhX2luaXRjYWxsKHZvaWQpXG4tLVxubW0vZGFtb24vdmFkZHIuYy0xMTU1LVx0XHQuYXBwbHlfc2NoZW1lID0gZGFtb25fdmFfYXBwbHlfc2NoZW1lLFxubW0vZGFtb24vdmFkZHIuYzoxMTU2Olx0XHQuZ2V0X3NjaGVtZV9zY29yZSA9IGRhbW9uX3ZhX3NjaGVtZV9zY29yZSxcbm1tL2RhbW9uL3ZhZGRyLmMtMTE1Ny1cdH07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDExOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MjU5CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTY5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRBTU9OIFNjaGVtZSBTY29yZSBhbmQgQ29udHJvbCoqCgpPa2F5LCBzbyB0aGUgYGdldF9zY2hlbWVfc2NvcmVgIGZ1bmN0aW9uLCB0aGF0JiMzOTtzIGRlZmluZWQgaW4gdHdvIHBsYWNlcyBkZXBlbmRpbmcgb24gd2hldGhlciB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHBoeXNpY2FsIG9yIHZpcnR1YWwgYWRkcmVzc2VzLCByaWdodD8gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGxvb2tpbmcgYXQgYG1tL2RhbW9uL3BhZGRyLmNgIGZvciBwaHlzaWNhbCBhZGRyZXNzZXMsIHVuZGVyIGBDT05GSUdfREFNT05fUEFERFJgLCBhbmQgYG1tL2RhbW9uL3ZhZGRyLmNgIGZvciB2aXJ0dWFsLCB1bmRlciBgQ09ORklHX0RBTU9OX1ZBRERSYC4gVGhhdCYjMzk7cyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLgoKTm93LCBob3cgZG9lcyB1c2Vyc3BhY2UgYWN0dWFsbHkgKnRhbGsqIHRvIERBTU9OPyBBaCwgeWVzLCBpdCYjMzk7cyB0aGUgYENPTkZJR19EQU1PTl9TWVNGU2Agb3B0aW9uLCBvciBkZWJ1Z2ZzIGlmIHdlJiMzOTtyZSBmZWVsaW5nIG9sZCBzY2hvb2wsIGJ1dCBzeXNmcyBpcyB0aGUgc3RhbmRhcmQgdGhlc2UgZGF5cy4gR29vZCwgZ29vZC4KCkhtbSwgd2FpdCBhIHNlY29uZC4gSSBuZWVkIHRvIGJlIHN1cmUuIERvZXMgYERBTU9OX1JFQ0xBSU1gIG9yIGBEQU1PTl9MUlVfU09SVGAgYWxzbyBsZXZlcmFnZSB0aGVzZSBEQU1PTiBzY2hlbWVzIHdpdGggYSBxdW90YT8gVGltZSB0byBkaWcgaW50byBgbW0vZGFtb24vcmVjbGFpbS5jYCBhbmQgYG1tL2RhbW9uL2xydV9zb3J0LmNgIGFuZCBmaW5kIG91dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTE6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cXVvdGEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbi9yZWNsYWltLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vcmVjbGFpbS5jPTQ4PW1vZHVsZV9wYXJhbShtaW5fYWdlLCB1bG9uZywgMDYwMCk7XG5tbS9kYW1vbi9yZWNsYWltLmMtNDktXG5tbS9kYW1vbi9yZWNsYWltLmM6NTA6c3RhdGljIHN0cnVjdCBkYW1vc19xdW90YSBkYW1vbl9yZWNsYWltX3F1b3RhID0ge1xubW0vZGFtb24vcmVjbGFpbS5jLTUxLVx0LyogdXNlIHVwIHRvIDEwIG1zIHRpbWUsIHJlY2xhaW0gdXAgdG8gMTI4IE1pQiBwZXIgMSBzZWMgYnkgZGVmYXVsdCAqL1xuLS1cbm1tL2RhbW9uL3JlY2xhaW0uYy01NC1cdC5yZXNldF9pbnRlcnZhbCA9IDEwMDAsXG5tbS9kYW1vbi9yZWNsYWltLmM6NTU6XHQvKiBXaXRoaW4gdGhlIHF1b3RhLCBwYWdlIG91dCBvbGRlciByZWdpb25zIGZpcnN0LiAqL1xubW0vZGFtb24vcmVjbGFpbS5jLTU2LVx0LndlaWdodF9zeiA9IDAsXG4tLVxubW0vZGFtb24vcmVjbGFpbS5jLTU5LX07XG5tbS9kYW1vbi9yZWNsYWltLmM6NjA6REVGSU5FX0RBTU9OX01PRFVMRVNfREFNT1NfUVVPVEFTKGRhbW9uX3JlY2xhaW1fcXVvdGEpO1xubW0vZGFtb24vcmVjbGFpbS5jLTYxLVxuLS1cbm1tL2RhbW9uL3JlY2xhaW0uYy02NC0gKlxubW0vZGFtb24vcmVjbGFpbS5jOjY1OiAqIFdoaWxlIGtlZXBpbmcgdGhlIGNhcHMgdGhhdCBzZXQgYnkgb3RoZXIgcXVvdGFzLCBEQU1PTl9SRUNMQUlNIGF1dG9tYXRpY2FsbHlcbm1tL2RhbW9uL3JlY2xhaW0uYzo2NjogKiBpbmNyZWFzZXMgYW5kIGRlY3JlYXNlcyB0aGUgZWZmZWN0aXZlIGxldmVsIG9mIHRoZSBxdW90YSBhaW1pbmcgdGhpcyBsZXZlbCBvZlxubW0vZGFtb24vcmVjbGFpbS5jLTY3LSAqIG1lbW9yeSBwcmVzc3VyZSBpcyBpbmN1cnJlZC4gIFN5c3RlbS13aWRlIGBgc29tZWBgIG1lbW9yeSBQU0kgaW4gbWljcm9zZWNvbmRzXG5tbS9kYW1vbi9yZWNsYWltLmM6Njg6ICogcGVyIHF1b3RhIHJlc2V0IGludGVydmFsIChgYHF1b3RhX3Jlc2V0X2ludGVydmFsX21zYGApIGlzIGNvbGxlY3RlZCBhbmRcbm1tL2RhbW9uL3JlY2xhaW0uYy02OS0gKiBjb21wYXJlZCB0byB0aGlzIHZhbHVlIHRvIHNlZSBpZiB0aGUgYWltIGlzIHNhdGlzZmllZC4gIFZhbHVlIHplcm8gbWVhbnNcbi0tXG5tbS9kYW1vbi9yZWNsYWltLmMtNzMtICovXG5tbS9kYW1vbi9yZWNsYWltLmM6NzQ6c3RhdGljIHVuc2lnbmVkIGxvbmcgcXVvdGFfbWVtX3ByZXNzdXJlX3VzIF9fcmVhZF9tb3N0bHk7XG5tbS9kYW1vbi9yZWNsYWltLmM6NzU6bW9kdWxlX3BhcmFtKHF1b3RhX21lbV9wcmVzc3VyZV91cywgdWxvbmcsIDA2MDApO1xubW0vZGFtb24vcmVjbGFpbS5jLTc2LVxubW0vZGFtb24vcmVjbGFpbS5jLTc3LS8qXG5tbS9kYW1vbi9yZWNsYWltLmM6Nzg6ICogVXNlci1zcGVjaWZpYWJsZSBmZWVkYmFjayBmb3IgYXV0by10dW5pbmcgb2YgdGhlIGVmZmVjdGl2ZSBxdW90YS5cbm1tL2RhbW9uL3JlY2xhaW0uYy03OS0gKlxubW0vZGFtb24vcmVjbGFpbS5jOjgwOiAqIFdoaWxlIGtlZXBpbmcgdGhlIGNhcHMgdGhhdCBzZXQgYnkgb3RoZXIgcXVvdGFzLCBEQU1PTl9SRUNMQUlNIGF1dG9tYXRpY2FsbHlcbm1tL2RhbW9uL3JlY2xhaW0uYzo4MTogKiBpbmNyZWFzZXMgYW5kIGRlY3JlYXNlcyB0aGUgZWZmZWN0aXZlIGxldmVsIG9mIHRoZSBxdW90YSBhaW1pbmcgcmVjZWl2aW5nIHRoaXNcbm1tL2RhbW9uL3JlY2xhaW0uYy04Mi0gKiBmZWVkYmFjayBvZiB2YWx1ZSBgYDEwLDAwMGBgIGZyb20gdGhlIHVzZXIuICBEQU1PTl9SRUNMQUlNIGFzc3VtZXMgdGhlIGZlZWRiYWNrXG5tbS9kYW1vbi9yZWNsYWltLmM6ODM6ICogdmFsdWUgYW5kIHRoZSBxdW90YSBhcmUgcG9zaXRpdmVseSBwcm9wb3J0aW9uYWwuICBWYWx1ZSB6ZXJvIG1lYW5zIGRpc2FibGluZ1xubW0vZGFtb24vcmVjbGFpbS5jLTg0LSAqIHRoaXMgYXV0by10dW5pbmcgZmVhdHVyZS5cbi0tXG5tbS9kYW1vbi9yZWNsYWltLmMtODgtICovXG5tbS9kYW1vbi9yZWNsYWltLmM6ODk6c3RhdGljIHVuc2lnbmVkIGxvbmcgcXVvdGFfYXV0b3R1bmVfZmVlZGJhY2sgX19yZWFkX21vc3RseTtcbm1tL2RhbW9uL3JlY2xhaW0uYzo5MDptb2R1bGVfcGFyYW0ocXVvdGFfYXV0b3R1bmVfZmVlZGJhY2ssIHVsb25nLCAwNjAwKTtcbm1tL2RhbW9uL3JlY2xhaW0uYy05MS1cbi0tXG5tbS9kYW1vbi9yZWNsYWltLmM9MTYxPURFRklORV9EQU1PTl9NT0RVTEVTX0RBTU9TX1NUQVRTX1BBUkFNUyhkYW1vbl9yZWNsYWltX3N0YXQsXG5tbS9kYW1vbi9yZWNsYWltLmM6MTYyOlx0XHRyZWNsYWltX3RyaWVkX3JlZ2lvbnMsIHJlY2xhaW1lZF9yZWdpb25zLCBxdW90YV9leGNlZWRzKTtcbm1tL2RhbW9uL3JlY2xhaW0uYy0xNjMtXG4tLVxubW0vZGFtb24vcmVjbGFpbS5jPTE2Nz1zdGF0aWMgc3RydWN0IGRhbW9zICpkYW1vbl9yZWNsYWltX25ld19zY2hlbWUodW5zaWduZWQgbG9uZyBhZ2dyX2ludGVydmFsKVxuLS1cbm1tL2RhbW9uL3JlY2xhaW0uYy0xODYtXHRcdFx0MCxcbm1tL2RhbW9uL3JlY2xhaW0uYzoxODc6XHRcdFx0LyogdW5kZXIgdGhlIHF1b3RhLiAqL1xubW0vZGFtb24vcmVjbGFpbS5jOjE4ODpcdFx0XHRcdTAwMjZkYW1vbl9yZWNsYWltX3F1b3RhLFxubW0vZGFtb24vcmVjbGFpbS5jLTE4OS1cdFx0XHQvKiAoRGUpYWN0aXZhdGUgdGhpcyBhY2NvcmRpbmcgdG8gdGhlIHdhdGVybWFya3MuICovXG4tLVxubW0vZGFtb24vcmVjbGFpbS5jPTE5ND1zdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fYXBwbHlfcGFyYW1ldGVycyh2b2lkKVxuLS1cbm1tL2RhbW9uL3JlY2xhaW0uYy0xOTktXHRzdHJ1Y3QgZGFtb3MgKnNjaGVtZTtcbm1tL2RhbW9uL3JlY2xhaW0uYzoyMDA6XHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZ29hbDtcbm1tL2RhbW9uL3JlY2xhaW0uYy0yMDEtXHRzdHJ1Y3QgZGFtb3NfZmlsdGVyICpmaWx0ZXI7XG4tLVxubW0vZGFtb24vcmVjbGFpbS5jLTIzNC1cbm1tL2RhbW9uL3JlY2xhaW0uYzoyMzU6XHRpZiAocXVvdGFfbWVtX3ByZXNzdXJlX3VzKSB7XG5tbS9kYW1vbi9yZWNsYWltLmM6MjM2Olx0XHRnb2FsID0gZGFtb3NfbmV3X3F1b3RhX2dvYWwoREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTLFxubW0vZGFtb24vcmVjbGFpbS5jOjIzNzpcdFx0XHRcdHF1b3RhX21lbV9wcmVzc3VyZV91cyk7XG5tbS9kYW1vbi9yZWNsYWltLmMtMjM4LVx0XHRpZiAoIWdvYWwpXG5tbS9kYW1vbi9yZWNsYWltLmMtMjM5LVx0XHRcdGdvdG8gb3V0O1xubW0vZGFtb24vcmVjbGFpbS5jOjI0MDpcdFx0ZGFtb3NfYWRkX3F1b3RhX2dvYWwoXHUwMDI2c2NoZW1lLVx1MDAzZXF1b3RhLCBnb2FsKTtcbm1tL2RhbW9uL3JlY2xhaW0uYy0yNDEtXHR9XG5tbS9kYW1vbi9yZWNsYWltLmMtMjQyLVxubW0vZGFtb24vcmVjbGFpbS5jOjI0MzpcdGlmIChxdW90YV9hdXRvdHVuZV9mZWVkYmFjaykge1xubW0vZGFtb24vcmVjbGFpbS5jOjI0NDpcdFx0Z29hbCA9IGRhbW9zX25ld19xdW90YV9nb2FsKERBTU9TX1FVT1RBX1VTRVJfSU5QVVQsIDEwMDAwKTtcbm1tL2RhbW9uL3JlY2xhaW0uYy0yNDUtXHRcdGlmICghZ29hbClcbm1tL2RhbW9uL3JlY2xhaW0uYy0yNDYtXHRcdFx0Z290byBvdXQ7XG5tbS9kYW1vbi9yZWNsYWltLmM6MjQ3Olx0XHRnb2FsLVx1MDAzZWN1cnJlbnRfdmFsdWUgPSBxdW90YV9hdXRvdHVuZV9mZWVkYmFjaztcbm1tL2RhbW9uL3JlY2xhaW0uYzoyNDg6XHRcdGRhbW9zX2FkZF9xdW90YV9nb2FsKFx1MDAyNnNjaGVtZS1cdTAwM2VxdW90YSwgZ29hbCk7XG5tbS9kYW1vbi9yZWNsYWltLmMtMjQ5LVx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMTo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzI1NwoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDk3MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGb2N1cyBTeW1ib2wgSWRlbnRpZmljYXRpb24gZm9yIERBTU9OIFF1b3RhIEFkanVzdG1lbnQqKgoKT2theSwgc28gSSYjMzk7bSB0cnlpbmcgdG8gZmlndXJlIG91dCB0aGUgbW9zdCByZWxldmFudCBmb2N1cyBzeW1ib2xzIGZvciB0aGlzIERBTU9OIHF1b3RhIGFkanVzdG1lbnQgZmVhdHVyZS4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgdG8gbG9vayBhdCB0aGUga2V5IGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgd2hpY2ggSSBrbm93IGFyZSBgQ09ORklHX0RBTU9OYCwgYENPTkZJR19EQU1PTl9TWVNGU2AsIGBDT05GSUdfREFNT05fUEFERFJgLCBgQ09ORklHX0RBTU9OX1ZBRERSYCwgYW5kIGBDT05GSUdfREFNT05fUkVDTEFJTWAuIEkgbmVlZCB0byBlbnN1cmUgdGhlIG5lY2Vzc2FyeSBkZXBlbmRlbmNpZXMgYXJlIG1ldC4gRnJvbSB0aGUgS2NvbmZpZyBmaWxlcywgSSBzZWUgdGhhdCBlbmFibGluZyBgREFNT05gIGF1dG9tYXRpY2FsbHkgZW5hYmxlcyB0aGUgb3RoZXJzLCBhc3N1bWluZyB0aGUgc3lzdGVtIGhhcyBhbiBNTVUuCgpOb3csIGZvY3VzaW5nIG9uIHRoZSBjb2RlLCBgREFNT05fUkVDTEFJTWAgYXBwZWFycyB0byBiZSB0aGUgcGxhY2Ugd2hlcmUgYGRhbW9uX3JlY2xhaW1fcXVvdGFgIGlzIHNldCwgYW5kIGl0IGFkZHMgcXVvdGEgZ29hbHMsIHdpdGggYERBTU9OX1BBRERSYCBkZXBlbmRpbmcgb24gaXQuIGBEQU1PTl9TWVNGU2AgaXMgaW1wb3J0YW50IGZvciB1c2VyLXNwYWNlIGNvbnRyb2wuIE15IGdvYWwgaXMgdG8gZGV0ZXJtaW5lIHRoZSBiZXN0IHN5bWJvbChzKSB0byByZXByZXNlbnQgdGhlIGNoYW5nZXMuCgpJJiMzOTt2ZSBob21lZCBpbiBvbiBgZGFtb3NfYWRqdXN0X3F1b3RhYCwgYSBzdGF0aWMgZnVuY3Rpb24gd2l0aGluIGBtbS9kYW1vbi9jb3JlLmNgLiBNeSBmaXJzdCBpbnN0aW5jdCB3YXMgdG8gY2hlY2sgaWYgaXQmIzM5O3MgaW5saW5lZCwgYnV0IGl0JiMzOTtzIG5vdC4gSXQgaXMgYHN0YXRpYyB2b2lkYC4gSSB0aGVuIG5lZWRlZCB0byBjb25maXJtIHdoZXRoZXIgaXQgaXMgYWN0dWFsbHkgaW5saW5lZCBieSB0aGUgY29tcGlsZXIuIEkgZm91bmQgaXQmIzM5O3Mgb25seSBjYWxsZWQgZnJvbSBga2RhbW9uZF9hcHBseV9zY2hlbWVzYCwgd2hpY2ggaW4gdHVybiBpcyBvbmx5IGNhbGxlZCBieSBga2RhbW9uZF9mbmAuIE5vdywgdGhlIGtleSBpcyB3aGV0aGVyIHRvIGxpc3QgYGRhbW9zX2FkanVzdF9xdW90YWAgaXRzZWxmLCBvciBvbmUgb2YgaXRzIGNhbGxlcnMuCgpCYXNlZCBvbiB0aGUgaW5zdHJ1Y3Rpb25zLCBzaW5jZSBgZGFtb3NfYWRqdXN0X3F1b3RhYCBpc24mIzM5O3QgaW4gYSBoZWFkZXIgYW5kIGlzIGZlYXR1cmUtc3BlY2lmaWMsIGl0ICpjb3VsZCogYmUgYSBmb2N1cyBzeW1ib2wsIG9yIG9uZSBvZiBpdHMgY2FsbGVycy4gU28sIEkgbmVlZCB0byBjaGVjayB0aGUgc3Vycm91bmRpbmcgZnVuY3Rpb25zLiBUaGUga2V5IGZ1bmN0aW9ucyBhcmUgYGRhbW9zX2FkanVzdF9xdW90YWAsIGBkYW1vc19xdW90YV9pc19mdWxsYCwgYW5kIGBrZGFtb25kX2FwcGx5X3NjaGVtZXNgLgoKSSBuZWVkIHRvIGFsc28gZXhhbWluZSBhbnkgc3lzZnMgZW50cnkgcG9pbnRzIG9yIGNvcmUgREFNT04gZW50cnlwb2ludHMuIFRoZSBxdWVzdGlvbnMgSSYjMzk7bSBhc2tpbmcgbXlzZWxmIGFyZTogSG93IGFyZSB0aGUgc2NoZW1lcyBhZGRlZD8gQXJlIHRoZXJlIGZ1bmN0aW9ucyBsaWtlIGBkYW1vc19uZXdfc2NoZW1lYCBvciBzeXNmcyBzY2hlbWUgY29tbWl0IHRoYXQgbWlnaHQgYmUgbW9yZSByZWxldmFudD8gSSBuZWVkIHRvIGxpc3QgZnVuY3Rpb25zIHRoYXQgaW1wbGVtZW50IHRoZSBzcGVjaWZpYyBsb2dpYy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTE6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb25fc2V0X3NjaGVtZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmM9MTEyMz1pbnQgZGFtb25fc2V0X2F0dHJzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX2F0dHJzICphdHRycylcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTE2Mi0vKipcbm1tL2RhbW9uL2NvcmUuYzoxMTYzOiAqIGRhbW9uX3NldF9zY2hlbWVzKCkgLSBTZXQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBiYXNlZCBvcGVyYXRpb24gc2NoZW1lcy5cbm1tL2RhbW9uL2NvcmUuYy0xMTY0LSAqIEBjdHg6XHRtb25pdG9yaW5nIGNvbnRleHRcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTE3MC0gKi9cbm1tL2RhbW9uL2NvcmUuYzoxMTcxOnZvaWQgZGFtb25fc2V0X3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb3MgKipzY2hlbWVzLFxubW0vZGFtb24vY29yZS5jLTExNzItXHRcdFx0c3NpemVfdCBucl9zY2hlbWVzKVxuLS1cbm1tL2RhbW9uL2xydV9zb3J0LmM9MjcxPXN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfYXBwbHlfcGFyYW1ldGVycyh2b2lkKVxuLS1cbm1tL2RhbW9uL2xydV9zb3J0LmMtMzE4LVxubW0vZGFtb24vbHJ1X3NvcnQuYzozMTk6XHRkYW1vbl9zZXRfc2NoZW1lcyhwYXJhbV9jdHgsIFx1MDAyNmhvdF9zY2hlbWUsIDEpO1xubW0vZGFtb24vbHJ1X3NvcnQuYy0zMjAtXHRkYW1vbl9hZGRfc2NoZW1lKHBhcmFtX2N0eCwgY29sZF9zY2hlbWUpO1xuLS1cbm1tL2RhbW9uL3JlY2xhaW0uYz0xOTQ9c3RhdGljIGludCBkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnModm9pZClcbi0tXG5tbS9kYW1vbi9yZWNsYWltLmMtMjMyLVx0XHRnb3RvIG91dDtcbm1tL2RhbW9uL3JlY2xhaW0uYzoyMzM6XHRkYW1vbl9zZXRfc2NoZW1lcyhwYXJhbV9jdHgsIFx1MDAyNnNjaGVtZSwgMSk7XG5tbS9kYW1vbi9yZWNsYWltLmMtMjM0LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMTo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTE4MwoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipEaXZpbmcgaW50byBEQU1PTiBDb3JlOiBDaGVja2luZyB0aGUgRW50cnkgUG9pbnRzKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhlIGhlYXJ0IG9mIHRoZSBEeW5hbWljIEFkYXB0aXZlIE1lbW9yeSBPcHRpbWl6ZXIgKERBTU9OKSBjb3JlLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGluaXRpYXRpb24gYW5kIG1haW4gZnVuY3Rpb24uIExldCYjMzk7cyBzZWUuLi4gSSYjMzk7bSB0aGlua2luZyBJJiMzOTtsbCBuZWVkIHRvIHJldmlzaXQgYGtkYW1vbmRfZm5gIGFuZCBgZGFtb25fc3RhcnRgIOKAkyB0aG9zZSBhcmUgdGhlIGtleSBlbnRyeSBwb2ludHMgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBtb25pdG9yaW5nIGFuZCBhZGFwdGF0aW9uIGFyZSBraWNrZWQgb2ZmIHdpdGhpbiBgbW0vZGFtb24vY29yZS5jYC4gSSYjMzk7bGwgaGF2ZSBhIGxvb2sgYXQgaG93IHRob3NlIGZ1bmN0aW9ucyBhcmUgY2FsbGVkIGFuZCBob3cgdGhleSBpbnRlcmFjdC4gUHJvYmFibHkgbmVlZCB0byBxdWlja2x5IGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZ2V0IHRoZSBjb250ZXh0LiBUaGF0JiMzOTtzIGEgZ29vZCBwbGFjZSB0byBzdGFydC4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMTo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYW1vbl9zdGFydCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYz0xMDg4PXN0YXRpYyBib29sIGRhbW9uX3ZhbGlkX2ludGVydmFsc19nb2FsKHN0cnVjdCBkYW1vbl9hdHRycyAqYXR0cnMpXG4tLVxubW0vZGFtb24vY29yZS5jLTExMTMtICogSW4gZGV0YWlsLCBhbGwgREFNT04gQVBJIGNhbGxlcnMgZGlyZWN0bHkgY2FsbCB0aGlzIGZ1bmN0aW9uIGZvciBpbml0aWFsXG5tbS9kYW1vbi9jb3JlLmM6MTExNDogKiBzZXR1cCBvZiBkYW1vbl9jdHggYmVmb3JlIGNhbGxpbmcgZGFtb25fc3RhcnQoKS4gIFNvbWUgb2YgdGhlIEFQSSBjYWxsZXJzXG5tbS9kYW1vbi9jb3JlLmMtMTExNS0gKiBhbHNvIGluZGlyZWN0bHkgY2FsbCB0aGlzIGZ1bmN0aW9uIHZpYSBkYW1vbl9jYWxsKCkgLVx1MDAzZSBkYW1vbl9jb21taXQoKSBmb3Jcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MjA0OD1zdGF0aWMgaW50IGtkYW1vbmRfZm4odm9pZCAqZGF0YSk7XG4tLVxubW0vZGFtb24vY29yZS5jLTIwNTAtLypcbm1tL2RhbW9uL2NvcmUuYzoyMDUxOiAqIF9fZGFtb25fc3RhcnQoKSAtIFN0YXJ0cyBtb25pdG9yaW5nIHdpdGggZ2l2ZW4gY29udGV4dC5cbm1tL2RhbW9uL2NvcmUuYy0yMDUyLSAqIEBjdHg6XHRtb25pdG9yaW5nIGNvbnRleHRcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjA1Ny0gKi9cbm1tL2RhbW9uL2NvcmUuYzoyMDU4OnN0YXRpYyBpbnQgX19kYW1vbl9zdGFydChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG5tbS9kYW1vbi9jb3JlLmMtMjA1OS17XG4tLVxubW0vZGFtb24vY29yZS5jLTIwODAtLyoqXG5tbS9kYW1vbi9jb3JlLmM6MjA4MTogKiBkYW1vbl9zdGFydCgpIC0gU3RhcnRzIHRoZSBtb25pdG9yaW5ncyBmb3IgYSBnaXZlbiBncm91cCBvZiBjb250ZXh0cy5cbm1tL2RhbW9uL2NvcmUuYy0yMDgyLSAqIEBjdHhzOlx0YW4gYXJyYXkgb2YgdGhlIHBvaW50ZXJzIGZvciBjb250ZXh0cyB0byBzdGFydCBtb25pdG9yaW5nXG4tLVxubW0vZGFtb24vY29yZS5jLTIwODktICogQGV4Y2x1c2l2ZSBpcyB0cnVlIGFuZCBhIGdyb3VwIG9mIHRocmVhZHMgdGhhdCBjcmVhdGVkIGJ5IG90aGVyXG5tbS9kYW1vbi9jb3JlLmM6MjA5MDogKiAmIzM5O2RhbW9uX3N0YXJ0KCkmIzM5OyBjYWxsIGlzIGN1cnJlbnRseSBydW5uaW5nLCB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90aGluZyBidXRcbm1tL2RhbW9uL2NvcmUuYy0yMDkxLSAqIHJldHVybnMgLUVCVVNZLlxuLS1cbm1tL2RhbW9uL2NvcmUuYy0yMDk0LSAqL1xubW0vZGFtb24vY29yZS5jOjIwOTU6aW50IGRhbW9uX3N0YXJ0KHN0cnVjdCBkYW1vbl9jdHggKipjdHhzLCBpbnQgbnJfY3R4cywgYm9vbCBleGNsdXNpdmUpXG5tbS9kYW1vbi9jb3JlLmMtMjA5Ni17XG4tLVxubW0vZGFtb24vY29yZS5jLTIxMjAtXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9jdHhzOyBpJiM0MzsmIzQzOykge1xubW0vZGFtb24vY29yZS5jOjIxMjE6XHRcdGVyciA9IF9fZGFtb25fc3RhcnQoY3R4c1tpXSk7XG5tbS9kYW1vbi9jb3JlLmMtMjEyMi1cdFx0aWYgKGVycilcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MjIyMz1pbnQgZGFtb25fY2FsbChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl9jYWxsX2NvbnRyb2wgKmNvbnRyb2wpXG4tLVxubW0vZGFtb24vY29yZS5jLTIyNzEtICpcbm1tL2RhbW9uL2NvcmUuYzoyMjcyOiAqIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgb25seSBhZnRlciBkYW1vbl9zdGFydCgpIHdpdGggdGhlXG5tbS9kYW1vbi9jb3JlLmMtMjI3My0gKiBAY3R4IGhhcyBzdWNjZWVkZWQuICBPdGhlcndpc2UsIHRoaXMgZnVuY3Rpb24gY291bGQgZmFsbCBpbnRvIGFuIGluZGVmaW5pdGVcbi0tXG5tbS9kYW1vbi9scnVfc29ydC5jPTQwMT1zdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X3R1cm4oYm9vbCBvbilcbi0tXG5tbS9kYW1vbi9scnVfc29ydC5jLTQxMy1cbm1tL2RhbW9uL2xydV9zb3J0LmM6NDE0Olx0ZXJyID0gZGFtb25fc3RhcnQoXHUwMDI2Y3R4LCAxLCB0cnVlKTtcbm1tL2RhbW9uL2xydV9zb3J0LmMtNDE1LVx0aWYgKGVycilcbi0tXG5tbS9kYW1vbi9yZWNsYWltLmM9MzI0PXN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV90dXJuKGJvb2wgb24pXG4tLVxubW0vZGFtb24vcmVjbGFpbS5jLTMzNi1cbm1tL2RhbW9uL3JlY2xhaW0uYzozMzc6XHRlcnIgPSBkYW1vbl9zdGFydChcdTAwMjZjdHgsIDEsIHRydWUpO1xubW0vZGFtb24vcmVjbGFpbS5jLTMzOC1cdGlmIChlcnIpXG4tLVxubW0vZGFtb24vc3RhdC5jPTIwMD1zdGF0aWMgaW50IGRhbW9uX3N0YXRfc3RhcnQodm9pZClcbi0tXG5tbS9kYW1vbi9zdGF0LmMtMjEyLVx0XHRyZXR1cm4gLUVOT01FTTtcbm1tL2RhbW9uL3N0YXQuYzoyMTM6XHRlcnIgPSBkYW1vbl9zdGFydChcdTAwMjZkYW1vbl9zdGF0X2NvbnRleHQsIDEsIHRydWUpO1xubW0vZGFtb24vc3RhdC5jLTIxNC1cdGlmIChlcnIpIHtcbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTI1MTU9c3RhdGljIGludCBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uKHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kICprZGFtb25kKVxuLS1cbm1tL2RhbW9uL3N5c2ZzLmMtMjUzOS1cdH1cbm1tL2RhbW9uL3N5c2ZzLmM6MjU0MDpcdGVyciA9IGRhbW9uX3N0YXJ0KFx1MDAyNmN0eCwgMSwgZmFsc2UpO1xubW0vZGFtb24vc3lzZnMuYy0yNTQxLVx0aWYgKGVycikge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMTo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDYwMAoJCQkJCQkJb3V0cHV0OiAxNjYKCQkJCQkJCXRob3VnaHRzOiAxMTA4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRBTU9OIENvZGUgQW5hbHlzaXMgU3VtbWFyeSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHRoZSBjb2RlIGluIGBtbS9kYW1vbi9jb3JlLmNgLCB0aGUga2V5IGZ1bmN0aW9uIGltcGFjdGVkIGJ5IHRoZSBjb21taXQgaXMgYGRhbW9zX2FkanVzdF9xdW90YWAsIHdoaWNoIGlzIGNhbGxlZCBkaXJlY3RseSBieSBga2RhbW9uZF9hcHBseV9zY2hlbWVzYC4gIGBkYW1vc19hZGp1c3RfcXVvdGFgIGFsc28gdXNlcyBgZGFtb3NfcXVvdGFfaXNfZnVsbGAgYXMgYSBoZWxwZXIuIENvbnNpZGVyaW5nIHRoZSBpbnN0cnVjdGlvbnMsIEkgbmVlZCB0byBpZGVudGlmeSBzcGVjaWZpYyBmZWF0dXJlIGxvZ2ljIG9yIGVudHJ5cG9pbnRzLgoKYGRhbW9zX2FkanVzdF9xdW90YWAgaXMgbm9uLWlubGluZSBhbmQgc3RhdGljLCBzbyBpdCYjMzk7cyBhIGdvb2QgdGFyZ2V0IGZvciBmb2N1cywgYW5kIGl0cyBjYWxsZXIsIGBrZGFtb25kX2FwcGx5X3NjaGVtZXNgLCBpcyBhbHNvIG5vbi1pbmxpbmUuIGBkYW1vbl9zdGFydGAgaXMgdWJpcXVpdG91cyBpbiBEQU1PTiwgc28gaXQmIzM5O3Mgbm90IGEgZ29vZCBjaG9pY2UgYmFzZWQgb24gdGhlIGluc3RydWN0aW9ucy4gIEkmIzM5O20gY29uZmlkZW50IGBkYW1vc19hZGp1c3RfcXVvdGFgIGlzIHRoZSBmdW5jdGlvbiAqZGlyZWN0bHkqIG1vZGlmaWVkLCBhbmQgYGtkYW1vbmRfYXBwbHlfc2NoZW1lc2AgaXMgaXRzIGNhbGxlci4gVGhlc2UgYXJlIHRoZSAqZm9jdXMgc3ltYm9scyogSSBzaG91bGQgbGlzdC4KCk5vdyBmb3IgY29uZmlndXJhdGlvbnMuIFRvIGdldCB0byB0aGUgbW9kaWZpZWQgY29kZSBpbiBgZGFtb3NfYWRqdXN0X3F1b3RhYCwgSSBzZWUgdGhhdCBga2RhbW9uZF9hcHBseV9zY2hlbWVzYCBuZWVkcyBgIWxpc3RfZW1wdHkoJmFtcDtjdHgtJmd0O3NjaGVtZXMpYC4gRnVydGhlcm1vcmUsIGluc2lkZSBgZGFtb3NfYWRqdXN0X3F1b3RhYCwgdGhlIHF1b3RhIGNoZWNrIGFuZCBoaXN0b2dyYW0gY29kZSBpcyBvbmx5IGV4ZWN1dGVkIGlmIGBjLSZndDtvcHMuZ2V0X3NjaGVtZV9zY29yZWAgaXMgc2V0LiBUaGlzIG1lYW5zIGBEQU1PTl9QQUREUmAgb3IgYERBTU9OX1ZBRERSYCBtdXN0IGJlIGVuYWJsZWQuIFNpbmNlIHRoZSBzY2hlbWVzIGFyZSBzZXQgdmlhIGBEQU1PTl9TWVNGU2AgKHVzZXIgc3BhY2UpIG9yIGBEQU1PTl9SRUNMQUlNYCBvciBgREFNT05fTFJVX1NPUlRgLCBJIG5lZWQgdG8gZW5hYmxlOiBgREFNT05gLCBgREFNT05fUEFERFJgLCBgREFNT05fVkFERFJgLCBgREFNT05fU1lTRlNgLCBhbmQgYERBTU9OX1JFQ0xBSU1gLiAgSSYjMzk7dmUgY2hlY2tlZCB0aGUgS2NvbmZpZyBkZXBlbmRlbmNpZXMsIGFuZCB0aGVzZSBhbGwgbWFrZSBzZW5zZS4KCkkmIzM5O3ZlIG1hZGUgc3VyZSB0byBjb3ZlciBhbGwgdGhlIGRlcGVuZGVuY2llcywgaW5jbHVkaW5nIGBTWVNGU2AgYW5kIGBNTVVgIHdoaWNoIGFyZSBzdGFuZGFyZCBvbiBhbWQ2NC4gVGhlcmVmb3JlLCBJIGNhbiBjb25maXJtIHRoYXQgdGhlIGBXb3J0aEZ1enppbmdgIGJvb2xlYW4gaXMgdHJ1ZSwgdGhlIHJlYXNvbmluZyBpcyBjb25jaXNlLCB0aGUgYEZvY3VzU3ltYm9sc2AgYXJlIGBkYW1vc19hZGp1c3RfcXVvdGFgIGFuZCBga2RhbW9uZF9hcHBseV9zY2hlbWVzYCwgYW5kIHRoZSBgRW5hYmxlQ29uZmlnc2AgYXJlIGBEQU1PTmAsIGBEQU1PTl9TWVNGU2AsIGBEQU1PTl9QQUREUmAsIGBEQU1PTl9WQUREUmAsIGFuZCBgREFNT05fUkVDTEFJTWAuIExvb2tzIGdvb2QuIFRpbWUgdG8gbW92ZSBvbiBhbmQgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMTo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7REFNT04mIzM0OywKICAgICYjMzQ7REFNT05fU1lTRlMmIzM0OywKICAgICYjMzQ7REFNT05fUEFERFImIzM0OywKICAgICYjMzQ7REFNT05fVkFERFImIzM0OywKICAgICYjMzQ7REFNT05fUkVDTEFJTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RhbW9zX2FkanVzdF9xdW90YSYjMzQ7LAogICAgJiMzNDtrZGFtb25kX2FwcGx5X3NjaGVtZXMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBpbiBEQU1PTiAobW0vZGFtb24vY29yZS5jKSBieSBpbnRyb2R1Y2luZyBhbiBlYXJseSBleGl0IGNoZWNrIGluIGRhbW9zX2FkanVzdF9xdW90YSgpIHdoZW4gdGhlIHF1b3RhIGlzIGFscmVhZHkgZnVsbC4gVGhpcyBhdm9pZHMgdW5uZWNlc3NhcnkgcmVnaW9uIHNjb3JlIGhpc3RvZ3JhbSBjYWxjdWxhdGlvbnMuIEJlY2F1c2UgdGhpcyBjaGFuZ2VzIHJlYWNoYWJsZSBleGVjdXRpb24gbG9naWMgaW4gYSBjb3JlIE1NIHN1YnN5c3RlbSBhY2Nlc3NpYmxlIHZpYSBEQU1PTiBzeXNmcyBhbmQgbW9kdWxlIGludGVyZmFjZXMgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBpdCBpcyB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtEQU1PTiYjMzQ7LAogICAgJiMzNDtEQU1PTl9TWVNGUyYjMzQ7LAogICAgJiMzNDtEQU1PTl9QQUREUiYjMzQ7LAogICAgJiMzNDtEQU1PTl9WQUREUiYjMzQ7LAogICAgJiMzNDtEQU1PTl9SRUNMQUlNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGFtb3NfYWRqdXN0X3F1b3RhJiMzNDssCiAgICAmIzM0O2tkYW1vbmRfYXBwbHlfc2NoZW1lcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGluIERBTU9OIChtbS9kYW1vbi9jb3JlLmMpIGJ5IGludHJvZHVjaW5nIGFuIGVhcmx5IGV4aXQgY2hlY2sgaW4gZGFtb3NfYWRqdXN0X3F1b3RhKCkgd2hlbiB0aGUgcXVvdGEgaXMgYWxyZWFkeSBmdWxsLiBUaGlzIGF2b2lkcyB1bm5lY2Vzc2FyeSByZWdpb24gc2NvcmUgaGlzdG9ncmFtIGNhbGN1bGF0aW9ucy4gQmVjYXVzZSB0aGlzIGNoYW5nZXMgcmVhY2hhYmxlIGV4ZWN1dGlvbiBsb2dpYyBpbiBhIGNvcmUgTU0gc3Vic3lzdGVtIGFjY2Vzc2libGUgdmlhIERBTU9OIHN5c2ZzIGFuZCBtb2R1bGUgaW50ZXJmYWNlcyBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIGl0IGlzIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDExOjUzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTE6NTM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGFuIGVhcmx5IHJldHVybiBpbiBkYW1vc19hZGp1c3RfcXVvdGEoKSBpZiB0aGUgcXVvdGEgaXMgYWxyZWFkeSBleGhhdXN0ZWQgKGRhbW9zX3F1b3RhX2lzX2Z1bGwoKSkuIFRoaXMgc2tpcHMgcmVjYWxjdWxhdGlvbiBvZiB0aGUgc2NoZW1lIHNjb3JlIGhpc3RvZ3JhbSBhbmQgbWluX3Njb3JlLlxuXG5ObyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBtZW1vcnkgYWxsb2NhdGlvbnMgYXJlIGludHJvZHVjZWQgb3IgcmVhZC4gVGhlIHNraXBwZWQgaGlzdG9ncmFtIGJ1ZmZlciAoYy1cdTAwM2VyZWdpb25zX3Njb3JlX2hpc3RvZ3JhbSkgaXMgc3RyaWN0bHkgaW50ZXJuYWwgdG8gdGhpcyBmdW5jdGlvbiBhbmQgaXMgYWx3YXlzIHplcm9lZCB2aWEgbWVtc2V0KCkgcHJpb3IgdG8gdXNlIHdoZW4gYWNjZXNzZWQuIE5vIGRhdGEgaXMgY29waWVkIHRvIHVzZXIgc3BhY2Ugb3IgdXNlZCBpbiB1bmluaXRpYWxpemVkIHN0YXRlLiBBbnkgcG90ZW50aWFsIG1lbW9yeSBzYWZldHkgaXNzdWVzIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMpIHdvdWxkIGJlIGRldGVjdGVkIGJ5IHN0YW5kYXJkIEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIHJ1biBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNzcwZjI5MDA3OTY4ZTgzYzk5NjczMDhjMWRjNjJhMTk5MWZkZjYzMQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gU2VwIDEzIDExOjUyOjAzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vZGFtb24vY29yZS5jIGIvbW0vZGFtb24vY29yZS5jCmluZGV4IDBjOThmN2UyNjdkMDcuLjNkN2E5NzNlYThiNmYgMTAwNjQ0Ci0tLSBhL21tL2RhbW9uL2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi9jb3JlLmMKQEAgLTMzMzYsNiAmIzQzOzMzMzYsOCBAQCBzdGF0aWMgdm9pZCBkYW1vc19hZGp1c3RfcXVvdGEoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzKQogCQkJZGFtb3NfdHJhY2VfZXN6KGMsIHMsIHF1b3RhKTsKIAl9CiAKJiM0MzsJaWYgKGRhbW9zX3F1b3RhX2lzX2Z1bGwocXVvdGEsIGMtJmd0O21pbl9yZWdpb25fc3opKQomIzQzOwkJcmV0dXJuOwogCWlmICghYy0mZ3Q7b3BzLmdldF9zY2hlbWVfc2NvcmUpCiAJCXJldHVybjsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTE6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA3MQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggdGhpcyBhbmFseXNpczoKCioqQW5hbHl6aW5nIHRoZSBQYXRjaDogSW5pdGlhbCBUaG91Z2h0cyoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHN0YXJ0IGJ5IHVuZGVyc3RhbmRpbmcgdGhpcyBwYXRjaCBhbmQgaXRzIGNvbnRleHQuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHplcm8gaW4gb24gYG1tL2RhbW9uL2NvcmUuY2AgYXJvdW5kIGxpbmUgMzMzNi4gSSYjMzk7bGwga2ljayB0aGluZ3Mgb2ZmIGJ5IHVzaW5nIG15IHN0YW5kYXJkIHRvb2xzIC0gSSYjMzk7bGwgYHJlYWQtZmlsZWAgdGhhdCBzZWN0aW9uIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIHN1cnJvdW5kaW5nIGNvZGUgYW5kIGlkZW50aWZ5IHRoZSBleGFjdCBhcmVhIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcuIEkgY2FuIGFscmVhZHkgaW1hZ2luZSB0aGUgdHlwZSBvZiBkYXRhIHN0cnVjdHVyZXMgYW5kIGxvZ2ljIEkmIzM5O20gZ29pbmcgdG8gYmUgbG9va2luZyBhdCBpbiB0aGF0IGZpbGUuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBmb3VuZGF0aW9uIGJlZm9yZSBJIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgY2hhbmdlcyB0aGVtc2VsdmVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMTo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMzMjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzMyMDpcdFx0XHRcdGRhbW9zX3RyYWNlX2VzeihjLCBzLCBxdW90YSk7XG4zMzIxOlx0XHR9XG4zMzIyOlx0XG4zMzIzOlx0XHQvKiBOZXcgY2hhcmdlIHdpbmRvdyBzdGFydHMgKi9cbjMzMjQ6XHRcdGlmICghdGltZV9pbl9yYW5nZV9vcGVuKGppZmZpZXMsIHF1b3RhLVx1MDAzZWNoYXJnZWRfZnJvbSxcbjMzMjU6XHRcdFx0XHRcdHF1b3RhLVx1MDAzZWNoYXJnZWRfZnJvbSAmIzQzO1xuMzMyNjpcdFx0XHRcdFx0bXNlY3NfdG9famlmZmllcyhxdW90YS1cdTAwM2VyZXNldF9pbnRlcnZhbCkpKSB7XG4zMzI3Olx0XHRcdGlmIChkYW1vc19xdW90YV9pc19mdWxsKHF1b3RhLCBjLVx1MDAzZW1pbl9yZWdpb25fc3opKVxuMzMyODpcdFx0XHRcdHMtXHUwMDNlc3RhdC5xdF9leGNlZWRzJiM0MzsmIzQzOztcbjMzMjk6XHRcdFx0cXVvdGEtXHUwMDNldG90YWxfY2hhcmdlZF9zeiAmIzQzOz0gcXVvdGEtXHUwMDNlY2hhcmdlZF9zejtcbjMzMzA6XHRcdFx0cXVvdGEtXHUwMDNlY2hhcmdlZF9mcm9tID0gamlmZmllcztcbjMzMzE6XHRcdFx0cXVvdGEtXHUwMDNlY2hhcmdlZF9zeiA9IDA7XG4zMzMyOlx0XHRcdGlmICh0cmFjZV9kYW1vc19lc3pfZW5hYmxlZCgpKVxuMzMzMzpcdFx0XHRcdGNhY2hlZF9lc3ogPSBxdW90YS1cdTAwM2Vlc3o7XG4zMzM0Olx0XHRcdGRhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGEoYywgcyk7XG4zMzM1Olx0XHRcdGlmICh0cmFjZV9kYW1vc19lc3pfZW5hYmxlZCgpIFx1MDAyNlx1MDAyNiBxdW90YS1cdTAwM2Vlc3ogIT0gY2FjaGVkX2VzeilcbjMzMzY6XHRcdFx0XHRkYW1vc190cmFjZV9lc3ooYywgcywgcXVvdGEpO1xuMzMzNzpcdFx0fVxuMzMzODpcdFxuMzMzOTpcdFx0aWYgKGRhbW9zX3F1b3RhX2lzX2Z1bGwocXVvdGEsIGMtXHUwMDNlbWluX3JlZ2lvbl9zeikpXG4zMzQwOlx0XHRcdHJldHVybjtcbjMzNDE6XHRcdGlmICghYy1cdTAwM2VvcHMuZ2V0X3NjaGVtZV9zY29yZSlcbjMzNDI6XHRcdFx0cmV0dXJuO1xuMzM0MzpcdFxuMzM0NDpcdFx0LyogRmlsbCB1cCB0aGUgc2NvcmUgaGlzdG9ncmFtICovXG4zMzQ1Olx0XHRtZW1zZXQoYy1cdTAwM2VyZWdpb25zX3Njb3JlX2hpc3RvZ3JhbSwgMCxcbjMzNDY6XHRcdFx0XHRzaXplb2YoKmMtXHUwMDNlcmVnaW9uc19zY29yZV9oaXN0b2dyYW0pICpcbjMzNDc6XHRcdFx0XHQoREFNT1NfTUFYX1NDT1JFICYjNDM7IDEpKTtcbjMzNDg6XHRcdGRhbW9uX2Zvcl9lYWNoX3RhcmdldCh0LCBjKSB7XG4zMzQ5Olx0XHRcdGRhbW9uX2Zvcl9lYWNoX3JlZ2lvbihyLCB0KSB7XG4zMzUwOlx0XHRcdFx0aWYgKCFfX2RhbW9zX3ZhbGlkX3RhcmdldChyLCBzLCBjKSlcbjMzNTE6XHRcdFx0XHRcdGNvbnRpbnVlO1xuMzM1MjpcdFx0XHRcdGlmIChkYW1vc19jb3JlX2ZpbHRlcl9vdXQoYywgdCwgciwgcykpXG4zMzUzOlx0XHRcdFx0XHRjb250aW51ZTtcbjMzNTQ6XHRcdFx0XHRzY29yZSA9IGMtXHUwMDNlb3BzLmdldF9zY2hlbWVfc2NvcmUoYywgciwgcyk7XG4zMzU1Olx0XHRcdFx0Yy1cdTAwM2VyZWdpb25zX3Njb3JlX2hpc3RvZ3JhbVtzY29yZV0gJiM0Mzs9XG4zMzU2Olx0XHRcdFx0XHRkYW1vbl9zel9yZWdpb24ocik7XG4zMzU3Olx0XHRcdFx0aWYgKHNjb3JlIFx1MDAzZSBtYXhfc2NvcmUpXG4zMzU4Olx0XHRcdFx0XHRtYXhfc2NvcmUgPSBzY29yZTtcbjMzNTk6XHRcdFx0fVxuMzM2MDpcdFx0fVxuMzM2MTpcdFxuMzM2MjpcdFx0LyogU2V0IHRoZSBtaW4gc2NvcmUgbGltaXQgKi9cbjMzNjM6XHRcdGZvciAoY3VtdWxhdGVkX3N6ID0gMCwgc2NvcmUgPSBtYXhfc2NvcmU7IDsgc2NvcmUtLSkge1xuMzM2NDpcdFx0XHRjdW11bGF0ZWRfc3ogJiM0Mzs9IGMtXHUwMDNlcmVnaW9uc19zY29yZV9oaXN0b2dyYW1bc2NvcmVdO1xuMzM2NTpcdFx0XHRpZiAoY3VtdWxhdGVkX3N6IFx1MDAzZT0gcXVvdGEtXHUwMDNlZXN6IHx8ICFzY29yZSlcbjMzNjY6XHRcdFx0XHRicmVhaztcbjMzNjc6XHRcdH1cbjMzNjg6XHRcdHF1b3RhLVx1MDAzZW1pbl9zY29yZSA9IHNjb3JlO1xuMzM2OTpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTE6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzEzMgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuCgoqKkV4YW1pbmluZyB0aGUgYGRhbW9zX2FkanVzdF9xdW90YWAgRnVuY3Rpb24qKgoKUmlnaHQsIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHdpdGggYGRhbW9zX2FkanVzdF9xdW90YWAsIHNvIEkmIzM5O2xsIGJlIGNoZWNraW5nIGl0cyBpbXBsZW1lbnRhdGlvbiB3aXRoaW4gYG1tL2RhbW9uL2NvcmUuY2AuIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0gbWFuYWdlcyBhbmQgYWRqdXN0cyBxdW90YXMuIEkgd2lsbCBmb2N1cyBvbiBsaW5lcyAzMzAwIHRocm91Z2ggMzM0MCwgYXMgdGhlIGNvZGUgYXJvdW5kIGEgZnVuY3Rpb24gb2Z0ZW4gZ2l2ZXMgY3JpdGljYWwgaW5zaWdodHMgaW50byBpdHMgcHVycG9zZSBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBzdXJyb3VuZGluZyBhcmNoaXRlY3R1cmUuIFJlYWRpbmcgdGhhdCBibG9jayBzaG91bGQgcHJvdmlkZSBhIGNyaXRpY2FsIHNuYXBzaG90IGludG8gdGhlIHF1b3RhIGFkanVzdG1lbnQgcHJvY2Vzcy4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gbG9va2luZyBmb3IgaG93IHRoZSBhZGp1c3RtZW50cyBhcmUgdHJpZ2dlcmVkLCBhbmQgd2hhdCBwYXJhbWV0ZXJzIGl0IG1heSB1c2UuIFBlcmhhcHMgdGhlIGNvbmRpdGlvbmFsIGJyYW5jaGVzLCB2YXJpYWJsZSBhc3NpZ25tZW50cywgYW5kIGZ1bmN0aW9uIGNhbGxzIHdpbGwgZ2l2ZSBhd2F5IHRoZSBzZWNyZXRzIG9mIGBkYW1vc19hZGp1c3RfcXVvdGFgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMTo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMzMDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzMwMDpcdFx0fVxuMzMwMTpcdFx0dHJhY2VfZGFtb3NfZXN6KGNpZHgsIHNpZHgsIHF1b3RhLVx1MDAzZWVzeik7XG4zMzAyOlx0fVxuMzMwMzpcdFxuMzMwNDpcdHN0YXRpYyB2b2lkIGRhbW9zX2FkanVzdF9xdW90YShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb3MgKnMpXG4zMzA1Olx0e1xuMzMwNjpcdFx0c3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSA9IFx1MDAyNnMtXHUwMDNlcXVvdGE7XG4zMzA3Olx0XHRzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0O1xuMzMwODpcdFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqcjtcbjMzMDk6XHRcdHVuc2lnbmVkIGxvbmcgY3VtdWxhdGVkX3N6LCBjYWNoZWRfZXN6O1xuMzMxMDpcdFx0dW5zaWduZWQgaW50IHNjb3JlLCBtYXhfc2NvcmUgPSAwO1xuMzMxMTpcdFxuMzMxMjpcdFx0aWYgKCFxdW90YS1cdTAwM2VtcyBcdTAwMjZcdTAwMjYgIXF1b3RhLVx1MDAzZXN6IFx1MDAyNlx1MDAyNiBsaXN0X2VtcHR5KFx1MDAyNnF1b3RhLVx1MDAzZWdvYWxzKSlcbjMzMTM6XHRcdFx0cmV0dXJuO1xuMzMxNDpcdFxuMzMxNTpcdFx0LyogRmlyc3QgY2hhcmdlIHdpbmRvdyAqL1xuMzMxNjpcdFx0aWYgKCFxdW90YS1cdTAwM2V0b3RhbF9jaGFyZ2VkX3N6IFx1MDAyNlx1MDAyNiAhcXVvdGEtXHUwMDNlY2hhcmdlZF9mcm9tKSB7XG4zMzE3Olx0XHRcdHF1b3RhLVx1MDAzZWNoYXJnZWRfZnJvbSA9IGppZmZpZXM7XG4zMzE4Olx0XHRcdGRhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGEoYywgcyk7XG4zMzE5Olx0XHRcdGlmICh0cmFjZV9kYW1vc19lc3pfZW5hYmxlZCgpKVxuMzMyMDpcdFx0XHRcdGRhbW9zX3RyYWNlX2VzeihjLCBzLCBxdW90YSk7XG4zMzIxOlx0XHR9XG4zMzIyOlx0XG4zMzIzOlx0XHQvKiBOZXcgY2hhcmdlIHdpbmRvdyBzdGFydHMgKi9cbjMzMjQ6XHRcdGlmICghdGltZV9pbl9yYW5nZV9vcGVuKGppZmZpZXMsIHF1b3RhLVx1MDAzZWNoYXJnZWRfZnJvbSxcbjMzMjU6XHRcdFx0XHRcdHF1b3RhLVx1MDAzZWNoYXJnZWRfZnJvbSAmIzQzO1xuMzMyNjpcdFx0XHRcdFx0bXNlY3NfdG9famlmZmllcyhxdW90YS1cdTAwM2VyZXNldF9pbnRlcnZhbCkpKSB7XG4zMzI3Olx0XHRcdGlmIChkYW1vc19xdW90YV9pc19mdWxsKHF1b3RhLCBjLVx1MDAzZW1pbl9yZWdpb25fc3opKVxuMzMyODpcdFx0XHRcdHMtXHUwMDNlc3RhdC5xdF9leGNlZWRzJiM0MzsmIzQzOztcbjMzMjk6XHRcdFx0cXVvdGEtXHUwMDNldG90YWxfY2hhcmdlZF9zeiAmIzQzOz0gcXVvdGEtXHUwMDNlY2hhcmdlZF9zejtcbjMzMzA6XHRcdFx0cXVvdGEtXHUwMDNlY2hhcmdlZF9mcm9tID0gamlmZmllcztcbjMzMzE6XHRcdFx0cXVvdGEtXHUwMDNlY2hhcmdlZF9zeiA9IDA7XG4zMzMyOlx0XHRcdGlmICh0cmFjZV9kYW1vc19lc3pfZW5hYmxlZCgpKVxuMzMzMzpcdFx0XHRcdGNhY2hlZF9lc3ogPSBxdW90YS1cdTAwM2Vlc3o7XG4zMzM0Olx0XHRcdGRhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGEoYywgcyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDExOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5NzkKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA3OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBDb2RlIENoYW5nZSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBzZWUgYSBkaWZmIGludHJvZHVjaW5nIHNvbWUgbmV3IGxvZ2ljLiBTcGVjaWZpY2FsbHksIHRoaXMgYmxvY2s6CgpgYGBjCiYjNDM7CWlmIChkYW1vc19xdW90YV9pc19mdWxsKHF1b3RhLCBjLSZndDttaW5fcmVnaW9uX3N6KSkKJiM0MzsJCXJldHVybjsKIAlpZiAoIWMtJmd0O29wcy5nZXRfc2NoZW1lX3Njb3JlKQogCQlyZXR1cm47CmBgYAoKSXQgc2VlbXMgbGlrZSB3ZSYjMzk7cmUgYWRkaW5nIGEgY2hlY2sgcmVsYXRlZCB0byBhICYjMzQ7ZGFtb3NfcXVvdGEmIzM0Oy4gVGhlIGltbWVkaWF0ZSBhY3Rpb24gaXMgYSBgcmV0dXJuO2AsIHNvIGl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIHNob3J0LWNpcmN1aXRpbmcgZXhlY3V0aW9uIGlmIHNvbWUgY29uZGl0aW9uIGlzIG1ldC4gVGhlIGZpcnN0IHBhcnQgZm9jdXNlcyBvbiBhIGNoZWNrIHVzaW5nIGBkYW1vc19xdW90YV9pc19mdWxsYCBhbmQgY29tcGFyaW5nIHRoZSBxdW90YSB3aXRoIGBjLSZndDttaW5fcmVnaW9uX3N6YC4gVGhhdCByYWlzZXMgc29tZSBxdWVzdGlvbnM7IGl0IHdvdWxkIGJlIGdvb2QgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY29uZGl0aW9uLgoKSWYgdGhlIHF1b3RhIGlzIGZ1bGwsIHRoZW4gd2hhdD8gQXJlIHRoZXJlIHN1YnNlcXVlbnQgZnVuY3Rpb25zIHRoYXQgYXR0ZW1wdCB0byBhbGxvY2F0ZSBwYXN0IHRoYXQ/IElzIHRoaXMgYW4gYXR0ZW1wdCBhdCBtZW1vcnkgcHJvdGVjdGlvbj8KClRoZSBzZWNvbmQgcGFydCBjaGVja3MgZm9yIHRoZSBleGlzdGVuY2Ugb2YgYGMtJmd0O29wcy5nZXRfc2NoZW1lX3Njb3JlYCwgYW5kIGlmIGl0IGRvZXMgbm90IGV4aXN0LCBpdCBhbHNvIHJldHVybnMuIFRoaXMgaXMgcHJvYmFibHkgYSBwb2ludGVyIHZhbGlkYXRpb24gaXNzdWUuIEl0JiMzOTtzIGEgZmFpcmx5IGNvbW1vbiBwYXR0ZXJuIGluIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzLiAKCk5vdywgdGltZSB0byBkaXZlIGRlZXBlciBhbmQgc2VlIHdoYXQgdGhhdCBgZGFtb3NfcXVvdGFfaXNfZnVsbGAgZnVuY3Rpb24gYWN0dWFsbHkgZG9lcy4gSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBxdW90YSBtYW5hZ2VtZW50IHNjaGVtZSBpbiBwbGFjZSB0byBwcm9wZXJseSBhc3Nlc3MgdGhlIGNoYW5nZSYjMzk7cyBpbXBhY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDExOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9zX3F1b3RhX2lzX2Z1bGwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmM9MjY2OD1zdGF0aWMgdm9pZCBkYW1vc19jaGFyZ2VfcXVvdGEoc3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjY4NC1cbm1tL2RhbW9uL2NvcmUuYzoyNjg1OnN0YXRpYyBib29sIGRhbW9zX3F1b3RhX2lzX2Z1bGwoc3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSxcbm1tL2RhbW9uL2NvcmUuYy0yNjg2LVx0XHR1bnNpZ25lZCBsb25nIG1pbl9yZWdpb25fc3opXG4tLVxubW0vZGFtb24vY29yZS5jPTI2OTk9c3RhdGljIHZvaWQgZGFtb3NfYXBwbHlfc2NoZW1lKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG4tLVxubW0vZGFtb24vY29yZS5jLTI3NTctXHRcdGRhbW9zX2NoYXJnZV9xdW90YShxdW90YSwgc3osIHN6X2FwcGxpZWQpO1xubW0vZGFtb24vY29yZS5jOjI3NTg6XHRcdGlmIChkYW1vc19xdW90YV9pc19mdWxsKHF1b3RhLCBjLVx1MDAzZW1pbl9yZWdpb25fc3opKSB7XG5tbS9kYW1vbi9jb3JlLmMtMjc1OS1cdFx0XHRxdW90YS1cdTAwM2VjaGFyZ2VfdGFyZ2V0X2Zyb20gPSB0O1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0yNzcwPXN0YXRpYyB2b2lkIGRhbW9uX2RvX2FwcGx5X3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqYyxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjc4NS1cdFx0LyogQ2hlY2sgdGhlIHF1b3RhICovXG5tbS9kYW1vbi9jb3JlLmM6Mjc4NjpcdFx0aWYgKGRhbW9zX3F1b3RhX2lzX2Z1bGwocXVvdGEsIGMtXHUwMDNlbWluX3JlZ2lvbl9zeikpXG5tbS9kYW1vbi9jb3JlLmMtMjc4Ny1cdFx0XHRjb250aW51ZTtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MzMwND1zdGF0aWMgdm9pZCBkYW1vc19hZGp1c3RfcXVvdGEoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zMzI2LVx0XHRcdFx0bXNlY3NfdG9famlmZmllcyhxdW90YS1cdTAwM2VyZXNldF9pbnRlcnZhbCkpKSB7XG5tbS9kYW1vbi9jb3JlLmM6MzMyNzpcdFx0aWYgKGRhbW9zX3F1b3RhX2lzX2Z1bGwocXVvdGEsIGMtXHUwMDNlbWluX3JlZ2lvbl9zeikpXG5tbS9kYW1vbi9jb3JlLmMtMzMyOC1cdFx0XHRzLVx1MDAzZXN0YXQucXRfZXhjZWVkcyYjNDM7JiM0Mzs7XG4tLVxubW0vZGFtb24vY29yZS5jLTMzMzgtXG5tbS9kYW1vbi9jb3JlLmM6MzMzOTpcdGlmIChkYW1vc19xdW90YV9pc19mdWxsKHF1b3RhLCBjLVx1MDAzZW1pbl9yZWdpb25fc3opKVxubW0vZGFtb24vY29yZS5jLTMzNDAtXHRcdHJldHVybjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTE6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDk3NAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIHRoZSBzdW1tYXJ5LCByZW5kZXJlZCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhc3N1bWluZyBJJiMzOTttIGFuIGV4cGVydCBpbiB0aGlzIGZpZWxkOgoKKipBbmFseXppbmcgYGRhbW9zX3F1b3RhX2lzX2Z1bGxgKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgYGRhbW9zX3F1b3RhX2lzX2Z1bGxgIGZ1bmN0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpcyB0byBjb25zaWRlciBhIGZldyBhbmdsZXMuIEZpcnN0LCB3aGF0IGRvZXMgJiMzNDtkYW1vcyYjMzQ7IHJlZmVyIHRvIGluIHRoaXMgY29udGV4dD8gSXMgaXQgYSBzcGVjaWZpYyBkYXRhIHN0b3JlLCBhIHJlc291cmNlIHBvb2wsIGEgc2VydmljZSwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IFRoZSBuYW1lIGl0c2VsZiBzdWdnZXN0cyBhIHF1b3RhLCBzbyBpdCYjMzk7cyBwcm9iYWJseSByZWxhdGVkIHRvIHNvbWUga2luZCBvZiBsaW1pdC4gVGhpcyBsaWtlbHkgbWVhbnMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCByZXNvdXJjZSBtYW5hZ2VtZW50LCBjYXBhY2l0eSBwbGFubmluZywgYW5kIHBvdGVudGlhbGx5IGV2ZW4gdXNlciBhY2Nlc3MgY29udHJvbC4gSSYjMzk7bGwgbmVlZCB0byBsb29rIGF0IHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgKmhvdyogaXTigJlzIGJlaW5nIGNhbGxlZC4gQXJlIHdlIGNoZWNraW5nIHRoZSBxdW90YSBwcm9hY3RpdmVseSwgcmVhY3RpdmVseSwgb3IgYm90aD8gQXJlIHRoZXJlIGFueSByZXRyeSBtZWNoYW5pc21zIGlmIHRoZSBxdW90YSBpcyBpbml0aWFsbHkgZXhjZWVkZWQ/IFdoYXQgaGFwcGVucyB3aGVuIHRoZSBjb25kaXRpb24gaXMgKnRydWUqPyBJcyBhbiBlcnJvciB0aHJvd24sIGEgcmVxdWVzdCByZWplY3RlZCwgb3IgaXMgdGhlcmUgYSBmYWxsYmFjayBzdHJhdGVneT8gVGhlIGVycm9yIGhhbmRsaW5nIGlzIGNyaXRpY2FsIGJlY2F1c2UgaXQgd2lsbCByZXZlYWwgaG93IHJvYnVzdCB0aGlzIHN5c3RlbSBpcy4gSSBhbHNvIG5lZWQgdG8gYXNzZXNzIHRoZSB1bmRlcmx5aW5nIGRhdGEgc3RydWN0dXJlcyBvciBBUEkgY2FsbHMgdGhhdCBkZXRlcm1pbmUgdGhlIHF1b3RhIHN0YXR1cy4gSXMgaXQgYSBzaW1wbGUgY291bnRlciwgYSBjb21wbGV4IHBlcm1pc3Npb24gbW9kZWwsIG9yIHNvbWV0aGluZyBpbiBiZXR3ZWVuPyBBbnkgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIHdpbGwgYmUgcmV2ZWFsZWQgaW4gdGhlIGltcGxlbWVudGF0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIGtub3cgd2hpY2ggb3BlcmF0aW9ucyBtb2RpZnkgdGhlIHF1b3RhLiBBcmUgdGhlc2Ugb3BlcmF0aW9ucyBhdG9taWM/IEFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zPyBJJiMzOTttIGFudGljaXBhdGluZyB0aGF0IHVuZGVyc3RhbmRpbmcgdGhlIGNvbXBsZXRlIHN5c3RlbSBpcyBlc3NlbnRpYWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDExOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjY4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyNjgwOlx0XHRcdFx0XHQoc3pfcmVnaW9uIC0gc3pfYXBwbGllZCksXG4yNjgxOlx0XHRcdFx0XHRxdW90YS1cdTAwM2VmYWlsX2NoYXJnZV9udW0sXG4yNjgyOlx0XHRcdFx0XHRxdW90YS1cdTAwM2VmYWlsX2NoYXJnZV9kZW5vbSk7XG4yNjgzOlx0fVxuMjY4NDpcdFxuMjY4NTpcdHN0YXRpYyBib29sIGRhbW9zX3F1b3RhX2lzX2Z1bGwoc3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSxcbjI2ODY6XHRcdFx0dW5zaWduZWQgbG9uZyBtaW5fcmVnaW9uX3N6KVxuMjY4NzpcdHtcbjI2ODg6XHRcdGlmICghZGFtb3NfcXVvdGFfaXNfc2V0KHF1b3RhKSlcbjI2ODk6XHRcdFx0cmV0dXJuIGZhbHNlO1xuMjY5MDpcdFx0aWYgKHF1b3RhLVx1MDAzZWNoYXJnZWRfc3ogXHUwMDNlPSBxdW90YS1cdTAwM2Vlc3opXG4yNjkxOlx0XHRcdHJldHVybiB0cnVlO1xuMjY5MjpcdFx0LypcbjI2OTM6XHRcdCAqIERBTU9TIGFjdGlvbiBpcyBhcHBsaWVkIHBlciByZWdpb24sIHNvIFx1MDAzY21pbl9yZWdpb25fc3ogcmVtYWluaW5nXG4yNjk0Olx0XHQgKiBxdW90YSBtZWFucyB0aGUgcXVvdGEgaXMgZWZmZWN0aXZlbHkgZnVsbC5cbjI2OTU6XHRcdCAqL1xuMjY5NjpcdFx0cmV0dXJuIHF1b3RhLVx1MDAzZWVzeiAtIHF1b3RhLVx1MDAzZWNoYXJnZWRfc3ogXHUwMDNjIG1pbl9yZWdpb25fc3o7XG4yNjk3Olx0fVxuMjY5ODpcdFxuMjY5OTpcdHN0YXRpYyB2b2lkIGRhbW9zX2FwcGx5X3NjaGVtZShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMTo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NjU3CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogODUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCBtZSB0YWtlIGEgbG9vayBhdCB0aGlzLgoKKipTdHJlYW1saW5pbmcgdGhlIFF1b3RhIEFkanVzdG1lbnQgTG9naWMqKgoKQWxyaWdodCwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIGBkYW1vc19hZGp1c3RfcXVvdGFgIGZ1bmN0aW9uIGFuZCwgaG9sZCBvbiBhIHNlY29uZOKApiBJIHNlZSB3aGF0IHRoZXkgd2VyZSBkb2luZyBiZWZvcmUuIFRoZXkgd2VyZSBtZXRpY3Vsb3VzbHkgaXRlcmF0aW5nIHRocm91Z2ggdGFyZ2V0cyBhbmQgcmVnaW9ucywgY2FsY3VsYXRpbmcgc2NvcmVzIGFuZCB0aGF0IGBxdW90YS0mZ3Q7bWluX3Njb3JlYCB2YWx1ZS4gU2VlbXMgZmFpcmx5IHN0YW5kYXJkIGZvciBhIHF1b3RhIHN5c3RlbS4KCkJ1dCB3YWl0IGEgbWludXRlLCBJJiMzOTttIHRoaW5raW5nLCBpZiB0aGUgcXVvdGEmIzM5O3MgYWxyZWFkeSAqZnVsbCosIHdoeSBhcmUgd2UgZXZlbiBib3RoZXJpbmcgd2l0aCBhbGwgdGhhdCBjb21wdXRhdGlvbj8gVGhlcmUmIzM5O3MgYSBjbGVhciBvcHRpbWl6YXRpb24gb3Bwb3J0dW5pdHkgaGVyZS4gSWYgdGhlIHF1b3RhJiMzOTtzIG1heGVkIG91dCwgaXQgZG9lc24mIzM5O3QgbmVlZCBhZGp1c3RpbmcsIGp1c3QgZXhpdCBlYXJseS4gSXQmIzM5O3Mgd2FzdGluZyBjeWNsZXMgdG8gY29udGludWUuIEkgY2FuIGltcHJvdmUgdGhlIHBlcmZvcm1hbmNlIGJ5IHNob3J0LWNpcmN1aXRpbmcgdGhhdCBwcm9jZXNzLiBMZXQmIzM5O3Mgc2VlIGlmIHRoaXMgbG9naWMgY2FuIGJlIGFwcGxpZWQgdG8gdGhpcyBzaXR1YXRpb24uIEkgc2hvdWxkIHRoaW5rIGFib3V0IHdoZXJlIGBkYW1vc19hZGp1c3RfcXVvdGFgIGlzIGNhbGxlZCB0byBtYWtlIHN1cmUgdGhhdCB0aGlzIGlzIHRoZSBjb3JyZWN0IHBsYWNlIHRvIGFkanVzdCB0aGUgbG9naWMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDExOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9zX2FkanVzdF9xdW90YSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYz0zMjkwPXN0YXRpYyB2b2lkIGRhbW9zX3RyYWNlX2VzeihzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb3MgKnMsXG4tLVxubW0vZGFtb24vY29yZS5jLTMzMDMtXG5tbS9kYW1vbi9jb3JlLmM6MzMwNDpzdGF0aWMgdm9pZCBkYW1vc19hZGp1c3RfcXVvdGEoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzKVxubW0vZGFtb24vY29yZS5jLTMzMDUte1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0zMzg3PXN0YXRpYyB2b2lkIGtkYW1vbmRfYXBwbHlfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zNDAyLVxubW0vZGFtb24vY29yZS5jOjM0MDM6XHRcdGRhbW9zX2FkanVzdF9xdW90YShjLCBzKTtcbm1tL2RhbW9uL2NvcmUuYy0zNDA0LVx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMTo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MTkzCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gZGVlcGx5IGZhbWlsaWFyIHdpdGggYGtkYW1vbmRfYXBwbHlfc2NoZW1lc2AgYW5kIHRoZSBicm9hZGVyIGNvbnRleHQ6CgoqKkFuYWx5emluZyBga2RhbW9uZF9hcHBseV9zY2hlbWVzYCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW50byBga2RhbW9uZF9hcHBseV9zY2hlbWVzYC4gIE15IGZpcnN0IHRob3VnaHQgaXMgYWx3YXlzIHRvIHF1aWNrbHkgYXNzZXNzIGl0cyBwdXJwb3NlIGFuZCBwbGFjZSB3aXRoaW4gdGhlIGxhcmdlciBzeXN0ZW0uIElzIGl0IHRoZSBjb3JlIGVuZ2luZSwgYSBwZXJpcGhlcmFsIHRvb2wsIG9yIGEgdXRpbGl0eSBmdW5jdGlvbj8gV2hhdCBzY2hlbWVzIGFyZSBpbnZvbHZlZD8gR2l2ZW4gdGhlIG5hbWUsIEkmIzM5O20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgdGhhdCB0aGlzIGlzIHRoZSBmdW5jdGlvbiByZXNwb25zaWJsZSBmb3IgYXBwbHlpbmcgZGlmZmVyZW50IG9wZXJhdGlvbmFsIG1ldGhvZG9sb2dpZXMgb3IgcGVyaGFwcyBvcHRpbWl6YXRpb24gdGVjaG5pcXVlcyB3aXRoaW4gdGhlIGRhZW1vbi4gSSYjMzk7bGwgbmVlZCB0byBpbW1lZGlhdGVseSBjb25zaWRlciB0aGUgcG90ZW50aWFsIGZvciBjb25mbGljdHMgYmV0d2VlbiB0aG9zZSBtZXRob2RvbG9naWVzLCBhbmQgYWxzbyBob3cgZXJyb3IgY29uZGl0aW9ucyBhcmUgaGFuZGxlZC4gSXQmIzM5O3MgbGlrZWx5IGludm9sdmVkIGluIGFwcGx5aW5nIHNvbWUgZm9ybSBvZiBrbm93bGVkZ2UtYmFzZWQgb3BlcmF0aW9uYWwgc2NoZW1lcy4gSSB3b25kZXIgaWYgaXQgdXNlcyBhbiBpbmZlcmVuY2UgZW5naW5lLCBvciBpZiBpdCYjMzk7cyBiYXNlZCBvbiBoYXJkLWNvZGVkIHJ1bGVzPyBUaGUgc2NvcGUgaXMgdW5jbGVhciwgYnV0IEkmIzM5O2xsIGJlZ2luIGJ5IGFuYWx5emluZyB0aGUgZnVuY3Rpb24mIzM5O3MgaW5wdXRzIGFuZCBvdXRwdXRzLiBJJiMzOTtsbCBuZWVkIHRvIHRyYWNrIGhvdyBpdCBoYW5kbGVzIHNjaGVtZSBwcmlvcml0eS4gV2hhdCBhcmUgdGhlIGRlcGVuZGVuY2llcz8gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBsb29raW5nIGZvciB0aGUgcG9pbnRzIHdoZXJlIGVycm9ycyBhcmUgY2F1Z2h0LCB3aGVyZSBsb2dnaW5nIGhhcHBlbnMsIGFuZCB3aGVyZSBpdCBtYWtlcyBkZWNpc2lvbnMgYWJvdXQgd2hpY2ggc2NoZW1lIHRvIGFwcGx5IGFuZCBpbiB3aGF0IG9yZGVyLiBUaGVuLCBJJiMzOTtsbCBtb3ZlIG9uIHRvIGRpc3NlY3RpbmcgaG93IGl0IGV2YWx1YXRlcyB0aGUgZWZmZWN0aXZlbmVzcyBvZiB0aG9zZSBzY2hlbWVzIGFuZCBlbnN1cmVzIHRoYXQgd2UmIzM5O3JlIG1ha2luZyBmb3J3YXJkIHByb2dyZXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMTo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMzOTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzM5MDpcdFx0c3RydWN0IGRhbW9zICpzO1xuMzM5MTpcdFx0Ym9vbCBoYXNfc2NoZW1lc190b19hcHBseSA9IGZhbHNlO1xuMzM5MjpcdFx0dW5zaWduZWQgbG9uZyBtYXhfcmVnaW9uX3N6O1xuMzM5MzpcdFxuMzM5NDpcdFx0ZGFtb25fZm9yX2VhY2hfc2NoZW1lKHMsIGMpIHtcbjMzOTU6XHRcdFx0aWYgKHRpbWVfYmVmb3JlKGMtXHUwMDNlcGFzc2VkX3NhbXBsZV9pbnRlcnZhbHMsIHMtXHUwMDNlbmV4dF9hcHBseV9zaXMpKVxuMzM5NjpcdFx0XHRcdGNvbnRpbnVlO1xuMzM5NzpcdFxuMzM5ODpcdFx0XHRpZiAoIXMtXHUwMDNld21hcmtzLmFjdGl2YXRlZClcbjMzOTk6XHRcdFx0XHRjb250aW51ZTtcbjM0MDA6XHRcbjM0MDE6XHRcdFx0aGFzX3NjaGVtZXNfdG9fYXBwbHkgPSB0cnVlO1xuMzQwMjpcdFxuMzQwMzpcdFx0XHRkYW1vc19hZGp1c3RfcXVvdGEoYywgcyk7XG4zNDA0Olx0XHR9XG4zNDA1Olx0XG4zNDA2Olx0XHRpZiAoIWhhc19zY2hlbWVzX3RvX2FwcGx5KVxuMzQwNzpcdFx0XHRyZXR1cm47XG4zNDA4Olx0XG4zNDA5Olx0XHRtYXhfcmVnaW9uX3N6ID0gZGFtb25fcmVnaW9uX3N6X2xpbWl0KGMpO1xuMzQxMDpcdFx0bXV0ZXhfbG9jayhcdTAwMjZjLVx1MDAzZXdhbGtfY29udHJvbF9sb2NrKTtcbjM0MTE6XHRcdGRhbW9uX2Zvcl9lYWNoX3RhcmdldCh0LCBjKSB7XG4zNDEyOlx0XHRcdGlmIChjLVx1MDAzZW9wcy50YXJnZXRfdmFsaWQgXHUwMDI2XHUwMDI2IGMtXHUwMDNlb3BzLnRhcmdldF92YWxpZCh0KSA9PSBmYWxzZSkge1xuMzQxMzpcdFx0XHRcdGRhbW9uX2Zvcl9lYWNoX3NjaGVtZShzLCBjKSB7XG4zNDE0Olx0XHRcdFx0XHRpZiAocy1cdTAwM2VxdW90YS5jaGFyZ2VfdGFyZ2V0X2Zyb20gIT0gdClcbjM0MTU6XHRcdFx0XHRcdFx0Y29udGludWU7XG4zNDE2Olx0XHRcdFx0XHRzLVx1MDAzZXF1b3RhLmNoYXJnZV90YXJnZXRfZnJvbSA9IE5VTEw7XG4zNDE3Olx0XHRcdFx0XHRzLVx1MDAzZXF1b3RhLmNoYXJnZV9hZGRyX2Zyb20gPSAwO1xuMzQxODpcdFx0XHRcdH1cbjM0MTk6XHRcdFx0XHRjb250aW51ZTtcbjM0MjA6XHRcdFx0fVxuMzQyMTpcdFx0XHRkYW1vc19hcHBseV90YXJnZXQoYywgdCwgbWF4X3JlZ2lvbl9zeik7XG4zNDIyOlx0XHR9XG4zNDIzOlx0XG4zNDI0Olx0XHRkYW1vbl9mb3JfZWFjaF9zY2hlbWUocywgYykge1xuMzQyNTpcdFx0XHRpZiAodGltZV9iZWZvcmUoYy1cdTAwM2VwYXNzZWRfc2FtcGxlX2ludGVydmFscywgcy1cdTAwM2VuZXh0X2FwcGx5X3NpcykpXG4zNDI2Olx0XHRcdFx0Y29udGludWU7XG4zNDI3Olx0XHRcdGRhbW9zX3dhbGtfY29tcGxldGUoYywgcyk7XG4zNDI4Olx0XHRcdGRhbW9zX3NldF9uZXh0X2FwcGx5X3NpcyhzLCBjKTtcbjM0Mjk6XHRcdFx0cy1cdTAwM2VsYXN0X2FwcGxpZWQgPSBOVUxMO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMTo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MTU1CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMTk2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYGRhbW9zX2FkanVzdF9xdW90YWAgRnVuY3Rpb24qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBgZGFtb3NfYWRqdXN0X3F1b3RhYCBmdW5jdGlvbi4gSSBzZWUgYSBuZXcgY29uZGl0aW9uYWwgY2hlY2sgaGFzIGJlZW4gYWRkZWQsIHNwZWNpZmljYWxseSBjaGVja2luZyBpZiB0aGUgcXVvdGEgaXMgZnVsbCB1c2luZyBgZGFtb3NfcXVvdGFfaXNfZnVsbGAuIFRoZSBpbnRlcmVzdGluZyBwYXJ0IGlzIHRoYXQgaWYgdGhlIHF1b3RhICppcyogZnVsbCwgdGhlIGZ1bmN0aW9uIHNpbXBseSByZXR1cm5zLiBUaGlzIG1lYW5zIHRoYXQgaWYgdGhlIHF1b3RhIGlzIGZ1bGwsIHRoZSBzY29yZSBoaXN0b2dyYW0gd29uJiMzOTt0IGdldCB1cGRhdGVkLCBhbmQgY3J1Y2lhbGx5LCBgcXVvdGEtJmd0O21pbl9zY29yZWAgd29uJiMzOTt0IGJlIHVwZGF0ZWQuCgpOb3csIG15IGV4cGVydCBpbnR1aXRpb24gdGVsbHMgbWUgdG8gZGlnIGEgbGl0dGxlIGRlZXBlci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXM6IElzIGBxdW90YS0mZ3Q7bWluX3Njb3JlYCBldmVuICp1c2VkKiB3aGVuIHRoZSBxdW90YSBpcyBmdWxsPyBJZiBpdCBpc24mIzM5O3QsIHRoZW4gdGhpcyBlYXJseSByZXR1cm4gbWlnaHQgYmUgcGVyZmVjdGx5IGZpbmUsIGV2ZW4gYW4gb3B0aW1pemF0aW9uLiBCdXQgaWYgYG1pbl9zY29yZWAgKmlzKiB1c2VkIGV2ZW4gd2hlbiB0aGUgcXVvdGEgaXMgZnVsbCwgdGhlbiB0aGVyZSYjMzk7cyBhIHBvdGVudGlhbCBsb2dpYyBmbGF3IGhlcmUgdGhhdCBuZWVkcyBpbnZlc3RpZ2F0aW9uLiBJIG5lZWQgdG8gc2VhcmNoIHRocm91Z2ggdGhlIGNvZGViYXNlIGZvciBhbGwgaW5zdGFuY2VzIHdoZXJlIGBtaW5fc2NvcmVgIGlzIHVzZWQgdG8gY2xhcmlmeSB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMTo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttaW5fc2NvcmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmM9MjQyMj1zdGF0aWMgYm9vbCBkYW1vc192YWxpZF90YXJnZXQoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjQyOS1cbm1tL2RhbW9uL2NvcmUuYzoyNDMwOlx0cmV0dXJuIGMtXHUwMDNlb3BzLmdldF9zY2hlbWVfc2NvcmUoYywgciwgcykgXHUwMDNlPSBzLVx1MDAzZXF1b3RhLm1pbl9zY29yZTtcbm1tL2RhbW9uL2NvcmUuYy0yNDMxLX1cbi0tXG5tbS9kYW1vbi9jb3JlLmM9MzMwND1zdGF0aWMgdm9pZCBkYW1vc19hZGp1c3RfcXVvdGEoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zMzY3LVx0fVxubW0vZGFtb24vY29yZS5jOjMzNjg6XHRxdW90YS1cdTAwM2VtaW5fc2NvcmUgPSBzY29yZTtcbm1tL2RhbW9uL2NvcmUuYy0zMzY5LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTE6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzgzMAoJCQkJCQkJb3V0cHV0OiAxNwoJCQkJCQkJdGhvdWdodHM6IDU0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBgcy0mZ3Q7cXVvdGEubWluX3Njb3JlYCBWYXJpYWJsZSoqCgpSaWdodCwgc28gYHMtJmd0O3F1b3RhLm1pbl9zY29yZWAuLi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGxpZmVjeWNsZS4gVGhlIG5vdGUgc2F5cyBpdCYjMzk7cyAqb25seSogcmVhZCBpbiBgZGFtb3NfdmFsaWRfdGFyZ2V0YCwgd2hpY2ggaXMgaGVscGZ1bCwgYnV0IHRlbGxzIG1lIG5vdGhpbmcgYWJvdXQgKmhvdyogaXQgZ2V0cyBpdHMgdmFsdWUuIFNvLCBJIG5lZWQgdG8gdHJhY2UgYmFjay4gV2hlcmUgaXMgYHMtJmd0O3F1b3RhYCBhY3R1YWxseSAqYWxsb2NhdGVkKiBhbmQgKmluaXRpYWxpemVkKj8gR2l2ZW4gdGhlIG5hbWluZyBjb252ZW50aW9uIGFuZCB0aGUgY29udGV4dCBvZiB0aGUgY29kZSBiYXNlLCBJIHN1c3BlY3QgdGhlIGFsbG9jYXRpb24vaW5pdGlhbGl6YXRpb24gaGFwcGVucyBpbiBhIGZ1bmN0aW9uIHJlbGF0ZWQgdG8gY3JlYXRpbmcgYSBuZXcgc2NoZW1lLiBTb21ldGhpbmcgbGlrZSBgZGFtb3NfbmV3X3NjaGVtZWAgc2VlbXMgYSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0LiBUaGF0JiMzOTtzIHRoZSBmaXJzdCBwbGFjZSBJJiMzOTttIGdvaW5nIHRvIGRpZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBgcXVvdGFgIHN0cnVjdHVyZSBpcyBwb3B1bGF0ZWQsIGJlY2F1c2UgdGhhdCYjMzk7cyB3aGF0IHdpbGwgZ2l2ZSBtZSB0aGUgY29udGV4dCBJIG5lZWQgYXJvdW5kIHRoZSBtZWFuaW5nIGFuZCBleHBlY3RlZCBiZWhhdmlvciBvZiBgbWluX3Njb3JlYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTE6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWluX3Njb3JlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvZ3B1L2RybS9zY2hlZHVsZXIvc2NoZWRfbWFpbi5jPTk1OT1kcm1fc2NoZWRfcGlja19iZXN0KHN0cnVjdCBkcm1fZ3B1X3NjaGVkdWxlciAqKnNjaGVkX2xpc3QsXG4tLVxuZHJpdmVycy9ncHUvZHJtL3NjaGVkdWxlci9zY2hlZF9tYWluLmMtOTYzLVx0aW50IGk7XG5kcml2ZXJzL2dwdS9kcm0vc2NoZWR1bGVyL3NjaGVkX21haW4uYzo5NjQ6XHR1bnNpZ25lZCBpbnQgbWluX3Njb3JlID0gVUlOVF9NQVgsIG51bV9zY29yZTtcbmRyaXZlcnMvZ3B1L2RybS9zY2hlZHVsZXIvc2NoZWRfbWFpbi5jLTk2NS1cbi0tXG5kcml2ZXJzL2dwdS9kcm0vc2NoZWR1bGVyL3NjaGVkX21haW4uYy05NzUtXHRcdG51bV9zY29yZSA9IGF0b21pY19yZWFkKHNjaGVkLVx1MDAzZXNjb3JlKTtcbmRyaXZlcnMvZ3B1L2RybS9zY2hlZHVsZXIvc2NoZWRfbWFpbi5jOjk3NjpcdFx0aWYgKG51bV9zY29yZSBcdTAwM2MgbWluX3Njb3JlKSB7XG5kcml2ZXJzL2dwdS9kcm0vc2NoZWR1bGVyL3NjaGVkX21haW4uYzo5Nzc6XHRcdFx0bWluX3Njb3JlID0gbnVtX3Njb3JlO1xuZHJpdmVycy9ncHUvZHJtL3NjaGVkdWxlci9zY2hlZF9tYWluLmMtOTc4LVx0XHRcdHBpY2tlZF9zY2hlZCA9IHNjaGVkO1xuLS1cbmluY2x1ZGUvbGludXgvZGFtb24uaD0yNzY9c3RydWN0IGRhbW9zX3F1b3RhIHtcbi0tXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMzA0LVx0LyogRm9yIHByaW9yaXRpemF0aW9uICovXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6MzA1Olx0dW5zaWduZWQgaW50IG1pbl9zY29yZTtcbmluY2x1ZGUvbGludXgvZGFtb24uaC0zMDYtXG4tLVxubW0vZGFtb24vY29yZS5jPTI0MjI9c3RhdGljIGJvb2wgZGFtb3NfdmFsaWRfdGFyZ2V0KHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXG4tLVxubW0vZGFtb24vY29yZS5jLTI0MjktXG5tbS9kYW1vbi9jb3JlLmM6MjQzMDpcdHJldHVybiBjLVx1MDAzZW9wcy5nZXRfc2NoZW1lX3Njb3JlKGMsIHIsIHMpIFx1MDAzZT0gcy1cdTAwM2VxdW90YS5taW5fc2NvcmU7XG5tbS9kYW1vbi9jb3JlLmMtMjQzMS19XG4tLVxubW0vZGFtb24vY29yZS5jPTMzMDQ9c3RhdGljIHZvaWQgZGFtb3NfYWRqdXN0X3F1b3RhKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vcyAqcylcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzM2Ny1cdH1cbm1tL2RhbW9uL2NvcmUuYzozMzY4Olx0cXVvdGEtXHUwMDNlbWluX3Njb3JlID0gc2NvcmU7XG5tbS9kYW1vbi9jb3JlLmMtMzM2OS19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDExOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg2NDAKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIGJyZWFrZG93biBvZiBteSB0aG91Z2h0IHByb2Nlc3MgcmVnYXJkaW5nIHRoZSBhbGxvY2F0aW9uIG9mIGBzdHJ1Y3QgZGFtb3NgIHdpdGhpbiB0aGUgRGFtb24gc3lzdGVtLgoKKipEaXZpbmcgaW50byBgc3RydWN0IGRhbW9zYCBBbGxvY2F0aW9uIGluIERBTU9OKioKCkFscmlnaHQsIHNvIHRoZSBmaXJzdCB0aGluZyBJJiMzOTttIGRvaW5nIGlzIHRyeWluZyB0byB1bmRlcnN0YW5kIGhvdyBgc3RydWN0IGRhbW9zYOKAlHRoZSBjb3JlIGRhdGEgc3RydWN0dXJlIGZvciBEYW1vbuKAlGdldHMgYWxsb2NhdGVkLiBJIG5lZWQgdG8ga25vdzogSXMgaXQgc3RhdGljYWxseSBhbGxvY2F0ZWQ/IER5bmFtaWNhbGx5PyBXaGVyZSBleGFjdGx5IGluIG1lbW9yeSBpcyBpdCByZXNpZGluZywgYW5kIGhvdyBpcyBpdHMgbGlmZXRpbWUgbWFuYWdlZD8gVGhpcyBpcyBjcml0aWNhbCBmb3IgdW5kZXJzdGFuZGluZyBEYW1vbiYjMzk7cyBvdmVyYWxsIHBlcmZvcm1hbmNlIHByb2ZpbGUgYW5kIHBvdGVudGlhbCBib3R0bGVuZWNrcywgZXNwZWNpYWxseSBhcyB0aGUgbW9uaXRvcmVkIHN5c3RlbSBzY2FsZXMuIElzIGl0IGEgZ2xvYmFsIHZhcmlhYmxlLCBvciBhcmUgdGhlcmUgbXVsdGlwbGUgaW5zdGFuY2VzIGNyZWF0ZWQgZGVwZW5kaW5nIG9uIGNvbmZpZ3VyYXRpb24/IElmIGl0JiMzOTtzIGR5bmFtaWMsIGhvdyBhcmUgdGhvc2UgYWxsb2NhdGlvbnMgdGllZCBpbnRvIHRoZSB1bmRlcmx5aW5nIG1lbW9yeSBtYW5hZ2VtZW50IHN5c3RlbT8gRG8gdGhleSB1c2UgYGttYWxsb2NgLCBgdm1fYWxsb2NgLCBvciBzb21ldGhpbmcgZWxzZT8gVW5kZXJzdGFuZGluZyB0aGlzIHdpbGwgbGV0IG1lIGV2YWx1YXRlIHBvdGVudGlhbCBtZW1vcnkgZnJhZ21lbnRhdGlvbiBpc3N1ZXMsIGNvbnRlbnRpb24sIGFuZCB0aGUgaW1wYWN0IG9mIHRoZSBhbGxvY2F0aW9uIHN0cmF0ZWd5IG9uIHRoZSBnYXJiYWdlIGNvbGxlY3Rpb24uIFRoZW4gaXQgd2lsbCBhbGxvdyBtZSB0byBsb29rIGRlZXBlciwgSSBzaG91bGQgYWxzbyBzZWUgaG93IHRoZSBpbmZvcm1hdGlvbiBpbiBgc3RydWN0IGRhbW9zYCBpcyB1dGlsaXplZCwgc3BlY2lmaWNhbGx5IGhvdyB0aGUgcG9pbnRlcnMgYW5kIHJlZmVyZW5jZXMgaXQgY29udGFpbnMgYXJlIHVzZWQgd2l0aGluIHRoZSBkYWVtb24gdG8gbW9uaXRvciB0aGUgbWVtb3J5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMTo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYW1vbl9uZXdfc2NoZW1lJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jPTczNz1zdGF0aWMgc3RydWN0IGRhbW9zX3F1b3RhICpkYW1vc19xdW90YV9pbml0KHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEpXG4tLVxubW0vZGFtb24vY29yZS5jLTc0OS1cbm1tL2RhbW9uL2NvcmUuYzo3NTA6c3RydWN0IGRhbW9zICpkYW1vbl9uZXdfc2NoZW1lKHN0cnVjdCBkYW1vc19hY2Nlc3NfcGF0dGVybiAqcGF0dGVybixcbm1tL2RhbW9uL2NvcmUuYy03NTEtXHRcdFx0ZW51bSBkYW1vc19hY3Rpb24gYWN0aW9uLFxuLS1cbm1tL2RhbW9uL2NvcmUuYz0xNTcyPXN0YXRpYyBpbnQgZGFtb25fY29tbWl0X3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqZHN0LCBzdHJ1Y3QgZGFtb25fY3R4ICpzcmMpXG4tLVxubW0vZGFtb24vY29yZS5jLTE1OTAtXHRcdFx0Y29udGludWU7XG5tbS9kYW1vbi9jb3JlLmM6MTU5MTpcdFx0bmV3X3NjaGVtZSA9IGRhbW9uX25ld19zY2hlbWUoXHUwMDI2c3JjX3NjaGVtZS1cdTAwM2VwYXR0ZXJuLFxubW0vZGFtb24vY29yZS5jLTE1OTItXHRcdFx0XHRzcmNfc2NoZW1lLVx1MDAzZWFjdGlvbixcbi0tXG5tbS9kYW1vbi9scnVfc29ydC5jPTE4OD1zdGF0aWMgc3RydWN0IGRhbW9zICpkYW1vbl9scnVfc29ydF9uZXdfc2NoZW1lKFxuLS1cbm1tL2RhbW9uL2xydV9zb3J0LmMtMTk1LVxubW0vZGFtb24vbHJ1X3NvcnQuYzoxOTY6XHRyZXR1cm4gZGFtb25fbmV3X3NjaGVtZShcbm1tL2RhbW9uL2xydV9zb3J0LmMtMTk3LVx0XHRcdC8qIGZpbmQgdGhlIHBhdHRlcm4sIGFuZCAqL1xuLS1cbm1tL2RhbW9uL3JlY2xhaW0uYz0xNjc9c3RhdGljIHN0cnVjdCBkYW1vcyAqZGFtb25fcmVjbGFpbV9uZXdfc2NoZW1lKHVuc2lnbmVkIGxvbmcgYWdncl9pbnRlcnZhbClcbi0tXG5tbS9kYW1vbi9yZWNsYWltLmMtMTgwLVxubW0vZGFtb24vcmVjbGFpbS5jOjE4MTpcdHJldHVybiBkYW1vbl9uZXdfc2NoZW1lKFxubW0vZGFtb24vcmVjbGFpbS5jLTE4Mi1cdFx0XHRcdTAwMjZwYXR0ZXJuLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0yOTg3PXN0YXRpYyBzdHJ1Y3QgZGFtb3MgKmRhbW9uX3N5c2ZzX21rX3NjaGVtZShcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzAyNC1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozMDI1Olx0c2NoZW1lID0gZGFtb25fbmV3X3NjaGVtZShcdTAwMjZwYXR0ZXJuLCBzeXNmc19zY2hlbWUtXHUwMDNlYWN0aW9uLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTMwMjYtXHRcdFx0c3lzZnNfc2NoZW1lLVx1MDAzZWFwcGx5X2ludGVydmFsX3VzLCBcdTAwMjZxdW90YSwgXHUwMDI2d21hcmtzLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMTo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NDg5CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IGltbWVkaWF0ZSB0aG91Z2h0IHByb2Nlc3M6CgoqKkluaXRpYWwgQXNzZXNzbWVudDogQ29kZSBJbnNwZWN0aW9uKioKCk9rYXksIHRpbWUgdG8gZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHR3byBzcGVjaWZpYyBlbGVtZW50czogYGRhbW9uX25ld19zY2hlbWVgIGFuZCBgZGFtb3NfcXVvdGFfaW5pdGAuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgcnVubmluZyB0aHJvdWdoIHRoZXNlLCB3aXRoIG15IHNwZWNpYWxpc3Qga25vd2xlZGdlIEkgd2lsbCB0cnkgdG8gZGV0ZXJtaW5lIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVtLCBhbmQgdW5kZXJzdGFuZCBob3cgdGhleSB3b3JrLCBhcyB0aGVzZSBtaWdodCByZWxhdGUgdG8gYSBuZXcgZGV2ZWxvcG1lbnQgcGxhbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTE6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3MzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDczNTpcdFxuIDczNjpcdC8qIGluaXRpYWxpemUgZmllbGRzIG9mIEBxdW90YSB0aGF0IG5vcm1hbGx5IEFQSSB1c2VycyB3b3VsZG4mIzM5O3Qgc2V0ICovXG4gNzM3Olx0c3RhdGljIHN0cnVjdCBkYW1vc19xdW90YSAqZGFtb3NfcXVvdGFfaW5pdChzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhKVxuIDczODpcdHtcbiA3Mzk6XHRcdHF1b3RhLVx1MDAzZWVzeiA9IDA7XG4gNzQwOlx0XHRxdW90YS1cdTAwM2V0b3RhbF9jaGFyZ2VkX3N6ID0gMDtcbiA3NDE6XHRcdHF1b3RhLVx1MDAzZXRvdGFsX2NoYXJnZWRfbnMgPSAwO1xuIDc0MjpcdFx0cXVvdGEtXHUwMDNlY2hhcmdlZF9zeiA9IDA7XG4gNzQzOlx0XHRxdW90YS1cdTAwM2VjaGFyZ2VkX2Zyb20gPSAwO1xuIDc0NDpcdFx0cXVvdGEtXHUwMDNlY2hhcmdlX3RhcmdldF9mcm9tID0gTlVMTDtcbiA3NDU6XHRcdHF1b3RhLVx1MDAzZWNoYXJnZV9hZGRyX2Zyb20gPSAwO1xuIDc0NjpcdFx0cXVvdGEtXHUwMDNlZXN6X2JwID0gMDtcbiA3NDc6XHRcdHJldHVybiBxdW90YTtcbiA3NDg6XHR9XG4gNzQ5Olx0XG4gNzUwOlx0c3RydWN0IGRhbW9zICpkYW1vbl9uZXdfc2NoZW1lKHN0cnVjdCBkYW1vc19hY2Nlc3NfcGF0dGVybiAqcGF0dGVybixcbiA3NTE6XHRcdFx0XHRlbnVtIGRhbW9zX2FjdGlvbiBhY3Rpb24sXG4gNzUyOlx0XHRcdFx0dW5zaWduZWQgbG9uZyBhcHBseV9pbnRlcnZhbF91cyxcbiA3NTM6XHRcdFx0XHRzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhLFxuIDc1NDpcdFx0XHRcdHN0cnVjdCBkYW1vc193YXRlcm1hcmtzICp3bWFya3MsXG4gNzU1Olx0XHRcdFx0aW50IHRhcmdldF9uaWQpXG4gNzU2Olx0e1xuIDc1NzpcdFx0c3RydWN0IGRhbW9zICpzY2hlbWU7XG4gNzU4Olx0XG4gNzU5Olx0XHRzY2hlbWUgPSBrbWFsbG9jX29iaigqc2NoZW1lKTtcbiA3NjA6XHRcdGlmICghc2NoZW1lKVxuIDc2MTpcdFx0XHRyZXR1cm4gTlVMTDtcbiA3NjI6XHRcdHNjaGVtZS1cdTAwM2VwYXR0ZXJuID0gKnBhdHRlcm47XG4gNzYzOlx0XHRzY2hlbWUtXHUwMDNlYWN0aW9uID0gYWN0aW9uO1xuIDc2NDpcdFx0c2NoZW1lLVx1MDAzZWFwcGx5X2ludGVydmFsX3VzID0gYXBwbHlfaW50ZXJ2YWxfdXM7XG4gNzY1Olx0XHQvKlxuIDc2NjpcdFx0ICogbmV4dF9hcHBseV9zaXMgd2lsbCBiZSBzZXQgd2hlbiBrZGFtb25kIHN0YXJ0cy4gIFdoaWxlIGtkYW1vbmQgaXNcbiA3Njc6XHRcdCAqIHJ1bm5pbmcsIGl0IHdpbGwgYWxzbyB1cGRhdGVkIHdoZW4gaXQgaXMgYWRkZWQgdG8gdGhlIERBTU9OIGNvbnRleHQsXG4gNzY4Olx0XHQgKiBvciBkYW1vbl9hdHRycyBhcmUgdXBkYXRlZC5cbiA3Njk6XHRcdCAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMTo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDE2OAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkEgTW9tZW50IG9mIERvdWJ0LCBUaGVuIGEgRGVlcCBEaXZlIGludG8gQ29kZSoqCgpPa2F5LCBob2xkIG9uIGEgc2Vjb25kISBMaW5lIDc1OSBqdXN0IGp1bXBlZCBvdXQgYXQgbWU6IGBzY2hlbWUgPSBrbWFsbG9jX29iaigqc2NoZW1lKTtgIFdoeSBhcmUgd2UgYWxsb2NhdGluZyBhIG5ldyBgc2NoZW1lYCBvYmplY3QsIGFuZCB3aGF0IGV4YWN0bHkgaXMgZ29pbmcgb24gaGVyZT8gVGhlIGZhY3QgdGhhdCB3ZSYjMzk7cmUgcmVhbGxvY2F0aW5nLCBzdWdnZXN0cyB0aGUgb3JpZ2luYWwgb2JqZWN0JiMzOTtzIGRhdGEgYXJlIGxvc3QsIGFuZCBpdCYjMzk7cyBub3QgaW1tZWRpYXRlbHkgY2xlYXIgd2hhdCYjMzk7cyBoYXBwZW5pbmcgdG8gdGhlIGN1cnJlbnQgdmFsdWUgb2YgYHNjaGVtZS0mZ3Q7cXVvdGFgLiBUaGF04oCZcyBhIGNyaXRpY2FsIHBpZWNlIG9mIGluZm9ybWF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGJldHRlci4gT2theSwgSSYjMzk7bSBoZWFkaW5nIHRvIGBtbS9kYW1vbi9jb3JlLmNgLCBzcGVjaWZpY2FsbHkgbGluZXMgNzY1IHRocm91Z2ggODAwLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIHN1YnNlcXVlbnQgY29kZSBkb2VzIHdpdGggdGhhdCBzdHJ1Y3R1cmUuIEnigJltIGhvcGluZyBpdOKAmXMgYWxsIGNyeXN0YWwgY2xlYXIgYWZ0ZXIgbG9va2luZyBhdCB0aG9zZSBsaW5lcy4gSSBuZWVkIHRvIGJlIHN1cmUgdGhpcyByZWFsbG9jYXRpb24gaXNuJiMzOTt0IGdvaW5nIHRvIGludHJvZHVjZSBhIHN1YnRsZSBtZW1vcnkgbGVhayBvciwgZXZlbiB3b3JzZSwgZGF0YSBjb3JydXB0aW9uIHJlbGF0ZWQgdG8gcXVvdGFzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMTo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDc2NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNzY1Olx0XHQvKlxuIDc2NjpcdFx0ICogbmV4dF9hcHBseV9zaXMgd2lsbCBiZSBzZXQgd2hlbiBrZGFtb25kIHN0YXJ0cy4gIFdoaWxlIGtkYW1vbmQgaXNcbiA3Njc6XHRcdCAqIHJ1bm5pbmcsIGl0IHdpbGwgYWxzbyB1cGRhdGVkIHdoZW4gaXQgaXMgYWRkZWQgdG8gdGhlIERBTU9OIGNvbnRleHQsXG4gNzY4Olx0XHQgKiBvciBkYW1vbl9hdHRycyBhcmUgdXBkYXRlZC5cbiA3Njk6XHRcdCAqL1xuIDc3MDpcdFx0c2NoZW1lLVx1MDAzZW5leHRfYXBwbHlfc2lzID0gMDtcbiA3NzE6XHRcdHNjaGVtZS1cdTAwM2V3YWxrX2NvbXBsZXRlZCA9IGZhbHNlO1xuIDc3MjpcdFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2c2NoZW1lLVx1MDAzZWNvcmVfZmlsdGVycyk7XG4gNzczOlx0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZzY2hlbWUtXHUwMDNlb3BzX2ZpbHRlcnMpO1xuIDc3NDpcdFx0c2NoZW1lLVx1MDAzZXN0YXQgPSAoc3RydWN0IGRhbW9zX3N0YXQpe307XG4gNzc1Olx0XHRzY2hlbWUtXHUwMDNlbWF4X25yX3NuYXBzaG90cyA9IDA7XG4gNzc2Olx0XHRzY2hlbWUtXHUwMDNlbGFzdF9hcHBsaWVkID0gTlVMTDtcbiA3Nzc6XHRcdElOSVRfTElTVF9IRUFEKFx1MDAyNnNjaGVtZS1cdTAwM2VsaXN0KTtcbiA3Nzg6XHRcbiA3Nzk6XHRcdHNjaGVtZS1cdTAwM2VxdW90YSA9ICooZGFtb3NfcXVvdGFfaW5pdChxdW90YSkpO1xuIDc4MDpcdFx0LyogcXVvdGEuZ29hbHMgc2hvdWxkIGJlIHNlcGFyYXRlbHkgc2V0IGJ5IGNhbGxlciAqL1xuIDc4MTpcdFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2c2NoZW1lLVx1MDAzZXF1b3RhLmdvYWxzKTtcbiA3ODI6XHRcbiA3ODM6XHRcdHNjaGVtZS1cdTAwM2V3bWFya3MgPSAqd21hcmtzO1xuIDc4NDpcdFx0c2NoZW1lLVx1MDAzZXdtYXJrcy5hY3RpdmF0ZWQgPSB0cnVlO1xuIDc4NTpcdFxuIDc4NjpcdFx0c2NoZW1lLVx1MDAzZW1pZ3JhdGVfZGVzdHMgPSAoc3RydWN0IGRhbW9zX21pZ3JhdGVfZGVzdHMpe307XG4gNzg3Olx0XHRzY2hlbWUtXHUwMDNldGFyZ2V0X25pZCA9IHRhcmdldF9uaWQ7XG4gNzg4Olx0XG4gNzg5Olx0XHRyZXR1cm4gc2NoZW1lO1xuIDc5MDpcdH1cbiA3OTE6XHRcbiA3OTI6XHRzdGF0aWMgdm9pZCBkYW1vc19zZXRfbmV4dF9hcHBseV9zaXMoc3RydWN0IGRhbW9zICpzLCBzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4gNzkzOlx0e1xuIDc5NDpcdFx0dW5zaWduZWQgbG9uZyBzYW1wbGVfaW50ZXJ2YWwgPSBjdHgtXHUwMDNlYXR0cnMuc2FtcGxlX2ludGVydmFsID9cbiA3OTU6XHRcdFx0Y3R4LVx1MDAzZWF0dHJzLnNhbXBsZV9pbnRlcnZhbCA6IDE7XG4gNzk2Olx0XHR1bnNpZ25lZCBsb25nIGFwcGx5X2ludGVydmFsID0gcy1cdTAwM2VhcHBseV9pbnRlcnZhbF91cyA/XG4gNzk3Olx0XHRcdHMtXHUwMDNlYXBwbHlfaW50ZXJ2YWxfdXMgOiBjdHgtXHUwMDNlYXR0cnMuYWdncl9pbnRlcnZhbDtcbiA3OTg6XHRcbiA3OTk6XHRcdHMtXHUwMDNlbmV4dF9hcHBseV9zaXMgPSBjdHgtXHUwMDNlcGFzc2VkX3NhbXBsZV9pbnRlcnZhbHMgJiM0MztcbiA4MDA6XHRcdFx0YXBwbHlfaW50ZXJ2YWwgLyBzYW1wbGVfaW50ZXJ2YWw7XG4gODAxOlx0fVxuIDgwMjpcdFxuIDgwMzpcdHZvaWQgZGFtb25fYWRkX3NjaGVtZShzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vcyAqcylcbiA4MDQ6XHR7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDExOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMTA5CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYGRhbW9zX3F1b3RhX2luaXRgIEZ1bmN0aW9uIGFuZCBpdHMgVXNlKioKCk9rYXksIGhvbGQgb24gYSBtaW51dGUuIExldCBtZSBmb2N1cyBvbiB0aGlzIGBkYW1vc19xdW90YV9pbml0YCBmdW5jdGlvbi4gSXQgc2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCwgaW5pdGlhbGl6aW5nIHRoZSBmaWVsZHMgb2YgYSBgZGFtb3NfcXVvdGFgIHN0cnVjdHVyZSB0byB0aGVpciBkZWZhdWx0IHZhbHVlczogemVyb2luZyBvdXQgdGhlIHNpemUgYW5kIHRpbWluZyByZWxhdGVkIHZhcmlhYmxlcywgYWxvbmcgd2l0aCB0aGUgcG9pbnRlcnMuICBOb3cgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgcXVvdGEgc3RydWN0dXJlIGlzIGFjdHVhbGx5ICp1c2VkKi4gV2hlcmUgaXMgdGhpcyBgcXVvdGFgIHZhcmlhYmxlIGJlaW5nIGluaXRpYWxpemVkIGFuZCBwYXNzZWQgYXJvdW5kPwoKVGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHRyYWNlIHdoZXJlIGBkYW1vbl9uZXdfc2NoZW1lYCBpcyBiZWluZyBjYWxsZWQsIGFzIHRoZSBgcXVvdGFgIGFyZ3VtZW50IG9mIGBkYW1vc19xdW90YV9pbml0YCBpcyBwYXNzZWQgdG8gYGRhbW9uX25ld19zY2hlbWVgCgpMb29raW5nIGF0IHRoZSBjYWxsIHNpdGVzLCBJIHNlZSB0d286IGBkYW1vbl9jb21taXRfc2NoZW1lc2AgYW5kIGBkYW1vbl9scnVfc29ydF9uZXdfc2NoZW1lYC4gSW4gdGhlIGZpcnN0IGNhc2UsIGBzcmNfc2NoZW1lLSZndDtxdW90YWAgaXMgcGFzc2VkLCBzbyBJIG5lZWQgdG8gdHJhY2sgdGhlIG9yaWdpbiBvZiB0aGF0LiBUaGUgb3RoZXIgY2FzZSBpcyB0aHJvdWdoIGBkYW1vbl9scnVfc29ydF9uZXdfc2NoZW1lYC4gT2theSwgc28gbGV0JiMzOTtzIHNlZSB3aGF0IGlzIGhhcHBlbmluZyBpbnNpZGUgYGRhbW9uX2xydV9zb3J0X25ld19zY2hlbWVgIG5leHQuIFRoaXMgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgaG93IHRoaXMgcXVvdGEgaXMgYmVpbmcgc2V0IHVwIGluIHRoZSBiaWdnZXIgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTE6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9kYW1vbi9scnVfc29ydC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTg1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxODU6XHRzdGF0aWMgc3RydWN0IGRhbW9uX2N0eCAqY3R4O1xuIDE4NjpcdHN0YXRpYyBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0YXJnZXQ7XG4gMTg3Olx0XG4gMTg4Olx0c3RhdGljIHN0cnVjdCBkYW1vcyAqZGFtb25fbHJ1X3NvcnRfbmV3X3NjaGVtZShcbiAxODk6XHRcdFx0c3RydWN0IGRhbW9zX2FjY2Vzc19wYXR0ZXJuICpwYXR0ZXJuLCBlbnVtIGRhbW9zX2FjdGlvbiBhY3Rpb24pXG4gMTkwOlx0e1xuIDE5MTpcdFx0c3RydWN0IGRhbW9zX3F1b3RhIHF1b3RhID0gZGFtb25fbHJ1X3NvcnRfcXVvdGE7XG4gMTkyOlx0XG4gMTkzOlx0XHQvKiBVc2UgaGFsZiBvZiB0b3RhbCBxdW90YSBmb3IgaG90L2NvbGQgcGFnZXMgc29ydGluZyAqL1xuIDE5NDpcdFx0cXVvdGEubXMgPSBxdW90YS5tcyAvIDI7XG4gMTk1Olx0XG4gMTk2Olx0XHRyZXR1cm4gZGFtb25fbmV3X3NjaGVtZShcbiAxOTc6XHRcdFx0XHQvKiBmaW5kIHRoZSBwYXR0ZXJuLCBhbmQgKi9cbiAxOTg6XHRcdFx0XHRwYXR0ZXJuLFxuIDE5OTpcdFx0XHRcdC8qIChkZSlwcmlvcml0aXplIG9uIExSVS1saXN0cyAqL1xuIDIwMDpcdFx0XHRcdGFjdGlvbixcbiAyMDE6XHRcdFx0XHQvKiBmb3IgZWFjaCBhZ2dyZWdhdGlvbiBpbnRlcnZhbCAqL1xuIDIwMjpcdFx0XHRcdDAsXG4gMjAzOlx0XHRcdFx0LyogdW5kZXIgdGhlIHF1b3RhLiAqL1xuIDIwNDpcdFx0XHRcdFx1MDAyNnF1b3RhLFxuIDIwNTpcdFx0XHRcdC8qIChEZSlhY3RpdmF0ZSB0aGlzIGFjY29yZGluZyB0byB0aGUgd2F0ZXJtYXJrcy4gKi9cbiAyMDY6XHRcdFx0XHRcdTAwMjZkYW1vbl9scnVfc29ydF93bWFya3MsXG4gMjA3Olx0XHRcdFx0TlVNQV9OT19OT0RFKTtcbiAyMDg6XHR9XG4gMjA5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDExOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMDA5CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogODQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgSSBkZWx2ZSBpbnRvIHRoaXMgY29kZToKCioqQW5hbHl6aW5nIERBTU9OJiMzOTtzIE1lbW9yeSBSZWNsYW1hdGlvbiBRdW90YSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBob3cgREFNT04gaGFuZGxlcyBpdHMgbWVtb3J5IHJlY2xhbWF0aW9uIHF1b3Rhcy4gSXQgc2VlbXMgbGlrZSBhIGZldyBrZXkgdmFyaWFibGVzIGFyZSBhdCBwbGF5IGhlcmUuIEZpcnN0LCBpbiBgZGFtb25fbHJ1X3NvcnRfcXVvdGFgLCBJIHNlZSBhIGdsb2JhbCB2YXJpYWJsZSwgaW5pdGlhbGl6ZWQgdG8gemVyby4gVGhhdCYjMzk7cyBnb29kIHRvIGtub3cg4oCTIGl0IHNldHMgYSBiYXNlbGluZSwgcHJlc3VtYWJseSBmb3IgdHJhY2tpbmcgc29tZXRoaW5nIHJlbGF0ZWQgdG8gTFJVIHNvcnRpbmcgYW5kIHF1b3RhIG1hbmFnZW1lbnQuIFRoZW4sIGxvb2tpbmcgYXQgYGRhbW9uX3JlY2xhaW1fbmV3X3NjaGVtZWAsIEkgZmluZCBhbm90aGVyIG9uZTogYGRhbW9uX3JlY2xhaW1fcXVvdGFgLCBhbHNvIGEgc3RhdGljIGdsb2JhbC4gU28sIHdlJiMzOTt2ZSBnb3QgYXQgbGVhc3QgdHdvIHN0YXRpYyBnbG9iYWwgdmFyaWFibGVzIGhlcmUgaGFuZGxpbmcgcXVvdGEgbWVjaGFuaXNtcywgd2hpY2ggaXMgdHlwaWNhbCBmb3IgcGVyZm9ybWFuY2UtY3JpdGljYWwgb3BlcmF0aW9ucy4gTGV0JiMzOTtzIGRpZyBkZWVwZXI7IHRvIGJlIHRob3JvdWdoLCBJIHNob3VsZCBub3cgbW92ZSBvbiBhbmQgY2hlY2sgdGhlIGBkYW1vbl9zeXNmc19ta19zY2hlbWVgIGZ1bmN0aW9uIOKAkyB0aGF0JiMzOTtzIG9mdGVuIHdoZXJlIHRoZSBrbm9icyBnZXQgdHVybmVkLCBzbyB0aGF0JiMzOTtzIG15IG5leHQgc3RvcC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTE6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMDE1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzMwMTU6XHRcdFx0LmZhaWxfY2hhcmdlX2Rlbm9tID0gc3lzZnNfcXVvdGFzLVx1MDAzZWZhaWxfY2hhcmdlX2Rlbm9tLFxuMzAxNjpcdFx0fTtcbjMwMTc6XHRcdHN0cnVjdCBkYW1vc193YXRlcm1hcmtzIHdtYXJrcyA9IHtcbjMwMTg6XHRcdFx0Lm1ldHJpYyA9IHN5c2ZzX3dtYXJrcy1cdTAwM2VtZXRyaWMsXG4zMDE5Olx0XHRcdC5pbnRlcnZhbCA9IHN5c2ZzX3dtYXJrcy1cdTAwM2VpbnRlcnZhbF91cyxcbjMwMjA6XHRcdFx0LmhpZ2ggPSBzeXNmc193bWFya3MtXHUwMDNlaGlnaCxcbjMwMjE6XHRcdFx0Lm1pZCA9IHN5c2ZzX3dtYXJrcy1cdTAwM2VtaWQsXG4zMDIyOlx0XHRcdC5sb3cgPSBzeXNmc193bWFya3MtXHUwMDNlbG93LFxuMzAyMzpcdFx0fTtcbjMwMjQ6XHRcbjMwMjU6XHRcdHNjaGVtZSA9IGRhbW9uX25ld19zY2hlbWUoXHUwMDI2cGF0dGVybiwgc3lzZnNfc2NoZW1lLVx1MDAzZWFjdGlvbixcbjMwMjY6XHRcdFx0XHRzeXNmc19zY2hlbWUtXHUwMDNlYXBwbHlfaW50ZXJ2YWxfdXMsIFx1MDAyNnF1b3RhLCBcdTAwMjZ3bWFya3MsXG4zMDI3Olx0XHRcdFx0c3lzZnNfc2NoZW1lLVx1MDAzZXRhcmdldF9uaWQpO1xuMzAyODpcdFx0aWYgKCFzY2hlbWUpXG4zMDI5Olx0XHRcdHJldHVybiBOVUxMO1xuMzAzMDpcdFxuMzAzMTpcdFx0ZXJyID0gZGFtb3Nfc3lzZnNfYWRkX3F1b3RhX3Njb3JlKHN5c2ZzX3F1b3Rhcy1cdTAwM2Vnb2FscywgXHUwMDI2c2NoZW1lLVx1MDAzZXF1b3RhKTtcbjMwMzI6XHRcdGlmIChlcnIpIHtcbjMwMzM6XHRcdFx0ZGFtb25fZGVzdHJveV9zY2hlbWUoc2NoZW1lKTtcbjMwMzQ6XHRcdFx0cmV0dXJuIE5VTEw7XG4zMDM1Olx0XHR9XG4zMDM2Olx0XG4zMDM3Olx0XHRlcnIgPSBkYW1vbl9zeXNmc19hZGRfc2NoZW1lX2ZpbHRlcnMoc2NoZW1lLCBzeXNmc19zY2hlbWUtXHUwMDNlY29yZV9maWx0ZXJzKTtcbjMwMzg6XHRcdGlmIChlcnIpIHtcbjMwMzk6XHRcdFx0ZGFtb25fZGVzdHJveV9zY2hlbWUoc2NoZW1lKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42My8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTE6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI3NTgKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA0NjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgREFNT04mIzM5O3MgUXVvdGEgSGFuZGxpbmcqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSW4gYGRhbW9uX3N5c2ZzX21rX3NjaGVtZWAsIEkgc2VlIGBzdHJ1Y3QgZGFtb3NfcXVvdGEgcXVvdGEgPSB7IC4uLiB9O2AgYmVpbmcgaW5pdGlhbGl6ZWQgd2l0aCBkZXNpZ25hdGVkIGluaXRpYWxpemVycy4gVGhpcyBpcyBwcmV0dHkgc3RhbmRhcmQsIGJ1dCB0aGUgaW1wb3J0YW50IGJpdCBpcyB0aGF0IGFueSB1bnNwZWNpZmllZCBmaWVsZHMgYXJlIHplcm9lZCBvdXQuIFRoYXQgKnNob3VsZCogaW5jbHVkZSBgbWluX3Njb3JlYCBhbmQgcGFkZGluZy4gTm93LCBoYW5nIG9uIGEgc2Vjb25kLi4uIHdoYXQgYWJvdXQgYGRhbW9zX3F1b3RhX2luaXRgPyBJIG5lZWQgdG8ga2VlcCB0aGF0IGZ1bmN0aW9uIGluIG1pbmQsIGFzIGl0IGNvdWxkIGJlIGltcG9ydGFudC4KClJpZ2h0LCBsb29raW5nIGZ1cnRoZXIsIGluIGBkYW1vbl9uZXdfc2NoZW1lYCwgaXQgYXBwZWFycyBsaWtlIHRoaXMgaXMgd2hhdCYjMzk7cyBoYXBwZW5pbmc6CmBzY2hlbWUgPSBrbWFsbG9jX29iaigqc2NoZW1lKTtgCmBzY2hlbWUtJmd0O3F1b3RhID0gKihkYW1vc19xdW90YV9pbml0KHF1b3RhKSk7YApTbyB3ZSBhcmUgYXNzaWduaW5nIHRoZSByZXN1bHQgb2YgYGRhbW9zX3F1b3RhX2luaXRgIHRvIHRoZSBhbGxvY2F0ZWQgc2NoZW1lLgoKTm93LCBJJiMzOTttIGdldHRpbmcgYSBsaXR0bGUgY29uY2VybmVkLiBJZiBgZGFtb3NfcXVvdGFfaXNfZnVsbGAgcmV0dXJucyB0cnVlLCBpcyBgbWluX3Njb3JlYCBldmVuICpyZWFkKiBhbnl3aGVyZT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdyBoZXJlLiBXaGVyZSBkb2VzIGV4ZWN1dGlvbiBnbyBpZiBgZGFtb3NfcXVvdGFfaXNfZnVsbGAgaXMgdHJ1ZT8gSSBuZWVkIHRvIHRyYWNrIHRoaXMgZG93bi4KCkxldCYjMzk7cyBsb29rIGF0IGBrZGFtb25kX2FwcGx5X3NjaGVtZXNgIGFuZCBmb2xsb3cgdGhlIGV4ZWN1dGlvbiBmbG93LiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgcGFyc2UgdGhpcyBhbmQgZm9jdXMgb24gdGhlIGltcG9ydGFudCBwYXJ0cy4KCk9rYXksIGhlcmUmIzM5O3Mgd2hhdCYjMzk7cyBoYXBwZW5pbmc6IFdlIGl0ZXJhdGUgdGhyb3VnaCB0aGUgc2NoZW1lcy4gSWYgYHRpbWVfYmVmb3JlKGMtJmd0O3Bhc3NlZF9zYW1wbGVfaW50ZXJ2YWxzLCBzLSZndDtuZXh0X2FwcGx5X3NpcylgIGlzIHRydWUsIHdlIGBjb250aW51ZWAuIElmIGAhcy0mZ3Q7d21hcmtzLmFjdGl2YXRlZGAgd2UgYGNvbnRpbnVlYC4gU28sIGlmIHRoZSBzY2hlbWUgaGFzICpwYXNzZWQqIHRoZSBzYW1wbGluZyBpbnRlcnZhbCwgYW5kIGlzIGBhY3RpdmF0ZWRgIHRoZW4gaXQmIzM5O3MgZWxpZ2libGUgdG8gYXBwbHkuCklmIHRoZXJlIGFyZSBzY2hlbWVzIHRvIGFwcGx5LCB3ZSBncmFiIHRoZSBtYXggcmVnaW9uIHNpemUgZnJvbSBgZGFtb25fcmVnaW9uX3N6X2xpbWl0KGMpYC4KClRoZW4sIHdlIGxvY2sgdGhlIGB3YWxrX2NvbnRyb2xfbG9ja2AuIEFmdGVyIHRoYXQsIHdlIGdvIHRocm91Z2ggdGhlIHRhcmdldHMuCgpJbnNpZGUgdGhlIHRhcmdldCBsb29wLCB0aGVyZSYjMzk7cyBhIGNoZWNrOiBgaWYgKGMtJmd0O29wcy50YXJnZXRfdmFsaWQgJmFtcDsmYW1wOyBjLSZndDtvcHMudGFyZ2V0X3ZhbGlkKHQpID09IGZhbHNlKWAuIFRoaXMgc2VlbXMgdG8gYmUgc29tZSBraW5kIG9mIHZhbGlkaXR5IGNoZWNrIG9uIHRoZSB0YXJnZXQsIEkmIzM5O2xsIGhhdmUgdG8gc2VlIHdoZXJlIHRoYXQgZnVuY3Rpb24gaXMgZGVmaW5lZC4gSWYgdGhlIHRhcmdldCBpc24mIzM5O3QgdmFsaWQsIHdlIG5lZWQgdG8gY2xlYXIgdGhlIHF1b3RhIGFzc29jaWF0ZWQgd2l0aCB0aGF0IHRhcmdldCwgaWYgdGhlIHF1b3RhIGlzIGFzc29jaWF0ZWQgd2l0aCB0aGF0IHRhcmdldC4KClRoZW4sIGltcG9ydGFudGx5LCBgZGFtb3NfYXBwbHlfdGFyZ2V0KGMsIHQsIG1heF9yZWdpb25fc3opYCBpcyBjYWxsZWQuIEkgbmVlZCB0byBkaWcgaW50byB0aGF0IGZ1bmN0aW9uIG5vdyB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIGFuZCBmaWd1cmUgb3V0IG15IGVhcmxpZXIgcXVlc3Rpb25zIGFib3V0IGBtaW5fc2NvcmVgLiBMZXQmIzM5O3MgZ2V0IHRvIHRoZSBib3R0b20gb2YgdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTE6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb3NfYXBwbHlfdGFyZ2V0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jPTI3NzA9c3RhdGljIHZvaWQgZGFtb25fZG9fYXBwbHlfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjLFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0yODA0LS8qXG5tbS9kYW1vbi9jb3JlLmM6MjgwNTogKiBkYW1vc19hcHBseV90YXJnZXQoKSAtIEFwcGx5IERBTU9TIHNjaGVtZXMgdG8gYSBnaXZlbiB0YXJnZXQuXG5tbS9kYW1vbi9jb3JlLmMtMjgwNi0gKiBAYzpcdFx0XHRtb25pdG9yaW5nIGNvbnRleHQgdG8gYXBwbHkgaXRzIERBTU9TIHNjaGVtZXMgdG8uLlxuLS1cbm1tL2RhbW9uL2NvcmUuYy0yODIxLSAqL1xubW0vZGFtb24vY29yZS5jOjI4MjI6c3RhdGljIHZvaWQgZGFtb3NfYXBwbHlfdGFyZ2V0KHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG5tbS9kYW1vbi9jb3JlLmMtMjgyMy1cdFx0dW5zaWduZWQgbG9uZyBtYXhfcmVnaW9uX3N6KVxuLS1cbm1tL2RhbW9uL2NvcmUuYz0zMzg3PXN0YXRpYyB2b2lkIGtkYW1vbmRfYXBwbHlfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zNDIwLVx0XHR9XG5tbS9kYW1vbi9jb3JlLmM6MzQyMTpcdFx0ZGFtb3NfYXBwbHlfdGFyZ2V0KGMsIHQsIG1heF9yZWdpb25fc3opO1xubW0vZGFtb24vY29yZS5jLTM0MjItXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDExOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MTYwCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2Ygd2hhdCBJIHdvdWxkIGJlIHRoaW5raW5nLCBmb3JtYXR0ZWQgYXMgcmVxdWVzdGVkOgoKKipBbmFseXppbmcgdGhlIEFwcGxpY2F0aW9uIFNjaGVtZXMqKgoKQWxyaWdodCwgdGltZSB0byBkaWcgaW4uIFRoZSB0YXNrIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IExldCYjMzk7cyBnZXQgaW50byBgZGFtb25fZG9fYXBwbHlfc2NoZW1lc2AgYW5kIGBkYW1vc19hcHBseV90YXJnZXRgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgdHdvIGNvbXBvbmVudHMgaW50ZXJhY3QgYW5kLCBtb3JlIGltcG9ydGFudGx5LCBob3cgdGhleSByZWxhdGUgdG8gdGhlIGJpZ2dlciBwaWN0dXJlIG9mIHRoZSBvdmVyYWxsIHN5c3RlbS4gSSYjMzk7bSBhbHJlYWR5IGFudGljaXBhdGluZyBzb21lIGludGVyZXN0aW5nIGRlc2lnbiBjaG9pY2VzIGFuZCBwb3RlbnRpYWwgYXJlYXMgZm9yIG9wdGltaXphdGlvbiwgZGVwZW5kaW5nIG9uIHRoZSBhcmNoaXRlY3R1cmUuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoZSBzcGVjaWZpYyBtZXRob2RvbG9naWVzIGFuZCBsb2dpYyBvZiB0aGUgc3lzdGVtLiBJJiMzOTtsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGFwcGxpY2F0aW9uIHNjaGVtZSBpbXBsZW1lbnRhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTE6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNzcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQ1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI3NzA6XHRzdGF0aWMgdm9pZCBkYW1vbl9kb19hcHBseV9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmMsXG4yNzcxOlx0XHRcdFx0XHQgICBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxuMjc3MjpcdFx0XHRcdFx0ICAgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcilcbjI3NzM6XHR7XG4yNzc0Olx0XHRzdHJ1Y3QgZGFtb3MgKnM7XG4yNzc1Olx0XG4yNzc2Olx0XHRkYW1vbl9mb3JfZWFjaF9zY2hlbWUocywgYykge1xuMjc3NzpcdFx0XHRzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhID0gXHUwMDI2cy1cdTAwM2VxdW90YTtcbjI3Nzg6XHRcbjI3Nzk6XHRcdFx0aWYgKHRpbWVfYmVmb3JlKGMtXHUwMDNlcGFzc2VkX3NhbXBsZV9pbnRlcnZhbHMsIHMtXHUwMDNlbmV4dF9hcHBseV9zaXMpKVxuMjc4MDpcdFx0XHRcdGNvbnRpbnVlO1xuMjc4MTpcdFxuMjc4MjpcdFx0XHRpZiAoIXMtXHUwMDNld21hcmtzLmFjdGl2YXRlZClcbjI3ODM6XHRcdFx0XHRjb250aW51ZTtcbjI3ODQ6XHRcbjI3ODU6XHRcdFx0LyogQ2hlY2sgdGhlIHF1b3RhICovXG4yNzg2Olx0XHRcdGlmIChkYW1vc19xdW90YV9pc19mdWxsKHF1b3RhLCBjLVx1MDAzZW1pbl9yZWdpb25fc3opKVxuMjc4NzpcdFx0XHRcdGNvbnRpbnVlO1xuMjc4ODpcdFxuMjc4OTpcdFx0XHRpZiAoZGFtb3Nfc2tpcF9jaGFyZ2VkX3JlZ2lvbih0LCByLCBzLCBjLVx1MDAzZW1pbl9yZWdpb25fc3opKVxuMjc5MDpcdFx0XHRcdGNvbnRpbnVlO1xuMjc5MTpcdFxuMjc5MjpcdFx0XHRpZiAocy1cdTAwM2VtYXhfbnJfc25hcHNob3RzIFx1MDAyNlx1MDAyNlxuMjc5MzpcdFx0XHRcdFx0cy1cdTAwM2VtYXhfbnJfc25hcHNob3RzIFx1MDAzYz0gcy1cdTAwM2VzdGF0Lm5yX3NuYXBzaG90cylcbjI3OTQ6XHRcdFx0XHRjb250aW51ZTtcbjI3OTU6XHRcbjI3OTY6XHRcdFx0aWYgKGRhbW9zX3ZhbGlkX3RhcmdldChjLCByLCBzKSlcbjI3OTc6XHRcdFx0XHRkYW1vc19hcHBseV9zY2hlbWUoYywgdCwgciwgcyk7XG4yNzk4Olx0XG4yNzk5Olx0XHRcdGlmIChkYW1vbl9pc19sYXN0X3JlZ2lvbihyLCB0KSlcbjI4MDA6XHRcdFx0XHRzLVx1MDAzZXN0YXQubnJfc25hcHNob3RzJiM0MzsmIzQzOztcbjI4MDE6XHRcdH1cbjI4MDI6XHR9XG4yODAzOlx0XG4yODA0Olx0LypcbjI4MDU6XHQgKiBkYW1vc19hcHBseV90YXJnZXQoKSAtIEFwcGx5IERBTU9TIHNjaGVtZXMgdG8gYSBnaXZlbiB0YXJnZXQuXG4yODA2Olx0ICogQGM6XHRcdFx0bW9uaXRvcmluZyBjb250ZXh0IHRvIGFwcGx5IGl0cyBEQU1PUyBzY2hlbWVzIHRvLi5cbjI4MDc6XHQgKiBAdDpcdFx0XHRtb25pdG9yaW5nIHRhcmdldCB0byBhcHBseSB0aGUgc2NoZW1lcyB0by5cbjI4MDg6XHQgKiBAbWF4X3JlZ2lvbl9zejpcdG1heGltdW0gcmVnaW9uIHNpemUgZm9yIEBjLlxuMjgwOTpcdCAqXG4yODEwOlx0ICogVGhpcyBmdW5jdGlvbiBjb3VsZCBzcGxpdCByZWdpb25zIGZvciBrZWVwaW5nIHRoZSBxdW90YS4gIFRvIG1pbmltaXplXG4yODExOlx0ICogb3ZlcmhlYWQgZnJvbSB0aGUgc3BsaXQgb3BlcmF0aW9ucyBpbmNyZWFzZWQgbnVtYmVyIG9mIHJlZ2lvbnMsIHRoaXNcbjI4MTI6XHQgKiBmdW5jdGlvbiB3aWxsIGFsc28gbWVyZ2UgcmVnaW9ucyBhZnRlciB0aGUgc2NoZW1lcyBhcHBseWluZyBhdHRlbXB0IGlzIGRvbmUsXG4yODEzOlx0ICogZm9yIGVhY2ggcmVnaW9uLiAgVGhlIG1lcmdlIG9wZXJhdGlvbiBpcyBtYWRlIG9ubHkgd2hlbiBpdCBkb2VzbiYjMzk7dCBsb3NlIHRoZVxuMjgxNDpcdCAqIG1vbml0b3JpbmcgaW5mb3JtYXRpb24gYW5kIG5vdCB2aW9sYXRpbmcgQG1heF9yZWdpb25fc3ouXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDExOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MDY3CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMjk5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFF1b3RhLVJlbGF0ZWQgT3B0aW1pemF0aW9uKioKCk9rYXksIGhlcmUgd2UgZ28uIExldCYjMzk7cyBkaWcgaW50byBsaW5lIDI3ODYgb2YgdGhpcyBjb2RlLiBSaWdodCwgc28gaWYgYGRhbW9zX3F1b3RhX2lzX2Z1bGxgIHJldHVybnMgdHJ1ZSwgaXQmIzM5O3MgYSBkaXJlY3QgYGNvbnRpbnVlYC4gVGhlIHNjaGVtZSBhcHBsaWNhdGlvbiBpcyAqY29tcGxldGVseSogYnlwYXNzZWQuIEludGVyZXN0aW5nLiBTbywgYGRhbW9zX3ZhbGlkX3RhcmdldGAgaXNuJiMzOTt0IGV2ZW4gY2hlY2tlZCBpZiB0aGUgcXVvdGEgaXMgZnVsbC4gVGhhdCYjMzk7cyBhIGtleSBvYnNlcnZhdGlvbi4KCk5vdywgdGhpbmtpbmcgYWJvdXQgYGRhbW9zX2FkanVzdF9xdW90YWAsIGl0IGxvb2tzIGxpa2UgdGhlIG9sZCB2ZXJzaW9uIHdhcyBpbmVmZmljaWVudC4gSXQgd2FzIHVwZGF0aW5nIHRoZSBxdW90YSB3aW5kb3cgY29ycmVjdGx5IGlmIGV4cGlyZWQsIGJ1dCB0aGVuIGl0JiMzOTtkIHN0aWxsIGNhbGN1bGF0ZSBoaXN0b2dyYW1zIGFuZCBzZXQgYHF1b3RhLSZndDttaW5fc2NvcmVgICpldmVuIGlmKiB0aGUgcXVvdGEgd2FzIGFscmVhZHkgZnVsbC4gVGhhdCYjMzk7cyBhIGRlZmluaXRlIHJlZHVuZGFuY3kuCgpTbyB0aGUgY2hhbmdlIGluIHRoZSBjb21taXQgbWFrZXMgc2Vuc2UsIG9wdGltaXppbmcgYmFzZWQgb24gdGhlIGZ1bGwtcXVvdGEgc3RhdGUuLi4gYnV0IEkgd29uZGVyICp3aHkqIHRoaXMgb3B0aW1pemF0aW9uIHdhcyBkZWVtZWQgbmVjZXNzYXJ5LiBXZXJlIHRoZXJlIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLCBvciB3ZXJlIHRoZXkganVzdCB0cnlpbmcgdG8gYmUgdGlkeT8gSSYjMzk7bSBnb2luZyB0byBjaGVjayB0aGUgZ2l0IGxvZy4gQ29udGV4dCBpcyBraW5nLCBhbmQgc2ltaWxhciBjb21taXRzIG1pZ2h0IHNoaW5lIGxpZ2h0IG9uIHRoaXMuIFRoaXMgb3B0aW1pemF0aW9uIGNvdWxkIGhhdmUgc2lnbmlmaWNhbnQgZWZmZWN0cyBpZiB0aGlzIGlzIGZyZXF1ZW50bHkgY2FsbGVkLCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMTo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYW1vc19hZGp1c3RfcXVvdGEmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jPTMyOTA9c3RhdGljIHZvaWQgZGFtb3NfdHJhY2VfZXN6KHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vcyAqcyxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzMwMy1cbm1tL2RhbW9uL2NvcmUuYzozMzA0OnN0YXRpYyB2b2lkIGRhbW9zX2FkanVzdF9xdW90YShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb3MgKnMpXG5tbS9kYW1vbi9jb3JlLmMtMzMwNS17XG4tLVxubW0vZGFtb24vY29yZS5jPTMzODc9c3RhdGljIHZvaWQga2RhbW9uZF9hcHBseV9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmMpXG4tLVxubW0vZGFtb24vY29yZS5jLTM0MDItXG5tbS9kYW1vbi9jb3JlLmM6MzQwMzpcdFx0ZGFtb3NfYWRqdXN0X3F1b3RhKGMsIHMpO1xubW0vZGFtb24vY29yZS5jLTM0MDQtXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDExOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1ODQ5CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMzExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBgZGFtb3NfYWRqdXN0X3F1b3RhYCBGdW5jdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZXhhbWluZSB0aGUgY29yZSBsb2dpYzogaWYgYHF1b3RhLSZndDtjaGFyZ2VkX3N6YCBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gYHF1b3RhLSZndDtlc3pgLCB0aGVuIGBkYW1vc19xdW90YV9pc19mdWxsYCBpcyB0cnVlLCByaWdodD8gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoYXQgY29uZGl0aW9uIGFuZCB3aGF0IGhhcHBlbnMgaWYgd2Ugc2tpcCBzb21lIHNldHVwIHN0ZXBzLgoKSSBzZWUgdGhhdCB3aGVuIGBkYW1vc19xdW90YV9pc19mdWxsYCBpcyB0cnVlLCB0aGUgY29kZSBoYXMgdGhlc2UgYHJldHVybmAgc3RhdGVtZW50czoKYGBgYwoJaWYgKGRhbW9zX3F1b3RhX2lzX2Z1bGwocXVvdGEsIGMtJmd0O21pbl9yZWdpb25fc3opKQoJCXJldHVybjsKCWlmICghYy0mZ3Q7b3BzLmdldF9zY2hlbWVfc2NvcmUpCgkJcmV0dXJuOwpgYGAKd2hpY2ggd2lsbCBsZWFkIHRvIGFuIGVhcmx5IGV4aXQuIFRoaXMgbWVhbnMgaXQgKmF2b2lkcyogdGhlIGxvb3AgdGhhdCB3b3VsZCBpbml0aWFsaXplIGFuZCBwb3B1bGF0ZSBgYy0mZ3Q7cmVnaW9uc19zY29yZV9oaXN0b2dyYW1gLiBUaGF0IG1ha2VzIG1lIHRoaW5rLi4uIGlzIHRoaXMgYnlwYXNzaW5nIHNvbWUgaW1wb3J0YW50IGluaXRpYWxpemF0aW9uIG9yIHNvbWUgb3RoZXIgb3BlcmF0aW9uPyBUaGUgY29kZSBpcyBzdXBwb3NlZCB0byBzdGFydCB3aXRoOgpgYGBjCgkJbWVtc2V0KGMtJmd0O3JlZ2lvbnNfc2NvcmVfaGlzdG9ncmFtLCAwLAoJCQkJc2l6ZW9mKCpjLSZndDtyZWdpb25zX3Njb3JlX2hpc3RvZ3JhbSkgKgoJCQkJKERBTU9TX01BWF9TQ09SRSAmIzQzOyAxKSk7CgkJZGFtb25fZm9yX2VhY2hfdGFyZ2V0KHQsIGMpIHsKLi4uCmBgYApJJiMzOTttIHdvbmRlcmluZywgaWYgYGRhbW9zX2FkanVzdF9xdW90YWAgcmV0dXJucyBlYXJseSBiZWNhdXNlIG9mIHRoYXQgY2hlY2ssIHRoZW4gYGMtJmd0O3JlZ2lvbnNfc2NvcmVfaGlzdG9ncmFtYCBtaWdodCByZW1haW4gdW5pbml0aWFsaXplZC4gSSBoYXZlIHRvIGZpZ3VyZSBvdXQgaWYgdGhhdCBjYXVzZXMgYSBwcm9ibGVtIGxhdGVyLiBJcyBgYy0mZ3Q7cmVnaW9uc19zY29yZV9oaXN0b2dyYW1gIGV2ZXIgcmVhZCBvdXRzaWRlIG9mIHRoYXQgbWFpbiBsb29wIGluIGBkYW1vc19hZGp1c3RfcXVvdGFgPyBJIG5lZWQgdG8ga25vdyB3aGVyZSB0aGlzIHZhcmlhYmxlIGlzIHVzZWQuIExldCBtZSBnbyBmaW5kIGl0IHdpdGggYSBxdWljayBncmVwIHRvIGJlIHN1cmUhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDExOjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3JlZ2lvbnNfc2NvcmVfaGlzdG9ncmFtJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvZGFtb24uaD04OTc9c3RydWN0IGRhbW9uX2N0eCB7XG4tLVxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTkyMC1cdC8qIGZvciBzY2hlbWUgcXVvdGFzIHByaW9yaXRpemF0aW9uICovXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6OTIxOlx0dW5zaWduZWQgbG9uZyAqcmVnaW9uc19zY29yZV9oaXN0b2dyYW07XG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtOTIyLVxuLS1cbm1tL2RhbW9uL2NvcmUuYz0zMzA0PXN0YXRpYyB2b2lkIGRhbW9zX2FkanVzdF9xdW90YShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb3MgKnMpXG4tLVxubW0vZGFtb24vY29yZS5jLTMzNDQtXHQvKiBGaWxsIHVwIHRoZSBzY29yZSBoaXN0b2dyYW0gKi9cbm1tL2RhbW9uL2NvcmUuYzozMzQ1Olx0bWVtc2V0KGMtXHUwMDNlcmVnaW9uc19zY29yZV9oaXN0b2dyYW0sIDAsXG5tbS9kYW1vbi9jb3JlLmM6MzM0NjpcdFx0XHRzaXplb2YoKmMtXHUwMDNlcmVnaW9uc19zY29yZV9oaXN0b2dyYW0pICpcbm1tL2RhbW9uL2NvcmUuYy0zMzQ3LVx0XHRcdChEQU1PU19NQVhfU0NPUkUgJiM0MzsgMSkpO1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0zMzU0LVx0XHRcdHNjb3JlID0gYy1cdTAwM2VvcHMuZ2V0X3NjaGVtZV9zY29yZShjLCByLCBzKTtcbm1tL2RhbW9uL2NvcmUuYzozMzU1Olx0XHRcdGMtXHUwMDNlcmVnaW9uc19zY29yZV9oaXN0b2dyYW1bc2NvcmVdICYjNDM7PVxubW0vZGFtb24vY29yZS5jLTMzNTYtXHRcdFx0XHRkYW1vbl9zel9yZWdpb24ocik7XG4tLVxubW0vZGFtb24vY29yZS5jLTMzNjMtXHRmb3IgKGN1bXVsYXRlZF9zeiA9IDAsIHNjb3JlID0gbWF4X3Njb3JlOyA7IHNjb3JlLS0pIHtcbm1tL2RhbW9uL2NvcmUuYzozMzY0Olx0XHRjdW11bGF0ZWRfc3ogJiM0Mzs9IGMtXHUwMDNlcmVnaW9uc19zY29yZV9oaXN0b2dyYW1bc2NvcmVdO1xubW0vZGFtb24vY29yZS5jLTMzNjUtXHRcdGlmIChjdW11bGF0ZWRfc3ogXHUwMDNlPSBxdW90YS1cdTAwM2Vlc3ogfHwgIXNjb3JlKVxuLS1cbm1tL2RhbW9uL2NvcmUuYz0zOTIwPXN0YXRpYyBpbnQga2RhbW9uZF9mbih2b2lkICpkYXRhKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zOTM1LVx0XHRjdHgtXHUwMDNlb3BzLmluaXQoY3R4KTtcbm1tL2RhbW9uL2NvcmUuYzozOTM2Olx0Y3R4LVx1MDAzZXJlZ2lvbnNfc2NvcmVfaGlzdG9ncmFtID0ga21hbGxvY19hcnJheShEQU1PU19NQVhfU0NPUkUgJiM0MzsgMSxcbm1tL2RhbW9uL2NvcmUuYzozOTM3Olx0XHRcdHNpemVvZigqY3R4LVx1MDAzZXJlZ2lvbnNfc2NvcmVfaGlzdG9ncmFtKSwgR0ZQX0tFUk5FTCk7XG5tbS9kYW1vbi9jb3JlLmM6MzkzODpcdGlmICghY3R4LVx1MDAzZXJlZ2lvbnNfc2NvcmVfaGlzdG9ncmFtKVxubW0vZGFtb24vY29yZS5jLTM5MzktXHRcdGdvdG8gZG9uZTtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtNDA2Ny1cbm1tL2RhbW9uL2NvcmUuYzo0MDY4Olx0a2ZyZWUoY3R4LVx1MDAzZXJlZ2lvbnNfc2NvcmVfaGlzdG9ncmFtKTtcbm1tL2RhbW9uL2NvcmUuYy00MDY5LVx0bXV0ZXhfbG9jayhcdTAwMjZjdHgtXHUwMDNlY2FsbF9jb250cm9sc19sb2NrKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTE6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcyMzQKCQkJCQkJCW91dHB1dDogMTcwCgkJCQkJCQl0aG91Z2h0czogMTE0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBBc3Nlc3NtZW50OiBObyBSaXNrIG9mIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IFVzYWdlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGFuYWx5c2lzIGZvY3VzZXMgb24gdGhlIGludHJvZHVjZWQgY29kZSYjMzk7cyBwb3RlbnRpYWwgdG8gZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgY29yZSBjaGFuZ2UgaXMgYSBzaW5nbGUgYGlmYCBzdGF0ZW1lbnQsIGBpZiAoZGFtb3NfcXVvdGFfaXNfZnVsbChxdW90YSwgYy0mZ3Q7bWluX3JlZ2lvbl9zeikpIHJldHVybjtgLCBhZGRlZCB0byBgZGFtb3NfYWRqdXN0X3F1b3RhKClgLiBUaGlzIGFjdHMgYXMgYW4gb3B0aW1pemF0aW9uLCBzaG9ydC1jaXJjdWl0aW5nIHRoZSBxdW90YSBhZGp1c3RtZW50IHByb2Nlc3MgaWYgdGhlIHF1b3RhIGlzIGFscmVhZHkgZXhoYXVzdGVkLgoKVGhlIGtleSBvYnNlcnZhdGlvbiBpcyBob3cgYGMtJmd0O3JlZ2lvbnNfc2NvcmVfaGlzdG9ncmFtYCBpcyBoYW5kbGVkLiBJdCYjMzk7cyAqb25seSogdXNlZCB3aXRoaW4gYGRhbW9zX2FkanVzdF9xdW90YSgpYC4gQ3J1Y2lhbGx5LCByaWdodCBhdCB0aGUgc3RhcnQgb2YgdGhlIGJsb2NrIHRoYXQgdXNlcyBpdCwgdGhlcmUmIzM5O3MgYSBgbWVtc2V0KClgIHRoYXQgZXhwbGljaXRseSB6ZXJvZXMgdGhlIGVudGlyZSBoaXN0b2dyYW0uIFRoaXMgZ3VhcmFudGVlcyB0aGF0IGFueSByZWFkIGZyb20gaXQgaXMgZnJvbSBpbml0aWFsaXplZCBtZW1vcnkuIFRoZSBoaXN0b2dyYW0gaXMgYnVpbHQgYW5kIGltbWVkaWF0ZWx5IGNvbnN1bWVkIHdpdGhpbiB0aGUgZnVuY3Rpb247IGl0cyB2YWx1ZXMgYXJlIG5vdCBwZXJzaXN0ZWQgb3IgZXhwb3NlZCBlbHNld2hlcmUuIGBxdW90YS0mZ3Q7bWluX3Njb3JlYCBpcyBhbHNvIGluaXRpYWxpemVkIHVwb24gYWxsb2NhdGlvbiBhbmQgcmVjYWxjdWxhdGVkIHdpdGhpbiB0aGUgZnVuY3Rpb24sIGJ1dCBpdCBpcyBub3QgZXZlbiB1c2VkIGluIGBkYW1vbl9kb19hcHBseV9zY2hlbWVzYCBpZiB0aGUgcXVvdGEgaXMgZnVsbCwgbWFraW5nIHRoZSBjYWxjdWxhdGlvbiByZWR1bmRhbnQuIEV2ZW4gaWYgaXQgd2VyZSBsYXRlciBjaGVja2VkLCBpdCB3b3VsZCBiZSByZWNhbGN1bGF0ZWQgYW5kIHNvIG5vIGlzc3VlLgoKVGhlcmVmb3JlLCB0aGUgcGF0Y2ggZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgZGVwZW5kZW5jaWVzIGluIGNvbmRpdGlvbmFsIGxvZ2ljLCBjb21wbGV4IGRhdGEgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uIGlzc3Vlcywgb3IgYnVmZmVyIG92ZXJydW4gcG9zc2liaWxpdGllcy4gVGhlIGFkZGVkIGBkYW1vc19xdW90YV9pc19mdWxsYCBjaGVjayB1c2VzIGluaXRpYWxpemVkIHZhcmlhYmxlcyAoYHF1b3RhYCBhbmQgYGMtJmd0O21pbl9yZWdpb25fc3pgKS4gVGhlIGhpc3RvZ3JhbSwgdGhlIG1vc3Qgc2Vuc2l0aXZlIHBhcnQsIGlzIGV4cGxpY2l0bHkgemVyb2VkIGJlZm9yZSB1c2UuCgpUaGUgb3ZlcmFsbCBjb25jZXJuIGlzIGlmIHRoaXMgcGF0Y2ggbGVhZHMgdG8gYSBzY2VuYXJpbyB0aGF0IGFsbG93cyB0aGUga2VybmVsIHRvIHJlYWQgdW5pbml0aWFsaXplZCBtZW1vcnksIHdoaWNoIGlzbiYjMzk7dCB0aGUgY2FzZSBoZXJlLiBUaGlzIGlzIHB1cmUgbG9naWMvb3B0aW1pemF0aW9uLiBBIEtNU0FOIGFuYWx5c2lzIGlzIG5vdCBuZWVkZWQgaGVyZTsgc3RhbmRhcmQgc2FuaXRpemVycyB3aWxsIGFkZXF1YXRlbHkgZGV0ZWN0IG1lbW9yeSBjb3JydXB0aW9uLiBXZSBjYW4ganVzdGlmeSB0aGUgbmVlZCBmb3IgS01TQU4gd2l0aCB0aGUgZm9sbG93aW5nIHJlYXNvbmluZzogdGhlIHBhdGNoIHNpbXBseSBhZGRzIGFuIGVhcmx5IHJldHVybiBpbiBgZGFtb3NfYWRqdXN0X3F1b3RhKClgIGlmIHRoZSBxdW90YSBpcyBmdWxsLCBhdm9pZGluZyBidWlsZGluZyBgYy0mZ3Q7cmVnaW9uc19zY29yZV9oaXN0b2dyYW1gIGFuZCB1cGRhdGluZyBgcXVvdGEtJmd0O21pbl9zY29yZWAuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQgb3IgbGVha2VkLiBgYy0mZ3Q7cmVnaW9uc19zY29yZV9oaXN0b2dyYW1gIGlzIG9ubHkgYWNjZXNzZWQgd2l0aGluIGBkYW1vc19hZGp1c3RfcXVvdGEoKWAgYW5kIGlzIGFsd2F5cyBleHBsaWNpdGx5IHplcm9lZCB3aXRoIGBtZW1zZXQoKWAgYmVmb3JlIHVzZS4gS0FTQU4gaXMgc3VmZmljaWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTE6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhbiBlYXJseSByZXR1cm4gaW4gZGFtb3NfYWRqdXN0X3F1b3RhKCkgaWYgdGhlIHF1b3RhIGlzIGFscmVhZHkgZXhoYXVzdGVkIChkYW1vc19xdW90YV9pc19mdWxsKCkpLiBUaGlzIHNraXBzIHJlY2FsY3VsYXRpb24gb2YgdGhlIHNjaGVtZSBzY29yZSBoaXN0b2dyYW0gYW5kIG1pbl9zY29yZS5cblxuTm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3IgbWVtb3J5IGFsbG9jYXRpb25zIGFyZSBpbnRyb2R1Y2VkIG9yIHJlYWQuIFRoZSBza2lwcGVkIGhpc3RvZ3JhbSBidWZmZXIgKGMtXHUwMDNlcmVnaW9uc19zY29yZV9oaXN0b2dyYW0pIGlzIHN0cmljdGx5IGludGVybmFsIHRvIHRoaXMgZnVuY3Rpb24gYW5kIGlzIGFsd2F5cyB6ZXJvZWQgdmlhIG1lbXNldCgpIHByaW9yIHRvIHVzZSB3aGVuIGFjY2Vzc2VkLiBObyBkYXRhIGlzIGNvcGllZCB0byB1c2VyIHNwYWNlIG9yIHVzZWQgaW4gdW5pbml0aWFsaXplZCBzdGF0ZS4gQW55IHBvdGVudGlhbCBtZW1vcnkgc2FmZXR5IGlzc3VlcyAoc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzKSB3b3VsZCBiZSBkZXRlY3RlZCBieSBzdGFuZGFyZCBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBydW4gaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYW4gZWFybHkgcmV0dXJuIGluIGRhbW9zX2FkanVzdF9xdW90YSgpIGlmIHRoZSBxdW90YSBpcyBhbHJlYWR5IGV4aGF1c3RlZCAoZGFtb3NfcXVvdGFfaXNfZnVsbCgpKS4gVGhpcyBza2lwcyByZWNhbGN1bGF0aW9uIG9mIHRoZSBzY2hlbWUgc2NvcmUgaGlzdG9ncmFtIGFuZCBtaW5fc2NvcmUuXG5cbk5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIG1lbW9yeSBhbGxvY2F0aW9ucyBhcmUgaW50cm9kdWNlZCBvciByZWFkLiBUaGUgc2tpcHBlZCBoaXN0b2dyYW0gYnVmZmVyIChjLVx1MDAzZXJlZ2lvbnNfc2NvcmVfaGlzdG9ncmFtKSBpcyBzdHJpY3RseSBpbnRlcm5hbCB0byB0aGlzIGZ1bmN0aW9uIGFuZCBpcyBhbHdheXMgemVyb2VkIHZpYSBtZW1zZXQoKSBwcmlvciB0byB1c2Ugd2hlbiBhY2Nlc3NlZC4gTm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSBvciB1c2VkIGluIHVuaW5pdGlhbGl6ZWQgc3RhdGUuIEFueSBwb3RlbnRpYWwgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcykgd291bGQgYmUgZGV0ZWN0ZWQgYnkgc3RhbmRhcmQgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gcnVuIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDExOjUyOjA0LjYwNzk2Mjg2M1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NDU5MjUwMTE3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJEQU1PTlwiLFxuICAgIFwiREFNT05fU1lTRlNcIixcbiAgICBcIkRBTU9OX1BBRERSXCIsXG4gICAgXCJEQU1PTl9WQUREUlwiLFxuICAgIFwiREFNT05fUkVDTEFJTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRhbW9zX2FkanVzdF9xdW90YVwiLFxuICAgIFwia2RhbW9uZF9hcHBseV9zY2hlbWVzXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGFuIGVhcmx5IHJldHVybiBpbiBkYW1vc19hZGp1c3RfcXVvdGEoKSBpZiB0aGUgcXVvdGEgaXMgYWxyZWFkeSBleGhhdXN0ZWQgKGRhbW9zX3F1b3RhX2lzX2Z1bGwoKSkuIFRoaXMgc2tpcHMgcmVjYWxjdWxhdGlvbiBvZiB0aGUgc2NoZW1lIHNjb3JlIGhpc3RvZ3JhbSBhbmQgbWluX3Njb3JlLlxcblxcbk5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIG1lbW9yeSBhbGxvY2F0aW9ucyBhcmUgaW50cm9kdWNlZCBvciByZWFkLiBUaGUgc2tpcHBlZCBoaXN0b2dyYW0gYnVmZmVyIChjLVxcdTAwM2VyZWdpb25zX3Njb3JlX2hpc3RvZ3JhbSkgaXMgc3RyaWN0bHkgaW50ZXJuYWwgdG8gdGhpcyBmdW5jdGlvbiBhbmQgaXMgYWx3YXlzIHplcm9lZCB2aWEgbWVtc2V0KCkgcHJpb3IgdG8gdXNlIHdoZW4gYWNjZXNzZWQuIE5vIGRhdGEgaXMgY29waWVkIHRvIHVzZXIgc3BhY2Ugb3IgdXNlZCBpbiB1bmluaXRpYWxpemVkIHN0YXRlLiBBbnkgcG90ZW50aWFsIG1lbW9yeSBzYWZldHkgaXNzdWVzIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMpIHdvdWxkIGJlIGRldGVjdGVkIGJ5IHN0YW5kYXJkIEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIHJ1biBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgaW4gREFNT04gKG1tL2RhbW9uL2NvcmUuYykgYnkgaW50cm9kdWNpbmcgYW4gZWFybHkgZXhpdCBjaGVjayBpbiBkYW1vc19hZGp1c3RfcXVvdGEoKSB3aGVuIHRoZSBxdW90YSBpcyBhbHJlYWR5IGZ1bGwuIFRoaXMgYXZvaWRzIHVubmVjZXNzYXJ5IHJlZ2lvbiBzY29yZSBoaXN0b2dyYW0gY2FsY3VsYXRpb25zLiBCZWNhdXNlIHRoaXMgY2hhbmdlcyByZWFjaGFibGUgZXhlY3V0aW9uIGxvZ2ljIGluIGEgY29yZSBNTSBzdWJzeXN0ZW0gYWNjZXNzaWJsZSB2aWEgREFNT04gc3lzZnMgYW5kIG1vZHVsZSBpbnRlcmZhY2VzIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgaXQgaXMgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTE6NTI6MDQuNjA3OTY4OTczWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTQwNDE3NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA3NzBmMjkwMDc5NjhlODNjOTk2NzMwOGMxZGM2MmExOTkxZmRmNjMxXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTdW4gU2VwIDEzIDExOjUyOjAzIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL2NvcmUuYyBiL21tL2RhbW9uL2NvcmUuY1xcbmluZGV4IDBjOThmN2UyNjdkMDcuLjNkN2E5NzNlYThiNmYgMTAwNjQ0XFxuLS0tIGEvbW0vZGFtb24vY29yZS5jXFxuKysrIGIvbW0vZGFtb24vY29yZS5jXFxuQEAgLTMzMzYsNiArMzMzNiw4IEBAIHN0YXRpYyB2b2lkIGRhbW9zX2FkanVzdF9xdW90YShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb3MgKnMpXFxuIFxcdFxcdFxcdGRhbW9zX3RyYWNlX2VzeihjLCBzLCBxdW90YSk7XFxuIFxcdH1cXG4gXFxuK1xcdGlmIChkYW1vc19xdW90YV9pc19mdWxsKHF1b3RhLCBjLVxcdTAwM2VtaW5fcmVnaW9uX3N6KSlcXG4rXFx0XFx0cmV0dXJuO1xcbiBcXHRpZiAoIWMtXFx1MDAzZW9wcy5nZXRfc2NoZW1lX3Njb3JlKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMTo1MjowNS4wNjI1NzI0NTZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjk2NTUzODEyOTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRBTU9OXCIsXG4gICAgXCJEQU1PTl9TWVNGU1wiLFxuICAgIFwiREFNT05fUEFERFJcIixcbiAgICBcIkRBTU9OX1ZBRERSXCIsXG4gICAgXCJEQU1PTl9SRUNMQUlNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGFtb3NfYWRqdXN0X3F1b3RhXCIsXG4gICAgXCJrZGFtb25kX2FwcGx5X3NjaGVtZXNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGluIERBTU9OIChtbS9kYW1vbi9jb3JlLmMpIGJ5IGludHJvZHVjaW5nIGFuIGVhcmx5IGV4aXQgY2hlY2sgaW4gZGFtb3NfYWRqdXN0X3F1b3RhKCkgd2hlbiB0aGUgcXVvdGEgaXMgYWxyZWFkeSBmdWxsLiBUaGlzIGF2b2lkcyB1bm5lY2Vzc2FyeSByZWdpb24gc2NvcmUgaGlzdG9ncmFtIGNhbGN1bGF0aW9ucy4gQmVjYXVzZSB0aGlzIGNoYW5nZXMgcmVhY2hhYmxlIGV4ZWN1dGlvbiBsb2dpYyBpbiBhIGNvcmUgTU0gc3Vic3lzdGVtIGFjY2Vzc2libGUgdmlhIERBTU9OIHN5c2ZzIGFuZCBtb2R1bGUgaW50ZXJmYWNlcyBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIGl0IGlzIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNzcwZjI5MDA3OTY4ZTgzYzk5NjczMDhjMWRjNjJhMTk5MWZkZjYzMVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gU2VwIDEzIDExOjUyOjAzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vY29yZS5jIGIvbW0vZGFtb24vY29yZS5jXG5pbmRleCAwYzk4ZjdlMjY3ZDA3Li4zZDdhOTczZWE4YjZmIDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vY29yZS5jXG4rKysgYi9tbS9kYW1vbi9jb3JlLmNcbkBAIC0zMzM2LDYgKzMzMzYsOCBAQCBzdGF0aWMgdm9pZCBkYW1vc19hZGp1c3RfcXVvdGEoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzKVxuIFx0XHRcdGRhbW9zX3RyYWNlX2VzeihjLCBzLCBxdW90YSk7XG4gXHR9XG4gXG4rXHRpZiAoZGFtb3NfcXVvdGFfaXNfZnVsbChxdW90YSwgYy1cdTAwM2VtaW5fcmVnaW9uX3N6KSlcbitcdFx0cmV0dXJuO1xuIFx0aWYgKCFjLVx1MDAzZW9wcy5nZXRfc2NoZW1lX3Njb3JlKVxuIFx0XHRyZXR1cm47XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMTo1MjowNS4wNjI1NzQzOTZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo2NDc2NTMzMjkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIERBTU9OIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYG1tL2RhbW9uL2NvcmUuY2AuIEl0J3MgZm9jdXNlZCBhcm91bmQgdGhlIGBkYW1vc19hZGp1c3RfcXVvdGFgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgbGluZSAzMzM2LiBUaGUga2V5IGFkZGl0aW9uIHNlZW1zIHRvIGJlIHRoaXMgY2hlY2s6IGBpZiAoZGFtb3NfcXVvdGFfaXNfZnVsbChxdW90YSwgYy1cdTAwM2VtaW5fcmVnaW9uX3N6KSkgcmV0dXJuO2AuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IHdoYXQgdGhpcyBgZGFtb3NfcXVvdGFfaXNfZnVsbGAgZnVuY3Rpb24gYWN0dWFsbHkgZG9lcyBhbmQgaXRzIGltcGxpY2F0aW9ucy5cblxuSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgaGVyZS4gSSdsbCBuZWVkIHRvIHJlbWVtYmVyIHRoZSBwdXJwb3NlIG9mIGBkYW1vc19hZGp1c3RfcXVvdGFgLCBpdHMgaW50ZXJhY3Rpb24gd2l0aCB0aGUgREFNT04gc3Vic3lzdGVtLCBhbmQgaXRzIHJvbGUgaW4gbWVtb3J5IG1hbmFnZW1lbnQgb3B0aW1pemF0aW9uLiBXaGF0IGFyZSBpdHMgY2FsbGVycyBhbmQgd2hhdCBkb2VzIHRoaXMgY2hhbmdlIG1vZGlmeT8gSXQncyBhbGwgYWJvdXQgaG93IHdlIGFkanVzdCB0aGUgcXVvdGFzLlxuXG5JIHNob3VsZCBhbHNvIGNvbnNpZGVyIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBEQU1PTi4gQXJlIHRoZXJlIGFueSByZWxldmFudCBjb25maWd1cmF0aW9ucyB0aGF0IGNvdWxkIGltcGFjdCB0aGUgYmVoYXZpb3Igb2YgdGhpcyBwYXRjaD8gVGhlIGBjLVx1MDAzZW1pbl9yZWdpb25fc3pgIGlzIGltcG9ydGFudCwgc28gSSBuZWVkIHRvIGtub3cgaG93IHRoYXQncyBkZWZpbmVkLCB1c2VkLCBhbmQgc2V0LiBJJ2xsIG5lZWQgdG8gdHJhY2UgdGhlIHVzYWdlIG9mIHRoZXNlIHZhcmlhYmxlcyBhbmQgdW5kZXJzdGFuZCB0aGVpciBpbmZsdWVuY2UuXG5cblNvLCBJIG5lZWQgdG8gdXNlIGByZWFkLWZpbGVgIHRvIGdldCB0aGUgY29udGV4dCBhcm91bmQgbGluZSAzMzM2LCBhbmQgZmlndXJlIG91dCB3aGF0J3MgZ29pbmcgb24gd2l0aCB0aGUgcXVvdGEgYWRqdXN0bWVudHMuIFRoZW4gSSBuZWVkIHRvIGNvbmZpcm0gcmVhY2hhYmlsaXR5IGFuZCBwb3RlbnRpYWwgaXNzdWVzIGludHJvZHVjZWQgYnkgdGhpcyBzZWVtaW5nbHkgc2ltcGxlIGNvbmRpdGlvbmFsIHN0YXRlbWVudC4gVGhpcyBpcyBhIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24gb3IgY2hhbmdlIGluIGJlaGF2aW9yLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODU5LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTE6NTI6MTEuNTM5MTEwMTc4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMyMzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2RhbW9uL2NvcmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMzIwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzMzIwOlxcdFxcdFxcdFxcdGRhbW9zX3RyYWNlX2VzeihjLCBzLCBxdW90YSk7XFxuMzMyMTpcXHRcXHR9XFxuMzMyMjpcXHRcXG4zMzIzOlxcdFxcdC8qIE5ldyBjaGFyZ2Ugd2luZG93IHN0YXJ0cyAqL1xcbjMzMjQ6XFx0XFx0aWYgKCF0aW1lX2luX3JhbmdlX29wZW4oamlmZmllcywgcXVvdGEtXFx1MDAzZWNoYXJnZWRfZnJvbSxcXG4zMzI1OlxcdFxcdFxcdFxcdFxcdHF1b3RhLVxcdTAwM2VjaGFyZ2VkX2Zyb20gK1xcbjMzMjY6XFx0XFx0XFx0XFx0XFx0bXNlY3NfdG9famlmZmllcyhxdW90YS1cXHUwMDNlcmVzZXRfaW50ZXJ2YWwpKSkge1xcbjMzMjc6XFx0XFx0XFx0aWYgKGRhbW9zX3F1b3RhX2lzX2Z1bGwocXVvdGEsIGMtXFx1MDAzZW1pbl9yZWdpb25fc3opKVxcbjMzMjg6XFx0XFx0XFx0XFx0cy1cXHUwMDNlc3RhdC5xdF9leGNlZWRzKys7XFxuMzMyOTpcXHRcXHRcXHRxdW90YS1cXHUwMDNldG90YWxfY2hhcmdlZF9zeiArPSBxdW90YS1cXHUwMDNlY2hhcmdlZF9zejtcXG4zMzMwOlxcdFxcdFxcdHF1b3RhLVxcdTAwM2VjaGFyZ2VkX2Zyb20gPSBqaWZmaWVzO1xcbjMzMzE6XFx0XFx0XFx0cXVvdGEtXFx1MDAzZWNoYXJnZWRfc3ogPSAwO1xcbjMzMzI6XFx0XFx0XFx0aWYgKHRyYWNlX2RhbW9zX2Vzel9lbmFibGVkKCkpXFxuMzMzMzpcXHRcXHRcXHRcXHRjYWNoZWRfZXN6ID0gcXVvdGEtXFx1MDAzZWVzejtcXG4zMzM0OlxcdFxcdFxcdGRhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGEoYywgcyk7XFxuMzMzNTpcXHRcXHRcXHRpZiAodHJhY2VfZGFtb3NfZXN6X2VuYWJsZWQoKSBcXHUwMDI2XFx1MDAyNiBxdW90YS1cXHUwMDNlZXN6ICE9IGNhY2hlZF9lc3opXFxuMzMzNjpcXHRcXHRcXHRcXHRkYW1vc190cmFjZV9lc3ooYywgcywgcXVvdGEpO1xcbjMzMzc6XFx0XFx0fVxcbjMzMzg6XFx0XFxuMzMzOTpcXHRcXHRpZiAoZGFtb3NfcXVvdGFfaXNfZnVsbChxdW90YSwgYy1cXHUwMDNlbWluX3JlZ2lvbl9zeikpXFxuMzM0MDpcXHRcXHRcXHRyZXR1cm47XFxuMzM0MTpcXHRcXHRpZiAoIWMtXFx1MDAzZW9wcy5nZXRfc2NoZW1lX3Njb3JlKVxcbjMzNDI6XFx0XFx0XFx0cmV0dXJuO1xcbjMzNDM6XFx0XFxuMzM0NDpcXHRcXHQvKiBGaWxsIHVwIHRoZSBzY29yZSBoaXN0b2dyYW0gKi9cXG4zMzQ1OlxcdFxcdG1lbXNldChjLVxcdTAwM2VyZWdpb25zX3Njb3JlX2hpc3RvZ3JhbSwgMCxcXG4zMzQ2OlxcdFxcdFxcdFxcdHNpemVvZigqYy1cXHUwMDNlcmVnaW9uc19zY29yZV9oaXN0b2dyYW0pICpcXG4zMzQ3OlxcdFxcdFxcdFxcdChEQU1PU19NQVhfU0NPUkUgKyAxKSk7XFxuMzM0ODpcXHRcXHRkYW1vbl9mb3JfZWFjaF90YXJnZXQodCwgYykge1xcbjMzNDk6XFx0XFx0XFx0ZGFtb25fZm9yX2VhY2hfcmVnaW9uKHIsIHQpIHtcXG4zMzUwOlxcdFxcdFxcdFxcdGlmICghX19kYW1vc192YWxpZF90YXJnZXQociwgcywgYykpXFxuMzM1MTpcXHRcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4zMzUyOlxcdFxcdFxcdFxcdGlmIChkYW1vc19jb3JlX2ZpbHRlcl9vdXQoYywgdCwgciwgcykpXFxuMzM1MzpcXHRcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4zMzU0OlxcdFxcdFxcdFxcdHNjb3JlID0gYy1cXHUwMDNlb3BzLmdldF9zY2hlbWVfc2NvcmUoYywgciwgcyk7XFxuMzM1NTpcXHRcXHRcXHRcXHRjLVxcdTAwM2VyZWdpb25zX3Njb3JlX2hpc3RvZ3JhbVtzY29yZV0gKz1cXG4zMzU2OlxcdFxcdFxcdFxcdFxcdGRhbW9uX3N6X3JlZ2lvbihyKTtcXG4zMzU3OlxcdFxcdFxcdFxcdGlmIChzY29yZSBcXHUwMDNlIG1heF9zY29yZSlcXG4zMzU4OlxcdFxcdFxcdFxcdFxcdG1heF9zY29yZSA9IHNjb3JlO1xcbjMzNTk6XFx0XFx0XFx0fVxcbjMzNjA6XFx0XFx0fVxcbjMzNjE6XFx0XFxuMzM2MjpcXHRcXHQvKiBTZXQgdGhlIG1pbiBzY29yZSBsaW1pdCAqL1xcbjMzNjM6XFx0XFx0Zm9yIChjdW11bGF0ZWRfc3ogPSAwLCBzY29yZSA9IG1heF9zY29yZTsgOyBzY29yZS0tKSB7XFxuMzM2NDpcXHRcXHRcXHRjdW11bGF0ZWRfc3ogKz0gYy1cXHUwMDNlcmVnaW9uc19zY29yZV9oaXN0b2dyYW1bc2NvcmVdO1xcbjMzNjU6XFx0XFx0XFx0aWYgKGN1bXVsYXRlZF9zeiBcXHUwMDNlPSBxdW90YS1cXHUwMDNlZXN6IHx8ICFzY29yZSlcXG4zMzY2OlxcdFxcdFxcdFxcdGJyZWFrO1xcbjMzNjc6XFx0XFx0fVxcbjMzNjg6XFx0XFx0cXVvdGEtXFx1MDAzZW1pbl9zY29yZSA9IHNjb3JlO1xcbjMzNjk6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMTo1MjoxMS41MzkzNDUyNThaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyNjYwMDUwMTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRBTU9OIEFuYWx5c2lzIC0gUXVpY2sgQ2hlY2sqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgZGFtb3NfYWRqdXN0X3F1b3RhYCwgYW5kIGl0J3MgcmlnaHQgdGhlcmUgaW4gYG1tL2RhbW9uL2NvcmUuY2AuIFN0YW5kYXJkIERBTU9OIHRlcnJpdG9yeSwgYXMgZXhwZWN0ZWQuIE15IGZpcnN0IHF1ZXN0aW9ucyBhcmUgYWx3YXlzIGFib3V0IHJlYWNoYWJpbGl0eSBhbmQgZnV6emluZyAtIGlzIHRoaXMgY29kZSBwYXRoIGV4cG9zZWQgdG8gYW55IGludGVyZXN0aW5nIGlucHV0cywgYW5kIGhhdmUgd2UgdGhyb3duIGV2ZXJ5dGhpbmcgYXQgaXQgYWxyZWFkeT8gV2Ugc2hvdWxkIGNoZWNrIGZvciB1c2VyLXNwYWNlIGNvbnRyb2wsIHdoaWNoIGlzIHRoZSBtb3N0IGxpa2VseSBhdmVudWUgZm9yIHByb2JsZW1zLiBBaCwgeWVzLCBEQU1PTidzIHN5c2ZzIGludGVyZmFjZSAoYC9zeXMva2VybmVsL21tL2RhbW9uL2FkbWluLy4uLmApIGFuZCBkZWJ1Z2ZzIGludGVyZmFjZSAoYC9zeXMva2VybmVsL2RlYnVnL2RhbW9uLy4uLmApIC0gdGhhdCdzIG91ciBlbnRyeSBwb2ludC4gTm93LCBsZXQncyBqdXN0IHF1aWNrbHkgY29uZmlybSB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiB1c2luZyBLY29uZmlnLiBDaGVjayBpZiBpdCdzIGV2ZW4gZW5hYmxlZCBhbmQgaG93LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MzE3LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTE6NTI6MTQuMTk5Mzk4MjE3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MTg5NTM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBEQU1PTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9LY29uZmlnPTM9bWVudSBcXFwiRGF0YSBBY2Nlc3MgTW9uaXRvcmluZ1xcXCJcXG5tbS9kYW1vbi9LY29uZmlnLTQtXFxubW0vZGFtb24vS2NvbmZpZzo1OmNvbmZpZyBEQU1PTlxcbm1tL2RhbW9uL0tjb25maWctNi1cXHRib29sIFxcXCJEQU1PTjogRGF0YSBBY2Nlc3MgTW9uaXRvcmluZyBGcmFtZXdvcmtcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTE0LVxcbm1tL2RhbW9uL0tjb25maWc6MTU6Y29uZmlnIERBTU9OX0RFQlVHX1NBTklUWVxcbm1tL2RhbW9uL0tjb25maWctMTYtXFx0Ym9vbCBcXFwiQ2hlY2sgc2FuaXR5IG9mIERBTU9OIGNvZGVcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTI1LVxcbm1tL2RhbW9uL0tjb25maWc6MjY6Y29uZmlnIERBTU9OX0tVTklUX1RFU1RcXG5tbS9kYW1vbi9LY29uZmlnLTI3LVxcdGJvb2wgXFxcIlRlc3QgZm9yIGRhbW9uXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTM3LVxcbm1tL2RhbW9uL0tjb25maWc6Mzg6Y29uZmlnIERBTU9OX1ZBRERSXFxubW0vZGFtb24vS2NvbmZpZy0zOS1cXHRib29sIFxcXCJEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXNcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTQ2LVxcbm1tL2RhbW9uL0tjb25maWc6NDc6Y29uZmlnIERBTU9OX1BBRERSXFxubW0vZGFtb24vS2NvbmZpZy00OC1cXHRib29sIFxcXCJEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy01NS1cXG5tbS9kYW1vbi9LY29uZmlnOjU2OmNvbmZpZyBEQU1PTl9WQUREUl9LVU5JVF9URVNUXFxubW0vZGFtb24vS2NvbmZpZy01Ny1cXHRib29sIFxcXCJUZXN0IGZvciBEQU1PTiBvcGVyYXRpb25zXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTY3LVxcbm1tL2RhbW9uL0tjb25maWc6Njg6Y29uZmlnIERBTU9OX1NZU0ZTXFxubW0vZGFtb24vS2NvbmZpZy02OS1cXHRib29sIFxcXCJEQU1PTiBzeXNmcyBpbnRlcmZhY2VcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTc1LVxcbm1tL2RhbW9uL0tjb25maWc6NzY6Y29uZmlnIERBTU9OX1NZU0ZTX0tVTklUX1RFU1RcXG5tbS9kYW1vbi9LY29uZmlnLTc3LVxcdGJvb2wgXFxcIlRlc3QgZm9yIGRhbW9uIHN5c2ZzIGludGVyZmFjZVxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbi0tXFxubW0vZGFtb24vS2NvbmZpZy04Ny1cXG5tbS9kYW1vbi9LY29uZmlnOjg4OmNvbmZpZyBEQU1PTl9SRUNMQUlNXFxubW0vZGFtb24vS2NvbmZpZy04OS1cXHRib29sIFxcXCJCdWlsZCBEQU1PTi1iYXNlZCByZWNsYWltIChEQU1PTl9SRUNMQUlNKVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctOTktXFxubW0vZGFtb24vS2NvbmZpZzoxMDA6Y29uZmlnIERBTU9OX0xSVV9TT1JUXFxubW0vZGFtb24vS2NvbmZpZy0xMDEtXFx0Ym9vbCBcXFwiQnVpbGQgREFNT04tYmFzZWQgTFJVLWxpc3RzIHNvcnRpbmcgKERBTU9OX0xSVV9TT1JUKVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctMTA3LVxcbm1tL2RhbW9uL0tjb25maWc6MTA4OmNvbmZpZyBEQU1PTl9TVEFUXFxubW0vZGFtb24vS2NvbmZpZy0xMDktXFx0Ym9vbCBcXFwiQnVpbGQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBzdGF0IChEQU1PTl9TVEFUKVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctMTE1LVxcbm1tL2RhbW9uL0tjb25maWc6MTE2OmNvbmZpZyBEQU1PTl9TVEFUX0VOQUJMRURfREVGQVVMVFxcbm1tL2RhbW9uL0tjb25maWctMTE3LVxcdGJvb2wgXFxcIkVuYWJsZSBEQU1PTl9TVEFUIGJ5IGRlZmF1bHRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDExOjUyOjE0LjI0NDU5MzA0N1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI2NTAzNjE4MjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgaW1tZWRpYXRlIHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBEQU1PTidzIE1ha2VmaWxlIGFuZCBLY29uZmlnKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGUgY29yZSBidWlsZCBpbmZyYXN0cnVjdHVyZSBmb3IgdGhlIERhdGEgQWNjZXNzIE1vbml0b3IgKERBTU9OKSBpbXBsZW1lbnRhdGlvbi4gTXkgZmlyc3Qgc3RlcCBpcyB0byBvcGVuIHVwIGBtbS9kYW1vbi9NYWtlZmlsZWAgYW5kIGBtbS9kYW1vbi9LY29uZmlnYC4gSSdtIGV4cGVjdGluZyB0byBmaW5kIHRoZSBzdGFuZGFyZCBidWlsZCBydWxlcyBhbmQgbGlrZWx5IHRoZSBtb2R1bGUgZGVmaW5pdGlvbnMgaW4gdGhlIE1ha2VmaWxlLiBGcm9tIGEgS2NvbmZpZyBwZXJzcGVjdGl2ZSwgSSdsbCBiZSBsb29raW5nIGZvciB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgZ292ZXJuIERBTU9OJ3MgZmVhdHVyZXMsIGRlcGVuZGVuY2llcywgYW5kIGFueSBydW50aW1lIGJlaGF2aW9ycyB0aGF0IGFyZSBjb250cm9sbGVkIHRocm91Z2gga2VybmVsIGNvbmZpZ3VyYXRpb25zLiBJJ20ga2VlbiB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYnVpbGQgc3lzdGVtIGludGVncmF0ZXMgREFNT04gYW5kIHRvIHNlZSB0aGUgbW9kdWxhcml0eSBvZiB0aGUgZGVzaWduLCB3aGljaCBtaWdodCByZXZlYWwgYXNwZWN0cyByZWxhdGVkIHRvIGl0cyBzY2FsYWJpbGl0eSBhbmQgY29uZmlndXJhYmlsaXR5LiBBbmFseXppbmcgdGhlIE1ha2VmaWxlIHdpbGwgcXVpY2tseSBnaXZlIG1lIGluc2lnaHQgaW50byB0aGUgYnVpbGQgcHJvY2Vzcywgd2hpbGUgS2NvbmZpZyB3aWxsIGlsbHVtaW5hdGUgdGhlIGF2YWlsYWJsZSBjb25maWd1cmF0aW9uIGNob2ljZXMuIFRoaXMgaXMgbXkgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IERBTU9OIGlzIGJha2VkIGludG8gdGhlIGtlcm5lbC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTM4MCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDExOjUyOjE2Ljg5NDk1Njg2N1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzNTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2RhbW9uL01ha2VmaWxlXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0XFxuICAgMzpcXHRvYmoteVxcdFxcdFxcdFxcdDo9IGNvcmUub1xcbiAgIDQ6XFx0b2JqLSQoQ09ORklHX0RBTU9OX1ZBRERSKVxcdCs9IG9wcy1jb21tb24ubyB2YWRkci5vXFxuICAgNTpcXHRvYmotJChDT05GSUdfREFNT05fUEFERFIpXFx0Kz0gb3BzLWNvbW1vbi5vIHBhZGRyLm9cXG4gICA2OlxcdG9iai0kKENPTkZJR19EQU1PTl9TWVNGUylcXHQrPSBzeXNmcy1jb21tb24ubyBzeXNmcy1zY2hlbWVzLm8gc3lzZnMub1xcbiAgIDc6XFx0b2JqLSQoQ09ORklHX0RBTU9OX1JFQ0xBSU0pXFx0Kz0gbW9kdWxlcy1jb21tb24ubyByZWNsYWltLm9cXG4gICA4OlxcdG9iai0kKENPTkZJR19EQU1PTl9MUlVfU09SVClcXHQrPSBtb2R1bGVzLWNvbW1vbi5vIGxydV9zb3J0Lm9cXG4gICA5OlxcdG9iai0kKENPTkZJR19EQU1PTl9TVEFUKVxcdCs9IG1vZHVsZXMtY29tbW9uLm8gc3RhdC5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDExOjUyOjE2Ljg5NTAxMjE3NloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIwMzcyMDkzMDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aGUgZXhwZXJ0OlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIERBTU9OIENvbXBpbGF0aW9uKipcblxuT2theSwgc28gYG9iai15IDo9IGNvcmUub2AgaW4gYG1tL2RhbW9uL2AgaXMgb25seSBidWlsdCBpZiBgQ09ORklHX0RBTU9OPXlgLiBUaGlzIG1lYW5zIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgYG1tL01ha2VmaWxlYCB0byBjb25maXJtIHRoZSBidWlsZCBkZXBlbmRlbmNpZXMgYW5kIGhvdyBgQ09ORklHX0RBTU9OYCBpcyBoYW5kbGVkIGluIHRoYXQgY29udGV4dC4gSSBuZWVkIHRvIHNlZSB3aGF0IGVsc2UgaW4gdGhhdCBNYWtlZmlsZSBwb3RlbnRpYWxseSBpbmZsdWVuY2VzIHdoZXRoZXIgb3Igbm90IGBjb3JlLm9gIGV2ZW4gZ2V0cyBjb25zaWRlcmVkIGZvciBjb21waWxhdGlvbiBhbmQgbGlua2luZy4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGhvbGlzdGljIHZpZXcgb2YgdGhlIGRlcGVuZGVuY3kgY2hhaW4uIEkgYW0gcHJldHR5IHN1cmUgdGhpcyBpcyBhIHdlbGwgdHJvZGRlbiBwYXJ0IG9mIHRoZSBjb2RlLCBidXQgYmVzdCB0byBkb3VibGUgY2hlY2sgYW5kIHJ1bGUgb3V0IGFueSB1bmV4cGVjdGVkIGludGVyYWN0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTg2NSwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTE6NTI6MTguOTMyMjI1MzM2WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzE1MTExOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9NYWtlZmlsZT0xMzY9b2JqLSQoQ09ORklHX0RFQlVHX1BBR0VfUkVGKSArPSBkZWJ1Z19wYWdlX3JlZi5vXFxubW0vTWFrZWZpbGU6MTM3Om9iai0kKENPTkZJR19EQU1PTikgKz0gZGFtb24vXFxubW0vTWFrZWZpbGUtMTM4LW9iai0kKENPTkZJR19IQVJERU5FRF9VU0VSQ09QWSkgKz0gdXNlcmNvcHkub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMTo1MjoxOC45NzkzODYwMTVaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NzA3MzQyOTM1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIERBTU9OIENvbmZpZ3VyYXRpb24gYW5kIFF1b3RhIEFkanVzdG1lbnQqKlxuXG5BbHJpZ2h0LCBzbyBgQ09ORklHX0RBTU9OYCBkaXJlY3RseSBsZWFkcyB0byB0aGUgYnVpbGQgb2YgdGhlIGBkYW1vbi9gIGRpcmVjdG9yeS4gVGhhdCBtdWNoIGlzIGNsZWFyLiBNeSBuZXh0IG1vdmUgaXMgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHF1b3RhIGZvciBEQU1PTiBpcyBhZGp1c3RlZC4gVG8gZG8gdGhpcywgSSBuZWVkIHRvIHBpbnBvaW50IGV2ZXJ5IGluc3RhbmNlIG9mIHRoZSBgZGFtb3NfYWRqdXN0X3F1b3RhYCBmdW5jdGlvbiBjYWxsIHdpdGhpbiB0aGUgYG1tL2RhbW9uL2NvcmUuY2AgZmlsZS4gVGhpcyBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMuIFRoZSBhZGp1c3RtZW50IG9mIHRoZSBxdW90YSBpcyB3aGVyZSBJJ2xsIGZpbmQgdGhlIGluZm9ybWF0aW9uIGZvciBvcHRpbWl6aW5nIGl0cyBvcGVyYXRpb25zLiBJJ2xsIG5lZWQgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBwYXRoIGZyb20gdGhvc2UgY2FsbHMgdG8gc2VlIHdoZXJlIHRoZXNlIHF1b3RhIGFkanVzdG1lbnRzIGhhcHBlbiBhbmQgdW5kZXIgd2hhdCBjb25kaXRpb25zLiBGcm9tIHRoZXJlLCBJIGNhbiBkZXRlcm1pbmUgaWYgYW55IGNoYW5nZXMgYXJlIG5lZWRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjE2OCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDExOjUyOjI2LjA1MjgxNzMxOVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY0MTMwNjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb3NfYWRqdXN0X3F1b3RhXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL2NvcmUuYz0zMjkwPXN0YXRpYyB2b2lkIGRhbW9zX3RyYWNlX2VzeihzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb3MgKnMsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzMwMy1cXG5tbS9kYW1vbi9jb3JlLmM6MzMwNDpzdGF0aWMgdm9pZCBkYW1vc19hZGp1c3RfcXVvdGEoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzKVxcbm1tL2RhbW9uL2NvcmUuYy0zMzA1LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0zMzg3PXN0YXRpYyB2b2lkIGtkYW1vbmRfYXBwbHlfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTM0MDItXFxubW0vZGFtb24vY29yZS5jOjM0MDM6XFx0XFx0ZGFtb3NfYWRqdXN0X3F1b3RhKGMsIHMpO1xcbm1tL2RhbW9uL2NvcmUuYy0zNDA0LVxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTE6NTI6MjYuMDk5MjQ3NDI4WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI5NDM5MTQwMzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gYGtkYW1vbmRfYXBwbHlfc2NoZW1lc2AqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCBga2RhbW9uZF9hcHBseV9zY2hlbWVzYC4gVGhhdCBmdW5jdGlvbiBpbiBgbW0vZGFtb24vY29yZS5jYCBpcyB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlciwgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMg4oCTIHdoZXJlIERBTU9OIGFjdHVhbGx5IGV4ZWN1dGVzIGl0cyBzY2hlbWVzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyBpdCdzIG9yY2hlc3RyYXRpbmcgdGhlIG1vbml0b3JpbmcgYW5kIGFkYXB0YXRpb24uIEkgc2hvdWxkIGNoZWNrIHRoZSBzdXJyb3VuZGluZyBjb2RlIGZvciBob3cgaXQncyBjYWxsZWQgYW5kIHdoZW4uIFRoZSBjb250ZXh0IGlzIGNydWNpYWwgaGVyZS4gV2hhdCB0cmlnZ2VycyBpdHMgZXhlY3V0aW9uPyBXaGF0IGRhdGEgaXMgaXQgd29ya2luZyB3aXRoPyBBcmUgdGhlcmUgYW55IG9idmlvdXMgYm90dGxlbmVja3Mgb3IgcG90ZW50aWFsIGFyZWFzIGZvciBpbXByb3ZlbWVudCBpbiB0aGUgY29yZSBhbGdvcml0aG0/IEknbGwgcHJvYmFibHkgc3RhcnQgYnkgdHJhY2luZyB0aGUgZXhlY3V0aW9uIHBhdGggYW5kIHRoZW4gZGl2ZSBpbnRvIHRoZSBkZXRhaWxzLiBJIHdpbGwgYWxzbyBtYWtlIG5vdGVzIG9mIGhvdyB0aGUgcHJvY2VzcyBpbnRlcmFjdHMgd2l0aCBhbGwgdGhlIHNjaGVtZXMuIExldCdzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NjIwLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTE6NTI6MjkuMDQzMTYzOTM0WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NTgwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi9jb3JlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzM4MCxcbiAgXCJMaW5lQ291bnRcIjogNzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzM4MDpcXHRcXHRcXHRpZiAoc2l0ZXIgPT0gcylcXG4zMzgxOlxcdFxcdFxcdFxcdGJyZWFrO1xcbjMzODI6XFx0XFx0XFx0c2lkeCsrO1xcbjMzODM6XFx0XFx0fVxcbjMzODQ6XFx0XFx0dHJhY2VfY2FsbF9fZGFtb3Nfc3RhdF9hZnRlcl9hcHBseV9pbnRlcnZhbChjaWR4LCBzaWR4LCBcXHUwMDI2cy1cXHUwMDNlc3RhdCk7XFxuMzM4NTpcXHR9XFxuMzM4NjpcXHRcXG4zMzg3OlxcdHN0YXRpYyB2b2lkIGtkYW1vbmRfYXBwbHlfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjKVxcbjMzODg6XFx0e1xcbjMzODk6XFx0XFx0c3RydWN0IGRhbW9uX3RhcmdldCAqdDtcXG4zMzkwOlxcdFxcdHN0cnVjdCBkYW1vcyAqcztcXG4zMzkxOlxcdFxcdGJvb2wgaGFzX3NjaGVtZXNfdG9fYXBwbHkgPSBmYWxzZTtcXG4zMzkyOlxcdFxcdHVuc2lnbmVkIGxvbmcgbWF4X3JlZ2lvbl9zejtcXG4zMzkzOlxcdFxcbjMzOTQ6XFx0XFx0ZGFtb25fZm9yX2VhY2hfc2NoZW1lKHMsIGMpIHtcXG4zMzk1OlxcdFxcdFxcdGlmICh0aW1lX2JlZm9yZShjLVxcdTAwM2VwYXNzZWRfc2FtcGxlX2ludGVydmFscywgcy1cXHUwMDNlbmV4dF9hcHBseV9zaXMpKVxcbjMzOTY6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMzM5NzpcXHRcXG4zMzk4OlxcdFxcdFxcdGlmICghcy1cXHUwMDNld21hcmtzLmFjdGl2YXRlZClcXG4zMzk5OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjM0MDA6XFx0XFxuMzQwMTpcXHRcXHRcXHRoYXNfc2NoZW1lc190b19hcHBseSA9IHRydWU7XFxuMzQwMjpcXHRcXG4zNDAzOlxcdFxcdFxcdGRhbW9zX2FkanVzdF9xdW90YShjLCBzKTtcXG4zNDA0OlxcdFxcdH1cXG4zNDA1OlxcdFxcbjM0MDY6XFx0XFx0aWYgKCFoYXNfc2NoZW1lc190b19hcHBseSlcXG4zNDA3OlxcdFxcdFxcdHJldHVybjtcXG4zNDA4OlxcdFxcbjM0MDk6XFx0XFx0bWF4X3JlZ2lvbl9zeiA9IGRhbW9uX3JlZ2lvbl9zel9saW1pdChjKTtcXG4zNDEwOlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNmMtXFx1MDAzZXdhbGtfY29udHJvbF9sb2NrKTtcXG4zNDExOlxcdFxcdGRhbW9uX2Zvcl9lYWNoX3RhcmdldCh0LCBjKSB7XFxuMzQxMjpcXHRcXHRcXHRpZiAoYy1cXHUwMDNlb3BzLnRhcmdldF92YWxpZCBcXHUwMDI2XFx1MDAyNiBjLVxcdTAwM2VvcHMudGFyZ2V0X3ZhbGlkKHQpID09IGZhbHNlKSB7XFxuMzQxMzpcXHRcXHRcXHRcXHRkYW1vbl9mb3JfZWFjaF9zY2hlbWUocywgYykge1xcbjM0MTQ6XFx0XFx0XFx0XFx0XFx0aWYgKHMtXFx1MDAzZXF1b3RhLmNoYXJnZV90YXJnZXRfZnJvbSAhPSB0KVxcbjM0MTU6XFx0XFx0XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMzQxNjpcXHRcXHRcXHRcXHRcXHRzLVxcdTAwM2VxdW90YS5jaGFyZ2VfdGFyZ2V0X2Zyb20gPSBOVUxMO1xcbjM0MTc6XFx0XFx0XFx0XFx0XFx0cy1cXHUwMDNlcXVvdGEuY2hhcmdlX2FkZHJfZnJvbSA9IDA7XFxuMzQxODpcXHRcXHRcXHRcXHR9XFxuMzQxOTpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4zNDIwOlxcdFxcdFxcdH1cXG4zNDIxOlxcdFxcdFxcdGRhbW9zX2FwcGx5X3RhcmdldChjLCB0LCBtYXhfcmVnaW9uX3N6KTtcXG4zNDIyOlxcdFxcdH1cXG4zNDIzOlxcdFxcbjM0MjQ6XFx0XFx0ZGFtb25fZm9yX2VhY2hfc2NoZW1lKHMsIGMpIHtcXG4zNDI1OlxcdFxcdFxcdGlmICh0aW1lX2JlZm9yZShjLVxcdTAwM2VwYXNzZWRfc2FtcGxlX2ludGVydmFscywgcy1cXHUwMDNlbmV4dF9hcHBseV9zaXMpKVxcbjM0MjY6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMzQyNzpcXHRcXHRcXHRkYW1vc193YWxrX2NvbXBsZXRlKGMsIHMpO1xcbjM0Mjg6XFx0XFx0XFx0ZGFtb3Nfc2V0X25leHRfYXBwbHlfc2lzKHMsIGMpO1xcbjM0Mjk6XFx0XFx0XFx0cy1cXHUwMDNlbGFzdF9hcHBsaWVkID0gTlVMTDtcXG4zNDMwOlxcdFxcdFxcdGRhbW9zX3RyYWNlX3N0YXQoYywgcyk7XFxuMzQzMTpcXHRcXHR9XFxuMzQzMjpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmMtXFx1MDAzZXdhbGtfY29udHJvbF9sb2NrKTtcXG4zNDMzOlxcdH1cXG4zNDM0OlxcdFxcbjM0MzU6XFx0I2lmZGVmIENPTkZJR19EQU1PTl9ERUJVR19TQU5JVFlcXG4zNDM2OlxcdHN0YXRpYyB2b2lkIGRhbW9uX3ZlcmlmeV9tZXJnZV90d29fcmVnaW9ucyhcXG4zNDM3OlxcdFxcdFxcdHN0cnVjdCBkYW1vbl9yZWdpb24gKmwsIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIpXFxuMzQzODpcXHR7XFxuMzQzOTpcXHRcXHQvKiBkYW1vbl9tZXJnZV90d29fcmVnaW9ucygpIG1heSBjcmVhdGVkIGluY29ycmVjdCBsZWZ0IHJlZ2lvbiAqL1xcbjM0NDA6XFx0XFx0V0FSTl9PTkNFKGwtXFx1MDAzZWFyLnN0YXJ0IFxcdTAwM2U9IGwtXFx1MDAzZWFyLmVuZCwgXFxcImw6ICVsdS0lbHUsIHI6ICVsdS0lbHVcXFxcblxcXCIsXFxuMzQ0MTpcXHRcXHRcXHRcXHRsLVxcdTAwM2Vhci5zdGFydCwgbC1cXHUwMDNlYXIuZW5kLCByLVxcdTAwM2Vhci5zdGFydCwgci1cXHUwMDNlYXIuZW5kKTtcXG4zNDQyOlxcdH1cXG4zNDQzOlxcdCNlbHNlXFxuMzQ0NDpcXHRzdGF0aWMgdm9pZCBkYW1vbl92ZXJpZnlfbWVyZ2VfdHdvX3JlZ2lvbnMoXFxuMzQ0NTpcXHRcXHRcXHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpsLCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyKVxcbjM0NDY6XFx0e1xcbjM0NDc6XFx0fVxcbjM0NDg6XFx0I2VuZGlmXFxuMzQ0OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTE6NTI6MjkuMDQzMzUxNjI0WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQ0MDcwMzQzODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgZGFtb3NfYWRqdXN0X3F1b3RhYCBGdW5jdGlvbjogQSBEZWVwIERpdmUqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayBkb3duIHdoYXQncyBoYXBwZW5pbmcgd2l0aGluIGBkYW1vc19hZGp1c3RfcXVvdGFgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIGl0cyBjb3JlIGZ1bmN0aW9uLCBhbmQgZnJvbSB0aGUgY29kZSwgaXQgc2VlbXMgdG8gYmUgbWFuYWdpbmcgYW5kIGFkanVzdGluZyBxdW90YXMgcmVsYXRlZCB0byBtZW1vcnkgcmVnaW9ucywgbGlrZWx5IHdpdGhpbiBhIERBTU9OIGNvbnRleHQuIEkgc2VlIHNldmVyYWwga2V5IGNvbXBvbmVudHM6IHF1b3RhcywgdGFyZ2V0cywgcmVnaW9ucywgYW5kIHRpbWVzdGFtcHMuIEl0IHNlZW1zIHRvIGhhdmUgYSBwZXJpb2RpYyBpbnRlcnZhbC5cblxuRmlyc3QsIEkgc2VlIHRoZSBjb2RlIGlzIGNoZWNraW5nIGlmIHRoZSBxdW90YSBpcyBhY3RpdmUsIGVhcmx5IGV4aXRpbmcgaWYgbm90LiBUaGVuIEknbSBmb2xsb3dpbmcgdGhpcyBwYXJ0IHRoYXQgZGVmaW5lcyB0aGUgc3RhcnQgb2YgYSBuZXcgd2luZG93IGZvciBhdXRvIHR1bmluZy4gSWYgYW4gYXV0by10dW5pbmcgaW50ZXJ2YWwgaXMgc2V0LCBpdCBjaGVja3MgaWYgdGhlIGN1cnJlbnQgdGltZSBpcyB3aXRoaW4gdGhlIHZhbGlkIHJhbmdlLiBJZiBub3QsIGl0IHVwZGF0ZXMgdGhlIFwidHVuZWQgZnJvbVwiIHRpbWVzdGFtcCBhbmQgY2FsbHMgYGRhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGFgLiBUcmFjaW5nIG9mIGBlc3pgIChlZmZlY3RpdmUgc2l6ZSkgY2hhbmdlcyBhcmUgaW5jbHVkZWQuIEEgdmVyeSBzaW1pbGFyIHRoaW5nIGlzIGhhcHBlbmluZyBmb3IgYSBcImNoYXJnZSB3aW5kb3dcIiwgYW5kIGBkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhYCBpcyBjYWxsZWQgYWdhaW4uXG5cblRoZSBpbnRlcmVzdGluZyBiaXQsIGhlcmUsIGlzIHRoZSBjb25kaXRpb25hbC4gUHJpb3IgdG8gYSBjZXJ0YWluIHBhdGNoLCB0aGUgY29kZSB3b3VsZCBjYWxjdWxhdGUgdGhlIGhpc3RvZ3JhbSBhbmQgdGhlIG1pbmltdW0gc2NvcmUuIFRoZSBjb2RlIGN1cnJlbnRseSBza2lwcyBhbGwgdGhpcyBpZiB0aGUgcXVvdGEgaXMgZnVsbCwgdGhlIHJlYXNvbiBiZWluZzpcblxuQmVmb3JlIHRoZSBwYXRjaDpcbkl0IGNoZWNrZWQgYGlmICghYy1cdTAwM2VvcHMuZ2V0X3NjaGVtZV9zY29yZSkgcmV0dXJuO2AgYW5kIHRoZW4gY2FsY3VsYXRlZCBoaXN0b2dyYW0gYW5kIGBxdW90YS1cdTAwM2VtaW5fc2NvcmVgLlxuV2l0aCB0aGUgcGF0Y2g6XG5gaWYgKGRhbW9zX3F1b3RhX2lzX2Z1bGwocXVvdGEsIGMtXHUwMDNlbWluX3JlZ2lvbl9zeikpIHJldHVybjtgXG5JZiB0aGUgcXVvdGEgaXMgZnVsbCwgc2tpcCBjYWxjdWxhdGluZyB0aGUgc2NvcmUgaGlzdG9ncmFtIGFuZCBtaW4gc2NvcmUgbGltaXQhXG5cblRoaXMgb3B0aW1pemF0aW9uIGxpa2VseSBhaW1zIHRvIGF2b2lkIHVubmVjZXNzYXJ5IGNvbXB1dGF0aW9uIHdoZW4gdGhlIHF1b3RhIGlzIGFscmVhZHkgZXhoYXVzdGVkLiBJdCdzIGEgcGVyZm9ybWFuY2UgdHdlYWsg4oCTIHdoeSBjYWxjdWxhdGUgc2NvcmVzIHdoZW4geW91IGNhbid0IGFsbG9jYXRlIG1vcmUgYW55d2F5PyBCdXQsIEknZCBsaWtlIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgYSBiaXQgbW9yZS4gSSB0aGluayBpdCB3b3VsZCBiZSB3aXNlIHRvIHJlYWQgdGhlIGNvbW1pdCBsb2cgdG8gZ2V0IHRoZSByYXRpb25hbGUgZm9yIHRoaXMgY2hhbmdlIGFuZCB0aGUgaXNzdWVzIGl0IGFkZHJlc3NlZCwgdG8gZ2V0IGEgZGVlcGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHRyYWRlLW9mZnMuIEl0J3MgbGlrZWx5IGFuIGltcG9ydGFudCBvcHRpbWl6YXRpb24gaW4gYSBjcml0aWNhbCBwYXRoLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3OTU4LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjUyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTE6NTI6MzMuNDUwMzg4NjE4WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjY5MzE2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vc19xdW90YV9pc19mdWxsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL2NvcmUuYz0yNjY4PXN0YXRpYyB2b2lkIGRhbW9zX2NoYXJnZV9xdW90YShzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhLFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTI2ODQtXFxubW0vZGFtb24vY29yZS5jOjI2ODU6c3RhdGljIGJvb2wgZGFtb3NfcXVvdGFfaXNfZnVsbChzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhLFxcbm1tL2RhbW9uL2NvcmUuYy0yNjg2LVxcdFxcdHVuc2lnbmVkIGxvbmcgbWluX3JlZ2lvbl9zeilcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0yNjk5PXN0YXRpYyB2b2lkIGRhbW9zX2FwcGx5X3NjaGVtZShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTI3NTctXFx0XFx0ZGFtb3NfY2hhcmdlX3F1b3RhKHF1b3RhLCBzeiwgc3pfYXBwbGllZCk7XFxubW0vZGFtb24vY29yZS5jOjI3NTg6XFx0XFx0aWYgKGRhbW9zX3F1b3RhX2lzX2Z1bGwocXVvdGEsIGMtXFx1MDAzZW1pbl9yZWdpb25fc3opKSB7XFxubW0vZGFtb24vY29yZS5jLTI3NTktXFx0XFx0XFx0cXVvdGEtXFx1MDAzZWNoYXJnZV90YXJnZXRfZnJvbSA9IHQ7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9Mjc3MD1zdGF0aWMgdm9pZCBkYW1vbl9kb19hcHBseV9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmMsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjc4NS1cXHRcXHQvKiBDaGVjayB0aGUgcXVvdGEgKi9cXG5tbS9kYW1vbi9jb3JlLmM6Mjc4NjpcXHRcXHRpZiAoZGFtb3NfcXVvdGFfaXNfZnVsbChxdW90YSwgYy1cXHUwMDNlbWluX3JlZ2lvbl9zeikpXFxubW0vZGFtb24vY29yZS5jLTI3ODctXFx0XFx0XFx0Y29udGludWU7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MzMwND1zdGF0aWMgdm9pZCBkYW1vc19hZGp1c3RfcXVvdGEoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTMzMjYtXFx0XFx0XFx0XFx0bXNlY3NfdG9famlmZmllcyhxdW90YS1cXHUwMDNlcmVzZXRfaW50ZXJ2YWwpKSkge1xcbm1tL2RhbW9uL2NvcmUuYzozMzI3OlxcdFxcdGlmIChkYW1vc19xdW90YV9pc19mdWxsKHF1b3RhLCBjLVxcdTAwM2VtaW5fcmVnaW9uX3N6KSlcXG5tbS9kYW1vbi9jb3JlLmMtMzMyOC1cXHRcXHRcXHRzLVxcdTAwM2VzdGF0LnF0X2V4Y2VlZHMrKztcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zMzM4LVxcbm1tL2RhbW9uL2NvcmUuYzozMzM5OlxcdGlmIChkYW1vc19xdW90YV9pc19mdWxsKHF1b3RhLCBjLVxcdTAwM2VtaW5fcmVnaW9uX3N6KSlcXG5tbS9kYW1vbi9jb3JlLmMtMzM0MC1cXHRcXHRyZXR1cm47XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDExOjUyOjMzLjQ5NzA4NjY1N1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMDE5Njg5NjA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlRyYWNpbmcgdGhlIGBkYW1vc19hZGp1c3RfcXVvdGFgIEZ1bmN0aW9uIENhbGwqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEkgc2VlIHRoYXQgYGRhbW9zX2FkanVzdF9xdW90YWAgaXMgZGVmaW5lZCBhcyBzdGF0aWMsIHdoaWNoIGlzIHRoZSBmaXJzdCBpbXBvcnRhbnQgcG9pbnQuIFRoaXMgbWVhbnMgaXRzIHNjb3BlIGlzIHJlc3RyaWN0ZWQgdG8gdGhlIGN1cnJlbnQgY29tcGlsYXRpb24gdW5pdCwgc28gSSBkb24ndCBuZWVkIHRvIHdvcnJ5IGFib3V0IGl0IGJlaW5nIGRpcmVjdGx5IGFjY2Vzc2libGUgZnJvbSBvdXRzaWRlIGl0cyBzb3VyY2UgZmlsZS4gTmV4dCwgSSdtIG5vdGluZyB0aGF0IGBkYW1vc19hZGp1c3RfcXVvdGFgIGlzIGNhbGxlZCBmcm9tIGBrZGFtb25kX2FwcGx5X3NjaGVtZXNgLiBBbmQsIGxvb2tpbmcgZnVydGhlciB1cCB0aGUgY2FsbCBzdGFjaywgYGtkYW1vbmRfYXBwbHlfc2NoZW1lc2AgaXMgY2FsbGVkIGZyb20gYGtkYW1vbmRfZm5gIOKAkyB0aGUga3RocmVhZCBkZWRpY2F0ZWQgdG8gREFNT04sIHdoaWNoIGNvbmZpcm1zIG15IHVuZGVyc3RhbmRpbmcuXG5cbkdpdmVuIHRoaXMgY29udGV4dCwgSSBub3cgd2FudCB0byBpbnZlc3RpZ2F0ZSBob3cgZnJlcXVlbnRseSBga2RhbW9uZF9hcHBseV9zY2hlbWVzYCBpcyBjYWxsZWQsIGFuZCBmcm9tIHdoZXJlLiBLbm93aW5nIHRoZSBjYWxsZXJzIG9mIHRoaXMgZnVuY3Rpb24gd2lsbCBwcm92aWRlIGEgZ29vZCBwaWN0dXJlIG9mIHRoZSBpbnRlcmFjdGlvbiBhbmQgaW50ZWdyYXRpb24gb2YgZGlmZmVyZW50IERBTU9OIHBhcnRzLiBTcGVjaWZpY2FsbHksIGl0IHdpbGwgZ2l2ZSBtZSBzb21lIGluc2lnaHQgb24gd2hhdCdzIHRyaWdnZXJpbmcgdGhlIGV4ZWN1dGlvbiBvZiBgZGFtb3NfYWRqdXN0X3F1b3RhYC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTY2MiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDExOjUyOjM1LjUxNjc3OTMzNloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUxNDIyMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia2RhbW9uZF9hcHBseV9zY2hlbWVzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL2NvcmUuYz0zMzcxPXN0YXRpYyB2b2lkIGRhbW9zX3RyYWNlX3N0YXQoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTMzODYtXFxubW0vZGFtb24vY29yZS5jOjMzODc6c3RhdGljIHZvaWQga2RhbW9uZF9hcHBseV9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmMpXFxubW0vZGFtb24vY29yZS5jLTMzODgte1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTM5MjA9c3RhdGljIGludCBrZGFtb25kX2ZuKHZvaWQgKmRhdGEpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzk5Ni1cXHRcXHQvKlxcbm1tL2RhbW9uL2NvcmUuYzozOTk3OlxcdFxcdCAqIGRvIGtkYW1vbmRfY2FsbCgpIGFuZCBrZGFtb25kX2FwcGx5X3NjaGVtZXMoKSBhZnRlclxcbm1tL2RhbW9uL2NvcmUuYy0zOTk4LVxcdFxcdCAqIGtkYW1vbmRfbWVyZ2VfcmVnaW9ucygpIGlmIHBvc3NpYmxlLCB0byByZWR1Y2Ugb3ZlcmhlYWRcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy00MDExLVxcdFxcdGlmICghbGlzdF9lbXB0eShcXHUwMDI2Y3R4LVxcdTAwM2VzY2hlbWVzKSlcXG5tbS9kYW1vbi9jb3JlLmM6NDAxMjpcXHRcXHRcXHRrZGFtb25kX2FwcGx5X3NjaGVtZXMoY3R4KTtcXG5tbS9kYW1vbi9jb3JlLmMtNDAxMy1cXHRcXHRlbHNlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDExOjUyOjM1LjU2MTkyNTYzNloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0MzQ3Mjk0Mjk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IERBTU9OIEludmVzdGlnYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaG93IHN5emthbGxlciBwbGF5cyB3aXRoIERBTU9OLiBGaXJzdCB0aG91Z2h0IGlzLCBkb2VzIHN5emthbGxlciBldmVuICprbm93KiBhYm91dCBEQU1PTj8gRG9lcyBpdCBoYXZlIHNwZWNpZmljIERBTU9OIGRlc2NyaXB0aW9ucz8gSG9sZCBvbiwgc3l6bGFuZydzIHRvb2xzIGNhbid0IGp1c3QgYmxpbmRseSBzZWFyY2ggdGhlIGtlcm5lbCBzb3VyY2VzLiBXZSBuZWVkIHRvIGNoZWNrIHN5emthbGxlcidzIHN1cHBvcnQgaW5kaXJlY3RseSwgbWF5YmUgdmlhIHN5c2ZzLiBBaCwgd2FpdCwgdGhlcmUncyBhIGNydWNpYWwgcG9pbnQgaGVyZSB0aGF0IEkgYWxtb3N0IG1pc3NlZCEgVGhpcyBgZ3JlcHBlcmAgdG9vbCAqZXhwbGljaXRseSogc2F5cyBpdCBjYW4ndCBoYW5kbGUgc3l6bGFuZyBkZXNjcmlwdGlvbnMgb3IgdGhvc2UgcHNldWRvLXN5c2NhbGxzIHN0YXJ0aW5nIHdpdGggXCJzeXpfXCIuIFRoYXQncyBiZWNhdXNlIHRob3NlIGFyZW4ndCBhY3R1YWxseSAqaW4qIHRoZSBrZXJuZWwgc291cmNlIGl0c2VsZi4gV2UncmUgc3VwcG9zZWQgdG8gYmUgdXNpbmcgYHJlYWQtc3l6LXNwZWNgIGFuZCBgc3l6LWdyZXBwZXJgIGluc3RlYWQsIGJ1dCBhcmUgdGhvc2UgZXZlbiBkZWZpbmVkP1xuXG5MZXQgbWUgcXVpY2tseSByZXZpZXcgdGhlIGRlY2xhcmVkIHRvb2xzLi4uIE5vcGUhIExvb2tzIGxpa2UgYHJlYWQtc3l6LXNwZWNgIGFuZCBgc3l6LWdyZXBwZXJgIGFyZSBub3QgYXZhaWxhYmxlLCBzbyB0aGF0J3MgdGhhdC4gTm8gbmVlZCB0byB3b3JyeSBhYm91dCB0aGVtIGZvciBub3cuXG5cbkFscmlnaHQsIGxldCdzIHJlZm9jdXMuIEZvcmdldCBzeXprYWxsZXIgZm9yIGEgbW9tZW50LCBhbmQgdGhpbmsgYWJvdXQgREFNT04gZGlyZWN0bHkuIENhbiBpdCBiZSByZWFjaGVkIGZyb20gdXNlcnNwYWNlPyBIb3cgaXMgREFNT04gY29udHJvbGxlZCBmcm9tIHVzZXJzcGFjZT8gVGltZSB0byBkZWx2ZSBpbnRvIHRoZSBgbW0vZGFtb24vc3lzZnMuY2AgZmlsZSBhbmQgc2VlIHdoYXQncyB3aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDI4NCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMTo1MjozOS45MDkyMjI2WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2ODIxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi9zeXNmcy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gICAyOlxcdC8qXFxuICAgMzpcXHQgKiBEQU1PTiBzeXNmcyBJbnRlcmZhY2VcXG4gICA0OlxcdCAqL1xcbiAgIDU6XFx0XFxuICAgNjpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvc2NoZWQuaFxcdTAwM2VcXG4gICA3OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9zbGFiLmhcXHUwMDNlXFxuICAgODpcXHRcXG4gICA5OlxcdCNpbmNsdWRlIFxcXCJzeXNmcy1jb21tb24uaFxcXCJcXG4gIDEwOlxcdFxcbiAgMTE6XFx0LypcXG4gIDEyOlxcdCAqIGluaXQgcmVnaW9uIGRpcmVjdG9yeVxcbiAgMTM6XFx0ICovXFxuICAxNDpcXHRcXG4gIDE1OlxcdHN0cnVjdCBkYW1vbl9zeXNmc19yZWdpb24ge1xcbiAgMTY6XFx0XFx0c3RydWN0IGtvYmplY3Qga29iajtcXG4gIDE3OlxcdFxcdHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlIGFyO1xcbiAgMTg6XFx0fTtcXG4gIDE5OlxcdFxcbiAgMjA6XFx0c3RhdGljIHN0cnVjdCBkYW1vbl9zeXNmc19yZWdpb24gKmRhbW9uX3N5c2ZzX3JlZ2lvbl9hbGxvYyh2b2lkKVxcbiAgMjE6XFx0e1xcbiAgMjI6XFx0XFx0cmV0dXJuIGt6YWxsb2Nfb2JqKHN0cnVjdCBkYW1vbl9zeXNmc19yZWdpb24pO1xcbiAgMjM6XFx0fVxcbiAgMjQ6XFx0XFxuICAyNTpcXHRzdGF0aWMgc3NpemVfdCBzdGFydF9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXFxuICAyNjpcXHRcXHRcXHRjaGFyICpidWYpXFxuICAyNzpcXHR7XFxuICAyODpcXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfcmVnaW9uICpyZWdpb24gPSBjb250YWluZXJfb2Yoa29iaixcXG4gIDI5OlxcdFxcdFxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19yZWdpb24sIGtvYmopO1xcbiAgMzA6XFx0XFxuICAzMTpcXHRcXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFxcXCIlbHVcXFxcblxcXCIsIHJlZ2lvbi1cXHUwMDNlYXIuc3RhcnQpO1xcbiAgMzI6XFx0fVxcbiAgMzM6XFx0XFxuICAzNDpcXHRzdGF0aWMgc3NpemVfdCBzdGFydF9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxcbiAgMzU6XFx0XFx0XFx0Y29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXFxuICAzNjpcXHR7XFxuICAzNzpcXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfcmVnaW9uICpyZWdpb24gPSBjb250YWluZXJfb2Yoa29iaixcXG4gIDM4OlxcdFxcdFxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19yZWdpb24sIGtvYmopO1xcbiAgMzk6XFx0XFx0aW50IGVyciA9IGtzdHJ0b3VsKGJ1ZiwgMCwgXFx1MDAyNnJlZ2lvbi1cXHUwMDNlYXIuc3RhcnQpO1xcbiAgNDA6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDExOjUyOjM5LjkwOTM5MjY4WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjU5NjY5NTg1NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIHRoZSBEQU1PTiBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIERBTU9OIHNpdHVhdGlvbi4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIERBTU9OLiBGaXJzdCwgSSdtIG5vdGluZyBgQ09ORklHX0RBTU9OYCBhbmQgYENPTkZJR19EQU1PTl9TWVNGU2AuIEJ1dCBpcyB0aGF0ICphbGwqPyBJIGhhdmUgYSBmZWVsaW5nIHRoZXJlIG1pZ2h0IGJlIG1vcmUgdG8gaXQuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBpbnZlc3RpZ2F0ZSB3aGV0aGVyIHRoZSBEQU1PTiByZWNsYWltIG9yIERBTU9OIGxydV9zb3J0IGNvbXBvbmVudHMgYXJlIGFsc28gbGV2ZXJhZ2luZyBEQU1PTi4gSXQncyBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIGFuZCBpbnRlcmNvbm5lY3Rpb25zIG9mIHRoZXNlIGZlYXR1cmVzLlxuXG5UaGUgcXVpY2tlc3Qgd2F5IHRvIGdldCBhIGRlZmluaXRpdmUgYW5zd2VyLCBhbmQgcmVhbGx5IHVuZGVyc3RhbmQgdGhlIGJyb2FkZXIgY29udGV4dCwgaXMgdG8gY2hlY2sgYG1tL2RhbW9uL0tjb25maWdgLiBUaGF0IEtjb25maWcgZmlsZSBzaG91bGQgbGF5IG91dCAqYWxsKiB0aGUgZGVwZW5kZW5jaWVzLCB0aGUgYXNzb2NpYXRlZCBvcHRpb25zLCBhbmQgZ2l2ZSBtZSBhIGNvbXBsZXRlLCB0b3AtZG93biB2aWV3IG9mIGhvdyBldmVyeXRoaW5nIGZpdHMgdG9nZXRoZXIgd2l0aGluIHRoZSBEQU1PTiBlY29zeXN0ZW0uIEl04oCZcyB0aGUgc291cmNlIG9mIHRydXRoIGZvciB0aGUgY29uZmlndXJhdGlvbiBsb2dpYyBhbmQgd2lsbCBnaXZlIG1lIHdoYXQgSSBuZWVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTM5OSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTE6NTI6NDUuODc2MzU0MDNaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODQyOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0XFxuICAgMzpcXHRtZW51IFxcXCJEYXRhIEFjY2VzcyBNb25pdG9yaW5nXFxcIlxcbiAgIDQ6XFx0XFxuICAgNTpcXHRjb25maWcgREFNT05cXG4gICA2OlxcdFxcdGJvb2wgXFxcIkRBTU9OOiBEYXRhIEFjY2VzcyBNb25pdG9yaW5nIEZyYW1ld29ya1xcXCJcXG4gICA3OlxcdFxcdGhlbHBcXG4gICA4OlxcdFxcdCAgVGhpcyBidWlsZHMgYSBmcmFtZXdvcmsgdGhhdCBhbGxvd3Mga2VybmVsIHN1YnN5c3RlbXMgdG8gbW9uaXRvclxcbiAgIDk6XFx0XFx0ICBhY2Nlc3MgZnJlcXVlbmN5IG9mIGVhY2ggbWVtb3J5IHJlZ2lvbi4gVGhlIGluZm9ybWF0aW9uIGNhbiBiZSB1c2VmdWxcXG4gIDEwOlxcdFxcdCAgZm9yIHBlcmZvcm1hbmNlLWNlbnRyaWMgRFJBTSBsZXZlbCBtZW1vcnkgbWFuYWdlbWVudC5cXG4gIDExOlxcdFxcbiAgMTI6XFx0XFx0ICBTZWUgaHR0cHM6Ly93d3cua2VybmVsLm9yZy9kb2MvaHRtbC9sYXRlc3QvbW0vZGFtb24vaW5kZXguaHRtbCBmb3JcXG4gIDEzOlxcdFxcdCAgbW9yZSBpbmZvcm1hdGlvbi5cXG4gIDE0OlxcdFxcbiAgMTU6XFx0Y29uZmlnIERBTU9OX0RFQlVHX1NBTklUWVxcbiAgMTY6XFx0XFx0Ym9vbCBcXFwiQ2hlY2sgc2FuaXR5IG9mIERBTU9OIGNvZGVcXFwiXFxuICAxNzpcXHRcXHRkZXBlbmRzIG9uIERBTU9OXFxuICAxODpcXHRcXHRoZWxwXFxuICAxOTpcXHRcXHQgIFRoaXMgZW5hYmxlcyBhZGRpdGlvbmFsIERBTU9OIGRlYnVnZ2luZy1wdXJwb3NlIHNhbml0eSBjaGVja3MgaW5cXG4gIDIwOlxcdFxcdCAgREFNT04gY29kZS4gIFRoaXMgY2FuIGJlIHVzZWZ1bCBmb3IgZmluZGluZyBidWdzLCBidXQgaW1wb3NlXFxuICAyMTpcXHRcXHQgIGFkZGl0aW9uYWwgb3ZlcmhlYWQuICBUaGlzIGlzIHRoZXJlZm9yZSByZWNvbW1lbmRlZCB0byBiZSBlbmFibGVkIG9uXFxuICAyMjpcXHRcXHQgIG9ubHkgZGV2ZWxvcG1lbnQgYW5kIHRlc3Qgc2V0dXBzLlxcbiAgMjM6XFx0XFxuICAyNDpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICAyNTpcXHRcXG4gIDI2OlxcdGNvbmZpZyBEQU1PTl9LVU5JVF9URVNUXFxuICAyNzpcXHRcXHRib29sIFxcXCJUZXN0IGZvciBkYW1vblxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbiAgMjg6XFx0XFx0ZGVwZW5kcyBvbiBEQU1PTiBcXHUwMDI2XFx1MDAyNiBLVU5JVD15XFxuICAyOTpcXHRcXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xcbiAgMzA6XFx0XFx0aGVscFxcbiAgMzE6XFx0XFx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04gS3VuaXQgdGVzdCBzdWl0ZS5cXG4gIDMyOlxcdFxcbiAgMzM6XFx0XFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBLVW5pdCBhbmQgdW5pdCB0ZXN0cyBpbiBnZW5lcmFsLCBwbGVhc2UgcmVmZXJcXG4gIDM0OlxcdFxcdCAgdG8gdGhlIEtVbml0IGRvY3VtZW50YXRpb24uXFxuICAzNTpcXHRcXG4gIDM2OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDM3OlxcdFxcbiAgMzg6XFx0Y29uZmlnIERBTU9OX1ZBRERSXFxuICAzOTpcXHRcXHRib29sIFxcXCJEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXNcXFwiXFxuICA0MDpcXHRcXHRkZXBlbmRzIG9uIERBTU9OIFxcdTAwMjZcXHUwMDI2IE1NVVxcbiAgNDE6XFx0XFx0c2VsZWN0IFBBR0VfSURMRV9GTEFHXFxuICA0MjpcXHRcXHRkZWZhdWx0IERBTU9OXFxuICA0MzpcXHRcXHRoZWxwXFxuICA0NDpcXHRcXHQgIFRoaXMgYnVpbGRzIHRoZSBkZWZhdWx0IGRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgREFNT05cXG4gIDQ1OlxcdFxcdCAgdGhhdCB3b3JrIGZvciB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2VzLlxcbiAgNDY6XFx0XFxuICA0NzpcXHRjb25maWcgREFNT05fUEFERFJcXG4gIDQ4OlxcdFxcdGJvb2wgXFxcIkRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2VcXFwiXFxuICA0OTpcXHRcXHRkZXBlbmRzIG9uIERBTU9OIFxcdTAwMjZcXHUwMDI2IE1NVVxcbiAgNTA6XFx0XFx0c2VsZWN0IFBBR0VfSURMRV9GTEFHXFxuICA1MTpcXHRcXHRkZWZhdWx0IERBTU9OXFxuICA1MjpcXHRcXHRoZWxwXFxuICA1MzpcXHRcXHQgIFRoaXMgYnVpbGRzIHRoZSBkZWZhdWx0IGRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgREFNT05cXG4gIDU0OlxcdFxcdCAgdGhhdCB3b3JrcyBmb3IgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2UuXFxuICA1NTpcXHRcXG4gIDU2OlxcdGNvbmZpZyBEQU1PTl9WQUREUl9LVU5JVF9URVNUXFxuICA1NzpcXHRcXHRib29sIFxcXCJUZXN0IGZvciBEQU1PTiBvcGVyYXRpb25zXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuICA1ODpcXHRcXHRkZXBlbmRzIG9uIERBTU9OX1ZBRERSIFxcdTAwMjZcXHUwMDI2IEtVTklUPXlcXG4gIDU5OlxcdFxcdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXFxuICA2MDpcXHRcXHRoZWxwXFxuICA2MTpcXHRcXHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTiB2aXJ0dWFsIGFkZHJlc3NlcyBvcGVyYXRpb25zIEt1bml0IHRlc3Qgc3VpdGUuXFxuICA2MjpcXHRcXG4gIDYzOlxcdFxcdCAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gS1VuaXQgYW5kIHVuaXQgdGVzdHMgaW4gZ2VuZXJhbCwgcGxlYXNlIHJlZmVyXFxuICA2NDpcXHRcXHQgIHRvIHRoZSBLVW5pdCBkb2N1bWVudGF0aW9uLlxcbiAgNjU6XFx0XFxuICA2NjpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICA2NzpcXHRcXG4gIDY4OlxcdGNvbmZpZyBEQU1PTl9TWVNGU1xcbiAgNjk6XFx0XFx0Ym9vbCBcXFwiREFNT04gc3lzZnMgaW50ZXJmYWNlXFxcIlxcbiAgNzA6XFx0XFx0ZGVwZW5kcyBvbiBEQU1PTiBcXHUwMDI2XFx1MDAyNiBTWVNGU1xcbiAgNzE6XFx0XFx0ZGVmYXVsdCBEQU1PTlxcbiAgNzI6XFx0XFx0aGVscFxcbiAgNzM6XFx0XFx0ICBUaGlzIGJ1aWxkcyB0aGUgc3lzZnMgaW50ZXJmYWNlIGZvciBEQU1PTi4gIFRoZSB1c2VyIHNwYWNlIGNhbiB1c2VcXG4gIDc0OlxcdFxcdCAgdGhlIGludGVyZmFjZSBmb3IgYXJiaXRyYXJ5IGRhdGEgYWNjZXNzIG1vbml0b3JpbmcuXFxuICA3NTpcXHRcXG4gIDc2OlxcdGNvbmZpZyBEQU1PTl9TWVNGU19LVU5JVF9URVNUXFxuICA3NzpcXHRcXHRib29sIFxcXCJUZXN0IGZvciBkYW1vbiBzeXNmcyBpbnRlcmZhY2VcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG4gIDc4OlxcdFxcdGRlcGVuZHMgb24gREFNT05fU1lTRlMgXFx1MDAyNlxcdTAwMjYgS1VOSVQ9eVxcbiAgNzk6XFx0XFx0ZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcXG4gIDgwOlxcdFxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTE6NTI6NDUuODc2NDQwMTJaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTg2NjA4MTU1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKk5hdmlnYXRpbmcgdGhlIEtjb25maWcgTGFuZHNjYXBlOiBBIFF1aWNrIEF1ZGl0KipcblxuUmlnaHQsIGxldCdzIHNlZS4uLiB0aGUgY29kZSByZXZpZXcgaGFzIGZsYWdnZWQgc29tZXRoaW5nIGluIHRoZSBgbW0vZGFtb24vS2NvbmZpZ2AgZmlsZS4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgSSdtIGFscmVhZHkgYW50aWNpcGF0aW5nIHdoYXQgbWlnaHQgYmUgaGFwcGVuaW5nIGhlcmUuIEdpdmVuIHRoZSBzY29wZSBvZiB0aGUgcG90ZW50aWFsIGltcGFjdCwgaXQncyBlc3NlbnRpYWwgdG8gcXVpY2tseSBhbmQgY2FyZWZ1bGx5IHJldmlldyB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCBkZXBlbmRlbmNpZXMgd2l0aGluIHRoaXMgc3BlY2lmaWMgS2NvbmZpZyBmaWxlLiBUaGlzIGxpa2VseSByZWxhdGVzIHRvIHRoZSBEeW5hbWljIEFkYXB0aXZlIE1lbW9yeSBPcHRpbWl6ZXIgKERBTU9OKSBmcmFtZXdvcmssIHNvIEkgd2FudCB0byBtYWtlIHN1cmUgSSBncmFzcCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBwb3RlbnRpYWwgaW1wYWN0cyBvZiBhbnkgY2hhbmdlcyBiZWluZyBwcm9wb3NlZC4gVGhpcyBxdWljayBjaGVjayB3aWxsIGdpdmUgbWUgYSBiYXNlbGluZSB0byBkZWNpZGUgdGhlIG5leHQgYWN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjc0NCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTE6NTI6NDcuNzQyNTI1MTMyWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcwMDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2RhbW9uL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogODEsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgODE6XFx0XFx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04gc3lzZnMgaW50ZXJmYWNlIEt1bml0IHRlc3Qgc3VpdGUuXFxuICA4MjpcXHRcXG4gIDgzOlxcdFxcdCAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gS1VuaXQgYW5kIHVuaXQgdGVzdHMgaW4gZ2VuZXJhbCwgcGxlYXNlIHJlZmVyXFxuICA4NDpcXHRcXHQgIHRvIHRoZSBLVW5pdCBkb2N1bWVudGF0aW9uLlxcbiAgODU6XFx0XFxuICA4NjpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICA4NzpcXHRcXG4gIDg4OlxcdGNvbmZpZyBEQU1PTl9SRUNMQUlNXFxuICA4OTpcXHRcXHRib29sIFxcXCJCdWlsZCBEQU1PTi1iYXNlZCByZWNsYWltIChEQU1PTl9SRUNMQUlNKVxcXCJcXG4gIDkwOlxcdFxcdGRlcGVuZHMgb24gREFNT05fUEFERFJcXG4gIDkxOlxcdFxcdGhlbHBcXG4gIDkyOlxcdFxcdCAgVGhpcyBidWlsZHMgdGhlIERBTU9OLWJhc2VkIHJlY2xhbWF0aW9uIHN1YnN5c3RlbS4gIEl0IGZpbmRzIHBhZ2VzXFxuICA5MzpcXHRcXHQgIHRoYXQgbm90IGFjY2Vzc2VkIGZvciBhIGxvbmcgdGltZSAoY29sZCkgdXNpbmcgREFNT04gYW5kIHJlY2xhaW1cXG4gIDk0OlxcdFxcdCAgdGhvc2UuXFxuICA5NTpcXHRcXG4gIDk2OlxcdFxcdCAgVGhpcyBpcyBzdWdnZXN0ZWQgdG8gYmUgdXNlZCBhcyBhIHByb2FjdGl2ZSBhbmQgbGlnaHR3ZWlnaHRcXG4gIDk3OlxcdFxcdCAgcmVjbGFtYXRpb24gdW5kZXIgbGlnaHQgbWVtb3J5IHByZXNzdXJlLCB3aGlsZSB0aGUgdHJhZGl0aW9uYWwgcGFnZVxcbiAgOTg6XFx0XFx0ICBzY2FubmluZy1iYXNlZCByZWNsYW1hdGlvbiBpcyB1c2VkIGZvciBoZWF2eSBwcmVzc3VyZS5cXG4gIDk5OlxcdFxcbiAxMDA6XFx0Y29uZmlnIERBTU9OX0xSVV9TT1JUXFxuIDEwMTpcXHRcXHRib29sIFxcXCJCdWlsZCBEQU1PTi1iYXNlZCBMUlUtbGlzdHMgc29ydGluZyAoREFNT05fTFJVX1NPUlQpXFxcIlxcbiAxMDI6XFx0XFx0ZGVwZW5kcyBvbiBEQU1PTl9QQUREUlxcbiAxMDM6XFx0XFx0aGVscFxcbiAxMDQ6XFx0XFx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04tYmFzZWQgTFJVLWxpc3RzIHNvcnRpbmcgc3Vic3lzdGVtLiAgSXQgdHJpZXMgdG9cXG4gMTA1OlxcdFxcdCAgcHJvdGVjdCBmcmVxdWVudGx5IGFjY2Vzc2VkIChob3QpIHBhZ2VzIHdoaWxlIHJhcmVseSBhY2Nlc3NlZCAoY29sZClcXG4gMTA2OlxcdFxcdCAgcGFnZXMgcmVjbGFpbWVkIGZpcnN0IHVuZGVyIG1lbW9yeSBwcmVzc3VyZS5cXG4gMTA3OlxcdFxcbiAxMDg6XFx0Y29uZmlnIERBTU9OX1NUQVRcXG4gMTA5OlxcdFxcdGJvb2wgXFxcIkJ1aWxkIGRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgc3RhdCAoREFNT05fU1RBVClcXFwiXFxuIDExMDpcXHRcXHRkZXBlbmRzIG9uIERBTU9OX1BBRERSXFxuIDExMTpcXHRcXHRoZWxwXFxuIDExMjpcXHRcXHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTi1iYXNlZCBhY2Nlc3MgbW9uaXRvcmluZyBzdGF0aXN0aWNzIHN1YnN5c3RlbS5cXG4gMTEzOlxcdFxcdCAgSXQgcnVucyBEQU1PTiBhbmQgZXhwb3NlIGFjY2VzcyBtb25pdG9yaW5nIHJlc3VsdHMgaW4gc2ltcGxlIHN0YXRcXG4gMTE0OlxcdFxcdCAgbWV0cmljcy5cXG4gMTE1OlxcdFxcbiAxMTY6XFx0Y29uZmlnIERBTU9OX1NUQVRfRU5BQkxFRF9ERUZBVUxUXFxuIDExNzpcXHRcXHRib29sIFxcXCJFbmFibGUgREFNT05fU1RBVCBieSBkZWZhdWx0XFxcIlxcbiAxMTg6XFx0XFx0ZGVwZW5kcyBvbiBEQU1PTl9TVEFUXFxuIDExOTpcXHRcXHRkZWZhdWx0IERBTU9OX1NUQVRcXG4gMTIwOlxcdFxcdGhlbHBcXG4gMTIxOlxcdFxcdCAgV2hldGhlciB0byBlbmFibGUgREFNT05fU1RBVCBieSBkZWZhdWx0LiAgVXNlcnMgY2FuIGRpc2FibGUgaXQgaW5cXG4gMTIyOlxcdFxcdCAgYm9vdCBvciBydW50aW1lIHVzaW5nIGl0cyAnZW5hYmxlZCcgcGFyYW1ldGVyLlxcbiAxMjM6XFx0XFxuIDEyNDpcXHRlbmRtZW51XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDExOjUyOjQ3Ljc0MjU5NzE2MloiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxNTA1NjMwODM0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipXb3J0aEZ1enppbmcgRGVjaXNpb24gZm9yIG1tL2RhbW9uL2NvcmUuYyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgYG1tL2RhbW9uL2NvcmUuY2AgaXMgcGFydCBvZiBtZW1vcnkgbWFuYWdlbWVudCwgc28gaXQgZmFsbHMgc3F1YXJlbHkgd2l0aGluIHRoZSBcImNvcmUgc3Vic3lzdGVtc1wiIGNhdGVnb3J5LiBUaGVyZWZvcmUsIGJhc2VkIG9uIHRoZSBjcml0ZXJpYSwgbW9kaWZ5aW5nIGNvZGUgaGVyZSBzdHJvbmdseSBzdWdnZXN0cyBpdCdzICpXb3J0aEZ1enppbmc9dHJ1ZSouXG5cbkZpcnN0LCBsZXQncyBlbGltaW5hdGUgdGhlIG5lZ2F0aXZlcy4gSXMgdGhpcyBhIGRvY3VtZW50YXRpb24gY2hhbmdlPyBOby4gSXMgaXQgaGFyZHdhcmUtc3BlY2lmaWMgYW5kIHVucmVhY2hhYmxlPyBOb3BlLCB3ZSdyZSBkZWFsaW5nIHdpdGggcHVyZSBNTSwgYW5kIGFtZDY0IGlzIHN1cHBvcnRlZC4gQW5kIGl0J3MgZGVmaW5pdGVseSBub3Qgc29tZSB1bnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aC4gU28sIHdlJ3JlIGNsZWFyIG9uIHRoZSAqZmFsc2UqIGNvbmRpdGlvbnMuXG5cbk5vdyBmb3IgdGhlICp0cnVlKiBhc3Nlc3NtZW50LiBTaW5jZSB3ZSBhcmUgbW9kaWZ5aW5nIGNvZGUgaW5zaWRlIGEgY29yZSBzdWJzeXN0ZW0sIGBXb3J0aEZ1enppbmc9dHJ1ZWAhXG5cbk5vdywgdGhlIGltcG9ydGFudCBwYXJ0OiBlbmFibGluZyBhbmQgcmVhY2hpbmcgYGRhbW9zX2FkanVzdF9xdW90YWAuIFRvIGZpZ3VyZSBvdXQgdGhlIGNvbmZpZ3MsIGBtbS9kYW1vbi9jb3JlLmNgIGlzIHRoZSB0YXJnZXQsIHNwZWNpZmljYWxseSwgYGRhbW9zX2FkanVzdF9xdW90YWAuIFdlIHNlZSBpdCdzIGxpbmtlZCB0byBgQ09ORklHX0RBTU9OYCwgY29uZmlybWVkIGJ5IHRoZSBgTWFrZWZpbGVgLiBPa2F5LCBidXQgaG93IGlzIHRoaXMgYWN0dWFsbHkgdHJpZ2dlcmVkPyBJdCdzIGNhbGxlZCBmcm9tIGBrZGFtb25kX2FwcGx5X3NjaGVtZXNgLCBhbmQgdGhhdCByZXF1aXJlcyBEQU1PTiB0byBiZSBjb25maWd1cmVkIHdpdGggc2NoZW1lcyBhbmQgcnVubmluZy4gU28sIHRoZSBxdWVzdGlvbiBpcywgaG93IGRvIHlvdSBzZXQgdXAgREFNT04gd2l0aCBzY2hlbWVzPyBFaXRoZXIgdXNpbmcgYERBTU9OX1NZU0ZTYCwgb3Igd2l0aCB0aGUgREFNT04gbW9kdWxlcyBsaWtlIGBEQU1PTl9SRUNMQUlNYCBvciBgREFNT05fTFJVX1NPUlRgIG9yIGBEQU1PTl9TVEFUYCBvciBjdXN0b20gb3BlcmF0aW9ucyAoYERBTU9OX1ZBRERSYCwgYERBTU9OX1BBRERSYCkuXG5cbkhvbGQgb24uIExvb2tpbmcgYXQgYGRhbW9zX2FkanVzdF9xdW90YWAsIHRoZXJlJ3MgYSBrZXkgY2hlY2sgaGVyZTogYGMtXHUwMDNlb3BzLmdldF9zY2hlbWVfc2NvcmVgLiBUaGF0IGZ1bmN0aW9uIHBvaW50ZXIgaGFzIHRvIGJlIHNldCB1cC4gV2hlcmUgaXMgKnRoYXQqIGFzc2lnbmVkPyBOb3cgSSBuZWVkIHRvIGRvIHNvbWUgbW9yZSBkaWdnaW5nIGFuZCBncmVwIGZvciBgZ2V0X3NjaGVtZV9zY29yZWAuIFRoaXMgcG9pbnRlciB0byBhIGZ1bmN0aW9uIHdpbGwgbGVhZCBtZSB0byBmaWd1cmUgb3V0IGhvdyB0byBiZXN0IGZ1enogdGhpcyBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzU4NywiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU4NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDExOjUzOjAyLjc5ODkwNzU4NFoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzc5MjEyOTI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImdldF9zY2hlbWVfc2NvcmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb25cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vY29yZS5jPTI0MjI9c3RhdGljIGJvb2wgZGFtb3NfdmFsaWRfdGFyZ2V0KHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjQyNi1cXG5tbS9kYW1vbi9jb3JlLmM6MjQyNzpcXHRpZiAoIXJldCB8fCAhZGFtb3NfcXVvdGFfaXNfc2V0KFxcdTAwMjZzLVxcdTAwM2VxdW90YSkgfHwgIWMtXFx1MDAzZW9wcy5nZXRfc2NoZW1lX3Njb3JlKVxcbm1tL2RhbW9uL2NvcmUuYy0yNDI4LVxcdFxcdHJldHVybiByZXQ7XFxubW0vZGFtb24vY29yZS5jLTI0MjktXFxubW0vZGFtb24vY29yZS5jOjI0MzA6XFx0cmV0dXJuIGMtXFx1MDAzZW9wcy5nZXRfc2NoZW1lX3Njb3JlKGMsIHIsIHMpIFxcdTAwM2U9IHMtXFx1MDAzZXF1b3RhLm1pbl9zY29yZTtcXG5tbS9kYW1vbi9jb3JlLmMtMjQzMS19XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MzMwND1zdGF0aWMgdm9pZCBkYW1vc19hZGp1c3RfcXVvdGEoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTMzNDAtXFx0XFx0cmV0dXJuO1xcbm1tL2RhbW9uL2NvcmUuYzozMzQxOlxcdGlmICghYy1cXHUwMDNlb3BzLmdldF9zY2hlbWVfc2NvcmUpXFxubW0vZGFtb24vY29yZS5jLTMzNDItXFx0XFx0cmV0dXJuO1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTMzNTMtXFx0XFx0XFx0XFx0Y29udGludWU7XFxubW0vZGFtb24vY29yZS5jOjMzNTQ6XFx0XFx0XFx0c2NvcmUgPSBjLVxcdTAwM2VvcHMuZ2V0X3NjaGVtZV9zY29yZShjLCByLCBzKTtcXG5tbS9kYW1vbi9jb3JlLmMtMzM1NS1cXHRcXHRcXHRjLVxcdTAwM2VyZWdpb25zX3Njb3JlX2hpc3RvZ3JhbVtzY29yZV0gKz1cXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmM9NDYyPXN0YXRpYyBpbnQgX19pbml0IGRhbW9uX3BhX2luaXRjYWxsKHZvaWQpXFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jLTQ3My1cXHRcXHQuYXBwbHlfc2NoZW1lID0gZGFtb25fcGFfYXBwbHlfc2NoZW1lLFxcbm1tL2RhbW9uL3BhZGRyLmM6NDc0OlxcdFxcdC5nZXRfc2NoZW1lX3Njb3JlID0gZGFtb25fcGFfc2NoZW1lX3Njb3JlLFxcbm1tL2RhbW9uL3BhZGRyLmMtNDc1LVxcdH07XFxuLS1cXG5tbS9kYW1vbi92YWRkci5jPTExNDM9c3RhdGljIGludCBfX2luaXQgZGFtb25fdmFfaW5pdGNhbGwodm9pZClcXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmMtMTE1NS1cXHRcXHQuYXBwbHlfc2NoZW1lID0gZGFtb25fdmFfYXBwbHlfc2NoZW1lLFxcbm1tL2RhbW9uL3ZhZGRyLmM6MTE1NjpcXHRcXHQuZ2V0X3NjaGVtZV9zY29yZSA9IGRhbW9uX3ZhX3NjaGVtZV9zY29yZSxcXG5tbS9kYW1vbi92YWRkci5jLTExNTctXFx0fTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTE6NTM6MDMuMTc4MTI3NjM5WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjEzNDA4MDIxMDQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRBTU9OIFNjaGVtZSBTY29yZSBhbmQgQ29udHJvbCoqXG5cbk9rYXksIHNvIHRoZSBgZ2V0X3NjaGVtZV9zY29yZWAgZnVuY3Rpb24sIHRoYXQncyBkZWZpbmVkIGluIHR3byBwbGFjZXMgZGVwZW5kaW5nIG9uIHdoZXRoZXIgd2UncmUgZGVhbGluZyB3aXRoIHBoeXNpY2FsIG9yIHZpcnR1YWwgYWRkcmVzc2VzLCByaWdodD8gU3BlY2lmaWNhbGx5LCBJJ20gbG9va2luZyBhdCBgbW0vZGFtb24vcGFkZHIuY2AgZm9yIHBoeXNpY2FsIGFkZHJlc3NlcywgdW5kZXIgYENPTkZJR19EQU1PTl9QQUREUmAsIGFuZCBgbW0vZGFtb24vdmFkZHIuY2AgZm9yIHZpcnR1YWwsIHVuZGVyIGBDT05GSUdfREFNT05fVkFERFJgLiBUaGF0J3Mgc3RyYWlnaHRmb3J3YXJkIGVub3VnaC5cblxuTm93LCBob3cgZG9lcyB1c2Vyc3BhY2UgYWN0dWFsbHkgKnRhbGsqIHRvIERBTU9OPyBBaCwgeWVzLCBpdCdzIHRoZSBgQ09ORklHX0RBTU9OX1NZU0ZTYCBvcHRpb24sIG9yIGRlYnVnZnMgaWYgd2UncmUgZmVlbGluZyBvbGQgc2Nob29sLCBidXQgc3lzZnMgaXMgdGhlIHN0YW5kYXJkIHRoZXNlIGRheXMuIEdvb2QsIGdvb2QuXG5cbkhtbSwgd2FpdCBhIHNlY29uZC4gSSBuZWVkIHRvIGJlIHN1cmUuIERvZXMgYERBTU9OX1JFQ0xBSU1gIG9yIGBEQU1PTl9MUlVfU09SVGAgYWxzbyBsZXZlcmFnZSB0aGVzZSBEQU1PTiBzY2hlbWVzIHdpdGggYSBxdW90YT8gVGltZSB0byBkaWcgaW50byBgbW0vZGFtb24vcmVjbGFpbS5jYCBhbmQgYG1tL2RhbW9uL2xydV9zb3J0LmNgIGFuZCBmaW5kIG91dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUyNTksIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTE6NTM6MTYuNTg2MTUwOTk2WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDA0OTg0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJxdW90YVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9yZWNsYWltLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vcmVjbGFpbS5jPTQ4PW1vZHVsZV9wYXJhbShtaW5fYWdlLCB1bG9uZywgMDYwMCk7XFxubW0vZGFtb24vcmVjbGFpbS5jLTQ5LVxcbm1tL2RhbW9uL3JlY2xhaW0uYzo1MDpzdGF0aWMgc3RydWN0IGRhbW9zX3F1b3RhIGRhbW9uX3JlY2xhaW1fcXVvdGEgPSB7XFxubW0vZGFtb24vcmVjbGFpbS5jLTUxLVxcdC8qIHVzZSB1cCB0byAxMCBtcyB0aW1lLCByZWNsYWltIHVwIHRvIDEyOCBNaUIgcGVyIDEgc2VjIGJ5IGRlZmF1bHQgKi9cXG4tLVxcbm1tL2RhbW9uL3JlY2xhaW0uYy01NC1cXHQucmVzZXRfaW50ZXJ2YWwgPSAxMDAwLFxcbm1tL2RhbW9uL3JlY2xhaW0uYzo1NTpcXHQvKiBXaXRoaW4gdGhlIHF1b3RhLCBwYWdlIG91dCBvbGRlciByZWdpb25zIGZpcnN0LiAqL1xcbm1tL2RhbW9uL3JlY2xhaW0uYy01Ni1cXHQud2VpZ2h0X3N6ID0gMCxcXG4tLVxcbm1tL2RhbW9uL3JlY2xhaW0uYy01OS19O1xcbm1tL2RhbW9uL3JlY2xhaW0uYzo2MDpERUZJTkVfREFNT05fTU9EVUxFU19EQU1PU19RVU9UQVMoZGFtb25fcmVjbGFpbV9xdW90YSk7XFxubW0vZGFtb24vcmVjbGFpbS5jLTYxLVxcbi0tXFxubW0vZGFtb24vcmVjbGFpbS5jLTY0LSAqXFxubW0vZGFtb24vcmVjbGFpbS5jOjY1OiAqIFdoaWxlIGtlZXBpbmcgdGhlIGNhcHMgdGhhdCBzZXQgYnkgb3RoZXIgcXVvdGFzLCBEQU1PTl9SRUNMQUlNIGF1dG9tYXRpY2FsbHlcXG5tbS9kYW1vbi9yZWNsYWltLmM6NjY6ICogaW5jcmVhc2VzIGFuZCBkZWNyZWFzZXMgdGhlIGVmZmVjdGl2ZSBsZXZlbCBvZiB0aGUgcXVvdGEgYWltaW5nIHRoaXMgbGV2ZWwgb2ZcXG5tbS9kYW1vbi9yZWNsYWltLmMtNjctICogbWVtb3J5IHByZXNzdXJlIGlzIGluY3VycmVkLiAgU3lzdGVtLXdpZGUgYGBzb21lYGAgbWVtb3J5IFBTSSBpbiBtaWNyb3NlY29uZHNcXG5tbS9kYW1vbi9yZWNsYWltLmM6Njg6ICogcGVyIHF1b3RhIHJlc2V0IGludGVydmFsIChgYHF1b3RhX3Jlc2V0X2ludGVydmFsX21zYGApIGlzIGNvbGxlY3RlZCBhbmRcXG5tbS9kYW1vbi9yZWNsYWltLmMtNjktICogY29tcGFyZWQgdG8gdGhpcyB2YWx1ZSB0byBzZWUgaWYgdGhlIGFpbSBpcyBzYXRpc2ZpZWQuICBWYWx1ZSB6ZXJvIG1lYW5zXFxuLS1cXG5tbS9kYW1vbi9yZWNsYWltLmMtNzMtICovXFxubW0vZGFtb24vcmVjbGFpbS5jOjc0OnN0YXRpYyB1bnNpZ25lZCBsb25nIHF1b3RhX21lbV9wcmVzc3VyZV91cyBfX3JlYWRfbW9zdGx5O1xcbm1tL2RhbW9uL3JlY2xhaW0uYzo3NTptb2R1bGVfcGFyYW0ocXVvdGFfbWVtX3ByZXNzdXJlX3VzLCB1bG9uZywgMDYwMCk7XFxubW0vZGFtb24vcmVjbGFpbS5jLTc2LVxcbm1tL2RhbW9uL3JlY2xhaW0uYy03Ny0vKlxcbm1tL2RhbW9uL3JlY2xhaW0uYzo3ODogKiBVc2VyLXNwZWNpZmlhYmxlIGZlZWRiYWNrIGZvciBhdXRvLXR1bmluZyBvZiB0aGUgZWZmZWN0aXZlIHF1b3RhLlxcbm1tL2RhbW9uL3JlY2xhaW0uYy03OS0gKlxcbm1tL2RhbW9uL3JlY2xhaW0uYzo4MDogKiBXaGlsZSBrZWVwaW5nIHRoZSBjYXBzIHRoYXQgc2V0IGJ5IG90aGVyIHF1b3RhcywgREFNT05fUkVDTEFJTSBhdXRvbWF0aWNhbGx5XFxubW0vZGFtb24vcmVjbGFpbS5jOjgxOiAqIGluY3JlYXNlcyBhbmQgZGVjcmVhc2VzIHRoZSBlZmZlY3RpdmUgbGV2ZWwgb2YgdGhlIHF1b3RhIGFpbWluZyByZWNlaXZpbmcgdGhpc1xcbm1tL2RhbW9uL3JlY2xhaW0uYy04Mi0gKiBmZWVkYmFjayBvZiB2YWx1ZSBgYDEwLDAwMGBgIGZyb20gdGhlIHVzZXIuICBEQU1PTl9SRUNMQUlNIGFzc3VtZXMgdGhlIGZlZWRiYWNrXFxubW0vZGFtb24vcmVjbGFpbS5jOjgzOiAqIHZhbHVlIGFuZCB0aGUgcXVvdGEgYXJlIHBvc2l0aXZlbHkgcHJvcG9ydGlvbmFsLiAgVmFsdWUgemVybyBtZWFucyBkaXNhYmxpbmdcXG5tbS9kYW1vbi9yZWNsYWltLmMtODQtICogdGhpcyBhdXRvLXR1bmluZyBmZWF0dXJlLlxcbi0tXFxubW0vZGFtb24vcmVjbGFpbS5jLTg4LSAqL1xcbm1tL2RhbW9uL3JlY2xhaW0uYzo4OTpzdGF0aWMgdW5zaWduZWQgbG9uZyBxdW90YV9hdXRvdHVuZV9mZWVkYmFjayBfX3JlYWRfbW9zdGx5O1xcbm1tL2RhbW9uL3JlY2xhaW0uYzo5MDptb2R1bGVfcGFyYW0ocXVvdGFfYXV0b3R1bmVfZmVlZGJhY2ssIHVsb25nLCAwNjAwKTtcXG5tbS9kYW1vbi9yZWNsYWltLmMtOTEtXFxuLS1cXG5tbS9kYW1vbi9yZWNsYWltLmM9MTYxPURFRklORV9EQU1PTl9NT0RVTEVTX0RBTU9TX1NUQVRTX1BBUkFNUyhkYW1vbl9yZWNsYWltX3N0YXQsXFxubW0vZGFtb24vcmVjbGFpbS5jOjE2MjpcXHRcXHRyZWNsYWltX3RyaWVkX3JlZ2lvbnMsIHJlY2xhaW1lZF9yZWdpb25zLCBxdW90YV9leGNlZWRzKTtcXG5tbS9kYW1vbi9yZWNsYWltLmMtMTYzLVxcbi0tXFxubW0vZGFtb24vcmVjbGFpbS5jPTE2Nz1zdGF0aWMgc3RydWN0IGRhbW9zICpkYW1vbl9yZWNsYWltX25ld19zY2hlbWUodW5zaWduZWQgbG9uZyBhZ2dyX2ludGVydmFsKVxcbi0tXFxubW0vZGFtb24vcmVjbGFpbS5jLTE4Ni1cXHRcXHRcXHQwLFxcbm1tL2RhbW9uL3JlY2xhaW0uYzoxODc6XFx0XFx0XFx0LyogdW5kZXIgdGhlIHF1b3RhLiAqL1xcbm1tL2RhbW9uL3JlY2xhaW0uYzoxODg6XFx0XFx0XFx0XFx1MDAyNmRhbW9uX3JlY2xhaW1fcXVvdGEsXFxubW0vZGFtb24vcmVjbGFpbS5jLTE4OS1cXHRcXHRcXHQvKiAoRGUpYWN0aXZhdGUgdGhpcyBhY2NvcmRpbmcgdG8gdGhlIHdhdGVybWFya3MuICovXFxuLS1cXG5tbS9kYW1vbi9yZWNsYWltLmM9MTk0PXN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzKHZvaWQpXFxuLS1cXG5tbS9kYW1vbi9yZWNsYWltLmMtMTk5LVxcdHN0cnVjdCBkYW1vcyAqc2NoZW1lO1xcbm1tL2RhbW9uL3JlY2xhaW0uYzoyMDA6XFx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmdvYWw7XFxubW0vZGFtb24vcmVjbGFpbS5jLTIwMS1cXHRzdHJ1Y3QgZGFtb3NfZmlsdGVyICpmaWx0ZXI7XFxuLS1cXG5tbS9kYW1vbi9yZWNsYWltLmMtMjM0LVxcbm1tL2RhbW9uL3JlY2xhaW0uYzoyMzU6XFx0aWYgKHF1b3RhX21lbV9wcmVzc3VyZV91cykge1xcbm1tL2RhbW9uL3JlY2xhaW0uYzoyMzY6XFx0XFx0Z29hbCA9IGRhbW9zX25ld19xdW90YV9nb2FsKERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VUyxcXG5tbS9kYW1vbi9yZWNsYWltLmM6MjM3OlxcdFxcdFxcdFxcdHF1b3RhX21lbV9wcmVzc3VyZV91cyk7XFxubW0vZGFtb24vcmVjbGFpbS5jLTIzOC1cXHRcXHRpZiAoIWdvYWwpXFxubW0vZGFtb24vcmVjbGFpbS5jLTIzOS1cXHRcXHRcXHRnb3RvIG91dDtcXG5tbS9kYW1vbi9yZWNsYWltLmM6MjQwOlxcdFxcdGRhbW9zX2FkZF9xdW90YV9nb2FsKFxcdTAwMjZzY2hlbWUtXFx1MDAzZXF1b3RhLCBnb2FsKTtcXG5tbS9kYW1vbi9yZWNsYWltLmMtMjQxLVxcdH1cXG5tbS9kYW1vbi9yZWNsYWltLmMtMjQyLVxcbm1tL2RhbW9uL3JlY2xhaW0uYzoyNDM6XFx0aWYgKHF1b3RhX2F1dG90dW5lX2ZlZWRiYWNrKSB7XFxubW0vZGFtb24vcmVjbGFpbS5jOjI0NDpcXHRcXHRnb2FsID0gZGFtb3NfbmV3X3F1b3RhX2dvYWwoREFNT1NfUVVPVEFfVVNFUl9JTlBVVCwgMTAwMDApO1xcbm1tL2RhbW9uL3JlY2xhaW0uYy0yNDUtXFx0XFx0aWYgKCFnb2FsKVxcbm1tL2RhbW9uL3JlY2xhaW0uYy0yNDYtXFx0XFx0XFx0Z290byBvdXQ7XFxubW0vZGFtb24vcmVjbGFpbS5jOjI0NzpcXHRcXHRnb2FsLVxcdTAwM2VjdXJyZW50X3ZhbHVlID0gcXVvdGFfYXV0b3R1bmVfZmVlZGJhY2s7XFxubW0vZGFtb24vcmVjbGFpbS5jOjI0ODpcXHRcXHRkYW1vc19hZGRfcXVvdGFfZ29hbChcXHUwMDI2c2NoZW1lLVxcdTAwM2VxdW90YSwgZ29hbCk7XFxubW0vZGFtb24vcmVjbGFpbS5jLTI0OS1cXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDExOjUzOjE2LjYzNjIwNDc1NVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo2ODU4MTM4ODQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZvY3VzIFN5bWJvbCBJZGVudGlmaWNhdGlvbiBmb3IgREFNT04gUXVvdGEgQWRqdXN0bWVudCoqXG5cbk9rYXksIHNvIEknbSB0cnlpbmcgdG8gZmlndXJlIG91dCB0aGUgbW9zdCByZWxldmFudCBmb2N1cyBzeW1ib2xzIGZvciB0aGlzIERBTU9OIHF1b3RhIGFkanVzdG1lbnQgZmVhdHVyZS4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgdG8gbG9vayBhdCB0aGUga2V5IGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgd2hpY2ggSSBrbm93IGFyZSBgQ09ORklHX0RBTU9OYCwgYENPTkZJR19EQU1PTl9TWVNGU2AsIGBDT05GSUdfREFNT05fUEFERFJgLCBgQ09ORklHX0RBTU9OX1ZBRERSYCwgYW5kIGBDT05GSUdfREFNT05fUkVDTEFJTWAuIEkgbmVlZCB0byBlbnN1cmUgdGhlIG5lY2Vzc2FyeSBkZXBlbmRlbmNpZXMgYXJlIG1ldC4gRnJvbSB0aGUgS2NvbmZpZyBmaWxlcywgSSBzZWUgdGhhdCBlbmFibGluZyBgREFNT05gIGF1dG9tYXRpY2FsbHkgZW5hYmxlcyB0aGUgb3RoZXJzLCBhc3N1bWluZyB0aGUgc3lzdGVtIGhhcyBhbiBNTVUuXG5cbk5vdywgZm9jdXNpbmcgb24gdGhlIGNvZGUsIGBEQU1PTl9SRUNMQUlNYCBhcHBlYXJzIHRvIGJlIHRoZSBwbGFjZSB3aGVyZSBgZGFtb25fcmVjbGFpbV9xdW90YWAgaXMgc2V0LCBhbmQgaXQgYWRkcyBxdW90YSBnb2Fscywgd2l0aCBgREFNT05fUEFERFJgIGRlcGVuZGluZyBvbiBpdC4gYERBTU9OX1NZU0ZTYCBpcyBpbXBvcnRhbnQgZm9yIHVzZXItc3BhY2UgY29udHJvbC4gTXkgZ29hbCBpcyB0byBkZXRlcm1pbmUgdGhlIGJlc3Qgc3ltYm9sKHMpIHRvIHJlcHJlc2VudCB0aGUgY2hhbmdlcy5cblxuSSd2ZSBob21lZCBpbiBvbiBgZGFtb3NfYWRqdXN0X3F1b3RhYCwgYSBzdGF0aWMgZnVuY3Rpb24gd2l0aGluIGBtbS9kYW1vbi9jb3JlLmNgLiBNeSBmaXJzdCBpbnN0aW5jdCB3YXMgdG8gY2hlY2sgaWYgaXQncyBpbmxpbmVkLCBidXQgaXQncyBub3QuIEl0IGlzIGBzdGF0aWMgdm9pZGAuIEkgdGhlbiBuZWVkZWQgdG8gY29uZmlybSB3aGV0aGVyIGl0IGlzIGFjdHVhbGx5IGlubGluZWQgYnkgdGhlIGNvbXBpbGVyLiBJIGZvdW5kIGl0J3Mgb25seSBjYWxsZWQgZnJvbSBga2RhbW9uZF9hcHBseV9zY2hlbWVzYCwgd2hpY2ggaW4gdHVybiBpcyBvbmx5IGNhbGxlZCBieSBga2RhbW9uZF9mbmAuIE5vdywgdGhlIGtleSBpcyB3aGV0aGVyIHRvIGxpc3QgYGRhbW9zX2FkanVzdF9xdW90YWAgaXRzZWxmLCBvciBvbmUgb2YgaXRzIGNhbGxlcnMuXG5cbkJhc2VkIG9uIHRoZSBpbnN0cnVjdGlvbnMsIHNpbmNlIGBkYW1vc19hZGp1c3RfcXVvdGFgIGlzbid0IGluIGEgaGVhZGVyIGFuZCBpcyBmZWF0dXJlLXNwZWNpZmljLCBpdCAqY291bGQqIGJlIGEgZm9jdXMgc3ltYm9sLCBvciBvbmUgb2YgaXRzIGNhbGxlcnMuIFNvLCBJIG5lZWQgdG8gY2hlY2sgdGhlIHN1cnJvdW5kaW5nIGZ1bmN0aW9ucy4gVGhlIGtleSBmdW5jdGlvbnMgYXJlIGBkYW1vc19hZGp1c3RfcXVvdGFgLCBgZGFtb3NfcXVvdGFfaXNfZnVsbGAsIGFuZCBga2RhbW9uZF9hcHBseV9zY2hlbWVzYC5cblxuSSBuZWVkIHRvIGFsc28gZXhhbWluZSBhbnkgc3lzZnMgZW50cnkgcG9pbnRzIG9yIGNvcmUgREFNT04gZW50cnlwb2ludHMuIFRoZSBxdWVzdGlvbnMgSSdtIGFza2luZyBteXNlbGYgYXJlOiBIb3cgYXJlIHRoZSBzY2hlbWVzIGFkZGVkPyBBcmUgdGhlcmUgZnVuY3Rpb25zIGxpa2UgYGRhbW9zX25ld19zY2hlbWVgIG9yIHN5c2ZzIHNjaGVtZSBjb21taXQgdGhhdCBtaWdodCBiZSBtb3JlIHJlbGV2YW50PyBJIG5lZWQgdG8gbGlzdCBmdW5jdGlvbnMgdGhhdCBpbXBsZW1lbnQgdGhlIHNwZWNpZmljIGxvZ2ljLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzI1NywiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk3MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMTo1MzoyMy40OTQzNDU5NjJaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MzE4OTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRhbW9uX3NldF9zY2hlbWVzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL2NvcmUuYz0xMTIzPWludCBkYW1vbl9zZXRfYXR0cnMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb25fYXR0cnMgKmF0dHJzKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTExNjItLyoqXFxubW0vZGFtb24vY29yZS5jOjExNjM6ICogZGFtb25fc2V0X3NjaGVtZXMoKSAtIFNldCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIGJhc2VkIG9wZXJhdGlvbiBzY2hlbWVzLlxcbm1tL2RhbW9uL2NvcmUuYy0xMTY0LSAqIEBjdHg6XFx0bW9uaXRvcmluZyBjb250ZXh0XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTE3MC0gKi9cXG5tbS9kYW1vbi9jb3JlLmM6MTE3MTp2b2lkIGRhbW9uX3NldF9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9zICoqc2NoZW1lcyxcXG5tbS9kYW1vbi9jb3JlLmMtMTE3Mi1cXHRcXHRcXHRzc2l6ZV90IG5yX3NjaGVtZXMpXFxuLS1cXG5tbS9kYW1vbi9scnVfc29ydC5jPTI3MT1zdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X2FwcGx5X3BhcmFtZXRlcnModm9pZClcXG4tLVxcbm1tL2RhbW9uL2xydV9zb3J0LmMtMzE4LVxcbm1tL2RhbW9uL2xydV9zb3J0LmM6MzE5OlxcdGRhbW9uX3NldF9zY2hlbWVzKHBhcmFtX2N0eCwgXFx1MDAyNmhvdF9zY2hlbWUsIDEpO1xcbm1tL2RhbW9uL2xydV9zb3J0LmMtMzIwLVxcdGRhbW9uX2FkZF9zY2hlbWUocGFyYW1fY3R4LCBjb2xkX3NjaGVtZSk7XFxuLS1cXG5tbS9kYW1vbi9yZWNsYWltLmM9MTk0PXN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzKHZvaWQpXFxuLS1cXG5tbS9kYW1vbi9yZWNsYWltLmMtMjMyLVxcdFxcdGdvdG8gb3V0O1xcbm1tL2RhbW9uL3JlY2xhaW0uYzoyMzM6XFx0ZGFtb25fc2V0X3NjaGVtZXMocGFyYW1fY3R4LCBcXHUwMDI2c2NoZW1lLCAxKTtcXG5tbS9kYW1vbi9yZWNsYWltLmMtMjM0LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMTo1MzoyMy41Mzk2NzA1MDFaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzIxMjY0NzQ5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqRGl2aW5nIGludG8gREFNT04gQ29yZTogQ2hlY2tpbmcgdGhlIEVudHJ5IFBvaW50cyoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhlIGhlYXJ0IG9mIHRoZSBEeW5hbWljIEFkYXB0aXZlIE1lbW9yeSBPcHRpbWl6ZXIgKERBTU9OKSBjb3JlLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGluaXRpYXRpb24gYW5kIG1haW4gZnVuY3Rpb24uIExldCdzIHNlZS4uLiBJJ20gdGhpbmtpbmcgSSdsbCBuZWVkIHRvIHJldmlzaXQgYGtkYW1vbmRfZm5gIGFuZCBgZGFtb25fc3RhcnRgIOKAkyB0aG9zZSBhcmUgdGhlIGtleSBlbnRyeSBwb2ludHMgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBtb25pdG9yaW5nIGFuZCBhZGFwdGF0aW9uIGFyZSBraWNrZWQgb2ZmIHdpdGhpbiBgbW0vZGFtb24vY29yZS5jYC4gSSdsbCBoYXZlIGEgbG9vayBhdCBob3cgdGhvc2UgZnVuY3Rpb25zIGFyZSBjYWxsZWQgYW5kIGhvdyB0aGV5IGludGVyYWN0LiBQcm9iYWJseSBuZWVkIHRvIHF1aWNrbHkgbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBnZXQgdGhlIGNvbnRleHQuIFRoYXQncyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQuIExldCdzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTE4MywiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDExOjUzOjI2Ljc1MjMyMDM5M1oiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUwNjk0MTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb25fc3RhcnRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb25cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vY29yZS5jPTEwODg9c3RhdGljIGJvb2wgZGFtb25fdmFsaWRfaW50ZXJ2YWxzX2dvYWwoc3RydWN0IGRhbW9uX2F0dHJzICphdHRycylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMTEzLSAqIEluIGRldGFpbCwgYWxsIERBTU9OIEFQSSBjYWxsZXJzIGRpcmVjdGx5IGNhbGwgdGhpcyBmdW5jdGlvbiBmb3IgaW5pdGlhbFxcbm1tL2RhbW9uL2NvcmUuYzoxMTE0OiAqIHNldHVwIG9mIGRhbW9uX2N0eCBiZWZvcmUgY2FsbGluZyBkYW1vbl9zdGFydCgpLiAgU29tZSBvZiB0aGUgQVBJIGNhbGxlcnNcXG5tbS9kYW1vbi9jb3JlLmMtMTExNS0gKiBhbHNvIGluZGlyZWN0bHkgY2FsbCB0aGlzIGZ1bmN0aW9uIHZpYSBkYW1vbl9jYWxsKCkgLVxcdTAwM2UgZGFtb25fY29tbWl0KCkgZm9yXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MjA0OD1zdGF0aWMgaW50IGtkYW1vbmRfZm4odm9pZCAqZGF0YSk7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjA1MC0vKlxcbm1tL2RhbW9uL2NvcmUuYzoyMDUxOiAqIF9fZGFtb25fc3RhcnQoKSAtIFN0YXJ0cyBtb25pdG9yaW5nIHdpdGggZ2l2ZW4gY29udGV4dC5cXG5tbS9kYW1vbi9jb3JlLmMtMjA1Mi0gKiBAY3R4OlxcdG1vbml0b3JpbmcgY29udGV4dFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTIwNTctICovXFxubW0vZGFtb24vY29yZS5jOjIwNTg6c3RhdGljIGludCBfX2RhbW9uX3N0YXJ0KHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG5tbS9kYW1vbi9jb3JlLmMtMjA1OS17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjA4MC0vKipcXG5tbS9kYW1vbi9jb3JlLmM6MjA4MTogKiBkYW1vbl9zdGFydCgpIC0gU3RhcnRzIHRoZSBtb25pdG9yaW5ncyBmb3IgYSBnaXZlbiBncm91cCBvZiBjb250ZXh0cy5cXG5tbS9kYW1vbi9jb3JlLmMtMjA4Mi0gKiBAY3R4czpcXHRhbiBhcnJheSBvZiB0aGUgcG9pbnRlcnMgZm9yIGNvbnRleHRzIHRvIHN0YXJ0IG1vbml0b3JpbmdcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yMDg5LSAqIEBleGNsdXNpdmUgaXMgdHJ1ZSBhbmQgYSBncm91cCBvZiB0aHJlYWRzIHRoYXQgY3JlYXRlZCBieSBvdGhlclxcbm1tL2RhbW9uL2NvcmUuYzoyMDkwOiAqICdkYW1vbl9zdGFydCgpJyBjYWxsIGlzIGN1cnJlbnRseSBydW5uaW5nLCB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90aGluZyBidXRcXG5tbS9kYW1vbi9jb3JlLmMtMjA5MS0gKiByZXR1cm5zIC1FQlVTWS5cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yMDk0LSAqL1xcbm1tL2RhbW9uL2NvcmUuYzoyMDk1OmludCBkYW1vbl9zdGFydChzdHJ1Y3QgZGFtb25fY3R4ICoqY3R4cywgaW50IG5yX2N0eHMsIGJvb2wgZXhjbHVzaXZlKVxcbm1tL2RhbW9uL2NvcmUuYy0yMDk2LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yMTIwLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucl9jdHhzOyBpKyspIHtcXG5tbS9kYW1vbi9jb3JlLmM6MjEyMTpcXHRcXHRlcnIgPSBfX2RhbW9uX3N0YXJ0KGN0eHNbaV0pO1xcbm1tL2RhbW9uL2NvcmUuYy0yMTIyLVxcdFxcdGlmIChlcnIpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MjIyMz1pbnQgZGFtb25fY2FsbChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl9jYWxsX2NvbnRyb2wgKmNvbnRyb2wpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjI3MS0gKlxcbm1tL2RhbW9uL2NvcmUuYzoyMjcyOiAqIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgb25seSBhZnRlciBkYW1vbl9zdGFydCgpIHdpdGggdGhlXFxubW0vZGFtb24vY29yZS5jLTIyNzMtICogQGN0eCBoYXMgc3VjY2VlZGVkLiAgT3RoZXJ3aXNlLCB0aGlzIGZ1bmN0aW9uIGNvdWxkIGZhbGwgaW50byBhbiBpbmRlZmluaXRlXFxuLS1cXG5tbS9kYW1vbi9scnVfc29ydC5jPTQwMT1zdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X3R1cm4oYm9vbCBvbilcXG4tLVxcbm1tL2RhbW9uL2xydV9zb3J0LmMtNDEzLVxcbm1tL2RhbW9uL2xydV9zb3J0LmM6NDE0OlxcdGVyciA9IGRhbW9uX3N0YXJ0KFxcdTAwMjZjdHgsIDEsIHRydWUpO1xcbm1tL2RhbW9uL2xydV9zb3J0LmMtNDE1LVxcdGlmIChlcnIpXFxuLS1cXG5tbS9kYW1vbi9yZWNsYWltLmM9MzI0PXN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV90dXJuKGJvb2wgb24pXFxuLS1cXG5tbS9kYW1vbi9yZWNsYWltLmMtMzM2LVxcbm1tL2RhbW9uL3JlY2xhaW0uYzozMzc6XFx0ZXJyID0gZGFtb25fc3RhcnQoXFx1MDAyNmN0eCwgMSwgdHJ1ZSk7XFxubW0vZGFtb24vcmVjbGFpbS5jLTMzOC1cXHRpZiAoZXJyKVxcbi0tXFxubW0vZGFtb24vc3RhdC5jPTIwMD1zdGF0aWMgaW50IGRhbW9uX3N0YXRfc3RhcnQodm9pZClcXG4tLVxcbm1tL2RhbW9uL3N0YXQuYy0yMTItXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxubW0vZGFtb24vc3RhdC5jOjIxMzpcXHRlcnIgPSBkYW1vbl9zdGFydChcXHUwMDI2ZGFtb25fc3RhdF9jb250ZXh0LCAxLCB0cnVlKTtcXG5tbS9kYW1vbi9zdGF0LmMtMjE0LVxcdGlmIChlcnIpIHtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9MjUxNT1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3R1cm5fZGFtb25fb24oc3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmQgKmtkYW1vbmQpXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTI1MzktXFx0fVxcbm1tL2RhbW9uL3N5c2ZzLmM6MjU0MDpcXHRlcnIgPSBkYW1vbl9zdGFydChcXHUwMDI2Y3R4LCAxLCBmYWxzZSk7XFxubW0vZGFtb24vc3lzZnMuYy0yNTQxLVxcdGlmIChlcnIpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTE6NTM6MjYuNzk3MzkzNjgyWiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE0NzQwMDM2MTk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRBTU9OIENvZGUgQW5hbHlzaXMgU3VtbWFyeSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB0aGUgY29kZSBpbiBgbW0vZGFtb24vY29yZS5jYCwgdGhlIGtleSBmdW5jdGlvbiBpbXBhY3RlZCBieSB0aGUgY29tbWl0IGlzIGBkYW1vc19hZGp1c3RfcXVvdGFgLCB3aGljaCBpcyBjYWxsZWQgZGlyZWN0bHkgYnkgYGtkYW1vbmRfYXBwbHlfc2NoZW1lc2AuICBgZGFtb3NfYWRqdXN0X3F1b3RhYCBhbHNvIHVzZXMgYGRhbW9zX3F1b3RhX2lzX2Z1bGxgIGFzIGEgaGVscGVyLiBDb25zaWRlcmluZyB0aGUgaW5zdHJ1Y3Rpb25zLCBJIG5lZWQgdG8gaWRlbnRpZnkgc3BlY2lmaWMgZmVhdHVyZSBsb2dpYyBvciBlbnRyeXBvaW50cy5cblxuYGRhbW9zX2FkanVzdF9xdW90YWAgaXMgbm9uLWlubGluZSBhbmQgc3RhdGljLCBzbyBpdCdzIGEgZ29vZCB0YXJnZXQgZm9yIGZvY3VzLCBhbmQgaXRzIGNhbGxlciwgYGtkYW1vbmRfYXBwbHlfc2NoZW1lc2AsIGlzIGFsc28gbm9uLWlubGluZS4gYGRhbW9uX3N0YXJ0YCBpcyB1YmlxdWl0b3VzIGluIERBTU9OLCBzbyBpdCdzIG5vdCBhIGdvb2QgY2hvaWNlIGJhc2VkIG9uIHRoZSBpbnN0cnVjdGlvbnMuICBJJ20gY29uZmlkZW50IGBkYW1vc19hZGp1c3RfcXVvdGFgIGlzIHRoZSBmdW5jdGlvbiAqZGlyZWN0bHkqIG1vZGlmaWVkLCBhbmQgYGtkYW1vbmRfYXBwbHlfc2NoZW1lc2AgaXMgaXRzIGNhbGxlci4gVGhlc2UgYXJlIHRoZSAqZm9jdXMgc3ltYm9scyogSSBzaG91bGQgbGlzdC5cblxuTm93IGZvciBjb25maWd1cmF0aW9ucy4gVG8gZ2V0IHRvIHRoZSBtb2RpZmllZCBjb2RlIGluIGBkYW1vc19hZGp1c3RfcXVvdGFgLCBJIHNlZSB0aGF0IGBrZGFtb25kX2FwcGx5X3NjaGVtZXNgIG5lZWRzIGAhbGlzdF9lbXB0eShcdTAwMjZjdHgtXHUwMDNlc2NoZW1lcylgLiBGdXJ0aGVybW9yZSwgaW5zaWRlIGBkYW1vc19hZGp1c3RfcXVvdGFgLCB0aGUgcXVvdGEgY2hlY2sgYW5kIGhpc3RvZ3JhbSBjb2RlIGlzIG9ubHkgZXhlY3V0ZWQgaWYgYGMtXHUwMDNlb3BzLmdldF9zY2hlbWVfc2NvcmVgIGlzIHNldC4gVGhpcyBtZWFucyBgREFNT05fUEFERFJgIG9yIGBEQU1PTl9WQUREUmAgbXVzdCBiZSBlbmFibGVkLiBTaW5jZSB0aGUgc2NoZW1lcyBhcmUgc2V0IHZpYSBgREFNT05fU1lTRlNgICh1c2VyIHNwYWNlKSBvciBgREFNT05fUkVDTEFJTWAgb3IgYERBTU9OX0xSVV9TT1JUYCwgSSBuZWVkIHRvIGVuYWJsZTogYERBTU9OYCwgYERBTU9OX1BBRERSYCwgYERBTU9OX1ZBRERSYCwgYERBTU9OX1NZU0ZTYCwgYW5kIGBEQU1PTl9SRUNMQUlNYC4gIEkndmUgY2hlY2tlZCB0aGUgS2NvbmZpZyBkZXBlbmRlbmNpZXMsIGFuZCB0aGVzZSBhbGwgbWFrZSBzZW5zZS5cblxuSSd2ZSBtYWRlIHN1cmUgdG8gY292ZXIgYWxsIHRoZSBkZXBlbmRlbmNpZXMsIGluY2x1ZGluZyBgU1lTRlNgIGFuZCBgTU1VYCB3aGljaCBhcmUgc3RhbmRhcmQgb24gYW1kNjQuIFRoZXJlZm9yZSwgSSBjYW4gY29uZmlybSB0aGF0IHRoZSBgV29ydGhGdXp6aW5nYCBib29sZWFuIGlzIHRydWUsIHRoZSByZWFzb25pbmcgaXMgY29uY2lzZSwgdGhlIGBGb2N1c1N5bWJvbHNgIGFyZSBgZGFtb3NfYWRqdXN0X3F1b3RhYCBhbmQgYGtkYW1vbmRfYXBwbHlfc2NoZW1lc2AsIGFuZCB0aGUgYEVuYWJsZUNvbmZpZ3NgIGFyZSBgREFNT05gLCBgREFNT05fU1lTRlNgLCBgREFNT05fUEFERFJgLCBgREFNT05fVkFERFJgLCBhbmQgYERBTU9OX1JFQ0xBSU1gLiBMb29rcyBnb29kLiBUaW1lIHRvIG1vdmUgb24gYW5kIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA2MDAsIk91dHB1dFRva2VucyI6MTY2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEwOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMTo1Mzo0MS41Mzc0MzI3ODhaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3ODk0ODQ4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiREFNT05cIixcbiAgICBcIkRBTU9OX1NZU0ZTXCIsXG4gICAgXCJEQU1PTl9QQUREUlwiLFxuICAgIFwiREFNT05fVkFERFJcIixcbiAgICBcIkRBTU9OX1JFQ0xBSU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkYW1vc19hZGp1c3RfcXVvdGFcIixcbiAgICBcImtkYW1vbmRfYXBwbHlfc2NoZW1lc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgaW4gREFNT04gKG1tL2RhbW9uL2NvcmUuYykgYnkgaW50cm9kdWNpbmcgYW4gZWFybHkgZXhpdCBjaGVjayBpbiBkYW1vc19hZGp1c3RfcXVvdGEoKSB3aGVuIHRoZSBxdW90YSBpcyBhbHJlYWR5IGZ1bGwuIFRoaXMgYXZvaWRzIHVubmVjZXNzYXJ5IHJlZ2lvbiBzY29yZSBoaXN0b2dyYW0gY2FsY3VsYXRpb25zLiBCZWNhdXNlIHRoaXMgY2hhbmdlcyByZWFjaGFibGUgZXhlY3V0aW9uIGxvZ2ljIGluIGEgY29yZSBNTSBzdWJzeXN0ZW0gYWNjZXNzaWJsZSB2aWEgREFNT04gc3lzZnMgYW5kIG1vZHVsZSBpbnRlcmZhY2VzIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgaXQgaXMgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJEQU1PTlwiLFxuICAgIFwiREFNT05fU1lTRlNcIixcbiAgICBcIkRBTU9OX1BBRERSXCIsXG4gICAgXCJEQU1PTl9WQUREUlwiLFxuICAgIFwiREFNT05fUkVDTEFJTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRhbW9zX2FkanVzdF9xdW90YVwiLFxuICAgIFwia2RhbW9uZF9hcHBseV9zY2hlbWVzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBpbiBEQU1PTiAobW0vZGFtb24vY29yZS5jKSBieSBpbnRyb2R1Y2luZyBhbiBlYXJseSBleGl0IGNoZWNrIGluIGRhbW9zX2FkanVzdF9xdW90YSgpIHdoZW4gdGhlIHF1b3RhIGlzIGFscmVhZHkgZnVsbC4gVGhpcyBhdm9pZHMgdW5uZWNlc3NhcnkgcmVnaW9uIHNjb3JlIGhpc3RvZ3JhbSBjYWxjdWxhdGlvbnMuIEJlY2F1c2UgdGhpcyBjaGFuZ2VzIHJlYWNoYWJsZSBleGVjdXRpb24gbG9naWMgaW4gYSBjb3JlIE1NIHN1YnN5c3RlbSBhY2Nlc3NpYmxlIHZpYSBEQU1PTiBzeXNmcyBhbmQgbW9kdWxlIGludGVyZmFjZXMgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBpdCBpcyB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMTo1Mzo0MS42MTYzODk2NTZaIiwiU2VxIjozNSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk3NTg0MDYzOTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTE6NTM6NDEuNjE2ODI2MzM2WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6OTc1ODM2MjI3NjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYW4gZWFybHkgcmV0dXJuIGluIGRhbW9zX2FkanVzdF9xdW90YSgpIGlmIHRoZSBxdW90YSBpcyBhbHJlYWR5IGV4aGF1c3RlZCAoZGFtb3NfcXVvdGFfaXNfZnVsbCgpKS4gVGhpcyBza2lwcyByZWNhbGN1bGF0aW9uIG9mIHRoZSBzY2hlbWUgc2NvcmUgaGlzdG9ncmFtIGFuZCBtaW5fc2NvcmUuXFxuXFxuTm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3IgbWVtb3J5IGFsbG9jYXRpb25zIGFyZSBpbnRyb2R1Y2VkIG9yIHJlYWQuIFRoZSBza2lwcGVkIGhpc3RvZ3JhbSBidWZmZXIgKGMtXFx1MDAzZXJlZ2lvbnNfc2NvcmVfaGlzdG9ncmFtKSBpcyBzdHJpY3RseSBpbnRlcm5hbCB0byB0aGlzIGZ1bmN0aW9uIGFuZCBpcyBhbHdheXMgemVyb2VkIHZpYSBtZW1zZXQoKSBwcmlvciB0byB1c2Ugd2hlbiBhY2Nlc3NlZC4gTm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSBvciB1c2VkIGluIHVuaW5pdGlhbGl6ZWQgc3RhdGUuIEFueSBwb3RlbnRpYWwgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcykgd291bGQgYmUgZGV0ZWN0ZWQgYnkgc3RhbmRhcmQgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gcnVuIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNzcwZjI5MDA3OTY4ZTgzYzk5NjczMDhjMWRjNjJhMTk5MWZkZjYzMVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gU2VwIDEzIDExOjUyOjAzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vY29yZS5jIGIvbW0vZGFtb24vY29yZS5jXG5pbmRleCAwYzk4ZjdlMjY3ZDA3Li4zZDdhOTczZWE4YjZmIDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vY29yZS5jXG4rKysgYi9tbS9kYW1vbi9jb3JlLmNcbkBAIC0zMzM2LDYgKzMzMzYsOCBAQCBzdGF0aWMgdm9pZCBkYW1vc19hZGp1c3RfcXVvdGEoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzKVxuIFx0XHRcdGRhbW9zX3RyYWNlX2VzeihjLCBzLCBxdW90YSk7XG4gXHR9XG4gXG4rXHRpZiAoZGFtb3NfcXVvdGFfaXNfZnVsbChxdW90YSwgYy1cdTAwM2VtaW5fcmVnaW9uX3N6KSlcbitcdFx0cmV0dXJuO1xuIFx0aWYgKCFjLVx1MDAzZW9wcy5nZXRfc2NoZW1lX3Njb3JlKVxuIFx0XHRyZXR1cm47XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMTo1Mzo0MS42MTY4MjcyNDZaIiwiU2VxIjozNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6ODE1OTAxOTgwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBob3cgSSdkIGFwcHJvYWNoIHRoaXMgYW5hbHlzaXM6XG5cbioqQW5hbHl6aW5nIHRoZSBQYXRjaDogSW5pdGlhbCBUaG91Z2h0cyoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gc3RhcnQgYnkgdW5kZXJzdGFuZGluZyB0aGlzIHBhdGNoIGFuZCBpdHMgY29udGV4dC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gemVybyBpbiBvbiBgbW0vZGFtb24vY29yZS5jYCBhcm91bmQgbGluZSAzMzM2LiBJJ2xsIGtpY2sgdGhpbmdzIG9mZiBieSB1c2luZyBteSBzdGFuZGFyZCB0b29scyAtIEknbGwgYHJlYWQtZmlsZWAgdGhhdCBzZWN0aW9uIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIHN1cnJvdW5kaW5nIGNvZGUgYW5kIGlkZW50aWZ5IHRoZSBleGFjdCBhcmVhIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcuIEkgY2FuIGFscmVhZHkgaW1hZ2luZSB0aGUgdHlwZSBvZiBkYXRhIHN0cnVjdHVyZXMgYW5kIGxvZ2ljIEknbSBnb2luZyB0byBiZSBsb29raW5nIGF0IGluIHRoYXQgZmlsZS4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGZvdW5kYXRpb24gYmVmb3JlIEkgc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBjaGFuZ2VzIHRoZW1zZWx2ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNzEsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDExOjUzOjQ5Ljc3NTg1MDExMVoiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTY4MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMzMjAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjMzMjA6XFx0XFx0XFx0XFx0ZGFtb3NfdHJhY2VfZXN6KGMsIHMsIHF1b3RhKTtcXG4zMzIxOlxcdFxcdH1cXG4zMzIyOlxcdFxcbjMzMjM6XFx0XFx0LyogTmV3IGNoYXJnZSB3aW5kb3cgc3RhcnRzICovXFxuMzMyNDpcXHRcXHRpZiAoIXRpbWVfaW5fcmFuZ2Vfb3BlbihqaWZmaWVzLCBxdW90YS1cXHUwMDNlY2hhcmdlZF9mcm9tLFxcbjMzMjU6XFx0XFx0XFx0XFx0XFx0cXVvdGEtXFx1MDAzZWNoYXJnZWRfZnJvbSArXFxuMzMyNjpcXHRcXHRcXHRcXHRcXHRtc2Vjc190b19qaWZmaWVzKHF1b3RhLVxcdTAwM2VyZXNldF9pbnRlcnZhbCkpKSB7XFxuMzMyNzpcXHRcXHRcXHRpZiAoZGFtb3NfcXVvdGFfaXNfZnVsbChxdW90YSwgYy1cXHUwMDNlbWluX3JlZ2lvbl9zeikpXFxuMzMyODpcXHRcXHRcXHRcXHRzLVxcdTAwM2VzdGF0LnF0X2V4Y2VlZHMrKztcXG4zMzI5OlxcdFxcdFxcdHF1b3RhLVxcdTAwM2V0b3RhbF9jaGFyZ2VkX3N6ICs9IHF1b3RhLVxcdTAwM2VjaGFyZ2VkX3N6O1xcbjMzMzA6XFx0XFx0XFx0cXVvdGEtXFx1MDAzZWNoYXJnZWRfZnJvbSA9IGppZmZpZXM7XFxuMzMzMTpcXHRcXHRcXHRxdW90YS1cXHUwMDNlY2hhcmdlZF9zeiA9IDA7XFxuMzMzMjpcXHRcXHRcXHRpZiAodHJhY2VfZGFtb3NfZXN6X2VuYWJsZWQoKSlcXG4zMzMzOlxcdFxcdFxcdFxcdGNhY2hlZF9lc3ogPSBxdW90YS1cXHUwMDNlZXN6O1xcbjMzMzQ6XFx0XFx0XFx0ZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YShjLCBzKTtcXG4zMzM1OlxcdFxcdFxcdGlmICh0cmFjZV9kYW1vc19lc3pfZW5hYmxlZCgpIFxcdTAwMjZcXHUwMDI2IHF1b3RhLVxcdTAwM2Vlc3ogIT0gY2FjaGVkX2VzeilcXG4zMzM2OlxcdFxcdFxcdFxcdGRhbW9zX3RyYWNlX2VzeihjLCBzLCBxdW90YSk7XFxuMzMzNzpcXHRcXHR9XFxuMzMzODpcXHRcXG4zMzM5OlxcdFxcdGlmIChkYW1vc19xdW90YV9pc19mdWxsKHF1b3RhLCBjLVxcdTAwM2VtaW5fcmVnaW9uX3N6KSlcXG4zMzQwOlxcdFxcdFxcdHJldHVybjtcXG4zMzQxOlxcdFxcdGlmICghYy1cXHUwMDNlb3BzLmdldF9zY2hlbWVfc2NvcmUpXFxuMzM0MjpcXHRcXHRcXHRyZXR1cm47XFxuMzM0MzpcXHRcXG4zMzQ0OlxcdFxcdC8qIEZpbGwgdXAgdGhlIHNjb3JlIGhpc3RvZ3JhbSAqL1xcbjMzNDU6XFx0XFx0bWVtc2V0KGMtXFx1MDAzZXJlZ2lvbnNfc2NvcmVfaGlzdG9ncmFtLCAwLFxcbjMzNDY6XFx0XFx0XFx0XFx0c2l6ZW9mKCpjLVxcdTAwM2VyZWdpb25zX3Njb3JlX2hpc3RvZ3JhbSkgKlxcbjMzNDc6XFx0XFx0XFx0XFx0KERBTU9TX01BWF9TQ09SRSArIDEpKTtcXG4zMzQ4OlxcdFxcdGRhbW9uX2Zvcl9lYWNoX3RhcmdldCh0LCBjKSB7XFxuMzM0OTpcXHRcXHRcXHRkYW1vbl9mb3JfZWFjaF9yZWdpb24ociwgdCkge1xcbjMzNTA6XFx0XFx0XFx0XFx0aWYgKCFfX2RhbW9zX3ZhbGlkX3RhcmdldChyLCBzLCBjKSlcXG4zMzUxOlxcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjMzNTI6XFx0XFx0XFx0XFx0aWYgKGRhbW9zX2NvcmVfZmlsdGVyX291dChjLCB0LCByLCBzKSlcXG4zMzUzOlxcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjMzNTQ6XFx0XFx0XFx0XFx0c2NvcmUgPSBjLVxcdTAwM2VvcHMuZ2V0X3NjaGVtZV9zY29yZShjLCByLCBzKTtcXG4zMzU1OlxcdFxcdFxcdFxcdGMtXFx1MDAzZXJlZ2lvbnNfc2NvcmVfaGlzdG9ncmFtW3Njb3JlXSArPVxcbjMzNTY6XFx0XFx0XFx0XFx0XFx0ZGFtb25fc3pfcmVnaW9uKHIpO1xcbjMzNTc6XFx0XFx0XFx0XFx0aWYgKHNjb3JlIFxcdTAwM2UgbWF4X3Njb3JlKVxcbjMzNTg6XFx0XFx0XFx0XFx0XFx0bWF4X3Njb3JlID0gc2NvcmU7XFxuMzM1OTpcXHRcXHRcXHR9XFxuMzM2MDpcXHRcXHR9XFxuMzM2MTpcXHRcXG4zMzYyOlxcdFxcdC8qIFNldCB0aGUgbWluIHNjb3JlIGxpbWl0ICovXFxuMzM2MzpcXHRcXHRmb3IgKGN1bXVsYXRlZF9zeiA9IDAsIHNjb3JlID0gbWF4X3Njb3JlOyA7IHNjb3JlLS0pIHtcXG4zMzY0OlxcdFxcdFxcdGN1bXVsYXRlZF9zeiArPSBjLVxcdTAwM2VyZWdpb25zX3Njb3JlX2hpc3RvZ3JhbVtzY29yZV07XFxuMzM2NTpcXHRcXHRcXHRpZiAoY3VtdWxhdGVkX3N6IFxcdTAwM2U9IHF1b3RhLVxcdTAwM2Vlc3ogfHwgIXNjb3JlKVxcbjMzNjY6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMzM2NzpcXHRcXHR9XFxuMzM2ODpcXHRcXHRxdW90YS1cXHUwMDNlbWluX3Njb3JlID0gc2NvcmU7XFxuMzM2OTpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDExOjUzOjQ5Ljc3NjEwOTI4MloiLCJTZXEiOjM5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMjQ0MzQ1MjY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy5cblxuKipFeGFtaW5pbmcgdGhlIGBkYW1vc19hZGp1c3RfcXVvdGFgIEZ1bmN0aW9uKipcblxuUmlnaHQsIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQncyBoYXBwZW5pbmcgd2l0aCBgZGFtb3NfYWRqdXN0X3F1b3RhYCwgc28gSSdsbCBiZSBjaGVja2luZyBpdHMgaW1wbGVtZW50YXRpb24gd2l0aGluIGBtbS9kYW1vbi9jb3JlLmNgLiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc3lzdGVtIG1hbmFnZXMgYW5kIGFkanVzdHMgcXVvdGFzLiBJIHdpbGwgZm9jdXMgb24gbGluZXMgMzMwMCB0aHJvdWdoIDMzNDAsIGFzIHRoZSBjb2RlIGFyb3VuZCBhIGZ1bmN0aW9uIG9mdGVuIGdpdmVzIGNyaXRpY2FsIGluc2lnaHRzIGludG8gaXRzIHB1cnBvc2UgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgc3Vycm91bmRpbmcgYXJjaGl0ZWN0dXJlLiBSZWFkaW5nIHRoYXQgYmxvY2sgc2hvdWxkIHByb3ZpZGUgYSBjcml0aWNhbCBzbmFwc2hvdCBpbnRvIHRoZSBxdW90YSBhZGp1c3RtZW50IHByb2Nlc3MuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gbG9va2luZyBmb3IgaG93IHRoZSBhZGp1c3RtZW50cyBhcmUgdHJpZ2dlcmVkLCBhbmQgd2hhdCBwYXJhbWV0ZXJzIGl0IG1heSB1c2UuIFBlcmhhcHMgdGhlIGNvbmRpdGlvbmFsIGJyYW5jaGVzLCB2YXJpYWJsZSBhc3NpZ25tZW50cywgYW5kIGZ1bmN0aW9uIGNhbGxzIHdpbGwgZ2l2ZSBhd2F5IHRoZSBzZWNyZXRzIG9mIGBkYW1vc19hZGp1c3RfcXVvdGFgLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTMyLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMTo1Mzo1Mi4wMjA0NTcxODhaIiwiU2VxIjo0MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQwMDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2RhbW9uL2NvcmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMzAwLFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzMzAwOlxcdFxcdH1cXG4zMzAxOlxcdFxcdHRyYWNlX2RhbW9zX2VzeihjaWR4LCBzaWR4LCBxdW90YS1cXHUwMDNlZXN6KTtcXG4zMzAyOlxcdH1cXG4zMzAzOlxcdFxcbjMzMDQ6XFx0c3RhdGljIHZvaWQgZGFtb3NfYWRqdXN0X3F1b3RhKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vcyAqcylcXG4zMzA1OlxcdHtcXG4zMzA2OlxcdFxcdHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEgPSBcXHUwMDI2cy1cXHUwMDNlcXVvdGE7XFxuMzMwNzpcXHRcXHRzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0O1xcbjMzMDg6XFx0XFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqcjtcXG4zMzA5OlxcdFxcdHVuc2lnbmVkIGxvbmcgY3VtdWxhdGVkX3N6LCBjYWNoZWRfZXN6O1xcbjMzMTA6XFx0XFx0dW5zaWduZWQgaW50IHNjb3JlLCBtYXhfc2NvcmUgPSAwO1xcbjMzMTE6XFx0XFxuMzMxMjpcXHRcXHRpZiAoIXF1b3RhLVxcdTAwM2VtcyBcXHUwMDI2XFx1MDAyNiAhcXVvdGEtXFx1MDAzZXN6IFxcdTAwMjZcXHUwMDI2IGxpc3RfZW1wdHkoXFx1MDAyNnF1b3RhLVxcdTAwM2Vnb2FscykpXFxuMzMxMzpcXHRcXHRcXHRyZXR1cm47XFxuMzMxNDpcXHRcXG4zMzE1OlxcdFxcdC8qIEZpcnN0IGNoYXJnZSB3aW5kb3cgKi9cXG4zMzE2OlxcdFxcdGlmICghcXVvdGEtXFx1MDAzZXRvdGFsX2NoYXJnZWRfc3ogXFx1MDAyNlxcdTAwMjYgIXF1b3RhLVxcdTAwM2VjaGFyZ2VkX2Zyb20pIHtcXG4zMzE3OlxcdFxcdFxcdHF1b3RhLVxcdTAwM2VjaGFyZ2VkX2Zyb20gPSBqaWZmaWVzO1xcbjMzMTg6XFx0XFx0XFx0ZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YShjLCBzKTtcXG4zMzE5OlxcdFxcdFxcdGlmICh0cmFjZV9kYW1vc19lc3pfZW5hYmxlZCgpKVxcbjMzMjA6XFx0XFx0XFx0XFx0ZGFtb3NfdHJhY2VfZXN6KGMsIHMsIHF1b3RhKTtcXG4zMzIxOlxcdFxcdH1cXG4zMzIyOlxcdFxcbjMzMjM6XFx0XFx0LyogTmV3IGNoYXJnZSB3aW5kb3cgc3RhcnRzICovXFxuMzMyNDpcXHRcXHRpZiAoIXRpbWVfaW5fcmFuZ2Vfb3BlbihqaWZmaWVzLCBxdW90YS1cXHUwMDNlY2hhcmdlZF9mcm9tLFxcbjMzMjU6XFx0XFx0XFx0XFx0XFx0cXVvdGEtXFx1MDAzZWNoYXJnZWRfZnJvbSArXFxuMzMyNjpcXHRcXHRcXHRcXHRcXHRtc2Vjc190b19qaWZmaWVzKHF1b3RhLVxcdTAwM2VyZXNldF9pbnRlcnZhbCkpKSB7XFxuMzMyNzpcXHRcXHRcXHRpZiAoZGFtb3NfcXVvdGFfaXNfZnVsbChxdW90YSwgYy1cXHUwMDNlbWluX3JlZ2lvbl9zeikpXFxuMzMyODpcXHRcXHRcXHRcXHRzLVxcdTAwM2VzdGF0LnF0X2V4Y2VlZHMrKztcXG4zMzI5OlxcdFxcdFxcdHF1b3RhLVxcdTAwM2V0b3RhbF9jaGFyZ2VkX3N6ICs9IHF1b3RhLVxcdTAwM2VjaGFyZ2VkX3N6O1xcbjMzMzA6XFx0XFx0XFx0cXVvdGEtXFx1MDAzZWNoYXJnZWRfZnJvbSA9IGppZmZpZXM7XFxuMzMzMTpcXHRcXHRcXHRxdW90YS1cXHUwMDNlY2hhcmdlZF9zeiA9IDA7XFxuMzMzMjpcXHRcXHRcXHRpZiAodHJhY2VfZGFtb3NfZXN6X2VuYWJsZWQoKSlcXG4zMzMzOlxcdFxcdFxcdFxcdGNhY2hlZF9lc3ogPSBxdW90YS1cXHUwMDNlZXN6O1xcbjMzMzQ6XFx0XFx0XFx0ZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YShjLCBzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTE6NTM6NTIuMDIwNjk5Njk4WiIsIlNlcSI6NDEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIzMzg4OTQ3NTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgQ29kZSBDaGFuZ2UqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIHNlZSBhIGRpZmYgaW50cm9kdWNpbmcgc29tZSBuZXcgbG9naWMuIFNwZWNpZmljYWxseSwgdGhpcyBibG9jazpcblxuYGBgY1xuK1x0aWYgKGRhbW9zX3F1b3RhX2lzX2Z1bGwocXVvdGEsIGMtXHUwMDNlbWluX3JlZ2lvbl9zeikpXG4rXHRcdHJldHVybjtcbiBcdGlmICghYy1cdTAwM2VvcHMuZ2V0X3NjaGVtZV9zY29yZSlcbiBcdFx0cmV0dXJuO1xuYGBgXG5cbkl0IHNlZW1zIGxpa2Ugd2UncmUgYWRkaW5nIGEgY2hlY2sgcmVsYXRlZCB0byBhIFwiZGFtb3NfcXVvdGFcIi4gVGhlIGltbWVkaWF0ZSBhY3Rpb24gaXMgYSBgcmV0dXJuO2AsIHNvIGl0IGxvb2tzIGxpa2Ugd2UncmUgc2hvcnQtY2lyY3VpdGluZyBleGVjdXRpb24gaWYgc29tZSBjb25kaXRpb24gaXMgbWV0LiBUaGUgZmlyc3QgcGFydCBmb2N1c2VzIG9uIGEgY2hlY2sgdXNpbmcgYGRhbW9zX3F1b3RhX2lzX2Z1bGxgIGFuZCBjb21wYXJpbmcgdGhlIHF1b3RhIHdpdGggYGMtXHUwMDNlbWluX3JlZ2lvbl9zemAuIFRoYXQgcmFpc2VzIHNvbWUgcXVlc3Rpb25zOyBpdCB3b3VsZCBiZSBnb29kIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNvbmRpdGlvbi5cblxuSWYgdGhlIHF1b3RhIGlzIGZ1bGwsIHRoZW4gd2hhdD8gQXJlIHRoZXJlIHN1YnNlcXVlbnQgZnVuY3Rpb25zIHRoYXQgYXR0ZW1wdCB0byBhbGxvY2F0ZSBwYXN0IHRoYXQ/IElzIHRoaXMgYW4gYXR0ZW1wdCBhdCBtZW1vcnkgcHJvdGVjdGlvbj9cblxuVGhlIHNlY29uZCBwYXJ0IGNoZWNrcyBmb3IgdGhlIGV4aXN0ZW5jZSBvZiBgYy1cdTAwM2VvcHMuZ2V0X3NjaGVtZV9zY29yZWAsIGFuZCBpZiBpdCBkb2VzIG5vdCBleGlzdCwgaXQgYWxzbyByZXR1cm5zLiBUaGlzIGlzIHByb2JhYmx5IGEgcG9pbnRlciB2YWxpZGF0aW9uIGlzc3VlLiBJdCdzIGEgZmFpcmx5IGNvbW1vbiBwYXR0ZXJuIGluIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzLiBcblxuTm93LCB0aW1lIHRvIGRpdmUgZGVlcGVyIGFuZCBzZWUgd2hhdCB0aGF0IGBkYW1vc19xdW90YV9pc19mdWxsYCBmdW5jdGlvbiBhY3R1YWxseSBkb2VzLiBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcXVvdGEgbWFuYWdlbWVudCBzY2hlbWUgaW4gcGxhY2UgdG8gcHJvcGVybHkgYXNzZXNzIHRoZSBjaGFuZ2UncyBpbXBhY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5NzksIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDExOjUzOjU0LjM1OTU5NzA2M1oiLCJTZXEiOjQyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg5NDY0NTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb3NfcXVvdGFfaXNfZnVsbFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9jb3JlLmM9MjY2OD1zdGF0aWMgdm9pZCBkYW1vc19jaGFyZ2VfcXVvdGEoc3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yNjg0LVxcbm1tL2RhbW9uL2NvcmUuYzoyNjg1OnN0YXRpYyBib29sIGRhbW9zX3F1b3RhX2lzX2Z1bGwoc3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSxcXG5tbS9kYW1vbi9jb3JlLmMtMjY4Ni1cXHRcXHR1bnNpZ25lZCBsb25nIG1pbl9yZWdpb25fc3opXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MjY5OT1zdGF0aWMgdm9pZCBkYW1vc19hcHBseV9zY2hlbWUoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yNzU3LVxcdFxcdGRhbW9zX2NoYXJnZV9xdW90YShxdW90YSwgc3osIHN6X2FwcGxpZWQpO1xcbm1tL2RhbW9uL2NvcmUuYzoyNzU4OlxcdFxcdGlmIChkYW1vc19xdW90YV9pc19mdWxsKHF1b3RhLCBjLVxcdTAwM2VtaW5fcmVnaW9uX3N6KSkge1xcbm1tL2RhbW9uL2NvcmUuYy0yNzU5LVxcdFxcdFxcdHF1b3RhLVxcdTAwM2VjaGFyZ2VfdGFyZ2V0X2Zyb20gPSB0O1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTI3NzA9c3RhdGljIHZvaWQgZGFtb25fZG9fYXBwbHlfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjLFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTI3ODUtXFx0XFx0LyogQ2hlY2sgdGhlIHF1b3RhICovXFxubW0vZGFtb24vY29yZS5jOjI3ODY6XFx0XFx0aWYgKGRhbW9zX3F1b3RhX2lzX2Z1bGwocXVvdGEsIGMtXFx1MDAzZW1pbl9yZWdpb25fc3opKVxcbm1tL2RhbW9uL2NvcmUuYy0yNzg3LVxcdFxcdFxcdGNvbnRpbnVlO1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTMzMDQ9c3RhdGljIHZvaWQgZGFtb3NfYWRqdXN0X3F1b3RhKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vcyAqcylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zMzI2LVxcdFxcdFxcdFxcdG1zZWNzX3RvX2ppZmZpZXMocXVvdGEtXFx1MDAzZXJlc2V0X2ludGVydmFsKSkpIHtcXG5tbS9kYW1vbi9jb3JlLmM6MzMyNzpcXHRcXHRpZiAoZGFtb3NfcXVvdGFfaXNfZnVsbChxdW90YSwgYy1cXHUwMDNlbWluX3JlZ2lvbl9zeikpXFxubW0vZGFtb24vY29yZS5jLTMzMjgtXFx0XFx0XFx0cy1cXHUwMDNlc3RhdC5xdF9leGNlZWRzKys7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzMzOC1cXG5tbS9kYW1vbi9jb3JlLmM6MzMzOTpcXHRpZiAoZGFtb3NfcXVvdGFfaXNfZnVsbChxdW90YSwgYy1cXHUwMDNlbWluX3JlZ2lvbl9zeikpXFxubW0vZGFtb24vY29yZS5jLTMzNDAtXFx0XFx0cmV0dXJuO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMTo1Mzo1NC40MDg1NDgxODJaIiwiU2VxIjo0MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjU2MzI5OTQ5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIHRoZSBzdW1tYXJ5LCByZW5kZXJlZCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhc3N1bWluZyBJJ20gYW4gZXhwZXJ0IGluIHRoaXMgZmllbGQ6XG5cbioqQW5hbHl6aW5nIGBkYW1vc19xdW90YV9pc19mdWxsYCoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBgZGFtb3NfcXVvdGFfaXNfZnVsbGAgZnVuY3Rpb24uIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGlzIHRvIGNvbnNpZGVyIGEgZmV3IGFuZ2xlcy4gRmlyc3QsIHdoYXQgZG9lcyBcImRhbW9zXCIgcmVmZXIgdG8gaW4gdGhpcyBjb250ZXh0PyBJcyBpdCBhIHNwZWNpZmljIGRhdGEgc3RvcmUsIGEgcmVzb3VyY2UgcG9vbCwgYSBzZXJ2aWNlLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gVGhlIG5hbWUgaXRzZWxmIHN1Z2dlc3RzIGEgcXVvdGEsIHNvIGl0J3MgcHJvYmFibHkgcmVsYXRlZCB0byBzb21lIGtpbmQgb2YgbGltaXQuIFRoaXMgbGlrZWx5IG1lYW5zIHdlJ3JlIGRlYWxpbmcgd2l0aCByZXNvdXJjZSBtYW5hZ2VtZW50LCBjYXBhY2l0eSBwbGFubmluZywgYW5kIHBvdGVudGlhbGx5IGV2ZW4gdXNlciBhY2Nlc3MgY29udHJvbC4gSSdsbCBuZWVkIHRvIGxvb2sgYXQgd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYW5kLCBtb3JlIGltcG9ydGFudGx5LCAqaG93KiBpdOKAmXMgYmVpbmcgY2FsbGVkLiBBcmUgd2UgY2hlY2tpbmcgdGhlIHF1b3RhIHByb2FjdGl2ZWx5LCByZWFjdGl2ZWx5LCBvciBib3RoPyBBcmUgdGhlcmUgYW55IHJldHJ5IG1lY2hhbmlzbXMgaWYgdGhlIHF1b3RhIGlzIGluaXRpYWxseSBleGNlZWRlZD8gV2hhdCBoYXBwZW5zIHdoZW4gdGhlIGNvbmRpdGlvbiBpcyAqdHJ1ZSo/IElzIGFuIGVycm9yIHRocm93biwgYSByZXF1ZXN0IHJlamVjdGVkLCBvciBpcyB0aGVyZSBhIGZhbGxiYWNrIHN0cmF0ZWd5PyBUaGUgZXJyb3IgaGFuZGxpbmcgaXMgY3JpdGljYWwgYmVjYXVzZSBpdCB3aWxsIHJldmVhbCBob3cgcm9idXN0IHRoaXMgc3lzdGVtIGlzLiBJIGFsc28gbmVlZCB0byBhc3Nlc3MgdGhlIHVuZGVybHlpbmcgZGF0YSBzdHJ1Y3R1cmVzIG9yIEFQSSBjYWxscyB0aGF0IGRldGVybWluZSB0aGUgcXVvdGEgc3RhdHVzLiBJcyBpdCBhIHNpbXBsZSBjb3VudGVyLCBhIGNvbXBsZXggcGVybWlzc2lvbiBtb2RlbCwgb3Igc29tZXRoaW5nIGluIGJldHdlZW4/IEFueSBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVja3Mgd2lsbCBiZSByZXZlYWxlZCBpbiB0aGUgaW1wbGVtZW50YXRpb24uIEknbGwgbmVlZCB0byBrbm93IHdoaWNoIG9wZXJhdGlvbnMgbW9kaWZ5IHRoZSBxdW90YS4gQXJlIHRoZXNlIG9wZXJhdGlvbnMgYXRvbWljPyBBbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucz8gSSdtIGFudGljaXBhdGluZyB0aGF0IHVuZGVyc3RhbmRpbmcgdGhlIGNvbXBsZXRlIHN5c3RlbSBpcyBlc3NlbnRpYWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ5NzQsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMTo1Mzo1Ni45NzE4NTAwNjRaIiwiU2VxIjo0NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQyOTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2RhbW9uL2NvcmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNjgwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyNjgwOlxcdFxcdFxcdFxcdFxcdChzel9yZWdpb24gLSBzel9hcHBsaWVkKSxcXG4yNjgxOlxcdFxcdFxcdFxcdFxcdHF1b3RhLVxcdTAwM2VmYWlsX2NoYXJnZV9udW0sXFxuMjY4MjpcXHRcXHRcXHRcXHRcXHRxdW90YS1cXHUwMDNlZmFpbF9jaGFyZ2VfZGVub20pO1xcbjI2ODM6XFx0fVxcbjI2ODQ6XFx0XFxuMjY4NTpcXHRzdGF0aWMgYm9vbCBkYW1vc19xdW90YV9pc19mdWxsKHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEsXFxuMjY4NjpcXHRcXHRcXHR1bnNpZ25lZCBsb25nIG1pbl9yZWdpb25fc3opXFxuMjY4NzpcXHR7XFxuMjY4ODpcXHRcXHRpZiAoIWRhbW9zX3F1b3RhX2lzX3NldChxdW90YSkpXFxuMjY4OTpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuMjY5MDpcXHRcXHRpZiAocXVvdGEtXFx1MDAzZWNoYXJnZWRfc3ogXFx1MDAzZT0gcXVvdGEtXFx1MDAzZWVzeilcXG4yNjkxOlxcdFxcdFxcdHJldHVybiB0cnVlO1xcbjI2OTI6XFx0XFx0LypcXG4yNjkzOlxcdFxcdCAqIERBTU9TIGFjdGlvbiBpcyBhcHBsaWVkIHBlciByZWdpb24sIHNvIFxcdTAwM2NtaW5fcmVnaW9uX3N6IHJlbWFpbmluZ1xcbjI2OTQ6XFx0XFx0ICogcXVvdGEgbWVhbnMgdGhlIHF1b3RhIGlzIGVmZmVjdGl2ZWx5IGZ1bGwuXFxuMjY5NTpcXHRcXHQgKi9cXG4yNjk2OlxcdFxcdHJldHVybiBxdW90YS1cXHUwMDNlZXN6IC0gcXVvdGEtXFx1MDAzZWNoYXJnZWRfc3ogXFx1MDAzYyBtaW5fcmVnaW9uX3N6O1xcbjI2OTc6XFx0fVxcbjI2OTg6XFx0XFxuMjY5OTpcXHRzdGF0aWMgdm9pZCBkYW1vc19hcHBseV9zY2hlbWUoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTE6NTM6NTYuOTcyMDk1NzQ0WiIsIlNlcSI6NDUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIyMDI3ODIwNzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCBtZSB0YWtlIGEgbG9vayBhdCB0aGlzLlxuXG4qKlN0cmVhbWxpbmluZyB0aGUgUXVvdGEgQWRqdXN0bWVudCBMb2dpYyoqXG5cbkFscmlnaHQsIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIGBkYW1vc19hZGp1c3RfcXVvdGFgIGZ1bmN0aW9uIGFuZCwgaG9sZCBvbiBhIHNlY29uZOKApiBJIHNlZSB3aGF0IHRoZXkgd2VyZSBkb2luZyBiZWZvcmUuIFRoZXkgd2VyZSBtZXRpY3Vsb3VzbHkgaXRlcmF0aW5nIHRocm91Z2ggdGFyZ2V0cyBhbmQgcmVnaW9ucywgY2FsY3VsYXRpbmcgc2NvcmVzIGFuZCB0aGF0IGBxdW90YS1cdTAwM2VtaW5fc2NvcmVgIHZhbHVlLiBTZWVtcyBmYWlybHkgc3RhbmRhcmQgZm9yIGEgcXVvdGEgc3lzdGVtLlxuXG5CdXQgd2FpdCBhIG1pbnV0ZSwgSSdtIHRoaW5raW5nLCBpZiB0aGUgcXVvdGEncyBhbHJlYWR5ICpmdWxsKiwgd2h5IGFyZSB3ZSBldmVuIGJvdGhlcmluZyB3aXRoIGFsbCB0aGF0IGNvbXB1dGF0aW9uPyBUaGVyZSdzIGEgY2xlYXIgb3B0aW1pemF0aW9uIG9wcG9ydHVuaXR5IGhlcmUuIElmIHRoZSBxdW90YSdzIG1heGVkIG91dCwgaXQgZG9lc24ndCBuZWVkIGFkanVzdGluZywganVzdCBleGl0IGVhcmx5LiBJdCdzIHdhc3RpbmcgY3ljbGVzIHRvIGNvbnRpbnVlLiBJIGNhbiBpbXByb3ZlIHRoZSBwZXJmb3JtYW5jZSBieSBzaG9ydC1jaXJjdWl0aW5nIHRoYXQgcHJvY2Vzcy4gTGV0J3Mgc2VlIGlmIHRoaXMgbG9naWMgY2FuIGJlIGFwcGxpZWQgdG8gdGhpcyBzaXR1YXRpb24uIEkgc2hvdWxkIHRoaW5rIGFib3V0IHdoZXJlIGBkYW1vc19hZGp1c3RfcXVvdGFgIGlzIGNhbGxlZCB0byBtYWtlIHN1cmUgdGhhdCB0aGlzIGlzIHRoZSBjb3JyZWN0IHBsYWNlIHRvIGFkanVzdCB0aGUgbG9naWMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU2NTcsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDExOjUzOjU5LjE3NDg4MDM1MVoiLCJTZXEiOjQ2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU0MDE2MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb3NfYWRqdXN0X3F1b3RhXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL2NvcmUuYz0zMjkwPXN0YXRpYyB2b2lkIGRhbW9zX3RyYWNlX2VzeihzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb3MgKnMsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzMwMy1cXG5tbS9kYW1vbi9jb3JlLmM6MzMwNDpzdGF0aWMgdm9pZCBkYW1vc19hZGp1c3RfcXVvdGEoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzKVxcbm1tL2RhbW9uL2NvcmUuYy0zMzA1LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0zMzg3PXN0YXRpYyB2b2lkIGtkYW1vbmRfYXBwbHlfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTM0MDItXFxubW0vZGFtb24vY29yZS5jOjM0MDM6XFx0XFx0ZGFtb3NfYWRqdXN0X3F1b3RhKGMsIHMpO1xcbm1tL2RhbW9uL2NvcmUuYy0zNDA0LVxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTE6NTM6NTkuMjIwMjg5MDZaIiwiU2VxIjo0NywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6Mjc0NjI2MTYwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gZGVlcGx5IGZhbWlsaWFyIHdpdGggYGtkYW1vbmRfYXBwbHlfc2NoZW1lc2AgYW5kIHRoZSBicm9hZGVyIGNvbnRleHQ6XG5cbioqQW5hbHl6aW5nIGBrZGFtb25kX2FwcGx5X3NjaGVtZXNgKipcblxuQWxyaWdodCwgdGltZSB0byBkaXZlIGludG8gYGtkYW1vbmRfYXBwbHlfc2NoZW1lc2AuICBNeSBmaXJzdCB0aG91Z2h0IGlzIGFsd2F5cyB0byBxdWlja2x5IGFzc2VzcyBpdHMgcHVycG9zZSBhbmQgcGxhY2Ugd2l0aGluIHRoZSBsYXJnZXIgc3lzdGVtLiBJcyBpdCB0aGUgY29yZSBlbmdpbmUsIGEgcGVyaXBoZXJhbCB0b29sLCBvciBhIHV0aWxpdHkgZnVuY3Rpb24/IFdoYXQgc2NoZW1lcyBhcmUgaW52b2x2ZWQ/IEdpdmVuIHRoZSBuYW1lLCBJJ20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgdGhhdCB0aGlzIGlzIHRoZSBmdW5jdGlvbiByZXNwb25zaWJsZSBmb3IgYXBwbHlpbmcgZGlmZmVyZW50IG9wZXJhdGlvbmFsIG1ldGhvZG9sb2dpZXMgb3IgcGVyaGFwcyBvcHRpbWl6YXRpb24gdGVjaG5pcXVlcyB3aXRoaW4gdGhlIGRhZW1vbi4gSSdsbCBuZWVkIHRvIGltbWVkaWF0ZWx5IGNvbnNpZGVyIHRoZSBwb3RlbnRpYWwgZm9yIGNvbmZsaWN0cyBiZXR3ZWVuIHRob3NlIG1ldGhvZG9sb2dpZXMsIGFuZCBhbHNvIGhvdyBlcnJvciBjb25kaXRpb25zIGFyZSBoYW5kbGVkLiBJdCdzIGxpa2VseSBpbnZvbHZlZCBpbiBhcHBseWluZyBzb21lIGZvcm0gb2Yga25vd2xlZGdlLWJhc2VkIG9wZXJhdGlvbmFsIHNjaGVtZXMuIEkgd29uZGVyIGlmIGl0IHVzZXMgYW4gaW5mZXJlbmNlIGVuZ2luZSwgb3IgaWYgaXQncyBiYXNlZCBvbiBoYXJkLWNvZGVkIHJ1bGVzPyBUaGUgc2NvcGUgaXMgdW5jbGVhciwgYnV0IEknbGwgYmVnaW4gYnkgYW5hbHl6aW5nIHRoZSBmdW5jdGlvbidzIGlucHV0cyBhbmQgb3V0cHV0cy4gSSdsbCBuZWVkIHRvIHRyYWNrIGhvdyBpdCBoYW5kbGVzIHNjaGVtZSBwcmlvcml0eS4gV2hhdCBhcmUgdGhlIGRlcGVuZGVuY2llcz8gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IGxvb2tpbmcgZm9yIHRoZSBwb2ludHMgd2hlcmUgZXJyb3JzIGFyZSBjYXVnaHQsIHdoZXJlIGxvZ2dpbmcgaGFwcGVucywgYW5kIHdoZXJlIGl0IG1ha2VzIGRlY2lzaW9ucyBhYm91dCB3aGljaCBzY2hlbWUgdG8gYXBwbHkgYW5kIGluIHdoYXQgb3JkZXIuIFRoZW4sIEknbGwgbW92ZSBvbiB0byBkaXNzZWN0aW5nIGhvdyBpdCBldmFsdWF0ZXMgdGhlIGVmZmVjdGl2ZW5lc3Mgb2YgdGhvc2Ugc2NoZW1lcyBhbmQgZW5zdXJlcyB0aGF0IHdlJ3JlIG1ha2luZyBmb3J3YXJkIHByb2dyZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MTkzLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTE6NTQ6MDEuOTY2NTUzMTU3WiIsIlNlcSI6NDgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM5ODQ1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi9jb3JlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzM5MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzM5MDpcXHRcXHRzdHJ1Y3QgZGFtb3MgKnM7XFxuMzM5MTpcXHRcXHRib29sIGhhc19zY2hlbWVzX3RvX2FwcGx5ID0gZmFsc2U7XFxuMzM5MjpcXHRcXHR1bnNpZ25lZCBsb25nIG1heF9yZWdpb25fc3o7XFxuMzM5MzpcXHRcXG4zMzk0OlxcdFxcdGRhbW9uX2Zvcl9lYWNoX3NjaGVtZShzLCBjKSB7XFxuMzM5NTpcXHRcXHRcXHRpZiAodGltZV9iZWZvcmUoYy1cXHUwMDNlcGFzc2VkX3NhbXBsZV9pbnRlcnZhbHMsIHMtXFx1MDAzZW5leHRfYXBwbHlfc2lzKSlcXG4zMzk2OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjMzOTc6XFx0XFxuMzM5ODpcXHRcXHRcXHRpZiAoIXMtXFx1MDAzZXdtYXJrcy5hY3RpdmF0ZWQpXFxuMzM5OTpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4zNDAwOlxcdFxcbjM0MDE6XFx0XFx0XFx0aGFzX3NjaGVtZXNfdG9fYXBwbHkgPSB0cnVlO1xcbjM0MDI6XFx0XFxuMzQwMzpcXHRcXHRcXHRkYW1vc19hZGp1c3RfcXVvdGEoYywgcyk7XFxuMzQwNDpcXHRcXHR9XFxuMzQwNTpcXHRcXG4zNDA2OlxcdFxcdGlmICghaGFzX3NjaGVtZXNfdG9fYXBwbHkpXFxuMzQwNzpcXHRcXHRcXHRyZXR1cm47XFxuMzQwODpcXHRcXG4zNDA5OlxcdFxcdG1heF9yZWdpb25fc3ogPSBkYW1vbl9yZWdpb25fc3pfbGltaXQoYyk7XFxuMzQxMDpcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZjLVxcdTAwM2V3YWxrX2NvbnRyb2xfbG9jayk7XFxuMzQxMTpcXHRcXHRkYW1vbl9mb3JfZWFjaF90YXJnZXQodCwgYykge1xcbjM0MTI6XFx0XFx0XFx0aWYgKGMtXFx1MDAzZW9wcy50YXJnZXRfdmFsaWQgXFx1MDAyNlxcdTAwMjYgYy1cXHUwMDNlb3BzLnRhcmdldF92YWxpZCh0KSA9PSBmYWxzZSkge1xcbjM0MTM6XFx0XFx0XFx0XFx0ZGFtb25fZm9yX2VhY2hfc2NoZW1lKHMsIGMpIHtcXG4zNDE0OlxcdFxcdFxcdFxcdFxcdGlmIChzLVxcdTAwM2VxdW90YS5jaGFyZ2VfdGFyZ2V0X2Zyb20gIT0gdClcXG4zNDE1OlxcdFxcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjM0MTY6XFx0XFx0XFx0XFx0XFx0cy1cXHUwMDNlcXVvdGEuY2hhcmdlX3RhcmdldF9mcm9tID0gTlVMTDtcXG4zNDE3OlxcdFxcdFxcdFxcdFxcdHMtXFx1MDAzZXF1b3RhLmNoYXJnZV9hZGRyX2Zyb20gPSAwO1xcbjM0MTg6XFx0XFx0XFx0XFx0fVxcbjM0MTk6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMzQyMDpcXHRcXHRcXHR9XFxuMzQyMTpcXHRcXHRcXHRkYW1vc19hcHBseV90YXJnZXQoYywgdCwgbWF4X3JlZ2lvbl9zeik7XFxuMzQyMjpcXHRcXHR9XFxuMzQyMzpcXHRcXG4zNDI0OlxcdFxcdGRhbW9uX2Zvcl9lYWNoX3NjaGVtZShzLCBjKSB7XFxuMzQyNTpcXHRcXHRcXHRpZiAodGltZV9iZWZvcmUoYy1cXHUwMDNlcGFzc2VkX3NhbXBsZV9pbnRlcnZhbHMsIHMtXFx1MDAzZW5leHRfYXBwbHlfc2lzKSlcXG4zNDI2OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjM0Mjc6XFx0XFx0XFx0ZGFtb3Nfd2Fsa19jb21wbGV0ZShjLCBzKTtcXG4zNDI4OlxcdFxcdFxcdGRhbW9zX3NldF9uZXh0X2FwcGx5X3NpcyhzLCBjKTtcXG4zNDI5OlxcdFxcdFxcdHMtXFx1MDAzZWxhc3RfYXBwbGllZCA9IE5VTEw7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDExOjU0OjAxLjk2Njk1NTcxN1oiLCJTZXEiOjQ5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyNjUxOTU1NDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYGRhbW9zX2FkanVzdF9xdW90YWAgRnVuY3Rpb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayBkb3duIHRoaXMgYGRhbW9zX2FkanVzdF9xdW90YWAgZnVuY3Rpb24uIEkgc2VlIGEgbmV3IGNvbmRpdGlvbmFsIGNoZWNrIGhhcyBiZWVuIGFkZGVkLCBzcGVjaWZpY2FsbHkgY2hlY2tpbmcgaWYgdGhlIHF1b3RhIGlzIGZ1bGwgdXNpbmcgYGRhbW9zX3F1b3RhX2lzX2Z1bGxgLiBUaGUgaW50ZXJlc3RpbmcgcGFydCBpcyB0aGF0IGlmIHRoZSBxdW90YSAqaXMqIGZ1bGwsIHRoZSBmdW5jdGlvbiBzaW1wbHkgcmV0dXJucy4gVGhpcyBtZWFucyB0aGF0IGlmIHRoZSBxdW90YSBpcyBmdWxsLCB0aGUgc2NvcmUgaGlzdG9ncmFtIHdvbid0IGdldCB1cGRhdGVkLCBhbmQgY3J1Y2lhbGx5LCBgcXVvdGEtXHUwMDNlbWluX3Njb3JlYCB3b24ndCBiZSB1cGRhdGVkLlxuXG5Ob3csIG15IGV4cGVydCBpbnR1aXRpb24gdGVsbHMgbWUgdG8gZGlnIGEgbGl0dGxlIGRlZXBlci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXM6IElzIGBxdW90YS1cdTAwM2VtaW5fc2NvcmVgIGV2ZW4gKnVzZWQqIHdoZW4gdGhlIHF1b3RhIGlzIGZ1bGw/IElmIGl0IGlzbid0LCB0aGVuIHRoaXMgZWFybHkgcmV0dXJuIG1pZ2h0IGJlIHBlcmZlY3RseSBmaW5lLCBldmVuIGFuIG9wdGltaXphdGlvbi4gQnV0IGlmIGBtaW5fc2NvcmVgICppcyogdXNlZCBldmVuIHdoZW4gdGhlIHF1b3RhIGlzIGZ1bGwsIHRoZW4gdGhlcmUncyBhIHBvdGVudGlhbCBsb2dpYyBmbGF3IGhlcmUgdGhhdCBuZWVkcyBpbnZlc3RpZ2F0aW9uLiBJIG5lZWQgdG8gc2VhcmNoIHRocm91Z2ggdGhlIGNvZGViYXNlIGZvciBhbGwgaW5zdGFuY2VzIHdoZXJlIGBtaW5fc2NvcmVgIGlzIHVzZWQgdG8gY2xhcmlmeSB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MTU1LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTk2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTE6NTQ6MDQuNjE4OTE0MDA2WiIsIlNlcSI6NTAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjgzNjA5ODIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWluX3Njb3JlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL2NvcmUuYz0yNDIyPXN0YXRpYyBib29sIGRhbW9zX3ZhbGlkX3RhcmdldChzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTI0MjktXFxubW0vZGFtb24vY29yZS5jOjI0MzA6XFx0cmV0dXJuIGMtXFx1MDAzZW9wcy5nZXRfc2NoZW1lX3Njb3JlKGMsIHIsIHMpIFxcdTAwM2U9IHMtXFx1MDAzZXF1b3RhLm1pbl9zY29yZTtcXG5tbS9kYW1vbi9jb3JlLmMtMjQzMS19XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MzMwND1zdGF0aWMgdm9pZCBkYW1vc19hZGp1c3RfcXVvdGEoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTMzNjctXFx0fVxcbm1tL2RhbW9uL2NvcmUuYzozMzY4OlxcdHF1b3RhLVxcdTAwM2VtaW5fc2NvcmUgPSBzY29yZTtcXG5tbS9kYW1vbi9jb3JlLmMtMzM2OS19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDExOjU0OjA1LjA0NzI3OTc5WiIsIlNlcSI6NTEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQ1MTQ0MTIxMzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBgcy1cdTAwM2VxdW90YS5taW5fc2NvcmVgIFZhcmlhYmxlKipcblxuUmlnaHQsIHNvIGBzLVx1MDAzZXF1b3RhLm1pbl9zY29yZWAuLi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGxpZmVjeWNsZS4gVGhlIG5vdGUgc2F5cyBpdCdzICpvbmx5KiByZWFkIGluIGBkYW1vc192YWxpZF90YXJnZXRgLCB3aGljaCBpcyBoZWxwZnVsLCBidXQgdGVsbHMgbWUgbm90aGluZyBhYm91dCAqaG93KiBpdCBnZXRzIGl0cyB2YWx1ZS4gU28sIEkgbmVlZCB0byB0cmFjZSBiYWNrLiBXaGVyZSBpcyBgcy1cdTAwM2VxdW90YWAgYWN0dWFsbHkgKmFsbG9jYXRlZCogYW5kICppbml0aWFsaXplZCo/IEdpdmVuIHRoZSBuYW1pbmcgY29udmVudGlvbiBhbmQgdGhlIGNvbnRleHQgb2YgdGhlIGNvZGUgYmFzZSwgSSBzdXNwZWN0IHRoZSBhbGxvY2F0aW9uL2luaXRpYWxpemF0aW9uIGhhcHBlbnMgaW4gYSBmdW5jdGlvbiByZWxhdGVkIHRvIGNyZWF0aW5nIGEgbmV3IHNjaGVtZS4gU29tZXRoaW5nIGxpa2UgYGRhbW9zX25ld19zY2hlbWVgIHNlZW1zIGEgbG9naWNhbCBwbGFjZSB0byBzdGFydC4gVGhhdCdzIHRoZSBmaXJzdCBwbGFjZSBJJ20gZ29pbmcgdG8gZGlnLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGBxdW90YWAgc3RydWN0dXJlIGlzIHBvcHVsYXRlZCwgYmVjYXVzZSB0aGF0J3Mgd2hhdCB3aWxsIGdpdmUgbWUgdGhlIGNvbnRleHQgSSBuZWVkIGFyb3VuZCB0aGUgbWVhbmluZyBhbmQgZXhwZWN0ZWQgYmVoYXZpb3Igb2YgYG1pbl9zY29yZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc4MzAsIk91dHB1dFRva2VucyI6MTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMTo1NDowOS41NjE2OTUzNDFaIiwiU2VxIjo1MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NzMzODY3NTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWluX3Njb3JlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvZ3B1L2RybS9zY2hlZHVsZXIvc2NoZWRfbWFpbi5jPTk1OT1kcm1fc2NoZWRfcGlja19iZXN0KHN0cnVjdCBkcm1fZ3B1X3NjaGVkdWxlciAqKnNjaGVkX2xpc3QsXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vc2NoZWR1bGVyL3NjaGVkX21haW4uYy05NjMtXFx0aW50IGk7XFxuZHJpdmVycy9ncHUvZHJtL3NjaGVkdWxlci9zY2hlZF9tYWluLmM6OTY0OlxcdHVuc2lnbmVkIGludCBtaW5fc2NvcmUgPSBVSU5UX01BWCwgbnVtX3Njb3JlO1xcbmRyaXZlcnMvZ3B1L2RybS9zY2hlZHVsZXIvc2NoZWRfbWFpbi5jLTk2NS1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9zY2hlZHVsZXIvc2NoZWRfbWFpbi5jLTk3NS1cXHRcXHRudW1fc2NvcmUgPSBhdG9taWNfcmVhZChzY2hlZC1cXHUwMDNlc2NvcmUpO1xcbmRyaXZlcnMvZ3B1L2RybS9zY2hlZHVsZXIvc2NoZWRfbWFpbi5jOjk3NjpcXHRcXHRpZiAobnVtX3Njb3JlIFxcdTAwM2MgbWluX3Njb3JlKSB7XFxuZHJpdmVycy9ncHUvZHJtL3NjaGVkdWxlci9zY2hlZF9tYWluLmM6OTc3OlxcdFxcdFxcdG1pbl9zY29yZSA9IG51bV9zY29yZTtcXG5kcml2ZXJzL2dwdS9kcm0vc2NoZWR1bGVyL3NjaGVkX21haW4uYy05NzgtXFx0XFx0XFx0cGlja2VkX3NjaGVkID0gc2NoZWQ7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg9Mjc2PXN0cnVjdCBkYW1vc19xdW90YSB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMzA0LVxcdC8qIEZvciBwcmlvcml0aXphdGlvbiAqL1xcbmluY2x1ZGUvbGludXgvZGFtb24uaDozMDU6XFx0dW5zaWduZWQgaW50IG1pbl9zY29yZTtcXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMzA2LVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTI0MjI9c3RhdGljIGJvb2wgZGFtb3NfdmFsaWRfdGFyZ2V0KHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjQyOS1cXG5tbS9kYW1vbi9jb3JlLmM6MjQzMDpcXHRyZXR1cm4gYy1cXHUwMDNlb3BzLmdldF9zY2hlbWVfc2NvcmUoYywgciwgcykgXFx1MDAzZT0gcy1cXHUwMDNlcXVvdGEubWluX3Njb3JlO1xcbm1tL2RhbW9uL2NvcmUuYy0yNDMxLX1cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0zMzA0PXN0YXRpYyB2b2lkIGRhbW9zX2FkanVzdF9xdW90YShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb3MgKnMpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzM2Ny1cXHR9XFxubW0vZGFtb24vY29yZS5jOjMzNjg6XFx0cXVvdGEtXFx1MDAzZW1pbl9zY29yZSA9IHNjb3JlO1xcbm1tL2RhbW9uL2NvcmUuYy0zMzY5LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTE6NTQ6MTEuMjM1MDg5MTE2WiIsIlNlcSI6NTMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIyNTA0ODMxMzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIGJyZWFrZG93biBvZiBteSB0aG91Z2h0IHByb2Nlc3MgcmVnYXJkaW5nIHRoZSBhbGxvY2F0aW9uIG9mIGBzdHJ1Y3QgZGFtb3NgIHdpdGhpbiB0aGUgRGFtb24gc3lzdGVtLlxuXG4qKkRpdmluZyBpbnRvIGBzdHJ1Y3QgZGFtb3NgIEFsbG9jYXRpb24gaW4gREFNT04qKlxuXG5BbHJpZ2h0LCBzbyB0aGUgZmlyc3QgdGhpbmcgSSdtIGRvaW5nIGlzIHRyeWluZyB0byB1bmRlcnN0YW5kIGhvdyBgc3RydWN0IGRhbW9zYOKAlHRoZSBjb3JlIGRhdGEgc3RydWN0dXJlIGZvciBEYW1vbuKAlGdldHMgYWxsb2NhdGVkLiBJIG5lZWQgdG8ga25vdzogSXMgaXQgc3RhdGljYWxseSBhbGxvY2F0ZWQ/IER5bmFtaWNhbGx5PyBXaGVyZSBleGFjdGx5IGluIG1lbW9yeSBpcyBpdCByZXNpZGluZywgYW5kIGhvdyBpcyBpdHMgbGlmZXRpbWUgbWFuYWdlZD8gVGhpcyBpcyBjcml0aWNhbCBmb3IgdW5kZXJzdGFuZGluZyBEYW1vbidzIG92ZXJhbGwgcGVyZm9ybWFuY2UgcHJvZmlsZSBhbmQgcG90ZW50aWFsIGJvdHRsZW5lY2tzLCBlc3BlY2lhbGx5IGFzIHRoZSBtb25pdG9yZWQgc3lzdGVtIHNjYWxlcy4gSXMgaXQgYSBnbG9iYWwgdmFyaWFibGUsIG9yIGFyZSB0aGVyZSBtdWx0aXBsZSBpbnN0YW5jZXMgY3JlYXRlZCBkZXBlbmRpbmcgb24gY29uZmlndXJhdGlvbj8gSWYgaXQncyBkeW5hbWljLCBob3cgYXJlIHRob3NlIGFsbG9jYXRpb25zIHRpZWQgaW50byB0aGUgdW5kZXJseWluZyBtZW1vcnkgbWFuYWdlbWVudCBzeXN0ZW0/IERvIHRoZXkgdXNlIGBrbWFsbG9jYCwgYHZtX2FsbG9jYCwgb3Igc29tZXRoaW5nIGVsc2U/IFVuZGVyc3RhbmRpbmcgdGhpcyB3aWxsIGxldCBtZSBldmFsdWF0ZSBwb3RlbnRpYWwgbWVtb3J5IGZyYWdtZW50YXRpb24gaXNzdWVzLCBjb250ZW50aW9uLCBhbmQgdGhlIGltcGFjdCBvZiB0aGUgYWxsb2NhdGlvbiBzdHJhdGVneSBvbiB0aGUgZ2FyYmFnZSBjb2xsZWN0aW9uLiBUaGVuIGl0IHdpbGwgYWxsb3cgbWUgdG8gbG9vayBkZWVwZXIsIEkgc2hvdWxkIGFsc28gc2VlIGhvdyB0aGUgaW5mb3JtYXRpb24gaW4gYHN0cnVjdCBkYW1vc2AgaXMgdXRpbGl6ZWQsIHNwZWNpZmljYWxseSBob3cgdGhlIHBvaW50ZXJzIGFuZCByZWZlcmVuY2VzIGl0IGNvbnRhaW5zIGFyZSB1c2VkIHdpdGhpbiB0aGUgZGFlbW9uIHRvIG1vbml0b3IgdGhlIG1lbW9yeS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODY0MCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDExOjU0OjEzLjQ4NTU3NDk2M1oiLCJTZXEiOjU0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU3MzAwNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb25fbmV3X3NjaGVtZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9jb3JlLmM9NzM3PXN0YXRpYyBzdHJ1Y3QgZGFtb3NfcXVvdGEgKmRhbW9zX3F1b3RhX2luaXQoc3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSlcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy03NDktXFxubW0vZGFtb24vY29yZS5jOjc1MDpzdHJ1Y3QgZGFtb3MgKmRhbW9uX25ld19zY2hlbWUoc3RydWN0IGRhbW9zX2FjY2Vzc19wYXR0ZXJuICpwYXR0ZXJuLFxcbm1tL2RhbW9uL2NvcmUuYy03NTEtXFx0XFx0XFx0ZW51bSBkYW1vc19hY3Rpb24gYWN0aW9uLFxcbi0tXFxubW0vZGFtb24vY29yZS5jPTE1NzI9c3RhdGljIGludCBkYW1vbl9jb21taXRfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpkc3QsIHN0cnVjdCBkYW1vbl9jdHggKnNyYylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xNTkwLVxcdFxcdFxcdGNvbnRpbnVlO1xcbm1tL2RhbW9uL2NvcmUuYzoxNTkxOlxcdFxcdG5ld19zY2hlbWUgPSBkYW1vbl9uZXdfc2NoZW1lKFxcdTAwMjZzcmNfc2NoZW1lLVxcdTAwM2VwYXR0ZXJuLFxcbm1tL2RhbW9uL2NvcmUuYy0xNTkyLVxcdFxcdFxcdFxcdHNyY19zY2hlbWUtXFx1MDAzZWFjdGlvbixcXG4tLVxcbm1tL2RhbW9uL2xydV9zb3J0LmM9MTg4PXN0YXRpYyBzdHJ1Y3QgZGFtb3MgKmRhbW9uX2xydV9zb3J0X25ld19zY2hlbWUoXFxuLS1cXG5tbS9kYW1vbi9scnVfc29ydC5jLTE5NS1cXG5tbS9kYW1vbi9scnVfc29ydC5jOjE5NjpcXHRyZXR1cm4gZGFtb25fbmV3X3NjaGVtZShcXG5tbS9kYW1vbi9scnVfc29ydC5jLTE5Ny1cXHRcXHRcXHQvKiBmaW5kIHRoZSBwYXR0ZXJuLCBhbmQgKi9cXG4tLVxcbm1tL2RhbW9uL3JlY2xhaW0uYz0xNjc9c3RhdGljIHN0cnVjdCBkYW1vcyAqZGFtb25fcmVjbGFpbV9uZXdfc2NoZW1lKHVuc2lnbmVkIGxvbmcgYWdncl9pbnRlcnZhbClcXG4tLVxcbm1tL2RhbW9uL3JlY2xhaW0uYy0xODAtXFxubW0vZGFtb24vcmVjbGFpbS5jOjE4MTpcXHRyZXR1cm4gZGFtb25fbmV3X3NjaGVtZShcXG5tbS9kYW1vbi9yZWNsYWltLmMtMTgyLVxcdFxcdFxcdFxcdTAwMjZwYXR0ZXJuLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTI5ODc9c3RhdGljIHN0cnVjdCBkYW1vcyAqZGFtb25fc3lzZnNfbWtfc2NoZW1lKFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTMwMjQtXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjMwMjU6XFx0c2NoZW1lID0gZGFtb25fbmV3X3NjaGVtZShcXHUwMDI2cGF0dGVybiwgc3lzZnNfc2NoZW1lLVxcdTAwM2VhY3Rpb24sXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTMwMjYtXFx0XFx0XFx0c3lzZnNfc2NoZW1lLVxcdTAwM2VhcHBseV9pbnRlcnZhbF91cywgXFx1MDAyNnF1b3RhLCBcXHUwMDI2d21hcmtzLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMTo1NDoxMy41MzEzMTE5NTNaIiwiU2VxIjo1NSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTU1OTIwODM2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSBpbW1lZGlhdGUgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkluaXRpYWwgQXNzZXNzbWVudDogQ29kZSBJbnNwZWN0aW9uKipcblxuT2theSwgdGltZSB0byBkaXZlIGluLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gdHdvIHNwZWNpZmljIGVsZW1lbnRzOiBgZGFtb25fbmV3X3NjaGVtZWAgYW5kIGBkYW1vc19xdW90YV9pbml0YC4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IHJ1bm5pbmcgdGhyb3VnaCB0aGVzZSwgd2l0aCBteSBzcGVjaWFsaXN0IGtub3dsZWRnZSBJIHdpbGwgdHJ5IHRvIGRldGVybWluZSB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlbSwgYW5kIHVuZGVyc3RhbmQgaG93IHRoZXkgd29yaywgYXMgdGhlc2UgbWlnaHQgcmVsYXRlIHRvIGEgbmV3IGRldmVsb3BtZW50IHBsYW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk0ODksIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMTo1NDoxNS4wOTA1MjMxMTlaIiwiU2VxIjo1NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU3OTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2RhbW9uL2NvcmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3MzUsXG4gIFwiTGluZUNvdW50XCI6IDM1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA3MzU6XFx0XFxuIDczNjpcXHQvKiBpbml0aWFsaXplIGZpZWxkcyBvZiBAcXVvdGEgdGhhdCBub3JtYWxseSBBUEkgdXNlcnMgd291bGRuJ3Qgc2V0ICovXFxuIDczNzpcXHRzdGF0aWMgc3RydWN0IGRhbW9zX3F1b3RhICpkYW1vc19xdW90YV9pbml0KHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEpXFxuIDczODpcXHR7XFxuIDczOTpcXHRcXHRxdW90YS1cXHUwMDNlZXN6ID0gMDtcXG4gNzQwOlxcdFxcdHF1b3RhLVxcdTAwM2V0b3RhbF9jaGFyZ2VkX3N6ID0gMDtcXG4gNzQxOlxcdFxcdHF1b3RhLVxcdTAwM2V0b3RhbF9jaGFyZ2VkX25zID0gMDtcXG4gNzQyOlxcdFxcdHF1b3RhLVxcdTAwM2VjaGFyZ2VkX3N6ID0gMDtcXG4gNzQzOlxcdFxcdHF1b3RhLVxcdTAwM2VjaGFyZ2VkX2Zyb20gPSAwO1xcbiA3NDQ6XFx0XFx0cXVvdGEtXFx1MDAzZWNoYXJnZV90YXJnZXRfZnJvbSA9IE5VTEw7XFxuIDc0NTpcXHRcXHRxdW90YS1cXHUwMDNlY2hhcmdlX2FkZHJfZnJvbSA9IDA7XFxuIDc0NjpcXHRcXHRxdW90YS1cXHUwMDNlZXN6X2JwID0gMDtcXG4gNzQ3OlxcdFxcdHJldHVybiBxdW90YTtcXG4gNzQ4OlxcdH1cXG4gNzQ5OlxcdFxcbiA3NTA6XFx0c3RydWN0IGRhbW9zICpkYW1vbl9uZXdfc2NoZW1lKHN0cnVjdCBkYW1vc19hY2Nlc3NfcGF0dGVybiAqcGF0dGVybixcXG4gNzUxOlxcdFxcdFxcdFxcdGVudW0gZGFtb3NfYWN0aW9uIGFjdGlvbixcXG4gNzUyOlxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgYXBwbHlfaW50ZXJ2YWxfdXMsXFxuIDc1MzpcXHRcXHRcXHRcXHRzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhLFxcbiA3NTQ6XFx0XFx0XFx0XFx0c3RydWN0IGRhbW9zX3dhdGVybWFya3MgKndtYXJrcyxcXG4gNzU1OlxcdFxcdFxcdFxcdGludCB0YXJnZXRfbmlkKVxcbiA3NTY6XFx0e1xcbiA3NTc6XFx0XFx0c3RydWN0IGRhbW9zICpzY2hlbWU7XFxuIDc1ODpcXHRcXG4gNzU5OlxcdFxcdHNjaGVtZSA9IGttYWxsb2Nfb2JqKCpzY2hlbWUpO1xcbiA3NjA6XFx0XFx0aWYgKCFzY2hlbWUpXFxuIDc2MTpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gNzYyOlxcdFxcdHNjaGVtZS1cXHUwMDNlcGF0dGVybiA9ICpwYXR0ZXJuO1xcbiA3NjM6XFx0XFx0c2NoZW1lLVxcdTAwM2VhY3Rpb24gPSBhY3Rpb247XFxuIDc2NDpcXHRcXHRzY2hlbWUtXFx1MDAzZWFwcGx5X2ludGVydmFsX3VzID0gYXBwbHlfaW50ZXJ2YWxfdXM7XFxuIDc2NTpcXHRcXHQvKlxcbiA3NjY6XFx0XFx0ICogbmV4dF9hcHBseV9zaXMgd2lsbCBiZSBzZXQgd2hlbiBrZGFtb25kIHN0YXJ0cy4gIFdoaWxlIGtkYW1vbmQgaXNcXG4gNzY3OlxcdFxcdCAqIHJ1bm5pbmcsIGl0IHdpbGwgYWxzbyB1cGRhdGVkIHdoZW4gaXQgaXMgYWRkZWQgdG8gdGhlIERBTU9OIGNvbnRleHQsXFxuIDc2ODpcXHRcXHQgKiBvciBkYW1vbl9hdHRycyBhcmUgdXBkYXRlZC5cXG4gNzY5OlxcdFxcdCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMTo1NDoxNS4wOTA2ODMzMDlaIiwiU2VxIjo1NywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjMxNTYwNzM3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBIE1vbWVudCBvZiBEb3VidCwgVGhlbiBhIERlZXAgRGl2ZSBpbnRvIENvZGUqKlxuXG5Pa2F5LCBob2xkIG9uIGEgc2Vjb25kISBMaW5lIDc1OSBqdXN0IGp1bXBlZCBvdXQgYXQgbWU6IGBzY2hlbWUgPSBrbWFsbG9jX29iaigqc2NoZW1lKTtgIFdoeSBhcmUgd2UgYWxsb2NhdGluZyBhIG5ldyBgc2NoZW1lYCBvYmplY3QsIGFuZCB3aGF0IGV4YWN0bHkgaXMgZ29pbmcgb24gaGVyZT8gVGhlIGZhY3QgdGhhdCB3ZSdyZSByZWFsbG9jYXRpbmcsIHN1Z2dlc3RzIHRoZSBvcmlnaW5hbCBvYmplY3QncyBkYXRhIGFyZSBsb3N0LCBhbmQgaXQncyBub3QgaW1tZWRpYXRlbHkgY2xlYXIgd2hhdCdzIGhhcHBlbmluZyB0byB0aGUgY3VycmVudCB2YWx1ZSBvZiBgc2NoZW1lLVx1MDAzZXF1b3RhYC4gVGhhdOKAmXMgYSBjcml0aWNhbCBwaWVjZSBvZiBpbmZvcm1hdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBiZXR0ZXIuIE9rYXksIEknbSBoZWFkaW5nIHRvIGBtbS9kYW1vbi9jb3JlLmNgLCBzcGVjaWZpY2FsbHkgbGluZXMgNzY1IHRocm91Z2ggODAwLiBMZXQncyBzZWUgd2hhdCB0aGUgc3Vic2VxdWVudCBjb2RlIGRvZXMgd2l0aCB0aGF0IHN0cnVjdHVyZS4gSeKAmW0gaG9waW5nIGl04oCZcyBhbGwgY3J5c3RhbCBjbGVhciBhZnRlciBsb29raW5nIGF0IHRob3NlIGxpbmVzLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGlzIHJlYWxsb2NhdGlvbiBpc24ndCBnb2luZyB0byBpbnRyb2R1Y2UgYSBzdWJ0bGUgbWVtb3J5IGxlYWsgb3IsIGV2ZW4gd29yc2UsIGRhdGEgY29ycnVwdGlvbiByZWxhdGVkIHRvIHF1b3Rhcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAxNjgsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDExOjU0OjE3LjQwNjI5MzExNVoiLCJTZXEiOjU4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjU0MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDc2NSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDc2NTpcXHRcXHQvKlxcbiA3NjY6XFx0XFx0ICogbmV4dF9hcHBseV9zaXMgd2lsbCBiZSBzZXQgd2hlbiBrZGFtb25kIHN0YXJ0cy4gIFdoaWxlIGtkYW1vbmQgaXNcXG4gNzY3OlxcdFxcdCAqIHJ1bm5pbmcsIGl0IHdpbGwgYWxzbyB1cGRhdGVkIHdoZW4gaXQgaXMgYWRkZWQgdG8gdGhlIERBTU9OIGNvbnRleHQsXFxuIDc2ODpcXHRcXHQgKiBvciBkYW1vbl9hdHRycyBhcmUgdXBkYXRlZC5cXG4gNzY5OlxcdFxcdCAqL1xcbiA3NzA6XFx0XFx0c2NoZW1lLVxcdTAwM2VuZXh0X2FwcGx5X3NpcyA9IDA7XFxuIDc3MTpcXHRcXHRzY2hlbWUtXFx1MDAzZXdhbGtfY29tcGxldGVkID0gZmFsc2U7XFxuIDc3MjpcXHRcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2c2NoZW1lLVxcdTAwM2Vjb3JlX2ZpbHRlcnMpO1xcbiA3NzM6XFx0XFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNnNjaGVtZS1cXHUwMDNlb3BzX2ZpbHRlcnMpO1xcbiA3NzQ6XFx0XFx0c2NoZW1lLVxcdTAwM2VzdGF0ID0gKHN0cnVjdCBkYW1vc19zdGF0KXt9O1xcbiA3NzU6XFx0XFx0c2NoZW1lLVxcdTAwM2VtYXhfbnJfc25hcHNob3RzID0gMDtcXG4gNzc2OlxcdFxcdHNjaGVtZS1cXHUwMDNlbGFzdF9hcHBsaWVkID0gTlVMTDtcXG4gNzc3OlxcdFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZzY2hlbWUtXFx1MDAzZWxpc3QpO1xcbiA3Nzg6XFx0XFxuIDc3OTpcXHRcXHRzY2hlbWUtXFx1MDAzZXF1b3RhID0gKihkYW1vc19xdW90YV9pbml0KHF1b3RhKSk7XFxuIDc4MDpcXHRcXHQvKiBxdW90YS5nb2FscyBzaG91bGQgYmUgc2VwYXJhdGVseSBzZXQgYnkgY2FsbGVyICovXFxuIDc4MTpcXHRcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2c2NoZW1lLVxcdTAwM2VxdW90YS5nb2Fscyk7XFxuIDc4MjpcXHRcXG4gNzgzOlxcdFxcdHNjaGVtZS1cXHUwMDNld21hcmtzID0gKndtYXJrcztcXG4gNzg0OlxcdFxcdHNjaGVtZS1cXHUwMDNld21hcmtzLmFjdGl2YXRlZCA9IHRydWU7XFxuIDc4NTpcXHRcXG4gNzg2OlxcdFxcdHNjaGVtZS1cXHUwMDNlbWlncmF0ZV9kZXN0cyA9IChzdHJ1Y3QgZGFtb3NfbWlncmF0ZV9kZXN0cyl7fTtcXG4gNzg3OlxcdFxcdHNjaGVtZS1cXHUwMDNldGFyZ2V0X25pZCA9IHRhcmdldF9uaWQ7XFxuIDc4ODpcXHRcXG4gNzg5OlxcdFxcdHJldHVybiBzY2hlbWU7XFxuIDc5MDpcXHR9XFxuIDc5MTpcXHRcXG4gNzkyOlxcdHN0YXRpYyB2b2lkIGRhbW9zX3NldF9uZXh0X2FwcGx5X3NpcyhzdHJ1Y3QgZGFtb3MgKnMsIHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG4gNzkzOlxcdHtcXG4gNzk0OlxcdFxcdHVuc2lnbmVkIGxvbmcgc2FtcGxlX2ludGVydmFsID0gY3R4LVxcdTAwM2VhdHRycy5zYW1wbGVfaW50ZXJ2YWwgP1xcbiA3OTU6XFx0XFx0XFx0Y3R4LVxcdTAwM2VhdHRycy5zYW1wbGVfaW50ZXJ2YWwgOiAxO1xcbiA3OTY6XFx0XFx0dW5zaWduZWQgbG9uZyBhcHBseV9pbnRlcnZhbCA9IHMtXFx1MDAzZWFwcGx5X2ludGVydmFsX3VzID9cXG4gNzk3OlxcdFxcdFxcdHMtXFx1MDAzZWFwcGx5X2ludGVydmFsX3VzIDogY3R4LVxcdTAwM2VhdHRycy5hZ2dyX2ludGVydmFsO1xcbiA3OTg6XFx0XFxuIDc5OTpcXHRcXHRzLVxcdTAwM2VuZXh0X2FwcGx5X3NpcyA9IGN0eC1cXHUwMDNlcGFzc2VkX3NhbXBsZV9pbnRlcnZhbHMgK1xcbiA4MDA6XFx0XFx0XFx0YXBwbHlfaW50ZXJ2YWwgLyBzYW1wbGVfaW50ZXJ2YWw7XFxuIDgwMTpcXHR9XFxuIDgwMjpcXHRcXG4gODAzOlxcdHZvaWQgZGFtb25fYWRkX3NjaGVtZShzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vcyAqcylcXG4gODA0OlxcdHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTE6NTQ6MTcuNDA2NDYwNTY1WiIsIlNlcSI6NTksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQ2MzI1NDAyMTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgZGFtb3NfcXVvdGFfaW5pdGAgRnVuY3Rpb24gYW5kIGl0cyBVc2UqKlxuXG5Pa2F5LCBob2xkIG9uIGEgbWludXRlLiBMZXQgbWUgZm9jdXMgb24gdGhpcyBgZGFtb3NfcXVvdGFfaW5pdGAgZnVuY3Rpb24uIEl0IHNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIGluaXRpYWxpemluZyB0aGUgZmllbGRzIG9mIGEgYGRhbW9zX3F1b3RhYCBzdHJ1Y3R1cmUgdG8gdGhlaXIgZGVmYXVsdCB2YWx1ZXM6IHplcm9pbmcgb3V0IHRoZSBzaXplIGFuZCB0aW1pbmcgcmVsYXRlZCB2YXJpYWJsZXMsIGFsb25nIHdpdGggdGhlIHBvaW50ZXJzLiAgTm93IEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIHF1b3RhIHN0cnVjdHVyZSBpcyBhY3R1YWxseSAqdXNlZCouIFdoZXJlIGlzIHRoaXMgYHF1b3RhYCB2YXJpYWJsZSBiZWluZyBpbml0aWFsaXplZCBhbmQgcGFzc2VkIGFyb3VuZD9cblxuVGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHRyYWNlIHdoZXJlIGBkYW1vbl9uZXdfc2NoZW1lYCBpcyBiZWluZyBjYWxsZWQsIGFzIHRoZSBgcXVvdGFgIGFyZ3VtZW50IG9mIGBkYW1vc19xdW90YV9pbml0YCBpcyBwYXNzZWQgdG8gYGRhbW9uX25ld19zY2hlbWVgXG5cbkxvb2tpbmcgYXQgdGhlIGNhbGwgc2l0ZXMsIEkgc2VlIHR3bzogYGRhbW9uX2NvbW1pdF9zY2hlbWVzYCBhbmQgYGRhbW9uX2xydV9zb3J0X25ld19zY2hlbWVgLiBJbiB0aGUgZmlyc3QgY2FzZSwgYHNyY19zY2hlbWUtXHUwMDNlcXVvdGFgIGlzIHBhc3NlZCwgc28gSSBuZWVkIHRvIHRyYWNrIHRoZSBvcmlnaW4gb2YgdGhhdC4gVGhlIG90aGVyIGNhc2UgaXMgdGhyb3VnaCBgZGFtb25fbHJ1X3NvcnRfbmV3X3NjaGVtZWAuIE9rYXksIHNvIGxldCdzIHNlZSB3aGF0IGlzIGhhcHBlbmluZyBpbnNpZGUgYGRhbW9uX2xydV9zb3J0X25ld19zY2hlbWVgIG5leHQuIFRoaXMgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgaG93IHRoaXMgcXVvdGEgaXMgYmVpbmcgc2V0IHVwIGluIHRoZSBiaWdnZXIgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTExMDksIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMTo1NDoyMi4wMzkwMDMxODZaIiwiU2VxIjo2MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODM5NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vbHJ1X3NvcnQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxODUsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxODU6XFx0c3RhdGljIHN0cnVjdCBkYW1vbl9jdHggKmN0eDtcXG4gMTg2OlxcdHN0YXRpYyBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0YXJnZXQ7XFxuIDE4NzpcXHRcXG4gMTg4OlxcdHN0YXRpYyBzdHJ1Y3QgZGFtb3MgKmRhbW9uX2xydV9zb3J0X25ld19zY2hlbWUoXFxuIDE4OTpcXHRcXHRcXHRzdHJ1Y3QgZGFtb3NfYWNjZXNzX3BhdHRlcm4gKnBhdHRlcm4sIGVudW0gZGFtb3NfYWN0aW9uIGFjdGlvbilcXG4gMTkwOlxcdHtcXG4gMTkxOlxcdFxcdHN0cnVjdCBkYW1vc19xdW90YSBxdW90YSA9IGRhbW9uX2xydV9zb3J0X3F1b3RhO1xcbiAxOTI6XFx0XFxuIDE5MzpcXHRcXHQvKiBVc2UgaGFsZiBvZiB0b3RhbCBxdW90YSBmb3IgaG90L2NvbGQgcGFnZXMgc29ydGluZyAqL1xcbiAxOTQ6XFx0XFx0cXVvdGEubXMgPSBxdW90YS5tcyAvIDI7XFxuIDE5NTpcXHRcXG4gMTk2OlxcdFxcdHJldHVybiBkYW1vbl9uZXdfc2NoZW1lKFxcbiAxOTc6XFx0XFx0XFx0XFx0LyogZmluZCB0aGUgcGF0dGVybiwgYW5kICovXFxuIDE5ODpcXHRcXHRcXHRcXHRwYXR0ZXJuLFxcbiAxOTk6XFx0XFx0XFx0XFx0LyogKGRlKXByaW9yaXRpemUgb24gTFJVLWxpc3RzICovXFxuIDIwMDpcXHRcXHRcXHRcXHRhY3Rpb24sXFxuIDIwMTpcXHRcXHRcXHRcXHQvKiBmb3IgZWFjaCBhZ2dyZWdhdGlvbiBpbnRlcnZhbCAqL1xcbiAyMDI6XFx0XFx0XFx0XFx0MCxcXG4gMjAzOlxcdFxcdFxcdFxcdC8qIHVuZGVyIHRoZSBxdW90YS4gKi9cXG4gMjA0OlxcdFxcdFxcdFxcdFxcdTAwMjZxdW90YSxcXG4gMjA1OlxcdFxcdFxcdFxcdC8qIChEZSlhY3RpdmF0ZSB0aGlzIGFjY29yZGluZyB0byB0aGUgd2F0ZXJtYXJrcy4gKi9cXG4gMjA2OlxcdFxcdFxcdFxcdFxcdTAwMjZkYW1vbl9scnVfc29ydF93bWFya3MsXFxuIDIwNzpcXHRcXHRcXHRcXHROVU1BX05PX05PREUpO1xcbiAyMDg6XFx0fVxcbiAyMDk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDExOjU0OjIyLjAzOTA4OTMyNloiLCJTZXEiOjYxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyNzkwODAxMDk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgSSBkZWx2ZSBpbnRvIHRoaXMgY29kZTpcblxuKipBbmFseXppbmcgREFNT04ncyBNZW1vcnkgUmVjbGFtYXRpb24gUXVvdGEqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGhvdyBEQU1PTiBoYW5kbGVzIGl0cyBtZW1vcnkgcmVjbGFtYXRpb24gcXVvdGFzLiBJdCBzZWVtcyBsaWtlIGEgZmV3IGtleSB2YXJpYWJsZXMgYXJlIGF0IHBsYXkgaGVyZS4gRmlyc3QsIGluIGBkYW1vbl9scnVfc29ydF9xdW90YWAsIEkgc2VlIGEgZ2xvYmFsIHZhcmlhYmxlLCBpbml0aWFsaXplZCB0byB6ZXJvLiBUaGF0J3MgZ29vZCB0byBrbm93IOKAkyBpdCBzZXRzIGEgYmFzZWxpbmUsIHByZXN1bWFibHkgZm9yIHRyYWNraW5nIHNvbWV0aGluZyByZWxhdGVkIHRvIExSVSBzb3J0aW5nIGFuZCBxdW90YSBtYW5hZ2VtZW50LiBUaGVuLCBsb29raW5nIGF0IGBkYW1vbl9yZWNsYWltX25ld19zY2hlbWVgLCBJIGZpbmQgYW5vdGhlciBvbmU6IGBkYW1vbl9yZWNsYWltX3F1b3RhYCwgYWxzbyBhIHN0YXRpYyBnbG9iYWwuIFNvLCB3ZSd2ZSBnb3QgYXQgbGVhc3QgdHdvIHN0YXRpYyBnbG9iYWwgdmFyaWFibGVzIGhlcmUgaGFuZGxpbmcgcXVvdGEgbWVjaGFuaXNtcywgd2hpY2ggaXMgdHlwaWNhbCBmb3IgcGVyZm9ybWFuY2UtY3JpdGljYWwgb3BlcmF0aW9ucy4gTGV0J3MgZGlnIGRlZXBlcjsgdG8gYmUgdGhvcm91Z2gsIEkgc2hvdWxkIG5vdyBtb3ZlIG9uIGFuZCBjaGVjayB0aGUgYGRhbW9uX3N5c2ZzX21rX3NjaGVtZWAgZnVuY3Rpb24g4oCTIHRoYXQncyBvZnRlbiB3aGVyZSB0aGUga25vYnMgZ2V0IHR1cm5lZCwgc28gdGhhdCdzIG15IG5leHQgc3RvcC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIwMDksIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDExOjU0OjI0LjgyOTg5MzAxNFoiLCJTZXEiOjYyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjUxMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMwMTUsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjMwMTU6XFx0XFx0XFx0LmZhaWxfY2hhcmdlX2Rlbm9tID0gc3lzZnNfcXVvdGFzLVxcdTAwM2VmYWlsX2NoYXJnZV9kZW5vbSxcXG4zMDE2OlxcdFxcdH07XFxuMzAxNzpcXHRcXHRzdHJ1Y3QgZGFtb3Nfd2F0ZXJtYXJrcyB3bWFya3MgPSB7XFxuMzAxODpcXHRcXHRcXHQubWV0cmljID0gc3lzZnNfd21hcmtzLVxcdTAwM2VtZXRyaWMsXFxuMzAxOTpcXHRcXHRcXHQuaW50ZXJ2YWwgPSBzeXNmc193bWFya3MtXFx1MDAzZWludGVydmFsX3VzLFxcbjMwMjA6XFx0XFx0XFx0LmhpZ2ggPSBzeXNmc193bWFya3MtXFx1MDAzZWhpZ2gsXFxuMzAyMTpcXHRcXHRcXHQubWlkID0gc3lzZnNfd21hcmtzLVxcdTAwM2VtaWQsXFxuMzAyMjpcXHRcXHRcXHQubG93ID0gc3lzZnNfd21hcmtzLVxcdTAwM2Vsb3csXFxuMzAyMzpcXHRcXHR9O1xcbjMwMjQ6XFx0XFxuMzAyNTpcXHRcXHRzY2hlbWUgPSBkYW1vbl9uZXdfc2NoZW1lKFxcdTAwMjZwYXR0ZXJuLCBzeXNmc19zY2hlbWUtXFx1MDAzZWFjdGlvbixcXG4zMDI2OlxcdFxcdFxcdFxcdHN5c2ZzX3NjaGVtZS1cXHUwMDNlYXBwbHlfaW50ZXJ2YWxfdXMsIFxcdTAwMjZxdW90YSwgXFx1MDAyNndtYXJrcyxcXG4zMDI3OlxcdFxcdFxcdFxcdHN5c2ZzX3NjaGVtZS1cXHUwMDNldGFyZ2V0X25pZCk7XFxuMzAyODpcXHRcXHRpZiAoIXNjaGVtZSlcXG4zMDI5OlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbjMwMzA6XFx0XFxuMzAzMTpcXHRcXHRlcnIgPSBkYW1vc19zeXNmc19hZGRfcXVvdGFfc2NvcmUoc3lzZnNfcXVvdGFzLVxcdTAwM2Vnb2FscywgXFx1MDAyNnNjaGVtZS1cXHUwMDNlcXVvdGEpO1xcbjMwMzI6XFx0XFx0aWYgKGVycikge1xcbjMwMzM6XFx0XFx0XFx0ZGFtb25fZGVzdHJveV9zY2hlbWUoc2NoZW1lKTtcXG4zMDM0OlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbjMwMzU6XFx0XFx0fVxcbjMwMzY6XFx0XFxuMzAzNzpcXHRcXHRlcnIgPSBkYW1vbl9zeXNmc19hZGRfc2NoZW1lX2ZpbHRlcnMoc2NoZW1lLCBzeXNmc19zY2hlbWUtXFx1MDAzZWNvcmVfZmlsdGVycyk7XFxuMzAzODpcXHRcXHRpZiAoZXJyKSB7XFxuMzAzOTpcXHRcXHRcXHRkYW1vbl9kZXN0cm95X3NjaGVtZShzY2hlbWUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMTo1NDoyNC44MzAwMzUzNzRaIiwiU2VxIjo2MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6ODQ3ODYyMjY1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBEQU1PTidzIFF1b3RhIEhhbmRsaW5nKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJbiBgZGFtb25fc3lzZnNfbWtfc2NoZW1lYCwgSSBzZWUgYHN0cnVjdCBkYW1vc19xdW90YSBxdW90YSA9IHsgLi4uIH07YCBiZWluZyBpbml0aWFsaXplZCB3aXRoIGRlc2lnbmF0ZWQgaW5pdGlhbGl6ZXJzLiBUaGlzIGlzIHByZXR0eSBzdGFuZGFyZCwgYnV0IHRoZSBpbXBvcnRhbnQgYml0IGlzIHRoYXQgYW55IHVuc3BlY2lmaWVkIGZpZWxkcyBhcmUgemVyb2VkIG91dC4gVGhhdCAqc2hvdWxkKiBpbmNsdWRlIGBtaW5fc2NvcmVgIGFuZCBwYWRkaW5nLiBOb3csIGhhbmcgb24gYSBzZWNvbmQuLi4gd2hhdCBhYm91dCBgZGFtb3NfcXVvdGFfaW5pdGA/IEkgbmVlZCB0byBrZWVwIHRoYXQgZnVuY3Rpb24gaW4gbWluZCwgYXMgaXQgY291bGQgYmUgaW1wb3J0YW50LlxuXG5SaWdodCwgbG9va2luZyBmdXJ0aGVyLCBpbiBgZGFtb25fbmV3X3NjaGVtZWAsIGl0IGFwcGVhcnMgbGlrZSB0aGlzIGlzIHdoYXQncyBoYXBwZW5pbmc6XG5gc2NoZW1lID0ga21hbGxvY19vYmooKnNjaGVtZSk7YFxuYHNjaGVtZS1cdTAwM2VxdW90YSA9ICooZGFtb3NfcXVvdGFfaW5pdChxdW90YSkpO2BcblNvIHdlIGFyZSBhc3NpZ25pbmcgdGhlIHJlc3VsdCBvZiBgZGFtb3NfcXVvdGFfaW5pdGAgdG8gdGhlIGFsbG9jYXRlZCBzY2hlbWUuXG5cbk5vdywgSSdtIGdldHRpbmcgYSBsaXR0bGUgY29uY2VybmVkLiBJZiBgZGFtb3NfcXVvdGFfaXNfZnVsbGAgcmV0dXJucyB0cnVlLCBpcyBgbWluX3Njb3JlYCBldmVuICpyZWFkKiBhbnl3aGVyZT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdyBoZXJlLiBXaGVyZSBkb2VzIGV4ZWN1dGlvbiBnbyBpZiBgZGFtb3NfcXVvdGFfaXNfZnVsbGAgaXMgdHJ1ZT8gSSBuZWVkIHRvIHRyYWNrIHRoaXMgZG93bi5cblxuTGV0J3MgbG9vayBhdCBga2RhbW9uZF9hcHBseV9zY2hlbWVzYCBhbmQgZm9sbG93IHRoZSBleGVjdXRpb24gZmxvdy4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgcGFyc2UgdGhpcyBhbmQgZm9jdXMgb24gdGhlIGltcG9ydGFudCBwYXJ0cy5cblxuT2theSwgaGVyZSdzIHdoYXQncyBoYXBwZW5pbmc6IFdlIGl0ZXJhdGUgdGhyb3VnaCB0aGUgc2NoZW1lcy4gSWYgYHRpbWVfYmVmb3JlKGMtXHUwMDNlcGFzc2VkX3NhbXBsZV9pbnRlcnZhbHMsIHMtXHUwMDNlbmV4dF9hcHBseV9zaXMpYCBpcyB0cnVlLCB3ZSBgY29udGludWVgLiBJZiBgIXMtXHUwMDNld21hcmtzLmFjdGl2YXRlZGAgd2UgYGNvbnRpbnVlYC4gU28sIGlmIHRoZSBzY2hlbWUgaGFzICpwYXNzZWQqIHRoZSBzYW1wbGluZyBpbnRlcnZhbCwgYW5kIGlzIGBhY3RpdmF0ZWRgIHRoZW4gaXQncyBlbGlnaWJsZSB0byBhcHBseS5cbklmIHRoZXJlIGFyZSBzY2hlbWVzIHRvIGFwcGx5LCB3ZSBncmFiIHRoZSBtYXggcmVnaW9uIHNpemUgZnJvbSBgZGFtb25fcmVnaW9uX3N6X2xpbWl0KGMpYC5cblxuVGhlbiwgd2UgbG9jayB0aGUgYHdhbGtfY29udHJvbF9sb2NrYC4gQWZ0ZXIgdGhhdCwgd2UgZ28gdGhyb3VnaCB0aGUgdGFyZ2V0cy5cblxuSW5zaWRlIHRoZSB0YXJnZXQgbG9vcCwgdGhlcmUncyBhIGNoZWNrOiBgaWYgKGMtXHUwMDNlb3BzLnRhcmdldF92YWxpZCBcdTAwMjZcdTAwMjYgYy1cdTAwM2VvcHMudGFyZ2V0X3ZhbGlkKHQpID09IGZhbHNlKWAuIFRoaXMgc2VlbXMgdG8gYmUgc29tZSBraW5kIG9mIHZhbGlkaXR5IGNoZWNrIG9uIHRoZSB0YXJnZXQsIEknbGwgaGF2ZSB0byBzZWUgd2hlcmUgdGhhdCBmdW5jdGlvbiBpcyBkZWZpbmVkLiBJZiB0aGUgdGFyZ2V0IGlzbid0IHZhbGlkLCB3ZSBuZWVkIHRvIGNsZWFyIHRoZSBxdW90YSBhc3NvY2lhdGVkIHdpdGggdGhhdCB0YXJnZXQsIGlmIHRoZSBxdW90YSBpcyBhc3NvY2lhdGVkIHdpdGggdGhhdCB0YXJnZXQuXG5cblRoZW4sIGltcG9ydGFudGx5LCBgZGFtb3NfYXBwbHlfdGFyZ2V0KGMsIHQsIG1heF9yZWdpb25fc3opYCBpcyBjYWxsZWQuIEkgbmVlZCB0byBkaWcgaW50byB0aGF0IGZ1bmN0aW9uIG5vdyB0byB1bmRlcnN0YW5kIHdoYXQncyBoYXBwZW5pbmcgYW5kIGZpZ3VyZSBvdXQgbXkgZWFybGllciBxdWVzdGlvbnMgYWJvdXQgYG1pbl9zY29yZWAuIExldCdzIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNzU4LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDY4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTE6NTQ6MzMuMzA4NjYwNDU4WiIsIlNlcSI6NjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTg2MDE2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vc19hcHBseV90YXJnZXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb25cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vY29yZS5jPTI3NzA9c3RhdGljIHZvaWQgZGFtb25fZG9fYXBwbHlfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjLFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTI4MDQtLypcXG5tbS9kYW1vbi9jb3JlLmM6MjgwNTogKiBkYW1vc19hcHBseV90YXJnZXQoKSAtIEFwcGx5IERBTU9TIHNjaGVtZXMgdG8gYSBnaXZlbiB0YXJnZXQuXFxubW0vZGFtb24vY29yZS5jLTI4MDYtICogQGM6XFx0XFx0XFx0bW9uaXRvcmluZyBjb250ZXh0IHRvIGFwcGx5IGl0cyBEQU1PUyBzY2hlbWVzIHRvLi5cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yODIxLSAqL1xcbm1tL2RhbW9uL2NvcmUuYzoyODIyOnN0YXRpYyB2b2lkIGRhbW9zX2FwcGx5X3RhcmdldChzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxcbm1tL2RhbW9uL2NvcmUuYy0yODIzLVxcdFxcdHVuc2lnbmVkIGxvbmcgbWF4X3JlZ2lvbl9zeilcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0zMzg3PXN0YXRpYyB2b2lkIGtkYW1vbmRfYXBwbHlfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTM0MjAtXFx0XFx0fVxcbm1tL2RhbW9uL2NvcmUuYzozNDIxOlxcdFxcdGRhbW9zX2FwcGx5X3RhcmdldChjLCB0LCBtYXhfcmVnaW9uX3N6KTtcXG5tbS9kYW1vbi9jb3JlLmMtMzQyMi1cXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDExOjU0OjMzLjM1ODUyMzg0N1oiLCJTZXEiOjY1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo1MzkxMzY1NzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2Ygd2hhdCBJIHdvdWxkIGJlIHRoaW5raW5nLCBmb3JtYXR0ZWQgYXMgcmVxdWVzdGVkOlxuXG4qKkFuYWx5emluZyB0aGUgQXBwbGljYXRpb24gU2NoZW1lcyoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlnIGluLiBUaGUgdGFzayBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiBMZXQncyBnZXQgaW50byBgZGFtb25fZG9fYXBwbHlfc2NoZW1lc2AgYW5kIGBkYW1vc19hcHBseV90YXJnZXRgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgdHdvIGNvbXBvbmVudHMgaW50ZXJhY3QgYW5kLCBtb3JlIGltcG9ydGFudGx5LCBob3cgdGhleSByZWxhdGUgdG8gdGhlIGJpZ2dlciBwaWN0dXJlIG9mIHRoZSBvdmVyYWxsIHN5c3RlbS4gSSdtIGFscmVhZHkgYW50aWNpcGF0aW5nIHNvbWUgaW50ZXJlc3RpbmcgZGVzaWduIGNob2ljZXMgYW5kIHBvdGVudGlhbCBhcmVhcyBmb3Igb3B0aW1pemF0aW9uLCBkZXBlbmRpbmcgb24gdGhlIGFyY2hpdGVjdHVyZS4gSSdsbCBiZSBsb29raW5nIGZvciB0aGUgc3BlY2lmaWMgbWV0aG9kb2xvZ2llcyBhbmQgbG9naWMgb2YgdGhlIHN5c3RlbS4gSSdsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGFwcGxpY2F0aW9uIHNjaGVtZSBpbXBsZW1lbnRhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQxNjAsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMTo1NDozOC43NDk4OTMxNjdaIiwiU2VxIjo2NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc4NDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2RhbW9uL2NvcmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNzcwLFxuICBcIkxpbmVDb3VudFwiOiA0NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyNzcwOlxcdHN0YXRpYyB2b2lkIGRhbW9uX2RvX2FwcGx5X3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqYyxcXG4yNzcxOlxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXFxuMjc3MjpcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyKVxcbjI3NzM6XFx0e1xcbjI3NzQ6XFx0XFx0c3RydWN0IGRhbW9zICpzO1xcbjI3NzU6XFx0XFxuMjc3NjpcXHRcXHRkYW1vbl9mb3JfZWFjaF9zY2hlbWUocywgYykge1xcbjI3Nzc6XFx0XFx0XFx0c3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSA9IFxcdTAwMjZzLVxcdTAwM2VxdW90YTtcXG4yNzc4OlxcdFxcbjI3Nzk6XFx0XFx0XFx0aWYgKHRpbWVfYmVmb3JlKGMtXFx1MDAzZXBhc3NlZF9zYW1wbGVfaW50ZXJ2YWxzLCBzLVxcdTAwM2VuZXh0X2FwcGx5X3NpcykpXFxuMjc4MDpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4yNzgxOlxcdFxcbjI3ODI6XFx0XFx0XFx0aWYgKCFzLVxcdTAwM2V3bWFya3MuYWN0aXZhdGVkKVxcbjI3ODM6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMjc4NDpcXHRcXG4yNzg1OlxcdFxcdFxcdC8qIENoZWNrIHRoZSBxdW90YSAqL1xcbjI3ODY6XFx0XFx0XFx0aWYgKGRhbW9zX3F1b3RhX2lzX2Z1bGwocXVvdGEsIGMtXFx1MDAzZW1pbl9yZWdpb25fc3opKVxcbjI3ODc6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMjc4ODpcXHRcXG4yNzg5OlxcdFxcdFxcdGlmIChkYW1vc19za2lwX2NoYXJnZWRfcmVnaW9uKHQsIHIsIHMsIGMtXFx1MDAzZW1pbl9yZWdpb25fc3opKVxcbjI3OTA6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMjc5MTpcXHRcXG4yNzkyOlxcdFxcdFxcdGlmIChzLVxcdTAwM2VtYXhfbnJfc25hcHNob3RzIFxcdTAwMjZcXHUwMDI2XFxuMjc5MzpcXHRcXHRcXHRcXHRcXHRzLVxcdTAwM2VtYXhfbnJfc25hcHNob3RzIFxcdTAwM2M9IHMtXFx1MDAzZXN0YXQubnJfc25hcHNob3RzKVxcbjI3OTQ6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMjc5NTpcXHRcXG4yNzk2OlxcdFxcdFxcdGlmIChkYW1vc192YWxpZF90YXJnZXQoYywgciwgcykpXFxuMjc5NzpcXHRcXHRcXHRcXHRkYW1vc19hcHBseV9zY2hlbWUoYywgdCwgciwgcyk7XFxuMjc5ODpcXHRcXG4yNzk5OlxcdFxcdFxcdGlmIChkYW1vbl9pc19sYXN0X3JlZ2lvbihyLCB0KSlcXG4yODAwOlxcdFxcdFxcdFxcdHMtXFx1MDAzZXN0YXQubnJfc25hcHNob3RzKys7XFxuMjgwMTpcXHRcXHR9XFxuMjgwMjpcXHR9XFxuMjgwMzpcXHRcXG4yODA0OlxcdC8qXFxuMjgwNTpcXHQgKiBkYW1vc19hcHBseV90YXJnZXQoKSAtIEFwcGx5IERBTU9TIHNjaGVtZXMgdG8gYSBnaXZlbiB0YXJnZXQuXFxuMjgwNjpcXHQgKiBAYzpcXHRcXHRcXHRtb25pdG9yaW5nIGNvbnRleHQgdG8gYXBwbHkgaXRzIERBTU9TIHNjaGVtZXMgdG8uLlxcbjI4MDc6XFx0ICogQHQ6XFx0XFx0XFx0bW9uaXRvcmluZyB0YXJnZXQgdG8gYXBwbHkgdGhlIHNjaGVtZXMgdG8uXFxuMjgwODpcXHQgKiBAbWF4X3JlZ2lvbl9zejpcXHRtYXhpbXVtIHJlZ2lvbiBzaXplIGZvciBAYy5cXG4yODA5OlxcdCAqXFxuMjgxMDpcXHQgKiBUaGlzIGZ1bmN0aW9uIGNvdWxkIHNwbGl0IHJlZ2lvbnMgZm9yIGtlZXBpbmcgdGhlIHF1b3RhLiAgVG8gbWluaW1pemVcXG4yODExOlxcdCAqIG92ZXJoZWFkIGZyb20gdGhlIHNwbGl0IG9wZXJhdGlvbnMgaW5jcmVhc2VkIG51bWJlciBvZiByZWdpb25zLCB0aGlzXFxuMjgxMjpcXHQgKiBmdW5jdGlvbiB3aWxsIGFsc28gbWVyZ2UgcmVnaW9ucyBhZnRlciB0aGUgc2NoZW1lcyBhcHBseWluZyBhdHRlbXB0IGlzIGRvbmUsXFxuMjgxMzpcXHQgKiBmb3IgZWFjaCByZWdpb24uICBUaGUgbWVyZ2Ugb3BlcmF0aW9uIGlzIG1hZGUgb25seSB3aGVuIGl0IGRvZXNuJ3QgbG9zZSB0aGVcXG4yODE0OlxcdCAqIG1vbml0b3JpbmcgaW5mb3JtYXRpb24gYW5kIG5vdCB2aW9sYXRpbmcgQG1heF9yZWdpb25fc3ouXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDExOjU0OjM4Ljc1MDA3MzY4N1oiLCJTZXEiOjY3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo2NTI2MDAwNTUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFF1b3RhLVJlbGF0ZWQgT3B0aW1pemF0aW9uKipcblxuT2theSwgaGVyZSB3ZSBnby4gTGV0J3MgZGlnIGludG8gbGluZSAyNzg2IG9mIHRoaXMgY29kZS4gUmlnaHQsIHNvIGlmIGBkYW1vc19xdW90YV9pc19mdWxsYCByZXR1cm5zIHRydWUsIGl0J3MgYSBkaXJlY3QgYGNvbnRpbnVlYC4gVGhlIHNjaGVtZSBhcHBsaWNhdGlvbiBpcyAqY29tcGxldGVseSogYnlwYXNzZWQuIEludGVyZXN0aW5nLiBTbywgYGRhbW9zX3ZhbGlkX3RhcmdldGAgaXNuJ3QgZXZlbiBjaGVja2VkIGlmIHRoZSBxdW90YSBpcyBmdWxsLiBUaGF0J3MgYSBrZXkgb2JzZXJ2YXRpb24uXG5cbk5vdywgdGhpbmtpbmcgYWJvdXQgYGRhbW9zX2FkanVzdF9xdW90YWAsIGl0IGxvb2tzIGxpa2UgdGhlIG9sZCB2ZXJzaW9uIHdhcyBpbmVmZmljaWVudC4gSXQgd2FzIHVwZGF0aW5nIHRoZSBxdW90YSB3aW5kb3cgY29ycmVjdGx5IGlmIGV4cGlyZWQsIGJ1dCB0aGVuIGl0J2Qgc3RpbGwgY2FsY3VsYXRlIGhpc3RvZ3JhbXMgYW5kIHNldCBgcXVvdGEtXHUwMDNlbWluX3Njb3JlYCAqZXZlbiBpZiogdGhlIHF1b3RhIHdhcyBhbHJlYWR5IGZ1bGwuIFRoYXQncyBhIGRlZmluaXRlIHJlZHVuZGFuY3kuXG5cblNvIHRoZSBjaGFuZ2UgaW4gdGhlIGNvbW1pdCBtYWtlcyBzZW5zZSwgb3B0aW1pemluZyBiYXNlZCBvbiB0aGUgZnVsbC1xdW90YSBzdGF0ZS4uLiBidXQgSSB3b25kZXIgKndoeSogdGhpcyBvcHRpbWl6YXRpb24gd2FzIGRlZW1lZCBuZWNlc3NhcnkuIFdlcmUgdGhlcmUgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MsIG9yIHdlcmUgdGhleSBqdXN0IHRyeWluZyB0byBiZSB0aWR5PyBJJ20gZ29pbmcgdG8gY2hlY2sgdGhlIGdpdCBsb2cuIENvbnRleHQgaXMga2luZywgYW5kIHNpbWlsYXIgY29tbWl0cyBtaWdodCBzaGluZSBsaWdodCBvbiB0aGlzLiBUaGlzIG9wdGltaXphdGlvbiBjb3VsZCBoYXZlIHNpZ25pZmljYW50IGVmZmVjdHMgaWYgdGhpcyBpcyBmcmVxdWVudGx5IGNhbGxlZCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGludGVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUwNjcsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOTksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMTo1NDo0NS4yNzYwNzcwMloiLCJTZXEiOjY4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcwNTAwNTM3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vc19hZGp1c3RfcXVvdGFcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vY29yZS5jPTMyOTA9c3RhdGljIHZvaWQgZGFtb3NfdHJhY2VfZXN6KHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vcyAqcyxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zMzAzLVxcbm1tL2RhbW9uL2NvcmUuYzozMzA0OnN0YXRpYyB2b2lkIGRhbW9zX2FkanVzdF9xdW90YShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb3MgKnMpXFxubW0vZGFtb24vY29yZS5jLTMzMDUte1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTMzODc9c3RhdGljIHZvaWQga2RhbW9uZF9hcHBseV9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmMpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzQwMi1cXG5tbS9kYW1vbi9jb3JlLmM6MzQwMzpcXHRcXHRkYW1vc19hZGp1c3RfcXVvdGEoYywgcyk7XFxubW0vZGFtb24vY29yZS5jLTM0MDQtXFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMTo1NDo0Ni45ODEwOTA0NTRaIiwiU2VxIjo2OSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTQxMDgzNzM2OTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIGBkYW1vc19hZGp1c3RfcXVvdGFgIEZ1bmN0aW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZXhhbWluZSB0aGUgY29yZSBsb2dpYzogaWYgYHF1b3RhLVx1MDAzZWNoYXJnZWRfc3pgIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBgcXVvdGEtXHUwMDNlZXN6YCwgdGhlbiBgZGFtb3NfcXVvdGFfaXNfZnVsbGAgaXMgdHJ1ZSwgcmlnaHQ/IE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGF0IGNvbmRpdGlvbiBhbmQgd2hhdCBoYXBwZW5zIGlmIHdlIHNraXAgc29tZSBzZXR1cCBzdGVwcy5cblxuSSBzZWUgdGhhdCB3aGVuIGBkYW1vc19xdW90YV9pc19mdWxsYCBpcyB0cnVlLCB0aGUgY29kZSBoYXMgdGhlc2UgYHJldHVybmAgc3RhdGVtZW50czpcbmBgYGNcblx0aWYgKGRhbW9zX3F1b3RhX2lzX2Z1bGwocXVvdGEsIGMtXHUwMDNlbWluX3JlZ2lvbl9zeikpXG5cdFx0cmV0dXJuO1xuXHRpZiAoIWMtXHUwMDNlb3BzLmdldF9zY2hlbWVfc2NvcmUpXG5cdFx0cmV0dXJuO1xuYGBgXG53aGljaCB3aWxsIGxlYWQgdG8gYW4gZWFybHkgZXhpdC4gVGhpcyBtZWFucyBpdCAqYXZvaWRzKiB0aGUgbG9vcCB0aGF0IHdvdWxkIGluaXRpYWxpemUgYW5kIHBvcHVsYXRlIGBjLVx1MDAzZXJlZ2lvbnNfc2NvcmVfaGlzdG9ncmFtYC4gVGhhdCBtYWtlcyBtZSB0aGluay4uLiBpcyB0aGlzIGJ5cGFzc2luZyBzb21lIGltcG9ydGFudCBpbml0aWFsaXphdGlvbiBvciBzb21lIG90aGVyIG9wZXJhdGlvbj8gVGhlIGNvZGUgaXMgc3VwcG9zZWQgdG8gc3RhcnQgd2l0aDpcbmBgYGNcblx0XHRtZW1zZXQoYy1cdTAwM2VyZWdpb25zX3Njb3JlX2hpc3RvZ3JhbSwgMCxcblx0XHRcdFx0c2l6ZW9mKCpjLVx1MDAzZXJlZ2lvbnNfc2NvcmVfaGlzdG9ncmFtKSAqXG5cdFx0XHRcdChEQU1PU19NQVhfU0NPUkUgKyAxKSk7XG5cdFx0ZGFtb25fZm9yX2VhY2hfdGFyZ2V0KHQsIGMpIHtcbi4uLlxuYGBgXG5JJ20gd29uZGVyaW5nLCBpZiBgZGFtb3NfYWRqdXN0X3F1b3RhYCByZXR1cm5zIGVhcmx5IGJlY2F1c2Ugb2YgdGhhdCBjaGVjaywgdGhlbiBgYy1cdTAwM2VyZWdpb25zX3Njb3JlX2hpc3RvZ3JhbWAgbWlnaHQgcmVtYWluIHVuaW5pdGlhbGl6ZWQuIEkgaGF2ZSB0byBmaWd1cmUgb3V0IGlmIHRoYXQgY2F1c2VzIGEgcHJvYmxlbSBsYXRlci4gSXMgYGMtXHUwMDNlcmVnaW9uc19zY29yZV9oaXN0b2dyYW1gIGV2ZXIgcmVhZCBvdXRzaWRlIG9mIHRoYXQgbWFpbiBsb29wIGluIGBkYW1vc19hZGp1c3RfcXVvdGFgPyBJIG5lZWQgdG8ga25vdyB3aGVyZSB0aGlzIHZhcmlhYmxlIGlzIHVzZWQuIExldCBtZSBnbyBmaW5kIGl0IHdpdGggYSBxdWljayBncmVwIHRvIGJlIHN1cmUhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1ODQ5LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDExOjU1OjAxLjA4OTQ2NjMwNVoiLCJTZXEiOjcwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU5NTk0MzM1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyZWdpb25zX3Njb3JlX2hpc3RvZ3JhbVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2RhbW9uLmg9ODk3PXN0cnVjdCBkYW1vbl9jdHgge1xcbi0tXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTkyMC1cXHQvKiBmb3Igc2NoZW1lIHF1b3RhcyBwcmlvcml0aXphdGlvbiAqL1xcbmluY2x1ZGUvbGludXgvZGFtb24uaDo5MjE6XFx0dW5zaWduZWQgbG9uZyAqcmVnaW9uc19zY29yZV9oaXN0b2dyYW07XFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTkyMi1cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0zMzA0PXN0YXRpYyB2b2lkIGRhbW9zX2FkanVzdF9xdW90YShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb3MgKnMpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzM0NC1cXHQvKiBGaWxsIHVwIHRoZSBzY29yZSBoaXN0b2dyYW0gKi9cXG5tbS9kYW1vbi9jb3JlLmM6MzM0NTpcXHRtZW1zZXQoYy1cXHUwMDNlcmVnaW9uc19zY29yZV9oaXN0b2dyYW0sIDAsXFxubW0vZGFtb24vY29yZS5jOjMzNDY6XFx0XFx0XFx0c2l6ZW9mKCpjLVxcdTAwM2VyZWdpb25zX3Njb3JlX2hpc3RvZ3JhbSkgKlxcbm1tL2RhbW9uL2NvcmUuYy0zMzQ3LVxcdFxcdFxcdChEQU1PU19NQVhfU0NPUkUgKyAxKSk7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzM1NC1cXHRcXHRcXHRzY29yZSA9IGMtXFx1MDAzZW9wcy5nZXRfc2NoZW1lX3Njb3JlKGMsIHIsIHMpO1xcbm1tL2RhbW9uL2NvcmUuYzozMzU1OlxcdFxcdFxcdGMtXFx1MDAzZXJlZ2lvbnNfc2NvcmVfaGlzdG9ncmFtW3Njb3JlXSArPVxcbm1tL2RhbW9uL2NvcmUuYy0zMzU2LVxcdFxcdFxcdFxcdGRhbW9uX3N6X3JlZ2lvbihyKTtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zMzYzLVxcdGZvciAoY3VtdWxhdGVkX3N6ID0gMCwgc2NvcmUgPSBtYXhfc2NvcmU7IDsgc2NvcmUtLSkge1xcbm1tL2RhbW9uL2NvcmUuYzozMzY0OlxcdFxcdGN1bXVsYXRlZF9zeiArPSBjLVxcdTAwM2VyZWdpb25zX3Njb3JlX2hpc3RvZ3JhbVtzY29yZV07XFxubW0vZGFtb24vY29yZS5jLTMzNjUtXFx0XFx0aWYgKGN1bXVsYXRlZF9zeiBcXHUwMDNlPSBxdW90YS1cXHUwMDNlZXN6IHx8ICFzY29yZSlcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0zOTIwPXN0YXRpYyBpbnQga2RhbW9uZF9mbih2b2lkICpkYXRhKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTM5MzUtXFx0XFx0Y3R4LVxcdTAwM2VvcHMuaW5pdChjdHgpO1xcbm1tL2RhbW9uL2NvcmUuYzozOTM2OlxcdGN0eC1cXHUwMDNlcmVnaW9uc19zY29yZV9oaXN0b2dyYW0gPSBrbWFsbG9jX2FycmF5KERBTU9TX01BWF9TQ09SRSArIDEsXFxubW0vZGFtb24vY29yZS5jOjM5Mzc6XFx0XFx0XFx0c2l6ZW9mKCpjdHgtXFx1MDAzZXJlZ2lvbnNfc2NvcmVfaGlzdG9ncmFtKSwgR0ZQX0tFUk5FTCk7XFxubW0vZGFtb24vY29yZS5jOjM5Mzg6XFx0aWYgKCFjdHgtXFx1MDAzZXJlZ2lvbnNfc2NvcmVfaGlzdG9ncmFtKVxcbm1tL2RhbW9uL2NvcmUuYy0zOTM5LVxcdFxcdGdvdG8gZG9uZTtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy00MDY3LVxcbm1tL2RhbW9uL2NvcmUuYzo0MDY4OlxcdGtmcmVlKGN0eC1cXHUwMDNlcmVnaW9uc19zY29yZV9oaXN0b2dyYW0pO1xcbm1tL2RhbW9uL2NvcmUuYy00MDY5LVxcdG11dGV4X2xvY2soXFx1MDAyNmN0eC1cXHUwMDNlY2FsbF9jb250cm9sc19sb2NrKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTE6NTU6MDIuNjg1NDE1NDkxWiIsIlNlcSI6NzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE2NTE1MDA5MzE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEFzc2Vzc21lbnQ6IE5vIFJpc2sgb2YgVW5pbml0aWFsaXplZCBNZW1vcnkgVXNhZ2UqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGFuYWx5c2lzIGZvY3VzZXMgb24gdGhlIGludHJvZHVjZWQgY29kZSdzIHBvdGVudGlhbCB0byBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZSBjb3JlIGNoYW5nZSBpcyBhIHNpbmdsZSBgaWZgIHN0YXRlbWVudCwgYGlmIChkYW1vc19xdW90YV9pc19mdWxsKHF1b3RhLCBjLVx1MDAzZW1pbl9yZWdpb25fc3opKSByZXR1cm47YCwgYWRkZWQgdG8gYGRhbW9zX2FkanVzdF9xdW90YSgpYC4gVGhpcyBhY3RzIGFzIGFuIG9wdGltaXphdGlvbiwgc2hvcnQtY2lyY3VpdGluZyB0aGUgcXVvdGEgYWRqdXN0bWVudCBwcm9jZXNzIGlmIHRoZSBxdW90YSBpcyBhbHJlYWR5IGV4aGF1c3RlZC5cblxuVGhlIGtleSBvYnNlcnZhdGlvbiBpcyBob3cgYGMtXHUwMDNlcmVnaW9uc19zY29yZV9oaXN0b2dyYW1gIGlzIGhhbmRsZWQuIEl0J3MgKm9ubHkqIHVzZWQgd2l0aGluIGBkYW1vc19hZGp1c3RfcXVvdGEoKWAuIENydWNpYWxseSwgcmlnaHQgYXQgdGhlIHN0YXJ0IG9mIHRoZSBibG9jayB0aGF0IHVzZXMgaXQsIHRoZXJlJ3MgYSBgbWVtc2V0KClgIHRoYXQgZXhwbGljaXRseSB6ZXJvZXMgdGhlIGVudGlyZSBoaXN0b2dyYW0uIFRoaXMgZ3VhcmFudGVlcyB0aGF0IGFueSByZWFkIGZyb20gaXQgaXMgZnJvbSBpbml0aWFsaXplZCBtZW1vcnkuIFRoZSBoaXN0b2dyYW0gaXMgYnVpbHQgYW5kIGltbWVkaWF0ZWx5IGNvbnN1bWVkIHdpdGhpbiB0aGUgZnVuY3Rpb247IGl0cyB2YWx1ZXMgYXJlIG5vdCBwZXJzaXN0ZWQgb3IgZXhwb3NlZCBlbHNld2hlcmUuIGBxdW90YS1cdTAwM2VtaW5fc2NvcmVgIGlzIGFsc28gaW5pdGlhbGl6ZWQgdXBvbiBhbGxvY2F0aW9uIGFuZCByZWNhbGN1bGF0ZWQgd2l0aGluIHRoZSBmdW5jdGlvbiwgYnV0IGl0IGlzIG5vdCBldmVuIHVzZWQgaW4gYGRhbW9uX2RvX2FwcGx5X3NjaGVtZXNgIGlmIHRoZSBxdW90YSBpcyBmdWxsLCBtYWtpbmcgdGhlIGNhbGN1bGF0aW9uIHJlZHVuZGFudC4gRXZlbiBpZiBpdCB3ZXJlIGxhdGVyIGNoZWNrZWQsIGl0IHdvdWxkIGJlIHJlY2FsY3VsYXRlZCBhbmQgc28gbm8gaXNzdWUuXG5cblRoZXJlZm9yZSwgdGhlIHBhdGNoIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgZGVwZW5kZW5jaWVzIGluIGNvbmRpdGlvbmFsIGxvZ2ljLCBjb21wbGV4IGRhdGEgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uIGlzc3Vlcywgb3IgYnVmZmVyIG92ZXJydW4gcG9zc2liaWxpdGllcy4gVGhlIGFkZGVkIGBkYW1vc19xdW90YV9pc19mdWxsYCBjaGVjayB1c2VzIGluaXRpYWxpemVkIHZhcmlhYmxlcyAoYHF1b3RhYCBhbmQgYGMtXHUwMDNlbWluX3JlZ2lvbl9zemApLiBUaGUgaGlzdG9ncmFtLCB0aGUgbW9zdCBzZW5zaXRpdmUgcGFydCwgaXMgZXhwbGljaXRseSB6ZXJvZWQgYmVmb3JlIHVzZS5cblxuVGhlIG92ZXJhbGwgY29uY2VybiBpcyBpZiB0aGlzIHBhdGNoIGxlYWRzIHRvIGEgc2NlbmFyaW8gdGhhdCBhbGxvd3MgdGhlIGtlcm5lbCB0byByZWFkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCB3aGljaCBpc24ndCB0aGUgY2FzZSBoZXJlLiBUaGlzIGlzIHB1cmUgbG9naWMvb3B0aW1pemF0aW9uLiBBIEtNU0FOIGFuYWx5c2lzIGlzIG5vdCBuZWVkZWQgaGVyZTsgc3RhbmRhcmQgc2FuaXRpemVycyB3aWxsIGFkZXF1YXRlbHkgZGV0ZWN0IG1lbW9yeSBjb3JydXB0aW9uLiBXZSBjYW4ganVzdGlmeSB0aGUgbmVlZCBmb3IgS01TQU4gd2l0aCB0aGUgZm9sbG93aW5nIHJlYXNvbmluZzogdGhlIHBhdGNoIHNpbXBseSBhZGRzIGFuIGVhcmx5IHJldHVybiBpbiBgZGFtb3NfYWRqdXN0X3F1b3RhKClgIGlmIHRoZSBxdW90YSBpcyBmdWxsLCBhdm9pZGluZyBidWlsZGluZyBgYy1cdTAwM2VyZWdpb25zX3Njb3JlX2hpc3RvZ3JhbWAgYW5kIHVwZGF0aW5nIGBxdW90YS1cdTAwM2VtaW5fc2NvcmVgLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkIG9yIGxlYWtlZC4gYGMtXHUwMDNlcmVnaW9uc19zY29yZV9oaXN0b2dyYW1gIGlzIG9ubHkgYWNjZXNzZWQgd2l0aGluIGBkYW1vc19hZGp1c3RfcXVvdGEoKWAgYW5kIGlzIGFsd2F5cyBleHBsaWNpdGx5IHplcm9lZCB3aXRoIGBtZW1zZXQoKWAgYmVmb3JlIHVzZS4gS0FTQU4gaXMgc3VmZmljaWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTcyMzQsIk91dHB1dFRva2VucyI6MTcwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE0OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMTo1NToxOS4yMDA0MjczNTZaIiwiU2VxIjo3MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTk3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYW4gZWFybHkgcmV0dXJuIGluIGRhbW9zX2FkanVzdF9xdW90YSgpIGlmIHRoZSBxdW90YSBpcyBhbHJlYWR5IGV4aGF1c3RlZCAoZGFtb3NfcXVvdGFfaXNfZnVsbCgpKS4gVGhpcyBza2lwcyByZWNhbGN1bGF0aW9uIG9mIHRoZSBzY2hlbWUgc2NvcmUgaGlzdG9ncmFtIGFuZCBtaW5fc2NvcmUuXFxuXFxuTm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3IgbWVtb3J5IGFsbG9jYXRpb25zIGFyZSBpbnRyb2R1Y2VkIG9yIHJlYWQuIFRoZSBza2lwcGVkIGhpc3RvZ3JhbSBidWZmZXIgKGMtXFx1MDAzZXJlZ2lvbnNfc2NvcmVfaGlzdG9ncmFtKSBpcyBzdHJpY3RseSBpbnRlcm5hbCB0byB0aGlzIGZ1bmN0aW9uIGFuZCBpcyBhbHdheXMgemVyb2VkIHZpYSBtZW1zZXQoKSBwcmlvciB0byB1c2Ugd2hlbiBhY2Nlc3NlZC4gTm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSBvciB1c2VkIGluIHVuaW5pdGlhbGl6ZWQgc3RhdGUuIEFueSBwb3RlbnRpYWwgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcykgd291bGQgYmUgZGV0ZWN0ZWQgYnkgc3RhbmRhcmQgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gcnVuIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhbiBlYXJseSByZXR1cm4gaW4gZGFtb3NfYWRqdXN0X3F1b3RhKCkgaWYgdGhlIHF1b3RhIGlzIGFscmVhZHkgZXhoYXVzdGVkIChkYW1vc19xdW90YV9pc19mdWxsKCkpLiBUaGlzIHNraXBzIHJlY2FsY3VsYXRpb24gb2YgdGhlIHNjaGVtZSBzY29yZSBoaXN0b2dyYW0gYW5kIG1pbl9zY29yZS5cXG5cXG5ObyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBtZW1vcnkgYWxsb2NhdGlvbnMgYXJlIGludHJvZHVjZWQgb3IgcmVhZC4gVGhlIHNraXBwZWQgaGlzdG9ncmFtIGJ1ZmZlciAoYy1cXHUwMDNlcmVnaW9uc19zY29yZV9oaXN0b2dyYW0pIGlzIHN0cmljdGx5IGludGVybmFsIHRvIHRoaXMgZnVuY3Rpb24gYW5kIGlzIGFsd2F5cyB6ZXJvZWQgdmlhIG1lbXNldCgpIHByaW9yIHRvIHVzZSB3aGVuIGFjY2Vzc2VkLiBObyBkYXRhIGlzIGNvcGllZCB0byB1c2VyIHNwYWNlIG9yIHVzZWQgaW4gdW5pbml0aWFsaXplZCBzdGF0ZS4gQW55IHBvdGVudGlhbCBtZW1vcnkgc2FmZXR5IGlzc3VlcyAoc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzKSB3b3VsZCBiZSBkZXRlY3RlZCBieSBzdGFuZGFyZCBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBydW4gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflownw88z[1] Phase: Succeeded StartedAt: 2026-09-13 11:55:30 +0000 UTC FinishedAt: 2026-09-13 11:55:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflownw88z[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-13 11:55:30 +0000 UTC FinishedAt: 2026-09-13 11:55:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflownw88z[2] Phase: Succeeded StartedAt: 2026-09-13 11:55:30 +0000 UTC FinishedAt: 2026-09-13 15:41:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflownw88z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"383fc05d4650b021f3c17e36a145106dcc61a294","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR","DAMON_RECLAIM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"383fc05d4650b021f3c17e36a145106dcc61a294","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_adjust_quota","kdamond_apply_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"383fc05d4650b021f3c17e36a145106dcc61a294","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR","DAMON_RECLAIM"],"series_id":"32f09c4e-3877-49c0-8c0b-a92117e19643","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-13 11:55:30 +0000 UTC FinishedAt: 2026-09-13 15:41:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"383fc05d4650b021f3c17e36a145106dcc61a294","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR","DAMON_RECLAIM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"base_commit":"383fc05d4650b021f3c17e36a145106dcc61a294","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_adjust_quota","kdamond_apply_schemes"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"383fc05d4650b021f3c17e36a145106dcc61a294","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR","DAMON_RECLAIM"],"series_id":"32f09c4e-3877-49c0-8c0b-a92117e19643","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-workflownw88z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"383fc05d4650b021f3c17e36a145106dcc61a294","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR","DAMON_RECLAIM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"383fc05d4650b021f3c17e36a145106dcc61a294","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_adjust_quota","kdamond_apply_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"383fc05d4650b021f3c17e36a145106dcc61a294","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR","DAMON_RECLAIM"],"series_id":"32f09c4e-3877-49c0-8c0b-a92117e19643","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-13 11:55:30 +0000 UTC FinishedAt: 2026-09-13 11:55:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflownw88z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"383fc05d4650b021f3c17e36a145106dcc61a294","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR","DAMON_RECLAIM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"383fc05d4650b021f3c17e36a145106dcc61a294","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_adjust_quota","kdamond_apply_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"383fc05d4650b021f3c17e36a145106dcc61a294","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR","DAMON_RECLAIM"],"series_id":"32f09c4e-3877-49c0-8c0b-a92117e19643","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-13 11:55:30 +0000 UTC FinishedAt: 2026-09-13 11:55:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"383fc05d4650b021f3c17e36a145106dcc61a294","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR","DAMON_RECLAIM"],"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-workflownw88z/series-workflownw88z-convert-artifact-455914955/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownw88z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"383fc05d4650b021f3c17e36a145106dcc61a294","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR","DAMON_RECLAIM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"383fc05d4650b021f3c17e36a145106dcc61a294","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_adjust_quota","kdamond_apply_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"383fc05d4650b021f3c17e36a145106dcc61a294","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR","DAMON_RECLAIM"],"series_id":"32f09c4e-3877-49c0-8c0b-a92117e19643","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-13 11:55:40 +0000 UTC FinishedAt: 2026-09-13 12:12:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflownw88z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"383fc05d4650b021f3c17e36a145106dcc61a294","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR","DAMON_RECLAIM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"383fc05d4650b021f3c17e36a145106dcc61a294","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_adjust_quota","kdamond_apply_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"383fc05d4650b021f3c17e36a145106dcc61a294","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR","DAMON_RECLAIM"],"series_id":"32f09c4e-3877-49c0-8c0b-a92117e19643","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-13 11:55:40 +0000 UTC FinishedAt: 2026-09-13 12:12:05 +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:*86d4bd05-b48a-4b4e-ad9f-c5b24f03f31f,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-workflownw88z/series-workflownw88z-convert-artifact-455914955/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": "f44ee74e-1cb9-4b8b-9d41-9c46c04d5c5f", "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-workflownw88z/series-workflownw88z-build-action-4226821321/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownw88z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"383fc05d4650b021f3c17e36a145106dcc61a294","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR","DAMON_RECLAIM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"383fc05d4650b021f3c17e36a145106dcc61a294","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_adjust_quota","kdamond_apply_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"383fc05d4650b021f3c17e36a145106dcc61a294","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR","DAMON_RECLAIM"],"series_id":"32f09c4e-3877-49c0-8c0b-a92117e19643","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-13 11:55:40 +0000 UTC FinishedAt: 2026-09-13 12:11:55 +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:*86d4bd05-b48a-4b4e-ad9f-c5b24f03f31f,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-workflownw88z/series-workflownw88z-convert-artifact-455914955/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": "f44ee74e-1cb9-4b8b-9d41-9c46c04d5c5f", "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-workflownw88z/series-workflownw88z-build-action-4226821321/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownw88z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"383fc05d4650b021f3c17e36a145106dcc61a294","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR","DAMON_RECLAIM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"383fc05d4650b021f3c17e36a145106dcc61a294","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_adjust_quota","kdamond_apply_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"383fc05d4650b021f3c17e36a145106dcc61a294","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR","DAMON_RECLAIM"],"series_id":"32f09c4e-3877-49c0-8c0b-a92117e19643","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-13 12:12:05 +0000 UTC FinishedAt: 2026-09-13 12:12:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflownw88z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"383fc05d4650b021f3c17e36a145106dcc61a294","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR","DAMON_RECLAIM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"383fc05d4650b021f3c17e36a145106dcc61a294","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_adjust_quota","kdamond_apply_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"383fc05d4650b021f3c17e36a145106dcc61a294","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR","DAMON_RECLAIM"],"series_id":"32f09c4e-3877-49c0-8c0b-a92117e19643","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-13 12:12:05 +0000 UTC FinishedAt: 2026-09-13 12:12:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflownw88z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"383fc05d4650b021f3c17e36a145106dcc61a294","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR","DAMON_RECLAIM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"383fc05d4650b021f3c17e36a145106dcc61a294","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_adjust_quota","kdamond_apply_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"383fc05d4650b021f3c17e36a145106dcc61a294","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR","DAMON_RECLAIM"],"series_id":"32f09c4e-3877-49c0-8c0b-a92117e19643","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-13 12:12:05 +0000 UTC FinishedAt: 2026-09-13 12:12:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflownw88z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"383fc05d4650b021f3c17e36a145106dcc61a294","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR","DAMON_RECLAIM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"383fc05d4650b021f3c17e36a145106dcc61a294","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_adjust_quota","kdamond_apply_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"383fc05d4650b021f3c17e36a145106dcc61a294","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR","DAMON_RECLAIM"],"series_id":"32f09c4e-3877-49c0-8c0b-a92117e19643","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-13 12:12:05 +0000 UTC FinishedAt: 2026-09-13 12:12:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"383fc05d4650b021f3c17e36a145106dcc61a294","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR","DAMON_RECLAIM"],"series_id":"32f09c4e-3877-49c0-8c0b-a92117e19643","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-workflownw88z/series-workflownw88z-convert-artifact-1130002978/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownw88z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"383fc05d4650b021f3c17e36a145106dcc61a294","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR","DAMON_RECLAIM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"383fc05d4650b021f3c17e36a145106dcc61a294","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_adjust_quota","kdamond_apply_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"383fc05d4650b021f3c17e36a145106dcc61a294","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR","DAMON_RECLAIM"],"series_id":"32f09c4e-3877-49c0-8c0b-a92117e19643","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-13 12:12:16 +0000 UTC FinishedAt: 2026-09-13 12:14:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflownw88z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"383fc05d4650b021f3c17e36a145106dcc61a294","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR","DAMON_RECLAIM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"383fc05d4650b021f3c17e36a145106dcc61a294","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_adjust_quota","kdamond_apply_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"383fc05d4650b021f3c17e36a145106dcc61a294","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR","DAMON_RECLAIM"],"series_id":"32f09c4e-3877-49c0-8c0b-a92117e19643","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-13 12:12:16 +0000 UTC FinishedAt: 2026-09-13 12:13:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*f44ee74e-1cb9-4b8b-9d41-9c46c04d5c5f,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-workflownw88z/series-workflownw88z-build-action-4226821321/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-workflownw88z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"383fc05d4650b021f3c17e36a145106dcc61a294","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR","DAMON_RECLAIM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"383fc05d4650b021f3c17e36a145106dcc61a294","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_adjust_quota","kdamond_apply_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"383fc05d4650b021f3c17e36a145106dcc61a294","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR","DAMON_RECLAIM"],"series_id":"32f09c4e-3877-49c0-8c0b-a92117e19643","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-13 12:14:08 +0000 UTC FinishedAt: 2026-09-13 12:14:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflownw88z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"383fc05d4650b021f3c17e36a145106dcc61a294","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR","DAMON_RECLAIM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"383fc05d4650b021f3c17e36a145106dcc61a294","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_adjust_quota","kdamond_apply_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"383fc05d4650b021f3c17e36a145106dcc61a294","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR","DAMON_RECLAIM"],"series_id":"32f09c4e-3877-49c0-8c0b-a92117e19643","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-13 12:14:08 +0000 UTC FinishedAt: 2026-09-13 12:14:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflownw88z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"383fc05d4650b021f3c17e36a145106dcc61a294","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR","DAMON_RECLAIM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"383fc05d4650b021f3c17e36a145106dcc61a294","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_adjust_quota","kdamond_apply_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"383fc05d4650b021f3c17e36a145106dcc61a294","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR","DAMON_RECLAIM"],"series_id":"32f09c4e-3877-49c0-8c0b-a92117e19643","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-13 12:14:08 +0000 UTC FinishedAt: 2026-09-13 12:30:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflownw88z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"383fc05d4650b021f3c17e36a145106dcc61a294","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR","DAMON_RECLAIM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"383fc05d4650b021f3c17e36a145106dcc61a294","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_adjust_quota","kdamond_apply_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"383fc05d4650b021f3c17e36a145106dcc61a294","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR","DAMON_RECLAIM"],"series_id":"32f09c4e-3877-49c0-8c0b-a92117e19643","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-13 12:14:08 +0000 UTC FinishedAt: 2026-09-13 12:30:36 +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:*86d4bd05-b48a-4b4e-ad9f-c5b24f03f31f,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-workflownw88z/series-workflownw88z-convert-artifact-1130002978/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": "be34700b-4f98-4dfc-916f-ca73ea8e1b68", "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-workflownw88z/series-workflownw88z-build-action-3509828214/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownw88z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"383fc05d4650b021f3c17e36a145106dcc61a294","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR","DAMON_RECLAIM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"383fc05d4650b021f3c17e36a145106dcc61a294","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_adjust_quota","kdamond_apply_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"383fc05d4650b021f3c17e36a145106dcc61a294","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR","DAMON_RECLAIM"],"series_id":"32f09c4e-3877-49c0-8c0b-a92117e19643","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-13 12:14:08 +0000 UTC FinishedAt: 2026-09-13 12:30:26 +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:*86d4bd05-b48a-4b4e-ad9f-c5b24f03f31f,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-workflownw88z/series-workflownw88z-convert-artifact-1130002978/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": "be34700b-4f98-4dfc-916f-ca73ea8e1b68", "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-workflownw88z/series-workflownw88z-build-action-3509828214/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownw88z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"383fc05d4650b021f3c17e36a145106dcc61a294","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR","DAMON_RECLAIM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"383fc05d4650b021f3c17e36a145106dcc61a294","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_adjust_quota","kdamond_apply_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"383fc05d4650b021f3c17e36a145106dcc61a294","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR","DAMON_RECLAIM"],"series_id":"32f09c4e-3877-49c0-8c0b-a92117e19643","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-13 12:30:36 +0000 UTC FinishedAt: 2026-09-13 12:30:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflownw88z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"383fc05d4650b021f3c17e36a145106dcc61a294","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR","DAMON_RECLAIM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"383fc05d4650b021f3c17e36a145106dcc61a294","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_adjust_quota","kdamond_apply_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"383fc05d4650b021f3c17e36a145106dcc61a294","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR","DAMON_RECLAIM"],"series_id":"32f09c4e-3877-49c0-8c0b-a92117e19643","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-13 12:30:36 +0000 UTC FinishedAt: 2026-09-13 12:30:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflownw88z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"383fc05d4650b021f3c17e36a145106dcc61a294","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR","DAMON_RECLAIM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"383fc05d4650b021f3c17e36a145106dcc61a294","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_adjust_quota","kdamond_apply_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"383fc05d4650b021f3c17e36a145106dcc61a294","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR","DAMON_RECLAIM"],"series_id":"32f09c4e-3877-49c0-8c0b-a92117e19643","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-13 12:30:36 +0000 UTC FinishedAt: 2026-09-13 12:32:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflownw88z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"383fc05d4650b021f3c17e36a145106dcc61a294","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR","DAMON_RECLAIM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"383fc05d4650b021f3c17e36a145106dcc61a294","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_adjust_quota","kdamond_apply_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"383fc05d4650b021f3c17e36a145106dcc61a294","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR","DAMON_RECLAIM"],"series_id":"32f09c4e-3877-49c0-8c0b-a92117e19643","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-13 12:30:36 +0000 UTC FinishedAt: 2026-09-13 12:32:23 +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:*be34700b-4f98-4dfc-916f-ca73ea8e1b68,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-workflownw88z/series-workflownw88z-build-action-3509828214/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-workflownw88z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"383fc05d4650b021f3c17e36a145106dcc61a294","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR","DAMON_RECLAIM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"383fc05d4650b021f3c17e36a145106dcc61a294","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_adjust_quota","kdamond_apply_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"383fc05d4650b021f3c17e36a145106dcc61a294","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR","DAMON_RECLAIM"],"series_id":"32f09c4e-3877-49c0-8c0b-a92117e19643","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-13 12:32:33 +0000 UTC FinishedAt: 2026-09-13 15:41:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflownw88z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"383fc05d4650b021f3c17e36a145106dcc61a294","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR","DAMON_RECLAIM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"383fc05d4650b021f3c17e36a145106dcc61a294","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_adjust_quota","kdamond_apply_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"383fc05d4650b021f3c17e36a145106dcc61a294","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR","DAMON_RECLAIM"],"series_id":"32f09c4e-3877-49c0-8c0b-a92117e19643","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-13 12:32:33 +0000 UTC FinishedAt: 2026-09-13 15:41:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"base_commit":"383fc05d4650b021f3c17e36a145106dcc61a294","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_adjust_quota","kdamond_apply_schemes"],"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:*f44ee74e-1cb9-4b8b-9d41-9c46c04d5c5f,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*be34700b-4f98-4dfc-916f-ca73ea8e1b68,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-workflownw88z/series-workflownw88z-build-action-4226821321/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-workflownw88z/series-workflownw88z-build-action-3509828214/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflownw88z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"383fc05d4650b021f3c17e36a145106dcc61a294","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR","DAMON_RECLAIM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"383fc05d4650b021f3c17e36a145106dcc61a294","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_adjust_quota","kdamond_apply_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"383fc05d4650b021f3c17e36a145106dcc61a294","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR","DAMON_RECLAIM"],"series_id":"32f09c4e-3877-49c0-8c0b-a92117e19643","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-13 12:32:33 +0000 UTC FinishedAt: 2026-09-13 12:32:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflownw88z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"383fc05d4650b021f3c17e36a145106dcc61a294","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR","DAMON_RECLAIM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"383fc05d4650b021f3c17e36a145106dcc61a294","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_adjust_quota","kdamond_apply_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"383fc05d4650b021f3c17e36a145106dcc61a294","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR","DAMON_RECLAIM"],"series_id":"32f09c4e-3877-49c0-8c0b-a92117e19643","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-13 12:32:33 +0000 UTC FinishedAt: 2026-09-13 12:32:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"base_commit":"383fc05d4650b021f3c17e36a145106dcc61a294","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_adjust_quota","kdamond_apply_schemes"],"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-workflownw88z/series-workflownw88z-convert-artifact-133474903/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownw88z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"383fc05d4650b021f3c17e36a145106dcc61a294","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR","DAMON_RECLAIM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"383fc05d4650b021f3c17e36a145106dcc61a294","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_adjust_quota","kdamond_apply_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"383fc05d4650b021f3c17e36a145106dcc61a294","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR","DAMON_RECLAIM"],"series_id":"32f09c4e-3877-49c0-8c0b-a92117e19643","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-13 12:32:33 +0000 UTC FinishedAt: 2026-09-13 12:32:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflownw88z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"383fc05d4650b021f3c17e36a145106dcc61a294","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR","DAMON_RECLAIM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"383fc05d4650b021f3c17e36a145106dcc61a294","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_adjust_quota","kdamond_apply_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"383fc05d4650b021f3c17e36a145106dcc61a294","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR","DAMON_RECLAIM"],"series_id":"32f09c4e-3877-49c0-8c0b-a92117e19643","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-13 12:32:33 +0000 UTC FinishedAt: 2026-09-13 12:32:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflownw88z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"383fc05d4650b021f3c17e36a145106dcc61a294","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR","DAMON_RECLAIM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"383fc05d4650b021f3c17e36a145106dcc61a294","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_adjust_quota","kdamond_apply_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"383fc05d4650b021f3c17e36a145106dcc61a294","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR","DAMON_RECLAIM"],"series_id":"32f09c4e-3877-49c0-8c0b-a92117e19643","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-13 12:32:33 +0000 UTC FinishedAt: 2026-09-13 12:32:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflownw88z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"383fc05d4650b021f3c17e36a145106dcc61a294","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR","DAMON_RECLAIM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"383fc05d4650b021f3c17e36a145106dcc61a294","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_adjust_quota","kdamond_apply_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"383fc05d4650b021f3c17e36a145106dcc61a294","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR","DAMON_RECLAIM"],"series_id":"32f09c4e-3877-49c0-8c0b-a92117e19643","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-13 12:32:43 +0000 UTC FinishedAt: 2026-09-13 15:41:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflownw88z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"383fc05d4650b021f3c17e36a145106dcc61a294","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR","DAMON_RECLAIM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"383fc05d4650b021f3c17e36a145106dcc61a294","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_adjust_quota","kdamond_apply_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"383fc05d4650b021f3c17e36a145106dcc61a294","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR","DAMON_RECLAIM"],"series_id":"32f09c4e-3877-49c0-8c0b-a92117e19643","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-13 12:32:43 +0000 UTC FinishedAt: 2026-09-13 15:41:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*f44ee74e-1cb9-4b8b-9d41-9c46c04d5c5f,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*be34700b-4f98-4dfc-916f-ca73ea8e1b68,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-workflownw88z/series-workflownw88z-build-action-4226821321/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-workflownw88z/series-workflownw88z-build-action-3509828214/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-workflownw88z/series-workflownw88z-convert-artifact-133474903/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,}