IyBqbmRuLW1hbmFnZW1lbnQKClRoaXMgcHJvamVjdCBjb25zaXN0cyBvZiB0b29scyBmb3IgbWFuYWdpbmcgYW4gTkROIGZvcndhcmRpbmcgZGFlbW9uIChORkQpLiBJdCByZWxpZXMgb24gdGhlIFtORE4gUHJvdG9jb2xdKGh0dHBzOi8vbmFtZWQtZGF0YS5uZXQpIGFuZCBpdHMgYXNzb2NpYXRlZCBbY2xpZW50IGxpYnJhcnldKGh0dHBzOi8vZ2l0aHViLmNvbS9uYW1lZC1kYXRhL2puZG4pLiBJdCBpbXBsZW1lbnRzIHRoZSBORkQgbWFuYWdlbWVudCBzcGVjaWZpY2F0aW9uIG91dGxpbmVkIGF0IGh0dHA6Ly9yZWRtaW5lLm5hbWVkLWRhdGEubmV0L3Byb2plY3RzL25mZC93aWtpL01hbmFnZW1lbnQuIFBsZWFzZSBub3RlIHRoYXQgdGhpcyBsaWJyYXJ5IGRvZXMgbm90IHlldCBpbXBsZW1lbnQgYWxsIG9mIHRoZSBjb21tYW5kcyBpbiB0aGUgbWFuYWdlbWVudCBzcGVjaWZpY2F0aW9uLgoKIyMgSW5zdGFsbApXaXRoIE1hdmVuLCBhZGQgdGhlIGZvbGxvd2luZyB0byB5b3VyIFBPTToKYGBgCjxkZXBlbmRlbmN5PgogIDxncm91cElkPmNvbS5pbnRlbC5qbmRuLm1hbmFnZW1lbnQ8L2dyb3VwSWQ+CiAgPGFydGlmYWN0SWQ+am5kbi1tYW5hZ2VtZW50PC9hcnRpZmFjdElkPgogIDx2ZXJzaW9uPlJFTEVBU0U8L3ZlcnNpb24+IDwhLS0gb3IgYSBzcGVjaWZpYyB2ZXJzaW9uIC0tPgo8L2RlcGVuZGVuY3k+CmBgYAoKIyMgVXNlCldpdGggYSBGYWNlIHRoYXQgaGFzIGNvbW1hbmQgc2lnbmluZyBpbmZvcm1hdGlvbiBzZXQsIGNhbGwgYW55IG9mIHRoZSBmb2xsb3dpbmcgc3RhdGljIG1ldGhvZHM6CiAtIF9fTkZELnBpbmdMb2NhbChGYWNlIGZvcndhcmRlcilfXzogcGluZyBhIGxvY2FsIE5GRCB3aXRoIC9sb2NhbGhvc3QvbmZkIHRvIHZlcmlmeSBpZiBpdCBleGlzdHMuCiAtIF9fTkZELmdldEZvcndhcmRlclN0YXR1cyhGYWNlIGZvcndhcmRlcilfXzogcmV0cmlldmUgdGhlIGZvcndhcmRlciBzdGF0dXMgaW5mb3JtYXRpb24uCiAtIF9fTkZELmdldEZhY2VMaXN0KEZhY2UgZm9yd2FyZGVyKV9fOiByZXRyaWV2ZSBhbGwgY29ubmVjdGVkIGZhY2VzLgogLSBfX05GRC5nZXRGaWJMaXN0KEZhY2UgZm9yd2FyZGVyKV9fOiByZXRyaWV2ZSBhbGwgZm9yd2FyZGluZyBlbnRyaWVzIGluIHRoZSBGb3J3YXJkaW5nIEluZm9ybWF0aW9uIEJhc2UgKEZJQikuCiAtIF9fTkZELmdldFJpYkxpc3QoRmFjZSBmb3J3YXJkZXIpX186IHJldHJpZXZlIGFsbCByb3V0aW5nIGVudHJpZXMgaW4gdGhlIFJvdXRpbmcgSW5mb3JtYXRpb24gQmFzZSAoUklCKS4KIC0gX19ORkQuY3JlYXRlRmFjZShGYWNlIGZvcndhcmRlciwgU3RyaW5nIHVyaSlfXzogY3JlYXRlIGEgbmV3IGZhY2Ugb24gdGhlIE5GRCBvcGVuZWQgdG8gdGhlIGdpdmVuIFVSSS4KIC0gX19ORkQucmVnaXN0ZXIoRmFjZSBmb3J3YXJkZXIsIC4uLilfXzogaW5jbHVkZXMgc2V2ZXJhbCBzaW1pbGFyIG1ldGhvZHMgZm9yIHJlZ2lzdGVyaW5nIGEgbmV3IHJvdXRlIG9uIHRoZSBORkQuCiAtIF9fTkZELnVucmVnaXN0ZXIoRmFjZSBmb3J3YXJkZXIsIE5hbWUgcm91dGUpX186IHVucmVnaXN0ZXIgYSByb3V0ZSBieSBuYW1lLgogLSBfX05GRC5zZXRTdHJhdGVneShGYWNlIGZvcndhcmRlciwgTmFtZSBwcmVmaXgsIE5hbWUgc3RyYXRlZ3kpX186IHNldCB0aGUgZm9yd2FyZGluZyBzdHJhdGVneSBmb3IgdGhlIGdpdmVuIHByZWZpeC4KClNlZSBbZnVsbCBKYXZhZG9jIGRvY3VtZW50YXRpb25dKGh0dHA6Ly8wMW9yZy5naXRodWIuaW8vam5kbi1tYW5hZ2VtZW50L2luZGV4Lmh0bWwpCgojIyBMaWNlbnNlCkNvcHlyaWdodCCpIDIwMTUsIEludGVsIENvcnBvcmF0aW9uLgoKVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMywgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCgpUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgW0dOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZV0oaHR0cHM6Ly9naXRodWIuY29tLzAxb3JnL2puZG4tbWFuYWdlbWVudC9ibG9iL21hc3Rlci9MSUNFTlNFKSBmb3IgbW9yZSBkZXRhaWxzLgo=