LyoKICogV2luZU1pbmUKICogU2xvdmVuaWFuIExhbmd1YWdlIFN1cHBvcnQKICoKICogQ29weXJpZ2h0IDIwMDMgUm9rIE1hbmRlbGpjIDxyb2subWFuZGVsamNAZ2ltYi5vcmc+CiAqCiAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQogKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogKgogKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQQogKi8KCkxBTkdVQUdFIExBTkdfU0xPVkVOSUFOLCBTVUJMQU5HX0RFRkFVTFQKClNUUklOR1RBQkxFIHsKICAgICBJRFNfQVBQTkFNRSwgIldpbmVNaW5lIgogICAgIElEU19OT0JPRFksICAiTm9ib2R5Igp9CgpNRU5VX1dJTkVNSU5FIE1FTlUgRElTQ0FSREFCTEUKewogICAgUE9QVVAgIiZNb55ub3N0aSIgewogICAgICAgIE1FTlVJVEVNICImTm92YSBpZ3JhXHRGMiIsICAgICAgICAgICBJRE1fTkVXCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIiZWcHJhmmFqaSIsIElETV9NQVJLUQogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICImWmHoZXRuaWsiLCAgICAgIElETV9CRUdJTk5FUgogICAgICAgIE1FTlVJVEVNICImTmFwcmVkZW4iLCAgICAgIElETV9BRFZBTkNFRAogICAgICAgIE1FTlVJVEVNICImU3Ryb2tvdm5qYWsiLCAgICAgICAgSURNX0VYUEVSVAogICAgICAgIE1FTlVJVEVNICImUG9sanVibm8iLCAgICAgICAgSURNX0NVU1RPTQogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICJJeiZob2RcdEFsdCtYIiwgICAgICAgICAgSURNX0VYSVQKICAgIH0KICAgIFBPUFVQICImSW5mbyIgewogICAgICAgIE1FTlVJVEVNICImTmFqYm9sapppIOhhc2kiLCAgICBJRE1fVElNRVMKICAgICAgICBNRU5VSVRFTSAiJk8gcHJvZ3JhbXUiLCAgICAgICAgIElETV9BQk9VVAogICAgfQp9CgpETEdfVElNRVMgRElBTE9HIERJU0NBUkRBQkxFIDAsIDAsIDE2MCwgODAKU1RZTEUgIERTX01PREFMRlJBTUUgfCBEU18zRExPT0sgfAogICAgV1NfVklTSUJMRSB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VIHwgV1NfUE9QVVAKQ0FQVElPTiAiTmFqYm9sapppIOhhc2kiCnsKICAgIEdST1VQQk9YICAgICAgICAiTmFqYm9sapppIOhhc2kiLCBJRElHTk9SRSwgIDEwLCAgMTAsIDE0MCwgIDQ1CiAgICBMVEVYVCAgICAgICAgICAgIlph6GV0bmlrIiwgICAgICBJRElHTk9SRSwgIDIwLCAgMjAsICA0MCwgICA4CiAgICBMVEVYVCAgICAgICAgICAgIk5hcHJlZGVuIiwgICAgICBJRElHTk9SRSwgIDIwLCAgMzAsICA0MCwgICA4CiAgICBMVEVYVCAgICAgICAgICAgIlN0cm9rb3ZuamFrIiwgICAgICAgIElESUdOT1JFLCAgMjAsICA0MCwgIDQwLCAgIDgKICAgIExURVhUICAgICAgICAgICAiOTk5IiwgICAgICAgICAgSURDX1RJTUUxLCAgNzAsICAyMCwgIDE1LCAgIDgKICAgIExURVhUICAgICAgICAgICAiOTk5IiwgICAgICAgICAgSURDX1RJTUUyLCAgNzAsICAzMCwgIDE1LCAgIDgKICAgIExURVhUICAgICAgICAgICAiOTk5IiwgICAgICAgICAgSURDX1RJTUUzLCAgNzAsICA0MCwgIDE1LCAgIDgKICAgIExURVhUICAgICAgICAgICAiIiwgICAgICAgICAgICAgSURDX05BTUUxLCAgOTAsICAyMCwgIDU1LCAgIDgKICAgIExURVhUICAgICAgICAgICAiIiwgICAgICAgICAgICAgSURDX05BTUUyLCAgOTAsICAzMCwgIDU1LCAgIDgKICAgIExURVhUICAgICAgICAgICAiIiwgICAgICAgICAgICAgSURDX05BTUUzLCAgOTAsICA0MCwgIDU1LCAgIDgKICAgIERFRlBVU0hCVVRUT04gICAiViByZWR1IiwgICAgICAgICAgICAgICAgSURPSywgIDU1LCAgNjAsICA1MCwgIDE1Cn0KCkRMR19DT05HUkFUUyBESUFMT0cgRElTQ0FSREFCTEUgIDAsIDAsIDE2MCwgNjAKU1RZTEUgIERTX01PREFMRlJBTUUgfCBEU18zRExPT0sgfAogICAgV1NfVklTSUJMRSB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VIHwgV1NfUE9QVVAKQ0FQVElPTiAiyGVzdGl0YW1vISIKewogICAgTFRFWFQgICAgICAgICAgICJWbmVzaXRlIHN2b2plIGltZSIsIElESUdOT1JFLCAgMTAsICAxMCwgMTUwLCAgMTAKICAgIEVESVRURVhUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSURDX0VESVROQU1FLCAgMjUsICAyMCwgMTEwLCAgMTIKICAgIERFRlBVU0hCVVRUT04gICAiViByZWR1IiwgICAgICAgICAgICAgICAgICAgICAgICAgSURPSywgIDYwLCAgNDAsICA0MCwgIDE1Cn0KCkRMR19DVVNUT00gRElBTE9HIERJU0NBUkRBQkxFICAwLCAwLCAxMDAsIDEwMApTVFlMRSAgRFNfTU9EQUxGUkFNRSB8IERTXzNETE9PSyB8CiAgICBXU19WSVNJQkxFIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUgfCBXU19QT1BVUApDQVBUSU9OICJQb2xqdWJuYSBpZ3JhIgp7CiAgICBMVEVYVCAgICAgICAgICAgIlZyc3RpY2UiLCAgIElESUdOT1JFLCAgIDUsICAgNSwgIDMwLCAgMTAKICAgIExURVhUICAgICAgICAgICAiU3RvbHBjaSIsICAgSURJR05PUkUsICAgNSwgIDM1LCAgMzAsICAxMAogICAgTFRFWFQgICAgICAgICAgICJNaW5lIiwgIElESUdOT1JFLCAgIDUsICA2NSwgIDMwLCAgMTAKICAgIEVESVRURVhUICAgICAgICAgICAgICBJRENfRURJVFJPV1MsICAgNSwgIDE1LCAgMjAsICAxMiwgRVNfTlVNQkVSCiAgICBFRElUVEVYVCAgICAgICAgICAgICAgSURDX0VESVRDT0xTLCAgIDUsICA0NSwgIDIwLCAgMTIsIEVTX05VTUJFUgogICAgRURJVFRFWFQgICAgICAgICAgICAgSURDX0VESVRNSU5FUywgICA1LCAgNzUsICAyMCwgIDEyLCBFU19OVU1CRVIKICAgIERFRlBVU0hCVVRUT04gICAiViByZWR1IiwgICAgIElET0ssICAgICAgNDAsICAzMCwgIDUwLCAgMTUKICAgIFBVU0hCVVRUT04gICAgICAiUHJla2xp6GkiLCBJRENBTkNFTCwgIDQwLCAgNTAsICA1MCwgIDE1Cn0KCkRMR19BQk9VVCBESUFMT0cgRElTQ0FSREFCTEUgIDAsIDAsIDE2MCwgODAKU1RZTEUgIERTX01PREFMRlJBTUUgfCBEU18zRExPT0sgfAogICAgV1NfVklTSUJMRSB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VIHwgV1NfUE9QVVAKQ0FQVElPTiAiTyBwcm9ncmFtdSIKewogICAgTFRFWFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIldpbmVtaW5lIiwgSURJR05PUkUsICAxMCwgIDEwLCAgNTAsICAxMAogICAgTFRFWFQgICAgICAgICAiQ29weXJpZ2h0IDIwMDAsIEpvc2h1YSBUaGllbGVuIiwgSURJR05PUkUsICAzNSwgIDI1LCAxMTUsICAxMAogICAgTFRFWFQgICAgICAgICAgICAgICAgICJ1bmRlciB0aGUgTEdQTCIsIElESUdOT1JFLCAgMzUsICAzNSwgMTE1LCAgMTAKICAgIElDT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJXSU5FTUlORSIsIElESUdOT1JFLCAgMTAsICAyNSwgIDIwLCAgMjAKICAgIERFRlBVU0hCVVRUT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICJPSyIsIElET0ssICAgICAgNTAsICA2MCwgIDYwLCAgMTUKfQo=