LyoKICogU3RhcnQKICogSXRhbGlhbiBMYW5ndWFnZSBTdXBwb3J0CiAqCiAqIENvcHlyaWdodCAyMDAzIERhbiBLZWdlbAogKiBDb3B5cmlnaHQgMjAwMyBJdmFuIExlbyBQdW90aQogKiBDb3B5cmlnaHQgMjAwNiBBbnRvbmlvIENvZGF6emkKICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiAqLwoKTEFOR1VBR0UgTEFOR19JVEFMSUFOLCBTVUJMQU5HX0RFRkFVTFQKClNUUklOR1RBQkxFIERJU0NBUkRBQkxFIExBTkdVQUdFIExBTkdfSVRBTElBTiwgU1VCTEFOR19ERUZBVUxUCnsKU1RSSU5HX1VTQUdFLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkF2dmlhIHVuIHByb2dyYW1tYSwgbyBhcHJpIHVuIGRvY3VtZW50byBjb24gaWwgcHJvZ3JhbW1hIG5vcm1hbG1lbnRlIHVzYXRvIHBlciBpIGZpbGVzIGNvbiBxdWVsbCdlc3RlbnNpb25lIFxuXApVc2FnZTogXG5cCnN0YXJ0IFtvcHRpb25zXSBub21lX3Byb2dyYW1tYSBbLi4uXSBcblwKc3RhcnQgW29wdGlvbnNdIG5vbWVfZG9jdW1lbnRvIFxuXAogXG5cCk9wdGlvbnM6IFxuXAovTVtpbmltaXplZF0gQXZ2aWEgaWwgcHJvZ3JhbW1hIG1pbmltaXp6YXRvLiBcblwKL01BWFtpbWl6ZWRdIEF2dmlhIGlsIHByb2dyYW1tYSBtYXNzaW1pemF0by4gXG5cCi9SW2VzdG9yZWRdICBBdnZpYSBpbCBwcm9ncmFtbWEgbm9ybWFsbWVudGUgKG7oIG1pbmltaXp6YXRvIG7oIG1hc3NpbWl6YXRvKS4gXG5cCi9XW2FpdF0gICAgICBBdHRlbmRpIGwndXNjaXRhIGRlbCBwcm9ncmFtbWEsIHBvaSBlc2NpIGNvbiBpbCBzdW8gY29kaWNlIGRpIHVzY2l0YS4gXG5cCi9MICAgICAgICAgICBNb3N0cmEgbCdhY2NvcmRvIGRpIGxpY2VuemEgY29uIGwndXRlbnRlIGZpbmFsZS4gXG5cCiBcblwKc3RhcnQuZXhlIHZlcnNpb25lIDAuMiBDb3B5cmlnaHQgKEMpIDIwMDMsIERhbiBLZWdlbCBcblwKU3RhcnQg6CBmb3JuaXRvIFNFTlpBIEdBUkFOWklBIGRpIGFsY3VuIHRpcG87IHBlciB1bHRlcmlvcmkgaW5mb3JtYXppb25pIGVzZWd1aXJlIHN0YXJ0IGNvbiBsJ29wemlvbmUgL0wuIFxuXApRdWVzdG8g6CBzb2Z0d2FyZSBsaWJlcm8sIGUgbG8gcG90ZXRlIHJlZGlzdHJpYnVpcmUgXG5cCnNvdHRvIGFsY3VuZSBjb25kaXppb25pOyBlc2VndWlyZSAnc3RhcnQnIGNvbiBsJ29wemlvbmUgL0wgcGVyIHVsdGVyaW9yaSBpbmZvbWF6aW9uaS4gXG5cCiIKClNUUklOR19MSUNFTlNFLCAic3RhcnQuZXhlIHZlcnNpb25lIDAuMiBDb3B5cmlnaHQgKEMpIDIwMDMsIERhbiBLZWdlbCBcblwKVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBcblwKbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBQdWJsaWMgTGljZW5zZSBcblwKYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBcblwKb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uIFxuXAogXG5cClRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBcblwKYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgXG5cCk1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgXG5cCkdOVSBMZXNzZXIgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gXG5cCiBcblwKWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBQdWJsaWMgTGljZW5zZSBcblwKYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgXG5cCkZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLiBcblwKIFxuXApWZWRlcmUgaWwgZmlsZSBDT1BZSU5HLkxJQiBwZXIgaW5mb3JtYXppb25pIHN1bGxhIGxpY2VuemEuIFxuXAoiCgpTVFJJTkdfRVhFQ0ZBSUwgIk5vbiDoIHN0YXRvIHBvc3NpYmlsZSBlc2VndWlyZSBsJ2FwcGxpY2F6aW9uZSwgbyBuZXNzdW5hIGFwcGxpY2F6aW9uZSDoIGFzc29jaWF0YSBjb24gaWwgZmlsZSBzcGVjaWZpY2F0by5cblNoZWxsRXhlY3V0ZUV4IGZhbGxpdG8iCn0K