LyoKICogUmVnZWRpdCByZXNvdXJjZXMKICoKICogQ29weXJpZ2h0IDIwMDMgUm9rIE1hbmRlbGpjIDxyb2subWFuZGVsamNAZ2ltYi5vcmc+CiAqCiAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQogKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogKgogKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQogKi8KCkxBTkdVQUdFIExBTkdfU0xPVkVOSUFOLCBTVUJMQU5HX05FVVRSQUwKCi8qCiAqIE1lbnUKICovCgpJRENfUkVHRURJVCBNRU5VIERJU0NBUkRBQkxFCkJFR0lOCiAgICBQT1BVUCAiJkRhdG90ZWthIgogICAgQkVHSU4KICAgICAgICBNRU5VSVRFTSAiSXomaG9kIiwgICAgICAgICAgICAgICAgICAgICAgIElEX1JFR0lTVFJZX0VYSVQKICAgIEVORAogICAgUE9QVVAgIiZQb21v6CIKICAgIEJFR0lOCiAgICAgICAgTUVOVUlURU0gIiZPIC4uLiIsICAgICAgICAgICAgICAgICAgSURfSEVMUF9BQk9VVAogICAgRU5ECkVORAoKSURSX1JFR0VESVRfTUVOVSBNRU5VIERJU0NBUkRBQkxFCkJFR0lOCiAgICBQT1BVUCAiJlJlZ2lzdGVyIgogICAgQkVHSU4KICAgICAgICBNRU5VSVRFTSAiJlV2b3ppIHJlZ2lzdHJza28gZGF0b3Rla28gLi4uIiwgICAgSURfUkVHSVNUUllfSU1QT1JUUkVHSVNUUllGSUxFCgogICAgICAgIE1FTlVJVEVNICImSXp2b3ppIHJlZ2lzdHJza28gZGF0b3Rla28gLi4uIiwgICAgSURfUkVHSVNUUllfRVhQT1JUUkVHSVNUUllGSUxFCgogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICJQJm92ZZ5pIHNlIHogb21yZZ5uaW0gcmVnaXN0cm9tIC4uLiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElEX1JFR0lTVFJZX0NPTk5FQ1RORVRXT1JLUkVHSVNUUlkKICAgICAgICAsIEdSQVlFRAogICAgICAgIE1FTlVJVEVNICJQJnJla2luaSBwb3ZlemF2byB6IG9tcmWebmltIHJlZ2lzdHJvbSAuLi4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJRF9SRUdJU1RSWV9ESVNDT05ORUNUTkVUV09SS1JFR0lTVFJZCiAgICAgICAgLCBHUkFZRUQKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiTmEmdGlzbmlcdEN0cmwrUCIsICAgICAgICAgICAgICBJRF9SRUdJU1RSWV9QUklOVCwgR1JBWUVECiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIkl6JmhvZCIsICAgICAgICAgICAgICAgICAgICAgICBJRF9SRUdJU1RSWV9FWElUCiAgICBFTkQKICAgIFBPUFVQICImVXJlamFuamUiCiAgICBCRUdJTgogICAgICAgIE1FTlVJVEVNICImU3ByZW1lbmkiLCAgICAgICAgICAgICAgICAgICAgIElEX0VESVRfTU9ESUZZCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgUE9QVVAgIiZOb3ZhIgogICAgICAgIEJFR0lOCiAgICAgICAgICAgIE1FTlVJVEVNICImS2xqdegiLCAgICAgICAgICAgICAgICAgICAgICAgIElEX0VESVRfTkVXX0tFWQogICAgICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICAgICAgTUVOVUlURU0gIiZOaXoiLCAgICAgICAgICAgICAgIElEX0VESVRfTkVXX1NUUklOR1ZBTFVFCiAgICAgICAgICAgIE1FTlVJVEVNICImQmluYXJuYSB2cmVkbm9zdCIsICAgICAgICAgICAgICAgSURfRURJVF9ORVdfQklOQVJZVkFMVUUKICAgICAgICAgICAgTUVOVUlURU0gIiZEV09SRCB2cmVkbm9zdCIsICAgICAgICAgICAgICAgIElEX0VESVRfTkVXX0RXT1JEVkFMVUUKICAgICAgICBFTkQKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiSXpicmkmmmlcdERlbCIsICAgICAgICAgICAgICAgIElEX0VESVRfREVMRVRFCiAgICAgICAgTUVOVUlURU0gIlByZWkmbWVudWoiLCAgICAgICAgICAgICAgICAgICAgIElEX0VESVRfUkVOQU1FCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIiZLb3BpcmFqIGltZSBrbGp16GEiLCAgICAgICAgICAgICAgSURfRURJVF9DT1BZS0VZTkFNRQogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICImTmFqZGlcdEN0cmwrRiIsICAgICAgICAgICAgICAgSURfRURJVF9GSU5ELCBHUkFZRUQKICAgICAgICBNRU5VSVRFTSAiTmEmZGFsanVqIGlza2FuamVcdEYzIiwgICAgICAgICAgICAgIElEX0VESVRfRklORE5FWFQsIEdSQVlFRAogICAgRU5ECiAgICBQT1BVUCAiUG9nbCZlZCIKICAgIEJFR0lOCiAgICAgICAgTUVOVUlURU0gIiZWcnN0aWNhIHN0YW5qYSIsICAgICAgICAgICAgICAgICBJRF9WSUVXX1NUQVRVU0JBUgogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICImRGVsaWxuYSDocnRhIiwgICAgICAgICAgICAgICAgICAgICAgSURfVklFV19TUExJVAogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICImT3N2ZZ5pXHRGNSIsICAgICAgICAgICAgICAgIElEX1ZJRVdfUkVGUkVTSAogICAgRU5ECiAgICBQT1BVUCAiJlByaWxqdWJsamVuZSIKICAgIEJFR0lOCiAgICAgICAgTUVOVUlURU0gIiZEb2RhaiBtZWQgUHJpbGp1YmxqZW5lIiwgICAgICAgICAgSURfRkFWT1VSSVRFU19BRERUT0ZBVk9VUklURVMKICAgICAgICAsIEdSQVlFRAogICAgICAgIE1FTlVJVEVNICImT2RzdHJhbmkgaXogUHJpbGp1YmxqZW5paCIsICAgICAgICAgICBJRF9GQVZPVVJJVEVTX1JFTU9WRUZBVk9VUklURQogICAgICAgICwgR1JBWUVECiAgICBFTkQKICAgIFBPUFVQICImUG9tb+giCiAgICBCRUdJTgovKgogKiAgICAgICAgTUVOVUlURU0gIiZUZW1lIHBvbW/oaSIsICAgICAgICAgICAgICAgIElEX0hFTFBfSEVMUFRPUElDUwogKiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAqLwogICAgICAgIE1FTlVJVEVNICImTyBVcmVqZXZhbG5pa3UgcmVnaXN0cmEiLCAgICAgIElEX0hFTFBfQUJPVVQKICAgIEVORApFTkQKCgovKgogKiBEaWFsb2cKICovCgpJRERfQUJPVVRCT1ggRElBTE9HIERJU0NBUkRBQkxFICAyMiwgMTcsIDIzMCwgNzUKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkNBUFRJT04gIk8iCkZPTlQgOCwgIlN5c3RlbSIKQkVHSU4KICAgIElDT04gICAgICAgICAgICBJRElfUkVHRURJVCxJRElfUkVHRURJVCwxNCw5LDE2LDE2CiAgICBMVEVYVCAgICAgICAgICAgIlJlYWN0T1NvdiBVcmVqZXZhbG5payByZWdpc3RyYSwgdmVyemlqYSAxLjAiLElEQ19TVEFUSUMsNDksMTAsMTE5LDgsCiAgICAgICAgICAgICAgICAgICAgU1NfTk9QUkVGSVgKICAgIExURVhUICAgICAgICAgICAiQ29weXJpZ2h0IChDKSAyMDAyIGVraXBhIFJlYWN0T1MiLElEQ19TVEFUSUMsNDksMjAsMTE5LDgKICAgIERFRlBVU0hCVVRUT04gICAiViByZWR1IixJRE9LLDE5NSw2LDMwLDExLFdTX0dST1VQCkVORAoKLyoKICogU3RyaW5nIFRhYmxlCiAqLwoKU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUKQkVHSU4KICAgIElEU19MSVNUX0NPTFVNTl9OQU1FICAgICJJbWUiCiAgICBJRFNfTElTVF9DT0xVTU5fVFlQRSAgICAiVnJzdGEiCiAgICBJRFNfTElTVF9DT0xVTU5fREFUQSAgICAiUG9kYXRraSIKRU5ECgpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRQpCRUdJTgogICAgSURTX0FQUF9USVRMRSAgICAgICAgICAgIlVyZWpldmFsbmlrIHJlZ2lzdHJhIgogICAgSURDX1JFR0VESVQgICAgICAgICAgICAgIlJFR0VESVQiCiAgICBJRENfUkVHRURJVF9GUkFNRSAgICAgICAiUkVHRURJVF9GUkFNRSIKRU5ECgpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRQpCRUdJTgogICAgSURfUkVHSVNUUllfTUVOVSAgICAgICAgIlVrYXppIHphIGRlbG8gcyBjZWxvdG5pbSByZWdpc3Ryb20iCiAgICBJRF9FRElUX01FTlUgICAgICAgICAgICAiVWthemkgemEgdXJlamFuamUgdnJlZG5vc3RpIGluIGtsanXoZXYiCiAgICBJRF9WSUVXX01FTlUgICAgICAgICAgICAiVWthemkgemEgcHJpbGFnYWphbmplIHJlZ2lzdHJza2VnYSBva25hIgogICAgSURfRkFWT1VSSVRFU19NRU5VICAgICAgIlVrYXppIHphIGRvc3RvcCBkbyBuZWRhdm5vIG9kcHJ0aWgga2xqdehldiIKICAgIElEX0hFTFBfTUVOVSAgICAgICAgICAgICJVa2F6aSB6YSBwcmlrYXpvdmFuamUgcG9tb+hpIGluIGluZm9ybWFjaWogbyBwcm9ncmFtdSIKICAgIElEX0VESVRfTkVXX01FTlUgICAgICAgICJVa2F6aSB6YSB1c3R2YXJqYW5qZSBub3ZpaCBrbGp16GV2IGluIHZyZWRub3N0aSIKRU5ECgpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRQpCRUdJTgogICAgSURfRURJVF9NT0RJRlkgICAgICAgICAgIlNwcmVtZW5pIHBvZGF0a2UgdnJlZG5vc3RpIgogICAgSURfRURJVF9ORVdfS0VZICAgICAgICAgIkRvZGEgbm92IGtsanXoIgogICAgSURfRURJVF9ORVdfU1RSSU5HVkFMVUUgIkRvZGEgbm92IG5peiIKICAgIElEX0VESVRfTkVXX0JJTkFSWVZBTFVFICJEb2RhIG5vdm8gYmluYXJubyB2cmVkbm9zdCIKICAgIElEX0VESVRfTkVXX0RXT1JEVkFMVUUgICJEb2RhIG5vdm8gRFdPUkQgdnJlZG5vc3QiCiAgICBJRF9SRUdJU1RSWV9JTVBPUlRSRUdJU1RSWUZJTEUgIlYgcmVnaXN0ZXIgdXZvemkgZGF0b3Rla28geiBiZXNlZGlsb20iCiAgICBJRF9SRUdJU1RSWV9FWFBPUlRSRUdJU1RSWUZJTEUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJSZWdpc3Ryc2tvIGRhdG90ZWtvIGFsaSBuamVuIGRlbCBpenZvemkgdiBiZXNlZGlsbm8gZGF0b3Rla28iCiAgICBJRF9SRUdJU1RSWV9DT05ORUNUTkVUV09SS1JFR0lTVFJZCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVnpwb3N0YXZpIHBvdmV6YXZvIHogcmVnaXN0cm9tIG9kZGFsamVuZWdhIHJh6HVuYWxuaWthIgogICAgSURfUkVHSVNUUllfRElTQ09OTkVDVE5FVFdPUktSRUdJU1RSWQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByZWtpbmUgcG92ZXphdm8geiByZWdpc3Ryb20gb2RkYWxqZW5lZ2EgcmHodW5hbG5pa2EiCiAgICBJRF9SRUdJU1RSWV9QUklOVCAgICAgICAiTmF0aXNuZSByZWdpc3Ryc2tvIGRhdG90ZWtvIGFsaSBuamVuIGRlbCIKLyogICAgSURfSEVMUF9IRUxQVE9QSUNTICAgICAgIk9kcHJlIHBvbW9DIiAqLwogICAgSURfSEVMUF9BQk9VVCAgICAgICAgICAgIkluZm9ybWFjaWplIG8gcHJvZ3JhbXUsIJp0ZXZpbGtpIHJhemxp6GljZSBpbiBhdnRvcnNraWggcHJhdmljYWgiCkVORAoKU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUKQkVHSU4KICAgIElEX1JFR0lTVFJZX0VYSVQgICAgICAgICJLb27oYSBwcm9ncmFtIgogICAgSURfRkFWT1VSSVRFU19BRERUT0ZBVk9VUklURVMgIkRvZGEga2xqdeggbWVkIFByaWxqdWJsamVuZSIKICAgIElEX0ZBVk9VUklURVNfUkVNT1ZFRkFWT1VSSVRFICJPZHN0cmFuaSBrbGp16CBpeiBQcmlsanVibGplbmloIgogICAgSURfVklFV19TVEFUVVNCQVIgICAgICAgIlByaWthnmUgYWxpIHNrcmlqZSB2cnN0aWNvIHN0YW5qYSIKICAgIElEX1ZJRVdfU1BMSVQgICAgICAgICAgICJTcHJlbWVuaSBwb2xvnmFqIG1lZCBkZWxpbG5lIOhydGUgbWVkIHBvZG9rbmkiCiAgICBJRF9WSUVXX1JFRlJFU0ggICAgICAgICAiT3N2ZZ5pIG9rbm8iCiAgICBJRF9FRElUX0RFTEVURSAgICAgICAgICAiSXpicmmaZSBpemJvciIKICAgIElEX0VESVRfUkVOQU1FICAgICAgICAgICJQcmVpbWVudWplIGl6Ym9yIgogICAgSURfRURJVF9DT1BZS0VZTkFNRSAgICAgIlByZWtvcGlyYSBpbWUgaXpicmFuZWdhIGtsanXoYSB2IG9kbG+eaZroZSIKICAgIElEX0VESVRfRklORCAgICAgICAgICAgICJJmuhlIG5peiB2IGtsanXodSwgdnJlZG5vc3RpIGFsaSBwb2RhdGtpaCIKICAgIElEX0VESVRfRklORE5FWFQgICAgICAgICJJmuhlIG5hc2xlZG5qbyBwb25vdml0ZXYgaXNrYW5lZ2EgYmVzZWRpbGEiCkVORAoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKCi8qCiAqIERpYWxvZwogKi8KCklERF9ESUFMT0cxIERJQUxPRyBESVNDQVJEQUJMRSAgNTAsIDUwLCAyNjgsIDk4ClNUWUxFIERTXzNETE9PSyB8IERTX0NPTlRST0wgfCBXU19DSElMRCB8IFdTX1ZJU0lCTEUgfCBXU19DTElQU0lCTElOR1MgfAogICAgV1NfQk9SREVSCkZPTlQgOCwgIk1TIFNhbnMgU2VyaWYiCkJFR0lOCkVORAoKSUREX0RJQUxPRzIgRElBTE9HIERJU0NBUkRBQkxFICAwLCAwLCAxODcsIDk1ClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkNBUFRJT04gIkRpYWxvZyIKRk9OVCA4LCAiTVMgU2FucyBTZXJpZiIKQkVHSU4KICAgIERFRlBVU0hCVVRUT04gICAiViByZWR1IixJRE9LLDEzMCw3LDUwLDE0CiAgICBQVVNIQlVUVE9OICAgICAgIlByZWtsaehpIixJRENBTkNFTCwxMzAsMjQsNTAsMTQKRU5ECgoKLyoKICogVEVYVElOQ0xVREUKICovCgoxIFRFWFRJTkNMVURFIERJU0NBUkRBQkxFCkJFR0lOCiAgICAicmVzb3VyY2UuaFwwIgpFTkQKCgoKLyoKICogU3RyaW5nIFRhYmxlCiAqLwoKLyoKICpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRQogKkJFR0lOCiAqICAgIElEX0hFTFBfSEVMUFRPUElDUyAgICAgICJPZHByZSBwb21v6C4iCiAqICAgIElEX0hFTFBfQUJPVVQgICAgICAgICAgICJJbmZvcm1hY2lqZSBvIHByb2dyYW11LCCadGV2aWxraSByYXpsaehpY2UgaW4gYXZ0b3Jza2loIHByYXZpY2FoLiIKICpFTkQKICovCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCg==