LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqIAogKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQogKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgogKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCiAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQogKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiAqIAogKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAogKiAKICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAogKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgogKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCiAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKICogdW5kZXIgdGhlIExpY2Vuc2UuCiAqIAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCgogLy8gaW5jbHVkZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KI2luY2x1ZGUgPGVkaXRlbmcvZWRpdHJpZHMuaHJjPgogLy8gcHJhZ21hIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAvLyBRdWVyeUJveGVuIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpRdWVyeUJveCBSSURfU1ZYUUJfQ09OVElOVUUKewoJQlVUVE9OUyA9IFdCX1lFU19OTyA7CglERUZCVVRUT04gPSBXQl9ERUZfWUVTIDsKCS8qICMjIyBBQ0hUVU5HOiBOZXVlciBUZXh0IGluIFJlc291cmNlPyDcYmVycHL8ZnVuZyBhbSBBbmZhbmcgZGVzIERva3VtZW50ZXMgZm9ydHNldHplbj8gOiCaYmVycHKzZnVuZyBhbSBBbmZhbmcgZGVzIERva3VtZW50ZXMgZm9ydHNldHplbj8gKi8KCS8qICMjIyBBQ0hUVU5HOiBOZXVlciBUZXh0IGluIFJlc291cmNlPyDcYmVycHL8ZnVuZyBhbSBBbmZhbmcgZGVzIERva3VtZW50ZXMgZm9ydHNldHplbj8gOiCaYmVycHKzZnVuZyBhbSBBbmZhbmcgZGVzIERva3VtZW50ZXMgZm9ydHNldHplbj8gKi8KCU1lc3NhZ2UgWyBlbi1VUyBdID0gIkNvbnRpbnVlIGNoZWNraW5nIGF0IGJlZ2lubmluZyBvZiBkb2N1bWVudD8iIDsKfTsKUXVlcnlCb3ggUklEX1NWWFFCX0JXX0NPTlRJTlVFCnsKCUJVVFRPTlMgPSBXQl9ZRVNfTk8gOwoJREVGQlVUVE9OID0gV0JfREVGX1lFUyA7CgkvKiAjIyMgQUNIVFVORzogTmV1ZXIgVGV4dCBpbiBSZXNvdXJjZT8g3GJlcnBy/GZ1bmcgYW0gRW5kZSBkZXMgRG9rdW1lbnRlcyBmb3J0c2V0emVuPyA6IJpiZXJwcrNmdW5nIGFtIEVuZGUgZGVzIERva3VtZW50ZXMgZm9ydHNldHplbj8gKi8KCS8qICMjIyBBQ0hUVU5HOiBOZXVlciBUZXh0IGluIFJlc291cmNlPyDcYmVycHL8ZnVuZyBhbSBFbmRlIGRlcyBEb2t1bWVudGVzIGZvcnRzZXR6ZW4/IDogmmJlcnBys2Z1bmcgYW0gRW5kZSBkZXMgRG9rdW1lbnRlcyBmb3J0c2V0emVuPyAqLwoJTWVzc2FnZSBbIGVuLVVTIF0gPSAiQ29udGludWUgY2hlY2tpbmcgYXQgZW5kIG9mIGRvY3VtZW50PyIgOwp9OwpTdHJpbmcgUklEX1NWWFNUUl9ITUVSUl9USEVTQVVSVVMKewoJLyogIyMjIEFDSFRVTkc6IE5ldWVyIFRleHQgaW4gUmVzb3VyY2U/IEVpbiBUaGVzYXVydXMgZvxyIGRpZSBlaW5nZXN0ZWxsdGUgU3ByYWNoZSBpc3QgbmljaHQgdmVyZvxnYmFyLiBcbtxiZXJwcvxmZW4gU2llIGJpdHRlIElocmUgSW5zdGFsbGF0aW9uIHVuZCBpbnN0YWxsaWVyZW4gU2llIFxuZ2VnZWJlbmVuZmFsbHMgZGllIGdld/xuc2NodGUgU3ByYWNoZSA6IEVpbiBUaGVzYXVydXMgZrNyIGRpZSBlaW5nZXN0ZWxsdGUgU3ByYWNoZSBpc3QgbmljaHQgdmVyZrNnYmFyLiBcbppiZXJwcrNmZW4gU2llIGJpdHRlIElocmUgSW5zdGFsbGF0aW9uIHVuZCBpbnN0YWxsaWVyZW4gU2llIFxuZ2VnZWJlbmVuZmFsbHMgZGllIGdld7Nuc2NodGUgU3ByYWNoZSAqLwoJLyogIyMjIEFDSFRVTkc6IE5ldWVyIFRleHQgaW4gUmVzb3VyY2U/IEVpbiBUaGVzYXVydXMgZvxyIGRpZSBlaW5nZXN0ZWxsdGUgU3ByYWNoZSBpc3QgbmljaHQgdmVyZvxnYmFyLiBcbtxiZXJwcvxmZW4gU2llIGJpdHRlIElocmUgSW5zdGFsbGF0aW9uIHVuZCBpbnN0YWxsaWVyZW4gU2llIFxuZ2VnZWJlbmVuZmFsbHMgZGllIGdld/xuc2NodGUgU3ByYWNoZSA6IEVpbiBUaGVzYXVydXMgZrNyIGRpZSBlaW5nZXN0ZWxsdGUgU3ByYWNoZSBpc3QgbmljaHQgdmVyZrNnYmFyLiBcbppiZXJwcrNmZW4gU2llIGJpdHRlIElocmUgSW5zdGFsbGF0aW9uIHVuZCBpbnN0YWxsaWVyZW4gU2llIFxuZ2VnZWJlbmVuZmFsbHMgZGllIGdld7Nuc2NodGUgU3ByYWNoZSAqLwoJVGV4dCBbIGVuLVVTIF0gPSAiTm8gdGhlc2F1cnVzIGlzIGF2YWlsYWJsZSBmb3IgdGhlIHNlbGVjdGVkIGxhbmd1YWdlLiBcblBsZWFzZSBjaGVjayB5b3VyIGluc3RhbGxhdGlvbiBhbmQgaW5zdGFsbCB0aGUgZGVzaXJlZCBsYW5ndWFnZVxuIiA7Cn07ClN0cmluZyBSSURfU1ZYU1RSX0RJQ19FUlJfVU5LTk9XTgp7CglUZXh0IFsgZW4tVVMgXSA9ICJXb3JkIGNhbm5vdCBiZSBhZGRlZCB0byBkaWN0aW9uYXJ5XG5kdWUgdG8gdW5rbm93biByZWFzb24uIjsKfTsKU3RyaW5nIFJJRF9TVlhTVFJfRElDX0VSUl9GVUxMCnsKCVRleHQgWyBlbi1VUyBdID0gIlRoZSBkaWN0aW9uYXJ5IGlzIGFscmVhZHkgZnVsbC4iOwp9OwpTdHJpbmcgUklEX1NWWFNUUl9ESUNfRVJSX1JFQURPTkxZCnsKCVRleHQgWyBlbi1VUyBdID0gIlRoZSBkaWN0aW9uYXJ5IGlzIHJlYWQtb25seS4iOwp9OwoKIC8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogRU9GCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgo=