LyoKICogQ2xvY2sgKE5vcndlZ2lhbiBCb2tt5WwgcmVzb3VyY2VzKQogKgogKiBDb3B5cmlnaHQgMjAwNS0yMDA2IEFsZXhhbmRlciBOLiBT+HJuZXMgPGFsZXhAdGhlaGFuZG9mYWdvbnkuY29tPgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EKICovCgpMQU5HVUFHRSBMQU5HX05PUldFR0lBTiwgU1VCTEFOR19OT1JXRUdJQU5fQk9LTUFMCgpNQUlOX01FTlUgTUVOVSAKewogUE9QVVAgIiZFZ2Vuc2thcGVyIiB7CiAgTUVOVUlURU0gIkFuYSZsb2ciLCBJRE1fQU5BTE9HCiAgTUVOVUlURU0gIkRpZ2kmdGFsIiwgSURNX0RJR0lUQUwKICBNRU5VSVRFTSBTRVBBUkFUT1IKICBNRU5VSVRFTSAiU2tyaSZmdCAuIC4gLiIsIElETV9GT05UCiAgTUVOVUlURU0gU0VQQVJBVE9SCiAgTUVOVUlURU0gIiZVdGVuIHRpdHRlbGxpbmplIiwgSURNX05PVElUTEUKICBNRU5VSVRFTSBTRVBBUkFUT1IKICBNRU5VSVRFTSAiJlNla3VuZGVyIiwgSURNX1NFQ09ORFMKICBNRU5VSVRFTSAiJkRhdG8iLCBJRE1fREFURQogIE1FTlVJVEVNIFNFUEFSQVRPUgogIE1FTlVJVEVNICImQWxsdGlkIPh2ZXJzdCIsIElETV9PTlRPUAogfQogUE9QVVAgIkluZiZvcm1hc2pvbiIgewogIE1FTlVJVEVNICImTGlzZW5zIC4gLiAuIiwgSURNX0xJQ0VOU0UKICBNRU5VSVRFTSAiSSZOR0VOIEdBUkFOVEkgLiAuIC4iLCBJRE1fTk9XQVJSQU5UWQogIE1FTlVJVEVNICImT20gS2xva2tlIC4gLiAuIiwgSURNX0FCT1VUCiB9Cn0KClNUUklOR1RBQkxFIERJU0NBUkRBQkxFCnsKSURTX0NMT0NLLCAiS2xva2tlIgp9CgpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRSBMQU5HVUFHRSBMQU5HX05PUldFR0lBTiwgU1VCTEFOR19OT1JXRUdJQU5fQk9LTUFMCnsKSURTX0xJQ0VOU0VfQ0FQVElPTiwgICAgICAgICAgICAiTElTRU5TIgpJRFNfTElDRU5TRSwKIkRldHRlIGJpYmxpb3Rla2V0IGVyIGZyaSBwcm9ncmFtdmFyZTsgZHUga2FuIHJlZGlzdHJpYnVlcmUgZGV0IFwKb2cvZWxsZXIgZW5kcmUgZGV0IHVuZGVyIHZpbGvlcmVuZSBpIKtHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIFwKTGljZW5zZbssIHV0Z2l0dCBhdiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlbnRlbiBcCnZlcnNqb24gMi4xIGF2IExpc2Vuc2VuLCBlbGxlciAoaHZpcyBkdSD4bnNrZXIgZGV0KSBlbiBueWVyZSB2ZXJzam9uLlxuXApEZXR0ZSBiaWJsaW90ZWtldCBkaXN0cmlidWVyZXMgaSBkZXQgaOVwIGF0IGRldCBlciBueXR0aWcsIFwKbWVuIFVURU4gRU5IVkVSIEdBUkFOVEk7IGlra2UgZW5nYW5nIGRlbiB1dHRyeWt0ZSBnYXJhbnRpZW4gZm9yIFwKSEFOREVMU0RZS1RJR0hFVCBlbGxlciBFR05FVEhFVCBGT1IgRVQgU1BFU0lFTFQgRk9STcVMLiBTZSCrR05VIFwKTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2W7IGZvciBmbGVyZSBkZXRhbGplci5cblwKRHUgc2thbCBoYSBtb3R0YXR0IGV0IGVrc2VtcGFsIGF2IKtHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIFwKTGljZW5zZbsgc2FtbWVuIG1lZCBkZXR0ZSBiaWJsaW90ZWtldDsgaHZpcyBpa2tlLCBza3JpdiB0aWw6IHRoZSBGcmVlIFNvZnR3YXJlIFwKRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQSIKCklEU19XQVJSQU5UWV9DQVBUSU9OLCAiSU5HRU4gR0FSQU5USSIKSURTX1dBUlJBTlRZLAoiRGV0dGUgYmlibGlvdGVrZXQgZGlzdHJpYnVlcmVzIGkgZGV0IGjlcCBhdCBkZXQgZXIgbnl0dGlnLCBcCm1lbiBVVEVOIEVOSFZFUiBHQVJBTlRJOyBpa2tlIGVuZ2FuZyBkZW4gdXR0cnlrdGUgZ2FyYW50aWVuIGZvciBcCkhBTkRFTFNEWUtUSUdIRVQgZWxsZXIgRUdORVRIRVQgRk9SIEVUIFNQRVNJRUxUIEZPUk3FTC4gU2Ugq0dOVSBcCkxlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNluyBmb3IgZmxlcmUgZGV0YWxqZXIuIgp9Cg==