LyoKICogU3RhcnQKICogTm9yd2VnaWFuIEJva23lbCBMYW5ndWFnZSBTdXBwb3J0CiAqCiAqIENvcHlyaWdodCAyMDA1LTIwMDggQWxleGFuZGVyIE4uIFP4cm5lcyA8YWxleEB0aGVoYW5kb2ZhZ29ueS5jb20+CiAqCiAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQogKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogKgogKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQQogKi8KCkxBTkdVQUdFIExBTkdfTk9SV0VHSUFOLCBTVUJMQU5HX05PUldFR0lBTl9CT0tNQUwKClNUUklOR1RBQkxFIERJU0NBUkRBQkxFIExBTkdVQUdFIExBTkdfTk9SV0VHSUFOLCBTVUJMQU5HX05PUldFR0lBTl9CT0tNQUwKewpTVFJJTkdfVVNBR0UsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU3RhcnRlIGV0IHByb2dyYW0sIGVsbGVyIOVwbmUgZXQgZG9rdW1lbnQgaSBwcm9ncmFtbWV0IHNvbSBlciB0aWxrbnl0dGV0IGZpbGVyIG1lZCBkZXQgZXR0ZXJuYXZuZXQuXG5cCkJydWs6XG5cCnN0YXJ0IFt2YWxnXSBwcm9ncmFtX2ZpbG5hdm4gWy4uLl1cblwKc3RhcnQgW3ZhbGddIGRva3VtZW50X2ZpbG5hdm5cblwKXG5cClZhbGc6XG5cCi9NW2luaW1pemVkXSBTdGFydCBwcm9ncmFtbWV0IG1pbmltZXJ0LlxuXAovTUFYW2ltaXplZF0gU3RhcnQgcHJvZ3JhbW1ldCBtYWtzaW1lcnQuXG5cCi9SW2VzdG9yZWRdICBTdGFydCBwcm9ncmFtbWV0IG5vcm1hbHQgKGh2ZXJrZW4gbWluaW1lcnQgZWxsZXIgbWFrc2ltZXJ0KS5cblwKL1dbYWl0XSAgICAgIFZlbnQgdGlsIHByb2dyYW1tZXQgYXZzbHV0dGVyLCBvZyBhdnNsdXR0IG1lZCBwcm9ncmFtbWV0c1xuXCAgICAgICAgICAgICBhdnNsdXR0aW5nc2tvZGUuXG5cCi9Vbml4ICAgICAgICBCcnVrIGV0IFVuaXgtZmlsbmF2biBvZyBzdGFydCBmaWxlbiBzb20gV2luZG93cyBVdGZvcnNrZXIgKGV4cGxvcmVyKS5cblwKL0wgICAgICAgICAgIFZpcyBzbHV0dGJydWtlci1saXNlbnNlbi5cblwKXG5cCnN0YXJ0LmV4ZSB2ZXJzam9uIDAuMiBLb3BpcmV0dCBmb3IgMjAwMyB0aWxo+HJlciBEYW4gS2VnZWxcblwKT3ZlcnNhdHQgYXYgQWxleGFuZGVyIE4uIFP4cm5lc1xuXApTdGFydCBrb21tZXIgVVRFTiBFTkhWRVIgRk9STSBGT1IgR0FSQU5USTsga2r4ciBtZWQgL0wtdmFsZ2V0IGZvciBkZXRhbGplci5cblwKRGV0dGUgZXIgZnJpIHByb2dyYW12YXJlLCBvZyBkdSBrYW4gcmVkaXN0cmlidWVyZSBkZXQgdW5kZXIgdmlzc2Ugdmlsa+VyOyBravhyICdzdGFydCAvTCcgZm9yIGRldGFsamVyLlxuXAoiCgpTVFJJTkdfTElDRU5TRSwgInN0YXJ0LmV4ZSB2ZXJzam9uIDAuMiBLb3BpcmV0dCBmb3IgMjAwMyB0aWxo+HJlciBEYW4gS2VnZWxcblwKT3ZlcnNhdHQgYXYgQWxleGFuZGVyIE4uIFP4cm5lc1xuXApEZXR0ZSBwcm9ncmFtbWV0IGVyIGZyaSBwcm9ncmFtdmFyZTsgZHUga2FuIHJlZGlzdHJpYnVlcmUgZGV0XG5cCm9nL2VsbGVyIGVuZHJlIGRldCBpIGhlbmhvbGQgdGlsIHZpbGvlcmVuZSBpICdHTlUgTGVzc2VyIFB1YmxpY1xuXApMaWNlbnNlJyBzb20gdXRnaXR0IGF2ICd0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uJzsgZW50ZW5cblwKdmVyc2pvbiAyLjEgYXYgTGlzZW5zZW4sIGVsbGVyIChodmlzIGR1IPhuc2tlciBkZXQpIGVuIG55ZXJlIHZlcnNqb24uXG5cClxuXApEZXR0ZSBwcm9ncmFtbWV0IGVyIGRpc3RyaWJ1ZXJ0IG1lZCBkZXQgaOVwIGF0IGRldCBlciBueXR0aWcsXG5cCm1lbiBVVEVOIEVOSFZFUiBGT1JNIEZPUiBHQVJBTlRJOyBpa2tlIGVuZ2FuZyBkZW4gYW50eWRldGUgZ2FyYW50aWVuXG5cCmZvciBIQU5ERUxTRFlLVElHSEVUIGVsbGVyIEVHTkVUSEVUIEZPUiBFVCBCRVNURU1UIEZPUk3FTC4gU2VcblwKJ0dOVSBMZXNzZXIgUHVibGljIExpY2Vuc2UnIGZvciBmbGVyZSBkZXRhbGplci5cblwKXG5cCkR1IHNrYWwgaGEgbW90dGF0dCBlbiBrb3BpIGF2ICdHTlUgTGVzc2VyIFB1YmxpYyBMaWNlbnNlIHNhbW1lblxuXAptZWQgZGV0dGUgcHJvZ3JhbW1ldDsgaHZpcyBpa2tlLCBza3JpdiB0aWwgJ3RoZSBGcmVlIFNvZnR3YXJlXG5cCkZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuJ1xuXApcblwKU2UgZmlsZW4gJ0NPUFlJTkcuTElCJyBmb3IgbGlzZW5zaW5mb3JtYXNqb24uXG5cCiIKClNUUklOR19FWEVDRkFJTCAiS3VubmUgaWtrZSBzdGFydGUgcHJvZ3JhbW1ldCwgZWxsZXIgaW50ZXQgcHJvZ3JhbSBlciB0aWxrbnl0dGV0IGRlbiBvcHBnaXR0ZSBmaWxlbi5cbidTaGVsbEV4ZWN1dGVFeCcgZmVpbGV0IgoKU1RSSU5HX1VOSVhGQUlMICJLbGFydGUgaWtrZSDlIGtvbnZlcnRlcmUgVW5peC1maWxuYXZuZXQgdGlsIGV0IERPUy1maWxuYXZuLiIKfQo=