LyoKICogU3RhcnQKICogU2xvdmVuaWFuIExhbmd1YWdlIFN1cHBvcnQKICoKICogQ29weXJpZ2h0IDIwMDMgUm9rIE1hbmRlbGpjIDxyb2subWFuZGVsamNAZ2ltYi5vcmc+CiAqCiAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQogKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogKgogKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQogKi8KCkxBTkdVQUdFIExBTkdfU0xPVkVOSUFOLCBTVUJMQU5HX0RFRkFVTFQKClNUUklOR1RBQkxFIERJU0NBUkRBQkxFIExBTkdVQUdFIExBTkdfU0xPVkVOSUFOLCBTVUJMQU5HX0RFRkFVTFQKewpTVFJJTkdfVVNBR0UsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiWmGeZW5lIHByb2dyYW0gYWxpIG9kcHJlIGRva3VtZW50IHMgcHJvZ3JhbW9tLCBraSBvYmnoYWpubyBvZHBpcmEgZG9rdW1lbnRlIHRlIHZyc3RlLiBcblwKVXBvcmFiYTogXG5cCnN0YXJ0IFttb55ub3N0aV0gaW1lX3Byb2dyYW1hIFsuLi5dIFxuXApzdGFydCBbbW+ebm9zdGldIGltZV9kb2t1bWVudGEgXG5cCiBcblwKTW+ebm9zdGk6IFxuXAovTVtpbmltaXplZF0gWmGeZW5lIHByb2dyYW0gcHJvZ3JhbSB2IG1pbmltaXJhbmVtIG5h6GludS4gXG5cCi9NQVhbaW1pemVkXSBaYZ5lbmUgcHJvZ3JhbSBwcm9ncmFtIHYgbWFrc2ltaXJhbmVtIG5h6GludS4gXG5cCi9SW2VzdG9yZWRdICBaYZ5lbmUgcHJvZ3JhbSBwcm9ncmFtIHYgbmF2YWRuZW0gbmHoaW51IChuZSBtaW5pbWlyYW4gaW4gbmUgbWFrc2ltaXJhbikuIFxuXAovV1thaXRdICAgICAgUG/oYWthLCBkYSBzZSB6YWduYW5pIHByb2dyYW0ga29u6GEgaW4gc2UgemFrbGp16GkgeiBuamVnb3ZvIGl6aG9kbm8ga29kby4gXG5cCi9MICAgICAgICAgICBQb2thniBsaWNlbuhubyBwb2dvZGJvLiBcblwKIFxuXApzdGFydC5leGUgcmF6bGnoaWNhIDAuMiBDb3B5cmlnaHQgKEMpIDIwMDMsIERhbiBLZWdlbCBcblwKU3RhcnQgcHJpaGFqYSBwb3BvbG5vbWEgQlJFWiBHQVJBTkNJSkU7IHphIHBvZHJvYm5vc3RpIHVwb3JhYml0ZSBtb55ub3N0IC9MLiBcblwKVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBhbmQgeW91IGFyZSB3ZWxjb21lIHRvIHJlZGlzdHJpYnV0ZSBpdCBcblwKdW5kZXIgY2VydGFpbiBjb25kaXRpb25zOyBydW4gJ3N0YXJ0IC9MJyBmb3IgZGV0YWlscy4gXG5cCiIKClNUUklOR19MSUNFTlNFLCAic3RhcnQuZXhlIHJhemxp6GljYSAwLjIgQ29weXJpZ2h0IChDKSAyMDAzLCBEYW4gS2VnZWwgXG5cClRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgXG5cCm1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgUHVibGljIExpY2Vuc2UgXG5cCmFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgXG5cCm9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLiBcblwKIFxuXApUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgXG5cCmJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIFxuXApNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIFxuXApHTlUgTGVzc2VyIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuIFxuXAogXG5cCllvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgUHVibGljIExpY2Vuc2UgXG5cCmFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIFxuXApGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4gXG5cCiBcblwKU2VlIHRoZSBDT1BZSU5HLkxJQiBmaWxlIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLiBcblwKIgoKU1RSSU5HX0VYRUNGQUlMICJQcm9ncmFtYSBuaSBiaWxvIG1vZ2/oZSB6YWduYXRpIGFsaSBwYSB6IGRhbm8gdnJzdG8gZG9rdW1lbnRhIG5pIHBvdmV6YW4gbm9iZW4gcHJvZ3JhbS5cblNoZWxsRXhlY3V0ZUV4IGplIHNwb2RsZXRlbCIKfQo=