LyoKICogUmVnZWRpdCByZXNvdXJjZXMKICoKICogQ29weXJpZ2h0IDIwMDMgUm9rIE1hbmRlbGpjIDxyb2subWFuZGVsamNAZ2ltYi5vcmc+CiAqCiAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQogKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogKgogKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQogKi8KCkxBTkdVQUdFIExBTkdfU0xPVkVOSUFOLCBTVUJMQU5HX05FVVRSQUwKCi8qCiAqIE1lbnUKICovCgpJRENfUkVHRURJVCBNRU5VIERJU0NBUkRBQkxFCkJFR0lOCiAgICBQT1BVUCAiJkRhdG90ZWthIgogICAgQkVHSU4KICAgICAgICBNRU5VSVRFTSAiSXomaG9kIiwgICAgICAgICAgICAgICAgICAgICAgIElEX1JFR0lTVFJZX0VYSVQKICAgIEVORAogICAgUE9QVVAgIiZQb21v6CIKICAgIEJFR0lOCiAgICAgICAgTUVOVUlURU0gIiZPIC4uLiIsICAgICAgICAgICAgICAgICAgSURfSEVMUF9BQk9VVAogICAgRU5ECkVORAoKSURSX1JFR0VESVRfTUVOVSBNRU5VIERJU0NBUkRBQkxFCkJFR0lOCiAgICBQT1BVUCAiJlJlZ2lzdGVyIgogICAgQkVHSU4KICAgICAgICBNRU5VSVRFTSAiJlV2b3ppIHJlZ2lzdHJza28gZGF0b3Rla28gLi4uIiwgICAgSURfUkVHSVNUUllfSU1QT1JUUkVHSVNUUllGSUxFCiAgICAgICAgTUVOVUlURU0gIiZJenZvemkgcmVnaXN0cnNrbyBkYXRvdGVrbyAuLi4iLCAgICBJRF9SRUdJU1RSWV9FWFBPUlRSRUdJU1RSWUZJTEUKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiUCZvdmWeaSBzZSB6IG9tcmWebmltIHJlZ2lzdHJvbSAuLi4iLCBJRF9SRUdJU1RSWV9DT05ORUNUTkVUV09SS1JFR0lTVFJZLCBHUkFZRUQKICAgICAgICBNRU5VSVRFTSAiUCZyZWtpbmkgcG92ZXphdm8geiBvbXJlnm5pbSByZWdpc3Ryb20gLi4uIiwgSURfUkVHSVNUUllfRElTQ09OTkVDVE5FVFdPUktSRUdJU1RSWSwgR1JBWUVECiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIk5hJnRpc25pXHRDdHJsK1AiLCAgICAgICAgICAgICAgSURfUkVHSVNUUllfUFJJTlQsIEdSQVlFRAogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICJJeiZob2QiLCAgICAgICAgICAgICAgICAgICAgICAgSURfUkVHSVNUUllfRVhJVAogICAgRU5ECiAgICBQT1BVUCAiJlVyZWphbmplIgogICAgQkVHSU4KICAgICAgICBNRU5VSVRFTSAiJlNwcmVtZW5pIiwgICAgICAgICAgICAgICAgICAgICBJRF9FRElUX01PRElGWQogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIFBPUFVQICImTm92YSIKICAgICAgICBCRUdJTgogICAgICAgICAgICBNRU5VSVRFTSAiJktsanXoIiwgICAgICAgICAgICAgICAgICAgICAgICBJRF9FRElUX05FV19LRVkKICAgICAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgICAgIE1FTlVJVEVNICImTml6IiwgICAgICAgICAgICAgICBJRF9FRElUX05FV19TVFJJTkdWQUxVRQogICAgICAgICAgICBNRU5VSVRFTSAiJkJpbmFybmEgdnJlZG5vc3QiLCAgICAgICAgICAgICAgIElEX0VESVRfTkVXX0JJTkFSWVZBTFVFCiAgICAgICAgICAgIE1FTlVJVEVNICImRFdPUkQgdnJlZG5vc3QiLCAgICAgICAgICAgICAgICBJRF9FRElUX05FV19EV09SRFZBTFVFCiAgICAgICAgRU5ECiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIkl6YnJpJpppXHREZWwiLCAgICAgICAgICAgICAgICBJRF9FRElUX0RFTEVURQogICAgICAgIE1FTlVJVEVNICJQcmVpJm1lbnVqXHRGMiIsICAgICAgICAgICAgICAgICAgICAgSURfRURJVF9SRU5BTUUKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiJktvcGlyYWogaW1lIGtsanXoYSIsICAgICAgICAgICAgICBJRF9FRElUX0NPUFlLRVlOQU1FCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIiZOYWpkaVx0Q3RybCtGIiwgICAgICAgICAgICAgICBJRF9FRElUX0ZJTkQsIEdSQVlFRAogICAgICAgIE1FTlVJVEVNICJOYSZkYWxqdWogaXNrYW5qZVx0RjMiLCAgICAgICAgICAgICAgSURfRURJVF9GSU5ETkVYVCwgR1JBWUVECiAgICBFTkQKICAgIFBPUFVQICJQb2dsJmVkIgogICAgQkVHSU4KICAgICAgICBNRU5VSVRFTSAiJlZyc3RpY2Egc3RhbmphIiwgICAgICAgICAgICAgICAgIElEX1ZJRVdfU1RBVFVTQkFSCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIiZEZWxpbG5hIOhydGEiLCAgICAgICAgICAgICAgICAgICAgICBJRF9WSUVXX1NQTElUCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIiZPc3ZlnmlcdEY1IiwgICAgICAgICAgICAgICAgSURfVklFV19SRUZSRVNICiAgICBFTkQKICAgIFBPUFVQICImUHJpbGp1YmxqZW5lIgogICAgQkVHSU4KICAgICAgICBNRU5VSVRFTSAiJkRvZGFqIG1lZCBQcmlsanVibGplbmUiLCAgICAgICAgICBJRF9GQVZPVVJJVEVTX0FERFRPRkFWT1VSSVRFUwogICAgICAgICwgR1JBWUVECiAgICAgICAgTUVOVUlURU0gIiZPZHN0cmFuaSBpeiBQcmlsanVibGplbmloIiwgICAgICAgICAgIElEX0ZBVk9VUklURVNfUkVNT1ZFRkFWT1VSSVRFCiAgICAgICAgLCBHUkFZRUQKICAgIEVORAogICAgUE9QVVAgIiZQb21v6CIKICAgIEJFR0lOCiAgICAgICAgTUVOVUlURU0gIiZUZW1lIHBvbW/oaSIsICAgICAgICAgICAgICAgIElEX0hFTFBfSEVMUFRPUElDUwogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICImTyBVcmVqZXZhbG5pa3UgcmVnaXN0cmEiLCAgICAgIElEX0hFTFBfQUJPVVQKICAgIEVORApFTkQKCgovKgogKiBEaWFsb2cKICovCgpJRERfQUJPVVRCT1ggRElBTE9HIERJU0NBUkRBQkxFICAyMiwgMTcsIDIzMCwgNzUKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkNBUFRJT04gIk8iCkZPTlQgOCwgIk1TIFNoZWxsIERsZyIKQkVHSU4KICAgIElDT04gICAgICAgICAgICBJRElfUkVHRURJVCxJRElfUkVHRURJVCwxNCw5LDE2LDE2CiAgICBMVEVYVCAgICAgICAgICAgIlJlYWN0T1NvdiBVcmVqZXZhbG5payByZWdpc3RyYSwgdmVyemlqYSAxLjAiLElEQ19TVEFUSUMsNDksMTAsMTE5LDgsCiAgICAgICAgICAgICAgICAgICAgU1NfTk9QUkVGSVgKICAgIExURVhUICAgICAgICAgICAiQ29weXJpZ2h0IChDKSAyMDAyIGVraXBhIFJlYWN0T1MiLElEQ19TVEFUSUMsNDksMjAsMTE5LDgKICAgIERFRlBVU0hCVVRUT04gICAiViByZWR1IixJRE9LLDE5NSw2LDMwLDExLFdTX0dST1VQCkVORAoKLyoKICogU3RyaW5nIFRhYmxlCiAqLwoKU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUKQkVHSU4KICAgIElEU19MSVNUX0NPTFVNTl9OQU1FICAgICJJbWUiCiAgICBJRFNfTElTVF9DT0xVTU5fVFlQRSAgICAiVnJzdGEiCiAgICBJRFNfTElTVF9DT0xVTU5fREFUQSAgICAiUG9kYXRraSIKRU5ECgpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRQpCRUdJTgogICAgSURTX0FQUF9USVRMRSAgICAgICAgICAgIlVyZWpldmFsbmlrIHJlZ2lzdHJhIgogICAgSURDX1JFR0VESVQgICAgICAgICAgICAgIlJFR0VESVQiCiAgICBJRENfUkVHRURJVF9GUkFNRSAgICAgICAiUkVHRURJVF9GUkFNRSIKRU5ECgpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRQpCRUdJTgogICAgSURfUkVHSVNUUllfTUVOVSAgICAgICAgIlVrYXppIHphIGRlbG8gcyBjZWxvdG5pbSByZWdpc3Ryb20iCiAgICBJRF9FRElUX01FTlUgICAgICAgICAgICAiVWthemkgemEgdXJlamFuamUgdnJlZG5vc3RpIGluIGtsanXoZXYiCiAgICBJRF9WSUVXX01FTlUgICAgICAgICAgICAiVWthemkgemEgcHJpbGFnYWphbmplIHJlZ2lzdHJza2VnYSBva25hIgogICAgSURfRkFWT1VSSVRFU19NRU5VICAgICAgIlVrYXppIHphIGRvc3RvcCBkbyBuZWRhdm5vIG9kcHJ0aWgga2xqdehldiIKICAgIElEX0hFTFBfTUVOVSAgICAgICAgICAgICJVa2F6aSB6YSBwcmlrYXpvdmFuamUgcG9tb+hpIGluIGluZm9ybWFjaWogbyBwcm9ncmFtdSIKICAgIElEX0VESVRfTkVXX01FTlUgICAgICAgICJVa2F6aSB6YSB1c3R2YXJqYW5qZSBub3ZpaCBrbGp16GV2IGluIHZyZWRub3N0aSIKRU5ECgpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRQpCRUdJTgogICAgSURfRURJVF9NT0RJRlkgICAgICAgICAgIlNwcmVtZW5pIHBvZGF0a2UgdnJlZG5vc3RpIgogICAgSURfRURJVF9ORVdfS0VZICAgICAgICAgIkRvZGEgbm92IGtsanXoIgogICAgSURfRURJVF9ORVdfU1RSSU5HVkFMVUUgIkRvZGEgbm92IG5peiIKICAgIElEX0VESVRfTkVXX0JJTkFSWVZBTFVFICJEb2RhIG5vdm8gYmluYXJubyB2cmVkbm9zdCIKICAgIElEX0VESVRfTkVXX0RXT1JEVkFMVUUgICJEb2RhIG5vdm8gRFdPUkQgdnJlZG5vc3QiCiAgICBJRF9SRUdJU1RSWV9JTVBPUlRSRUdJU1RSWUZJTEUgIlYgcmVnaXN0ZXIgdXZvemkgZGF0b3Rla28geiBiZXNlZGlsb20iCiAgICBJRF9SRUdJU1RSWV9FWFBPUlRSRUdJU1RSWUZJTEUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJSZWdpc3Ryc2tvIGRhdG90ZWtvIGFsaSBuamVuIGRlbCBpenZvemkgdiBiZXNlZGlsbm8gZGF0b3Rla28iCiAgICBJRF9SRUdJU1RSWV9DT05ORUNUTkVUV09SS1JFR0lTVFJZCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVnpwb3N0YXZpIHBvdmV6YXZvIHogcmVnaXN0cm9tIG9kZGFsamVuZWdhIHJh6HVuYWxuaWthIgogICAgSURfUkVHSVNUUllfRElTQ09OTkVDVE5FVFdPUktSRUdJU1RSWQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByZWtpbmUgcG92ZXphdm8geiByZWdpc3Ryb20gb2RkYWxqZW5lZ2EgcmHodW5hbG5pa2EiCiAgICBJRF9SRUdJU1RSWV9QUklOVCAgICAgICAiTmF0aXNuZSByZWdpc3Ryc2tvIGRhdG90ZWtvIGFsaSBuamVuIGRlbCIKLyogICAgSURfSEVMUF9IRUxQVE9QSUNTICAgICAgIk9kcHJlIHBvbW9DIiAqLwogICAgSURfSEVMUF9BQk9VVCAgICAgICAgICAgIkluZm9ybWFjaWplIG8gcHJvZ3JhbXUsIJp0ZXZpbGtpIHJhemxp6GljZSBpbiBhdnRvcnNraWggcHJhdmljYWgiCkVORAoKU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUKQkVHSU4KICAgIElEX1JFR0lTVFJZX0VYSVQgICAgICAgICJLb27oYSBwcm9ncmFtIgogICAgSURfRkFWT1VSSVRFU19BRERUT0ZBVk9VUklURVMgIkRvZGEga2xqdeggbWVkIFByaWxqdWJsamVuZSIKICAgIElEX0ZBVk9VUklURVNfUkVNT1ZFRkFWT1VSSVRFICJPZHN0cmFuaSBrbGp16CBpeiBQcmlsanVibGplbmloIgogICAgSURfVklFV19TVEFUVVNCQVIgICAgICAgIlByaWthnmUgYWxpIHNrcmlqZSB2cnN0aWNvIHN0YW5qYSIKICAgIElEX1ZJRVdfU1BMSVQgICAgICAgICAgICJTcHJlbWVuaSBwb2xvnmFqIG1lZCBkZWxpbG5lIOhydGUgbWVkIHBvZG9rbmkiCiAgICBJRF9WSUVXX1JFRlJFU0ggICAgICAgICAiT3N2ZZ5pIG9rbm8iCiAgICBJRF9FRElUX0RFTEVURSAgICAgICAgICAiSXpicmmaZSBpemJvciIKICAgIElEX0VESVRfUkVOQU1FICAgICAgICAgICJQcmVpbWVudWplIGl6Ym9yIgogICAgSURfRURJVF9DT1BZS0VZTkFNRSAgICAgIlByZWtvcGlyYSBpbWUgaXpicmFuZWdhIGtsanXoYSB2IG9kbG+eaZroZSIKICAgIElEX0VESVRfRklORCAgICAgICAgICAgICJJmuhlIG5peiB2IGtsanXodSwgdnJlZG5vc3RpIGFsaSBwb2RhdGtpaCIKICAgIElEX0VESVRfRklORE5FWFQgICAgICAgICJJmuhlIG5hc2xlZG5qbyBwb25vdml0ZXYgaXNrYW5lZ2EgYmVzZWRpbGEiCkVORAoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKCi8qCiAqIERpYWxvZwogKi8KCklERF9ESUFMT0cxIERJQUxPRyBESVNDQVJEQUJMRSAgNTAsIDUwLCAyNjgsIDk4ClNUWUxFIERTXzNETE9PSyB8IERTX0NPTlRST0wgfCBXU19DSElMRCB8IFdTX1ZJU0lCTEUgfCBXU19DTElQU0lCTElOR1MgfAogICAgV1NfQk9SREVSCkZPTlQgOCwgIk1TIFNoZWxsIERsZyIKQkVHSU4KRU5ECgpJRERfRElBTE9HMiBESUFMT0cgRElTQ0FSREFCTEUgIDAsIDAsIDE4NywgOTUKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKQ0FQVElPTiAiRGlhbG9nIgpGT05UIDgsICJNUyBTaGVsbCBEbGciCkJFR0lOCiAgICBERUZQVVNIQlVUVE9OICAgIlYgcmVkdSIsSURPSywxMzAsNyw1MCwxNAogICAgUFVTSEJVVFRPTiAgICAgICJQcmVrbGnoaSIsSURDQU5DRUwsMTMwLDI0LDUwLDE0CkVORAoKCi8qCiAqIFRFWFRJTkNMVURFCiAqLwoKMSBURVhUSU5DTFVERSBESVNDQVJEQUJMRQpCRUdJTgogICAgInJlc291cmNlLmhcMCIKRU5ECgoKCi8qCiAqIFN0cmluZyBUYWJsZQogKi8KCi8qCiAqU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUKICpCRUdJTgogKiAgICBJRF9IRUxQX0hFTFBUT1BJQ1MgICAgICAiT2RwcmUgcG9tb+guIgogKiAgICBJRF9IRUxQX0FCT1VUICAgICAgICAgICAiSW5mb3JtYWNpamUgbyBwcm9ncmFtdSwgmnRldmlsa2kgcmF6bGnoaWNlIGluIGF2dG9yc2tpaCBwcmF2aWNhaC4iCiAqRU5ECiAqLwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwo=