Name: series-workflow8z5q9 Phase: Succeeded StartedAt: 2026-09-08 22:31:29 +0000 UTC FinishedAt: 2026-09-09 02:37:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8z5q9[0] Phase: Succeeded StartedAt: 2026-09-08 22:31:29 +0000 UTC FinishedAt: 2026-09-08 22:52:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8z5q9[0].run-triage Phase: Succeeded StartedAt: 2026-09-08 22:31:29 +0000 UTC FinishedAt: 2026-09-08 22:52:48 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "e0554c6276da957b6e72849520c70a97404cd1ae", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_SCHED", "NET_CLS_ACT" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "e0554c6276da957b6e72849520c70a97404cd1ae", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_SCHED", "NET_CLS_ACT" ], "series_id": "38c1906e-77e2-483c-9cda-042c2054c13c" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "tc_ctl_chain" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDIyOjUxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9TQ0hFRCYjMzQ7LAogICAgJiMzNDtORVRfQ0xTX0FDVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RjX2N0bF9jaGFpbiYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSByZXBsYXkgbG9naWMgaW4gYHRjX2N0bF9jaGFpbigpYCBieSBlbnN1cmluZyB0aGF0IGEgcmV0cnkgb24gYC1FQUdBSU5gIG9ubHkgb2NjdXJzIHdoZW4gYG4tXHUwMDNlbmxtc2dfdHlwZSA9PSBSVE1fTkVXQ0hBSU5gLiBUaGlzIGNoYW5nZSBvbmx5IGFmZmVjdHMgY29udHJvbCBmbG93IGFuZCBlcnJvciBoYW5kbGluZyBkdXJpbmcgbmV0bGluayBUQyBjaGFpbiBtYW5hZ2VtZW50IHRvIHByZXZlbnQgaW5hcHByb3ByaWF0ZSByZXF1ZXN0IHJlcGxheSBmb3Igb3RoZXIgbmV0bGluayBtZXNzYWdlIHR5cGVzIChzdWNoIGFzIGBSVE1fR0VUQ0hBSU5gIG9yIGBSVE1fREVMQ0hBSU5gKS4gSXQgZG9lcyBub3QgYWxsb2NhdGUgbmV3IG1lbW9yeSwgbW9kaWZ5IHN0cnVjdCBpbml0aWFsaXphdGlvbiwgYWx0ZXIgZGF0YSBjb3BpZXMgdG8gdXNlciBzcGFjZSwgb3IgaW50cm9kdWNlIHJpc2tzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBUaGVyZWZvcmUsIHN0YW5kYXJkIEtBU0FOL3Nhbml0aXplcnMgYXJlIHN1ZmZpY2llbnQgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgZXJyb3IgaGFuZGxpbmcgYW5kIHJlcGxheSBsb2dpYyBmb3IgbmV0bGluayBjaGFpbiBjb250cm9sIG9wZXJhdGlvbnMgaW4gdGNfY3RsX2NoYWluKCkgKG5ldC9zY2hlZC9jbHNfYXBpLmMpLCByZXN0cmljdGluZyAtRUFHQUlOIHJlcGxheXMgc3RyaWN0bHkgdG8gUlRNX05FV0NIQUlOIHJlcXVlc3RzLiBUaGlzIHRvdWNoZXMgY29yZSBuZXR3b3JraW5nIHRyYWZmaWMgY29udHJvbCBsb2dpYyByZWFjaGFibGUgdmlhIHJ0bmV0bGluayBmcm9tIHVucHJpdmlsZWdlZCBvciBwcml2aWxlZ2VkIHVzZXIgbmFtZXNwYWNlcyBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMjI6NTE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBlMmFlOTJhMDMxYjY0MzE2ZjEyYTUzN2JmZTg5ZWUyY2ZkMjM0ZTgyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgOCAyMjo1MTozOCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvY2xzX2FwaS5jIGIvbmV0L3NjaGVkL2Nsc19hcGkuY1xuaW5kZXggOTk2Njc2NjY2MWQ1MC4uYzQ3ZDJlZTEzNjQxZCAxMDA2NDRcbi0tLSBhL25ldC9zY2hlZC9jbHNfYXBpLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY2hlZC9jbHNfYXBpLmNcbkBAIC0zMjU0LDcgJiM0MzszMjU0LDcgQEAgc3RhdGljIGludCB0Y19jdGxfY2hhaW4oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpuLFxuIFx0dGNmX2NoYWluX3B1dChjaGFpbik7XG4gZXJyb3V0X2Jsb2NrOlxuIFx0dGNmX2Jsb2NrX3JlbGVhc2UocSwgYmxvY2ssIHRydWUpO1xuLVx0aWYgKGVyciA9PSAtRUFHQUlOKVxuJiM0MztcdGlmIChlcnIgPT0gLUVBR0FJTiBcdTAwMjZcdTAwMjYgbi1cdTAwM2VubG1zZ190eXBlID09IFJUTV9ORVdDSEFJTilcbiBcdFx0LyogUmVwbGF5IHRoZSByZXF1ZXN0LiAqL1xuIFx0XHRnb3RvIHJlcGxheTtcbiBcdHJldHVybiBlcnI7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMjI6NTE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX1NDSEVEJiMzNDssCiAgICAmIzM0O05FVF9DTFNfQUNUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGNfY3RsX2NoYWluJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBlcnJvciBoYW5kbGluZyBhbmQgcmVwbGF5IGxvZ2ljIGZvciBuZXRsaW5rIGNoYWluIGNvbnRyb2wgb3BlcmF0aW9ucyBpbiB0Y19jdGxfY2hhaW4oKSAobmV0L3NjaGVkL2Nsc19hcGkuYyksIHJlc3RyaWN0aW5nIC1FQUdBSU4gcmVwbGF5cyBzdHJpY3RseSB0byBSVE1fTkVXQ0hBSU4gcmVxdWVzdHMuIFRoaXMgdG91Y2hlcyBjb3JlIG5ldHdvcmtpbmcgdHJhZmZpYyBjb250cm9sIGxvZ2ljIHJlYWNoYWJsZSB2aWEgcnRuZXRsaW5rIGZyb20gdW5wcml2aWxlZ2VkIG9yIHByaXZpbGVnZWQgdXNlciBuYW1lc3BhY2VzIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGUyYWU5MmEwMzFiNjQzMTZmMTJhNTM3YmZlODllZTJjZmQyMzRlODIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIFNlcCA4IDIyOjUxOjM4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2Nsc19hcGkuYyBiL25ldC9zY2hlZC9jbHNfYXBpLmMKaW5kZXggOTk2Njc2NjY2MWQ1MC4uYzQ3ZDJlZTEzNjQxZCAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL2Nsc19hcGkuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc2NoZWQvY2xzX2FwaS5jCkBAIC0zMjU0LDcgJiM0MzszMjU0LDcgQEAgc3RhdGljIGludCB0Y19jdGxfY2hhaW4oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpuLAogCXRjZl9jaGFpbl9wdXQoY2hhaW4pOwogZXJyb3V0X2Jsb2NrOgogCXRjZl9ibG9ja19yZWxlYXNlKHEsIGJsb2NrLCB0cnVlKTsKLQlpZiAoZXJyID09IC1FQUdBSU4pCiYjNDM7CWlmIChlcnIgPT0gLUVBR0FJTiAmYW1wOyZhbXA7IG4tJmd0O25sbXNnX3R5cGUgPT0gUlRNX05FV0NIQUlOKQogCQkvKiBSZXBsYXkgdGhlIHJlcXVlc3QuICovCiAJCWdvdG8gcmVwbGF5OwogCXJldHVybiBlcnI7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDIyOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4ODIKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA3MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aGlua2luZyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgUGF0Y2g6IFVuZGVyc3RhbmRpbmcgdGhlIGB0Y19jdGxfY2hhaW4oKWAgTW9kaWZpY2F0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgZGlmZi4gRmlyc3QgdGhpbmdzIGZpcnN0LCBsZXQmIzM5O3MgemVybyBpbiBvbiB0aGUga2V5IGFyZWE6IGBuZXQvc2NoZWQvY2xzX2FwaS5jYCwgc3BlY2lmaWNhbGx5IHRoZSBmdW5jdGlvbiBgdGNfY3RsX2NoYWluKClgLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBoZWFydCBvZiB0aGUgY2hhbmdlIGxpZXMuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgZ2V0dGluZyBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCYjMzk7cyBoYXBwZW5pbmcgd2l0aGluIHRoYXQgZnVuY3Rpb24uIEkmIzM5O2xsIHByb2JhYmx5IHJlYWNoIGZvciBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgdG8gcHVsbCB1cCB0aGUgZGVmaW5pdGlvbiBvZiBgdGNfY3RsX2NoYWluKClgIGluIHRoYXQgZmlsZS4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgaW1tZWRpYXRlIGNvbnRleHQuIEZyb20gdGhlcmUsIEkgY2FuIGJlZ2luIG15IGFuYWx5c2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDIyOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NjaGVkL2Nsc19hcGkuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMxNTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzMxNTA6XHRyZXBsYXk6XG4zMTUxOlx0XHRxID0gTlVMTDtcbjMxNTI6XHRcdGVyciA9IG5sbXNnX3BhcnNlX2RlcHJlY2F0ZWQobiwgc2l6ZW9mKCp0KSwgdGNhLCBUQ0FfTUFYLFxuMzE1MzpcdFx0XHRcdFx0ICAgICBydG1fdGNhX3BvbGljeSwgZXh0YWNrKTtcbjMxNTQ6XHRcdGlmIChlcnIgXHUwMDNjIDApXG4zMTU1Olx0XHRcdHJldHVybiBlcnI7XG4zMTU2Olx0XG4zMTU3Olx0XHR0ID0gbmxtc2dfZGF0YShuKTtcbjMxNTg6XHRcdHBhcmVudCA9IHQtXHUwMDNldGNtX3BhcmVudDtcbjMxNTk6XHRcdGNsID0gMDtcbjMxNjA6XHRcbjMxNjE6XHRcdGJsb2NrID0gdGNmX2Jsb2NrX2ZpbmQobmV0LCBcdTAwMjZxLCBcdTAwMjZwYXJlbnQsIFx1MDAyNmNsLFxuMzE2MjpcdFx0XHRcdCAgICAgICB0LVx1MDAzZXRjbV9pZmluZGV4LCB0LVx1MDAzZXRjbV9ibG9ja19pbmRleCwgZXh0YWNrKTtcbjMxNjM6XHRcdGlmIChJU19FUlIoYmxvY2spKVxuMzE2NDpcdFx0XHRyZXR1cm4gUFRSX0VSUihibG9jayk7XG4zMTY1Olx0XG4zMTY2Olx0XHRjaGFpbl9pbmRleCA9IG5sYV9nZXRfdTMyX2RlZmF1bHQodGNhW1RDQV9DSEFJTl0sIDApO1xuMzE2NzpcdFx0aWYgKGNoYWluX2luZGV4IFx1MDAzZSBUQ19BQ1RfRVhUX1ZBTF9NQVNLKSB7XG4zMTY4Olx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7U3BlY2lmaWVkIGNoYWluIGluZGV4IGV4Y2VlZHMgdXBwZXIgbGltaXRcJiMzNDspO1xuMzE2OTpcdFx0XHRlcnIgPSAtRUlOVkFMO1xuMzE3MDpcdFx0XHRnb3RvIGVycm91dF9ibG9jaztcbjMxNzE6XHRcdH1cbjMxNzI6XHRcbjMxNzM6XHRcdG11dGV4X2xvY2soXHUwMDI2YmxvY2stXHUwMDNlbG9jayk7XG4zMTc0Olx0XHRjaGFpbiA9IHRjZl9jaGFpbl9sb29rdXAoYmxvY2ssIGNoYWluX2luZGV4KTtcbjMxNzU6XHRcdGlmIChuLVx1MDAzZW5sbXNnX3R5cGUgPT0gUlRNX05FV0NIQUlOKSB7XG4zMTc2Olx0XHRcdGlmIChjaGFpbikge1xuMzE3NzpcdFx0XHRcdGlmICh0Y2ZfY2hhaW5faGVsZF9ieV9hY3RzX29ubHkoY2hhaW4pKSB7XG4zMTc4Olx0XHRcdFx0XHQvKiBUaGUgY2hhaW4gZXhpc3RzIG9ubHkgYmVjYXVzZSB0aGVyZSBpc1xuMzE3OTpcdFx0XHRcdFx0ICogc29tZSBhY3Rpb24gcmVmZXJlbmNpbmcgaXQuXG4zMTgwOlx0XHRcdFx0XHQgKi9cbjMxODE6XHRcdFx0XHRcdHRjZl9jaGFpbl9ob2xkKGNoYWluKTtcbjMxODI6XHRcdFx0XHR9IGVsc2Uge1xuMzE4MzpcdFx0XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtGaWx0ZXIgY2hhaW4gYWxyZWFkeSBleGlzdHNcJiMzNDspO1xuMzE4NDpcdFx0XHRcdFx0ZXJyID0gLUVFWElTVDtcbjMxODU6XHRcdFx0XHRcdGdvdG8gZXJyb3V0X2Jsb2NrX2xvY2tlZDtcbjMxODY6XHRcdFx0XHR9XG4zMTg3Olx0XHRcdH0gZWxzZSB7XG4zMTg4Olx0XHRcdFx0aWYgKCEobi1cdTAwM2VubG1zZ19mbGFncyBcdTAwMjYgTkxNX0ZfQ1JFQVRFKSkge1xuMzE4OTpcdFx0XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtOZWVkIGJvdGggUlRNX05FV0NIQUlOIGFuZCBOTE1fRl9DUkVBVEUgdG8gY3JlYXRlIGEgbmV3IGNoYWluXCYjMzQ7KTtcbjMxOTA6XHRcdFx0XHRcdGVyciA9IC1FTk9FTlQ7XG4zMTkxOlx0XHRcdFx0XHRnb3RvIGVycm91dF9ibG9ja19sb2NrZWQ7XG4zMTkyOlx0XHRcdFx0fVxuMzE5MzpcdFx0XHRcdGNoYWluID0gdGNmX2NoYWluX2NyZWF0ZShibG9jaywgY2hhaW5faW5kZXgpO1xuMzE5NDpcdFx0XHRcdGlmICghY2hhaW4pIHtcbjMxOTU6XHRcdFx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7RmFpbGVkIHRvIGNyZWF0ZSBmaWx0ZXIgY2hhaW5cJiMzNDspO1xuMzE5NjpcdFx0XHRcdFx0ZXJyID0gLUVOT01FTTtcbjMxOTc6XHRcdFx0XHRcdGdvdG8gZXJyb3V0X2Jsb2NrX2xvY2tlZDtcbjMxOTg6XHRcdFx0XHR9XG4zMTk5Olx0XHRcdH1cbjMyMDA6XHRcdH0gZWxzZSB7XG4zMjAxOlx0XHRcdGlmICghY2hhaW4gfHwgdGNmX2NoYWluX2hlbGRfYnlfYWN0c19vbmx5KGNoYWluKSkge1xuMzIwMjpcdFx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7Q2Fubm90IGZpbmQgc3BlY2lmaWVkIGZpbHRlciBjaGFpblwmIzM0Oyk7XG4zMjAzOlx0XHRcdFx0ZXJyID0gLUVJTlZBTDtcbjMyMDQ6XHRcdFx0XHRnb3RvIGVycm91dF9ibG9ja19sb2NrZWQ7XG4zMjA1Olx0XHRcdH1cbjMyMDY6XHRcdFx0dGNmX2NoYWluX2hvbGQoY2hhaW4pO1xuMzIwNzpcdFx0fVxuMzIwODpcdFxuMzIwOTpcdFx0aWYgKG4tXHUwMDNlbmxtc2dfdHlwZSA9PSBSVE1fTkVXQ0hBSU4pIHtcbjMyMTA6XHRcdFx0LyogTW9kaWZ5aW5nIGNoYWluIHJlcXVpcmVzIGhvbGRpbmcgcGFyZW50IGJsb2NrIGxvY2suIEluIGNhc2VcbjMyMTE6XHRcdFx0ICogdGhlIGNoYWluIHdhcyBzdWNjZXNzZnVsbHkgYWRkZWQsIHRha2UgYSByZWZlcmVuY2UgdG8gdGhlXG4zMjEyOlx0XHRcdCAqIGNoYWluLiBUaGlzIGVuc3VyZXMgdGhhdCBhbiBlbXB0eSBjaGFpbiBkb2VzIG5vdCBkaXNhcHBlYXIgYXRcbjMyMTM6XHRcdFx0ICogdGhlIGVuZCBvZiB0aGlzIGZ1bmN0aW9uLlxuMzIxNDpcdFx0XHQgKi9cbjMyMTU6XHRcdFx0dGNmX2NoYWluX2hvbGQoY2hhaW4pO1xuMzIxNjpcdFx0XHRjaGFpbi1cdTAwM2VleHBsaWNpdGx5X2NyZWF0ZWQgPSB0cnVlO1xuMzIxNzpcdFx0fVxuMzIxODpcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmJsb2NrLVx1MDAzZWxvY2spO1xuMzIxOTpcdFxuMzIyMDpcdFx0c3dpdGNoIChuLVx1MDAzZW5sbXNnX3R5cGUpIHtcbjMyMjE6XHRcdGNhc2UgUlRNX05FV0NIQUlOOlxuMzIyMjpcdFx0XHRlcnIgPSB0Y19jaGFpbl90bXBsdF9hZGQoY2hhaW4sIG5ldCwgdGNhLCBleHRhY2spO1xuMzIyMzpcdFx0XHRpZiAoZXJyKSB7XG4zMjI0Olx0XHRcdFx0dGNmX2NoYWluX3B1dF9leHBsaWNpdGx5X2NyZWF0ZWQoY2hhaW4pO1xuMzIyNTpcdFx0XHRcdGdvdG8gZXJyb3V0O1xuMzIyNjpcdFx0XHR9XG4zMjI3Olx0XG4zMjI4Olx0XHRcdHRjX2NoYWluX25vdGlmeShjaGFpbiwgTlVMTCwgMCwgTkxNX0ZfQ1JFQVRFIHwgTkxNX0ZfRVhDTCxcbjMyMjk6XHRcdFx0XHRcdFJUTV9ORVdDSEFJTiwgZmFsc2UsIGV4dGFjayk7XG4zMjMwOlx0XHRcdGJyZWFrO1xuMzIzMTpcdFx0Y2FzZSBSVE1fREVMQ0hBSU46XG4zMjMyOlx0XHRcdHRmaWx0ZXJfbm90aWZ5X2NoYWluKG5ldCwgc2tiLCBibG9jaywgcSwgcGFyZW50LCBuLFxuMzIzMzpcdFx0XHRcdFx0ICAgICBjaGFpbiwgUlRNX0RFTFRGSUxURVIsIGV4dGFjayk7XG4zMjM0Olx0XHRcdC8qIEZsdXNoIHRoZSBjaGFpbiBmaXJzdCBhcyB0aGUgdXNlciByZXF1ZXN0ZWQgY2hhaW4gcmVtb3ZhbC4gKi9cbjMyMzU6XHRcdFx0dGNmX2NoYWluX2ZsdXNoKGNoYWluLCB0cnVlKTtcbjMyMzY6XHRcdFx0LyogSW4gY2FzZSB0aGUgY2hhaW4gd2FzIHN1Y2Nlc3NmdWxseSBkZWxldGVkLCBwdXQgYSByZWZlcmVuY2VcbjMyMzc6XHRcdFx0ICogdG8gdGhlIGNoYWluIHByZXZpb3VzbHkgdGFrZW4gZHVyaW5nIGFkZGl0aW9uLlxuMzIzODpcdFx0XHQgKi9cbjMyMzk6XHRcdFx0dGNmX2NoYWluX3B1dF9leHBsaWNpdGx5X2NyZWF0ZWQoY2hhaW4pO1xuMzI0MDpcdFx0XHRicmVhaztcbjMyNDE6XHRcdGNhc2UgUlRNX0dFVENIQUlOOlxuMzI0MjpcdFx0XHRlcnIgPSB0Y19jaGFpbl9ub3RpZnkoY2hhaW4sIHNrYiwgbi1cdTAwM2VubG1zZ19zZXEsXG4zMjQzOlx0XHRcdFx0XHQgICAgICBuLVx1MDAzZW5sbXNnX2ZsYWdzLCBuLVx1MDAzZW5sbXNnX3R5cGUsIHRydWUsIGV4dGFjayk7XG4zMjQ0Olx0XHRcdGlmIChlcnIgXHUwMDNjIDApXG4zMjQ1Olx0XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtGYWlsZWQgdG8gc2VuZCBjaGFpbiBub3RpZnkgbWVzc2FnZVwmIzM0Oyk7XG4zMjQ2Olx0XHRcdGJyZWFrO1xuMzI0NzpcdFx0ZGVmYXVsdDpcbjMyNDg6XHRcdFx0ZXJyID0gLUVPUE5PVFNVUFA7XG4zMjQ5Olx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7VW5zdXBwb3J0ZWQgbWVzc2FnZSB0eXBlXCYjMzQ7KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAyMjo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NzY3CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBwcmVzZW50ZWQgYXMgaWYgaXQgd2VyZSBteSBvd24gaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipEaXZpbmcgRGVlcGVyIGludG8gYHRjX2N0bF9jaGFpbmAqKgoKQWxyaWdodCwgSSYjMzk7bSBhdCBhIHBvaW50IHdoZXJlIEkmIzM5O20gZXhhbWluaW5nIGEgc3BlY2lmaWMgY29udHJvbCBzdHJ1Y3R1cmUsIGxpa2VseSB3aXRoaW4gYSB0cmFmZmljIGNvbnRyb2wgc3lzdGVtIG9yIGEgc2ltaWxhciBuZXR3b3JrIG1hbmFnZW1lbnQgY29udGV4dC4gVGhlIHBocmFzaW5nICYjMzQ7TGV0JiMzOTtzIHNlZSB0aGUgcmVzdCBvZiBgdGNfY3RsX2NoYWluYCYjMzQ7IHN1Z2dlc3RzIEkmIzM5O3ZlIGFscmVhZHkgZW5nYWdlZCB3aXRoICpwYXJ0KiBvZiB0aGlzIHN0cnVjdHVyZSBhbmQgbm93IEkmIzM5O20gcmVhZHkgdG8gZGVsdmUgaW50byB0aGUgcmVtYWluaW5nIGVsZW1lbnRzLiBJJiMzOTttIHByb2JhYmx5IGxvb2tpbmcgYXQgYSBjaGFpbiBvZiBjb250cm9sIGVsZW1lbnRzLiBJJiMzOTttIGFscmVhZHkgYXdhcmUgdGhhdCBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgdGhlIG90aGVyIGNvbnRyb2xzIGluIHRoaXMgY2hhaW4sIHNvIEkgd2FudCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgcmVzdCBvZiB0aGVtIGJlaGF2ZS4KClRoaXMgY291bGQgbWVhbiBJJiMzOTttIHRyYWNpbmcgdGhlIGV4ZWN1dGlvbiBmbG93LCBpZGVudGlmeWluZyBkZXBlbmRlbmNpZXMgYmV0d2VlbiBkaWZmZXJlbnQgY29udHJvbCBwb2ludHMsIG9yIHBlcmhhcHMgdHJ5aW5nIHRvIGRlYnVnIGFuIHVuZXhwZWN0ZWQgYmVoYXZpb3IuIE15IGdvYWwgaXMgdG8gYWNoaWV2ZSBhbiBob2xpc3RpYyB1bmRlcnN0YW5kaW5nIG9mIHRoaXMgY2hhaW47IEkgbmVlZCB0byBrbm93IHRoZSBpbmRpdmlkdWFsIGNvbXBvbmVudHMgYW5kIGhvdyB0aGV5IGludGVyYWN0IHRvIGFjaGlldmUgc29tZSBkZXNpcmVkIG91dGNvbWUuIEkgbmVlZCBhIGJyb2FkZXIgdmlldyB0byB1bmRlcnN0YW5kIGhvdyB0aGUgd2hvbGUgc3lzdGVtIHdvcmtzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDIyOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NjaGVkL2Nsc19hcGkuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMyNTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzI1MDpcdFx0XHRnb3RvIGVycm91dDtcbjMyNTE6XHRcdH1cbjMyNTI6XHRcbjMyNTM6XHRlcnJvdXQ6XG4zMjU0Olx0XHR0Y2ZfY2hhaW5fcHV0KGNoYWluKTtcbjMyNTU6XHRlcnJvdXRfYmxvY2s6XG4zMjU2Olx0XHR0Y2ZfYmxvY2tfcmVsZWFzZShxLCBibG9jaywgdHJ1ZSk7XG4zMjU3Olx0XHRpZiAoZXJyID09IC1FQUdBSU4gXHUwMDI2XHUwMDI2IG4tXHUwMDNlbmxtc2dfdHlwZSA9PSBSVE1fTkVXQ0hBSU4pXG4zMjU4Olx0XHRcdC8qIFJlcGxheSB0aGUgcmVxdWVzdC4gKi9cbjMyNTk6XHRcdFx0Z290byByZXBsYXk7XG4zMjYwOlx0XHRyZXR1cm4gZXJyO1xuMzI2MTpcdFxuMzI2MjpcdGVycm91dF9ibG9ja19sb2NrZWQ6XG4zMjYzOlx0XHRtdXRleF91bmxvY2soXHUwMDI2YmxvY2stXHUwMDNlbG9jayk7XG4zMjY0Olx0XHRnb3RvIGVycm91dF9ibG9jaztcbjMyNjU6XHR9XG4zMjY2Olx0XG4zMjY3Olx0LyogY2FsbGVkIHdpdGggUlROTCAqL1xuMzI2ODpcdHN0YXRpYyBpbnQgdGNfZHVtcF9jaGFpbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4zMjY5Olx0e1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDIyOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUzMjcKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGB0Y19jdGxfY2hhaW5gIEZ1bmN0aW9uKioKCk9rYXksIHNvIGB0Y19jdGxfY2hhaW5gIGxvb2tzIGxpa2UgaXQmIzM5O3MgdGhlIGNvcmUgb2Ygc29tZXRoaW5nIHJlbGF0ZWQgdG8gdHJhZmZpYyBjb250cm9sIGNoYWlucywgYW5kIGl0JiMzOTtzIGNvbW11bmljYXRpbmcgdGhyb3VnaCBydG5ldGxpbmsuIFNwZWNpZmljYWxseSwgSSBzZWUgaXQgcmVzcG9uZHMgdG8gYFJUTV9ORVdDSEFJTmAsIGBSVE1fREVMQ0hBSU5gLCBhbmQgYFJUTV9HRVRDSEFJTmAgbWVzc2FnZXMuIFRoYXQmIzM5O3MgZ29vZDsgaXQgY29uZmlybXMgbXkgaW5pdGlhbCBodW5jaCBhYm91dCBob3cgaXQmIzM5O3MgaW50ZXJhY3Rpbmcgd2l0aCB0aGUga2VybmVsJiMzOTtzIG5ldHdvcmtpbmcgc3RhY2suIE5vdywgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHBpbnBvaW50IGV4YWN0bHkgKndoZXJlKiB0aGlzIGB0Y19jdGxfY2hhaW5gIGZ1bmN0aW9uIGlzIHJlZ2lzdGVyZWQuIFRoYXQgaW5mb3JtYXRpb24gaXMgY3J1Y2lhbCB0byB1bmRlcnN0YW5kaW5nIGl0cyByb2xlLCBjb250ZXh0IHdpdGhpbiB0aGUgbGFyZ2VyIHRjIGZyYW1ld29yaywgYW5kIGFueSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLiBMZXQmIzM5O3Mgc2VlIGlmIEkgY2FuIHRyYWNlIHRoYXQgcmVnaXN0cmF0aW9uLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMjI6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGNfY3RsX2NoYWluJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjaGVkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9jbHNfYXBpLmM9MzEyMz1zdGF0aWMgdm9pZCB0Y19jaGFpbl90bXBsdF9kZWwoY29uc3Qgc3RydWN0IHRjZl9wcm90b19vcHMgKnRtcGx0X29wcyxcbi0tXG5uZXQvc2NoZWQvY2xzX2FwaS5jLTMxMzUtXG5uZXQvc2NoZWQvY2xzX2FwaS5jOjMxMzY6c3RhdGljIGludCB0Y19jdGxfY2hhaW4oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpuLFxubmV0L3NjaGVkL2Nsc19hcGkuYy0zMTM3LVx0XHRcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5uZXQvc2NoZWQvY2xzX2FwaS5jPTQxMjU9c3RhdGljIGNvbnN0IHN0cnVjdCBydG5sX21zZ19oYW5kbGVyIHRjX2ZpbHRlcl9ydG5sX21zZ19oYW5kbGVyc1tdIF9faW5pdGNvbnN0ID0ge1xuLS1cbm5ldC9zY2hlZC9jbHNfYXBpLmMtNDEzMS1cdCAuZHVtcGl0ID0gdGNfZHVtcF90ZmlsdGVyLCAuZmxhZ3MgPSBSVE5MX0ZMQUdfRE9JVF9VTkxPQ0tFRH0sXG5uZXQvc2NoZWQvY2xzX2FwaS5jOjQxMzI6XHR7Lm1zZ3R5cGUgPSBSVE1fTkVXQ0hBSU4sIC5kb2l0ID0gdGNfY3RsX2NoYWlufSxcbm5ldC9zY2hlZC9jbHNfYXBpLmM6NDEzMzpcdHsubXNndHlwZSA9IFJUTV9ERUxDSEFJTiwgLmRvaXQgPSB0Y19jdGxfY2hhaW59LFxubmV0L3NjaGVkL2Nsc19hcGkuYzo0MTM0Olx0ey5tc2d0eXBlID0gUlRNX0dFVENIQUlOLCAuZG9pdCA9IHRjX2N0bF9jaGFpbixcbm5ldC9zY2hlZC9jbHNfYXBpLmMtNDEzNS1cdCAuZHVtcGl0ID0gdGNfZHVtcF9jaGFpbn0sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMjI6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTkzNAoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDEwNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgYHRjX2N0bF9jaGFpbmAgSGFuZGxlcioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYHRjX2N0bF9jaGFpbmAsIGFuZCBpdCYjMzk7cyBwcmV0dHkgY2xlYXIgdGhpcyBpcyB0aGUgd29ya2hvcnNlIGZvciBtYW5hZ2luZyB0cmFmZmljIGNvbnRyb2wgY2hhaW5zLiBTcGVjaWZpY2FsbHksIGl0IGhhbmRsZXMgdGhlIFJUTV9ORVdDSEFJTiwgUlRNX0RFTENIQUlOLCBhbmQgUlRNX0dFVENIQUlOIG5ldGxpbmsgbWVzc2FnZXMuIEdpdmVuIHRoYXQgaXQmIzM5O3MgbmVzdGxlZCBpbiBgbmV0L3NjaGVkL2Nsc19hcGkuY2AsIHRoaXMgaXMgY29yZSBuZXR3b3JraW5nIGFuZCBkaXJlY3RseSByZWxhdGVzIHRvIHRoZSB0cmFmZmljIGNvbnRyb2wgbWVjaGFuaXNtcy4gIEl0JiMzOTtzIGEgY3JpdGljYWwgY29tcG9uZW50IGZvciBpbnRlcmFjdGluZyB3aXRoIHRoZSB1c2Vyc3BhY2UgdGhyb3VnaCBuZXRsaW5rIChzcGVjaWZpY2FsbHkgcnRuZXRsaW5rKS4KCk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcy4gVGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHNlZSB3aGljaCBLY29uZmlnIG9wdGlvbnMgZ292ZXJuIHRoZSBpbmNsdXNpb24gb2YgYG5ldC9zY2hlZC9jbHNfYXBpLmNgLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgTWFrZWZpbGUgb3IgS2NvbmZpZyBmaWxlcyB3aXRoaW4gdGhlIGBuZXQvc2NoZWQvYCBkaXJlY3RvcnkuIFRoYXQgd2lsbCBpbGx1bWluYXRlIHRoZSBuZWNlc3Nhcnkga2VybmVsIGNvbmZpZ3VyYXRpb25zIHRvIGVuYWJsZSB0aGlzIGZ1bmN0aW9uYWxpdHkuIEkgaGF2ZSB0byBmaWd1cmUgb3V0IHRoZSBidWlsZC10aW1lIHJlcXVpcmVtZW50cyB0byBjb25maXJtIHRoYXQgdGhlIGNoYWluIGZlYXR1cmVzIGFyZSBhcHByb3ByaWF0ZWx5IGVuYWJsZWQgaW4gdGhlIGRlcGxveWVkIHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMjI6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y2xzX2FwaSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY2hlZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvTWFrZWZpbGU9OT1vYmotJChDT05GSUdfTkVUX1NDSEVEKVx0XHQmIzQzOz0gc2NoX2FwaS5vIHNjaF9ibGFja2hvbGUub1xubmV0L3NjaGVkL01ha2VmaWxlOjEwOm9iai0kKENPTkZJR19ORVRfQ0xTKVx0XHQmIzQzOz0gY2xzX2FwaS5vXG5uZXQvc2NoZWQvTWFrZWZpbGUtMTEtb2JqLSQoQ09ORklHX05FVF9DTFNfQUNUKVx0JiM0Mzs9IGFjdF9hcGkub1xuLS1cbm5ldC9zY2hlZC9jbHNfYXBpLmMtMi0vKlxubmV0L3NjaGVkL2Nsc19hcGkuYzozOiAqIG5ldC9zY2hlZC9jbHNfYXBpLmNcdFBhY2tldCBjbGFzc2lmaWVyIEFQSS5cbm5ldC9zY2hlZC9jbHNfYXBpLmMtNC0gKlxuLS1cbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM9MjM1OD1zdGF0aWMgaW50IGZsX2NoYW5nZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICppbl9za2IsXG4tLVxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0yNDMwLVx0XHRcdC8qIEZpbHRlciB3aXRoIHNwZWNpZmllZCBoYW5kbGUgd2FzIGNvbmN1cnJlbnRseVxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzoyNDMxOlx0XHRcdCAqIGluc2VydGVkIGFmdGVyIGluaXRpYWwgY2hlY2sgaW4gY2xzX2FwaS4gVGhpcyBpcyBub3Rcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMjQzMi1cdFx0XHQgKiBuZWNlc3NhcmlseSBhbiBlcnJvciBpZiBOTE1fRl9FWENMIGlzIG5vdCBzZXQgaW5cbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6MjQzMzpcdFx0XHQgKiBtZXNzYWdlIGZsYWdzLiBSZXR1cm5pbmcgRUFHQUlOIHdpbGwgY2F1c2UgY2xzX2FwaSB0b1xubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0yNDM0LVx0XHRcdCAqIHRyeSB0byB1cGRhdGUgY29uY3VycmVudGx5IGluc2VydGVkIHJ1bGUuXG4tLVxubmV0L3NjaGVkL3NjaF9hcGkuYy01Ny0gICAtIFwmIzM0O3NjaGVkdWxlcnNcJiMzNDssIHdoaWNoIHNwbGl0IGFsbCB0aGUgcGFja2V0cyB0byBcJiMzNDt0cmFmZmljIGNsYXNzZXNcJiMzNDssXG5uZXQvc2NoZWQvc2NoX2FwaS5jOjU4OiAgICAgdXNpbmcgXCYjMzQ7cGFja2V0IGNsYXNzaWZpZXJzXCYjMzQ7IChsb29rIGF0IGNsc19hcGkuYylcbm5ldC9zY2hlZC9zY2hfYXBpLmMtNTktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDIyOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY3MDAKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHdlbnQ6CgoqKkV4YW1pbmluZyB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gZm9yIE5ldHdvcmsgVHJhZmZpYyBDb250cm9sKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaW5kIHNvbWV0aGluZyByZWxhdGVkIHRvIG5ldHdvcmsgdHJhZmZpYyBjb250cm9sLCBzcGVjaWZpY2FsbHkgdGhlIGBORVRfQ0xTYCBvcHRpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBkaXZlIGludG8gdGhlIGtlcm5lbCYjMzk7cyBjb25maWd1cmF0aW9uIGZpbGVzLiBHaXZlbiBteSBleHBlcmllbmNlLCB0aGUgcGxhY2UgdG8gc3RhcnQgaXMgbGlrZWx5IGBuZXQvc2NoZWQvS2NvbmZpZ2AuIFRoYXQmIzM5O3Mgd2hlcmUgSSB3b3VsZCBleHBlY3QgdG8gZmluZCBvcHRpb25zIHJlbGF0ZWQgdG8gdGhlIHNjaGVkdWxpbmcgYW5kIGNsYXNzaWZpY2F0aW9uIG9mIG5ldHdvcmsgcGFja2V0cy4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGluIHRoZXJlLiBJJiMzOTttIGFzc3VtaW5nIHRoYXQgc2luY2UgSSBoYXZlIGJlZW4gd29ya2luZyB3aXRoIGtlcm5lbCBjb25maWd1cmF0aW9ucyB0aGF0IEkgd2lsbCBiZSBhYmxlIHRvIGludGVycHJldCBpdCBhbmQgZmluZCB0aGUgcmVsZXZhbnQgc2VjdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMjI6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5FVF9DTFNcXGImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWc9NDc5PWNvbW1lbnQgXCYjMzQ7Q2xhc3NpZmljYXRpb25cJiMzNDtcbm5ldC9zY2hlZC9LY29uZmlnLTQ4MC1cbm5ldC9zY2hlZC9LY29uZmlnOjQ4MTpjb25maWcgTkVUX0NMU1xubmV0L3NjaGVkL0tjb25maWctNDgyLVx0Ym9vbFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAyMjo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2OTU0CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBORVRfQ0xTIERlcGVuZGVuY3kqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpcyB0byBkZXRlcm1pbmUgdGhlIGNhdXNhbCByZWxhdGlvbnNoaXAgYmV0d2VlbiBgTkVUX0NMU2AgYW5kIGBORVRfU0NIRURgLiBJcyBgTkVUX0NMU2Agc2ltcGx5IGEgZGVwZW5kZW50IG9wdGlvbiwgb3IgZG9lcyBpdCByZXF1aXJlIHNvbWUgb3RoZXIgdW5kZXJseWluZyBtZWNoYW5pc20gdG8gYmUgZW5hYmxlZD8gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHNlbGVjdC9lbmFibGUgcmVsYXRpb25zaGlwLCBpZiBhbnksIGFuZCBpZiBgTkVUX0NMU2AgaGFzIGEgaGFyZCBkZXBlbmRlbmN5IG9uIGBORVRfU0NIRURgLiBJcyBgTkVUX0NMU2AgYSBmZWF0dXJlIHRoYXQgaXMgc2VsZWN0aXZlbHkgb3IgY29uZGl0aW9uYWxseSBlbmFibGVkIG9yIGRvZXMgYE5FVF9DTFNgIGRlcGVuZCBvbiBgTkVUX1NDSEVEYD8KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMjI6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ3NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDc1Olx0XHRkZWZhdWx0IFwmIzM0O3NmcVwmIzM0OyBpZiBERUZBVUxUX1NGUVxuIDQ3NjpcdFx0ZGVmYXVsdCBcJiMzNDtwZmlmb19mYXN0XCYjMzQ7XG4gNDc3Olx0ZW5kaWZcbiA0Nzg6XHRcbiA0Nzk6XHRjb21tZW50IFwmIzM0O0NsYXNzaWZpY2F0aW9uXCYjMzQ7XG4gNDgwOlx0XG4gNDgxOlx0Y29uZmlnIE5FVF9DTFNcbiA0ODI6XHRcdGJvb2xcbiA0ODM6XHRcbiA0ODQ6XHRjb25maWcgTkVUX0NMU19CQVNJQ1xuIDQ4NTpcdFx0dHJpc3RhdGUgXCYjMzQ7RWxlbWVudGFyeSBjbGFzc2lmaWNhdGlvbiAoQkFTSUMpXCYjMzQ7XG4gNDg2Olx0XHRzZWxlY3QgTkVUX0NMU1xuIDQ4NzpcdFx0aGVscFxuIDQ4ODpcdFx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGJlIGFibGUgdG8gY2xhc3NpZnkgcGFja2V0cyB1c2luZ1xuIDQ4OTpcdFx0ICBvbmx5IGV4dGVuZGVkIG1hdGNoZXMgYW5kIGFjdGlvbnMuXG4gNDkwOlx0XG4gNDkxOlx0XHQgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcbiA0OTI6XHRcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGNsc19iYXNpYy5cbiA0OTM6XHRcbiA0OTQ6XHRjb25maWcgTkVUX0NMU19ST1VURTRcbiA0OTU6XHRcdHRyaXN0YXRlIFwmIzM0O1JvdXRpbmcgZGVjaXNpb24gKFJPVVRFKVwmIzM0O1xuIDQ5NjpcdFx0ZGVwZW5kcyBvbiBJTkVUXG4gNDk3Olx0XHRzZWxlY3QgSVBfUk9VVEVfQ0xBU1NJRFxuIDQ5ODpcdFx0c2VsZWN0IE5FVF9DTFNcbiA0OTk6XHRcdGhlbHBcbiA1MDA6XHRcdCAgSWYgeW91IHNheSBZIGhlcmUsIHlvdSB3aWxsIGJlIGFibGUgdG8gY2xhc3NpZnkgcGFja2V0c1xuIDUwMTpcdFx0ICBhY2NvcmRpbmcgdG8gdGhlIHJvdXRlIHRhYmxlIGVudHJ5IHRoZXkgbWF0Y2hlZC5cbiA1MDI6XHRcbiA1MDM6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxuIDUwNDpcdFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgY2xzX3JvdXRlLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAyMjo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NTUxCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkludmVzdGlnYXRpbmcgTmV0d29yayBTY2hlZHVsZXIgQ29uZmlndXJhdGlvbioqCgpSaWdodCwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGUga2VybmVsIGNvbmZpZyBoZXJlLiBGaXJzdCwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCYjMzk7cyByZWxhdGVkIHRvIHRoZSBuZXR3b3JrIHNjaGVkdWxlciAoYE5FVF9TQ0hFRGApLiBPa2F5LCBhY2NvcmRpbmcgdG8gbXkgbm90ZXMsIHRoYXQgbGlrZWx5IGxpdmVzIGluIGBuZXQvc2NoZWQvS2NvbmZpZ2AuIFNvLCB0aGUgbG9naWNhbCBuZXh0IHN0ZXAgaXMgdG8gYWN0dWFsbHkgZ28gYW5kIGNoZWNrIHdoYXQgYE5FVF9TQ0hFRGAgaXMgKmRlZmluZWQqIGFzIGluIHRoZSBgbmV0L3NjaGVkL0tjb25maWdgIGZpbGUuIFRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7bGwgZ2V0IHRoZSByZWFsIGxvdy1kb3duIG9uIHRoZSBkZXBlbmRlbmNpZXMsIG9wdGlvbnMsIGFuZCB3aGF0JiMzOTtzIGFjdHVhbGx5IHVuZGVyIHRoaXMgY29uZmlnIHVtYnJlbGxhLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgYWN0dWFsbHkgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDIyOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjXG4gICAzOlx0IyBUcmFmZmljIGNvbnRyb2wgY29uZmlndXJhdGlvbi5cbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0bWVudWNvbmZpZyBORVRfU0NIRURcbiAgIDc6XHRcdGJvb2wgXCYjMzQ7UW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nXCYjMzQ7XG4gICA4Olx0XHRzZWxlY3QgTkVUX1NDSF9GSUZPXG4gICA5Olx0XHRoZWxwXG4gIDEwOlx0XHQgIFdoZW4gdGhlIGtlcm5lbCBoYXMgc2V2ZXJhbCBwYWNrZXRzIHRvIHNlbmQgb3V0IG92ZXIgYSBuZXR3b3JrXG4gIDExOlx0XHQgIGRldmljZSwgaXQgaGFzIHRvIGRlY2lkZSB3aGljaCBvbmVzIHRvIHNlbmQgZmlyc3QsIHdoaWNoIG9uZXMgdG9cbiAgMTI6XHRcdCAgZGVsYXksIGFuZCB3aGljaCBvbmVzIHRvIGRyb3AuIFRoaXMgaXMgdGhlIGpvYiBvZiB0aGUgcXVldWVpbmdcbiAgMTM6XHRcdCAgZGlzY2lwbGluZXMsIHNldmVyYWwgZGlmZmVyZW50IGFsZ29yaXRobXMgZm9yIGhvdyB0byBkbyB0aGlzXG4gIDE0Olx0XHQgIFwmIzM0O2ZhaXJseVwmIzM0OyBoYXZlIGJlZW4gcHJvcG9zZWQuXG4gIDE1Olx0XG4gIDE2Olx0XHQgIElmIHlvdSBzYXkgTiBoZXJlLCB5b3Ugd2lsbCBnZXQgdGhlIHN0YW5kYXJkIHBhY2tldCBzY2hlZHVsZXIsIHdoaWNoXG4gIDE3Olx0XHQgIGlzIGEgRklGTyAoZmlyc3QgY29tZSwgZmlyc3Qgc2VydmVkKS4gSWYgeW91IHNheSBZIGhlcmUsIHlvdSB3aWxsIGJlXG4gIDE4Olx0XHQgIGFibGUgdG8gY2hvb3NlIGZyb20gYW1vbmcgc2V2ZXJhbCBhbHRlcm5hdGl2ZSBhbGdvcml0aG1zIHdoaWNoIGNhblxuICAxOTpcdFx0ICB0aGVuIGJlIGF0dGFjaGVkIHRvIGRpZmZlcmVudCBuZXR3b3JrIGRldmljZXMuIFRoaXMgaXMgdXNlZnVsIGZvclxuICAyMDpcdFx0ICBleGFtcGxlIGlmIHNvbWUgb2YgeW91ciBuZXR3b3JrIGRldmljZXMgYXJlIHJlYWwgdGltZSBkZXZpY2VzIHRoYXRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMjI6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODA4MgoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDkzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZToKCioqVGhpbmtpbmcgVGhyb3VnaCBOZXR3b3JrIENsYXNzaWZpZXIgU2VsZWN0aW9uKioKClJpZ2h0LCBzbyB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBuZXR3b3JrIGNsYXNzaWZpZXJzIGhlcmUsIGFuZCBJIHNlZSB3ZSYjMzk7dmUgZ290IGBORVRfQ0xTYCBhcyB0aGUgb3ZlcmFyY2hpbmcgY2F0ZWdvcnkuIFRoaXMgZ2V0cyBwaWNrZWQgYnkgdmFyaW91cyBzcGVjaWZpYyBjbGFzc2lmaWVycywgdGhpbmdzIGxpa2UgYE5FVF9DTFNfQkFTSUNgLCBgTkVUX0NMU19GTE9XRVJgLCBhbmQgYE5FVF9DTFNfTUFUQ0hBTExgLiBPaCwgYW5kIGxldCYjMzk7cyBub3QgZm9yZ2V0IGBORVRfQ0xTX0FDVGAsIHdoaWNoIHN1Z2dlc3RzIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYWN0aW9ucyBhbG9uZ3NpZGUgdGhlIGNsYXNzaWZpY2F0aW9uLgoKTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgcmVsYXRlLiBJdCBsb29rcyBsaWtlIGBORVRfU0NIRURgIChzY2hlZHVsZXIpIGFuZCBgTkVUX0NMU19BQ1RgIGFyZSBrZXkgcGxheWVycyBoZXJlLCBtYXliZSBpbnRlcmFjdGluZyB3aXRoIGBORVRfQ0xTYC4gSSBzaG91bGQgZGlnIGludG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIHRvIHNlZSBob3cgdGhlc2UgdGhpbmdzIGFyZSB3aXJlZCB0b2dldGhlci4KClNvLCBsZXQmIzM5O3Mgc2VlLCB0aGUgbmV4dCBzdGVwIGlzIHRvIHF1aWNrbHkgY2hlY2sgYG5ldC9zY2hlZC9LY29uZmlnYC4gSSBuZWVkIHRvIGNvbmZpcm0gaWYgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWZlcmVuY2UgYHNlbGVjdCBORVRfQ0xTYCBhbmQgaG93IHRoZXkgaW5mbHVlbmNlIHRoZSBpbmNsdXNpb24gb3IgZXhjbHVzaW9uIG9mIGBORVRfQ0xTYCBpdHNlbGYuIEkmIzM5O20gYWZ0ZXIgdGhlIGRlcGVuZGVuY2llcyBhbmQgYW55IG9yZGVyaW5nIG9mIHRoZXNlIG9wdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDIyOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlbGVjdCBORVRfQ0xTXFxiJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjaGVkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9LY29uZmlnPTQ4ND1jb25maWcgTkVUX0NMU19CQVNJQ1xubmV0L3NjaGVkL0tjb25maWctNDg1LVx0dHJpc3RhdGUgXCYjMzQ7RWxlbWVudGFyeSBjbGFzc2lmaWNhdGlvbiAoQkFTSUMpXCYjMzQ7XG5uZXQvc2NoZWQvS2NvbmZpZzo0ODY6XHRzZWxlY3QgTkVUX0NMU1xubmV0L3NjaGVkL0tjb25maWctNDg3LVx0aGVscFxuLS1cbm5ldC9zY2hlZC9LY29uZmlnPTQ5ND1jb25maWcgTkVUX0NMU19ST1VURTRcbi0tXG5uZXQvc2NoZWQvS2NvbmZpZy00OTctXHRzZWxlY3QgSVBfUk9VVEVfQ0xBU1NJRFxubmV0L3NjaGVkL0tjb25maWc6NDk4Olx0c2VsZWN0IE5FVF9DTFNcbm5ldC9zY2hlZC9LY29uZmlnLTQ5OS1cdGhlbHBcbi0tXG5uZXQvc2NoZWQvS2NvbmZpZz01MDY9Y29uZmlnIE5FVF9DTFNfRldcbm5ldC9zY2hlZC9LY29uZmlnLTUwNy1cdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBtYXJrIChGVylcJiMzNDtcbm5ldC9zY2hlZC9LY29uZmlnOjUwODpcdHNlbGVjdCBORVRfQ0xTXG5uZXQvc2NoZWQvS2NvbmZpZy01MDktXHRoZWxwXG4tLVxubmV0L3NjaGVkL0tjb25maWc9NTE2PWNvbmZpZyBORVRfQ0xTX1UzMlxubmV0L3NjaGVkL0tjb25maWctNTE3LVx0dHJpc3RhdGUgXCYjMzQ7VW5pdmVyc2FsIDMyYml0IGNvbXBhcmlzb25zIHcvIGhhc2hpbmcgKFUzMilcJiMzNDtcbm5ldC9zY2hlZC9LY29uZmlnOjUxODpcdHNlbGVjdCBORVRfQ0xTXG5uZXQvc2NoZWQvS2NvbmZpZy01MTktXHRoZWxwXG4tLVxubmV0L3NjaGVkL0tjb25maWc9NTM5PWNvbmZpZyBORVRfQ0xTX0ZMT1dcbm5ldC9zY2hlZC9LY29uZmlnLTU0MC1cdHRyaXN0YXRlIFwmIzM0O0Zsb3cgY2xhc3NpZmllclwmIzM0O1xubmV0L3NjaGVkL0tjb25maWc6NTQxOlx0c2VsZWN0IE5FVF9DTFNcbm5ldC9zY2hlZC9LY29uZmlnLTU0Mi1cdGhlbHBcbi0tXG5uZXQvc2NoZWQvS2NvbmZpZz01NTA9Y29uZmlnIE5FVF9DTFNfQ0dST1VQXG5uZXQvc2NoZWQvS2NvbmZpZy01NTEtXHR0cmlzdGF0ZSBcJiMzNDtDb250cm9sIEdyb3VwIENsYXNzaWZpZXJcJiMzNDtcbm5ldC9zY2hlZC9LY29uZmlnOjU1MjpcdHNlbGVjdCBORVRfQ0xTXG5uZXQvc2NoZWQvS2NvbmZpZy01NTMtXHRzZWxlY3QgQ0dST1VQX05FVF9DTEFTU0lEXG4tLVxubmV0L3NjaGVkL0tjb25maWc9NTYyPWNvbmZpZyBORVRfQ0xTX0JQRlxubmV0L3NjaGVkL0tjb25maWctNTYzLVx0dHJpc3RhdGUgXCYjMzQ7QlBGLWJhc2VkIGNsYXNzaWZpZXJcJiMzNDtcbm5ldC9zY2hlZC9LY29uZmlnOjU2NDpcdHNlbGVjdCBORVRfQ0xTXG5uZXQvc2NoZWQvS2NvbmZpZy01NjUtXHRoZWxwXG4tLVxubmV0L3NjaGVkL0tjb25maWc9NTcyPWNvbmZpZyBORVRfQ0xTX0ZMT1dFUlxubmV0L3NjaGVkL0tjb25maWctNTczLVx0dHJpc3RhdGUgXCYjMzQ7Rmxvd2VyIGNsYXNzaWZpZXJcJiMzNDtcbm5ldC9zY2hlZC9LY29uZmlnOjU3NDpcdHNlbGVjdCBORVRfQ0xTXG5uZXQvc2NoZWQvS2NvbmZpZy01NzUtXHRoZWxwXG4tLVxubmV0L3NjaGVkL0tjb25maWc9NTgyPWNvbmZpZyBORVRfQ0xTX01BVENIQUxMXG5uZXQvc2NoZWQvS2NvbmZpZy01ODMtXHR0cmlzdGF0ZSBcJiMzNDtNYXRjaC1hbGwgY2xhc3NpZmllclwmIzM0O1xubmV0L3NjaGVkL0tjb25maWc6NTg0Olx0c2VsZWN0IE5FVF9DTFNcbm5ldC9zY2hlZC9LY29uZmlnLTU4NS1cdGhlbHBcbi0tXG5uZXQvc2NoZWQvS2NvbmZpZz01OTI9Y29uZmlnIE5FVF9FTUFUQ0hcbm5ldC9zY2hlZC9LY29uZmlnLTU5My1cdGJvb2wgXCYjMzQ7RXh0ZW5kZWQgTWF0Y2hlc1wmIzM0O1xubmV0L3NjaGVkL0tjb25maWc6NTk0Olx0c2VsZWN0IE5FVF9DTFNcbm5ldC9zY2hlZC9LY29uZmlnLTU5NS1cdGhlbHBcbi0tXG5uZXQvc2NoZWQvS2NvbmZpZz03MDI9Y29uZmlnIE5FVF9DTFNfQUNUXG5uZXQvc2NoZWQvS2NvbmZpZy03MDMtXHRib29sIFwmIzM0O0FjdGlvbnNcJiMzNDtcbm5ldC9zY2hlZC9LY29uZmlnOjcwNDpcdHNlbGVjdCBORVRfQ0xTXG5uZXQvc2NoZWQvS2NvbmZpZy03MDUtXHRzZWxlY3QgTkVUX1hHUkVTU1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAyMjo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5Mjc5CgkJCQkJCQlvdXRwdXQ6IDEyNgoJCQkJCQkJdGhvdWdodHM6IDQ1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRhcmdldCBBc3Nlc3NtZW50OiBgdGNfY3RsX2NoYWluYCBpbiBuZXQvc2NoZWQvY2xzX2FwaS5jKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIHRoYXQgdHdlYWtzIHRoZSBgdGNfY3RsX2NoYWluKClgIGZ1bmN0aW9uIHdpdGhpbiBgbmV0L3NjaGVkL2Nsc19hcGkuY2AuIEl0JiMzOTtzIGRlYWxpbmcgd2l0aCBob3cgdGhlIGNvZGUgaGFuZGxlcyBgLUVBR0FJTmAgZXJyb3JzLCBzcGVjaWZpY2FsbHkgaW4gdGhlIGNvbnRleHQgb2YgTmV0bGluayBtZXNzYWdlcy4gQmVmb3JlLCB0aGUgY29kZSB1bmNvbmRpdGlvbmFsbHkgcmV0cmllZCBhIGBnb3RvIHJlcGxheTtgIGZvciAqYWxsKiBgbmxtc2dfdHlwZXNgIHdoZW4gaXQgaGl0IGFuIGAtRUFHQUlOYC4gTm93LCBpdCBvbmx5IHJlcGxheXMgZm9yIGBSVE1fTkVXQ0hBSU5gLiBUaGUgcHJvYmxlbSB3YXMgdGhhdCBpZiBgdGNmX2NoYWluX2R1bXBgLCBgdGNfY2hhaW5fbm90aWZ5YCwgb3Igc29tZXRoaW5nIHNpbWlsYXIgcmV0dXJuZWQgYC1FQUdBSU5gIChvciBgTkxfU0VUX0VSUl9NU0dgKSBmb3IgYW55dGhpbmcgKm90aGVyKiB0aGFuIGEgYE5FV0NIQUlOYCBtZXNzYWdlLCBpdCB3b3VsZCBsb29wIG9yIHJlcGxheSwgcG90ZW50aWFsbHkgbGVhZGluZyB0byBhbGwgc29ydHMgb2YgbmFzdHkgaXNzdWVzIOKAkyBpbmZpbml0ZSBsb29wcywgeW91IG5hbWUgaXQuCgpUaGlua2luZyB0aGlzIHRocm91Z2gsIHRoZSBjaGFuZ2UgaXMgcHJldHR5IGZvY3VzZWQg4oCTIGl0JiMzOTtzIGFsbCBhYm91dCBjb250cm9sIGZsb3cgaW4gdGhpcyBjb3JlIG5ldHdvcmtpbmcgc3Vic3lzdGVtLiBBbmQsIGNydWNpYWxseSwgdGhpcyBgdGNfY3RsX2NoYWluYCBmdW5jdGlvbiBpcyBmdWxseSBhY2Nlc3NpYmxlIGluIHR5cGljYWwgUUVNVS9WTSBlbnZpcm9ubWVudHMgdmlhIE5ldGxpbmsvcnRuZXRsaW5rIG1lc3NhZ2VzLiBTbywgeWVhaCwgdGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuIEkmIzM5O20gZ29pbmcgdG8gc2V0IGBXb3J0aEZ1enppbmcgPSB0cnVlYC4KCk5vdywgZm9yIHRoZSBmdXp6aW5nIHN0cmF0ZWd5Li4uIGxldCYjMzk7cyBzZWUsIG15ICpmb2N1cyBzeW1ib2wqIGhlcmUgaXMgb2J2aW91c2x5IGB0Y19jdGxfY2hhaW5gLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGVyZSBhcmUgYW55IG90aGVyIHJlbGV2YW50LCBidXQgbm90IG5lY2Vzc2FyaWx5IHViaXF1aXRvdXMsIGZ1bmN0aW9ucyB0byBjb25zaWRlci4gRGlnZ2luZyBkZWVwZXIsIGl0IGxvb2tzIGxpa2UgYHRjX2N0bF9jaGFpbmAgaXMgdGhlIG1haW4gdGhpbmcgYmVpbmcgbW9kaWZpZWQsIGJ1dCBpdCBjYWxscyBhbmQgaXMgcmVsYXRlZCB0byBzb21lIG90aGVyIGZ1bmN0aW9uczogYHRjX2NoYWluX3RtcGx0X2FkZGAsIGB0Y19jaGFpbl9ub3RpZnlgLCBgdGNmX2NoYWluX2ZsdXNoYCwgYHRjZl9jaGFpbl9jcmVhdGVgLCBgdGNmX2NoYWluX2xvb2t1cGAsIGB0Y2ZfY2hhaW5faG9sZGAsIGFuZCBgdGNmX2NoYWluX3B1dGAuIEkgc2hvdWxkIGtlZXAgdGhvc2UgaW4gbWluZC4KCkJlZm9yZSBJIGdvIGZ1cnRoZXIsIGxldCYjMzk7cyB2ZXJpZnkgdGhlIGNvbmZpZ3M6IGBORVRfU0NIRURgIGhhcyB0byBiZSBlbmFibGVkLCBhbmQgZWl0aGVyIGBORVRfQ0xTX0FDVGAsIGBORVRfQ0xTX0JBU0lDYCwgb3IgYE5FVF9DTFNfRkxPV0VSYC4KCk9rYXksIGRvdWJsZS1jaGVja2luZyB0aGUgc3ltYm9sIG5hbWUgYW5kIHRob3NlIGNvbmZpZ3VyYXRpb25zIG9uZSBsYXN0IHRpbWUuLi4gWXVwLiBFdmVyeXRoaW5nIGNoZWNrcyBvdXQuIFRpbWUgdG8gYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMjI6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9TQ0hFRCYjMzQ7LAogICAgJiMzNDtORVRfQ0xTX0FDVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RjX2N0bF9jaGFpbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgZXJyb3IgaGFuZGxpbmcgYW5kIHJlcGxheSBsb2dpYyBmb3IgbmV0bGluayBjaGFpbiBjb250cm9sIG9wZXJhdGlvbnMgaW4gdGNfY3RsX2NoYWluKCkgKG5ldC9zY2hlZC9jbHNfYXBpLmMpLCByZXN0cmljdGluZyAtRUFHQUlOIHJlcGxheXMgc3RyaWN0bHkgdG8gUlRNX05FV0NIQUlOIHJlcXVlc3RzLiBUaGlzIHRvdWNoZXMgY29yZSBuZXR3b3JraW5nIHRyYWZmaWMgY29udHJvbCBsb2dpYyByZWFjaGFibGUgdmlhIHJ0bmV0bGluayBmcm9tIHVucHJpdmlsZWdlZCBvciBwcml2aWxlZ2VkIHVzZXIgbmFtZXNwYWNlcyBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9TQ0hFRCYjMzQ7LAogICAgJiMzNDtORVRfQ0xTX0FDVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RjX2N0bF9jaGFpbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgZXJyb3IgaGFuZGxpbmcgYW5kIHJlcGxheSBsb2dpYyBmb3IgbmV0bGluayBjaGFpbiBjb250cm9sIG9wZXJhdGlvbnMgaW4gdGNfY3RsX2NoYWluKCkgKG5ldC9zY2hlZC9jbHNfYXBpLmMpLCByZXN0cmljdGluZyAtRUFHQUlOIHJlcGxheXMgc3RyaWN0bHkgdG8gUlRNX05FV0NIQUlOIHJlcXVlc3RzLiBUaGlzIHRvdWNoZXMgY29yZSBuZXR3b3JraW5nIHRyYWZmaWMgY29udHJvbCBsb2dpYyByZWFjaGFibGUgdmlhIHJ0bmV0bGluayBmcm9tIHVucHJpdmlsZWdlZCBvciBwcml2aWxlZ2VkIHVzZXIgbmFtZXNwYWNlcyBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDIyOjUyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMjI6NTI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgcmVwbGF5IGxvZ2ljIGluIGB0Y19jdGxfY2hhaW4oKWAgYnkgZW5zdXJpbmcgdGhhdCBhIHJldHJ5IG9uIGAtRUFHQUlOYCBvbmx5IG9jY3VycyB3aGVuIGBuLVx1MDAzZW5sbXNnX3R5cGUgPT0gUlRNX05FV0NIQUlOYC4gVGhpcyBjaGFuZ2Ugb25seSBhZmZlY3RzIGNvbnRyb2wgZmxvdyBhbmQgZXJyb3IgaGFuZGxpbmcgZHVyaW5nIG5ldGxpbmsgVEMgY2hhaW4gbWFuYWdlbWVudCB0byBwcmV2ZW50IGluYXBwcm9wcmlhdGUgcmVxdWVzdCByZXBsYXkgZm9yIG90aGVyIG5ldGxpbmsgbWVzc2FnZSB0eXBlcyAoc3VjaCBhcyBgUlRNX0dFVENIQUlOYCBvciBgUlRNX0RFTENIQUlOYCkuIEl0IGRvZXMgbm90IGFsbG9jYXRlIG5ldyBtZW1vcnksIG1vZGlmeSBzdHJ1Y3QgaW5pdGlhbGl6YXRpb24sIGFsdGVyIGRhdGEgY29waWVzIHRvIHVzZXIgc3BhY2UsIG9yIGludHJvZHVjZSByaXNrcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gVGhlcmVmb3JlLCBzdGFuZGFyZCBLQVNBTi9zYW5pdGl6ZXJzIGFyZSBzdWZmaWNpZW50IGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGUyYWU5MmEwMzFiNjQzMTZmMTJhNTM3YmZlODllZTJjZmQyMzRlODIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIFNlcCA4IDIyOjUxOjM4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2Nsc19hcGkuYyBiL25ldC9zY2hlZC9jbHNfYXBpLmMKaW5kZXggOTk2Njc2NjY2MWQ1MC4uYzQ3ZDJlZTEzNjQxZCAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL2Nsc19hcGkuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc2NoZWQvY2xzX2FwaS5jCkBAIC0zMjU0LDcgJiM0MzszMjU0LDcgQEAgc3RhdGljIGludCB0Y19jdGxfY2hhaW4oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpuLAogCXRjZl9jaGFpbl9wdXQoY2hhaW4pOwogZXJyb3V0X2Jsb2NrOgogCXRjZl9ibG9ja19yZWxlYXNlKHEsIGJsb2NrLCB0cnVlKTsKLQlpZiAoZXJyID09IC1FQUdBSU4pCiYjNDM7CWlmIChlcnIgPT0gLUVBR0FJTiAmYW1wOyZhbXA7IG4tJmd0O25sbXNnX3R5cGUgPT0gUlRNX05FV0NIQUlOKQogCQkvKiBSZXBsYXkgdGhlIHJlcXVlc3QuICovCiAJCWdvdG8gcmVwbGF5OwogCXJldHVybiBlcnI7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAyMjo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDk0CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHNpdHVhdGlvbjoKCioqSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBDb2RlIENoYW5nZSoqCgpPa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gc3RhcnQgYnkgZXhhbWluaW5nIGBuZXQvc2NoZWQvY2xzX2FwaS5jYC4gVG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlLCBJIG5lZWQgdG8gc2VlIGV4YWN0bHkgd2hlcmUgaXQmIzM5O3MgdG91Y2hpbmcgdGhpcyBjcml0aWNhbCBmaWxlLiBJJiMzOTtsbCBuZWVkIHRvIHJhcGlkbHkgdW5kZXJzdGFuZCBpdHMgY29udGV4dCB3aXRoaW4gdGhlIGV4aXN0aW5nIGNvZGUuIE15IGZpcnN0IG1vdmUgd2lsbCBiZSB0byB1c2UgYSB0b29sIGxpa2UgYHJlYWQtZmlsZWAgKGlmIGF2YWlsYWJsZSBpbiB0aGlzIGVudmlyb25tZW50KSBvciwgaWYgbm90LCBJJiMzOTtsbCBsZXZlcmFnZSBgZ3JlcHBlcmAgKG9yIHNpbWlsYXIpIHRvIHF1aWNrbHkgcGlucG9pbnQgdGhlIGFmZmVjdGVkIGxpbmVzIGFuZCBzdXJyb3VuZGluZyBjb2RlIGluIGBuZXQvc2NoZWQvY2xzX2FwaS5jYC4gVGhpcyBjb250ZXh0dWFsIHVuZGVyc3RhbmRpbmcgaXMgY3J1Y2lhbCBiZWZvcmUgSSBjYW4gbWFrZSBhbnkgaW5mb3JtZWQganVkZ2VtZW50cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMjI6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc2NoZWQvY2xzX2FwaS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzIzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszMjMwOlx0XHRcdGJyZWFrO1xuMzIzMTpcdFx0Y2FzZSBSVE1fREVMQ0hBSU46XG4zMjMyOlx0XHRcdHRmaWx0ZXJfbm90aWZ5X2NoYWluKG5ldCwgc2tiLCBibG9jaywgcSwgcGFyZW50LCBuLFxuMzIzMzpcdFx0XHRcdFx0ICAgICBjaGFpbiwgUlRNX0RFTFRGSUxURVIsIGV4dGFjayk7XG4zMjM0Olx0XHRcdC8qIEZsdXNoIHRoZSBjaGFpbiBmaXJzdCBhcyB0aGUgdXNlciByZXF1ZXN0ZWQgY2hhaW4gcmVtb3ZhbC4gKi9cbjMyMzU6XHRcdFx0dGNmX2NoYWluX2ZsdXNoKGNoYWluLCB0cnVlKTtcbjMyMzY6XHRcdFx0LyogSW4gY2FzZSB0aGUgY2hhaW4gd2FzIHN1Y2Nlc3NmdWxseSBkZWxldGVkLCBwdXQgYSByZWZlcmVuY2VcbjMyMzc6XHRcdFx0ICogdG8gdGhlIGNoYWluIHByZXZpb3VzbHkgdGFrZW4gZHVyaW5nIGFkZGl0aW9uLlxuMzIzODpcdFx0XHQgKi9cbjMyMzk6XHRcdFx0dGNmX2NoYWluX3B1dF9leHBsaWNpdGx5X2NyZWF0ZWQoY2hhaW4pO1xuMzI0MDpcdFx0XHRicmVhaztcbjMyNDE6XHRcdGNhc2UgUlRNX0dFVENIQUlOOlxuMzI0MjpcdFx0XHRlcnIgPSB0Y19jaGFpbl9ub3RpZnkoY2hhaW4sIHNrYiwgbi1cdTAwM2VubG1zZ19zZXEsXG4zMjQzOlx0XHRcdFx0XHQgICAgICBuLVx1MDAzZW5sbXNnX2ZsYWdzLCBuLVx1MDAzZW5sbXNnX3R5cGUsIHRydWUsIGV4dGFjayk7XG4zMjQ0Olx0XHRcdGlmIChlcnIgXHUwMDNjIDApXG4zMjQ1Olx0XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtGYWlsZWQgdG8gc2VuZCBjaGFpbiBub3RpZnkgbWVzc2FnZVwmIzM0Oyk7XG4zMjQ2Olx0XHRcdGJyZWFrO1xuMzI0NzpcdFx0ZGVmYXVsdDpcbjMyNDg6XHRcdFx0ZXJyID0gLUVPUE5PVFNVUFA7XG4zMjQ5Olx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7VW5zdXBwb3J0ZWQgbWVzc2FnZSB0eXBlXCYjMzQ7KTtcbjMyNTA6XHRcdFx0Z290byBlcnJvdXQ7XG4zMjUxOlx0XHR9XG4zMjUyOlx0XG4zMjUzOlx0ZXJyb3V0OlxuMzI1NDpcdFx0dGNmX2NoYWluX3B1dChjaGFpbik7XG4zMjU1Olx0ZXJyb3V0X2Jsb2NrOlxuMzI1NjpcdFx0dGNmX2Jsb2NrX3JlbGVhc2UocSwgYmxvY2ssIHRydWUpO1xuMzI1NzpcdFx0aWYgKGVyciA9PSAtRUFHQUlOIFx1MDAyNlx1MDAyNiBuLVx1MDAzZW5sbXNnX3R5cGUgPT0gUlRNX05FV0NIQUlOKVxuMzI1ODpcdFx0XHQvKiBSZXBsYXkgdGhlIHJlcXVlc3QuICovXG4zMjU5Olx0XHRcdGdvdG8gcmVwbGF5O1xuMzI2MDpcdFx0cmV0dXJuIGVycjtcbjMyNjE6XHRcbjMyNjI6XHRlcnJvdXRfYmxvY2tfbG9ja2VkOlxuMzI2MzpcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmJsb2NrLVx1MDAzZWxvY2spO1xuMzI2NDpcdFx0Z290byBlcnJvdXRfYmxvY2s7XG4zMjY1Olx0fVxuMzI2NjpcdFxuMzI2NzpcdC8qIGNhbGxlZCB3aXRoIFJUTkwgKi9cbjMyNjg6XHRzdGF0aWMgaW50IHRjX2R1bXBfY2hhaW4oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuMzI2OTpcdHtcbjMyNzA6XHRcdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrYi1cdTAwM2Vzayk7XG4zMjcxOlx0XHRzdHJ1Y3QgbmxhdHRyICp0Y2FbVENBX01BWCAmIzQzOyAxXTtcbjMyNzI6XHRcdHN0cnVjdCBRZGlzYyAqcSA9IE5VTEw7XG4zMjczOlx0XHRzdHJ1Y3QgdGNmX2Jsb2NrICpibG9jaztcbjMyNzQ6XHRcdHN0cnVjdCB0Y21zZyAqdGNtID0gbmxtc2dfZGF0YShjYi1cdTAwM2VubGgpO1xuMzI3NTpcdFx0c3RydWN0IHRjZl9jaGFpbiAqY2hhaW47XG4zMjc2Olx0XHRsb25nIGluZGV4X3N0YXJ0O1xuMzI3NzpcdFx0bG9uZyBpbmRleDtcbjMyNzg6XHRcdGludCBlcnI7XG4zMjc5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDIyOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxMTQKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgYHRjX2N0bF9jaGFpbmAgYW5kIFJlcGxheSBMYWJlbGluZyoqCgpSaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgZ3V0cyBvZiBgdGNfY3RsX2NoYWluYC4gTXkgaW5pdGlhbCBmb2N1cyBpcyBwaW5wb2ludGluZyB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGUgcmVwbGF5IGxhYmVsIG1lY2hhbmlzbSBhbmQgc2NlbmFyaW9zIHdoZXJlIGBlcnIgPSAtRUFHQUlOYCBwb3BzIHVwLiBJIG5lZWQgdG8gdHJhY2UgdGhlIGNvZGUgcGF0aCBiYWNrIHRvIHdoZXJlIGEgcmV0cnkgaXMgdHJpZ2dlcmVkLCBzcGVjaWZpY2FsbHkgaW4gcmVsYXRpb24gdG8gaG93IHRoZSByZXBsYXkgbGFiZWwgaXMgaGFuZGxlZC4gSSBzdXNwZWN0IHRoZXJlJiMzOTtzIGEgZGVsaWNhdGUgZGFuY2UgaGFwcGVuaW5nIHRoZXJlLCBhbmQgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhlcmUmIzM5O3MgYSByYWNlIGNvbmRpdGlvbiBvciBzb21lIHN1YnRsZSBpbnRlcmFjdGlvbiBsZWFkaW5nIHRvIHVuZXhwZWN0ZWQgLUVBR0FJTiBlcnJvcnMuIFdlIG5lZWQgdG8gc2VlIGlmIGl0JiMzOTtzIGEgdHJhbnNpZW50IGlzc3VlLCBvciB3aGV0aGVyIHRoZXJlIGlzIGEgY29yZSBwcm9ibGVtIHJlbGF0ZWQgdG8gc2VxdWVuY2luZyBvciBsb2NraW5nIHdpdGhpbiB0aGUgcmVwbGF5IGxvZ2ljLiBJJiMzOTtsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIHBvdGVudGlhbCBmb3IgZG91YmxlLWZyZWVzIG9yIGluY29ycmVjdCBzdGF0ZSBtYW5hZ2VtZW50IGFyb3VuZCB0aGUgbGFiZWxzIGFzIHdlbGwsIGVzcGVjaWFsbHkgYXMgdGhleSByZWxhdGUgdG8gY29uY3VycmVudCBhY2Nlc3MsIGlmIGFwcGxpY2FibGUuIFRpbWUgdG8gZGlnIGluIGFuZCBmb2xsb3cgdGhhdCBlcnJvciBjb2RlIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAyMjo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zY2hlZC9jbHNfYXBpLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMTcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzMxNzA6XHRcdFx0Z290byBlcnJvdXRfYmxvY2s7XG4zMTcxOlx0XHR9XG4zMTcyOlx0XG4zMTczOlx0XHRtdXRleF9sb2NrKFx1MDAyNmJsb2NrLVx1MDAzZWxvY2spO1xuMzE3NDpcdFx0Y2hhaW4gPSB0Y2ZfY2hhaW5fbG9va3VwKGJsb2NrLCBjaGFpbl9pbmRleCk7XG4zMTc1Olx0XHRpZiAobi1cdTAwM2VubG1zZ190eXBlID09IFJUTV9ORVdDSEFJTikge1xuMzE3NjpcdFx0XHRpZiAoY2hhaW4pIHtcbjMxNzc6XHRcdFx0XHRpZiAodGNmX2NoYWluX2hlbGRfYnlfYWN0c19vbmx5KGNoYWluKSkge1xuMzE3ODpcdFx0XHRcdFx0LyogVGhlIGNoYWluIGV4aXN0cyBvbmx5IGJlY2F1c2UgdGhlcmUgaXNcbjMxNzk6XHRcdFx0XHRcdCAqIHNvbWUgYWN0aW9uIHJlZmVyZW5jaW5nIGl0LlxuMzE4MDpcdFx0XHRcdFx0ICovXG4zMTgxOlx0XHRcdFx0XHR0Y2ZfY2hhaW5faG9sZChjaGFpbik7XG4zMTgyOlx0XHRcdFx0fSBlbHNlIHtcbjMxODM6XHRcdFx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7RmlsdGVyIGNoYWluIGFscmVhZHkgZXhpc3RzXCYjMzQ7KTtcbjMxODQ6XHRcdFx0XHRcdGVyciA9IC1FRVhJU1Q7XG4zMTg1Olx0XHRcdFx0XHRnb3RvIGVycm91dF9ibG9ja19sb2NrZWQ7XG4zMTg2Olx0XHRcdFx0fVxuMzE4NzpcdFx0XHR9IGVsc2Uge1xuMzE4ODpcdFx0XHRcdGlmICghKG4tXHUwMDNlbmxtc2dfZmxhZ3MgXHUwMDI2IE5MTV9GX0NSRUFURSkpIHtcbjMxODk6XHRcdFx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7TmVlZCBib3RoIFJUTV9ORVdDSEFJTiBhbmQgTkxNX0ZfQ1JFQVRFIHRvIGNyZWF0ZSBhIG5ldyBjaGFpblwmIzM0Oyk7XG4zMTkwOlx0XHRcdFx0XHRlcnIgPSAtRU5PRU5UO1xuMzE5MTpcdFx0XHRcdFx0Z290byBlcnJvdXRfYmxvY2tfbG9ja2VkO1xuMzE5MjpcdFx0XHRcdH1cbjMxOTM6XHRcdFx0XHRjaGFpbiA9IHRjZl9jaGFpbl9jcmVhdGUoYmxvY2ssIGNoYWluX2luZGV4KTtcbjMxOTQ6XHRcdFx0XHRpZiAoIWNoYWluKSB7XG4zMTk1Olx0XHRcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O0ZhaWxlZCB0byBjcmVhdGUgZmlsdGVyIGNoYWluXCYjMzQ7KTtcbjMxOTY6XHRcdFx0XHRcdGVyciA9IC1FTk9NRU07XG4zMTk3Olx0XHRcdFx0XHRnb3RvIGVycm91dF9ibG9ja19sb2NrZWQ7XG4zMTk4Olx0XHRcdFx0fVxuMzE5OTpcdFx0XHR9XG4zMjAwOlx0XHR9IGVsc2Uge1xuMzIwMTpcdFx0XHRpZiAoIWNoYWluIHx8IHRjZl9jaGFpbl9oZWxkX2J5X2FjdHNfb25seShjaGFpbikpIHtcbjMyMDI6XHRcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O0Nhbm5vdCBmaW5kIHNwZWNpZmllZCBmaWx0ZXIgY2hhaW5cJiMzNDspO1xuMzIwMzpcdFx0XHRcdGVyciA9IC1FSU5WQUw7XG4zMjA0Olx0XHRcdFx0Z290byBlcnJvdXRfYmxvY2tfbG9ja2VkO1xuMzIwNTpcdFx0XHR9XG4zMjA2Olx0XHRcdHRjZl9jaGFpbl9ob2xkKGNoYWluKTtcbjMyMDc6XHRcdH1cbjMyMDg6XHRcbjMyMDk6XHRcdGlmIChuLVx1MDAzZW5sbXNnX3R5cGUgPT0gUlRNX05FV0NIQUlOKSB7XG4zMjEwOlx0XHRcdC8qIE1vZGlmeWluZyBjaGFpbiByZXF1aXJlcyBob2xkaW5nIHBhcmVudCBibG9jayBsb2NrLiBJbiBjYXNlXG4zMjExOlx0XHRcdCAqIHRoZSBjaGFpbiB3YXMgc3VjY2Vzc2Z1bGx5IGFkZGVkLCB0YWtlIGEgcmVmZXJlbmNlIHRvIHRoZVxuMzIxMjpcdFx0XHQgKiBjaGFpbi4gVGhpcyBlbnN1cmVzIHRoYXQgYW4gZW1wdHkgY2hhaW4gZG9lcyBub3QgZGlzYXBwZWFyIGF0XG4zMjEzOlx0XHRcdCAqIHRoZSBlbmQgb2YgdGhpcyBmdW5jdGlvbi5cbjMyMTQ6XHRcdFx0ICovXG4zMjE1Olx0XHRcdHRjZl9jaGFpbl9ob2xkKGNoYWluKTtcbjMyMTY6XHRcdFx0Y2hhaW4tXHUwMDNlZXhwbGljaXRseV9jcmVhdGVkID0gdHJ1ZTtcbjMyMTc6XHRcdH1cbjMyMTg6XHRcdG11dGV4X3VubG9jayhcdTAwMjZibG9jay1cdTAwM2Vsb2NrKTtcbjMyMTk6XHRcbjMyMjA6XHRcdHN3aXRjaCAobi1cdTAwM2VubG1zZ190eXBlKSB7XG4zMjIxOlx0XHRjYXNlIFJUTV9ORVdDSEFJTjpcbjMyMjI6XHRcdFx0ZXJyID0gdGNfY2hhaW5fdG1wbHRfYWRkKGNoYWluLCBuZXQsIHRjYSwgZXh0YWNrKTtcbjMyMjM6XHRcdFx0aWYgKGVycikge1xuMzIyNDpcdFx0XHRcdHRjZl9jaGFpbl9wdXRfZXhwbGljaXRseV9jcmVhdGVkKGNoYWluKTtcbjMyMjU6XHRcdFx0XHRnb3RvIGVycm91dDtcbjMyMjY6XHRcdFx0fVxuMzIyNzpcdFxuMzIyODpcdFx0XHR0Y19jaGFpbl9ub3RpZnkoY2hhaW4sIE5VTEwsIDAsIE5MTV9GX0NSRUFURSB8IE5MTV9GX0VYQ0wsXG4zMjI5Olx0XHRcdFx0XHRSVE1fTkVXQ0hBSU4sIGZhbHNlLCBleHRhY2spO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAyMjo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MzM3CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgQ29kZWJhc2UqKgoKQWxyaWdodCwgc28gdGhlIGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IEkmIzM5O20gZGl2aW5nIGludG8gdGhlIGB0Y19jdGxfY2hhaW5gIGZ1bmN0aW9uLiBJdCYjMzk7cyB0aGUgc3RhcnRpbmcgcG9pbnQuIEkgbmVlZCB0byBnZXQgYSBoaWdoLWxldmVsIHZpZXcgb2YgaG93IHRoaXMgdGhpbmcgaXMgc3RydWN0dXJlZC4gSSYjMzk7bSBwcm9iYWJseSBsb29raW5nIGF0IHRoZSBmdW5jdGlvbiBzaWduYXR1cmUsIHRoZSBpbml0aWFsIHZhcmlhYmxlIGRlY2xhcmF0aW9ucywgYW5kIHRoZSBmaXJzdCBmZXcgbGluZXMgb2YgbG9naWMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgaW5wdXRzIGl0JiMzOTtzIHRha2luZyBhbmQgd2hhdCB0aGUgaW1tZWRpYXRlIGdvYWxzIG9mIHRoZSBmdW5jdGlvbiBhcmUuIElzIGl0IHBhcnNpbmcgYW4gaW5wdXQgc3RyaW5nPyBJbml0aWFsaXppbmcgc29tZSBkYXRhIHN0cnVjdHVyZXM/IFNldHRpbmcgdXAgc29tZSBiYXNpYyBjb25maWd1cmF0aW9uPyBVbmRlcnN0YW5kaW5nIHRoZSB2ZXJ5IGJlZ2lubmluZyBpcyBrZXkgdG8gbWFraW5nIHNlbnNlIG9mIHRoZSBlbnRpcmUgZmxvdy4gVGhpcyBpcyB3aGVyZSBJIGJlZ2luIHRvIGZvcm11bGF0ZSBteSBtZW50YWwgbW9kZWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDIyOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NjaGVkL2Nsc19hcGkuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMxMjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzEyNTpcdHtcbjMxMjY6XHRcdC8qIElmIHRlbXBsYXRlIG9wcyBhcmUgc2V0LCBubyB3b3JrIHRvIGRvIGZvciB1cy4gKi9cbjMxMjc6XHRcdGlmICghdG1wbHRfb3BzKVxuMzEyODpcdFx0XHRyZXR1cm47XG4zMTI5Olx0XG4zMTMwOlx0XHR0bXBsdF9vcHMtXHUwMDNldG1wbHRfZGVzdHJveSh0bXBsdF9wcml2KTtcbjMxMzE6XHRcdG1vZHVsZV9wdXQodG1wbHRfb3BzLVx1MDAzZW93bmVyKTtcbjMxMzI6XHR9XG4zMTMzOlx0XG4zMTM0Olx0LyogQWRkL2RlbGV0ZS9nZXQgYSBjaGFpbiAqL1xuMzEzNTpcdFxuMzEzNjpcdHN0YXRpYyBpbnQgdGNfY3RsX2NoYWluKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbixcbjMxMzc6XHRcdFx0XHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4zMTM4Olx0e1xuMzEzOTpcdFx0c3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2tiLVx1MDAzZXNrKTtcbjMxNDA6XHRcdHN0cnVjdCBubGF0dHIgKnRjYVtUQ0FfTUFYICYjNDM7IDFdO1xuMzE0MTpcdFx0c3RydWN0IHRjbXNnICp0O1xuMzE0MjpcdFx0dTMyIHBhcmVudDtcbjMxNDM6XHRcdHUzMiBjaGFpbl9pbmRleDtcbjMxNDQ6XHRcdHN0cnVjdCBRZGlzYyAqcTtcbjMxNDU6XHRcdHN0cnVjdCB0Y2ZfY2hhaW4gKmNoYWluO1xuMzE0NjpcdFx0c3RydWN0IHRjZl9ibG9jayAqYmxvY2s7XG4zMTQ3Olx0XHR1bnNpZ25lZCBsb25nIGNsO1xuMzE0ODpcdFx0aW50IGVycjtcbjMxNDk6XHRcbjMxNTA6XHRyZXBsYXk6XG4zMTUxOlx0XHRxID0gTlVMTDtcbjMxNTI6XHRcdGVyciA9IG5sbXNnX3BhcnNlX2RlcHJlY2F0ZWQobiwgc2l6ZW9mKCp0KSwgdGNhLCBUQ0FfTUFYLFxuMzE1MzpcdFx0XHRcdFx0ICAgICBydG1fdGNhX3BvbGljeSwgZXh0YWNrKTtcbjMxNTQ6XHRcdGlmIChlcnIgXHUwMDNjIDApXG4zMTU1Olx0XHRcdHJldHVybiBlcnI7XG4zMTU2Olx0XG4zMTU3Olx0XHR0ID0gbmxtc2dfZGF0YShuKTtcbjMxNTg6XHRcdHBhcmVudCA9IHQtXHUwMDNldGNtX3BhcmVudDtcbjMxNTk6XHRcdGNsID0gMDtcbjMxNjA6XHRcbjMxNjE6XHRcdGJsb2NrID0gdGNmX2Jsb2NrX2ZpbmQobmV0LCBcdTAwMjZxLCBcdTAwMjZwYXJlbnQsIFx1MDAyNmNsLFxuMzE2MjpcdFx0XHRcdCAgICAgICB0LVx1MDAzZXRjbV9pZmluZGV4LCB0LVx1MDAzZXRjbV9ibG9ja19pbmRleCwgZXh0YWNrKTtcbjMxNjM6XHRcdGlmIChJU19FUlIoYmxvY2spKVxuMzE2NDpcdFx0XHRyZXR1cm4gUFRSX0VSUihibG9jayk7XG4zMTY1Olx0XG4zMTY2Olx0XHRjaGFpbl9pbmRleCA9IG5sYV9nZXRfdTMyX2RlZmF1bHQodGNhW1RDQV9DSEFJTl0sIDApO1xuMzE2NzpcdFx0aWYgKGNoYWluX2luZGV4IFx1MDAzZSBUQ19BQ1RfRVhUX1ZBTF9NQVNLKSB7XG4zMTY4Olx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7U3BlY2lmaWVkIGNoYWluIGluZGV4IGV4Y2VlZHMgdXBwZXIgbGltaXRcJiMzNDspO1xuMzE2OTpcdFx0XHRlcnIgPSAtRUlOVkFMO1xuMzE3MDpcdFx0XHRnb3RvIGVycm91dF9ibG9jaztcbjMxNzE6XHRcdH1cbjMxNzI6XHRcbjMxNzM6XHRcdG11dGV4X2xvY2soXHUwMDI2YmxvY2stXHUwMDNlbG9jayk7XG4zMTc0Olx0XHRjaGFpbiA9IHRjZl9jaGFpbl9sb29rdXAoYmxvY2ssIGNoYWluX2luZGV4KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMjI6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTMyNAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDI3NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGAtRUFHQUlOYCBSZXBsYXkgaW4gYHRjX2N0bF9jaGFpbmAqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSW4gYHRjX2N0bF9jaGFpbmAsIEkgc2VlIHRoaXMganVtcCBiYWNrIHRvIGByZXBsYXlgIHdoZW4gYGVyciA9PSAtRUFHQUlOYC4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCB3aGVyZSBkb2VzIGBlcnJgICpiZWNvbWUqIGAtRUFHQUlOYCB3aXRoaW4gdGhpcyBmdW5jdGlvbj8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHBvdGVudGlhbCBlZGdlIGNhc2VzIGhlcmUuIEl0IGxvb2tzIGxpa2UgaXQgY2FuIG9yaWdpbmF0ZSBmcm9tIGB0Y19jaGFpbl90bXBsdF9hZGRgIOKAkyB3aGljaCBpcyBvbmx5IGNhbGxlZCBpZiBpdCYjMzk7cyBhIGBSVE1fTkVXQ0hBSU5gIG1lc3NhZ2Ug4oCTIG9yIGZyb20gYHRjX2NoYWluX25vdGlmeWAsIHdoaWNoIGlzIGludm9sdmVkIGluIGBSVE1fR0VUQ0hBSU5gIHJlcXVlc3RzLgoKVGhlIGNydXggb2YgdGhlIGlzc3VlIGlzIHRoaXM6IGlmIGB0Y19jaGFpbl9ub3RpZnlgIHdlcmUgdG8gc29tZWhvdyByZXR1cm4gYC1FQUdBSU5gLCBwb3RlbnRpYWxseSBkdXJpbmcgYSBuZXRsaW5rIG5vdGlmaWNhdGlvbiwgdGhlbiB0aGF0ICYjMzQ7cmVwbGF5JiMzNDsgbGFiZWwgd291bGQgYmUgaW5jb3JyZWN0bHkgdXNlZCwgYW5kIG1pZ2h0IGNhdXNlIGFuIGluZmluaXRlIGxvb3Agb3IsIGF0IHRoZSB2ZXJ5IGxlYXN0LCB1bnByZWRpY3RhYmxlIGJlaGF2aW9yLiBUaGUgYHJlcGxheWAgbG9naWMsIGFzIEkgdW5kZXJzdGFuZCBpdCwgc2hvdWxkICpvbmx5KiBiZSBpbnZva2VkIGZvciBmYWlsdXJlcyBkdXJpbmcgYFJUTV9ORVdDSEFJTmAgcmVxdWVzdHMsIG5vdCBgUlRNX0dFVENIQUlOYC4KClRoZXJlZm9yZSwgdGhlIG9idmlvdXMgZml4IHdvdWxkIGJlOgpgYGBkaWZmCi0JaWYgKGVyciA9PSAtRUFHQUlOKQomIzQzOwlpZiAoZXJyID09IC1FQUdBSU4gJmFtcDsmYW1wOyBuLSZndDtubG1zZ190eXBlID09IFJUTV9ORVdDSEFJTikKIAkJLyogUmVwbGF5IHRoZSByZXF1ZXN0LiAqLwogCQlnb3RvIHJlcGxheTsKIAlyZXR1cm4gZXJyOwpgYGAKCk5vdywgSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGdsYW5jZSB0aHJvdWdoIGB0Y19jdGxfdGZpbHRlcmAgYW5kIGEgZmV3IG90aGVyIGZ1bmN0aW9ucyBpbiBgY2xzX2FwaS5jYCB0byBzZWUgaG93IGByZXBsYXlgIGlzIGdlbmVyYWxseSBoYW5kbGVkLiBUaGlzIG1pZ2h0IHByb3ZpZGUgZnVydGhlciBpbnNpZ2h0cyBpbnRvIHRoZSBpbnRlbmRlZCB1c2UgYW5kIHBvc3NpYmxlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGZpeCBpbiB0aGUgYnJvYWRlciBjb250ZXh0IG9mIHRoZSB0cmFmZmljIGNvbnRyb2wgZnJhbWV3b3JrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAyMjo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyZXBsYXk6JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL2Nsc19hcGkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvY2xzX2FwaS5jPTIyNTc9c3RhdGljIGludCB0Y19uZXdfdGZpbHRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm4sXG4tLVxubmV0L3NjaGVkL2Nsc19hcGkuYy0yMjgwLVxubmV0L3NjaGVkL2Nsc19hcGkuYzoyMjgxOnJlcGxheTpcbm5ldC9zY2hlZC9jbHNfYXBpLmMtMjI4Mi1cdHRwX3N0YXRlID0gVFBfTk9UX0NSRUFURUQ7XG4tLVxubmV0L3NjaGVkL2Nsc19hcGkuYz0zMTM2PXN0YXRpYyBpbnQgdGNfY3RsX2NoYWluKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbixcbi0tXG5uZXQvc2NoZWQvY2xzX2FwaS5jLTMxNDktXG5uZXQvc2NoZWQvY2xzX2FwaS5jOjMxNTA6cmVwbGF5OlxubmV0L3NjaGVkL2Nsc19hcGkuYy0zMTUxLVx0cSA9IE5VTEw7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDIyOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYyMjkKCQkJCQkJCW91dHB1dDogMTYzCgkJCQkJCQl0aG91Z2h0czogMzQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoaXMgTmV0bGluayBUQyBDaGFpbiBNYW5hZ2VtZW50IFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgcGF0Y2ggaXMgYSBzdHJhaWdodGZvcndhcmQgY29udHJvbC1mbG93IGZpeCB3aXRoaW4gdGhlIG5ldGxpbmsgdHJhZmZpYyBjb250cm9sIGNoYWluIG1hbmFnZW1lbnQuIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgYWRkaW5nIGFuIGFkZGl0aW9uYWwgY29uZGl0aW9uIHRvIGFuIGV4aXN0aW5nIGAtRUFHQUlOYCByZXBsYXkgY2hlY2sgd2l0aGluIGB0Y19jdGxfY2hhaW5gLiBUaGUgYWRkZWQgYCZhbXA7JmFtcDsgbi0mZ3Q7bmxtc2dfdHlwZSA9PSBSVE1fTkVXQ0hBSU5gIHNlZW1zIHRvIGJlIGEgc2FmZWd1YXJkIGFnYWluc3QgdW5pbnRlbmRlZCByZXRyaWVzIG9yIHJlcGxheSBsb29wcy4gSXQmIzM5O3Mgb25seSBzdXBwb3NlZCB0byByZXBsYXkgaWYgdGhlIG1lc3NhZ2UgdHlwZSBpcyBgUlRNX05FV0NIQUlOYCwgYW5kIG5vdCBmb3Igb3RoZXIgbWVzc2FnZSB0eXBlcyBsaWtlIGBSVE1fR0VUQ0hBSU5gIG9yIGBSVE1fREVMQ0hBSU5gLgoKTm93LCB0aGUgaW1wb3J0YW50IHBhcnQ6IGRvZXMgdGhpcyBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHZ1bG5lcmFiaWxpdGllcz8gSSBuZWVkIHRvIG1ldGljdWxvdXNseSBnbyB0aHJvdWdoIHRoZSB1c3VhbCBzdXNwZWN0cy4gRmlyc3QsIGFyZSB0aGVyZSBhbnkga2VybmVsIHN0cnVjdHVyZXMgYmVpbmcgc2VudCB0byB1c2Vyc3BhY2UgdGhhdCBtaWdodCBoYXZlIGJlZW4gY2hhbmdlZD8gTm8sIGl0IGRvZXNu4oCZdCBzZWVtIHNvLiBUaGVyZSBhcmUgbm8gbW9kaWZpY2F0aW9ucyB0byBob3cgdGhlIGRhdGEgaXMgc2VyaWFsaXplZCBvciBob3cgYXR0cmlidXRlcyBhcmUgZ2VuZXJhdGVkLiBTZWNvbmQsIGFyZSB0aGVyZSBhbnkgbmV3IGNvbmRpdGlvbmFsIGJyYW5jaGVzIG9yIGxvZ2ljIHRoYXQgaGluZ2VzIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyBJIGNhbiBzZWUgdGhhdCBgZXJyYCBpcyBwcm9wZXJseSBpbml0aWFsaXplZCwgYW5kIGBuYCBpcyBhIHBvaW50ZXIgdG8gYG5sbXNnX2hkcmAsIHNvIHRoZSBwcm9ncmFtIGNoZWNrcyBgbi0mZ3Q7bmxtc2dfdHlwZWAuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlcyBoZXJlLiBOZXh0LCBJJiMzOTtsbCBjaGVjayBmb3IgYW55IG5ldyBhbGxvY2F0aW9ucyBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBvciBtb2RpZmljYXRpb25zIHRvIGV4aXN0aW5nIG9uZXMgYW5kIGFueSBpc3N1ZXMgdGhhdCBjb3VsZCBiZSBpbnRyb2R1Y2VkLiBObywgbm90aGluZyBjaGFuZ2VkIHRoZXJlIGVpdGhlci4gRmluYWxseSwgYXJlIHRoZXJlIGFueSBib3VuZHMgY2hlY2tzLCBsZW5ndGggY2hlY2tzLCBvciBsb2dpYyB0aGF0IGNvdWxkIGxlYWQgdG8gYWNjZXNzaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBUaGUgYW5zd2VyIGlzIG5vLCB0aGlzIGlzbiYjMzk7dCB0aGUgY2FzZSBoZXJlLgoKU28sIGFtIEkgcmlnaHQ/IEl0IHNlZW1zIHNhZmUuCgpOb3csIGxldCYjMzk7cyBjb25zaWRlciBLTVNBTiAoS2VybmVsIE1lbW9yeSBTYW5pdGl6ZXIpLiBJcyB0aGVyZSBhIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgbGVha3MgaGVyZT8gVGhlIGFuc3dlciBpcyBjbGVhcmx5IG5vLiBLTVNBTiBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgZm9yIHRob3NlIGtpbmRzIG9mIGlzc3VlcywgYW5kIHRoaXMgcGF0Y2ggc2ltcGx5IHJlc3RyaWN0cyBhIHJldHJ5IGxvb3AuIEl0JiMzOTtzIGEgc3RhbmRhcmQgZXJyb3IgaGFuZGxpbmcgY2hhbmdlLiBBbnkgcHJvYmxlbXMgd2l0aCBpbmZpbml0ZSBsb29wcywgcmVmZXJlbmNlIGNvdW50aW5nLCBvciBsb2NrIGhhbmRsaW5nLCBpZiB0aGV5IHdlcmUgcHJlc2VudCwgd291bGQgYmUgZm91bmQgYnkgc3RhbmRhcmQgdG9vbHMgYW5kIHRpbWVvdXRzLCBhbmQgbm90IGJ5IEtNU0FOLgoKVGhlcmVmb3JlLCBgTmVlZHNLTVNBTmAgaXMgZGVmaW5pdGl2ZWx5IGBmYWxzZWAuCgpOb3csIEkmIzM5O2xsIHByZXBhcmUgdGhlIGZpbmFsIHJlc3BvbnNlIHVzaW5nIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDIyOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSByZXBsYXkgbG9naWMgaW4gYHRjX2N0bF9jaGFpbigpYCBieSBlbnN1cmluZyB0aGF0IGEgcmV0cnkgb24gYC1FQUdBSU5gIG9ubHkgb2NjdXJzIHdoZW4gYG4tXHUwMDNlbmxtc2dfdHlwZSA9PSBSVE1fTkVXQ0hBSU5gLiBUaGlzIGNoYW5nZSBvbmx5IGFmZmVjdHMgY29udHJvbCBmbG93IGFuZCBlcnJvciBoYW5kbGluZyBkdXJpbmcgbmV0bGluayBUQyBjaGFpbiBtYW5hZ2VtZW50IHRvIHByZXZlbnQgaW5hcHByb3ByaWF0ZSByZXF1ZXN0IHJlcGxheSBmb3Igb3RoZXIgbmV0bGluayBtZXNzYWdlIHR5cGVzIChzdWNoIGFzIGBSVE1fR0VUQ0hBSU5gIG9yIGBSVE1fREVMQ0hBSU5gKS4gSXQgZG9lcyBub3QgYWxsb2NhdGUgbmV3IG1lbW9yeSwgbW9kaWZ5IHN0cnVjdCBpbml0aWFsaXphdGlvbiwgYWx0ZXIgZGF0YSBjb3BpZXMgdG8gdXNlciBzcGFjZSwgb3IgaW50cm9kdWNlIHJpc2tzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBUaGVyZWZvcmUsIHN0YW5kYXJkIEtBU0FOL3Nhbml0aXplcnMgYXJlIHN1ZmZpY2llbnQgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHJlcGxheSBsb2dpYyBpbiBgdGNfY3RsX2NoYWluKClgIGJ5IGVuc3VyaW5nIHRoYXQgYSByZXRyeSBvbiBgLUVBR0FJTmAgb25seSBvY2N1cnMgd2hlbiBgbi1cdTAwM2VubG1zZ190eXBlID09IFJUTV9ORVdDSEFJTmAuIFRoaXMgY2hhbmdlIG9ubHkgYWZmZWN0cyBjb250cm9sIGZsb3cgYW5kIGVycm9yIGhhbmRsaW5nIGR1cmluZyBuZXRsaW5rIFRDIGNoYWluIG1hbmFnZW1lbnQgdG8gcHJldmVudCBpbmFwcHJvcHJpYXRlIHJlcXVlc3QgcmVwbGF5IGZvciBvdGhlciBuZXRsaW5rIG1lc3NhZ2UgdHlwZXMgKHN1Y2ggYXMgYFJUTV9HRVRDSEFJTmAgb3IgYFJUTV9ERUxDSEFJTmApLiBJdCBkb2VzIG5vdCBhbGxvY2F0ZSBuZXcgbWVtb3J5LCBtb2RpZnkgc3RydWN0IGluaXRpYWxpemF0aW9uLCBhbHRlciBkYXRhIGNvcGllcyB0byB1c2VyIHNwYWNlLCBvciBpbnRyb2R1Y2Ugcmlza3Mgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIFRoZXJlZm9yZSwgc3RhbmRhcmQgS0FTQU4vc2FuaXRpemVycyBhcmUgc3VmZmljaWVudCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIyOjUxOjM5LjA5MDE0NTQxOFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4NzY2Mzc3NTk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9TQ0hFRFwiLFxuICAgIFwiTkVUX0NMU19BQ1RcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0Y19jdGxfY2hhaW5cIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSByZXBsYXkgbG9naWMgaW4gYHRjX2N0bF9jaGFpbigpYCBieSBlbnN1cmluZyB0aGF0IGEgcmV0cnkgb24gYC1FQUdBSU5gIG9ubHkgb2NjdXJzIHdoZW4gYG4tXFx1MDAzZW5sbXNnX3R5cGUgPT0gUlRNX05FV0NIQUlOYC4gVGhpcyBjaGFuZ2Ugb25seSBhZmZlY3RzIGNvbnRyb2wgZmxvdyBhbmQgZXJyb3IgaGFuZGxpbmcgZHVyaW5nIG5ldGxpbmsgVEMgY2hhaW4gbWFuYWdlbWVudCB0byBwcmV2ZW50IGluYXBwcm9wcmlhdGUgcmVxdWVzdCByZXBsYXkgZm9yIG90aGVyIG5ldGxpbmsgbWVzc2FnZSB0eXBlcyAoc3VjaCBhcyBgUlRNX0dFVENIQUlOYCBvciBgUlRNX0RFTENIQUlOYCkuIEl0IGRvZXMgbm90IGFsbG9jYXRlIG5ldyBtZW1vcnksIG1vZGlmeSBzdHJ1Y3QgaW5pdGlhbGl6YXRpb24sIGFsdGVyIGRhdGEgY29waWVzIHRvIHVzZXIgc3BhY2UsIG9yIGludHJvZHVjZSByaXNrcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gVGhlcmVmb3JlLCBzdGFuZGFyZCBLQVNBTi9zYW5pdGl6ZXJzIGFyZSBzdWZmaWNpZW50IGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgZXJyb3IgaGFuZGxpbmcgYW5kIHJlcGxheSBsb2dpYyBmb3IgbmV0bGluayBjaGFpbiBjb250cm9sIG9wZXJhdGlvbnMgaW4gdGNfY3RsX2NoYWluKCkgKG5ldC9zY2hlZC9jbHNfYXBpLmMpLCByZXN0cmljdGluZyAtRUFHQUlOIHJlcGxheXMgc3RyaWN0bHkgdG8gUlRNX05FV0NIQUlOIHJlcXVlc3RzLiBUaGlzIHRvdWNoZXMgY29yZSBuZXR3b3JraW5nIHRyYWZmaWMgY29udHJvbCBsb2dpYyByZWFjaGFibGUgdmlhIHJ0bmV0bGluayBmcm9tIHVucHJpdmlsZWdlZCBvciBwcml2aWxlZ2VkIHVzZXIgbmFtZXNwYWNlcyBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIyOjUxOjM5LjA5MDE1MTQ2N1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjYxOTYyMTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZTJhZTkyYTAzMWI2NDMxNmYxMmE1MzdiZmU4OWVlMmNmZDIzNGU4MlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIFNlcCA4IDIyOjUxOjM4IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9jbHNfYXBpLmMgYi9uZXQvc2NoZWQvY2xzX2FwaS5jXFxuaW5kZXggOTk2Njc2NjY2MWQ1MC4uYzQ3ZDJlZTEzNjQxZCAxMDA2NDRcXG4tLS0gYS9uZXQvc2NoZWQvY2xzX2FwaS5jXFxuKysrIGIvbmV0L3NjaGVkL2Nsc19hcGkuY1xcbkBAIC0zMjU0LDcgKzMyNTQsNyBAQCBzdGF0aWMgaW50IHRjX2N0bF9jaGFpbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm4sXFxuIFxcdHRjZl9jaGFpbl9wdXQoY2hhaW4pO1xcbiBlcnJvdXRfYmxvY2s6XFxuIFxcdHRjZl9ibG9ja19yZWxlYXNlKHEsIGJsb2NrLCB0cnVlKTtcXG4tXFx0aWYgKGVyciA9PSAtRUFHQUlOKVxcbitcXHRpZiAoZXJyID09IC1FQUdBSU4gXFx1MDAyNlxcdTAwMjYgbi1cXHUwMDNlbmxtc2dfdHlwZSA9PSBSVE1fTkVXQ0hBSU4pXFxuIFxcdFxcdC8qIFJlcGxheSB0aGUgcmVxdWVzdC4gKi9cXG4gXFx0XFx0Z290byByZXBsYXk7XFxuIFxcdHJldHVybiBlcnI7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIyOjUxOjM5Ljc1NTM1MjI0MVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MzYwMzU3NTcwOTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX1NDSEVEXCIsXG4gICAgXCJORVRfQ0xTX0FDVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRjX2N0bF9jaGFpblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBlcnJvciBoYW5kbGluZyBhbmQgcmVwbGF5IGxvZ2ljIGZvciBuZXRsaW5rIGNoYWluIGNvbnRyb2wgb3BlcmF0aW9ucyBpbiB0Y19jdGxfY2hhaW4oKSAobmV0L3NjaGVkL2Nsc19hcGkuYyksIHJlc3RyaWN0aW5nIC1FQUdBSU4gcmVwbGF5cyBzdHJpY3RseSB0byBSVE1fTkVXQ0hBSU4gcmVxdWVzdHMuIFRoaXMgdG91Y2hlcyBjb3JlIG5ldHdvcmtpbmcgdHJhZmZpYyBjb250cm9sIGxvZ2ljIHJlYWNoYWJsZSB2aWEgcnRuZXRsaW5rIGZyb20gdW5wcml2aWxlZ2VkIG9yIHByaXZpbGVnZWQgdXNlciBuYW1lc3BhY2VzIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBlMmFlOTJhMDMxYjY0MzE2ZjEyYTUzN2JmZTg5ZWUyY2ZkMjM0ZTgyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgOCAyMjo1MTozOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9jbHNfYXBpLmMgYi9uZXQvc2NoZWQvY2xzX2FwaS5jXG5pbmRleCA5OTY2NzY2NjYxZDUwLi5jNDdkMmVlMTM2NDFkIDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL2Nsc19hcGkuY1xuKysrIGIvbmV0L3NjaGVkL2Nsc19hcGkuY1xuQEAgLTMyNTQsNyArMzI1NCw3IEBAIHN0YXRpYyBpbnQgdGNfY3RsX2NoYWluKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbixcbiBcdHRjZl9jaGFpbl9wdXQoY2hhaW4pO1xuIGVycm91dF9ibG9jazpcbiBcdHRjZl9ibG9ja19yZWxlYXNlKHEsIGJsb2NrLCB0cnVlKTtcbi1cdGlmIChlcnIgPT0gLUVBR0FJTilcbitcdGlmIChlcnIgPT0gLUVBR0FJTiBcdTAwMjZcdTAwMjYgbi1cdTAwM2VubG1zZ190eXBlID09IFJUTV9ORVdDSEFJTilcbiBcdFx0LyogUmVwbGF5IHRoZSByZXF1ZXN0LiAqL1xuIFx0XHRnb3RvIHJlcGxheTtcbiBcdHJldHVybiBlcnI7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQyMjo1MTozOS43NTUzNTQ4MTFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2MDA0MzQ4MjM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhpbmtpbmcgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgUGF0Y2g6IFVuZGVyc3RhbmRpbmcgdGhlIGB0Y19jdGxfY2hhaW4oKWAgTW9kaWZpY2F0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBkaWZmLiBGaXJzdCB0aGluZ3MgZmlyc3QsIGxldCdzIHplcm8gaW4gb24gdGhlIGtleSBhcmVhOiBgbmV0L3NjaGVkL2Nsc19hcGkuY2AsIHNwZWNpZmljYWxseSB0aGUgZnVuY3Rpb24gYHRjX2N0bF9jaGFpbigpYC4gVGhhdCdzIHdoZXJlIHRoZSBoZWFydCBvZiB0aGUgY2hhbmdlIGxpZXMuIEknbSBnb2luZyB0byBzdGFydCBieSBnZXR0aW5nIGEgY2xlYXIgcGljdHVyZSBvZiB3aGF0J3MgaGFwcGVuaW5nIHdpdGhpbiB0aGF0IGZ1bmN0aW9uLiBJJ2xsIHByb2JhYmx5IHJlYWNoIGZvciBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgdG8gcHVsbCB1cCB0aGUgZGVmaW5pdGlvbiBvZiBgdGNfY3RsX2NoYWluKClgIGluIHRoYXQgZmlsZS4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgaW1tZWRpYXRlIGNvbnRleHQuIEZyb20gdGhlcmUsIEkgY2FuIGJlZ2luIG15IGFuYWx5c2lzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODgyLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQyMjo1MTo0NS43NTk3MDY3MjhaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODUwMDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NjaGVkL2Nsc19hcGkuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMTUwLFxuICBcIkxpbmVDb3VudFwiOiAxMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzE1MDpcXHRyZXBsYXk6XFxuMzE1MTpcXHRcXHRxID0gTlVMTDtcXG4zMTUyOlxcdFxcdGVyciA9IG5sbXNnX3BhcnNlX2RlcHJlY2F0ZWQobiwgc2l6ZW9mKCp0KSwgdGNhLCBUQ0FfTUFYLFxcbjMxNTM6XFx0XFx0XFx0XFx0XFx0ICAgICBydG1fdGNhX3BvbGljeSwgZXh0YWNrKTtcXG4zMTU0OlxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbjMxNTU6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4zMTU2OlxcdFxcbjMxNTc6XFx0XFx0dCA9IG5sbXNnX2RhdGEobik7XFxuMzE1ODpcXHRcXHRwYXJlbnQgPSB0LVxcdTAwM2V0Y21fcGFyZW50O1xcbjMxNTk6XFx0XFx0Y2wgPSAwO1xcbjMxNjA6XFx0XFxuMzE2MTpcXHRcXHRibG9jayA9IHRjZl9ibG9ja19maW5kKG5ldCwgXFx1MDAyNnEsIFxcdTAwMjZwYXJlbnQsIFxcdTAwMjZjbCxcXG4zMTYyOlxcdFxcdFxcdFxcdCAgICAgICB0LVxcdTAwM2V0Y21faWZpbmRleCwgdC1cXHUwMDNldGNtX2Jsb2NrX2luZGV4LCBleHRhY2spO1xcbjMxNjM6XFx0XFx0aWYgKElTX0VSUihibG9jaykpXFxuMzE2NDpcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUihibG9jayk7XFxuMzE2NTpcXHRcXG4zMTY2OlxcdFxcdGNoYWluX2luZGV4ID0gbmxhX2dldF91MzJfZGVmYXVsdCh0Y2FbVENBX0NIQUlOXSwgMCk7XFxuMzE2NzpcXHRcXHRpZiAoY2hhaW5faW5kZXggXFx1MDAzZSBUQ19BQ1RfRVhUX1ZBTF9NQVNLKSB7XFxuMzE2ODpcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJTcGVjaWZpZWQgY2hhaW4gaW5kZXggZXhjZWVkcyB1cHBlciBsaW1pdFxcXCIpO1xcbjMxNjk6XFx0XFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4zMTcwOlxcdFxcdFxcdGdvdG8gZXJyb3V0X2Jsb2NrO1xcbjMxNzE6XFx0XFx0fVxcbjMxNzI6XFx0XFxuMzE3MzpcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZibG9jay1cXHUwMDNlbG9jayk7XFxuMzE3NDpcXHRcXHRjaGFpbiA9IHRjZl9jaGFpbl9sb29rdXAoYmxvY2ssIGNoYWluX2luZGV4KTtcXG4zMTc1OlxcdFxcdGlmIChuLVxcdTAwM2VubG1zZ190eXBlID09IFJUTV9ORVdDSEFJTikge1xcbjMxNzY6XFx0XFx0XFx0aWYgKGNoYWluKSB7XFxuMzE3NzpcXHRcXHRcXHRcXHRpZiAodGNmX2NoYWluX2hlbGRfYnlfYWN0c19vbmx5KGNoYWluKSkge1xcbjMxNzg6XFx0XFx0XFx0XFx0XFx0LyogVGhlIGNoYWluIGV4aXN0cyBvbmx5IGJlY2F1c2UgdGhlcmUgaXNcXG4zMTc5OlxcdFxcdFxcdFxcdFxcdCAqIHNvbWUgYWN0aW9uIHJlZmVyZW5jaW5nIGl0LlxcbjMxODA6XFx0XFx0XFx0XFx0XFx0ICovXFxuMzE4MTpcXHRcXHRcXHRcXHRcXHR0Y2ZfY2hhaW5faG9sZChjaGFpbik7XFxuMzE4MjpcXHRcXHRcXHRcXHR9IGVsc2Uge1xcbjMxODM6XFx0XFx0XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiRmlsdGVyIGNoYWluIGFscmVhZHkgZXhpc3RzXFxcIik7XFxuMzE4NDpcXHRcXHRcXHRcXHRcXHRlcnIgPSAtRUVYSVNUO1xcbjMxODU6XFx0XFx0XFx0XFx0XFx0Z290byBlcnJvdXRfYmxvY2tfbG9ja2VkO1xcbjMxODY6XFx0XFx0XFx0XFx0fVxcbjMxODc6XFx0XFx0XFx0fSBlbHNlIHtcXG4zMTg4OlxcdFxcdFxcdFxcdGlmICghKG4tXFx1MDAzZW5sbXNnX2ZsYWdzIFxcdTAwMjYgTkxNX0ZfQ1JFQVRFKSkge1xcbjMxODk6XFx0XFx0XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiTmVlZCBib3RoIFJUTV9ORVdDSEFJTiBhbmQgTkxNX0ZfQ1JFQVRFIHRvIGNyZWF0ZSBhIG5ldyBjaGFpblxcXCIpO1xcbjMxOTA6XFx0XFx0XFx0XFx0XFx0ZXJyID0gLUVOT0VOVDtcXG4zMTkxOlxcdFxcdFxcdFxcdFxcdGdvdG8gZXJyb3V0X2Jsb2NrX2xvY2tlZDtcXG4zMTkyOlxcdFxcdFxcdFxcdH1cXG4zMTkzOlxcdFxcdFxcdFxcdGNoYWluID0gdGNmX2NoYWluX2NyZWF0ZShibG9jaywgY2hhaW5faW5kZXgpO1xcbjMxOTQ6XFx0XFx0XFx0XFx0aWYgKCFjaGFpbikge1xcbjMxOTU6XFx0XFx0XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiRmFpbGVkIHRvIGNyZWF0ZSBmaWx0ZXIgY2hhaW5cXFwiKTtcXG4zMTk2OlxcdFxcdFxcdFxcdFxcdGVyciA9IC1FTk9NRU07XFxuMzE5NzpcXHRcXHRcXHRcXHRcXHRnb3RvIGVycm91dF9ibG9ja19sb2NrZWQ7XFxuMzE5ODpcXHRcXHRcXHRcXHR9XFxuMzE5OTpcXHRcXHRcXHR9XFxuMzIwMDpcXHRcXHR9IGVsc2Uge1xcbjMyMDE6XFx0XFx0XFx0aWYgKCFjaGFpbiB8fCB0Y2ZfY2hhaW5faGVsZF9ieV9hY3RzX29ubHkoY2hhaW4pKSB7XFxuMzIwMjpcXHRcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJDYW5ub3QgZmluZCBzcGVjaWZpZWQgZmlsdGVyIGNoYWluXFxcIik7XFxuMzIwMzpcXHRcXHRcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbjMyMDQ6XFx0XFx0XFx0XFx0Z290byBlcnJvdXRfYmxvY2tfbG9ja2VkO1xcbjMyMDU6XFx0XFx0XFx0fVxcbjMyMDY6XFx0XFx0XFx0dGNmX2NoYWluX2hvbGQoY2hhaW4pO1xcbjMyMDc6XFx0XFx0fVxcbjMyMDg6XFx0XFxuMzIwOTpcXHRcXHRpZiAobi1cXHUwMDNlbmxtc2dfdHlwZSA9PSBSVE1fTkVXQ0hBSU4pIHtcXG4zMjEwOlxcdFxcdFxcdC8qIE1vZGlmeWluZyBjaGFpbiByZXF1aXJlcyBob2xkaW5nIHBhcmVudCBibG9jayBsb2NrLiBJbiBjYXNlXFxuMzIxMTpcXHRcXHRcXHQgKiB0aGUgY2hhaW4gd2FzIHN1Y2Nlc3NmdWxseSBhZGRlZCwgdGFrZSBhIHJlZmVyZW5jZSB0byB0aGVcXG4zMjEyOlxcdFxcdFxcdCAqIGNoYWluLiBUaGlzIGVuc3VyZXMgdGhhdCBhbiBlbXB0eSBjaGFpbiBkb2VzIG5vdCBkaXNhcHBlYXIgYXRcXG4zMjEzOlxcdFxcdFxcdCAqIHRoZSBlbmQgb2YgdGhpcyBmdW5jdGlvbi5cXG4zMjE0OlxcdFxcdFxcdCAqL1xcbjMyMTU6XFx0XFx0XFx0dGNmX2NoYWluX2hvbGQoY2hhaW4pO1xcbjMyMTY6XFx0XFx0XFx0Y2hhaW4tXFx1MDAzZWV4cGxpY2l0bHlfY3JlYXRlZCA9IHRydWU7XFxuMzIxNzpcXHRcXHR9XFxuMzIxODpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmJsb2NrLVxcdTAwM2Vsb2NrKTtcXG4zMjE5OlxcdFxcbjMyMjA6XFx0XFx0c3dpdGNoIChuLVxcdTAwM2VubG1zZ190eXBlKSB7XFxuMzIyMTpcXHRcXHRjYXNlIFJUTV9ORVdDSEFJTjpcXG4zMjIyOlxcdFxcdFxcdGVyciA9IHRjX2NoYWluX3RtcGx0X2FkZChjaGFpbiwgbmV0LCB0Y2EsIGV4dGFjayk7XFxuMzIyMzpcXHRcXHRcXHRpZiAoZXJyKSB7XFxuMzIyNDpcXHRcXHRcXHRcXHR0Y2ZfY2hhaW5fcHV0X2V4cGxpY2l0bHlfY3JlYXRlZChjaGFpbik7XFxuMzIyNTpcXHRcXHRcXHRcXHRnb3RvIGVycm91dDtcXG4zMjI2OlxcdFxcdFxcdH1cXG4zMjI3OlxcdFxcbjMyMjg6XFx0XFx0XFx0dGNfY2hhaW5fbm90aWZ5KGNoYWluLCBOVUxMLCAwLCBOTE1fRl9DUkVBVEUgfCBOTE1fRl9FWENMLFxcbjMyMjk6XFx0XFx0XFx0XFx0XFx0UlRNX05FV0NIQUlOLCBmYWxzZSwgZXh0YWNrKTtcXG4zMjMwOlxcdFxcdFxcdGJyZWFrO1xcbjMyMzE6XFx0XFx0Y2FzZSBSVE1fREVMQ0hBSU46XFxuMzIzMjpcXHRcXHRcXHR0ZmlsdGVyX25vdGlmeV9jaGFpbihuZXQsIHNrYiwgYmxvY2ssIHEsIHBhcmVudCwgbixcXG4zMjMzOlxcdFxcdFxcdFxcdFxcdCAgICAgY2hhaW4sIFJUTV9ERUxURklMVEVSLCBleHRhY2spO1xcbjMyMzQ6XFx0XFx0XFx0LyogRmx1c2ggdGhlIGNoYWluIGZpcnN0IGFzIHRoZSB1c2VyIHJlcXVlc3RlZCBjaGFpbiByZW1vdmFsLiAqL1xcbjMyMzU6XFx0XFx0XFx0dGNmX2NoYWluX2ZsdXNoKGNoYWluLCB0cnVlKTtcXG4zMjM2OlxcdFxcdFxcdC8qIEluIGNhc2UgdGhlIGNoYWluIHdhcyBzdWNjZXNzZnVsbHkgZGVsZXRlZCwgcHV0IGEgcmVmZXJlbmNlXFxuMzIzNzpcXHRcXHRcXHQgKiB0byB0aGUgY2hhaW4gcHJldmlvdXNseSB0YWtlbiBkdXJpbmcgYWRkaXRpb24uXFxuMzIzODpcXHRcXHRcXHQgKi9cXG4zMjM5OlxcdFxcdFxcdHRjZl9jaGFpbl9wdXRfZXhwbGljaXRseV9jcmVhdGVkKGNoYWluKTtcXG4zMjQwOlxcdFxcdFxcdGJyZWFrO1xcbjMyNDE6XFx0XFx0Y2FzZSBSVE1fR0VUQ0hBSU46XFxuMzI0MjpcXHRcXHRcXHRlcnIgPSB0Y19jaGFpbl9ub3RpZnkoY2hhaW4sIHNrYiwgbi1cXHUwMDNlbmxtc2dfc2VxLFxcbjMyNDM6XFx0XFx0XFx0XFx0XFx0ICAgICAgbi1cXHUwMDNlbmxtc2dfZmxhZ3MsIG4tXFx1MDAzZW5sbXNnX3R5cGUsIHRydWUsIGV4dGFjayk7XFxuMzI0NDpcXHRcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4zMjQ1OlxcdFxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcIkZhaWxlZCB0byBzZW5kIGNoYWluIG5vdGlmeSBtZXNzYWdlXFxcIik7XFxuMzI0NjpcXHRcXHRcXHRicmVhaztcXG4zMjQ3OlxcdFxcdGRlZmF1bHQ6XFxuMzI0ODpcXHRcXHRcXHRlcnIgPSAtRU9QTk9UU1VQUDtcXG4zMjQ5OlxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcIlVuc3VwcG9ydGVkIG1lc3NhZ2UgdHlwZVxcXCIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQyMjo1MTo0NS43NTk5OTQ3NzlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo5Nzk2NTUzNzcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBwcmVzZW50ZWQgYXMgaWYgaXQgd2VyZSBteSBvd24gaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkRpdmluZyBEZWVwZXIgaW50byBgdGNfY3RsX2NoYWluYCoqXG5cbkFscmlnaHQsIEknbSBhdCBhIHBvaW50IHdoZXJlIEknbSBleGFtaW5pbmcgYSBzcGVjaWZpYyBjb250cm9sIHN0cnVjdHVyZSwgbGlrZWx5IHdpdGhpbiBhIHRyYWZmaWMgY29udHJvbCBzeXN0ZW0gb3IgYSBzaW1pbGFyIG5ldHdvcmsgbWFuYWdlbWVudCBjb250ZXh0LiBUaGUgcGhyYXNpbmcgXCJMZXQncyBzZWUgdGhlIHJlc3Qgb2YgYHRjX2N0bF9jaGFpbmBcIiBzdWdnZXN0cyBJJ3ZlIGFscmVhZHkgZW5nYWdlZCB3aXRoICpwYXJ0KiBvZiB0aGlzIHN0cnVjdHVyZSBhbmQgbm93IEknbSByZWFkeSB0byBkZWx2ZSBpbnRvIHRoZSByZW1haW5pbmcgZWxlbWVudHMuIEknbSBwcm9iYWJseSBsb29raW5nIGF0IGEgY2hhaW4gb2YgY29udHJvbCBlbGVtZW50cy4gSSdtIGFscmVhZHkgYXdhcmUgdGhhdCBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgdGhlIG90aGVyIGNvbnRyb2xzIGluIHRoaXMgY2hhaW4sIHNvIEkgd2FudCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgcmVzdCBvZiB0aGVtIGJlaGF2ZS5cblxuVGhpcyBjb3VsZCBtZWFuIEknbSB0cmFjaW5nIHRoZSBleGVjdXRpb24gZmxvdywgaWRlbnRpZnlpbmcgZGVwZW5kZW5jaWVzIGJldHdlZW4gZGlmZmVyZW50IGNvbnRyb2wgcG9pbnRzLCBvciBwZXJoYXBzIHRyeWluZyB0byBkZWJ1ZyBhbiB1bmV4cGVjdGVkIGJlaGF2aW9yLiBNeSBnb2FsIGlzIHRvIGFjaGlldmUgYW4gaG9saXN0aWMgdW5kZXJzdGFuZGluZyBvZiB0aGlzIGNoYWluOyBJIG5lZWQgdG8ga25vdyB0aGUgaW5kaXZpZHVhbCBjb21wb25lbnRzIGFuZCBob3cgdGhleSBpbnRlcmFjdCB0byBhY2hpZXZlIHNvbWUgZGVzaXJlZCBvdXRjb21lLiBJIG5lZWQgYSBicm9hZGVyIHZpZXcgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHdob2xlIHN5c3RlbSB3b3Jrcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDc2NywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMjI6NTE6NTUuNTU2NTUxM1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMzYwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc2NoZWQvY2xzX2FwaS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMyNTAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjMyNTA6XFx0XFx0XFx0Z290byBlcnJvdXQ7XFxuMzI1MTpcXHRcXHR9XFxuMzI1MjpcXHRcXG4zMjUzOlxcdGVycm91dDpcXG4zMjU0OlxcdFxcdHRjZl9jaGFpbl9wdXQoY2hhaW4pO1xcbjMyNTU6XFx0ZXJyb3V0X2Jsb2NrOlxcbjMyNTY6XFx0XFx0dGNmX2Jsb2NrX3JlbGVhc2UocSwgYmxvY2ssIHRydWUpO1xcbjMyNTc6XFx0XFx0aWYgKGVyciA9PSAtRUFHQUlOIFxcdTAwMjZcXHUwMDI2IG4tXFx1MDAzZW5sbXNnX3R5cGUgPT0gUlRNX05FV0NIQUlOKVxcbjMyNTg6XFx0XFx0XFx0LyogUmVwbGF5IHRoZSByZXF1ZXN0LiAqL1xcbjMyNTk6XFx0XFx0XFx0Z290byByZXBsYXk7XFxuMzI2MDpcXHRcXHRyZXR1cm4gZXJyO1xcbjMyNjE6XFx0XFxuMzI2MjpcXHRlcnJvdXRfYmxvY2tfbG9ja2VkOlxcbjMyNjM6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZibG9jay1cXHUwMDNlbG9jayk7XFxuMzI2NDpcXHRcXHRnb3RvIGVycm91dF9ibG9jaztcXG4zMjY1OlxcdH1cXG4zMjY2OlxcdFxcbjMyNjc6XFx0LyogY2FsbGVkIHdpdGggUlROTCAqL1xcbjMyNjg6XFx0c3RhdGljIGludCB0Y19kdW1wX2NoYWluKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG4zMjY5OlxcdHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMjI6NTE6NTUuNTU2NzU4MDJaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTM2ODg2NjQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYHRjX2N0bF9jaGFpbmAgRnVuY3Rpb24qKlxuXG5Pa2F5LCBzbyBgdGNfY3RsX2NoYWluYCBsb29rcyBsaWtlIGl0J3MgdGhlIGNvcmUgb2Ygc29tZXRoaW5nIHJlbGF0ZWQgdG8gdHJhZmZpYyBjb250cm9sIGNoYWlucywgYW5kIGl0J3MgY29tbXVuaWNhdGluZyB0aHJvdWdoIHJ0bmV0bGluay4gU3BlY2lmaWNhbGx5LCBJIHNlZSBpdCByZXNwb25kcyB0byBgUlRNX05FV0NIQUlOYCwgYFJUTV9ERUxDSEFJTmAsIGFuZCBgUlRNX0dFVENIQUlOYCBtZXNzYWdlcy4gVGhhdCdzIGdvb2Q7IGl0IGNvbmZpcm1zIG15IGluaXRpYWwgaHVuY2ggYWJvdXQgaG93IGl0J3MgaW50ZXJhY3Rpbmcgd2l0aCB0aGUga2VybmVsJ3MgbmV0d29ya2luZyBzdGFjay4gTm93LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gcGlucG9pbnQgZXhhY3RseSAqd2hlcmUqIHRoaXMgYHRjX2N0bF9jaGFpbmAgZnVuY3Rpb24gaXMgcmVnaXN0ZXJlZC4gVGhhdCBpbmZvcm1hdGlvbiBpcyBjcnVjaWFsIHRvIHVuZGVyc3RhbmRpbmcgaXRzIHJvbGUsIGNvbnRleHQgd2l0aGluIHRoZSBsYXJnZXIgdGMgZnJhbWV3b3JrLCBhbmQgYW55IHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuIExldCdzIHNlZSBpZiBJIGNhbiB0cmFjZSB0aGF0IHJlZ2lzdHJhdGlvbi4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MzI3LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQyMjo1MTo1Ny40OTM2NDYyNjVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODM2MTExMzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGNfY3RsX2NoYWluXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvY2xzX2FwaS5jPTMxMjM9c3RhdGljIHZvaWQgdGNfY2hhaW5fdG1wbHRfZGVsKGNvbnN0IHN0cnVjdCB0Y2ZfcHJvdG9fb3BzICp0bXBsdF9vcHMsXFxuLS1cXG5uZXQvc2NoZWQvY2xzX2FwaS5jLTMxMzUtXFxubmV0L3NjaGVkL2Nsc19hcGkuYzozMTM2OnN0YXRpYyBpbnQgdGNfY3RsX2NoYWluKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbixcXG5uZXQvc2NoZWQvY2xzX2FwaS5jLTMxMzctXFx0XFx0XFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxubmV0L3NjaGVkL2Nsc19hcGkuYz00MTI1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcnRubF9tc2dfaGFuZGxlciB0Y19maWx0ZXJfcnRubF9tc2dfaGFuZGxlcnNbXSBfX2luaXRjb25zdCA9IHtcXG4tLVxcbm5ldC9zY2hlZC9jbHNfYXBpLmMtNDEzMS1cXHQgLmR1bXBpdCA9IHRjX2R1bXBfdGZpbHRlciwgLmZsYWdzID0gUlROTF9GTEFHX0RPSVRfVU5MT0NLRUR9LFxcbm5ldC9zY2hlZC9jbHNfYXBpLmM6NDEzMjpcXHR7Lm1zZ3R5cGUgPSBSVE1fTkVXQ0hBSU4sIC5kb2l0ID0gdGNfY3RsX2NoYWlufSxcXG5uZXQvc2NoZWQvY2xzX2FwaS5jOjQxMzM6XFx0ey5tc2d0eXBlID0gUlRNX0RFTENIQUlOLCAuZG9pdCA9IHRjX2N0bF9jaGFpbn0sXFxubmV0L3NjaGVkL2Nsc19hcGkuYzo0MTM0OlxcdHsubXNndHlwZSA9IFJUTV9HRVRDSEFJTiwgLmRvaXQgPSB0Y19jdGxfY2hhaW4sXFxubmV0L3NjaGVkL2Nsc19hcGkuYy00MTM1LVxcdCAuZHVtcGl0ID0gdGNfZHVtcF9jaGFpbn0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIyOjUxOjU3LjU3NzI2NjEwNFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxODQwNTE1ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIGB0Y19jdGxfY2hhaW5gIEhhbmRsZXIqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgdGNfY3RsX2NoYWluYCwgYW5kIGl0J3MgcHJldHR5IGNsZWFyIHRoaXMgaXMgdGhlIHdvcmtob3JzZSBmb3IgbWFuYWdpbmcgdHJhZmZpYyBjb250cm9sIGNoYWlucy4gU3BlY2lmaWNhbGx5LCBpdCBoYW5kbGVzIHRoZSBSVE1fTkVXQ0hBSU4sIFJUTV9ERUxDSEFJTiwgYW5kIFJUTV9HRVRDSEFJTiBuZXRsaW5rIG1lc3NhZ2VzLiBHaXZlbiB0aGF0IGl0J3MgbmVzdGxlZCBpbiBgbmV0L3NjaGVkL2Nsc19hcGkuY2AsIHRoaXMgaXMgY29yZSBuZXR3b3JraW5nIGFuZCBkaXJlY3RseSByZWxhdGVzIHRvIHRoZSB0cmFmZmljIGNvbnRyb2wgbWVjaGFuaXNtcy4gIEl0J3MgYSBjcml0aWNhbCBjb21wb25lbnQgZm9yIGludGVyYWN0aW5nIHdpdGggdGhlIHVzZXJzcGFjZSB0aHJvdWdoIG5ldGxpbmsgKHNwZWNpZmljYWxseSBydG5ldGxpbmspLlxuXG5Ob3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMuIFRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBzZWUgd2hpY2ggS2NvbmZpZyBvcHRpb25zIGdvdmVybiB0aGUgaW5jbHVzaW9uIG9mIGBuZXQvc2NoZWQvY2xzX2FwaS5jYC4gVGltZSB0byBkaXZlIGludG8gdGhlIE1ha2VmaWxlIG9yIEtjb25maWcgZmlsZXMgd2l0aGluIHRoZSBgbmV0L3NjaGVkL2AgZGlyZWN0b3J5LiBUaGF0IHdpbGwgaWxsdW1pbmF0ZSB0aGUgbmVjZXNzYXJ5IGtlcm5lbCBjb25maWd1cmF0aW9ucyB0byBlbmFibGUgdGhpcyBmdW5jdGlvbmFsaXR5LiBJIGhhdmUgdG8gZmlndXJlIG91dCB0aGUgYnVpbGQtdGltZSByZXF1aXJlbWVudHMgdG8gY29uZmlybSB0aGF0IHRoZSBjaGFpbiBmZWF0dXJlcyBhcmUgYXBwcm9wcmlhdGVseSBlbmFibGVkIGluIHRoZSBkZXBsb3llZCBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU5MzQsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMjI6NTE6NTkuNzYxMzJaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNjEzOTM3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjbHNfYXBpXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvTWFrZWZpbGU9OT1vYmotJChDT05GSUdfTkVUX1NDSEVEKVxcdFxcdCs9IHNjaF9hcGkubyBzY2hfYmxhY2tob2xlLm9cXG5uZXQvc2NoZWQvTWFrZWZpbGU6MTA6b2JqLSQoQ09ORklHX05FVF9DTFMpXFx0XFx0Kz0gY2xzX2FwaS5vXFxubmV0L3NjaGVkL01ha2VmaWxlLTExLW9iai0kKENPTkZJR19ORVRfQ0xTX0FDVClcXHQrPSBhY3RfYXBpLm9cXG4tLVxcbm5ldC9zY2hlZC9jbHNfYXBpLmMtMi0vKlxcbm5ldC9zY2hlZC9jbHNfYXBpLmM6MzogKiBuZXQvc2NoZWQvY2xzX2FwaS5jXFx0UGFja2V0IGNsYXNzaWZpZXIgQVBJLlxcbm5ldC9zY2hlZC9jbHNfYXBpLmMtNC0gKlxcbi0tXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYz0yMzU4PXN0YXRpYyBpbnQgZmxfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYixcXG4tLVxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMjQzMC1cXHRcXHRcXHQvKiBGaWx0ZXIgd2l0aCBzcGVjaWZpZWQgaGFuZGxlIHdhcyBjb25jdXJyZW50bHlcXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjI0MzE6XFx0XFx0XFx0ICogaW5zZXJ0ZWQgYWZ0ZXIgaW5pdGlhbCBjaGVjayBpbiBjbHNfYXBpLiBUaGlzIGlzIG5vdFxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMjQzMi1cXHRcXHRcXHQgKiBuZWNlc3NhcmlseSBhbiBlcnJvciBpZiBOTE1fRl9FWENMIGlzIG5vdCBzZXQgaW5cXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjI0MzM6XFx0XFx0XFx0ICogbWVzc2FnZSBmbGFncy4gUmV0dXJuaW5nIEVBR0FJTiB3aWxsIGNhdXNlIGNsc19hcGkgdG9cXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTI0MzQtXFx0XFx0XFx0ICogdHJ5IHRvIHVwZGF0ZSBjb25jdXJyZW50bHkgaW5zZXJ0ZWQgcnVsZS5cXG4tLVxcbm5ldC9zY2hlZC9zY2hfYXBpLmMtNTctICAgLSBcXFwic2NoZWR1bGVyc1xcXCIsIHdoaWNoIHNwbGl0IGFsbCB0aGUgcGFja2V0cyB0byBcXFwidHJhZmZpYyBjbGFzc2VzXFxcIixcXG5uZXQvc2NoZWQvc2NoX2FwaS5jOjU4OiAgICAgdXNpbmcgXFxcInBhY2tldCBjbGFzc2lmaWVyc1xcXCIgKGxvb2sgYXQgY2xzX2FwaS5jKVxcbm5ldC9zY2hlZC9zY2hfYXBpLmMtNTktXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIyOjUxOjU5Ljg3NzQ2NTUyOVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNzYwNTcxMTcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCB3ZW50OlxuXG4qKkV4YW1pbmluZyB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gZm9yIE5ldHdvcmsgVHJhZmZpYyBDb250cm9sKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpbmQgc29tZXRoaW5nIHJlbGF0ZWQgdG8gbmV0d29yayB0cmFmZmljIGNvbnRyb2wsIHNwZWNpZmljYWxseSB0aGUgYE5FVF9DTFNgIG9wdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRpdmUgaW50byB0aGUga2VybmVsJ3MgY29uZmlndXJhdGlvbiBmaWxlcy4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgdGhlIHBsYWNlIHRvIHN0YXJ0IGlzIGxpa2VseSBgbmV0L3NjaGVkL0tjb25maWdgLiBUaGF0J3Mgd2hlcmUgSSB3b3VsZCBleHBlY3QgdG8gZmluZCBvcHRpb25zIHJlbGF0ZWQgdG8gdGhlIHNjaGVkdWxpbmcgYW5kIGNsYXNzaWZpY2F0aW9uIG9mIG5ldHdvcmsgcGFja2V0cy4gTGV0J3Mgc2VlIHdoYXQncyBpbiB0aGVyZS4gSSdtIGFzc3VtaW5nIHRoYXQgc2luY2UgSSBoYXZlIGJlZW4gd29ya2luZyB3aXRoIGtlcm5lbCBjb25maWd1cmF0aW9ucyB0aGF0IEkgd2lsbCBiZSBhYmxlIHRvIGludGVycHJldCBpdCBhbmQgZmluZCB0aGUgcmVsZXZhbnQgc2VjdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NjcwMCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIyOjUyOjAxLjYzODA0MDQ3WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTY1NjQwNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkVUX0NMU1xcXFxiXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvS2NvbmZpZz00Nzk9Y29tbWVudCBcXFwiQ2xhc3NpZmljYXRpb25cXFwiXFxubmV0L3NjaGVkL0tjb25maWctNDgwLVxcbm5ldC9zY2hlZC9LY29uZmlnOjQ4MTpjb25maWcgTkVUX0NMU1xcbm5ldC9zY2hlZC9LY29uZmlnLTQ4Mi1cXHRib29sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIyOjUyOjAxLjY5OTcwMTcxN1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0OTU0MjU2MjMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIE5FVF9DTFMgRGVwZW5kZW5jeSoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpcyB0byBkZXRlcm1pbmUgdGhlIGNhdXNhbCByZWxhdGlvbnNoaXAgYmV0d2VlbiBgTkVUX0NMU2AgYW5kIGBORVRfU0NIRURgLiBJcyBgTkVUX0NMU2Agc2ltcGx5IGEgZGVwZW5kZW50IG9wdGlvbiwgb3IgZG9lcyBpdCByZXF1aXJlIHNvbWUgb3RoZXIgdW5kZXJseWluZyBtZWNoYW5pc20gdG8gYmUgZW5hYmxlZD8gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHNlbGVjdC9lbmFibGUgcmVsYXRpb25zaGlwLCBpZiBhbnksIGFuZCBpZiBgTkVUX0NMU2AgaGFzIGEgaGFyZCBkZXBlbmRlbmN5IG9uIGBORVRfU0NIRURgLiBJcyBgTkVUX0NMU2AgYSBmZWF0dXJlIHRoYXQgaXMgc2VsZWN0aXZlbHkgb3IgY29uZGl0aW9uYWxseSBlbmFibGVkIG9yIGRvZXMgYE5FVF9DTFNgIGRlcGVuZCBvbiBgTkVUX1NDSEVEYD9cblxuXG4iLCJJbnB1dFRva2VucyI6Njk1NCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIyOjUyOjA2LjY1Mzk2MTU1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyOTY1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc2NoZWQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA0NzUsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0NzU6XFx0XFx0ZGVmYXVsdCBcXFwic2ZxXFxcIiBpZiBERUZBVUxUX1NGUVxcbiA0NzY6XFx0XFx0ZGVmYXVsdCBcXFwicGZpZm9fZmFzdFxcXCJcXG4gNDc3OlxcdGVuZGlmXFxuIDQ3ODpcXHRcXG4gNDc5OlxcdGNvbW1lbnQgXFxcIkNsYXNzaWZpY2F0aW9uXFxcIlxcbiA0ODA6XFx0XFxuIDQ4MTpcXHRjb25maWcgTkVUX0NMU1xcbiA0ODI6XFx0XFx0Ym9vbFxcbiA0ODM6XFx0XFxuIDQ4NDpcXHRjb25maWcgTkVUX0NMU19CQVNJQ1xcbiA0ODU6XFx0XFx0dHJpc3RhdGUgXFxcIkVsZW1lbnRhcnkgY2xhc3NpZmljYXRpb24gKEJBU0lDKVxcXCJcXG4gNDg2OlxcdFxcdHNlbGVjdCBORVRfQ0xTXFxuIDQ4NzpcXHRcXHRoZWxwXFxuIDQ4ODpcXHRcXHQgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gYmUgYWJsZSB0byBjbGFzc2lmeSBwYWNrZXRzIHVzaW5nXFxuIDQ4OTpcXHRcXHQgIG9ubHkgZXh0ZW5kZWQgbWF0Y2hlcyBhbmQgYWN0aW9ucy5cXG4gNDkwOlxcdFxcbiA0OTE6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXFxuIDQ5MjpcXHRcXHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBjbHNfYmFzaWMuXFxuIDQ5MzpcXHRcXG4gNDk0OlxcdGNvbmZpZyBORVRfQ0xTX1JPVVRFNFxcbiA0OTU6XFx0XFx0dHJpc3RhdGUgXFxcIlJvdXRpbmcgZGVjaXNpb24gKFJPVVRFKVxcXCJcXG4gNDk2OlxcdFxcdGRlcGVuZHMgb24gSU5FVFxcbiA0OTc6XFx0XFx0c2VsZWN0IElQX1JPVVRFX0NMQVNTSURcXG4gNDk4OlxcdFxcdHNlbGVjdCBORVRfQ0xTXFxuIDQ5OTpcXHRcXHRoZWxwXFxuIDUwMDpcXHRcXHQgIElmIHlvdSBzYXkgWSBoZXJlLCB5b3Ugd2lsbCBiZSBhYmxlIHRvIGNsYXNzaWZ5IHBhY2tldHNcXG4gNTAxOlxcdFxcdCAgYWNjb3JkaW5nIHRvIHRoZSByb3V0ZSB0YWJsZSBlbnRyeSB0aGV5IG1hdGNoZWQuXFxuIDUwMjpcXHRcXG4gNTAzOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxcbiA1MDQ6XFx0XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgY2xzX3JvdXRlLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQyMjo1MjowNi42NTQwOTM2NloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODgzMDY0NzU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqSW52ZXN0aWdhdGluZyBOZXR3b3JrIFNjaGVkdWxlciBDb25maWd1cmF0aW9uKipcblxuUmlnaHQsIHNvIEknbSBkaXZpbmcgaW50byB0aGUga2VybmVsIGNvbmZpZyBoZXJlLiBGaXJzdCwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCdzIHJlbGF0ZWQgdG8gdGhlIG5ldHdvcmsgc2NoZWR1bGVyIChgTkVUX1NDSEVEYCkuIE9rYXksIGFjY29yZGluZyB0byBteSBub3RlcywgdGhhdCBsaWtlbHkgbGl2ZXMgaW4gYG5ldC9zY2hlZC9LY29uZmlnYC4gU28sIHRoZSBsb2dpY2FsIG5leHQgc3RlcCBpcyB0byBhY3R1YWxseSBnbyBhbmQgY2hlY2sgd2hhdCBgTkVUX1NDSEVEYCBpcyAqZGVmaW5lZCogYXMgaW4gdGhlIGBuZXQvc2NoZWQvS2NvbmZpZ2AgZmlsZS4gVGhhdCdzIHdoZXJlIEknbGwgZ2V0IHRoZSByZWFsIGxvdy1kb3duIG9uIHRoZSBkZXBlbmRlbmNpZXMsIG9wdGlvbnMsIGFuZCB3aGF0J3MgYWN0dWFsbHkgdW5kZXIgdGhpcyBjb25maWcgdW1icmVsbGEuIExldCdzIHNlZSB3aGF0J3MgYWN0dWFsbHkgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc1NTEsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIyOjUyOjA4LjUzNzE2MDg3NVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjM3NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NjaGVkL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgVHJhZmZpYyBjb250cm9sIGNvbmZpZ3VyYXRpb24uXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdG1lbnVjb25maWcgTkVUX1NDSEVEXFxuICAgNzpcXHRcXHRib29sIFxcXCJRb1MgYW5kL29yIGZhaXIgcXVldWVpbmdcXFwiXFxuICAgODpcXHRcXHRzZWxlY3QgTkVUX1NDSF9GSUZPXFxuICAgOTpcXHRcXHRoZWxwXFxuICAxMDpcXHRcXHQgIFdoZW4gdGhlIGtlcm5lbCBoYXMgc2V2ZXJhbCBwYWNrZXRzIHRvIHNlbmQgb3V0IG92ZXIgYSBuZXR3b3JrXFxuICAxMTpcXHRcXHQgIGRldmljZSwgaXQgaGFzIHRvIGRlY2lkZSB3aGljaCBvbmVzIHRvIHNlbmQgZmlyc3QsIHdoaWNoIG9uZXMgdG9cXG4gIDEyOlxcdFxcdCAgZGVsYXksIGFuZCB3aGljaCBvbmVzIHRvIGRyb3AuIFRoaXMgaXMgdGhlIGpvYiBvZiB0aGUgcXVldWVpbmdcXG4gIDEzOlxcdFxcdCAgZGlzY2lwbGluZXMsIHNldmVyYWwgZGlmZmVyZW50IGFsZ29yaXRobXMgZm9yIGhvdyB0byBkbyB0aGlzXFxuICAxNDpcXHRcXHQgIFxcXCJmYWlybHlcXFwiIGhhdmUgYmVlbiBwcm9wb3NlZC5cXG4gIDE1OlxcdFxcbiAgMTY6XFx0XFx0ICBJZiB5b3Ugc2F5IE4gaGVyZSwgeW91IHdpbGwgZ2V0IHRoZSBzdGFuZGFyZCBwYWNrZXQgc2NoZWR1bGVyLCB3aGljaFxcbiAgMTc6XFx0XFx0ICBpcyBhIEZJRk8gKGZpcnN0IGNvbWUsIGZpcnN0IHNlcnZlZCkuIElmIHlvdSBzYXkgWSBoZXJlLCB5b3Ugd2lsbCBiZVxcbiAgMTg6XFx0XFx0ICBhYmxlIHRvIGNob29zZSBmcm9tIGFtb25nIHNldmVyYWwgYWx0ZXJuYXRpdmUgYWxnb3JpdGhtcyB3aGljaCBjYW5cXG4gIDE5OlxcdFxcdCAgdGhlbiBiZSBhdHRhY2hlZCB0byBkaWZmZXJlbnQgbmV0d29yayBkZXZpY2VzLiBUaGlzIGlzIHVzZWZ1bCBmb3JcXG4gIDIwOlxcdFxcdCAgZXhhbXBsZSBpZiBzb21lIG9mIHlvdXIgbmV0d29yayBkZXZpY2VzIGFyZSByZWFsIHRpbWUgZGV2aWNlcyB0aGF0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIyOjUyOjA4LjUzNzI4Njk0NVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzkzNjQ4ODAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGZyb20gYW4gZXhwZXJ0J3MgcGVyc3BlY3RpdmU6XG5cbioqVGhpbmtpbmcgVGhyb3VnaCBOZXR3b3JrIENsYXNzaWZpZXIgU2VsZWN0aW9uKipcblxuUmlnaHQsIHNvIHdlJ3JlIHRhbGtpbmcgYWJvdXQgbmV0d29yayBjbGFzc2lmaWVycyBoZXJlLCBhbmQgSSBzZWUgd2UndmUgZ290IGBORVRfQ0xTYCBhcyB0aGUgb3ZlcmFyY2hpbmcgY2F0ZWdvcnkuIFRoaXMgZ2V0cyBwaWNrZWQgYnkgdmFyaW91cyBzcGVjaWZpYyBjbGFzc2lmaWVycywgdGhpbmdzIGxpa2UgYE5FVF9DTFNfQkFTSUNgLCBgTkVUX0NMU19GTE9XRVJgLCBhbmQgYE5FVF9DTFNfTUFUQ0hBTExgLiBPaCwgYW5kIGxldCdzIG5vdCBmb3JnZXQgYE5FVF9DTFNfQUNUYCwgd2hpY2ggc3VnZ2VzdHMgd2UncmUgZGVhbGluZyB3aXRoIGFjdGlvbnMgYWxvbmdzaWRlIHRoZSBjbGFzc2lmaWNhdGlvbi5cblxuTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgcmVsYXRlLiBJdCBsb29rcyBsaWtlIGBORVRfU0NIRURgIChzY2hlZHVsZXIpIGFuZCBgTkVUX0NMU19BQ1RgIGFyZSBrZXkgcGxheWVycyBoZXJlLCBtYXliZSBpbnRlcmFjdGluZyB3aXRoIGBORVRfQ0xTYC4gSSBzaG91bGQgZGlnIGludG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIHRvIHNlZSBob3cgdGhlc2UgdGhpbmdzIGFyZSB3aXJlZCB0b2dldGhlci5cblxuU28sIGxldCdzIHNlZSwgdGhlIG5leHQgc3RlcCBpcyB0byBxdWlja2x5IGNoZWNrIGBuZXQvc2NoZWQvS2NvbmZpZ2AuIEkgbmVlZCB0byBjb25maXJtIGlmIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVmZXJlbmNlIGBzZWxlY3QgTkVUX0NMU2AgYW5kIGhvdyB0aGV5IGluZmx1ZW5jZSB0aGUgaW5jbHVzaW9uIG9yIGV4Y2x1c2lvbiBvZiBgTkVUX0NMU2AgaXRzZWxmLiBJJ20gYWZ0ZXIgdGhlIGRlcGVuZGVuY2llcyBhbmQgYW55IG9yZGVyaW5nIG9mIHRoZXNlIG9wdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgwODIsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIyOjUyOjEwLjkzMDkzODI2OFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjgzNDY1NjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VsZWN0IE5FVF9DTFNcXFxcYlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjaGVkL0tjb25maWc9NDg0PWNvbmZpZyBORVRfQ0xTX0JBU0lDXFxubmV0L3NjaGVkL0tjb25maWctNDg1LVxcdHRyaXN0YXRlIFxcXCJFbGVtZW50YXJ5IGNsYXNzaWZpY2F0aW9uIChCQVNJQylcXFwiXFxubmV0L3NjaGVkL0tjb25maWc6NDg2OlxcdHNlbGVjdCBORVRfQ0xTXFxubmV0L3NjaGVkL0tjb25maWctNDg3LVxcdGhlbHBcXG4tLVxcbm5ldC9zY2hlZC9LY29uZmlnPTQ5ND1jb25maWcgTkVUX0NMU19ST1VURTRcXG4tLVxcbm5ldC9zY2hlZC9LY29uZmlnLTQ5Ny1cXHRzZWxlY3QgSVBfUk9VVEVfQ0xBU1NJRFxcbm5ldC9zY2hlZC9LY29uZmlnOjQ5ODpcXHRzZWxlY3QgTkVUX0NMU1xcbm5ldC9zY2hlZC9LY29uZmlnLTQ5OS1cXHRoZWxwXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZz01MDY9Y29uZmlnIE5FVF9DTFNfRldcXG5uZXQvc2NoZWQvS2NvbmZpZy01MDctXFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBtYXJrIChGVylcXFwiXFxubmV0L3NjaGVkL0tjb25maWc6NTA4OlxcdHNlbGVjdCBORVRfQ0xTXFxubmV0L3NjaGVkL0tjb25maWctNTA5LVxcdGhlbHBcXG4tLVxcbm5ldC9zY2hlZC9LY29uZmlnPTUxNj1jb25maWcgTkVUX0NMU19VMzJcXG5uZXQvc2NoZWQvS2NvbmZpZy01MTctXFx0dHJpc3RhdGUgXFxcIlVuaXZlcnNhbCAzMmJpdCBjb21wYXJpc29ucyB3LyBoYXNoaW5nIChVMzIpXFxcIlxcbm5ldC9zY2hlZC9LY29uZmlnOjUxODpcXHRzZWxlY3QgTkVUX0NMU1xcbm5ldC9zY2hlZC9LY29uZmlnLTUxOS1cXHRoZWxwXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZz01Mzk9Y29uZmlnIE5FVF9DTFNfRkxPV1xcbm5ldC9zY2hlZC9LY29uZmlnLTU0MC1cXHR0cmlzdGF0ZSBcXFwiRmxvdyBjbGFzc2lmaWVyXFxcIlxcbm5ldC9zY2hlZC9LY29uZmlnOjU0MTpcXHRzZWxlY3QgTkVUX0NMU1xcbm5ldC9zY2hlZC9LY29uZmlnLTU0Mi1cXHRoZWxwXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZz01NTA9Y29uZmlnIE5FVF9DTFNfQ0dST1VQXFxubmV0L3NjaGVkL0tjb25maWctNTUxLVxcdHRyaXN0YXRlIFxcXCJDb250cm9sIEdyb3VwIENsYXNzaWZpZXJcXFwiXFxubmV0L3NjaGVkL0tjb25maWc6NTUyOlxcdHNlbGVjdCBORVRfQ0xTXFxubmV0L3NjaGVkL0tjb25maWctNTUzLVxcdHNlbGVjdCBDR1JPVVBfTkVUX0NMQVNTSURcXG4tLVxcbm5ldC9zY2hlZC9LY29uZmlnPTU2Mj1jb25maWcgTkVUX0NMU19CUEZcXG5uZXQvc2NoZWQvS2NvbmZpZy01NjMtXFx0dHJpc3RhdGUgXFxcIkJQRi1iYXNlZCBjbGFzc2lmaWVyXFxcIlxcbm5ldC9zY2hlZC9LY29uZmlnOjU2NDpcXHRzZWxlY3QgTkVUX0NMU1xcbm5ldC9zY2hlZC9LY29uZmlnLTU2NS1cXHRoZWxwXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZz01NzI9Y29uZmlnIE5FVF9DTFNfRkxPV0VSXFxubmV0L3NjaGVkL0tjb25maWctNTczLVxcdHRyaXN0YXRlIFxcXCJGbG93ZXIgY2xhc3NpZmllclxcXCJcXG5uZXQvc2NoZWQvS2NvbmZpZzo1NzQ6XFx0c2VsZWN0IE5FVF9DTFNcXG5uZXQvc2NoZWQvS2NvbmZpZy01NzUtXFx0aGVscFxcbi0tXFxubmV0L3NjaGVkL0tjb25maWc9NTgyPWNvbmZpZyBORVRfQ0xTX01BVENIQUxMXFxubmV0L3NjaGVkL0tjb25maWctNTgzLVxcdHRyaXN0YXRlIFxcXCJNYXRjaC1hbGwgY2xhc3NpZmllclxcXCJcXG5uZXQvc2NoZWQvS2NvbmZpZzo1ODQ6XFx0c2VsZWN0IE5FVF9DTFNcXG5uZXQvc2NoZWQvS2NvbmZpZy01ODUtXFx0aGVscFxcbi0tXFxubmV0L3NjaGVkL0tjb25maWc9NTkyPWNvbmZpZyBORVRfRU1BVENIXFxubmV0L3NjaGVkL0tjb25maWctNTkzLVxcdGJvb2wgXFxcIkV4dGVuZGVkIE1hdGNoZXNcXFwiXFxubmV0L3NjaGVkL0tjb25maWc6NTk0OlxcdHNlbGVjdCBORVRfQ0xTXFxubmV0L3NjaGVkL0tjb25maWctNTk1LVxcdGhlbHBcXG4tLVxcbm5ldC9zY2hlZC9LY29uZmlnPTcwMj1jb25maWcgTkVUX0NMU19BQ1RcXG5uZXQvc2NoZWQvS2NvbmZpZy03MDMtXFx0Ym9vbCBcXFwiQWN0aW9uc1xcXCJcXG5uZXQvc2NoZWQvS2NvbmZpZzo3MDQ6XFx0c2VsZWN0IE5FVF9DTFNcXG5uZXQvc2NoZWQvS2NvbmZpZy03MDUtXFx0c2VsZWN0IE5FVF9YR1JFU1NcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMjI6NTI6MTAuOTk5MjkwMDcyWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ2NjY4MzkwMTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUYXJnZXQgQXNzZXNzbWVudDogYHRjX2N0bF9jaGFpbmAgaW4gbmV0L3NjaGVkL2Nsc19hcGkuYyoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgdGhlIGB0Y19jdGxfY2hhaW4oKWAgZnVuY3Rpb24gd2l0aGluIGBuZXQvc2NoZWQvY2xzX2FwaS5jYC4gSXQncyBkZWFsaW5nIHdpdGggaG93IHRoZSBjb2RlIGhhbmRsZXMgYC1FQUdBSU5gIGVycm9ycywgc3BlY2lmaWNhbGx5IGluIHRoZSBjb250ZXh0IG9mIE5ldGxpbmsgbWVzc2FnZXMuIEJlZm9yZSwgdGhlIGNvZGUgdW5jb25kaXRpb25hbGx5IHJldHJpZWQgYSBgZ290byByZXBsYXk7YCBmb3IgKmFsbCogYG5sbXNnX3R5cGVzYCB3aGVuIGl0IGhpdCBhbiBgLUVBR0FJTmAuIE5vdywgaXQgb25seSByZXBsYXlzIGZvciBgUlRNX05FV0NIQUlOYC4gVGhlIHByb2JsZW0gd2FzIHRoYXQgaWYgYHRjZl9jaGFpbl9kdW1wYCwgYHRjX2NoYWluX25vdGlmeWAsIG9yIHNvbWV0aGluZyBzaW1pbGFyIHJldHVybmVkIGAtRUFHQUlOYCAob3IgYE5MX1NFVF9FUlJfTVNHYCkgZm9yIGFueXRoaW5nICpvdGhlciogdGhhbiBhIGBORVdDSEFJTmAgbWVzc2FnZSwgaXQgd291bGQgbG9vcCBvciByZXBsYXksIHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gYWxsIHNvcnRzIG9mIG5hc3R5IGlzc3VlcyDigJMgaW5maW5pdGUgbG9vcHMsIHlvdSBuYW1lIGl0LlxuXG5UaGlua2luZyB0aGlzIHRocm91Z2gsIHRoZSBjaGFuZ2UgaXMgcHJldHR5IGZvY3VzZWQg4oCTIGl0J3MgYWxsIGFib3V0IGNvbnRyb2wgZmxvdyBpbiB0aGlzIGNvcmUgbmV0d29ya2luZyBzdWJzeXN0ZW0uIEFuZCwgY3J1Y2lhbGx5LCB0aGlzIGB0Y19jdGxfY2hhaW5gIGZ1bmN0aW9uIGlzIGZ1bGx5IGFjY2Vzc2libGUgaW4gdHlwaWNhbCBRRU1VL1ZNIGVudmlyb25tZW50cyB2aWEgTmV0bGluay9ydG5ldGxpbmsgbWVzc2FnZXMuIFNvLCB5ZWFoLCB0aGlzIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy4gSSdtIGdvaW5nIHRvIHNldCBgV29ydGhGdXp6aW5nID0gdHJ1ZWAuXG5cbk5vdywgZm9yIHRoZSBmdXp6aW5nIHN0cmF0ZWd5Li4uIGxldCdzIHNlZSwgbXkgKmZvY3VzIHN5bWJvbCogaGVyZSBpcyBvYnZpb3VzbHkgYHRjX2N0bF9jaGFpbmAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgcmVsZXZhbnQsIGJ1dCBub3QgbmVjZXNzYXJpbHkgdWJpcXVpdG91cywgZnVuY3Rpb25zIHRvIGNvbnNpZGVyLiBEaWdnaW5nIGRlZXBlciwgaXQgbG9va3MgbGlrZSBgdGNfY3RsX2NoYWluYCBpcyB0aGUgbWFpbiB0aGluZyBiZWluZyBtb2RpZmllZCwgYnV0IGl0IGNhbGxzIGFuZCBpcyByZWxhdGVkIHRvIHNvbWUgb3RoZXIgZnVuY3Rpb25zOiBgdGNfY2hhaW5fdG1wbHRfYWRkYCwgYHRjX2NoYWluX25vdGlmeWAsIGB0Y2ZfY2hhaW5fZmx1c2hgLCBgdGNmX2NoYWluX2NyZWF0ZWAsIGB0Y2ZfY2hhaW5fbG9va3VwYCwgYHRjZl9jaGFpbl9ob2xkYCwgYW5kIGB0Y2ZfY2hhaW5fcHV0YC4gSSBzaG91bGQga2VlcCB0aG9zZSBpbiBtaW5kLlxuXG5CZWZvcmUgSSBnbyBmdXJ0aGVyLCBsZXQncyB2ZXJpZnkgdGhlIGNvbmZpZ3M6IGBORVRfU0NIRURgIGhhcyB0byBiZSBlbmFibGVkLCBhbmQgZWl0aGVyIGBORVRfQ0xTX0FDVGAsIGBORVRfQ0xTX0JBU0lDYCwgb3IgYE5FVF9DTFNfRkxPV0VSYC5cblxuT2theSwgZG91YmxlLWNoZWNraW5nIHRoZSBzeW1ib2wgbmFtZSBhbmQgdGhvc2UgY29uZmlndXJhdGlvbnMgb25lIGxhc3QgdGltZS4uLiBZdXAuIEV2ZXJ5dGhpbmcgY2hlY2tzIG91dC4gVGltZSB0byBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5Mjc5LCJPdXRwdXRUb2tlbnMiOjEyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQyMjo1MjoxNS42NjYxMzE3NDZaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjQ5NzUwNDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9TQ0hFRFwiLFxuICAgIFwiTkVUX0NMU19BQ1RcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0Y19jdGxfY2hhaW5cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgZXJyb3IgaGFuZGxpbmcgYW5kIHJlcGxheSBsb2dpYyBmb3IgbmV0bGluayBjaGFpbiBjb250cm9sIG9wZXJhdGlvbnMgaW4gdGNfY3RsX2NoYWluKCkgKG5ldC9zY2hlZC9jbHNfYXBpLmMpLCByZXN0cmljdGluZyAtRUFHQUlOIHJlcGxheXMgc3RyaWN0bHkgdG8gUlRNX05FV0NIQUlOIHJlcXVlc3RzLiBUaGlzIHRvdWNoZXMgY29yZSBuZXR3b3JraW5nIHRyYWZmaWMgY29udHJvbCBsb2dpYyByZWFjaGFibGUgdmlhIHJ0bmV0bGluayBmcm9tIHVucHJpdmlsZWdlZCBvciBwcml2aWxlZ2VkIHVzZXIgbmFtZXNwYWNlcyBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX1NDSEVEXCIsXG4gICAgXCJORVRfQ0xTX0FDVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRjX2N0bF9jaGFpblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBlcnJvciBoYW5kbGluZyBhbmQgcmVwbGF5IGxvZ2ljIGZvciBuZXRsaW5rIGNoYWluIGNvbnRyb2wgb3BlcmF0aW9ucyBpbiB0Y19jdGxfY2hhaW4oKSAobmV0L3NjaGVkL2Nsc19hcGkuYyksIHJlc3RyaWN0aW5nIC1FQUdBSU4gcmVwbGF5cyBzdHJpY3RseSB0byBSVE1fTkVXQ0hBSU4gcmVxdWVzdHMuIFRoaXMgdG91Y2hlcyBjb3JlIG5ldHdvcmtpbmcgdHJhZmZpYyBjb250cm9sIGxvZ2ljIHJlYWNoYWJsZSB2aWEgcnRuZXRsaW5rIGZyb20gdW5wcml2aWxlZ2VkIG9yIHByaXZpbGVnZWQgdXNlciBuYW1lc3BhY2VzIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMjI6NTI6MTUuNzkxMTEzNDMzWiIsIlNlcSI6MjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjA2NTM5NDY0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIyOjUyOjE1Ljc5MTY2MzA1NFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjIyMDY0ODM4OTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgcmVwbGF5IGxvZ2ljIGluIGB0Y19jdGxfY2hhaW4oKWAgYnkgZW5zdXJpbmcgdGhhdCBhIHJldHJ5IG9uIGAtRUFHQUlOYCBvbmx5IG9jY3VycyB3aGVuIGBuLVxcdTAwM2VubG1zZ190eXBlID09IFJUTV9ORVdDSEFJTmAuIFRoaXMgY2hhbmdlIG9ubHkgYWZmZWN0cyBjb250cm9sIGZsb3cgYW5kIGVycm9yIGhhbmRsaW5nIGR1cmluZyBuZXRsaW5rIFRDIGNoYWluIG1hbmFnZW1lbnQgdG8gcHJldmVudCBpbmFwcHJvcHJpYXRlIHJlcXVlc3QgcmVwbGF5IGZvciBvdGhlciBuZXRsaW5rIG1lc3NhZ2UgdHlwZXMgKHN1Y2ggYXMgYFJUTV9HRVRDSEFJTmAgb3IgYFJUTV9ERUxDSEFJTmApLiBJdCBkb2VzIG5vdCBhbGxvY2F0ZSBuZXcgbWVtb3J5LCBtb2RpZnkgc3RydWN0IGluaXRpYWxpemF0aW9uLCBhbHRlciBkYXRhIGNvcGllcyB0byB1c2VyIHNwYWNlLCBvciBpbnRyb2R1Y2Ugcmlza3Mgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIFRoZXJlZm9yZSwgc3RhbmRhcmQgS0FTQU4vc2FuaXRpemVycyBhcmUgc3VmZmljaWVudCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZTJhZTkyYTAzMWI2NDMxNmYxMmE1MzdiZmU4OWVlMmNmZDIzNGU4MlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDggMjI6NTE6MzggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvY2xzX2FwaS5jIGIvbmV0L3NjaGVkL2Nsc19hcGkuY1xuaW5kZXggOTk2Njc2NjY2MWQ1MC4uYzQ3ZDJlZTEzNjQxZCAxMDA2NDRcbi0tLSBhL25ldC9zY2hlZC9jbHNfYXBpLmNcbisrKyBiL25ldC9zY2hlZC9jbHNfYXBpLmNcbkBAIC0zMjU0LDcgKzMyNTQsNyBAQCBzdGF0aWMgaW50IHRjX2N0bF9jaGFpbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm4sXG4gXHR0Y2ZfY2hhaW5fcHV0KGNoYWluKTtcbiBlcnJvdXRfYmxvY2s6XG4gXHR0Y2ZfYmxvY2tfcmVsZWFzZShxLCBibG9jaywgdHJ1ZSk7XG4tXHRpZiAoZXJyID09IC1FQUdBSU4pXG4rXHRpZiAoZXJyID09IC1FQUdBSU4gXHUwMDI2XHUwMDI2IG4tXHUwMDNlbmxtc2dfdHlwZSA9PSBSVE1fTkVXQ0hBSU4pXG4gXHRcdC8qIFJlcGxheSB0aGUgcmVxdWVzdC4gKi9cbiBcdFx0Z290byByZXBsYXk7XG4gXHRyZXR1cm4gZXJyO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMjI6NTI6MTUuNzkxNjYzOTE0WiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjg2NjE0Nzg0NDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgc2l0dWF0aW9uOlxuXG4qKkluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgQ29kZSBDaGFuZ2UqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gc3RhcnQgYnkgZXhhbWluaW5nIGBuZXQvc2NoZWQvY2xzX2FwaS5jYC4gVG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlLCBJIG5lZWQgdG8gc2VlIGV4YWN0bHkgd2hlcmUgaXQncyB0b3VjaGluZyB0aGlzIGNyaXRpY2FsIGZpbGUuIEknbGwgbmVlZCB0byByYXBpZGx5IHVuZGVyc3RhbmQgaXRzIGNvbnRleHQgd2l0aGluIHRoZSBleGlzdGluZyBjb2RlLiBNeSBmaXJzdCBtb3ZlIHdpbGwgYmUgdG8gdXNlIGEgdG9vbCBsaWtlIGByZWFkLWZpbGVgIChpZiBhdmFpbGFibGUgaW4gdGhpcyBlbnZpcm9ubWVudCkgb3IsIGlmIG5vdCwgSSdsbCBsZXZlcmFnZSBgZ3JlcHBlcmAgKG9yIHNpbWlsYXIpIHRvIHF1aWNrbHkgcGlucG9pbnQgdGhlIGFmZmVjdGVkIGxpbmVzIGFuZCBzdXJyb3VuZGluZyBjb2RlIGluIGBuZXQvc2NoZWQvY2xzX2FwaS5jYC4gVGhpcyBjb250ZXh0dWFsIHVuZGVyc3RhbmRpbmcgaXMgY3J1Y2lhbCBiZWZvcmUgSSBjYW4gbWFrZSBhbnkgaW5mb3JtZWQganVkZ2VtZW50cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA5NCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMjI6NTI6MjQuNDUzMTUzNzcxWiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0ODM3MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc2NoZWQvY2xzX2FwaS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMyMzAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjMyMzA6XFx0XFx0XFx0YnJlYWs7XFxuMzIzMTpcXHRcXHRjYXNlIFJUTV9ERUxDSEFJTjpcXG4zMjMyOlxcdFxcdFxcdHRmaWx0ZXJfbm90aWZ5X2NoYWluKG5ldCwgc2tiLCBibG9jaywgcSwgcGFyZW50LCBuLFxcbjMyMzM6XFx0XFx0XFx0XFx0XFx0ICAgICBjaGFpbiwgUlRNX0RFTFRGSUxURVIsIGV4dGFjayk7XFxuMzIzNDpcXHRcXHRcXHQvKiBGbHVzaCB0aGUgY2hhaW4gZmlyc3QgYXMgdGhlIHVzZXIgcmVxdWVzdGVkIGNoYWluIHJlbW92YWwuICovXFxuMzIzNTpcXHRcXHRcXHR0Y2ZfY2hhaW5fZmx1c2goY2hhaW4sIHRydWUpO1xcbjMyMzY6XFx0XFx0XFx0LyogSW4gY2FzZSB0aGUgY2hhaW4gd2FzIHN1Y2Nlc3NmdWxseSBkZWxldGVkLCBwdXQgYSByZWZlcmVuY2VcXG4zMjM3OlxcdFxcdFxcdCAqIHRvIHRoZSBjaGFpbiBwcmV2aW91c2x5IHRha2VuIGR1cmluZyBhZGRpdGlvbi5cXG4zMjM4OlxcdFxcdFxcdCAqL1xcbjMyMzk6XFx0XFx0XFx0dGNmX2NoYWluX3B1dF9leHBsaWNpdGx5X2NyZWF0ZWQoY2hhaW4pO1xcbjMyNDA6XFx0XFx0XFx0YnJlYWs7XFxuMzI0MTpcXHRcXHRjYXNlIFJUTV9HRVRDSEFJTjpcXG4zMjQyOlxcdFxcdFxcdGVyciA9IHRjX2NoYWluX25vdGlmeShjaGFpbiwgc2tiLCBuLVxcdTAwM2VubG1zZ19zZXEsXFxuMzI0MzpcXHRcXHRcXHRcXHRcXHQgICAgICBuLVxcdTAwM2VubG1zZ19mbGFncywgbi1cXHUwMDNlbmxtc2dfdHlwZSwgdHJ1ZSwgZXh0YWNrKTtcXG4zMjQ0OlxcdFxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbjMyNDU6XFx0XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiRmFpbGVkIHRvIHNlbmQgY2hhaW4gbm90aWZ5IG1lc3NhZ2VcXFwiKTtcXG4zMjQ2OlxcdFxcdFxcdGJyZWFrO1xcbjMyNDc6XFx0XFx0ZGVmYXVsdDpcXG4zMjQ4OlxcdFxcdFxcdGVyciA9IC1FT1BOT1RTVVBQO1xcbjMyNDk6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiVW5zdXBwb3J0ZWQgbWVzc2FnZSB0eXBlXFxcIik7XFxuMzI1MDpcXHRcXHRcXHRnb3RvIGVycm91dDtcXG4zMjUxOlxcdFxcdH1cXG4zMjUyOlxcdFxcbjMyNTM6XFx0ZXJyb3V0OlxcbjMyNTQ6XFx0XFx0dGNmX2NoYWluX3B1dChjaGFpbik7XFxuMzI1NTpcXHRlcnJvdXRfYmxvY2s6XFxuMzI1NjpcXHRcXHR0Y2ZfYmxvY2tfcmVsZWFzZShxLCBibG9jaywgdHJ1ZSk7XFxuMzI1NzpcXHRcXHRpZiAoZXJyID09IC1FQUdBSU4gXFx1MDAyNlxcdTAwMjYgbi1cXHUwMDNlbmxtc2dfdHlwZSA9PSBSVE1fTkVXQ0hBSU4pXFxuMzI1ODpcXHRcXHRcXHQvKiBSZXBsYXkgdGhlIHJlcXVlc3QuICovXFxuMzI1OTpcXHRcXHRcXHRnb3RvIHJlcGxheTtcXG4zMjYwOlxcdFxcdHJldHVybiBlcnI7XFxuMzI2MTpcXHRcXG4zMjYyOlxcdGVycm91dF9ibG9ja19sb2NrZWQ6XFxuMzI2MzpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmJsb2NrLVxcdTAwM2Vsb2NrKTtcXG4zMjY0OlxcdFxcdGdvdG8gZXJyb3V0X2Jsb2NrO1xcbjMyNjU6XFx0fVxcbjMyNjY6XFx0XFxuMzI2NzpcXHQvKiBjYWxsZWQgd2l0aCBSVE5MICovXFxuMzI2ODpcXHRzdGF0aWMgaW50IHRjX2R1bXBfY2hhaW4oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbjMyNjk6XFx0e1xcbjMyNzA6XFx0XFx0c3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2tiLVxcdTAwM2Vzayk7XFxuMzI3MTpcXHRcXHRzdHJ1Y3QgbmxhdHRyICp0Y2FbVENBX01BWCArIDFdO1xcbjMyNzI6XFx0XFx0c3RydWN0IFFkaXNjICpxID0gTlVMTDtcXG4zMjczOlxcdFxcdHN0cnVjdCB0Y2ZfYmxvY2sgKmJsb2NrO1xcbjMyNzQ6XFx0XFx0c3RydWN0IHRjbXNnICp0Y20gPSBubG1zZ19kYXRhKGNiLVxcdTAwM2VubGgpO1xcbjMyNzU6XFx0XFx0c3RydWN0IHRjZl9jaGFpbiAqY2hhaW47XFxuMzI3NjpcXHRcXHRsb25nIGluZGV4X3N0YXJ0O1xcbjMyNzc6XFx0XFx0bG9uZyBpbmRleDtcXG4zMjc4OlxcdFxcdGludCBlcnI7XFxuMzI3OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMjI6NTI6MjQuNDUzNTA1NDUyWiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyNzIwOTMwNjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBgdGNfY3RsX2NoYWluYCBhbmQgUmVwbGF5IExhYmVsaW5nKipcblxuUmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGUgZ3V0cyBvZiBgdGNfY3RsX2NoYWluYC4gTXkgaW5pdGlhbCBmb2N1cyBpcyBwaW5wb2ludGluZyB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGUgcmVwbGF5IGxhYmVsIG1lY2hhbmlzbSBhbmQgc2NlbmFyaW9zIHdoZXJlIGBlcnIgPSAtRUFHQUlOYCBwb3BzIHVwLiBJIG5lZWQgdG8gdHJhY2UgdGhlIGNvZGUgcGF0aCBiYWNrIHRvIHdoZXJlIGEgcmV0cnkgaXMgdHJpZ2dlcmVkLCBzcGVjaWZpY2FsbHkgaW4gcmVsYXRpb24gdG8gaG93IHRoZSByZXBsYXkgbGFiZWwgaXMgaGFuZGxlZC4gSSBzdXNwZWN0IHRoZXJlJ3MgYSBkZWxpY2F0ZSBkYW5jZSBoYXBwZW5pbmcgdGhlcmUsIGFuZCBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGVyZSdzIGEgcmFjZSBjb25kaXRpb24gb3Igc29tZSBzdWJ0bGUgaW50ZXJhY3Rpb24gbGVhZGluZyB0byB1bmV4cGVjdGVkIC1FQUdBSU4gZXJyb3JzLiBXZSBuZWVkIHRvIHNlZSBpZiBpdCdzIGEgdHJhbnNpZW50IGlzc3VlLCBvciB3aGV0aGVyIHRoZXJlIGlzIGEgY29yZSBwcm9ibGVtIHJlbGF0ZWQgdG8gc2VxdWVuY2luZyBvciBsb2NraW5nIHdpdGhpbiB0aGUgcmVwbGF5IGxvZ2ljLiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgcG90ZW50aWFsIGZvciBkb3VibGUtZnJlZXMgb3IgaW5jb3JyZWN0IHN0YXRlIG1hbmFnZW1lbnQgYXJvdW5kIHRoZSBsYWJlbHMgYXMgd2VsbCwgZXNwZWNpYWxseSBhcyB0aGV5IHJlbGF0ZSB0byBjb25jdXJyZW50IGFjY2VzcywgaWYgYXBwbGljYWJsZS4gVGltZSB0byBkaWcgaW4gYW5kIGZvbGxvdyB0aGF0IGVycm9yIGNvZGUhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxMTQsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIyOjUyOjI2LjcyNTYwMjYxWiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxNDYxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc2NoZWQvY2xzX2FwaS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMxNzAsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjMxNzA6XFx0XFx0XFx0Z290byBlcnJvdXRfYmxvY2s7XFxuMzE3MTpcXHRcXHR9XFxuMzE3MjpcXHRcXG4zMTczOlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNmJsb2NrLVxcdTAwM2Vsb2NrKTtcXG4zMTc0OlxcdFxcdGNoYWluID0gdGNmX2NoYWluX2xvb2t1cChibG9jaywgY2hhaW5faW5kZXgpO1xcbjMxNzU6XFx0XFx0aWYgKG4tXFx1MDAzZW5sbXNnX3R5cGUgPT0gUlRNX05FV0NIQUlOKSB7XFxuMzE3NjpcXHRcXHRcXHRpZiAoY2hhaW4pIHtcXG4zMTc3OlxcdFxcdFxcdFxcdGlmICh0Y2ZfY2hhaW5faGVsZF9ieV9hY3RzX29ubHkoY2hhaW4pKSB7XFxuMzE3ODpcXHRcXHRcXHRcXHRcXHQvKiBUaGUgY2hhaW4gZXhpc3RzIG9ubHkgYmVjYXVzZSB0aGVyZSBpc1xcbjMxNzk6XFx0XFx0XFx0XFx0XFx0ICogc29tZSBhY3Rpb24gcmVmZXJlbmNpbmcgaXQuXFxuMzE4MDpcXHRcXHRcXHRcXHRcXHQgKi9cXG4zMTgxOlxcdFxcdFxcdFxcdFxcdHRjZl9jaGFpbl9ob2xkKGNoYWluKTtcXG4zMTgyOlxcdFxcdFxcdFxcdH0gZWxzZSB7XFxuMzE4MzpcXHRcXHRcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJGaWx0ZXIgY2hhaW4gYWxyZWFkeSBleGlzdHNcXFwiKTtcXG4zMTg0OlxcdFxcdFxcdFxcdFxcdGVyciA9IC1FRVhJU1Q7XFxuMzE4NTpcXHRcXHRcXHRcXHRcXHRnb3RvIGVycm91dF9ibG9ja19sb2NrZWQ7XFxuMzE4NjpcXHRcXHRcXHRcXHR9XFxuMzE4NzpcXHRcXHRcXHR9IGVsc2Uge1xcbjMxODg6XFx0XFx0XFx0XFx0aWYgKCEobi1cXHUwMDNlbmxtc2dfZmxhZ3MgXFx1MDAyNiBOTE1fRl9DUkVBVEUpKSB7XFxuMzE4OTpcXHRcXHRcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJOZWVkIGJvdGggUlRNX05FV0NIQUlOIGFuZCBOTE1fRl9DUkVBVEUgdG8gY3JlYXRlIGEgbmV3IGNoYWluXFxcIik7XFxuMzE5MDpcXHRcXHRcXHRcXHRcXHRlcnIgPSAtRU5PRU5UO1xcbjMxOTE6XFx0XFx0XFx0XFx0XFx0Z290byBlcnJvdXRfYmxvY2tfbG9ja2VkO1xcbjMxOTI6XFx0XFx0XFx0XFx0fVxcbjMxOTM6XFx0XFx0XFx0XFx0Y2hhaW4gPSB0Y2ZfY2hhaW5fY3JlYXRlKGJsb2NrLCBjaGFpbl9pbmRleCk7XFxuMzE5NDpcXHRcXHRcXHRcXHRpZiAoIWNoYWluKSB7XFxuMzE5NTpcXHRcXHRcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJGYWlsZWQgdG8gY3JlYXRlIGZpbHRlciBjaGFpblxcXCIpO1xcbjMxOTY6XFx0XFx0XFx0XFx0XFx0ZXJyID0gLUVOT01FTTtcXG4zMTk3OlxcdFxcdFxcdFxcdFxcdGdvdG8gZXJyb3V0X2Jsb2NrX2xvY2tlZDtcXG4zMTk4OlxcdFxcdFxcdFxcdH1cXG4zMTk5OlxcdFxcdFxcdH1cXG4zMjAwOlxcdFxcdH0gZWxzZSB7XFxuMzIwMTpcXHRcXHRcXHRpZiAoIWNoYWluIHx8IHRjZl9jaGFpbl9oZWxkX2J5X2FjdHNfb25seShjaGFpbikpIHtcXG4zMjAyOlxcdFxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcIkNhbm5vdCBmaW5kIHNwZWNpZmllZCBmaWx0ZXIgY2hhaW5cXFwiKTtcXG4zMjAzOlxcdFxcdFxcdFxcdGVyciA9IC1FSU5WQUw7XFxuMzIwNDpcXHRcXHRcXHRcXHRnb3RvIGVycm91dF9ibG9ja19sb2NrZWQ7XFxuMzIwNTpcXHRcXHRcXHR9XFxuMzIwNjpcXHRcXHRcXHR0Y2ZfY2hhaW5faG9sZChjaGFpbik7XFxuMzIwNzpcXHRcXHR9XFxuMzIwODpcXHRcXG4zMjA5OlxcdFxcdGlmIChuLVxcdTAwM2VubG1zZ190eXBlID09IFJUTV9ORVdDSEFJTikge1xcbjMyMTA6XFx0XFx0XFx0LyogTW9kaWZ5aW5nIGNoYWluIHJlcXVpcmVzIGhvbGRpbmcgcGFyZW50IGJsb2NrIGxvY2suIEluIGNhc2VcXG4zMjExOlxcdFxcdFxcdCAqIHRoZSBjaGFpbiB3YXMgc3VjY2Vzc2Z1bGx5IGFkZGVkLCB0YWtlIGEgcmVmZXJlbmNlIHRvIHRoZVxcbjMyMTI6XFx0XFx0XFx0ICogY2hhaW4uIFRoaXMgZW5zdXJlcyB0aGF0IGFuIGVtcHR5IGNoYWluIGRvZXMgbm90IGRpc2FwcGVhciBhdFxcbjMyMTM6XFx0XFx0XFx0ICogdGhlIGVuZCBvZiB0aGlzIGZ1bmN0aW9uLlxcbjMyMTQ6XFx0XFx0XFx0ICovXFxuMzIxNTpcXHRcXHRcXHR0Y2ZfY2hhaW5faG9sZChjaGFpbik7XFxuMzIxNjpcXHRcXHRcXHRjaGFpbi1cXHUwMDNlZXhwbGljaXRseV9jcmVhdGVkID0gdHJ1ZTtcXG4zMjE3OlxcdFxcdH1cXG4zMjE4OlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2YmxvY2stXFx1MDAzZWxvY2spO1xcbjMyMTk6XFx0XFxuMzIyMDpcXHRcXHRzd2l0Y2ggKG4tXFx1MDAzZW5sbXNnX3R5cGUpIHtcXG4zMjIxOlxcdFxcdGNhc2UgUlRNX05FV0NIQUlOOlxcbjMyMjI6XFx0XFx0XFx0ZXJyID0gdGNfY2hhaW5fdG1wbHRfYWRkKGNoYWluLCBuZXQsIHRjYSwgZXh0YWNrKTtcXG4zMjIzOlxcdFxcdFxcdGlmIChlcnIpIHtcXG4zMjI0OlxcdFxcdFxcdFxcdHRjZl9jaGFpbl9wdXRfZXhwbGljaXRseV9jcmVhdGVkKGNoYWluKTtcXG4zMjI1OlxcdFxcdFxcdFxcdGdvdG8gZXJyb3V0O1xcbjMyMjY6XFx0XFx0XFx0fVxcbjMyMjc6XFx0XFxuMzIyODpcXHRcXHRcXHR0Y19jaGFpbl9ub3RpZnkoY2hhaW4sIE5VTEwsIDAsIE5MTV9GX0NSRUFURSB8IE5MTV9GX0VYQ0wsXFxuMzIyOTpcXHRcXHRcXHRcXHRcXHRSVE1fTkVXQ0hBSU4sIGZhbHNlLCBleHRhY2spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQyMjo1MjoyNi43MjYwMjA5ODFaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTkxNDk3MTAwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgQ29kZWJhc2UqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDogSSdtIGRpdmluZyBpbnRvIHRoZSBgdGNfY3RsX2NoYWluYCBmdW5jdGlvbi4gSXQncyB0aGUgc3RhcnRpbmcgcG9pbnQuIEkgbmVlZCB0byBnZXQgYSBoaWdoLWxldmVsIHZpZXcgb2YgaG93IHRoaXMgdGhpbmcgaXMgc3RydWN0dXJlZC4gSSdtIHByb2JhYmx5IGxvb2tpbmcgYXQgdGhlIGZ1bmN0aW9uIHNpZ25hdHVyZSwgdGhlIGluaXRpYWwgdmFyaWFibGUgZGVjbGFyYXRpb25zLCBhbmQgdGhlIGZpcnN0IGZldyBsaW5lcyBvZiBsb2dpYy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBpbnB1dHMgaXQncyB0YWtpbmcgYW5kIHdoYXQgdGhlIGltbWVkaWF0ZSBnb2FscyBvZiB0aGUgZnVuY3Rpb24gYXJlLiBJcyBpdCBwYXJzaW5nIGFuIGlucHV0IHN0cmluZz8gSW5pdGlhbGl6aW5nIHNvbWUgZGF0YSBzdHJ1Y3R1cmVzPyBTZXR0aW5nIHVwIHNvbWUgYmFzaWMgY29uZmlndXJhdGlvbj8gVW5kZXJzdGFuZGluZyB0aGUgdmVyeSBiZWdpbm5pbmcgaXMga2V5IHRvIG1ha2luZyBzZW5zZSBvZiB0aGUgZW50aXJlIGZsb3cuIFRoaXMgaXMgd2hlcmUgSSBiZWdpbiB0byBmb3JtdWxhdGUgbXkgbWVudGFsIG1vZGVsLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MzM3LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQyMjo1MjoyOC42NDA5OTYwOTZaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM2NTQxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zY2hlZC9jbHNfYXBpLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzEyNSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzEyNTpcXHR7XFxuMzEyNjpcXHRcXHQvKiBJZiB0ZW1wbGF0ZSBvcHMgYXJlIHNldCwgbm8gd29yayB0byBkbyBmb3IgdXMuICovXFxuMzEyNzpcXHRcXHRpZiAoIXRtcGx0X29wcylcXG4zMTI4OlxcdFxcdFxcdHJldHVybjtcXG4zMTI5OlxcdFxcbjMxMzA6XFx0XFx0dG1wbHRfb3BzLVxcdTAwM2V0bXBsdF9kZXN0cm95KHRtcGx0X3ByaXYpO1xcbjMxMzE6XFx0XFx0bW9kdWxlX3B1dCh0bXBsdF9vcHMtXFx1MDAzZW93bmVyKTtcXG4zMTMyOlxcdH1cXG4zMTMzOlxcdFxcbjMxMzQ6XFx0LyogQWRkL2RlbGV0ZS9nZXQgYSBjaGFpbiAqL1xcbjMxMzU6XFx0XFxuMzEzNjpcXHRzdGF0aWMgaW50IHRjX2N0bF9jaGFpbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm4sXFxuMzEzNzpcXHRcXHRcXHRcXHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuMzEzODpcXHR7XFxuMzEzOTpcXHRcXHRzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChza2ItXFx1MDAzZXNrKTtcXG4zMTQwOlxcdFxcdHN0cnVjdCBubGF0dHIgKnRjYVtUQ0FfTUFYICsgMV07XFxuMzE0MTpcXHRcXHRzdHJ1Y3QgdGNtc2cgKnQ7XFxuMzE0MjpcXHRcXHR1MzIgcGFyZW50O1xcbjMxNDM6XFx0XFx0dTMyIGNoYWluX2luZGV4O1xcbjMxNDQ6XFx0XFx0c3RydWN0IFFkaXNjICpxO1xcbjMxNDU6XFx0XFx0c3RydWN0IHRjZl9jaGFpbiAqY2hhaW47XFxuMzE0NjpcXHRcXHRzdHJ1Y3QgdGNmX2Jsb2NrICpibG9jaztcXG4zMTQ3OlxcdFxcdHVuc2lnbmVkIGxvbmcgY2w7XFxuMzE0ODpcXHRcXHRpbnQgZXJyO1xcbjMxNDk6XFx0XFxuMzE1MDpcXHRyZXBsYXk6XFxuMzE1MTpcXHRcXHRxID0gTlVMTDtcXG4zMTUyOlxcdFxcdGVyciA9IG5sbXNnX3BhcnNlX2RlcHJlY2F0ZWQobiwgc2l6ZW9mKCp0KSwgdGNhLCBUQ0FfTUFYLFxcbjMxNTM6XFx0XFx0XFx0XFx0XFx0ICAgICBydG1fdGNhX3BvbGljeSwgZXh0YWNrKTtcXG4zMTU0OlxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbjMxNTU6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4zMTU2OlxcdFxcbjMxNTc6XFx0XFx0dCA9IG5sbXNnX2RhdGEobik7XFxuMzE1ODpcXHRcXHRwYXJlbnQgPSB0LVxcdTAwM2V0Y21fcGFyZW50O1xcbjMxNTk6XFx0XFx0Y2wgPSAwO1xcbjMxNjA6XFx0XFxuMzE2MTpcXHRcXHRibG9jayA9IHRjZl9ibG9ja19maW5kKG5ldCwgXFx1MDAyNnEsIFxcdTAwMjZwYXJlbnQsIFxcdTAwMjZjbCxcXG4zMTYyOlxcdFxcdFxcdFxcdCAgICAgICB0LVxcdTAwM2V0Y21faWZpbmRleCwgdC1cXHUwMDNldGNtX2Jsb2NrX2luZGV4LCBleHRhY2spO1xcbjMxNjM6XFx0XFx0aWYgKElTX0VSUihibG9jaykpXFxuMzE2NDpcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUihibG9jayk7XFxuMzE2NTpcXHRcXG4zMTY2OlxcdFxcdGNoYWluX2luZGV4ID0gbmxhX2dldF91MzJfZGVmYXVsdCh0Y2FbVENBX0NIQUlOXSwgMCk7XFxuMzE2NzpcXHRcXHRpZiAoY2hhaW5faW5kZXggXFx1MDAzZSBUQ19BQ1RfRVhUX1ZBTF9NQVNLKSB7XFxuMzE2ODpcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJTcGVjaWZpZWQgY2hhaW4gaW5kZXggZXhjZWVkcyB1cHBlciBsaW1pdFxcXCIpO1xcbjMxNjk6XFx0XFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4zMTcwOlxcdFxcdFxcdGdvdG8gZXJyb3V0X2Jsb2NrO1xcbjMxNzE6XFx0XFx0fVxcbjMxNzI6XFx0XFxuMzE3MzpcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZibG9jay1cXHUwMDNlbG9jayk7XFxuMzE3NDpcXHRcXHRjaGFpbiA9IHRjZl9jaGFpbl9sb29rdXAoYmxvY2ssIGNoYWluX2luZGV4KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMjI6NTI6MjguNjQxMjM1NTc2WiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMwMzIzNDAyNDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgLUVBR0FJTmAgUmVwbGF5IGluIGB0Y19jdGxfY2hhaW5gKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJbiBgdGNfY3RsX2NoYWluYCwgSSBzZWUgdGhpcyBqdW1wIGJhY2sgdG8gYHJlcGxheWAgd2hlbiBgZXJyID09IC1FQUdBSU5gLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMsIHdoZXJlIGRvZXMgYGVycmAgKmJlY29tZSogYC1FQUdBSU5gIHdpdGhpbiB0aGlzIGZ1bmN0aW9uPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcG90ZW50aWFsIGVkZ2UgY2FzZXMgaGVyZS4gSXQgbG9va3MgbGlrZSBpdCBjYW4gb3JpZ2luYXRlIGZyb20gYHRjX2NoYWluX3RtcGx0X2FkZGAg4oCTIHdoaWNoIGlzIG9ubHkgY2FsbGVkIGlmIGl0J3MgYSBgUlRNX05FV0NIQUlOYCBtZXNzYWdlIOKAkyBvciBmcm9tIGB0Y19jaGFpbl9ub3RpZnlgLCB3aGljaCBpcyBpbnZvbHZlZCBpbiBgUlRNX0dFVENIQUlOYCByZXF1ZXN0cy5cblxuVGhlIGNydXggb2YgdGhlIGlzc3VlIGlzIHRoaXM6IGlmIGB0Y19jaGFpbl9ub3RpZnlgIHdlcmUgdG8gc29tZWhvdyByZXR1cm4gYC1FQUdBSU5gLCBwb3RlbnRpYWxseSBkdXJpbmcgYSBuZXRsaW5rIG5vdGlmaWNhdGlvbiwgdGhlbiB0aGF0IFwicmVwbGF5XCIgbGFiZWwgd291bGQgYmUgaW5jb3JyZWN0bHkgdXNlZCwgYW5kIG1pZ2h0IGNhdXNlIGFuIGluZmluaXRlIGxvb3Agb3IsIGF0IHRoZSB2ZXJ5IGxlYXN0LCB1bnByZWRpY3RhYmxlIGJlaGF2aW9yLiBUaGUgYHJlcGxheWAgbG9naWMsIGFzIEkgdW5kZXJzdGFuZCBpdCwgc2hvdWxkICpvbmx5KiBiZSBpbnZva2VkIGZvciBmYWlsdXJlcyBkdXJpbmcgYFJUTV9ORVdDSEFJTmAgcmVxdWVzdHMsIG5vdCBgUlRNX0dFVENIQUlOYC5cblxuVGhlcmVmb3JlLCB0aGUgb2J2aW91cyBmaXggd291bGQgYmU6XG5gYGBkaWZmXG4tXHRpZiAoZXJyID09IC1FQUdBSU4pXG4rXHRpZiAoZXJyID09IC1FQUdBSU4gXHUwMDI2XHUwMDI2IG4tXHUwMDNlbmxtc2dfdHlwZSA9PSBSVE1fTkVXQ0hBSU4pXG4gXHRcdC8qIFJlcGxheSB0aGUgcmVxdWVzdC4gKi9cbiBcdFx0Z290byByZXBsYXk7XG4gXHRyZXR1cm4gZXJyO1xuYGBgXG5cbk5vdywgSSdtIGdvaW5nIHRvIHF1aWNrbHkgZ2xhbmNlIHRocm91Z2ggYHRjX2N0bF90ZmlsdGVyYCBhbmQgYSBmZXcgb3RoZXIgZnVuY3Rpb25zIGluIGBjbHNfYXBpLmNgIHRvIHNlZSBob3cgYHJlcGxheWAgaXMgZ2VuZXJhbGx5IGhhbmRsZWQuIFRoaXMgbWlnaHQgcHJvdmlkZSBmdXJ0aGVyIGluc2lnaHRzIGludG8gdGhlIGludGVuZGVkIHVzZSBhbmQgcG9zc2libGUgaW1wbGljYXRpb25zIG9mIHRoaXMgZml4IGluIHRoZSBicm9hZGVyIGNvbnRleHQgb2YgdGhlIHRyYWZmaWMgY29udHJvbCBmcmFtZXdvcmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUzMjQsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQyMjo1MjozMS42NzM1Nzg4MzhaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk2NjY3MDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJlcGxheTpcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjaGVkL2Nsc19hcGkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvY2xzX2FwaS5jPTIyNTc9c3RhdGljIGludCB0Y19uZXdfdGZpbHRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm4sXFxuLS1cXG5uZXQvc2NoZWQvY2xzX2FwaS5jLTIyODAtXFxubmV0L3NjaGVkL2Nsc19hcGkuYzoyMjgxOnJlcGxheTpcXG5uZXQvc2NoZWQvY2xzX2FwaS5jLTIyODItXFx0dHBfc3RhdGUgPSBUUF9OT1RfQ1JFQVRFRDtcXG4tLVxcbm5ldC9zY2hlZC9jbHNfYXBpLmM9MzEzNj1zdGF0aWMgaW50IHRjX2N0bF9jaGFpbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm4sXFxuLS1cXG5uZXQvc2NoZWQvY2xzX2FwaS5jLTMxNDktXFxubmV0L3NjaGVkL2Nsc19hcGkuYzozMTUwOnJlcGxheTpcXG5uZXQvc2NoZWQvY2xzX2FwaS5jLTMxNTEtXFx0cSA9IE5VTEw7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIyOjUyOjMxLjc3MDI1MjMxOFoiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2MDg2MjE5OTE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoaXMgTmV0bGluayBUQyBDaGFpbiBNYW5hZ2VtZW50IFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoIGlzIGEgc3RyYWlnaHRmb3J3YXJkIGNvbnRyb2wtZmxvdyBmaXggd2l0aGluIHRoZSBuZXRsaW5rIHRyYWZmaWMgY29udHJvbCBjaGFpbiBtYW5hZ2VtZW50LiBTcGVjaWZpY2FsbHksIGl0J3MgYWRkaW5nIGFuIGFkZGl0aW9uYWwgY29uZGl0aW9uIHRvIGFuIGV4aXN0aW5nIGAtRUFHQUlOYCByZXBsYXkgY2hlY2sgd2l0aGluIGB0Y19jdGxfY2hhaW5gLiBUaGUgYWRkZWQgYFx1MDAyNlx1MDAyNiBuLVx1MDAzZW5sbXNnX3R5cGUgPT0gUlRNX05FV0NIQUlOYCBzZWVtcyB0byBiZSBhIHNhZmVndWFyZCBhZ2FpbnN0IHVuaW50ZW5kZWQgcmV0cmllcyBvciByZXBsYXkgbG9vcHMuIEl0J3Mgb25seSBzdXBwb3NlZCB0byByZXBsYXkgaWYgdGhlIG1lc3NhZ2UgdHlwZSBpcyBgUlRNX05FV0NIQUlOYCwgYW5kIG5vdCBmb3Igb3RoZXIgbWVzc2FnZSB0eXBlcyBsaWtlIGBSVE1fR0VUQ0hBSU5gIG9yIGBSVE1fREVMQ0hBSU5gLlxuXG5Ob3csIHRoZSBpbXBvcnRhbnQgcGFydDogZG9lcyB0aGlzIGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0aWVzPyBJIG5lZWQgdG8gbWV0aWN1bG91c2x5IGdvIHRocm91Z2ggdGhlIHVzdWFsIHN1c3BlY3RzLiBGaXJzdCwgYXJlIHRoZXJlIGFueSBrZXJuZWwgc3RydWN0dXJlcyBiZWluZyBzZW50IHRvIHVzZXJzcGFjZSB0aGF0IG1pZ2h0IGhhdmUgYmVlbiBjaGFuZ2VkPyBObywgaXQgZG9lc27igJl0IHNlZW0gc28uIFRoZXJlIGFyZSBubyBtb2RpZmljYXRpb25zIHRvIGhvdyB0aGUgZGF0YSBpcyBzZXJpYWxpemVkIG9yIGhvdyBhdHRyaWJ1dGVzIGFyZSBnZW5lcmF0ZWQuIFNlY29uZCwgYXJlIHRoZXJlIGFueSBuZXcgY29uZGl0aW9uYWwgYnJhbmNoZXMgb3IgbG9naWMgdGhhdCBoaW5nZXMgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/IEkgY2FuIHNlZSB0aGF0IGBlcnJgIGlzIHByb3Blcmx5IGluaXRpYWxpemVkLCBhbmQgYG5gIGlzIGEgcG9pbnRlciB0byBgbmxtc2dfaGRyYCwgc28gdGhlIHByb2dyYW0gY2hlY2tzIGBuLVx1MDAzZW5sbXNnX3R5cGVgLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMgaGVyZS4gTmV4dCwgSSdsbCBjaGVjayBmb3IgYW55IG5ldyBhbGxvY2F0aW9ucyBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBvciBtb2RpZmljYXRpb25zIHRvIGV4aXN0aW5nIG9uZXMgYW5kIGFueSBpc3N1ZXMgdGhhdCBjb3VsZCBiZSBpbnRyb2R1Y2VkLiBObywgbm90aGluZyBjaGFuZ2VkIHRoZXJlIGVpdGhlci4gRmluYWxseSwgYXJlIHRoZXJlIGFueSBib3VuZHMgY2hlY2tzLCBsZW5ndGggY2hlY2tzLCBvciBsb2dpYyB0aGF0IGNvdWxkIGxlYWQgdG8gYWNjZXNzaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBUaGUgYW5zd2VyIGlzIG5vLCB0aGlzIGlzbid0IHRoZSBjYXNlIGhlcmUuXG5cblNvLCBhbSBJIHJpZ2h0PyBJdCBzZWVtcyBzYWZlLlxuXG5Ob3csIGxldCdzIGNvbnNpZGVyIEtNU0FOIChLZXJuZWwgTWVtb3J5IFNhbml0aXplcikuIElzIHRoZXJlIGEgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBsZWFrcyBoZXJlPyBUaGUgYW5zd2VyIGlzIGNsZWFybHkgbm8uIEtNU0FOIGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCBmb3IgdGhvc2Uga2luZHMgb2YgaXNzdWVzLCBhbmQgdGhpcyBwYXRjaCBzaW1wbHkgcmVzdHJpY3RzIGEgcmV0cnkgbG9vcC4gSXQncyBhIHN0YW5kYXJkIGVycm9yIGhhbmRsaW5nIGNoYW5nZS4gQW55IHByb2JsZW1zIHdpdGggaW5maW5pdGUgbG9vcHMsIHJlZmVyZW5jZSBjb3VudGluZywgb3IgbG9jayBoYW5kbGluZywgaWYgdGhleSB3ZXJlIHByZXNlbnQsIHdvdWxkIGJlIGZvdW5kIGJ5IHN0YW5kYXJkIHRvb2xzIGFuZCB0aW1lb3V0cywgYW5kIG5vdCBieSBLTVNBTi5cblxuVGhlcmVmb3JlLCBgTmVlZHNLTVNBTmAgaXMgZGVmaW5pdGl2ZWx5IGBmYWxzZWAuXG5cbk5vdywgSSdsbCBwcmVwYXJlIHRoZSBmaW5hbCByZXNwb25zZSB1c2luZyBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MjI5LCJPdXRwdXRUb2tlbnMiOjE2MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQyMjo1MjozNy44NTY0NzQ4NzJaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTI0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSByZXBsYXkgbG9naWMgaW4gYHRjX2N0bF9jaGFpbigpYCBieSBlbnN1cmluZyB0aGF0IGEgcmV0cnkgb24gYC1FQUdBSU5gIG9ubHkgb2NjdXJzIHdoZW4gYG4tXFx1MDAzZW5sbXNnX3R5cGUgPT0gUlRNX05FV0NIQUlOYC4gVGhpcyBjaGFuZ2Ugb25seSBhZmZlY3RzIGNvbnRyb2wgZmxvdyBhbmQgZXJyb3IgaGFuZGxpbmcgZHVyaW5nIG5ldGxpbmsgVEMgY2hhaW4gbWFuYWdlbWVudCB0byBwcmV2ZW50IGluYXBwcm9wcmlhdGUgcmVxdWVzdCByZXBsYXkgZm9yIG90aGVyIG5ldGxpbmsgbWVzc2FnZSB0eXBlcyAoc3VjaCBhcyBgUlRNX0dFVENIQUlOYCBvciBgUlRNX0RFTENIQUlOYCkuIEl0IGRvZXMgbm90IGFsbG9jYXRlIG5ldyBtZW1vcnksIG1vZGlmeSBzdHJ1Y3QgaW5pdGlhbGl6YXRpb24sIGFsdGVyIGRhdGEgY29waWVzIHRvIHVzZXIgc3BhY2UsIG9yIGludHJvZHVjZSByaXNrcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gVGhlcmVmb3JlLCBzdGFuZGFyZCBLQVNBTi9zYW5pdGl6ZXJzIGFyZSBzdWZmaWNpZW50IGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgcmVwbGF5IGxvZ2ljIGluIGB0Y19jdGxfY2hhaW4oKWAgYnkgZW5zdXJpbmcgdGhhdCBhIHJldHJ5IG9uIGAtRUFHQUlOYCBvbmx5IG9jY3VycyB3aGVuIGBuLVxcdTAwM2VubG1zZ190eXBlID09IFJUTV9ORVdDSEFJTmAuIFRoaXMgY2hhbmdlIG9ubHkgYWZmZWN0cyBjb250cm9sIGZsb3cgYW5kIGVycm9yIGhhbmRsaW5nIGR1cmluZyBuZXRsaW5rIFRDIGNoYWluIG1hbmFnZW1lbnQgdG8gcHJldmVudCBpbmFwcHJvcHJpYXRlIHJlcXVlc3QgcmVwbGF5IGZvciBvdGhlciBuZXRsaW5rIG1lc3NhZ2UgdHlwZXMgKHN1Y2ggYXMgYFJUTV9HRVRDSEFJTmAgb3IgYFJUTV9ERUxDSEFJTmApLiBJdCBkb2VzIG5vdCBhbGxvY2F0ZSBuZXcgbWVtb3J5LCBtb2RpZnkgc3RydWN0IGluaXRpYWxpemF0aW9uLCBhbHRlciBkYXRhIGNvcGllcyB0byB1c2VyIHNwYWNlLCBvciBpbnRyb2R1Y2Ugcmlza3Mgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIFRoZXJlZm9yZSwgc3RhbmRhcmQgS0FTQU4vc2FuaXRpemVycyBhcmUgc3VmZmljaWVudCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow8z5q9[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-08 22:31:29 +0000 UTC FinishedAt: 2026-09-08 22:52:38 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "e0554c6276da957b6e72849520c70a97404cd1ae", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_SCHED", "NET_CLS_ACT" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "e0554c6276da957b6e72849520c70a97404cd1ae", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_SCHED", "NET_CLS_ACT" ], "series_id": "38c1906e-77e2-483c-9cda-042c2054c13c" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "tc_ctl_chain" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDIyOjUxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9TQ0hFRCYjMzQ7LAogICAgJiMzNDtORVRfQ0xTX0FDVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RjX2N0bF9jaGFpbiYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSByZXBsYXkgbG9naWMgaW4gYHRjX2N0bF9jaGFpbigpYCBieSBlbnN1cmluZyB0aGF0IGEgcmV0cnkgb24gYC1FQUdBSU5gIG9ubHkgb2NjdXJzIHdoZW4gYG4tXHUwMDNlbmxtc2dfdHlwZSA9PSBSVE1fTkVXQ0hBSU5gLiBUaGlzIGNoYW5nZSBvbmx5IGFmZmVjdHMgY29udHJvbCBmbG93IGFuZCBlcnJvciBoYW5kbGluZyBkdXJpbmcgbmV0bGluayBUQyBjaGFpbiBtYW5hZ2VtZW50IHRvIHByZXZlbnQgaW5hcHByb3ByaWF0ZSByZXF1ZXN0IHJlcGxheSBmb3Igb3RoZXIgbmV0bGluayBtZXNzYWdlIHR5cGVzIChzdWNoIGFzIGBSVE1fR0VUQ0hBSU5gIG9yIGBSVE1fREVMQ0hBSU5gKS4gSXQgZG9lcyBub3QgYWxsb2NhdGUgbmV3IG1lbW9yeSwgbW9kaWZ5IHN0cnVjdCBpbml0aWFsaXphdGlvbiwgYWx0ZXIgZGF0YSBjb3BpZXMgdG8gdXNlciBzcGFjZSwgb3IgaW50cm9kdWNlIHJpc2tzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBUaGVyZWZvcmUsIHN0YW5kYXJkIEtBU0FOL3Nhbml0aXplcnMgYXJlIHN1ZmZpY2llbnQgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgZXJyb3IgaGFuZGxpbmcgYW5kIHJlcGxheSBsb2dpYyBmb3IgbmV0bGluayBjaGFpbiBjb250cm9sIG9wZXJhdGlvbnMgaW4gdGNfY3RsX2NoYWluKCkgKG5ldC9zY2hlZC9jbHNfYXBpLmMpLCByZXN0cmljdGluZyAtRUFHQUlOIHJlcGxheXMgc3RyaWN0bHkgdG8gUlRNX05FV0NIQUlOIHJlcXVlc3RzLiBUaGlzIHRvdWNoZXMgY29yZSBuZXR3b3JraW5nIHRyYWZmaWMgY29udHJvbCBsb2dpYyByZWFjaGFibGUgdmlhIHJ0bmV0bGluayBmcm9tIHVucHJpdmlsZWdlZCBvciBwcml2aWxlZ2VkIHVzZXIgbmFtZXNwYWNlcyBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMjI6NTE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBlMmFlOTJhMDMxYjY0MzE2ZjEyYTUzN2JmZTg5ZWUyY2ZkMjM0ZTgyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgOCAyMjo1MTozOCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvY2xzX2FwaS5jIGIvbmV0L3NjaGVkL2Nsc19hcGkuY1xuaW5kZXggOTk2Njc2NjY2MWQ1MC4uYzQ3ZDJlZTEzNjQxZCAxMDA2NDRcbi0tLSBhL25ldC9zY2hlZC9jbHNfYXBpLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY2hlZC9jbHNfYXBpLmNcbkBAIC0zMjU0LDcgJiM0MzszMjU0LDcgQEAgc3RhdGljIGludCB0Y19jdGxfY2hhaW4oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpuLFxuIFx0dGNmX2NoYWluX3B1dChjaGFpbik7XG4gZXJyb3V0X2Jsb2NrOlxuIFx0dGNmX2Jsb2NrX3JlbGVhc2UocSwgYmxvY2ssIHRydWUpO1xuLVx0aWYgKGVyciA9PSAtRUFHQUlOKVxuJiM0MztcdGlmIChlcnIgPT0gLUVBR0FJTiBcdTAwMjZcdTAwMjYgbi1cdTAwM2VubG1zZ190eXBlID09IFJUTV9ORVdDSEFJTilcbiBcdFx0LyogUmVwbGF5IHRoZSByZXF1ZXN0LiAqL1xuIFx0XHRnb3RvIHJlcGxheTtcbiBcdHJldHVybiBlcnI7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMjI6NTE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX1NDSEVEJiMzNDssCiAgICAmIzM0O05FVF9DTFNfQUNUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGNfY3RsX2NoYWluJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBlcnJvciBoYW5kbGluZyBhbmQgcmVwbGF5IGxvZ2ljIGZvciBuZXRsaW5rIGNoYWluIGNvbnRyb2wgb3BlcmF0aW9ucyBpbiB0Y19jdGxfY2hhaW4oKSAobmV0L3NjaGVkL2Nsc19hcGkuYyksIHJlc3RyaWN0aW5nIC1FQUdBSU4gcmVwbGF5cyBzdHJpY3RseSB0byBSVE1fTkVXQ0hBSU4gcmVxdWVzdHMuIFRoaXMgdG91Y2hlcyBjb3JlIG5ldHdvcmtpbmcgdHJhZmZpYyBjb250cm9sIGxvZ2ljIHJlYWNoYWJsZSB2aWEgcnRuZXRsaW5rIGZyb20gdW5wcml2aWxlZ2VkIG9yIHByaXZpbGVnZWQgdXNlciBuYW1lc3BhY2VzIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGUyYWU5MmEwMzFiNjQzMTZmMTJhNTM3YmZlODllZTJjZmQyMzRlODIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIFNlcCA4IDIyOjUxOjM4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2Nsc19hcGkuYyBiL25ldC9zY2hlZC9jbHNfYXBpLmMKaW5kZXggOTk2Njc2NjY2MWQ1MC4uYzQ3ZDJlZTEzNjQxZCAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL2Nsc19hcGkuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc2NoZWQvY2xzX2FwaS5jCkBAIC0zMjU0LDcgJiM0MzszMjU0LDcgQEAgc3RhdGljIGludCB0Y19jdGxfY2hhaW4oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpuLAogCXRjZl9jaGFpbl9wdXQoY2hhaW4pOwogZXJyb3V0X2Jsb2NrOgogCXRjZl9ibG9ja19yZWxlYXNlKHEsIGJsb2NrLCB0cnVlKTsKLQlpZiAoZXJyID09IC1FQUdBSU4pCiYjNDM7CWlmIChlcnIgPT0gLUVBR0FJTiAmYW1wOyZhbXA7IG4tJmd0O25sbXNnX3R5cGUgPT0gUlRNX05FV0NIQUlOKQogCQkvKiBSZXBsYXkgdGhlIHJlcXVlc3QuICovCiAJCWdvdG8gcmVwbGF5OwogCXJldHVybiBlcnI7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDIyOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4ODIKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA3MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aGlua2luZyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgUGF0Y2g6IFVuZGVyc3RhbmRpbmcgdGhlIGB0Y19jdGxfY2hhaW4oKWAgTW9kaWZpY2F0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgZGlmZi4gRmlyc3QgdGhpbmdzIGZpcnN0LCBsZXQmIzM5O3MgemVybyBpbiBvbiB0aGUga2V5IGFyZWE6IGBuZXQvc2NoZWQvY2xzX2FwaS5jYCwgc3BlY2lmaWNhbGx5IHRoZSBmdW5jdGlvbiBgdGNfY3RsX2NoYWluKClgLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBoZWFydCBvZiB0aGUgY2hhbmdlIGxpZXMuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgZ2V0dGluZyBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCYjMzk7cyBoYXBwZW5pbmcgd2l0aGluIHRoYXQgZnVuY3Rpb24uIEkmIzM5O2xsIHByb2JhYmx5IHJlYWNoIGZvciBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgdG8gcHVsbCB1cCB0aGUgZGVmaW5pdGlvbiBvZiBgdGNfY3RsX2NoYWluKClgIGluIHRoYXQgZmlsZS4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgaW1tZWRpYXRlIGNvbnRleHQuIEZyb20gdGhlcmUsIEkgY2FuIGJlZ2luIG15IGFuYWx5c2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDIyOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NjaGVkL2Nsc19hcGkuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMxNTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzMxNTA6XHRyZXBsYXk6XG4zMTUxOlx0XHRxID0gTlVMTDtcbjMxNTI6XHRcdGVyciA9IG5sbXNnX3BhcnNlX2RlcHJlY2F0ZWQobiwgc2l6ZW9mKCp0KSwgdGNhLCBUQ0FfTUFYLFxuMzE1MzpcdFx0XHRcdFx0ICAgICBydG1fdGNhX3BvbGljeSwgZXh0YWNrKTtcbjMxNTQ6XHRcdGlmIChlcnIgXHUwMDNjIDApXG4zMTU1Olx0XHRcdHJldHVybiBlcnI7XG4zMTU2Olx0XG4zMTU3Olx0XHR0ID0gbmxtc2dfZGF0YShuKTtcbjMxNTg6XHRcdHBhcmVudCA9IHQtXHUwMDNldGNtX3BhcmVudDtcbjMxNTk6XHRcdGNsID0gMDtcbjMxNjA6XHRcbjMxNjE6XHRcdGJsb2NrID0gdGNmX2Jsb2NrX2ZpbmQobmV0LCBcdTAwMjZxLCBcdTAwMjZwYXJlbnQsIFx1MDAyNmNsLFxuMzE2MjpcdFx0XHRcdCAgICAgICB0LVx1MDAzZXRjbV9pZmluZGV4LCB0LVx1MDAzZXRjbV9ibG9ja19pbmRleCwgZXh0YWNrKTtcbjMxNjM6XHRcdGlmIChJU19FUlIoYmxvY2spKVxuMzE2NDpcdFx0XHRyZXR1cm4gUFRSX0VSUihibG9jayk7XG4zMTY1Olx0XG4zMTY2Olx0XHRjaGFpbl9pbmRleCA9IG5sYV9nZXRfdTMyX2RlZmF1bHQodGNhW1RDQV9DSEFJTl0sIDApO1xuMzE2NzpcdFx0aWYgKGNoYWluX2luZGV4IFx1MDAzZSBUQ19BQ1RfRVhUX1ZBTF9NQVNLKSB7XG4zMTY4Olx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7U3BlY2lmaWVkIGNoYWluIGluZGV4IGV4Y2VlZHMgdXBwZXIgbGltaXRcJiMzNDspO1xuMzE2OTpcdFx0XHRlcnIgPSAtRUlOVkFMO1xuMzE3MDpcdFx0XHRnb3RvIGVycm91dF9ibG9jaztcbjMxNzE6XHRcdH1cbjMxNzI6XHRcbjMxNzM6XHRcdG11dGV4X2xvY2soXHUwMDI2YmxvY2stXHUwMDNlbG9jayk7XG4zMTc0Olx0XHRjaGFpbiA9IHRjZl9jaGFpbl9sb29rdXAoYmxvY2ssIGNoYWluX2luZGV4KTtcbjMxNzU6XHRcdGlmIChuLVx1MDAzZW5sbXNnX3R5cGUgPT0gUlRNX05FV0NIQUlOKSB7XG4zMTc2Olx0XHRcdGlmIChjaGFpbikge1xuMzE3NzpcdFx0XHRcdGlmICh0Y2ZfY2hhaW5faGVsZF9ieV9hY3RzX29ubHkoY2hhaW4pKSB7XG4zMTc4Olx0XHRcdFx0XHQvKiBUaGUgY2hhaW4gZXhpc3RzIG9ubHkgYmVjYXVzZSB0aGVyZSBpc1xuMzE3OTpcdFx0XHRcdFx0ICogc29tZSBhY3Rpb24gcmVmZXJlbmNpbmcgaXQuXG4zMTgwOlx0XHRcdFx0XHQgKi9cbjMxODE6XHRcdFx0XHRcdHRjZl9jaGFpbl9ob2xkKGNoYWluKTtcbjMxODI6XHRcdFx0XHR9IGVsc2Uge1xuMzE4MzpcdFx0XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtGaWx0ZXIgY2hhaW4gYWxyZWFkeSBleGlzdHNcJiMzNDspO1xuMzE4NDpcdFx0XHRcdFx0ZXJyID0gLUVFWElTVDtcbjMxODU6XHRcdFx0XHRcdGdvdG8gZXJyb3V0X2Jsb2NrX2xvY2tlZDtcbjMxODY6XHRcdFx0XHR9XG4zMTg3Olx0XHRcdH0gZWxzZSB7XG4zMTg4Olx0XHRcdFx0aWYgKCEobi1cdTAwM2VubG1zZ19mbGFncyBcdTAwMjYgTkxNX0ZfQ1JFQVRFKSkge1xuMzE4OTpcdFx0XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtOZWVkIGJvdGggUlRNX05FV0NIQUlOIGFuZCBOTE1fRl9DUkVBVEUgdG8gY3JlYXRlIGEgbmV3IGNoYWluXCYjMzQ7KTtcbjMxOTA6XHRcdFx0XHRcdGVyciA9IC1FTk9FTlQ7XG4zMTkxOlx0XHRcdFx0XHRnb3RvIGVycm91dF9ibG9ja19sb2NrZWQ7XG4zMTkyOlx0XHRcdFx0fVxuMzE5MzpcdFx0XHRcdGNoYWluID0gdGNmX2NoYWluX2NyZWF0ZShibG9jaywgY2hhaW5faW5kZXgpO1xuMzE5NDpcdFx0XHRcdGlmICghY2hhaW4pIHtcbjMxOTU6XHRcdFx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7RmFpbGVkIHRvIGNyZWF0ZSBmaWx0ZXIgY2hhaW5cJiMzNDspO1xuMzE5NjpcdFx0XHRcdFx0ZXJyID0gLUVOT01FTTtcbjMxOTc6XHRcdFx0XHRcdGdvdG8gZXJyb3V0X2Jsb2NrX2xvY2tlZDtcbjMxOTg6XHRcdFx0XHR9XG4zMTk5Olx0XHRcdH1cbjMyMDA6XHRcdH0gZWxzZSB7XG4zMjAxOlx0XHRcdGlmICghY2hhaW4gfHwgdGNmX2NoYWluX2hlbGRfYnlfYWN0c19vbmx5KGNoYWluKSkge1xuMzIwMjpcdFx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7Q2Fubm90IGZpbmQgc3BlY2lmaWVkIGZpbHRlciBjaGFpblwmIzM0Oyk7XG4zMjAzOlx0XHRcdFx0ZXJyID0gLUVJTlZBTDtcbjMyMDQ6XHRcdFx0XHRnb3RvIGVycm91dF9ibG9ja19sb2NrZWQ7XG4zMjA1Olx0XHRcdH1cbjMyMDY6XHRcdFx0dGNmX2NoYWluX2hvbGQoY2hhaW4pO1xuMzIwNzpcdFx0fVxuMzIwODpcdFxuMzIwOTpcdFx0aWYgKG4tXHUwMDNlbmxtc2dfdHlwZSA9PSBSVE1fTkVXQ0hBSU4pIHtcbjMyMTA6XHRcdFx0LyogTW9kaWZ5aW5nIGNoYWluIHJlcXVpcmVzIGhvbGRpbmcgcGFyZW50IGJsb2NrIGxvY2suIEluIGNhc2VcbjMyMTE6XHRcdFx0ICogdGhlIGNoYWluIHdhcyBzdWNjZXNzZnVsbHkgYWRkZWQsIHRha2UgYSByZWZlcmVuY2UgdG8gdGhlXG4zMjEyOlx0XHRcdCAqIGNoYWluLiBUaGlzIGVuc3VyZXMgdGhhdCBhbiBlbXB0eSBjaGFpbiBkb2VzIG5vdCBkaXNhcHBlYXIgYXRcbjMyMTM6XHRcdFx0ICogdGhlIGVuZCBvZiB0aGlzIGZ1bmN0aW9uLlxuMzIxNDpcdFx0XHQgKi9cbjMyMTU6XHRcdFx0dGNmX2NoYWluX2hvbGQoY2hhaW4pO1xuMzIxNjpcdFx0XHRjaGFpbi1cdTAwM2VleHBsaWNpdGx5X2NyZWF0ZWQgPSB0cnVlO1xuMzIxNzpcdFx0fVxuMzIxODpcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmJsb2NrLVx1MDAzZWxvY2spO1xuMzIxOTpcdFxuMzIyMDpcdFx0c3dpdGNoIChuLVx1MDAzZW5sbXNnX3R5cGUpIHtcbjMyMjE6XHRcdGNhc2UgUlRNX05FV0NIQUlOOlxuMzIyMjpcdFx0XHRlcnIgPSB0Y19jaGFpbl90bXBsdF9hZGQoY2hhaW4sIG5ldCwgdGNhLCBleHRhY2spO1xuMzIyMzpcdFx0XHRpZiAoZXJyKSB7XG4zMjI0Olx0XHRcdFx0dGNmX2NoYWluX3B1dF9leHBsaWNpdGx5X2NyZWF0ZWQoY2hhaW4pO1xuMzIyNTpcdFx0XHRcdGdvdG8gZXJyb3V0O1xuMzIyNjpcdFx0XHR9XG4zMjI3Olx0XG4zMjI4Olx0XHRcdHRjX2NoYWluX25vdGlmeShjaGFpbiwgTlVMTCwgMCwgTkxNX0ZfQ1JFQVRFIHwgTkxNX0ZfRVhDTCxcbjMyMjk6XHRcdFx0XHRcdFJUTV9ORVdDSEFJTiwgZmFsc2UsIGV4dGFjayk7XG4zMjMwOlx0XHRcdGJyZWFrO1xuMzIzMTpcdFx0Y2FzZSBSVE1fREVMQ0hBSU46XG4zMjMyOlx0XHRcdHRmaWx0ZXJfbm90aWZ5X2NoYWluKG5ldCwgc2tiLCBibG9jaywgcSwgcGFyZW50LCBuLFxuMzIzMzpcdFx0XHRcdFx0ICAgICBjaGFpbiwgUlRNX0RFTFRGSUxURVIsIGV4dGFjayk7XG4zMjM0Olx0XHRcdC8qIEZsdXNoIHRoZSBjaGFpbiBmaXJzdCBhcyB0aGUgdXNlciByZXF1ZXN0ZWQgY2hhaW4gcmVtb3ZhbC4gKi9cbjMyMzU6XHRcdFx0dGNmX2NoYWluX2ZsdXNoKGNoYWluLCB0cnVlKTtcbjMyMzY6XHRcdFx0LyogSW4gY2FzZSB0aGUgY2hhaW4gd2FzIHN1Y2Nlc3NmdWxseSBkZWxldGVkLCBwdXQgYSByZWZlcmVuY2VcbjMyMzc6XHRcdFx0ICogdG8gdGhlIGNoYWluIHByZXZpb3VzbHkgdGFrZW4gZHVyaW5nIGFkZGl0aW9uLlxuMzIzODpcdFx0XHQgKi9cbjMyMzk6XHRcdFx0dGNmX2NoYWluX3B1dF9leHBsaWNpdGx5X2NyZWF0ZWQoY2hhaW4pO1xuMzI0MDpcdFx0XHRicmVhaztcbjMyNDE6XHRcdGNhc2UgUlRNX0dFVENIQUlOOlxuMzI0MjpcdFx0XHRlcnIgPSB0Y19jaGFpbl9ub3RpZnkoY2hhaW4sIHNrYiwgbi1cdTAwM2VubG1zZ19zZXEsXG4zMjQzOlx0XHRcdFx0XHQgICAgICBuLVx1MDAzZW5sbXNnX2ZsYWdzLCBuLVx1MDAzZW5sbXNnX3R5cGUsIHRydWUsIGV4dGFjayk7XG4zMjQ0Olx0XHRcdGlmIChlcnIgXHUwMDNjIDApXG4zMjQ1Olx0XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtGYWlsZWQgdG8gc2VuZCBjaGFpbiBub3RpZnkgbWVzc2FnZVwmIzM0Oyk7XG4zMjQ2Olx0XHRcdGJyZWFrO1xuMzI0NzpcdFx0ZGVmYXVsdDpcbjMyNDg6XHRcdFx0ZXJyID0gLUVPUE5PVFNVUFA7XG4zMjQ5Olx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7VW5zdXBwb3J0ZWQgbWVzc2FnZSB0eXBlXCYjMzQ7KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAyMjo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NzY3CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBwcmVzZW50ZWQgYXMgaWYgaXQgd2VyZSBteSBvd24gaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipEaXZpbmcgRGVlcGVyIGludG8gYHRjX2N0bF9jaGFpbmAqKgoKQWxyaWdodCwgSSYjMzk7bSBhdCBhIHBvaW50IHdoZXJlIEkmIzM5O20gZXhhbWluaW5nIGEgc3BlY2lmaWMgY29udHJvbCBzdHJ1Y3R1cmUsIGxpa2VseSB3aXRoaW4gYSB0cmFmZmljIGNvbnRyb2wgc3lzdGVtIG9yIGEgc2ltaWxhciBuZXR3b3JrIG1hbmFnZW1lbnQgY29udGV4dC4gVGhlIHBocmFzaW5nICYjMzQ7TGV0JiMzOTtzIHNlZSB0aGUgcmVzdCBvZiBgdGNfY3RsX2NoYWluYCYjMzQ7IHN1Z2dlc3RzIEkmIzM5O3ZlIGFscmVhZHkgZW5nYWdlZCB3aXRoICpwYXJ0KiBvZiB0aGlzIHN0cnVjdHVyZSBhbmQgbm93IEkmIzM5O20gcmVhZHkgdG8gZGVsdmUgaW50byB0aGUgcmVtYWluaW5nIGVsZW1lbnRzLiBJJiMzOTttIHByb2JhYmx5IGxvb2tpbmcgYXQgYSBjaGFpbiBvZiBjb250cm9sIGVsZW1lbnRzLiBJJiMzOTttIGFscmVhZHkgYXdhcmUgdGhhdCBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgdGhlIG90aGVyIGNvbnRyb2xzIGluIHRoaXMgY2hhaW4sIHNvIEkgd2FudCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgcmVzdCBvZiB0aGVtIGJlaGF2ZS4KClRoaXMgY291bGQgbWVhbiBJJiMzOTttIHRyYWNpbmcgdGhlIGV4ZWN1dGlvbiBmbG93LCBpZGVudGlmeWluZyBkZXBlbmRlbmNpZXMgYmV0d2VlbiBkaWZmZXJlbnQgY29udHJvbCBwb2ludHMsIG9yIHBlcmhhcHMgdHJ5aW5nIHRvIGRlYnVnIGFuIHVuZXhwZWN0ZWQgYmVoYXZpb3IuIE15IGdvYWwgaXMgdG8gYWNoaWV2ZSBhbiBob2xpc3RpYyB1bmRlcnN0YW5kaW5nIG9mIHRoaXMgY2hhaW47IEkgbmVlZCB0byBrbm93IHRoZSBpbmRpdmlkdWFsIGNvbXBvbmVudHMgYW5kIGhvdyB0aGV5IGludGVyYWN0IHRvIGFjaGlldmUgc29tZSBkZXNpcmVkIG91dGNvbWUuIEkgbmVlZCBhIGJyb2FkZXIgdmlldyB0byB1bmRlcnN0YW5kIGhvdyB0aGUgd2hvbGUgc3lzdGVtIHdvcmtzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDIyOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NjaGVkL2Nsc19hcGkuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMyNTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzI1MDpcdFx0XHRnb3RvIGVycm91dDtcbjMyNTE6XHRcdH1cbjMyNTI6XHRcbjMyNTM6XHRlcnJvdXQ6XG4zMjU0Olx0XHR0Y2ZfY2hhaW5fcHV0KGNoYWluKTtcbjMyNTU6XHRlcnJvdXRfYmxvY2s6XG4zMjU2Olx0XHR0Y2ZfYmxvY2tfcmVsZWFzZShxLCBibG9jaywgdHJ1ZSk7XG4zMjU3Olx0XHRpZiAoZXJyID09IC1FQUdBSU4gXHUwMDI2XHUwMDI2IG4tXHUwMDNlbmxtc2dfdHlwZSA9PSBSVE1fTkVXQ0hBSU4pXG4zMjU4Olx0XHRcdC8qIFJlcGxheSB0aGUgcmVxdWVzdC4gKi9cbjMyNTk6XHRcdFx0Z290byByZXBsYXk7XG4zMjYwOlx0XHRyZXR1cm4gZXJyO1xuMzI2MTpcdFxuMzI2MjpcdGVycm91dF9ibG9ja19sb2NrZWQ6XG4zMjYzOlx0XHRtdXRleF91bmxvY2soXHUwMDI2YmxvY2stXHUwMDNlbG9jayk7XG4zMjY0Olx0XHRnb3RvIGVycm91dF9ibG9jaztcbjMyNjU6XHR9XG4zMjY2Olx0XG4zMjY3Olx0LyogY2FsbGVkIHdpdGggUlROTCAqL1xuMzI2ODpcdHN0YXRpYyBpbnQgdGNfZHVtcF9jaGFpbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4zMjY5Olx0e1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDIyOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUzMjcKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGB0Y19jdGxfY2hhaW5gIEZ1bmN0aW9uKioKCk9rYXksIHNvIGB0Y19jdGxfY2hhaW5gIGxvb2tzIGxpa2UgaXQmIzM5O3MgdGhlIGNvcmUgb2Ygc29tZXRoaW5nIHJlbGF0ZWQgdG8gdHJhZmZpYyBjb250cm9sIGNoYWlucywgYW5kIGl0JiMzOTtzIGNvbW11bmljYXRpbmcgdGhyb3VnaCBydG5ldGxpbmsuIFNwZWNpZmljYWxseSwgSSBzZWUgaXQgcmVzcG9uZHMgdG8gYFJUTV9ORVdDSEFJTmAsIGBSVE1fREVMQ0hBSU5gLCBhbmQgYFJUTV9HRVRDSEFJTmAgbWVzc2FnZXMuIFRoYXQmIzM5O3MgZ29vZDsgaXQgY29uZmlybXMgbXkgaW5pdGlhbCBodW5jaCBhYm91dCBob3cgaXQmIzM5O3MgaW50ZXJhY3Rpbmcgd2l0aCB0aGUga2VybmVsJiMzOTtzIG5ldHdvcmtpbmcgc3RhY2suIE5vdywgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHBpbnBvaW50IGV4YWN0bHkgKndoZXJlKiB0aGlzIGB0Y19jdGxfY2hhaW5gIGZ1bmN0aW9uIGlzIHJlZ2lzdGVyZWQuIFRoYXQgaW5mb3JtYXRpb24gaXMgY3J1Y2lhbCB0byB1bmRlcnN0YW5kaW5nIGl0cyByb2xlLCBjb250ZXh0IHdpdGhpbiB0aGUgbGFyZ2VyIHRjIGZyYW1ld29yaywgYW5kIGFueSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLiBMZXQmIzM5O3Mgc2VlIGlmIEkgY2FuIHRyYWNlIHRoYXQgcmVnaXN0cmF0aW9uLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMjI6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGNfY3RsX2NoYWluJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjaGVkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9jbHNfYXBpLmM9MzEyMz1zdGF0aWMgdm9pZCB0Y19jaGFpbl90bXBsdF9kZWwoY29uc3Qgc3RydWN0IHRjZl9wcm90b19vcHMgKnRtcGx0X29wcyxcbi0tXG5uZXQvc2NoZWQvY2xzX2FwaS5jLTMxMzUtXG5uZXQvc2NoZWQvY2xzX2FwaS5jOjMxMzY6c3RhdGljIGludCB0Y19jdGxfY2hhaW4oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpuLFxubmV0L3NjaGVkL2Nsc19hcGkuYy0zMTM3LVx0XHRcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5uZXQvc2NoZWQvY2xzX2FwaS5jPTQxMjU9c3RhdGljIGNvbnN0IHN0cnVjdCBydG5sX21zZ19oYW5kbGVyIHRjX2ZpbHRlcl9ydG5sX21zZ19oYW5kbGVyc1tdIF9faW5pdGNvbnN0ID0ge1xuLS1cbm5ldC9zY2hlZC9jbHNfYXBpLmMtNDEzMS1cdCAuZHVtcGl0ID0gdGNfZHVtcF90ZmlsdGVyLCAuZmxhZ3MgPSBSVE5MX0ZMQUdfRE9JVF9VTkxPQ0tFRH0sXG5uZXQvc2NoZWQvY2xzX2FwaS5jOjQxMzI6XHR7Lm1zZ3R5cGUgPSBSVE1fTkVXQ0hBSU4sIC5kb2l0ID0gdGNfY3RsX2NoYWlufSxcbm5ldC9zY2hlZC9jbHNfYXBpLmM6NDEzMzpcdHsubXNndHlwZSA9IFJUTV9ERUxDSEFJTiwgLmRvaXQgPSB0Y19jdGxfY2hhaW59LFxubmV0L3NjaGVkL2Nsc19hcGkuYzo0MTM0Olx0ey5tc2d0eXBlID0gUlRNX0dFVENIQUlOLCAuZG9pdCA9IHRjX2N0bF9jaGFpbixcbm5ldC9zY2hlZC9jbHNfYXBpLmMtNDEzNS1cdCAuZHVtcGl0ID0gdGNfZHVtcF9jaGFpbn0sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMjI6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTkzNAoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDEwNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgYHRjX2N0bF9jaGFpbmAgSGFuZGxlcioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYHRjX2N0bF9jaGFpbmAsIGFuZCBpdCYjMzk7cyBwcmV0dHkgY2xlYXIgdGhpcyBpcyB0aGUgd29ya2hvcnNlIGZvciBtYW5hZ2luZyB0cmFmZmljIGNvbnRyb2wgY2hhaW5zLiBTcGVjaWZpY2FsbHksIGl0IGhhbmRsZXMgdGhlIFJUTV9ORVdDSEFJTiwgUlRNX0RFTENIQUlOLCBhbmQgUlRNX0dFVENIQUlOIG5ldGxpbmsgbWVzc2FnZXMuIEdpdmVuIHRoYXQgaXQmIzM5O3MgbmVzdGxlZCBpbiBgbmV0L3NjaGVkL2Nsc19hcGkuY2AsIHRoaXMgaXMgY29yZSBuZXR3b3JraW5nIGFuZCBkaXJlY3RseSByZWxhdGVzIHRvIHRoZSB0cmFmZmljIGNvbnRyb2wgbWVjaGFuaXNtcy4gIEl0JiMzOTtzIGEgY3JpdGljYWwgY29tcG9uZW50IGZvciBpbnRlcmFjdGluZyB3aXRoIHRoZSB1c2Vyc3BhY2UgdGhyb3VnaCBuZXRsaW5rIChzcGVjaWZpY2FsbHkgcnRuZXRsaW5rKS4KCk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcy4gVGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHNlZSB3aGljaCBLY29uZmlnIG9wdGlvbnMgZ292ZXJuIHRoZSBpbmNsdXNpb24gb2YgYG5ldC9zY2hlZC9jbHNfYXBpLmNgLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgTWFrZWZpbGUgb3IgS2NvbmZpZyBmaWxlcyB3aXRoaW4gdGhlIGBuZXQvc2NoZWQvYCBkaXJlY3RvcnkuIFRoYXQgd2lsbCBpbGx1bWluYXRlIHRoZSBuZWNlc3Nhcnkga2VybmVsIGNvbmZpZ3VyYXRpb25zIHRvIGVuYWJsZSB0aGlzIGZ1bmN0aW9uYWxpdHkuIEkgaGF2ZSB0byBmaWd1cmUgb3V0IHRoZSBidWlsZC10aW1lIHJlcXVpcmVtZW50cyB0byBjb25maXJtIHRoYXQgdGhlIGNoYWluIGZlYXR1cmVzIGFyZSBhcHByb3ByaWF0ZWx5IGVuYWJsZWQgaW4gdGhlIGRlcGxveWVkIHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMjI6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y2xzX2FwaSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY2hlZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvTWFrZWZpbGU9OT1vYmotJChDT05GSUdfTkVUX1NDSEVEKVx0XHQmIzQzOz0gc2NoX2FwaS5vIHNjaF9ibGFja2hvbGUub1xubmV0L3NjaGVkL01ha2VmaWxlOjEwOm9iai0kKENPTkZJR19ORVRfQ0xTKVx0XHQmIzQzOz0gY2xzX2FwaS5vXG5uZXQvc2NoZWQvTWFrZWZpbGUtMTEtb2JqLSQoQ09ORklHX05FVF9DTFNfQUNUKVx0JiM0Mzs9IGFjdF9hcGkub1xuLS1cbm5ldC9zY2hlZC9jbHNfYXBpLmMtMi0vKlxubmV0L3NjaGVkL2Nsc19hcGkuYzozOiAqIG5ldC9zY2hlZC9jbHNfYXBpLmNcdFBhY2tldCBjbGFzc2lmaWVyIEFQSS5cbm5ldC9zY2hlZC9jbHNfYXBpLmMtNC0gKlxuLS1cbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM9MjM1OD1zdGF0aWMgaW50IGZsX2NoYW5nZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICppbl9za2IsXG4tLVxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0yNDMwLVx0XHRcdC8qIEZpbHRlciB3aXRoIHNwZWNpZmllZCBoYW5kbGUgd2FzIGNvbmN1cnJlbnRseVxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzoyNDMxOlx0XHRcdCAqIGluc2VydGVkIGFmdGVyIGluaXRpYWwgY2hlY2sgaW4gY2xzX2FwaS4gVGhpcyBpcyBub3Rcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMjQzMi1cdFx0XHQgKiBuZWNlc3NhcmlseSBhbiBlcnJvciBpZiBOTE1fRl9FWENMIGlzIG5vdCBzZXQgaW5cbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6MjQzMzpcdFx0XHQgKiBtZXNzYWdlIGZsYWdzLiBSZXR1cm5pbmcgRUFHQUlOIHdpbGwgY2F1c2UgY2xzX2FwaSB0b1xubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0yNDM0LVx0XHRcdCAqIHRyeSB0byB1cGRhdGUgY29uY3VycmVudGx5IGluc2VydGVkIHJ1bGUuXG4tLVxubmV0L3NjaGVkL3NjaF9hcGkuYy01Ny0gICAtIFwmIzM0O3NjaGVkdWxlcnNcJiMzNDssIHdoaWNoIHNwbGl0IGFsbCB0aGUgcGFja2V0cyB0byBcJiMzNDt0cmFmZmljIGNsYXNzZXNcJiMzNDssXG5uZXQvc2NoZWQvc2NoX2FwaS5jOjU4OiAgICAgdXNpbmcgXCYjMzQ7cGFja2V0IGNsYXNzaWZpZXJzXCYjMzQ7IChsb29rIGF0IGNsc19hcGkuYylcbm5ldC9zY2hlZC9zY2hfYXBpLmMtNTktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDIyOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY3MDAKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHdlbnQ6CgoqKkV4YW1pbmluZyB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gZm9yIE5ldHdvcmsgVHJhZmZpYyBDb250cm9sKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaW5kIHNvbWV0aGluZyByZWxhdGVkIHRvIG5ldHdvcmsgdHJhZmZpYyBjb250cm9sLCBzcGVjaWZpY2FsbHkgdGhlIGBORVRfQ0xTYCBvcHRpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBkaXZlIGludG8gdGhlIGtlcm5lbCYjMzk7cyBjb25maWd1cmF0aW9uIGZpbGVzLiBHaXZlbiBteSBleHBlcmllbmNlLCB0aGUgcGxhY2UgdG8gc3RhcnQgaXMgbGlrZWx5IGBuZXQvc2NoZWQvS2NvbmZpZ2AuIFRoYXQmIzM5O3Mgd2hlcmUgSSB3b3VsZCBleHBlY3QgdG8gZmluZCBvcHRpb25zIHJlbGF0ZWQgdG8gdGhlIHNjaGVkdWxpbmcgYW5kIGNsYXNzaWZpY2F0aW9uIG9mIG5ldHdvcmsgcGFja2V0cy4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGluIHRoZXJlLiBJJiMzOTttIGFzc3VtaW5nIHRoYXQgc2luY2UgSSBoYXZlIGJlZW4gd29ya2luZyB3aXRoIGtlcm5lbCBjb25maWd1cmF0aW9ucyB0aGF0IEkgd2lsbCBiZSBhYmxlIHRvIGludGVycHJldCBpdCBhbmQgZmluZCB0aGUgcmVsZXZhbnQgc2VjdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMjI6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5FVF9DTFNcXGImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWc9NDc5PWNvbW1lbnQgXCYjMzQ7Q2xhc3NpZmljYXRpb25cJiMzNDtcbm5ldC9zY2hlZC9LY29uZmlnLTQ4MC1cbm5ldC9zY2hlZC9LY29uZmlnOjQ4MTpjb25maWcgTkVUX0NMU1xubmV0L3NjaGVkL0tjb25maWctNDgyLVx0Ym9vbFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAyMjo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2OTU0CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBORVRfQ0xTIERlcGVuZGVuY3kqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpcyB0byBkZXRlcm1pbmUgdGhlIGNhdXNhbCByZWxhdGlvbnNoaXAgYmV0d2VlbiBgTkVUX0NMU2AgYW5kIGBORVRfU0NIRURgLiBJcyBgTkVUX0NMU2Agc2ltcGx5IGEgZGVwZW5kZW50IG9wdGlvbiwgb3IgZG9lcyBpdCByZXF1aXJlIHNvbWUgb3RoZXIgdW5kZXJseWluZyBtZWNoYW5pc20gdG8gYmUgZW5hYmxlZD8gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHNlbGVjdC9lbmFibGUgcmVsYXRpb25zaGlwLCBpZiBhbnksIGFuZCBpZiBgTkVUX0NMU2AgaGFzIGEgaGFyZCBkZXBlbmRlbmN5IG9uIGBORVRfU0NIRURgLiBJcyBgTkVUX0NMU2AgYSBmZWF0dXJlIHRoYXQgaXMgc2VsZWN0aXZlbHkgb3IgY29uZGl0aW9uYWxseSBlbmFibGVkIG9yIGRvZXMgYE5FVF9DTFNgIGRlcGVuZCBvbiBgTkVUX1NDSEVEYD8KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMjI6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ3NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDc1Olx0XHRkZWZhdWx0IFwmIzM0O3NmcVwmIzM0OyBpZiBERUZBVUxUX1NGUVxuIDQ3NjpcdFx0ZGVmYXVsdCBcJiMzNDtwZmlmb19mYXN0XCYjMzQ7XG4gNDc3Olx0ZW5kaWZcbiA0Nzg6XHRcbiA0Nzk6XHRjb21tZW50IFwmIzM0O0NsYXNzaWZpY2F0aW9uXCYjMzQ7XG4gNDgwOlx0XG4gNDgxOlx0Y29uZmlnIE5FVF9DTFNcbiA0ODI6XHRcdGJvb2xcbiA0ODM6XHRcbiA0ODQ6XHRjb25maWcgTkVUX0NMU19CQVNJQ1xuIDQ4NTpcdFx0dHJpc3RhdGUgXCYjMzQ7RWxlbWVudGFyeSBjbGFzc2lmaWNhdGlvbiAoQkFTSUMpXCYjMzQ7XG4gNDg2Olx0XHRzZWxlY3QgTkVUX0NMU1xuIDQ4NzpcdFx0aGVscFxuIDQ4ODpcdFx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGJlIGFibGUgdG8gY2xhc3NpZnkgcGFja2V0cyB1c2luZ1xuIDQ4OTpcdFx0ICBvbmx5IGV4dGVuZGVkIG1hdGNoZXMgYW5kIGFjdGlvbnMuXG4gNDkwOlx0XG4gNDkxOlx0XHQgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcbiA0OTI6XHRcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGNsc19iYXNpYy5cbiA0OTM6XHRcbiA0OTQ6XHRjb25maWcgTkVUX0NMU19ST1VURTRcbiA0OTU6XHRcdHRyaXN0YXRlIFwmIzM0O1JvdXRpbmcgZGVjaXNpb24gKFJPVVRFKVwmIzM0O1xuIDQ5NjpcdFx0ZGVwZW5kcyBvbiBJTkVUXG4gNDk3Olx0XHRzZWxlY3QgSVBfUk9VVEVfQ0xBU1NJRFxuIDQ5ODpcdFx0c2VsZWN0IE5FVF9DTFNcbiA0OTk6XHRcdGhlbHBcbiA1MDA6XHRcdCAgSWYgeW91IHNheSBZIGhlcmUsIHlvdSB3aWxsIGJlIGFibGUgdG8gY2xhc3NpZnkgcGFja2V0c1xuIDUwMTpcdFx0ICBhY2NvcmRpbmcgdG8gdGhlIHJvdXRlIHRhYmxlIGVudHJ5IHRoZXkgbWF0Y2hlZC5cbiA1MDI6XHRcbiA1MDM6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxuIDUwNDpcdFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgY2xzX3JvdXRlLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAyMjo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NTUxCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkludmVzdGlnYXRpbmcgTmV0d29yayBTY2hlZHVsZXIgQ29uZmlndXJhdGlvbioqCgpSaWdodCwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGUga2VybmVsIGNvbmZpZyBoZXJlLiBGaXJzdCwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCYjMzk7cyByZWxhdGVkIHRvIHRoZSBuZXR3b3JrIHNjaGVkdWxlciAoYE5FVF9TQ0hFRGApLiBPa2F5LCBhY2NvcmRpbmcgdG8gbXkgbm90ZXMsIHRoYXQgbGlrZWx5IGxpdmVzIGluIGBuZXQvc2NoZWQvS2NvbmZpZ2AuIFNvLCB0aGUgbG9naWNhbCBuZXh0IHN0ZXAgaXMgdG8gYWN0dWFsbHkgZ28gYW5kIGNoZWNrIHdoYXQgYE5FVF9TQ0hFRGAgaXMgKmRlZmluZWQqIGFzIGluIHRoZSBgbmV0L3NjaGVkL0tjb25maWdgIGZpbGUuIFRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7bGwgZ2V0IHRoZSByZWFsIGxvdy1kb3duIG9uIHRoZSBkZXBlbmRlbmNpZXMsIG9wdGlvbnMsIGFuZCB3aGF0JiMzOTtzIGFjdHVhbGx5IHVuZGVyIHRoaXMgY29uZmlnIHVtYnJlbGxhLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgYWN0dWFsbHkgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDIyOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjXG4gICAzOlx0IyBUcmFmZmljIGNvbnRyb2wgY29uZmlndXJhdGlvbi5cbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0bWVudWNvbmZpZyBORVRfU0NIRURcbiAgIDc6XHRcdGJvb2wgXCYjMzQ7UW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nXCYjMzQ7XG4gICA4Olx0XHRzZWxlY3QgTkVUX1NDSF9GSUZPXG4gICA5Olx0XHRoZWxwXG4gIDEwOlx0XHQgIFdoZW4gdGhlIGtlcm5lbCBoYXMgc2V2ZXJhbCBwYWNrZXRzIHRvIHNlbmQgb3V0IG92ZXIgYSBuZXR3b3JrXG4gIDExOlx0XHQgIGRldmljZSwgaXQgaGFzIHRvIGRlY2lkZSB3aGljaCBvbmVzIHRvIHNlbmQgZmlyc3QsIHdoaWNoIG9uZXMgdG9cbiAgMTI6XHRcdCAgZGVsYXksIGFuZCB3aGljaCBvbmVzIHRvIGRyb3AuIFRoaXMgaXMgdGhlIGpvYiBvZiB0aGUgcXVldWVpbmdcbiAgMTM6XHRcdCAgZGlzY2lwbGluZXMsIHNldmVyYWwgZGlmZmVyZW50IGFsZ29yaXRobXMgZm9yIGhvdyB0byBkbyB0aGlzXG4gIDE0Olx0XHQgIFwmIzM0O2ZhaXJseVwmIzM0OyBoYXZlIGJlZW4gcHJvcG9zZWQuXG4gIDE1Olx0XG4gIDE2Olx0XHQgIElmIHlvdSBzYXkgTiBoZXJlLCB5b3Ugd2lsbCBnZXQgdGhlIHN0YW5kYXJkIHBhY2tldCBzY2hlZHVsZXIsIHdoaWNoXG4gIDE3Olx0XHQgIGlzIGEgRklGTyAoZmlyc3QgY29tZSwgZmlyc3Qgc2VydmVkKS4gSWYgeW91IHNheSBZIGhlcmUsIHlvdSB3aWxsIGJlXG4gIDE4Olx0XHQgIGFibGUgdG8gY2hvb3NlIGZyb20gYW1vbmcgc2V2ZXJhbCBhbHRlcm5hdGl2ZSBhbGdvcml0aG1zIHdoaWNoIGNhblxuICAxOTpcdFx0ICB0aGVuIGJlIGF0dGFjaGVkIHRvIGRpZmZlcmVudCBuZXR3b3JrIGRldmljZXMuIFRoaXMgaXMgdXNlZnVsIGZvclxuICAyMDpcdFx0ICBleGFtcGxlIGlmIHNvbWUgb2YgeW91ciBuZXR3b3JrIGRldmljZXMgYXJlIHJlYWwgdGltZSBkZXZpY2VzIHRoYXRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMjI6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODA4MgoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDkzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZToKCioqVGhpbmtpbmcgVGhyb3VnaCBOZXR3b3JrIENsYXNzaWZpZXIgU2VsZWN0aW9uKioKClJpZ2h0LCBzbyB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBuZXR3b3JrIGNsYXNzaWZpZXJzIGhlcmUsIGFuZCBJIHNlZSB3ZSYjMzk7dmUgZ290IGBORVRfQ0xTYCBhcyB0aGUgb3ZlcmFyY2hpbmcgY2F0ZWdvcnkuIFRoaXMgZ2V0cyBwaWNrZWQgYnkgdmFyaW91cyBzcGVjaWZpYyBjbGFzc2lmaWVycywgdGhpbmdzIGxpa2UgYE5FVF9DTFNfQkFTSUNgLCBgTkVUX0NMU19GTE9XRVJgLCBhbmQgYE5FVF9DTFNfTUFUQ0hBTExgLiBPaCwgYW5kIGxldCYjMzk7cyBub3QgZm9yZ2V0IGBORVRfQ0xTX0FDVGAsIHdoaWNoIHN1Z2dlc3RzIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYWN0aW9ucyBhbG9uZ3NpZGUgdGhlIGNsYXNzaWZpY2F0aW9uLgoKTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgcmVsYXRlLiBJdCBsb29rcyBsaWtlIGBORVRfU0NIRURgIChzY2hlZHVsZXIpIGFuZCBgTkVUX0NMU19BQ1RgIGFyZSBrZXkgcGxheWVycyBoZXJlLCBtYXliZSBpbnRlcmFjdGluZyB3aXRoIGBORVRfQ0xTYC4gSSBzaG91bGQgZGlnIGludG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIHRvIHNlZSBob3cgdGhlc2UgdGhpbmdzIGFyZSB3aXJlZCB0b2dldGhlci4KClNvLCBsZXQmIzM5O3Mgc2VlLCB0aGUgbmV4dCBzdGVwIGlzIHRvIHF1aWNrbHkgY2hlY2sgYG5ldC9zY2hlZC9LY29uZmlnYC4gSSBuZWVkIHRvIGNvbmZpcm0gaWYgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWZlcmVuY2UgYHNlbGVjdCBORVRfQ0xTYCBhbmQgaG93IHRoZXkgaW5mbHVlbmNlIHRoZSBpbmNsdXNpb24gb3IgZXhjbHVzaW9uIG9mIGBORVRfQ0xTYCBpdHNlbGYuIEkmIzM5O20gYWZ0ZXIgdGhlIGRlcGVuZGVuY2llcyBhbmQgYW55IG9yZGVyaW5nIG9mIHRoZXNlIG9wdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDIyOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlbGVjdCBORVRfQ0xTXFxiJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjaGVkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9LY29uZmlnPTQ4ND1jb25maWcgTkVUX0NMU19CQVNJQ1xubmV0L3NjaGVkL0tjb25maWctNDg1LVx0dHJpc3RhdGUgXCYjMzQ7RWxlbWVudGFyeSBjbGFzc2lmaWNhdGlvbiAoQkFTSUMpXCYjMzQ7XG5uZXQvc2NoZWQvS2NvbmZpZzo0ODY6XHRzZWxlY3QgTkVUX0NMU1xubmV0L3NjaGVkL0tjb25maWctNDg3LVx0aGVscFxuLS1cbm5ldC9zY2hlZC9LY29uZmlnPTQ5ND1jb25maWcgTkVUX0NMU19ST1VURTRcbi0tXG5uZXQvc2NoZWQvS2NvbmZpZy00OTctXHRzZWxlY3QgSVBfUk9VVEVfQ0xBU1NJRFxubmV0L3NjaGVkL0tjb25maWc6NDk4Olx0c2VsZWN0IE5FVF9DTFNcbm5ldC9zY2hlZC9LY29uZmlnLTQ5OS1cdGhlbHBcbi0tXG5uZXQvc2NoZWQvS2NvbmZpZz01MDY9Y29uZmlnIE5FVF9DTFNfRldcbm5ldC9zY2hlZC9LY29uZmlnLTUwNy1cdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBtYXJrIChGVylcJiMzNDtcbm5ldC9zY2hlZC9LY29uZmlnOjUwODpcdHNlbGVjdCBORVRfQ0xTXG5uZXQvc2NoZWQvS2NvbmZpZy01MDktXHRoZWxwXG4tLVxubmV0L3NjaGVkL0tjb25maWc9NTE2PWNvbmZpZyBORVRfQ0xTX1UzMlxubmV0L3NjaGVkL0tjb25maWctNTE3LVx0dHJpc3RhdGUgXCYjMzQ7VW5pdmVyc2FsIDMyYml0IGNvbXBhcmlzb25zIHcvIGhhc2hpbmcgKFUzMilcJiMzNDtcbm5ldC9zY2hlZC9LY29uZmlnOjUxODpcdHNlbGVjdCBORVRfQ0xTXG5uZXQvc2NoZWQvS2NvbmZpZy01MTktXHRoZWxwXG4tLVxubmV0L3NjaGVkL0tjb25maWc9NTM5PWNvbmZpZyBORVRfQ0xTX0ZMT1dcbm5ldC9zY2hlZC9LY29uZmlnLTU0MC1cdHRyaXN0YXRlIFwmIzM0O0Zsb3cgY2xhc3NpZmllclwmIzM0O1xubmV0L3NjaGVkL0tjb25maWc6NTQxOlx0c2VsZWN0IE5FVF9DTFNcbm5ldC9zY2hlZC9LY29uZmlnLTU0Mi1cdGhlbHBcbi0tXG5uZXQvc2NoZWQvS2NvbmZpZz01NTA9Y29uZmlnIE5FVF9DTFNfQ0dST1VQXG5uZXQvc2NoZWQvS2NvbmZpZy01NTEtXHR0cmlzdGF0ZSBcJiMzNDtDb250cm9sIEdyb3VwIENsYXNzaWZpZXJcJiMzNDtcbm5ldC9zY2hlZC9LY29uZmlnOjU1MjpcdHNlbGVjdCBORVRfQ0xTXG5uZXQvc2NoZWQvS2NvbmZpZy01NTMtXHRzZWxlY3QgQ0dST1VQX05FVF9DTEFTU0lEXG4tLVxubmV0L3NjaGVkL0tjb25maWc9NTYyPWNvbmZpZyBORVRfQ0xTX0JQRlxubmV0L3NjaGVkL0tjb25maWctNTYzLVx0dHJpc3RhdGUgXCYjMzQ7QlBGLWJhc2VkIGNsYXNzaWZpZXJcJiMzNDtcbm5ldC9zY2hlZC9LY29uZmlnOjU2NDpcdHNlbGVjdCBORVRfQ0xTXG5uZXQvc2NoZWQvS2NvbmZpZy01NjUtXHRoZWxwXG4tLVxubmV0L3NjaGVkL0tjb25maWc9NTcyPWNvbmZpZyBORVRfQ0xTX0ZMT1dFUlxubmV0L3NjaGVkL0tjb25maWctNTczLVx0dHJpc3RhdGUgXCYjMzQ7Rmxvd2VyIGNsYXNzaWZpZXJcJiMzNDtcbm5ldC9zY2hlZC9LY29uZmlnOjU3NDpcdHNlbGVjdCBORVRfQ0xTXG5uZXQvc2NoZWQvS2NvbmZpZy01NzUtXHRoZWxwXG4tLVxubmV0L3NjaGVkL0tjb25maWc9NTgyPWNvbmZpZyBORVRfQ0xTX01BVENIQUxMXG5uZXQvc2NoZWQvS2NvbmZpZy01ODMtXHR0cmlzdGF0ZSBcJiMzNDtNYXRjaC1hbGwgY2xhc3NpZmllclwmIzM0O1xubmV0L3NjaGVkL0tjb25maWc6NTg0Olx0c2VsZWN0IE5FVF9DTFNcbm5ldC9zY2hlZC9LY29uZmlnLTU4NS1cdGhlbHBcbi0tXG5uZXQvc2NoZWQvS2NvbmZpZz01OTI9Y29uZmlnIE5FVF9FTUFUQ0hcbm5ldC9zY2hlZC9LY29uZmlnLTU5My1cdGJvb2wgXCYjMzQ7RXh0ZW5kZWQgTWF0Y2hlc1wmIzM0O1xubmV0L3NjaGVkL0tjb25maWc6NTk0Olx0c2VsZWN0IE5FVF9DTFNcbm5ldC9zY2hlZC9LY29uZmlnLTU5NS1cdGhlbHBcbi0tXG5uZXQvc2NoZWQvS2NvbmZpZz03MDI9Y29uZmlnIE5FVF9DTFNfQUNUXG5uZXQvc2NoZWQvS2NvbmZpZy03MDMtXHRib29sIFwmIzM0O0FjdGlvbnNcJiMzNDtcbm5ldC9zY2hlZC9LY29uZmlnOjcwNDpcdHNlbGVjdCBORVRfQ0xTXG5uZXQvc2NoZWQvS2NvbmZpZy03MDUtXHRzZWxlY3QgTkVUX1hHUkVTU1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAyMjo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5Mjc5CgkJCQkJCQlvdXRwdXQ6IDEyNgoJCQkJCQkJdGhvdWdodHM6IDQ1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRhcmdldCBBc3Nlc3NtZW50OiBgdGNfY3RsX2NoYWluYCBpbiBuZXQvc2NoZWQvY2xzX2FwaS5jKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIHRoYXQgdHdlYWtzIHRoZSBgdGNfY3RsX2NoYWluKClgIGZ1bmN0aW9uIHdpdGhpbiBgbmV0L3NjaGVkL2Nsc19hcGkuY2AuIEl0JiMzOTtzIGRlYWxpbmcgd2l0aCBob3cgdGhlIGNvZGUgaGFuZGxlcyBgLUVBR0FJTmAgZXJyb3JzLCBzcGVjaWZpY2FsbHkgaW4gdGhlIGNvbnRleHQgb2YgTmV0bGluayBtZXNzYWdlcy4gQmVmb3JlLCB0aGUgY29kZSB1bmNvbmRpdGlvbmFsbHkgcmV0cmllZCBhIGBnb3RvIHJlcGxheTtgIGZvciAqYWxsKiBgbmxtc2dfdHlwZXNgIHdoZW4gaXQgaGl0IGFuIGAtRUFHQUlOYC4gTm93LCBpdCBvbmx5IHJlcGxheXMgZm9yIGBSVE1fTkVXQ0hBSU5gLiBUaGUgcHJvYmxlbSB3YXMgdGhhdCBpZiBgdGNmX2NoYWluX2R1bXBgLCBgdGNfY2hhaW5fbm90aWZ5YCwgb3Igc29tZXRoaW5nIHNpbWlsYXIgcmV0dXJuZWQgYC1FQUdBSU5gIChvciBgTkxfU0VUX0VSUl9NU0dgKSBmb3IgYW55dGhpbmcgKm90aGVyKiB0aGFuIGEgYE5FV0NIQUlOYCBtZXNzYWdlLCBpdCB3b3VsZCBsb29wIG9yIHJlcGxheSwgcG90ZW50aWFsbHkgbGVhZGluZyB0byBhbGwgc29ydHMgb2YgbmFzdHkgaXNzdWVzIOKAkyBpbmZpbml0ZSBsb29wcywgeW91IG5hbWUgaXQuCgpUaGlua2luZyB0aGlzIHRocm91Z2gsIHRoZSBjaGFuZ2UgaXMgcHJldHR5IGZvY3VzZWQg4oCTIGl0JiMzOTtzIGFsbCBhYm91dCBjb250cm9sIGZsb3cgaW4gdGhpcyBjb3JlIG5ldHdvcmtpbmcgc3Vic3lzdGVtLiBBbmQsIGNydWNpYWxseSwgdGhpcyBgdGNfY3RsX2NoYWluYCBmdW5jdGlvbiBpcyBmdWxseSBhY2Nlc3NpYmxlIGluIHR5cGljYWwgUUVNVS9WTSBlbnZpcm9ubWVudHMgdmlhIE5ldGxpbmsvcnRuZXRsaW5rIG1lc3NhZ2VzLiBTbywgeWVhaCwgdGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuIEkmIzM5O20gZ29pbmcgdG8gc2V0IGBXb3J0aEZ1enppbmcgPSB0cnVlYC4KCk5vdywgZm9yIHRoZSBmdXp6aW5nIHN0cmF0ZWd5Li4uIGxldCYjMzk7cyBzZWUsIG15ICpmb2N1cyBzeW1ib2wqIGhlcmUgaXMgb2J2aW91c2x5IGB0Y19jdGxfY2hhaW5gLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGVyZSBhcmUgYW55IG90aGVyIHJlbGV2YW50LCBidXQgbm90IG5lY2Vzc2FyaWx5IHViaXF1aXRvdXMsIGZ1bmN0aW9ucyB0byBjb25zaWRlci4gRGlnZ2luZyBkZWVwZXIsIGl0IGxvb2tzIGxpa2UgYHRjX2N0bF9jaGFpbmAgaXMgdGhlIG1haW4gdGhpbmcgYmVpbmcgbW9kaWZpZWQsIGJ1dCBpdCBjYWxscyBhbmQgaXMgcmVsYXRlZCB0byBzb21lIG90aGVyIGZ1bmN0aW9uczogYHRjX2NoYWluX3RtcGx0X2FkZGAsIGB0Y19jaGFpbl9ub3RpZnlgLCBgdGNmX2NoYWluX2ZsdXNoYCwgYHRjZl9jaGFpbl9jcmVhdGVgLCBgdGNmX2NoYWluX2xvb2t1cGAsIGB0Y2ZfY2hhaW5faG9sZGAsIGFuZCBgdGNmX2NoYWluX3B1dGAuIEkgc2hvdWxkIGtlZXAgdGhvc2UgaW4gbWluZC4KCkJlZm9yZSBJIGdvIGZ1cnRoZXIsIGxldCYjMzk7cyB2ZXJpZnkgdGhlIGNvbmZpZ3M6IGBORVRfU0NIRURgIGhhcyB0byBiZSBlbmFibGVkLCBhbmQgZWl0aGVyIGBORVRfQ0xTX0FDVGAsIGBORVRfQ0xTX0JBU0lDYCwgb3IgYE5FVF9DTFNfRkxPV0VSYC4KCk9rYXksIGRvdWJsZS1jaGVja2luZyB0aGUgc3ltYm9sIG5hbWUgYW5kIHRob3NlIGNvbmZpZ3VyYXRpb25zIG9uZSBsYXN0IHRpbWUuLi4gWXVwLiBFdmVyeXRoaW5nIGNoZWNrcyBvdXQuIFRpbWUgdG8gYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMjI6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9TQ0hFRCYjMzQ7LAogICAgJiMzNDtORVRfQ0xTX0FDVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RjX2N0bF9jaGFpbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgZXJyb3IgaGFuZGxpbmcgYW5kIHJlcGxheSBsb2dpYyBmb3IgbmV0bGluayBjaGFpbiBjb250cm9sIG9wZXJhdGlvbnMgaW4gdGNfY3RsX2NoYWluKCkgKG5ldC9zY2hlZC9jbHNfYXBpLmMpLCByZXN0cmljdGluZyAtRUFHQUlOIHJlcGxheXMgc3RyaWN0bHkgdG8gUlRNX05FV0NIQUlOIHJlcXVlc3RzLiBUaGlzIHRvdWNoZXMgY29yZSBuZXR3b3JraW5nIHRyYWZmaWMgY29udHJvbCBsb2dpYyByZWFjaGFibGUgdmlhIHJ0bmV0bGluayBmcm9tIHVucHJpdmlsZWdlZCBvciBwcml2aWxlZ2VkIHVzZXIgbmFtZXNwYWNlcyBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9TQ0hFRCYjMzQ7LAogICAgJiMzNDtORVRfQ0xTX0FDVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RjX2N0bF9jaGFpbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgZXJyb3IgaGFuZGxpbmcgYW5kIHJlcGxheSBsb2dpYyBmb3IgbmV0bGluayBjaGFpbiBjb250cm9sIG9wZXJhdGlvbnMgaW4gdGNfY3RsX2NoYWluKCkgKG5ldC9zY2hlZC9jbHNfYXBpLmMpLCByZXN0cmljdGluZyAtRUFHQUlOIHJlcGxheXMgc3RyaWN0bHkgdG8gUlRNX05FV0NIQUlOIHJlcXVlc3RzLiBUaGlzIHRvdWNoZXMgY29yZSBuZXR3b3JraW5nIHRyYWZmaWMgY29udHJvbCBsb2dpYyByZWFjaGFibGUgdmlhIHJ0bmV0bGluayBmcm9tIHVucHJpdmlsZWdlZCBvciBwcml2aWxlZ2VkIHVzZXIgbmFtZXNwYWNlcyBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDIyOjUyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMjI6NTI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgcmVwbGF5IGxvZ2ljIGluIGB0Y19jdGxfY2hhaW4oKWAgYnkgZW5zdXJpbmcgdGhhdCBhIHJldHJ5IG9uIGAtRUFHQUlOYCBvbmx5IG9jY3VycyB3aGVuIGBuLVx1MDAzZW5sbXNnX3R5cGUgPT0gUlRNX05FV0NIQUlOYC4gVGhpcyBjaGFuZ2Ugb25seSBhZmZlY3RzIGNvbnRyb2wgZmxvdyBhbmQgZXJyb3IgaGFuZGxpbmcgZHVyaW5nIG5ldGxpbmsgVEMgY2hhaW4gbWFuYWdlbWVudCB0byBwcmV2ZW50IGluYXBwcm9wcmlhdGUgcmVxdWVzdCByZXBsYXkgZm9yIG90aGVyIG5ldGxpbmsgbWVzc2FnZSB0eXBlcyAoc3VjaCBhcyBgUlRNX0dFVENIQUlOYCBvciBgUlRNX0RFTENIQUlOYCkuIEl0IGRvZXMgbm90IGFsbG9jYXRlIG5ldyBtZW1vcnksIG1vZGlmeSBzdHJ1Y3QgaW5pdGlhbGl6YXRpb24sIGFsdGVyIGRhdGEgY29waWVzIHRvIHVzZXIgc3BhY2UsIG9yIGludHJvZHVjZSByaXNrcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gVGhlcmVmb3JlLCBzdGFuZGFyZCBLQVNBTi9zYW5pdGl6ZXJzIGFyZSBzdWZmaWNpZW50IGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGUyYWU5MmEwMzFiNjQzMTZmMTJhNTM3YmZlODllZTJjZmQyMzRlODIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIFNlcCA4IDIyOjUxOjM4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2Nsc19hcGkuYyBiL25ldC9zY2hlZC9jbHNfYXBpLmMKaW5kZXggOTk2Njc2NjY2MWQ1MC4uYzQ3ZDJlZTEzNjQxZCAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL2Nsc19hcGkuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc2NoZWQvY2xzX2FwaS5jCkBAIC0zMjU0LDcgJiM0MzszMjU0LDcgQEAgc3RhdGljIGludCB0Y19jdGxfY2hhaW4oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpuLAogCXRjZl9jaGFpbl9wdXQoY2hhaW4pOwogZXJyb3V0X2Jsb2NrOgogCXRjZl9ibG9ja19yZWxlYXNlKHEsIGJsb2NrLCB0cnVlKTsKLQlpZiAoZXJyID09IC1FQUdBSU4pCiYjNDM7CWlmIChlcnIgPT0gLUVBR0FJTiAmYW1wOyZhbXA7IG4tJmd0O25sbXNnX3R5cGUgPT0gUlRNX05FV0NIQUlOKQogCQkvKiBSZXBsYXkgdGhlIHJlcXVlc3QuICovCiAJCWdvdG8gcmVwbGF5OwogCXJldHVybiBlcnI7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAyMjo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDk0CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHNpdHVhdGlvbjoKCioqSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBDb2RlIENoYW5nZSoqCgpPa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gc3RhcnQgYnkgZXhhbWluaW5nIGBuZXQvc2NoZWQvY2xzX2FwaS5jYC4gVG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlLCBJIG5lZWQgdG8gc2VlIGV4YWN0bHkgd2hlcmUgaXQmIzM5O3MgdG91Y2hpbmcgdGhpcyBjcml0aWNhbCBmaWxlLiBJJiMzOTtsbCBuZWVkIHRvIHJhcGlkbHkgdW5kZXJzdGFuZCBpdHMgY29udGV4dCB3aXRoaW4gdGhlIGV4aXN0aW5nIGNvZGUuIE15IGZpcnN0IG1vdmUgd2lsbCBiZSB0byB1c2UgYSB0b29sIGxpa2UgYHJlYWQtZmlsZWAgKGlmIGF2YWlsYWJsZSBpbiB0aGlzIGVudmlyb25tZW50KSBvciwgaWYgbm90LCBJJiMzOTtsbCBsZXZlcmFnZSBgZ3JlcHBlcmAgKG9yIHNpbWlsYXIpIHRvIHF1aWNrbHkgcGlucG9pbnQgdGhlIGFmZmVjdGVkIGxpbmVzIGFuZCBzdXJyb3VuZGluZyBjb2RlIGluIGBuZXQvc2NoZWQvY2xzX2FwaS5jYC4gVGhpcyBjb250ZXh0dWFsIHVuZGVyc3RhbmRpbmcgaXMgY3J1Y2lhbCBiZWZvcmUgSSBjYW4gbWFrZSBhbnkgaW5mb3JtZWQganVkZ2VtZW50cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMjI6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc2NoZWQvY2xzX2FwaS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzIzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszMjMwOlx0XHRcdGJyZWFrO1xuMzIzMTpcdFx0Y2FzZSBSVE1fREVMQ0hBSU46XG4zMjMyOlx0XHRcdHRmaWx0ZXJfbm90aWZ5X2NoYWluKG5ldCwgc2tiLCBibG9jaywgcSwgcGFyZW50LCBuLFxuMzIzMzpcdFx0XHRcdFx0ICAgICBjaGFpbiwgUlRNX0RFTFRGSUxURVIsIGV4dGFjayk7XG4zMjM0Olx0XHRcdC8qIEZsdXNoIHRoZSBjaGFpbiBmaXJzdCBhcyB0aGUgdXNlciByZXF1ZXN0ZWQgY2hhaW4gcmVtb3ZhbC4gKi9cbjMyMzU6XHRcdFx0dGNmX2NoYWluX2ZsdXNoKGNoYWluLCB0cnVlKTtcbjMyMzY6XHRcdFx0LyogSW4gY2FzZSB0aGUgY2hhaW4gd2FzIHN1Y2Nlc3NmdWxseSBkZWxldGVkLCBwdXQgYSByZWZlcmVuY2VcbjMyMzc6XHRcdFx0ICogdG8gdGhlIGNoYWluIHByZXZpb3VzbHkgdGFrZW4gZHVyaW5nIGFkZGl0aW9uLlxuMzIzODpcdFx0XHQgKi9cbjMyMzk6XHRcdFx0dGNmX2NoYWluX3B1dF9leHBsaWNpdGx5X2NyZWF0ZWQoY2hhaW4pO1xuMzI0MDpcdFx0XHRicmVhaztcbjMyNDE6XHRcdGNhc2UgUlRNX0dFVENIQUlOOlxuMzI0MjpcdFx0XHRlcnIgPSB0Y19jaGFpbl9ub3RpZnkoY2hhaW4sIHNrYiwgbi1cdTAwM2VubG1zZ19zZXEsXG4zMjQzOlx0XHRcdFx0XHQgICAgICBuLVx1MDAzZW5sbXNnX2ZsYWdzLCBuLVx1MDAzZW5sbXNnX3R5cGUsIHRydWUsIGV4dGFjayk7XG4zMjQ0Olx0XHRcdGlmIChlcnIgXHUwMDNjIDApXG4zMjQ1Olx0XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtGYWlsZWQgdG8gc2VuZCBjaGFpbiBub3RpZnkgbWVzc2FnZVwmIzM0Oyk7XG4zMjQ2Olx0XHRcdGJyZWFrO1xuMzI0NzpcdFx0ZGVmYXVsdDpcbjMyNDg6XHRcdFx0ZXJyID0gLUVPUE5PVFNVUFA7XG4zMjQ5Olx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7VW5zdXBwb3J0ZWQgbWVzc2FnZSB0eXBlXCYjMzQ7KTtcbjMyNTA6XHRcdFx0Z290byBlcnJvdXQ7XG4zMjUxOlx0XHR9XG4zMjUyOlx0XG4zMjUzOlx0ZXJyb3V0OlxuMzI1NDpcdFx0dGNmX2NoYWluX3B1dChjaGFpbik7XG4zMjU1Olx0ZXJyb3V0X2Jsb2NrOlxuMzI1NjpcdFx0dGNmX2Jsb2NrX3JlbGVhc2UocSwgYmxvY2ssIHRydWUpO1xuMzI1NzpcdFx0aWYgKGVyciA9PSAtRUFHQUlOIFx1MDAyNlx1MDAyNiBuLVx1MDAzZW5sbXNnX3R5cGUgPT0gUlRNX05FV0NIQUlOKVxuMzI1ODpcdFx0XHQvKiBSZXBsYXkgdGhlIHJlcXVlc3QuICovXG4zMjU5Olx0XHRcdGdvdG8gcmVwbGF5O1xuMzI2MDpcdFx0cmV0dXJuIGVycjtcbjMyNjE6XHRcbjMyNjI6XHRlcnJvdXRfYmxvY2tfbG9ja2VkOlxuMzI2MzpcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmJsb2NrLVx1MDAzZWxvY2spO1xuMzI2NDpcdFx0Z290byBlcnJvdXRfYmxvY2s7XG4zMjY1Olx0fVxuMzI2NjpcdFxuMzI2NzpcdC8qIGNhbGxlZCB3aXRoIFJUTkwgKi9cbjMyNjg6XHRzdGF0aWMgaW50IHRjX2R1bXBfY2hhaW4oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuMzI2OTpcdHtcbjMyNzA6XHRcdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrYi1cdTAwM2Vzayk7XG4zMjcxOlx0XHRzdHJ1Y3QgbmxhdHRyICp0Y2FbVENBX01BWCAmIzQzOyAxXTtcbjMyNzI6XHRcdHN0cnVjdCBRZGlzYyAqcSA9IE5VTEw7XG4zMjczOlx0XHRzdHJ1Y3QgdGNmX2Jsb2NrICpibG9jaztcbjMyNzQ6XHRcdHN0cnVjdCB0Y21zZyAqdGNtID0gbmxtc2dfZGF0YShjYi1cdTAwM2VubGgpO1xuMzI3NTpcdFx0c3RydWN0IHRjZl9jaGFpbiAqY2hhaW47XG4zMjc2Olx0XHRsb25nIGluZGV4X3N0YXJ0O1xuMzI3NzpcdFx0bG9uZyBpbmRleDtcbjMyNzg6XHRcdGludCBlcnI7XG4zMjc5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDIyOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxMTQKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgYHRjX2N0bF9jaGFpbmAgYW5kIFJlcGxheSBMYWJlbGluZyoqCgpSaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgZ3V0cyBvZiBgdGNfY3RsX2NoYWluYC4gTXkgaW5pdGlhbCBmb2N1cyBpcyBwaW5wb2ludGluZyB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGUgcmVwbGF5IGxhYmVsIG1lY2hhbmlzbSBhbmQgc2NlbmFyaW9zIHdoZXJlIGBlcnIgPSAtRUFHQUlOYCBwb3BzIHVwLiBJIG5lZWQgdG8gdHJhY2UgdGhlIGNvZGUgcGF0aCBiYWNrIHRvIHdoZXJlIGEgcmV0cnkgaXMgdHJpZ2dlcmVkLCBzcGVjaWZpY2FsbHkgaW4gcmVsYXRpb24gdG8gaG93IHRoZSByZXBsYXkgbGFiZWwgaXMgaGFuZGxlZC4gSSBzdXNwZWN0IHRoZXJlJiMzOTtzIGEgZGVsaWNhdGUgZGFuY2UgaGFwcGVuaW5nIHRoZXJlLCBhbmQgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhlcmUmIzM5O3MgYSByYWNlIGNvbmRpdGlvbiBvciBzb21lIHN1YnRsZSBpbnRlcmFjdGlvbiBsZWFkaW5nIHRvIHVuZXhwZWN0ZWQgLUVBR0FJTiBlcnJvcnMuIFdlIG5lZWQgdG8gc2VlIGlmIGl0JiMzOTtzIGEgdHJhbnNpZW50IGlzc3VlLCBvciB3aGV0aGVyIHRoZXJlIGlzIGEgY29yZSBwcm9ibGVtIHJlbGF0ZWQgdG8gc2VxdWVuY2luZyBvciBsb2NraW5nIHdpdGhpbiB0aGUgcmVwbGF5IGxvZ2ljLiBJJiMzOTtsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIHBvdGVudGlhbCBmb3IgZG91YmxlLWZyZWVzIG9yIGluY29ycmVjdCBzdGF0ZSBtYW5hZ2VtZW50IGFyb3VuZCB0aGUgbGFiZWxzIGFzIHdlbGwsIGVzcGVjaWFsbHkgYXMgdGhleSByZWxhdGUgdG8gY29uY3VycmVudCBhY2Nlc3MsIGlmIGFwcGxpY2FibGUuIFRpbWUgdG8gZGlnIGluIGFuZCBmb2xsb3cgdGhhdCBlcnJvciBjb2RlIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAyMjo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zY2hlZC9jbHNfYXBpLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMTcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzMxNzA6XHRcdFx0Z290byBlcnJvdXRfYmxvY2s7XG4zMTcxOlx0XHR9XG4zMTcyOlx0XG4zMTczOlx0XHRtdXRleF9sb2NrKFx1MDAyNmJsb2NrLVx1MDAzZWxvY2spO1xuMzE3NDpcdFx0Y2hhaW4gPSB0Y2ZfY2hhaW5fbG9va3VwKGJsb2NrLCBjaGFpbl9pbmRleCk7XG4zMTc1Olx0XHRpZiAobi1cdTAwM2VubG1zZ190eXBlID09IFJUTV9ORVdDSEFJTikge1xuMzE3NjpcdFx0XHRpZiAoY2hhaW4pIHtcbjMxNzc6XHRcdFx0XHRpZiAodGNmX2NoYWluX2hlbGRfYnlfYWN0c19vbmx5KGNoYWluKSkge1xuMzE3ODpcdFx0XHRcdFx0LyogVGhlIGNoYWluIGV4aXN0cyBvbmx5IGJlY2F1c2UgdGhlcmUgaXNcbjMxNzk6XHRcdFx0XHRcdCAqIHNvbWUgYWN0aW9uIHJlZmVyZW5jaW5nIGl0LlxuMzE4MDpcdFx0XHRcdFx0ICovXG4zMTgxOlx0XHRcdFx0XHR0Y2ZfY2hhaW5faG9sZChjaGFpbik7XG4zMTgyOlx0XHRcdFx0fSBlbHNlIHtcbjMxODM6XHRcdFx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7RmlsdGVyIGNoYWluIGFscmVhZHkgZXhpc3RzXCYjMzQ7KTtcbjMxODQ6XHRcdFx0XHRcdGVyciA9IC1FRVhJU1Q7XG4zMTg1Olx0XHRcdFx0XHRnb3RvIGVycm91dF9ibG9ja19sb2NrZWQ7XG4zMTg2Olx0XHRcdFx0fVxuMzE4NzpcdFx0XHR9IGVsc2Uge1xuMzE4ODpcdFx0XHRcdGlmICghKG4tXHUwMDNlbmxtc2dfZmxhZ3MgXHUwMDI2IE5MTV9GX0NSRUFURSkpIHtcbjMxODk6XHRcdFx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7TmVlZCBib3RoIFJUTV9ORVdDSEFJTiBhbmQgTkxNX0ZfQ1JFQVRFIHRvIGNyZWF0ZSBhIG5ldyBjaGFpblwmIzM0Oyk7XG4zMTkwOlx0XHRcdFx0XHRlcnIgPSAtRU5PRU5UO1xuMzE5MTpcdFx0XHRcdFx0Z290byBlcnJvdXRfYmxvY2tfbG9ja2VkO1xuMzE5MjpcdFx0XHRcdH1cbjMxOTM6XHRcdFx0XHRjaGFpbiA9IHRjZl9jaGFpbl9jcmVhdGUoYmxvY2ssIGNoYWluX2luZGV4KTtcbjMxOTQ6XHRcdFx0XHRpZiAoIWNoYWluKSB7XG4zMTk1Olx0XHRcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O0ZhaWxlZCB0byBjcmVhdGUgZmlsdGVyIGNoYWluXCYjMzQ7KTtcbjMxOTY6XHRcdFx0XHRcdGVyciA9IC1FTk9NRU07XG4zMTk3Olx0XHRcdFx0XHRnb3RvIGVycm91dF9ibG9ja19sb2NrZWQ7XG4zMTk4Olx0XHRcdFx0fVxuMzE5OTpcdFx0XHR9XG4zMjAwOlx0XHR9IGVsc2Uge1xuMzIwMTpcdFx0XHRpZiAoIWNoYWluIHx8IHRjZl9jaGFpbl9oZWxkX2J5X2FjdHNfb25seShjaGFpbikpIHtcbjMyMDI6XHRcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O0Nhbm5vdCBmaW5kIHNwZWNpZmllZCBmaWx0ZXIgY2hhaW5cJiMzNDspO1xuMzIwMzpcdFx0XHRcdGVyciA9IC1FSU5WQUw7XG4zMjA0Olx0XHRcdFx0Z290byBlcnJvdXRfYmxvY2tfbG9ja2VkO1xuMzIwNTpcdFx0XHR9XG4zMjA2Olx0XHRcdHRjZl9jaGFpbl9ob2xkKGNoYWluKTtcbjMyMDc6XHRcdH1cbjMyMDg6XHRcbjMyMDk6XHRcdGlmIChuLVx1MDAzZW5sbXNnX3R5cGUgPT0gUlRNX05FV0NIQUlOKSB7XG4zMjEwOlx0XHRcdC8qIE1vZGlmeWluZyBjaGFpbiByZXF1aXJlcyBob2xkaW5nIHBhcmVudCBibG9jayBsb2NrLiBJbiBjYXNlXG4zMjExOlx0XHRcdCAqIHRoZSBjaGFpbiB3YXMgc3VjY2Vzc2Z1bGx5IGFkZGVkLCB0YWtlIGEgcmVmZXJlbmNlIHRvIHRoZVxuMzIxMjpcdFx0XHQgKiBjaGFpbi4gVGhpcyBlbnN1cmVzIHRoYXQgYW4gZW1wdHkgY2hhaW4gZG9lcyBub3QgZGlzYXBwZWFyIGF0XG4zMjEzOlx0XHRcdCAqIHRoZSBlbmQgb2YgdGhpcyBmdW5jdGlvbi5cbjMyMTQ6XHRcdFx0ICovXG4zMjE1Olx0XHRcdHRjZl9jaGFpbl9ob2xkKGNoYWluKTtcbjMyMTY6XHRcdFx0Y2hhaW4tXHUwMDNlZXhwbGljaXRseV9jcmVhdGVkID0gdHJ1ZTtcbjMyMTc6XHRcdH1cbjMyMTg6XHRcdG11dGV4X3VubG9jayhcdTAwMjZibG9jay1cdTAwM2Vsb2NrKTtcbjMyMTk6XHRcbjMyMjA6XHRcdHN3aXRjaCAobi1cdTAwM2VubG1zZ190eXBlKSB7XG4zMjIxOlx0XHRjYXNlIFJUTV9ORVdDSEFJTjpcbjMyMjI6XHRcdFx0ZXJyID0gdGNfY2hhaW5fdG1wbHRfYWRkKGNoYWluLCBuZXQsIHRjYSwgZXh0YWNrKTtcbjMyMjM6XHRcdFx0aWYgKGVycikge1xuMzIyNDpcdFx0XHRcdHRjZl9jaGFpbl9wdXRfZXhwbGljaXRseV9jcmVhdGVkKGNoYWluKTtcbjMyMjU6XHRcdFx0XHRnb3RvIGVycm91dDtcbjMyMjY6XHRcdFx0fVxuMzIyNzpcdFxuMzIyODpcdFx0XHR0Y19jaGFpbl9ub3RpZnkoY2hhaW4sIE5VTEwsIDAsIE5MTV9GX0NSRUFURSB8IE5MTV9GX0VYQ0wsXG4zMjI5Olx0XHRcdFx0XHRSVE1fTkVXQ0hBSU4sIGZhbHNlLCBleHRhY2spO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAyMjo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MzM3CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgQ29kZWJhc2UqKgoKQWxyaWdodCwgc28gdGhlIGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IEkmIzM5O20gZGl2aW5nIGludG8gdGhlIGB0Y19jdGxfY2hhaW5gIGZ1bmN0aW9uLiBJdCYjMzk7cyB0aGUgc3RhcnRpbmcgcG9pbnQuIEkgbmVlZCB0byBnZXQgYSBoaWdoLWxldmVsIHZpZXcgb2YgaG93IHRoaXMgdGhpbmcgaXMgc3RydWN0dXJlZC4gSSYjMzk7bSBwcm9iYWJseSBsb29raW5nIGF0IHRoZSBmdW5jdGlvbiBzaWduYXR1cmUsIHRoZSBpbml0aWFsIHZhcmlhYmxlIGRlY2xhcmF0aW9ucywgYW5kIHRoZSBmaXJzdCBmZXcgbGluZXMgb2YgbG9naWMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgaW5wdXRzIGl0JiMzOTtzIHRha2luZyBhbmQgd2hhdCB0aGUgaW1tZWRpYXRlIGdvYWxzIG9mIHRoZSBmdW5jdGlvbiBhcmUuIElzIGl0IHBhcnNpbmcgYW4gaW5wdXQgc3RyaW5nPyBJbml0aWFsaXppbmcgc29tZSBkYXRhIHN0cnVjdHVyZXM/IFNldHRpbmcgdXAgc29tZSBiYXNpYyBjb25maWd1cmF0aW9uPyBVbmRlcnN0YW5kaW5nIHRoZSB2ZXJ5IGJlZ2lubmluZyBpcyBrZXkgdG8gbWFraW5nIHNlbnNlIG9mIHRoZSBlbnRpcmUgZmxvdy4gVGhpcyBpcyB3aGVyZSBJIGJlZ2luIHRvIGZvcm11bGF0ZSBteSBtZW50YWwgbW9kZWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDIyOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NjaGVkL2Nsc19hcGkuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMxMjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzEyNTpcdHtcbjMxMjY6XHRcdC8qIElmIHRlbXBsYXRlIG9wcyBhcmUgc2V0LCBubyB3b3JrIHRvIGRvIGZvciB1cy4gKi9cbjMxMjc6XHRcdGlmICghdG1wbHRfb3BzKVxuMzEyODpcdFx0XHRyZXR1cm47XG4zMTI5Olx0XG4zMTMwOlx0XHR0bXBsdF9vcHMtXHUwMDNldG1wbHRfZGVzdHJveSh0bXBsdF9wcml2KTtcbjMxMzE6XHRcdG1vZHVsZV9wdXQodG1wbHRfb3BzLVx1MDAzZW93bmVyKTtcbjMxMzI6XHR9XG4zMTMzOlx0XG4zMTM0Olx0LyogQWRkL2RlbGV0ZS9nZXQgYSBjaGFpbiAqL1xuMzEzNTpcdFxuMzEzNjpcdHN0YXRpYyBpbnQgdGNfY3RsX2NoYWluKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbixcbjMxMzc6XHRcdFx0XHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4zMTM4Olx0e1xuMzEzOTpcdFx0c3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2tiLVx1MDAzZXNrKTtcbjMxNDA6XHRcdHN0cnVjdCBubGF0dHIgKnRjYVtUQ0FfTUFYICYjNDM7IDFdO1xuMzE0MTpcdFx0c3RydWN0IHRjbXNnICp0O1xuMzE0MjpcdFx0dTMyIHBhcmVudDtcbjMxNDM6XHRcdHUzMiBjaGFpbl9pbmRleDtcbjMxNDQ6XHRcdHN0cnVjdCBRZGlzYyAqcTtcbjMxNDU6XHRcdHN0cnVjdCB0Y2ZfY2hhaW4gKmNoYWluO1xuMzE0NjpcdFx0c3RydWN0IHRjZl9ibG9jayAqYmxvY2s7XG4zMTQ3Olx0XHR1bnNpZ25lZCBsb25nIGNsO1xuMzE0ODpcdFx0aW50IGVycjtcbjMxNDk6XHRcbjMxNTA6XHRyZXBsYXk6XG4zMTUxOlx0XHRxID0gTlVMTDtcbjMxNTI6XHRcdGVyciA9IG5sbXNnX3BhcnNlX2RlcHJlY2F0ZWQobiwgc2l6ZW9mKCp0KSwgdGNhLCBUQ0FfTUFYLFxuMzE1MzpcdFx0XHRcdFx0ICAgICBydG1fdGNhX3BvbGljeSwgZXh0YWNrKTtcbjMxNTQ6XHRcdGlmIChlcnIgXHUwMDNjIDApXG4zMTU1Olx0XHRcdHJldHVybiBlcnI7XG4zMTU2Olx0XG4zMTU3Olx0XHR0ID0gbmxtc2dfZGF0YShuKTtcbjMxNTg6XHRcdHBhcmVudCA9IHQtXHUwMDNldGNtX3BhcmVudDtcbjMxNTk6XHRcdGNsID0gMDtcbjMxNjA6XHRcbjMxNjE6XHRcdGJsb2NrID0gdGNmX2Jsb2NrX2ZpbmQobmV0LCBcdTAwMjZxLCBcdTAwMjZwYXJlbnQsIFx1MDAyNmNsLFxuMzE2MjpcdFx0XHRcdCAgICAgICB0LVx1MDAzZXRjbV9pZmluZGV4LCB0LVx1MDAzZXRjbV9ibG9ja19pbmRleCwgZXh0YWNrKTtcbjMxNjM6XHRcdGlmIChJU19FUlIoYmxvY2spKVxuMzE2NDpcdFx0XHRyZXR1cm4gUFRSX0VSUihibG9jayk7XG4zMTY1Olx0XG4zMTY2Olx0XHRjaGFpbl9pbmRleCA9IG5sYV9nZXRfdTMyX2RlZmF1bHQodGNhW1RDQV9DSEFJTl0sIDApO1xuMzE2NzpcdFx0aWYgKGNoYWluX2luZGV4IFx1MDAzZSBUQ19BQ1RfRVhUX1ZBTF9NQVNLKSB7XG4zMTY4Olx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7U3BlY2lmaWVkIGNoYWluIGluZGV4IGV4Y2VlZHMgdXBwZXIgbGltaXRcJiMzNDspO1xuMzE2OTpcdFx0XHRlcnIgPSAtRUlOVkFMO1xuMzE3MDpcdFx0XHRnb3RvIGVycm91dF9ibG9jaztcbjMxNzE6XHRcdH1cbjMxNzI6XHRcbjMxNzM6XHRcdG11dGV4X2xvY2soXHUwMDI2YmxvY2stXHUwMDNlbG9jayk7XG4zMTc0Olx0XHRjaGFpbiA9IHRjZl9jaGFpbl9sb29rdXAoYmxvY2ssIGNoYWluX2luZGV4KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMjI6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTMyNAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDI3NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGAtRUFHQUlOYCBSZXBsYXkgaW4gYHRjX2N0bF9jaGFpbmAqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSW4gYHRjX2N0bF9jaGFpbmAsIEkgc2VlIHRoaXMganVtcCBiYWNrIHRvIGByZXBsYXlgIHdoZW4gYGVyciA9PSAtRUFHQUlOYC4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCB3aGVyZSBkb2VzIGBlcnJgICpiZWNvbWUqIGAtRUFHQUlOYCB3aXRoaW4gdGhpcyBmdW5jdGlvbj8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHBvdGVudGlhbCBlZGdlIGNhc2VzIGhlcmUuIEl0IGxvb2tzIGxpa2UgaXQgY2FuIG9yaWdpbmF0ZSBmcm9tIGB0Y19jaGFpbl90bXBsdF9hZGRgIOKAkyB3aGljaCBpcyBvbmx5IGNhbGxlZCBpZiBpdCYjMzk7cyBhIGBSVE1fTkVXQ0hBSU5gIG1lc3NhZ2Ug4oCTIG9yIGZyb20gYHRjX2NoYWluX25vdGlmeWAsIHdoaWNoIGlzIGludm9sdmVkIGluIGBSVE1fR0VUQ0hBSU5gIHJlcXVlc3RzLgoKVGhlIGNydXggb2YgdGhlIGlzc3VlIGlzIHRoaXM6IGlmIGB0Y19jaGFpbl9ub3RpZnlgIHdlcmUgdG8gc29tZWhvdyByZXR1cm4gYC1FQUdBSU5gLCBwb3RlbnRpYWxseSBkdXJpbmcgYSBuZXRsaW5rIG5vdGlmaWNhdGlvbiwgdGhlbiB0aGF0ICYjMzQ7cmVwbGF5JiMzNDsgbGFiZWwgd291bGQgYmUgaW5jb3JyZWN0bHkgdXNlZCwgYW5kIG1pZ2h0IGNhdXNlIGFuIGluZmluaXRlIGxvb3Agb3IsIGF0IHRoZSB2ZXJ5IGxlYXN0LCB1bnByZWRpY3RhYmxlIGJlaGF2aW9yLiBUaGUgYHJlcGxheWAgbG9naWMsIGFzIEkgdW5kZXJzdGFuZCBpdCwgc2hvdWxkICpvbmx5KiBiZSBpbnZva2VkIGZvciBmYWlsdXJlcyBkdXJpbmcgYFJUTV9ORVdDSEFJTmAgcmVxdWVzdHMsIG5vdCBgUlRNX0dFVENIQUlOYC4KClRoZXJlZm9yZSwgdGhlIG9idmlvdXMgZml4IHdvdWxkIGJlOgpgYGBkaWZmCi0JaWYgKGVyciA9PSAtRUFHQUlOKQomIzQzOwlpZiAoZXJyID09IC1FQUdBSU4gJmFtcDsmYW1wOyBuLSZndDtubG1zZ190eXBlID09IFJUTV9ORVdDSEFJTikKIAkJLyogUmVwbGF5IHRoZSByZXF1ZXN0LiAqLwogCQlnb3RvIHJlcGxheTsKIAlyZXR1cm4gZXJyOwpgYGAKCk5vdywgSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGdsYW5jZSB0aHJvdWdoIGB0Y19jdGxfdGZpbHRlcmAgYW5kIGEgZmV3IG90aGVyIGZ1bmN0aW9ucyBpbiBgY2xzX2FwaS5jYCB0byBzZWUgaG93IGByZXBsYXlgIGlzIGdlbmVyYWxseSBoYW5kbGVkLiBUaGlzIG1pZ2h0IHByb3ZpZGUgZnVydGhlciBpbnNpZ2h0cyBpbnRvIHRoZSBpbnRlbmRlZCB1c2UgYW5kIHBvc3NpYmxlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGZpeCBpbiB0aGUgYnJvYWRlciBjb250ZXh0IG9mIHRoZSB0cmFmZmljIGNvbnRyb2wgZnJhbWV3b3JrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAyMjo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyZXBsYXk6JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL2Nsc19hcGkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvY2xzX2FwaS5jPTIyNTc9c3RhdGljIGludCB0Y19uZXdfdGZpbHRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm4sXG4tLVxubmV0L3NjaGVkL2Nsc19hcGkuYy0yMjgwLVxubmV0L3NjaGVkL2Nsc19hcGkuYzoyMjgxOnJlcGxheTpcbm5ldC9zY2hlZC9jbHNfYXBpLmMtMjI4Mi1cdHRwX3N0YXRlID0gVFBfTk9UX0NSRUFURUQ7XG4tLVxubmV0L3NjaGVkL2Nsc19hcGkuYz0zMTM2PXN0YXRpYyBpbnQgdGNfY3RsX2NoYWluKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbixcbi0tXG5uZXQvc2NoZWQvY2xzX2FwaS5jLTMxNDktXG5uZXQvc2NoZWQvY2xzX2FwaS5jOjMxNTA6cmVwbGF5OlxubmV0L3NjaGVkL2Nsc19hcGkuYy0zMTUxLVx0cSA9IE5VTEw7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDIyOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYyMjkKCQkJCQkJCW91dHB1dDogMTYzCgkJCQkJCQl0aG91Z2h0czogMzQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoaXMgTmV0bGluayBUQyBDaGFpbiBNYW5hZ2VtZW50IFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgcGF0Y2ggaXMgYSBzdHJhaWdodGZvcndhcmQgY29udHJvbC1mbG93IGZpeCB3aXRoaW4gdGhlIG5ldGxpbmsgdHJhZmZpYyBjb250cm9sIGNoYWluIG1hbmFnZW1lbnQuIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgYWRkaW5nIGFuIGFkZGl0aW9uYWwgY29uZGl0aW9uIHRvIGFuIGV4aXN0aW5nIGAtRUFHQUlOYCByZXBsYXkgY2hlY2sgd2l0aGluIGB0Y19jdGxfY2hhaW5gLiBUaGUgYWRkZWQgYCZhbXA7JmFtcDsgbi0mZ3Q7bmxtc2dfdHlwZSA9PSBSVE1fTkVXQ0hBSU5gIHNlZW1zIHRvIGJlIGEgc2FmZWd1YXJkIGFnYWluc3QgdW5pbnRlbmRlZCByZXRyaWVzIG9yIHJlcGxheSBsb29wcy4gSXQmIzM5O3Mgb25seSBzdXBwb3NlZCB0byByZXBsYXkgaWYgdGhlIG1lc3NhZ2UgdHlwZSBpcyBgUlRNX05FV0NIQUlOYCwgYW5kIG5vdCBmb3Igb3RoZXIgbWVzc2FnZSB0eXBlcyBsaWtlIGBSVE1fR0VUQ0hBSU5gIG9yIGBSVE1fREVMQ0hBSU5gLgoKTm93LCB0aGUgaW1wb3J0YW50IHBhcnQ6IGRvZXMgdGhpcyBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHZ1bG5lcmFiaWxpdGllcz8gSSBuZWVkIHRvIG1ldGljdWxvdXNseSBnbyB0aHJvdWdoIHRoZSB1c3VhbCBzdXNwZWN0cy4gRmlyc3QsIGFyZSB0aGVyZSBhbnkga2VybmVsIHN0cnVjdHVyZXMgYmVpbmcgc2VudCB0byB1c2Vyc3BhY2UgdGhhdCBtaWdodCBoYXZlIGJlZW4gY2hhbmdlZD8gTm8sIGl0IGRvZXNu4oCZdCBzZWVtIHNvLiBUaGVyZSBhcmUgbm8gbW9kaWZpY2F0aW9ucyB0byBob3cgdGhlIGRhdGEgaXMgc2VyaWFsaXplZCBvciBob3cgYXR0cmlidXRlcyBhcmUgZ2VuZXJhdGVkLiBTZWNvbmQsIGFyZSB0aGVyZSBhbnkgbmV3IGNvbmRpdGlvbmFsIGJyYW5jaGVzIG9yIGxvZ2ljIHRoYXQgaGluZ2VzIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyBJIGNhbiBzZWUgdGhhdCBgZXJyYCBpcyBwcm9wZXJseSBpbml0aWFsaXplZCwgYW5kIGBuYCBpcyBhIHBvaW50ZXIgdG8gYG5sbXNnX2hkcmAsIHNvIHRoZSBwcm9ncmFtIGNoZWNrcyBgbi0mZ3Q7bmxtc2dfdHlwZWAuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlcyBoZXJlLiBOZXh0LCBJJiMzOTtsbCBjaGVjayBmb3IgYW55IG5ldyBhbGxvY2F0aW9ucyBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBvciBtb2RpZmljYXRpb25zIHRvIGV4aXN0aW5nIG9uZXMgYW5kIGFueSBpc3N1ZXMgdGhhdCBjb3VsZCBiZSBpbnRyb2R1Y2VkLiBObywgbm90aGluZyBjaGFuZ2VkIHRoZXJlIGVpdGhlci4gRmluYWxseSwgYXJlIHRoZXJlIGFueSBib3VuZHMgY2hlY2tzLCBsZW5ndGggY2hlY2tzLCBvciBsb2dpYyB0aGF0IGNvdWxkIGxlYWQgdG8gYWNjZXNzaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBUaGUgYW5zd2VyIGlzIG5vLCB0aGlzIGlzbiYjMzk7dCB0aGUgY2FzZSBoZXJlLgoKU28sIGFtIEkgcmlnaHQ/IEl0IHNlZW1zIHNhZmUuCgpOb3csIGxldCYjMzk7cyBjb25zaWRlciBLTVNBTiAoS2VybmVsIE1lbW9yeSBTYW5pdGl6ZXIpLiBJcyB0aGVyZSBhIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgbGVha3MgaGVyZT8gVGhlIGFuc3dlciBpcyBjbGVhcmx5IG5vLiBLTVNBTiBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgZm9yIHRob3NlIGtpbmRzIG9mIGlzc3VlcywgYW5kIHRoaXMgcGF0Y2ggc2ltcGx5IHJlc3RyaWN0cyBhIHJldHJ5IGxvb3AuIEl0JiMzOTtzIGEgc3RhbmRhcmQgZXJyb3IgaGFuZGxpbmcgY2hhbmdlLiBBbnkgcHJvYmxlbXMgd2l0aCBpbmZpbml0ZSBsb29wcywgcmVmZXJlbmNlIGNvdW50aW5nLCBvciBsb2NrIGhhbmRsaW5nLCBpZiB0aGV5IHdlcmUgcHJlc2VudCwgd291bGQgYmUgZm91bmQgYnkgc3RhbmRhcmQgdG9vbHMgYW5kIHRpbWVvdXRzLCBhbmQgbm90IGJ5IEtNU0FOLgoKVGhlcmVmb3JlLCBgTmVlZHNLTVNBTmAgaXMgZGVmaW5pdGl2ZWx5IGBmYWxzZWAuCgpOb3csIEkmIzM5O2xsIHByZXBhcmUgdGhlIGZpbmFsIHJlc3BvbnNlIHVzaW5nIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDIyOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSByZXBsYXkgbG9naWMgaW4gYHRjX2N0bF9jaGFpbigpYCBieSBlbnN1cmluZyB0aGF0IGEgcmV0cnkgb24gYC1FQUdBSU5gIG9ubHkgb2NjdXJzIHdoZW4gYG4tXHUwMDNlbmxtc2dfdHlwZSA9PSBSVE1fTkVXQ0hBSU5gLiBUaGlzIGNoYW5nZSBvbmx5IGFmZmVjdHMgY29udHJvbCBmbG93IGFuZCBlcnJvciBoYW5kbGluZyBkdXJpbmcgbmV0bGluayBUQyBjaGFpbiBtYW5hZ2VtZW50IHRvIHByZXZlbnQgaW5hcHByb3ByaWF0ZSByZXF1ZXN0IHJlcGxheSBmb3Igb3RoZXIgbmV0bGluayBtZXNzYWdlIHR5cGVzIChzdWNoIGFzIGBSVE1fR0VUQ0hBSU5gIG9yIGBSVE1fREVMQ0hBSU5gKS4gSXQgZG9lcyBub3QgYWxsb2NhdGUgbmV3IG1lbW9yeSwgbW9kaWZ5IHN0cnVjdCBpbml0aWFsaXphdGlvbiwgYWx0ZXIgZGF0YSBjb3BpZXMgdG8gdXNlciBzcGFjZSwgb3IgaW50cm9kdWNlIHJpc2tzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBUaGVyZWZvcmUsIHN0YW5kYXJkIEtBU0FOL3Nhbml0aXplcnMgYXJlIHN1ZmZpY2llbnQgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHJlcGxheSBsb2dpYyBpbiBgdGNfY3RsX2NoYWluKClgIGJ5IGVuc3VyaW5nIHRoYXQgYSByZXRyeSBvbiBgLUVBR0FJTmAgb25seSBvY2N1cnMgd2hlbiBgbi1cdTAwM2VubG1zZ190eXBlID09IFJUTV9ORVdDSEFJTmAuIFRoaXMgY2hhbmdlIG9ubHkgYWZmZWN0cyBjb250cm9sIGZsb3cgYW5kIGVycm9yIGhhbmRsaW5nIGR1cmluZyBuZXRsaW5rIFRDIGNoYWluIG1hbmFnZW1lbnQgdG8gcHJldmVudCBpbmFwcHJvcHJpYXRlIHJlcXVlc3QgcmVwbGF5IGZvciBvdGhlciBuZXRsaW5rIG1lc3NhZ2UgdHlwZXMgKHN1Y2ggYXMgYFJUTV9HRVRDSEFJTmAgb3IgYFJUTV9ERUxDSEFJTmApLiBJdCBkb2VzIG5vdCBhbGxvY2F0ZSBuZXcgbWVtb3J5LCBtb2RpZnkgc3RydWN0IGluaXRpYWxpemF0aW9uLCBhbHRlciBkYXRhIGNvcGllcyB0byB1c2VyIHNwYWNlLCBvciBpbnRyb2R1Y2Ugcmlza3Mgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIFRoZXJlZm9yZSwgc3RhbmRhcmQgS0FTQU4vc2FuaXRpemVycyBhcmUgc3VmZmljaWVudCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIyOjUxOjM5LjA5MDE0NTQxOFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4NzY2Mzc3NTk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9TQ0hFRFwiLFxuICAgIFwiTkVUX0NMU19BQ1RcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0Y19jdGxfY2hhaW5cIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSByZXBsYXkgbG9naWMgaW4gYHRjX2N0bF9jaGFpbigpYCBieSBlbnN1cmluZyB0aGF0IGEgcmV0cnkgb24gYC1FQUdBSU5gIG9ubHkgb2NjdXJzIHdoZW4gYG4tXFx1MDAzZW5sbXNnX3R5cGUgPT0gUlRNX05FV0NIQUlOYC4gVGhpcyBjaGFuZ2Ugb25seSBhZmZlY3RzIGNvbnRyb2wgZmxvdyBhbmQgZXJyb3IgaGFuZGxpbmcgZHVyaW5nIG5ldGxpbmsgVEMgY2hhaW4gbWFuYWdlbWVudCB0byBwcmV2ZW50IGluYXBwcm9wcmlhdGUgcmVxdWVzdCByZXBsYXkgZm9yIG90aGVyIG5ldGxpbmsgbWVzc2FnZSB0eXBlcyAoc3VjaCBhcyBgUlRNX0dFVENIQUlOYCBvciBgUlRNX0RFTENIQUlOYCkuIEl0IGRvZXMgbm90IGFsbG9jYXRlIG5ldyBtZW1vcnksIG1vZGlmeSBzdHJ1Y3QgaW5pdGlhbGl6YXRpb24sIGFsdGVyIGRhdGEgY29waWVzIHRvIHVzZXIgc3BhY2UsIG9yIGludHJvZHVjZSByaXNrcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gVGhlcmVmb3JlLCBzdGFuZGFyZCBLQVNBTi9zYW5pdGl6ZXJzIGFyZSBzdWZmaWNpZW50IGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgZXJyb3IgaGFuZGxpbmcgYW5kIHJlcGxheSBsb2dpYyBmb3IgbmV0bGluayBjaGFpbiBjb250cm9sIG9wZXJhdGlvbnMgaW4gdGNfY3RsX2NoYWluKCkgKG5ldC9zY2hlZC9jbHNfYXBpLmMpLCByZXN0cmljdGluZyAtRUFHQUlOIHJlcGxheXMgc3RyaWN0bHkgdG8gUlRNX05FV0NIQUlOIHJlcXVlc3RzLiBUaGlzIHRvdWNoZXMgY29yZSBuZXR3b3JraW5nIHRyYWZmaWMgY29udHJvbCBsb2dpYyByZWFjaGFibGUgdmlhIHJ0bmV0bGluayBmcm9tIHVucHJpdmlsZWdlZCBvciBwcml2aWxlZ2VkIHVzZXIgbmFtZXNwYWNlcyBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIyOjUxOjM5LjA5MDE1MTQ2N1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjYxOTYyMTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZTJhZTkyYTAzMWI2NDMxNmYxMmE1MzdiZmU4OWVlMmNmZDIzNGU4MlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIFNlcCA4IDIyOjUxOjM4IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9jbHNfYXBpLmMgYi9uZXQvc2NoZWQvY2xzX2FwaS5jXFxuaW5kZXggOTk2Njc2NjY2MWQ1MC4uYzQ3ZDJlZTEzNjQxZCAxMDA2NDRcXG4tLS0gYS9uZXQvc2NoZWQvY2xzX2FwaS5jXFxuKysrIGIvbmV0L3NjaGVkL2Nsc19hcGkuY1xcbkBAIC0zMjU0LDcgKzMyNTQsNyBAQCBzdGF0aWMgaW50IHRjX2N0bF9jaGFpbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm4sXFxuIFxcdHRjZl9jaGFpbl9wdXQoY2hhaW4pO1xcbiBlcnJvdXRfYmxvY2s6XFxuIFxcdHRjZl9ibG9ja19yZWxlYXNlKHEsIGJsb2NrLCB0cnVlKTtcXG4tXFx0aWYgKGVyciA9PSAtRUFHQUlOKVxcbitcXHRpZiAoZXJyID09IC1FQUdBSU4gXFx1MDAyNlxcdTAwMjYgbi1cXHUwMDNlbmxtc2dfdHlwZSA9PSBSVE1fTkVXQ0hBSU4pXFxuIFxcdFxcdC8qIFJlcGxheSB0aGUgcmVxdWVzdC4gKi9cXG4gXFx0XFx0Z290byByZXBsYXk7XFxuIFxcdHJldHVybiBlcnI7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIyOjUxOjM5Ljc1NTM1MjI0MVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MzYwMzU3NTcwOTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX1NDSEVEXCIsXG4gICAgXCJORVRfQ0xTX0FDVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRjX2N0bF9jaGFpblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBlcnJvciBoYW5kbGluZyBhbmQgcmVwbGF5IGxvZ2ljIGZvciBuZXRsaW5rIGNoYWluIGNvbnRyb2wgb3BlcmF0aW9ucyBpbiB0Y19jdGxfY2hhaW4oKSAobmV0L3NjaGVkL2Nsc19hcGkuYyksIHJlc3RyaWN0aW5nIC1FQUdBSU4gcmVwbGF5cyBzdHJpY3RseSB0byBSVE1fTkVXQ0hBSU4gcmVxdWVzdHMuIFRoaXMgdG91Y2hlcyBjb3JlIG5ldHdvcmtpbmcgdHJhZmZpYyBjb250cm9sIGxvZ2ljIHJlYWNoYWJsZSB2aWEgcnRuZXRsaW5rIGZyb20gdW5wcml2aWxlZ2VkIG9yIHByaXZpbGVnZWQgdXNlciBuYW1lc3BhY2VzIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBlMmFlOTJhMDMxYjY0MzE2ZjEyYTUzN2JmZTg5ZWUyY2ZkMjM0ZTgyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgOCAyMjo1MTozOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9jbHNfYXBpLmMgYi9uZXQvc2NoZWQvY2xzX2FwaS5jXG5pbmRleCA5OTY2NzY2NjYxZDUwLi5jNDdkMmVlMTM2NDFkIDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL2Nsc19hcGkuY1xuKysrIGIvbmV0L3NjaGVkL2Nsc19hcGkuY1xuQEAgLTMyNTQsNyArMzI1NCw3IEBAIHN0YXRpYyBpbnQgdGNfY3RsX2NoYWluKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbixcbiBcdHRjZl9jaGFpbl9wdXQoY2hhaW4pO1xuIGVycm91dF9ibG9jazpcbiBcdHRjZl9ibG9ja19yZWxlYXNlKHEsIGJsb2NrLCB0cnVlKTtcbi1cdGlmIChlcnIgPT0gLUVBR0FJTilcbitcdGlmIChlcnIgPT0gLUVBR0FJTiBcdTAwMjZcdTAwMjYgbi1cdTAwM2VubG1zZ190eXBlID09IFJUTV9ORVdDSEFJTilcbiBcdFx0LyogUmVwbGF5IHRoZSByZXF1ZXN0LiAqL1xuIFx0XHRnb3RvIHJlcGxheTtcbiBcdHJldHVybiBlcnI7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQyMjo1MTozOS43NTUzNTQ4MTFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2MDA0MzQ4MjM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhpbmtpbmcgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgUGF0Y2g6IFVuZGVyc3RhbmRpbmcgdGhlIGB0Y19jdGxfY2hhaW4oKWAgTW9kaWZpY2F0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBkaWZmLiBGaXJzdCB0aGluZ3MgZmlyc3QsIGxldCdzIHplcm8gaW4gb24gdGhlIGtleSBhcmVhOiBgbmV0L3NjaGVkL2Nsc19hcGkuY2AsIHNwZWNpZmljYWxseSB0aGUgZnVuY3Rpb24gYHRjX2N0bF9jaGFpbigpYC4gVGhhdCdzIHdoZXJlIHRoZSBoZWFydCBvZiB0aGUgY2hhbmdlIGxpZXMuIEknbSBnb2luZyB0byBzdGFydCBieSBnZXR0aW5nIGEgY2xlYXIgcGljdHVyZSBvZiB3aGF0J3MgaGFwcGVuaW5nIHdpdGhpbiB0aGF0IGZ1bmN0aW9uLiBJJ2xsIHByb2JhYmx5IHJlYWNoIGZvciBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgdG8gcHVsbCB1cCB0aGUgZGVmaW5pdGlvbiBvZiBgdGNfY3RsX2NoYWluKClgIGluIHRoYXQgZmlsZS4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgaW1tZWRpYXRlIGNvbnRleHQuIEZyb20gdGhlcmUsIEkgY2FuIGJlZ2luIG15IGFuYWx5c2lzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODgyLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQyMjo1MTo0NS43NTk3MDY3MjhaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODUwMDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NjaGVkL2Nsc19hcGkuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMTUwLFxuICBcIkxpbmVDb3VudFwiOiAxMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzE1MDpcXHRyZXBsYXk6XFxuMzE1MTpcXHRcXHRxID0gTlVMTDtcXG4zMTUyOlxcdFxcdGVyciA9IG5sbXNnX3BhcnNlX2RlcHJlY2F0ZWQobiwgc2l6ZW9mKCp0KSwgdGNhLCBUQ0FfTUFYLFxcbjMxNTM6XFx0XFx0XFx0XFx0XFx0ICAgICBydG1fdGNhX3BvbGljeSwgZXh0YWNrKTtcXG4zMTU0OlxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbjMxNTU6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4zMTU2OlxcdFxcbjMxNTc6XFx0XFx0dCA9IG5sbXNnX2RhdGEobik7XFxuMzE1ODpcXHRcXHRwYXJlbnQgPSB0LVxcdTAwM2V0Y21fcGFyZW50O1xcbjMxNTk6XFx0XFx0Y2wgPSAwO1xcbjMxNjA6XFx0XFxuMzE2MTpcXHRcXHRibG9jayA9IHRjZl9ibG9ja19maW5kKG5ldCwgXFx1MDAyNnEsIFxcdTAwMjZwYXJlbnQsIFxcdTAwMjZjbCxcXG4zMTYyOlxcdFxcdFxcdFxcdCAgICAgICB0LVxcdTAwM2V0Y21faWZpbmRleCwgdC1cXHUwMDNldGNtX2Jsb2NrX2luZGV4LCBleHRhY2spO1xcbjMxNjM6XFx0XFx0aWYgKElTX0VSUihibG9jaykpXFxuMzE2NDpcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUihibG9jayk7XFxuMzE2NTpcXHRcXG4zMTY2OlxcdFxcdGNoYWluX2luZGV4ID0gbmxhX2dldF91MzJfZGVmYXVsdCh0Y2FbVENBX0NIQUlOXSwgMCk7XFxuMzE2NzpcXHRcXHRpZiAoY2hhaW5faW5kZXggXFx1MDAzZSBUQ19BQ1RfRVhUX1ZBTF9NQVNLKSB7XFxuMzE2ODpcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJTcGVjaWZpZWQgY2hhaW4gaW5kZXggZXhjZWVkcyB1cHBlciBsaW1pdFxcXCIpO1xcbjMxNjk6XFx0XFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4zMTcwOlxcdFxcdFxcdGdvdG8gZXJyb3V0X2Jsb2NrO1xcbjMxNzE6XFx0XFx0fVxcbjMxNzI6XFx0XFxuMzE3MzpcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZibG9jay1cXHUwMDNlbG9jayk7XFxuMzE3NDpcXHRcXHRjaGFpbiA9IHRjZl9jaGFpbl9sb29rdXAoYmxvY2ssIGNoYWluX2luZGV4KTtcXG4zMTc1OlxcdFxcdGlmIChuLVxcdTAwM2VubG1zZ190eXBlID09IFJUTV9ORVdDSEFJTikge1xcbjMxNzY6XFx0XFx0XFx0aWYgKGNoYWluKSB7XFxuMzE3NzpcXHRcXHRcXHRcXHRpZiAodGNmX2NoYWluX2hlbGRfYnlfYWN0c19vbmx5KGNoYWluKSkge1xcbjMxNzg6XFx0XFx0XFx0XFx0XFx0LyogVGhlIGNoYWluIGV4aXN0cyBvbmx5IGJlY2F1c2UgdGhlcmUgaXNcXG4zMTc5OlxcdFxcdFxcdFxcdFxcdCAqIHNvbWUgYWN0aW9uIHJlZmVyZW5jaW5nIGl0LlxcbjMxODA6XFx0XFx0XFx0XFx0XFx0ICovXFxuMzE4MTpcXHRcXHRcXHRcXHRcXHR0Y2ZfY2hhaW5faG9sZChjaGFpbik7XFxuMzE4MjpcXHRcXHRcXHRcXHR9IGVsc2Uge1xcbjMxODM6XFx0XFx0XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiRmlsdGVyIGNoYWluIGFscmVhZHkgZXhpc3RzXFxcIik7XFxuMzE4NDpcXHRcXHRcXHRcXHRcXHRlcnIgPSAtRUVYSVNUO1xcbjMxODU6XFx0XFx0XFx0XFx0XFx0Z290byBlcnJvdXRfYmxvY2tfbG9ja2VkO1xcbjMxODY6XFx0XFx0XFx0XFx0fVxcbjMxODc6XFx0XFx0XFx0fSBlbHNlIHtcXG4zMTg4OlxcdFxcdFxcdFxcdGlmICghKG4tXFx1MDAzZW5sbXNnX2ZsYWdzIFxcdTAwMjYgTkxNX0ZfQ1JFQVRFKSkge1xcbjMxODk6XFx0XFx0XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiTmVlZCBib3RoIFJUTV9ORVdDSEFJTiBhbmQgTkxNX0ZfQ1JFQVRFIHRvIGNyZWF0ZSBhIG5ldyBjaGFpblxcXCIpO1xcbjMxOTA6XFx0XFx0XFx0XFx0XFx0ZXJyID0gLUVOT0VOVDtcXG4zMTkxOlxcdFxcdFxcdFxcdFxcdGdvdG8gZXJyb3V0X2Jsb2NrX2xvY2tlZDtcXG4zMTkyOlxcdFxcdFxcdFxcdH1cXG4zMTkzOlxcdFxcdFxcdFxcdGNoYWluID0gdGNmX2NoYWluX2NyZWF0ZShibG9jaywgY2hhaW5faW5kZXgpO1xcbjMxOTQ6XFx0XFx0XFx0XFx0aWYgKCFjaGFpbikge1xcbjMxOTU6XFx0XFx0XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiRmFpbGVkIHRvIGNyZWF0ZSBmaWx0ZXIgY2hhaW5cXFwiKTtcXG4zMTk2OlxcdFxcdFxcdFxcdFxcdGVyciA9IC1FTk9NRU07XFxuMzE5NzpcXHRcXHRcXHRcXHRcXHRnb3RvIGVycm91dF9ibG9ja19sb2NrZWQ7XFxuMzE5ODpcXHRcXHRcXHRcXHR9XFxuMzE5OTpcXHRcXHRcXHR9XFxuMzIwMDpcXHRcXHR9IGVsc2Uge1xcbjMyMDE6XFx0XFx0XFx0aWYgKCFjaGFpbiB8fCB0Y2ZfY2hhaW5faGVsZF9ieV9hY3RzX29ubHkoY2hhaW4pKSB7XFxuMzIwMjpcXHRcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJDYW5ub3QgZmluZCBzcGVjaWZpZWQgZmlsdGVyIGNoYWluXFxcIik7XFxuMzIwMzpcXHRcXHRcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbjMyMDQ6XFx0XFx0XFx0XFx0Z290byBlcnJvdXRfYmxvY2tfbG9ja2VkO1xcbjMyMDU6XFx0XFx0XFx0fVxcbjMyMDY6XFx0XFx0XFx0dGNmX2NoYWluX2hvbGQoY2hhaW4pO1xcbjMyMDc6XFx0XFx0fVxcbjMyMDg6XFx0XFxuMzIwOTpcXHRcXHRpZiAobi1cXHUwMDNlbmxtc2dfdHlwZSA9PSBSVE1fTkVXQ0hBSU4pIHtcXG4zMjEwOlxcdFxcdFxcdC8qIE1vZGlmeWluZyBjaGFpbiByZXF1aXJlcyBob2xkaW5nIHBhcmVudCBibG9jayBsb2NrLiBJbiBjYXNlXFxuMzIxMTpcXHRcXHRcXHQgKiB0aGUgY2hhaW4gd2FzIHN1Y2Nlc3NmdWxseSBhZGRlZCwgdGFrZSBhIHJlZmVyZW5jZSB0byB0aGVcXG4zMjEyOlxcdFxcdFxcdCAqIGNoYWluLiBUaGlzIGVuc3VyZXMgdGhhdCBhbiBlbXB0eSBjaGFpbiBkb2VzIG5vdCBkaXNhcHBlYXIgYXRcXG4zMjEzOlxcdFxcdFxcdCAqIHRoZSBlbmQgb2YgdGhpcyBmdW5jdGlvbi5cXG4zMjE0OlxcdFxcdFxcdCAqL1xcbjMyMTU6XFx0XFx0XFx0dGNmX2NoYWluX2hvbGQoY2hhaW4pO1xcbjMyMTY6XFx0XFx0XFx0Y2hhaW4tXFx1MDAzZWV4cGxpY2l0bHlfY3JlYXRlZCA9IHRydWU7XFxuMzIxNzpcXHRcXHR9XFxuMzIxODpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmJsb2NrLVxcdTAwM2Vsb2NrKTtcXG4zMjE5OlxcdFxcbjMyMjA6XFx0XFx0c3dpdGNoIChuLVxcdTAwM2VubG1zZ190eXBlKSB7XFxuMzIyMTpcXHRcXHRjYXNlIFJUTV9ORVdDSEFJTjpcXG4zMjIyOlxcdFxcdFxcdGVyciA9IHRjX2NoYWluX3RtcGx0X2FkZChjaGFpbiwgbmV0LCB0Y2EsIGV4dGFjayk7XFxuMzIyMzpcXHRcXHRcXHRpZiAoZXJyKSB7XFxuMzIyNDpcXHRcXHRcXHRcXHR0Y2ZfY2hhaW5fcHV0X2V4cGxpY2l0bHlfY3JlYXRlZChjaGFpbik7XFxuMzIyNTpcXHRcXHRcXHRcXHRnb3RvIGVycm91dDtcXG4zMjI2OlxcdFxcdFxcdH1cXG4zMjI3OlxcdFxcbjMyMjg6XFx0XFx0XFx0dGNfY2hhaW5fbm90aWZ5KGNoYWluLCBOVUxMLCAwLCBOTE1fRl9DUkVBVEUgfCBOTE1fRl9FWENMLFxcbjMyMjk6XFx0XFx0XFx0XFx0XFx0UlRNX05FV0NIQUlOLCBmYWxzZSwgZXh0YWNrKTtcXG4zMjMwOlxcdFxcdFxcdGJyZWFrO1xcbjMyMzE6XFx0XFx0Y2FzZSBSVE1fREVMQ0hBSU46XFxuMzIzMjpcXHRcXHRcXHR0ZmlsdGVyX25vdGlmeV9jaGFpbihuZXQsIHNrYiwgYmxvY2ssIHEsIHBhcmVudCwgbixcXG4zMjMzOlxcdFxcdFxcdFxcdFxcdCAgICAgY2hhaW4sIFJUTV9ERUxURklMVEVSLCBleHRhY2spO1xcbjMyMzQ6XFx0XFx0XFx0LyogRmx1c2ggdGhlIGNoYWluIGZpcnN0IGFzIHRoZSB1c2VyIHJlcXVlc3RlZCBjaGFpbiByZW1vdmFsLiAqL1xcbjMyMzU6XFx0XFx0XFx0dGNmX2NoYWluX2ZsdXNoKGNoYWluLCB0cnVlKTtcXG4zMjM2OlxcdFxcdFxcdC8qIEluIGNhc2UgdGhlIGNoYWluIHdhcyBzdWNjZXNzZnVsbHkgZGVsZXRlZCwgcHV0IGEgcmVmZXJlbmNlXFxuMzIzNzpcXHRcXHRcXHQgKiB0byB0aGUgY2hhaW4gcHJldmlvdXNseSB0YWtlbiBkdXJpbmcgYWRkaXRpb24uXFxuMzIzODpcXHRcXHRcXHQgKi9cXG4zMjM5OlxcdFxcdFxcdHRjZl9jaGFpbl9wdXRfZXhwbGljaXRseV9jcmVhdGVkKGNoYWluKTtcXG4zMjQwOlxcdFxcdFxcdGJyZWFrO1xcbjMyNDE6XFx0XFx0Y2FzZSBSVE1fR0VUQ0hBSU46XFxuMzI0MjpcXHRcXHRcXHRlcnIgPSB0Y19jaGFpbl9ub3RpZnkoY2hhaW4sIHNrYiwgbi1cXHUwMDNlbmxtc2dfc2VxLFxcbjMyNDM6XFx0XFx0XFx0XFx0XFx0ICAgICAgbi1cXHUwMDNlbmxtc2dfZmxhZ3MsIG4tXFx1MDAzZW5sbXNnX3R5cGUsIHRydWUsIGV4dGFjayk7XFxuMzI0NDpcXHRcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4zMjQ1OlxcdFxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcIkZhaWxlZCB0byBzZW5kIGNoYWluIG5vdGlmeSBtZXNzYWdlXFxcIik7XFxuMzI0NjpcXHRcXHRcXHRicmVhaztcXG4zMjQ3OlxcdFxcdGRlZmF1bHQ6XFxuMzI0ODpcXHRcXHRcXHRlcnIgPSAtRU9QTk9UU1VQUDtcXG4zMjQ5OlxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcIlVuc3VwcG9ydGVkIG1lc3NhZ2UgdHlwZVxcXCIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQyMjo1MTo0NS43NTk5OTQ3NzlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo5Nzk2NTUzNzcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBwcmVzZW50ZWQgYXMgaWYgaXQgd2VyZSBteSBvd24gaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkRpdmluZyBEZWVwZXIgaW50byBgdGNfY3RsX2NoYWluYCoqXG5cbkFscmlnaHQsIEknbSBhdCBhIHBvaW50IHdoZXJlIEknbSBleGFtaW5pbmcgYSBzcGVjaWZpYyBjb250cm9sIHN0cnVjdHVyZSwgbGlrZWx5IHdpdGhpbiBhIHRyYWZmaWMgY29udHJvbCBzeXN0ZW0gb3IgYSBzaW1pbGFyIG5ldHdvcmsgbWFuYWdlbWVudCBjb250ZXh0LiBUaGUgcGhyYXNpbmcgXCJMZXQncyBzZWUgdGhlIHJlc3Qgb2YgYHRjX2N0bF9jaGFpbmBcIiBzdWdnZXN0cyBJJ3ZlIGFscmVhZHkgZW5nYWdlZCB3aXRoICpwYXJ0KiBvZiB0aGlzIHN0cnVjdHVyZSBhbmQgbm93IEknbSByZWFkeSB0byBkZWx2ZSBpbnRvIHRoZSByZW1haW5pbmcgZWxlbWVudHMuIEknbSBwcm9iYWJseSBsb29raW5nIGF0IGEgY2hhaW4gb2YgY29udHJvbCBlbGVtZW50cy4gSSdtIGFscmVhZHkgYXdhcmUgdGhhdCBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgdGhlIG90aGVyIGNvbnRyb2xzIGluIHRoaXMgY2hhaW4sIHNvIEkgd2FudCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgcmVzdCBvZiB0aGVtIGJlaGF2ZS5cblxuVGhpcyBjb3VsZCBtZWFuIEknbSB0cmFjaW5nIHRoZSBleGVjdXRpb24gZmxvdywgaWRlbnRpZnlpbmcgZGVwZW5kZW5jaWVzIGJldHdlZW4gZGlmZmVyZW50IGNvbnRyb2wgcG9pbnRzLCBvciBwZXJoYXBzIHRyeWluZyB0byBkZWJ1ZyBhbiB1bmV4cGVjdGVkIGJlaGF2aW9yLiBNeSBnb2FsIGlzIHRvIGFjaGlldmUgYW4gaG9saXN0aWMgdW5kZXJzdGFuZGluZyBvZiB0aGlzIGNoYWluOyBJIG5lZWQgdG8ga25vdyB0aGUgaW5kaXZpZHVhbCBjb21wb25lbnRzIGFuZCBob3cgdGhleSBpbnRlcmFjdCB0byBhY2hpZXZlIHNvbWUgZGVzaXJlZCBvdXRjb21lLiBJIG5lZWQgYSBicm9hZGVyIHZpZXcgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHdob2xlIHN5c3RlbSB3b3Jrcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDc2NywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMjI6NTE6NTUuNTU2NTUxM1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMzYwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc2NoZWQvY2xzX2FwaS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMyNTAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjMyNTA6XFx0XFx0XFx0Z290byBlcnJvdXQ7XFxuMzI1MTpcXHRcXHR9XFxuMzI1MjpcXHRcXG4zMjUzOlxcdGVycm91dDpcXG4zMjU0OlxcdFxcdHRjZl9jaGFpbl9wdXQoY2hhaW4pO1xcbjMyNTU6XFx0ZXJyb3V0X2Jsb2NrOlxcbjMyNTY6XFx0XFx0dGNmX2Jsb2NrX3JlbGVhc2UocSwgYmxvY2ssIHRydWUpO1xcbjMyNTc6XFx0XFx0aWYgKGVyciA9PSAtRUFHQUlOIFxcdTAwMjZcXHUwMDI2IG4tXFx1MDAzZW5sbXNnX3R5cGUgPT0gUlRNX05FV0NIQUlOKVxcbjMyNTg6XFx0XFx0XFx0LyogUmVwbGF5IHRoZSByZXF1ZXN0LiAqL1xcbjMyNTk6XFx0XFx0XFx0Z290byByZXBsYXk7XFxuMzI2MDpcXHRcXHRyZXR1cm4gZXJyO1xcbjMyNjE6XFx0XFxuMzI2MjpcXHRlcnJvdXRfYmxvY2tfbG9ja2VkOlxcbjMyNjM6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZibG9jay1cXHUwMDNlbG9jayk7XFxuMzI2NDpcXHRcXHRnb3RvIGVycm91dF9ibG9jaztcXG4zMjY1OlxcdH1cXG4zMjY2OlxcdFxcbjMyNjc6XFx0LyogY2FsbGVkIHdpdGggUlROTCAqL1xcbjMyNjg6XFx0c3RhdGljIGludCB0Y19kdW1wX2NoYWluKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG4zMjY5OlxcdHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMjI6NTE6NTUuNTU2NzU4MDJaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTM2ODg2NjQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYHRjX2N0bF9jaGFpbmAgRnVuY3Rpb24qKlxuXG5Pa2F5LCBzbyBgdGNfY3RsX2NoYWluYCBsb29rcyBsaWtlIGl0J3MgdGhlIGNvcmUgb2Ygc29tZXRoaW5nIHJlbGF0ZWQgdG8gdHJhZmZpYyBjb250cm9sIGNoYWlucywgYW5kIGl0J3MgY29tbXVuaWNhdGluZyB0aHJvdWdoIHJ0bmV0bGluay4gU3BlY2lmaWNhbGx5LCBJIHNlZSBpdCByZXNwb25kcyB0byBgUlRNX05FV0NIQUlOYCwgYFJUTV9ERUxDSEFJTmAsIGFuZCBgUlRNX0dFVENIQUlOYCBtZXNzYWdlcy4gVGhhdCdzIGdvb2Q7IGl0IGNvbmZpcm1zIG15IGluaXRpYWwgaHVuY2ggYWJvdXQgaG93IGl0J3MgaW50ZXJhY3Rpbmcgd2l0aCB0aGUga2VybmVsJ3MgbmV0d29ya2luZyBzdGFjay4gTm93LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gcGlucG9pbnQgZXhhY3RseSAqd2hlcmUqIHRoaXMgYHRjX2N0bF9jaGFpbmAgZnVuY3Rpb24gaXMgcmVnaXN0ZXJlZC4gVGhhdCBpbmZvcm1hdGlvbiBpcyBjcnVjaWFsIHRvIHVuZGVyc3RhbmRpbmcgaXRzIHJvbGUsIGNvbnRleHQgd2l0aGluIHRoZSBsYXJnZXIgdGMgZnJhbWV3b3JrLCBhbmQgYW55IHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuIExldCdzIHNlZSBpZiBJIGNhbiB0cmFjZSB0aGF0IHJlZ2lzdHJhdGlvbi4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MzI3LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQyMjo1MTo1Ny40OTM2NDYyNjVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODM2MTExMzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGNfY3RsX2NoYWluXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvY2xzX2FwaS5jPTMxMjM9c3RhdGljIHZvaWQgdGNfY2hhaW5fdG1wbHRfZGVsKGNvbnN0IHN0cnVjdCB0Y2ZfcHJvdG9fb3BzICp0bXBsdF9vcHMsXFxuLS1cXG5uZXQvc2NoZWQvY2xzX2FwaS5jLTMxMzUtXFxubmV0L3NjaGVkL2Nsc19hcGkuYzozMTM2OnN0YXRpYyBpbnQgdGNfY3RsX2NoYWluKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbixcXG5uZXQvc2NoZWQvY2xzX2FwaS5jLTMxMzctXFx0XFx0XFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxubmV0L3NjaGVkL2Nsc19hcGkuYz00MTI1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcnRubF9tc2dfaGFuZGxlciB0Y19maWx0ZXJfcnRubF9tc2dfaGFuZGxlcnNbXSBfX2luaXRjb25zdCA9IHtcXG4tLVxcbm5ldC9zY2hlZC9jbHNfYXBpLmMtNDEzMS1cXHQgLmR1bXBpdCA9IHRjX2R1bXBfdGZpbHRlciwgLmZsYWdzID0gUlROTF9GTEFHX0RPSVRfVU5MT0NLRUR9LFxcbm5ldC9zY2hlZC9jbHNfYXBpLmM6NDEzMjpcXHR7Lm1zZ3R5cGUgPSBSVE1fTkVXQ0hBSU4sIC5kb2l0ID0gdGNfY3RsX2NoYWlufSxcXG5uZXQvc2NoZWQvY2xzX2FwaS5jOjQxMzM6XFx0ey5tc2d0eXBlID0gUlRNX0RFTENIQUlOLCAuZG9pdCA9IHRjX2N0bF9jaGFpbn0sXFxubmV0L3NjaGVkL2Nsc19hcGkuYzo0MTM0OlxcdHsubXNndHlwZSA9IFJUTV9HRVRDSEFJTiwgLmRvaXQgPSB0Y19jdGxfY2hhaW4sXFxubmV0L3NjaGVkL2Nsc19hcGkuYy00MTM1LVxcdCAuZHVtcGl0ID0gdGNfZHVtcF9jaGFpbn0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIyOjUxOjU3LjU3NzI2NjEwNFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxODQwNTE1ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIGB0Y19jdGxfY2hhaW5gIEhhbmRsZXIqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgdGNfY3RsX2NoYWluYCwgYW5kIGl0J3MgcHJldHR5IGNsZWFyIHRoaXMgaXMgdGhlIHdvcmtob3JzZSBmb3IgbWFuYWdpbmcgdHJhZmZpYyBjb250cm9sIGNoYWlucy4gU3BlY2lmaWNhbGx5LCBpdCBoYW5kbGVzIHRoZSBSVE1fTkVXQ0hBSU4sIFJUTV9ERUxDSEFJTiwgYW5kIFJUTV9HRVRDSEFJTiBuZXRsaW5rIG1lc3NhZ2VzLiBHaXZlbiB0aGF0IGl0J3MgbmVzdGxlZCBpbiBgbmV0L3NjaGVkL2Nsc19hcGkuY2AsIHRoaXMgaXMgY29yZSBuZXR3b3JraW5nIGFuZCBkaXJlY3RseSByZWxhdGVzIHRvIHRoZSB0cmFmZmljIGNvbnRyb2wgbWVjaGFuaXNtcy4gIEl0J3MgYSBjcml0aWNhbCBjb21wb25lbnQgZm9yIGludGVyYWN0aW5nIHdpdGggdGhlIHVzZXJzcGFjZSB0aHJvdWdoIG5ldGxpbmsgKHNwZWNpZmljYWxseSBydG5ldGxpbmspLlxuXG5Ob3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMuIFRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBzZWUgd2hpY2ggS2NvbmZpZyBvcHRpb25zIGdvdmVybiB0aGUgaW5jbHVzaW9uIG9mIGBuZXQvc2NoZWQvY2xzX2FwaS5jYC4gVGltZSB0byBkaXZlIGludG8gdGhlIE1ha2VmaWxlIG9yIEtjb25maWcgZmlsZXMgd2l0aGluIHRoZSBgbmV0L3NjaGVkL2AgZGlyZWN0b3J5LiBUaGF0IHdpbGwgaWxsdW1pbmF0ZSB0aGUgbmVjZXNzYXJ5IGtlcm5lbCBjb25maWd1cmF0aW9ucyB0byBlbmFibGUgdGhpcyBmdW5jdGlvbmFsaXR5LiBJIGhhdmUgdG8gZmlndXJlIG91dCB0aGUgYnVpbGQtdGltZSByZXF1aXJlbWVudHMgdG8gY29uZmlybSB0aGF0IHRoZSBjaGFpbiBmZWF0dXJlcyBhcmUgYXBwcm9wcmlhdGVseSBlbmFibGVkIGluIHRoZSBkZXBsb3llZCBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU5MzQsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMjI6NTE6NTkuNzYxMzJaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNjEzOTM3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjbHNfYXBpXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvTWFrZWZpbGU9OT1vYmotJChDT05GSUdfTkVUX1NDSEVEKVxcdFxcdCs9IHNjaF9hcGkubyBzY2hfYmxhY2tob2xlLm9cXG5uZXQvc2NoZWQvTWFrZWZpbGU6MTA6b2JqLSQoQ09ORklHX05FVF9DTFMpXFx0XFx0Kz0gY2xzX2FwaS5vXFxubmV0L3NjaGVkL01ha2VmaWxlLTExLW9iai0kKENPTkZJR19ORVRfQ0xTX0FDVClcXHQrPSBhY3RfYXBpLm9cXG4tLVxcbm5ldC9zY2hlZC9jbHNfYXBpLmMtMi0vKlxcbm5ldC9zY2hlZC9jbHNfYXBpLmM6MzogKiBuZXQvc2NoZWQvY2xzX2FwaS5jXFx0UGFja2V0IGNsYXNzaWZpZXIgQVBJLlxcbm5ldC9zY2hlZC9jbHNfYXBpLmMtNC0gKlxcbi0tXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYz0yMzU4PXN0YXRpYyBpbnQgZmxfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYixcXG4tLVxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMjQzMC1cXHRcXHRcXHQvKiBGaWx0ZXIgd2l0aCBzcGVjaWZpZWQgaGFuZGxlIHdhcyBjb25jdXJyZW50bHlcXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjI0MzE6XFx0XFx0XFx0ICogaW5zZXJ0ZWQgYWZ0ZXIgaW5pdGlhbCBjaGVjayBpbiBjbHNfYXBpLiBUaGlzIGlzIG5vdFxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMjQzMi1cXHRcXHRcXHQgKiBuZWNlc3NhcmlseSBhbiBlcnJvciBpZiBOTE1fRl9FWENMIGlzIG5vdCBzZXQgaW5cXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjI0MzM6XFx0XFx0XFx0ICogbWVzc2FnZSBmbGFncy4gUmV0dXJuaW5nIEVBR0FJTiB3aWxsIGNhdXNlIGNsc19hcGkgdG9cXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTI0MzQtXFx0XFx0XFx0ICogdHJ5IHRvIHVwZGF0ZSBjb25jdXJyZW50bHkgaW5zZXJ0ZWQgcnVsZS5cXG4tLVxcbm5ldC9zY2hlZC9zY2hfYXBpLmMtNTctICAgLSBcXFwic2NoZWR1bGVyc1xcXCIsIHdoaWNoIHNwbGl0IGFsbCB0aGUgcGFja2V0cyB0byBcXFwidHJhZmZpYyBjbGFzc2VzXFxcIixcXG5uZXQvc2NoZWQvc2NoX2FwaS5jOjU4OiAgICAgdXNpbmcgXFxcInBhY2tldCBjbGFzc2lmaWVyc1xcXCIgKGxvb2sgYXQgY2xzX2FwaS5jKVxcbm5ldC9zY2hlZC9zY2hfYXBpLmMtNTktXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIyOjUxOjU5Ljg3NzQ2NTUyOVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNzYwNTcxMTcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCB3ZW50OlxuXG4qKkV4YW1pbmluZyB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gZm9yIE5ldHdvcmsgVHJhZmZpYyBDb250cm9sKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpbmQgc29tZXRoaW5nIHJlbGF0ZWQgdG8gbmV0d29yayB0cmFmZmljIGNvbnRyb2wsIHNwZWNpZmljYWxseSB0aGUgYE5FVF9DTFNgIG9wdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRpdmUgaW50byB0aGUga2VybmVsJ3MgY29uZmlndXJhdGlvbiBmaWxlcy4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgdGhlIHBsYWNlIHRvIHN0YXJ0IGlzIGxpa2VseSBgbmV0L3NjaGVkL0tjb25maWdgLiBUaGF0J3Mgd2hlcmUgSSB3b3VsZCBleHBlY3QgdG8gZmluZCBvcHRpb25zIHJlbGF0ZWQgdG8gdGhlIHNjaGVkdWxpbmcgYW5kIGNsYXNzaWZpY2F0aW9uIG9mIG5ldHdvcmsgcGFja2V0cy4gTGV0J3Mgc2VlIHdoYXQncyBpbiB0aGVyZS4gSSdtIGFzc3VtaW5nIHRoYXQgc2luY2UgSSBoYXZlIGJlZW4gd29ya2luZyB3aXRoIGtlcm5lbCBjb25maWd1cmF0aW9ucyB0aGF0IEkgd2lsbCBiZSBhYmxlIHRvIGludGVycHJldCBpdCBhbmQgZmluZCB0aGUgcmVsZXZhbnQgc2VjdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NjcwMCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIyOjUyOjAxLjYzODA0MDQ3WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTY1NjQwNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkVUX0NMU1xcXFxiXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvS2NvbmZpZz00Nzk9Y29tbWVudCBcXFwiQ2xhc3NpZmljYXRpb25cXFwiXFxubmV0L3NjaGVkL0tjb25maWctNDgwLVxcbm5ldC9zY2hlZC9LY29uZmlnOjQ4MTpjb25maWcgTkVUX0NMU1xcbm5ldC9zY2hlZC9LY29uZmlnLTQ4Mi1cXHRib29sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIyOjUyOjAxLjY5OTcwMTcxN1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0OTU0MjU2MjMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIE5FVF9DTFMgRGVwZW5kZW5jeSoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpcyB0byBkZXRlcm1pbmUgdGhlIGNhdXNhbCByZWxhdGlvbnNoaXAgYmV0d2VlbiBgTkVUX0NMU2AgYW5kIGBORVRfU0NIRURgLiBJcyBgTkVUX0NMU2Agc2ltcGx5IGEgZGVwZW5kZW50IG9wdGlvbiwgb3IgZG9lcyBpdCByZXF1aXJlIHNvbWUgb3RoZXIgdW5kZXJseWluZyBtZWNoYW5pc20gdG8gYmUgZW5hYmxlZD8gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHNlbGVjdC9lbmFibGUgcmVsYXRpb25zaGlwLCBpZiBhbnksIGFuZCBpZiBgTkVUX0NMU2AgaGFzIGEgaGFyZCBkZXBlbmRlbmN5IG9uIGBORVRfU0NIRURgLiBJcyBgTkVUX0NMU2AgYSBmZWF0dXJlIHRoYXQgaXMgc2VsZWN0aXZlbHkgb3IgY29uZGl0aW9uYWxseSBlbmFibGVkIG9yIGRvZXMgYE5FVF9DTFNgIGRlcGVuZCBvbiBgTkVUX1NDSEVEYD9cblxuXG4iLCJJbnB1dFRva2VucyI6Njk1NCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIyOjUyOjA2LjY1Mzk2MTU1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyOTY1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc2NoZWQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA0NzUsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0NzU6XFx0XFx0ZGVmYXVsdCBcXFwic2ZxXFxcIiBpZiBERUZBVUxUX1NGUVxcbiA0NzY6XFx0XFx0ZGVmYXVsdCBcXFwicGZpZm9fZmFzdFxcXCJcXG4gNDc3OlxcdGVuZGlmXFxuIDQ3ODpcXHRcXG4gNDc5OlxcdGNvbW1lbnQgXFxcIkNsYXNzaWZpY2F0aW9uXFxcIlxcbiA0ODA6XFx0XFxuIDQ4MTpcXHRjb25maWcgTkVUX0NMU1xcbiA0ODI6XFx0XFx0Ym9vbFxcbiA0ODM6XFx0XFxuIDQ4NDpcXHRjb25maWcgTkVUX0NMU19CQVNJQ1xcbiA0ODU6XFx0XFx0dHJpc3RhdGUgXFxcIkVsZW1lbnRhcnkgY2xhc3NpZmljYXRpb24gKEJBU0lDKVxcXCJcXG4gNDg2OlxcdFxcdHNlbGVjdCBORVRfQ0xTXFxuIDQ4NzpcXHRcXHRoZWxwXFxuIDQ4ODpcXHRcXHQgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gYmUgYWJsZSB0byBjbGFzc2lmeSBwYWNrZXRzIHVzaW5nXFxuIDQ4OTpcXHRcXHQgIG9ubHkgZXh0ZW5kZWQgbWF0Y2hlcyBhbmQgYWN0aW9ucy5cXG4gNDkwOlxcdFxcbiA0OTE6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXFxuIDQ5MjpcXHRcXHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBjbHNfYmFzaWMuXFxuIDQ5MzpcXHRcXG4gNDk0OlxcdGNvbmZpZyBORVRfQ0xTX1JPVVRFNFxcbiA0OTU6XFx0XFx0dHJpc3RhdGUgXFxcIlJvdXRpbmcgZGVjaXNpb24gKFJPVVRFKVxcXCJcXG4gNDk2OlxcdFxcdGRlcGVuZHMgb24gSU5FVFxcbiA0OTc6XFx0XFx0c2VsZWN0IElQX1JPVVRFX0NMQVNTSURcXG4gNDk4OlxcdFxcdHNlbGVjdCBORVRfQ0xTXFxuIDQ5OTpcXHRcXHRoZWxwXFxuIDUwMDpcXHRcXHQgIElmIHlvdSBzYXkgWSBoZXJlLCB5b3Ugd2lsbCBiZSBhYmxlIHRvIGNsYXNzaWZ5IHBhY2tldHNcXG4gNTAxOlxcdFxcdCAgYWNjb3JkaW5nIHRvIHRoZSByb3V0ZSB0YWJsZSBlbnRyeSB0aGV5IG1hdGNoZWQuXFxuIDUwMjpcXHRcXG4gNTAzOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxcbiA1MDQ6XFx0XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgY2xzX3JvdXRlLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQyMjo1MjowNi42NTQwOTM2NloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODgzMDY0NzU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqSW52ZXN0aWdhdGluZyBOZXR3b3JrIFNjaGVkdWxlciBDb25maWd1cmF0aW9uKipcblxuUmlnaHQsIHNvIEknbSBkaXZpbmcgaW50byB0aGUga2VybmVsIGNvbmZpZyBoZXJlLiBGaXJzdCwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCdzIHJlbGF0ZWQgdG8gdGhlIG5ldHdvcmsgc2NoZWR1bGVyIChgTkVUX1NDSEVEYCkuIE9rYXksIGFjY29yZGluZyB0byBteSBub3RlcywgdGhhdCBsaWtlbHkgbGl2ZXMgaW4gYG5ldC9zY2hlZC9LY29uZmlnYC4gU28sIHRoZSBsb2dpY2FsIG5leHQgc3RlcCBpcyB0byBhY3R1YWxseSBnbyBhbmQgY2hlY2sgd2hhdCBgTkVUX1NDSEVEYCBpcyAqZGVmaW5lZCogYXMgaW4gdGhlIGBuZXQvc2NoZWQvS2NvbmZpZ2AgZmlsZS4gVGhhdCdzIHdoZXJlIEknbGwgZ2V0IHRoZSByZWFsIGxvdy1kb3duIG9uIHRoZSBkZXBlbmRlbmNpZXMsIG9wdGlvbnMsIGFuZCB3aGF0J3MgYWN0dWFsbHkgdW5kZXIgdGhpcyBjb25maWcgdW1icmVsbGEuIExldCdzIHNlZSB3aGF0J3MgYWN0dWFsbHkgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc1NTEsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIyOjUyOjA4LjUzNzE2MDg3NVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjM3NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NjaGVkL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgVHJhZmZpYyBjb250cm9sIGNvbmZpZ3VyYXRpb24uXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdG1lbnVjb25maWcgTkVUX1NDSEVEXFxuICAgNzpcXHRcXHRib29sIFxcXCJRb1MgYW5kL29yIGZhaXIgcXVldWVpbmdcXFwiXFxuICAgODpcXHRcXHRzZWxlY3QgTkVUX1NDSF9GSUZPXFxuICAgOTpcXHRcXHRoZWxwXFxuICAxMDpcXHRcXHQgIFdoZW4gdGhlIGtlcm5lbCBoYXMgc2V2ZXJhbCBwYWNrZXRzIHRvIHNlbmQgb3V0IG92ZXIgYSBuZXR3b3JrXFxuICAxMTpcXHRcXHQgIGRldmljZSwgaXQgaGFzIHRvIGRlY2lkZSB3aGljaCBvbmVzIHRvIHNlbmQgZmlyc3QsIHdoaWNoIG9uZXMgdG9cXG4gIDEyOlxcdFxcdCAgZGVsYXksIGFuZCB3aGljaCBvbmVzIHRvIGRyb3AuIFRoaXMgaXMgdGhlIGpvYiBvZiB0aGUgcXVldWVpbmdcXG4gIDEzOlxcdFxcdCAgZGlzY2lwbGluZXMsIHNldmVyYWwgZGlmZmVyZW50IGFsZ29yaXRobXMgZm9yIGhvdyB0byBkbyB0aGlzXFxuICAxNDpcXHRcXHQgIFxcXCJmYWlybHlcXFwiIGhhdmUgYmVlbiBwcm9wb3NlZC5cXG4gIDE1OlxcdFxcbiAgMTY6XFx0XFx0ICBJZiB5b3Ugc2F5IE4gaGVyZSwgeW91IHdpbGwgZ2V0IHRoZSBzdGFuZGFyZCBwYWNrZXQgc2NoZWR1bGVyLCB3aGljaFxcbiAgMTc6XFx0XFx0ICBpcyBhIEZJRk8gKGZpcnN0IGNvbWUsIGZpcnN0IHNlcnZlZCkuIElmIHlvdSBzYXkgWSBoZXJlLCB5b3Ugd2lsbCBiZVxcbiAgMTg6XFx0XFx0ICBhYmxlIHRvIGNob29zZSBmcm9tIGFtb25nIHNldmVyYWwgYWx0ZXJuYXRpdmUgYWxnb3JpdGhtcyB3aGljaCBjYW5cXG4gIDE5OlxcdFxcdCAgdGhlbiBiZSBhdHRhY2hlZCB0byBkaWZmZXJlbnQgbmV0d29yayBkZXZpY2VzLiBUaGlzIGlzIHVzZWZ1bCBmb3JcXG4gIDIwOlxcdFxcdCAgZXhhbXBsZSBpZiBzb21lIG9mIHlvdXIgbmV0d29yayBkZXZpY2VzIGFyZSByZWFsIHRpbWUgZGV2aWNlcyB0aGF0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIyOjUyOjA4LjUzNzI4Njk0NVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzkzNjQ4ODAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGZyb20gYW4gZXhwZXJ0J3MgcGVyc3BlY3RpdmU6XG5cbioqVGhpbmtpbmcgVGhyb3VnaCBOZXR3b3JrIENsYXNzaWZpZXIgU2VsZWN0aW9uKipcblxuUmlnaHQsIHNvIHdlJ3JlIHRhbGtpbmcgYWJvdXQgbmV0d29yayBjbGFzc2lmaWVycyBoZXJlLCBhbmQgSSBzZWUgd2UndmUgZ290IGBORVRfQ0xTYCBhcyB0aGUgb3ZlcmFyY2hpbmcgY2F0ZWdvcnkuIFRoaXMgZ2V0cyBwaWNrZWQgYnkgdmFyaW91cyBzcGVjaWZpYyBjbGFzc2lmaWVycywgdGhpbmdzIGxpa2UgYE5FVF9DTFNfQkFTSUNgLCBgTkVUX0NMU19GTE9XRVJgLCBhbmQgYE5FVF9DTFNfTUFUQ0hBTExgLiBPaCwgYW5kIGxldCdzIG5vdCBmb3JnZXQgYE5FVF9DTFNfQUNUYCwgd2hpY2ggc3VnZ2VzdHMgd2UncmUgZGVhbGluZyB3aXRoIGFjdGlvbnMgYWxvbmdzaWRlIHRoZSBjbGFzc2lmaWNhdGlvbi5cblxuTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgcmVsYXRlLiBJdCBsb29rcyBsaWtlIGBORVRfU0NIRURgIChzY2hlZHVsZXIpIGFuZCBgTkVUX0NMU19BQ1RgIGFyZSBrZXkgcGxheWVycyBoZXJlLCBtYXliZSBpbnRlcmFjdGluZyB3aXRoIGBORVRfQ0xTYC4gSSBzaG91bGQgZGlnIGludG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIHRvIHNlZSBob3cgdGhlc2UgdGhpbmdzIGFyZSB3aXJlZCB0b2dldGhlci5cblxuU28sIGxldCdzIHNlZSwgdGhlIG5leHQgc3RlcCBpcyB0byBxdWlja2x5IGNoZWNrIGBuZXQvc2NoZWQvS2NvbmZpZ2AuIEkgbmVlZCB0byBjb25maXJtIGlmIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVmZXJlbmNlIGBzZWxlY3QgTkVUX0NMU2AgYW5kIGhvdyB0aGV5IGluZmx1ZW5jZSB0aGUgaW5jbHVzaW9uIG9yIGV4Y2x1c2lvbiBvZiBgTkVUX0NMU2AgaXRzZWxmLiBJJ20gYWZ0ZXIgdGhlIGRlcGVuZGVuY2llcyBhbmQgYW55IG9yZGVyaW5nIG9mIHRoZXNlIG9wdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgwODIsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIyOjUyOjEwLjkzMDkzODI2OFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjgzNDY1NjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VsZWN0IE5FVF9DTFNcXFxcYlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjaGVkL0tjb25maWc9NDg0PWNvbmZpZyBORVRfQ0xTX0JBU0lDXFxubmV0L3NjaGVkL0tjb25maWctNDg1LVxcdHRyaXN0YXRlIFxcXCJFbGVtZW50YXJ5IGNsYXNzaWZpY2F0aW9uIChCQVNJQylcXFwiXFxubmV0L3NjaGVkL0tjb25maWc6NDg2OlxcdHNlbGVjdCBORVRfQ0xTXFxubmV0L3NjaGVkL0tjb25maWctNDg3LVxcdGhlbHBcXG4tLVxcbm5ldC9zY2hlZC9LY29uZmlnPTQ5ND1jb25maWcgTkVUX0NMU19ST1VURTRcXG4tLVxcbm5ldC9zY2hlZC9LY29uZmlnLTQ5Ny1cXHRzZWxlY3QgSVBfUk9VVEVfQ0xBU1NJRFxcbm5ldC9zY2hlZC9LY29uZmlnOjQ5ODpcXHRzZWxlY3QgTkVUX0NMU1xcbm5ldC9zY2hlZC9LY29uZmlnLTQ5OS1cXHRoZWxwXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZz01MDY9Y29uZmlnIE5FVF9DTFNfRldcXG5uZXQvc2NoZWQvS2NvbmZpZy01MDctXFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBtYXJrIChGVylcXFwiXFxubmV0L3NjaGVkL0tjb25maWc6NTA4OlxcdHNlbGVjdCBORVRfQ0xTXFxubmV0L3NjaGVkL0tjb25maWctNTA5LVxcdGhlbHBcXG4tLVxcbm5ldC9zY2hlZC9LY29uZmlnPTUxNj1jb25maWcgTkVUX0NMU19VMzJcXG5uZXQvc2NoZWQvS2NvbmZpZy01MTctXFx0dHJpc3RhdGUgXFxcIlVuaXZlcnNhbCAzMmJpdCBjb21wYXJpc29ucyB3LyBoYXNoaW5nIChVMzIpXFxcIlxcbm5ldC9zY2hlZC9LY29uZmlnOjUxODpcXHRzZWxlY3QgTkVUX0NMU1xcbm5ldC9zY2hlZC9LY29uZmlnLTUxOS1cXHRoZWxwXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZz01Mzk9Y29uZmlnIE5FVF9DTFNfRkxPV1xcbm5ldC9zY2hlZC9LY29uZmlnLTU0MC1cXHR0cmlzdGF0ZSBcXFwiRmxvdyBjbGFzc2lmaWVyXFxcIlxcbm5ldC9zY2hlZC9LY29uZmlnOjU0MTpcXHRzZWxlY3QgTkVUX0NMU1xcbm5ldC9zY2hlZC9LY29uZmlnLTU0Mi1cXHRoZWxwXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZz01NTA9Y29uZmlnIE5FVF9DTFNfQ0dST1VQXFxubmV0L3NjaGVkL0tjb25maWctNTUxLVxcdHRyaXN0YXRlIFxcXCJDb250cm9sIEdyb3VwIENsYXNzaWZpZXJcXFwiXFxubmV0L3NjaGVkL0tjb25maWc6NTUyOlxcdHNlbGVjdCBORVRfQ0xTXFxubmV0L3NjaGVkL0tjb25maWctNTUzLVxcdHNlbGVjdCBDR1JPVVBfTkVUX0NMQVNTSURcXG4tLVxcbm5ldC9zY2hlZC9LY29uZmlnPTU2Mj1jb25maWcgTkVUX0NMU19CUEZcXG5uZXQvc2NoZWQvS2NvbmZpZy01NjMtXFx0dHJpc3RhdGUgXFxcIkJQRi1iYXNlZCBjbGFzc2lmaWVyXFxcIlxcbm5ldC9zY2hlZC9LY29uZmlnOjU2NDpcXHRzZWxlY3QgTkVUX0NMU1xcbm5ldC9zY2hlZC9LY29uZmlnLTU2NS1cXHRoZWxwXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZz01NzI9Y29uZmlnIE5FVF9DTFNfRkxPV0VSXFxubmV0L3NjaGVkL0tjb25maWctNTczLVxcdHRyaXN0YXRlIFxcXCJGbG93ZXIgY2xhc3NpZmllclxcXCJcXG5uZXQvc2NoZWQvS2NvbmZpZzo1NzQ6XFx0c2VsZWN0IE5FVF9DTFNcXG5uZXQvc2NoZWQvS2NvbmZpZy01NzUtXFx0aGVscFxcbi0tXFxubmV0L3NjaGVkL0tjb25maWc9NTgyPWNvbmZpZyBORVRfQ0xTX01BVENIQUxMXFxubmV0L3NjaGVkL0tjb25maWctNTgzLVxcdHRyaXN0YXRlIFxcXCJNYXRjaC1hbGwgY2xhc3NpZmllclxcXCJcXG5uZXQvc2NoZWQvS2NvbmZpZzo1ODQ6XFx0c2VsZWN0IE5FVF9DTFNcXG5uZXQvc2NoZWQvS2NvbmZpZy01ODUtXFx0aGVscFxcbi0tXFxubmV0L3NjaGVkL0tjb25maWc9NTkyPWNvbmZpZyBORVRfRU1BVENIXFxubmV0L3NjaGVkL0tjb25maWctNTkzLVxcdGJvb2wgXFxcIkV4dGVuZGVkIE1hdGNoZXNcXFwiXFxubmV0L3NjaGVkL0tjb25maWc6NTk0OlxcdHNlbGVjdCBORVRfQ0xTXFxubmV0L3NjaGVkL0tjb25maWctNTk1LVxcdGhlbHBcXG4tLVxcbm5ldC9zY2hlZC9LY29uZmlnPTcwMj1jb25maWcgTkVUX0NMU19BQ1RcXG5uZXQvc2NoZWQvS2NvbmZpZy03MDMtXFx0Ym9vbCBcXFwiQWN0aW9uc1xcXCJcXG5uZXQvc2NoZWQvS2NvbmZpZzo3MDQ6XFx0c2VsZWN0IE5FVF9DTFNcXG5uZXQvc2NoZWQvS2NvbmZpZy03MDUtXFx0c2VsZWN0IE5FVF9YR1JFU1NcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMjI6NTI6MTAuOTk5MjkwMDcyWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ2NjY4MzkwMTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUYXJnZXQgQXNzZXNzbWVudDogYHRjX2N0bF9jaGFpbmAgaW4gbmV0L3NjaGVkL2Nsc19hcGkuYyoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgdGhlIGB0Y19jdGxfY2hhaW4oKWAgZnVuY3Rpb24gd2l0aGluIGBuZXQvc2NoZWQvY2xzX2FwaS5jYC4gSXQncyBkZWFsaW5nIHdpdGggaG93IHRoZSBjb2RlIGhhbmRsZXMgYC1FQUdBSU5gIGVycm9ycywgc3BlY2lmaWNhbGx5IGluIHRoZSBjb250ZXh0IG9mIE5ldGxpbmsgbWVzc2FnZXMuIEJlZm9yZSwgdGhlIGNvZGUgdW5jb25kaXRpb25hbGx5IHJldHJpZWQgYSBgZ290byByZXBsYXk7YCBmb3IgKmFsbCogYG5sbXNnX3R5cGVzYCB3aGVuIGl0IGhpdCBhbiBgLUVBR0FJTmAuIE5vdywgaXQgb25seSByZXBsYXlzIGZvciBgUlRNX05FV0NIQUlOYC4gVGhlIHByb2JsZW0gd2FzIHRoYXQgaWYgYHRjZl9jaGFpbl9kdW1wYCwgYHRjX2NoYWluX25vdGlmeWAsIG9yIHNvbWV0aGluZyBzaW1pbGFyIHJldHVybmVkIGAtRUFHQUlOYCAob3IgYE5MX1NFVF9FUlJfTVNHYCkgZm9yIGFueXRoaW5nICpvdGhlciogdGhhbiBhIGBORVdDSEFJTmAgbWVzc2FnZSwgaXQgd291bGQgbG9vcCBvciByZXBsYXksIHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gYWxsIHNvcnRzIG9mIG5hc3R5IGlzc3VlcyDigJMgaW5maW5pdGUgbG9vcHMsIHlvdSBuYW1lIGl0LlxuXG5UaGlua2luZyB0aGlzIHRocm91Z2gsIHRoZSBjaGFuZ2UgaXMgcHJldHR5IGZvY3VzZWQg4oCTIGl0J3MgYWxsIGFib3V0IGNvbnRyb2wgZmxvdyBpbiB0aGlzIGNvcmUgbmV0d29ya2luZyBzdWJzeXN0ZW0uIEFuZCwgY3J1Y2lhbGx5LCB0aGlzIGB0Y19jdGxfY2hhaW5gIGZ1bmN0aW9uIGlzIGZ1bGx5IGFjY2Vzc2libGUgaW4gdHlwaWNhbCBRRU1VL1ZNIGVudmlyb25tZW50cyB2aWEgTmV0bGluay9ydG5ldGxpbmsgbWVzc2FnZXMuIFNvLCB5ZWFoLCB0aGlzIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy4gSSdtIGdvaW5nIHRvIHNldCBgV29ydGhGdXp6aW5nID0gdHJ1ZWAuXG5cbk5vdywgZm9yIHRoZSBmdXp6aW5nIHN0cmF0ZWd5Li4uIGxldCdzIHNlZSwgbXkgKmZvY3VzIHN5bWJvbCogaGVyZSBpcyBvYnZpb3VzbHkgYHRjX2N0bF9jaGFpbmAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgcmVsZXZhbnQsIGJ1dCBub3QgbmVjZXNzYXJpbHkgdWJpcXVpdG91cywgZnVuY3Rpb25zIHRvIGNvbnNpZGVyLiBEaWdnaW5nIGRlZXBlciwgaXQgbG9va3MgbGlrZSBgdGNfY3RsX2NoYWluYCBpcyB0aGUgbWFpbiB0aGluZyBiZWluZyBtb2RpZmllZCwgYnV0IGl0IGNhbGxzIGFuZCBpcyByZWxhdGVkIHRvIHNvbWUgb3RoZXIgZnVuY3Rpb25zOiBgdGNfY2hhaW5fdG1wbHRfYWRkYCwgYHRjX2NoYWluX25vdGlmeWAsIGB0Y2ZfY2hhaW5fZmx1c2hgLCBgdGNmX2NoYWluX2NyZWF0ZWAsIGB0Y2ZfY2hhaW5fbG9va3VwYCwgYHRjZl9jaGFpbl9ob2xkYCwgYW5kIGB0Y2ZfY2hhaW5fcHV0YC4gSSBzaG91bGQga2VlcCB0aG9zZSBpbiBtaW5kLlxuXG5CZWZvcmUgSSBnbyBmdXJ0aGVyLCBsZXQncyB2ZXJpZnkgdGhlIGNvbmZpZ3M6IGBORVRfU0NIRURgIGhhcyB0byBiZSBlbmFibGVkLCBhbmQgZWl0aGVyIGBORVRfQ0xTX0FDVGAsIGBORVRfQ0xTX0JBU0lDYCwgb3IgYE5FVF9DTFNfRkxPV0VSYC5cblxuT2theSwgZG91YmxlLWNoZWNraW5nIHRoZSBzeW1ib2wgbmFtZSBhbmQgdGhvc2UgY29uZmlndXJhdGlvbnMgb25lIGxhc3QgdGltZS4uLiBZdXAuIEV2ZXJ5dGhpbmcgY2hlY2tzIG91dC4gVGltZSB0byBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5Mjc5LCJPdXRwdXRUb2tlbnMiOjEyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQyMjo1MjoxNS42NjYxMzE3NDZaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjQ5NzUwNDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9TQ0hFRFwiLFxuICAgIFwiTkVUX0NMU19BQ1RcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0Y19jdGxfY2hhaW5cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgZXJyb3IgaGFuZGxpbmcgYW5kIHJlcGxheSBsb2dpYyBmb3IgbmV0bGluayBjaGFpbiBjb250cm9sIG9wZXJhdGlvbnMgaW4gdGNfY3RsX2NoYWluKCkgKG5ldC9zY2hlZC9jbHNfYXBpLmMpLCByZXN0cmljdGluZyAtRUFHQUlOIHJlcGxheXMgc3RyaWN0bHkgdG8gUlRNX05FV0NIQUlOIHJlcXVlc3RzLiBUaGlzIHRvdWNoZXMgY29yZSBuZXR3b3JraW5nIHRyYWZmaWMgY29udHJvbCBsb2dpYyByZWFjaGFibGUgdmlhIHJ0bmV0bGluayBmcm9tIHVucHJpdmlsZWdlZCBvciBwcml2aWxlZ2VkIHVzZXIgbmFtZXNwYWNlcyBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX1NDSEVEXCIsXG4gICAgXCJORVRfQ0xTX0FDVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRjX2N0bF9jaGFpblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBlcnJvciBoYW5kbGluZyBhbmQgcmVwbGF5IGxvZ2ljIGZvciBuZXRsaW5rIGNoYWluIGNvbnRyb2wgb3BlcmF0aW9ucyBpbiB0Y19jdGxfY2hhaW4oKSAobmV0L3NjaGVkL2Nsc19hcGkuYyksIHJlc3RyaWN0aW5nIC1FQUdBSU4gcmVwbGF5cyBzdHJpY3RseSB0byBSVE1fTkVXQ0hBSU4gcmVxdWVzdHMuIFRoaXMgdG91Y2hlcyBjb3JlIG5ldHdvcmtpbmcgdHJhZmZpYyBjb250cm9sIGxvZ2ljIHJlYWNoYWJsZSB2aWEgcnRuZXRsaW5rIGZyb20gdW5wcml2aWxlZ2VkIG9yIHByaXZpbGVnZWQgdXNlciBuYW1lc3BhY2VzIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMjI6NTI6MTUuNzkxMTEzNDMzWiIsIlNlcSI6MjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjA2NTM5NDY0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIyOjUyOjE1Ljc5MTY2MzA1NFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjIyMDY0ODM4OTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgcmVwbGF5IGxvZ2ljIGluIGB0Y19jdGxfY2hhaW4oKWAgYnkgZW5zdXJpbmcgdGhhdCBhIHJldHJ5IG9uIGAtRUFHQUlOYCBvbmx5IG9jY3VycyB3aGVuIGBuLVxcdTAwM2VubG1zZ190eXBlID09IFJUTV9ORVdDSEFJTmAuIFRoaXMgY2hhbmdlIG9ubHkgYWZmZWN0cyBjb250cm9sIGZsb3cgYW5kIGVycm9yIGhhbmRsaW5nIGR1cmluZyBuZXRsaW5rIFRDIGNoYWluIG1hbmFnZW1lbnQgdG8gcHJldmVudCBpbmFwcHJvcHJpYXRlIHJlcXVlc3QgcmVwbGF5IGZvciBvdGhlciBuZXRsaW5rIG1lc3NhZ2UgdHlwZXMgKHN1Y2ggYXMgYFJUTV9HRVRDSEFJTmAgb3IgYFJUTV9ERUxDSEFJTmApLiBJdCBkb2VzIG5vdCBhbGxvY2F0ZSBuZXcgbWVtb3J5LCBtb2RpZnkgc3RydWN0IGluaXRpYWxpemF0aW9uLCBhbHRlciBkYXRhIGNvcGllcyB0byB1c2VyIHNwYWNlLCBvciBpbnRyb2R1Y2Ugcmlza3Mgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIFRoZXJlZm9yZSwgc3RhbmRhcmQgS0FTQU4vc2FuaXRpemVycyBhcmUgc3VmZmljaWVudCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZTJhZTkyYTAzMWI2NDMxNmYxMmE1MzdiZmU4OWVlMmNmZDIzNGU4MlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDggMjI6NTE6MzggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvY2xzX2FwaS5jIGIvbmV0L3NjaGVkL2Nsc19hcGkuY1xuaW5kZXggOTk2Njc2NjY2MWQ1MC4uYzQ3ZDJlZTEzNjQxZCAxMDA2NDRcbi0tLSBhL25ldC9zY2hlZC9jbHNfYXBpLmNcbisrKyBiL25ldC9zY2hlZC9jbHNfYXBpLmNcbkBAIC0zMjU0LDcgKzMyNTQsNyBAQCBzdGF0aWMgaW50IHRjX2N0bF9jaGFpbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm4sXG4gXHR0Y2ZfY2hhaW5fcHV0KGNoYWluKTtcbiBlcnJvdXRfYmxvY2s6XG4gXHR0Y2ZfYmxvY2tfcmVsZWFzZShxLCBibG9jaywgdHJ1ZSk7XG4tXHRpZiAoZXJyID09IC1FQUdBSU4pXG4rXHRpZiAoZXJyID09IC1FQUdBSU4gXHUwMDI2XHUwMDI2IG4tXHUwMDNlbmxtc2dfdHlwZSA9PSBSVE1fTkVXQ0hBSU4pXG4gXHRcdC8qIFJlcGxheSB0aGUgcmVxdWVzdC4gKi9cbiBcdFx0Z290byByZXBsYXk7XG4gXHRyZXR1cm4gZXJyO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMjI6NTI6MTUuNzkxNjYzOTE0WiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjg2NjE0Nzg0NDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgc2l0dWF0aW9uOlxuXG4qKkluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgQ29kZSBDaGFuZ2UqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gc3RhcnQgYnkgZXhhbWluaW5nIGBuZXQvc2NoZWQvY2xzX2FwaS5jYC4gVG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlLCBJIG5lZWQgdG8gc2VlIGV4YWN0bHkgd2hlcmUgaXQncyB0b3VjaGluZyB0aGlzIGNyaXRpY2FsIGZpbGUuIEknbGwgbmVlZCB0byByYXBpZGx5IHVuZGVyc3RhbmQgaXRzIGNvbnRleHQgd2l0aGluIHRoZSBleGlzdGluZyBjb2RlLiBNeSBmaXJzdCBtb3ZlIHdpbGwgYmUgdG8gdXNlIGEgdG9vbCBsaWtlIGByZWFkLWZpbGVgIChpZiBhdmFpbGFibGUgaW4gdGhpcyBlbnZpcm9ubWVudCkgb3IsIGlmIG5vdCwgSSdsbCBsZXZlcmFnZSBgZ3JlcHBlcmAgKG9yIHNpbWlsYXIpIHRvIHF1aWNrbHkgcGlucG9pbnQgdGhlIGFmZmVjdGVkIGxpbmVzIGFuZCBzdXJyb3VuZGluZyBjb2RlIGluIGBuZXQvc2NoZWQvY2xzX2FwaS5jYC4gVGhpcyBjb250ZXh0dWFsIHVuZGVyc3RhbmRpbmcgaXMgY3J1Y2lhbCBiZWZvcmUgSSBjYW4gbWFrZSBhbnkgaW5mb3JtZWQganVkZ2VtZW50cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA5NCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMjI6NTI6MjQuNDUzMTUzNzcxWiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0ODM3MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc2NoZWQvY2xzX2FwaS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMyMzAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjMyMzA6XFx0XFx0XFx0YnJlYWs7XFxuMzIzMTpcXHRcXHRjYXNlIFJUTV9ERUxDSEFJTjpcXG4zMjMyOlxcdFxcdFxcdHRmaWx0ZXJfbm90aWZ5X2NoYWluKG5ldCwgc2tiLCBibG9jaywgcSwgcGFyZW50LCBuLFxcbjMyMzM6XFx0XFx0XFx0XFx0XFx0ICAgICBjaGFpbiwgUlRNX0RFTFRGSUxURVIsIGV4dGFjayk7XFxuMzIzNDpcXHRcXHRcXHQvKiBGbHVzaCB0aGUgY2hhaW4gZmlyc3QgYXMgdGhlIHVzZXIgcmVxdWVzdGVkIGNoYWluIHJlbW92YWwuICovXFxuMzIzNTpcXHRcXHRcXHR0Y2ZfY2hhaW5fZmx1c2goY2hhaW4sIHRydWUpO1xcbjMyMzY6XFx0XFx0XFx0LyogSW4gY2FzZSB0aGUgY2hhaW4gd2FzIHN1Y2Nlc3NmdWxseSBkZWxldGVkLCBwdXQgYSByZWZlcmVuY2VcXG4zMjM3OlxcdFxcdFxcdCAqIHRvIHRoZSBjaGFpbiBwcmV2aW91c2x5IHRha2VuIGR1cmluZyBhZGRpdGlvbi5cXG4zMjM4OlxcdFxcdFxcdCAqL1xcbjMyMzk6XFx0XFx0XFx0dGNmX2NoYWluX3B1dF9leHBsaWNpdGx5X2NyZWF0ZWQoY2hhaW4pO1xcbjMyNDA6XFx0XFx0XFx0YnJlYWs7XFxuMzI0MTpcXHRcXHRjYXNlIFJUTV9HRVRDSEFJTjpcXG4zMjQyOlxcdFxcdFxcdGVyciA9IHRjX2NoYWluX25vdGlmeShjaGFpbiwgc2tiLCBuLVxcdTAwM2VubG1zZ19zZXEsXFxuMzI0MzpcXHRcXHRcXHRcXHRcXHQgICAgICBuLVxcdTAwM2VubG1zZ19mbGFncywgbi1cXHUwMDNlbmxtc2dfdHlwZSwgdHJ1ZSwgZXh0YWNrKTtcXG4zMjQ0OlxcdFxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbjMyNDU6XFx0XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiRmFpbGVkIHRvIHNlbmQgY2hhaW4gbm90aWZ5IG1lc3NhZ2VcXFwiKTtcXG4zMjQ2OlxcdFxcdFxcdGJyZWFrO1xcbjMyNDc6XFx0XFx0ZGVmYXVsdDpcXG4zMjQ4OlxcdFxcdFxcdGVyciA9IC1FT1BOT1RTVVBQO1xcbjMyNDk6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiVW5zdXBwb3J0ZWQgbWVzc2FnZSB0eXBlXFxcIik7XFxuMzI1MDpcXHRcXHRcXHRnb3RvIGVycm91dDtcXG4zMjUxOlxcdFxcdH1cXG4zMjUyOlxcdFxcbjMyNTM6XFx0ZXJyb3V0OlxcbjMyNTQ6XFx0XFx0dGNmX2NoYWluX3B1dChjaGFpbik7XFxuMzI1NTpcXHRlcnJvdXRfYmxvY2s6XFxuMzI1NjpcXHRcXHR0Y2ZfYmxvY2tfcmVsZWFzZShxLCBibG9jaywgdHJ1ZSk7XFxuMzI1NzpcXHRcXHRpZiAoZXJyID09IC1FQUdBSU4gXFx1MDAyNlxcdTAwMjYgbi1cXHUwMDNlbmxtc2dfdHlwZSA9PSBSVE1fTkVXQ0hBSU4pXFxuMzI1ODpcXHRcXHRcXHQvKiBSZXBsYXkgdGhlIHJlcXVlc3QuICovXFxuMzI1OTpcXHRcXHRcXHRnb3RvIHJlcGxheTtcXG4zMjYwOlxcdFxcdHJldHVybiBlcnI7XFxuMzI2MTpcXHRcXG4zMjYyOlxcdGVycm91dF9ibG9ja19sb2NrZWQ6XFxuMzI2MzpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmJsb2NrLVxcdTAwM2Vsb2NrKTtcXG4zMjY0OlxcdFxcdGdvdG8gZXJyb3V0X2Jsb2NrO1xcbjMyNjU6XFx0fVxcbjMyNjY6XFx0XFxuMzI2NzpcXHQvKiBjYWxsZWQgd2l0aCBSVE5MICovXFxuMzI2ODpcXHRzdGF0aWMgaW50IHRjX2R1bXBfY2hhaW4oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbjMyNjk6XFx0e1xcbjMyNzA6XFx0XFx0c3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2tiLVxcdTAwM2Vzayk7XFxuMzI3MTpcXHRcXHRzdHJ1Y3QgbmxhdHRyICp0Y2FbVENBX01BWCArIDFdO1xcbjMyNzI6XFx0XFx0c3RydWN0IFFkaXNjICpxID0gTlVMTDtcXG4zMjczOlxcdFxcdHN0cnVjdCB0Y2ZfYmxvY2sgKmJsb2NrO1xcbjMyNzQ6XFx0XFx0c3RydWN0IHRjbXNnICp0Y20gPSBubG1zZ19kYXRhKGNiLVxcdTAwM2VubGgpO1xcbjMyNzU6XFx0XFx0c3RydWN0IHRjZl9jaGFpbiAqY2hhaW47XFxuMzI3NjpcXHRcXHRsb25nIGluZGV4X3N0YXJ0O1xcbjMyNzc6XFx0XFx0bG9uZyBpbmRleDtcXG4zMjc4OlxcdFxcdGludCBlcnI7XFxuMzI3OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMjI6NTI6MjQuNDUzNTA1NDUyWiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyNzIwOTMwNjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBgdGNfY3RsX2NoYWluYCBhbmQgUmVwbGF5IExhYmVsaW5nKipcblxuUmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGUgZ3V0cyBvZiBgdGNfY3RsX2NoYWluYC4gTXkgaW5pdGlhbCBmb2N1cyBpcyBwaW5wb2ludGluZyB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGUgcmVwbGF5IGxhYmVsIG1lY2hhbmlzbSBhbmQgc2NlbmFyaW9zIHdoZXJlIGBlcnIgPSAtRUFHQUlOYCBwb3BzIHVwLiBJIG5lZWQgdG8gdHJhY2UgdGhlIGNvZGUgcGF0aCBiYWNrIHRvIHdoZXJlIGEgcmV0cnkgaXMgdHJpZ2dlcmVkLCBzcGVjaWZpY2FsbHkgaW4gcmVsYXRpb24gdG8gaG93IHRoZSByZXBsYXkgbGFiZWwgaXMgaGFuZGxlZC4gSSBzdXNwZWN0IHRoZXJlJ3MgYSBkZWxpY2F0ZSBkYW5jZSBoYXBwZW5pbmcgdGhlcmUsIGFuZCBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGVyZSdzIGEgcmFjZSBjb25kaXRpb24gb3Igc29tZSBzdWJ0bGUgaW50ZXJhY3Rpb24gbGVhZGluZyB0byB1bmV4cGVjdGVkIC1FQUdBSU4gZXJyb3JzLiBXZSBuZWVkIHRvIHNlZSBpZiBpdCdzIGEgdHJhbnNpZW50IGlzc3VlLCBvciB3aGV0aGVyIHRoZXJlIGlzIGEgY29yZSBwcm9ibGVtIHJlbGF0ZWQgdG8gc2VxdWVuY2luZyBvciBsb2NraW5nIHdpdGhpbiB0aGUgcmVwbGF5IGxvZ2ljLiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgcG90ZW50aWFsIGZvciBkb3VibGUtZnJlZXMgb3IgaW5jb3JyZWN0IHN0YXRlIG1hbmFnZW1lbnQgYXJvdW5kIHRoZSBsYWJlbHMgYXMgd2VsbCwgZXNwZWNpYWxseSBhcyB0aGV5IHJlbGF0ZSB0byBjb25jdXJyZW50IGFjY2VzcywgaWYgYXBwbGljYWJsZS4gVGltZSB0byBkaWcgaW4gYW5kIGZvbGxvdyB0aGF0IGVycm9yIGNvZGUhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxMTQsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIyOjUyOjI2LjcyNTYwMjYxWiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxNDYxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc2NoZWQvY2xzX2FwaS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMxNzAsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjMxNzA6XFx0XFx0XFx0Z290byBlcnJvdXRfYmxvY2s7XFxuMzE3MTpcXHRcXHR9XFxuMzE3MjpcXHRcXG4zMTczOlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNmJsb2NrLVxcdTAwM2Vsb2NrKTtcXG4zMTc0OlxcdFxcdGNoYWluID0gdGNmX2NoYWluX2xvb2t1cChibG9jaywgY2hhaW5faW5kZXgpO1xcbjMxNzU6XFx0XFx0aWYgKG4tXFx1MDAzZW5sbXNnX3R5cGUgPT0gUlRNX05FV0NIQUlOKSB7XFxuMzE3NjpcXHRcXHRcXHRpZiAoY2hhaW4pIHtcXG4zMTc3OlxcdFxcdFxcdFxcdGlmICh0Y2ZfY2hhaW5faGVsZF9ieV9hY3RzX29ubHkoY2hhaW4pKSB7XFxuMzE3ODpcXHRcXHRcXHRcXHRcXHQvKiBUaGUgY2hhaW4gZXhpc3RzIG9ubHkgYmVjYXVzZSB0aGVyZSBpc1xcbjMxNzk6XFx0XFx0XFx0XFx0XFx0ICogc29tZSBhY3Rpb24gcmVmZXJlbmNpbmcgaXQuXFxuMzE4MDpcXHRcXHRcXHRcXHRcXHQgKi9cXG4zMTgxOlxcdFxcdFxcdFxcdFxcdHRjZl9jaGFpbl9ob2xkKGNoYWluKTtcXG4zMTgyOlxcdFxcdFxcdFxcdH0gZWxzZSB7XFxuMzE4MzpcXHRcXHRcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJGaWx0ZXIgY2hhaW4gYWxyZWFkeSBleGlzdHNcXFwiKTtcXG4zMTg0OlxcdFxcdFxcdFxcdFxcdGVyciA9IC1FRVhJU1Q7XFxuMzE4NTpcXHRcXHRcXHRcXHRcXHRnb3RvIGVycm91dF9ibG9ja19sb2NrZWQ7XFxuMzE4NjpcXHRcXHRcXHRcXHR9XFxuMzE4NzpcXHRcXHRcXHR9IGVsc2Uge1xcbjMxODg6XFx0XFx0XFx0XFx0aWYgKCEobi1cXHUwMDNlbmxtc2dfZmxhZ3MgXFx1MDAyNiBOTE1fRl9DUkVBVEUpKSB7XFxuMzE4OTpcXHRcXHRcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJOZWVkIGJvdGggUlRNX05FV0NIQUlOIGFuZCBOTE1fRl9DUkVBVEUgdG8gY3JlYXRlIGEgbmV3IGNoYWluXFxcIik7XFxuMzE5MDpcXHRcXHRcXHRcXHRcXHRlcnIgPSAtRU5PRU5UO1xcbjMxOTE6XFx0XFx0XFx0XFx0XFx0Z290byBlcnJvdXRfYmxvY2tfbG9ja2VkO1xcbjMxOTI6XFx0XFx0XFx0XFx0fVxcbjMxOTM6XFx0XFx0XFx0XFx0Y2hhaW4gPSB0Y2ZfY2hhaW5fY3JlYXRlKGJsb2NrLCBjaGFpbl9pbmRleCk7XFxuMzE5NDpcXHRcXHRcXHRcXHRpZiAoIWNoYWluKSB7XFxuMzE5NTpcXHRcXHRcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJGYWlsZWQgdG8gY3JlYXRlIGZpbHRlciBjaGFpblxcXCIpO1xcbjMxOTY6XFx0XFx0XFx0XFx0XFx0ZXJyID0gLUVOT01FTTtcXG4zMTk3OlxcdFxcdFxcdFxcdFxcdGdvdG8gZXJyb3V0X2Jsb2NrX2xvY2tlZDtcXG4zMTk4OlxcdFxcdFxcdFxcdH1cXG4zMTk5OlxcdFxcdFxcdH1cXG4zMjAwOlxcdFxcdH0gZWxzZSB7XFxuMzIwMTpcXHRcXHRcXHRpZiAoIWNoYWluIHx8IHRjZl9jaGFpbl9oZWxkX2J5X2FjdHNfb25seShjaGFpbikpIHtcXG4zMjAyOlxcdFxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcIkNhbm5vdCBmaW5kIHNwZWNpZmllZCBmaWx0ZXIgY2hhaW5cXFwiKTtcXG4zMjAzOlxcdFxcdFxcdFxcdGVyciA9IC1FSU5WQUw7XFxuMzIwNDpcXHRcXHRcXHRcXHRnb3RvIGVycm91dF9ibG9ja19sb2NrZWQ7XFxuMzIwNTpcXHRcXHRcXHR9XFxuMzIwNjpcXHRcXHRcXHR0Y2ZfY2hhaW5faG9sZChjaGFpbik7XFxuMzIwNzpcXHRcXHR9XFxuMzIwODpcXHRcXG4zMjA5OlxcdFxcdGlmIChuLVxcdTAwM2VubG1zZ190eXBlID09IFJUTV9ORVdDSEFJTikge1xcbjMyMTA6XFx0XFx0XFx0LyogTW9kaWZ5aW5nIGNoYWluIHJlcXVpcmVzIGhvbGRpbmcgcGFyZW50IGJsb2NrIGxvY2suIEluIGNhc2VcXG4zMjExOlxcdFxcdFxcdCAqIHRoZSBjaGFpbiB3YXMgc3VjY2Vzc2Z1bGx5IGFkZGVkLCB0YWtlIGEgcmVmZXJlbmNlIHRvIHRoZVxcbjMyMTI6XFx0XFx0XFx0ICogY2hhaW4uIFRoaXMgZW5zdXJlcyB0aGF0IGFuIGVtcHR5IGNoYWluIGRvZXMgbm90IGRpc2FwcGVhciBhdFxcbjMyMTM6XFx0XFx0XFx0ICogdGhlIGVuZCBvZiB0aGlzIGZ1bmN0aW9uLlxcbjMyMTQ6XFx0XFx0XFx0ICovXFxuMzIxNTpcXHRcXHRcXHR0Y2ZfY2hhaW5faG9sZChjaGFpbik7XFxuMzIxNjpcXHRcXHRcXHRjaGFpbi1cXHUwMDNlZXhwbGljaXRseV9jcmVhdGVkID0gdHJ1ZTtcXG4zMjE3OlxcdFxcdH1cXG4zMjE4OlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2YmxvY2stXFx1MDAzZWxvY2spO1xcbjMyMTk6XFx0XFxuMzIyMDpcXHRcXHRzd2l0Y2ggKG4tXFx1MDAzZW5sbXNnX3R5cGUpIHtcXG4zMjIxOlxcdFxcdGNhc2UgUlRNX05FV0NIQUlOOlxcbjMyMjI6XFx0XFx0XFx0ZXJyID0gdGNfY2hhaW5fdG1wbHRfYWRkKGNoYWluLCBuZXQsIHRjYSwgZXh0YWNrKTtcXG4zMjIzOlxcdFxcdFxcdGlmIChlcnIpIHtcXG4zMjI0OlxcdFxcdFxcdFxcdHRjZl9jaGFpbl9wdXRfZXhwbGljaXRseV9jcmVhdGVkKGNoYWluKTtcXG4zMjI1OlxcdFxcdFxcdFxcdGdvdG8gZXJyb3V0O1xcbjMyMjY6XFx0XFx0XFx0fVxcbjMyMjc6XFx0XFxuMzIyODpcXHRcXHRcXHR0Y19jaGFpbl9ub3RpZnkoY2hhaW4sIE5VTEwsIDAsIE5MTV9GX0NSRUFURSB8IE5MTV9GX0VYQ0wsXFxuMzIyOTpcXHRcXHRcXHRcXHRcXHRSVE1fTkVXQ0hBSU4sIGZhbHNlLCBleHRhY2spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQyMjo1MjoyNi43MjYwMjA5ODFaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTkxNDk3MTAwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgQ29kZWJhc2UqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDogSSdtIGRpdmluZyBpbnRvIHRoZSBgdGNfY3RsX2NoYWluYCBmdW5jdGlvbi4gSXQncyB0aGUgc3RhcnRpbmcgcG9pbnQuIEkgbmVlZCB0byBnZXQgYSBoaWdoLWxldmVsIHZpZXcgb2YgaG93IHRoaXMgdGhpbmcgaXMgc3RydWN0dXJlZC4gSSdtIHByb2JhYmx5IGxvb2tpbmcgYXQgdGhlIGZ1bmN0aW9uIHNpZ25hdHVyZSwgdGhlIGluaXRpYWwgdmFyaWFibGUgZGVjbGFyYXRpb25zLCBhbmQgdGhlIGZpcnN0IGZldyBsaW5lcyBvZiBsb2dpYy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBpbnB1dHMgaXQncyB0YWtpbmcgYW5kIHdoYXQgdGhlIGltbWVkaWF0ZSBnb2FscyBvZiB0aGUgZnVuY3Rpb24gYXJlLiBJcyBpdCBwYXJzaW5nIGFuIGlucHV0IHN0cmluZz8gSW5pdGlhbGl6aW5nIHNvbWUgZGF0YSBzdHJ1Y3R1cmVzPyBTZXR0aW5nIHVwIHNvbWUgYmFzaWMgY29uZmlndXJhdGlvbj8gVW5kZXJzdGFuZGluZyB0aGUgdmVyeSBiZWdpbm5pbmcgaXMga2V5IHRvIG1ha2luZyBzZW5zZSBvZiB0aGUgZW50aXJlIGZsb3cuIFRoaXMgaXMgd2hlcmUgSSBiZWdpbiB0byBmb3JtdWxhdGUgbXkgbWVudGFsIG1vZGVsLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MzM3LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQyMjo1MjoyOC42NDA5OTYwOTZaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM2NTQxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zY2hlZC9jbHNfYXBpLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzEyNSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzEyNTpcXHR7XFxuMzEyNjpcXHRcXHQvKiBJZiB0ZW1wbGF0ZSBvcHMgYXJlIHNldCwgbm8gd29yayB0byBkbyBmb3IgdXMuICovXFxuMzEyNzpcXHRcXHRpZiAoIXRtcGx0X29wcylcXG4zMTI4OlxcdFxcdFxcdHJldHVybjtcXG4zMTI5OlxcdFxcbjMxMzA6XFx0XFx0dG1wbHRfb3BzLVxcdTAwM2V0bXBsdF9kZXN0cm95KHRtcGx0X3ByaXYpO1xcbjMxMzE6XFx0XFx0bW9kdWxlX3B1dCh0bXBsdF9vcHMtXFx1MDAzZW93bmVyKTtcXG4zMTMyOlxcdH1cXG4zMTMzOlxcdFxcbjMxMzQ6XFx0LyogQWRkL2RlbGV0ZS9nZXQgYSBjaGFpbiAqL1xcbjMxMzU6XFx0XFxuMzEzNjpcXHRzdGF0aWMgaW50IHRjX2N0bF9jaGFpbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm4sXFxuMzEzNzpcXHRcXHRcXHRcXHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuMzEzODpcXHR7XFxuMzEzOTpcXHRcXHRzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChza2ItXFx1MDAzZXNrKTtcXG4zMTQwOlxcdFxcdHN0cnVjdCBubGF0dHIgKnRjYVtUQ0FfTUFYICsgMV07XFxuMzE0MTpcXHRcXHRzdHJ1Y3QgdGNtc2cgKnQ7XFxuMzE0MjpcXHRcXHR1MzIgcGFyZW50O1xcbjMxNDM6XFx0XFx0dTMyIGNoYWluX2luZGV4O1xcbjMxNDQ6XFx0XFx0c3RydWN0IFFkaXNjICpxO1xcbjMxNDU6XFx0XFx0c3RydWN0IHRjZl9jaGFpbiAqY2hhaW47XFxuMzE0NjpcXHRcXHRzdHJ1Y3QgdGNmX2Jsb2NrICpibG9jaztcXG4zMTQ3OlxcdFxcdHVuc2lnbmVkIGxvbmcgY2w7XFxuMzE0ODpcXHRcXHRpbnQgZXJyO1xcbjMxNDk6XFx0XFxuMzE1MDpcXHRyZXBsYXk6XFxuMzE1MTpcXHRcXHRxID0gTlVMTDtcXG4zMTUyOlxcdFxcdGVyciA9IG5sbXNnX3BhcnNlX2RlcHJlY2F0ZWQobiwgc2l6ZW9mKCp0KSwgdGNhLCBUQ0FfTUFYLFxcbjMxNTM6XFx0XFx0XFx0XFx0XFx0ICAgICBydG1fdGNhX3BvbGljeSwgZXh0YWNrKTtcXG4zMTU0OlxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbjMxNTU6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4zMTU2OlxcdFxcbjMxNTc6XFx0XFx0dCA9IG5sbXNnX2RhdGEobik7XFxuMzE1ODpcXHRcXHRwYXJlbnQgPSB0LVxcdTAwM2V0Y21fcGFyZW50O1xcbjMxNTk6XFx0XFx0Y2wgPSAwO1xcbjMxNjA6XFx0XFxuMzE2MTpcXHRcXHRibG9jayA9IHRjZl9ibG9ja19maW5kKG5ldCwgXFx1MDAyNnEsIFxcdTAwMjZwYXJlbnQsIFxcdTAwMjZjbCxcXG4zMTYyOlxcdFxcdFxcdFxcdCAgICAgICB0LVxcdTAwM2V0Y21faWZpbmRleCwgdC1cXHUwMDNldGNtX2Jsb2NrX2luZGV4LCBleHRhY2spO1xcbjMxNjM6XFx0XFx0aWYgKElTX0VSUihibG9jaykpXFxuMzE2NDpcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUihibG9jayk7XFxuMzE2NTpcXHRcXG4zMTY2OlxcdFxcdGNoYWluX2luZGV4ID0gbmxhX2dldF91MzJfZGVmYXVsdCh0Y2FbVENBX0NIQUlOXSwgMCk7XFxuMzE2NzpcXHRcXHRpZiAoY2hhaW5faW5kZXggXFx1MDAzZSBUQ19BQ1RfRVhUX1ZBTF9NQVNLKSB7XFxuMzE2ODpcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJTcGVjaWZpZWQgY2hhaW4gaW5kZXggZXhjZWVkcyB1cHBlciBsaW1pdFxcXCIpO1xcbjMxNjk6XFx0XFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4zMTcwOlxcdFxcdFxcdGdvdG8gZXJyb3V0X2Jsb2NrO1xcbjMxNzE6XFx0XFx0fVxcbjMxNzI6XFx0XFxuMzE3MzpcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZibG9jay1cXHUwMDNlbG9jayk7XFxuMzE3NDpcXHRcXHRjaGFpbiA9IHRjZl9jaGFpbl9sb29rdXAoYmxvY2ssIGNoYWluX2luZGV4KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMjI6NTI6MjguNjQxMjM1NTc2WiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMwMzIzNDAyNDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgLUVBR0FJTmAgUmVwbGF5IGluIGB0Y19jdGxfY2hhaW5gKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJbiBgdGNfY3RsX2NoYWluYCwgSSBzZWUgdGhpcyBqdW1wIGJhY2sgdG8gYHJlcGxheWAgd2hlbiBgZXJyID09IC1FQUdBSU5gLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMsIHdoZXJlIGRvZXMgYGVycmAgKmJlY29tZSogYC1FQUdBSU5gIHdpdGhpbiB0aGlzIGZ1bmN0aW9uPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcG90ZW50aWFsIGVkZ2UgY2FzZXMgaGVyZS4gSXQgbG9va3MgbGlrZSBpdCBjYW4gb3JpZ2luYXRlIGZyb20gYHRjX2NoYWluX3RtcGx0X2FkZGAg4oCTIHdoaWNoIGlzIG9ubHkgY2FsbGVkIGlmIGl0J3MgYSBgUlRNX05FV0NIQUlOYCBtZXNzYWdlIOKAkyBvciBmcm9tIGB0Y19jaGFpbl9ub3RpZnlgLCB3aGljaCBpcyBpbnZvbHZlZCBpbiBgUlRNX0dFVENIQUlOYCByZXF1ZXN0cy5cblxuVGhlIGNydXggb2YgdGhlIGlzc3VlIGlzIHRoaXM6IGlmIGB0Y19jaGFpbl9ub3RpZnlgIHdlcmUgdG8gc29tZWhvdyByZXR1cm4gYC1FQUdBSU5gLCBwb3RlbnRpYWxseSBkdXJpbmcgYSBuZXRsaW5rIG5vdGlmaWNhdGlvbiwgdGhlbiB0aGF0IFwicmVwbGF5XCIgbGFiZWwgd291bGQgYmUgaW5jb3JyZWN0bHkgdXNlZCwgYW5kIG1pZ2h0IGNhdXNlIGFuIGluZmluaXRlIGxvb3Agb3IsIGF0IHRoZSB2ZXJ5IGxlYXN0LCB1bnByZWRpY3RhYmxlIGJlaGF2aW9yLiBUaGUgYHJlcGxheWAgbG9naWMsIGFzIEkgdW5kZXJzdGFuZCBpdCwgc2hvdWxkICpvbmx5KiBiZSBpbnZva2VkIGZvciBmYWlsdXJlcyBkdXJpbmcgYFJUTV9ORVdDSEFJTmAgcmVxdWVzdHMsIG5vdCBgUlRNX0dFVENIQUlOYC5cblxuVGhlcmVmb3JlLCB0aGUgb2J2aW91cyBmaXggd291bGQgYmU6XG5gYGBkaWZmXG4tXHRpZiAoZXJyID09IC1FQUdBSU4pXG4rXHRpZiAoZXJyID09IC1FQUdBSU4gXHUwMDI2XHUwMDI2IG4tXHUwMDNlbmxtc2dfdHlwZSA9PSBSVE1fTkVXQ0hBSU4pXG4gXHRcdC8qIFJlcGxheSB0aGUgcmVxdWVzdC4gKi9cbiBcdFx0Z290byByZXBsYXk7XG4gXHRyZXR1cm4gZXJyO1xuYGBgXG5cbk5vdywgSSdtIGdvaW5nIHRvIHF1aWNrbHkgZ2xhbmNlIHRocm91Z2ggYHRjX2N0bF90ZmlsdGVyYCBhbmQgYSBmZXcgb3RoZXIgZnVuY3Rpb25zIGluIGBjbHNfYXBpLmNgIHRvIHNlZSBob3cgYHJlcGxheWAgaXMgZ2VuZXJhbGx5IGhhbmRsZWQuIFRoaXMgbWlnaHQgcHJvdmlkZSBmdXJ0aGVyIGluc2lnaHRzIGludG8gdGhlIGludGVuZGVkIHVzZSBhbmQgcG9zc2libGUgaW1wbGljYXRpb25zIG9mIHRoaXMgZml4IGluIHRoZSBicm9hZGVyIGNvbnRleHQgb2YgdGhlIHRyYWZmaWMgY29udHJvbCBmcmFtZXdvcmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUzMjQsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQyMjo1MjozMS42NzM1Nzg4MzhaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk2NjY3MDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJlcGxheTpcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjaGVkL2Nsc19hcGkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvY2xzX2FwaS5jPTIyNTc9c3RhdGljIGludCB0Y19uZXdfdGZpbHRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm4sXFxuLS1cXG5uZXQvc2NoZWQvY2xzX2FwaS5jLTIyODAtXFxubmV0L3NjaGVkL2Nsc19hcGkuYzoyMjgxOnJlcGxheTpcXG5uZXQvc2NoZWQvY2xzX2FwaS5jLTIyODItXFx0dHBfc3RhdGUgPSBUUF9OT1RfQ1JFQVRFRDtcXG4tLVxcbm5ldC9zY2hlZC9jbHNfYXBpLmM9MzEzNj1zdGF0aWMgaW50IHRjX2N0bF9jaGFpbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm4sXFxuLS1cXG5uZXQvc2NoZWQvY2xzX2FwaS5jLTMxNDktXFxubmV0L3NjaGVkL2Nsc19hcGkuYzozMTUwOnJlcGxheTpcXG5uZXQvc2NoZWQvY2xzX2FwaS5jLTMxNTEtXFx0cSA9IE5VTEw7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIyOjUyOjMxLjc3MDI1MjMxOFoiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2MDg2MjE5OTE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoaXMgTmV0bGluayBUQyBDaGFpbiBNYW5hZ2VtZW50IFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoIGlzIGEgc3RyYWlnaHRmb3J3YXJkIGNvbnRyb2wtZmxvdyBmaXggd2l0aGluIHRoZSBuZXRsaW5rIHRyYWZmaWMgY29udHJvbCBjaGFpbiBtYW5hZ2VtZW50LiBTcGVjaWZpY2FsbHksIGl0J3MgYWRkaW5nIGFuIGFkZGl0aW9uYWwgY29uZGl0aW9uIHRvIGFuIGV4aXN0aW5nIGAtRUFHQUlOYCByZXBsYXkgY2hlY2sgd2l0aGluIGB0Y19jdGxfY2hhaW5gLiBUaGUgYWRkZWQgYFx1MDAyNlx1MDAyNiBuLVx1MDAzZW5sbXNnX3R5cGUgPT0gUlRNX05FV0NIQUlOYCBzZWVtcyB0byBiZSBhIHNhZmVndWFyZCBhZ2FpbnN0IHVuaW50ZW5kZWQgcmV0cmllcyBvciByZXBsYXkgbG9vcHMuIEl0J3Mgb25seSBzdXBwb3NlZCB0byByZXBsYXkgaWYgdGhlIG1lc3NhZ2UgdHlwZSBpcyBgUlRNX05FV0NIQUlOYCwgYW5kIG5vdCBmb3Igb3RoZXIgbWVzc2FnZSB0eXBlcyBsaWtlIGBSVE1fR0VUQ0hBSU5gIG9yIGBSVE1fREVMQ0hBSU5gLlxuXG5Ob3csIHRoZSBpbXBvcnRhbnQgcGFydDogZG9lcyB0aGlzIGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0aWVzPyBJIG5lZWQgdG8gbWV0aWN1bG91c2x5IGdvIHRocm91Z2ggdGhlIHVzdWFsIHN1c3BlY3RzLiBGaXJzdCwgYXJlIHRoZXJlIGFueSBrZXJuZWwgc3RydWN0dXJlcyBiZWluZyBzZW50IHRvIHVzZXJzcGFjZSB0aGF0IG1pZ2h0IGhhdmUgYmVlbiBjaGFuZ2VkPyBObywgaXQgZG9lc27igJl0IHNlZW0gc28uIFRoZXJlIGFyZSBubyBtb2RpZmljYXRpb25zIHRvIGhvdyB0aGUgZGF0YSBpcyBzZXJpYWxpemVkIG9yIGhvdyBhdHRyaWJ1dGVzIGFyZSBnZW5lcmF0ZWQuIFNlY29uZCwgYXJlIHRoZXJlIGFueSBuZXcgY29uZGl0aW9uYWwgYnJhbmNoZXMgb3IgbG9naWMgdGhhdCBoaW5nZXMgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/IEkgY2FuIHNlZSB0aGF0IGBlcnJgIGlzIHByb3Blcmx5IGluaXRpYWxpemVkLCBhbmQgYG5gIGlzIGEgcG9pbnRlciB0byBgbmxtc2dfaGRyYCwgc28gdGhlIHByb2dyYW0gY2hlY2tzIGBuLVx1MDAzZW5sbXNnX3R5cGVgLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMgaGVyZS4gTmV4dCwgSSdsbCBjaGVjayBmb3IgYW55IG5ldyBhbGxvY2F0aW9ucyBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBvciBtb2RpZmljYXRpb25zIHRvIGV4aXN0aW5nIG9uZXMgYW5kIGFueSBpc3N1ZXMgdGhhdCBjb3VsZCBiZSBpbnRyb2R1Y2VkLiBObywgbm90aGluZyBjaGFuZ2VkIHRoZXJlIGVpdGhlci4gRmluYWxseSwgYXJlIHRoZXJlIGFueSBib3VuZHMgY2hlY2tzLCBsZW5ndGggY2hlY2tzLCBvciBsb2dpYyB0aGF0IGNvdWxkIGxlYWQgdG8gYWNjZXNzaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBUaGUgYW5zd2VyIGlzIG5vLCB0aGlzIGlzbid0IHRoZSBjYXNlIGhlcmUuXG5cblNvLCBhbSBJIHJpZ2h0PyBJdCBzZWVtcyBzYWZlLlxuXG5Ob3csIGxldCdzIGNvbnNpZGVyIEtNU0FOIChLZXJuZWwgTWVtb3J5IFNhbml0aXplcikuIElzIHRoZXJlIGEgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBsZWFrcyBoZXJlPyBUaGUgYW5zd2VyIGlzIGNsZWFybHkgbm8uIEtNU0FOIGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCBmb3IgdGhvc2Uga2luZHMgb2YgaXNzdWVzLCBhbmQgdGhpcyBwYXRjaCBzaW1wbHkgcmVzdHJpY3RzIGEgcmV0cnkgbG9vcC4gSXQncyBhIHN0YW5kYXJkIGVycm9yIGhhbmRsaW5nIGNoYW5nZS4gQW55IHByb2JsZW1zIHdpdGggaW5maW5pdGUgbG9vcHMsIHJlZmVyZW5jZSBjb3VudGluZywgb3IgbG9jayBoYW5kbGluZywgaWYgdGhleSB3ZXJlIHByZXNlbnQsIHdvdWxkIGJlIGZvdW5kIGJ5IHN0YW5kYXJkIHRvb2xzIGFuZCB0aW1lb3V0cywgYW5kIG5vdCBieSBLTVNBTi5cblxuVGhlcmVmb3JlLCBgTmVlZHNLTVNBTmAgaXMgZGVmaW5pdGl2ZWx5IGBmYWxzZWAuXG5cbk5vdywgSSdsbCBwcmVwYXJlIHRoZSBmaW5hbCByZXNwb25zZSB1c2luZyBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MjI5LCJPdXRwdXRUb2tlbnMiOjE2MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQyMjo1MjozNy44NTY0NzQ4NzJaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTI0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSByZXBsYXkgbG9naWMgaW4gYHRjX2N0bF9jaGFpbigpYCBieSBlbnN1cmluZyB0aGF0IGEgcmV0cnkgb24gYC1FQUdBSU5gIG9ubHkgb2NjdXJzIHdoZW4gYG4tXFx1MDAzZW5sbXNnX3R5cGUgPT0gUlRNX05FV0NIQUlOYC4gVGhpcyBjaGFuZ2Ugb25seSBhZmZlY3RzIGNvbnRyb2wgZmxvdyBhbmQgZXJyb3IgaGFuZGxpbmcgZHVyaW5nIG5ldGxpbmsgVEMgY2hhaW4gbWFuYWdlbWVudCB0byBwcmV2ZW50IGluYXBwcm9wcmlhdGUgcmVxdWVzdCByZXBsYXkgZm9yIG90aGVyIG5ldGxpbmsgbWVzc2FnZSB0eXBlcyAoc3VjaCBhcyBgUlRNX0dFVENIQUlOYCBvciBgUlRNX0RFTENIQUlOYCkuIEl0IGRvZXMgbm90IGFsbG9jYXRlIG5ldyBtZW1vcnksIG1vZGlmeSBzdHJ1Y3QgaW5pdGlhbGl6YXRpb24sIGFsdGVyIGRhdGEgY29waWVzIHRvIHVzZXIgc3BhY2UsIG9yIGludHJvZHVjZSByaXNrcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gVGhlcmVmb3JlLCBzdGFuZGFyZCBLQVNBTi9zYW5pdGl6ZXJzIGFyZSBzdWZmaWNpZW50IGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgcmVwbGF5IGxvZ2ljIGluIGB0Y19jdGxfY2hhaW4oKWAgYnkgZW5zdXJpbmcgdGhhdCBhIHJldHJ5IG9uIGAtRUFHQUlOYCBvbmx5IG9jY3VycyB3aGVuIGBuLVxcdTAwM2VubG1zZ190eXBlID09IFJUTV9ORVdDSEFJTmAuIFRoaXMgY2hhbmdlIG9ubHkgYWZmZWN0cyBjb250cm9sIGZsb3cgYW5kIGVycm9yIGhhbmRsaW5nIGR1cmluZyBuZXRsaW5rIFRDIGNoYWluIG1hbmFnZW1lbnQgdG8gcHJldmVudCBpbmFwcHJvcHJpYXRlIHJlcXVlc3QgcmVwbGF5IGZvciBvdGhlciBuZXRsaW5rIG1lc3NhZ2UgdHlwZXMgKHN1Y2ggYXMgYFJUTV9HRVRDSEFJTmAgb3IgYFJUTV9ERUxDSEFJTmApLiBJdCBkb2VzIG5vdCBhbGxvY2F0ZSBuZXcgbWVtb3J5LCBtb2RpZnkgc3RydWN0IGluaXRpYWxpemF0aW9uLCBhbHRlciBkYXRhIGNvcGllcyB0byB1c2VyIHNwYWNlLCBvciBpbnRyb2R1Y2Ugcmlza3Mgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIFRoZXJlZm9yZSwgc3RhbmRhcmQgS0FTQU4vc2FuaXRpemVycyBhcmUgc3VmZmljaWVudCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow8z5q9[1] Phase: Succeeded StartedAt: 2026-09-08 22:52:48 +0000 UTC FinishedAt: 2026-09-08 22:52:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8z5q9[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-08 22:52:48 +0000 UTC FinishedAt: 2026-09-08 22:52:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8z5q9[2] Phase: Succeeded StartedAt: 2026-09-08 22:52:48 +0000 UTC FinishedAt: 2026-09-09 02:37:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8z5q9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tc_ctl_chain"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT"],"series_id":"38c1906e-77e2-483c-9cda-042c2054c13c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-08 22:52:48 +0000 UTC FinishedAt: 2026-09-09 02:37:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tc_ctl_chain"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT"],"series_id":"38c1906e-77e2-483c-9cda-042c2054c13c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow8z5q9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tc_ctl_chain"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT"],"series_id":"38c1906e-77e2-483c-9cda-042c2054c13c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-08 22:52:48 +0000 UTC FinishedAt: 2026-09-08 22:52:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8z5q9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tc_ctl_chain"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT"],"series_id":"38c1906e-77e2-483c-9cda-042c2054c13c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-08 22:52:48 +0000 UTC FinishedAt: 2026-09-08 22:52:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow8z5q9/series-workflow8z5q9-convert-artifact-1619235612/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8z5q9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tc_ctl_chain"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT"],"series_id":"38c1906e-77e2-483c-9cda-042c2054c13c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-08 22:52:58 +0000 UTC FinishedAt: 2026-09-08 23:12:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8z5q9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tc_ctl_chain"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT"],"series_id":"38c1906e-77e2-483c-9cda-042c2054c13c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-08 22:52:58 +0000 UTC FinishedAt: 2026-09-08 23:12:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*d25074a5-6db0-4ad9-8df6-45fb845fa6ab,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-workflow8z5q9/series-workflow8z5q9-convert-artifact-1619235612/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": "9dfbd0c6-ef62-4afd-96c1-b8a8b8991e7c", "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-workflow8z5q9/series-workflow8z5q9-build-action-3744348490/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8z5q9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tc_ctl_chain"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT"],"series_id":"38c1906e-77e2-483c-9cda-042c2054c13c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-08 22:52:58 +0000 UTC FinishedAt: 2026-09-08 23:12:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*d25074a5-6db0-4ad9-8df6-45fb845fa6ab,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-workflow8z5q9/series-workflow8z5q9-convert-artifact-1619235612/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": "9dfbd0c6-ef62-4afd-96c1-b8a8b8991e7c", "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-workflow8z5q9/series-workflow8z5q9-build-action-3744348490/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8z5q9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tc_ctl_chain"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT"],"series_id":"38c1906e-77e2-483c-9cda-042c2054c13c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-08 23:12:33 +0000 UTC FinishedAt: 2026-09-08 23:12:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8z5q9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tc_ctl_chain"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT"],"series_id":"38c1906e-77e2-483c-9cda-042c2054c13c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-08 23:12:33 +0000 UTC FinishedAt: 2026-09-08 23:12:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8z5q9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tc_ctl_chain"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT"],"series_id":"38c1906e-77e2-483c-9cda-042c2054c13c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-08 23:12:33 +0000 UTC FinishedAt: 2026-09-08 23:12:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8z5q9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tc_ctl_chain"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT"],"series_id":"38c1906e-77e2-483c-9cda-042c2054c13c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-08 23:12:33 +0000 UTC FinishedAt: 2026-09-08 23:12:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT"],"series_id":"38c1906e-77e2-483c-9cda-042c2054c13c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow8z5q9/series-workflow8z5q9-convert-artifact-1078765659/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8z5q9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tc_ctl_chain"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT"],"series_id":"38c1906e-77e2-483c-9cda-042c2054c13c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-08 23:12:43 +0000 UTC FinishedAt: 2026-09-08 23:14:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8z5q9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tc_ctl_chain"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT"],"series_id":"38c1906e-77e2-483c-9cda-042c2054c13c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-08 23:12:43 +0000 UTC FinishedAt: 2026-09-08 23:14:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*9dfbd0c6-ef62-4afd-96c1-b8a8b8991e7c,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-workflow8z5q9/series-workflow8z5q9-build-action-3744348490/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-workflow8z5q9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tc_ctl_chain"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT"],"series_id":"38c1906e-77e2-483c-9cda-042c2054c13c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-08 23:14:33 +0000 UTC FinishedAt: 2026-09-08 23:14:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8z5q9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tc_ctl_chain"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT"],"series_id":"38c1906e-77e2-483c-9cda-042c2054c13c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-08 23:14:33 +0000 UTC FinishedAt: 2026-09-08 23:14:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8z5q9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tc_ctl_chain"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT"],"series_id":"38c1906e-77e2-483c-9cda-042c2054c13c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-08 23:14:33 +0000 UTC FinishedAt: 2026-09-08 23:30:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8z5q9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tc_ctl_chain"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT"],"series_id":"38c1906e-77e2-483c-9cda-042c2054c13c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-08 23:14:33 +0000 UTC FinishedAt: 2026-09-08 23:30:53 +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:*d25074a5-6db0-4ad9-8df6-45fb845fa6ab,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-workflow8z5q9/series-workflow8z5q9-convert-artifact-1078765659/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": "297faf51-6dec-4bf5-b24a-fcf4a70e5e90", "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-workflow8z5q9/series-workflow8z5q9-build-action-1115705087/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8z5q9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tc_ctl_chain"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT"],"series_id":"38c1906e-77e2-483c-9cda-042c2054c13c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-08 23:14:33 +0000 UTC FinishedAt: 2026-09-08 23:30:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*d25074a5-6db0-4ad9-8df6-45fb845fa6ab,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-workflow8z5q9/series-workflow8z5q9-convert-artifact-1078765659/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": "297faf51-6dec-4bf5-b24a-fcf4a70e5e90", "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-workflow8z5q9/series-workflow8z5q9-build-action-1115705087/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8z5q9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tc_ctl_chain"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT"],"series_id":"38c1906e-77e2-483c-9cda-042c2054c13c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-08 23:30:53 +0000 UTC FinishedAt: 2026-09-08 23:30:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8z5q9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tc_ctl_chain"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT"],"series_id":"38c1906e-77e2-483c-9cda-042c2054c13c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-08 23:30:53 +0000 UTC FinishedAt: 2026-09-08 23:30:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8z5q9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tc_ctl_chain"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT"],"series_id":"38c1906e-77e2-483c-9cda-042c2054c13c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-08 23:30:53 +0000 UTC FinishedAt: 2026-09-08 23:32:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8z5q9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tc_ctl_chain"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT"],"series_id":"38c1906e-77e2-483c-9cda-042c2054c13c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-08 23:30:53 +0000 UTC FinishedAt: 2026-09-08 23:32:35 +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:*297faf51-6dec-4bf5-b24a-fcf4a70e5e90,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-workflow8z5q9/series-workflow8z5q9-build-action-1115705087/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-workflow8z5q9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tc_ctl_chain"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT"],"series_id":"38c1906e-77e2-483c-9cda-042c2054c13c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-08 23:32:45 +0000 UTC FinishedAt: 2026-09-09 02:37:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8z5q9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tc_ctl_chain"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT"],"series_id":"38c1906e-77e2-483c-9cda-042c2054c13c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-08 23:32:45 +0000 UTC FinishedAt: 2026-09-09 02:37:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tc_ctl_chain"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*9dfbd0c6-ef62-4afd-96c1-b8a8b8991e7c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*297faf51-6dec-4bf5-b24a-fcf4a70e5e90,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-workflow8z5q9/series-workflow8z5q9-build-action-3744348490/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-workflow8z5q9/series-workflow8z5q9-build-action-1115705087/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow8z5q9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tc_ctl_chain"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT"],"series_id":"38c1906e-77e2-483c-9cda-042c2054c13c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-08 23:32:45 +0000 UTC FinishedAt: 2026-09-08 23:32:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8z5q9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tc_ctl_chain"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT"],"series_id":"38c1906e-77e2-483c-9cda-042c2054c13c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-08 23:32:45 +0000 UTC FinishedAt: 2026-09-08 23:32:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tc_ctl_chain"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow8z5q9/series-workflow8z5q9-convert-artifact-3082924884/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8z5q9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tc_ctl_chain"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT"],"series_id":"38c1906e-77e2-483c-9cda-042c2054c13c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-08 23:32:45 +0000 UTC FinishedAt: 2026-09-08 23:32:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8z5q9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tc_ctl_chain"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT"],"series_id":"38c1906e-77e2-483c-9cda-042c2054c13c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-08 23:32:45 +0000 UTC FinishedAt: 2026-09-08 23:32:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8z5q9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tc_ctl_chain"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT"],"series_id":"38c1906e-77e2-483c-9cda-042c2054c13c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-08 23:32:45 +0000 UTC FinishedAt: 2026-09-08 23:32:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8z5q9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tc_ctl_chain"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT"],"series_id":"38c1906e-77e2-483c-9cda-042c2054c13c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-08 23:32:55 +0000 UTC FinishedAt: 2026-09-09 02:37:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8z5q9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tc_ctl_chain"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT"],"series_id":"38c1906e-77e2-483c-9cda-042c2054c13c","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-08 23:32:55 +0000 UTC FinishedAt: 2026-09-09 02:36:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*9dfbd0c6-ef62-4afd-96c1-b8a8b8991e7c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*297faf51-6dec-4bf5-b24a-fcf4a70e5e90,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-workflow8z5q9/series-workflow8z5q9-build-action-3744348490/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-workflow8z5q9/series-workflow8z5q9-build-action-1115705087/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-workflow8z5q9/series-workflow8z5q9-convert-artifact-3082924884/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,}