Name: series-workflowfg2fr Phase: Failed StartedAt: 2026-08-01 06:50:13 +0000 UTC FinishedAt: 2026-08-01 07:13:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfg2fr[0] Phase: Succeeded StartedAt: 2026-08-01 06:50:13 +0000 UTC FinishedAt: 2026-08-01 07:13:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfg2fr[0].run-triage Phase: Succeeded StartedAt: 2026-08-01 06:50:13 +0000 UTC FinishedAt: 2026-08-01 07:13:04 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA3OjExPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgcmVmYWN0b3JzIHRoZSBleHRyYWN0aW9uIG9mIHRoZSAmIzM5O25vd2FpdCYjMzk7IGZsYWcgaW50byBhIGxvY2FsIHZhcmlhYmxlIGFuZCBwYXNzZXMgaXQgYXMgdGhlICYjMzk7dHJ5bG9jayYjMzk7IHBhcmFtZXRlciB0byByd3NlbV9hY3F1aXJlX3JlYWQoKS4gU2luY2UgcndzZW1fYWNxdWlyZV9yZWFkKCkgaXMgcHVyZWx5IGEgbG9ja2RlcCBhbm5vdGF0aW9uIG1hY3JvIHRoYXQgZXhwYW5kcyB0byBub3RoaW5nIHdoZW4gQ09ORklHX0xPQ0tERVAgaXMgZGlzYWJsZWQsIHRoaXMgcGF0Y2ggZG9lcyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIHRoZSBleGVjdXRpb24gZmxvdyBvZiB0aGUga2VybmVsIGFuZCBpcyBub3Qgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDc6MTE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA4NWMzMjIwYTI1OWY4ZjQxM2VlYjhlOWZkOGFjNmNiMDlhNjQxNDdkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMSAwNzoxMToxOSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9ibG9jay9ibGstY29yZS5jIGIvYmxvY2svYmxrLWNvcmUuY1xuaW5kZXggMzY1NjQxMjY2YzllOC4uZTVkYjU0NTk2ZTNkZCAxMDA2NDRcbi0tLSBhL2Jsb2NrL2Jsay1jb3JlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2Jsb2NrL2Jsay1jb3JlLmNcbkBAIC0zNDcsOSAmIzQzOzM0NywxMCBAQCBib29sIGJsa19xdWV1ZV9zdGFydF9kcmFpbihzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSlcbiBpbnQgYmxrX3F1ZXVlX2VudGVyKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBibGtfbXFfcmVxX2ZsYWdzX3QgZmxhZ3MpXG4ge1xuIFx0Y29uc3QgYm9vbCBwbSA9IGZsYWdzIFx1MDAyNiBCTEtfTVFfUkVRX1BNO1xuJiM0MztcdGNvbnN0IGJvb2wgbm93YWl0ID0gZmxhZ3MgXHUwMDI2IEJMS19NUV9SRVFfTk9XQUlUO1xuIFxuIFx0d2hpbGUgKCFibGtfdHJ5X2VudGVyX3F1ZXVlKHEsIHBtKSkge1xuLVx0XHRpZiAoZmxhZ3MgXHUwMDI2IEJMS19NUV9SRVFfTk9XQUlUKVxuJiM0MztcdFx0aWYgKG5vd2FpdClcbiBcdFx0XHRyZXR1cm4gLUVBR0FJTjtcbiBcbiBcdFx0LypcbkBAIC0zNjgsMTcgJiM0MzszNjksMTkgQEAgaW50IGJsa19xdWV1ZV9lbnRlcihzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgYmxrX21xX3JlcV9mbGFnc190IGZsYWdzKVxuIFx0XHRcdHJldHVybiAtRU5PREVWO1xuIFx0fVxuIFxuLVx0cndzZW1fYWNxdWlyZV9yZWFkKFx1MDAyNnEtXHUwMDNlcV9sb2NrZGVwX21hcCwgMCwgMCwgX1JFVF9JUF8pO1xuJiM0MztcdHJ3c2VtX2FjcXVpcmVfcmVhZChcdTAwMjZxLVx1MDAzZXFfbG9ja2RlcF9tYXAsIDAsIG5vd2FpdCwgX1JFVF9JUF8pO1xuIFx0cndzZW1fcmVsZWFzZShcdTAwMjZxLVx1MDAzZXFfbG9ja2RlcF9tYXAsIF9SRVRfSVBfKTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbiBpbnQgX19iaW9fcXVldWVfZW50ZXIoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCBiaW8gKmJpbylcbiB7XG4mIzQzO1x0Y29uc3QgYm9vbCBub3dhaXQgPSBiaW8tXHUwMDNlYmlfb3BmIFx1MDAyNiBSRVFfTk9XQUlUO1xuJiM0MztcbiBcdHdoaWxlICghYmxrX3RyeV9lbnRlcl9xdWV1ZShxLCBmYWxzZSkpIHtcbiBcdFx0c3RydWN0IGdlbmRpc2sgKmRpc2sgPSBiaW8tXHUwMDNlYmlfYmRldi1cdTAwM2ViZF9kaXNrO1xuIFxuLVx0XHRpZiAoYmlvLVx1MDAzZWJpX29wZiBcdTAwMjYgUkVRX05PV0FJVCkge1xuJiM0MztcdFx0aWYgKG5vd2FpdCkge1xuIFx0XHRcdGlmICh0ZXN0X2JpdChHRF9ERUFELCBcdTAwMjZkaXNrLVx1MDAzZXN0YXRlKSlcbiBcdFx0XHRcdGdvdG8gZGVhZDtcbiBcdFx0XHRiaW9fd291bGRibG9ja19lcnJvcihiaW8pO1xuQEAgLTQwMSw3ICYjNDM7NDA0LDcgQEAgaW50IF9fYmlvX3F1ZXVlX2VudGVyKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgYmlvICpiaW8pXG4gXHRcdFx0Z290byBkZWFkO1xuIFx0fVxuIFxuLVx0cndzZW1fYWNxdWlyZV9yZWFkKFx1MDAyNnEtXHUwMDNlaW9fbG9ja2RlcF9tYXAsIDAsIDAsIF9SRVRfSVBfKTtcbiYjNDM7XHRyd3NlbV9hY3F1aXJlX3JlYWQoXHUwMDI2cS1cdTAwM2Vpb19sb2NrZGVwX21hcCwgMCwgbm93YWl0LCBfUkVUX0lQXyk7XG4gXHRyd3NlbV9yZWxlYXNlKFx1MDAyNnEtXHUwMDNlaW9fbG9ja2RlcF9tYXAsIF9SRVRfSVBfKTtcbiBcdHJldHVybiAwO1xuIGRlYWQ6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDc6MTE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgcmVmYWN0b3JzIHRoZSBleHRyYWN0aW9uIG9mIHRoZSAmIzM5O25vd2FpdCYjMzk7IGZsYWcgaW50byBhIGxvY2FsIHZhcmlhYmxlIGFuZCBwYXNzZXMgaXQgYXMgdGhlICYjMzk7dHJ5bG9jayYjMzk7IHBhcmFtZXRlciB0byByd3NlbV9hY3F1aXJlX3JlYWQoKS4gU2luY2UgcndzZW1fYWNxdWlyZV9yZWFkKCkgaXMgcHVyZWx5IGEgbG9ja2RlcCBhbm5vdGF0aW9uIG1hY3JvIHRoYXQgZXhwYW5kcyB0byBub3RoaW5nIHdoZW4gQ09ORklHX0xPQ0tERVAgaXMgZGlzYWJsZWQsIHRoaXMgcGF0Y2ggZG9lcyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIHRoZSBleGVjdXRpb24gZmxvdyBvZiB0aGUga2VybmVsIGFuZCBpcyBub3Qgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA4NWMzMjIwYTI1OWY4ZjQxM2VlYjhlOWZkOGFjNmNiMDlhNjQxNDdkCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBBdWcgMSAwNzoxMToxOSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1jb3JlLmMgYi9ibG9jay9ibGstY29yZS5jCmluZGV4IDM2NTY0MTI2NmM5ZTguLmU1ZGI1NDU5NmUzZGQgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2Jsay1jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvYmxvY2svYmxrLWNvcmUuYwpAQCAtMzQ3LDkgJiM0MzszNDcsMTAgQEAgYm9vbCBibGtfcXVldWVfc3RhcnRfZHJhaW4oc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpCiBpbnQgYmxrX3F1ZXVlX2VudGVyKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBibGtfbXFfcmVxX2ZsYWdzX3QgZmxhZ3MpCiB7CiAJY29uc3QgYm9vbCBwbSA9IGZsYWdzICZhbXA7IEJMS19NUV9SRVFfUE07CiYjNDM7CWNvbnN0IGJvb2wgbm93YWl0ID0gZmxhZ3MgJmFtcDsgQkxLX01RX1JFUV9OT1dBSVQ7CiAKIAl3aGlsZSAoIWJsa190cnlfZW50ZXJfcXVldWUocSwgcG0pKSB7Ci0JCWlmIChmbGFncyAmYW1wOyBCTEtfTVFfUkVRX05PV0FJVCkKJiM0MzsJCWlmIChub3dhaXQpCiAJCQlyZXR1cm4gLUVBR0FJTjsKIAogCQkvKgpAQCAtMzY4LDE3ICYjNDM7MzY5LDE5IEBAIGludCBibGtfcXVldWVfZW50ZXIoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIGJsa19tcV9yZXFfZmxhZ3NfdCBmbGFncykKIAkJCXJldHVybiAtRU5PREVWOwogCX0KIAotCXJ3c2VtX2FjcXVpcmVfcmVhZCgmYW1wO3EtJmd0O3FfbG9ja2RlcF9tYXAsIDAsIDAsIF9SRVRfSVBfKTsKJiM0MzsJcndzZW1fYWNxdWlyZV9yZWFkKCZhbXA7cS0mZ3Q7cV9sb2NrZGVwX21hcCwgMCwgbm93YWl0LCBfUkVUX0lQXyk7CiAJcndzZW1fcmVsZWFzZSgmYW1wO3EtJmd0O3FfbG9ja2RlcF9tYXAsIF9SRVRfSVBfKTsKIAlyZXR1cm4gMDsKIH0KIAogaW50IF9fYmlvX3F1ZXVlX2VudGVyKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgYmlvICpiaW8pCiB7CiYjNDM7CWNvbnN0IGJvb2wgbm93YWl0ID0gYmlvLSZndDtiaV9vcGYgJmFtcDsgUkVRX05PV0FJVDsKJiM0MzsKIAl3aGlsZSAoIWJsa190cnlfZW50ZXJfcXVldWUocSwgZmFsc2UpKSB7CiAJCXN0cnVjdCBnZW5kaXNrICpkaXNrID0gYmlvLSZndDtiaV9iZGV2LSZndDtiZF9kaXNrOwogCi0JCWlmIChiaW8tJmd0O2JpX29wZiAmYW1wOyBSRVFfTk9XQUlUKSB7CiYjNDM7CQlpZiAobm93YWl0KSB7CiAJCQlpZiAodGVzdF9iaXQoR0RfREVBRCwgJmFtcDtkaXNrLSZndDtzdGF0ZSkpCiAJCQkJZ290byBkZWFkOwogCQkJYmlvX3dvdWxkYmxvY2tfZXJyb3IoYmlvKTsKQEAgLTQwMSw3ICYjNDM7NDA0LDcgQEAgaW50IF9fYmlvX3F1ZXVlX2VudGVyKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgYmlvICpiaW8pCiAJCQlnb3RvIGRlYWQ7CiAJfQogCi0JcndzZW1fYWNxdWlyZV9yZWFkKCZhbXA7cS0mZ3Q7aW9fbG9ja2RlcF9tYXAsIDAsIDAsIF9SRVRfSVBfKTsKJiM0MzsJcndzZW1fYWNxdWlyZV9yZWFkKCZhbXA7cS0mZ3Q7aW9fbG9ja2RlcF9tYXAsIDAsIG5vd2FpdCwgX1JFVF9JUF8pOwogCXJ3c2VtX3JlbGVhc2UoJmFtcDtxLSZndDtpb19sb2NrZGVwX21hcCwgX1JFVF9JUF8pOwogCXJldHVybiAwOwogZGVhZDoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDc6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjUyOAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDIzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQYXRjaDogTG9ja2RlcCBJbXBsaWNhdGlvbnMgaW4gQmxvY2sgTGF5ZXIqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBibG9jay9ibGstY29yZS5jYC4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSBpbiBgYmxrX3F1ZXVlX2VudGVyYCBhbmQgYF9fYmlvX3F1ZXVlX2VudGVyYC4gSXQmIzM5O3MgdHdlYWtpbmcgaG93IHdlJiMzOTtyZSBjYWxsaW5nIGByd3NlbV9hY3F1aXJlX3JlYWRgLiBTcGVjaWZpY2FsbHksIHRoZSBgbm93YWl0YCBmbGFnIGlzIGJlaW5nIGludHJvZHVjZWQgYXMgdGhlIGB0cnlsb2NrYCBwYXJhbWV0ZXIuIFRoaXMgaW1tZWRpYXRlbHkgZmxhZ3Mgc29tZXRoaW5nIOKAkyB0aGlzIGhhcyB0byBiZSByZWxhdGVkIHRvIGxvY2tkZXAgdHJhY2tpbmcgZm9yIHJlcXVlc3QgcXVldWVzLgoKV2FpdCwgYHJ3c2VtX2FjcXVpcmVfcmVhZGAuLi4gdGhhdCYjMzk7cyBhIGxvY2tkZXAgYW5ub3RhdGlvbiwgaXNuJiMzOTt0IGl0PyBJIG5lZWQgdG8gY29uZmlybS4gSSBzaG91bGQgY2hlY2sgaXRzIGRlZmluaXRpb24uIEl0IHNob3VsZCBiZSBpbiBgaW5jbHVkZS9saW51eC9sb2NrZGVwLmhgIG9yIHNvbWV3aGVyZSBzaW1pbGFyLiBJZiBpdCAqaXMqIGp1c3QgYSBsb2NrZGVwIHdyYXBwZXIsIHRoZW4gdGhpcyBtaWdodCBub3QgYmUgYSBkaXJlY3QgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGVybXMgb2YgdGhlICpleGVjdXRpb24qIGZsb3cuIEl0JiMzOTtzIGFuIGltcG9ydGFudCBjaGFuZ2UsIGJ1dCBpdCYjMzk7cyAqYWJvdXQqIGxvY2tkZXAuCgpXYWl0LCB0aG91Z2jigKYgZG9lcyBpdCBhZmZlY3QgdGhlIGV4ZWN1dGlvbiBmbG93ICphdCBhbGwqPyBIbW0uIGByd3NlbV9hY3F1aXJlX3JlYWRgLi4uIGl0JiMzOTtzIGEgbWFjcm8uIEkgbmVlZCB0byBrbm93IHdoYXQgaXQgZXhwYW5kcyB0by4gSXQgZXhwYW5kcyB0byBgbG9ja19hY3F1aXJlYCB3aGVuIGBDT05GSUdfTE9DS0RFUGAgaXMgZW5hYmxlZC4gSWYgYENPTkZJR19MT0NLREVQYCBpcyBkaXNhYmxlZCwgaXQgcHJvYmFibHkgZXhwYW5kcyB0b+KApiBub3RoaW5nPyBUaGlzIGlzIGltcG9ydGFudC4gSSBiZXR0ZXIgZG91YmxlLWNoZWNrIGluIGBpbmNsdWRlL2xpbnV4L2xvY2tkZXAuaGAgdG8gYmUgc3VyZS4gVGhpcyBjaGFuZ2UgY291bGQgaGF2ZSBtb3JlIGltcGxpY2F0aW9ucyB0aGFuIEkgaW5pdGlhbGx5IHRob3VnaHQgZGVwZW5kaW5nIG9uIGhvdyBsb2NrZGVwIGlzIGNvbmZpZ3VyZWQgaW4gYSBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDc6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGVmaW5lIHJ3c2VtX2FjcXVpcmVfcmVhZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2xvY2tkZXAuaD01MTk9ZG8ge1x0XHRcdFx0XHRcdFx0XHRcdFxcXG4tLVxuaW5jbHVkZS9saW51eC9sb2NrZGVwLmgtNTM3LSNkZWZpbmUgcndzZW1fYWNxdWlyZV9uZXN0KGwsIHMsIHQsIG4sIGkpXHRsb2NrX2FjcXVpcmVfZXhjbHVzaXZlKGwsIHMsIHQsIG4sIGkpXG5pbmNsdWRlL2xpbnV4L2xvY2tkZXAuaDo1Mzg6I2RlZmluZSByd3NlbV9hY3F1aXJlX3JlYWQobCwgcywgdCwgaSlcdFx0bG9ja19hY3F1aXJlX3NoYXJlZChsLCBzLCB0LCBOVUxMLCBpKVxuaW5jbHVkZS9saW51eC9sb2NrZGVwLmgtNTM5LSNkZWZpbmUgcndzZW1fcmVsZWFzZShsLCBpKVx0XHRcdGxvY2tfcmVsZWFzZShsLCBpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA3OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyODAKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqSW52ZXN0aWdhdGluZyBhIFBvdGVudGlhbCBMb2NrZGVwIE9wdGltaXphdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIE15IGltbWVkaWF0ZSBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoZSBgcndzZW1fYWNxdWlyZV9yZWFkYCBmdW5jdGlvbiBpcyBzaW1wbHkgYSBuby1vcCwgYW4gZW1wdHkgZGVmaW5pdGlvbiwgaW4gdGhlIGtlcm5lbCYjMzk7cyBjb2RlIHdoZW4gdGhlIGBDT05GSUdfTE9DS0RFUGAgb3B0aW9uIGlzIHR1cm5lZCBvZmYuIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSBpZiB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGEgY29uZGl0aW9uYWxseSBjb21waWxlZCBzZWN0aW9uIG9mIGNvZGUsIG9yIGlmIGBDT05GSUdfTE9DS0RFUGAgaGFzIG5vIGltcGFjdCBvbiB0aGlzIHBhcnRpY3VsYXIgZnVuY3Rpb24uIFRoaXMgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucyBhbmQgd2hldGhlciB3ZSBjYW4gc3RyZWFtbGluZSB0aGUgY29kZSBpbiBhIGxvY2tkZXAtZnJlZSBlbnZpcm9ubWVudC4gSSBuZWVkIHRvIGdldCB0aGlzIGJhc2ljIHF1ZXN0aW9uIGFuc3dlcmVkIGJlZm9yZSBJIGNhbiBmb3JtIGFuIG9waW5pb24gYWJvdXQgdGhpcyBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA3OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0OyNkZWZpbmUgcndzZW1fYWNxdWlyZV9yZWFkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbG9ja2RlcC5oPTUxOT1kbyB7XHRcdFx0XHRcdFx0XHRcdFx0XFxcbi0tXG5pbmNsdWRlL2xpbnV4L2xvY2tkZXAuaC01MzctI2RlZmluZSByd3NlbV9hY3F1aXJlX25lc3QobCwgcywgdCwgbiwgaSlcdGxvY2tfYWNxdWlyZV9leGNsdXNpdmUobCwgcywgdCwgbiwgaSlcbmluY2x1ZGUvbGludXgvbG9ja2RlcC5oOjUzODojZGVmaW5lIHJ3c2VtX2FjcXVpcmVfcmVhZChsLCBzLCB0LCBpKVx0XHRsb2NrX2FjcXVpcmVfc2hhcmVkKGwsIHMsIHQsIE5VTEwsIGkpXG5pbmNsdWRlL2xpbnV4L2xvY2tkZXAuaC01MzktI2RlZmluZSByd3NlbV9yZWxlYXNlKGwsIGkpXHRcdFx0bG9ja19yZWxlYXNlKGwsIGkpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDc6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzY0MwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBteSBleHBlcnQgdW5kZXJzdGFuZGluZzoKCioqRGVlcCBEaXZlIGludG8gTG9ja2RlcCoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nLCAmIzM0O1doZXJlJiMzOTtzIHRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0IHVudGFuZ2xpbmcgdGhpcyBpc3N1ZT8mIzM0OyBNeSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIGBpbmNsdWRlL2xpbnV4L2xvY2tkZXAuaGAg4oCTIHRoYXQmIzM5O3MgdGhlIGhlYXJ0IG9mIHRoZSBsb2NrIGRlcGVuZGVuY3kgZGV0ZWN0aW9uIG1lY2hhbmlzbSBpbiB0aGUga2VybmVsLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gemVyb2luZyBpbiBhcm91bmQgbGluZSA1MzguIEkmIzM5O20gbm90IGdvaW5nIHRvIHByZXRlbmQgdG8ga25vdyAqZXhhY3RseSogd2hhdCYjMzk7cyB0aGVyZSBvZmYgdGhlIHRvcCBvZiBteSBoZWFkLCBidXQgSSBrbm93IHRoZSBnZW5lcmFsIHN0cnVjdHVyZSBvZiB0aGUgY29kZSBhcm91bmQgdGhhdCBhcmVhLiBMaW5lIDUzOCBpcyBsaWtlbHkgYSBjcml0aWNhbCBzZWN0aW9uIG9mIGNvZGUgcmVsYXRlZCB0byByZXBvcnRpbmcgbG9ja2RlcCBlcnJvcnMsIGhhbmRsaW5nIGxvY2sgY2xhc3Nlcywgb3IgcGVyaGFwcyB0aGUgcmVjdXJzaXZlIGxvY2tpbmcgZGV0ZWN0aW9uLiBJIGhhdmUgYSBmZWVsaW5nIHRoZSBwcm9ibGVtIEkmIzM5O20gdHJ5aW5nIHRvIHNvbHZlIHdpbGwgYmUgcm9vdGVkIHNvbWV3aGVyZSBpbiB0aGF0IHZpY2luaXR5LCBzbyB0aGF0JiMzOTtzIHRoZSBsb2dpY2FsIGp1bXBpbmctb2ZmIHBvaW50IGZvciBhIGRlZXBlciBpbnZlc3RpZ2F0aW9uLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDc6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2xvY2tkZXAuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDUyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTIwOlx0XHRpZiAocmVhZF9sb2NrX2lzX3JlY3Vyc2l2ZSgpKVx0XHRcdFx0XHRcXFxuIDUyMTpcdFx0XHRsb2NrX2FjcXVpcmVfc2hhcmVkX3JlY3Vyc2l2ZShsLCBzLCB0LCBOVUxMLCBpKTtcdFxcXG4gNTIyOlx0XHRlbHNlXHRcdFx0XHRcdFx0XHRcdFxcXG4gNTIzOlx0XHRcdGxvY2tfYWNxdWlyZV9zaGFyZWQobCwgcywgdCwgTlVMTCwgaSk7XHRcdFx0XFxcbiA1MjQ6XHR9IHdoaWxlICgwKVxuIDUyNTpcdFxuIDUyNjpcdCNkZWZpbmUgcndsb2NrX3JlbGVhc2UobCwgaSlcdFx0XHRsb2NrX3JlbGVhc2UobCwgaSlcbiA1Mjc6XHRcbiA1Mjg6XHQjZGVmaW5lIHNlcWNvdW50X2FjcXVpcmUobCwgcywgdCwgaSlcdFx0bG9ja19hY3F1aXJlX2V4Y2x1c2l2ZShsLCBzLCB0LCBOVUxMLCBpKVxuIDUyOTpcdCNkZWZpbmUgc2VxY291bnRfYWNxdWlyZV9yZWFkKGwsIHMsIHQsIGkpXHRsb2NrX2FjcXVpcmVfc2hhcmVkX3JlY3Vyc2l2ZShsLCBzLCB0LCBOVUxMLCBpKVxuIDUzMDpcdCNkZWZpbmUgc2VxY291bnRfcmVsZWFzZShsLCBpKVx0XHRcdGxvY2tfcmVsZWFzZShsLCBpKVxuIDUzMTpcdFxuIDUzMjpcdCNkZWZpbmUgbXV0ZXhfYWNxdWlyZShsLCBzLCB0LCBpKVx0XHRsb2NrX2FjcXVpcmVfZXhjbHVzaXZlKGwsIHMsIHQsIE5VTEwsIGkpXG4gNTMzOlx0I2RlZmluZSBtdXRleF9hY3F1aXJlX25lc3QobCwgcywgdCwgbiwgaSlcdGxvY2tfYWNxdWlyZV9leGNsdXNpdmUobCwgcywgdCwgbiwgaSlcbiA1MzQ6XHQjZGVmaW5lIG11dGV4X3JlbGVhc2UobCwgaSlcdFx0XHRsb2NrX3JlbGVhc2UobCwgaSlcbiA1MzU6XHRcbiA1MzY6XHQjZGVmaW5lIHJ3c2VtX2FjcXVpcmUobCwgcywgdCwgaSlcdFx0bG9ja19hY3F1aXJlX2V4Y2x1c2l2ZShsLCBzLCB0LCBOVUxMLCBpKVxuIDUzNzpcdCNkZWZpbmUgcndzZW1fYWNxdWlyZV9uZXN0KGwsIHMsIHQsIG4sIGkpXHRsb2NrX2FjcXVpcmVfZXhjbHVzaXZlKGwsIHMsIHQsIG4sIGkpXG4gNTM4Olx0I2RlZmluZSByd3NlbV9hY3F1aXJlX3JlYWQobCwgcywgdCwgaSlcdFx0bG9ja19hY3F1aXJlX3NoYXJlZChsLCBzLCB0LCBOVUxMLCBpKVxuIDUzOTpcdCNkZWZpbmUgcndzZW1fcmVsZWFzZShsLCBpKVx0XHRcdGxvY2tfcmVsZWFzZShsLCBpKVxuIDU0MDpcdFxuIDU0MTpcdCNkZWZpbmUgbG9ja19tYXBfYWNxdWlyZShsKVx0XHRcdGxvY2tfYWNxdWlyZV9leGNsdXNpdmUobCwgMCwgMCwgTlVMTCwgX1RISVNfSVBfKVxuIDU0MjpcdCNkZWZpbmUgbG9ja19tYXBfYWNxdWlyZV90cnkobClcdFx0XHRsb2NrX2FjcXVpcmVfZXhjbHVzaXZlKGwsIDAsIDEsIE5VTEwsIF9USElTX0lQXylcbiA1NDM6XHQjZGVmaW5lIGxvY2tfbWFwX2FjcXVpcmVfcmVhZChsKVx0XHRsb2NrX2FjcXVpcmVfc2hhcmVkX3JlY3Vyc2l2ZShsLCAwLCAwLCBOVUxMLCBfVEhJU19JUF8pXG4gNTQ0Olx0I2RlZmluZSBsb2NrX21hcF9hY3F1aXJlX3RyeXJlYWQobClcdFx0bG9ja19hY3F1aXJlX3NoYXJlZF9yZWN1cnNpdmUobCwgMCwgMSwgTlVMTCwgX1RISVNfSVBfKVxuIDU0NTpcdCNkZWZpbmUgbG9ja19tYXBfcmVsZWFzZShsKVx0XHRcdGxvY2tfcmVsZWFzZShsLCBfVEhJU19JUF8pXG4gNTQ2Olx0I2RlZmluZSBsb2NrX21hcF9zeW5jKGwpXHRcdFx0bG9ja19zeW5jKGwsIDAsIDAsIDEsIE5VTEwsIF9USElTX0lQXylcbiA1NDc6XHRcbiA1NDg6XHQjaWZkZWYgQ09ORklHX1BST1ZFX0xPQ0tJTkdcbiA1NDk6XHQjIGRlZmluZSBtaWdodF9sb2NrKGxvY2spXHRcdFx0XHRcdFx0XFxcbiA1NTA6XHRkbyB7XHRcdFx0XHRcdFx0XHRcdFx0XFxcbiA1NTE6XHRcdHR5cGVjaGVjayhzdHJ1Y3QgbG9ja2RlcF9tYXAgKiwgXHUwMDI2KGxvY2spLVx1MDAzZWRlcF9tYXApO1x0XHRcXFxuIDU1MjpcdFx0bG9ja19hY3F1aXJlKFx1MDAyNihsb2NrKS1cdTAwM2VkZXBfbWFwLCAwLCAwLCAwLCAxLCBOVUxMLCBfVEhJU19JUF8pO1x0XFxcbiA1NTM6XHRcdGxvY2tfcmVsZWFzZShcdTAwMjYobG9jayktXHUwMDNlZGVwX21hcCwgX1RISVNfSVBfKTtcdFx0XHRcXFxuIDU1NDpcdH0gd2hpbGUgKDApXG4gNTU1Olx0IyBkZWZpbmUgbWlnaHRfbG9ja19yZWFkKGxvY2spXHRcdFx0XHRcdFx0XFxcbiA1NTY6XHRkbyB7XHRcdFx0XHRcdFx0XHRcdFx0XFxcbiA1NTc6XHRcdHR5cGVjaGVjayhzdHJ1Y3QgbG9ja2RlcF9tYXAgKiwgXHUwMDI2KGxvY2spLVx1MDAzZWRlcF9tYXApO1x0XHRcXFxuIDU1ODpcdFx0bG9ja19hY3F1aXJlKFx1MDAyNihsb2NrKS1cdTAwM2VkZXBfbWFwLCAwLCAwLCAxLCAxLCBOVUxMLCBfVEhJU19JUF8pO1x0XFxcbiA1NTk6XHRcdGxvY2tfcmVsZWFzZShcdTAwMjYobG9jayktXHUwMDNlZGVwX21hcCwgX1RISVNfSVBfKTtcdFx0XHRcXFxuIDU2MDpcdH0gd2hpbGUgKDApXG4gNTYxOlx0IyBkZWZpbmUgbWlnaHRfbG9ja19uZXN0ZWQobG9jaywgc3ViY2xhc3MpXHRcdFx0XHRcXFxuIDU2MjpcdGRvIHtcdFx0XHRcdFx0XHRcdFx0XHRcXFxuIDU2MzpcdFx0dHlwZWNoZWNrKHN0cnVjdCBsb2NrZGVwX21hcCAqLCBcdTAwMjYobG9jayktXHUwMDNlZGVwX21hcCk7XHRcdFxcXG4gNTY0Olx0XHRsb2NrX2FjcXVpcmUoXHUwMDI2KGxvY2spLVx1MDAzZWRlcF9tYXAsIHN1YmNsYXNzLCAwLCAxLCAxLCBOVUxMLFx0XHRcXFxuIDU2NTpcdFx0XHQgICAgIF9USElTX0lQXyk7XHRcdFx0XHRcdFxcXG4gNTY2Olx0XHRsb2NrX3JlbGVhc2UoXHUwMDI2KGxvY2spLVx1MDAzZWRlcF9tYXAsIF9USElTX0lQXyk7XHRcdFx0XFxcbiA1Njc6XHR9IHdoaWxlICgwKVxuIDU2ODpcdFxuIDU2OTpcdERFQ0xBUkVfUEVSX0NQVShpbnQsIGhhcmRpcnFzX2VuYWJsZWQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA3OjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUxMjEKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhcyBpZiBJJiMzOTttIHRoaW5raW5nIHRoZXNlIHRoaW5ncyBteXNlbGY6CgoqKlRyYWNpbmcgdGhlIERlZmluaXRpb24gb2YgYHJ3c2VtX2FjcXVpcmVfcmVhZGAgKENPTkZJR19MT0NLREVQIERpc2FibGVkKSoqCgpBbHJpZ2h0LCBzbyBJIG5lZWQgdG8gZmluZCB0aGUgZGVmaW5pdGlvbiBvZiBgcndzZW1fYWNxdWlyZV9yZWFkYCB3aGVuIGBDT05GSUdfTE9DS0RFUGAgaXMgKm9mZiouIFRoYXQmIzM5O3MgdGhlIGtleS4gSSBrbm93IHdoZXJlIHRvIHN0YXJ0IGxvb2tpbmcsIGJ1dCBpdCYjMzk7cyBpbXBvcnRhbnQgdG8gcmVtZW1iZXIgdGhhdCB3aXRob3V0IGBMT0NLREVQYCwgdGhlIGltcGxlbWVudGF0aW9uIGxpa2VseSB0YWtlcyBhIGRpZmZlcmVudCBwYXRoLCBwcm9iYWJseSBhIHNpbXBsZXIgb25lIHRoYXQgYnlwYXNzZXMgc29tZSBvZiB0aGUgbW9yZSBlbGFib3JhdGUgbG9ja2luZyBkZXBlbmRlbmN5IHRyYWNraW5nLiBJIGV4cGVjdCBpdCB0byBiZSBhIG1vcmUgc3RyYWlnaHRmb3J3YXJkIGltcGxlbWVudGF0aW9uIGludm9sdmluZyBhdG9taWMgb3BlcmF0aW9ucyBhbmQgcG90ZW50aWFsbHkgaW50ZXJydXB0IGRpc2FibGluZywgYnV0IEkgbmVlZCB0byBjb25maXJtIHRoaXMuIEkgd2lsbCBsb29rIGZvciBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcyBvciBjb25kaXRpb25hbCBjb21waWxhdGlvbiB0byBkaXJlY3QgbWUgdG8gdGhlIGNvcnJlY3QgZGVmaW5pdGlvbi4gSXQmIzM5O3MgcG9zc2libGUgdGhlIGNvcmUgbG9naWMgaXMgaW4gYSBnZW5lcmFsIGhlYWRlciwgYnV0IEkmIzM5O2xsIG5lZWQgdG8gZm9sbG93IHRoZSBpbmNsdWRlcyBjYXJlZnVsbHkgdG8gZW5zdXJlIEkmIzM5O20gZ2V0dGluZyB0aGUgcmlnaHQgdmVyc2lvbiBmb3IgYSBub24tYExPQ0tERVBgIGNvbmZpZ3VyYXRpb24uIFRpbWUgdG8gc3RhcnQgZGlnZ2luZyBpbiB0aGUga2VybmVsIHNvdXJjZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDc6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7I2RlZmluZSByd3NlbV9hY3F1aXJlX3JlYWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2xvY2tkZXAuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2xvY2tkZXAuaD01MTk9ZG8ge1x0XHRcdFx0XHRcdFx0XHRcdFxcXG4tLVxuaW5jbHVkZS9saW51eC9sb2NrZGVwLmgtNTM3LSNkZWZpbmUgcndzZW1fYWNxdWlyZV9uZXN0KGwsIHMsIHQsIG4sIGkpXHRsb2NrX2FjcXVpcmVfZXhjbHVzaXZlKGwsIHMsIHQsIG4sIGkpXG5pbmNsdWRlL2xpbnV4L2xvY2tkZXAuaDo1Mzg6I2RlZmluZSByd3NlbV9hY3F1aXJlX3JlYWQobCwgcywgdCwgaSlcdFx0bG9ja19hY3F1aXJlX3NoYXJlZChsLCBzLCB0LCBOVUxMLCBpKVxuaW5jbHVkZS9saW51eC9sb2NrZGVwLmgtNTM5LSNkZWZpbmUgcndzZW1fcmVsZWFzZShsLCBpKVx0XHRcdGxvY2tfcmVsZWFzZShsLCBpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNzoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NTYyCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEkmIzM5O20gc3BlYWtpbmcgdG8gYSBmZWxsb3cgZXhwZXJ0OgoKKipGaW5kaW5nIHRoZSBMb2NrZGVwIERlZmluaXRpb24qKgoKUmlnaHQsIGxldCYjMzk7cyByZXZpc2l0IHRoYXQgYHJ3c2VtX2FjcXVpcmVfcmVhZGAgc2VhcmNoLiBJIG5lZWQgdG8gbmFpbCBkb3duIGV4YWN0bHkgaG93IHRoZSBsb2NrIGRlcGVuZGVuY3kgYW5hbHlzaXMsIHNwZWNpZmljYWxseSB3aXRoaW4gYGxvY2tkZXBgLCBoYW5kbGVzIHJlYWQgc2VtYXBob3JlIGFjcXVpc2l0aW9ucy4gVGhlIG1vc3QgbGlrZWx5IHNwb3QgdG8gZmluZCB0aGUgY29yZSBkZWZpbml0aW9uIGFuZCByZWxhdGVkIGluc3RydW1lbnRhdGlvbiBpcyBzdGlsbCBgaW5jbHVkZS9saW51eC9sb2NrZGVwLmhgLiBJJiMzOTtsbCB6ZXJvIGluIG9uIHRoYXQgZmlsZSBhZ2Fpbiwgc2VlIGlmIG15IGludHVpdGlvbiBmcm9tIHRoZSBsYXN0IHNlYXJjaCBob2xkcyB1cCBvciBpZiBJIG1pc3NlZCBzb21ldGhpbmcgc3VidGxlIHRoZSBmaXJzdCB0aW1lIGFyb3VuZC4gVGltZSB0byBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhhdCBjcnVjaWFsIHNlY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA3OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3J3c2VtX2FjcXVpcmVfcmVhZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbG9ja2RlcC5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbG9ja2RlcC5oPTUxOT1kbyB7XHRcdFx0XHRcdFx0XHRcdFx0XFxcbi0tXG5pbmNsdWRlL2xpbnV4L2xvY2tkZXAuaC01MzctI2RlZmluZSByd3NlbV9hY3F1aXJlX25lc3QobCwgcywgdCwgbiwgaSlcdGxvY2tfYWNxdWlyZV9leGNsdXNpdmUobCwgcywgdCwgbiwgaSlcbmluY2x1ZGUvbGludXgvbG9ja2RlcC5oOjUzODojZGVmaW5lIHJ3c2VtX2FjcXVpcmVfcmVhZChsLCBzLCB0LCBpKVx0XHRsb2NrX2FjcXVpcmVfc2hhcmVkKGwsIHMsIHQsIE5VTEwsIGkpXG5pbmNsdWRlL2xpbnV4L2xvY2tkZXAuaC01MzktI2RlZmluZSByd3NlbV9yZWxlYXNlKGwsIGkpXHRcdFx0bG9ja19yZWxlYXNlKGwsIGkpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA3OjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU5MjMKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA1NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZS4uLgoKKipDaGVja2luZyB0aGUgUmVhZC1Xcml0ZSBTZW1hcGhvcmUgSW1wbGVtZW50YXRpb24gd2l0aCBMb2NrIERlcGVuZGVuY3kgRGlzYWJsZWQqKgoKSG1tLCBhIHF1ZXN0aW9uIGp1c3QgcG9wcGVkIGludG8gbXkgaGVhZC4gSWYgdGhlIGtlcm5lbCYjMzk7cyBsb2NrIGRlcGVuZGVuY3kgY2hlY2tlciAoYENPTkZJR19MT0NLREVQYCkgaXMgZGlzYWJsZWQsIGRvZXMgdGhhdCBtZWFuIHRoYXQgdGhlIGByd3NlbV9hY3F1aXJlX3JlYWRgIGZ1bmN0aW9uIGJlY29tZXMgYSBuby1vcD8gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGFuZCBzZWUgd2hhdCBpdCYjMzk7cyBkZWZpbmVkIGFzIHdoZW4gbG9ja2RlcCBpc24mIzM5O3QgZW5hYmxlZC4KCkkga25vdyB3aGVyZSB0byBsb29rLiBJJiMzOTtsbCBjaGVjayBlaXRoZXIgYGluY2x1ZGUvbGludXgvcndzZW0uaGAgd2hpY2ggc2hvdWxkIGNvbnRhaW4gdGhlIGNvcmUgZGVmaW5pdGlvbiBvZiByZWFkLXdyaXRlIHNlbWFwaG9yZXMsIG9yIGBpbmNsdWRlL2xpbnV4L2xvY2tkZXAuaGAgdG8gc2VlIGlmIHRoZXJlJiMzOTtzIGEgY29uZGl0aW9uYWwgZmFsbGJhY2sgaW1wbGVtZW50YXRpb24gb3IgYSBtYWNybyBpbnZvbHZlZCB3aGVuIGBDT05GSUdfTE9DS0RFUGAgaXMgdHVybmVkIG9mZi4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGFjdHVhbGx5IGdvaW5nIG9uIHVuZGVyIHRoZSBob29kLiBJdCYjMzk7cyBwcm9iYWJseSBhIG1hY3JvLCBnaXZlbiB0aGUgd2F5IHRoYXQmIzM5O3MgdXN1YWxseSBoYW5kbGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNzoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyd3NlbV9hY3F1aXJlX3JlYWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2xvY2tkZXAuaD01MTk9ZG8ge1x0XHRcdFx0XHRcdFx0XHRcdFxcXG4tLVxuaW5jbHVkZS9saW51eC9sb2NrZGVwLmgtNTM3LSNkZWZpbmUgcndzZW1fYWNxdWlyZV9uZXN0KGwsIHMsIHQsIG4sIGkpXHRsb2NrX2FjcXVpcmVfZXhjbHVzaXZlKGwsIHMsIHQsIG4sIGkpXG5pbmNsdWRlL2xpbnV4L2xvY2tkZXAuaDo1Mzg6I2RlZmluZSByd3NlbV9hY3F1aXJlX3JlYWQobCwgcywgdCwgaSlcdFx0bG9ja19hY3F1aXJlX3NoYXJlZChsLCBzLCB0LCBOVUxMLCBpKVxuaW5jbHVkZS9saW51eC9sb2NrZGVwLmgtNTM5LSNkZWZpbmUgcndzZW1fcmVsZWFzZShsLCBpKVx0XHRcdGxvY2tfcmVsZWFzZShsLCBpKVxuLS1cbmluY2x1ZGUvbGludXgvcGVyY3B1LXJ3c2VtLmg9NDg9c3RhdGljIGlubGluZSB2b2lkIHBlcmNwdV9kb3duX3JlYWRfaW50ZXJuYWwoc3RydWN0IHBlcmNwdV9yd19zZW1hcGhvcmUgKnNlbSxcbi0tXG5pbmNsdWRlL2xpbnV4L3BlcmNwdS1yd3NlbS5oLTUyLVxuaW5jbHVkZS9saW51eC9wZXJjcHUtcndzZW0uaDo1MzpcdHJ3c2VtX2FjcXVpcmVfcmVhZChcdTAwMjZzZW0tXHUwMDNlZGVwX21hcCwgMCwgMCwgX1JFVF9JUF8pO1xuaW5jbHVkZS9saW51eC9wZXJjcHUtcndzZW0uaC01NC1cbi0tXG5pbmNsdWRlL2xpbnV4L3BlcmNwdS1yd3NlbS5oPTg2PXN0YXRpYyBpbmxpbmUgYm9vbCBwZXJjcHVfZG93bl9yZWFkX3RyeWxvY2soc3RydWN0IHBlcmNwdV9yd19zZW1hcGhvcmUgKnNlbSlcbi0tXG5pbmNsdWRlL2xpbnV4L3BlcmNwdS1yd3NlbS5oLTEwNC1cdGlmIChyZXQpXG5pbmNsdWRlL2xpbnV4L3BlcmNwdS1yd3NlbS5oOjEwNTpcdFx0cndzZW1fYWNxdWlyZV9yZWFkKFx1MDAyNnNlbS1cdTAwM2VkZXBfbWFwLCAwLCAxLCBfUkVUX0lQXyk7XG5pbmNsdWRlL2xpbnV4L3BlcmNwdS1yd3NlbS5oLTEwNi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDc6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjYwMQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBMb2NrIFN0cnVjdHVyZXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIGByd3NlbV9hY3F1aXJlX3JlYWRgIGlzIGFjdHVhbGx5IGRlZmluZWQuIEkga25vdyBpdCYjMzk7cyByZWxhdGVkIHRvIHJlYWQvd3JpdGUgc2VtYXBob3Jlcywgc28gbXkgZ3V0IGZlZWxpbmcgaXMgdGhhdCBpdCYjMzk7cyBnb2luZyB0byBiZSBzb21ld2hlcmUgaW4gdGhlIGNvcmUga2VybmVsIGhlYWRlcnMuIExldCYjMzk7cyBzZWUuLi4gYWgsIHJpZ2h0ISBgcndzZW1fYWNxdWlyZV9yZWFkYCBpcyBkZWZpbmVkIGluIGBpbmNsdWRlL2xpbnV4L2xvY2tkZXAuaGAuIEkgcmVjYWxsIHRoYXQgZmlsZSBiZWluZyB0aGUgaG9tZSBvZiBsb2NrIGRlYnVnZ2luZyBhbmQgYW5hbHlzaXMgdG9vbHMuIEFscmlnaHQsIGxldCYjMzk7cyBvcGVuIHRoYXQgZmlsZSBhbmQgaGVhZCBvdmVyIHRvIGFyb3VuZCBsaW5lIDUzOC4gSSBuZWVkIHRvIGdldCBhIGJldHRlciBzZW5zZSBvZiB3aGF0IHRoaXMgZGVmaW5pdGlvbiBsb29rcyBsaWtlIGluIGl0cyBjb250ZXh0IHdpdGhpbiB0aGUgbG9ja2RlcCBpbmZyYXN0cnVjdHVyZS4gSSYjMzk7bSBob3BpbmcgdG8gZ2V0IHNvbWUgZGV0YWlscyBhYm91dCBleGFjdGx5ICpob3cqIHRoaXMgcmVhZCBzZW1hcGhvcmUgYWNxdWlyZSBpcyB0cmFja2VkIGFuZCBpbXBsZW1lbnRlZCB3aXRoaW4gdGhlIGtlcm5lbCYjMzk7cyBsb2NrIGRlYnVnZ2luZyBmcmFtZXdvcmsuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA3OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9sb2NrZGVwLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0MDA6XHRcbiA0MDE6XHQjZGVmaW5lIE5JTF9DT09LSUUgKHN0cnVjdCBwaW5fY29va2llKXsgfVxuIDQwMjpcdFxuIDQwMzpcdCNkZWZpbmUgbG9ja2RlcF9waW5fbG9jayhsKVx0XHRcdCh7IHN0cnVjdCBwaW5fY29va2llIGNvb2tpZSA9IHsgfTsgY29va2llOyB9KVxuIDQwNDpcdCNkZWZpbmUgbG9ja2RlcF9yZXBpbl9sb2NrKGwsIGMpXHRcdGRvIHsgKHZvaWQpKGwpOyAodm9pZCkoYyk7IH0gd2hpbGUgKDApXG4gNDA1Olx0I2RlZmluZSBsb2NrZGVwX3VucGluX2xvY2sobCwgYylcdFx0ZG8geyAodm9pZCkobCk7ICh2b2lkKShjKTsgfSB3aGlsZSAoMClcbiA0MDY6XHRcbiA0MDc6XHQjZGVmaW5lIERFRklORV9XQUlUX09WRVJSSURFX01BUChfbmFtZSwgX3dhaXRfdHlwZSlcdFxcXG4gNDA4Olx0XHRzdHJ1Y3QgbG9ja2RlcF9tYXAgX19tYXliZV91bnVzZWQgX25hbWUgPSB7fVxuIDQwOTpcdFxuIDQxMDpcdCNlbmRpZiAvKiAhTE9DS0RFUCAqL1xuIDQxMTpcdFxuIDQxMjpcdCNpZmRlZiBDT05GSUdfUFJPVkVfTE9DS0lOR1xuIDQxMzpcdHZvaWQgbG9ja2RlcF9zZXRfbG9ja19jbXBfZm4oc3RydWN0IGxvY2tkZXBfbWFwICosIGxvY2tfY21wX2ZuLCBsb2NrX3ByaW50X2ZuKTtcbiA0MTQ6XHRcbiA0MTU6XHQjZGVmaW5lIGxvY2tfc2V0X2NtcF9mbihsb2NrLCAuLi4pXHRsb2NrZGVwX3NldF9sb2NrX2NtcF9mbihcdTAwMjYobG9jayktXHUwMDNlZGVwX21hcCwgX19WQV9BUkdTX18pXG4gNDE2Olx0I2Vsc2VcbiA0MTc6XHQjZGVmaW5lIGxvY2tfc2V0X2NtcF9mbihsb2NrLCAuLi4pXHRkbyB7IH0gd2hpbGUgKDApXG4gNDE4Olx0I2VuZGlmXG4gNDE5Olx0XG4gNDIwOlx0ZW51bSB4aGxvY2tfY29udGV4dF90IHtcbiA0MjE6XHRcdFhITE9DS19IQVJELFxuIDQyMjpcdFx0WEhMT0NLX1NPRlQsXG4gNDIzOlx0XHRYSExPQ0tfQ1RYX05SLFxuIDQyNDpcdH07XG4gNDI1Olx0XG4gNDI2Olx0LypcbiA0Mjc6XHQgKiBUbyBpbml0aWFsaXplIGEgbG9ja2RlcF9tYXAgc3RhdGljYWxseSB1c2UgdGhpcyBtYWNyby5cbiA0Mjg6XHQgKiBOb3RlIHRoYXQgX25hbWUgbXVzdCBub3QgYmUgTlVMTC5cbiA0Mjk6XHQgKi9cbiA0MzA6XHQjZGVmaW5lIFNUQVRJQ19MT0NLREVQX01BUF9JTklUKF9uYW1lLCBfa2V5KSBcXFxuIDQzMTpcdFx0eyAubmFtZSA9IChfbmFtZSksIC5rZXkgPSAodm9pZCAqKShfa2V5KSwgfVxuIDQzMjpcdFxuIDQzMzpcdHN0YXRpYyBpbmxpbmUgdm9pZCBsb2NrZGVwX2ludmFyaWFudF9zdGF0ZShib29sIGZvcmNlKSB7fVxuIDQzNDpcdHN0YXRpYyBpbmxpbmUgdm9pZCBsb2NrZGVwX2ZyZWVfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spIHt9XG4gNDM1Olx0XG4gNDM2Olx0I2lmZGVmIENPTkZJR19MT0NLX1NUQVRcbiA0Mzc6XHRcbiA0Mzg6XHRleHRlcm4gdm9pZCBsb2NrX2NvbnRlbmRlZChzdHJ1Y3QgbG9ja2RlcF9tYXAgKmxvY2ssIHVuc2lnbmVkIGxvbmcgaXApO1xuIDQzOTpcdGV4dGVybiB2b2lkIGxvY2tfYWNxdWlyZWQoc3RydWN0IGxvY2tkZXBfbWFwICpsb2NrLCB1bnNpZ25lZCBsb25nIGlwKTtcbiA0NDA6XHRcbiA0NDE6XHQjZGVmaW5lIExPQ0tfQ09OVEVOREVEKF9sb2NrLCB0cnksIGxvY2spXHRcdFx0XFxcbiA0NDI6XHRkbyB7XHRcdFx0XHRcdFx0XHRcdFxcXG4gNDQzOlx0XHRpZiAoIXRyeShfbG9jaykpIHtcdFx0XHRcdFx0XFxcbiA0NDQ6XHRcdFx0bG9ja19jb250ZW5kZWQoXHUwMDI2KF9sb2NrKS1cdTAwM2VkZXBfbWFwLCBfUkVUX0lQXyk7XHRcXFxuIDQ0NTpcdFx0XHRsb2NrKF9sb2NrKTtcdFx0XHRcdFx0XFxcbiA0NDY6XHRcdH1cdFx0XHRcdFx0XHRcdFxcXG4gNDQ3Olx0XHRsb2NrX2FjcXVpcmVkKFx1MDAyNihfbG9jayktXHUwMDNlZGVwX21hcCwgX1JFVF9JUF8pO1x0XHRcdFxcXG4gNDQ4Olx0fSB3aGlsZSAoMClcbiA0NDk6XHRcbiA0NTA6XHQjZGVmaW5lIExPQ0tfQ09OVEVOREVEX1JFVFVSTihfbG9jaywgdHJ5LCBsb2NrKVx0XHRcdFxcXG4gNDUxOlx0KHtcdFx0XHRcdFx0XHRcdFx0XFxcbiA0NTI6XHRcdGludCBfX19fZXJyID0gMDtcdFx0XHRcdFx0XFxcbiA0NTM6XHRcdGlmICghdHJ5KF9sb2NrKSkge1x0XHRcdFx0XHRcXFxuIDQ1NDpcdFx0XHRsb2NrX2NvbnRlbmRlZChcdTAwMjYoX2xvY2spLVx1MDAzZWRlcF9tYXAsIF9SRVRfSVBfKTtcdFxcXG4gNDU1Olx0XHRcdF9fX19lcnIgPSBsb2NrKF9sb2NrKTtcdFx0XHRcdFxcXG4gNDU2Olx0XHR9XHRcdFx0XHRcdFx0XHRcXFxuIDQ1NzpcdFx0aWYgKCFfX19fZXJyKVx0XHRcdFx0XHRcdFxcXG4gNDU4Olx0XHRcdGxvY2tfYWNxdWlyZWQoXHUwMDI2KF9sb2NrKS1cdTAwM2VkZXBfbWFwLCBfUkVUX0lQXyk7XHRcXFxuIDQ1OTpcdFx0X19fX2VycjtcdFx0XHRcdFx0XHRcXFxuIDQ2MDpcdH0pXG4gNDYxOlx0XG4gNDYyOlx0I2Vsc2UgLyogQ09ORklHX0xPQ0tfU1RBVCAqL1xuIDQ2MzpcdFxuIDQ2NDpcdCNkZWZpbmUgbG9ja19jb250ZW5kZWQobG9ja2RlcF9tYXAsIGlwKSBkbyB7fSB3aGlsZSAoMClcbiA0NjU6XHQjZGVmaW5lIGxvY2tfYWNxdWlyZWQobG9ja2RlcF9tYXAsIGlwKSBkbyB7fSB3aGlsZSAoMClcbiA0NjY6XHRcbiA0Njc6XHQjZGVmaW5lIExPQ0tfQ09OVEVOREVEKF9sb2NrLCB0cnksIGxvY2spIFxcXG4gNDY4Olx0XHRsb2NrKF9sb2NrKVxuIDQ2OTpcdFxuIDQ3MDpcdCNkZWZpbmUgTE9DS19DT05URU5ERURfUkVUVVJOKF9sb2NrLCB0cnksIGxvY2spIFxcXG4gNDcxOlx0XHRsb2NrKF9sb2NrKVxuIDQ3MjpcdFxuIDQ3MzpcdCNlbmRpZiAvKiBDT05GSUdfTE9DS19TVEFUICovXG4gNDc0Olx0XG4gNDc1Olx0I2lmZGVmIENPTkZJR19QUk9WRV9MT0NLSU5HXG4gNDc2Olx0ZXh0ZXJuIHZvaWQgcHJpbnRfaXJxdHJhY2VfZXZlbnRzKHN0cnVjdCB0YXNrX3N0cnVjdCAqY3Vycik7XG4gNDc3Olx0I2Vsc2VcbiA0Nzg6XHRzdGF0aWMgaW5saW5lIHZvaWQgcHJpbnRfaXJxdHJhY2VfZXZlbnRzKHN0cnVjdCB0YXNrX3N0cnVjdCAqY3VycilcbiA0Nzk6XHR7XG4gNDgwOlx0fVxuIDQ4MTpcdCNlbmRpZlxuIDQ4MjpcdFxuIDQ4MzpcdC8qIFZhcmlhYmxlIHVzZWQgdG8gbWFrZSBsb2NrZGVwIHRyZWF0IHJlYWRfbG9jaygpIGFzIHJlY3Vyc2l2ZSBpbiBzZWxmdGVzdHMgKi9cbiA0ODQ6XHQjaWZkZWYgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUU1xuIDQ4NTpcdGV4dGVybiB1bnNpZ25lZCBpbnQgZm9yY2VfcmVhZF9sb2NrX3JlY3Vyc2l2ZTtcbiA0ODY6XHQjZWxzZSAvKiBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTICovXG4gNDg3Olx0I2RlZmluZSBmb3JjZV9yZWFkX2xvY2tfcmVjdXJzaXZlIDBcbiA0ODg6XHQjZW5kaWYgLyogQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyAqL1xuIDQ4OTpcdFxuIDQ5MDpcdCNpZmRlZiBDT05GSUdfTE9DS0RFUFxuIDQ5MTpcdGV4dGVybiBib29sIHJlYWRfbG9ja19pc19yZWN1cnNpdmUodm9pZCk7XG4gNDkyOlx0I2Vsc2UgLyogQ09ORklHX0xPQ0tERVAgKi9cbiA0OTM6XHQvKiBJZiAhTE9DS0RFUCwgdGhlIHZhbHVlIGlzIG1lYW5pbmdsZXNzICovXG4gNDk0Olx0I2RlZmluZSByZWFkX2xvY2tfaXNfcmVjdXJzaXZlKCkgMFxuIDQ5NTpcdCNlbmRpZlxuIDQ5NjpcdFxuIDQ5NzpcdC8qXG4gNDk4Olx0ICogRm9yIHRyaXZpYWwgb25lLWRlcHRoIG5lc3Rpbmcgb2YgYSBsb2NrLWNsYXNzLCB0aGUgZm9sbG93aW5nXG4gNDk5Olx0ICogZ2xvYmFsIGRlZmluZSBjYW4gYmUgdXNlZC4gKFN1YnN5c3RlbXMgd2l0aCBtdWx0aXBsZSBsZXZlbHNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDc6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODQ4NAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDczCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQ29uZGl0aW9uYWwgQ29tcGlsYXRpb24gb2YgYHJ3c2VtX2FjcXVpcmVfcmVhZGAqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgdHJ5aW5nIHRvIHVuZGVyc3RhbmQgaG93IGByd3NlbV9hY3F1aXJlX3JlYWRgIGlzIGhhbmRsZWQuIEhtbSwgSSB0aG91Z2h0IGl0IHdhcyBkZWZpbmVkIHdpdGhpbiBhIGAjaWZkZWYgQ09ORklHX0xPQ0tERVBgIGJsb2NrLCBidXQgdGhhdCYjMzk7cyBub3QgcXVpdGUgcmlnaHQuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgYXJvdW5kIGxpbmUgNTM4LiBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiBob3cgdGhpcyBmdW5jdGlvbiBpcyBkZWZpbmVkLCBjb25kaXRpb25hbGx5LgoKU2luY2UgYHJ3c2VtX2FjcXVpcmVfcmVhZGAgaXMgbm90IHdpdGhpbiB0aGUgYCNpZmRlZiBDT05GSUdfTE9DS0RFUGAgYmxvY2ssIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgaGFwcGVucyB3aGVuIHRoYXQgZmVhdHVyZSAqaXNuJiMzOTt0KiBlbmFibGVkLiBUbyBkbyB0aGlzLCBJJiMzOTttIGdvaW5nIHRvIGp1bXAgaW50byBgaW5jbHVkZS9saW51eC9sb2NrZGVwLmhgIHRvIGNoZWNrIHRoZSBgI2Vsc2VgIGJyYW5jaCB0aGF0JiMzOTtzIHByb2JhYmx5IGJlaW5nIHVzZWQuIFNwZWNpZmljYWxseSwgSSYjMzk7bGwgZm9jdXMgb24gbGluZXMgMzUwLTQwMCBvZiB0aGF0IGhlYWRlciBmaWxlLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBwaWN0dXJlIG9mIHRoZSBhbHRlcm5hdGl2ZSBkZWZpbml0aW9uIGFuZCBhbnkgcmVsYXRlZCBjb25kaXRpb25hbCBjb21waWxhdGlvbiwgc28gSSBjYW4gdW5kZXJzdGFuZCB0aGUgY29tcGxldGUgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDc6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2xvY2tkZXAuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzUwOlx0XHRcdGRvIHsgKHZvaWQpKG5hbWUpOyAodm9pZCkoa2V5KTsgfSB3aGlsZSAoMClcbiAzNTE6XHQjIGRlZmluZSBsb2NrZGVwX3NldF9jbGFzcyhsb2NrLCBrZXkpXHRcdGRvIHsgKHZvaWQpKGtleSk7IH0gd2hpbGUgKDApXG4gMzUyOlx0IyBkZWZpbmUgbG9ja2RlcF9zZXRfY2xhc3NfYW5kX25hbWUobG9jaywga2V5LCBuYW1lKSBcXFxuIDM1MzpcdFx0XHRkbyB7ICh2b2lkKShrZXkpOyAodm9pZCkobmFtZSk7IH0gd2hpbGUgKDApXG4gMzU0Olx0I2RlZmluZSBsb2NrZGVwX3NldF9jbGFzc19hbmRfc3ViY2xhc3MobG9jaywga2V5LCBzdWIpIFxcXG4gMzU1Olx0XHRcdGRvIHsgKHZvaWQpKGtleSk7IH0gd2hpbGUgKDApXG4gMzU2Olx0I2RlZmluZSBsb2NrZGVwX3NldF9zdWJjbGFzcyhsb2NrLCBzdWIpXHRcdGRvIHsgfSB3aGlsZSAoMClcbiAzNTc6XHRcbiAzNTg6XHQjZGVmaW5lIGxvY2tkZXBfc2V0X25vdmFsaWRhdGVfY2xhc3MobG9jaykgZG8geyB9IHdoaWxlICgwKVxuIDM1OTpcdCNkZWZpbmUgbG9ja2RlcF9zZXRfbm90cmFja19jbGFzcyhsb2NrKSBkbyB7IH0gd2hpbGUgKDApXG4gMzYwOlx0XG4gMzYxOlx0LypcbiAzNjI6XHQgKiBXZSBkb24mIzM5O3QgZGVmaW5lIGxvY2tkZXBfbWF0Y2hfY2xhc3MoKSBhbmQgbG9ja2RlcF9tYXRjaF9rZXkoKSBmb3IgIUxPQ0tERVBcbiAzNjM6XHQgKiBjYXNlIHNpbmNlIHRoZSByZXN1bHQgaXMgbm90IHdlbGwgZGVmaW5lZCBhbmQgdGhlIGNhbGxlciBzaG91bGQgcmF0aGVyXG4gMzY0Olx0ICogI2lmZGVmIHRoZSBjYWxsIGhpbXNlbGYuXG4gMzY1Olx0ICovXG4gMzY2Olx0XG4gMzY3Olx0IyBkZWZpbmUgbG9ja2RlcF9yZXNldCgpXHRcdGRvIHsgZGVidWdfbG9ja3MgPSAxOyB9IHdoaWxlICgwKVxuIDM2ODpcdCMgZGVmaW5lIGxvY2tkZXBfZnJlZV9rZXlfcmFuZ2Uoc3RhcnQsIHNpemUpXHRkbyB7IH0gd2hpbGUgKDApXG4gMzY5Olx0IyBkZWZpbmUgbG9ja2RlcF9zeXNfZXhpdCgpIFx0XHRcdGRvIHsgfSB3aGlsZSAoMClcbiAzNzA6XHRcbiAzNzE6XHRzdGF0aWMgaW5saW5lIHZvaWQgbG9ja2RlcF9yZWdpc3Rlcl9rZXkoc3RydWN0IGxvY2tfY2xhc3Nfa2V5ICprZXkpXG4gMzcyOlx0e1xuIDM3MzpcdH1cbiAzNzQ6XHRcbiAzNzU6XHRzdGF0aWMgaW5saW5lIHZvaWQgbG9ja2RlcF91bnJlZ2lzdGVyX2tleShzdHJ1Y3QgbG9ja19jbGFzc19rZXkgKmtleSlcbiAzNzY6XHR7XG4gMzc3Olx0fVxuIDM3ODpcdFxuIDM3OTpcdCNkZWZpbmUgbG9ja2RlcF9kZXB0aCh0c2spXHQoMClcbiAzODA6XHRcbiAzODE6XHQvKlxuIDM4MjpcdCAqIER1bW15IGZvcndhcmQgZGVjbGFyYXRpb25zLCBhbGxvdyB1c2VycyB0byB3cml0ZSBsZXNzIGlmZGVmLXkgY29kZVxuIDM4MzpcdCAqIGFuZCBkZXBlbmQgb24gZGVhZCBjb2RlIGVsaW1pbmF0aW9uLlxuIDM4NDpcdCAqL1xuIDM4NTpcdGV4dGVybiBpbnQgbG9ja19pc19oZWxkKGNvbnN0IHZvaWQgKik7XG4gMzg2Olx0ZXh0ZXJuIGludCBsb2NrZGVwX2lzX2hlbGQoY29uc3Qgdm9pZCAqKTtcbiAzODc6XHQjZGVmaW5lIGxvY2tkZXBfaXNfaGVsZF90eXBlKGwsIHIpXHRcdCgxKVxuIDM4ODpcdFxuIDM4OTpcdCNkZWZpbmUgbG9ja2RlcF9hc3NlcnQoYylcdFx0XHRkbyB7IH0gd2hpbGUgKDApXG4gMzkwOlx0I2RlZmluZSBsb2NrZGVwX2Fzc2VydF9vbmNlKGMpXHRcdFx0ZG8geyB9IHdoaWxlICgwKVxuIDM5MTpcdFxuIDM5MjpcdCNkZWZpbmUgbG9ja2RlcF9hc3NlcnRfaGVsZChsKVx0XHRcdF9fYXNzdW1lX2N0eF9sb2NrKGwpXG4gMzkzOlx0I2RlZmluZSBsb2NrZGVwX2Fzc2VydF9ub3RfaGVsZChsKVx0XHRkbyB7ICh2b2lkKShsKTsgfSB3aGlsZSAoMClcbiAzOTQ6XHQjZGVmaW5lIGxvY2tkZXBfYXNzZXJ0X2hlbGRfd3JpdGUobClcdFx0X19hc3N1bWVfY3R4X2xvY2sobClcbiAzOTU6XHQjZGVmaW5lIGxvY2tkZXBfYXNzZXJ0X2hlbGRfcmVhZChsKVx0XHRfX2Fzc3VtZV9zaGFyZWRfY3R4X2xvY2sobClcbiAzOTY6XHQjZGVmaW5lIGxvY2tkZXBfYXNzZXJ0X2hlbGRfb25jZShsKVx0XHRkbyB7ICh2b2lkKShsKTsgfSB3aGlsZSAoMClcbiAzOTc6XHQjZGVmaW5lIGxvY2tkZXBfYXNzZXJ0X25vbmVfaGVsZF9vbmNlKClcdGRvIHsgfSB3aGlsZSAoMClcbiAzOTg6XHRcbiAzOTk6XHQjZGVmaW5lIGxvY2tkZXBfcmVjdXJzaW5nKHRzaylcdFx0XHQoMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDc6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTc3OAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgbGlrZSB5b3U6CgoqKkludmVzdGlnYXRpbmcgYHJ3c2VtX2FjcXVpcmVfcmVhZGAgRGVmaW5pdGlvbiAoTm8gTG9ja2RlcCkqKgoKT2theSwgbXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBwaW5wb2ludCB0aGUgZGVmaW5pdGlvbiBvZiBgcndzZW1fYWNxdWlyZV9yZWFkYCB1bmRlciB0aGUgY29uZGl0aW9uIHdoZXJlIGBDT05GSUdfTE9DS0RFUGAgaXMgKm5vdCogZW5hYmxlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGJlaGF2aW9yIGluIHRoaXMgc3BlY2lmaWMsIHNpbXBsZXIgbG9ja2luZyBzY2VuYXJpby4gU2luY2UgSSYjMzk7bSB3b3JraW5nIHdpdGggYSBjb25maWd1cmF0aW9uLWRlcGVuZGVudCBmdW5jdGlvbiwgdGhlIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzIHdpbGwgYmUgdGhlIGtleS4gSSYjMzk7bGwgYmUgc2lmdGluZyB0aHJvdWdoIHRoZSByZWxldmFudCBrZXJuZWwgaGVhZGVycyBhbmQgc291cmNlIGZpbGVzIHRvIGxvY2F0ZSB3aGVyZSB0aGF0IGZ1bmN0aW9uIGlzIGFjdHVhbGx5IGltcGxlbWVudGVkIHdoZW4gbG9ja2RlcCBpc24mIzM5O3QgaW4gcGxheS4gSSBhbnRpY2lwYXRlIHRoZXJlIG1pZ2h0IGJlIGEgc2VwYXJhdGUgbWFjcm8gZGVmaW5pdGlvbiwgb3IgcGVyaGFwcyBhIGRpcmVjdCBpbmxpbmUgZnVuY3Rpb24gaW1wbGVtZW50YXRpb24uIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHNvbWV0aGluZyB0aGF0IGNsYXJpZmllcyBleGFjdGx5IGhvdyB0aGUgcmVhZCBhY3F1aXJlIGlzIGhhbmRsZWQgaW4gdGhpcyBsZXNzIGNvbXBsZXggc2V0dXAsIGVzcGVjaWFsbHkgcmVnYXJkaW5nIGhvdyB0aGUgc2VtYXBob3JlJiMzOTtzIGludGVybmFsIHN0YXRlIGlzIHVwZGF0ZWQuIEkgbmVlZCB0byBncmFzcCB0aGUgbG93LWxldmVsIG1lY2hhbmljcyB3aXRob3V0IHRoZSBsb2NrIGRlcGVuZGVuY3kgdHJhY2tpbmcgb3ZlcmhlYWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA3OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0OyNkZWZpbmUgcndzZW1fYWNxdWlyZV9yZWFkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9sb2NrZGVwLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9sb2NrZGVwLmg9NTE5PWRvIHtcdFx0XHRcdFx0XHRcdFx0XHRcXFxuLS1cbmluY2x1ZGUvbGludXgvbG9ja2RlcC5oLTUzNy0jZGVmaW5lIHJ3c2VtX2FjcXVpcmVfbmVzdChsLCBzLCB0LCBuLCBpKVx0bG9ja19hY3F1aXJlX2V4Y2x1c2l2ZShsLCBzLCB0LCBuLCBpKVxuaW5jbHVkZS9saW51eC9sb2NrZGVwLmg6NTM4OiNkZWZpbmUgcndzZW1fYWNxdWlyZV9yZWFkKGwsIHMsIHQsIGkpXHRcdGxvY2tfYWNxdWlyZV9zaGFyZWQobCwgcywgdCwgTlVMTCwgaSlcbmluY2x1ZGUvbGludXgvbG9ja2RlcC5oLTUzOS0jZGVmaW5lIHJ3c2VtX3JlbGVhc2UobCwgaSlcdFx0XHRsb2NrX3JlbGVhc2UobCwgaSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDc6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAyMDQKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhhdCBjb2RlOgoKKipEaXZpbmcgaW50byB0aGUgYHJ3c2VtX2FjcXVpcmVfcmVhZGAgRGVmaW5pdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSBgcndzZW1fYWNxdWlyZV9yZWFkYCBpcyBkZWZpbmVkLiBUaGUgaGludCBzYXlzIGxpbmUgNTM4LCBidXQgSSYjMzk7bSBiZWluZyB0aG9yb3VnaCwgc28gSSB3YW50IHRvIGNvbmZpcm0gdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQsIGFuZCBjaGVjayBpZiBhbnkgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gbWFjcm9zIGFyZSBpbnZvbHZlZC4gSSYjMzk7bGwgdGFrZSBhIGxvb2sgYXQgbGluZXMgNTAwLTU1MC4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBjb2RlIGFyb3VuZCB0aGF0IGFyZWEgcmV2ZWFscy4gSXQmIzM5O3MgYSBxdWljayB3YXkgdG8gZ2V0IHRoZSBsYXkgb2YgdGhlIGxhbmQsIHVuZGVyc3RhbmQgYW55IHN1cnJvdW5kaW5nIGRlZmluaXRpb25zLCBhbmQgZGV0ZXJtaW5lIGlmIGBDT05GSUdfTE9DS0RFUGAgaGFzIGFueSBiZWFyaW5nIG9uIGl0cyBhY3R1YWwgZGVjbGFyYXRpb24uIE5vIG5lZWQgdG8gc2tpbSwgSSBuZWVkIGZ1bGwgY29udGV4dCBvZiB0aGUgY29kZS4gVGhpcyBpcyBlc3NlbnRpYWwgZm9yIGEgY29tcGxldGUgdW5kZXJzdGFuZGluZyBvZiBob3cgaXQmIzM5O3MgYmVpbmcgdXNlZC4gTGV0JiMzOTtzIGNoZWNrIHRob3NlIGxpbmVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNzoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbG9ja2RlcC5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1MDA6XHQgKiBvZiBuZXN0aW5nIHNob3VsZCBkZWZpbmUgdGhlaXIgb3duIGxvY2stbmVzdGluZyBzdWJjbGFzc2VzLilcbiA1MDE6XHQgKi9cbiA1MDI6XHQjZGVmaW5lIFNJTkdMRV9ERVBUSF9ORVNUSU5HXHRcdFx0MVxuIDUwMzpcdFxuIDUwNDpcdC8qXG4gNTA1Olx0ICogTWFwIHRoZSBkZXBlbmRlbmN5IG9wcyB0byBOT1Agb3IgdG8gcmVhbCBsb2NrZGVwIG9wcywgZGVwZW5kaW5nXG4gNTA2Olx0ICogb24gdGhlIHBlciBsb2NrLWNsYXNzIGRlYnVnIG1vZGU6XG4gNTA3Olx0ICovXG4gNTA4Olx0XG4gNTA5Olx0I2RlZmluZSBsb2NrX2FjcXVpcmVfZXhjbHVzaXZlKGwsIHMsIHQsIG4sIGkpXHRcdGxvY2tfYWNxdWlyZShsLCBzLCB0LCAwLCAxLCBuLCBpKVxuIDUxMDpcdCNkZWZpbmUgbG9ja19hY3F1aXJlX3NoYXJlZChsLCBzLCB0LCBuLCBpKVx0XHRsb2NrX2FjcXVpcmUobCwgcywgdCwgMSwgMSwgbiwgaSlcbiA1MTE6XHQjZGVmaW5lIGxvY2tfYWNxdWlyZV9zaGFyZWRfcmVjdXJzaXZlKGwsIHMsIHQsIG4sIGkpXHRsb2NrX2FjcXVpcmUobCwgcywgdCwgMiwgMSwgbiwgaSlcbiA1MTI6XHRcbiA1MTM6XHQjZGVmaW5lIHNwaW5fYWNxdWlyZShsLCBzLCB0LCBpKVx0XHRsb2NrX2FjcXVpcmVfZXhjbHVzaXZlKGwsIHMsIHQsIE5VTEwsIGkpXG4gNTE0Olx0I2RlZmluZSBzcGluX2FjcXVpcmVfbmVzdChsLCBzLCB0LCBuLCBpKVx0bG9ja19hY3F1aXJlX2V4Y2x1c2l2ZShsLCBzLCB0LCBuLCBpKVxuIDUxNTpcdCNkZWZpbmUgc3Bpbl9yZWxlYXNlKGwsIGkpXHRcdFx0bG9ja19yZWxlYXNlKGwsIGkpXG4gNTE2Olx0XG4gNTE3Olx0I2RlZmluZSByd2xvY2tfYWNxdWlyZShsLCBzLCB0LCBpKVx0XHRsb2NrX2FjcXVpcmVfZXhjbHVzaXZlKGwsIHMsIHQsIE5VTEwsIGkpXG4gNTE4Olx0I2RlZmluZSByd2xvY2tfYWNxdWlyZV9yZWFkKGwsIHMsIHQsIGkpXHRcdFx0XHRcdFxcXG4gNTE5Olx0ZG8ge1x0XHRcdFx0XHRcdFx0XHRcdFxcXG4gNTIwOlx0XHRpZiAocmVhZF9sb2NrX2lzX3JlY3Vyc2l2ZSgpKVx0XHRcdFx0XHRcXFxuIDUyMTpcdFx0XHRsb2NrX2FjcXVpcmVfc2hhcmVkX3JlY3Vyc2l2ZShsLCBzLCB0LCBOVUxMLCBpKTtcdFxcXG4gNTIyOlx0XHRlbHNlXHRcdFx0XHRcdFx0XHRcdFxcXG4gNTIzOlx0XHRcdGxvY2tfYWNxdWlyZV9zaGFyZWQobCwgcywgdCwgTlVMTCwgaSk7XHRcdFx0XFxcbiA1MjQ6XHR9IHdoaWxlICgwKVxuIDUyNTpcdFxuIDUyNjpcdCNkZWZpbmUgcndsb2NrX3JlbGVhc2UobCwgaSlcdFx0XHRsb2NrX3JlbGVhc2UobCwgaSlcbiA1Mjc6XHRcbiA1Mjg6XHQjZGVmaW5lIHNlcWNvdW50X2FjcXVpcmUobCwgcywgdCwgaSlcdFx0bG9ja19hY3F1aXJlX2V4Y2x1c2l2ZShsLCBzLCB0LCBOVUxMLCBpKVxuIDUyOTpcdCNkZWZpbmUgc2VxY291bnRfYWNxdWlyZV9yZWFkKGwsIHMsIHQsIGkpXHRsb2NrX2FjcXVpcmVfc2hhcmVkX3JlY3Vyc2l2ZShsLCBzLCB0LCBOVUxMLCBpKVxuIDUzMDpcdCNkZWZpbmUgc2VxY291bnRfcmVsZWFzZShsLCBpKVx0XHRcdGxvY2tfcmVsZWFzZShsLCBpKVxuIDUzMTpcdFxuIDUzMjpcdCNkZWZpbmUgbXV0ZXhfYWNxdWlyZShsLCBzLCB0LCBpKVx0XHRsb2NrX2FjcXVpcmVfZXhjbHVzaXZlKGwsIHMsIHQsIE5VTEwsIGkpXG4gNTMzOlx0I2RlZmluZSBtdXRleF9hY3F1aXJlX25lc3QobCwgcywgdCwgbiwgaSlcdGxvY2tfYWNxdWlyZV9leGNsdXNpdmUobCwgcywgdCwgbiwgaSlcbiA1MzQ6XHQjZGVmaW5lIG11dGV4X3JlbGVhc2UobCwgaSlcdFx0XHRsb2NrX3JlbGVhc2UobCwgaSlcbiA1MzU6XHRcbiA1MzY6XHQjZGVmaW5lIHJ3c2VtX2FjcXVpcmUobCwgcywgdCwgaSlcdFx0bG9ja19hY3F1aXJlX2V4Y2x1c2l2ZShsLCBzLCB0LCBOVUxMLCBpKVxuIDUzNzpcdCNkZWZpbmUgcndzZW1fYWNxdWlyZV9uZXN0KGwsIHMsIHQsIG4sIGkpXHRsb2NrX2FjcXVpcmVfZXhjbHVzaXZlKGwsIHMsIHQsIG4sIGkpXG4gNTM4Olx0I2RlZmluZSByd3NlbV9hY3F1aXJlX3JlYWQobCwgcywgdCwgaSlcdFx0bG9ja19hY3F1aXJlX3NoYXJlZChsLCBzLCB0LCBOVUxMLCBpKVxuIDUzOTpcdCNkZWZpbmUgcndzZW1fcmVsZWFzZShsLCBpKVx0XHRcdGxvY2tfcmVsZWFzZShsLCBpKVxuIDU0MDpcdFxuIDU0MTpcdCNkZWZpbmUgbG9ja19tYXBfYWNxdWlyZShsKVx0XHRcdGxvY2tfYWNxdWlyZV9leGNsdXNpdmUobCwgMCwgMCwgTlVMTCwgX1RISVNfSVBfKVxuIDU0MjpcdCNkZWZpbmUgbG9ja19tYXBfYWNxdWlyZV90cnkobClcdFx0XHRsb2NrX2FjcXVpcmVfZXhjbHVzaXZlKGwsIDAsIDEsIE5VTEwsIF9USElTX0lQXylcbiA1NDM6XHQjZGVmaW5lIGxvY2tfbWFwX2FjcXVpcmVfcmVhZChsKVx0XHRsb2NrX2FjcXVpcmVfc2hhcmVkX3JlY3Vyc2l2ZShsLCAwLCAwLCBOVUxMLCBfVEhJU19JUF8pXG4gNTQ0Olx0I2RlZmluZSBsb2NrX21hcF9hY3F1aXJlX3RyeXJlYWQobClcdFx0bG9ja19hY3F1aXJlX3NoYXJlZF9yZWN1cnNpdmUobCwgMCwgMSwgTlVMTCwgX1RISVNfSVBfKVxuIDU0NTpcdCNkZWZpbmUgbG9ja19tYXBfcmVsZWFzZShsKVx0XHRcdGxvY2tfcmVsZWFzZShsLCBfVEhJU19JUF8pXG4gNTQ2Olx0I2RlZmluZSBsb2NrX21hcF9zeW5jKGwpXHRcdFx0bG9ja19zeW5jKGwsIDAsIDAsIDEsIE5VTEwsIF9USElTX0lQXylcbiA1NDc6XHRcbiA1NDg6XHQjaWZkZWYgQ09ORklHX1BST1ZFX0xPQ0tJTkdcbiA1NDk6XHQjIGRlZmluZSBtaWdodF9sb2NrKGxvY2spXHRcdFx0XHRcdFx0XFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDc6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE3MzIKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqRGVjb25zdHJ1Y3RpbmcgYSBMb2NrIEFjcXVpc2l0aW9uIENhbGwqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSSBzZWUgYGxvY2tfYWNxdWlyZV9zaGFyZWRgIGlzIGRlZmluZWQgdXNpbmcgYSBtb3JlIGdlbmVyYWwgZnVuY3Rpb24gY2FsbDogYGxvY2tfYWNxdWlyZShsLCBzLCB0LCAxLCAxLCBuLCBpKWAuIE5vdGhpbmcgc3VycHJpc2luZyB0aGVyZSAtIG1ha2VzIHNlbnNlIHRvIGhhdmUgYSBjb3JlIGZ1bmN0aW9uLiBCdXQgaG9sZCBvbi4uLiBpZiBgQ09ORklHX0xPQ0tERVBgIGlzIGRpc2FibGVkLCB3aGF0ICpleGFjdGx5KiBkb2VzIGBsb2NrX2FjcXVpcmVgICpiZWNvbWUqPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHN5c3RlbSBiZWhhdmVzIHVuZGVyIGRpZmZlcmVudCBjb21waWxhdGlvbiBzY2VuYXJpb3MuIElzIGl0IGEgc2ltcGxlIGlubGluZSBmdW5jdGlvbiwgb3IgZG9lcyBpdCByZXNvbHZlIHRvIHNvbWV0aGluZyBtb3JlIHByaW1pdGl2ZT8gQXJlIGFueSBkZWJ1Z2dpbmcgYWlkcyBkaXNhYmxlZD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyB0byBoYXZlIGFueSBjb25maWRlbmNlIGluIGhvdyB0aGlzIGxvY2sgaXMgYmVoYXZpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA3OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0OyNkZWZpbmUgbG9ja19hY3F1aXJlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9sb2NrZGVwLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9sb2NrZGVwLmg9NDQyPWRvIHtcdFx0XHRcdFx0XHRcdFx0XFxcbi0tXG5pbmNsdWRlL2xpbnV4L2xvY2tkZXAuaC00NjQtI2RlZmluZSBsb2NrX2NvbnRlbmRlZChsb2NrZGVwX21hcCwgaXApIGRvIHt9IHdoaWxlICgwKVxuaW5jbHVkZS9saW51eC9sb2NrZGVwLmg6NDY1OiNkZWZpbmUgbG9ja19hY3F1aXJlZChsb2NrZGVwX21hcCwgaXApIGRvIHt9IHdoaWxlICgwKVxuaW5jbHVkZS9saW51eC9sb2NrZGVwLmgtNDY2LVxuLS1cbmluY2x1ZGUvbGludXgvbG9ja2RlcC5oPTQ5MT1leHRlcm4gYm9vbCByZWFkX2xvY2tfaXNfcmVjdXJzaXZlKHZvaWQpO1xuLS1cbmluY2x1ZGUvbGludXgvbG9ja2RlcC5oLTUwOC1cbmluY2x1ZGUvbGludXgvbG9ja2RlcC5oOjUwOTojZGVmaW5lIGxvY2tfYWNxdWlyZV9leGNsdXNpdmUobCwgcywgdCwgbiwgaSlcdFx0bG9ja19hY3F1aXJlKGwsIHMsIHQsIDAsIDEsIG4sIGkpXG5pbmNsdWRlL2xpbnV4L2xvY2tkZXAuaDo1MTA6I2RlZmluZSBsb2NrX2FjcXVpcmVfc2hhcmVkKGwsIHMsIHQsIG4sIGkpXHRcdGxvY2tfYWNxdWlyZShsLCBzLCB0LCAxLCAxLCBuLCBpKVxuaW5jbHVkZS9saW51eC9sb2NrZGVwLmg6NTExOiNkZWZpbmUgbG9ja19hY3F1aXJlX3NoYXJlZF9yZWN1cnNpdmUobCwgcywgdCwgbiwgaSlcdGxvY2tfYWNxdWlyZShsLCBzLCB0LCAyLCAxLCBuLCBpKVxuaW5jbHVkZS9saW51eC9sb2NrZGVwLmgtNTEyLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNzoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjMxMQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqVHJhY2luZyBgbG9ja19hY3F1aXJlYCYjMzk7cyBPcmlnaW4qKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBgbG9ja19hY3F1aXJlYCBmdW5jdGlvbiBiZXR0ZXIuIFdoZXJlIGV4YWN0bHkgaXMgaXQgZGVmaW5lZCB3aXRoaW4gdGhlIGNvZGViYXNlPyBJIG5lZWQgdG8gdHJhY2UgaXRzIG9yaWdpbiB0byB1bmRlcnN0YW5kIGl0cyBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIGFuZCBwb3RlbnRpYWwgaW1wbGljYXRpb25zIGZvciBjb25jdXJyZW5jeS4gSXMgaXQgYSBzeXN0ZW0gY2FsbCwgYSBrZXJuZWwgZnVuY3Rpb24sIGEgdXNlcnNwYWNlIGxpYnJhcnksIG9yIHBlcmhhcHMgYSBjdXN0b20gaW1wbGVtZW50YXRpb24gd2l0aGluIHRoaXMgc3BlY2lmaWMgcHJvamVjdD8gTXkgaW1tZWRpYXRlIGFwcHJvYWNoIHdvdWxkIGJlIHRvIHVzZSB3aGF0ZXZlciB0b29scyBhcmUgYXZhaWxhYmxlOiBncmVwLCBmaW5kLCB0aGUgc3ltYm9sIGJyb3dzZXIgaW4gbXkgSURFLCBvciBldmVuIGEgYmFzaWMgc291cmNlIGNvZGUgc2VhcmNoLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBkZWZpbml0aXZlIGRlY2xhcmF0aW9uIOKAkyB0aGUgaGVhZGVyIGZpbGUsIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgd2hlcmUgaXQmIzM5O3MgZGVmaW5lZCBhbmQgd2hhdCB0aGUgc3Vycm91bmRpbmcgY29udGV4dCBzYXlzLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpdHMgcHJvdG90eXBlIGFzIHdlbGwsIGZvciB3aGF0IGFyZ3VtZW50cyBkb2VzIGl0IGV4cGVjdCwgYW5kIHdoYXQgZG9lcyBpdCByZXR1cm4uIFRoZSBuZXh0IHN0ZXAgd2lsbCBiZSB0byBjaGVjayBmb3IgYW55IHJlbGV2YW50IGhlYWRlciBmaWxlcyBvciBpbmNsdWRlIHBhdGhzIHRvIGxvY2F0ZSB0aGUgZGVmaW5pdGlvbi4gVWx0aW1hdGVseSwgSSBuZWVkIHRoZSBjb25jcmV0ZSBjb2RlIHRvIGFuYWx5emUgaXRzIGJlaGF2aW9yLiBJIGFudGljaXBhdGUgbmVlZGluZyB0byB1bmRlcnN0YW5kIGFueSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcyB1c2VkIGludGVybmFsbHkgYW5kIGhvdyBpdCBpbnRlZ3JhdGVzIHdpdGggdGhlIG92ZXJhbGwgbG9ja2luZyBzY2hlbWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA3OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RlZmluZSBsb2NrX2FjcXVpcmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2xvY2tkZXAuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2xvY2tkZXAuaD0zMzI9c3RhdGljIGlubGluZSB2b2lkIGxvY2tkZXBfc2V0X3NlbGZ0ZXN0X3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKVxuLS1cbmluY2x1ZGUvbGludXgvbG9ja2RlcC5oLTMzNS1cbmluY2x1ZGUvbGludXgvbG9ja2RlcC5oOjMzNjojIGRlZmluZSBsb2NrX2FjcXVpcmUobCwgcywgdCwgciwgYywgbiwgaSlcdGRvIHsgfSB3aGlsZSAoMClcbmluY2x1ZGUvbGludXgvbG9ja2RlcC5oLTMzNy0jIGRlZmluZSBsb2NrX3JlbGVhc2UobCwgaSlcdFx0XHRkbyB7IH0gd2hpbGUgKDApXG4tLVxuaW5jbHVkZS9saW51eC9sb2NrZGVwLmg9NDQyPWRvIHtcdFx0XHRcdFx0XHRcdFx0XFxcbi0tXG5pbmNsdWRlL2xpbnV4L2xvY2tkZXAuaC00NjQtI2RlZmluZSBsb2NrX2NvbnRlbmRlZChsb2NrZGVwX21hcCwgaXApIGRvIHt9IHdoaWxlICgwKVxuaW5jbHVkZS9saW51eC9sb2NrZGVwLmg6NDY1OiNkZWZpbmUgbG9ja19hY3F1aXJlZChsb2NrZGVwX21hcCwgaXApIGRvIHt9IHdoaWxlICgwKVxuaW5jbHVkZS9saW51eC9sb2NrZGVwLmgtNDY2LVxuLS1cbmluY2x1ZGUvbGludXgvbG9ja2RlcC5oPTQ5MT1leHRlcm4gYm9vbCByZWFkX2xvY2tfaXNfcmVjdXJzaXZlKHZvaWQpO1xuLS1cbmluY2x1ZGUvbGludXgvbG9ja2RlcC5oLTUwOC1cbmluY2x1ZGUvbGludXgvbG9ja2RlcC5oOjUwOTojZGVmaW5lIGxvY2tfYWNxdWlyZV9leGNsdXNpdmUobCwgcywgdCwgbiwgaSlcdFx0bG9ja19hY3F1aXJlKGwsIHMsIHQsIDAsIDEsIG4sIGkpXG5pbmNsdWRlL2xpbnV4L2xvY2tkZXAuaDo1MTA6I2RlZmluZSBsb2NrX2FjcXVpcmVfc2hhcmVkKGwsIHMsIHQsIG4sIGkpXHRcdGxvY2tfYWNxdWlyZShsLCBzLCB0LCAxLCAxLCBuLCBpKVxuaW5jbHVkZS9saW51eC9sb2NrZGVwLmg6NTExOiNkZWZpbmUgbG9ja19hY3F1aXJlX3NoYXJlZF9yZWN1cnNpdmUobCwgcywgdCwgbiwgaSlcdGxvY2tfYWNxdWlyZShsLCBzLCB0LCAyLCAxLCBuLCBpKVxuaW5jbHVkZS9saW51eC9sb2NrZGVwLmgtNTEyLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNzoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzA0MAoJCQkJCQkJb3V0cHV0OiAxMTMKCQkJCQkJCXRob3VnaHRzOiA5OTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgdGhlIFByb3Bvc2VkIFBhdGNoKioKCk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCwgbXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0aGF0IHRoZSBjaGFuZ2VzIHRvIGByd3NlbV9hY3F1aXJlX3JlYWRgIHNlZW1lZCBwdXJlbHkgcmVsYXRlZCB0byBsb2NrZGVwIGFubm90YXRpb25zLCBnaXZlbiB0aGUgYENPTkZJR19MT0NLREVQYCBjb250ZXh0LiBBbmQgdGhlIGZhY3QgdGhhdCB3aGVuIGxvY2tkZXAgaXMgZGlzYWJsZWQsIGBsb2NrX2FjcXVpcmVgIGlzIGEgbm8tb3AgbWFjcm8sIHRoYXQgcmVpbmZvcmNlZCB0aGlzLgoKVGhlIGNvZGUgc25pcHBldHMgaGlnaGxpZ2h0ZWQgYSByZWZhY3RvcmluZyB0byByZXBsYWNlIGEgZGlyZWN0IGZsYWcgY2hlY2sgd2l0aCBhIGxvY2FsIGBub3dhaXRgIHZhcmlhYmxlLiBUaGUga2V5IGNoYW5nZSB0aGF0IGNhdWdodCBteSBleWUgd2FzIHBhc3NpbmcgdGhpcyBgbm93YWl0YCB2YXJpYWJsZSB0byBgcndzZW1fYWNxdWlyZV9yZWFkYC4gVGhpcyBsb29rZWQgdG8gYmUgYWJvdXQgY29udmV5aW5nIHdoZXRoZXIgYSAmIzM0O3RyeWxvY2smIzM0OyB3YXMgYXR0ZW1wdGVkLCBhIGNyaXRpY2FsIHBpZWNlIG9mIGluZm8gZm9yIGxvY2tkZXAmIzM5O3MgdHJhY2tpbmcuCgpUaGVuLCBJIHdlbnQgZGVlcGVyLiBJIHZlcmlmaWVkIHRoYXQgYHJ3c2VtX2FjcXVpcmVfcmVhZGAgaW5kZWVkIG1hcHMgdG8gYSBzZXJpZXMgb2YgYGxvY2tfYWNxdWlyZWAgY2FsbHMuIEFuZCB0aGUgcGFyYW1ldGVyIGJlaW5nIG1vZGlmaWVkIGlzIHRoZSAmIzM0O3RyeWxvY2smIzM0OyBwYXJhbWV0ZXIgb2YgdGhhdCBgbG9ja19hY3F1aXJlYCBjaGFpbi4gSWYgYG5vd2FpdGAgaXMgdHJ1ZSwgYSB0cnlsb2NrIGlzIGluZGljYXRlZCB0byBsb2NrZGVwOyBvdGhlcndpc2UgaXQmIzM5O3MgYSByZWd1bGFyIGxvY2suCgpUaGUgaW1wb3J0YW50IHBvaW50IGlzIHRoaXMgcGFyYW1ldGVyIGNoYW5nZSBvbmx5IGltcGFjdHMgaG93IGxvY2tkZXAgbW9uaXRvcnMgdGhlIGxvY2tpbmcgYmVoYXZpb3IuIFRoZSAqYWN0dWFsKiBleGVjdXRpb24gcGF0aCwgdGhlICphY3R1YWwqIGxvY2tpbmcgYmVoYXZpb3IsIGlzbiYjMzk7dCBtb2RpZmllZC4gYGJsa190cnlfZW50ZXJfcXVldWVgIGlzbiYjMzk7dCB0b3VjaGVkLCBub3IgYXJlIGFueSBvZiB0aGUgdW5kZXJseWluZyBsb2NraW5nIHByaW1pdGl2ZXMgZGlyZWN0bHkgY2hhbmdlZCBieSBhbnkgb2YgdGhpcy4KClRoZXJlZm9yZSwgdGhpcyBwYXRjaCBib2lscyBkb3duIHRvIHRoZXNlIG1vZGlmaWNhdGlvbnM6CjEuICBFeHRyYWN0aW5nIHRoZSBgUkVRX05PV0FJVGAgZmxhZyBpbnRvIGEgYG5vd2FpdGAgYm9vbGVhbiBmb3IgcmVhZGFiaWxpdHkuCjIuICBVc2luZyB0aGUgYG5vd2FpdGAgYm9vbGVhbiB2YXJpYWJsZSBpbiBjb25kaXRpb25hbCBzdGF0ZW1lbnRzLgozLiAgUGFzc2luZyBgbm93YWl0YCB0byBgcndzZW1fYWNxdWlyZV9yZWFkYCB3aGljaCwgaW4gdHVybiwgaW1wYWN0cyBsb2NrZGVwIGFubm90YXRpb24uCgpHaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBjaGFuZ2VzLCB0aGlzIHBhdGNoIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IGZ1bmN0aW9uYWwgYmVoYXZpb3IgaW50byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIHByaW9yaXRpemVkIGZvciBmdXp6aW5nLiBUaGUgY2hhbmdlcyBhcmUgYWJvdXQgdGhlIGxvY2tkZXAgdHJhY2tpbmcsIG5vdCBhYm91dCBhbnkgZnVuY3Rpb25hbCBtb2RpZmljYXRpb24uIEkmIzM5O2xsIGZsYWcgdGhpcyBhcyBXb3J0aEZ1enppbmc9ZmFsc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA3OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSByZWZhY3RvcnMgdGhlIGV4dHJhY3Rpb24gb2YgdGhlICYjMzk7bm93YWl0JiMzOTsgZmxhZyBpbnRvIGEgbG9jYWwgdmFyaWFibGUgYW5kIHBhc3NlcyBpdCBhcyB0aGUgJiMzOTt0cnlsb2NrJiMzOTsgcGFyYW1ldGVyIHRvIHJ3c2VtX2FjcXVpcmVfcmVhZCgpLiBTaW5jZSByd3NlbV9hY3F1aXJlX3JlYWQoKSBpcyBwdXJlbHkgYSBsb2NrZGVwIGFubm90YXRpb24gbWFjcm8gdGhhdCBleHBhbmRzIHRvIG5vdGhpbmcgd2hlbiBDT05GSUdfTE9DS0RFUCBpcyBkaXNhYmxlZCwgdGhpcyBwYXRjaCBkb2VzIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgdGhlIGV4ZWN1dGlvbiBmbG93IG9mIHRoZSBrZXJuZWwgYW5kIGlzIG5vdCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSByZWZhY3RvcnMgdGhlIGV4dHJhY3Rpb24gb2YgdGhlICYjMzk7bm93YWl0JiMzOTsgZmxhZyBpbnRvIGEgbG9jYWwgdmFyaWFibGUgYW5kIHBhc3NlcyBpdCBhcyB0aGUgJiMzOTt0cnlsb2NrJiMzOTsgcGFyYW1ldGVyIHRvIHJ3c2VtX2FjcXVpcmVfcmVhZCgpLiBTaW5jZSByd3NlbV9hY3F1aXJlX3JlYWQoKSBpcyBwdXJlbHkgYSBsb2NrZGVwIGFubm90YXRpb24gbWFjcm8gdGhhdCBleHBhbmRzIHRvIG5vdGhpbmcgd2hlbiBDT05GSUdfTE9DS0RFUCBpcyBkaXNhYmxlZCwgdGhpcyBwYXRjaCBkb2VzIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgdGhlIGV4ZWN1dGlvbiBmbG93IG9mIHRoZSBrZXJuZWwgYW5kIGlzIG5vdCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA3OjExOjIwLjMyNjU5MjY1OFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkxNDkzMjM5NTc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IHJlZmFjdG9ycyB0aGUgZXh0cmFjdGlvbiBvZiB0aGUgJ25vd2FpdCcgZmxhZyBpbnRvIGEgbG9jYWwgdmFyaWFibGUgYW5kIHBhc3NlcyBpdCBhcyB0aGUgJ3RyeWxvY2snIHBhcmFtZXRlciB0byByd3NlbV9hY3F1aXJlX3JlYWQoKS4gU2luY2UgcndzZW1fYWNxdWlyZV9yZWFkKCkgaXMgcHVyZWx5IGEgbG9ja2RlcCBhbm5vdGF0aW9uIG1hY3JvIHRoYXQgZXhwYW5kcyB0byBub3RoaW5nIHdoZW4gQ09ORklHX0xPQ0tERVAgaXMgZGlzYWJsZWQsIHRoaXMgcGF0Y2ggZG9lcyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIHRoZSBleGVjdXRpb24gZmxvdyBvZiB0aGUga2VybmVsIGFuZCBpcyBub3Qgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA3OjExOjIwLjMyNjU5OTc0OFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk0Mjc4MTIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgODVjMzIyMGEyNTlmOGY0MTNlZWI4ZTlmZDhhYzZjYjA5YTY0MTQ3ZFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IEF1ZyAxIDA3OjExOjE5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1jb3JlLmMgYi9ibG9jay9ibGstY29yZS5jXFxuaW5kZXggMzY1NjQxMjY2YzllOC4uZTVkYjU0NTk2ZTNkZCAxMDA2NDRcXG4tLS0gYS9ibG9jay9ibGstY29yZS5jXFxuKysrIGIvYmxvY2svYmxrLWNvcmUuY1xcbkBAIC0zNDcsOSArMzQ3LDEwIEBAIGJvb2wgYmxrX3F1ZXVlX3N0YXJ0X2RyYWluKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKVxcbiBpbnQgYmxrX3F1ZXVlX2VudGVyKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBibGtfbXFfcmVxX2ZsYWdzX3QgZmxhZ3MpXFxuIHtcXG4gXFx0Y29uc3QgYm9vbCBwbSA9IGZsYWdzIFxcdTAwMjYgQkxLX01RX1JFUV9QTTtcXG4rXFx0Y29uc3QgYm9vbCBub3dhaXQgPSBmbGFncyBcXHUwMDI2IEJMS19NUV9SRVFfTk9XQUlUO1xcbiBcXG4gXFx0d2hpbGUgKCFibGtfdHJ5X2VudGVyX3F1ZXVlKHEsIHBtKSkge1xcbi1cXHRcXHRpZiAoZmxhZ3MgXFx1MDAyNiBCTEtfTVFfUkVRX05PV0FJVClcXG4rXFx0XFx0aWYgKG5vd2FpdClcXG4gXFx0XFx0XFx0cmV0dXJuIC1FQUdBSU47XFxuIFxcbiBcXHRcXHQvKlxcbkBAIC0zNjgsMTcgKzM2OSwxOSBAQCBpbnQgYmxrX3F1ZXVlX2VudGVyKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBibGtfbXFfcmVxX2ZsYWdzX3QgZmxhZ3MpXFxuIFxcdFxcdFxcdHJldHVybiAtRU5PREVWO1xcbiBcXHR9XFxuIFxcbi1cXHRyd3NlbV9hY3F1aXJlX3JlYWQoXFx1MDAyNnEtXFx1MDAzZXFfbG9ja2RlcF9tYXAsIDAsIDAsIF9SRVRfSVBfKTtcXG4rXFx0cndzZW1fYWNxdWlyZV9yZWFkKFxcdTAwMjZxLVxcdTAwM2VxX2xvY2tkZXBfbWFwLCAwLCBub3dhaXQsIF9SRVRfSVBfKTtcXG4gXFx0cndzZW1fcmVsZWFzZShcXHUwMDI2cS1cXHUwMDNlcV9sb2NrZGVwX21hcCwgX1JFVF9JUF8pO1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4gaW50IF9fYmlvX3F1ZXVlX2VudGVyKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgYmlvICpiaW8pXFxuIHtcXG4rXFx0Y29uc3QgYm9vbCBub3dhaXQgPSBiaW8tXFx1MDAzZWJpX29wZiBcXHUwMDI2IFJFUV9OT1dBSVQ7XFxuK1xcbiBcXHR3aGlsZSAoIWJsa190cnlfZW50ZXJfcXVldWUocSwgZmFsc2UpKSB7XFxuIFxcdFxcdHN0cnVjdCBnZW5kaXNrICpkaXNrID0gYmlvLVxcdTAwM2ViaV9iZGV2LVxcdTAwM2ViZF9kaXNrO1xcbiBcXG4tXFx0XFx0aWYgKGJpby1cXHUwMDNlYmlfb3BmIFxcdTAwMjYgUkVRX05PV0FJVCkge1xcbitcXHRcXHRpZiAobm93YWl0KSB7XFxuIFxcdFxcdFxcdGlmICh0ZXN0X2JpdChHRF9ERUFELCBcXHUwMDI2ZGlzay1cXHUwMDNlc3RhdGUpKVxcbiBcXHRcXHRcXHRcXHRnb3RvIGRlYWQ7XFxuIFxcdFxcdFxcdGJpb193b3VsZGJsb2NrX2Vycm9yKGJpbyk7XFxuQEAgLTQwMSw3ICs0MDQsNyBAQCBpbnQgX19iaW9fcXVldWVfZW50ZXIoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCBiaW8gKmJpbylcXG4gXFx0XFx0XFx0Z290byBkZWFkO1xcbiBcXHR9XFxuIFxcbi1cXHRyd3NlbV9hY3F1aXJlX3JlYWQoXFx1MDAyNnEtXFx1MDAzZWlvX2xvY2tkZXBfbWFwLCAwLCAwLCBfUkVUX0lQXyk7XFxuK1xcdHJ3c2VtX2FjcXVpcmVfcmVhZChcXHUwMDI2cS1cXHUwMDNlaW9fbG9ja2RlcF9tYXAsIDAsIG5vd2FpdCwgX1JFVF9JUF8pO1xcbiBcXHRyd3NlbV9yZWxlYXNlKFxcdTAwMjZxLVxcdTAwM2Vpb19sb2NrZGVwX21hcCwgX1JFVF9JUF8pO1xcbiBcXHRyZXR1cm4gMDtcXG4gZGVhZDpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDc6MTE6MjAuODIxODA2ODdaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo5MDk5ODAwNjIyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSByZWZhY3RvcnMgdGhlIGV4dHJhY3Rpb24gb2YgdGhlICdub3dhaXQnIGZsYWcgaW50byBhIGxvY2FsIHZhcmlhYmxlIGFuZCBwYXNzZXMgaXQgYXMgdGhlICd0cnlsb2NrJyBwYXJhbWV0ZXIgdG8gcndzZW1fYWNxdWlyZV9yZWFkKCkuIFNpbmNlIHJ3c2VtX2FjcXVpcmVfcmVhZCgpIGlzIHB1cmVseSBhIGxvY2tkZXAgYW5ub3RhdGlvbiBtYWNybyB0aGF0IGV4cGFuZHMgdG8gbm90aGluZyB3aGVuIENPTkZJR19MT0NLREVQIGlzIGRpc2FibGVkLCB0aGlzIHBhdGNoIGRvZXMgbm90IGZ1bmN0aW9uYWxseSBhbHRlciB0aGUgZXhlY3V0aW9uIGZsb3cgb2YgdGhlIGtlcm5lbCBhbmQgaXMgbm90IHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA4NWMzMjIwYTI1OWY4ZjQxM2VlYjhlOWZkOGFjNmNiMDlhNjQxNDdkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMSAwNzoxMToxOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1jb3JlLmMgYi9ibG9jay9ibGstY29yZS5jXG5pbmRleCAzNjU2NDEyNjZjOWU4Li5lNWRiNTQ1OTZlM2RkIDEwMDY0NFxuLS0tIGEvYmxvY2svYmxrLWNvcmUuY1xuKysrIGIvYmxvY2svYmxrLWNvcmUuY1xuQEAgLTM0Nyw5ICszNDcsMTAgQEAgYm9vbCBibGtfcXVldWVfc3RhcnRfZHJhaW4oc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpXG4gaW50IGJsa19xdWV1ZV9lbnRlcihzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgYmxrX21xX3JlcV9mbGFnc190IGZsYWdzKVxuIHtcbiBcdGNvbnN0IGJvb2wgcG0gPSBmbGFncyBcdTAwMjYgQkxLX01RX1JFUV9QTTtcbitcdGNvbnN0IGJvb2wgbm93YWl0ID0gZmxhZ3MgXHUwMDI2IEJMS19NUV9SRVFfTk9XQUlUO1xuIFxuIFx0d2hpbGUgKCFibGtfdHJ5X2VudGVyX3F1ZXVlKHEsIHBtKSkge1xuLVx0XHRpZiAoZmxhZ3MgXHUwMDI2IEJMS19NUV9SRVFfTk9XQUlUKVxuK1x0XHRpZiAobm93YWl0KVxuIFx0XHRcdHJldHVybiAtRUFHQUlOO1xuIFxuIFx0XHQvKlxuQEAgLTM2OCwxNyArMzY5LDE5IEBAIGludCBibGtfcXVldWVfZW50ZXIoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIGJsa19tcV9yZXFfZmxhZ3NfdCBmbGFncylcbiBcdFx0XHRyZXR1cm4gLUVOT0RFVjtcbiBcdH1cbiBcbi1cdHJ3c2VtX2FjcXVpcmVfcmVhZChcdTAwMjZxLVx1MDAzZXFfbG9ja2RlcF9tYXAsIDAsIDAsIF9SRVRfSVBfKTtcbitcdHJ3c2VtX2FjcXVpcmVfcmVhZChcdTAwMjZxLVx1MDAzZXFfbG9ja2RlcF9tYXAsIDAsIG5vd2FpdCwgX1JFVF9JUF8pO1xuIFx0cndzZW1fcmVsZWFzZShcdTAwMjZxLVx1MDAzZXFfbG9ja2RlcF9tYXAsIF9SRVRfSVBfKTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbiBpbnQgX19iaW9fcXVldWVfZW50ZXIoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCBiaW8gKmJpbylcbiB7XG4rXHRjb25zdCBib29sIG5vd2FpdCA9IGJpby1cdTAwM2ViaV9vcGYgXHUwMDI2IFJFUV9OT1dBSVQ7XG4rXG4gXHR3aGlsZSAoIWJsa190cnlfZW50ZXJfcXVldWUocSwgZmFsc2UpKSB7XG4gXHRcdHN0cnVjdCBnZW5kaXNrICpkaXNrID0gYmlvLVx1MDAzZWJpX2JkZXYtXHUwMDNlYmRfZGlzaztcbiBcbi1cdFx0aWYgKGJpby1cdTAwM2ViaV9vcGYgXHUwMDI2IFJFUV9OT1dBSVQpIHtcbitcdFx0aWYgKG5vd2FpdCkge1xuIFx0XHRcdGlmICh0ZXN0X2JpdChHRF9ERUFELCBcdTAwMjZkaXNrLVx1MDAzZXN0YXRlKSlcbiBcdFx0XHRcdGdvdG8gZGVhZDtcbiBcdFx0XHRiaW9fd291bGRibG9ja19lcnJvcihiaW8pO1xuQEAgLTQwMSw3ICs0MDQsNyBAQCBpbnQgX19iaW9fcXVldWVfZW50ZXIoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCBiaW8gKmJpbylcbiBcdFx0XHRnb3RvIGRlYWQ7XG4gXHR9XG4gXG4tXHRyd3NlbV9hY3F1aXJlX3JlYWQoXHUwMDI2cS1cdTAwM2Vpb19sb2NrZGVwX21hcCwgMCwgMCwgX1JFVF9JUF8pO1xuK1x0cndzZW1fYWNxdWlyZV9yZWFkKFx1MDAyNnEtXHUwMDNlaW9fbG9ja2RlcF9tYXAsIDAsIG5vd2FpdCwgX1JFVF9JUF8pO1xuIFx0cndzZW1fcmVsZWFzZShcdTAwMjZxLVx1MDAzZWlvX2xvY2tkZXBfbWFwLCBfUkVUX0lQXyk7XG4gXHRyZXR1cm4gMDtcbiBkZWFkOlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDc6MTE6MjAuODIxODA5MDFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODU4NTk0NTY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFBhdGNoOiBMb2NrZGVwIEltcGxpY2F0aW9ucyBpbiBCbG9jayBMYXllcioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBibG9jay9ibGstY29yZS5jYC4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSBpbiBgYmxrX3F1ZXVlX2VudGVyYCBhbmQgYF9fYmlvX3F1ZXVlX2VudGVyYC4gSXQncyB0d2Vha2luZyBob3cgd2UncmUgY2FsbGluZyBgcndzZW1fYWNxdWlyZV9yZWFkYC4gU3BlY2lmaWNhbGx5LCB0aGUgYG5vd2FpdGAgZmxhZyBpcyBiZWluZyBpbnRyb2R1Y2VkIGFzIHRoZSBgdHJ5bG9ja2AgcGFyYW1ldGVyLiBUaGlzIGltbWVkaWF0ZWx5IGZsYWdzIHNvbWV0aGluZyDigJMgdGhpcyBoYXMgdG8gYmUgcmVsYXRlZCB0byBsb2NrZGVwIHRyYWNraW5nIGZvciByZXF1ZXN0IHF1ZXVlcy5cblxuV2FpdCwgYHJ3c2VtX2FjcXVpcmVfcmVhZGAuLi4gdGhhdCdzIGEgbG9ja2RlcCBhbm5vdGF0aW9uLCBpc24ndCBpdD8gSSBuZWVkIHRvIGNvbmZpcm0uIEkgc2hvdWxkIGNoZWNrIGl0cyBkZWZpbml0aW9uLiBJdCBzaG91bGQgYmUgaW4gYGluY2x1ZGUvbGludXgvbG9ja2RlcC5oYCBvciBzb21ld2hlcmUgc2ltaWxhci4gSWYgaXQgKmlzKiBqdXN0IGEgbG9ja2RlcCB3cmFwcGVyLCB0aGVuIHRoaXMgbWlnaHQgbm90IGJlIGEgZGlyZWN0IGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRlcm1zIG9mIHRoZSAqZXhlY3V0aW9uKiBmbG93LiBJdCdzIGFuIGltcG9ydGFudCBjaGFuZ2UsIGJ1dCBpdCdzICphYm91dCogbG9ja2RlcC5cblxuV2FpdCwgdGhvdWdo4oCmIGRvZXMgaXQgYWZmZWN0IHRoZSBleGVjdXRpb24gZmxvdyAqYXQgYWxsKj8gSG1tLiBgcndzZW1fYWNxdWlyZV9yZWFkYC4uLiBpdCdzIGEgbWFjcm8uIEkgbmVlZCB0byBrbm93IHdoYXQgaXQgZXhwYW5kcyB0by4gSXQgZXhwYW5kcyB0byBgbG9ja19hY3F1aXJlYCB3aGVuIGBDT05GSUdfTE9DS0RFUGAgaXMgZW5hYmxlZC4gSWYgYENPTkZJR19MT0NLREVQYCBpcyBkaXNhYmxlZCwgaXQgcHJvYmFibHkgZXhwYW5kcyB0b+KApiBub3RoaW5nPyBUaGlzIGlzIGltcG9ydGFudC4gSSBiZXR0ZXIgZG91YmxlLWNoZWNrIGluIGBpbmNsdWRlL2xpbnV4L2xvY2tkZXAuaGAgdG8gYmUgc3VyZS4gVGhpcyBjaGFuZ2UgY291bGQgaGF2ZSBtb3JlIGltcGxpY2F0aW9ucyB0aGFuIEkgaW5pdGlhbGx5IHRob3VnaHQgZGVwZW5kaW5nIG9uIGhvdyBsb2NrZGVwIGlzIGNvbmZpZ3VyZWQgaW4gYSBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1MjgsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNzoxMToyNS42ODA0MDcyNzRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ0OTAwMTMzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZWZpbmUgcndzZW1fYWNxdWlyZV9yZWFkXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbG9ja2RlcC5oPTUxOT1kbyB7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbi0tXFxuaW5jbHVkZS9saW51eC9sb2NrZGVwLmgtNTM3LSNkZWZpbmUgcndzZW1fYWNxdWlyZV9uZXN0KGwsIHMsIHQsIG4sIGkpXFx0bG9ja19hY3F1aXJlX2V4Y2x1c2l2ZShsLCBzLCB0LCBuLCBpKVxcbmluY2x1ZGUvbGludXgvbG9ja2RlcC5oOjUzODojZGVmaW5lIHJ3c2VtX2FjcXVpcmVfcmVhZChsLCBzLCB0LCBpKVxcdFxcdGxvY2tfYWNxdWlyZV9zaGFyZWQobCwgcywgdCwgTlVMTCwgaSlcXG5pbmNsdWRlL2xpbnV4L2xvY2tkZXAuaC01MzktI2RlZmluZSByd3NlbV9yZWxlYXNlKGwsIGkpXFx0XFx0XFx0bG9ja19yZWxlYXNlKGwsIGkpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA3OjExOjMwLjEyOTQxNTU5NVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIwMDYzNTE0ODc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqSW52ZXN0aWdhdGluZyBhIFBvdGVudGlhbCBMb2NrZGVwIE9wdGltaXphdGlvbioqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMgd2hldGhlciB0aGUgYHJ3c2VtX2FjcXVpcmVfcmVhZGAgZnVuY3Rpb24gaXMgc2ltcGx5IGEgbm8tb3AsIGFuIGVtcHR5IGRlZmluaXRpb24sIGluIHRoZSBrZXJuZWwncyBjb2RlIHdoZW4gdGhlIGBDT05GSUdfTE9DS0RFUGAgb3B0aW9uIGlzIHR1cm5lZCBvZmYuIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSBpZiB3ZSdyZSBkZWFsaW5nIHdpdGggYSBjb25kaXRpb25hbGx5IGNvbXBpbGVkIHNlY3Rpb24gb2YgY29kZSwgb3IgaWYgYENPTkZJR19MT0NLREVQYCBoYXMgbm8gaW1wYWN0IG9uIHRoaXMgcGFydGljdWxhciBmdW5jdGlvbi4gVGhpcyB3aWxsIGhlbHAgbWUgdW5kZXJzdGFuZCBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zIGFuZCB3aGV0aGVyIHdlIGNhbiBzdHJlYW1saW5lIHRoZSBjb2RlIGluIGEgbG9ja2RlcC1mcmVlIGVudmlyb25tZW50LiBJIG5lZWQgdG8gZ2V0IHRoaXMgYmFzaWMgcXVlc3Rpb24gYW5zd2VyZWQgYmVmb3JlIEkgY2FuIGZvcm0gYW4gb3BpbmlvbiBhYm91dCB0aGlzIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyODAsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNzoxMTo1MC4xOTI5MzI5MDFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcwMDU4MTc1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIjZGVmaW5lIHJ3c2VtX2FjcXVpcmVfcmVhZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2xvY2tkZXAuaD01MTk9ZG8ge1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4tLVxcbmluY2x1ZGUvbGludXgvbG9ja2RlcC5oLTUzNy0jZGVmaW5lIHJ3c2VtX2FjcXVpcmVfbmVzdChsLCBzLCB0LCBuLCBpKVxcdGxvY2tfYWNxdWlyZV9leGNsdXNpdmUobCwgcywgdCwgbiwgaSlcXG5pbmNsdWRlL2xpbnV4L2xvY2tkZXAuaDo1Mzg6I2RlZmluZSByd3NlbV9hY3F1aXJlX3JlYWQobCwgcywgdCwgaSlcXHRcXHRsb2NrX2FjcXVpcmVfc2hhcmVkKGwsIHMsIHQsIE5VTEwsIGkpXFxuaW5jbHVkZS9saW51eC9sb2NrZGVwLmgtNTM5LSNkZWZpbmUgcndzZW1fcmVsZWFzZShsLCBpKVxcdFxcdFxcdGxvY2tfcmVsZWFzZShsLCBpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNzoxMTo1NC44OTM1MjQ3NDdaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MjExMTE2MzExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIG15IGV4cGVydCB1bmRlcnN0YW5kaW5nOlxuXG4qKkRlZXAgRGl2ZSBpbnRvIExvY2tkZXAqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcsIFwiV2hlcmUncyB0aGUgYmVzdCBwbGFjZSB0byBzdGFydCB1bnRhbmdsaW5nIHRoaXMgaXNzdWU/XCIgTXkgbWluZCBpbW1lZGlhdGVseSBqdW1wcyB0byBgaW5jbHVkZS9saW51eC9sb2NrZGVwLmhgIOKAkyB0aGF0J3MgdGhlIGhlYXJ0IG9mIHRoZSBsb2NrIGRlcGVuZGVuY3kgZGV0ZWN0aW9uIG1lY2hhbmlzbSBpbiB0aGUga2VybmVsLiBTcGVjaWZpY2FsbHksIEknbSB6ZXJvaW5nIGluIGFyb3VuZCBsaW5lIDUzOC4gSSdtIG5vdCBnb2luZyB0byBwcmV0ZW5kIHRvIGtub3cgKmV4YWN0bHkqIHdoYXQncyB0aGVyZSBvZmYgdGhlIHRvcCBvZiBteSBoZWFkLCBidXQgSSBrbm93IHRoZSBnZW5lcmFsIHN0cnVjdHVyZSBvZiB0aGUgY29kZSBhcm91bmQgdGhhdCBhcmVhLiBMaW5lIDUzOCBpcyBsaWtlbHkgYSBjcml0aWNhbCBzZWN0aW9uIG9mIGNvZGUgcmVsYXRlZCB0byByZXBvcnRpbmcgbG9ja2RlcCBlcnJvcnMsIGhhbmRsaW5nIGxvY2sgY2xhc3Nlcywgb3IgcGVyaGFwcyB0aGUgcmVjdXJzaXZlIGxvY2tpbmcgZGV0ZWN0aW9uLiBJIGhhdmUgYSBmZWVsaW5nIHRoZSBwcm9ibGVtIEknbSB0cnlpbmcgdG8gc29sdmUgd2lsbCBiZSByb290ZWQgc29tZXdoZXJlIGluIHRoYXQgdmljaW5pdHksIHNvIHRoYXQncyB0aGUgbG9naWNhbCBqdW1waW5nLW9mZiBwb2ludCBmb3IgYSBkZWVwZXIgaW52ZXN0aWdhdGlvbi4gTGV0J3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM2NDMsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNzoxMjowMy4xMDQ2NDM3MzhaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzU0NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9sb2NrZGVwLmhcIixcbiAgXCJGaXJzdExpbmVcIjogNTIwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTIwOlxcdFxcdGlmIChyZWFkX2xvY2tfaXNfcmVjdXJzaXZlKCkpXFx0XFx0XFx0XFx0XFx0XFxcXFxcbiA1MjE6XFx0XFx0XFx0bG9ja19hY3F1aXJlX3NoYXJlZF9yZWN1cnNpdmUobCwgcywgdCwgTlVMTCwgaSk7XFx0XFxcXFxcbiA1MjI6XFx0XFx0ZWxzZVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gNTIzOlxcdFxcdFxcdGxvY2tfYWNxdWlyZV9zaGFyZWQobCwgcywgdCwgTlVMTCwgaSk7XFx0XFx0XFx0XFxcXFxcbiA1MjQ6XFx0fSB3aGlsZSAoMClcXG4gNTI1OlxcdFxcbiA1MjY6XFx0I2RlZmluZSByd2xvY2tfcmVsZWFzZShsLCBpKVxcdFxcdFxcdGxvY2tfcmVsZWFzZShsLCBpKVxcbiA1Mjc6XFx0XFxuIDUyODpcXHQjZGVmaW5lIHNlcWNvdW50X2FjcXVpcmUobCwgcywgdCwgaSlcXHRcXHRsb2NrX2FjcXVpcmVfZXhjbHVzaXZlKGwsIHMsIHQsIE5VTEwsIGkpXFxuIDUyOTpcXHQjZGVmaW5lIHNlcWNvdW50X2FjcXVpcmVfcmVhZChsLCBzLCB0LCBpKVxcdGxvY2tfYWNxdWlyZV9zaGFyZWRfcmVjdXJzaXZlKGwsIHMsIHQsIE5VTEwsIGkpXFxuIDUzMDpcXHQjZGVmaW5lIHNlcWNvdW50X3JlbGVhc2UobCwgaSlcXHRcXHRcXHRsb2NrX3JlbGVhc2UobCwgaSlcXG4gNTMxOlxcdFxcbiA1MzI6XFx0I2RlZmluZSBtdXRleF9hY3F1aXJlKGwsIHMsIHQsIGkpXFx0XFx0bG9ja19hY3F1aXJlX2V4Y2x1c2l2ZShsLCBzLCB0LCBOVUxMLCBpKVxcbiA1MzM6XFx0I2RlZmluZSBtdXRleF9hY3F1aXJlX25lc3QobCwgcywgdCwgbiwgaSlcXHRsb2NrX2FjcXVpcmVfZXhjbHVzaXZlKGwsIHMsIHQsIG4sIGkpXFxuIDUzNDpcXHQjZGVmaW5lIG11dGV4X3JlbGVhc2UobCwgaSlcXHRcXHRcXHRsb2NrX3JlbGVhc2UobCwgaSlcXG4gNTM1OlxcdFxcbiA1MzY6XFx0I2RlZmluZSByd3NlbV9hY3F1aXJlKGwsIHMsIHQsIGkpXFx0XFx0bG9ja19hY3F1aXJlX2V4Y2x1c2l2ZShsLCBzLCB0LCBOVUxMLCBpKVxcbiA1Mzc6XFx0I2RlZmluZSByd3NlbV9hY3F1aXJlX25lc3QobCwgcywgdCwgbiwgaSlcXHRsb2NrX2FjcXVpcmVfZXhjbHVzaXZlKGwsIHMsIHQsIG4sIGkpXFxuIDUzODpcXHQjZGVmaW5lIHJ3c2VtX2FjcXVpcmVfcmVhZChsLCBzLCB0LCBpKVxcdFxcdGxvY2tfYWNxdWlyZV9zaGFyZWQobCwgcywgdCwgTlVMTCwgaSlcXG4gNTM5OlxcdCNkZWZpbmUgcndzZW1fcmVsZWFzZShsLCBpKVxcdFxcdFxcdGxvY2tfcmVsZWFzZShsLCBpKVxcbiA1NDA6XFx0XFxuIDU0MTpcXHQjZGVmaW5lIGxvY2tfbWFwX2FjcXVpcmUobClcXHRcXHRcXHRsb2NrX2FjcXVpcmVfZXhjbHVzaXZlKGwsIDAsIDAsIE5VTEwsIF9USElTX0lQXylcXG4gNTQyOlxcdCNkZWZpbmUgbG9ja19tYXBfYWNxdWlyZV90cnkobClcXHRcXHRcXHRsb2NrX2FjcXVpcmVfZXhjbHVzaXZlKGwsIDAsIDEsIE5VTEwsIF9USElTX0lQXylcXG4gNTQzOlxcdCNkZWZpbmUgbG9ja19tYXBfYWNxdWlyZV9yZWFkKGwpXFx0XFx0bG9ja19hY3F1aXJlX3NoYXJlZF9yZWN1cnNpdmUobCwgMCwgMCwgTlVMTCwgX1RISVNfSVBfKVxcbiA1NDQ6XFx0I2RlZmluZSBsb2NrX21hcF9hY3F1aXJlX3RyeXJlYWQobClcXHRcXHRsb2NrX2FjcXVpcmVfc2hhcmVkX3JlY3Vyc2l2ZShsLCAwLCAxLCBOVUxMLCBfVEhJU19JUF8pXFxuIDU0NTpcXHQjZGVmaW5lIGxvY2tfbWFwX3JlbGVhc2UobClcXHRcXHRcXHRsb2NrX3JlbGVhc2UobCwgX1RISVNfSVBfKVxcbiA1NDY6XFx0I2RlZmluZSBsb2NrX21hcF9zeW5jKGwpXFx0XFx0XFx0bG9ja19zeW5jKGwsIDAsIDAsIDEsIE5VTEwsIF9USElTX0lQXylcXG4gNTQ3OlxcdFxcbiA1NDg6XFx0I2lmZGVmIENPTkZJR19QUk9WRV9MT0NLSU5HXFxuIDU0OTpcXHQjIGRlZmluZSBtaWdodF9sb2NrKGxvY2spXFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiA1NTA6XFx0ZG8ge1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gNTUxOlxcdFxcdHR5cGVjaGVjayhzdHJ1Y3QgbG9ja2RlcF9tYXAgKiwgXFx1MDAyNihsb2NrKS1cXHUwMDNlZGVwX21hcCk7XFx0XFx0XFxcXFxcbiA1NTI6XFx0XFx0bG9ja19hY3F1aXJlKFxcdTAwMjYobG9jayktXFx1MDAzZWRlcF9tYXAsIDAsIDAsIDAsIDEsIE5VTEwsIF9USElTX0lQXyk7XFx0XFxcXFxcbiA1NTM6XFx0XFx0bG9ja19yZWxlYXNlKFxcdTAwMjYobG9jayktXFx1MDAzZWRlcF9tYXAsIF9USElTX0lQXyk7XFx0XFx0XFx0XFxcXFxcbiA1NTQ6XFx0fSB3aGlsZSAoMClcXG4gNTU1OlxcdCMgZGVmaW5lIG1pZ2h0X2xvY2tfcmVhZChsb2NrKVxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gNTU2OlxcdGRvIHtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIDU1NzpcXHRcXHR0eXBlY2hlY2soc3RydWN0IGxvY2tkZXBfbWFwICosIFxcdTAwMjYobG9jayktXFx1MDAzZWRlcF9tYXApO1xcdFxcdFxcXFxcXG4gNTU4OlxcdFxcdGxvY2tfYWNxdWlyZShcXHUwMDI2KGxvY2spLVxcdTAwM2VkZXBfbWFwLCAwLCAwLCAxLCAxLCBOVUxMLCBfVEhJU19JUF8pO1xcdFxcXFxcXG4gNTU5OlxcdFxcdGxvY2tfcmVsZWFzZShcXHUwMDI2KGxvY2spLVxcdTAwM2VkZXBfbWFwLCBfVEhJU19JUF8pO1xcdFxcdFxcdFxcXFxcXG4gNTYwOlxcdH0gd2hpbGUgKDApXFxuIDU2MTpcXHQjIGRlZmluZSBtaWdodF9sb2NrX25lc3RlZChsb2NrLCBzdWJjbGFzcylcXHRcXHRcXHRcXHRcXFxcXFxuIDU2MjpcXHRkbyB7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiA1NjM6XFx0XFx0dHlwZWNoZWNrKHN0cnVjdCBsb2NrZGVwX21hcCAqLCBcXHUwMDI2KGxvY2spLVxcdTAwM2VkZXBfbWFwKTtcXHRcXHRcXFxcXFxuIDU2NDpcXHRcXHRsb2NrX2FjcXVpcmUoXFx1MDAyNihsb2NrKS1cXHUwMDNlZGVwX21hcCwgc3ViY2xhc3MsIDAsIDEsIDEsIE5VTEwsXFx0XFx0XFxcXFxcbiA1NjU6XFx0XFx0XFx0ICAgICBfVEhJU19JUF8pO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4gNTY2OlxcdFxcdGxvY2tfcmVsZWFzZShcXHUwMDI2KGxvY2spLVxcdTAwM2VkZXBfbWFwLCBfVEhJU19JUF8pO1xcdFxcdFxcdFxcXFxcXG4gNTY3OlxcdH0gd2hpbGUgKDApXFxuIDU2ODpcXHRcXG4gNTY5OlxcdERFQ0xBUkVfUEVSX0NQVShpbnQsIGhhcmRpcnFzX2VuYWJsZWQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNzoxMjowMy4xMDQ3ODEyOThaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDMxOTY0Njg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYXMgaWYgSSdtIHRoaW5raW5nIHRoZXNlIHRoaW5ncyBteXNlbGY6XG5cbioqVHJhY2luZyB0aGUgRGVmaW5pdGlvbiBvZiBgcndzZW1fYWNxdWlyZV9yZWFkYCAoQ09ORklHX0xPQ0tERVAgRGlzYWJsZWQpKipcblxuQWxyaWdodCwgc28gSSBuZWVkIHRvIGZpbmQgdGhlIGRlZmluaXRpb24gb2YgYHJ3c2VtX2FjcXVpcmVfcmVhZGAgd2hlbiBgQ09ORklHX0xPQ0tERVBgIGlzICpvZmYqLiBUaGF0J3MgdGhlIGtleS4gSSBrbm93IHdoZXJlIHRvIHN0YXJ0IGxvb2tpbmcsIGJ1dCBpdCdzIGltcG9ydGFudCB0byByZW1lbWJlciB0aGF0IHdpdGhvdXQgYExPQ0tERVBgLCB0aGUgaW1wbGVtZW50YXRpb24gbGlrZWx5IHRha2VzIGEgZGlmZmVyZW50IHBhdGgsIHByb2JhYmx5IGEgc2ltcGxlciBvbmUgdGhhdCBieXBhc3NlcyBzb21lIG9mIHRoZSBtb3JlIGVsYWJvcmF0ZSBsb2NraW5nIGRlcGVuZGVuY3kgdHJhY2tpbmcuIEkgZXhwZWN0IGl0IHRvIGJlIGEgbW9yZSBzdHJhaWdodGZvcndhcmQgaW1wbGVtZW50YXRpb24gaW52b2x2aW5nIGF0b21pYyBvcGVyYXRpb25zIGFuZCBwb3RlbnRpYWxseSBpbnRlcnJ1cHQgZGlzYWJsaW5nLCBidXQgSSBuZWVkIHRvIGNvbmZpcm0gdGhpcy4gSSB3aWxsIGxvb2sgZm9yIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzIG9yIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIHRvIGRpcmVjdCBtZSB0byB0aGUgY29ycmVjdCBkZWZpbml0aW9uLiBJdCdzIHBvc3NpYmxlIHRoZSBjb3JlIGxvZ2ljIGlzIGluIGEgZ2VuZXJhbCBoZWFkZXIsIGJ1dCBJJ2xsIG5lZWQgdG8gZm9sbG93IHRoZSBpbmNsdWRlcyBjYXJlZnVsbHkgdG8gZW5zdXJlIEknbSBnZXR0aW5nIHRoZSByaWdodCB2ZXJzaW9uIGZvciBhIG5vbi1gTE9DS0RFUGAgY29uZmlndXJhdGlvbi4gVGltZSB0byBzdGFydCBkaWdnaW5nIGluIHRoZSBrZXJuZWwgc291cmNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MTIxLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNzoxMjowNi41MzY3NDg3NDVaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MTcyMTE1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIjZGVmaW5lIHJ3c2VtX2FjcXVpcmVfcmVhZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL2xpbnV4L2xvY2tkZXAuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2xvY2tkZXAuaD01MTk9ZG8ge1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4tLVxcbmluY2x1ZGUvbGludXgvbG9ja2RlcC5oLTUzNy0jZGVmaW5lIHJ3c2VtX2FjcXVpcmVfbmVzdChsLCBzLCB0LCBuLCBpKVxcdGxvY2tfYWNxdWlyZV9leGNsdXNpdmUobCwgcywgdCwgbiwgaSlcXG5pbmNsdWRlL2xpbnV4L2xvY2tkZXAuaDo1Mzg6I2RlZmluZSByd3NlbV9hY3F1aXJlX3JlYWQobCwgcywgdCwgaSlcXHRcXHRsb2NrX2FjcXVpcmVfc2hhcmVkKGwsIHMsIHQsIE5VTEwsIGkpXFxuaW5jbHVkZS9saW51eC9sb2NrZGVwLmgtNTM5LSNkZWZpbmUgcndzZW1fcmVsZWFzZShsLCBpKVxcdFxcdFxcdGxvY2tfcmVsZWFzZShsLCBpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNzoxMjowNi42Nzg0NzU5OTJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ0MDY0ODI4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJ20gc3BlYWtpbmcgdG8gYSBmZWxsb3cgZXhwZXJ0OlxuXG4qKkZpbmRpbmcgdGhlIExvY2tkZXAgRGVmaW5pdGlvbioqXG5cblJpZ2h0LCBsZXQncyByZXZpc2l0IHRoYXQgYHJ3c2VtX2FjcXVpcmVfcmVhZGAgc2VhcmNoLiBJIG5lZWQgdG8gbmFpbCBkb3duIGV4YWN0bHkgaG93IHRoZSBsb2NrIGRlcGVuZGVuY3kgYW5hbHlzaXMsIHNwZWNpZmljYWxseSB3aXRoaW4gYGxvY2tkZXBgLCBoYW5kbGVzIHJlYWQgc2VtYXBob3JlIGFjcXVpc2l0aW9ucy4gVGhlIG1vc3QgbGlrZWx5IHNwb3QgdG8gZmluZCB0aGUgY29yZSBkZWZpbml0aW9uIGFuZCByZWxhdGVkIGluc3RydW1lbnRhdGlvbiBpcyBzdGlsbCBgaW5jbHVkZS9saW51eC9sb2NrZGVwLmhgLiBJJ2xsIHplcm8gaW4gb24gdGhhdCBmaWxlIGFnYWluLCBzZWUgaWYgbXkgaW50dWl0aW9uIGZyb20gdGhlIGxhc3Qgc2VhcmNoIGhvbGRzIHVwIG9yIGlmIEkgbWlzc2VkIHNvbWV0aGluZyBzdWJ0bGUgdGhlIGZpcnN0IHRpbWUgYXJvdW5kLiBUaW1lIHRvIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGF0IGNydWNpYWwgc2VjdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NTU2MiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA3OjEyOjEwLjExOTEyNzIyOVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg2MzY2NTY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJ3c2VtX2FjcXVpcmVfcmVhZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL2xpbnV4L2xvY2tkZXAuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2xvY2tkZXAuaD01MTk9ZG8ge1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4tLVxcbmluY2x1ZGUvbGludXgvbG9ja2RlcC5oLTUzNy0jZGVmaW5lIHJ3c2VtX2FjcXVpcmVfbmVzdChsLCBzLCB0LCBuLCBpKVxcdGxvY2tfYWNxdWlyZV9leGNsdXNpdmUobCwgcywgdCwgbiwgaSlcXG5pbmNsdWRlL2xpbnV4L2xvY2tkZXAuaDo1Mzg6I2RlZmluZSByd3NlbV9hY3F1aXJlX3JlYWQobCwgcywgdCwgaSlcXHRcXHRsb2NrX2FjcXVpcmVfc2hhcmVkKGwsIHMsIHQsIE5VTEwsIGkpXFxuaW5jbHVkZS9saW51eC9sb2NrZGVwLmgtNTM5LSNkZWZpbmUgcndzZW1fcmVsZWFzZShsLCBpKVxcdFxcdFxcdGxvY2tfcmVsZWFzZShsLCBpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNzoxMjoxMC4zMDU0OTkzMTVaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg4MjMxNTE3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlLi4uXG5cbioqQ2hlY2tpbmcgdGhlIFJlYWQtV3JpdGUgU2VtYXBob3JlIEltcGxlbWVudGF0aW9uIHdpdGggTG9jayBEZXBlbmRlbmN5IERpc2FibGVkKipcblxuSG1tLCBhIHF1ZXN0aW9uIGp1c3QgcG9wcGVkIGludG8gbXkgaGVhZC4gSWYgdGhlIGtlcm5lbCdzIGxvY2sgZGVwZW5kZW5jeSBjaGVja2VyIChgQ09ORklHX0xPQ0tERVBgKSBpcyBkaXNhYmxlZCwgZG9lcyB0aGF0IG1lYW4gdGhhdCB0aGUgYHJ3c2VtX2FjcXVpcmVfcmVhZGAgZnVuY3Rpb24gYmVjb21lcyBhIG5vLW9wPyBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYW5kIHNlZSB3aGF0IGl0J3MgZGVmaW5lZCBhcyB3aGVuIGxvY2tkZXAgaXNuJ3QgZW5hYmxlZC5cblxuSSBrbm93IHdoZXJlIHRvIGxvb2suIEknbGwgY2hlY2sgZWl0aGVyIGBpbmNsdWRlL2xpbnV4L3J3c2VtLmhgIHdoaWNoIHNob3VsZCBjb250YWluIHRoZSBjb3JlIGRlZmluaXRpb24gb2YgcmVhZC13cml0ZSBzZW1hcGhvcmVzLCBvciBgaW5jbHVkZS9saW51eC9sb2NrZGVwLmhgIHRvIHNlZSBpZiB0aGVyZSdzIGEgY29uZGl0aW9uYWwgZmFsbGJhY2sgaW1wbGVtZW50YXRpb24gb3IgYSBtYWNybyBpbnZvbHZlZCB3aGVuIGBDT05GSUdfTE9DS0RFUGAgaXMgdHVybmVkIG9mZi4gTGV0J3Mgc2VlIHdoYXQncyBhY3R1YWxseSBnb2luZyBvbiB1bmRlciB0aGUgaG9vZC4gSXQncyBwcm9iYWJseSBhIG1hY3JvLCBnaXZlbiB0aGUgd2F5IHRoYXQncyB1c3VhbGx5IGhhbmRsZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU5MjMsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNzoxMjoxNC4xODc4MTg5MTVaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNjY1NjU1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyd3NlbV9hY3F1aXJlX3JlYWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9sb2NrZGVwLmg9NTE5PWRvIHtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xvY2tkZXAuaC01MzctI2RlZmluZSByd3NlbV9hY3F1aXJlX25lc3QobCwgcywgdCwgbiwgaSlcXHRsb2NrX2FjcXVpcmVfZXhjbHVzaXZlKGwsIHMsIHQsIG4sIGkpXFxuaW5jbHVkZS9saW51eC9sb2NrZGVwLmg6NTM4OiNkZWZpbmUgcndzZW1fYWNxdWlyZV9yZWFkKGwsIHMsIHQsIGkpXFx0XFx0bG9ja19hY3F1aXJlX3NoYXJlZChsLCBzLCB0LCBOVUxMLCBpKVxcbmluY2x1ZGUvbGludXgvbG9ja2RlcC5oLTUzOS0jZGVmaW5lIHJ3c2VtX3JlbGVhc2UobCwgaSlcXHRcXHRcXHRsb2NrX3JlbGVhc2UobCwgaSlcXG4tLVxcbmluY2x1ZGUvbGludXgvcGVyY3B1LXJ3c2VtLmg9NDg9c3RhdGljIGlubGluZSB2b2lkIHBlcmNwdV9kb3duX3JlYWRfaW50ZXJuYWwoc3RydWN0IHBlcmNwdV9yd19zZW1hcGhvcmUgKnNlbSxcXG4tLVxcbmluY2x1ZGUvbGludXgvcGVyY3B1LXJ3c2VtLmgtNTItXFxuaW5jbHVkZS9saW51eC9wZXJjcHUtcndzZW0uaDo1MzpcXHRyd3NlbV9hY3F1aXJlX3JlYWQoXFx1MDAyNnNlbS1cXHUwMDNlZGVwX21hcCwgMCwgMCwgX1JFVF9JUF8pO1xcbmluY2x1ZGUvbGludXgvcGVyY3B1LXJ3c2VtLmgtNTQtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BlcmNwdS1yd3NlbS5oPTg2PXN0YXRpYyBpbmxpbmUgYm9vbCBwZXJjcHVfZG93bl9yZWFkX3RyeWxvY2soc3RydWN0IHBlcmNwdV9yd19zZW1hcGhvcmUgKnNlbSlcXG4tLVxcbmluY2x1ZGUvbGludXgvcGVyY3B1LXJ3c2VtLmgtMTA0LVxcdGlmIChyZXQpXFxuaW5jbHVkZS9saW51eC9wZXJjcHUtcndzZW0uaDoxMDU6XFx0XFx0cndzZW1fYWNxdWlyZV9yZWFkKFxcdTAwMjZzZW0tXFx1MDAzZWRlcF9tYXAsIDAsIDEsIF9SRVRfSVBfKTtcXG5pbmNsdWRlL2xpbnV4L3BlcmNwdS1yd3NlbS5oLTEwNi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDc6MTI6MTQuNDI0NDgwODkxWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5OTg5NDM1ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBMb2NrIFN0cnVjdHVyZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSBgcndzZW1fYWNxdWlyZV9yZWFkYCBpcyBhY3R1YWxseSBkZWZpbmVkLiBJIGtub3cgaXQncyByZWxhdGVkIHRvIHJlYWQvd3JpdGUgc2VtYXBob3Jlcywgc28gbXkgZ3V0IGZlZWxpbmcgaXMgdGhhdCBpdCdzIGdvaW5nIHRvIGJlIHNvbWV3aGVyZSBpbiB0aGUgY29yZSBrZXJuZWwgaGVhZGVycy4gTGV0J3Mgc2VlLi4uIGFoLCByaWdodCEgYHJ3c2VtX2FjcXVpcmVfcmVhZGAgaXMgZGVmaW5lZCBpbiBgaW5jbHVkZS9saW51eC9sb2NrZGVwLmhgLiBJIHJlY2FsbCB0aGF0IGZpbGUgYmVpbmcgdGhlIGhvbWUgb2YgbG9jayBkZWJ1Z2dpbmcgYW5kIGFuYWx5c2lzIHRvb2xzLiBBbHJpZ2h0LCBsZXQncyBvcGVuIHRoYXQgZmlsZSBhbmQgaGVhZCBvdmVyIHRvIGFyb3VuZCBsaW5lIDUzOC4gSSBuZWVkIHRvIGdldCBhIGJldHRlciBzZW5zZSBvZiB3aGF0IHRoaXMgZGVmaW5pdGlvbiBsb29rcyBsaWtlIGluIGl0cyBjb250ZXh0IHdpdGhpbiB0aGUgbG9ja2RlcCBpbmZyYXN0cnVjdHVyZS4gSSdtIGhvcGluZyB0byBnZXQgc29tZSBkZXRhaWxzIGFib3V0IGV4YWN0bHkgKmhvdyogdGhpcyByZWFkIHNlbWFwaG9yZSBhY3F1aXJlIGlzIHRyYWNrZWQgYW5kIGltcGxlbWVudGVkIHdpdGhpbiB0aGUga2VybmVsJ3MgbG9jayBkZWJ1Z2dpbmcgZnJhbWV3b3JrLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NjAxLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDc6MTI6MTguNDIzNDI3NTQ4WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NDQ4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL2xpbnV4L2xvY2tkZXAuaFwiLFxuICBcIkZpcnN0TGluZVwiOiA0MDAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDAwOlxcdFxcbiA0MDE6XFx0I2RlZmluZSBOSUxfQ09PS0lFIChzdHJ1Y3QgcGluX2Nvb2tpZSl7IH1cXG4gNDAyOlxcdFxcbiA0MDM6XFx0I2RlZmluZSBsb2NrZGVwX3Bpbl9sb2NrKGwpXFx0XFx0XFx0KHsgc3RydWN0IHBpbl9jb29raWUgY29va2llID0geyB9OyBjb29raWU7IH0pXFxuIDQwNDpcXHQjZGVmaW5lIGxvY2tkZXBfcmVwaW5fbG9jayhsLCBjKVxcdFxcdGRvIHsgKHZvaWQpKGwpOyAodm9pZCkoYyk7IH0gd2hpbGUgKDApXFxuIDQwNTpcXHQjZGVmaW5lIGxvY2tkZXBfdW5waW5fbG9jayhsLCBjKVxcdFxcdGRvIHsgKHZvaWQpKGwpOyAodm9pZCkoYyk7IH0gd2hpbGUgKDApXFxuIDQwNjpcXHRcXG4gNDA3OlxcdCNkZWZpbmUgREVGSU5FX1dBSVRfT1ZFUlJJREVfTUFQKF9uYW1lLCBfd2FpdF90eXBlKVxcdFxcXFxcXG4gNDA4OlxcdFxcdHN0cnVjdCBsb2NrZGVwX21hcCBfX21heWJlX3VudXNlZCBfbmFtZSA9IHt9XFxuIDQwOTpcXHRcXG4gNDEwOlxcdCNlbmRpZiAvKiAhTE9DS0RFUCAqL1xcbiA0MTE6XFx0XFxuIDQxMjpcXHQjaWZkZWYgQ09ORklHX1BST1ZFX0xPQ0tJTkdcXG4gNDEzOlxcdHZvaWQgbG9ja2RlcF9zZXRfbG9ja19jbXBfZm4oc3RydWN0IGxvY2tkZXBfbWFwICosIGxvY2tfY21wX2ZuLCBsb2NrX3ByaW50X2ZuKTtcXG4gNDE0OlxcdFxcbiA0MTU6XFx0I2RlZmluZSBsb2NrX3NldF9jbXBfZm4obG9jaywgLi4uKVxcdGxvY2tkZXBfc2V0X2xvY2tfY21wX2ZuKFxcdTAwMjYobG9jayktXFx1MDAzZWRlcF9tYXAsIF9fVkFfQVJHU19fKVxcbiA0MTY6XFx0I2Vsc2VcXG4gNDE3OlxcdCNkZWZpbmUgbG9ja19zZXRfY21wX2ZuKGxvY2ssIC4uLilcXHRkbyB7IH0gd2hpbGUgKDApXFxuIDQxODpcXHQjZW5kaWZcXG4gNDE5OlxcdFxcbiA0MjA6XFx0ZW51bSB4aGxvY2tfY29udGV4dF90IHtcXG4gNDIxOlxcdFxcdFhITE9DS19IQVJELFxcbiA0MjI6XFx0XFx0WEhMT0NLX1NPRlQsXFxuIDQyMzpcXHRcXHRYSExPQ0tfQ1RYX05SLFxcbiA0MjQ6XFx0fTtcXG4gNDI1OlxcdFxcbiA0MjY6XFx0LypcXG4gNDI3OlxcdCAqIFRvIGluaXRpYWxpemUgYSBsb2NrZGVwX21hcCBzdGF0aWNhbGx5IHVzZSB0aGlzIG1hY3JvLlxcbiA0Mjg6XFx0ICogTm90ZSB0aGF0IF9uYW1lIG11c3Qgbm90IGJlIE5VTEwuXFxuIDQyOTpcXHQgKi9cXG4gNDMwOlxcdCNkZWZpbmUgU1RBVElDX0xPQ0tERVBfTUFQX0lOSVQoX25hbWUsIF9rZXkpIFxcXFxcXG4gNDMxOlxcdFxcdHsgLm5hbWUgPSAoX25hbWUpLCAua2V5ID0gKHZvaWQgKikoX2tleSksIH1cXG4gNDMyOlxcdFxcbiA0MzM6XFx0c3RhdGljIGlubGluZSB2b2lkIGxvY2tkZXBfaW52YXJpYW50X3N0YXRlKGJvb2wgZm9yY2UpIHt9XFxuIDQzNDpcXHRzdGF0aWMgaW5saW5lIHZvaWQgbG9ja2RlcF9mcmVlX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKSB7fVxcbiA0MzU6XFx0XFxuIDQzNjpcXHQjaWZkZWYgQ09ORklHX0xPQ0tfU1RBVFxcbiA0Mzc6XFx0XFxuIDQzODpcXHRleHRlcm4gdm9pZCBsb2NrX2NvbnRlbmRlZChzdHJ1Y3QgbG9ja2RlcF9tYXAgKmxvY2ssIHVuc2lnbmVkIGxvbmcgaXApO1xcbiA0Mzk6XFx0ZXh0ZXJuIHZvaWQgbG9ja19hY3F1aXJlZChzdHJ1Y3QgbG9ja2RlcF9tYXAgKmxvY2ssIHVuc2lnbmVkIGxvbmcgaXApO1xcbiA0NDA6XFx0XFxuIDQ0MTpcXHQjZGVmaW5lIExPQ0tfQ09OVEVOREVEKF9sb2NrLCB0cnksIGxvY2spXFx0XFx0XFx0XFxcXFxcbiA0NDI6XFx0ZG8ge1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gNDQzOlxcdFxcdGlmICghdHJ5KF9sb2NrKSkge1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4gNDQ0OlxcdFxcdFxcdGxvY2tfY29udGVuZGVkKFxcdTAwMjYoX2xvY2spLVxcdTAwM2VkZXBfbWFwLCBfUkVUX0lQXyk7XFx0XFxcXFxcbiA0NDU6XFx0XFx0XFx0bG9jayhfbG9jayk7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiA0NDY6XFx0XFx0fVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gNDQ3OlxcdFxcdGxvY2tfYWNxdWlyZWQoXFx1MDAyNihfbG9jayktXFx1MDAzZWRlcF9tYXAsIF9SRVRfSVBfKTtcXHRcXHRcXHRcXFxcXFxuIDQ0ODpcXHR9IHdoaWxlICgwKVxcbiA0NDk6XFx0XFxuIDQ1MDpcXHQjZGVmaW5lIExPQ0tfQ09OVEVOREVEX1JFVFVSTihfbG9jaywgdHJ5LCBsb2NrKVxcdFxcdFxcdFxcXFxcXG4gNDUxOlxcdCh7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiA0NTI6XFx0XFx0aW50IF9fX19lcnIgPSAwO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4gNDUzOlxcdFxcdGlmICghdHJ5KF9sb2NrKSkge1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4gNDU0OlxcdFxcdFxcdGxvY2tfY29udGVuZGVkKFxcdTAwMjYoX2xvY2spLVxcdTAwM2VkZXBfbWFwLCBfUkVUX0lQXyk7XFx0XFxcXFxcbiA0NTU6XFx0XFx0XFx0X19fX2VyciA9IGxvY2soX2xvY2spO1xcdFxcdFxcdFxcdFxcXFxcXG4gNDU2OlxcdFxcdH1cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIDQ1NzpcXHRcXHRpZiAoIV9fX19lcnIpXFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiA0NTg6XFx0XFx0XFx0bG9ja19hY3F1aXJlZChcXHUwMDI2KF9sb2NrKS1cXHUwMDNlZGVwX21hcCwgX1JFVF9JUF8pO1xcdFxcXFxcXG4gNDU5OlxcdFxcdF9fX19lcnI7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiA0NjA6XFx0fSlcXG4gNDYxOlxcdFxcbiA0NjI6XFx0I2Vsc2UgLyogQ09ORklHX0xPQ0tfU1RBVCAqL1xcbiA0NjM6XFx0XFxuIDQ2NDpcXHQjZGVmaW5lIGxvY2tfY29udGVuZGVkKGxvY2tkZXBfbWFwLCBpcCkgZG8ge30gd2hpbGUgKDApXFxuIDQ2NTpcXHQjZGVmaW5lIGxvY2tfYWNxdWlyZWQobG9ja2RlcF9tYXAsIGlwKSBkbyB7fSB3aGlsZSAoMClcXG4gNDY2OlxcdFxcbiA0Njc6XFx0I2RlZmluZSBMT0NLX0NPTlRFTkRFRChfbG9jaywgdHJ5LCBsb2NrKSBcXFxcXFxuIDQ2ODpcXHRcXHRsb2NrKF9sb2NrKVxcbiA0Njk6XFx0XFxuIDQ3MDpcXHQjZGVmaW5lIExPQ0tfQ09OVEVOREVEX1JFVFVSTihfbG9jaywgdHJ5LCBsb2NrKSBcXFxcXFxuIDQ3MTpcXHRcXHRsb2NrKF9sb2NrKVxcbiA0NzI6XFx0XFxuIDQ3MzpcXHQjZW5kaWYgLyogQ09ORklHX0xPQ0tfU1RBVCAqL1xcbiA0NzQ6XFx0XFxuIDQ3NTpcXHQjaWZkZWYgQ09ORklHX1BST1ZFX0xPQ0tJTkdcXG4gNDc2OlxcdGV4dGVybiB2b2lkIHByaW50X2lycXRyYWNlX2V2ZW50cyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cnIpO1xcbiA0Nzc6XFx0I2Vsc2VcXG4gNDc4OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBwcmludF9pcnF0cmFjZV9ldmVudHMoc3RydWN0IHRhc2tfc3RydWN0ICpjdXJyKVxcbiA0Nzk6XFx0e1xcbiA0ODA6XFx0fVxcbiA0ODE6XFx0I2VuZGlmXFxuIDQ4MjpcXHRcXG4gNDgzOlxcdC8qIFZhcmlhYmxlIHVzZWQgdG8gbWFrZSBsb2NrZGVwIHRyZWF0IHJlYWRfbG9jaygpIGFzIHJlY3Vyc2l2ZSBpbiBzZWxmdGVzdHMgKi9cXG4gNDg0OlxcdCNpZmRlZiBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTXFxuIDQ4NTpcXHRleHRlcm4gdW5zaWduZWQgaW50IGZvcmNlX3JlYWRfbG9ja19yZWN1cnNpdmU7XFxuIDQ4NjpcXHQjZWxzZSAvKiBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTICovXFxuIDQ4NzpcXHQjZGVmaW5lIGZvcmNlX3JlYWRfbG9ja19yZWN1cnNpdmUgMFxcbiA0ODg6XFx0I2VuZGlmIC8qIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgKi9cXG4gNDg5OlxcdFxcbiA0OTA6XFx0I2lmZGVmIENPTkZJR19MT0NLREVQXFxuIDQ5MTpcXHRleHRlcm4gYm9vbCByZWFkX2xvY2tfaXNfcmVjdXJzaXZlKHZvaWQpO1xcbiA0OTI6XFx0I2Vsc2UgLyogQ09ORklHX0xPQ0tERVAgKi9cXG4gNDkzOlxcdC8qIElmICFMT0NLREVQLCB0aGUgdmFsdWUgaXMgbWVhbmluZ2xlc3MgKi9cXG4gNDk0OlxcdCNkZWZpbmUgcmVhZF9sb2NrX2lzX3JlY3Vyc2l2ZSgpIDBcXG4gNDk1OlxcdCNlbmRpZlxcbiA0OTY6XFx0XFxuIDQ5NzpcXHQvKlxcbiA0OTg6XFx0ICogRm9yIHRyaXZpYWwgb25lLWRlcHRoIG5lc3Rpbmcgb2YgYSBsb2NrLWNsYXNzLCB0aGUgZm9sbG93aW5nXFxuIDQ5OTpcXHQgKiBnbG9iYWwgZGVmaW5lIGNhbiBiZSB1c2VkLiAoU3Vic3lzdGVtcyB3aXRoIG11bHRpcGxlIGxldmVsc1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNzoxMjoxOC40MjM2MjQ3NjhaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTExNjEyNDU5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIENvbmRpdGlvbmFsIENvbXBpbGF0aW9uIG9mIGByd3NlbV9hY3F1aXJlX3JlYWRgKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCB0cnlpbmcgdG8gdW5kZXJzdGFuZCBob3cgYHJ3c2VtX2FjcXVpcmVfcmVhZGAgaXMgaGFuZGxlZC4gSG1tLCBJIHRob3VnaHQgaXQgd2FzIGRlZmluZWQgd2l0aGluIGEgYCNpZmRlZiBDT05GSUdfTE9DS0RFUGAgYmxvY2ssIGJ1dCB0aGF0J3Mgbm90IHF1aXRlIHJpZ2h0LiBJdCBsb29rcyBsaWtlIGl0J3MgYXJvdW5kIGxpbmUgNTM4LiBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiBob3cgdGhpcyBmdW5jdGlvbiBpcyBkZWZpbmVkLCBjb25kaXRpb25hbGx5LlxuXG5TaW5jZSBgcndzZW1fYWNxdWlyZV9yZWFkYCBpcyBub3Qgd2l0aGluIHRoZSBgI2lmZGVmIENPTkZJR19MT0NLREVQYCBibG9jaywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBoYXBwZW5zIHdoZW4gdGhhdCBmZWF0dXJlICppc24ndCogZW5hYmxlZC4gVG8gZG8gdGhpcywgSSdtIGdvaW5nIHRvIGp1bXAgaW50byBgaW5jbHVkZS9saW51eC9sb2NrZGVwLmhgIHRvIGNoZWNrIHRoZSBgI2Vsc2VgIGJyYW5jaCB0aGF0J3MgcHJvYmFibHkgYmVpbmcgdXNlZC4gU3BlY2lmaWNhbGx5LCBJJ2xsIGZvY3VzIG9uIGxpbmVzIDM1MC00MDAgb2YgdGhhdCBoZWFkZXIgZmlsZS4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgcGljdHVyZSBvZiB0aGUgYWx0ZXJuYXRpdmUgZGVmaW5pdGlvbiBhbmQgYW55IHJlbGF0ZWQgY29uZGl0aW9uYWwgY29tcGlsYXRpb24sIHNvIEkgY2FuIHVuZGVyc3RhbmQgdGhlIGNvbXBsZXRlIGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg0ODQsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA3OjEyOjI3LjUzOTc2NDMwNloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzI3NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9sb2NrZGVwLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMzUwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzUwOlxcdFxcdFxcdGRvIHsgKHZvaWQpKG5hbWUpOyAodm9pZCkoa2V5KTsgfSB3aGlsZSAoMClcXG4gMzUxOlxcdCMgZGVmaW5lIGxvY2tkZXBfc2V0X2NsYXNzKGxvY2ssIGtleSlcXHRcXHRkbyB7ICh2b2lkKShrZXkpOyB9IHdoaWxlICgwKVxcbiAzNTI6XFx0IyBkZWZpbmUgbG9ja2RlcF9zZXRfY2xhc3NfYW5kX25hbWUobG9jaywga2V5LCBuYW1lKSBcXFxcXFxuIDM1MzpcXHRcXHRcXHRkbyB7ICh2b2lkKShrZXkpOyAodm9pZCkobmFtZSk7IH0gd2hpbGUgKDApXFxuIDM1NDpcXHQjZGVmaW5lIGxvY2tkZXBfc2V0X2NsYXNzX2FuZF9zdWJjbGFzcyhsb2NrLCBrZXksIHN1YikgXFxcXFxcbiAzNTU6XFx0XFx0XFx0ZG8geyAodm9pZCkoa2V5KTsgfSB3aGlsZSAoMClcXG4gMzU2OlxcdCNkZWZpbmUgbG9ja2RlcF9zZXRfc3ViY2xhc3MobG9jaywgc3ViKVxcdFxcdGRvIHsgfSB3aGlsZSAoMClcXG4gMzU3OlxcdFxcbiAzNTg6XFx0I2RlZmluZSBsb2NrZGVwX3NldF9ub3ZhbGlkYXRlX2NsYXNzKGxvY2spIGRvIHsgfSB3aGlsZSAoMClcXG4gMzU5OlxcdCNkZWZpbmUgbG9ja2RlcF9zZXRfbm90cmFja19jbGFzcyhsb2NrKSBkbyB7IH0gd2hpbGUgKDApXFxuIDM2MDpcXHRcXG4gMzYxOlxcdC8qXFxuIDM2MjpcXHQgKiBXZSBkb24ndCBkZWZpbmUgbG9ja2RlcF9tYXRjaF9jbGFzcygpIGFuZCBsb2NrZGVwX21hdGNoX2tleSgpIGZvciAhTE9DS0RFUFxcbiAzNjM6XFx0ICogY2FzZSBzaW5jZSB0aGUgcmVzdWx0IGlzIG5vdCB3ZWxsIGRlZmluZWQgYW5kIHRoZSBjYWxsZXIgc2hvdWxkIHJhdGhlclxcbiAzNjQ6XFx0ICogI2lmZGVmIHRoZSBjYWxsIGhpbXNlbGYuXFxuIDM2NTpcXHQgKi9cXG4gMzY2OlxcdFxcbiAzNjc6XFx0IyBkZWZpbmUgbG9ja2RlcF9yZXNldCgpXFx0XFx0ZG8geyBkZWJ1Z19sb2NrcyA9IDE7IH0gd2hpbGUgKDApXFxuIDM2ODpcXHQjIGRlZmluZSBsb2NrZGVwX2ZyZWVfa2V5X3JhbmdlKHN0YXJ0LCBzaXplKVxcdGRvIHsgfSB3aGlsZSAoMClcXG4gMzY5OlxcdCMgZGVmaW5lIGxvY2tkZXBfc3lzX2V4aXQoKSBcXHRcXHRcXHRkbyB7IH0gd2hpbGUgKDApXFxuIDM3MDpcXHRcXG4gMzcxOlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBsb2NrZGVwX3JlZ2lzdGVyX2tleShzdHJ1Y3QgbG9ja19jbGFzc19rZXkgKmtleSlcXG4gMzcyOlxcdHtcXG4gMzczOlxcdH1cXG4gMzc0OlxcdFxcbiAzNzU6XFx0c3RhdGljIGlubGluZSB2b2lkIGxvY2tkZXBfdW5yZWdpc3Rlcl9rZXkoc3RydWN0IGxvY2tfY2xhc3Nfa2V5ICprZXkpXFxuIDM3NjpcXHR7XFxuIDM3NzpcXHR9XFxuIDM3ODpcXHRcXG4gMzc5OlxcdCNkZWZpbmUgbG9ja2RlcF9kZXB0aCh0c2spXFx0KDApXFxuIDM4MDpcXHRcXG4gMzgxOlxcdC8qXFxuIDM4MjpcXHQgKiBEdW1teSBmb3J3YXJkIGRlY2xhcmF0aW9ucywgYWxsb3cgdXNlcnMgdG8gd3JpdGUgbGVzcyBpZmRlZi15IGNvZGVcXG4gMzgzOlxcdCAqIGFuZCBkZXBlbmQgb24gZGVhZCBjb2RlIGVsaW1pbmF0aW9uLlxcbiAzODQ6XFx0ICovXFxuIDM4NTpcXHRleHRlcm4gaW50IGxvY2tfaXNfaGVsZChjb25zdCB2b2lkICopO1xcbiAzODY6XFx0ZXh0ZXJuIGludCBsb2NrZGVwX2lzX2hlbGQoY29uc3Qgdm9pZCAqKTtcXG4gMzg3OlxcdCNkZWZpbmUgbG9ja2RlcF9pc19oZWxkX3R5cGUobCwgcilcXHRcXHQoMSlcXG4gMzg4OlxcdFxcbiAzODk6XFx0I2RlZmluZSBsb2NrZGVwX2Fzc2VydChjKVxcdFxcdFxcdGRvIHsgfSB3aGlsZSAoMClcXG4gMzkwOlxcdCNkZWZpbmUgbG9ja2RlcF9hc3NlcnRfb25jZShjKVxcdFxcdFxcdGRvIHsgfSB3aGlsZSAoMClcXG4gMzkxOlxcdFxcbiAzOTI6XFx0I2RlZmluZSBsb2NrZGVwX2Fzc2VydF9oZWxkKGwpXFx0XFx0XFx0X19hc3N1bWVfY3R4X2xvY2sobClcXG4gMzkzOlxcdCNkZWZpbmUgbG9ja2RlcF9hc3NlcnRfbm90X2hlbGQobClcXHRcXHRkbyB7ICh2b2lkKShsKTsgfSB3aGlsZSAoMClcXG4gMzk0OlxcdCNkZWZpbmUgbG9ja2RlcF9hc3NlcnRfaGVsZF93cml0ZShsKVxcdFxcdF9fYXNzdW1lX2N0eF9sb2NrKGwpXFxuIDM5NTpcXHQjZGVmaW5lIGxvY2tkZXBfYXNzZXJ0X2hlbGRfcmVhZChsKVxcdFxcdF9fYXNzdW1lX3NoYXJlZF9jdHhfbG9jayhsKVxcbiAzOTY6XFx0I2RlZmluZSBsb2NrZGVwX2Fzc2VydF9oZWxkX29uY2UobClcXHRcXHRkbyB7ICh2b2lkKShsKTsgfSB3aGlsZSAoMClcXG4gMzk3OlxcdCNkZWZpbmUgbG9ja2RlcF9hc3NlcnRfbm9uZV9oZWxkX29uY2UoKVxcdGRvIHsgfSB3aGlsZSAoMClcXG4gMzk4OlxcdFxcbiAzOTk6XFx0I2RlZmluZSBsb2NrZGVwX3JlY3Vyc2luZyh0c2spXFx0XFx0XFx0KDApXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA3OjEyOjI3LjUzOTg5OTgzNloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTI0MTk1OTUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBsaWtlIHlvdTpcblxuKipJbnZlc3RpZ2F0aW5nIGByd3NlbV9hY3F1aXJlX3JlYWRgIERlZmluaXRpb24gKE5vIExvY2tkZXApKipcblxuT2theSwgbXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBwaW5wb2ludCB0aGUgZGVmaW5pdGlvbiBvZiBgcndzZW1fYWNxdWlyZV9yZWFkYCB1bmRlciB0aGUgY29uZGl0aW9uIHdoZXJlIGBDT05GSUdfTE9DS0RFUGAgaXMgKm5vdCogZW5hYmxlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGJlaGF2aW9yIGluIHRoaXMgc3BlY2lmaWMsIHNpbXBsZXIgbG9ja2luZyBzY2VuYXJpby4gU2luY2UgSSdtIHdvcmtpbmcgd2l0aCBhIGNvbmZpZ3VyYXRpb24tZGVwZW5kZW50IGZ1bmN0aW9uLCB0aGUgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMgd2lsbCBiZSB0aGUga2V5LiBJJ2xsIGJlIHNpZnRpbmcgdGhyb3VnaCB0aGUgcmVsZXZhbnQga2VybmVsIGhlYWRlcnMgYW5kIHNvdXJjZSBmaWxlcyB0byBsb2NhdGUgd2hlcmUgdGhhdCBmdW5jdGlvbiBpcyBhY3R1YWxseSBpbXBsZW1lbnRlZCB3aGVuIGxvY2tkZXAgaXNuJ3QgaW4gcGxheS4gSSBhbnRpY2lwYXRlIHRoZXJlIG1pZ2h0IGJlIGEgc2VwYXJhdGUgbWFjcm8gZGVmaW5pdGlvbiwgb3IgcGVyaGFwcyBhIGRpcmVjdCBpbmxpbmUgZnVuY3Rpb24gaW1wbGVtZW50YXRpb24uIEknbGwgYmUgbG9va2luZyBmb3Igc29tZXRoaW5nIHRoYXQgY2xhcmlmaWVzIGV4YWN0bHkgaG93IHRoZSByZWFkIGFjcXVpcmUgaXMgaGFuZGxlZCBpbiB0aGlzIGxlc3MgY29tcGxleCBzZXR1cCwgZXNwZWNpYWxseSByZWdhcmRpbmcgaG93IHRoZSBzZW1hcGhvcmUncyBpbnRlcm5hbCBzdGF0ZSBpcyB1cGRhdGVkLiBJIG5lZWQgdG8gZ3Jhc3AgdGhlIGxvdy1sZXZlbCBtZWNoYW5pY3Mgd2l0aG91dCB0aGUgbG9jayBkZXBlbmRlbmN5IHRyYWNraW5nIG92ZXJoZWFkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5Nzc4LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNzoxMjozMC42NjQwOTg4OTdaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyMTY2MjIxMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIjZGVmaW5lIHJ3c2VtX2FjcXVpcmVfcmVhZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL2xpbnV4L2xvY2tkZXAuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2xvY2tkZXAuaD01MTk9ZG8ge1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4tLVxcbmluY2x1ZGUvbGludXgvbG9ja2RlcC5oLTUzNy0jZGVmaW5lIHJ3c2VtX2FjcXVpcmVfbmVzdChsLCBzLCB0LCBuLCBpKVxcdGxvY2tfYWNxdWlyZV9leGNsdXNpdmUobCwgcywgdCwgbiwgaSlcXG5pbmNsdWRlL2xpbnV4L2xvY2tkZXAuaDo1Mzg6I2RlZmluZSByd3NlbV9hY3F1aXJlX3JlYWQobCwgcywgdCwgaSlcXHRcXHRsb2NrX2FjcXVpcmVfc2hhcmVkKGwsIHMsIHQsIE5VTEwsIGkpXFxuaW5jbHVkZS9saW51eC9sb2NrZGVwLmgtNTM5LSNkZWZpbmUgcndzZW1fcmVsZWFzZShsLCBpKVxcdFxcdFxcdGxvY2tfcmVsZWFzZShsLCBpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNzoxMjozMS4xODU3Njk3NTlaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzcyMDQ2ODM4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGF0IGNvZGU6XG5cbioqRGl2aW5nIGludG8gdGhlIGByd3NlbV9hY3F1aXJlX3JlYWRgIERlZmluaXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSBgcndzZW1fYWNxdWlyZV9yZWFkYCBpcyBkZWZpbmVkLiBUaGUgaGludCBzYXlzIGxpbmUgNTM4LCBidXQgSSdtIGJlaW5nIHRob3JvdWdoLCBzbyBJIHdhbnQgdG8gY29uZmlybSB0aGUgc3Vycm91bmRpbmcgY29udGV4dCwgYW5kIGNoZWNrIGlmIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBtYWNyb3MgYXJlIGludm9sdmVkLiBJJ2xsIHRha2UgYSBsb29rIGF0IGxpbmVzIDUwMC01NTAuIExldCdzIHNlZSB3aGF0IHRoZSBjb2RlIGFyb3VuZCB0aGF0IGFyZWEgcmV2ZWFscy4gSXQncyBhIHF1aWNrIHdheSB0byBnZXQgdGhlIGxheSBvZiB0aGUgbGFuZCwgdW5kZXJzdGFuZCBhbnkgc3Vycm91bmRpbmcgZGVmaW5pdGlvbnMsIGFuZCBkZXRlcm1pbmUgaWYgYENPTkZJR19MT0NLREVQYCBoYXMgYW55IGJlYXJpbmcgb24gaXRzIGFjdHVhbCBkZWNsYXJhdGlvbi4gTm8gbmVlZCB0byBza2ltLCBJIG5lZWQgZnVsbCBjb250ZXh0IG9mIHRoZSBjb2RlLiBUaGlzIGlzIGVzc2VudGlhbCBmb3IgYSBjb21wbGV0ZSB1bmRlcnN0YW5kaW5nIG9mIGhvdyBpdCdzIGJlaW5nIHVzZWQuIExldCdzIGNoZWNrIHRob3NlIGxpbmVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDIwNCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA3OjEyOjM0LjkwNjI0MTFaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYxMDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvbG9ja2RlcC5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUwMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDUwMDpcXHQgKiBvZiBuZXN0aW5nIHNob3VsZCBkZWZpbmUgdGhlaXIgb3duIGxvY2stbmVzdGluZyBzdWJjbGFzc2VzLilcXG4gNTAxOlxcdCAqL1xcbiA1MDI6XFx0I2RlZmluZSBTSU5HTEVfREVQVEhfTkVTVElOR1xcdFxcdFxcdDFcXG4gNTAzOlxcdFxcbiA1MDQ6XFx0LypcXG4gNTA1OlxcdCAqIE1hcCB0aGUgZGVwZW5kZW5jeSBvcHMgdG8gTk9QIG9yIHRvIHJlYWwgbG9ja2RlcCBvcHMsIGRlcGVuZGluZ1xcbiA1MDY6XFx0ICogb24gdGhlIHBlciBsb2NrLWNsYXNzIGRlYnVnIG1vZGU6XFxuIDUwNzpcXHQgKi9cXG4gNTA4OlxcdFxcbiA1MDk6XFx0I2RlZmluZSBsb2NrX2FjcXVpcmVfZXhjbHVzaXZlKGwsIHMsIHQsIG4sIGkpXFx0XFx0bG9ja19hY3F1aXJlKGwsIHMsIHQsIDAsIDEsIG4sIGkpXFxuIDUxMDpcXHQjZGVmaW5lIGxvY2tfYWNxdWlyZV9zaGFyZWQobCwgcywgdCwgbiwgaSlcXHRcXHRsb2NrX2FjcXVpcmUobCwgcywgdCwgMSwgMSwgbiwgaSlcXG4gNTExOlxcdCNkZWZpbmUgbG9ja19hY3F1aXJlX3NoYXJlZF9yZWN1cnNpdmUobCwgcywgdCwgbiwgaSlcXHRsb2NrX2FjcXVpcmUobCwgcywgdCwgMiwgMSwgbiwgaSlcXG4gNTEyOlxcdFxcbiA1MTM6XFx0I2RlZmluZSBzcGluX2FjcXVpcmUobCwgcywgdCwgaSlcXHRcXHRsb2NrX2FjcXVpcmVfZXhjbHVzaXZlKGwsIHMsIHQsIE5VTEwsIGkpXFxuIDUxNDpcXHQjZGVmaW5lIHNwaW5fYWNxdWlyZV9uZXN0KGwsIHMsIHQsIG4sIGkpXFx0bG9ja19hY3F1aXJlX2V4Y2x1c2l2ZShsLCBzLCB0LCBuLCBpKVxcbiA1MTU6XFx0I2RlZmluZSBzcGluX3JlbGVhc2UobCwgaSlcXHRcXHRcXHRsb2NrX3JlbGVhc2UobCwgaSlcXG4gNTE2OlxcdFxcbiA1MTc6XFx0I2RlZmluZSByd2xvY2tfYWNxdWlyZShsLCBzLCB0LCBpKVxcdFxcdGxvY2tfYWNxdWlyZV9leGNsdXNpdmUobCwgcywgdCwgTlVMTCwgaSlcXG4gNTE4OlxcdCNkZWZpbmUgcndsb2NrX2FjcXVpcmVfcmVhZChsLCBzLCB0LCBpKVxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gNTE5OlxcdGRvIHtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIDUyMDpcXHRcXHRpZiAocmVhZF9sb2NrX2lzX3JlY3Vyc2l2ZSgpKVxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gNTIxOlxcdFxcdFxcdGxvY2tfYWNxdWlyZV9zaGFyZWRfcmVjdXJzaXZlKGwsIHMsIHQsIE5VTEwsIGkpO1xcdFxcXFxcXG4gNTIyOlxcdFxcdGVsc2VcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIDUyMzpcXHRcXHRcXHRsb2NrX2FjcXVpcmVfc2hhcmVkKGwsIHMsIHQsIE5VTEwsIGkpO1xcdFxcdFxcdFxcXFxcXG4gNTI0OlxcdH0gd2hpbGUgKDApXFxuIDUyNTpcXHRcXG4gNTI2OlxcdCNkZWZpbmUgcndsb2NrX3JlbGVhc2UobCwgaSlcXHRcXHRcXHRsb2NrX3JlbGVhc2UobCwgaSlcXG4gNTI3OlxcdFxcbiA1Mjg6XFx0I2RlZmluZSBzZXFjb3VudF9hY3F1aXJlKGwsIHMsIHQsIGkpXFx0XFx0bG9ja19hY3F1aXJlX2V4Y2x1c2l2ZShsLCBzLCB0LCBOVUxMLCBpKVxcbiA1Mjk6XFx0I2RlZmluZSBzZXFjb3VudF9hY3F1aXJlX3JlYWQobCwgcywgdCwgaSlcXHRsb2NrX2FjcXVpcmVfc2hhcmVkX3JlY3Vyc2l2ZShsLCBzLCB0LCBOVUxMLCBpKVxcbiA1MzA6XFx0I2RlZmluZSBzZXFjb3VudF9yZWxlYXNlKGwsIGkpXFx0XFx0XFx0bG9ja19yZWxlYXNlKGwsIGkpXFxuIDUzMTpcXHRcXG4gNTMyOlxcdCNkZWZpbmUgbXV0ZXhfYWNxdWlyZShsLCBzLCB0LCBpKVxcdFxcdGxvY2tfYWNxdWlyZV9leGNsdXNpdmUobCwgcywgdCwgTlVMTCwgaSlcXG4gNTMzOlxcdCNkZWZpbmUgbXV0ZXhfYWNxdWlyZV9uZXN0KGwsIHMsIHQsIG4sIGkpXFx0bG9ja19hY3F1aXJlX2V4Y2x1c2l2ZShsLCBzLCB0LCBuLCBpKVxcbiA1MzQ6XFx0I2RlZmluZSBtdXRleF9yZWxlYXNlKGwsIGkpXFx0XFx0XFx0bG9ja19yZWxlYXNlKGwsIGkpXFxuIDUzNTpcXHRcXG4gNTM2OlxcdCNkZWZpbmUgcndzZW1fYWNxdWlyZShsLCBzLCB0LCBpKVxcdFxcdGxvY2tfYWNxdWlyZV9leGNsdXNpdmUobCwgcywgdCwgTlVMTCwgaSlcXG4gNTM3OlxcdCNkZWZpbmUgcndzZW1fYWNxdWlyZV9uZXN0KGwsIHMsIHQsIG4sIGkpXFx0bG9ja19hY3F1aXJlX2V4Y2x1c2l2ZShsLCBzLCB0LCBuLCBpKVxcbiA1Mzg6XFx0I2RlZmluZSByd3NlbV9hY3F1aXJlX3JlYWQobCwgcywgdCwgaSlcXHRcXHRsb2NrX2FjcXVpcmVfc2hhcmVkKGwsIHMsIHQsIE5VTEwsIGkpXFxuIDUzOTpcXHQjZGVmaW5lIHJ3c2VtX3JlbGVhc2UobCwgaSlcXHRcXHRcXHRsb2NrX3JlbGVhc2UobCwgaSlcXG4gNTQwOlxcdFxcbiA1NDE6XFx0I2RlZmluZSBsb2NrX21hcF9hY3F1aXJlKGwpXFx0XFx0XFx0bG9ja19hY3F1aXJlX2V4Y2x1c2l2ZShsLCAwLCAwLCBOVUxMLCBfVEhJU19JUF8pXFxuIDU0MjpcXHQjZGVmaW5lIGxvY2tfbWFwX2FjcXVpcmVfdHJ5KGwpXFx0XFx0XFx0bG9ja19hY3F1aXJlX2V4Y2x1c2l2ZShsLCAwLCAxLCBOVUxMLCBfVEhJU19JUF8pXFxuIDU0MzpcXHQjZGVmaW5lIGxvY2tfbWFwX2FjcXVpcmVfcmVhZChsKVxcdFxcdGxvY2tfYWNxdWlyZV9zaGFyZWRfcmVjdXJzaXZlKGwsIDAsIDAsIE5VTEwsIF9USElTX0lQXylcXG4gNTQ0OlxcdCNkZWZpbmUgbG9ja19tYXBfYWNxdWlyZV90cnlyZWFkKGwpXFx0XFx0bG9ja19hY3F1aXJlX3NoYXJlZF9yZWN1cnNpdmUobCwgMCwgMSwgTlVMTCwgX1RISVNfSVBfKVxcbiA1NDU6XFx0I2RlZmluZSBsb2NrX21hcF9yZWxlYXNlKGwpXFx0XFx0XFx0bG9ja19yZWxlYXNlKGwsIF9USElTX0lQXylcXG4gNTQ2OlxcdCNkZWZpbmUgbG9ja19tYXBfc3luYyhsKVxcdFxcdFxcdGxvY2tfc3luYyhsLCAwLCAwLCAxLCBOVUxMLCBfVEhJU19JUF8pXFxuIDU0NzpcXHRcXG4gNTQ4OlxcdCNpZmRlZiBDT05GSUdfUFJPVkVfTE9DS0lOR1xcbiA1NDk6XFx0IyBkZWZpbmUgbWlnaHRfbG9jayhsb2NrKVxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDc6MTI6MzQuOTA2NDA0OVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTQ4MjYyNjAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqRGVjb25zdHJ1Y3RpbmcgYSBMb2NrIEFjcXVpc2l0aW9uIENhbGwqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEkgc2VlIGBsb2NrX2FjcXVpcmVfc2hhcmVkYCBpcyBkZWZpbmVkIHVzaW5nIGEgbW9yZSBnZW5lcmFsIGZ1bmN0aW9uIGNhbGw6IGBsb2NrX2FjcXVpcmUobCwgcywgdCwgMSwgMSwgbiwgaSlgLiBOb3RoaW5nIHN1cnByaXNpbmcgdGhlcmUgLSBtYWtlcyBzZW5zZSB0byBoYXZlIGEgY29yZSBmdW5jdGlvbi4gQnV0IGhvbGQgb24uLi4gaWYgYENPTkZJR19MT0NLREVQYCBpcyBkaXNhYmxlZCwgd2hhdCAqZXhhY3RseSogZG9lcyBgbG9ja19hY3F1aXJlYCAqYmVjb21lKj8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0gYmVoYXZlcyB1bmRlciBkaWZmZXJlbnQgY29tcGlsYXRpb24gc2NlbmFyaW9zLiBJcyBpdCBhIHNpbXBsZSBpbmxpbmUgZnVuY3Rpb24sIG9yIGRvZXMgaXQgcmVzb2x2ZSB0byBzb21ldGhpbmcgbW9yZSBwcmltaXRpdmU/IEFyZSBhbnkgZGVidWdnaW5nIGFpZHMgZGlzYWJsZWQ/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgdG8gaGF2ZSBhbnkgY29uZmlkZW5jZSBpbiBob3cgdGhpcyBsb2NrIGlzIGJlaGF2aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTczMiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDc6MTI6MzguMDU0NjcxODUxWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3ODYzODE2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIjZGVmaW5lIGxvY2tfYWNxdWlyZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL2xpbnV4L2xvY2tkZXAuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2xvY2tkZXAuaD00NDI9ZG8ge1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4tLVxcbmluY2x1ZGUvbGludXgvbG9ja2RlcC5oLTQ2NC0jZGVmaW5lIGxvY2tfY29udGVuZGVkKGxvY2tkZXBfbWFwLCBpcCkgZG8ge30gd2hpbGUgKDApXFxuaW5jbHVkZS9saW51eC9sb2NrZGVwLmg6NDY1OiNkZWZpbmUgbG9ja19hY3F1aXJlZChsb2NrZGVwX21hcCwgaXApIGRvIHt9IHdoaWxlICgwKVxcbmluY2x1ZGUvbGludXgvbG9ja2RlcC5oLTQ2Ni1cXG4tLVxcbmluY2x1ZGUvbGludXgvbG9ja2RlcC5oPTQ5MT1leHRlcm4gYm9vbCByZWFkX2xvY2tfaXNfcmVjdXJzaXZlKHZvaWQpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9sb2NrZGVwLmgtNTA4LVxcbmluY2x1ZGUvbGludXgvbG9ja2RlcC5oOjUwOTojZGVmaW5lIGxvY2tfYWNxdWlyZV9leGNsdXNpdmUobCwgcywgdCwgbiwgaSlcXHRcXHRsb2NrX2FjcXVpcmUobCwgcywgdCwgMCwgMSwgbiwgaSlcXG5pbmNsdWRlL2xpbnV4L2xvY2tkZXAuaDo1MTA6I2RlZmluZSBsb2NrX2FjcXVpcmVfc2hhcmVkKGwsIHMsIHQsIG4sIGkpXFx0XFx0bG9ja19hY3F1aXJlKGwsIHMsIHQsIDEsIDEsIG4sIGkpXFxuaW5jbHVkZS9saW51eC9sb2NrZGVwLmg6NTExOiNkZWZpbmUgbG9ja19hY3F1aXJlX3NoYXJlZF9yZWN1cnNpdmUobCwgcywgdCwgbiwgaSlcXHRsb2NrX2FjcXVpcmUobCwgcywgdCwgMiwgMSwgbiwgaSlcXG5pbmNsdWRlL2xpbnV4L2xvY2tkZXAuaC01MTItXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA3OjEyOjM4LjEzMzMxNjA1WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4MTExNDYxNzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqVHJhY2luZyBgbG9ja19hY3F1aXJlYCdzIE9yaWdpbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgYGxvY2tfYWNxdWlyZWAgZnVuY3Rpb24gYmV0dGVyLiBXaGVyZSBleGFjdGx5IGlzIGl0IGRlZmluZWQgd2l0aGluIHRoZSBjb2RlYmFzZT8gSSBuZWVkIHRvIHRyYWNlIGl0cyBvcmlnaW4gdG8gdW5kZXJzdGFuZCBpdHMgaW1wbGVtZW50YXRpb24gZGV0YWlscyBhbmQgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBmb3IgY29uY3VycmVuY3kuIElzIGl0IGEgc3lzdGVtIGNhbGwsIGEga2VybmVsIGZ1bmN0aW9uLCBhIHVzZXJzcGFjZSBsaWJyYXJ5LCBvciBwZXJoYXBzIGEgY3VzdG9tIGltcGxlbWVudGF0aW9uIHdpdGhpbiB0aGlzIHNwZWNpZmljIHByb2plY3Q/IE15IGltbWVkaWF0ZSBhcHByb2FjaCB3b3VsZCBiZSB0byB1c2Ugd2hhdGV2ZXIgdG9vbHMgYXJlIGF2YWlsYWJsZTogZ3JlcCwgZmluZCwgdGhlIHN5bWJvbCBicm93c2VyIGluIG15IElERSwgb3IgZXZlbiBhIGJhc2ljIHNvdXJjZSBjb2RlIHNlYXJjaC4gSSdtIGxvb2tpbmcgZm9yIHRoZSBkZWZpbml0aXZlIGRlY2xhcmF0aW9uIOKAkyB0aGUgaGVhZGVyIGZpbGUsIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgd2hlcmUgaXQncyBkZWZpbmVkIGFuZCB3aGF0IHRoZSBzdXJyb3VuZGluZyBjb250ZXh0IHNheXMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGl0cyBwcm90b3R5cGUgYXMgd2VsbCwgZm9yIHdoYXQgYXJndW1lbnRzIGRvZXMgaXQgZXhwZWN0LCBhbmQgd2hhdCBkb2VzIGl0IHJldHVybi4gVGhlIG5leHQgc3RlcCB3aWxsIGJlIHRvIGNoZWNrIGZvciBhbnkgcmVsZXZhbnQgaGVhZGVyIGZpbGVzIG9yIGluY2x1ZGUgcGF0aHMgdG8gbG9jYXRlIHRoZSBkZWZpbml0aW9uLiBVbHRpbWF0ZWx5LCBJIG5lZWQgdGhlIGNvbmNyZXRlIGNvZGUgdG8gYW5hbHl6ZSBpdHMgYmVoYXZpb3IuIEkgYW50aWNpcGF0ZSBuZWVkaW5nIHRvIHVuZGVyc3RhbmQgYW55IHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzIHVzZWQgaW50ZXJuYWxseSBhbmQgaG93IGl0IGludGVncmF0ZXMgd2l0aCB0aGUgb3ZlcmFsbCBsb2NraW5nIHNjaGVtZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIzMTEsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNzoxMjo0MS45NDQ0NjUyOFoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIxMzM5NDU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlZmluZSBsb2NrX2FjcXVpcmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9sb2NrZGVwLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9sb2NrZGVwLmg9MzMyPXN0YXRpYyBpbmxpbmUgdm9pZCBsb2NrZGVwX3NldF9zZWxmdGVzdF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaylcXG4tLVxcbmluY2x1ZGUvbGludXgvbG9ja2RlcC5oLTMzNS1cXG5pbmNsdWRlL2xpbnV4L2xvY2tkZXAuaDozMzY6IyBkZWZpbmUgbG9ja19hY3F1aXJlKGwsIHMsIHQsIHIsIGMsIG4sIGkpXFx0ZG8geyB9IHdoaWxlICgwKVxcbmluY2x1ZGUvbGludXgvbG9ja2RlcC5oLTMzNy0jIGRlZmluZSBsb2NrX3JlbGVhc2UobCwgaSlcXHRcXHRcXHRkbyB7IH0gd2hpbGUgKDApXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xvY2tkZXAuaD00NDI9ZG8ge1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4tLVxcbmluY2x1ZGUvbGludXgvbG9ja2RlcC5oLTQ2NC0jZGVmaW5lIGxvY2tfY29udGVuZGVkKGxvY2tkZXBfbWFwLCBpcCkgZG8ge30gd2hpbGUgKDApXFxuaW5jbHVkZS9saW51eC9sb2NrZGVwLmg6NDY1OiNkZWZpbmUgbG9ja19hY3F1aXJlZChsb2NrZGVwX21hcCwgaXApIGRvIHt9IHdoaWxlICgwKVxcbmluY2x1ZGUvbGludXgvbG9ja2RlcC5oLTQ2Ni1cXG4tLVxcbmluY2x1ZGUvbGludXgvbG9ja2RlcC5oPTQ5MT1leHRlcm4gYm9vbCByZWFkX2xvY2tfaXNfcmVjdXJzaXZlKHZvaWQpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9sb2NrZGVwLmgtNTA4LVxcbmluY2x1ZGUvbGludXgvbG9ja2RlcC5oOjUwOTojZGVmaW5lIGxvY2tfYWNxdWlyZV9leGNsdXNpdmUobCwgcywgdCwgbiwgaSlcXHRcXHRsb2NrX2FjcXVpcmUobCwgcywgdCwgMCwgMSwgbiwgaSlcXG5pbmNsdWRlL2xpbnV4L2xvY2tkZXAuaDo1MTA6I2RlZmluZSBsb2NrX2FjcXVpcmVfc2hhcmVkKGwsIHMsIHQsIG4sIGkpXFx0XFx0bG9ja19hY3F1aXJlKGwsIHMsIHQsIDEsIDEsIG4sIGkpXFxuaW5jbHVkZS9saW51eC9sb2NrZGVwLmg6NTExOiNkZWZpbmUgbG9ja19hY3F1aXJlX3NoYXJlZF9yZWN1cnNpdmUobCwgcywgdCwgbiwgaSlcXHRsb2NrX2FjcXVpcmUobCwgcywgdCwgMiwgMSwgbiwgaSlcXG5pbmNsdWRlL2xpbnV4L2xvY2tkZXAuaC01MTItXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA3OjEyOjQyLjA2NTgxMjA3OFoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NzUzOTU5OTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHRoZSBQcm9wb3NlZCBQYXRjaCoqXG5cbk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCwgbXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0aGF0IHRoZSBjaGFuZ2VzIHRvIGByd3NlbV9hY3F1aXJlX3JlYWRgIHNlZW1lZCBwdXJlbHkgcmVsYXRlZCB0byBsb2NrZGVwIGFubm90YXRpb25zLCBnaXZlbiB0aGUgYENPTkZJR19MT0NLREVQYCBjb250ZXh0LiBBbmQgdGhlIGZhY3QgdGhhdCB3aGVuIGxvY2tkZXAgaXMgZGlzYWJsZWQsIGBsb2NrX2FjcXVpcmVgIGlzIGEgbm8tb3AgbWFjcm8sIHRoYXQgcmVpbmZvcmNlZCB0aGlzLlxuXG5UaGUgY29kZSBzbmlwcGV0cyBoaWdobGlnaHRlZCBhIHJlZmFjdG9yaW5nIHRvIHJlcGxhY2UgYSBkaXJlY3QgZmxhZyBjaGVjayB3aXRoIGEgbG9jYWwgYG5vd2FpdGAgdmFyaWFibGUuIFRoZSBrZXkgY2hhbmdlIHRoYXQgY2F1Z2h0IG15IGV5ZSB3YXMgcGFzc2luZyB0aGlzIGBub3dhaXRgIHZhcmlhYmxlIHRvIGByd3NlbV9hY3F1aXJlX3JlYWRgLiBUaGlzIGxvb2tlZCB0byBiZSBhYm91dCBjb252ZXlpbmcgd2hldGhlciBhIFwidHJ5bG9ja1wiIHdhcyBhdHRlbXB0ZWQsIGEgY3JpdGljYWwgcGllY2Ugb2YgaW5mbyBmb3IgbG9ja2RlcCdzIHRyYWNraW5nLlxuXG5UaGVuLCBJIHdlbnQgZGVlcGVyLiBJIHZlcmlmaWVkIHRoYXQgYHJ3c2VtX2FjcXVpcmVfcmVhZGAgaW5kZWVkIG1hcHMgdG8gYSBzZXJpZXMgb2YgYGxvY2tfYWNxdWlyZWAgY2FsbHMuIEFuZCB0aGUgcGFyYW1ldGVyIGJlaW5nIG1vZGlmaWVkIGlzIHRoZSBcInRyeWxvY2tcIiBwYXJhbWV0ZXIgb2YgdGhhdCBgbG9ja19hY3F1aXJlYCBjaGFpbi4gSWYgYG5vd2FpdGAgaXMgdHJ1ZSwgYSB0cnlsb2NrIGlzIGluZGljYXRlZCB0byBsb2NrZGVwOyBvdGhlcndpc2UgaXQncyBhIHJlZ3VsYXIgbG9jay5cblxuVGhlIGltcG9ydGFudCBwb2ludCBpcyB0aGlzIHBhcmFtZXRlciBjaGFuZ2Ugb25seSBpbXBhY3RzIGhvdyBsb2NrZGVwIG1vbml0b3JzIHRoZSBsb2NraW5nIGJlaGF2aW9yLiBUaGUgKmFjdHVhbCogZXhlY3V0aW9uIHBhdGgsIHRoZSAqYWN0dWFsKiBsb2NraW5nIGJlaGF2aW9yLCBpc24ndCBtb2RpZmllZC4gYGJsa190cnlfZW50ZXJfcXVldWVgIGlzbid0IHRvdWNoZWQsIG5vciBhcmUgYW55IG9mIHRoZSB1bmRlcmx5aW5nIGxvY2tpbmcgcHJpbWl0aXZlcyBkaXJlY3RseSBjaGFuZ2VkIGJ5IGFueSBvZiB0aGlzLlxuXG5UaGVyZWZvcmUsIHRoaXMgcGF0Y2ggYm9pbHMgZG93biB0byB0aGVzZSBtb2RpZmljYXRpb25zOlxuMS4gIEV4dHJhY3RpbmcgdGhlIGBSRVFfTk9XQUlUYCBmbGFnIGludG8gYSBgbm93YWl0YCBib29sZWFuIGZvciByZWFkYWJpbGl0eS5cbjIuICBVc2luZyB0aGUgYG5vd2FpdGAgYm9vbGVhbiB2YXJpYWJsZSBpbiBjb25kaXRpb25hbCBzdGF0ZW1lbnRzLlxuMy4gIFBhc3NpbmcgYG5vd2FpdGAgdG8gYHJ3c2VtX2FjcXVpcmVfcmVhZGAgd2hpY2gsIGluIHR1cm4sIGltcGFjdHMgbG9ja2RlcCBhbm5vdGF0aW9uLlxuXG5HaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBjaGFuZ2VzLCB0aGlzIHBhdGNoIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgZnVuY3Rpb25hbCBiZWhhdmlvciBpbnRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgcHJpb3JpdGl6ZWQgZm9yIGZ1enppbmcuIFRoZSBjaGFuZ2VzIGFyZSBhYm91dCB0aGUgbG9ja2RlcCB0cmFja2luZywgbm90IGFib3V0IGFueSBmdW5jdGlvbmFsIG1vZGlmaWNhdGlvbi4gSSdsbCBmbGFnIHRoaXMgYXMgV29ydGhGdXp6aW5nPWZhbHNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzA0MCwiT3V0cHV0VG9rZW5zIjoxMTMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5OTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDc6MTI6NTEuODE5Nzc1MTA1WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzU4ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSByZWZhY3RvcnMgdGhlIGV4dHJhY3Rpb24gb2YgdGhlICdub3dhaXQnIGZsYWcgaW50byBhIGxvY2FsIHZhcmlhYmxlIGFuZCBwYXNzZXMgaXQgYXMgdGhlICd0cnlsb2NrJyBwYXJhbWV0ZXIgdG8gcndzZW1fYWNxdWlyZV9yZWFkKCkuIFNpbmNlIHJ3c2VtX2FjcXVpcmVfcmVhZCgpIGlzIHB1cmVseSBhIGxvY2tkZXAgYW5ub3RhdGlvbiBtYWNybyB0aGF0IGV4cGFuZHMgdG8gbm90aGluZyB3aGVuIENPTkZJR19MT0NLREVQIGlzIGRpc2FibGVkLCB0aGlzIHBhdGNoIGRvZXMgbm90IGZ1bmN0aW9uYWxseSBhbHRlciB0aGUgZXhlY3V0aW9uIGZsb3cgb2YgdGhlIGtlcm5lbCBhbmQgaXMgbm90IHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IHJlZmFjdG9ycyB0aGUgZXh0cmFjdGlvbiBvZiB0aGUgJ25vd2FpdCcgZmxhZyBpbnRvIGEgbG9jYWwgdmFyaWFibGUgYW5kIHBhc3NlcyBpdCBhcyB0aGUgJ3RyeWxvY2snIHBhcmFtZXRlciB0byByd3NlbV9hY3F1aXJlX3JlYWQoKS4gU2luY2UgcndzZW1fYWNxdWlyZV9yZWFkKCkgaXMgcHVyZWx5IGEgbG9ja2RlcCBhbm5vdGF0aW9uIG1hY3JvIHRoYXQgZXhwYW5kcyB0byBub3RoaW5nIHdoZW4gQ09ORklHX0xPQ0tERVAgaXMgZGlzYWJsZWQsIHRoaXMgcGF0Y2ggZG9lcyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIHRoZSBleGVjdXRpb24gZmxvdyBvZiB0aGUga2VybmVsIGFuZCBpcyBub3Qgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowfg2fr[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-01 06:50:13 +0000 UTC FinishedAt: 2026-08-01 07:12:52 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA3OjExPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgcmVmYWN0b3JzIHRoZSBleHRyYWN0aW9uIG9mIHRoZSAmIzM5O25vd2FpdCYjMzk7IGZsYWcgaW50byBhIGxvY2FsIHZhcmlhYmxlIGFuZCBwYXNzZXMgaXQgYXMgdGhlICYjMzk7dHJ5bG9jayYjMzk7IHBhcmFtZXRlciB0byByd3NlbV9hY3F1aXJlX3JlYWQoKS4gU2luY2UgcndzZW1fYWNxdWlyZV9yZWFkKCkgaXMgcHVyZWx5IGEgbG9ja2RlcCBhbm5vdGF0aW9uIG1hY3JvIHRoYXQgZXhwYW5kcyB0byBub3RoaW5nIHdoZW4gQ09ORklHX0xPQ0tERVAgaXMgZGlzYWJsZWQsIHRoaXMgcGF0Y2ggZG9lcyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIHRoZSBleGVjdXRpb24gZmxvdyBvZiB0aGUga2VybmVsIGFuZCBpcyBub3Qgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDc6MTE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA4NWMzMjIwYTI1OWY4ZjQxM2VlYjhlOWZkOGFjNmNiMDlhNjQxNDdkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMSAwNzoxMToxOSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9ibG9jay9ibGstY29yZS5jIGIvYmxvY2svYmxrLWNvcmUuY1xuaW5kZXggMzY1NjQxMjY2YzllOC4uZTVkYjU0NTk2ZTNkZCAxMDA2NDRcbi0tLSBhL2Jsb2NrL2Jsay1jb3JlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2Jsb2NrL2Jsay1jb3JlLmNcbkBAIC0zNDcsOSAmIzQzOzM0NywxMCBAQCBib29sIGJsa19xdWV1ZV9zdGFydF9kcmFpbihzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSlcbiBpbnQgYmxrX3F1ZXVlX2VudGVyKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBibGtfbXFfcmVxX2ZsYWdzX3QgZmxhZ3MpXG4ge1xuIFx0Y29uc3QgYm9vbCBwbSA9IGZsYWdzIFx1MDAyNiBCTEtfTVFfUkVRX1BNO1xuJiM0MztcdGNvbnN0IGJvb2wgbm93YWl0ID0gZmxhZ3MgXHUwMDI2IEJMS19NUV9SRVFfTk9XQUlUO1xuIFxuIFx0d2hpbGUgKCFibGtfdHJ5X2VudGVyX3F1ZXVlKHEsIHBtKSkge1xuLVx0XHRpZiAoZmxhZ3MgXHUwMDI2IEJMS19NUV9SRVFfTk9XQUlUKVxuJiM0MztcdFx0aWYgKG5vd2FpdClcbiBcdFx0XHRyZXR1cm4gLUVBR0FJTjtcbiBcbiBcdFx0LypcbkBAIC0zNjgsMTcgJiM0MzszNjksMTkgQEAgaW50IGJsa19xdWV1ZV9lbnRlcihzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgYmxrX21xX3JlcV9mbGFnc190IGZsYWdzKVxuIFx0XHRcdHJldHVybiAtRU5PREVWO1xuIFx0fVxuIFxuLVx0cndzZW1fYWNxdWlyZV9yZWFkKFx1MDAyNnEtXHUwMDNlcV9sb2NrZGVwX21hcCwgMCwgMCwgX1JFVF9JUF8pO1xuJiM0MztcdHJ3c2VtX2FjcXVpcmVfcmVhZChcdTAwMjZxLVx1MDAzZXFfbG9ja2RlcF9tYXAsIDAsIG5vd2FpdCwgX1JFVF9JUF8pO1xuIFx0cndzZW1fcmVsZWFzZShcdTAwMjZxLVx1MDAzZXFfbG9ja2RlcF9tYXAsIF9SRVRfSVBfKTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbiBpbnQgX19iaW9fcXVldWVfZW50ZXIoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCBiaW8gKmJpbylcbiB7XG4mIzQzO1x0Y29uc3QgYm9vbCBub3dhaXQgPSBiaW8tXHUwMDNlYmlfb3BmIFx1MDAyNiBSRVFfTk9XQUlUO1xuJiM0MztcbiBcdHdoaWxlICghYmxrX3RyeV9lbnRlcl9xdWV1ZShxLCBmYWxzZSkpIHtcbiBcdFx0c3RydWN0IGdlbmRpc2sgKmRpc2sgPSBiaW8tXHUwMDNlYmlfYmRldi1cdTAwM2ViZF9kaXNrO1xuIFxuLVx0XHRpZiAoYmlvLVx1MDAzZWJpX29wZiBcdTAwMjYgUkVRX05PV0FJVCkge1xuJiM0MztcdFx0aWYgKG5vd2FpdCkge1xuIFx0XHRcdGlmICh0ZXN0X2JpdChHRF9ERUFELCBcdTAwMjZkaXNrLVx1MDAzZXN0YXRlKSlcbiBcdFx0XHRcdGdvdG8gZGVhZDtcbiBcdFx0XHRiaW9fd291bGRibG9ja19lcnJvcihiaW8pO1xuQEAgLTQwMSw3ICYjNDM7NDA0LDcgQEAgaW50IF9fYmlvX3F1ZXVlX2VudGVyKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgYmlvICpiaW8pXG4gXHRcdFx0Z290byBkZWFkO1xuIFx0fVxuIFxuLVx0cndzZW1fYWNxdWlyZV9yZWFkKFx1MDAyNnEtXHUwMDNlaW9fbG9ja2RlcF9tYXAsIDAsIDAsIF9SRVRfSVBfKTtcbiYjNDM7XHRyd3NlbV9hY3F1aXJlX3JlYWQoXHUwMDI2cS1cdTAwM2Vpb19sb2NrZGVwX21hcCwgMCwgbm93YWl0LCBfUkVUX0lQXyk7XG4gXHRyd3NlbV9yZWxlYXNlKFx1MDAyNnEtXHUwMDNlaW9fbG9ja2RlcF9tYXAsIF9SRVRfSVBfKTtcbiBcdHJldHVybiAwO1xuIGRlYWQ6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDc6MTE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgcmVmYWN0b3JzIHRoZSBleHRyYWN0aW9uIG9mIHRoZSAmIzM5O25vd2FpdCYjMzk7IGZsYWcgaW50byBhIGxvY2FsIHZhcmlhYmxlIGFuZCBwYXNzZXMgaXQgYXMgdGhlICYjMzk7dHJ5bG9jayYjMzk7IHBhcmFtZXRlciB0byByd3NlbV9hY3F1aXJlX3JlYWQoKS4gU2luY2UgcndzZW1fYWNxdWlyZV9yZWFkKCkgaXMgcHVyZWx5IGEgbG9ja2RlcCBhbm5vdGF0aW9uIG1hY3JvIHRoYXQgZXhwYW5kcyB0byBub3RoaW5nIHdoZW4gQ09ORklHX0xPQ0tERVAgaXMgZGlzYWJsZWQsIHRoaXMgcGF0Y2ggZG9lcyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIHRoZSBleGVjdXRpb24gZmxvdyBvZiB0aGUga2VybmVsIGFuZCBpcyBub3Qgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA4NWMzMjIwYTI1OWY4ZjQxM2VlYjhlOWZkOGFjNmNiMDlhNjQxNDdkCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBBdWcgMSAwNzoxMToxOSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1jb3JlLmMgYi9ibG9jay9ibGstY29yZS5jCmluZGV4IDM2NTY0MTI2NmM5ZTguLmU1ZGI1NDU5NmUzZGQgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2Jsay1jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvYmxvY2svYmxrLWNvcmUuYwpAQCAtMzQ3LDkgJiM0MzszNDcsMTAgQEAgYm9vbCBibGtfcXVldWVfc3RhcnRfZHJhaW4oc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpCiBpbnQgYmxrX3F1ZXVlX2VudGVyKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBibGtfbXFfcmVxX2ZsYWdzX3QgZmxhZ3MpCiB7CiAJY29uc3QgYm9vbCBwbSA9IGZsYWdzICZhbXA7IEJMS19NUV9SRVFfUE07CiYjNDM7CWNvbnN0IGJvb2wgbm93YWl0ID0gZmxhZ3MgJmFtcDsgQkxLX01RX1JFUV9OT1dBSVQ7CiAKIAl3aGlsZSAoIWJsa190cnlfZW50ZXJfcXVldWUocSwgcG0pKSB7Ci0JCWlmIChmbGFncyAmYW1wOyBCTEtfTVFfUkVRX05PV0FJVCkKJiM0MzsJCWlmIChub3dhaXQpCiAJCQlyZXR1cm4gLUVBR0FJTjsKIAogCQkvKgpAQCAtMzY4LDE3ICYjNDM7MzY5LDE5IEBAIGludCBibGtfcXVldWVfZW50ZXIoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIGJsa19tcV9yZXFfZmxhZ3NfdCBmbGFncykKIAkJCXJldHVybiAtRU5PREVWOwogCX0KIAotCXJ3c2VtX2FjcXVpcmVfcmVhZCgmYW1wO3EtJmd0O3FfbG9ja2RlcF9tYXAsIDAsIDAsIF9SRVRfSVBfKTsKJiM0MzsJcndzZW1fYWNxdWlyZV9yZWFkKCZhbXA7cS0mZ3Q7cV9sb2NrZGVwX21hcCwgMCwgbm93YWl0LCBfUkVUX0lQXyk7CiAJcndzZW1fcmVsZWFzZSgmYW1wO3EtJmd0O3FfbG9ja2RlcF9tYXAsIF9SRVRfSVBfKTsKIAlyZXR1cm4gMDsKIH0KIAogaW50IF9fYmlvX3F1ZXVlX2VudGVyKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgYmlvICpiaW8pCiB7CiYjNDM7CWNvbnN0IGJvb2wgbm93YWl0ID0gYmlvLSZndDtiaV9vcGYgJmFtcDsgUkVRX05PV0FJVDsKJiM0MzsKIAl3aGlsZSAoIWJsa190cnlfZW50ZXJfcXVldWUocSwgZmFsc2UpKSB7CiAJCXN0cnVjdCBnZW5kaXNrICpkaXNrID0gYmlvLSZndDtiaV9iZGV2LSZndDtiZF9kaXNrOwogCi0JCWlmIChiaW8tJmd0O2JpX29wZiAmYW1wOyBSRVFfTk9XQUlUKSB7CiYjNDM7CQlpZiAobm93YWl0KSB7CiAJCQlpZiAodGVzdF9iaXQoR0RfREVBRCwgJmFtcDtkaXNrLSZndDtzdGF0ZSkpCiAJCQkJZ290byBkZWFkOwogCQkJYmlvX3dvdWxkYmxvY2tfZXJyb3IoYmlvKTsKQEAgLTQwMSw3ICYjNDM7NDA0LDcgQEAgaW50IF9fYmlvX3F1ZXVlX2VudGVyKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgYmlvICpiaW8pCiAJCQlnb3RvIGRlYWQ7CiAJfQogCi0JcndzZW1fYWNxdWlyZV9yZWFkKCZhbXA7cS0mZ3Q7aW9fbG9ja2RlcF9tYXAsIDAsIDAsIF9SRVRfSVBfKTsKJiM0MzsJcndzZW1fYWNxdWlyZV9yZWFkKCZhbXA7cS0mZ3Q7aW9fbG9ja2RlcF9tYXAsIDAsIG5vd2FpdCwgX1JFVF9JUF8pOwogCXJ3c2VtX3JlbGVhc2UoJmFtcDtxLSZndDtpb19sb2NrZGVwX21hcCwgX1JFVF9JUF8pOwogCXJldHVybiAwOwogZGVhZDoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDc6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjUyOAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDIzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQYXRjaDogTG9ja2RlcCBJbXBsaWNhdGlvbnMgaW4gQmxvY2sgTGF5ZXIqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBibG9jay9ibGstY29yZS5jYC4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSBpbiBgYmxrX3F1ZXVlX2VudGVyYCBhbmQgYF9fYmlvX3F1ZXVlX2VudGVyYC4gSXQmIzM5O3MgdHdlYWtpbmcgaG93IHdlJiMzOTtyZSBjYWxsaW5nIGByd3NlbV9hY3F1aXJlX3JlYWRgLiBTcGVjaWZpY2FsbHksIHRoZSBgbm93YWl0YCBmbGFnIGlzIGJlaW5nIGludHJvZHVjZWQgYXMgdGhlIGB0cnlsb2NrYCBwYXJhbWV0ZXIuIFRoaXMgaW1tZWRpYXRlbHkgZmxhZ3Mgc29tZXRoaW5nIOKAkyB0aGlzIGhhcyB0byBiZSByZWxhdGVkIHRvIGxvY2tkZXAgdHJhY2tpbmcgZm9yIHJlcXVlc3QgcXVldWVzLgoKV2FpdCwgYHJ3c2VtX2FjcXVpcmVfcmVhZGAuLi4gdGhhdCYjMzk7cyBhIGxvY2tkZXAgYW5ub3RhdGlvbiwgaXNuJiMzOTt0IGl0PyBJIG5lZWQgdG8gY29uZmlybS4gSSBzaG91bGQgY2hlY2sgaXRzIGRlZmluaXRpb24uIEl0IHNob3VsZCBiZSBpbiBgaW5jbHVkZS9saW51eC9sb2NrZGVwLmhgIG9yIHNvbWV3aGVyZSBzaW1pbGFyLiBJZiBpdCAqaXMqIGp1c3QgYSBsb2NrZGVwIHdyYXBwZXIsIHRoZW4gdGhpcyBtaWdodCBub3QgYmUgYSBkaXJlY3QgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGVybXMgb2YgdGhlICpleGVjdXRpb24qIGZsb3cuIEl0JiMzOTtzIGFuIGltcG9ydGFudCBjaGFuZ2UsIGJ1dCBpdCYjMzk7cyAqYWJvdXQqIGxvY2tkZXAuCgpXYWl0LCB0aG91Z2jigKYgZG9lcyBpdCBhZmZlY3QgdGhlIGV4ZWN1dGlvbiBmbG93ICphdCBhbGwqPyBIbW0uIGByd3NlbV9hY3F1aXJlX3JlYWRgLi4uIGl0JiMzOTtzIGEgbWFjcm8uIEkgbmVlZCB0byBrbm93IHdoYXQgaXQgZXhwYW5kcyB0by4gSXQgZXhwYW5kcyB0byBgbG9ja19hY3F1aXJlYCB3aGVuIGBDT05GSUdfTE9DS0RFUGAgaXMgZW5hYmxlZC4gSWYgYENPTkZJR19MT0NLREVQYCBpcyBkaXNhYmxlZCwgaXQgcHJvYmFibHkgZXhwYW5kcyB0b+KApiBub3RoaW5nPyBUaGlzIGlzIGltcG9ydGFudC4gSSBiZXR0ZXIgZG91YmxlLWNoZWNrIGluIGBpbmNsdWRlL2xpbnV4L2xvY2tkZXAuaGAgdG8gYmUgc3VyZS4gVGhpcyBjaGFuZ2UgY291bGQgaGF2ZSBtb3JlIGltcGxpY2F0aW9ucyB0aGFuIEkgaW5pdGlhbGx5IHRob3VnaHQgZGVwZW5kaW5nIG9uIGhvdyBsb2NrZGVwIGlzIGNvbmZpZ3VyZWQgaW4gYSBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDc6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGVmaW5lIHJ3c2VtX2FjcXVpcmVfcmVhZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2xvY2tkZXAuaD01MTk9ZG8ge1x0XHRcdFx0XHRcdFx0XHRcdFxcXG4tLVxuaW5jbHVkZS9saW51eC9sb2NrZGVwLmgtNTM3LSNkZWZpbmUgcndzZW1fYWNxdWlyZV9uZXN0KGwsIHMsIHQsIG4sIGkpXHRsb2NrX2FjcXVpcmVfZXhjbHVzaXZlKGwsIHMsIHQsIG4sIGkpXG5pbmNsdWRlL2xpbnV4L2xvY2tkZXAuaDo1Mzg6I2RlZmluZSByd3NlbV9hY3F1aXJlX3JlYWQobCwgcywgdCwgaSlcdFx0bG9ja19hY3F1aXJlX3NoYXJlZChsLCBzLCB0LCBOVUxMLCBpKVxuaW5jbHVkZS9saW51eC9sb2NrZGVwLmgtNTM5LSNkZWZpbmUgcndzZW1fcmVsZWFzZShsLCBpKVx0XHRcdGxvY2tfcmVsZWFzZShsLCBpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA3OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyODAKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqSW52ZXN0aWdhdGluZyBhIFBvdGVudGlhbCBMb2NrZGVwIE9wdGltaXphdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIE15IGltbWVkaWF0ZSBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoZSBgcndzZW1fYWNxdWlyZV9yZWFkYCBmdW5jdGlvbiBpcyBzaW1wbHkgYSBuby1vcCwgYW4gZW1wdHkgZGVmaW5pdGlvbiwgaW4gdGhlIGtlcm5lbCYjMzk7cyBjb2RlIHdoZW4gdGhlIGBDT05GSUdfTE9DS0RFUGAgb3B0aW9uIGlzIHR1cm5lZCBvZmYuIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSBpZiB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGEgY29uZGl0aW9uYWxseSBjb21waWxlZCBzZWN0aW9uIG9mIGNvZGUsIG9yIGlmIGBDT05GSUdfTE9DS0RFUGAgaGFzIG5vIGltcGFjdCBvbiB0aGlzIHBhcnRpY3VsYXIgZnVuY3Rpb24uIFRoaXMgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucyBhbmQgd2hldGhlciB3ZSBjYW4gc3RyZWFtbGluZSB0aGUgY29kZSBpbiBhIGxvY2tkZXAtZnJlZSBlbnZpcm9ubWVudC4gSSBuZWVkIHRvIGdldCB0aGlzIGJhc2ljIHF1ZXN0aW9uIGFuc3dlcmVkIGJlZm9yZSBJIGNhbiBmb3JtIGFuIG9waW5pb24gYWJvdXQgdGhpcyBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA3OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0OyNkZWZpbmUgcndzZW1fYWNxdWlyZV9yZWFkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbG9ja2RlcC5oPTUxOT1kbyB7XHRcdFx0XHRcdFx0XHRcdFx0XFxcbi0tXG5pbmNsdWRlL2xpbnV4L2xvY2tkZXAuaC01MzctI2RlZmluZSByd3NlbV9hY3F1aXJlX25lc3QobCwgcywgdCwgbiwgaSlcdGxvY2tfYWNxdWlyZV9leGNsdXNpdmUobCwgcywgdCwgbiwgaSlcbmluY2x1ZGUvbGludXgvbG9ja2RlcC5oOjUzODojZGVmaW5lIHJ3c2VtX2FjcXVpcmVfcmVhZChsLCBzLCB0LCBpKVx0XHRsb2NrX2FjcXVpcmVfc2hhcmVkKGwsIHMsIHQsIE5VTEwsIGkpXG5pbmNsdWRlL2xpbnV4L2xvY2tkZXAuaC01MzktI2RlZmluZSByd3NlbV9yZWxlYXNlKGwsIGkpXHRcdFx0bG9ja19yZWxlYXNlKGwsIGkpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDc6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzY0MwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBteSBleHBlcnQgdW5kZXJzdGFuZGluZzoKCioqRGVlcCBEaXZlIGludG8gTG9ja2RlcCoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nLCAmIzM0O1doZXJlJiMzOTtzIHRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0IHVudGFuZ2xpbmcgdGhpcyBpc3N1ZT8mIzM0OyBNeSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIGBpbmNsdWRlL2xpbnV4L2xvY2tkZXAuaGAg4oCTIHRoYXQmIzM5O3MgdGhlIGhlYXJ0IG9mIHRoZSBsb2NrIGRlcGVuZGVuY3kgZGV0ZWN0aW9uIG1lY2hhbmlzbSBpbiB0aGUga2VybmVsLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gemVyb2luZyBpbiBhcm91bmQgbGluZSA1MzguIEkmIzM5O20gbm90IGdvaW5nIHRvIHByZXRlbmQgdG8ga25vdyAqZXhhY3RseSogd2hhdCYjMzk7cyB0aGVyZSBvZmYgdGhlIHRvcCBvZiBteSBoZWFkLCBidXQgSSBrbm93IHRoZSBnZW5lcmFsIHN0cnVjdHVyZSBvZiB0aGUgY29kZSBhcm91bmQgdGhhdCBhcmVhLiBMaW5lIDUzOCBpcyBsaWtlbHkgYSBjcml0aWNhbCBzZWN0aW9uIG9mIGNvZGUgcmVsYXRlZCB0byByZXBvcnRpbmcgbG9ja2RlcCBlcnJvcnMsIGhhbmRsaW5nIGxvY2sgY2xhc3Nlcywgb3IgcGVyaGFwcyB0aGUgcmVjdXJzaXZlIGxvY2tpbmcgZGV0ZWN0aW9uLiBJIGhhdmUgYSBmZWVsaW5nIHRoZSBwcm9ibGVtIEkmIzM5O20gdHJ5aW5nIHRvIHNvbHZlIHdpbGwgYmUgcm9vdGVkIHNvbWV3aGVyZSBpbiB0aGF0IHZpY2luaXR5LCBzbyB0aGF0JiMzOTtzIHRoZSBsb2dpY2FsIGp1bXBpbmctb2ZmIHBvaW50IGZvciBhIGRlZXBlciBpbnZlc3RpZ2F0aW9uLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDc6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2xvY2tkZXAuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDUyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTIwOlx0XHRpZiAocmVhZF9sb2NrX2lzX3JlY3Vyc2l2ZSgpKVx0XHRcdFx0XHRcXFxuIDUyMTpcdFx0XHRsb2NrX2FjcXVpcmVfc2hhcmVkX3JlY3Vyc2l2ZShsLCBzLCB0LCBOVUxMLCBpKTtcdFxcXG4gNTIyOlx0XHRlbHNlXHRcdFx0XHRcdFx0XHRcdFxcXG4gNTIzOlx0XHRcdGxvY2tfYWNxdWlyZV9zaGFyZWQobCwgcywgdCwgTlVMTCwgaSk7XHRcdFx0XFxcbiA1MjQ6XHR9IHdoaWxlICgwKVxuIDUyNTpcdFxuIDUyNjpcdCNkZWZpbmUgcndsb2NrX3JlbGVhc2UobCwgaSlcdFx0XHRsb2NrX3JlbGVhc2UobCwgaSlcbiA1Mjc6XHRcbiA1Mjg6XHQjZGVmaW5lIHNlcWNvdW50X2FjcXVpcmUobCwgcywgdCwgaSlcdFx0bG9ja19hY3F1aXJlX2V4Y2x1c2l2ZShsLCBzLCB0LCBOVUxMLCBpKVxuIDUyOTpcdCNkZWZpbmUgc2VxY291bnRfYWNxdWlyZV9yZWFkKGwsIHMsIHQsIGkpXHRsb2NrX2FjcXVpcmVfc2hhcmVkX3JlY3Vyc2l2ZShsLCBzLCB0LCBOVUxMLCBpKVxuIDUzMDpcdCNkZWZpbmUgc2VxY291bnRfcmVsZWFzZShsLCBpKVx0XHRcdGxvY2tfcmVsZWFzZShsLCBpKVxuIDUzMTpcdFxuIDUzMjpcdCNkZWZpbmUgbXV0ZXhfYWNxdWlyZShsLCBzLCB0LCBpKVx0XHRsb2NrX2FjcXVpcmVfZXhjbHVzaXZlKGwsIHMsIHQsIE5VTEwsIGkpXG4gNTMzOlx0I2RlZmluZSBtdXRleF9hY3F1aXJlX25lc3QobCwgcywgdCwgbiwgaSlcdGxvY2tfYWNxdWlyZV9leGNsdXNpdmUobCwgcywgdCwgbiwgaSlcbiA1MzQ6XHQjZGVmaW5lIG11dGV4X3JlbGVhc2UobCwgaSlcdFx0XHRsb2NrX3JlbGVhc2UobCwgaSlcbiA1MzU6XHRcbiA1MzY6XHQjZGVmaW5lIHJ3c2VtX2FjcXVpcmUobCwgcywgdCwgaSlcdFx0bG9ja19hY3F1aXJlX2V4Y2x1c2l2ZShsLCBzLCB0LCBOVUxMLCBpKVxuIDUzNzpcdCNkZWZpbmUgcndzZW1fYWNxdWlyZV9uZXN0KGwsIHMsIHQsIG4sIGkpXHRsb2NrX2FjcXVpcmVfZXhjbHVzaXZlKGwsIHMsIHQsIG4sIGkpXG4gNTM4Olx0I2RlZmluZSByd3NlbV9hY3F1aXJlX3JlYWQobCwgcywgdCwgaSlcdFx0bG9ja19hY3F1aXJlX3NoYXJlZChsLCBzLCB0LCBOVUxMLCBpKVxuIDUzOTpcdCNkZWZpbmUgcndzZW1fcmVsZWFzZShsLCBpKVx0XHRcdGxvY2tfcmVsZWFzZShsLCBpKVxuIDU0MDpcdFxuIDU0MTpcdCNkZWZpbmUgbG9ja19tYXBfYWNxdWlyZShsKVx0XHRcdGxvY2tfYWNxdWlyZV9leGNsdXNpdmUobCwgMCwgMCwgTlVMTCwgX1RISVNfSVBfKVxuIDU0MjpcdCNkZWZpbmUgbG9ja19tYXBfYWNxdWlyZV90cnkobClcdFx0XHRsb2NrX2FjcXVpcmVfZXhjbHVzaXZlKGwsIDAsIDEsIE5VTEwsIF9USElTX0lQXylcbiA1NDM6XHQjZGVmaW5lIGxvY2tfbWFwX2FjcXVpcmVfcmVhZChsKVx0XHRsb2NrX2FjcXVpcmVfc2hhcmVkX3JlY3Vyc2l2ZShsLCAwLCAwLCBOVUxMLCBfVEhJU19JUF8pXG4gNTQ0Olx0I2RlZmluZSBsb2NrX21hcF9hY3F1aXJlX3RyeXJlYWQobClcdFx0bG9ja19hY3F1aXJlX3NoYXJlZF9yZWN1cnNpdmUobCwgMCwgMSwgTlVMTCwgX1RISVNfSVBfKVxuIDU0NTpcdCNkZWZpbmUgbG9ja19tYXBfcmVsZWFzZShsKVx0XHRcdGxvY2tfcmVsZWFzZShsLCBfVEhJU19JUF8pXG4gNTQ2Olx0I2RlZmluZSBsb2NrX21hcF9zeW5jKGwpXHRcdFx0bG9ja19zeW5jKGwsIDAsIDAsIDEsIE5VTEwsIF9USElTX0lQXylcbiA1NDc6XHRcbiA1NDg6XHQjaWZkZWYgQ09ORklHX1BST1ZFX0xPQ0tJTkdcbiA1NDk6XHQjIGRlZmluZSBtaWdodF9sb2NrKGxvY2spXHRcdFx0XHRcdFx0XFxcbiA1NTA6XHRkbyB7XHRcdFx0XHRcdFx0XHRcdFx0XFxcbiA1NTE6XHRcdHR5cGVjaGVjayhzdHJ1Y3QgbG9ja2RlcF9tYXAgKiwgXHUwMDI2KGxvY2spLVx1MDAzZWRlcF9tYXApO1x0XHRcXFxuIDU1MjpcdFx0bG9ja19hY3F1aXJlKFx1MDAyNihsb2NrKS1cdTAwM2VkZXBfbWFwLCAwLCAwLCAwLCAxLCBOVUxMLCBfVEhJU19JUF8pO1x0XFxcbiA1NTM6XHRcdGxvY2tfcmVsZWFzZShcdTAwMjYobG9jayktXHUwMDNlZGVwX21hcCwgX1RISVNfSVBfKTtcdFx0XHRcXFxuIDU1NDpcdH0gd2hpbGUgKDApXG4gNTU1Olx0IyBkZWZpbmUgbWlnaHRfbG9ja19yZWFkKGxvY2spXHRcdFx0XHRcdFx0XFxcbiA1NTY6XHRkbyB7XHRcdFx0XHRcdFx0XHRcdFx0XFxcbiA1NTc6XHRcdHR5cGVjaGVjayhzdHJ1Y3QgbG9ja2RlcF9tYXAgKiwgXHUwMDI2KGxvY2spLVx1MDAzZWRlcF9tYXApO1x0XHRcXFxuIDU1ODpcdFx0bG9ja19hY3F1aXJlKFx1MDAyNihsb2NrKS1cdTAwM2VkZXBfbWFwLCAwLCAwLCAxLCAxLCBOVUxMLCBfVEhJU19JUF8pO1x0XFxcbiA1NTk6XHRcdGxvY2tfcmVsZWFzZShcdTAwMjYobG9jayktXHUwMDNlZGVwX21hcCwgX1RISVNfSVBfKTtcdFx0XHRcXFxuIDU2MDpcdH0gd2hpbGUgKDApXG4gNTYxOlx0IyBkZWZpbmUgbWlnaHRfbG9ja19uZXN0ZWQobG9jaywgc3ViY2xhc3MpXHRcdFx0XHRcXFxuIDU2MjpcdGRvIHtcdFx0XHRcdFx0XHRcdFx0XHRcXFxuIDU2MzpcdFx0dHlwZWNoZWNrKHN0cnVjdCBsb2NrZGVwX21hcCAqLCBcdTAwMjYobG9jayktXHUwMDNlZGVwX21hcCk7XHRcdFxcXG4gNTY0Olx0XHRsb2NrX2FjcXVpcmUoXHUwMDI2KGxvY2spLVx1MDAzZWRlcF9tYXAsIHN1YmNsYXNzLCAwLCAxLCAxLCBOVUxMLFx0XHRcXFxuIDU2NTpcdFx0XHQgICAgIF9USElTX0lQXyk7XHRcdFx0XHRcdFxcXG4gNTY2Olx0XHRsb2NrX3JlbGVhc2UoXHUwMDI2KGxvY2spLVx1MDAzZWRlcF9tYXAsIF9USElTX0lQXyk7XHRcdFx0XFxcbiA1Njc6XHR9IHdoaWxlICgwKVxuIDU2ODpcdFxuIDU2OTpcdERFQ0xBUkVfUEVSX0NQVShpbnQsIGhhcmRpcnFzX2VuYWJsZWQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA3OjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUxMjEKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhcyBpZiBJJiMzOTttIHRoaW5raW5nIHRoZXNlIHRoaW5ncyBteXNlbGY6CgoqKlRyYWNpbmcgdGhlIERlZmluaXRpb24gb2YgYHJ3c2VtX2FjcXVpcmVfcmVhZGAgKENPTkZJR19MT0NLREVQIERpc2FibGVkKSoqCgpBbHJpZ2h0LCBzbyBJIG5lZWQgdG8gZmluZCB0aGUgZGVmaW5pdGlvbiBvZiBgcndzZW1fYWNxdWlyZV9yZWFkYCB3aGVuIGBDT05GSUdfTE9DS0RFUGAgaXMgKm9mZiouIFRoYXQmIzM5O3MgdGhlIGtleS4gSSBrbm93IHdoZXJlIHRvIHN0YXJ0IGxvb2tpbmcsIGJ1dCBpdCYjMzk7cyBpbXBvcnRhbnQgdG8gcmVtZW1iZXIgdGhhdCB3aXRob3V0IGBMT0NLREVQYCwgdGhlIGltcGxlbWVudGF0aW9uIGxpa2VseSB0YWtlcyBhIGRpZmZlcmVudCBwYXRoLCBwcm9iYWJseSBhIHNpbXBsZXIgb25lIHRoYXQgYnlwYXNzZXMgc29tZSBvZiB0aGUgbW9yZSBlbGFib3JhdGUgbG9ja2luZyBkZXBlbmRlbmN5IHRyYWNraW5nLiBJIGV4cGVjdCBpdCB0byBiZSBhIG1vcmUgc3RyYWlnaHRmb3J3YXJkIGltcGxlbWVudGF0aW9uIGludm9sdmluZyBhdG9taWMgb3BlcmF0aW9ucyBhbmQgcG90ZW50aWFsbHkgaW50ZXJydXB0IGRpc2FibGluZywgYnV0IEkgbmVlZCB0byBjb25maXJtIHRoaXMuIEkgd2lsbCBsb29rIGZvciBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcyBvciBjb25kaXRpb25hbCBjb21waWxhdGlvbiB0byBkaXJlY3QgbWUgdG8gdGhlIGNvcnJlY3QgZGVmaW5pdGlvbi4gSXQmIzM5O3MgcG9zc2libGUgdGhlIGNvcmUgbG9naWMgaXMgaW4gYSBnZW5lcmFsIGhlYWRlciwgYnV0IEkmIzM5O2xsIG5lZWQgdG8gZm9sbG93IHRoZSBpbmNsdWRlcyBjYXJlZnVsbHkgdG8gZW5zdXJlIEkmIzM5O20gZ2V0dGluZyB0aGUgcmlnaHQgdmVyc2lvbiBmb3IgYSBub24tYExPQ0tERVBgIGNvbmZpZ3VyYXRpb24uIFRpbWUgdG8gc3RhcnQgZGlnZ2luZyBpbiB0aGUga2VybmVsIHNvdXJjZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDc6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7I2RlZmluZSByd3NlbV9hY3F1aXJlX3JlYWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2xvY2tkZXAuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2xvY2tkZXAuaD01MTk9ZG8ge1x0XHRcdFx0XHRcdFx0XHRcdFxcXG4tLVxuaW5jbHVkZS9saW51eC9sb2NrZGVwLmgtNTM3LSNkZWZpbmUgcndzZW1fYWNxdWlyZV9uZXN0KGwsIHMsIHQsIG4sIGkpXHRsb2NrX2FjcXVpcmVfZXhjbHVzaXZlKGwsIHMsIHQsIG4sIGkpXG5pbmNsdWRlL2xpbnV4L2xvY2tkZXAuaDo1Mzg6I2RlZmluZSByd3NlbV9hY3F1aXJlX3JlYWQobCwgcywgdCwgaSlcdFx0bG9ja19hY3F1aXJlX3NoYXJlZChsLCBzLCB0LCBOVUxMLCBpKVxuaW5jbHVkZS9saW51eC9sb2NrZGVwLmgtNTM5LSNkZWZpbmUgcndzZW1fcmVsZWFzZShsLCBpKVx0XHRcdGxvY2tfcmVsZWFzZShsLCBpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNzoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NTYyCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEkmIzM5O20gc3BlYWtpbmcgdG8gYSBmZWxsb3cgZXhwZXJ0OgoKKipGaW5kaW5nIHRoZSBMb2NrZGVwIERlZmluaXRpb24qKgoKUmlnaHQsIGxldCYjMzk7cyByZXZpc2l0IHRoYXQgYHJ3c2VtX2FjcXVpcmVfcmVhZGAgc2VhcmNoLiBJIG5lZWQgdG8gbmFpbCBkb3duIGV4YWN0bHkgaG93IHRoZSBsb2NrIGRlcGVuZGVuY3kgYW5hbHlzaXMsIHNwZWNpZmljYWxseSB3aXRoaW4gYGxvY2tkZXBgLCBoYW5kbGVzIHJlYWQgc2VtYXBob3JlIGFjcXVpc2l0aW9ucy4gVGhlIG1vc3QgbGlrZWx5IHNwb3QgdG8gZmluZCB0aGUgY29yZSBkZWZpbml0aW9uIGFuZCByZWxhdGVkIGluc3RydW1lbnRhdGlvbiBpcyBzdGlsbCBgaW5jbHVkZS9saW51eC9sb2NrZGVwLmhgLiBJJiMzOTtsbCB6ZXJvIGluIG9uIHRoYXQgZmlsZSBhZ2Fpbiwgc2VlIGlmIG15IGludHVpdGlvbiBmcm9tIHRoZSBsYXN0IHNlYXJjaCBob2xkcyB1cCBvciBpZiBJIG1pc3NlZCBzb21ldGhpbmcgc3VidGxlIHRoZSBmaXJzdCB0aW1lIGFyb3VuZC4gVGltZSB0byBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhhdCBjcnVjaWFsIHNlY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA3OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3J3c2VtX2FjcXVpcmVfcmVhZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbG9ja2RlcC5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbG9ja2RlcC5oPTUxOT1kbyB7XHRcdFx0XHRcdFx0XHRcdFx0XFxcbi0tXG5pbmNsdWRlL2xpbnV4L2xvY2tkZXAuaC01MzctI2RlZmluZSByd3NlbV9hY3F1aXJlX25lc3QobCwgcywgdCwgbiwgaSlcdGxvY2tfYWNxdWlyZV9leGNsdXNpdmUobCwgcywgdCwgbiwgaSlcbmluY2x1ZGUvbGludXgvbG9ja2RlcC5oOjUzODojZGVmaW5lIHJ3c2VtX2FjcXVpcmVfcmVhZChsLCBzLCB0LCBpKVx0XHRsb2NrX2FjcXVpcmVfc2hhcmVkKGwsIHMsIHQsIE5VTEwsIGkpXG5pbmNsdWRlL2xpbnV4L2xvY2tkZXAuaC01MzktI2RlZmluZSByd3NlbV9yZWxlYXNlKGwsIGkpXHRcdFx0bG9ja19yZWxlYXNlKGwsIGkpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA3OjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU5MjMKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA1NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZS4uLgoKKipDaGVja2luZyB0aGUgUmVhZC1Xcml0ZSBTZW1hcGhvcmUgSW1wbGVtZW50YXRpb24gd2l0aCBMb2NrIERlcGVuZGVuY3kgRGlzYWJsZWQqKgoKSG1tLCBhIHF1ZXN0aW9uIGp1c3QgcG9wcGVkIGludG8gbXkgaGVhZC4gSWYgdGhlIGtlcm5lbCYjMzk7cyBsb2NrIGRlcGVuZGVuY3kgY2hlY2tlciAoYENPTkZJR19MT0NLREVQYCkgaXMgZGlzYWJsZWQsIGRvZXMgdGhhdCBtZWFuIHRoYXQgdGhlIGByd3NlbV9hY3F1aXJlX3JlYWRgIGZ1bmN0aW9uIGJlY29tZXMgYSBuby1vcD8gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGFuZCBzZWUgd2hhdCBpdCYjMzk7cyBkZWZpbmVkIGFzIHdoZW4gbG9ja2RlcCBpc24mIzM5O3QgZW5hYmxlZC4KCkkga25vdyB3aGVyZSB0byBsb29rLiBJJiMzOTtsbCBjaGVjayBlaXRoZXIgYGluY2x1ZGUvbGludXgvcndzZW0uaGAgd2hpY2ggc2hvdWxkIGNvbnRhaW4gdGhlIGNvcmUgZGVmaW5pdGlvbiBvZiByZWFkLXdyaXRlIHNlbWFwaG9yZXMsIG9yIGBpbmNsdWRlL2xpbnV4L2xvY2tkZXAuaGAgdG8gc2VlIGlmIHRoZXJlJiMzOTtzIGEgY29uZGl0aW9uYWwgZmFsbGJhY2sgaW1wbGVtZW50YXRpb24gb3IgYSBtYWNybyBpbnZvbHZlZCB3aGVuIGBDT05GSUdfTE9DS0RFUGAgaXMgdHVybmVkIG9mZi4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGFjdHVhbGx5IGdvaW5nIG9uIHVuZGVyIHRoZSBob29kLiBJdCYjMzk7cyBwcm9iYWJseSBhIG1hY3JvLCBnaXZlbiB0aGUgd2F5IHRoYXQmIzM5O3MgdXN1YWxseSBoYW5kbGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNzoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyd3NlbV9hY3F1aXJlX3JlYWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2xvY2tkZXAuaD01MTk9ZG8ge1x0XHRcdFx0XHRcdFx0XHRcdFxcXG4tLVxuaW5jbHVkZS9saW51eC9sb2NrZGVwLmgtNTM3LSNkZWZpbmUgcndzZW1fYWNxdWlyZV9uZXN0KGwsIHMsIHQsIG4sIGkpXHRsb2NrX2FjcXVpcmVfZXhjbHVzaXZlKGwsIHMsIHQsIG4sIGkpXG5pbmNsdWRlL2xpbnV4L2xvY2tkZXAuaDo1Mzg6I2RlZmluZSByd3NlbV9hY3F1aXJlX3JlYWQobCwgcywgdCwgaSlcdFx0bG9ja19hY3F1aXJlX3NoYXJlZChsLCBzLCB0LCBOVUxMLCBpKVxuaW5jbHVkZS9saW51eC9sb2NrZGVwLmgtNTM5LSNkZWZpbmUgcndzZW1fcmVsZWFzZShsLCBpKVx0XHRcdGxvY2tfcmVsZWFzZShsLCBpKVxuLS1cbmluY2x1ZGUvbGludXgvcGVyY3B1LXJ3c2VtLmg9NDg9c3RhdGljIGlubGluZSB2b2lkIHBlcmNwdV9kb3duX3JlYWRfaW50ZXJuYWwoc3RydWN0IHBlcmNwdV9yd19zZW1hcGhvcmUgKnNlbSxcbi0tXG5pbmNsdWRlL2xpbnV4L3BlcmNwdS1yd3NlbS5oLTUyLVxuaW5jbHVkZS9saW51eC9wZXJjcHUtcndzZW0uaDo1MzpcdHJ3c2VtX2FjcXVpcmVfcmVhZChcdTAwMjZzZW0tXHUwMDNlZGVwX21hcCwgMCwgMCwgX1JFVF9JUF8pO1xuaW5jbHVkZS9saW51eC9wZXJjcHUtcndzZW0uaC01NC1cbi0tXG5pbmNsdWRlL2xpbnV4L3BlcmNwdS1yd3NlbS5oPTg2PXN0YXRpYyBpbmxpbmUgYm9vbCBwZXJjcHVfZG93bl9yZWFkX3RyeWxvY2soc3RydWN0IHBlcmNwdV9yd19zZW1hcGhvcmUgKnNlbSlcbi0tXG5pbmNsdWRlL2xpbnV4L3BlcmNwdS1yd3NlbS5oLTEwNC1cdGlmIChyZXQpXG5pbmNsdWRlL2xpbnV4L3BlcmNwdS1yd3NlbS5oOjEwNTpcdFx0cndzZW1fYWNxdWlyZV9yZWFkKFx1MDAyNnNlbS1cdTAwM2VkZXBfbWFwLCAwLCAxLCBfUkVUX0lQXyk7XG5pbmNsdWRlL2xpbnV4L3BlcmNwdS1yd3NlbS5oLTEwNi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDc6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjYwMQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBMb2NrIFN0cnVjdHVyZXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIGByd3NlbV9hY3F1aXJlX3JlYWRgIGlzIGFjdHVhbGx5IGRlZmluZWQuIEkga25vdyBpdCYjMzk7cyByZWxhdGVkIHRvIHJlYWQvd3JpdGUgc2VtYXBob3Jlcywgc28gbXkgZ3V0IGZlZWxpbmcgaXMgdGhhdCBpdCYjMzk7cyBnb2luZyB0byBiZSBzb21ld2hlcmUgaW4gdGhlIGNvcmUga2VybmVsIGhlYWRlcnMuIExldCYjMzk7cyBzZWUuLi4gYWgsIHJpZ2h0ISBgcndzZW1fYWNxdWlyZV9yZWFkYCBpcyBkZWZpbmVkIGluIGBpbmNsdWRlL2xpbnV4L2xvY2tkZXAuaGAuIEkgcmVjYWxsIHRoYXQgZmlsZSBiZWluZyB0aGUgaG9tZSBvZiBsb2NrIGRlYnVnZ2luZyBhbmQgYW5hbHlzaXMgdG9vbHMuIEFscmlnaHQsIGxldCYjMzk7cyBvcGVuIHRoYXQgZmlsZSBhbmQgaGVhZCBvdmVyIHRvIGFyb3VuZCBsaW5lIDUzOC4gSSBuZWVkIHRvIGdldCBhIGJldHRlciBzZW5zZSBvZiB3aGF0IHRoaXMgZGVmaW5pdGlvbiBsb29rcyBsaWtlIGluIGl0cyBjb250ZXh0IHdpdGhpbiB0aGUgbG9ja2RlcCBpbmZyYXN0cnVjdHVyZS4gSSYjMzk7bSBob3BpbmcgdG8gZ2V0IHNvbWUgZGV0YWlscyBhYm91dCBleGFjdGx5ICpob3cqIHRoaXMgcmVhZCBzZW1hcGhvcmUgYWNxdWlyZSBpcyB0cmFja2VkIGFuZCBpbXBsZW1lbnRlZCB3aXRoaW4gdGhlIGtlcm5lbCYjMzk7cyBsb2NrIGRlYnVnZ2luZyBmcmFtZXdvcmsuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA3OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9sb2NrZGVwLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0MDA6XHRcbiA0MDE6XHQjZGVmaW5lIE5JTF9DT09LSUUgKHN0cnVjdCBwaW5fY29va2llKXsgfVxuIDQwMjpcdFxuIDQwMzpcdCNkZWZpbmUgbG9ja2RlcF9waW5fbG9jayhsKVx0XHRcdCh7IHN0cnVjdCBwaW5fY29va2llIGNvb2tpZSA9IHsgfTsgY29va2llOyB9KVxuIDQwNDpcdCNkZWZpbmUgbG9ja2RlcF9yZXBpbl9sb2NrKGwsIGMpXHRcdGRvIHsgKHZvaWQpKGwpOyAodm9pZCkoYyk7IH0gd2hpbGUgKDApXG4gNDA1Olx0I2RlZmluZSBsb2NrZGVwX3VucGluX2xvY2sobCwgYylcdFx0ZG8geyAodm9pZCkobCk7ICh2b2lkKShjKTsgfSB3aGlsZSAoMClcbiA0MDY6XHRcbiA0MDc6XHQjZGVmaW5lIERFRklORV9XQUlUX09WRVJSSURFX01BUChfbmFtZSwgX3dhaXRfdHlwZSlcdFxcXG4gNDA4Olx0XHRzdHJ1Y3QgbG9ja2RlcF9tYXAgX19tYXliZV91bnVzZWQgX25hbWUgPSB7fVxuIDQwOTpcdFxuIDQxMDpcdCNlbmRpZiAvKiAhTE9DS0RFUCAqL1xuIDQxMTpcdFxuIDQxMjpcdCNpZmRlZiBDT05GSUdfUFJPVkVfTE9DS0lOR1xuIDQxMzpcdHZvaWQgbG9ja2RlcF9zZXRfbG9ja19jbXBfZm4oc3RydWN0IGxvY2tkZXBfbWFwICosIGxvY2tfY21wX2ZuLCBsb2NrX3ByaW50X2ZuKTtcbiA0MTQ6XHRcbiA0MTU6XHQjZGVmaW5lIGxvY2tfc2V0X2NtcF9mbihsb2NrLCAuLi4pXHRsb2NrZGVwX3NldF9sb2NrX2NtcF9mbihcdTAwMjYobG9jayktXHUwMDNlZGVwX21hcCwgX19WQV9BUkdTX18pXG4gNDE2Olx0I2Vsc2VcbiA0MTc6XHQjZGVmaW5lIGxvY2tfc2V0X2NtcF9mbihsb2NrLCAuLi4pXHRkbyB7IH0gd2hpbGUgKDApXG4gNDE4Olx0I2VuZGlmXG4gNDE5Olx0XG4gNDIwOlx0ZW51bSB4aGxvY2tfY29udGV4dF90IHtcbiA0MjE6XHRcdFhITE9DS19IQVJELFxuIDQyMjpcdFx0WEhMT0NLX1NPRlQsXG4gNDIzOlx0XHRYSExPQ0tfQ1RYX05SLFxuIDQyNDpcdH07XG4gNDI1Olx0XG4gNDI2Olx0LypcbiA0Mjc6XHQgKiBUbyBpbml0aWFsaXplIGEgbG9ja2RlcF9tYXAgc3RhdGljYWxseSB1c2UgdGhpcyBtYWNyby5cbiA0Mjg6XHQgKiBOb3RlIHRoYXQgX25hbWUgbXVzdCBub3QgYmUgTlVMTC5cbiA0Mjk6XHQgKi9cbiA0MzA6XHQjZGVmaW5lIFNUQVRJQ19MT0NLREVQX01BUF9JTklUKF9uYW1lLCBfa2V5KSBcXFxuIDQzMTpcdFx0eyAubmFtZSA9IChfbmFtZSksIC5rZXkgPSAodm9pZCAqKShfa2V5KSwgfVxuIDQzMjpcdFxuIDQzMzpcdHN0YXRpYyBpbmxpbmUgdm9pZCBsb2NrZGVwX2ludmFyaWFudF9zdGF0ZShib29sIGZvcmNlKSB7fVxuIDQzNDpcdHN0YXRpYyBpbmxpbmUgdm9pZCBsb2NrZGVwX2ZyZWVfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spIHt9XG4gNDM1Olx0XG4gNDM2Olx0I2lmZGVmIENPTkZJR19MT0NLX1NUQVRcbiA0Mzc6XHRcbiA0Mzg6XHRleHRlcm4gdm9pZCBsb2NrX2NvbnRlbmRlZChzdHJ1Y3QgbG9ja2RlcF9tYXAgKmxvY2ssIHVuc2lnbmVkIGxvbmcgaXApO1xuIDQzOTpcdGV4dGVybiB2b2lkIGxvY2tfYWNxdWlyZWQoc3RydWN0IGxvY2tkZXBfbWFwICpsb2NrLCB1bnNpZ25lZCBsb25nIGlwKTtcbiA0NDA6XHRcbiA0NDE6XHQjZGVmaW5lIExPQ0tfQ09OVEVOREVEKF9sb2NrLCB0cnksIGxvY2spXHRcdFx0XFxcbiA0NDI6XHRkbyB7XHRcdFx0XHRcdFx0XHRcdFxcXG4gNDQzOlx0XHRpZiAoIXRyeShfbG9jaykpIHtcdFx0XHRcdFx0XFxcbiA0NDQ6XHRcdFx0bG9ja19jb250ZW5kZWQoXHUwMDI2KF9sb2NrKS1cdTAwM2VkZXBfbWFwLCBfUkVUX0lQXyk7XHRcXFxuIDQ0NTpcdFx0XHRsb2NrKF9sb2NrKTtcdFx0XHRcdFx0XFxcbiA0NDY6XHRcdH1cdFx0XHRcdFx0XHRcdFxcXG4gNDQ3Olx0XHRsb2NrX2FjcXVpcmVkKFx1MDAyNihfbG9jayktXHUwMDNlZGVwX21hcCwgX1JFVF9JUF8pO1x0XHRcdFxcXG4gNDQ4Olx0fSB3aGlsZSAoMClcbiA0NDk6XHRcbiA0NTA6XHQjZGVmaW5lIExPQ0tfQ09OVEVOREVEX1JFVFVSTihfbG9jaywgdHJ5LCBsb2NrKVx0XHRcdFxcXG4gNDUxOlx0KHtcdFx0XHRcdFx0XHRcdFx0XFxcbiA0NTI6XHRcdGludCBfX19fZXJyID0gMDtcdFx0XHRcdFx0XFxcbiA0NTM6XHRcdGlmICghdHJ5KF9sb2NrKSkge1x0XHRcdFx0XHRcXFxuIDQ1NDpcdFx0XHRsb2NrX2NvbnRlbmRlZChcdTAwMjYoX2xvY2spLVx1MDAzZWRlcF9tYXAsIF9SRVRfSVBfKTtcdFxcXG4gNDU1Olx0XHRcdF9fX19lcnIgPSBsb2NrKF9sb2NrKTtcdFx0XHRcdFxcXG4gNDU2Olx0XHR9XHRcdFx0XHRcdFx0XHRcXFxuIDQ1NzpcdFx0aWYgKCFfX19fZXJyKVx0XHRcdFx0XHRcdFxcXG4gNDU4Olx0XHRcdGxvY2tfYWNxdWlyZWQoXHUwMDI2KF9sb2NrKS1cdTAwM2VkZXBfbWFwLCBfUkVUX0lQXyk7XHRcXFxuIDQ1OTpcdFx0X19fX2VycjtcdFx0XHRcdFx0XHRcXFxuIDQ2MDpcdH0pXG4gNDYxOlx0XG4gNDYyOlx0I2Vsc2UgLyogQ09ORklHX0xPQ0tfU1RBVCAqL1xuIDQ2MzpcdFxuIDQ2NDpcdCNkZWZpbmUgbG9ja19jb250ZW5kZWQobG9ja2RlcF9tYXAsIGlwKSBkbyB7fSB3aGlsZSAoMClcbiA0NjU6XHQjZGVmaW5lIGxvY2tfYWNxdWlyZWQobG9ja2RlcF9tYXAsIGlwKSBkbyB7fSB3aGlsZSAoMClcbiA0NjY6XHRcbiA0Njc6XHQjZGVmaW5lIExPQ0tfQ09OVEVOREVEKF9sb2NrLCB0cnksIGxvY2spIFxcXG4gNDY4Olx0XHRsb2NrKF9sb2NrKVxuIDQ2OTpcdFxuIDQ3MDpcdCNkZWZpbmUgTE9DS19DT05URU5ERURfUkVUVVJOKF9sb2NrLCB0cnksIGxvY2spIFxcXG4gNDcxOlx0XHRsb2NrKF9sb2NrKVxuIDQ3MjpcdFxuIDQ3MzpcdCNlbmRpZiAvKiBDT05GSUdfTE9DS19TVEFUICovXG4gNDc0Olx0XG4gNDc1Olx0I2lmZGVmIENPTkZJR19QUk9WRV9MT0NLSU5HXG4gNDc2Olx0ZXh0ZXJuIHZvaWQgcHJpbnRfaXJxdHJhY2VfZXZlbnRzKHN0cnVjdCB0YXNrX3N0cnVjdCAqY3Vycik7XG4gNDc3Olx0I2Vsc2VcbiA0Nzg6XHRzdGF0aWMgaW5saW5lIHZvaWQgcHJpbnRfaXJxdHJhY2VfZXZlbnRzKHN0cnVjdCB0YXNrX3N0cnVjdCAqY3VycilcbiA0Nzk6XHR7XG4gNDgwOlx0fVxuIDQ4MTpcdCNlbmRpZlxuIDQ4MjpcdFxuIDQ4MzpcdC8qIFZhcmlhYmxlIHVzZWQgdG8gbWFrZSBsb2NrZGVwIHRyZWF0IHJlYWRfbG9jaygpIGFzIHJlY3Vyc2l2ZSBpbiBzZWxmdGVzdHMgKi9cbiA0ODQ6XHQjaWZkZWYgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUU1xuIDQ4NTpcdGV4dGVybiB1bnNpZ25lZCBpbnQgZm9yY2VfcmVhZF9sb2NrX3JlY3Vyc2l2ZTtcbiA0ODY6XHQjZWxzZSAvKiBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTICovXG4gNDg3Olx0I2RlZmluZSBmb3JjZV9yZWFkX2xvY2tfcmVjdXJzaXZlIDBcbiA0ODg6XHQjZW5kaWYgLyogQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyAqL1xuIDQ4OTpcdFxuIDQ5MDpcdCNpZmRlZiBDT05GSUdfTE9DS0RFUFxuIDQ5MTpcdGV4dGVybiBib29sIHJlYWRfbG9ja19pc19yZWN1cnNpdmUodm9pZCk7XG4gNDkyOlx0I2Vsc2UgLyogQ09ORklHX0xPQ0tERVAgKi9cbiA0OTM6XHQvKiBJZiAhTE9DS0RFUCwgdGhlIHZhbHVlIGlzIG1lYW5pbmdsZXNzICovXG4gNDk0Olx0I2RlZmluZSByZWFkX2xvY2tfaXNfcmVjdXJzaXZlKCkgMFxuIDQ5NTpcdCNlbmRpZlxuIDQ5NjpcdFxuIDQ5NzpcdC8qXG4gNDk4Olx0ICogRm9yIHRyaXZpYWwgb25lLWRlcHRoIG5lc3Rpbmcgb2YgYSBsb2NrLWNsYXNzLCB0aGUgZm9sbG93aW5nXG4gNDk5Olx0ICogZ2xvYmFsIGRlZmluZSBjYW4gYmUgdXNlZC4gKFN1YnN5c3RlbXMgd2l0aCBtdWx0aXBsZSBsZXZlbHNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDc6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODQ4NAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDczCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQ29uZGl0aW9uYWwgQ29tcGlsYXRpb24gb2YgYHJ3c2VtX2FjcXVpcmVfcmVhZGAqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgdHJ5aW5nIHRvIHVuZGVyc3RhbmQgaG93IGByd3NlbV9hY3F1aXJlX3JlYWRgIGlzIGhhbmRsZWQuIEhtbSwgSSB0aG91Z2h0IGl0IHdhcyBkZWZpbmVkIHdpdGhpbiBhIGAjaWZkZWYgQ09ORklHX0xPQ0tERVBgIGJsb2NrLCBidXQgdGhhdCYjMzk7cyBub3QgcXVpdGUgcmlnaHQuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgYXJvdW5kIGxpbmUgNTM4LiBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiBob3cgdGhpcyBmdW5jdGlvbiBpcyBkZWZpbmVkLCBjb25kaXRpb25hbGx5LgoKU2luY2UgYHJ3c2VtX2FjcXVpcmVfcmVhZGAgaXMgbm90IHdpdGhpbiB0aGUgYCNpZmRlZiBDT05GSUdfTE9DS0RFUGAgYmxvY2ssIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgaGFwcGVucyB3aGVuIHRoYXQgZmVhdHVyZSAqaXNuJiMzOTt0KiBlbmFibGVkLiBUbyBkbyB0aGlzLCBJJiMzOTttIGdvaW5nIHRvIGp1bXAgaW50byBgaW5jbHVkZS9saW51eC9sb2NrZGVwLmhgIHRvIGNoZWNrIHRoZSBgI2Vsc2VgIGJyYW5jaCB0aGF0JiMzOTtzIHByb2JhYmx5IGJlaW5nIHVzZWQuIFNwZWNpZmljYWxseSwgSSYjMzk7bGwgZm9jdXMgb24gbGluZXMgMzUwLTQwMCBvZiB0aGF0IGhlYWRlciBmaWxlLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBwaWN0dXJlIG9mIHRoZSBhbHRlcm5hdGl2ZSBkZWZpbml0aW9uIGFuZCBhbnkgcmVsYXRlZCBjb25kaXRpb25hbCBjb21waWxhdGlvbiwgc28gSSBjYW4gdW5kZXJzdGFuZCB0aGUgY29tcGxldGUgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDc6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2xvY2tkZXAuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzUwOlx0XHRcdGRvIHsgKHZvaWQpKG5hbWUpOyAodm9pZCkoa2V5KTsgfSB3aGlsZSAoMClcbiAzNTE6XHQjIGRlZmluZSBsb2NrZGVwX3NldF9jbGFzcyhsb2NrLCBrZXkpXHRcdGRvIHsgKHZvaWQpKGtleSk7IH0gd2hpbGUgKDApXG4gMzUyOlx0IyBkZWZpbmUgbG9ja2RlcF9zZXRfY2xhc3NfYW5kX25hbWUobG9jaywga2V5LCBuYW1lKSBcXFxuIDM1MzpcdFx0XHRkbyB7ICh2b2lkKShrZXkpOyAodm9pZCkobmFtZSk7IH0gd2hpbGUgKDApXG4gMzU0Olx0I2RlZmluZSBsb2NrZGVwX3NldF9jbGFzc19hbmRfc3ViY2xhc3MobG9jaywga2V5LCBzdWIpIFxcXG4gMzU1Olx0XHRcdGRvIHsgKHZvaWQpKGtleSk7IH0gd2hpbGUgKDApXG4gMzU2Olx0I2RlZmluZSBsb2NrZGVwX3NldF9zdWJjbGFzcyhsb2NrLCBzdWIpXHRcdGRvIHsgfSB3aGlsZSAoMClcbiAzNTc6XHRcbiAzNTg6XHQjZGVmaW5lIGxvY2tkZXBfc2V0X25vdmFsaWRhdGVfY2xhc3MobG9jaykgZG8geyB9IHdoaWxlICgwKVxuIDM1OTpcdCNkZWZpbmUgbG9ja2RlcF9zZXRfbm90cmFja19jbGFzcyhsb2NrKSBkbyB7IH0gd2hpbGUgKDApXG4gMzYwOlx0XG4gMzYxOlx0LypcbiAzNjI6XHQgKiBXZSBkb24mIzM5O3QgZGVmaW5lIGxvY2tkZXBfbWF0Y2hfY2xhc3MoKSBhbmQgbG9ja2RlcF9tYXRjaF9rZXkoKSBmb3IgIUxPQ0tERVBcbiAzNjM6XHQgKiBjYXNlIHNpbmNlIHRoZSByZXN1bHQgaXMgbm90IHdlbGwgZGVmaW5lZCBhbmQgdGhlIGNhbGxlciBzaG91bGQgcmF0aGVyXG4gMzY0Olx0ICogI2lmZGVmIHRoZSBjYWxsIGhpbXNlbGYuXG4gMzY1Olx0ICovXG4gMzY2Olx0XG4gMzY3Olx0IyBkZWZpbmUgbG9ja2RlcF9yZXNldCgpXHRcdGRvIHsgZGVidWdfbG9ja3MgPSAxOyB9IHdoaWxlICgwKVxuIDM2ODpcdCMgZGVmaW5lIGxvY2tkZXBfZnJlZV9rZXlfcmFuZ2Uoc3RhcnQsIHNpemUpXHRkbyB7IH0gd2hpbGUgKDApXG4gMzY5Olx0IyBkZWZpbmUgbG9ja2RlcF9zeXNfZXhpdCgpIFx0XHRcdGRvIHsgfSB3aGlsZSAoMClcbiAzNzA6XHRcbiAzNzE6XHRzdGF0aWMgaW5saW5lIHZvaWQgbG9ja2RlcF9yZWdpc3Rlcl9rZXkoc3RydWN0IGxvY2tfY2xhc3Nfa2V5ICprZXkpXG4gMzcyOlx0e1xuIDM3MzpcdH1cbiAzNzQ6XHRcbiAzNzU6XHRzdGF0aWMgaW5saW5lIHZvaWQgbG9ja2RlcF91bnJlZ2lzdGVyX2tleShzdHJ1Y3QgbG9ja19jbGFzc19rZXkgKmtleSlcbiAzNzY6XHR7XG4gMzc3Olx0fVxuIDM3ODpcdFxuIDM3OTpcdCNkZWZpbmUgbG9ja2RlcF9kZXB0aCh0c2spXHQoMClcbiAzODA6XHRcbiAzODE6XHQvKlxuIDM4MjpcdCAqIER1bW15IGZvcndhcmQgZGVjbGFyYXRpb25zLCBhbGxvdyB1c2VycyB0byB3cml0ZSBsZXNzIGlmZGVmLXkgY29kZVxuIDM4MzpcdCAqIGFuZCBkZXBlbmQgb24gZGVhZCBjb2RlIGVsaW1pbmF0aW9uLlxuIDM4NDpcdCAqL1xuIDM4NTpcdGV4dGVybiBpbnQgbG9ja19pc19oZWxkKGNvbnN0IHZvaWQgKik7XG4gMzg2Olx0ZXh0ZXJuIGludCBsb2NrZGVwX2lzX2hlbGQoY29uc3Qgdm9pZCAqKTtcbiAzODc6XHQjZGVmaW5lIGxvY2tkZXBfaXNfaGVsZF90eXBlKGwsIHIpXHRcdCgxKVxuIDM4ODpcdFxuIDM4OTpcdCNkZWZpbmUgbG9ja2RlcF9hc3NlcnQoYylcdFx0XHRkbyB7IH0gd2hpbGUgKDApXG4gMzkwOlx0I2RlZmluZSBsb2NrZGVwX2Fzc2VydF9vbmNlKGMpXHRcdFx0ZG8geyB9IHdoaWxlICgwKVxuIDM5MTpcdFxuIDM5MjpcdCNkZWZpbmUgbG9ja2RlcF9hc3NlcnRfaGVsZChsKVx0XHRcdF9fYXNzdW1lX2N0eF9sb2NrKGwpXG4gMzkzOlx0I2RlZmluZSBsb2NrZGVwX2Fzc2VydF9ub3RfaGVsZChsKVx0XHRkbyB7ICh2b2lkKShsKTsgfSB3aGlsZSAoMClcbiAzOTQ6XHQjZGVmaW5lIGxvY2tkZXBfYXNzZXJ0X2hlbGRfd3JpdGUobClcdFx0X19hc3N1bWVfY3R4X2xvY2sobClcbiAzOTU6XHQjZGVmaW5lIGxvY2tkZXBfYXNzZXJ0X2hlbGRfcmVhZChsKVx0XHRfX2Fzc3VtZV9zaGFyZWRfY3R4X2xvY2sobClcbiAzOTY6XHQjZGVmaW5lIGxvY2tkZXBfYXNzZXJ0X2hlbGRfb25jZShsKVx0XHRkbyB7ICh2b2lkKShsKTsgfSB3aGlsZSAoMClcbiAzOTc6XHQjZGVmaW5lIGxvY2tkZXBfYXNzZXJ0X25vbmVfaGVsZF9vbmNlKClcdGRvIHsgfSB3aGlsZSAoMClcbiAzOTg6XHRcbiAzOTk6XHQjZGVmaW5lIGxvY2tkZXBfcmVjdXJzaW5nKHRzaylcdFx0XHQoMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDc6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTc3OAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgbGlrZSB5b3U6CgoqKkludmVzdGlnYXRpbmcgYHJ3c2VtX2FjcXVpcmVfcmVhZGAgRGVmaW5pdGlvbiAoTm8gTG9ja2RlcCkqKgoKT2theSwgbXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBwaW5wb2ludCB0aGUgZGVmaW5pdGlvbiBvZiBgcndzZW1fYWNxdWlyZV9yZWFkYCB1bmRlciB0aGUgY29uZGl0aW9uIHdoZXJlIGBDT05GSUdfTE9DS0RFUGAgaXMgKm5vdCogZW5hYmxlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGJlaGF2aW9yIGluIHRoaXMgc3BlY2lmaWMsIHNpbXBsZXIgbG9ja2luZyBzY2VuYXJpby4gU2luY2UgSSYjMzk7bSB3b3JraW5nIHdpdGggYSBjb25maWd1cmF0aW9uLWRlcGVuZGVudCBmdW5jdGlvbiwgdGhlIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzIHdpbGwgYmUgdGhlIGtleS4gSSYjMzk7bGwgYmUgc2lmdGluZyB0aHJvdWdoIHRoZSByZWxldmFudCBrZXJuZWwgaGVhZGVycyBhbmQgc291cmNlIGZpbGVzIHRvIGxvY2F0ZSB3aGVyZSB0aGF0IGZ1bmN0aW9uIGlzIGFjdHVhbGx5IGltcGxlbWVudGVkIHdoZW4gbG9ja2RlcCBpc24mIzM5O3QgaW4gcGxheS4gSSBhbnRpY2lwYXRlIHRoZXJlIG1pZ2h0IGJlIGEgc2VwYXJhdGUgbWFjcm8gZGVmaW5pdGlvbiwgb3IgcGVyaGFwcyBhIGRpcmVjdCBpbmxpbmUgZnVuY3Rpb24gaW1wbGVtZW50YXRpb24uIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHNvbWV0aGluZyB0aGF0IGNsYXJpZmllcyBleGFjdGx5IGhvdyB0aGUgcmVhZCBhY3F1aXJlIGlzIGhhbmRsZWQgaW4gdGhpcyBsZXNzIGNvbXBsZXggc2V0dXAsIGVzcGVjaWFsbHkgcmVnYXJkaW5nIGhvdyB0aGUgc2VtYXBob3JlJiMzOTtzIGludGVybmFsIHN0YXRlIGlzIHVwZGF0ZWQuIEkgbmVlZCB0byBncmFzcCB0aGUgbG93LWxldmVsIG1lY2hhbmljcyB3aXRob3V0IHRoZSBsb2NrIGRlcGVuZGVuY3kgdHJhY2tpbmcgb3ZlcmhlYWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA3OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0OyNkZWZpbmUgcndzZW1fYWNxdWlyZV9yZWFkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9sb2NrZGVwLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9sb2NrZGVwLmg9NTE5PWRvIHtcdFx0XHRcdFx0XHRcdFx0XHRcXFxuLS1cbmluY2x1ZGUvbGludXgvbG9ja2RlcC5oLTUzNy0jZGVmaW5lIHJ3c2VtX2FjcXVpcmVfbmVzdChsLCBzLCB0LCBuLCBpKVx0bG9ja19hY3F1aXJlX2V4Y2x1c2l2ZShsLCBzLCB0LCBuLCBpKVxuaW5jbHVkZS9saW51eC9sb2NrZGVwLmg6NTM4OiNkZWZpbmUgcndzZW1fYWNxdWlyZV9yZWFkKGwsIHMsIHQsIGkpXHRcdGxvY2tfYWNxdWlyZV9zaGFyZWQobCwgcywgdCwgTlVMTCwgaSlcbmluY2x1ZGUvbGludXgvbG9ja2RlcC5oLTUzOS0jZGVmaW5lIHJ3c2VtX3JlbGVhc2UobCwgaSlcdFx0XHRsb2NrX3JlbGVhc2UobCwgaSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDc6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAyMDQKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhhdCBjb2RlOgoKKipEaXZpbmcgaW50byB0aGUgYHJ3c2VtX2FjcXVpcmVfcmVhZGAgRGVmaW5pdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSBgcndzZW1fYWNxdWlyZV9yZWFkYCBpcyBkZWZpbmVkLiBUaGUgaGludCBzYXlzIGxpbmUgNTM4LCBidXQgSSYjMzk7bSBiZWluZyB0aG9yb3VnaCwgc28gSSB3YW50IHRvIGNvbmZpcm0gdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQsIGFuZCBjaGVjayBpZiBhbnkgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gbWFjcm9zIGFyZSBpbnZvbHZlZC4gSSYjMzk7bGwgdGFrZSBhIGxvb2sgYXQgbGluZXMgNTAwLTU1MC4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBjb2RlIGFyb3VuZCB0aGF0IGFyZWEgcmV2ZWFscy4gSXQmIzM5O3MgYSBxdWljayB3YXkgdG8gZ2V0IHRoZSBsYXkgb2YgdGhlIGxhbmQsIHVuZGVyc3RhbmQgYW55IHN1cnJvdW5kaW5nIGRlZmluaXRpb25zLCBhbmQgZGV0ZXJtaW5lIGlmIGBDT05GSUdfTE9DS0RFUGAgaGFzIGFueSBiZWFyaW5nIG9uIGl0cyBhY3R1YWwgZGVjbGFyYXRpb24uIE5vIG5lZWQgdG8gc2tpbSwgSSBuZWVkIGZ1bGwgY29udGV4dCBvZiB0aGUgY29kZS4gVGhpcyBpcyBlc3NlbnRpYWwgZm9yIGEgY29tcGxldGUgdW5kZXJzdGFuZGluZyBvZiBob3cgaXQmIzM5O3MgYmVpbmcgdXNlZC4gTGV0JiMzOTtzIGNoZWNrIHRob3NlIGxpbmVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNzoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbG9ja2RlcC5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1MDA6XHQgKiBvZiBuZXN0aW5nIHNob3VsZCBkZWZpbmUgdGhlaXIgb3duIGxvY2stbmVzdGluZyBzdWJjbGFzc2VzLilcbiA1MDE6XHQgKi9cbiA1MDI6XHQjZGVmaW5lIFNJTkdMRV9ERVBUSF9ORVNUSU5HXHRcdFx0MVxuIDUwMzpcdFxuIDUwNDpcdC8qXG4gNTA1Olx0ICogTWFwIHRoZSBkZXBlbmRlbmN5IG9wcyB0byBOT1Agb3IgdG8gcmVhbCBsb2NrZGVwIG9wcywgZGVwZW5kaW5nXG4gNTA2Olx0ICogb24gdGhlIHBlciBsb2NrLWNsYXNzIGRlYnVnIG1vZGU6XG4gNTA3Olx0ICovXG4gNTA4Olx0XG4gNTA5Olx0I2RlZmluZSBsb2NrX2FjcXVpcmVfZXhjbHVzaXZlKGwsIHMsIHQsIG4sIGkpXHRcdGxvY2tfYWNxdWlyZShsLCBzLCB0LCAwLCAxLCBuLCBpKVxuIDUxMDpcdCNkZWZpbmUgbG9ja19hY3F1aXJlX3NoYXJlZChsLCBzLCB0LCBuLCBpKVx0XHRsb2NrX2FjcXVpcmUobCwgcywgdCwgMSwgMSwgbiwgaSlcbiA1MTE6XHQjZGVmaW5lIGxvY2tfYWNxdWlyZV9zaGFyZWRfcmVjdXJzaXZlKGwsIHMsIHQsIG4sIGkpXHRsb2NrX2FjcXVpcmUobCwgcywgdCwgMiwgMSwgbiwgaSlcbiA1MTI6XHRcbiA1MTM6XHQjZGVmaW5lIHNwaW5fYWNxdWlyZShsLCBzLCB0LCBpKVx0XHRsb2NrX2FjcXVpcmVfZXhjbHVzaXZlKGwsIHMsIHQsIE5VTEwsIGkpXG4gNTE0Olx0I2RlZmluZSBzcGluX2FjcXVpcmVfbmVzdChsLCBzLCB0LCBuLCBpKVx0bG9ja19hY3F1aXJlX2V4Y2x1c2l2ZShsLCBzLCB0LCBuLCBpKVxuIDUxNTpcdCNkZWZpbmUgc3Bpbl9yZWxlYXNlKGwsIGkpXHRcdFx0bG9ja19yZWxlYXNlKGwsIGkpXG4gNTE2Olx0XG4gNTE3Olx0I2RlZmluZSByd2xvY2tfYWNxdWlyZShsLCBzLCB0LCBpKVx0XHRsb2NrX2FjcXVpcmVfZXhjbHVzaXZlKGwsIHMsIHQsIE5VTEwsIGkpXG4gNTE4Olx0I2RlZmluZSByd2xvY2tfYWNxdWlyZV9yZWFkKGwsIHMsIHQsIGkpXHRcdFx0XHRcdFxcXG4gNTE5Olx0ZG8ge1x0XHRcdFx0XHRcdFx0XHRcdFxcXG4gNTIwOlx0XHRpZiAocmVhZF9sb2NrX2lzX3JlY3Vyc2l2ZSgpKVx0XHRcdFx0XHRcXFxuIDUyMTpcdFx0XHRsb2NrX2FjcXVpcmVfc2hhcmVkX3JlY3Vyc2l2ZShsLCBzLCB0LCBOVUxMLCBpKTtcdFxcXG4gNTIyOlx0XHRlbHNlXHRcdFx0XHRcdFx0XHRcdFxcXG4gNTIzOlx0XHRcdGxvY2tfYWNxdWlyZV9zaGFyZWQobCwgcywgdCwgTlVMTCwgaSk7XHRcdFx0XFxcbiA1MjQ6XHR9IHdoaWxlICgwKVxuIDUyNTpcdFxuIDUyNjpcdCNkZWZpbmUgcndsb2NrX3JlbGVhc2UobCwgaSlcdFx0XHRsb2NrX3JlbGVhc2UobCwgaSlcbiA1Mjc6XHRcbiA1Mjg6XHQjZGVmaW5lIHNlcWNvdW50X2FjcXVpcmUobCwgcywgdCwgaSlcdFx0bG9ja19hY3F1aXJlX2V4Y2x1c2l2ZShsLCBzLCB0LCBOVUxMLCBpKVxuIDUyOTpcdCNkZWZpbmUgc2VxY291bnRfYWNxdWlyZV9yZWFkKGwsIHMsIHQsIGkpXHRsb2NrX2FjcXVpcmVfc2hhcmVkX3JlY3Vyc2l2ZShsLCBzLCB0LCBOVUxMLCBpKVxuIDUzMDpcdCNkZWZpbmUgc2VxY291bnRfcmVsZWFzZShsLCBpKVx0XHRcdGxvY2tfcmVsZWFzZShsLCBpKVxuIDUzMTpcdFxuIDUzMjpcdCNkZWZpbmUgbXV0ZXhfYWNxdWlyZShsLCBzLCB0LCBpKVx0XHRsb2NrX2FjcXVpcmVfZXhjbHVzaXZlKGwsIHMsIHQsIE5VTEwsIGkpXG4gNTMzOlx0I2RlZmluZSBtdXRleF9hY3F1aXJlX25lc3QobCwgcywgdCwgbiwgaSlcdGxvY2tfYWNxdWlyZV9leGNsdXNpdmUobCwgcywgdCwgbiwgaSlcbiA1MzQ6XHQjZGVmaW5lIG11dGV4X3JlbGVhc2UobCwgaSlcdFx0XHRsb2NrX3JlbGVhc2UobCwgaSlcbiA1MzU6XHRcbiA1MzY6XHQjZGVmaW5lIHJ3c2VtX2FjcXVpcmUobCwgcywgdCwgaSlcdFx0bG9ja19hY3F1aXJlX2V4Y2x1c2l2ZShsLCBzLCB0LCBOVUxMLCBpKVxuIDUzNzpcdCNkZWZpbmUgcndzZW1fYWNxdWlyZV9uZXN0KGwsIHMsIHQsIG4sIGkpXHRsb2NrX2FjcXVpcmVfZXhjbHVzaXZlKGwsIHMsIHQsIG4sIGkpXG4gNTM4Olx0I2RlZmluZSByd3NlbV9hY3F1aXJlX3JlYWQobCwgcywgdCwgaSlcdFx0bG9ja19hY3F1aXJlX3NoYXJlZChsLCBzLCB0LCBOVUxMLCBpKVxuIDUzOTpcdCNkZWZpbmUgcndzZW1fcmVsZWFzZShsLCBpKVx0XHRcdGxvY2tfcmVsZWFzZShsLCBpKVxuIDU0MDpcdFxuIDU0MTpcdCNkZWZpbmUgbG9ja19tYXBfYWNxdWlyZShsKVx0XHRcdGxvY2tfYWNxdWlyZV9leGNsdXNpdmUobCwgMCwgMCwgTlVMTCwgX1RISVNfSVBfKVxuIDU0MjpcdCNkZWZpbmUgbG9ja19tYXBfYWNxdWlyZV90cnkobClcdFx0XHRsb2NrX2FjcXVpcmVfZXhjbHVzaXZlKGwsIDAsIDEsIE5VTEwsIF9USElTX0lQXylcbiA1NDM6XHQjZGVmaW5lIGxvY2tfbWFwX2FjcXVpcmVfcmVhZChsKVx0XHRsb2NrX2FjcXVpcmVfc2hhcmVkX3JlY3Vyc2l2ZShsLCAwLCAwLCBOVUxMLCBfVEhJU19JUF8pXG4gNTQ0Olx0I2RlZmluZSBsb2NrX21hcF9hY3F1aXJlX3RyeXJlYWQobClcdFx0bG9ja19hY3F1aXJlX3NoYXJlZF9yZWN1cnNpdmUobCwgMCwgMSwgTlVMTCwgX1RISVNfSVBfKVxuIDU0NTpcdCNkZWZpbmUgbG9ja19tYXBfcmVsZWFzZShsKVx0XHRcdGxvY2tfcmVsZWFzZShsLCBfVEhJU19JUF8pXG4gNTQ2Olx0I2RlZmluZSBsb2NrX21hcF9zeW5jKGwpXHRcdFx0bG9ja19zeW5jKGwsIDAsIDAsIDEsIE5VTEwsIF9USElTX0lQXylcbiA1NDc6XHRcbiA1NDg6XHQjaWZkZWYgQ09ORklHX1BST1ZFX0xPQ0tJTkdcbiA1NDk6XHQjIGRlZmluZSBtaWdodF9sb2NrKGxvY2spXHRcdFx0XHRcdFx0XFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDc6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE3MzIKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqRGVjb25zdHJ1Y3RpbmcgYSBMb2NrIEFjcXVpc2l0aW9uIENhbGwqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSSBzZWUgYGxvY2tfYWNxdWlyZV9zaGFyZWRgIGlzIGRlZmluZWQgdXNpbmcgYSBtb3JlIGdlbmVyYWwgZnVuY3Rpb24gY2FsbDogYGxvY2tfYWNxdWlyZShsLCBzLCB0LCAxLCAxLCBuLCBpKWAuIE5vdGhpbmcgc3VycHJpc2luZyB0aGVyZSAtIG1ha2VzIHNlbnNlIHRvIGhhdmUgYSBjb3JlIGZ1bmN0aW9uLiBCdXQgaG9sZCBvbi4uLiBpZiBgQ09ORklHX0xPQ0tERVBgIGlzIGRpc2FibGVkLCB3aGF0ICpleGFjdGx5KiBkb2VzIGBsb2NrX2FjcXVpcmVgICpiZWNvbWUqPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHN5c3RlbSBiZWhhdmVzIHVuZGVyIGRpZmZlcmVudCBjb21waWxhdGlvbiBzY2VuYXJpb3MuIElzIGl0IGEgc2ltcGxlIGlubGluZSBmdW5jdGlvbiwgb3IgZG9lcyBpdCByZXNvbHZlIHRvIHNvbWV0aGluZyBtb3JlIHByaW1pdGl2ZT8gQXJlIGFueSBkZWJ1Z2dpbmcgYWlkcyBkaXNhYmxlZD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyB0byBoYXZlIGFueSBjb25maWRlbmNlIGluIGhvdyB0aGlzIGxvY2sgaXMgYmVoYXZpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA3OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0OyNkZWZpbmUgbG9ja19hY3F1aXJlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9sb2NrZGVwLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9sb2NrZGVwLmg9NDQyPWRvIHtcdFx0XHRcdFx0XHRcdFx0XFxcbi0tXG5pbmNsdWRlL2xpbnV4L2xvY2tkZXAuaC00NjQtI2RlZmluZSBsb2NrX2NvbnRlbmRlZChsb2NrZGVwX21hcCwgaXApIGRvIHt9IHdoaWxlICgwKVxuaW5jbHVkZS9saW51eC9sb2NrZGVwLmg6NDY1OiNkZWZpbmUgbG9ja19hY3F1aXJlZChsb2NrZGVwX21hcCwgaXApIGRvIHt9IHdoaWxlICgwKVxuaW5jbHVkZS9saW51eC9sb2NrZGVwLmgtNDY2LVxuLS1cbmluY2x1ZGUvbGludXgvbG9ja2RlcC5oPTQ5MT1leHRlcm4gYm9vbCByZWFkX2xvY2tfaXNfcmVjdXJzaXZlKHZvaWQpO1xuLS1cbmluY2x1ZGUvbGludXgvbG9ja2RlcC5oLTUwOC1cbmluY2x1ZGUvbGludXgvbG9ja2RlcC5oOjUwOTojZGVmaW5lIGxvY2tfYWNxdWlyZV9leGNsdXNpdmUobCwgcywgdCwgbiwgaSlcdFx0bG9ja19hY3F1aXJlKGwsIHMsIHQsIDAsIDEsIG4sIGkpXG5pbmNsdWRlL2xpbnV4L2xvY2tkZXAuaDo1MTA6I2RlZmluZSBsb2NrX2FjcXVpcmVfc2hhcmVkKGwsIHMsIHQsIG4sIGkpXHRcdGxvY2tfYWNxdWlyZShsLCBzLCB0LCAxLCAxLCBuLCBpKVxuaW5jbHVkZS9saW51eC9sb2NrZGVwLmg6NTExOiNkZWZpbmUgbG9ja19hY3F1aXJlX3NoYXJlZF9yZWN1cnNpdmUobCwgcywgdCwgbiwgaSlcdGxvY2tfYWNxdWlyZShsLCBzLCB0LCAyLCAxLCBuLCBpKVxuaW5jbHVkZS9saW51eC9sb2NrZGVwLmgtNTEyLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNzoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjMxMQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqVHJhY2luZyBgbG9ja19hY3F1aXJlYCYjMzk7cyBPcmlnaW4qKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBgbG9ja19hY3F1aXJlYCBmdW5jdGlvbiBiZXR0ZXIuIFdoZXJlIGV4YWN0bHkgaXMgaXQgZGVmaW5lZCB3aXRoaW4gdGhlIGNvZGViYXNlPyBJIG5lZWQgdG8gdHJhY2UgaXRzIG9yaWdpbiB0byB1bmRlcnN0YW5kIGl0cyBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIGFuZCBwb3RlbnRpYWwgaW1wbGljYXRpb25zIGZvciBjb25jdXJyZW5jeS4gSXMgaXQgYSBzeXN0ZW0gY2FsbCwgYSBrZXJuZWwgZnVuY3Rpb24sIGEgdXNlcnNwYWNlIGxpYnJhcnksIG9yIHBlcmhhcHMgYSBjdXN0b20gaW1wbGVtZW50YXRpb24gd2l0aGluIHRoaXMgc3BlY2lmaWMgcHJvamVjdD8gTXkgaW1tZWRpYXRlIGFwcHJvYWNoIHdvdWxkIGJlIHRvIHVzZSB3aGF0ZXZlciB0b29scyBhcmUgYXZhaWxhYmxlOiBncmVwLCBmaW5kLCB0aGUgc3ltYm9sIGJyb3dzZXIgaW4gbXkgSURFLCBvciBldmVuIGEgYmFzaWMgc291cmNlIGNvZGUgc2VhcmNoLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBkZWZpbml0aXZlIGRlY2xhcmF0aW9uIOKAkyB0aGUgaGVhZGVyIGZpbGUsIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgd2hlcmUgaXQmIzM5O3MgZGVmaW5lZCBhbmQgd2hhdCB0aGUgc3Vycm91bmRpbmcgY29udGV4dCBzYXlzLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpdHMgcHJvdG90eXBlIGFzIHdlbGwsIGZvciB3aGF0IGFyZ3VtZW50cyBkb2VzIGl0IGV4cGVjdCwgYW5kIHdoYXQgZG9lcyBpdCByZXR1cm4uIFRoZSBuZXh0IHN0ZXAgd2lsbCBiZSB0byBjaGVjayBmb3IgYW55IHJlbGV2YW50IGhlYWRlciBmaWxlcyBvciBpbmNsdWRlIHBhdGhzIHRvIGxvY2F0ZSB0aGUgZGVmaW5pdGlvbi4gVWx0aW1hdGVseSwgSSBuZWVkIHRoZSBjb25jcmV0ZSBjb2RlIHRvIGFuYWx5emUgaXRzIGJlaGF2aW9yLiBJIGFudGljaXBhdGUgbmVlZGluZyB0byB1bmRlcnN0YW5kIGFueSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcyB1c2VkIGludGVybmFsbHkgYW5kIGhvdyBpdCBpbnRlZ3JhdGVzIHdpdGggdGhlIG92ZXJhbGwgbG9ja2luZyBzY2hlbWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA3OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RlZmluZSBsb2NrX2FjcXVpcmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2xvY2tkZXAuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2xvY2tkZXAuaD0zMzI9c3RhdGljIGlubGluZSB2b2lkIGxvY2tkZXBfc2V0X3NlbGZ0ZXN0X3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKVxuLS1cbmluY2x1ZGUvbGludXgvbG9ja2RlcC5oLTMzNS1cbmluY2x1ZGUvbGludXgvbG9ja2RlcC5oOjMzNjojIGRlZmluZSBsb2NrX2FjcXVpcmUobCwgcywgdCwgciwgYywgbiwgaSlcdGRvIHsgfSB3aGlsZSAoMClcbmluY2x1ZGUvbGludXgvbG9ja2RlcC5oLTMzNy0jIGRlZmluZSBsb2NrX3JlbGVhc2UobCwgaSlcdFx0XHRkbyB7IH0gd2hpbGUgKDApXG4tLVxuaW5jbHVkZS9saW51eC9sb2NrZGVwLmg9NDQyPWRvIHtcdFx0XHRcdFx0XHRcdFx0XFxcbi0tXG5pbmNsdWRlL2xpbnV4L2xvY2tkZXAuaC00NjQtI2RlZmluZSBsb2NrX2NvbnRlbmRlZChsb2NrZGVwX21hcCwgaXApIGRvIHt9IHdoaWxlICgwKVxuaW5jbHVkZS9saW51eC9sb2NrZGVwLmg6NDY1OiNkZWZpbmUgbG9ja19hY3F1aXJlZChsb2NrZGVwX21hcCwgaXApIGRvIHt9IHdoaWxlICgwKVxuaW5jbHVkZS9saW51eC9sb2NrZGVwLmgtNDY2LVxuLS1cbmluY2x1ZGUvbGludXgvbG9ja2RlcC5oPTQ5MT1leHRlcm4gYm9vbCByZWFkX2xvY2tfaXNfcmVjdXJzaXZlKHZvaWQpO1xuLS1cbmluY2x1ZGUvbGludXgvbG9ja2RlcC5oLTUwOC1cbmluY2x1ZGUvbGludXgvbG9ja2RlcC5oOjUwOTojZGVmaW5lIGxvY2tfYWNxdWlyZV9leGNsdXNpdmUobCwgcywgdCwgbiwgaSlcdFx0bG9ja19hY3F1aXJlKGwsIHMsIHQsIDAsIDEsIG4sIGkpXG5pbmNsdWRlL2xpbnV4L2xvY2tkZXAuaDo1MTA6I2RlZmluZSBsb2NrX2FjcXVpcmVfc2hhcmVkKGwsIHMsIHQsIG4sIGkpXHRcdGxvY2tfYWNxdWlyZShsLCBzLCB0LCAxLCAxLCBuLCBpKVxuaW5jbHVkZS9saW51eC9sb2NrZGVwLmg6NTExOiNkZWZpbmUgbG9ja19hY3F1aXJlX3NoYXJlZF9yZWN1cnNpdmUobCwgcywgdCwgbiwgaSlcdGxvY2tfYWNxdWlyZShsLCBzLCB0LCAyLCAxLCBuLCBpKVxuaW5jbHVkZS9saW51eC9sb2NrZGVwLmgtNTEyLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNzoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzA0MAoJCQkJCQkJb3V0cHV0OiAxMTMKCQkJCQkJCXRob3VnaHRzOiA5OTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgdGhlIFByb3Bvc2VkIFBhdGNoKioKCk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCwgbXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0aGF0IHRoZSBjaGFuZ2VzIHRvIGByd3NlbV9hY3F1aXJlX3JlYWRgIHNlZW1lZCBwdXJlbHkgcmVsYXRlZCB0byBsb2NrZGVwIGFubm90YXRpb25zLCBnaXZlbiB0aGUgYENPTkZJR19MT0NLREVQYCBjb250ZXh0LiBBbmQgdGhlIGZhY3QgdGhhdCB3aGVuIGxvY2tkZXAgaXMgZGlzYWJsZWQsIGBsb2NrX2FjcXVpcmVgIGlzIGEgbm8tb3AgbWFjcm8sIHRoYXQgcmVpbmZvcmNlZCB0aGlzLgoKVGhlIGNvZGUgc25pcHBldHMgaGlnaGxpZ2h0ZWQgYSByZWZhY3RvcmluZyB0byByZXBsYWNlIGEgZGlyZWN0IGZsYWcgY2hlY2sgd2l0aCBhIGxvY2FsIGBub3dhaXRgIHZhcmlhYmxlLiBUaGUga2V5IGNoYW5nZSB0aGF0IGNhdWdodCBteSBleWUgd2FzIHBhc3NpbmcgdGhpcyBgbm93YWl0YCB2YXJpYWJsZSB0byBgcndzZW1fYWNxdWlyZV9yZWFkYC4gVGhpcyBsb29rZWQgdG8gYmUgYWJvdXQgY29udmV5aW5nIHdoZXRoZXIgYSAmIzM0O3RyeWxvY2smIzM0OyB3YXMgYXR0ZW1wdGVkLCBhIGNyaXRpY2FsIHBpZWNlIG9mIGluZm8gZm9yIGxvY2tkZXAmIzM5O3MgdHJhY2tpbmcuCgpUaGVuLCBJIHdlbnQgZGVlcGVyLiBJIHZlcmlmaWVkIHRoYXQgYHJ3c2VtX2FjcXVpcmVfcmVhZGAgaW5kZWVkIG1hcHMgdG8gYSBzZXJpZXMgb2YgYGxvY2tfYWNxdWlyZWAgY2FsbHMuIEFuZCB0aGUgcGFyYW1ldGVyIGJlaW5nIG1vZGlmaWVkIGlzIHRoZSAmIzM0O3RyeWxvY2smIzM0OyBwYXJhbWV0ZXIgb2YgdGhhdCBgbG9ja19hY3F1aXJlYCBjaGFpbi4gSWYgYG5vd2FpdGAgaXMgdHJ1ZSwgYSB0cnlsb2NrIGlzIGluZGljYXRlZCB0byBsb2NrZGVwOyBvdGhlcndpc2UgaXQmIzM5O3MgYSByZWd1bGFyIGxvY2suCgpUaGUgaW1wb3J0YW50IHBvaW50IGlzIHRoaXMgcGFyYW1ldGVyIGNoYW5nZSBvbmx5IGltcGFjdHMgaG93IGxvY2tkZXAgbW9uaXRvcnMgdGhlIGxvY2tpbmcgYmVoYXZpb3IuIFRoZSAqYWN0dWFsKiBleGVjdXRpb24gcGF0aCwgdGhlICphY3R1YWwqIGxvY2tpbmcgYmVoYXZpb3IsIGlzbiYjMzk7dCBtb2RpZmllZC4gYGJsa190cnlfZW50ZXJfcXVldWVgIGlzbiYjMzk7dCB0b3VjaGVkLCBub3IgYXJlIGFueSBvZiB0aGUgdW5kZXJseWluZyBsb2NraW5nIHByaW1pdGl2ZXMgZGlyZWN0bHkgY2hhbmdlZCBieSBhbnkgb2YgdGhpcy4KClRoZXJlZm9yZSwgdGhpcyBwYXRjaCBib2lscyBkb3duIHRvIHRoZXNlIG1vZGlmaWNhdGlvbnM6CjEuICBFeHRyYWN0aW5nIHRoZSBgUkVRX05PV0FJVGAgZmxhZyBpbnRvIGEgYG5vd2FpdGAgYm9vbGVhbiBmb3IgcmVhZGFiaWxpdHkuCjIuICBVc2luZyB0aGUgYG5vd2FpdGAgYm9vbGVhbiB2YXJpYWJsZSBpbiBjb25kaXRpb25hbCBzdGF0ZW1lbnRzLgozLiAgUGFzc2luZyBgbm93YWl0YCB0byBgcndzZW1fYWNxdWlyZV9yZWFkYCB3aGljaCwgaW4gdHVybiwgaW1wYWN0cyBsb2NrZGVwIGFubm90YXRpb24uCgpHaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBjaGFuZ2VzLCB0aGlzIHBhdGNoIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IGZ1bmN0aW9uYWwgYmVoYXZpb3IgaW50byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIHByaW9yaXRpemVkIGZvciBmdXp6aW5nLiBUaGUgY2hhbmdlcyBhcmUgYWJvdXQgdGhlIGxvY2tkZXAgdHJhY2tpbmcsIG5vdCBhYm91dCBhbnkgZnVuY3Rpb25hbCBtb2RpZmljYXRpb24uIEkmIzM5O2xsIGZsYWcgdGhpcyBhcyBXb3J0aEZ1enppbmc9ZmFsc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA3OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSByZWZhY3RvcnMgdGhlIGV4dHJhY3Rpb24gb2YgdGhlICYjMzk7bm93YWl0JiMzOTsgZmxhZyBpbnRvIGEgbG9jYWwgdmFyaWFibGUgYW5kIHBhc3NlcyBpdCBhcyB0aGUgJiMzOTt0cnlsb2NrJiMzOTsgcGFyYW1ldGVyIHRvIHJ3c2VtX2FjcXVpcmVfcmVhZCgpLiBTaW5jZSByd3NlbV9hY3F1aXJlX3JlYWQoKSBpcyBwdXJlbHkgYSBsb2NrZGVwIGFubm90YXRpb24gbWFjcm8gdGhhdCBleHBhbmRzIHRvIG5vdGhpbmcgd2hlbiBDT05GSUdfTE9DS0RFUCBpcyBkaXNhYmxlZCwgdGhpcyBwYXRjaCBkb2VzIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgdGhlIGV4ZWN1dGlvbiBmbG93IG9mIHRoZSBrZXJuZWwgYW5kIGlzIG5vdCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSByZWZhY3RvcnMgdGhlIGV4dHJhY3Rpb24gb2YgdGhlICYjMzk7bm93YWl0JiMzOTsgZmxhZyBpbnRvIGEgbG9jYWwgdmFyaWFibGUgYW5kIHBhc3NlcyBpdCBhcyB0aGUgJiMzOTt0cnlsb2NrJiMzOTsgcGFyYW1ldGVyIHRvIHJ3c2VtX2FjcXVpcmVfcmVhZCgpLiBTaW5jZSByd3NlbV9hY3F1aXJlX3JlYWQoKSBpcyBwdXJlbHkgYSBsb2NrZGVwIGFubm90YXRpb24gbWFjcm8gdGhhdCBleHBhbmRzIHRvIG5vdGhpbmcgd2hlbiBDT05GSUdfTE9DS0RFUCBpcyBkaXNhYmxlZCwgdGhpcyBwYXRjaCBkb2VzIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgdGhlIGV4ZWN1dGlvbiBmbG93IG9mIHRoZSBrZXJuZWwgYW5kIGlzIG5vdCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA3OjExOjIwLjMyNjU5MjY1OFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkxNDkzMjM5NTc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IHJlZmFjdG9ycyB0aGUgZXh0cmFjdGlvbiBvZiB0aGUgJ25vd2FpdCcgZmxhZyBpbnRvIGEgbG9jYWwgdmFyaWFibGUgYW5kIHBhc3NlcyBpdCBhcyB0aGUgJ3RyeWxvY2snIHBhcmFtZXRlciB0byByd3NlbV9hY3F1aXJlX3JlYWQoKS4gU2luY2UgcndzZW1fYWNxdWlyZV9yZWFkKCkgaXMgcHVyZWx5IGEgbG9ja2RlcCBhbm5vdGF0aW9uIG1hY3JvIHRoYXQgZXhwYW5kcyB0byBub3RoaW5nIHdoZW4gQ09ORklHX0xPQ0tERVAgaXMgZGlzYWJsZWQsIHRoaXMgcGF0Y2ggZG9lcyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIHRoZSBleGVjdXRpb24gZmxvdyBvZiB0aGUga2VybmVsIGFuZCBpcyBub3Qgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA3OjExOjIwLjMyNjU5OTc0OFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk0Mjc4MTIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgODVjMzIyMGEyNTlmOGY0MTNlZWI4ZTlmZDhhYzZjYjA5YTY0MTQ3ZFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IEF1ZyAxIDA3OjExOjE5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1jb3JlLmMgYi9ibG9jay9ibGstY29yZS5jXFxuaW5kZXggMzY1NjQxMjY2YzllOC4uZTVkYjU0NTk2ZTNkZCAxMDA2NDRcXG4tLS0gYS9ibG9jay9ibGstY29yZS5jXFxuKysrIGIvYmxvY2svYmxrLWNvcmUuY1xcbkBAIC0zNDcsOSArMzQ3LDEwIEBAIGJvb2wgYmxrX3F1ZXVlX3N0YXJ0X2RyYWluKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKVxcbiBpbnQgYmxrX3F1ZXVlX2VudGVyKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBibGtfbXFfcmVxX2ZsYWdzX3QgZmxhZ3MpXFxuIHtcXG4gXFx0Y29uc3QgYm9vbCBwbSA9IGZsYWdzIFxcdTAwMjYgQkxLX01RX1JFUV9QTTtcXG4rXFx0Y29uc3QgYm9vbCBub3dhaXQgPSBmbGFncyBcXHUwMDI2IEJMS19NUV9SRVFfTk9XQUlUO1xcbiBcXG4gXFx0d2hpbGUgKCFibGtfdHJ5X2VudGVyX3F1ZXVlKHEsIHBtKSkge1xcbi1cXHRcXHRpZiAoZmxhZ3MgXFx1MDAyNiBCTEtfTVFfUkVRX05PV0FJVClcXG4rXFx0XFx0aWYgKG5vd2FpdClcXG4gXFx0XFx0XFx0cmV0dXJuIC1FQUdBSU47XFxuIFxcbiBcXHRcXHQvKlxcbkBAIC0zNjgsMTcgKzM2OSwxOSBAQCBpbnQgYmxrX3F1ZXVlX2VudGVyKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBibGtfbXFfcmVxX2ZsYWdzX3QgZmxhZ3MpXFxuIFxcdFxcdFxcdHJldHVybiAtRU5PREVWO1xcbiBcXHR9XFxuIFxcbi1cXHRyd3NlbV9hY3F1aXJlX3JlYWQoXFx1MDAyNnEtXFx1MDAzZXFfbG9ja2RlcF9tYXAsIDAsIDAsIF9SRVRfSVBfKTtcXG4rXFx0cndzZW1fYWNxdWlyZV9yZWFkKFxcdTAwMjZxLVxcdTAwM2VxX2xvY2tkZXBfbWFwLCAwLCBub3dhaXQsIF9SRVRfSVBfKTtcXG4gXFx0cndzZW1fcmVsZWFzZShcXHUwMDI2cS1cXHUwMDNlcV9sb2NrZGVwX21hcCwgX1JFVF9JUF8pO1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4gaW50IF9fYmlvX3F1ZXVlX2VudGVyKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgYmlvICpiaW8pXFxuIHtcXG4rXFx0Y29uc3QgYm9vbCBub3dhaXQgPSBiaW8tXFx1MDAzZWJpX29wZiBcXHUwMDI2IFJFUV9OT1dBSVQ7XFxuK1xcbiBcXHR3aGlsZSAoIWJsa190cnlfZW50ZXJfcXVldWUocSwgZmFsc2UpKSB7XFxuIFxcdFxcdHN0cnVjdCBnZW5kaXNrICpkaXNrID0gYmlvLVxcdTAwM2ViaV9iZGV2LVxcdTAwM2ViZF9kaXNrO1xcbiBcXG4tXFx0XFx0aWYgKGJpby1cXHUwMDNlYmlfb3BmIFxcdTAwMjYgUkVRX05PV0FJVCkge1xcbitcXHRcXHRpZiAobm93YWl0KSB7XFxuIFxcdFxcdFxcdGlmICh0ZXN0X2JpdChHRF9ERUFELCBcXHUwMDI2ZGlzay1cXHUwMDNlc3RhdGUpKVxcbiBcXHRcXHRcXHRcXHRnb3RvIGRlYWQ7XFxuIFxcdFxcdFxcdGJpb193b3VsZGJsb2NrX2Vycm9yKGJpbyk7XFxuQEAgLTQwMSw3ICs0MDQsNyBAQCBpbnQgX19iaW9fcXVldWVfZW50ZXIoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCBiaW8gKmJpbylcXG4gXFx0XFx0XFx0Z290byBkZWFkO1xcbiBcXHR9XFxuIFxcbi1cXHRyd3NlbV9hY3F1aXJlX3JlYWQoXFx1MDAyNnEtXFx1MDAzZWlvX2xvY2tkZXBfbWFwLCAwLCAwLCBfUkVUX0lQXyk7XFxuK1xcdHJ3c2VtX2FjcXVpcmVfcmVhZChcXHUwMDI2cS1cXHUwMDNlaW9fbG9ja2RlcF9tYXAsIDAsIG5vd2FpdCwgX1JFVF9JUF8pO1xcbiBcXHRyd3NlbV9yZWxlYXNlKFxcdTAwMjZxLVxcdTAwM2Vpb19sb2NrZGVwX21hcCwgX1JFVF9JUF8pO1xcbiBcXHRyZXR1cm4gMDtcXG4gZGVhZDpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDc6MTE6MjAuODIxODA2ODdaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo5MDk5ODAwNjIyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSByZWZhY3RvcnMgdGhlIGV4dHJhY3Rpb24gb2YgdGhlICdub3dhaXQnIGZsYWcgaW50byBhIGxvY2FsIHZhcmlhYmxlIGFuZCBwYXNzZXMgaXQgYXMgdGhlICd0cnlsb2NrJyBwYXJhbWV0ZXIgdG8gcndzZW1fYWNxdWlyZV9yZWFkKCkuIFNpbmNlIHJ3c2VtX2FjcXVpcmVfcmVhZCgpIGlzIHB1cmVseSBhIGxvY2tkZXAgYW5ub3RhdGlvbiBtYWNybyB0aGF0IGV4cGFuZHMgdG8gbm90aGluZyB3aGVuIENPTkZJR19MT0NLREVQIGlzIGRpc2FibGVkLCB0aGlzIHBhdGNoIGRvZXMgbm90IGZ1bmN0aW9uYWxseSBhbHRlciB0aGUgZXhlY3V0aW9uIGZsb3cgb2YgdGhlIGtlcm5lbCBhbmQgaXMgbm90IHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA4NWMzMjIwYTI1OWY4ZjQxM2VlYjhlOWZkOGFjNmNiMDlhNjQxNDdkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMSAwNzoxMToxOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1jb3JlLmMgYi9ibG9jay9ibGstY29yZS5jXG5pbmRleCAzNjU2NDEyNjZjOWU4Li5lNWRiNTQ1OTZlM2RkIDEwMDY0NFxuLS0tIGEvYmxvY2svYmxrLWNvcmUuY1xuKysrIGIvYmxvY2svYmxrLWNvcmUuY1xuQEAgLTM0Nyw5ICszNDcsMTAgQEAgYm9vbCBibGtfcXVldWVfc3RhcnRfZHJhaW4oc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpXG4gaW50IGJsa19xdWV1ZV9lbnRlcihzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgYmxrX21xX3JlcV9mbGFnc190IGZsYWdzKVxuIHtcbiBcdGNvbnN0IGJvb2wgcG0gPSBmbGFncyBcdTAwMjYgQkxLX01RX1JFUV9QTTtcbitcdGNvbnN0IGJvb2wgbm93YWl0ID0gZmxhZ3MgXHUwMDI2IEJMS19NUV9SRVFfTk9XQUlUO1xuIFxuIFx0d2hpbGUgKCFibGtfdHJ5X2VudGVyX3F1ZXVlKHEsIHBtKSkge1xuLVx0XHRpZiAoZmxhZ3MgXHUwMDI2IEJMS19NUV9SRVFfTk9XQUlUKVxuK1x0XHRpZiAobm93YWl0KVxuIFx0XHRcdHJldHVybiAtRUFHQUlOO1xuIFxuIFx0XHQvKlxuQEAgLTM2OCwxNyArMzY5LDE5IEBAIGludCBibGtfcXVldWVfZW50ZXIoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIGJsa19tcV9yZXFfZmxhZ3NfdCBmbGFncylcbiBcdFx0XHRyZXR1cm4gLUVOT0RFVjtcbiBcdH1cbiBcbi1cdHJ3c2VtX2FjcXVpcmVfcmVhZChcdTAwMjZxLVx1MDAzZXFfbG9ja2RlcF9tYXAsIDAsIDAsIF9SRVRfSVBfKTtcbitcdHJ3c2VtX2FjcXVpcmVfcmVhZChcdTAwMjZxLVx1MDAzZXFfbG9ja2RlcF9tYXAsIDAsIG5vd2FpdCwgX1JFVF9JUF8pO1xuIFx0cndzZW1fcmVsZWFzZShcdTAwMjZxLVx1MDAzZXFfbG9ja2RlcF9tYXAsIF9SRVRfSVBfKTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbiBpbnQgX19iaW9fcXVldWVfZW50ZXIoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCBiaW8gKmJpbylcbiB7XG4rXHRjb25zdCBib29sIG5vd2FpdCA9IGJpby1cdTAwM2ViaV9vcGYgXHUwMDI2IFJFUV9OT1dBSVQ7XG4rXG4gXHR3aGlsZSAoIWJsa190cnlfZW50ZXJfcXVldWUocSwgZmFsc2UpKSB7XG4gXHRcdHN0cnVjdCBnZW5kaXNrICpkaXNrID0gYmlvLVx1MDAzZWJpX2JkZXYtXHUwMDNlYmRfZGlzaztcbiBcbi1cdFx0aWYgKGJpby1cdTAwM2ViaV9vcGYgXHUwMDI2IFJFUV9OT1dBSVQpIHtcbitcdFx0aWYgKG5vd2FpdCkge1xuIFx0XHRcdGlmICh0ZXN0X2JpdChHRF9ERUFELCBcdTAwMjZkaXNrLVx1MDAzZXN0YXRlKSlcbiBcdFx0XHRcdGdvdG8gZGVhZDtcbiBcdFx0XHRiaW9fd291bGRibG9ja19lcnJvcihiaW8pO1xuQEAgLTQwMSw3ICs0MDQsNyBAQCBpbnQgX19iaW9fcXVldWVfZW50ZXIoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCBiaW8gKmJpbylcbiBcdFx0XHRnb3RvIGRlYWQ7XG4gXHR9XG4gXG4tXHRyd3NlbV9hY3F1aXJlX3JlYWQoXHUwMDI2cS1cdTAwM2Vpb19sb2NrZGVwX21hcCwgMCwgMCwgX1JFVF9JUF8pO1xuK1x0cndzZW1fYWNxdWlyZV9yZWFkKFx1MDAyNnEtXHUwMDNlaW9fbG9ja2RlcF9tYXAsIDAsIG5vd2FpdCwgX1JFVF9JUF8pO1xuIFx0cndzZW1fcmVsZWFzZShcdTAwMjZxLVx1MDAzZWlvX2xvY2tkZXBfbWFwLCBfUkVUX0lQXyk7XG4gXHRyZXR1cm4gMDtcbiBkZWFkOlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDc6MTE6MjAuODIxODA5MDFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODU4NTk0NTY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFBhdGNoOiBMb2NrZGVwIEltcGxpY2F0aW9ucyBpbiBCbG9jayBMYXllcioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBibG9jay9ibGstY29yZS5jYC4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSBpbiBgYmxrX3F1ZXVlX2VudGVyYCBhbmQgYF9fYmlvX3F1ZXVlX2VudGVyYC4gSXQncyB0d2Vha2luZyBob3cgd2UncmUgY2FsbGluZyBgcndzZW1fYWNxdWlyZV9yZWFkYC4gU3BlY2lmaWNhbGx5LCB0aGUgYG5vd2FpdGAgZmxhZyBpcyBiZWluZyBpbnRyb2R1Y2VkIGFzIHRoZSBgdHJ5bG9ja2AgcGFyYW1ldGVyLiBUaGlzIGltbWVkaWF0ZWx5IGZsYWdzIHNvbWV0aGluZyDigJMgdGhpcyBoYXMgdG8gYmUgcmVsYXRlZCB0byBsb2NrZGVwIHRyYWNraW5nIGZvciByZXF1ZXN0IHF1ZXVlcy5cblxuV2FpdCwgYHJ3c2VtX2FjcXVpcmVfcmVhZGAuLi4gdGhhdCdzIGEgbG9ja2RlcCBhbm5vdGF0aW9uLCBpc24ndCBpdD8gSSBuZWVkIHRvIGNvbmZpcm0uIEkgc2hvdWxkIGNoZWNrIGl0cyBkZWZpbml0aW9uLiBJdCBzaG91bGQgYmUgaW4gYGluY2x1ZGUvbGludXgvbG9ja2RlcC5oYCBvciBzb21ld2hlcmUgc2ltaWxhci4gSWYgaXQgKmlzKiBqdXN0IGEgbG9ja2RlcCB3cmFwcGVyLCB0aGVuIHRoaXMgbWlnaHQgbm90IGJlIGEgZGlyZWN0IGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRlcm1zIG9mIHRoZSAqZXhlY3V0aW9uKiBmbG93LiBJdCdzIGFuIGltcG9ydGFudCBjaGFuZ2UsIGJ1dCBpdCdzICphYm91dCogbG9ja2RlcC5cblxuV2FpdCwgdGhvdWdo4oCmIGRvZXMgaXQgYWZmZWN0IHRoZSBleGVjdXRpb24gZmxvdyAqYXQgYWxsKj8gSG1tLiBgcndzZW1fYWNxdWlyZV9yZWFkYC4uLiBpdCdzIGEgbWFjcm8uIEkgbmVlZCB0byBrbm93IHdoYXQgaXQgZXhwYW5kcyB0by4gSXQgZXhwYW5kcyB0byBgbG9ja19hY3F1aXJlYCB3aGVuIGBDT05GSUdfTE9DS0RFUGAgaXMgZW5hYmxlZC4gSWYgYENPTkZJR19MT0NLREVQYCBpcyBkaXNhYmxlZCwgaXQgcHJvYmFibHkgZXhwYW5kcyB0b+KApiBub3RoaW5nPyBUaGlzIGlzIGltcG9ydGFudC4gSSBiZXR0ZXIgZG91YmxlLWNoZWNrIGluIGBpbmNsdWRlL2xpbnV4L2xvY2tkZXAuaGAgdG8gYmUgc3VyZS4gVGhpcyBjaGFuZ2UgY291bGQgaGF2ZSBtb3JlIGltcGxpY2F0aW9ucyB0aGFuIEkgaW5pdGlhbGx5IHRob3VnaHQgZGVwZW5kaW5nIG9uIGhvdyBsb2NrZGVwIGlzIGNvbmZpZ3VyZWQgaW4gYSBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1MjgsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNzoxMToyNS42ODA0MDcyNzRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ0OTAwMTMzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZWZpbmUgcndzZW1fYWNxdWlyZV9yZWFkXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbG9ja2RlcC5oPTUxOT1kbyB7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbi0tXFxuaW5jbHVkZS9saW51eC9sb2NrZGVwLmgtNTM3LSNkZWZpbmUgcndzZW1fYWNxdWlyZV9uZXN0KGwsIHMsIHQsIG4sIGkpXFx0bG9ja19hY3F1aXJlX2V4Y2x1c2l2ZShsLCBzLCB0LCBuLCBpKVxcbmluY2x1ZGUvbGludXgvbG9ja2RlcC5oOjUzODojZGVmaW5lIHJ3c2VtX2FjcXVpcmVfcmVhZChsLCBzLCB0LCBpKVxcdFxcdGxvY2tfYWNxdWlyZV9zaGFyZWQobCwgcywgdCwgTlVMTCwgaSlcXG5pbmNsdWRlL2xpbnV4L2xvY2tkZXAuaC01MzktI2RlZmluZSByd3NlbV9yZWxlYXNlKGwsIGkpXFx0XFx0XFx0bG9ja19yZWxlYXNlKGwsIGkpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA3OjExOjMwLjEyOTQxNTU5NVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIwMDYzNTE0ODc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqSW52ZXN0aWdhdGluZyBhIFBvdGVudGlhbCBMb2NrZGVwIE9wdGltaXphdGlvbioqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMgd2hldGhlciB0aGUgYHJ3c2VtX2FjcXVpcmVfcmVhZGAgZnVuY3Rpb24gaXMgc2ltcGx5IGEgbm8tb3AsIGFuIGVtcHR5IGRlZmluaXRpb24sIGluIHRoZSBrZXJuZWwncyBjb2RlIHdoZW4gdGhlIGBDT05GSUdfTE9DS0RFUGAgb3B0aW9uIGlzIHR1cm5lZCBvZmYuIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSBpZiB3ZSdyZSBkZWFsaW5nIHdpdGggYSBjb25kaXRpb25hbGx5IGNvbXBpbGVkIHNlY3Rpb24gb2YgY29kZSwgb3IgaWYgYENPTkZJR19MT0NLREVQYCBoYXMgbm8gaW1wYWN0IG9uIHRoaXMgcGFydGljdWxhciBmdW5jdGlvbi4gVGhpcyB3aWxsIGhlbHAgbWUgdW5kZXJzdGFuZCBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zIGFuZCB3aGV0aGVyIHdlIGNhbiBzdHJlYW1saW5lIHRoZSBjb2RlIGluIGEgbG9ja2RlcC1mcmVlIGVudmlyb25tZW50LiBJIG5lZWQgdG8gZ2V0IHRoaXMgYmFzaWMgcXVlc3Rpb24gYW5zd2VyZWQgYmVmb3JlIEkgY2FuIGZvcm0gYW4gb3BpbmlvbiBhYm91dCB0aGlzIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyODAsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNzoxMTo1MC4xOTI5MzI5MDFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcwMDU4MTc1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIjZGVmaW5lIHJ3c2VtX2FjcXVpcmVfcmVhZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2xvY2tkZXAuaD01MTk9ZG8ge1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4tLVxcbmluY2x1ZGUvbGludXgvbG9ja2RlcC5oLTUzNy0jZGVmaW5lIHJ3c2VtX2FjcXVpcmVfbmVzdChsLCBzLCB0LCBuLCBpKVxcdGxvY2tfYWNxdWlyZV9leGNsdXNpdmUobCwgcywgdCwgbiwgaSlcXG5pbmNsdWRlL2xpbnV4L2xvY2tkZXAuaDo1Mzg6I2RlZmluZSByd3NlbV9hY3F1aXJlX3JlYWQobCwgcywgdCwgaSlcXHRcXHRsb2NrX2FjcXVpcmVfc2hhcmVkKGwsIHMsIHQsIE5VTEwsIGkpXFxuaW5jbHVkZS9saW51eC9sb2NrZGVwLmgtNTM5LSNkZWZpbmUgcndzZW1fcmVsZWFzZShsLCBpKVxcdFxcdFxcdGxvY2tfcmVsZWFzZShsLCBpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNzoxMTo1NC44OTM1MjQ3NDdaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MjExMTE2MzExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIG15IGV4cGVydCB1bmRlcnN0YW5kaW5nOlxuXG4qKkRlZXAgRGl2ZSBpbnRvIExvY2tkZXAqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcsIFwiV2hlcmUncyB0aGUgYmVzdCBwbGFjZSB0byBzdGFydCB1bnRhbmdsaW5nIHRoaXMgaXNzdWU/XCIgTXkgbWluZCBpbW1lZGlhdGVseSBqdW1wcyB0byBgaW5jbHVkZS9saW51eC9sb2NrZGVwLmhgIOKAkyB0aGF0J3MgdGhlIGhlYXJ0IG9mIHRoZSBsb2NrIGRlcGVuZGVuY3kgZGV0ZWN0aW9uIG1lY2hhbmlzbSBpbiB0aGUga2VybmVsLiBTcGVjaWZpY2FsbHksIEknbSB6ZXJvaW5nIGluIGFyb3VuZCBsaW5lIDUzOC4gSSdtIG5vdCBnb2luZyB0byBwcmV0ZW5kIHRvIGtub3cgKmV4YWN0bHkqIHdoYXQncyB0aGVyZSBvZmYgdGhlIHRvcCBvZiBteSBoZWFkLCBidXQgSSBrbm93IHRoZSBnZW5lcmFsIHN0cnVjdHVyZSBvZiB0aGUgY29kZSBhcm91bmQgdGhhdCBhcmVhLiBMaW5lIDUzOCBpcyBsaWtlbHkgYSBjcml0aWNhbCBzZWN0aW9uIG9mIGNvZGUgcmVsYXRlZCB0byByZXBvcnRpbmcgbG9ja2RlcCBlcnJvcnMsIGhhbmRsaW5nIGxvY2sgY2xhc3Nlcywgb3IgcGVyaGFwcyB0aGUgcmVjdXJzaXZlIGxvY2tpbmcgZGV0ZWN0aW9uLiBJIGhhdmUgYSBmZWVsaW5nIHRoZSBwcm9ibGVtIEknbSB0cnlpbmcgdG8gc29sdmUgd2lsbCBiZSByb290ZWQgc29tZXdoZXJlIGluIHRoYXQgdmljaW5pdHksIHNvIHRoYXQncyB0aGUgbG9naWNhbCBqdW1waW5nLW9mZiBwb2ludCBmb3IgYSBkZWVwZXIgaW52ZXN0aWdhdGlvbi4gTGV0J3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM2NDMsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNzoxMjowMy4xMDQ2NDM3MzhaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzU0NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9sb2NrZGVwLmhcIixcbiAgXCJGaXJzdExpbmVcIjogNTIwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTIwOlxcdFxcdGlmIChyZWFkX2xvY2tfaXNfcmVjdXJzaXZlKCkpXFx0XFx0XFx0XFx0XFx0XFxcXFxcbiA1MjE6XFx0XFx0XFx0bG9ja19hY3F1aXJlX3NoYXJlZF9yZWN1cnNpdmUobCwgcywgdCwgTlVMTCwgaSk7XFx0XFxcXFxcbiA1MjI6XFx0XFx0ZWxzZVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gNTIzOlxcdFxcdFxcdGxvY2tfYWNxdWlyZV9zaGFyZWQobCwgcywgdCwgTlVMTCwgaSk7XFx0XFx0XFx0XFxcXFxcbiA1MjQ6XFx0fSB3aGlsZSAoMClcXG4gNTI1OlxcdFxcbiA1MjY6XFx0I2RlZmluZSByd2xvY2tfcmVsZWFzZShsLCBpKVxcdFxcdFxcdGxvY2tfcmVsZWFzZShsLCBpKVxcbiA1Mjc6XFx0XFxuIDUyODpcXHQjZGVmaW5lIHNlcWNvdW50X2FjcXVpcmUobCwgcywgdCwgaSlcXHRcXHRsb2NrX2FjcXVpcmVfZXhjbHVzaXZlKGwsIHMsIHQsIE5VTEwsIGkpXFxuIDUyOTpcXHQjZGVmaW5lIHNlcWNvdW50X2FjcXVpcmVfcmVhZChsLCBzLCB0LCBpKVxcdGxvY2tfYWNxdWlyZV9zaGFyZWRfcmVjdXJzaXZlKGwsIHMsIHQsIE5VTEwsIGkpXFxuIDUzMDpcXHQjZGVmaW5lIHNlcWNvdW50X3JlbGVhc2UobCwgaSlcXHRcXHRcXHRsb2NrX3JlbGVhc2UobCwgaSlcXG4gNTMxOlxcdFxcbiA1MzI6XFx0I2RlZmluZSBtdXRleF9hY3F1aXJlKGwsIHMsIHQsIGkpXFx0XFx0bG9ja19hY3F1aXJlX2V4Y2x1c2l2ZShsLCBzLCB0LCBOVUxMLCBpKVxcbiA1MzM6XFx0I2RlZmluZSBtdXRleF9hY3F1aXJlX25lc3QobCwgcywgdCwgbiwgaSlcXHRsb2NrX2FjcXVpcmVfZXhjbHVzaXZlKGwsIHMsIHQsIG4sIGkpXFxuIDUzNDpcXHQjZGVmaW5lIG11dGV4X3JlbGVhc2UobCwgaSlcXHRcXHRcXHRsb2NrX3JlbGVhc2UobCwgaSlcXG4gNTM1OlxcdFxcbiA1MzY6XFx0I2RlZmluZSByd3NlbV9hY3F1aXJlKGwsIHMsIHQsIGkpXFx0XFx0bG9ja19hY3F1aXJlX2V4Y2x1c2l2ZShsLCBzLCB0LCBOVUxMLCBpKVxcbiA1Mzc6XFx0I2RlZmluZSByd3NlbV9hY3F1aXJlX25lc3QobCwgcywgdCwgbiwgaSlcXHRsb2NrX2FjcXVpcmVfZXhjbHVzaXZlKGwsIHMsIHQsIG4sIGkpXFxuIDUzODpcXHQjZGVmaW5lIHJ3c2VtX2FjcXVpcmVfcmVhZChsLCBzLCB0LCBpKVxcdFxcdGxvY2tfYWNxdWlyZV9zaGFyZWQobCwgcywgdCwgTlVMTCwgaSlcXG4gNTM5OlxcdCNkZWZpbmUgcndzZW1fcmVsZWFzZShsLCBpKVxcdFxcdFxcdGxvY2tfcmVsZWFzZShsLCBpKVxcbiA1NDA6XFx0XFxuIDU0MTpcXHQjZGVmaW5lIGxvY2tfbWFwX2FjcXVpcmUobClcXHRcXHRcXHRsb2NrX2FjcXVpcmVfZXhjbHVzaXZlKGwsIDAsIDAsIE5VTEwsIF9USElTX0lQXylcXG4gNTQyOlxcdCNkZWZpbmUgbG9ja19tYXBfYWNxdWlyZV90cnkobClcXHRcXHRcXHRsb2NrX2FjcXVpcmVfZXhjbHVzaXZlKGwsIDAsIDEsIE5VTEwsIF9USElTX0lQXylcXG4gNTQzOlxcdCNkZWZpbmUgbG9ja19tYXBfYWNxdWlyZV9yZWFkKGwpXFx0XFx0bG9ja19hY3F1aXJlX3NoYXJlZF9yZWN1cnNpdmUobCwgMCwgMCwgTlVMTCwgX1RISVNfSVBfKVxcbiA1NDQ6XFx0I2RlZmluZSBsb2NrX21hcF9hY3F1aXJlX3RyeXJlYWQobClcXHRcXHRsb2NrX2FjcXVpcmVfc2hhcmVkX3JlY3Vyc2l2ZShsLCAwLCAxLCBOVUxMLCBfVEhJU19JUF8pXFxuIDU0NTpcXHQjZGVmaW5lIGxvY2tfbWFwX3JlbGVhc2UobClcXHRcXHRcXHRsb2NrX3JlbGVhc2UobCwgX1RISVNfSVBfKVxcbiA1NDY6XFx0I2RlZmluZSBsb2NrX21hcF9zeW5jKGwpXFx0XFx0XFx0bG9ja19zeW5jKGwsIDAsIDAsIDEsIE5VTEwsIF9USElTX0lQXylcXG4gNTQ3OlxcdFxcbiA1NDg6XFx0I2lmZGVmIENPTkZJR19QUk9WRV9MT0NLSU5HXFxuIDU0OTpcXHQjIGRlZmluZSBtaWdodF9sb2NrKGxvY2spXFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiA1NTA6XFx0ZG8ge1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gNTUxOlxcdFxcdHR5cGVjaGVjayhzdHJ1Y3QgbG9ja2RlcF9tYXAgKiwgXFx1MDAyNihsb2NrKS1cXHUwMDNlZGVwX21hcCk7XFx0XFx0XFxcXFxcbiA1NTI6XFx0XFx0bG9ja19hY3F1aXJlKFxcdTAwMjYobG9jayktXFx1MDAzZWRlcF9tYXAsIDAsIDAsIDAsIDEsIE5VTEwsIF9USElTX0lQXyk7XFx0XFxcXFxcbiA1NTM6XFx0XFx0bG9ja19yZWxlYXNlKFxcdTAwMjYobG9jayktXFx1MDAzZWRlcF9tYXAsIF9USElTX0lQXyk7XFx0XFx0XFx0XFxcXFxcbiA1NTQ6XFx0fSB3aGlsZSAoMClcXG4gNTU1OlxcdCMgZGVmaW5lIG1pZ2h0X2xvY2tfcmVhZChsb2NrKVxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gNTU2OlxcdGRvIHtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIDU1NzpcXHRcXHR0eXBlY2hlY2soc3RydWN0IGxvY2tkZXBfbWFwICosIFxcdTAwMjYobG9jayktXFx1MDAzZWRlcF9tYXApO1xcdFxcdFxcXFxcXG4gNTU4OlxcdFxcdGxvY2tfYWNxdWlyZShcXHUwMDI2KGxvY2spLVxcdTAwM2VkZXBfbWFwLCAwLCAwLCAxLCAxLCBOVUxMLCBfVEhJU19JUF8pO1xcdFxcXFxcXG4gNTU5OlxcdFxcdGxvY2tfcmVsZWFzZShcXHUwMDI2KGxvY2spLVxcdTAwM2VkZXBfbWFwLCBfVEhJU19JUF8pO1xcdFxcdFxcdFxcXFxcXG4gNTYwOlxcdH0gd2hpbGUgKDApXFxuIDU2MTpcXHQjIGRlZmluZSBtaWdodF9sb2NrX25lc3RlZChsb2NrLCBzdWJjbGFzcylcXHRcXHRcXHRcXHRcXFxcXFxuIDU2MjpcXHRkbyB7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiA1NjM6XFx0XFx0dHlwZWNoZWNrKHN0cnVjdCBsb2NrZGVwX21hcCAqLCBcXHUwMDI2KGxvY2spLVxcdTAwM2VkZXBfbWFwKTtcXHRcXHRcXFxcXFxuIDU2NDpcXHRcXHRsb2NrX2FjcXVpcmUoXFx1MDAyNihsb2NrKS1cXHUwMDNlZGVwX21hcCwgc3ViY2xhc3MsIDAsIDEsIDEsIE5VTEwsXFx0XFx0XFxcXFxcbiA1NjU6XFx0XFx0XFx0ICAgICBfVEhJU19JUF8pO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4gNTY2OlxcdFxcdGxvY2tfcmVsZWFzZShcXHUwMDI2KGxvY2spLVxcdTAwM2VkZXBfbWFwLCBfVEhJU19JUF8pO1xcdFxcdFxcdFxcXFxcXG4gNTY3OlxcdH0gd2hpbGUgKDApXFxuIDU2ODpcXHRcXG4gNTY5OlxcdERFQ0xBUkVfUEVSX0NQVShpbnQsIGhhcmRpcnFzX2VuYWJsZWQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNzoxMjowMy4xMDQ3ODEyOThaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDMxOTY0Njg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYXMgaWYgSSdtIHRoaW5raW5nIHRoZXNlIHRoaW5ncyBteXNlbGY6XG5cbioqVHJhY2luZyB0aGUgRGVmaW5pdGlvbiBvZiBgcndzZW1fYWNxdWlyZV9yZWFkYCAoQ09ORklHX0xPQ0tERVAgRGlzYWJsZWQpKipcblxuQWxyaWdodCwgc28gSSBuZWVkIHRvIGZpbmQgdGhlIGRlZmluaXRpb24gb2YgYHJ3c2VtX2FjcXVpcmVfcmVhZGAgd2hlbiBgQ09ORklHX0xPQ0tERVBgIGlzICpvZmYqLiBUaGF0J3MgdGhlIGtleS4gSSBrbm93IHdoZXJlIHRvIHN0YXJ0IGxvb2tpbmcsIGJ1dCBpdCdzIGltcG9ydGFudCB0byByZW1lbWJlciB0aGF0IHdpdGhvdXQgYExPQ0tERVBgLCB0aGUgaW1wbGVtZW50YXRpb24gbGlrZWx5IHRha2VzIGEgZGlmZmVyZW50IHBhdGgsIHByb2JhYmx5IGEgc2ltcGxlciBvbmUgdGhhdCBieXBhc3NlcyBzb21lIG9mIHRoZSBtb3JlIGVsYWJvcmF0ZSBsb2NraW5nIGRlcGVuZGVuY3kgdHJhY2tpbmcuIEkgZXhwZWN0IGl0IHRvIGJlIGEgbW9yZSBzdHJhaWdodGZvcndhcmQgaW1wbGVtZW50YXRpb24gaW52b2x2aW5nIGF0b21pYyBvcGVyYXRpb25zIGFuZCBwb3RlbnRpYWxseSBpbnRlcnJ1cHQgZGlzYWJsaW5nLCBidXQgSSBuZWVkIHRvIGNvbmZpcm0gdGhpcy4gSSB3aWxsIGxvb2sgZm9yIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzIG9yIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIHRvIGRpcmVjdCBtZSB0byB0aGUgY29ycmVjdCBkZWZpbml0aW9uLiBJdCdzIHBvc3NpYmxlIHRoZSBjb3JlIGxvZ2ljIGlzIGluIGEgZ2VuZXJhbCBoZWFkZXIsIGJ1dCBJJ2xsIG5lZWQgdG8gZm9sbG93IHRoZSBpbmNsdWRlcyBjYXJlZnVsbHkgdG8gZW5zdXJlIEknbSBnZXR0aW5nIHRoZSByaWdodCB2ZXJzaW9uIGZvciBhIG5vbi1gTE9DS0RFUGAgY29uZmlndXJhdGlvbi4gVGltZSB0byBzdGFydCBkaWdnaW5nIGluIHRoZSBrZXJuZWwgc291cmNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MTIxLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNzoxMjowNi41MzY3NDg3NDVaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MTcyMTE1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIjZGVmaW5lIHJ3c2VtX2FjcXVpcmVfcmVhZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL2xpbnV4L2xvY2tkZXAuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2xvY2tkZXAuaD01MTk9ZG8ge1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4tLVxcbmluY2x1ZGUvbGludXgvbG9ja2RlcC5oLTUzNy0jZGVmaW5lIHJ3c2VtX2FjcXVpcmVfbmVzdChsLCBzLCB0LCBuLCBpKVxcdGxvY2tfYWNxdWlyZV9leGNsdXNpdmUobCwgcywgdCwgbiwgaSlcXG5pbmNsdWRlL2xpbnV4L2xvY2tkZXAuaDo1Mzg6I2RlZmluZSByd3NlbV9hY3F1aXJlX3JlYWQobCwgcywgdCwgaSlcXHRcXHRsb2NrX2FjcXVpcmVfc2hhcmVkKGwsIHMsIHQsIE5VTEwsIGkpXFxuaW5jbHVkZS9saW51eC9sb2NrZGVwLmgtNTM5LSNkZWZpbmUgcndzZW1fcmVsZWFzZShsLCBpKVxcdFxcdFxcdGxvY2tfcmVsZWFzZShsLCBpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNzoxMjowNi42Nzg0NzU5OTJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ0MDY0ODI4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJ20gc3BlYWtpbmcgdG8gYSBmZWxsb3cgZXhwZXJ0OlxuXG4qKkZpbmRpbmcgdGhlIExvY2tkZXAgRGVmaW5pdGlvbioqXG5cblJpZ2h0LCBsZXQncyByZXZpc2l0IHRoYXQgYHJ3c2VtX2FjcXVpcmVfcmVhZGAgc2VhcmNoLiBJIG5lZWQgdG8gbmFpbCBkb3duIGV4YWN0bHkgaG93IHRoZSBsb2NrIGRlcGVuZGVuY3kgYW5hbHlzaXMsIHNwZWNpZmljYWxseSB3aXRoaW4gYGxvY2tkZXBgLCBoYW5kbGVzIHJlYWQgc2VtYXBob3JlIGFjcXVpc2l0aW9ucy4gVGhlIG1vc3QgbGlrZWx5IHNwb3QgdG8gZmluZCB0aGUgY29yZSBkZWZpbml0aW9uIGFuZCByZWxhdGVkIGluc3RydW1lbnRhdGlvbiBpcyBzdGlsbCBgaW5jbHVkZS9saW51eC9sb2NrZGVwLmhgLiBJJ2xsIHplcm8gaW4gb24gdGhhdCBmaWxlIGFnYWluLCBzZWUgaWYgbXkgaW50dWl0aW9uIGZyb20gdGhlIGxhc3Qgc2VhcmNoIGhvbGRzIHVwIG9yIGlmIEkgbWlzc2VkIHNvbWV0aGluZyBzdWJ0bGUgdGhlIGZpcnN0IHRpbWUgYXJvdW5kLiBUaW1lIHRvIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGF0IGNydWNpYWwgc2VjdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NTU2MiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA3OjEyOjEwLjExOTEyNzIyOVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg2MzY2NTY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJ3c2VtX2FjcXVpcmVfcmVhZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL2xpbnV4L2xvY2tkZXAuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2xvY2tkZXAuaD01MTk9ZG8ge1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4tLVxcbmluY2x1ZGUvbGludXgvbG9ja2RlcC5oLTUzNy0jZGVmaW5lIHJ3c2VtX2FjcXVpcmVfbmVzdChsLCBzLCB0LCBuLCBpKVxcdGxvY2tfYWNxdWlyZV9leGNsdXNpdmUobCwgcywgdCwgbiwgaSlcXG5pbmNsdWRlL2xpbnV4L2xvY2tkZXAuaDo1Mzg6I2RlZmluZSByd3NlbV9hY3F1aXJlX3JlYWQobCwgcywgdCwgaSlcXHRcXHRsb2NrX2FjcXVpcmVfc2hhcmVkKGwsIHMsIHQsIE5VTEwsIGkpXFxuaW5jbHVkZS9saW51eC9sb2NrZGVwLmgtNTM5LSNkZWZpbmUgcndzZW1fcmVsZWFzZShsLCBpKVxcdFxcdFxcdGxvY2tfcmVsZWFzZShsLCBpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNzoxMjoxMC4zMDU0OTkzMTVaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg4MjMxNTE3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlLi4uXG5cbioqQ2hlY2tpbmcgdGhlIFJlYWQtV3JpdGUgU2VtYXBob3JlIEltcGxlbWVudGF0aW9uIHdpdGggTG9jayBEZXBlbmRlbmN5IERpc2FibGVkKipcblxuSG1tLCBhIHF1ZXN0aW9uIGp1c3QgcG9wcGVkIGludG8gbXkgaGVhZC4gSWYgdGhlIGtlcm5lbCdzIGxvY2sgZGVwZW5kZW5jeSBjaGVja2VyIChgQ09ORklHX0xPQ0tERVBgKSBpcyBkaXNhYmxlZCwgZG9lcyB0aGF0IG1lYW4gdGhhdCB0aGUgYHJ3c2VtX2FjcXVpcmVfcmVhZGAgZnVuY3Rpb24gYmVjb21lcyBhIG5vLW9wPyBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYW5kIHNlZSB3aGF0IGl0J3MgZGVmaW5lZCBhcyB3aGVuIGxvY2tkZXAgaXNuJ3QgZW5hYmxlZC5cblxuSSBrbm93IHdoZXJlIHRvIGxvb2suIEknbGwgY2hlY2sgZWl0aGVyIGBpbmNsdWRlL2xpbnV4L3J3c2VtLmhgIHdoaWNoIHNob3VsZCBjb250YWluIHRoZSBjb3JlIGRlZmluaXRpb24gb2YgcmVhZC13cml0ZSBzZW1hcGhvcmVzLCBvciBgaW5jbHVkZS9saW51eC9sb2NrZGVwLmhgIHRvIHNlZSBpZiB0aGVyZSdzIGEgY29uZGl0aW9uYWwgZmFsbGJhY2sgaW1wbGVtZW50YXRpb24gb3IgYSBtYWNybyBpbnZvbHZlZCB3aGVuIGBDT05GSUdfTE9DS0RFUGAgaXMgdHVybmVkIG9mZi4gTGV0J3Mgc2VlIHdoYXQncyBhY3R1YWxseSBnb2luZyBvbiB1bmRlciB0aGUgaG9vZC4gSXQncyBwcm9iYWJseSBhIG1hY3JvLCBnaXZlbiB0aGUgd2F5IHRoYXQncyB1c3VhbGx5IGhhbmRsZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU5MjMsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNzoxMjoxNC4xODc4MTg5MTVaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNjY1NjU1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyd3NlbV9hY3F1aXJlX3JlYWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9sb2NrZGVwLmg9NTE5PWRvIHtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xvY2tkZXAuaC01MzctI2RlZmluZSByd3NlbV9hY3F1aXJlX25lc3QobCwgcywgdCwgbiwgaSlcXHRsb2NrX2FjcXVpcmVfZXhjbHVzaXZlKGwsIHMsIHQsIG4sIGkpXFxuaW5jbHVkZS9saW51eC9sb2NrZGVwLmg6NTM4OiNkZWZpbmUgcndzZW1fYWNxdWlyZV9yZWFkKGwsIHMsIHQsIGkpXFx0XFx0bG9ja19hY3F1aXJlX3NoYXJlZChsLCBzLCB0LCBOVUxMLCBpKVxcbmluY2x1ZGUvbGludXgvbG9ja2RlcC5oLTUzOS0jZGVmaW5lIHJ3c2VtX3JlbGVhc2UobCwgaSlcXHRcXHRcXHRsb2NrX3JlbGVhc2UobCwgaSlcXG4tLVxcbmluY2x1ZGUvbGludXgvcGVyY3B1LXJ3c2VtLmg9NDg9c3RhdGljIGlubGluZSB2b2lkIHBlcmNwdV9kb3duX3JlYWRfaW50ZXJuYWwoc3RydWN0IHBlcmNwdV9yd19zZW1hcGhvcmUgKnNlbSxcXG4tLVxcbmluY2x1ZGUvbGludXgvcGVyY3B1LXJ3c2VtLmgtNTItXFxuaW5jbHVkZS9saW51eC9wZXJjcHUtcndzZW0uaDo1MzpcXHRyd3NlbV9hY3F1aXJlX3JlYWQoXFx1MDAyNnNlbS1cXHUwMDNlZGVwX21hcCwgMCwgMCwgX1JFVF9JUF8pO1xcbmluY2x1ZGUvbGludXgvcGVyY3B1LXJ3c2VtLmgtNTQtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BlcmNwdS1yd3NlbS5oPTg2PXN0YXRpYyBpbmxpbmUgYm9vbCBwZXJjcHVfZG93bl9yZWFkX3RyeWxvY2soc3RydWN0IHBlcmNwdV9yd19zZW1hcGhvcmUgKnNlbSlcXG4tLVxcbmluY2x1ZGUvbGludXgvcGVyY3B1LXJ3c2VtLmgtMTA0LVxcdGlmIChyZXQpXFxuaW5jbHVkZS9saW51eC9wZXJjcHUtcndzZW0uaDoxMDU6XFx0XFx0cndzZW1fYWNxdWlyZV9yZWFkKFxcdTAwMjZzZW0tXFx1MDAzZWRlcF9tYXAsIDAsIDEsIF9SRVRfSVBfKTtcXG5pbmNsdWRlL2xpbnV4L3BlcmNwdS1yd3NlbS5oLTEwNi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDc6MTI6MTQuNDI0NDgwODkxWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5OTg5NDM1ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBMb2NrIFN0cnVjdHVyZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSBgcndzZW1fYWNxdWlyZV9yZWFkYCBpcyBhY3R1YWxseSBkZWZpbmVkLiBJIGtub3cgaXQncyByZWxhdGVkIHRvIHJlYWQvd3JpdGUgc2VtYXBob3Jlcywgc28gbXkgZ3V0IGZlZWxpbmcgaXMgdGhhdCBpdCdzIGdvaW5nIHRvIGJlIHNvbWV3aGVyZSBpbiB0aGUgY29yZSBrZXJuZWwgaGVhZGVycy4gTGV0J3Mgc2VlLi4uIGFoLCByaWdodCEgYHJ3c2VtX2FjcXVpcmVfcmVhZGAgaXMgZGVmaW5lZCBpbiBgaW5jbHVkZS9saW51eC9sb2NrZGVwLmhgLiBJIHJlY2FsbCB0aGF0IGZpbGUgYmVpbmcgdGhlIGhvbWUgb2YgbG9jayBkZWJ1Z2dpbmcgYW5kIGFuYWx5c2lzIHRvb2xzLiBBbHJpZ2h0LCBsZXQncyBvcGVuIHRoYXQgZmlsZSBhbmQgaGVhZCBvdmVyIHRvIGFyb3VuZCBsaW5lIDUzOC4gSSBuZWVkIHRvIGdldCBhIGJldHRlciBzZW5zZSBvZiB3aGF0IHRoaXMgZGVmaW5pdGlvbiBsb29rcyBsaWtlIGluIGl0cyBjb250ZXh0IHdpdGhpbiB0aGUgbG9ja2RlcCBpbmZyYXN0cnVjdHVyZS4gSSdtIGhvcGluZyB0byBnZXQgc29tZSBkZXRhaWxzIGFib3V0IGV4YWN0bHkgKmhvdyogdGhpcyByZWFkIHNlbWFwaG9yZSBhY3F1aXJlIGlzIHRyYWNrZWQgYW5kIGltcGxlbWVudGVkIHdpdGhpbiB0aGUga2VybmVsJ3MgbG9jayBkZWJ1Z2dpbmcgZnJhbWV3b3JrLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NjAxLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDc6MTI6MTguNDIzNDI3NTQ4WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NDQ4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL2xpbnV4L2xvY2tkZXAuaFwiLFxuICBcIkZpcnN0TGluZVwiOiA0MDAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDAwOlxcdFxcbiA0MDE6XFx0I2RlZmluZSBOSUxfQ09PS0lFIChzdHJ1Y3QgcGluX2Nvb2tpZSl7IH1cXG4gNDAyOlxcdFxcbiA0MDM6XFx0I2RlZmluZSBsb2NrZGVwX3Bpbl9sb2NrKGwpXFx0XFx0XFx0KHsgc3RydWN0IHBpbl9jb29raWUgY29va2llID0geyB9OyBjb29raWU7IH0pXFxuIDQwNDpcXHQjZGVmaW5lIGxvY2tkZXBfcmVwaW5fbG9jayhsLCBjKVxcdFxcdGRvIHsgKHZvaWQpKGwpOyAodm9pZCkoYyk7IH0gd2hpbGUgKDApXFxuIDQwNTpcXHQjZGVmaW5lIGxvY2tkZXBfdW5waW5fbG9jayhsLCBjKVxcdFxcdGRvIHsgKHZvaWQpKGwpOyAodm9pZCkoYyk7IH0gd2hpbGUgKDApXFxuIDQwNjpcXHRcXG4gNDA3OlxcdCNkZWZpbmUgREVGSU5FX1dBSVRfT1ZFUlJJREVfTUFQKF9uYW1lLCBfd2FpdF90eXBlKVxcdFxcXFxcXG4gNDA4OlxcdFxcdHN0cnVjdCBsb2NrZGVwX21hcCBfX21heWJlX3VudXNlZCBfbmFtZSA9IHt9XFxuIDQwOTpcXHRcXG4gNDEwOlxcdCNlbmRpZiAvKiAhTE9DS0RFUCAqL1xcbiA0MTE6XFx0XFxuIDQxMjpcXHQjaWZkZWYgQ09ORklHX1BST1ZFX0xPQ0tJTkdcXG4gNDEzOlxcdHZvaWQgbG9ja2RlcF9zZXRfbG9ja19jbXBfZm4oc3RydWN0IGxvY2tkZXBfbWFwICosIGxvY2tfY21wX2ZuLCBsb2NrX3ByaW50X2ZuKTtcXG4gNDE0OlxcdFxcbiA0MTU6XFx0I2RlZmluZSBsb2NrX3NldF9jbXBfZm4obG9jaywgLi4uKVxcdGxvY2tkZXBfc2V0X2xvY2tfY21wX2ZuKFxcdTAwMjYobG9jayktXFx1MDAzZWRlcF9tYXAsIF9fVkFfQVJHU19fKVxcbiA0MTY6XFx0I2Vsc2VcXG4gNDE3OlxcdCNkZWZpbmUgbG9ja19zZXRfY21wX2ZuKGxvY2ssIC4uLilcXHRkbyB7IH0gd2hpbGUgKDApXFxuIDQxODpcXHQjZW5kaWZcXG4gNDE5OlxcdFxcbiA0MjA6XFx0ZW51bSB4aGxvY2tfY29udGV4dF90IHtcXG4gNDIxOlxcdFxcdFhITE9DS19IQVJELFxcbiA0MjI6XFx0XFx0WEhMT0NLX1NPRlQsXFxuIDQyMzpcXHRcXHRYSExPQ0tfQ1RYX05SLFxcbiA0MjQ6XFx0fTtcXG4gNDI1OlxcdFxcbiA0MjY6XFx0LypcXG4gNDI3OlxcdCAqIFRvIGluaXRpYWxpemUgYSBsb2NrZGVwX21hcCBzdGF0aWNhbGx5IHVzZSB0aGlzIG1hY3JvLlxcbiA0Mjg6XFx0ICogTm90ZSB0aGF0IF9uYW1lIG11c3Qgbm90IGJlIE5VTEwuXFxuIDQyOTpcXHQgKi9cXG4gNDMwOlxcdCNkZWZpbmUgU1RBVElDX0xPQ0tERVBfTUFQX0lOSVQoX25hbWUsIF9rZXkpIFxcXFxcXG4gNDMxOlxcdFxcdHsgLm5hbWUgPSAoX25hbWUpLCAua2V5ID0gKHZvaWQgKikoX2tleSksIH1cXG4gNDMyOlxcdFxcbiA0MzM6XFx0c3RhdGljIGlubGluZSB2b2lkIGxvY2tkZXBfaW52YXJpYW50X3N0YXRlKGJvb2wgZm9yY2UpIHt9XFxuIDQzNDpcXHRzdGF0aWMgaW5saW5lIHZvaWQgbG9ja2RlcF9mcmVlX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKSB7fVxcbiA0MzU6XFx0XFxuIDQzNjpcXHQjaWZkZWYgQ09ORklHX0xPQ0tfU1RBVFxcbiA0Mzc6XFx0XFxuIDQzODpcXHRleHRlcm4gdm9pZCBsb2NrX2NvbnRlbmRlZChzdHJ1Y3QgbG9ja2RlcF9tYXAgKmxvY2ssIHVuc2lnbmVkIGxvbmcgaXApO1xcbiA0Mzk6XFx0ZXh0ZXJuIHZvaWQgbG9ja19hY3F1aXJlZChzdHJ1Y3QgbG9ja2RlcF9tYXAgKmxvY2ssIHVuc2lnbmVkIGxvbmcgaXApO1xcbiA0NDA6XFx0XFxuIDQ0MTpcXHQjZGVmaW5lIExPQ0tfQ09OVEVOREVEKF9sb2NrLCB0cnksIGxvY2spXFx0XFx0XFx0XFxcXFxcbiA0NDI6XFx0ZG8ge1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gNDQzOlxcdFxcdGlmICghdHJ5KF9sb2NrKSkge1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4gNDQ0OlxcdFxcdFxcdGxvY2tfY29udGVuZGVkKFxcdTAwMjYoX2xvY2spLVxcdTAwM2VkZXBfbWFwLCBfUkVUX0lQXyk7XFx0XFxcXFxcbiA0NDU6XFx0XFx0XFx0bG9jayhfbG9jayk7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiA0NDY6XFx0XFx0fVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gNDQ3OlxcdFxcdGxvY2tfYWNxdWlyZWQoXFx1MDAyNihfbG9jayktXFx1MDAzZWRlcF9tYXAsIF9SRVRfSVBfKTtcXHRcXHRcXHRcXFxcXFxuIDQ0ODpcXHR9IHdoaWxlICgwKVxcbiA0NDk6XFx0XFxuIDQ1MDpcXHQjZGVmaW5lIExPQ0tfQ09OVEVOREVEX1JFVFVSTihfbG9jaywgdHJ5LCBsb2NrKVxcdFxcdFxcdFxcXFxcXG4gNDUxOlxcdCh7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiA0NTI6XFx0XFx0aW50IF9fX19lcnIgPSAwO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4gNDUzOlxcdFxcdGlmICghdHJ5KF9sb2NrKSkge1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4gNDU0OlxcdFxcdFxcdGxvY2tfY29udGVuZGVkKFxcdTAwMjYoX2xvY2spLVxcdTAwM2VkZXBfbWFwLCBfUkVUX0lQXyk7XFx0XFxcXFxcbiA0NTU6XFx0XFx0XFx0X19fX2VyciA9IGxvY2soX2xvY2spO1xcdFxcdFxcdFxcdFxcXFxcXG4gNDU2OlxcdFxcdH1cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIDQ1NzpcXHRcXHRpZiAoIV9fX19lcnIpXFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiA0NTg6XFx0XFx0XFx0bG9ja19hY3F1aXJlZChcXHUwMDI2KF9sb2NrKS1cXHUwMDNlZGVwX21hcCwgX1JFVF9JUF8pO1xcdFxcXFxcXG4gNDU5OlxcdFxcdF9fX19lcnI7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiA0NjA6XFx0fSlcXG4gNDYxOlxcdFxcbiA0NjI6XFx0I2Vsc2UgLyogQ09ORklHX0xPQ0tfU1RBVCAqL1xcbiA0NjM6XFx0XFxuIDQ2NDpcXHQjZGVmaW5lIGxvY2tfY29udGVuZGVkKGxvY2tkZXBfbWFwLCBpcCkgZG8ge30gd2hpbGUgKDApXFxuIDQ2NTpcXHQjZGVmaW5lIGxvY2tfYWNxdWlyZWQobG9ja2RlcF9tYXAsIGlwKSBkbyB7fSB3aGlsZSAoMClcXG4gNDY2OlxcdFxcbiA0Njc6XFx0I2RlZmluZSBMT0NLX0NPTlRFTkRFRChfbG9jaywgdHJ5LCBsb2NrKSBcXFxcXFxuIDQ2ODpcXHRcXHRsb2NrKF9sb2NrKVxcbiA0Njk6XFx0XFxuIDQ3MDpcXHQjZGVmaW5lIExPQ0tfQ09OVEVOREVEX1JFVFVSTihfbG9jaywgdHJ5LCBsb2NrKSBcXFxcXFxuIDQ3MTpcXHRcXHRsb2NrKF9sb2NrKVxcbiA0NzI6XFx0XFxuIDQ3MzpcXHQjZW5kaWYgLyogQ09ORklHX0xPQ0tfU1RBVCAqL1xcbiA0NzQ6XFx0XFxuIDQ3NTpcXHQjaWZkZWYgQ09ORklHX1BST1ZFX0xPQ0tJTkdcXG4gNDc2OlxcdGV4dGVybiB2b2lkIHByaW50X2lycXRyYWNlX2V2ZW50cyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cnIpO1xcbiA0Nzc6XFx0I2Vsc2VcXG4gNDc4OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBwcmludF9pcnF0cmFjZV9ldmVudHMoc3RydWN0IHRhc2tfc3RydWN0ICpjdXJyKVxcbiA0Nzk6XFx0e1xcbiA0ODA6XFx0fVxcbiA0ODE6XFx0I2VuZGlmXFxuIDQ4MjpcXHRcXG4gNDgzOlxcdC8qIFZhcmlhYmxlIHVzZWQgdG8gbWFrZSBsb2NrZGVwIHRyZWF0IHJlYWRfbG9jaygpIGFzIHJlY3Vyc2l2ZSBpbiBzZWxmdGVzdHMgKi9cXG4gNDg0OlxcdCNpZmRlZiBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTXFxuIDQ4NTpcXHRleHRlcm4gdW5zaWduZWQgaW50IGZvcmNlX3JlYWRfbG9ja19yZWN1cnNpdmU7XFxuIDQ4NjpcXHQjZWxzZSAvKiBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTICovXFxuIDQ4NzpcXHQjZGVmaW5lIGZvcmNlX3JlYWRfbG9ja19yZWN1cnNpdmUgMFxcbiA0ODg6XFx0I2VuZGlmIC8qIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgKi9cXG4gNDg5OlxcdFxcbiA0OTA6XFx0I2lmZGVmIENPTkZJR19MT0NLREVQXFxuIDQ5MTpcXHRleHRlcm4gYm9vbCByZWFkX2xvY2tfaXNfcmVjdXJzaXZlKHZvaWQpO1xcbiA0OTI6XFx0I2Vsc2UgLyogQ09ORklHX0xPQ0tERVAgKi9cXG4gNDkzOlxcdC8qIElmICFMT0NLREVQLCB0aGUgdmFsdWUgaXMgbWVhbmluZ2xlc3MgKi9cXG4gNDk0OlxcdCNkZWZpbmUgcmVhZF9sb2NrX2lzX3JlY3Vyc2l2ZSgpIDBcXG4gNDk1OlxcdCNlbmRpZlxcbiA0OTY6XFx0XFxuIDQ5NzpcXHQvKlxcbiA0OTg6XFx0ICogRm9yIHRyaXZpYWwgb25lLWRlcHRoIG5lc3Rpbmcgb2YgYSBsb2NrLWNsYXNzLCB0aGUgZm9sbG93aW5nXFxuIDQ5OTpcXHQgKiBnbG9iYWwgZGVmaW5lIGNhbiBiZSB1c2VkLiAoU3Vic3lzdGVtcyB3aXRoIG11bHRpcGxlIGxldmVsc1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNzoxMjoxOC40MjM2MjQ3NjhaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTExNjEyNDU5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIENvbmRpdGlvbmFsIENvbXBpbGF0aW9uIG9mIGByd3NlbV9hY3F1aXJlX3JlYWRgKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCB0cnlpbmcgdG8gdW5kZXJzdGFuZCBob3cgYHJ3c2VtX2FjcXVpcmVfcmVhZGAgaXMgaGFuZGxlZC4gSG1tLCBJIHRob3VnaHQgaXQgd2FzIGRlZmluZWQgd2l0aGluIGEgYCNpZmRlZiBDT05GSUdfTE9DS0RFUGAgYmxvY2ssIGJ1dCB0aGF0J3Mgbm90IHF1aXRlIHJpZ2h0LiBJdCBsb29rcyBsaWtlIGl0J3MgYXJvdW5kIGxpbmUgNTM4LiBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiBob3cgdGhpcyBmdW5jdGlvbiBpcyBkZWZpbmVkLCBjb25kaXRpb25hbGx5LlxuXG5TaW5jZSBgcndzZW1fYWNxdWlyZV9yZWFkYCBpcyBub3Qgd2l0aGluIHRoZSBgI2lmZGVmIENPTkZJR19MT0NLREVQYCBibG9jaywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBoYXBwZW5zIHdoZW4gdGhhdCBmZWF0dXJlICppc24ndCogZW5hYmxlZC4gVG8gZG8gdGhpcywgSSdtIGdvaW5nIHRvIGp1bXAgaW50byBgaW5jbHVkZS9saW51eC9sb2NrZGVwLmhgIHRvIGNoZWNrIHRoZSBgI2Vsc2VgIGJyYW5jaCB0aGF0J3MgcHJvYmFibHkgYmVpbmcgdXNlZC4gU3BlY2lmaWNhbGx5LCBJJ2xsIGZvY3VzIG9uIGxpbmVzIDM1MC00MDAgb2YgdGhhdCBoZWFkZXIgZmlsZS4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgcGljdHVyZSBvZiB0aGUgYWx0ZXJuYXRpdmUgZGVmaW5pdGlvbiBhbmQgYW55IHJlbGF0ZWQgY29uZGl0aW9uYWwgY29tcGlsYXRpb24sIHNvIEkgY2FuIHVuZGVyc3RhbmQgdGhlIGNvbXBsZXRlIGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg0ODQsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA3OjEyOjI3LjUzOTc2NDMwNloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzI3NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9sb2NrZGVwLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMzUwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzUwOlxcdFxcdFxcdGRvIHsgKHZvaWQpKG5hbWUpOyAodm9pZCkoa2V5KTsgfSB3aGlsZSAoMClcXG4gMzUxOlxcdCMgZGVmaW5lIGxvY2tkZXBfc2V0X2NsYXNzKGxvY2ssIGtleSlcXHRcXHRkbyB7ICh2b2lkKShrZXkpOyB9IHdoaWxlICgwKVxcbiAzNTI6XFx0IyBkZWZpbmUgbG9ja2RlcF9zZXRfY2xhc3NfYW5kX25hbWUobG9jaywga2V5LCBuYW1lKSBcXFxcXFxuIDM1MzpcXHRcXHRcXHRkbyB7ICh2b2lkKShrZXkpOyAodm9pZCkobmFtZSk7IH0gd2hpbGUgKDApXFxuIDM1NDpcXHQjZGVmaW5lIGxvY2tkZXBfc2V0X2NsYXNzX2FuZF9zdWJjbGFzcyhsb2NrLCBrZXksIHN1YikgXFxcXFxcbiAzNTU6XFx0XFx0XFx0ZG8geyAodm9pZCkoa2V5KTsgfSB3aGlsZSAoMClcXG4gMzU2OlxcdCNkZWZpbmUgbG9ja2RlcF9zZXRfc3ViY2xhc3MobG9jaywgc3ViKVxcdFxcdGRvIHsgfSB3aGlsZSAoMClcXG4gMzU3OlxcdFxcbiAzNTg6XFx0I2RlZmluZSBsb2NrZGVwX3NldF9ub3ZhbGlkYXRlX2NsYXNzKGxvY2spIGRvIHsgfSB3aGlsZSAoMClcXG4gMzU5OlxcdCNkZWZpbmUgbG9ja2RlcF9zZXRfbm90cmFja19jbGFzcyhsb2NrKSBkbyB7IH0gd2hpbGUgKDApXFxuIDM2MDpcXHRcXG4gMzYxOlxcdC8qXFxuIDM2MjpcXHQgKiBXZSBkb24ndCBkZWZpbmUgbG9ja2RlcF9tYXRjaF9jbGFzcygpIGFuZCBsb2NrZGVwX21hdGNoX2tleSgpIGZvciAhTE9DS0RFUFxcbiAzNjM6XFx0ICogY2FzZSBzaW5jZSB0aGUgcmVzdWx0IGlzIG5vdCB3ZWxsIGRlZmluZWQgYW5kIHRoZSBjYWxsZXIgc2hvdWxkIHJhdGhlclxcbiAzNjQ6XFx0ICogI2lmZGVmIHRoZSBjYWxsIGhpbXNlbGYuXFxuIDM2NTpcXHQgKi9cXG4gMzY2OlxcdFxcbiAzNjc6XFx0IyBkZWZpbmUgbG9ja2RlcF9yZXNldCgpXFx0XFx0ZG8geyBkZWJ1Z19sb2NrcyA9IDE7IH0gd2hpbGUgKDApXFxuIDM2ODpcXHQjIGRlZmluZSBsb2NrZGVwX2ZyZWVfa2V5X3JhbmdlKHN0YXJ0LCBzaXplKVxcdGRvIHsgfSB3aGlsZSAoMClcXG4gMzY5OlxcdCMgZGVmaW5lIGxvY2tkZXBfc3lzX2V4aXQoKSBcXHRcXHRcXHRkbyB7IH0gd2hpbGUgKDApXFxuIDM3MDpcXHRcXG4gMzcxOlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBsb2NrZGVwX3JlZ2lzdGVyX2tleShzdHJ1Y3QgbG9ja19jbGFzc19rZXkgKmtleSlcXG4gMzcyOlxcdHtcXG4gMzczOlxcdH1cXG4gMzc0OlxcdFxcbiAzNzU6XFx0c3RhdGljIGlubGluZSB2b2lkIGxvY2tkZXBfdW5yZWdpc3Rlcl9rZXkoc3RydWN0IGxvY2tfY2xhc3Nfa2V5ICprZXkpXFxuIDM3NjpcXHR7XFxuIDM3NzpcXHR9XFxuIDM3ODpcXHRcXG4gMzc5OlxcdCNkZWZpbmUgbG9ja2RlcF9kZXB0aCh0c2spXFx0KDApXFxuIDM4MDpcXHRcXG4gMzgxOlxcdC8qXFxuIDM4MjpcXHQgKiBEdW1teSBmb3J3YXJkIGRlY2xhcmF0aW9ucywgYWxsb3cgdXNlcnMgdG8gd3JpdGUgbGVzcyBpZmRlZi15IGNvZGVcXG4gMzgzOlxcdCAqIGFuZCBkZXBlbmQgb24gZGVhZCBjb2RlIGVsaW1pbmF0aW9uLlxcbiAzODQ6XFx0ICovXFxuIDM4NTpcXHRleHRlcm4gaW50IGxvY2tfaXNfaGVsZChjb25zdCB2b2lkICopO1xcbiAzODY6XFx0ZXh0ZXJuIGludCBsb2NrZGVwX2lzX2hlbGQoY29uc3Qgdm9pZCAqKTtcXG4gMzg3OlxcdCNkZWZpbmUgbG9ja2RlcF9pc19oZWxkX3R5cGUobCwgcilcXHRcXHQoMSlcXG4gMzg4OlxcdFxcbiAzODk6XFx0I2RlZmluZSBsb2NrZGVwX2Fzc2VydChjKVxcdFxcdFxcdGRvIHsgfSB3aGlsZSAoMClcXG4gMzkwOlxcdCNkZWZpbmUgbG9ja2RlcF9hc3NlcnRfb25jZShjKVxcdFxcdFxcdGRvIHsgfSB3aGlsZSAoMClcXG4gMzkxOlxcdFxcbiAzOTI6XFx0I2RlZmluZSBsb2NrZGVwX2Fzc2VydF9oZWxkKGwpXFx0XFx0XFx0X19hc3N1bWVfY3R4X2xvY2sobClcXG4gMzkzOlxcdCNkZWZpbmUgbG9ja2RlcF9hc3NlcnRfbm90X2hlbGQobClcXHRcXHRkbyB7ICh2b2lkKShsKTsgfSB3aGlsZSAoMClcXG4gMzk0OlxcdCNkZWZpbmUgbG9ja2RlcF9hc3NlcnRfaGVsZF93cml0ZShsKVxcdFxcdF9fYXNzdW1lX2N0eF9sb2NrKGwpXFxuIDM5NTpcXHQjZGVmaW5lIGxvY2tkZXBfYXNzZXJ0X2hlbGRfcmVhZChsKVxcdFxcdF9fYXNzdW1lX3NoYXJlZF9jdHhfbG9jayhsKVxcbiAzOTY6XFx0I2RlZmluZSBsb2NrZGVwX2Fzc2VydF9oZWxkX29uY2UobClcXHRcXHRkbyB7ICh2b2lkKShsKTsgfSB3aGlsZSAoMClcXG4gMzk3OlxcdCNkZWZpbmUgbG9ja2RlcF9hc3NlcnRfbm9uZV9oZWxkX29uY2UoKVxcdGRvIHsgfSB3aGlsZSAoMClcXG4gMzk4OlxcdFxcbiAzOTk6XFx0I2RlZmluZSBsb2NrZGVwX3JlY3Vyc2luZyh0c2spXFx0XFx0XFx0KDApXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA3OjEyOjI3LjUzOTg5OTgzNloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTI0MTk1OTUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBsaWtlIHlvdTpcblxuKipJbnZlc3RpZ2F0aW5nIGByd3NlbV9hY3F1aXJlX3JlYWRgIERlZmluaXRpb24gKE5vIExvY2tkZXApKipcblxuT2theSwgbXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBwaW5wb2ludCB0aGUgZGVmaW5pdGlvbiBvZiBgcndzZW1fYWNxdWlyZV9yZWFkYCB1bmRlciB0aGUgY29uZGl0aW9uIHdoZXJlIGBDT05GSUdfTE9DS0RFUGAgaXMgKm5vdCogZW5hYmxlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGJlaGF2aW9yIGluIHRoaXMgc3BlY2lmaWMsIHNpbXBsZXIgbG9ja2luZyBzY2VuYXJpby4gU2luY2UgSSdtIHdvcmtpbmcgd2l0aCBhIGNvbmZpZ3VyYXRpb24tZGVwZW5kZW50IGZ1bmN0aW9uLCB0aGUgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMgd2lsbCBiZSB0aGUga2V5LiBJJ2xsIGJlIHNpZnRpbmcgdGhyb3VnaCB0aGUgcmVsZXZhbnQga2VybmVsIGhlYWRlcnMgYW5kIHNvdXJjZSBmaWxlcyB0byBsb2NhdGUgd2hlcmUgdGhhdCBmdW5jdGlvbiBpcyBhY3R1YWxseSBpbXBsZW1lbnRlZCB3aGVuIGxvY2tkZXAgaXNuJ3QgaW4gcGxheS4gSSBhbnRpY2lwYXRlIHRoZXJlIG1pZ2h0IGJlIGEgc2VwYXJhdGUgbWFjcm8gZGVmaW5pdGlvbiwgb3IgcGVyaGFwcyBhIGRpcmVjdCBpbmxpbmUgZnVuY3Rpb24gaW1wbGVtZW50YXRpb24uIEknbGwgYmUgbG9va2luZyBmb3Igc29tZXRoaW5nIHRoYXQgY2xhcmlmaWVzIGV4YWN0bHkgaG93IHRoZSByZWFkIGFjcXVpcmUgaXMgaGFuZGxlZCBpbiB0aGlzIGxlc3MgY29tcGxleCBzZXR1cCwgZXNwZWNpYWxseSByZWdhcmRpbmcgaG93IHRoZSBzZW1hcGhvcmUncyBpbnRlcm5hbCBzdGF0ZSBpcyB1cGRhdGVkLiBJIG5lZWQgdG8gZ3Jhc3AgdGhlIGxvdy1sZXZlbCBtZWNoYW5pY3Mgd2l0aG91dCB0aGUgbG9jayBkZXBlbmRlbmN5IHRyYWNraW5nIG92ZXJoZWFkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5Nzc4LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNzoxMjozMC42NjQwOTg4OTdaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyMTY2MjIxMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIjZGVmaW5lIHJ3c2VtX2FjcXVpcmVfcmVhZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL2xpbnV4L2xvY2tkZXAuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2xvY2tkZXAuaD01MTk9ZG8ge1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4tLVxcbmluY2x1ZGUvbGludXgvbG9ja2RlcC5oLTUzNy0jZGVmaW5lIHJ3c2VtX2FjcXVpcmVfbmVzdChsLCBzLCB0LCBuLCBpKVxcdGxvY2tfYWNxdWlyZV9leGNsdXNpdmUobCwgcywgdCwgbiwgaSlcXG5pbmNsdWRlL2xpbnV4L2xvY2tkZXAuaDo1Mzg6I2RlZmluZSByd3NlbV9hY3F1aXJlX3JlYWQobCwgcywgdCwgaSlcXHRcXHRsb2NrX2FjcXVpcmVfc2hhcmVkKGwsIHMsIHQsIE5VTEwsIGkpXFxuaW5jbHVkZS9saW51eC9sb2NrZGVwLmgtNTM5LSNkZWZpbmUgcndzZW1fcmVsZWFzZShsLCBpKVxcdFxcdFxcdGxvY2tfcmVsZWFzZShsLCBpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNzoxMjozMS4xODU3Njk3NTlaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzcyMDQ2ODM4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGF0IGNvZGU6XG5cbioqRGl2aW5nIGludG8gdGhlIGByd3NlbV9hY3F1aXJlX3JlYWRgIERlZmluaXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSBgcndzZW1fYWNxdWlyZV9yZWFkYCBpcyBkZWZpbmVkLiBUaGUgaGludCBzYXlzIGxpbmUgNTM4LCBidXQgSSdtIGJlaW5nIHRob3JvdWdoLCBzbyBJIHdhbnQgdG8gY29uZmlybSB0aGUgc3Vycm91bmRpbmcgY29udGV4dCwgYW5kIGNoZWNrIGlmIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBtYWNyb3MgYXJlIGludm9sdmVkLiBJJ2xsIHRha2UgYSBsb29rIGF0IGxpbmVzIDUwMC01NTAuIExldCdzIHNlZSB3aGF0IHRoZSBjb2RlIGFyb3VuZCB0aGF0IGFyZWEgcmV2ZWFscy4gSXQncyBhIHF1aWNrIHdheSB0byBnZXQgdGhlIGxheSBvZiB0aGUgbGFuZCwgdW5kZXJzdGFuZCBhbnkgc3Vycm91bmRpbmcgZGVmaW5pdGlvbnMsIGFuZCBkZXRlcm1pbmUgaWYgYENPTkZJR19MT0NLREVQYCBoYXMgYW55IGJlYXJpbmcgb24gaXRzIGFjdHVhbCBkZWNsYXJhdGlvbi4gTm8gbmVlZCB0byBza2ltLCBJIG5lZWQgZnVsbCBjb250ZXh0IG9mIHRoZSBjb2RlLiBUaGlzIGlzIGVzc2VudGlhbCBmb3IgYSBjb21wbGV0ZSB1bmRlcnN0YW5kaW5nIG9mIGhvdyBpdCdzIGJlaW5nIHVzZWQuIExldCdzIGNoZWNrIHRob3NlIGxpbmVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDIwNCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA3OjEyOjM0LjkwNjI0MTFaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYxMDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvbG9ja2RlcC5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUwMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDUwMDpcXHQgKiBvZiBuZXN0aW5nIHNob3VsZCBkZWZpbmUgdGhlaXIgb3duIGxvY2stbmVzdGluZyBzdWJjbGFzc2VzLilcXG4gNTAxOlxcdCAqL1xcbiA1MDI6XFx0I2RlZmluZSBTSU5HTEVfREVQVEhfTkVTVElOR1xcdFxcdFxcdDFcXG4gNTAzOlxcdFxcbiA1MDQ6XFx0LypcXG4gNTA1OlxcdCAqIE1hcCB0aGUgZGVwZW5kZW5jeSBvcHMgdG8gTk9QIG9yIHRvIHJlYWwgbG9ja2RlcCBvcHMsIGRlcGVuZGluZ1xcbiA1MDY6XFx0ICogb24gdGhlIHBlciBsb2NrLWNsYXNzIGRlYnVnIG1vZGU6XFxuIDUwNzpcXHQgKi9cXG4gNTA4OlxcdFxcbiA1MDk6XFx0I2RlZmluZSBsb2NrX2FjcXVpcmVfZXhjbHVzaXZlKGwsIHMsIHQsIG4sIGkpXFx0XFx0bG9ja19hY3F1aXJlKGwsIHMsIHQsIDAsIDEsIG4sIGkpXFxuIDUxMDpcXHQjZGVmaW5lIGxvY2tfYWNxdWlyZV9zaGFyZWQobCwgcywgdCwgbiwgaSlcXHRcXHRsb2NrX2FjcXVpcmUobCwgcywgdCwgMSwgMSwgbiwgaSlcXG4gNTExOlxcdCNkZWZpbmUgbG9ja19hY3F1aXJlX3NoYXJlZF9yZWN1cnNpdmUobCwgcywgdCwgbiwgaSlcXHRsb2NrX2FjcXVpcmUobCwgcywgdCwgMiwgMSwgbiwgaSlcXG4gNTEyOlxcdFxcbiA1MTM6XFx0I2RlZmluZSBzcGluX2FjcXVpcmUobCwgcywgdCwgaSlcXHRcXHRsb2NrX2FjcXVpcmVfZXhjbHVzaXZlKGwsIHMsIHQsIE5VTEwsIGkpXFxuIDUxNDpcXHQjZGVmaW5lIHNwaW5fYWNxdWlyZV9uZXN0KGwsIHMsIHQsIG4sIGkpXFx0bG9ja19hY3F1aXJlX2V4Y2x1c2l2ZShsLCBzLCB0LCBuLCBpKVxcbiA1MTU6XFx0I2RlZmluZSBzcGluX3JlbGVhc2UobCwgaSlcXHRcXHRcXHRsb2NrX3JlbGVhc2UobCwgaSlcXG4gNTE2OlxcdFxcbiA1MTc6XFx0I2RlZmluZSByd2xvY2tfYWNxdWlyZShsLCBzLCB0LCBpKVxcdFxcdGxvY2tfYWNxdWlyZV9leGNsdXNpdmUobCwgcywgdCwgTlVMTCwgaSlcXG4gNTE4OlxcdCNkZWZpbmUgcndsb2NrX2FjcXVpcmVfcmVhZChsLCBzLCB0LCBpKVxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gNTE5OlxcdGRvIHtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIDUyMDpcXHRcXHRpZiAocmVhZF9sb2NrX2lzX3JlY3Vyc2l2ZSgpKVxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gNTIxOlxcdFxcdFxcdGxvY2tfYWNxdWlyZV9zaGFyZWRfcmVjdXJzaXZlKGwsIHMsIHQsIE5VTEwsIGkpO1xcdFxcXFxcXG4gNTIyOlxcdFxcdGVsc2VcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIDUyMzpcXHRcXHRcXHRsb2NrX2FjcXVpcmVfc2hhcmVkKGwsIHMsIHQsIE5VTEwsIGkpO1xcdFxcdFxcdFxcXFxcXG4gNTI0OlxcdH0gd2hpbGUgKDApXFxuIDUyNTpcXHRcXG4gNTI2OlxcdCNkZWZpbmUgcndsb2NrX3JlbGVhc2UobCwgaSlcXHRcXHRcXHRsb2NrX3JlbGVhc2UobCwgaSlcXG4gNTI3OlxcdFxcbiA1Mjg6XFx0I2RlZmluZSBzZXFjb3VudF9hY3F1aXJlKGwsIHMsIHQsIGkpXFx0XFx0bG9ja19hY3F1aXJlX2V4Y2x1c2l2ZShsLCBzLCB0LCBOVUxMLCBpKVxcbiA1Mjk6XFx0I2RlZmluZSBzZXFjb3VudF9hY3F1aXJlX3JlYWQobCwgcywgdCwgaSlcXHRsb2NrX2FjcXVpcmVfc2hhcmVkX3JlY3Vyc2l2ZShsLCBzLCB0LCBOVUxMLCBpKVxcbiA1MzA6XFx0I2RlZmluZSBzZXFjb3VudF9yZWxlYXNlKGwsIGkpXFx0XFx0XFx0bG9ja19yZWxlYXNlKGwsIGkpXFxuIDUzMTpcXHRcXG4gNTMyOlxcdCNkZWZpbmUgbXV0ZXhfYWNxdWlyZShsLCBzLCB0LCBpKVxcdFxcdGxvY2tfYWNxdWlyZV9leGNsdXNpdmUobCwgcywgdCwgTlVMTCwgaSlcXG4gNTMzOlxcdCNkZWZpbmUgbXV0ZXhfYWNxdWlyZV9uZXN0KGwsIHMsIHQsIG4sIGkpXFx0bG9ja19hY3F1aXJlX2V4Y2x1c2l2ZShsLCBzLCB0LCBuLCBpKVxcbiA1MzQ6XFx0I2RlZmluZSBtdXRleF9yZWxlYXNlKGwsIGkpXFx0XFx0XFx0bG9ja19yZWxlYXNlKGwsIGkpXFxuIDUzNTpcXHRcXG4gNTM2OlxcdCNkZWZpbmUgcndzZW1fYWNxdWlyZShsLCBzLCB0LCBpKVxcdFxcdGxvY2tfYWNxdWlyZV9leGNsdXNpdmUobCwgcywgdCwgTlVMTCwgaSlcXG4gNTM3OlxcdCNkZWZpbmUgcndzZW1fYWNxdWlyZV9uZXN0KGwsIHMsIHQsIG4sIGkpXFx0bG9ja19hY3F1aXJlX2V4Y2x1c2l2ZShsLCBzLCB0LCBuLCBpKVxcbiA1Mzg6XFx0I2RlZmluZSByd3NlbV9hY3F1aXJlX3JlYWQobCwgcywgdCwgaSlcXHRcXHRsb2NrX2FjcXVpcmVfc2hhcmVkKGwsIHMsIHQsIE5VTEwsIGkpXFxuIDUzOTpcXHQjZGVmaW5lIHJ3c2VtX3JlbGVhc2UobCwgaSlcXHRcXHRcXHRsb2NrX3JlbGVhc2UobCwgaSlcXG4gNTQwOlxcdFxcbiA1NDE6XFx0I2RlZmluZSBsb2NrX21hcF9hY3F1aXJlKGwpXFx0XFx0XFx0bG9ja19hY3F1aXJlX2V4Y2x1c2l2ZShsLCAwLCAwLCBOVUxMLCBfVEhJU19JUF8pXFxuIDU0MjpcXHQjZGVmaW5lIGxvY2tfbWFwX2FjcXVpcmVfdHJ5KGwpXFx0XFx0XFx0bG9ja19hY3F1aXJlX2V4Y2x1c2l2ZShsLCAwLCAxLCBOVUxMLCBfVEhJU19JUF8pXFxuIDU0MzpcXHQjZGVmaW5lIGxvY2tfbWFwX2FjcXVpcmVfcmVhZChsKVxcdFxcdGxvY2tfYWNxdWlyZV9zaGFyZWRfcmVjdXJzaXZlKGwsIDAsIDAsIE5VTEwsIF9USElTX0lQXylcXG4gNTQ0OlxcdCNkZWZpbmUgbG9ja19tYXBfYWNxdWlyZV90cnlyZWFkKGwpXFx0XFx0bG9ja19hY3F1aXJlX3NoYXJlZF9yZWN1cnNpdmUobCwgMCwgMSwgTlVMTCwgX1RISVNfSVBfKVxcbiA1NDU6XFx0I2RlZmluZSBsb2NrX21hcF9yZWxlYXNlKGwpXFx0XFx0XFx0bG9ja19yZWxlYXNlKGwsIF9USElTX0lQXylcXG4gNTQ2OlxcdCNkZWZpbmUgbG9ja19tYXBfc3luYyhsKVxcdFxcdFxcdGxvY2tfc3luYyhsLCAwLCAwLCAxLCBOVUxMLCBfVEhJU19JUF8pXFxuIDU0NzpcXHRcXG4gNTQ4OlxcdCNpZmRlZiBDT05GSUdfUFJPVkVfTE9DS0lOR1xcbiA1NDk6XFx0IyBkZWZpbmUgbWlnaHRfbG9jayhsb2NrKVxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDc6MTI6MzQuOTA2NDA0OVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTQ4MjYyNjAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqRGVjb25zdHJ1Y3RpbmcgYSBMb2NrIEFjcXVpc2l0aW9uIENhbGwqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEkgc2VlIGBsb2NrX2FjcXVpcmVfc2hhcmVkYCBpcyBkZWZpbmVkIHVzaW5nIGEgbW9yZSBnZW5lcmFsIGZ1bmN0aW9uIGNhbGw6IGBsb2NrX2FjcXVpcmUobCwgcywgdCwgMSwgMSwgbiwgaSlgLiBOb3RoaW5nIHN1cnByaXNpbmcgdGhlcmUgLSBtYWtlcyBzZW5zZSB0byBoYXZlIGEgY29yZSBmdW5jdGlvbi4gQnV0IGhvbGQgb24uLi4gaWYgYENPTkZJR19MT0NLREVQYCBpcyBkaXNhYmxlZCwgd2hhdCAqZXhhY3RseSogZG9lcyBgbG9ja19hY3F1aXJlYCAqYmVjb21lKj8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0gYmVoYXZlcyB1bmRlciBkaWZmZXJlbnQgY29tcGlsYXRpb24gc2NlbmFyaW9zLiBJcyBpdCBhIHNpbXBsZSBpbmxpbmUgZnVuY3Rpb24sIG9yIGRvZXMgaXQgcmVzb2x2ZSB0byBzb21ldGhpbmcgbW9yZSBwcmltaXRpdmU/IEFyZSBhbnkgZGVidWdnaW5nIGFpZHMgZGlzYWJsZWQ/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgdG8gaGF2ZSBhbnkgY29uZmlkZW5jZSBpbiBob3cgdGhpcyBsb2NrIGlzIGJlaGF2aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTczMiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDc6MTI6MzguMDU0NjcxODUxWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3ODYzODE2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIjZGVmaW5lIGxvY2tfYWNxdWlyZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL2xpbnV4L2xvY2tkZXAuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2xvY2tkZXAuaD00NDI9ZG8ge1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4tLVxcbmluY2x1ZGUvbGludXgvbG9ja2RlcC5oLTQ2NC0jZGVmaW5lIGxvY2tfY29udGVuZGVkKGxvY2tkZXBfbWFwLCBpcCkgZG8ge30gd2hpbGUgKDApXFxuaW5jbHVkZS9saW51eC9sb2NrZGVwLmg6NDY1OiNkZWZpbmUgbG9ja19hY3F1aXJlZChsb2NrZGVwX21hcCwgaXApIGRvIHt9IHdoaWxlICgwKVxcbmluY2x1ZGUvbGludXgvbG9ja2RlcC5oLTQ2Ni1cXG4tLVxcbmluY2x1ZGUvbGludXgvbG9ja2RlcC5oPTQ5MT1leHRlcm4gYm9vbCByZWFkX2xvY2tfaXNfcmVjdXJzaXZlKHZvaWQpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9sb2NrZGVwLmgtNTA4LVxcbmluY2x1ZGUvbGludXgvbG9ja2RlcC5oOjUwOTojZGVmaW5lIGxvY2tfYWNxdWlyZV9leGNsdXNpdmUobCwgcywgdCwgbiwgaSlcXHRcXHRsb2NrX2FjcXVpcmUobCwgcywgdCwgMCwgMSwgbiwgaSlcXG5pbmNsdWRlL2xpbnV4L2xvY2tkZXAuaDo1MTA6I2RlZmluZSBsb2NrX2FjcXVpcmVfc2hhcmVkKGwsIHMsIHQsIG4sIGkpXFx0XFx0bG9ja19hY3F1aXJlKGwsIHMsIHQsIDEsIDEsIG4sIGkpXFxuaW5jbHVkZS9saW51eC9sb2NrZGVwLmg6NTExOiNkZWZpbmUgbG9ja19hY3F1aXJlX3NoYXJlZF9yZWN1cnNpdmUobCwgcywgdCwgbiwgaSlcXHRsb2NrX2FjcXVpcmUobCwgcywgdCwgMiwgMSwgbiwgaSlcXG5pbmNsdWRlL2xpbnV4L2xvY2tkZXAuaC01MTItXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA3OjEyOjM4LjEzMzMxNjA1WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4MTExNDYxNzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqVHJhY2luZyBgbG9ja19hY3F1aXJlYCdzIE9yaWdpbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgYGxvY2tfYWNxdWlyZWAgZnVuY3Rpb24gYmV0dGVyLiBXaGVyZSBleGFjdGx5IGlzIGl0IGRlZmluZWQgd2l0aGluIHRoZSBjb2RlYmFzZT8gSSBuZWVkIHRvIHRyYWNlIGl0cyBvcmlnaW4gdG8gdW5kZXJzdGFuZCBpdHMgaW1wbGVtZW50YXRpb24gZGV0YWlscyBhbmQgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBmb3IgY29uY3VycmVuY3kuIElzIGl0IGEgc3lzdGVtIGNhbGwsIGEga2VybmVsIGZ1bmN0aW9uLCBhIHVzZXJzcGFjZSBsaWJyYXJ5LCBvciBwZXJoYXBzIGEgY3VzdG9tIGltcGxlbWVudGF0aW9uIHdpdGhpbiB0aGlzIHNwZWNpZmljIHByb2plY3Q/IE15IGltbWVkaWF0ZSBhcHByb2FjaCB3b3VsZCBiZSB0byB1c2Ugd2hhdGV2ZXIgdG9vbHMgYXJlIGF2YWlsYWJsZTogZ3JlcCwgZmluZCwgdGhlIHN5bWJvbCBicm93c2VyIGluIG15IElERSwgb3IgZXZlbiBhIGJhc2ljIHNvdXJjZSBjb2RlIHNlYXJjaC4gSSdtIGxvb2tpbmcgZm9yIHRoZSBkZWZpbml0aXZlIGRlY2xhcmF0aW9uIOKAkyB0aGUgaGVhZGVyIGZpbGUsIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgd2hlcmUgaXQncyBkZWZpbmVkIGFuZCB3aGF0IHRoZSBzdXJyb3VuZGluZyBjb250ZXh0IHNheXMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGl0cyBwcm90b3R5cGUgYXMgd2VsbCwgZm9yIHdoYXQgYXJndW1lbnRzIGRvZXMgaXQgZXhwZWN0LCBhbmQgd2hhdCBkb2VzIGl0IHJldHVybi4gVGhlIG5leHQgc3RlcCB3aWxsIGJlIHRvIGNoZWNrIGZvciBhbnkgcmVsZXZhbnQgaGVhZGVyIGZpbGVzIG9yIGluY2x1ZGUgcGF0aHMgdG8gbG9jYXRlIHRoZSBkZWZpbml0aW9uLiBVbHRpbWF0ZWx5LCBJIG5lZWQgdGhlIGNvbmNyZXRlIGNvZGUgdG8gYW5hbHl6ZSBpdHMgYmVoYXZpb3IuIEkgYW50aWNpcGF0ZSBuZWVkaW5nIHRvIHVuZGVyc3RhbmQgYW55IHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzIHVzZWQgaW50ZXJuYWxseSBhbmQgaG93IGl0IGludGVncmF0ZXMgd2l0aCB0aGUgb3ZlcmFsbCBsb2NraW5nIHNjaGVtZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIzMTEsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNzoxMjo0MS45NDQ0NjUyOFoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIxMzM5NDU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlZmluZSBsb2NrX2FjcXVpcmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9sb2NrZGVwLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9sb2NrZGVwLmg9MzMyPXN0YXRpYyBpbmxpbmUgdm9pZCBsb2NrZGVwX3NldF9zZWxmdGVzdF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaylcXG4tLVxcbmluY2x1ZGUvbGludXgvbG9ja2RlcC5oLTMzNS1cXG5pbmNsdWRlL2xpbnV4L2xvY2tkZXAuaDozMzY6IyBkZWZpbmUgbG9ja19hY3F1aXJlKGwsIHMsIHQsIHIsIGMsIG4sIGkpXFx0ZG8geyB9IHdoaWxlICgwKVxcbmluY2x1ZGUvbGludXgvbG9ja2RlcC5oLTMzNy0jIGRlZmluZSBsb2NrX3JlbGVhc2UobCwgaSlcXHRcXHRcXHRkbyB7IH0gd2hpbGUgKDApXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xvY2tkZXAuaD00NDI9ZG8ge1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4tLVxcbmluY2x1ZGUvbGludXgvbG9ja2RlcC5oLTQ2NC0jZGVmaW5lIGxvY2tfY29udGVuZGVkKGxvY2tkZXBfbWFwLCBpcCkgZG8ge30gd2hpbGUgKDApXFxuaW5jbHVkZS9saW51eC9sb2NrZGVwLmg6NDY1OiNkZWZpbmUgbG9ja19hY3F1aXJlZChsb2NrZGVwX21hcCwgaXApIGRvIHt9IHdoaWxlICgwKVxcbmluY2x1ZGUvbGludXgvbG9ja2RlcC5oLTQ2Ni1cXG4tLVxcbmluY2x1ZGUvbGludXgvbG9ja2RlcC5oPTQ5MT1leHRlcm4gYm9vbCByZWFkX2xvY2tfaXNfcmVjdXJzaXZlKHZvaWQpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9sb2NrZGVwLmgtNTA4LVxcbmluY2x1ZGUvbGludXgvbG9ja2RlcC5oOjUwOTojZGVmaW5lIGxvY2tfYWNxdWlyZV9leGNsdXNpdmUobCwgcywgdCwgbiwgaSlcXHRcXHRsb2NrX2FjcXVpcmUobCwgcywgdCwgMCwgMSwgbiwgaSlcXG5pbmNsdWRlL2xpbnV4L2xvY2tkZXAuaDo1MTA6I2RlZmluZSBsb2NrX2FjcXVpcmVfc2hhcmVkKGwsIHMsIHQsIG4sIGkpXFx0XFx0bG9ja19hY3F1aXJlKGwsIHMsIHQsIDEsIDEsIG4sIGkpXFxuaW5jbHVkZS9saW51eC9sb2NrZGVwLmg6NTExOiNkZWZpbmUgbG9ja19hY3F1aXJlX3NoYXJlZF9yZWN1cnNpdmUobCwgcywgdCwgbiwgaSlcXHRsb2NrX2FjcXVpcmUobCwgcywgdCwgMiwgMSwgbiwgaSlcXG5pbmNsdWRlL2xpbnV4L2xvY2tkZXAuaC01MTItXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA3OjEyOjQyLjA2NTgxMjA3OFoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NzUzOTU5OTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHRoZSBQcm9wb3NlZCBQYXRjaCoqXG5cbk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCwgbXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0aGF0IHRoZSBjaGFuZ2VzIHRvIGByd3NlbV9hY3F1aXJlX3JlYWRgIHNlZW1lZCBwdXJlbHkgcmVsYXRlZCB0byBsb2NrZGVwIGFubm90YXRpb25zLCBnaXZlbiB0aGUgYENPTkZJR19MT0NLREVQYCBjb250ZXh0LiBBbmQgdGhlIGZhY3QgdGhhdCB3aGVuIGxvY2tkZXAgaXMgZGlzYWJsZWQsIGBsb2NrX2FjcXVpcmVgIGlzIGEgbm8tb3AgbWFjcm8sIHRoYXQgcmVpbmZvcmNlZCB0aGlzLlxuXG5UaGUgY29kZSBzbmlwcGV0cyBoaWdobGlnaHRlZCBhIHJlZmFjdG9yaW5nIHRvIHJlcGxhY2UgYSBkaXJlY3QgZmxhZyBjaGVjayB3aXRoIGEgbG9jYWwgYG5vd2FpdGAgdmFyaWFibGUuIFRoZSBrZXkgY2hhbmdlIHRoYXQgY2F1Z2h0IG15IGV5ZSB3YXMgcGFzc2luZyB0aGlzIGBub3dhaXRgIHZhcmlhYmxlIHRvIGByd3NlbV9hY3F1aXJlX3JlYWRgLiBUaGlzIGxvb2tlZCB0byBiZSBhYm91dCBjb252ZXlpbmcgd2hldGhlciBhIFwidHJ5bG9ja1wiIHdhcyBhdHRlbXB0ZWQsIGEgY3JpdGljYWwgcGllY2Ugb2YgaW5mbyBmb3IgbG9ja2RlcCdzIHRyYWNraW5nLlxuXG5UaGVuLCBJIHdlbnQgZGVlcGVyLiBJIHZlcmlmaWVkIHRoYXQgYHJ3c2VtX2FjcXVpcmVfcmVhZGAgaW5kZWVkIG1hcHMgdG8gYSBzZXJpZXMgb2YgYGxvY2tfYWNxdWlyZWAgY2FsbHMuIEFuZCB0aGUgcGFyYW1ldGVyIGJlaW5nIG1vZGlmaWVkIGlzIHRoZSBcInRyeWxvY2tcIiBwYXJhbWV0ZXIgb2YgdGhhdCBgbG9ja19hY3F1aXJlYCBjaGFpbi4gSWYgYG5vd2FpdGAgaXMgdHJ1ZSwgYSB0cnlsb2NrIGlzIGluZGljYXRlZCB0byBsb2NrZGVwOyBvdGhlcndpc2UgaXQncyBhIHJlZ3VsYXIgbG9jay5cblxuVGhlIGltcG9ydGFudCBwb2ludCBpcyB0aGlzIHBhcmFtZXRlciBjaGFuZ2Ugb25seSBpbXBhY3RzIGhvdyBsb2NrZGVwIG1vbml0b3JzIHRoZSBsb2NraW5nIGJlaGF2aW9yLiBUaGUgKmFjdHVhbCogZXhlY3V0aW9uIHBhdGgsIHRoZSAqYWN0dWFsKiBsb2NraW5nIGJlaGF2aW9yLCBpc24ndCBtb2RpZmllZC4gYGJsa190cnlfZW50ZXJfcXVldWVgIGlzbid0IHRvdWNoZWQsIG5vciBhcmUgYW55IG9mIHRoZSB1bmRlcmx5aW5nIGxvY2tpbmcgcHJpbWl0aXZlcyBkaXJlY3RseSBjaGFuZ2VkIGJ5IGFueSBvZiB0aGlzLlxuXG5UaGVyZWZvcmUsIHRoaXMgcGF0Y2ggYm9pbHMgZG93biB0byB0aGVzZSBtb2RpZmljYXRpb25zOlxuMS4gIEV4dHJhY3RpbmcgdGhlIGBSRVFfTk9XQUlUYCBmbGFnIGludG8gYSBgbm93YWl0YCBib29sZWFuIGZvciByZWFkYWJpbGl0eS5cbjIuICBVc2luZyB0aGUgYG5vd2FpdGAgYm9vbGVhbiB2YXJpYWJsZSBpbiBjb25kaXRpb25hbCBzdGF0ZW1lbnRzLlxuMy4gIFBhc3NpbmcgYG5vd2FpdGAgdG8gYHJ3c2VtX2FjcXVpcmVfcmVhZGAgd2hpY2gsIGluIHR1cm4sIGltcGFjdHMgbG9ja2RlcCBhbm5vdGF0aW9uLlxuXG5HaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBjaGFuZ2VzLCB0aGlzIHBhdGNoIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgZnVuY3Rpb25hbCBiZWhhdmlvciBpbnRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgcHJpb3JpdGl6ZWQgZm9yIGZ1enppbmcuIFRoZSBjaGFuZ2VzIGFyZSBhYm91dCB0aGUgbG9ja2RlcCB0cmFja2luZywgbm90IGFib3V0IGFueSBmdW5jdGlvbmFsIG1vZGlmaWNhdGlvbi4gSSdsbCBmbGFnIHRoaXMgYXMgV29ydGhGdXp6aW5nPWZhbHNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzA0MCwiT3V0cHV0VG9rZW5zIjoxMTMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5OTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDc6MTI6NTEuODE5Nzc1MTA1WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzU4ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSByZWZhY3RvcnMgdGhlIGV4dHJhY3Rpb24gb2YgdGhlICdub3dhaXQnIGZsYWcgaW50byBhIGxvY2FsIHZhcmlhYmxlIGFuZCBwYXNzZXMgaXQgYXMgdGhlICd0cnlsb2NrJyBwYXJhbWV0ZXIgdG8gcndzZW1fYWNxdWlyZV9yZWFkKCkuIFNpbmNlIHJ3c2VtX2FjcXVpcmVfcmVhZCgpIGlzIHB1cmVseSBhIGxvY2tkZXAgYW5ub3RhdGlvbiBtYWNybyB0aGF0IGV4cGFuZHMgdG8gbm90aGluZyB3aGVuIENPTkZJR19MT0NLREVQIGlzIGRpc2FibGVkLCB0aGlzIHBhdGNoIGRvZXMgbm90IGZ1bmN0aW9uYWxseSBhbHRlciB0aGUgZXhlY3V0aW9uIGZsb3cgb2YgdGhlIGtlcm5lbCBhbmQgaXMgbm90IHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IHJlZmFjdG9ycyB0aGUgZXh0cmFjdGlvbiBvZiB0aGUgJ25vd2FpdCcgZmxhZyBpbnRvIGEgbG9jYWwgdmFyaWFibGUgYW5kIHBhc3NlcyBpdCBhcyB0aGUgJ3RyeWxvY2snIHBhcmFtZXRlciB0byByd3NlbV9hY3F1aXJlX3JlYWQoKS4gU2luY2UgcndzZW1fYWNxdWlyZV9yZWFkKCkgaXMgcHVyZWx5IGEgbG9ja2RlcCBhbm5vdGF0aW9uIG1hY3JvIHRoYXQgZXhwYW5kcyB0byBub3RoaW5nIHdoZW4gQ09ORklHX0xPQ0tERVAgaXMgZGlzYWJsZWQsIHRoaXMgcGF0Y2ggZG9lcyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIHRoZSBleGVjdXRpb24gZmxvdyBvZiB0aGUga2VybmVsIGFuZCBpcyBub3Qgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowfg2fr[1] Phase: Running StartedAt: 2026-08-01 07:13:04 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfg2fr[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-08-01 07:13:04 +0000 UTC FinishedAt: 2026-08-01 07:13:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:code,Default:nil,Value:*1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*1,}