LyoKICogU3RhcnQKICogTm9yd2VnaWFuIEJva23lbCBMYW5ndWFnZSBTdXBwb3J0CiAqCiAqIENvcHlyaWdodCAyMDA1LTIwMDggQWxleGFuZGVyIE4uIFP4cm5lcyA8YWxleEB0aGVoYW5kb2ZhZ29ueS5jb20+CiAqCiAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQogKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogKgogKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQQogKi8KCkxBTkdVQUdFIExBTkdfTk9SV0VHSUFOLCBTVUJMQU5HX05PUldFR0lBTl9CT0tNQUwKClNUUklOR1RBQkxFIERJU0NBUkRBQkxFIExBTkdVQUdFIExBTkdfTk9SV0VHSUFOLCBTVUJMQU5HX05PUldFR0lBTl9CT0tNQUwKewpTVFJJTkdfVVNBR0UsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU3RhcnRlIGV0IHByb2dyYW0sIGVsbGVyIOVwbmUgZXQgZG9rdW1lbnQgaSBwcm9ncmFtbWV0IHNvbSBlciB0aWxrbnl0dGV0IGZpbGVyIG1lZCBkZXQgZXR0ZXJuYXZuZXQuIFxuXApCcnVrOiBcblwKc3RhcnQgW3ZhbGddIHByb2dyYW1fZmlsbmF2biBbLi4uXSBcblwKc3RhcnQgW3ZhbGddIGRva3VtZW50X2ZpbG5hdm4gXG5cCiBcblwKVmFsZzogXG5cCi9NW2luaW1pemVkXSBTdGFydCBwcm9ncmFtbWV0IG1pbmltZXJ0LiBcblwKL01BWFtpbWl6ZWRdIFN0YXJ0IHByb2dyYW1tZXQgbWFrc2ltZXJ0LiBcblwKL1JbZXN0b3JlZF0gIFN0YXJ0IHByb2dyYW1tZXQgbm9ybWFsdCAoaHZlcmtlbiBtaW5pbWVydCBlbGxlciBtYWtzaW1lcnQpLiBcblwKL1dbYWl0XSAgICAgIFZlbnQgdGlsIHByb2dyYW1tZXQgYXZzbHV0dGVyLCBvZyBhdnNsdXR0IG1lZCBwcm9ncmFtbWV0cyBcblwgICAgICAgICAgICAgYXZzbHV0dGluZ3Nrb2RlLiBcblwKL1VuaXggICAgICAgIEJydWsgZXQgVW5peC1maWxuYXZuIG9nIHN0YXJ0IGZpbGVuIHNvbSBXaW5kb3dzIFV0Zm9yc2tlciAoZXhwbG9yZXIpLiBcblwKL0wgICAgICAgICAgIFZpcyBzbHV0dGJydWtlci1saXNlbnNlbi4gXG5cCiBcblwKc3RhcnQuZXhlIHZlcnNqb24gMC4yIEtvcGlyZXR0IGZvciAyMDAzIHRpbGj4cmVyIERhbiBLZWdlbCBcblwKT3ZlcnNhdHQgYXYgQWxleGFuZGVyIE4uIFP4cm5lcyBcblwKU3RhcnQga29tbWVyIFVURU4gRU5IVkVSIEZPUk0gRk9SIEdBUkFOVEk7IGtq+HIgbWVkIC9MLXZhbGdldCBmb3IgZGV0YWxqZXIuIFxuXApEZXR0ZSBlciBmcmkgcHJvZ3JhbXZhcmUsIG9nIGR1IGthbiByZWRpc3RyaWJ1ZXJlIGRldCB1bmRlciB2aXNzZSB2aWxr5XI7IGtq+HIgJ3N0YXJ0IC9MJyBmb3IgZGV0YWxqZXIuIFxuXAoiCgpTVFJJTkdfTElDRU5TRSwgInN0YXJ0LmV4ZSB2ZXJzam9uIDAuMiBLb3BpcmV0dCBmb3IgMjAwMyB0aWxo+HJlciBEYW4gS2VnZWwgXG5cCk92ZXJzYXR0IGF2IEFsZXhhbmRlciBOLiBT+HJuZXMgXG5cCkRldHRlIHByb2dyYW1tZXQgZXIgZnJpIHByb2dyYW12YXJlOyBkdSBrYW4gcmVkaXN0cmlidWVyZSBkZXQgXG5cCm9nL2VsbGVyIGVuZHJlIGRldCBpIGhlbmhvbGQgdGlsIHZpbGvlcmVuZSBpICdHTlUgTGVzc2VyIFB1YmxpYyBcblwKTGljZW5zZScgc29tIHV0Z2l0dCBhdiAndGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbic7IGVudGVuIFxuXAp2ZXJzam9uIDIuMSBhdiBMaXNlbnNlbiwgZWxsZXIgKGh2aXMgZHUg+G5za2VyIGRldCkgZW4gbnllcmUgdmVyc2pvbi4gXG5cCiBcblwKRGV0dGUgcHJvZ3JhbW1ldCBlciBkaXN0cmlidWVydCBtZWQgZGV0IGjlcCBhdCBkZXQgZXIgbnl0dGlnLCBcblwKbWVuIFVURU4gRU5IVkVSIEZPUk0gRk9SIEdBUkFOVEk7IGlra2UgZW5nYW5nIGRlbiBhbnR5ZGV0ZSBnYXJhbnRpZW4gXG5cCmZvciBIQU5ERUxTRFlLVElHSEVUIGVsbGVyIEVHTkVUSEVUIEZPUiBFVCBCRVNURU1UIEZPUk3FTC4gU2UgXG5cCidHTlUgTGVzc2VyIFB1YmxpYyBMaWNlbnNlJyBmb3IgZmxlcmUgZGV0YWxqZXIuIFxuXAogXG5cCkR1IHNrYWwgaGEgbW90dGF0dCBlbiBrb3BpIGF2ICdHTlUgTGVzc2VyIFB1YmxpYyBMaWNlbnNlIHNhbW1lbiBcblwKbWVkIGRldHRlIHByb2dyYW1tZXQ7IGh2aXMgaWtrZSwgc2tyaXYgdGlsICd0aGUgRnJlZSBTb2Z0d2FyZSBcblwKRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4nIFxuXAogXG5cClNlIGZpbGVuICdDT1BZSU5HLkxJQicgZm9yIGxpc2Vuc2luZm9ybWFzam9uLiBcblwKIgoKU1RSSU5HX0VYRUNGQUlMICJLdW5uZSBpa2tlIHN0YXJ0ZSBwcm9ncmFtbWV0LCBlbGxlciBpbnRldCBwcm9ncmFtIGVyIHRpbGtueXR0ZXQgZGVuIG9wcGdpdHRlIGZpbGVuLlxuJ1NoZWxsRXhlY3V0ZUV4JyBmZWlsZXQiCgpTVFJJTkdfVU5JWEZBSUwgIktsYXJ0ZSBpa2tlIOUga29udmVydGVyZSBVbml4LWZpbG5hdm5ldCB0aWwgZXQgRE9TLWZpbG5hdm4uIgp9Cg==