LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqIAogKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQogKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgogKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCiAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQogKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiAqIAogKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAogKiAKICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAogKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgogKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCiAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKICogdW5kZXIgdGhlIExpY2Vuc2UuCiAqIAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCgogLy8gaW5jbHVkZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KI2luY2x1ZGUgImphdmFlZGl0LmhyYyIKI2luY2x1ZGUgImZsZHVpLmhyYyIKI2luY2x1ZGUgImhlbHBpZC5oIgogLy8gcHJhZ21hIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAvLyBSSURfU1ZYRExHX1BPU1RJVCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpNb2RhbERpYWxvZyBETEdfSkFWQUVESVQKewogICAgSGVscElEID0gInN3Ok1vZGFsRGlhbG9nOkRMR19KQVZBRURJVCI7CglPdXRwdXRTaXplID0gVFJVRSA7CglTdkxvb2sgPSBUUlVFIDsKCVNpemUgPSBNQVBfQVBQRk9OVCAoIDI0OCAsIDE1NyApIDsKCU1vdmVhYmxlID0gVFJVRSA7CglGaXhlZFRleHQgRlRfVFlQRQoJewoJCVBvcyA9IE1BUF9BUFBGT05UICggMTIgLCAxNSApIDsKICAgICAgICBTaXplID0gTUFQX0FQUEZPTlQgKCA1NSAsIDEwICkgOwoJCVRleHQgWyBlbi1VUyBdID0gIlNjcmlwdCB0eXBlIiA7Cgl9OwoJRWRpdCBFRF9UWVBFCgl7CgkgICAgSGVscElEID0gInN3OkVkaXQ6RExHX0pBVkFFRElUOkVEX1RZUEUiOwoJCUJvcmRlciA9IFRSVUUgOwoJCVRleHQgPSAiSmF2YVNjcmlwdCIgOwoJCSAvLyBOaWNodCB1ZWJlcnNldHplbiEhIQogICAgICAgIFBvcyA9IE1BUF9BUFBGT05UICggNzAgLCAxNCApIDsKICAgICAgICBTaXplID0gTUFQX0FQUEZPTlQgKCA4NyAsIDEyICkgOwoJCVRhYlN0b3AgPSBUUlVFIDsKCX07CglSYWRpb0J1dHRvbiBSQl9VUkwKCXsKCSAgICBIZWxwSUQgPSAic3c6UmFkaW9CdXR0b246RExHX0pBVkFFRElUOlJCX1VSTCI7CgkJUG9zID0gTUFQX0FQUEZPTlQgKCAxMiAsIDI4ICkgOwogICAgICAgIFNpemUgPSBNQVBfQVBQRk9OVCAoIDU1ICwgMTAgKSA7CgkJVGFiU3RvcCA9IFRSVUUgOwoJCVRleHQgWyBlbi1VUyBdID0gIlVSTCIgOwoJfTsKCUVkaXQgRURfVVJMCgl7CgkgICAgSGVscElEID0gInN3OkVkaXQ6RExHX0pBVkFFRElUOkVEX1VSTCI7CgkJQm9yZGVyID0gVFJVRSA7CiAgICAgICAgUG9zID0gTUFQX0FQUEZPTlQgKCA3MCAsIDI3ICkgOwogICAgICAgIFNpemUgPSBNQVBfQVBQRk9OVCAoIDg3ICwgMTIgKSA7CgkJVGFiU3RvcCA9IFRSVUUgOwoJfTsKCVB1c2hCdXR0b24gUEJfVVJMCgl7CgkgICAgSGVscElEID0gInN3OlB1c2hCdXR0b246RExHX0pBVkFFRElUOlBCX1VSTCI7CgkJUG9zID0gTUFQX0FQUEZPTlQgKCAxNjMgLCAyNiApIDsKCQlTaXplID0gTUFQX0FQUEZPTlQgKCAxNCAsIDE0ICkgOwoJCVRleHQgPSAifi4uLiIgOwoJCVRhYlN0b3AgPSBUUlVFIDsKCX07CglSYWRpb0J1dHRvbiBSQl9FRElUCgl7CgkgICAgSGVscElEID0gInN3OlJhZGlvQnV0dG9uOkRMR19KQVZBRURJVDpSQl9FRElUIjsKCQlQb3MgPSBNQVBfQVBQRk9OVCAoIDEyICwgNDAgKSA7CiAgICAgICAgU2l6ZSA9IE1BUF9BUFBGT05UICggMTQwICwgMTAgKSA7CgkJVGV4dCBbIGVuLVVTIF0gPSAiflRleHQiIDsKCQlUYWJTdG9wID0gVFJVRSA7CgkJQ2hlY2sgPSBUUlVFIDsKCX07CglNdWx0aUxpbmVFZGl0IEVEX0VESVQKCXsKCSAgICBIZWxwSUQgPSAic3c6TXVsdGlMaW5lRWRpdDpETEdfSkFWQUVESVQ6RURfRURJVCI7CgkJQm9yZGVyID0gVFJVRSA7CgkJUG9zID0gTUFQX0FQUEZPTlQgKCAyMyAsIDU0ICkgOwoJCVNpemUgPSBNQVBfQVBQRk9OVCAoIDE1NSAsIDkxICkgOwoJCUxlZnQgPSBUUlVFIDsKCQlWU2Nyb2xsID0gVFJVRSA7CgkJSFNjcm9sbCA9IFRSVUUgOwoJCUlnbm9yZVRhYiA9IFRSVUUgOwoJCVRhYlN0b3AgPSBUUlVFIDsKCX07CiAgICBGaXhlZExpbmUgRkxfUE9TVElUCgl7CgkJUG9zID0gTUFQX0FQUEZPTlQgKCA2ICwgMyApIDsKICAgICAgICBTaXplID0gTUFQX0FQUEZPTlQgKCAxNzkgLCA4ICkgOwoJCVRleHQgWyBlbi1VUyBdID0gIkNvbnRlbnRzIiA7Cgl9OwoJT0tCdXR0b24gQlROX1BPU1RfT0sKCXsKCQlQb3MgPSBNQVBfQVBQRk9OVCAoIDE5MSAsIDYgKSA7CgkJU2l6ZSA9IE1BUF9BUFBGT05UICggNTAgLCAxNSApIDsKCQlEZWZCdXR0b24gPSBUUlVFIDsKCX07CglDYW5jZWxCdXR0b24gQlROX1BPU1RfQ0FOQ0VMCgl7CgkJUG9zID0gTUFQX0FQUEZPTlQgKCAxOTEgLCAyMyApIDsKCQlTaXplID0gTUFQX0FQUEZPTlQgKCA1MCAsIDE1ICkgOwoJfTsKCUhlbHBCdXR0b24gQlROX1BPU1RfSEVMUAoJewoJCVBvcyA9IE1BUF9BUFBGT05UICggMTkxICwgNDAgKSA7CgkJU2l6ZSA9IE1BUF9BUFBGT05UICggNTAgLCAxNSApIDsKCX07CglJbWFnZUJ1dHRvbiBCVE5fUFJFVgoJewoJICAgIEhlbHBJRCA9ICJzdzpJbWFnZUJ1dHRvbjpETEdfSkFWQUVESVQ6QlROX1BSRVYiOwoJCVBvcyA9IE1BUF9BUFBGT05UICggMTkxICwgNjAgKSA7CgkJU2l6ZSA9IE1BUF9BUFBGT05UICggMjQgLCAxNCApIDsKCQlTeW1ib2wgPSBJTUFHRUJVVFRPTl9BUlJPV19MRUZUIDsKCX07CglJbWFnZUJ1dHRvbiBCVE5fTkVYVAoJewoJICAgIEhlbHBJRCA9ICJzdzpJbWFnZUJ1dHRvbjpETEdfSkFWQUVESVQ6QlROX05FWFQiOwoJCVBvcyA9IE1BUF9BUFBGT05UICggMjE3ICwgNjAgKSA7CgkJU2l6ZSA9IE1BUF9BUFBGT05UICggMjQgLCAxNCApIDsKCQlTeW1ib2wgPSBJTUFHRUJVVFRPTl9BUlJPV19SSUdIVCA7Cgl9OwoJIC8vIGxva2FsZSBTdHJpbmdzCglTdHJpbmcgU1RSX0pBVkFfRURJVAoJewoJCVRleHQgWyBlbi1VUyBdID0gIkVkaXQgU2NyaXB0IiA7Cgl9OwoJU3RyaW5nIFNUUl9KQVZBX0lOU0VSVAoJewoJCS8qICMjIyBBQ0hUVU5HOiBOZXVlciBUZXh0IGluIFJlc291cmNlPyBTY3JpcHQgZWluZvxnZW4gOiBTY3JpcHQgZWluZrNnZW4gKi8KCQlUZXh0IFsgZW4tVVMgXSA9ICJJbnNlcnQgU2NyaXB0IiA7Cgl9OwoJVGV4dCBbIGVuLVVTIF0gPSAiRWRpdCBTY3JpcHQiIDsKfTsKIC8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogRU9GCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgo=