LyoKICogVHVya2lzaCBSZXNvdXJjZXMgZm9yIFdvcmRwYWQKICoKICogQ29weXJpZ2h0IDIwMDYgRmF0aWggQf79Y/0gPGZhc2ljaUBsaW51eC1zZXZlbmxlci5vcmc+CiAqCiAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQogKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogKgogKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQQogKi8KCiNpbmNsdWRlICJ3b3JkcGFkLmgiCgpMQU5HVUFHRSBMQU5HX1RVUktJU0gsIFNVQkxBTkdfREVGQVVMVAoKSURNX01BSU5NRU5VIE1FTlUgRElTQ0FSREFCTEUKQkVHSU4KICAgIFBPUFVQICImRG9zeWEiCiAgICBCRUdJTgogICAgICAgIE1FTlVJVEVNICImWWVuaS4uLlx0Q3RybCtOIiwgICAgICBJRF9GSUxFX05FVwogICAgICAgIE1FTlVJVEVNICImQecuLi5cdEN0cmwrTyIsICAgICAgICBJRF9GSUxFX09QRU4KICAgICAgICBNRU5VSVRFTSAiJktheWRldFx0Q3RybCtTIiwgICAgICAgSURfRklMRV9TQVZFCiAgICAgICAgTUVOVUlURU0gIiZGYXJrbP0gS2F5ZGV0Li4uIiwgICAgIElEX0ZJTEVfU0FWRUFTCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIiZQcmludC4uLlx0Q3RybCtQIiwgICAgIElEX1BSSU5UCiAgICAgICAgTUVOVUlURU0gIlByaW50IHByZXZpZSZ3Li4uIiwgICAgIElEX1BSRVZJRVcKICAgICAgICBNRU5VSVRFTSAiUGFnJmUgc2V0dXAuLi4iLCAgICAgICAgSURfUFJJTlRTRVRVUAogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICImx/1rIiwgICAgICAgICAgSURfRklMRV9FWElUCiAgICBFTkQKICAgIFBPUFVQICImRPx6ZW4iCiAgICBCRUdJTgogICAgICAgIE1FTlVJVEVNICImR2VyaSBBbFx0Q3RybCtaIiwgICAgICAgICAgICBJRF9FRElUX1VORE8KICAgICAgICBNRU5VSVRFTSAiJllpbmVsZVx0Q3RybCtZIiwgICAgICAgICAgICAgSURfRURJVF9SRURPCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIktlJnNcdEN0cmwrWCIsICAgICAgICAgICAgICAgIElEX0VESVRfQ1VUCiAgICAgICAgTUVOVUlURU0gIiZLb3B5YWxhXHRDdHJsK0MiLCAgICAgICAgICAgIElEX0VESVRfQ09QWQogICAgICAgIE1FTlVJVEVNICJZYSZw/f50/XJcdEN0cmwrViIsICAgICAgICAgICBJRF9FRElUX1BBU1RFCiAgICAgICAgTUVOVUlURU0gIiZTaWxcdERlbCIsICAgICAgICAgICAgICAgICAgIElEX0VESVRfQ0xFQVIKICAgICAgICBNRU5VSVRFTSAiJlT8bfxu/CBzZedcdEN0cmwrQSIsICAgICAgICAgSURfRURJVF9TRUxFQ1RBTEwKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiJkZpbmQuLi5cdEN0cmwrRiIsICAgICAgICAgICAgSURfRklORAogICAgICAgIE1FTlVJVEVNICJGaW5kICZuZXh0XHRGMyIsICAgICAgICAgICAgICBJRF9GSU5EX05FWFQKICAgICAgICBNRU5VSVRFTSAiJlJlcGxhY2UuLi5cdEN0cmwrSCIsICAgICAgICAgSURfUkVQTEFDRQogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICJTYWx0LSZva3VudXIiLCAgICAgICAgICAgICAgICBJRF9FRElUX1JFQURPTkxZCiAgICAgICAgTUVOVUlURU0gIiZEZfBp/m1p/iIsICAgICAgICAgICAgICAgICAgIElEX0VESVRfTU9ESUZJRUQKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBQT1BVUCAiRCZp8GVybGVyaSIKICAgICAgICBCRUdJTgogICAgICAgICAgICBNRU5VSVRFTSAiU2XnaW0gJmJpbGdpc2kiLCAgICAgICAgICAgICAgSURfRURJVF9TRUxFQ1RJT05JTkZPCiAgICAgICAgICAgIE1FTlVJVEVNICJLYXJha3RlciBiaSbnaW1pIiwgICAgICAgICAgICBJRF9FRElUX0NIQVJGT1JNQVQKICAgICAgICAgICAgTUVOVUlURU0gIibWbnRhbv1tbP0ga2FyLiBiaedpbWkiLCAgICAgIElEX0VESVRfREVGQ0hBUkZPUk1BVAogICAgICAgICAgICBNRU5VSVRFTSAiUGFyYWdyYSZmIGJp52ltaSIsICAgICAgICAgICAgSURfRURJVF9QQVJBRk9STUFUCiAgICAgICAgICAgIE1FTlVJVEVNICImTWV0bmkgYWwiLCAgICAgICAgICAgICAgICAgICBJRF9FRElUX0dFVFRFWFQKICAgICAgICBFTkQKICAgIEVORAogICAgUE9QVVAgIiZWaWV3IgogICAgQkVHSU4KICAgICAgICBNRU5VSVRFTSAiJlRvb2xiYXIiLCAgICAgICAgSURfVE9HR0xFX1RPT0xCQVIKICAgICAgICBNRU5VSVRFTSAiJkZvcm1hdGJhciIsICAgICAgSURfVE9HR0xFX0ZPUk1BVEJBUgogICAgICAgIE1FTlVJVEVNICImUnVsZXIiLCAgICAgICAgICBJRF9UT0dHTEVfUlVMRVIKICAgICAgICBNRU5VSVRFTSAiJlN0YXR1c2JhciIsICAgICAgSURfVE9HR0xFX1NUQVRVU0JBUgogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICImT3B0aW9ucy4uLiIsICAgICBJRF9WSUVXUFJPUEVSVElFUwogICAgRU5ECiAgICBQT1BVUCAiJkluc2VydCIKICAgIEJFR0lOCiAgICAgICAgTUVOVUlURU0gIiZEYXRlIGFuZCB0aW1lLi4uIiwgICAgICAgICAgICBJRF9EQVRFVElNRQogICAgRU5ECiAgICBQT1BVUCAiJkJp52ltIgogICAgQkVHSU4KICAgICAgICBNRU5VSVRFTSAiJkZvbnQuLi4iLCAgICAgICAgICAgICAgICAgICAgIElEX0ZPTlRTRVRUSU5HUwogICAgICAgIE1FTlVJVEVNICImQnVsbGV0IHBvaW50cyIgICAgICAgICAgICAgICAgSURfQlVMTEVUCiAgICAgICAgTUVOVUlURU0gIiZQYXJhZ3JhcGguLi4iICAgICAgICAgICAgICAgICBJRF9QQVJBRk9STUFUCiAgICAgICAgTUVOVUlURU0gIiZUYWJzLi4uIiAgICAgICAgICAgICAgICAgICAgICBJRF9UQUJTVE9QUwogICAgICAgIFBPUFVQICImQXJrYXBsYW4iCiAgICAgICAgQkVHSU4KICAgICAgICAgICAgTUVOVUlURU0gIlMmaXN0ZW1cdEN0cmwrMSIsICAgICAgICAgSURfQkFDS18xCiAgICAgICAgICAgIE1FTlVJVEVNICImU2Fy/W10/XJha1x0Q3RybCsyIiwgICAgIElEX0JBQ0tfMgogICAgICAgIEVORAogICAgRU5ECiAgICBQT1BVUCAiJkhlbHAiCiAgICBCRUdJTgogICAgICAgIE1FTlVJVEVNICImQWJvdXQgV2luZSBXb3JkcGFkIiAgICAgICBJRF9BQk9VVAogICAgRU5ECkVORAoKSURNX1BPUFVQIE1FTlUgRElTQ0FSREFCTEUKQkVHSU4KICAgIFBPUFVQICIiCiAgICBCRUdJTgogICAgICAgIE1FTlVJVEVNICJLZSZzIiwgICAgICAgICAgICAgICAgIElEX0VESVRfQ1VUCiAgICAgICAgTUVOVUlURU0gIiZLb3B5YWxhIiwgICAgICAgICAgICAgSURfRURJVF9DT1BZCiAgICAgICAgTUVOVUlURU0gIllhJnD9/nT9ciIsICAgICAgICAgICAgSURfRURJVF9QQVNURQogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICImQnVsbGV0IHBvaW50cyIsICAgICAgIElEX0JVTExFVAogICAgICAgIE1FTlVJVEVNICImUGFyYWdyYXBoLi4uIiwgICAgICAgIElEX1BBUkFGT1JNQVQKICAgIEVORApFTkQKCklETV9DT0xPUl9QT1BVUCBNRU5VIERJU0NBUkRBQkxFCkJFR0lOCiAgICBQT1BVUCAiIgogICAgQkVHSU4KICAgICAgICBNRU5VSVRFTSAiU2l5YWgiICAgICAgICBJRF9DT0xPUl9CTEFDSwogICAgICAgIE1FTlVJVEVNICJLb3l1IEv9cm39ev0iIElEX0NPTE9SX01BUk9PTgogICAgICAgIE1FTlVJVEVNICJZZf5pbCIgICAgICAgIElEX0NPTE9SX0dSRUVOCiAgICAgICAgTUVOVUlURU0gIktveXUgU2Fy/SIgICAgSURfQ09MT1JfT0xJVkUKICAgICAgICBNRU5VSVRFTSAiS295dSBNYXZpIiAgICBJRF9DT0xPUl9OQVZZCiAgICAgICAgTUVOVUlURU0gIk1vciIgICAgICAgICAgSURfQ09MT1JfUFVSUExFCiAgICAgICAgTUVOVUlURU0gIkRlbml6IE1hdmlzaSIgSURfQ09MT1JfVEVBTAogICAgICAgIE1FTlVJVEVNICJHcmkiICAgICAgICAgIElEX0NPTE9SX0dSQVkKICAgICAgICBNRU5VSVRFTSAiR/xt/P4iICAgICAgICBJRF9DT0xPUl9TSUxWRVIKICAgICAgICBNRU5VSVRFTSAiS/1ybf16/SIgICAgICBJRF9DT0xPUl9SRUQKICAgICAgICBNRU5VSVRFTSAiUGFybGFrIFll/mlsIiBJRF9DT0xPUl9MSU1FCiAgICAgICAgTUVOVUlURU0gIlNhcv0iICAgICAgICAgSURfQ09MT1JfWUVMTE9XCiAgICAgICAgTUVOVUlURU0gIk1hdmkiICAgICAgICAgSURfQ09MT1JfQkxVRQogICAgICAgIE1FTlVJVEVNICJQZW1iZSIgICAgICAgIElEX0NPTE9SX0ZVQ0hTSUEKICAgICAgICBNRU5VSVRFTSAiVHVya3VheiIgICAgICBJRF9DT0xPUl9BUVVBCiAgICAgICAgTUVOVUlURU0gIkJleWF6IiAgICAgICAgSURfQ09MT1JfV0hJVEUKICAgICAgICBNRU5VSVRFTSAiQXV0b21hdGljIiAgICBJRF9DT0xPUl9BVVRPTUFUSUMKICAgIEVORApFTkQK