LyoKICogU3RhcnQKICogSXRhbGlhbiBMYW5ndWFnZSBTdXBwb3J0CiAqCiAqIENvcHlyaWdodCAyMDAzIERhbiBLZWdlbAogKiBDb3B5cmlnaHQgMjAwMyBJdmFuIExlbyBQdW90aQogKiBDb3B5cmlnaHQgMjAwNiBBbnRvbmlvIENvZGF6emkKICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCiAqLwoKTEFOR1VBR0UgTEFOR19JVEFMSUFOLCBTVUJMQU5HX05FVVRSQUwKClNUUklOR1RBQkxFIERJU0NBUkRBQkxFCnsKU1RSSU5HX1VTQUdFLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkF2dmlhIHVuIHByb2dyYW1tYSwgbyBhcHJpIHVuIGRvY3VtZW50byBjb24gaWwgcHJvZ3JhbW1hIG5vcm1hbG1lbnRlIHVzYXRvIHBlciBpIGZpbGVzIGNvbiBxdWVsbCdlc3RlbnNpb25lXG5cClVzYWdlOlxuXApzdGFydCBbb3B0aW9uc10gbm9tZV9wcm9ncmFtbWEgWy4uLl1cblwKc3RhcnQgW29wdGlvbnNdIG5vbWVfZG9jdW1lbnRvXG5cClxuXApPcHRpb25zOlxuXAovTVtpbmltaXplZF0gQXZ2aWEgaWwgcHJvZ3JhbW1hIG1pbmltaXp6YXRvLlxuXAovTUFYW2ltaXplZF0gQXZ2aWEgaWwgcHJvZ3JhbW1hIG1hc3NpbWl6YXRvLlxuXAovUltlc3RvcmVkXSAgQXZ2aWEgaWwgcHJvZ3JhbW1hIG5vcm1hbG1lbnRlIChu6CBtaW5pbWl6emF0byBu6CBtYXNzaW1pemF0bykuXG5cCi9XW2FpdF0gICAgICBBdHRlbmRpIGwndXNjaXRhIGRlbCBwcm9ncmFtbWEsIHBvaSBlc2NpIGNvbiBpbCBzdW8gY29kaWNlIGRpIHVzY2l0YS5cblwKL0wgICAgICAgICAgIE1vc3RyYSBsJ2FjY29yZG8gZGkgbGljZW56YSBjb24gbCd1dGVudGUgZmluYWxlLlxuXApcblwKc3RhcnQuZXhlIHZlcnNpb25lIDAuMiBDb3B5cmlnaHQgKEMpIDIwMDMsIERhbiBLZWdlbFxuXApTdGFydCDoIGZvcm5pdG8gU0VOWkEgR0FSQU5aSUEgZGkgYWxjdW4gdGlwbzsgcGVyIHVsdGVyaW9yaSBpbmZvcm1hemlvbmkgZXNlZ3VpcmUgc3RhcnQgY29uIGwnb3B6aW9uZSAvTC5cblwKUXVlc3RvIOggc29mdHdhcmUgbGliZXJvLCBlIGxvIHBvdGV0ZSByZWRpc3RyaWJ1aXJlXG5cCnNvdHRvIGFsY3VuZSBjb25kaXppb25pOyBlc2VndWlyZSAnc3RhcnQnIGNvbiBsJ29wemlvbmUgL0wgcGVyIHVsdGVyaW9yaSBpbmZvbWF6aW9uaS5cblwKIgoKU1RSSU5HX0xJQ0VOU0UsICJzdGFydC5leGUgdmVyc2lvbmUgMC4yIENvcHlyaWdodCAoQykgMjAwMywgRGFuIEtlZ2VsXG5cClRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3JcblwKbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBQdWJsaWMgTGljZW5zZVxuXAphcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xXG5cCm9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuXApcblwKVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG5cCmJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG5cCk1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcblwKR05VIExlc3NlciBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuXApcblwKWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBQdWJsaWMgTGljZW5zZVxuXAphbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuXApGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLlxuXApcblwKVmVkZXJlIGlsIGZpbGUgQ09QWUlORy5MSUIgcGVyIGluZm9ybWF6aW9uaSBzdWxsYSBsaWNlbnphLlxuXAoiCgpTVFJJTkdfRVhFQ0ZBSUwgIk5vbiDoIHN0YXRvIHBvc3NpYmlsZSBlc2VndWlyZSBsJ2FwcGxpY2F6aW9uZSwgbyBuZXNzdW5hIGFwcGxpY2F6aW9uZSDoIGFzc29jaWF0YSBjb24gaWwgZmlsZSBzcGVjaWZpY2F0by5cblNoZWxsRXhlY3V0ZUV4IGZhbGxpdG8iCgpTVFJJTkdfVU5JWEZBSUwgIkNvdWxkIG5vdCB0cmFuc2xhdGUgdGhlIHNwZWNpZmllZCBVbml4IGZpbGVuYW1lIHRvIGEgRE9TIGZpbGVuYW1lLiIKfQo=