IyBqbmRuLW1hbmFnZW1lbnQKClRoaXMgcHJvamVjdCBjb25zaXN0cyBvZiB0b29scyBmb3IgbWFuYWdpbmcgYW4gTkROIGZvcndhcmRpbmcgZGFlbW9uIChORkQpLiBJdCByZWxpZXMgb24gdGhlIFtORE4gUHJvdG9jb2xdKGh0dHBzOi8vbmFtZWQtZGF0YS5uZXQpIGFuZCBpdHMgYXNzb2NpYXRlZCBbY2xpZW50IGxpYnJhcnldKGh0dHBzOi8vZ2l0aHViLmNvbS9uYW1lZC1kYXRhL2puZG4pLiBJdCBpbXBsZW1lbnRzIHRoZSBORkQgbWFuYWdlbWVudCBzcGVjaWZpY2F0aW9uIG91dGxpbmVkIGF0IGh0dHA6Ly9yZWRtaW5lLm5hbWVkLWRhdGEubmV0L3Byb2plY3RzL25mZC93aWtpL01hbmFnZW1lbnQuIFBsZWFzZSBub3RlIHRoYXQgdGhpcyBsaWJyYXJ5IGRvZXMgbm90IHlldCBpbXBsZW1lbnQgYWxsIG9mIHRoZSBjb21tYW5kcyBpbiB0aGUgbWFuYWdlbWVudCBzcGVjaWZpY2F0aW9uLgoKIyMgSW5zdGFsbApXaXRoIE1hdmVuLCBhZGQgdGhlIGZvbGxvd2luZyB0byB5b3VyIFBPTToKYGBgCjxkZXBlbmRlbmN5PgogIDxncm91cElkPmNvbS5pbnRlbC5qbmRuLm1hbmFnZW1lbnQ8L2dyb3VwSWQ+CiAgPGFydGlmYWN0SWQ+am5kbi1tYW5hZ2VtZW50PC9hcnRpZmFjdElkPgogIDx2ZXJzaW9uPlJFTEVBU0U8L3ZlcnNpb24+IDwhLS0gb3IgYSBzcGVjaWZpYyB2ZXJzaW9uIC0tPgo8L2RlcGVuZGVuY3k+CmBgYAoKIyMgVXNlCldpdGggYSBGYWNlIHRoYXQgaGFzIGNvbW1hbmQgc2lnbmluZyBpbmZvcm1hdGlvbiBzZXQsIGNhbGwgYW55IG9mIHRoZSBmb2xsb3dpbmcgc3RhdGljIG1ldGhvZHM6CiAtIF9fTkZELnBpbmdMb2NhbChGYWNlIGZvcndhcmRlcilfXzogcGluZyBhIGxvY2FsIE5GRCB3aXRoIC9sb2NhbGhvc3QvbmZkIHRvIHZlcmlmeSBpZiBpdCBleGlzdHMuCiAtIF9fTkZELmdldEZhY2VMaXN0KEZhY2UgZm9yd2FyZGVyKV9fOiByZXRyaWV2ZSBhbGwgY29ubmVjdGVkIGZhY2VzLgogLSBfX05GRC5nZXRGaWJMaXN0KEZhY2UgZm9yd2FyZGVyKV9fOiByZXRyaWV2ZSBhbGwgZm9yd2FyZGluZyBlbnRyaWVzIGluIHRoZSBGb3J3YXJkaW5nIEluZm9ybWF0aW9uIEJhc2UgKEZJQikuCiAtIF9fTkZELmdldFJpYkxpc3QoRmFjZSBmb3J3YXJkZXIpX186IHJldHJpZXZlIGFsbCByb3V0aW5nIGVudHJpZXMgaW4gdGhlIFJvdXRpbmcgSW5mb3JtYXRpb24gQmFzZSAoUklCKS4KIC0gX19ORkQuY3JlYXRlRmFjZShGYWNlIGZvcndhcmRlciwgU3RyaW5nIHVyaSlfXzogY3JlYXRlIGEgbmV3IGZhY2Ugb24gdGhlIE5GRCBvcGVuZWQgdG8gdGhlIGdpdmVuIFVSSS4KIC0gX19ORkQucmVnaXN0ZXIoRmFjZSBmb3J3YXJkZXIsIC4uLilfXzogaW5jbHVkZXMgc2V2ZXJhbCBzaW1pbGFyIG1ldGhvZHMgZm9yIHJlZ2lzdGVyaW5nIGEgbmV3IHJvdXRlIG9uIHRoZSBORkQuCiAtIF9fTkZELnVucmVnaXN0ZXIoRmFjZSBmb3J3YXJkZXIsIE5hbWUgcm91dGUpX186IHVucmVnaXN0ZXIgYSByb3V0ZSBieSBuYW1lLgogLSBfX05GRC5zZXRTdHJhdGVneShGYWNlIGZvcndhcmRlciwgTmFtZSBwcmVmaXgsIE5hbWUgc3RyYXRlZ3kpX186IHNldCB0aGUgZm9yd2FyZGluZyBzdHJhdGVneSBmb3IgdGhlIGdpdmVuIHByZWZpeC4KCiMjIExpY2Vuc2UKQ29weXJpZ2h0IKkgMjAxNSwgSW50ZWwgQ29ycG9yYXRpb24uCgpUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAzLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KClRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBbR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXShodHRwczovL2dpdGh1Yi5jb20vMDFvcmcvam5kbi1tYW5hZ2VtZW50L2Jsb2IvbWFzdGVyL0xJQ0VOU0UpIGZvciBtb3JlIGRldGFpbHMuCg==