JElkOiBSRUFETUUgMTQzMyAyMDExLTA3LTAxIDE1OjEyOjMwWiBqZXJlbWlhcyAkCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICBQREYgSU1BR0UgU1VQUE9SVCBGT1IgQVBBQ0hFIEZPUCAgLSAgUkVBRE1FCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKQ29udGVudHMgb2YgdGhpcyBmaWxlOgogLSBXaGF0J3MgaW4gaGVyZT8KIC0gUmVxdWlyZW1lbnRzCiAtIExlZ2FsIEluZm9ybWF0aW9uCiAtIFdoZXJlIHRvIGdldCBoZWxwPwogLSBIb3cgZG8gSSBlbmFibGUgUERGIGltYWdlIHN1cHBvcnQgaW4gRk9QPwogLSBOb3RlcyBvbiBQREYgaW1hZ2Ugc3VwcG9ydCBmb3Igb3V0cHV0IGZvcm1hdHMgb3RoZXIgdGhhbiBQREYKIC0gS25vd24gSXNzdWVzCiAtIENvbnRyaWJ1dG9ycwogLSBSZWxlYXNlIE5vdGVzCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCgpXaGF0J3MgaW4gaGVyZT8KLS0tLS0tLS0tLS0tLS0tCgpUaGlzIHBhY2thZ2UgY29udGFpbnMgY2xhc3NlcyB3aGljaCBhZGQgc3VwcG9ydCB1c2luZyBQREYgaW1hZ2VzIGluCmZvOmV4dGVybmFsLWdyYXBoaWMgZWxlbWVudHMgd2hlbiB5b3UgZ2VuZXJhdGUgUERGIGZpbGVzLiBUaGlzIG1lYW5zIHlvdSBjYW4Kd3JpdGUgc29tZXRoaW5nIGxpa2U6Cgo8Zm86ZXh0ZXJuYWwtZ3JhcGhpYyBzcmM9Im15LWRvYy5wZGYiLz4KCkltcGxlbWVudGF0aW9uIG5vdGVzOgoKKiBUaGlzIHBhY2thZ2UgdXNlcyB0aGUgQXBhY2hlIFBERkJveCBQREYgbGlicmFyeSBmb3IgcGFyc2luZyB0aGUgUERGCiAgZmlsZXMgYXMgRk9QJ3MgUERGIGxpYnJhcnkgaXMgYSB3cml0ZS1vbmx5IGxpYnJhcnkuCgoqIFBERiBpbWFnZSBzdXBwb3J0IGlzIGRvbmUgZGlmZmVyZW50bHkgZm9yIFBERiBvdXRwdXQgdGhhbiBmb3IgdGhlIAogIG90aGVyIG91dHB1dCBmb3JtYXRzLiBGb3IgUERGIG91dHB1dCwgdGhlIHBsdWctaW4gdHJpZXMgdG8gdHJhbnNmZXIgCiAgdGhlIHZhcmlvdXMgUERGIG9iamVjdHMgMToxIHRvIHRoZSB0YXJnZXQgUERGLiBGb3IgdGhlIG90aGVyIG91dHB1dCAKICBmb3JtYXRzLCBBcGFjaGUgUERGQm94IGlzIHVzZWQgdG8gcmVuZGVyIHRoZSBQREYgdG8gYSBHcmFwaGljczJEIAogIG9iamVjdCAoSmF2YTJEKS4gUERGQm94IHN0aWxsIGhhcyBzb21lIHByb2JsZW1zIHdpdGggcmVuZGVyaW5nIGNlcnRhaW4gCiAgUERGcywgc28gaWYgeW91IHJ1biBpbnRvIGEgcHJvYmxlbSB3aXRoIHRoYXQsIGRvbid0IGNvbWUgdG8gbWUuIAogIFJhdGhlciwgY29uc2lkZXIgaGVscGluZyBvdXQgaW4gdGhlIFBERkJveCBwcm9qZWN0IHRvIGltcHJvdmUgdGhlIAogIGNvZGUuIFRoaXMgcGx1Zy1pbiBvbmx5IHBsYXlzIHRoZSBhZGFwdGVyIGJldHdlZW4gRk9QIGFuZCBQREZCb3guIEl0IAogIGlzIG5vdCByZXNwb25zaWJsZSBmb3IgY29ycmVjdCByZW5kZXJpbmcgb2YgdGhlIFBERi4KCiogSW5kaXZpZHVhbCBwYWdlcyBpbnNpZGUgYSBtdWx0aS1wYWdlIFBERiBjYW4gYmUgYWNjZXNzZWQgYnkgdXNpbmcgYSBVUkkKICBmcmFnbWVudCBpbiB0aGUgZm9sbG93aW5nIGZvcm06IDx1cmk+I3BhZ2U9PG5yPgogIEV4YW1wbGU6IGh0dHA6Ly9sb2NhbGhvc3QvbXlkb2MucGRmI3BhZ2U9NwogIE5vdGU6IHRoaXMgb25seSB3b3JrcyBvbiBVUklzLCBub3QgcGxhaW4gZmlsZSBuYW1lcyBpbiB3aGljaCBjYXNlIHlvdSdsbAogIGdldCBhbiBlcnJvci4gUGxhaW4gZmlsZSBuYW1lcyBhcmUgaWxsZWdhbCBpbiBYU0wtRk8gYW55d2F5LCBzdHJpY3RseQogIHNwZWFraW5nLgoKKiBUaGUgUERGIGZpbGUgbXVzdCBub3QgYmUgZW5jcnlwdGVkLiBPciBlbHNlLCB5b3UnbGwgaGF2ZSB0byBpbnN0YWxsIGFuCiAgT25Mb2FkSW50ZXJjZXB0b3IuIEV4YW1wbGU6CiAgCiAgSW50ZXJjZXB0b3JzLmdldEluc3RhbmNlKCkuc2V0T25Mb2FkKG5ldyBEZWNyeXB0ZXIoKSk7CgogIFsuLl0KICAKICBwcml2YXRlIHN0YXRpYyBjbGFzcyBEZWNyeXB0ZXIgaW1wbGVtZW50cyBPbkxvYWRJbnRlcmNlcHRvciB7CgogICAgICBwdWJsaWMgUEREb2N1bWVudCBpbnRlcmNlcHQoUEREb2N1bWVudCBkb2MsIFVSSSB1cmkpIHRocm93cyBJT0V4Y2VwdGlvbiB7CiAgICAgICAgICBpZiAoZG9jLmlzRW5jcnlwdGVkKCkpIHsKICAgICAgICAgICAgICBEZWNyeXB0aW9uTWF0ZXJpYWwgZGVjID0gbmV3IFN0YW5kYXJkRGVjcnlwdGlvbk1hdGVyaWFsKCJwYXNzd29yZCIpOwogICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgIGRvYy5vcGVuUHJvdGVjdGlvbihkZWMpOwogICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkRlY3J5cHRpbmc6ICIgKyB1cmkpOwogICAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJFcnJvciBkZWNyeXB0aW5nIFBERiIsIGUpOwogICAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBkb2M7CiAgICAgIH0KCiAgfQogIAogIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGhvdyB0byBzZXQgZGVjcnlwdGlvbiBtYXRlcmlhbCwgcGxlYXNlIHNlZSB0aGUgUERGQm94CiAgZG9jdW1lbnRhdGlvbi4KICAKKiBJZiB5b3UgZW5hYmxlIFBERi9BIG9yIFBERi9YIGZ1bmN0aW9uYWxpdHksIHRoZSByZXN1bHRpbmcgUERGIG1heSBub3QgYmUKICBhIGNvbXBsaWFudCBmaWxlIHNpbmNlIHRoZSBjb2RlIGlzbid0IHNvcGhpc3RpY2F0ZWQgZW5vdWdoIHRvIGVuc3VyZSB0aGF0CiAgdGhlIHJ1bGVzIG9mIFBERi9BIGFuZCBQREYvWCBhcmUgcmVzcGVjdGVkIHdoZW4gdGhlIFBERiBmaWxlIGlzIGVtYmVkZGVkLgogIFNvIGlmIHlvdSBlbmFibGUgUERGL0EgYW5kL29yIFBERi9YLCB5b3Ugc2hvdWxkIHJlZnJhaW4gZnJvbSB1c2luZyB0aGlzCiAgcGFja2FnZS4KCiogSWYgdGhlIFBERiB5b3Ugd2FudCB0byBlbWJlZCBoYXMgYW5ub3RhdGlvbnMsIGJlIHByZXBhcmVkIHRoYXQgdGhleSBtYXkKICBub3QgYmUgdHJhbnNmZXJyZWQgY29ycmVjdGx5LgoKKiBEb2N1bWVudCBzdHJ1Y3R1cmUgKFRhZ2dlZCBQREYvQWNjZXNzaWJpbGl0eSkgd2lsbCBub3QgYmUgcHJlc2VydmVkIQoKKiBBcGFjaGUgRk9QIGN1cnJlbnRseSBnZW5lcmF0ZXMgUERGIDEuNC4gSWYgeW91IGluY2x1ZGUgYSBQREYgd2l0aCBhCiAgaGlnaGVyIFBERiB2ZXJzaW9uLCB0aGUgcmVzdWx0cyBtYXkgYmUgdW5wcmVkaWN0YWJsZS4KCiogVGhpcyBwYWNrYWdlIGRvZXMgbm90IHdvcmsgd2l0aCBGT1AgMC45MywgMC45NCBvciBhbnkgZWFybGllciB2ZXJzaW9uLgogIFlvdSB3aWxsIG5lZWQgYSBsYXRlciByZWxlYXNlIG9yIHRoZSBjb2RlIGZyb20gRk9QIFRydW5rLgoKKiBTb21lIFBERiBtYXkgbm90IGJlIHByb2Nlc3NlZCBjb3JyZWN0bHkgd2l0aCBGT1AgMC45NSBkdWUgdG8gYnVncyBpbgogIGl0cyBQREYgbGlicmFyeS4gWW91IG1heSBuZWVkIHRvIHVwZ3JhZGUgQXBhY2hlIEZPUCBpbiB0aGlzIGNhc2UuCgoqIFVzaW5nIFBERiBmaWxlcyBpcyBOT1Qgc3VwcG9ydGVkIGluc2lkZSBTVkcsIG9ubHkgaW4gWFNMLUZPLgoKCiAgICAKUmVxdWlyZW1lbnRzCi0tLS0tLS0tLS0tLS0tLS0KClRoaXMgcGx1Zy1pbiBoYXMgdGhlIGZvbGxvd2luZyByZXF1aXJlbWVudHM6Ci0gQXBhY2hlIFBERkJveCAxLjAgb3IgbGF0ZXIKLSBBcGFjaGUgWE1MIEdyYXBoaWNzIENvbW1vbnMgMS4zLjEgb3IgbGF0ZXIgKGZvciB0aGUgaW1hZ2UgY29udmVydGVyKQotIEFwYWNoZSBYTUwgRk9QIDAuOTUgb3IgbGF0ZXIgKGZvciB0aGUgRk9QIGZ1bmN0aW9uYWxpdHkpCi0gSmF2YSAxLjUgb3IgbGF0ZXIKCk5vdGU6IGZvciBzb21lIHByb2JsZW1zIHJlbGF0ZWQgdG8gdGhlIFBERiBwbHVnLWluLCBBcGFjaGUgRk9QIDEuMCBvciBsYXRlcgppcyByZXF1aXJlZC4gQSBudW1iZXIgb2YgYnVncyBoYWQgdG8gYmUgZml4ZWQgaW4gRk9QJ3MgUERGIGxpYnJhcnkuCgoKTGVnYWwgSW5mb3JtYXRpb24KLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpUaGlzIHBhY2thZ2UgaXMgcHVibGlzaGVkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSB2ZXJzaW9uIDIuMC4gRm9yIHRoZSBsaWNlbnNlCnRleHQsIHBsZWFzZSBzZWUgdGhlIGZvbGxvd2luZyBmaWxlczoKLSBMSUNFTlNFCi0gTk9USUNFCgpMZWdhbCBpbmZvcm1hdGlvbiBvbiB0aGlyZC1wYXJ0eSBsaWJyYXJpZXMgdXNlZCBieSB0aGlzIHBsdWctaW4gY2FuIGJlCmZvdW5kIGluIHRoZSAibGliL1JFQURNRS50eHQiIGZpbGUuCgogICAgCldoZXJlIHRvIGdldCBoZWxwPwotLS0tLS0tLS0tLS0tLS0tLS0tLS0gICAgCgpTZWU6IGh0dHA6Ly94bWxncmFwaGljcy5hcGFjaGUub3JnL2ZvcC9nZXRoZWxwLmh0bWwKCgpIb3cgZG8gSSBlbmFibGUgUERGIGltYWdlIHN1cHBvcnQgaW4gRk9QPwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKSnVzdCBhZGQgdGhlIGZvcC1wZGYtaW1hZ2VzLmphciBhbmQgbGliL3BkZmJveC0qLmphciAoaW5jbHVkaW5nIHRoZSBvdGhlcgptaW5pbWFsIGRlcGVuZGVuY2llcyBmb3IgUERGQm94KSB0byB0aGUgY2xhc3NwYXRoIG9uIHRoZSBzYW1lIGNsYXNzcGF0aApsZXZlbCBhcyB5b3UgcHV0IGZvcC5qYXIuCgpZb3UgY2FuIHRoZW4gdXNlIFVSSXMgcmVmZXJyaW5nIHRvIFBERiBmaWxlcyBpbnNpZGUgZm86ZXh0ZXJuYWwtZ3JhcGhpYyBhbmQKZm94OmV4dGVybmFsLWRvY3VtZW50IGVsZW1lbnRzLgoKCk5vdGVzIG9uIFBERiBpbWFnZSBzdXBwb3J0IGZvciBvdXRwdXQgZm9ybWF0cyBvdGhlciB0aGFuIFBERgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KClBsZWFzZSBub3RlIHRoYXQgdGhpcyBwbHVnLWluIHdhcyB3cml0dGVuIG1vc3RseSBmb3IgUERGIHByb2R1Y3Rpb24uIEZvcgpvdGhlciBGT1Agb3V0cHV0IGZvcm1hdHMsIHRoZSBQREYgaXMgY29udmVydGVkIHRvIGEgdmVjdG9yIG9yIGJpdG1hcCBpbWFnZQp1c2luZyBBcGFjaGUgUERGQm94IHdoaWNoIGlzIG5vdCB5ZXQgYSBmdWxsLWZsZWRnZWQgUERGIHZpZXdlci4gVGhlcmUgbWF5CmJlIGxpbWl0YXRpb25zIGNvbmNlcm5pbmcgdGhlIHF1YWxpdHkuIElmIHlvdSBydW4gaW50byBhIHByb2JsZW0gZGlzcGxheWluZwpQREYgZm9yIGFueSBvdXRwdXQgZm9ybWF0IG90aGVyIHRoYW4gUERGLCB5b3Ugd2lsbCBuZWVkIHRvIGFzayB0aGUgUERGQm94CmNvbW11bml0eSBmb3IgaGVscC4gT3IgeW91IGNhbiBoZWxwIHRoZSBBcGFjaGUgUERGQm94IHByb2plY3QgdG8gaW1wcm92ZQp0aGVpciBQREYgaW50ZXJwcmV0ZXIuCgpUaGUgQXBhY2hlIFBERkJveCB3ZWJzaXRlOiBodHRwOi8vcGRmYm94LmFwYWNoZS5vcmcvCgoKS25vd24gSXNzdWVzCi0tLS0tLS0tLS0tLS0tLQoKLSBJZiBBY3JvYmF0IGZhaWxzIHRvIG9wZW4gdGhlIGdlbmVyYXRlZCBQREYsIGl0IG1heWJlIGJlIGR1ZSB0byBhIGJ1ZyBpbiBGT1AKICB0aGF0IHdhcyBmaXhlZCBpbiByZXZpc2lvbiA4MzMzNzUuIAoKLSBXaGVuIGltcG9ydGluZyBtdWx0aXBsZSBwYWdlcyBmcm9tIHRoZSBzYW1lIFBERiwgdGhlIHNhbWUgUERGIG9iamVjdHMgZnJvbQogIHRoZSBvcmlnaW5hbCBtYXkgYmUgaW1wb3J0ZWQgYW5ldyBmb3IgZWFjaCBwYWdlLiBUaGVyZSBpcyBjdXJyZW50bHkgbm8KICBlYXN5IHdheSB0byBhdm9pZCB0aGlzLgoKQ29udHJpYnV0b3JzCi0tLS0tLS0tLS0tLS0tLQoKLSBKZXJlbWlhcyBN5HJraSAob3JpZ2luYWwgYXV0aG9yKQotIEtyaXN0ZXIgV2lja3NlbGwKLSBWaW5jZW50IEhlbm5lYmVydAoKClZlcnNpb25zIHByaW9yIHRvIDIuMSAoaS5lLiBwcmlvciB0byB0aGUgbW92ZSB0byB0aGUgQXBhY2hlIFhNTCBHcmFwaGljcwpwcm9qZWN0KSBjYW4gYmUgZG93bmxvYWRlZCBmcm9tIGhlcmU6Cmh0dHA6Ly93d3cuamVyZW1pYXMtbWFlcmtpLmNoL2RldmVsb3BtZW50L2ZvcC9pbmRleC5odG1sCgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgUkVMRUFTRSBOT1RFUwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KClZlcnNpb24gMi4xIChUQkQpCj09PT09PT09PT09PT09PT09PT09PT09PT0KCkNoYW5nZXM6Ci0gQnVnZml4IGZvciBoYW5kbGluZyBvZiBzdHJpbmdzICh0aGUgY2hlY2sgbWV0aG9kIGZvciBVUy1BU0NJSSBoYWQgYSBidWcpCgpWZXJzaW9uIDIuMCAoMjAxMC0xMC0yOCkKPT09PT09PT09PT09PT09PT09PT09PT09PQoKQ2hhbmdlczoKLSBNb3ZlZCBmcm9tIFBERkJveCAob3JnLnBkZmJveCkgdG8gQXBhY2hlIFBERkJveCAob3JnLmFwYWNoZS5wZGZib3gpLiBOb3RlCiAgdGhhdCBBcGFjaGUgUERGQm94IGlzIGN1cnJlbnRseSBpbiBpbmN1YmF0aW9uIGF0IHRoZSBBU0YuIE1vcmUgaW5mbyBhdDoKICBodHRwOi8vaW5jdWJhdG9yLmFwYWNoZS5vcmcvcGRmYm94LwotIEFkZGVkIHN1cHBvcnQgZm9yICJudWxsIiBvYmplY3RzIGluIFBERi4KLSBBZGRlZCBzdXBwb3J0IGZvciBGT1AncyBuZXcgaW50ZXJtZWRpYXRlIGZvcm1hdCAoYW5kIHRoZSBuZXcgb3V0cHV0CiAgaW1wbGVtZW50YXRpb25zKS4KLSBGaXhlZCB0cmFuc2ZlciBvZiB1bnRvdWNoZWQgc3RyZWFtcy4KLSBBZGRlZCBhbiBJbWFnZUNvbnZlcnRlciB0aGF0IGV4dGVuZHMgQXBhY2hlIFhNTCBHcmFwaGljcyBDb21tb25zJyBpbWFnZQogIGxvYWRlciBmcmFtZXdvcmsgd2l0aCBhIGNvbnZlcnRlciBmcm9tIFBERkJveCB0byBKYXZhMkQuIFRoaXMgZW5hYmxlcyBQREYKICBkaXNwbGF5IGZvciBhbGwgb2YgRk9QJ3Mgb3V0cHV0IGZvcm1hdHMuIFNlZSB0aGUgcmVzdHJpY3Rpb25zIG1lbnRpb25lZCBhYm92ZS4KLSBGaXggcmUtZW5jb2RpbmcgcHJvYmxlbSBmb3IgYmluYXJ5IHN0cmluZ3MgKGZvciBleGFtcGxlIGxvb2t1cCB0YWJsZXMgZm9yCiAgL0luZGV4ZWQgY29sb3Igc3BhY2VzKS4KLSBUYWtlbiBhZHZhbnRhZ2Ugb2YgaHR0cHM6Ly9pc3N1ZXMuYXBhY2hlLm9yZy9qaXJhL2Jyb3dzZS9QREZCT1gtNTA3IHRvCiAgYXZvaWQgd2FybmluZyBtZXNzYWdlcyBpbiBDT1NEb2N1bWVudCdzIGZpbmFsaXplciBtZXRob2QuCi0gRml4ZWQgTnVsbFBvaW50ZXJFeGNlcHRpb24gaWYgYSBwYWdlIGhhcyBubyBjb250ZW50IHN0cmVhbSAoZW1wdHkgcGFnZSkuCi0gQWRkZWQgbGltaXRlZCBzdXBwb3J0IGZvciBBY3JvRm9ybXMgKFBERiBmb3JtcykuCi0gVXNpbmcgQ3JvcEJveCBpbnN0ZWFkIG9mIE1lZGlhQm94LCBpZiBhdmFpbGFibGUsIHRvIGRlZmluZSB0aGUgcG9ydGlvbiBvZiB0aGUKICBQREYgdG8gZGlzcGxheS4KLSBBZGRlZCBzdXBwb3J0IGZvciB0aGUgL1JvdGF0aW9uIGVudHJ5IGluIHRoZSBQYWdlIGRpY3Rpb25hcnkuCi0gSGFuZGxlZCB0aGUgY2FzZSB3aGVyZSB0aGUgUmVzb3VyY2VzIGRpY3Qgb2YgYSBwYWdlIGlzIG1pc3NpbmcgYW5kIHRoZXJlZm9yZQogIGluaGVyaXRlZC4KLSBGaXhlZCBhIHByb2JsZW0gd2l0aCBDcm9wL01lZGlhQm94IGRpY3Rpb25hcmllcyBub3Qgc3RhcnRpbmcgYXQgY29vcmRpbmF0ZSAwLDAuCi0gQWRkZWQgb24tbG9hZCBob29rIHRvIGRlY3J5cHQgYSBQREYsIGZvciBleGFtcGxlLgotIEFkZGVkIHN1cHBvcnQgZm9yIG1lcmdpbmcgQWNyb0Zvcm1zIChUaGFua3MgdG8gVmluY2VudCBIZW5uZWJlcnQpCi0gVXBkYXRlZCBBcGFjaGUgUERGQm94IHRvIHZlcnNpb24gMC44LjAgdG8gMS4zLjEuIFRoZSBwbHVnLWluIG5vdyByZXF1aXJlcyBhdAogIGxlYXN0IEoyU0UgMS41IQoKClZlcnNpb24gMS4zICgyMDA4LTExLTI4KQo9PT09PT09PT09PT09PT09PT09PT09PT09CgpDaGFuZ2VzOgotIEZpeGVkIGEgTnVsbFBvaW50ZXJFeGNlcHRpb24gd2hlbiB0aGUgTWVkaWFCb3ggaXMgaW5oZXJpdGVkLgotIEFuIGludmFsaWQgcGFnZSBudW1iZXIgaXMgbm93IHByb3Blcmx5IGhhbmRsZWQuCgoKVmVyc2lvbiAxLjIgKDIwMDgtMDQtMDQpCj09PT09PT09PT09PT09PT09PT09PT09PT0KCkNoYW5nZXM6Ci0gRml4ZWQgaGFuZGxpbmcgb2Ygcm90YXRlZCBwYWdlcyAoVGhhbmtzIHRvIEtyaXN0ZXIgV2lja3NlbGwpCi0gRml4ZWQgIlBERk9iamVjdCBhbHJlYWR5IGhhcyBhbiBvYmplY3QgbnVtYmVyIiBlcnJvciBvY2N1cnJpbmcgd2l0aCBjZXJ0YWluClBERnMuCgpWZXJzaW9uIDEuMWEgKDIwMDgtMDEtMjIpCj09PT09PT09PT09PT09PT09PT09PT09PT0KCkNoYW5nZXM6Ci0gRGlzYWJsZWQgdGhlIGluLW1lbW9yeSBjYWNoaW5nIG9mIFBERiBmaWxlcyBkdWUgdG8gYW4gaW50ZXJtaXR0ZW50IGJ1ZyB0aGF0CmFwcGVhcmVkIGR1ZSB0byByZXVzZSBvZiBhIFBERG9jdW1lbnQuIFRoaXMgbmVlZHMgdG8gYmUgZml4ZWQgaW4gUERGQm94LgotIENoYW5nZSBpbiBQREZCb3g6IERvbid0IHdhcm4gYWJvdXQgdGhhdCBDT1NEb2N1bWVudCBpc24ndCBjbG9zZWQuIEluc3RlYWQsCnRoZSBvYmplY3QgaXMgY2xvc2VkIGF1dG9tYXRpY2FsbHkgd2hlbiBpdCdzIGNvbGxlY3RlZC4KClZlcnNpb24gMS4xICgyMDA4LTAxLTE0KQo9PT09PT09PT09PT09PT09PT09PT09PT09CgpDaGFuZ2VzOgotIEFkanVzdG1lbnRzIHRvIGNoYW5nZXMgaW4gRk9QIFRydW5rIGFmdGVyIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYSBuZXcgaW1hZ2UKbG9hZGluZyBwYWNrYWdlIChpbiBBcGFjaGUgWE1MIEdyYXBoaWNzIENvbW1vbnMpLgotIFN1cHBvcnQgZm9yIGFkZHJlc3NpbmcgZXZlcnkgc2luZ2xlIHBhZ2UgaW4gYSBQREYsIG5vdCBqdXN0IHRoZSBmaXJzdC4KCk5vdGU6IFRoaXMgdmVyc2lvbiB3aWxsIG9ubHkgd29yayB3aXRoIEZPUCBUcnVuayAocmV2aXNpb24gNjExNzY4IG9yIGxhdGVyKSBvcgp3aXRoIEZPUCAwLjk1IHdoZW4gaXQgaXMgcmVsZWFzZWQuCgpWZXJzaW9uIDEuMCAoMjAwNy0wOC0wNikKPT09PT09PT09PT09PT09PT09PT09PT09PQoKVGhpcyBpcyB0aGUgaW5pdGlhbCByZWxlYXNlLiBGZWVkYmFjayBpcyB3ZWxjb21lIGFzIHRoaXMgaXMgdmVyeSBuZXcgY29kZS4KCk5vdGU6IFZlcnNpb24gMS4wIGNvbnRhaW5zIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiBQREZCb3ghIEknbGwgc2VuZCBhIHBhdGNoCndpdGggdGhlIGNoYW5nZSB0byB0aGUgUERGQm94IHByb2plY3Qgc28gaG9wZWZ1bGx5IHRoZSBuZXh0IHZlcnNpb24gb2YgUERGQm94CndpbGwgbm90IG5lZWQgc3VjaCBhIG1vZGlmaWNhdGlvbi4KCk5vdGU6IFZlcnNpb24gMS4wIGNvbnRhaW5zIGEgZGV2ZWxvcG1lbnQgdmVyc2lvbiBvZiBBcGFjaGUgRk9QIGZyb20gdGhlCmZvbGxvd2luZyBicmFuY2g6Cmh0dHBzOi8vc3ZuLmFwYWNoZS5vcmcvcmVwb3MvYXNmL3htbGdyYXBoaWNzL2ZvcC9icmFuY2hlcy9UZW1wX1BERl9pbl9QREYvCkFzIHNvb24gYXMgdGhlIGNvZGUgaXMgc3RhYmlsaXplZCB0aGlzIHdpbGwgYmUgbWVyZ2VkIGludG8gdGhlIFRydW5rLgoK