MjAwMS0wNy0xOSAgRGF2aWQgTydCcmllbiAgPG9icmllbkBGcmVlQlNELm9yZz4KCgkqIGxiYXNlbmFtZS5jOiBOZXcgZmlsZS4KCjIwMDAtMTItMjkgIERKIERlbG9yaWUgIDxkakByZWRoYXQuY29tPgoKCSogZm5tYXRjaC5jOiBNYWtlIHRoZSBub3RlIGFib3V0IHRoZSBvcmlnaW5zIG9mIHRoaXMgZmlsZSBtb3JlCglhY2N1cmF0ZSwgYXQgbGVhc3QgdW50aWwgd2UgY2FuIHN5bmMgd2l0aCBnbGliYy4KCSogZ2V0b3B0LmM6IERpdHRvLgoJKiBnZXRvcHQxLmM6IERpdHRvLgoJKiBtZDUuYzogRGl0dG8uCgkqIG9ic3RhY2suYzogRGl0dG8uCgkKMjAwMC0xMi0yNiAgTWljaGFlbCBTb2tvbG92ICA8bXNva29sb3ZAaXZhbi5IYXJoYW4uT1JHPgoKCSogYnNlYXJjaC5jOiBOZXcgZmlsZS4KCSogY29uZmlndXJlLmluIChmdW5jcyk6IEFkZCBic2VhcmNoLgoJKEFDX0NIRUNLX0ZVTkNTKTogTGlrZXdpc2UuCgkqIGNvbmZpZ3VyZSwgY29uZmlnLmluOiBSZWdlbmVyYXRlLgoKMjAwMC0xMi0xMyAgTWljaGFlbCBTb2tvbG92ICA8bXNva29sb3ZAaXZhbi5IYXJoYW4uT1JHPgoKCSogc2FmZS1jdHlwZS5jOiAjaW5jbHVkZSAiYW5zaWRlY2wuaCIuCgkqIHN0cnRvZC5jOiBMaWtld2lzZS4KCjIwMDAtMTItMTMgIE1pY2hhZWwgU29rb2xvdiAgPG1zb2tvbG92QGl2YW4uSGFyaGFuLk9SRz4KCgkqIHN0cnRvdWwuYzogSW5jbHVkZSBzYWZlLWN0eXBlLmgsIG5vdCBjdHlwZS5oLgoKMjAwMC0xMi0wNyAgWmFjayBXZWluYmVyZyAgPHphY2tAd29sZXJ5LnN0YW5mb3JkLmVkdT4KCgkqIHNhZmUtY3R5cGUuYzogTmV3IGZpbGUuCgkqIE1ha2VmaWxlLmluIChDRklMRVMpOiBBZGQgc2FmZS1jdHlwZS5jLgoJKFJFUVVJUkVEX09GSUxFUyk6IEFkZCBzYWZlLWN0eXBlLm8uCgoJKiBhcmd2LmM6IERlZmluZSBJU0JMQU5LIGFuZCB1c2UgaXQsIG5vdCBpc3NwYWNlLgoJKiBiYXNlbmFtZS5jLCBjcGx1cy1kZW0uYywgZm5tYXRjaC5jLCBwZXhlY3V0ZS5jLCBzdHJ0b2QuYywKCXN0cnRvbC5jLCBzdHJ0b3VsLmM6IEluY2x1ZGUgc2FmZS1jdHlwZS5oLCBub3QgY3R5cGUuaC4gIFVzZQoJdXBwZXJjYXNlIGN0eXBlIG1hY3Jvcy4gIERvbid0IHRlc3QgSVNVUFBFUihjKS9JU0xPV0VSKGMpCgliZWZvcmUgY2FsbGluZyBUT0xPV0VSKGMpL1RPVVBQRVIoYykuCgoyMDAwLTEyLTA3ICBNaWtlIFN0dW1wICA8bXJzQHdycy5jb20+CgoJKiBNYWtlZmlsZS5pbiAoZGlzdGNsZWFuKTogV2hlbiBjbGVhbmluZywgcmVtb3ZlIHRlc3RzdWl0ZS4KCjIwMDAtMTItMDUgIEphc29uIE1lcnJpbGwgIDxqYXNvbkByZWRoYXQuY29tPgoKCSogY3AtZGVtYW5nbGUuYyAoY3BsdXNfZGVtYW5nbGVfdjMpOiBDaGVjayB0aGF0IGl0J3MgYSB2MyBtYW5nbGVkCgluYW1lIGJlZm9yZSBhbGxvY2F0aW5nIHRoZSBkeW5fc3RyaW5nLgoKMjAwMC0xMi0wNCAgSmFzb24gTWVycmlsbCAgPGphc29uQHJlZGhhdC5jb20+CgoJKiBjcC1kZW1hbmdsZS5jOiBzL25ld19hYmkvdjMvLgoJKiBjcGx1cy1kZW0uYzogTGlrZXdpc2UuCgkoY3VycmVudF9kZW1hbmdsaW5nX3N0eWxlKTogTm93IGF1dG9fZGVtYW5nbGluZy4KCShjcGx1c19kZW1hbmdsZSk6IFRyeSB2MyBkZW1hbmdsaW5nIGlmIEFVVE9fREVNQU5HTElORy4KCShtYWluKTogVXNlIHN0YW5kYXJkIHN5bWJvbCBjaGFycyBmb3IgYXV0b19kZW1hbmdsaW5nLgoKMjAwMC0xMS0yNiAgTWFyayBNaXRjaGVsbCAgPG1hcmtAY29kZXNvdXJjZXJ5LmNvbT4KCgkqIGhhc2h0YWIuYyAoaGlnaGVyX3ByaW1lX251bWJlcik6IFVzZSBhIHRhYmxlLCByYXRoZXIgdGhhbiBhCglzZWl2ZSwgdG8gZmluZCB0aGUgbmV4dCBwcmltZS4KCjIwMDAtMTEtMjIgIEguSi4gTHUgIDxoamxAZ251Lm9yZz4KCgkqIGNwbHVzLWRlbS5jIChtYWluKTogSGFuZGxlIGduYXRfZGVtYW5nbGluZy4KCjIwMDAtMTEtMjIgIFphY2sgV2VpbmJlcmcgIDx6YWNrQHdvbGVyeS5zdGFuZm9yZC5lZHU+CgoJKiBhY2xvY2FsLm00IChMSUJfQUNfUFJPR19DQyk6IE1vdmVkIGhlcmUgZnJvbSBjb25maWd1cmUuaW4uCgkoQUNfREVGSU5FX05PQVVUT0hFQURFUik6IE5ldyAtIHdvcmsgYXJvdW5kIGJ1ZyBpbiBhdXRvaGVhZGVyLgoJKiBjb25maWd1cmUuaW46IENhbGwgQUNfQ19JTkxJTkUgYW5kIEFDX0NfQ09OU1QuICBVc2UgdGhyZWUKCWFyZ3VtZW50IGZvcm0gb2YgQUNfREVGSU5FIGluIGR1bW15IGRlZmluaXRpb25zIGJsb2NrLiAgVXNlCglBQ19ERUZJTkVfTk9BVVRPSEVBREVSIGZvciByZWFsIGRlZmluaXRpb25zIG9mIHRoaW5ncyBkZWZpbmVkCglpbiBkdW1teSBibG9jay4gIFByZWxvYWQgY2FjaGUgdmFyaWFibGVzIGluc3RlYWQgb2YgYnlwYXNzaW5nCgl0ZXN0cywgd2hlcmUgcG9zc2libGUuCgkqIGFjY29uZmlnLmg6IFJlbW92ZWQuCgoJKiB4bWFsbG9jLmMgKHhtYWxsb2NfZmFpbGVkKTogTmV3IGZ1bmN0aW9uLCBkb2VzIGVycm9yCglyZXBvcnRpbmcgb24gZmFpbGVkIGFsbG9jYXRpb24uCgkoeG1hbGxvYywgeGNhbGxvYywgeHJlYWxsb2MpOiBVc2UgaXQuCgoyMDAwLTExLTIxICBIYW5zLVBldGVyIE5pbHNzb24gIDxocEBiaXRyYW5nZS5jb20+CgoJKiBjcGx1cy1kZW0uYyAoY3BsdXNfZGVtYW5nbGUpOiBGaXggZm9ybWF0dGluZy4KCShncm93X3ZlY3QpOiBEaXR0by4KCShhZGFfZGVtYW5nbGUpOiBEaXR0by4KCShpbnRlcm5hbF9jcGx1c19kZW1hbmdsZSk6IERpdHRvLgoJKG1vcF91cCk6IERpdHRvLgoKMjAwMC0xMS0yMSAgSC5KLiBMdSAgPGhqbEBnbnUub3JnPgoKCSogY3BsdXMtZGVtLmMgKG1haW4pOiBIYW5kbGUgamF2YV9kZW1hbmdsaW5nLgoKMjAwMC0xMS0xOSAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogY3BsdXMtZGVtLmMgKGdyb3dfdmVjdCk6IFByb3RvdHlwZS4KCShhZGFfZGVtYW5nbGUpOiBDYXN0IHRoZSBhcmcgb2YgY3R5cGUgbWFjcm9zIHRvIHVuc2lnbmVkIGNoYXIuCgoyMDAwLTExLTE1ICBIYW5zLVBldGVyIE5pbHNzb24gIDxocEBiaXRyYW5nZS5jb20+CgoJKiBjcGx1cy1kZW0uYyAoYWRhX2RlbWFuZ2xlKTogQWRkIGJhY2sgQVRUUklCVVRFX1VOVVNFRCBmb3IKCXBhcmFtZXRlciBgb3B0aW9uJy4KCjIwMDAtMTEtMTUgIEtlbm5ldGggQmxvY2sgIDxrZW5uZXRoLmJsb2NrQGNvbXBhcS5jb20+CgoJKiBjcGx1cy1kZW0uYzogRWxpbWluYXRlIHVzZSBvZiBERUZVTiwgaXQgaXMgb2Jzb2xldGUgYW5kIGNhbm5vdAoJYmUgdXNlZCBpbiBHQ0MuCgoyMDAwLTExLTE1ICBLZW5uZXRoIEJsb2NrICA8a2VubmV0aC5ibG9ja0Bjb21wYXEuY29tPgoKCSogY3BsdXMtZGVtLmM6IEFkZCBnbmF0IGRlbWFuZ2xlci4gIEFkZCBqYXZhIHRvIGRlbWFuZ2xlIHN0eWxlCglsaXN0LgoKMjAwMC0xMS0wNCAgSGFucy1QZXRlciBOaWxzc29uICA8aHBAYml0cmFuZ2UuY29tPgoKCSogaGFzaHRhYi5jIChodGFiX2V4cGFuZCk6IENoYW5nZSB0byByZXR1cm4gaW50LiAgVXNlIGNhbGxvYyBvcgogCXhjYWxsb2MgZGVwZW5kaW5nIG9uIGh0YWItPnJldHVybl9hbGxvY2F0aW9uX2ZhaWx1cmUuICBSZXR1cm4gemVybwogCWlmIGNhbGxvYyBmYWlscy4KCShodGFiX2NyZWF0ZSk6IFVwZGF0ZSBjb21tZW50IHRvIGNvdmVyIG1lbW9yeSBhbGxvY2F0aW9uLgoJKGh0YWJfdHJ5X2NyZWF0ZSk6IE5ldy4KCShodGFiX2ZpbmRfc2xvdF93aXRoX2hhc2gpOiBSZXR1cm4gTlVMTCBpZiBodGFiX2V4cGFuZCBmYWlscy4KICAJVXBkYXRlIGNvbW1lbnQgdG8gY292ZXIgdGhpcy4KCjIwMDAtMTEtMDMgIEhhbnMtUGV0ZXIgTmlsc3NvbiAgPGhwQGJpdHJhbmdlLmNvbT4KCgkqIGhhc2h0YWIuYzogQ2hhbmdlIHZvaWQgKiB0byBQVFIgd2hlcmUgbmVjZXNzYXJ5LgoJKGh0YWJfY3JlYXRlLCBodGFiX2V4cGFuZCk6IENvcnJlY3QgZm9ybWF0dGluZyBvZiBjb21tZW50IGJlZm9yZQoJZnVuY3Rpb24uCgoyMDAwLTEwLTIyICBBbGV4IFNhbXVlbCAgPHNhbXVlbEBjb2Rlc291cmNlcnkuY29tPgoKCSogY3AtZGVtYW5nbGUuYyAoc3RyaW5nX2xpc3RfZGVmKTogQWRkIGNhcmV0X3Bvc2l0aW9uIGFuZCBjb21tZW50cy4KCShyZXN1bHRfY2FyZXRfcG9zKTogTmV3IG1hY3JvLgoJKHJlc3VsdF9hcHBlbmRfc3RyaW5nKTogUmVuYW1lIHRvLi4uCgkocmVzdWx0X2FkZF9zdHJpbmcpOiAuLi4gdGhpcywgYW5kIGluc2VydCBhdCBjYXJldCBwb3NpdGlvbi4KCVJlbmFtZSB0aHJvdWdob3V0LgoJKHJlc3VsdF9hcHBlbmQpOiBSZW5hbWUgdG8uLi4KCShyZXN1bHRfYWRkKTogLi4uIHRoaXMsIGFuZCBpbnNlcnQgYXQgY2FyZXQgcG9zaXRpb24uICBSZW5hbWUKCXRocm91Z2hvdXQuCgkocmVzdWx0X2FwcGVuZF9jaGFyKTogUmVuYW1lIHRvLi4uCgkocmVzdWx0X2FkZF9jaGFyKTogLi4uIHRoaXMsIGFuZCBpbnNlcnQgYXQgY2FyZXQgcG9zaXRpb24uICBSZW5hbWUKCXRocm91Z2hvdXQuCgkocmVzdWx0X2FwcGVuZF9zcGFjZSk6IFJlbW92ZS4KCShzdHJpbmdfbGlzdF9uZXcpOiBJbml0aWFsaXplIGNhcmV0IHBvc2l0aW9uLgoJKHJlc3VsdF9hZGRfc2VwYXJhdGVkX2NoYXIpOiBVc2UgY2FyZXQgcG9zaXRpb24uCgkocmVzdWx0X2dldF9jYXJldCk6IE5ldyBmdW50aW9uLgoJKHJlc3VsdF9zZXRfY2FyZXQpOiBMaWtld2lzZS4KCShyZXN1bHRfc2hpZnRfY2FyZXQpOiBMaWtld2lzZS4KCShyZXN1bHRfcHJldmlvdXNfY2hhcl9pc19zcGFjZSk6IExpa2V3aXNlLgoJKHN1YnN0aXR1dGlvbl9zdGFydCk6IFVzZSBjYXJldCBwb3NpdGlvbi4KCShzdWJzdGl0dXRpb25fYWRkKTogTGlrZXdpc2UuCgkoZGVtYW5nbGluZ19uZXcpOiBJbml0aWFsaXplIGNhcmV0IHBvc2l0aW9uLgoJKGRlbWFuZ2xlX2VuY29kaW5nKTogVXNlIGNhcmV0IHBvc2l0aW9uLgoJKGRlbWFuZ2xpbl9uZXN0ZWRfbmFtZSk6IFB1dCBDViBxdWFsaWZpZXJzIGFmdGVyIG5hbWUuCgkoZGVtYW5nbGVfdHlwZV9wdHIpOiBVc2Ugc3dpdGNoIHN0YXRlbWVudC4gIEhhbmRsZSBwb2ludGVycyB0bwoJYXJyYXlzLiAgRG9uJ3QgdXNlIHJlc3VsdF9hcHBlbmRfc3BhY2UuICBVc2UgY2FyZXQgcG9zaXRpb24uCgkoZGVtYW5nbGVfdHlwZSk6IEVtaXQgQ1YgcXVhbGlmaWVycyBhZnRlciB1bmRlcmx5aW5nIHR5cGUuICBBZGp1c3QKCWNhbGwgdG8gZGVtYW5nbGVfYXJyYXlfdHlwZS4KCShkZW1hbmdsZV9hcnJheV90eXBlKTogQWRkIHBhcmFtZXRlciB0byBoYW5kbGUgcG9pbnRlcnMgdG8gYXJyYXlzLgoKMjAwMC0xMC0wMSAgTWFyayBNaXRjaGVsbCAgPG1hcmtAY29kZXNvdXJjZXJ5LmNvbT4KCgkqIHNwbGF5LXRyZWUuYyAoc3BsYXlfdHJlZV9pbnNlcnQpOiBGaXggZm9ybWF0dGluZy4KCjIwMDAtMDktMTYgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiBzcGxheS10cmVlLmMgKHNwbGF5X3RyZWVfcHJlZGVjZXNzb3IpOiBGaXggdHlwbyBpbiBjb21tZW50LgoKMjAwMC0wOS0xNCAgTWljaGFlbCBTb2tvbG92ICA8bXNva29sb3ZAaXZhbi5IYXJoYW4uT1JHPgoKCSogc3BsYXktdHJlZS5jOiAjaW5jbHVkZSA8c3RkaW8uaD4uCgoyMDAwLTA5LTE0ICBIYW5zLVBldGVyIE5pbHNzb24gIDxocEBheGlzLmNvbT4KCgkqIHRlc3RzdWl0ZS9kZW1hbmdsZS1leHBlY3RlZDogQWRkIHR3byB0ZXN0cyBmb3IgYW5vbnltb3VzCgluYW1lc3BhY2VzLgoJKiBjcGx1cy1kZW0uYyAoZ251X3NwZWNpYWwpOiBIYW5kbGUgYW5vbnltb3VzIG5hbWVzcGFjZXMuCgoyMDAwLTA5LTEwICBNYXJrIE1pdGNoZWxsICA8bWFya0Bjb2Rlc291cmNlcnkuY29tPgoKCSogc3BsYXktdHJlZS5jIChzcGxheV90cmVlX3ByZWRlY2Vzc29yKTogTmV3IGZ1bmN0aW9uLgoJKHNwbGF5X3RyZWVfc3VjY2Vzc29yKTogTGlrZXdpc2UuCgoyMDAwLTA5LTEwICBIYW5zLVBldGVyIE5pbHNzb24gIDxocEBheGlzLmNvbT4KCgkqIHRlc3RzdWl0ZS9kZW1hbmdsZS1leHBlY3RlZDogQWRkIGZvdXIgdGVzdHMgZm9yIHR5cGVfaW5mbwoJbWFuZ2xpbmcuCgkqIGNwbHVzLWRlbS5jIChnbnVfc3BlY2lhbCk6IFVzZSBkb190eXBlLCBub3QgZGVtYW5nbGVfZnVuZF90eXBlLAoJZm9yIGEgbm9uLXRlbXBsYXRlIG5vbi1xdWFsaWZpZWQgdHlwZV9pbmZvIGZ1bmN0aW9uIG9yIG5vZGUuCgoyMDAwLTA5LTA4ICBBbGV4IFNhbXVlbCAgPHNhbXVlbEBjb2Rlc291cmNlcnkuY29tPgoKCSogY3AtZGVtYW5nbGUuYzogRml4IGNvcHlyaWdodCBiYW5uZXIuCgoyMDAwLTA5LTA3ICBNaWNoYWVsIFNva29sb3YgIDxtc29rb2xvdkBpdmFuLkhhcmhhbi5PUkc+CgoJKiBtZDUuYzogI2luY2x1ZGUgImFuc2lkZWNsLmgiLgoKMjAwMC0wOS0wNiAgQWxleCBTYW11ZWwgIDxzYW11ZWxAY29kZXNvdXJjZXJ5LmNvbT4KCgkqIGNwLWRlbWFuZ2xlLmMgKHN0YXR1c19hbGxvY2F0aW9uX2ZhaWxlZCk6IFJlYXJyYW5nZSB3aGl0ZXNwYWNlLgoJKGRlbWFuZ2xlX3R5cGUpOiBIYW5kbGUgc3Vic3RpdHV0aW9uIGNhbmRpZGF0ZXMgY29ycmVjdGx5IGluIHRoZQoJZmFjZSBvZiBzcGVjaWFsIHN1YnN0aXR1dGlvbnMuCgoyMDAwLTA5LTA1ICBBbGV4IFNhbXVlbCAgPHNhbXVlbEBjb2Rlc291cmNlcnkuY29tPgoKCSogY3AtZGVtYW5nbGUuYyAoZGVtYW5nbGVfZW5jb2RpbmcpOiBSZW5hbWUgdmFyaWFibGUuCgkoZGVtYW5nbGVfbmFtZSk6IFJlbmFtZSBwYXJhbWV0ZXIuICBIYW5kbGUgcmV0dXJuIHR5cGUKCXN1cHByZXNzaW9uLgoJKGRlbWFuZ2xlX25lc3RlZF9uYW1lKTogUmVuYW1lIHBhcmFtZXRlci4KCShkZW1hbmdsZV9wcmVmaXgpOiBMaWtld2lzZS4gIENoYW5nZSByZXR1cm4gdHlwZSBzdXBwcmVzc2lvbi4KCShkZW1hbmdsZV91bnF1YWxpZmllZF9uYW1lKTogQWRkIHBhcmFtZXRlci4gIEZsYWcgY29uc3RydWN0b3JzIGFuZAoJY29udmVyc2lvbiBvcGVyYXRvcnMuCgkoZGVtYW5nbGVfc3BlY2lhbF9uYW1lKTogRml4IGNvbW1lbnQuCgkoZGVtYW5nbGVfdHlwZSk6IFJlbmFtZSB2YXJpYWJsZS4KCShkZW1hbmdsZV9iYXJlX2Z1bmN0aW9uX3R5cGUpOiBDaGVjayBmb3IgbWlzc2luZyByZXR1cm4gdHlwZSBhbmQKCXBhcmFtZXRlci4KCShkZW1hbmdsZV9jbGFzc19lbnVtX3R5cGUpOiBSZW5hbWUgcGFyYW1ldGVyLgoJKGRlbWFuZ2xlX2Rpc2NyaW1pbmF0b3IpOiBGaXggbWlzc3BlbGxpbmcgaW4gY29tbWVudC4KCjIwMDAtMDgtMzEgIERKIERlbG9yaWUgIDxkakByZWRoYXQuY29tPgoKCSogY29uZmlndXJlLmluIChDeWd3aW4pOiBzcGVjaWFsIGNhc2UgY3lnd2luIG9ubHkgd2hlbiB3ZSdyZQoJYnVpbGRpbmcgY3lnd2luLCBub3Qgd2hlbiB3ZSdyZSBob3N0aW5nIGN5Z3dpbi4KCjIwMDAtMDktMDQgIEFsZXggU2FtdWVsICA8c2FtdWVsQGNvZGVzb3VyY2VyeS5jb20+CgoJKiBjcC1kZW1hbmdsZS5jIChkZW1hbmdsZV90ZW1wbGF0ZV9hcmcpOiBFYXQgYW4gYEUnIGFmdGVyIGFuCgk8ZXhwcmVzc2lvbj4uCgoyMDAwLTA5LTA0ICBBbGV4IFNhbXVlbCAgPHNhbXVlbEBjb2Rlc291cmNlcnkuY29tPgoKCSogY3AtZGVtYW5nbGUuYyAoZGVtYW5nbGVfdHlwZV9wdHIpOiBJbmNyZW1lbnQgcG9zaXRpb24gcGFzdAoJcG9pbnRlciBhbmQgcmVmZXJlbmNlIGNoYXJhY3RlcnMuCgoyMDAwLTA5LTA0ICBBbGV4IFNhbXVlbCAgPHNhbXVlbEBjb2Rlc291cmNlcnkuY29tPgoKCSogY3AtZGVtYW5nbGUuYyAoZGVtYW5nbGVfbnZfb2Zmc2V0KTogTmV3IGZ1bmN0aW9uLgoJKGRlbWFuZ2xlX3Zfb2Zmc2V0KTogTGlrZXdpc2UuCgkoZGVtYW5nbGVfY2FsbF9vZmZzZXQpOiBMaWtld2lzZS4KCShkZW1hbmdsZV9zcGVjaWFsX25hbWUpOiBVcGRhdGUgdGh1bmsgZGVtYW5nbGluZyB0byBjb21wbHkgd2l0aAoJQUJJIGNoYW5nZXMuCgoyMDAwLTA5LTAzICBBbGV4IFNhbXVlbCAgPHNhbXVlbEBjb2Rlc291cmNlcnkuY29tPgoKCSogY3AtZGVtYW5nbGUuYyAoQU5PTllNT1VTX05BTUVTUEFDRV9QUkVGSVgpOiBOZXcgbWFjcm8uCgkoc3Vic3RpdHV0aW9uX2RlZik6IFJlbW92ZSB0ZW1wbGF0ZV9wYXJtX251bWJlci4KCShOT1RfVEVNUExBVEVfUEFSTSk6IFJlbW92ZS4KCShyZXN1bHRfaW5zZXJ0X3N0cmluZyk6IE5ldyBtYWNyby4KCShyZXN1bHRfaW5zZXJ0KTogTGlrZXdpc2UuCgkocmVzdWx0X2luc2VydF9jaGFyKTogTGlrZXdpc2UuCgkoc3Vic3RpdHV0aW9uX2FkZCk6IFJlbW92ZSBsYXN0IHBhcmFtZXRlci4gIERvbid0IHN0b3JlIHRlbXBsYXRlCglwYXJtIG51bWJlci4KCShCRlRfTk9fUkVUVVJOX1RZUEUpOiBEZWZpbmUgYXMgTlVMTC4KCShkZW1hbmdsZV9lbmNvZGluZyk6IEFkanVzdCBjYWxsIHRvIGRlbWFuZ2xlX2JhcmVfZnVuY3Rpb25fdHlwZS4KCShkZW1hbmdsZV9uYW1lKTogQWRqdXN0IHN1YnN0aXR1dGlvbi4gIEFkanVzdCBjYWxsIHRvCglzdWJzdGl0dXRpb25fYWRkLgoJKGRlbWFuZ2xlX3ByZWZpeCk6IEFkanVzdCBjYWxsIHRvIHN1YnN0aXR1dGlvbl9hZGQuCgkoZGVtYW5nbGVfaWRlbnRpZmllcik6IEhhbmRsZSBhbm9ueW1vdXMgbmFtZXNwYWNlcy4KCShkZW1hbmdsZV9vcGVyYXRvcl9uYW1lKTogQ2hhbmdlIGRlbWFuZ2xpbmcgb2YgdmVuZG9yLWV4dGVuZGVkCglvcGVyYXRvciB0byBtYXRjaCBBQkkgY2hhbmdlcy4KCShkZW1hbmdsZV90eXBlX3B0cik6IENoYW5nZSBwYXJhbWV0ZXJzLiAgTWFrZSByZWN1cnNpdmUuICBIYW5kbGUKCXN1YnN0aXR1dGlvbnMgaGVyZS4KCShkZW1hbmdsZV90eXBlKTogQWRqdXN0IGNhbGxzIHRvIGRlbWFuZ2xlX3RlbXBsYXRlX3BhcmFtLAoJc3Vic3RpdHV0aW9uX2FkZCwgYW5kIGRlbWFuZ2xlX3R5cGVfcHRyLiAgRml4IHN1YnN0aXR1dGlvbiBvZgoJdGVtcGxhdGVkIHR5cGVzLgoJKGRlbWFuZ2xlX2Z1bmN0aW9uX3R5cGUpOiBDaGFuZ2UgcGFyYW1ldGVyIHRvIGEgcG9pbnRlci4KCShkZW1hbmdsZV9iYXJlX2Z1bmN0aW9uX3R5cGUpOiBMaWtld2lzZS4gIEFkanVzdCBpbnNlcnRpb24gcG9pbnQuCgkoZGVtYW5nbGVfdGVtcGxhdGVfcGFyYW0pOiBSZW1vdmUgbGFzdCBwYXJhbWV0ZXIuCgkoZGVtYW5nbGVfZXhwcl9wcmltYXJ5KTogUmVtb3ZlIHVudXNlZCB2YXJpYWJsZS4gIEFkanVzdCBjYWxsIHRvCglkZW1hbmdsZV90ZW1wbGF0ZV9wYXJhbS4KCShpc19tYW5nbGVkX2NoYXIpOiBBY2NlcHQgYCQnIGFuZCBgLicuCgkqIGNwbHVzLWRlbS5jIChnbnVfbmV3X2FiaV9zeW1ib2xfY2hhcmFjdGVycyk6IEFkZCAnJCcgYW5kICcuJy4KCSogZHluLXN0cmluZy5jIChkeW5fc3RyaW5nX2luc2VydF9jaGFyKTogTmV3IGZ1bmN0aW9uLgoKMjAwMC0wOC0zMSAgSGFucy1QZXRlciBOaWxzc29uICA8aHBAYXhpcy5jb20+CgoJKiB0ZXN0c3VpdGUvZGVtYW5nbGUtZXhwZWN0ZWQ6IEFkZCBuaW5lIHRlc3RzIGZvcgoJdW5kZXJzY29yZS1hZnRlci1udW1iZXIgZm9sbG93ZWQgYnkgZml2ZSB0ZXN0cyBmb3IgbmFtZS1zaWduYXR1cmUKCWRlbGltaXRlci4KCjIwMDAtMDgtMjggIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBNYWtlZmlsZS5pbiAobWQ1Lm8pOiBEZXBlbmQgb24gY29uZmlnLmguCgoyMDAwLTA4LTI4ICBKYXNvbiBNZXJyaWxsICA8amFzb25AcmVkaGF0LmNvbT4KCgkqIE1ha2VmaWxlLmluIChSRVFVSVJFRF9PRklMRVMpOiBBZGQgbWQ1Lm8uCgkoQ0ZJTEVTKTogQWRkIG1kNS5jLgoJKiBtZDUuYzogTmV3IGZpbGUuCgoyMDAwLTA4LTI3ICBBbGV4IFNhbXVlbCAgPHNhbXVlbEBjb2Rlc291cmNlcnkuY29tPgoKCSogY3AtZGVtYW5nbGUuYyAoZGVtYW5nbGVfbmFtZSk6IEluaXRpYWxpemUgdGVtcGxhdGVfcCBpbiBsb2NhbAoJbmFtZSBjYXNlLiAgRG9uJ3QgcmUtYWRkIHN1YnN0aXR1dGlvbnMgYXMgY2FuZGlkYXRlcy4KCShkZW1hbmdsZV9uZXN0ZWRfbmFtZSk6IFVzZSA8dW5xdWFsaWZpZWQtbmFtZT4uCgkoZGVtYW5nbGVfcHJlZml4KTogTGlrZXdpc2UuICBEb24ndCBhZGQgdGVtcGxhdGUgbmFtZXMgYXMKCXN1YnN0aXR1dGlvbiBjYW5kaWRhdGVzIHR3aWNlLCBvciByZS1hZGQgYSBzdWJzdGl0dXRpb24gb3IgdGhlCglsYXN0IHByZWZpeCBjb21wb25lbnQuCgkoZGVtYW5nbGVfbG9jYWxfbmFtZSk6IEFkanVzdCBvdXRwdXQgZm9ybWF0LgoKMjAwMC0wOC0yNSAgQWxleCBTYW11ZWwgIDxzYW11ZWxAY29kZXNvdXJjZXJ5LmNvbT4KCgkqIGNwLWRlbWFuZ2xlLmMgKHJlc3VsdF9hZGRfc2VwYXJhdGVkX2NoYXIpOiBDaGFuZ2UgcGFyYW1ldGVyIHRvCglpbnQuCgkoc3Vic3RpdHV0aW9uX2FkZCk6IERvbid0IGNoZWNrIGZvciBkdXBsaWNhdGVzLiAgQ2hlY2sgaWYKCXByZXZpb3VzbHkgYWxsb2NhdGVkIHNpemUgaXMgemVyby4KCShkZW1hbmdsZV9uYW1lKTogUmVtb3ZlIGR1cGxpY2F0ZSBjaGVjayBmb3Igc3RkIHN1YnN0aXR1dGlvbi4KCUNsZWFyIHRlbXBsYXRlIGZsYWcgYXBwcm9wcmlhdGVseS4KCShkZW1hbmdsZV9wcmVmaXgpOiBSZW1vdmUgYXJndW1lbnQgdG8gZGVtYW5nbGVfc3Vic3RpdHV0aW9uLgoJRG9uJ3QgY2hlY2sgdGhhdCB0ZW1wbGF0ZSBmbGFnIGlzIGFscmVhZHkgc2V0LgoJKGRlbWFuZ2xlX29wZXJhdG9yX25hbWUpOiBBZGQgcHQgb3BlcmF0b3IuCgkoZGVtYW5nbGVfdHlwZSk6IERvbid0IHRyZWF0IHIgYXMgYnVpbHQtaW4gdHlwZS4gIFJlbW92ZSBhcmd1bWVudAoJdG8gZGVtYW5nbGVfc3Vic3RpdHV0aW9uLiAgRml4IHN1YnN0aXR1dGlvbiBjYW5kaWRhdGUgbWVjaGFuaWNzLgoJSGFuZGxlIDx0ZW1wbGF0ZS10ZW1wbGF0ZS1wYXJtPnMuICBJbXByb3ZlIGNvbW1lbnRzLgoJKGRlbWFuZ2xlX3RlbXBsYXRlX3BhcmFtKTogRG9uJ3QgaGFuZGxlIHRlbXBsYXRlIGFyZyBsaXN0cyBoZXJlLgoJKGRlbWFuZ2xlX3N1YnN0aXR1dGlvbik6IFJlbW92ZSBwYXJhbWV0ZXIuCgkocHJpbnRfdXNhZ2UpOiBSZW1vdmUgZXh0cmEgZnByaW50ZiBvcHRpb24uCgoyMDAwLTA4LTI0ICBHcmVnIE1jR2FyeSAgPGdyZWdAbWNnYXJ5Lm9yZz4KCgkqIGxpYmliZXJ0eS9yYW5kb20uYyAoZW5kX3B0cik6IFJldmVydCBwcmV2aW91cyBjaGFuZ2UuCgoyMDAwLTA4LTI0ICBHcmVnIE1jR2FyeSAgPGdyZWdAbWNnYXJ5Lm9yZz4KCgkqIGxpYmliZXJ0eS9jcGx1cy1kZW0uYyAoY3BsdXNfZGVtYW5nbGVfb3BuYW1lLCBjcGx1c19tYW5nbGVfb3BuYW1lLAoJZGVtYW5nbGVfZXhwcmVzc2lvbiwgZGVtYW5nbGVfZnVuY3Rpb25fbmFtZSk6IFVzZSBBUlJBWV9TSVpFLgoJKiBsaWJpYmVydHkvcmFuZG9tLmMgKGVuZF9wdHIpOiBMaWtld2lzZS4KCjIwMDAtMDgtMjMgIEFsZXggU2FtdWVsICA8c2FtdWVsQGNvZGVzb3VyY2VyeS5jb20+CgoJKiBjcC1kZW1hbmdsZS5jIChyZXN1bHRfY2xvc2VfdGVtcGxhdGVfbGlzdCk6IFJlbW92ZSBmdW5jdGlvbi4KCShyZXN1bHRfYWRkX3NlcGFyYXRlZF9jaGFyKTogTmV3IGZ1bmN0aW9uLgoJKHJlc3VsdF9vcGVuX3RlbXBsYXRlX2xpc3QpOiBOZXcgbWFjcm8uCgkocmVzdWx0X2Nsb3NlX3RlbXBsYXRlX2xpc3QpOiBMaWtld2lzZS4KCShkZW1hbmdsZV9wcmVmaXgpOiBEb24ndCBzZXQgdGVtcGxhdGVfcCBpZiB0aGUKCXByZWZpeCBlbmRzIHdpdGggYSBjdG9yIG5hbWUuCgkoZGVtYW5nbGVfdHlwZV9wdHIpOiBSZW1vdmUgZHVwbGljYXRlIFJFVFVSTl9JRl9FUlJPUi4KCShkZW1hbmdsZV90eXBlKTogQ2hlY2sgZm9yIHRlbXBsYXRlIGFyZ3MgYWZ0ZXIgc3Vic3RpdHV0aW9uLgoJKGRlbWFuZ2xlX3RlbXBsYXRlX2FyZ3MpOiBVc2UgcmVzdWx0X29wZW5fdGVtcGxhdGVfbGlzdC4KCjIwMDAtMDgtMDIgIFphY2sgV2VpbmJlcmcgIDx6YWNrQHdvbGVyeS5jdW1iLm9yZz4KCgkqIHBleGVjdXRlLmM6ICBEb24ndCB1c2UgdmZvcmsuICBJbml0aWFsaXplICdwaWQnIGJlZm9yZSByZXRyeSBsb29wLgoKMjAwMC0wNy0yNiAgRGF2ZSBQaXR0cyAgPGRwaXR0c0Bjb3p4LmNvbT4KCgkqIGNvbmZpZy9taC1vcGVuZWRpdGlvbi5oOiBBZGRlZCAtRExFMzcwIGRlZmluaXRpb24uCgoyMDAwLTA3LTI2IE1hcmsgRWxicmVjaHQgPHNub3diYWxsM0BiaWdmb290LmNvbT4KCgkqIHBleGVjdXRlLmMgKHBleGVjdXRlKSBbX19NU0RPU19fXTogQ2hhbmdlIF9fR08zMl9fIHRvCglfX0RKR1BQX18uIFVzZSBQX1dBSVQgaW5zdGVhZCBvZiBjb25zdGFudCBpbiB0aGUgc3Bhd252KiBjYWxsLgoJQ2FzdCBwcm9ncmFtIHRvICdjaGFyIConIGluIGVycm1zZ19hcmcgYXNzaWdubWVudC4KCShQV0FJVF9FUlJPUik6IERlZmluZS4KCShwd2FpdCk6IFVzZSBQV0FJVF9FUlJPUi4gIEFkanVzdCBESkdQUCdzIHN0YXR1cyBjb2RlIHRvIGNvbmZvcm0KCXRvIERKR1BQJ3MgV0lGKiBtYWNyb3MuCgoyMDAwLTA3LTI3ICBSb2RuZXlCcm93biAgPFJvZG5leUJyb3duQHBtc2MuY29tPgoJICAgIEplZmYgTGF3IDxsYXdAY3lnbnVzLmNvbT4KCgkqIGdldGN3ZC5jOiBJbmNsdWRlIHN0cmluZy5oLCBzdGRsaWIuaCBmb3IgcHJvdG90eXBlcwoKCSogTWFrZWZpbGUuaW4gKHJlbmFtZS5vLCB3YWl0cGlkLm8pOiBEZXBlbmQgb24gY29uZmlnLmgKCSogcmVuYW1lLmM6IEluY2x1ZGUgY29uZmlnLmgsIHVuaXN0ZC5oCgkqIHdhaXRwaWQuYzogSW5jbHVkZSBjb25maWcuaCwgc3lzL3dhaXQuaAoKMjAwMC0wNy0yNCAgSGFucy1QZXRlciBOaWxzc29uICA8aHBAYXhpcy5jb20+CgoJKiBjcGx1cy1kZW0uYyAod29ya19zdHVmZl9jb3B5X3RvX2Zyb20pOiBOZXcuCgkoZGVsZXRlX25vbl9CX0tfd29ya19zdHVmZik6IE5ldy4KCShkZWxldGVfd29ya19zdHVmZik6IE5ldy4KCShtb3BfdXApOiBCcmVhayBvdXQgd29ya19zdHVmZiBwYXJ0bHkgZGVzdHJ1Y3Rpb24gdG8KCWRlbGV0ZV9ub25fQl9LX3dvcmtfc3R1ZmYuCgkoaXRlcmF0ZV9kZW1hbmdsZV9mdW5jdGlvbik6IE5ldy4KCShkZW1hbmdsZV9wcmVmaXgpOiBDYWxsIGl0ZXJhdGVfZGVtYW5nbGVfZnVuY3Rpb24gaW5zdGVhZCBvZgoJZGVtYW5nbGVfZnVuY3Rpb25fbmFtZS4gIExlYXZlIGhhbmRsaW5nIG9mIG5hbWUtc2lnbmF0dXJlCglfXy1kZWxpbWl0ZXJzIHRvIGl0ZXJhdGVfZGVtYW5nbGVfZnVuY3Rpb24uCgkoZGVtYW5nbGVfaW50ZWdyYWxfdmFsdWUpOiBTdHJpcCBhbiBvcHRpb25hbAoJZm9sbG93aW5nIHVuZGVyc2NvcmUgY2F1dGlvdXNseS4gIEhhbmRsZSBuZWdhdGl2ZSBudW1iZXJzLgoKMjAwMC0wNy0yNCAgRGFuaWVsIEJlcmxpbiA8ZGJlcmxpbkByZWRoYXQuY29tPgoKCSogY3BsdXMtZGVtLmMgKGRlbWFuZ2xlX3NpZ25hdHVyZSk6IENoYW5nZSBpZiAoR05VX0RFTUFOR0xJTkcpIHRvCglpZiAoQVVUT19ERU1BTkdMSU5HIHx8IEdOVV9ERU1BTkdMSU5HKQoKMjAwMC0wNy0yMSAgQWxleCBTYW11ZWwgIDxzYW11ZWxAY29kZXNvdXJjZXJ5LmNvbT4KCgkqIGNwLWRlbWFuZ2xlLmMgKGRlbWFuZ2xlX2N0b3JfZHRvcl9uYW1lKTogUmVtb3ZlIG5vdC1pbi1jaGFyZ2UKCWFsbG9jYXRpbmcgY3RvciBtYW5nbGluZy4KCShkZW1hbmdsZV9hcnJheV90eXBlKTogSGFuZGxlIGVtcHR5IGFuZCBub24tY29uc3RhbnQgYXJyYXkgbGVuZ3RoLgoKMjAwMC0wNy0yMyAgTWljaGFlbCBTb2tvbG92ICA8bXNva29sb3ZAaXZhbi5IYXJoYW4uT1JHPgoJICAgIEplZmYgTGF3IDxsYXdAY3lnbnVzLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbiAoQUNfQ0hFQ0tfSEVBREVSUyk6IEFkZCB0aW1lLmguCgkoQUNfSEVBREVSX1RJTUUpOiBBZGQgY2hlY2suCgkqIGNvbmZpZ3VyZSwgY29uZmlnLmluOiBSZWdlbmVyYXRlLgoJKiBnZXRydW50aW1lLmM6IFBvcnRhYmx5ICNpbmNsdWRlIDxzeXMvdGltZS5oPiBhbmQvb3IgPHRpbWUuaD4uCgoJKiBjb25maWd1cmUuaW4gKEFDX0NIRUNLX0hFQURFUlMpOiBBZGQgbGltaXRzLmguCgkqIGNvbmZpZ3VyZSwgY29uZmlnLmluOiBSZWdlbmVyYXRlLgoJKiBzb3J0LmM6IFBvcnRhYmx5ICNpbmNsdWRlIDxsaW1pdHMuaD4gYW5kL29yIDxzeXMvcGFyYW0uaD4uCgkqIHN0cnRvbC5jLCBzdHJ0b3VsLmM6ICNpbmNsdWRlICJjb25maWcuaCIuIFBvcnRhYmx5ICNpbmNsdWRlCgk8bGltaXRzLmg+IGFuZC9vciA8c3lzL3BhcmFtLmg+LgoJKiBNYWtlZmlsZS5pbiAoc3RydG9sLm8sIHN0cnRvdWwubyk6IFVwZGF0ZSBkZXBlbmRlbmNpZXMuCgoJKiBhY2xvY2FsLm00IChsaWJpYmVydHlfQUNfREVDTEFSRV9FUlJOTyk6IE5ldyBtYWNyby4KCSogY29uZmlndXJlLmluIChsaWJpYmVydHlfQUNfREVDTEFSRV9FUlJOTyk6IEFkZCBjaGVjay4KCSogY29uZmlndXJlLCBjb25maWcuaW46IFJlZ2VuZXJhdGUuCgkqIHBleGVjdXRlLmMsIHN0cnRvbC5jLCBzdHJ0b3VsLmM6IERlY2xhcmUgZXJybm8gaWYgbmVjZXNzYXJ5LgoKCSogY3AtZGVtYW5nbGUuYywgbWtzdGVtcHMuYzogI2luY2x1ZGUgPHN5cy90eXBlcy5oPi4KCjIwMDAtMDctMjEgIE1pa2UgU3R1bXAgIDxtcnNAd3JzLmNvbT4KCgkqIE1ha2VmaWxlLmluICh4ZXhpdC5vKTogQWRkIGRlcGVuZGVuY3kgZm9yIGNvbmZpZy5oIGluIHhleGl0LmMuCgkqICh2YXNwcmludGYubyk6IEFkZCBkZXBlbmRlbmN5IGZvciBjb25maWcuaCBpbiB2YXNwcmludGYuYy4KCjIwMDAtMDctMjEgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGNwLWRlbWFuZ2xlLmMgKGNwX2RlbWFuZ2xlX3R5cGUpOiBXcmFwIGluIElOX0xJQkdDQzIuCgoJKiBzZXRlbnYuYyAoc2V0ZW52KTogSW5pdGlhbGl6ZSB2YXJpYWJsZSBgZXAnLgoKCSogc2lnc2V0bWFzay5jIChhYm9ydCk6IFByb3RvdHlwZS4KCgkqIHZhc3ByaW50Zi5jOiBJbmNsdWRlIGNvbmZpZy5oLiAgQ2hlY2sgQU5TSV9QUk9UT1RZUEVTLCBub3QKCV9fU1REQ19fIGZvciBzdGRhcmcuaCBpbmNsdWRlLgoJKGludF92YXNwcmludGYpOiBQcm90b3R5cGUuCgkoY2hlY2tpdCk6IFByb3RvdHlwZS4gIFVzZSBWUEFSQU1TL0FOU0lfUFJPVE9UWVBFUy9WQV9TVEFSVCBpbgoJZGVmaW5pdGlvbi4gIENhc3QgYGdsb2JhbF90b3RhbF93aWR0aCcgaW4gY29tcGFyaXNvbi4KCShtYWluKTogUHJvdG90eXBlLiAgUmV0dXJuIGEgdmFsdWUuCgoJKiB2Zm9yay5jIChmb3JrKTogUHJvdG90eXBlLgoKCSogeGV4aXQuYzogSW5jbHVkZSBjb25maWcuaC4KCjIwMDAtMDctMjAgIEpvc2VwaCBTLiBNeWVycyAgPGpzbTI4QGNhbS5hYy51az4KCgkqIGNwbHVzLWRlbS5jIChkZW1hbmdsZV9mdW5kX3R5cGUpOiBNYWtlICdkZWMnIGFuIHVuc2lnbmVkIGludCwKCWFuZCBwcmludCBpdCB3aXRoICV1LgoKMjAwMC0wNy0xNyAgSGFucy1QZXRlciBOaWxzc29uICA8aHBAYXhpcy5jb20+CgoJKiB0ZXN0c3VpdGUvcmVncmVzcy1kZW1hbmdsZSAoZmFpbGVkIHRlc3QpOiBTaG93IHJlc3VsdCBhbmQKCWV4cGVjdGVkIG91dHB1dC4KCjIwMDAtMDctMDcgIEFuZHJldyBIYWxleSAgPGFwaEBjeWdudXMuY29tPgoKCSogY3BsdXMtZGVtLmMgKG1haW4pOiBmZmx1c2goKSBhZnRlciBlbWl0dGluZyBsYXN0IGNoYXIgYmVmb3JlCgl3YWl0aW5nIGZvciBpbnB1dC4KCjIwMDAtMDYtMjggIEFsZXggU2FtdWVsICA8c2FtdWVsQGNvZGVzb3VyY2VyeS5jb20+CgoJKiBjcC1kZW1hbmdsZS5jIChkZW1hbmdsZV9lbmNvZGluZyk6IEFjY2VwdCBubyBzdWJzdGl0dXRpb25zLgoJKGRlbWFuZ2xlX25hbWUpOiBIYW5kbGUgPHN1YnN0aXR1dGlvbj4gZm9sbG93ZWQgYnkKCTx1bnF1YWxpZmllZC10ZW1wbGF0ZS1uYW1lPi4KCShkZW1hbmdsZV90eXBlKTogRm9sbG93IHNwZWNpYWwgc3Vic3RpdHV0aW9ucyB3aXRoCgk8Y2xhc3MtZW51bS10eXBlPgoJKGRlbWFuZ2xlX3N1YnRpdHV0aW9uKTogU2V0IHRlbXBsYXRlX3AgZm9yIHNwZWNpYWwgc3Vic3RpdHV0aW9ucy4KCShtYWluKTogRml4IHR5cG9zLgoKMjAwMC0wNi0yNyAgQWxleCBTYW11ZWwgIDxzYW11ZWxAY29kZXNvdXJjZXJ5LmNvbT4KCgkqIGNwLWRlbWFuZ2xlLmMgKGRlbWFuZ2xlX3NwZWNpYWxfbmFtZSk6IFN3YXAgYmFzZSBhbmQgZGVyaXZlZAoJY2xhc3Mgd2hlbiBkZW1hbmdsaW5nIGNvbnN0cnVjdGlvbiB2dGFibGVzLgoKMjAwMC0wNi0yMSAgQWxleCBTYW11ZWwgIDxzYW11ZWxAY29kZXNvdXJjZXJ5LmNvbT4KCgkqIGNwLWRlbWFuZ2xlLmM6IERvbid0IGluY2x1ZGUgY3R5cGUuaC4KCShJU19ESUdJVCk6IE5ldyBtYWNyby4KCShJU19BTFBIQSk6IExpa2V3aXNlLiAgVXNlIElTX0RJR0lUIGFuZCBJU19BTFBIQSB0aHJvdWdob3V0CglpbnN0ZWFkIG9mIGlzZGlnaXQgYW5kIGlzYWxwYW51bS4KCShkZW1hbmdsaW5nX2RlZik6IE1ha2UgbmFtZSBhbmQgbmV4dCBjb25zdCBwb2ludGVycy4KCShTVEFUVVNfQUxMT0NBVElPTl9GQUlMRUQpOiBOZXcgc3RhdHVzIGNvZGUuCgkoZHluX3N0cmluZ19hcHBlbmRfc3BhY2UpOiBIYW5kbGUgZmFpbHVyZSBpbgoJZHluX3N0cmluZ19hcHBlbmRfY2hhci4KCShpbnRfdG9fZHluX3N0cmluZyk6IExpa2V3aXNlLiAgQ2hhbmdlIHJldHVybiB2YWx1ZSB0byBzdGF0dXNfdC4KCShzdHJpbmdfbGlzdF9uZXcpOiBIYW5kbGUgZmFpbHVyZSBvZiBkeW5fc3RyaW5nX2luaXQuCgkocmVzdWx0X2Nsb3NlX3RlbXBsYXRlX2xpc3QpOiBDaGFuZ2UgcmV0dXJuIHR5cGUgdG8gc3RhdHVzX3QuCglIYW5kbGUgZmFpbHVyZSBpbiBkeW5fc3RyaW5nX2FwcGVuZC4KCShyZXN1bHRfcHVzaCk6IENoYW5nZSByZXR1cm4gdmFsdWUgdG8gc3RhdHVzX3QuICBIYW5kbGUgZmFpbHVyZSBpbgoJc3RyaW5nX2xpc3RfbmV3LiAgSGFuZGxlIGZhaWx1cmUgb2YgcmVzdWx0X3B1c2ggdGhyb3VnaG91dC4KCShzdWJzdGl0dXRpb25fYWRkKTogQ2hhbmdlIHJldHVybiB2YWx1ZSB0byBzdGF0dXNfdC4gIEhhbmRsZQoJZHluX3N0cmluZyBmYWlsdXJlcy4gIEhhbmRsZSBmYWlsdXJlIG9mIHN1YnN0aXR1dGlvbl9hZGQKCXRocm91Z2hvdXQuCgkodGVtcGxhdGVfYXJnX2xpc3RfbmV3KTogUmV0dXJuIE5VTEwgb24gYWxsb2NhdGlvbiBmYWlsdXJlLgoJKHJlc3VsdF9hcHBlbmRfc3RyaW5nKTogUmV0dXJuIFNUQVRVU19BTExPQ0FUSU9OX0ZBSUxFRCBvbiBlcnJvci4KCUhhbmRsZSBlcnJvciByZXN1bHQgdGhyb3VnaG91dC4KCShyZXN1bHRfYXBwZW5kKTogTGlrZXdpc2UuCgkocmVzdWx0X2FwcGVuZF9jaGFyKTogTGlrZXdpc2UuCgkocmVzdWx0X2FwcGVuZF9zcGFjZSk6IExpa2V3aXNlLgoJKGRlbWFuZ2xpbmdfbmV3KTogTWFrZSBhcmd1bWVudCBhIGNvbnN0IHBvaW50ZXIuICBIYW5kbGUKCWFsbG9jYXRpb24gZmFpbHVyZXMuCgkoZGVtYW5nbGVfdGVtcGxhdGVfYXJncyk6IEhhbmRsZSBmYWlsdXJlIGluIHRlbXBsYXRlX2FyZ19saXN0X25ldwoJYW5kIHJlc3VsdF9jbG9zZV90ZW1wbGF0ZV9saXN0LgoJKGRlbWFuZ2xlX2Rpc2NyaW1pbmF0b3IpOiBSZXR1cm4gaWYgaW50X3RvX2R5bl9zdHJpbmcgZmFpbHMuCgkoY3BfZGVtYW5nbGUpOiBMaWtld2lzZS4KCShjcF9kZW1hbmdsZV90eXBlKTogTmV3IGZ1bmN0aW9uLgoJKGNwbHVzX2RlbWFuZ2xlX25ld19hYmkpOiBEb24ndCBjYWxsIGR5bl9zdHJpbmdfZGVsZXRlLiAgQWJvcnQgb24KCW1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmUuCgkobWFpbik6IExpa2V3aXNlLgoJKiBkeW4tc3RyaW5nLmMgKFJFVFVSTl9PTl9BTExPQ0FUSU9OX0ZBSUxVUkUpOiBEZWZpbmUgaWYKCUlOX0xJQkdDQzIuCgkoZHluX3N0cmluZ19pbml0KTogQ2hhbmdlIHJldHVybiB2YWx1ZSB0byBpbnQuICBIYW5kbGUKCVJFVFVSTl9PTl9BTExPQ0FUSU9OX0ZBSUxVUkUgY2FzZS4KCShkeW5fc3RyaW5nX25ldyk6IEhhbmRsZSBSRVRVUk5fT05fQUxMT0NBVElPTl9GQUlMVVJFIGNhc2UuCgkoZHluX3N0cmluZ19yZWxlYXNlKTogRGVsZXRlIHRoZSBkeW5fc3RyaW5nLgoJKGR5bl9zdHJpbmdfcmVzaXplKTogSGFuZGxlIFJFVFVSTl9PTl9BTExPQ0FUSU9OX0ZBSUxVUkUgY2FzZS4KCShkeW5fc3RyaW5nX2NvcHkpOiBDaGFuZ2UgcmV0dXJuIHR5cGUgdG8gaW50LgoJKGR5bl9zdHJpbmdfY29weV9jc3RyKTogTGlrZXdpc2UuCgkoZHluX3N0cmluZ19wcmVwZW5kKTogTGlrZXdpc2UuCgkoZHluX3N0cmluZ19wcmVwZW5kX2NzdHIpOiBMaWtld2lzZS4KCShkeW5fc3RyaW5nX2luc2VydCk6IExpa2V3aXNlLgoJKGR5bl9zdHJpbmdfaW5zZXJ0X2NzdHIpOiBMaWtld2lzZS4KCShkeW5fc3RyaW5nX2FwcGVuZCk6IExpa2V3aXNlLgoJKGR5bl9zdHJpbmdfYXBwZW5kX2NzdHIpOiBMaWtld2lzZS4KCShkeW5fc3RyaW5nX2FwcGVuZF9jaGFyKTogTGlrZXdpc2UuCgkoZHluX3N0cmluZ19zdWJzdHJpbmcpOiBMaWtld2lzZS4KCjIwMDAtMDYtMDkgIFphY2sgV2VpbmJlcmcgIDx6YWNrQHdvbGVyeS5jdW1iLm9yZz4KCgkqIGNwLWRlbWFuZ2xlLmMgKGRlbWFuZ2xlX29wZXJhdG9yX25hbWUpOiBBZGQgc3BhY2VzIGJlZm9yZQoJbmFtZXMgYmVnaW5uaW5nIHdpdGggYSBsZXR0ZXI6IGRlbGV0ZSwgZGVsZXRlW10sIG5ldywgbmV3W10sCglzaXplb2YuCgkoZGVtYW5nbGVfc3BlY2lhbF9uYW1lKTogSGFuZGxlIFRGIDx0eXBlPiBhbmQgVEogPHR5cGU+LgoKVGh1IEp1biAgOCAxODo1MjoyNCAyMDAwICBQaGlsaXBwZSBEZSBNdXl0ZXIgIDxwaGRtQG1hY3FlbC5iZT4KCgkqIGNwLWRlbWFuZ2xlLmMgKHRlbXBsYXRlX2FyZ19saXN0X25ldyk6IFJldmVydCBwcmV2aW91cyBQQVJBTVMgcGF0Y2guCgpUaHUgSnVuICA4IDA5OjI1OjU0IDIwMDAgIFBoaWxpcHBlIERlIE11eXRlciAgPHBoZG1AbWFjcWVsLmJlPgoKCSogY3AtZGVtYW5nbGUuYyAoc3RkaW8uaCk6IEZpbGUgaW5jbHVkZWQgdW5jb25kaXRpb25hbHkuCgkodGVtcGxhdGVfYXJnX2xpc3RfbmV3KTogUGFyYW1ldGVyIGxpc3QgaXMgUEFSQU1TICgodm9pZCkpLCBub3QgKCkuCgkqIGR5bi1zdHJpbmcuYyAoc3RkaW8uaCk6IEZpbGUgaW5jbHVkZWQuCgkqIHBhcnRpdGlvbi5jIChwYXJ0aXRpb25fcHJpbnQpOiBObyBgJicgbmVlZGVkIHRvIHRha2UgdGhlIGFkZHJlc3Mgb2YKCWEgZnVuY3Rpb24uCgoyMDAwLTA2LTA3ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBjb25maWd1cmUuaW4gKGFjX2xpYmliZXJ0eV93YXJuX2NmbGFncyk6IEFkZCAtcGVkYW50aWMuCgoJKiBjaG9vc2UtdGVtcC5jICh0cnksIGNob29zZV90ZW1wX2Jhc2UsIG1ha2VfdGVtcF9maWxlKTogQ29uc3RpZnkuCgoJKiBjcC1kZW1hbmdsZS5jIChkZW1hbmdsZV9jaGFyKTogQ2hhbmdlIHBhcmFtZXRlciBmcm9tIGNoYXIgdG8gaW50LgoJKGRlbWFuZ2xlX2V4cHJlc3Npb24sIGRlbWFuZ2xlX2V4cHJfcHJpbWFyeSk6IFJlbW92ZSBleHRyYQoJc2VtaS1jb2xvbiBpbiBwcm90b3R5cGUuCgoJKiBkeW4tc3RyaW5nLmMgKGR5bl9zdHJpbmdfYXBwZW5kX2NoYXIpOiBDaGFuZ2UgcGFyYW1ldGVyIGZyb20KCWNoYXIgdG8gaW50LgoKCSogbWVtY21wLmMgKG1lbWNtcCk6IENvbnN0aWZ5LgoKCSogbWtzdGVtcHMuYyAoZ2NjX3VpbnQ2NF90KTogTWFyayBHTlVDIGBsb25nIGxvbmcnIGNhc2Ugd2l0aAoJX19leHRlbnNpb25fXy4KCgkqIHBhcnRpdGlvbi5jIChlbGVtX2NvbXBhcmUpOiBQcm90b3R5cGUuICBEb24ndCBjYXN0IGF3YXkKCWNvbnN0LW5lc3MuCgoJKiBzZXRlbnYuYyAoc2V0ZW52KTogVXNlIGJyYWNlcyB0byBhdm9pZCBhbWJpZ3VvdXMgYGVsc2UnLgoKMjAwMC0wNi0wNyAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogTWFrZWZpbGUuaW4gKGNwLWRlbWFuZ2xlLm8pOiBEZXBlbmQgb24gJChJTkNESVIpL2RlbWFuZ2xlLmguCgoJKiBjcC1kZW1hbmdsZS5jOiBJbmNsdWRlIGRlbWFuZ2xlLmguCgkodGVtcGxhdGVfYXJnX2xpc3RfbmV3KTogRGVBTlNJZnkuCgkoY3BfZGVtYW5nbGUpOiBNYWtlIHN0YXRpYyBhbmQgYWRkIHByb3RvdHlwZS4KCShvcGVyYXRvcl9jb2RlLCBvcGVyYXRvcnMpOiBDb25zdGlmeS4KCShkZW1hbmdsZV9vcGVyYXRvcl9uYW1lKTogTGlrZXdpc2UgZm9yIHZhcmlhYmxlcyBgcDEnLCBgcDInIGFuZCBgcCcuCgoyMDAwLTA2LTA1ICBBbGV4IFNhbXVlbCAgPHNhbXVlbEBjb2Rlc291cmNlcnkuY29tPgoKCSogY3AtZGVtYW5nbGUuYyAoZGVtYW5nbGVfcHJlZml4KTogQ2FzdCBhcmd1bWVudCB0byBpc2RpZ2l0IHRvCgl1bnNpZ25lZCBjaGFyLgoJKGRlbWFuZ2xlX3VucXVhbGlmaWVkX25hbWUpOiBMaWtld2lzZS4KCShkZW1hbmdsZV9udW1iZXJfbGl0ZXJhbGx5KTogTGlrZXdpc2UuCgkoZGVtYW5nbGVfdHlwZSk6IExpa2V3aXNlLgoJKGRlbWFuZ2xlX3N1YnN0aXR1dGlvbik6IExpa2V3aXNlLgoJKGlzX21hbmdsZWRfY2hhcik6IExpa2V3aXNlLCBmb3IgaXNhbG51bS4KCjIwMDAtMDYtMDQgIEFsZXggU2FtdWVsICA8c2FtdWVsQGNvZGVzb3VyY2VyeS5jb20+CgoJKiBNYWtlZmlsZS5pbiAoQ0ZJTEVTKTogQWRkIGNwLWRlbWFuZ2xlLmMgYW5kIGR5bi1zdHJpbmcuYy4KCShSRVFVSVJFRF9PRklMRVMpOiBBZGQgY3AtZGVtYW5nbGUubyBhbmQgZHluLXN0cmluZy5vLgoJKGNwLWRlbWFuZ2xlLm8pOiBOZXcgZGVwZW5kZW5jeS4KCShkeW4tc3RyaW5nLm8pOiBMaWtld2lzZS4KCgkqIGR5bi1zdHJpbmcuYzogTW92ZSBoZXJlIGZyb20gZ2NjL2R5bi1zdHJpbmcuYy4gIEFkZCBuZXcgZnVuY3Rpb25zLgoKCSogY3BsdXMtZGVtLmMgKGxpYmliZXJ0eV9kZW1hbmdsZXJzKTogQWRkIGluaXRpYWxpemVyIGZvciBuZXctQUJJCglkZW1hbmdsZXIuCgkoY3BsdXNfZGVtYW5nbGUpOiBDYWxsIGNwbHVzX2RlbWFuZ2xlX25ld19hYmkgaWYgaW4gbmV3LUFCSQoJZGVtYW5nbGluZyBtb2RlLgoJKGdudV9uZXdfYWJpX3N5bWJvbF9jaGFyYWN0ZXJzKTogTmV3IGZ1bmN0aW9uLgoJKG1haW4pOiBVc2UgZ251X25ld19hYmlfc3ltYm9sX2NoYXJhY3RlcnMuICAqIGNwLWRlbWFuZ2xlLmM6IE5ldwoJZmlsZS4KCSogY3AtZGVtYW5nbGUuYzogTmV3IGZpbGUuCgpUdWUgTWF5IDMwIDE2OjQ1OjI1IDIwMDAgIEFuZHJldyBDYWduZXkgIDxjYWduZXlAYjEuY3lnbnVzLmNvbT4KCgkqIGZsb2F0Zm9ybWF0LmM6IEFkZCBuYW1lIHRvIGVhY2ggZmxvYXRmb3JtYXQgZmllbGQuCgpUdWUgTWF5IDMwIDE1OjA3OjUyIDIwMDAgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIE1ha2VmaWxlLmluIChvYmphbGxvYy5vKTogRGVwZW5kIG9uIGNvbmZpZy5oCgoyMDAwLTA1LTI5ICBaYWNrIFdlaW5iZXJnICA8emFja0B3b2xlcnkuY3VtYi5vcmc+CgoJKiBoYXNodGFiLmMsIHBhcnRpdGlvbi5jLCBzb3J0LmMsIHhtZW1kdXAuYzogSW5jbHVkZSBzdHJpbmcuaAoJaWYgSEFWRV9TVFJJTkdfSC4KCSogcGV4ZWN1dGUuYywgeGV4aXQuYzogSW5jbHVkZSBzdGRsaWIuaCBpZiBIQVZFX1NURExJQl9ILgoJKiBvYmphbGxvYy5jOiBJbmNsdWRlIGNvbmZpZy5oLiAgSW5jbHVkZSBzdGRsaWIuaCBhbmQgZG9uJ3QKCWRlY2xhcmUgbWFsbG9jIG9yIGZyZWUgaWYgSEFWRV9TVERMSUJfSC4KCSogc3RyZXJyb3IuYywgc3Ryc2lnbmFsLmM6IEluY2x1ZGUgc3RkbGliLmggaWYgSEFWRV9TVERMSUJfSCwKCWVsc2UgZGVjbGFyZSBtYWxsb2Mgd2l0aG91dCBwcm90b3R5cGUuICBJbmNsdWRlIHN0cmluZy5oIGlmCglIQVZFX1NUUklOR19ILCBlbHNlIGRlY2xhcmUgbWVtc2V0IHdpdGhvdXQgcHJvdG90eXBlLiAgRG9uJ3QKCWluY2x1ZGUgc3RkZGVmLmguCgoyMDAwLTA1LTIzICBNaWtlIFN0dW1wICA8bXJzQHdycy5jb20+CgoJKiBNYWtlZmlsZS5pbiAoeG1hbGxvYy5vKTogQWRkIGRlcGVuZGVuY3kgZm9yIGNvbmZpZy5oLCBmaXhlcyBtYWtlCiAJLWozLgoKMjAwMC0wNS0xOCAgSi4gRGF2aWQgQW5nbGluICA8ZGF2ZUBoaWF1bHkxLmhpYS5ucmMuY2E+CgoJKiB4bWFsbG9jLmM6IEluY2x1ZGUgY29uZmlnLmggZm9yIEhBVkVfU0JSSyBkZWZpbml0aW9uLgoKMjAwMC0wNS0xNiAgSG9yc3Qgdm9uIEJyYW5kIDx2b25icmFuZEBzbGVpcG5pci52YWxwYXJhaXNvLmNsPgoKCSogaGFzaHRhYi5jIChoYXNoX3BvaW50ZXIpOiBEZWxldGUgbG93LW9yZGVyIGJpdHMgd2hpY2ggYXJlCglwcm9iYWJseSB6ZXJvLCBhbHNvIGVsaW1pbmF0ZSBhIHdhcm5pbmcgb24gYWxwaGEuCgoyMDAwLTA1LTE1ICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQGdudS5vcmc+CgoJKiBNYWtlZmlsZS5pbjogQ2hhbmdlICJwaWMiIHRvIGRlcGVuZCBvbiAkKFBJQ0ZMQUcpLCBub3QKCW9uICQoZW5hYmxlX3NoYXJlZCkuCgoyMDAwLTA1LTEwICBKYWt1YiBKZWxpbmVrICA8amFrdWJAcmVkaGF0LmNvbT4KCgkqIGNvbmZpZy50YWJsZTogVXNlIG1oLXNwYXJjcGljIGZvciBzcGFyYyotKi0qLgoKMjAwMC0wNS0wOCAgTmljayBDbGlmdG9uICA8bmlja2NAY3lnbnVzLmNvbT4KCgkqIE1ha2VmaWxlLmluIChDRklMRVMpOiBBZGQgc3RybmNtcC5jLgoJKE5FRURFRCk6IEFkZCBzdHJuY21wLgoKMjAwMC0wNS0wNCAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogY3BsdXMtZGVtLmMgKGNwbHVzX2RlbWFuZ2xlX29wbmFtZSwgZGVtYW5nbGVfZnVuY3Rpb25fbmFtZSk6CglDYXN0IHRoZSBhcmd1bWVudHMgdG8gYGlzbG93ZXInIHRvIGB1bnNpZ25lZCBjaGFyJy4KCShwcmludF9kZW1hbmdsZXJfbGlzdCk6IFByb3RvdHlwZS4KClRodSBNYXkgIDQgMTc6MTQ6NDEgMjAwMCAgUGhpbGlwcGUgRGUgTXV5dGVyICA8cGhkbUBtYWNxZWwuYmU+CgoJKiBzb3J0LmMgKFVDSEFSX01BWCk6IFByb3ZpZGUgZmFsbGJhY2sgZGVmaW5pdGlvbi4KCjIwMDAtMDQtMjkgIEFsZXhhbmRyZSBPbGl2YSAgPGFvbGl2YUBjeWdudXMuY29tPgoKCSogTWFrZWZpbGUuaW4gKG1haW50YWluZXItY2xlYW4tc3ViZGlyKTogRml4IGhhbmRsaW5nIG9mIGVtcHR5CglTVUJESVJTLgoKMjAwMC0wNC0yOCAgS2VubmV0aCBCbG9jayAgPGJsb2NrQHprMy5kZWMuY29tPgoJICAgIEphc29uIE1lcnJpbGwgIDxqYXNvbkBjYXNleS5jeWdudXMuY29tPgoKCSogY3BsdXMtZGVtLmMgKGxpYmliZXJ0eV9kZW1hbmdsZXJzKTogTmV3IHRhYmxlIGZvciBkZW1hbmdsZSBzdHlsZXMuCgkoY3BsdXNfZGVtYW5nbGVfc2V0X3N0eWxlKTogTmV3IGZ1bmN0aW9uIGZvciBzZXR0aW5nIHN0eWxlLgoJKGNwbHVzX2RlbWFuZ2xlX25hbWVfdG9fc3R5bGUpOiBOZXcgZnVuY3Rpb24gdG8gdHJhbnNsYXRlIG5hbWUuCgoyMDAwLTA0LTI3ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBhY2xvY2FsLm00OiBOZXcgZmlsZSB3aXRoIG5ldyB0ZXN0IGxpYmliZXJ0eV9BQ19GVU5DX1NUUk5DTVAuCgoJKiBjb25maWd1cmUuaW4gKEFDX0NIRUNLX0hFQURFUlMpOiBBZGQgc3lzL21tYW4uaCBmY250bC5oLgoJKGxpYmliZXJ0eV9BQ19GVU5DX1NUUk5DTVApOiBJbnZva2UuCgoJKiBzdHJuY21wLmM6IE5ldyBmaWxlLgoKVGh1IEFwciAyNyAxNjo1ODo0MyBNRVQgRFNUIDIwMDAgIEphbiBIdWJpY2thICA8amhAc3VzZS5jej4KCgkqIGhhc2h0YWIuYyAoaHRhYl9leHBhbmQpOiBBZGQgcHJvdG90eXBlLgoJKGZpbmRfZW1wdHlfc2xvdF9mb3JfZXhwYW5kKTogTGlrZXdpc2UuCgoyMDAwLTA0LTI0ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBoYXNodGFiLmMgKGhhc2hfcG9pbnRlciwgZXFfcG9pbnRlcik6IE1ha2UgZGVmaW5pdGlvbiBzdGF0aWMgdG8KCW1hdGNoIHByb3RvdHlwZS4KCShodGFiX2V4cGFuZCk6IENhc3QgdGhlIHJldHVybiB2YWx1ZSBvZiB4Y2FsbG9jLgoKMjAwMC0wNC0yNCAgTWFyayBNaXRjaGVsbCAgPG1hcmtAY29kZXNvdXJjZXJ5LmNvbT4KCgkqIGhhc2h0YWIuYyAoaGFzaF9wb2ludGVyKTogTmV3IGZ1bmN0aW9uLgoJKGVxX3BvaW50ZXIpOiBMaWtld2lzZS4KCShodGFiX2hhc2hfcG9pbnRlcik6IE5ldyB2YXJpYWJsZS4KCShodGFiX2VxX3BvaW50ZXIpOiBMaWtld2lzZS4KCjIwMDAtMDQtMjMgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiBzb3J0LmMgKHNvcnRfcG9pbnRlcnMpOiBGaXggZW5kaWFubmVzcyBidWdzLgoKCSogc29ydC5jOiBOZXcgZmlsZS4KCSogTWFrZWZpbGUuaW4gKENGSUxFUyk6IEFkZCBzb3J0LmMKCShSRVFVSVJFRF9PRklMRVMpOiBBZGQgc29ydC5vLgoJKHNvcnQubyk6IE5ldyB0YXJnZXQuCgoyMDAwLTA0LTIxICBNaWNoYWVsIFNva29sb3YgIDxtc29rb2xvdkBpdmFuLkhhcmhhbi5PUkc+CgoJKiBNYWtlZmlsZS5pbiAoKi1zdWJkaXIpOiBSZXZhbXAgc2xpZ2h0bHkgdG8gYXZvaWQgbG9zaW5nIG9uCgk0LjNCU0Qgc3lzdGVtcy4KClR1ZSBBcHIgMTggMTY6MjM6MzEgMjAwMCAgUmljaGFyZCBLZW5uZXIgIDxrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdT4KCgkqIGhhc2h0YWIuYzogVmFyaW91cyBtaW5vciBjbGVhbnVwcy4KCShodGFiX2ZpbmRfc2xvdF93aXRoX2hhc2gpOiBJTlNFUlQgaXMgbm93IGVudW0gaW5zZXJ0X29wdGlvbi4KCShodGFiX2ZpbmRfc2xvdCk6IExpa2V3aXNlLgoKMjAwMC0wNC0xNiAgRGF2ZSBQaXR0cyAgPGRwaXR0c0Bjb3p4LmNvbT4KCgkqIGNwbHVzLWRlbS5jIChjcGx1c19kZW1hbmdsZV9vcG5hbWUpOiBDaGFuZ2VkIHRvIHVzZSBpc2xvd2VyLgoKMjAwMC0wNC0wNSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIHNwbGF5LXRyZWUuYyAoc3BsYXlfdHJlZV9yZW1vdmUpOiBOZXcuCgoyMDAwLTAzLTMwICBNYXJrIE1pdGNoZWxsICA8bWFya0Bjb2Rlc291cmNlcnkuY29tPgoKCSogaGFzaHRhYi5jIChmaW5kX2VtcHR5X3Nsb3RfZm9yX2V4cGFuZCk6IFVzZSBoYXNodmFsX3QgZm9yIGhhc2gKCWNvZGVzLgoJKGh0YWJfZmluZF93aXRoX2hhc2gpOiBMaWtld2lzZS4KCShodGFiX2ZpbmRfc2xvdF93aXRoX2hhc2gpOiBMaWtld2lzZS4KCjIwMDAtMDMtMjkgIFphY2sgV2VpbmJlcmcgIDx6YWNrQHdvbGVyeS5jdW1iLm9yZz4KCgkqIGhhc2h0YWIuYyAoaHRhYl9maW5kX3dpdGhfaGFzaCk6IEF2b2lkIGNhbGN1bGF0aW5nIGhhc2gyCgl1bmxlc3MgaXQgd2lsbCBiZSB1c2VkLiAgUmVhcnJhbmdlIGxvb3AgZm9yIGJldHRlcgoJb3B0aW1pemF0aW9uLgoJKGhpZ2hlcl9wcmltZV9udW1iZXIpOiBBZGQgc3RhdGljIHByb3RvdHlwZS4KClRodSBNYXIgMTYgMDE6MzM6NTggMjAwMCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogTWFrZWZpbGUuaW4gKHBhcnRpdGlvbi5vKTogRGVwZW5kIG9uIGNvbmZpZy5oCgoyMDAwLTAzLTE0ICBCZXJuZCBTY2htaWR0ICA8YmVybmRzQGN5Z251cy5jby51az4KCgkqIGhhc2h0YWIuYyAoZmluZF9lbXB0eV9zbG90X2Zvcl9leHBhbmQpOiBOZXcgZnVuY3Rpb24uCgkoaHRhYl9leHBhbmQpOiBVc2UgaXQgaW5zdGVhZCBvZiBodGFiX2ZpbmRfc2xvdC4KCShodGFiX2ZpbmRfd2l0aF9oYXNoKTogUmVuYW1lZCBmcm9tIGh0YWJfZmluZDsgbm93IGFjY2VwdHMgZXh0cmEKCWFyZ3VtZW50IEhBU0guCgkoaHRhYl9maW5kX3Nsb3Rfd2l0aF9oYXNoKTogTGlrZXdpc2UgZm9yIGh0YWJfZmluZF9zbG90LgoJKGh0YWJfZmluZCk6IE5ldyB3cmFwcGVyIGZ1bmN0aW9uLgoJKGh0YWJfZmluZF9zbG90KTogTGlrZXdpc2UuCgkoaHRhYl90cmF2ZXJzZSk6IFBhc3Mgc2xvdCwgbm90IGVudHJ5LCB0byBjYWxsZWQgZnVuY3Rpb24uCgoyMDAwLTAzLTA5ICBBbGV4IFNhbXVlbCAgPHNhbXVlbEBjb2Rlc291cmNlcnkuY29tPgoKCSogTWFrZWZpbGUuaW4gKENGSUxFUyk6IEFkZCBwYXJ0aXRpb24uYy4KCShSRVFVSVJFRF9PRklMRVMpOiBBZGQgcGFydGl0aW9uLm8uCgkocGFydGl0aW9uLm8pOiBOZXcgcnVsZS4KCSogcGFydGl0aW9uLmM6IE5ldyBmaWxlLgoKMjAwMC0wMy0wOSAgWmFjayBXZWluYmVyZyAgPHphY2tAd29sZXJ5LmN1bWIub3JnPgoKCSogaGFzaHRhYi5jIChodGFiX2NyZWF0ZSk6IFNldCBkZWxfZi4KCShodGFiX2RlbGV0ZSwgaHRhYl9lbXB0eSwgaHRhYl9yZW1vdmVfZWx0LCBodGFiX2NsZWFyX3Nsb3QpOgoJVXNlIGl0LgoKMjAwMC0wMy0wOCAgWmFjayBXZWluYmVyZyAgPHphY2tAd29sZXJ5LmN1bWIub3JnPgoKCSogaGFzaHRhYi5jOiBSZW1vdmUgZGVidWdnaW5nIHZhcmlhYmxlcyAoYWxsX3NlYXJjaGVzLAoJYWxsX2NvbGxpc2lvbnMsIGFsbF9leHBhbnNpb25zKS4gRGVsZXRlCglhbGxfaGFzaF90YWJsZV9jb2xsaXNpb25zLgoJKGNyZWF0ZV9oYXNoX3RhYmxlLCBkZWxldGVfaGFzaF90YWJsZSwgZW1wdHlfaGFzaF90YWJsZSwKCWZpbmRfaGFzaF90YWJsZV9lbnRyeSwgcmVtb3ZlX2VsZW1lbnRfZnJvbV9oYXNoX3RhYmxlX2VudHJ5LAoJY2xlYXJfaGFzaF90YWJsZV9zbG90LCB0cmF2ZXJzZV9oYXNoX3RhYmxlLCBoYXNoX3RhYmxlX3NpemUsCgloYXNoX3RhYmxlX2VsZW1lbnRzX251bWJlciwgaGFzaF90YWJsZV9jb2xsaXNpb25zKTogUmVuYW1lIHRvOgoJaHRhYl9jcmVhdGUsIGh0YWJfZGVsZXRlLCBodGFiX2VtcHR5LCBodGFiX2ZpbmRfc2xvdCwKCWh0YWJfcmVtb3ZlX2VsdCwgaHRhYl9jbGVhcl9zbG90LCBodGFiX3RyYXZlcnNlLCBodGFiX3NpemUsCglodGFiX2VsZW1lbnRzLCBodGFiX2NvbGxpc2lvbnMuCgkoaHRhYl9maW5kKTogTmV3IGZ1bmN0aW9uLCBoYW5kbGVzIGNvbW1vbiBjYXNlIHdoZXJlIHlvdSBkb24ndAoJcGxhbiB0byBhZGQgb3IgZGVsZXRlIGFuIGVudHJ5LgoJKGh0YWJfZXhwYW5kKTogRG9uJ3QgY3JlYXRlIGEgd2hvbGUgbmV3IHRhYmxlLCBqdXN0IGEgbmV3CgllbnRyeSB2ZWN0b3IuCgkoaHRhYl9maW5kX3Nsb3QpOiBTaW1wbGlmeSBsb2dpYy4KCjE5OTktMDgtMDMgIElhbiBMYW5jZSBUYXlsb3IgIDxpYW5AemVtYnUuY29tPgoKCSogZmxvYXRmb3JtYXQuYzogQWRkIGNhc3RzIHRvIGF2b2lkIHNpZ25lZC91bnNpZ25lZCB3YXJuaW5ncy4KCSogcGV4ZWN1dGUuYzogQWRkIEFUVFJJQlVURV9VTlVTRUQgYXMgbmVlZGVkIG9uIFVuaXguCgoJKiBNYWtlZmlsZS5pbiAoaW5zdGFsbF90b19saWJkaXIpOiBDaGFuZ2UgJChUQVJHRVRMSUIpLm4gdG8KCSQoVEFSR0VUTElCKW4gc28gaXQgd29ya3Mgb24gTVNET1MuCgkoaW5zdGFsbF90b190b29sZGlyKTogTGlrZXdpc2UuCgoxOTk5LTA3LTIxICBJYW4gTGFuY2UgVGF5bG9yICA8aWFuQHplbWJ1LmNvbT4KCglGcm9tIE1hcmsgRWxicmVjaHQ6CgkqIG1ha2VmaWxlLmRvczogUmVtb3ZlOyBvYnNvbGV0ZS4KCSogY29uZmlndXJlLmJhdDogUmVtb3ZlOyBvYnNvbGV0ZS4KCjE5OTktMDctMTEgIElhbiBMYW5jZSBUYXlsb3IgIDxpYW5AemVtYnUuY29tPgoKCSogc3BsYXktdHJlZS5jIChzcGxheV90cmVlX2luc2VydCk6IEFkZCBpbml0aWFsaXphdGlvbiB0byBhdm9pZAoJd2FybmluZy4KCjIwMDAtMDEtMDQgIE11bWl0IEtoYW4gIDxraGFuQHhyYXlsaXRoLndpc2MuZWR1PgoKCSogcGV4ZWN1dGUuYzogQ29uZGl0aW9uYWxseSBpbmNsdWRlIHN0cmluZy5oLgoJKGZpeF9hcmd2KTogSGFuZGxlIGVtYmVkZGVkIHdoaXRlc3BhY2UgaW4gYXJncyBmb3IgTWluZ3czMi4KCjIwMDAtMDEtMDQgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGNvbmZpZ3VyZS5pbiAoYWNfbGliaWJlcnR5X3dhcm5fY2ZsYWdzKTogVHVybiBvbiB3YXJuaW5ncyBpZgoJd2UncmUgdXNpbmcgZ2NjLgoKCSogTWFrZWZpbGUuaW4gKENPTVBJTEUuYyk6IEFkZCBAYWNfbGliaWJlcnR5X3dhcm5fY2ZsYWdzQAoKMTk5OS0xMi0yNyAgR2VvZmYgS2VhdGluZyAgPGdlb2Zma0BjeWdudXMuY29tPgoKCSogdmFzcHJpbnRmLmMgKGludF92YXNwcmludGYpOiBEb24ndCByZS1yZWFkIHRoZSBmb3JtYXQgY2hhcmFjdGVyCglhcyB0aGlzIG1pc2hhbmRsZXMgc3RyaW5ncyBsaWtlICclJXMnLgoKMTk5OS0xMi0wNSAgTWFyayBNaXRjaGVsbCAgPG1hcmtAY29kZXNvdXJjZXJ5LmNvbT4KCgkqIHNwbGF5LXRyZWUuYyAoc3BsYXlfdHJlZV9uZXcpOiBVc2Ugc3RydWN0IHNwbGF5X3RyZWVfbm9kZV9zCglyYXRoZXIgdGhhbiBzdHJ1Y3Qgc3BsYXlfdHJlZV9ub2RlLgoJKHNwbGF5X3RyZWVfaW5zZXJ0KTogVXNlIHN0cnVjdCBzcGxheV90cmVlX3MgcmF0aGVyIHRoYW4gc3RydWN0CglzcGxheV90cmVlLgoKU3VuIE5vdiAyOCAwMDo1OTozOSAxOTk5ICBQaGlsaXBwZSBEZSBNdXl0ZXIgIDxwaGRtQG1hY3FlbC5iZT4KCgkqIGhhc2h0YWIuYyAoc3lzL3R5cGVzLmgpOiBGaWxlIGluY2x1ZGVkLgoKMTk5OS0xMS0yMiAgSmFzb24gTWVycmlsbCAgPGphc29uQGNhc2V5LmN5Z251cy5jb20+CgoJKiBzdHJ0b3VsLmMsIHN0cnRvbC5jLCByYW5kb20uYzogUmVtb3ZlIGFkdmVydGlzaW5nIGNsYXVzZSBmcm9tCglCU0QgbGljZW5zZSwgcHVyc3VhbnQgd2l0aAoKCSAgZnRwOi8vZnRwLmNzLmJlcmtlbGV5LmVkdS9wdWIvNGJzZC9SRUFETUUuSW1wdC5MaWNlbnNlLkNoYW5nZQoKV2VkIE5vdiAxMCAwOTo0MjozOSAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBoYXNodGFiLmM6IEluY2x1ZGUgc3RkaW8uaC4KCk1vbiBOb3YgIDggMDk6MjM6NDEgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogaGFzaHRhYi5jICh0cmF2ZXJzZV9oYXNoX3RhYmxlKTogUHJvdGVjdCBwcm90b3R5cGUgd2l0aCBQQVJBTVMuCgpUdWUgTm92ICAyIDAzOjIzOjEzIDE5OTkgIFBoaWxpcHBlIERlIE11eXRlciAgPHBoZG1AbWFjcWVsLmJlPgoKCSogeHN0cmR1cCAoc3lzL3R5cGVzLmgpOiBJbmNsdWRlIHRoaXMgZmlsZS4KCjE5OTktMTAtMjggIE5hdGhhbiBTaWR3ZWxsICA8bmF0aGFuQGFjbS5vcmc+CgoJKiBNYWtlZmlsZS5pbiAoU1VCRElSUyk6IE5ldyBtYWNyby4KCShtb3N0bHljbGVhbiwgY2xlYW4sIGRpc3RjbGVhbiwgbWFpbnRhaW5lci1jbGVhbik6IEFkanVzdCB0bwoJYXZvaWQgbXVsdGlwbGUgc3ViZGlyZWN0b3J5IGNsZWFuaW5nLgoJKCotc3ViZGlyKTogVXNlIFNVQkRJUlMuCgoxOTk5LTEwLTI1ICBKaW0gS2luZ2RvbiAgPGh0dHA6Ly9kZXZlbG9wZXIucmVkaGF0LmNvbS8+CgoJKiBjcGx1cy1kZW0uYzogTW92ZSBkZWNsYXJhdGlvbnMgb2Ygc3RhbmRhcmRfc3ltYm9sX2NoYXJhY3RlcnMgYW5kCglocF9zeW1ib2xfY2hhcmFjdGVycyBpbnNpZGUgI2lmZGVmIE1BSU4gdG8gYXZvaWQgY29tcGlsZXIKCXdhcm5pbmdzLgoKMTk5OS0xMC0yMyAwODo1MSAtMDcwMCAgWmFjayBXZWluYmVyZyAgPHphY2tAYml0bW92ZXIuY29tPgoKCSogaGFzaHRhYi5jIChmaW5kX2hhc2hfdGFibGVfZW50cnkpOiBXaGVuIHJldHVybmluZyBhCglERUxFVEVEX0VOVFJZIHNsb3QsIGNoYW5nZSBpdCB0byBFTVBUWV9FTlRSWSBmaXJzdC4KCShjbGVhcl9oYXNoX3RhYmxlX3Nsb3QpOiBOZXcgZnVuY3Rpb24gd2hpY2ggZGVsZXRlcyBhbiBlbnRyeQoJYnkgaXRzIHBvc2l0aW9uIGluIHRoZSB0YWJsZSwgbm90IGl0cyB2YWx1ZS4KCSh0cmF2ZXJzZV9oYXNoX3RhYmxlKTogTmV3IGZ1bmN0aW9uIHdoaWNoIGNhbGxzIGEgaG9vawoJZnVuY3Rpb24gZm9yIGV2ZXJ5IGxpdmUgZW50cnkgaW4gdGhlIHRhYmxlLgoKMTk5OS0xMC0xOSAgTWFyayBNaXRjaGVsbCAgPG1hcmtAY29kZXNvdXJjZXJ5LmNvbT4KCgkqIGNwbHVzLWRlbS5jIChJTlRCVUZfU0laRSk6IE5ldyBtYWNyby4KCShzdHJpbmdfYXBwZW5kX3RlbXBsYXRlX2lkeCk6IE5ldyBmdW5jdGlvbi4KCShkZW1hbmdsZV9leHByZXNzaW9uKTogTGlrZXdpc2UuCgkoZGVtYW5nbGVfaW50ZWdyYWxfdmFsdWUpOiBVc2UgaXQuCgkoZGVtYW5nbGVfcmVhbF92YWx1ZSk6IE5ldyBmdW5jdGlvbiwgc3BsaXQgb3V0IGZyb20gLi4uCgkoZGVtYW5nbGVfdGVtcGxhdGVfdmFsdWVfcGFybSk6IC4uLiBoZXJlLiAgVXNlCglzdHJpbmdfYXBwZW5kX3RlbXBsYXRlX2lkeC4gIFVzZSBkZW1hbmdsZV9yZWFsX3ZhbHVlLgoJKGRlbWFuZ2xlX3RlbXBsYXRlKTogVXNlIHN0cmluZ19hcHBlbmRfdGVtcGxhdGVfaWR4LgoJKGRlbWFuZ2xlX3F1YWxpZmllZCk6IFVzZSBjb25zdW1lX2NvdW50X3dpdGhfdW5kZXJzY29yZXMuCgkoZ2V0X2NvdW50KTogVHdlYWsgZm9ybWF0dGluZy4KCShkb190eXBlKTogVXNlIHN0cmluZ19hcHBlbmRfdGVtcGxhdGVfaWR4LgoKMTk5OS0xMC0xOCAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogY2FsbG9jLmM6IEFkZCBhIHB1YmxpYyBkb21haW4gbm90aWNlLgoKTW9uIE9jdCAxOCAwMjozMDo0NyAxOTk5ICBQaGlsaXBwZSBEZSBNdXl0ZXIgIDxwaGRtQG1hY3FlbC5iZT4KCgkqIHNldGVudi5jIChzeXMvdHlwZXMuaCwgc3RkaW8uaCk6IEluY2x1ZGUgdGhvc2UgZmlsZXMgdW5jb25kaXRpb25hbHkuCgpGcmkgT2N0IDE1IDAxOjQ3OjUxIDE5OTkgIFZsYWRpbWlyIE1ha2Fyb3YgIDx2bWFrYXJvdkBsb29ueS5jeWdudXMuY29tPgoKCSogTWFrZWZpbGUuaW4gKENGSUxFUyk6IEFkZCBoYXNodGFiLmMKCShSRVFVSVJFRF9PRklMRVMpOiBBZGQgaGFzaHRhYi5vCgkoaGFzaHRhYi5vKTogQWRkIGRlcGVuZGVuY2llcy4KCSogaGFzaHRhYi5jOiBOZXcgZmlsZQoKV2VkIE9jdCAxMyAwMToxNjo0NyAxOTk5ICBNdW1pdCBLaGFuICA8a2hhbkB4cmF5bGl0aC53aXNjLmVkdT4KCgkqIGJhc2VuYW1lLmMgKERJUl9TRVBBUkFUT1IpOiBOZXcgbWFjcm8uCgkoRElSX1NFUEFSQVRPUl8yKTogTGlrZXdpc2UuCgkoSEFWRV9ET1NfQkFTRURfRklMRVNZU1RFTSk6IExpa2V3aXNlLgoJKElTX0RJUl9TRVBBUkFUT1IpOiBMaWtld2lzZS4KCShtYWluKTogSGFuZGxlIE1TRE9TIHN0eWxlIHBhdGhuYW1lLgoKMTk5OS0xMC0xMSAgTWFyayBNaXRjaGVsbCAgPG1hcmtAY29kZXNvdXJjZXJ5LmNvbT4KCgkqIGNwbHVzLWRlbS5jIChkb190eXBlKTogSGFuZGxlIHBvaW50ZXIgdG8gbWVtYmVyIHR5cGVzIHdob3NlCgllbmNsb3NpbmcgY2xhc3NlcyBoYXZlIG5hbWVzcGFjZSBzY29wZS4KClN1biBPY3QgMTAgMDE6MjM6NTAgMTk5OSAgTWFyYyBFc3BpZSA8ZXNwaWVAY3ZzLm9wZW5ic2Qub3JnPgoKCSogY29uZmlnLnRhYmxlOiAgUHJvdmlkZSBhIGJhY2t1cCBzaGVsbCBmb3IgZXhlY3V0aW5nIG1vdmUtaWYtY2hhbmdlLgoKMTk5OS0xMC0wMiAgTWFyayBNaXRjaGVsbCAgPG1hcmtAY29kZXNvdXJjZXJ5LmNvbT4KCgkqIHhtYWxsb2MuYyAoeG1hbGxvYyk6IEZpeCBzcGVsbGluZyBlcnJvci4KCSh4Y2FsbG9jLCB4cmVhbGxvYyk6IExpa2V3aXNlLgoKMTk5OS0xMC0wMiAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogY3BsdXMtZGVtLmMgKGZhbmN5X2Fib3J0LCBkZW1hbmdsZV9pbnRlZ3JhbF92YWx1ZSwKCWRlbWFuZ2xlX2FybV9ocF90ZW1wbGF0ZSwgcmVjdXJzaXZlbHlfZGVtYW5nbGUsCglzdGFuZGFyZF9zeW1ib2xfY2hhcmFjdGVycywgaHBfc3ltYm9sX2NoYXJhY3RlcnMsIG1haW4pOiBBZGQgcHJvdG90eXBlLgoJKHByb2dyYW1fbmFtZSwgcHJvZ3JhbV92ZXJzaW9uLCBmYXRhbCk6IENvbnN0aWZ5IGEgY2hhciouCgkodXNhZ2UsIGZhdGFsKTogTWFyayB3aXRoIEFUVFJJQlVURV9OT1JFVFVSTi4KCShtYWluKTogQ2FsbCByZXR1cm4sIG5vdCBleGl0LgoKMTk5OS0wOS0yNSAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogY2hvb3NlLXRlbXAuYzogUmVtb3ZlIG9ic29sZXRlIGNvbW1lbnQgYWJvdXQgZ2NjLgoJKG1ha2VfdGVtcF9maWxlKTogQ29uc3RpZnkgYSBjaGFyKi4KCldlZCBTZXAgIDggMjA6MDM6MjggMTk5OSAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogeG1lbWR1cC5jOiBJbmNsdWRlIHN5cy90eXBlcy5oLgoKMTk5OS0wOS0wNyAgSmVmZiBHYXJ6aWsgIDxqZ2FyemlrQHBvYm94LmNvbT4KCgkqIHhtZW1kdXAuYzogTmV3IHhtZW1kdXAgZnVuY3Rpb24uCgkqIE1ha2VmaWxlLmluLCBtYWtlZmlsZS52bXMsIHZtc2J1aWxkLmNvbTogIFVzZSB4bWVtZHVwLltjb10uCgpUdWUgU2VwICA3IDIzOjMyOjE4IDE5OTkgIExpbmFzIFZlcHN0YXMgIDxsaW5hc0BsaW5hcy5vcmc+CgoJKiBjb25maWcudGFibGU6IEFkZCBvcGVuZWRpdGlvbiB0YXJnZXQuCgkqIGNvbmZpZy9taC1vcGVuZWRpdGlvbjogTmV3IGZpbGUuCgpUaHUgU2VwICAyIDAxOjM2OjEyIDE5OTkgIE1hcmMgRXNwaWUgPGVzcGllQGN2cy5vcGVuYnNkLm9yZz4KCgkqIHBleGVjdXRlLmMgKHBleGVjdXRlKTogIEZpbGwgaW4gdGVtcF9iYXNlIHdoZW4gbmVlZGVkLgoKMTk5OS0wOC0zMSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGdldHB3ZC5jOiBDaGVjayBIQVZFX0dFVENXRCBiZWZvcmUgZGVmaW5pbmcgaXQgYXdheS4KCjE5OTktMDgtMzAgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIE1ha2VmaWxlLmluIChDRklMRVMpOiBBZGQgY2FsbG9jLmMgYW5kIGdldHB3ZC5jLgoJKFJFUVVJUkVEX09GSUxFUyk6IEFkZCBnZXRwd2Quby4KCShnZXRwd2Qubyk6IEFkZCB0YXJnZXQuCgoJKiBjb25maWd1cmUuaW4gKEFDX1BSRVJFUSk6IEJ1bXAgdG8gMi4xMy4KCShBQ19DSEVDS19IRUFERVJTKTogQWRkIGNoZWNrIGZvciA8c3lzL3N0YXQuaD4uCgoJKiBnZXRwd2QuYzogTmV3IGZpbGUsIG1vdmVkIGhlcmUgZnJvbSBnY2MuCgoxOTk5LTA4LTI1ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBjcGx1cy1kZW0uYyAoZ251X3NwZWNpYWwpOiBDYXN0IGEgYHNpemVfdCcgdG8gYGxvbmcnIHdoZW4KCWNvbXBhcmluZyBhZ2FpbnN0IGEgc2lnbmVkIHF1YW50aXR5LgoJKGFybV9zcGVjaWFsKTogTGlrZXdpc2UuCgkoZGVtYW5nbGVfZnVuZF90eXBlKTogTGlrZXdpc2UuCgkoZG9faHBhY2NfdGVtcGxhdGVfY29uc3RfdmFsdWUpOiBNYXJrIHBhcmFtZXRlciBgd29yaycgd2l0aAoJQVRUUklCVVRFX1VOVVNFRC4KCShtYWluKTogQ29uc3RpZnkgdmFyaWFibGUgYHZhbGlkX3N5bWJvbHMnLgoKVHVlIEF1ZyAyNCAwMjo1MDo0NSAxOTk5ICBQaGlsaXBwZSBEZSBNdXl0ZXIgIDxwaGRtQG1hY3FlbC5iZT4KCgkqIHN0cnRvdWwuYyAoc3RydG91bCk6IEFkZCBwYXJlbnRoZXNlcyBhcm91bmQgJiYgd2l0aGluIHx8LgoKRnJpIEF1ZyAgNiAyMzozMjoyOSAxOTk5ICBEYW5pZWwgSmFjb2Jvd2l0eiA8ZHJvd0Bkcm93LnRoZW0ub3JnPgoKCSogTWFrZWZpbGUuaW4gKEZMQUdTX1RPX1BBU1MpOiBJbmNsdWRlIHByZWZpeCwgZXhlY19wcmVmaXgsCglsaWJkaXIsIGxpYnN1YmRpciBhbmQgdG9vbGRpci4KCjE5OTktMDgtMDEgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiBzcGxheS10cmVlLmMgKHNwbGF5X3RyZWVfaW5zZXJ0KTogUmV0dXJuIHRoZSBuZXcgbm9kZS4KCjE5OTktMDctMTQgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBhcmd2LmM6IEluY2x1ZGUgc3RkbGliLmggYW5kIHN0cmluZy5oIGluc3RlYWQgb2YKCXByb3RvdHlwaW5nIGRpcmVjdGx5LgoJKiBjaG9vc2UtdGVtcC5jOiBDb25kaXRpb25hbGx5IGluY2x1ZGUgc3RyaW5nLmguCgoxOTk5LTA3LTEyICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBNYWtlZmlsZS5pbiAoTkVFREVEKTogQWRkIGJjbXAsIGJjb3B5LCBiemVyby4KCjE5OTktMDctMTEgIElhbiBMYW5jZSBUYXlsb3IgIDxpYW5AemVtYnUuY29tPgoKCSogc3BsYXktdHJlZS5jIChzcGxheV90cmVlX2luc2VydCk6IEFkZCBpbml0aWFsaXphdGlvbiB0byBhdm9pZAoJd2FybmluZy4KCjE5OTktMDctMDcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIE1ha2VmaWxlLmluIChuZWVkZWQtbGlzdCk6IE9ubHkgaW5jbHVkZSBzdHVmZiB3ZSBhY3R1YWxseSBuZWVkCglmb3IgbGlic3RkYysrLgoKMTk5OS0wNi0yMSAgQW5kcmVhcyBTY2h3YWIgIDxzY2h3YWJAaXNzYW4uY3MudW5pLWRvcnRtdW5kLmRlPgoKCSogY29uZmlndXJlLmluIChjaGVja2Z1bmNzKTogQWRkIGdldHRpbWVvZmRheS4KCSogY29uZmlnLmluLCBjb25maWd1cmU6IFJlZ2VuZXJhdGVkLgoKTW9uIEp1biAyMSAwNTo1NjowMSAxOTk5ICBNdW1pdCBLaGFuICA8a2hhbkB4cmF5bGl0aC53aXNjLmVkdT4KCgkqIGNvbmZpZ3VyZS5pbiAoKi0qLXV3aW4qKTogVVdJTiBoYXMgc3lzX3tlcnJsaXN0LG5lcnJ9IGV2ZW4gaWYKCXRoZSB0ZXN0IGZhaWxzLgoJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCgoxOTk5LTA2LTEwICBNaWtlIFN0dW1wICA8bXJzQHdycy5jb20+CgoJKiBNYWtlZmlsZS5pbiAoc2V0ZW52Lm8pOiBBZGQgY29uZmlnLmggZGVwIGZvciBzZXRlbnYubyB0byBmaXgKCXBhcmFsbGVsIGJ1aWxkcy4KCjE5OTktMDUtMjggIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIHB1dGVudi5jOiBJbmNsdWRlIGFuc2lkZWNsLmggdG8gZGVmaW5lIGBjb25zdCcuCgkqIHNldGVudi5jOiBMaWtld2lzZS4KCldlZCBNYXkgMjYgMDM6NTg6MjAgMTk5OSAgIk1lbGlzc2EgTydOZWlsbCIgPG9uZWlsbEBjcy5zZnUuY2E+CgoJKiBNYWtlZmlsZS5pbiAoQ0ZJTEVTKTogQWRkIHB1dGVudi5jIGFuZCBzZXRlbnYuYy4KCSogY29uZmlndXJlLmluIChmdW5jcyk6IEFkZCBwdXRlbnYgYW5kIHNldGVudi4KCShBQ19DSEVDS19GVU5DUyk6IENoZWNrIGZvciBwdXRlbnYgYW5kIHNldGVudi4KCSogY29uZmlndXJlOiBSZWJ1aWx0LgoJKiBwdXRlbnYuYyBzZXRlbnYuYzogTmV3IGZpbGVzLgoKCSogZ2V0Y3dkLmMgKGdldGN3ZCk6IElmIHBhdGhuYW1lIGlzIE5VTEwsIHRoZW4gb2J0YWluIFNJWkUKCWJ5dGVzIG9mIHNwYWNlIHVzaW5nIG1hbGxvYy4KCk1vbiBNYXkgMTcgMDE6NDI6MzQgMTk5OSAgU3R1IEdyb3NzbWFuICA8Z3Jvc3NtYW5AYmFieWxvbi01LmN5Z251cy5jb20+CgoJKiBjcGx1cy1kZW0uYyAoZGVtYW5nbGVfZnVuZF90eXBlIChuZWFyICdJJyBjYXNlKSk6IERvbid0IGFkdmFuY2UKCXRoZSAqbWFuZ2xlZCBwb2ludGVyIGJleW9uZCB0aGUgZW5kIG9mIHRoZSBzdHJpbmcuICBDbGVhbiB1cCBjb2RlIHRvCgltYXRjaCBwcmV2YWlsaW5nIGNvZGluZyBzdHlsZS4KCjE5OTktMDUtMTMgIE1pY2hhZWwgSGF5ZXMgIDxtLmhheWVzQGVsZWMuY2FudGVyYnVyeS5hYy5uej4KCgkqIHRtcG5hbS5jIChMX3RtcG5hbSk6IEZpeCB0eXBvLgoKVGh1IE1heSAxMyAwMToxNDo0NiAxOTk5IE1hcmMgRXNwaWUgPGVzcGllQGN2cy5vcGVuYnNkLm9yZz4KCgkqIGNwbHVzLWRlbS5jIChzdGFuZGFyZF9zeW1ib2xfY2hhcmFjdGVycyk6IFJlbmFtZWQgZnJvbQoJc3RhbmRhcmRfc3ltYm9sX2FscGhhYmV0LiAgTm8gbG9uZ2VyIG1vZGlmeSBUQUJMRS4KCShocF9zeW1ib2xfY2hhcmFjdGVycyk6IFJlbmFtZWQgZnJvbSBocF9zeW1ib2xfYWxwaGFiZXQuICBObyBsb25nZXIKCW1vZGlmeSBUQUJMRS4KCShtYWluKTogQ29ycmVzcG9uZGluZyBjaGFuZ2VzLiAgVXNlIHN0cmNociB0byBkZXRlcm1pbmUgaWYgYQoJY2hhcmFjdGVyIGlzIHZhbGlkLgoKMTk5OS0wNS0xMSAgSmltIEJsYW5keSAgPGppbWJAendpbmdsaS5jeWdudXMuY29tPgoKCSogY3BsdXMtZGVtLmMgKG1haW4pOiBVc2UgdGFibGUgbG9va3VwIHRvIGRpc3Rpbmd1aXNoIGlkZW50aWZpZXIKCWNoYXJhY3RlcnMgZnJvbSBub24taWRlbnRpZmllciBjaGFyYWN0ZXJzLgoJKHN0YW5kYXJkX3N5bWJvbF9hbHBoYWJldCwgaHBfc3ltYm9sX2FscGhhYmV0KTogTmV3IGZ1bmN0aW9ucy4KClRodSBNYXkgIDYgMjA6MzQ6NDIgMTk5OSAgRnJlZCBGaXNoICA8Zm5mQGJlLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbiAoc3lzL3Jlc291cmNlLmgpOiBBZGQgdG8gQUNfQ0hFQ0tfSEVBREVSUyBsaXN0LgoJKiBnZXRydW50aW1lLmM6IE9ubHkgYXR0ZW1wdCB0byBpbmNsdWRlIHN5cy9yZXNvdXJjZS5oIGFuZAoJdXNlIGdldHJ1c2FnZSBpZiBib3RoIEhBVkVfR0VUUlVTQUdFIGFuZCBIQVZFX1NZU19SRVNPVVJDRV9ICglhcmUgZGVmaW5lZC4KCk1vbiBBcHIgMjYgMDE6MzY6MDYgMTk5OSAgRG9ubiBUZXJyeSAoZG9ubkBpbnRlcml4LmNvbSkKCgkqIGNvbmZpZ3VyZS5pbiAoYWxsb2NhIGRldGVjdGlvbik6IEhhbmRsZSBhbGxvY2EgZGlyZWN0bHkgZm9yIGludGVyaXguCgkqIGNvbmZpZ3VyZTogUmVidWlsdC4KClN1biBBcHIgMjUgMDE6MTg6MjEgMTk5OSAgTXVtaXQgS2hhbiAgPGtoYW5AeHJheWxpdGgud2lzYy5lZHU+CgoJKiBjaG9vc2UtdGVtcC5jIChESVJfU0VQQVJBVE9SKTogVXNlICdcXCcgb25seSBmb3IgbmF0aXZlIHdpbmRvd3MzMi4KCjE5OTktMDQtMjAgIEppbSBCbGFuZHkgIDxqaW1iQHp3aW5nbGkuY3lnbnVzLmNvbT4KCglGaXggZnJvbSBEYWxlIEhhd2tpbnM6CgkqIGNwbHVzLWRlbS5jIChtb3BfdXApOiBTZXQgdHlwZXZlY19zaXplIHRvIHplcm8sIHNvIGl0J2xsIGJlCglyZWFsbG9jYXRlZCBwcm9wZXJseSBpZiB3ZSB1c2UgaXQgYWdhaW4uCgoJKiBjcGx1cy1kZW0uYyAoZGVtYW5nbGVfZnVuZF90eXBlKTogQ2hlY2sgZm9yIGJ1ZmZlciBvdmVycnVuLiAgQmUKCXN0cmljdGVyIGFib3V0IHN5bnRheC4gIEFsd2F5cyBudWxsLXRlcm1pbmF0ZSBzdHJpbmcuCgpUaHUgQXByIDE1IDIzOjAwOjU1IDE5OTkgIE11bWl0IEtoYW4gIDxraGFuQHhyYXlsaXRoLndpc2MuZWR1PgoKCSogY29uZmlndXJlLmluIChjaGVja2Z1bmNzKTogQ2hlY2sgZm9yIHNicmsuCgkqIGNvbmZpZy5pbjogUmVidWlsdC4KCSogY29uZmlndXJlOiBMaWtld2lzZS4KCSogeG1hbGxvYy5jOiBVc2UgSEFWRV9TQlJLIGluc3RlYWQgb2YgdGhlIGhvc3Qgc3BlY2lmaWMgZGVmaW5pdGlvbnMuCgoxOTk5LTA0LTEyICBKaW0gQmxhbmR5ICA8amltYkB6d2luZ2xpLmN5Z251cy5jb20+CgoJRml4IGZyb20gTWFyY3VzIERhbmllbHM6CgkqIGNwbHVzLWRlbS5jIChkZW1hbmdsZV9mdW5kX3R5cGUpOiBEb24ndCBydW4gb2ZmIHRoZSBlbmQgb2YgdGhlCglpZGVudGlmaWVyIGxvb2tpbmcgZm9yIGFub3RoZXIgdW5kZXJzY29yZS4KClN1biBBcHIgMTEgMjM6MjA6NTkgMTk5OSAgTXVtaXQgS2hhbiAgPGtoYW5AeHJheWxpdGgud2lzYy5lZHU+CgoJKiBwZXhlY3V0ZS5jOiBDaGFuZ2UgYWxsIHJlZmVyZW5jZXMgdG8gX19VV0lOX18gdG8gX1VXSU4uCgkqIHhtYWxsb2MuYzogTGlrZXdpc2UuCgkoeGNhbGxvYyk6IFVXSU4gaGFzIHNicmsuCgkoeHJlYWxsb2MpOiBGaXggZ3VhcmQgbWFjcm8uCgoxOTk5LTA0LTExICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogYWxsb2NhLWNvbmYuaCAoYWxsb2NhKSBbQ19BTExPQ0FdOiBEb24ndCB1c2UgR2NjIGJ1aWx0aW4KCW9yIDxhbGxvY2EuaD4uCgkqIGNsb2NrLmMgKEdOVV9IWik6IE5ldyBkZWZpbml0aW9uLgoJKGNsb2NrKTogVXNlIGl0LgoJKiBnZXRydW50aW1lLmM6IExpa2V3aXNlLgoKCSogY29uZmlnLnRhYmxlOiBVc2UgbWgtYmVvcy4KCSogY29uZmlnL21oLWJlb3M6IE5ldyBmaWxlLgoKMTk5OS0wNC0xMSAgTWFyayBNaXRjaGVsbCAgPG1hcmtAY29kZXNvdXJjZXJ5LmNvbT4KCgkqIGNwbHVzLWRlbS5jIChkZW1hbmdsZV90ZW1wbGF0ZV92YWx1ZV9wYXJtKTogSGFuZGxlCglwb2ludGVycy10by1tZW1iZXJzLgoJKGRvX3R5cGUpOiBIYW5kbGUgdGVtcGxhdGUgcGFyYW1ldGVycyBhcyBxdWFsaWZpZXJzLgoKMTk5OS0wNC0wMSAgSmltIEJsYW5keSAgPGppbWJAendpbmdsaS5jeWdudXMuY29tPgoKCSogY3BsdXMtZGVtLmM6IEF0dGVtcHQgdG8gaGFuZGxlIG92ZXJmbG93cyBpbiBjb3VudHMgd2l0aCBzb21lCglzZW1ibGFuY2Ugb2YgZ3JhY2UuCgkoY29uc3VtZV9jb3VudCk6IERldGVjdCBvdmVyZmxvd3MuICBSZXR1cm4gLTEgdG8gaW5kaWNhdGUgZXJyb3JzLAoJaW5zdGVhZCBvZiB6ZXJvLgoJKGRlbWFuZ2xlX3RlbXBsYXRlX3ZhbHVlX3Bhcm0sIGRlbWFuZ2xlX3RlbXBsYXRlKTogSGFuZGxlIGNoYW5nZQoJdG8gY29uc3VtZV9jb3VudCdzIHJldHVybiBjb252ZW50aW9uLgoKMTk5OS0wNC0wNSAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgoKCSogdGVzdHN1aXRlL3JlZ3Jlc3MtZGVtYW5nbGU6IE5ldyBmaWxlLgoJKiB0ZXN0c3VpdGUvZGVtYW5nbGUtZXhwZWN0ZWQ6IE5ldyBmaWxlLgoKCSogTWFrZWZpbGUuaW4gKGFsbCwgY2hlY2ssIGluc3RhbGxjaGVjaywgaW5mbywgaW5zdGFsbC1pbmZvLAoJY2xlYW4taW5mbywgZHZpLCBpbnN0YWxsLCBldGFncywgdGFncywgbW9zdGx5Y2xlYW4sIGNsZWFuLAoJZGlzdGNsZWFuLCBtYWludGFpbmVyLWNsZWFuLCByZWFsY2xlYW4pOiBEZXBlbmQgb24gY29ycmVzcG9uZGluZwoJYC1zdWJkaXInIHRhcmdldC4KCShhbGwtc3ViZGlyIGNoZWNrLXN1YmRpciBpbnN0YWxsY2hlY2stc3ViZGlyIGluZm8tc3ViZGlyCglpbnN0YWxsLWluZm8tc3ViZGlyIGNsZWFuLWluZm8tc3ViZGlyIGR2aS1zdWJkaXIKCWluc3RhbGwtaW5mby1zdWJkaXIgZXRhZ3Mtc3ViZGlyIG1vc3RseWNsZWFuLXN1YmRpciBjbGVhbi1zdWJkaXIKCWRpc3RjbGVhbi1zdWJkaXIgbWFpbnRhaW5lci1jbGVhbi1zdWJkaXIpOiBOZXcgdGFyZ2V0LgoJKiB0ZXN0c3VpdGUvTWFrZWZpbGUuaW46IE5ldyBmaWxlLgoJKiBjb25maWd1cmU6IFJlYnVpbHQuCgkqIGNvbmZpZ3VyZS5pbjogQ3JlYXRlIHRlc3RzdWl0ZS9NYWtlZmlsZS4KCjE5OTktMDQtMDIgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiBzcGxheS10cmVlLmggKHNwbGF5X3RyZWVfY29tcGFyZV9wb2ludGVycyk6IERlZmluZS4KCjE5OTktMDMtMzAgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiBzcGxheS10cmVlLmMgKHNwbGF5X3RyZWVfY29tcGFyZV9pbnRzKTogRGVmaW5lLgoKMTk5OS0wMy0zMCAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgoKCSogY3BsdXMtZGVtLmMgKGNvbnN1bWVfY291bnQpOiBJZiBgY291bnQnIHdyYXBzLCByZXR1cm4gMCBhbmQKCWRvbid0IGFkdmFuY2UgaW5wdXQgcG9pbnRlci4KCShkZW1hbmdsZV9jbGFzc19uYW1lKTogSWYgY29uc3VtZV9jb3VudCBkaWRuJ3QgZmluZCBhIGNvdW50LCBkbwoJbm90aGluZy4gIERvbid0IGJvdGhlciB3aXRoIGBzdHJsZW4nIHNhbml0eSBjaGVjazsgY29uc3VtZV9jb3VudAoJZG9lcyBpdCBmb3IgdXMuCgoxOTk5LTAzLTE2ICBTdGFuIFNoZWJzICA8c2hlYnNAYW5kcm9zLmN5Z251cy5jb20+CgoJRnJvbSBBcnQgSGFhcyAgPGFoYWFzQG5lb3NvZnQuY29tPjoKCSogY3BsdXMtZGVtLmMgKGRlbWFuZ2xlX3ByZWZpeCk6IERvbid0IGdyYWIgYWxsIHRoZSAnX18nIHN0cmluZ3MKCXdoZW4gZG9pbmcgYXJtIG9yIGhwIHN0eWxlLgoJKGRlbWFuZ2xlX25lc3RlZF9hcmdzKTogRGVjciBmb3JnZXR0aW5nX3R5cGVzIGZpZWxkIHdoZW4gZG9uZS4KClRodSBNYXIgMTEgMDE6MjI6NTggMTk5OSAgTXVtaXQgS2hhbiAgPGtoYW5AeHJheWxpdGgud2lzYy5lZHU+CgoJKiBwZXhlY3V0ZS5jIChfX0NZR1dJTjMyX18pOiBSZW5hbWUgdG8KCShfX0NZR1dJTl9fKTogdGhpcy4KCSogeG1hbGxvYy5jOiBMaWtld2lzZS4KCglDaGFuZ2VzIHRvIHN1cHBvcnQgaTM4Ni1wYy11d2luLgoJKiBjb25maWd1cmUuaW4gKCotKi11d2luKik6IFdvcmthcm91bmQgZm9yIHZmb3JrIGJ1Zy4KCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgoJKiBwZXhlY3V0ZS5jIChwZXhlY3V0ZSk6IEJlIGxpa2Ugc3RhbmRhcmQgVW5peC4KCShwd2FpdCk6IExpa2V3aXNlLgoJKiB4bWFsbG9jLmMgKGZpcnN0X2JyZWFrKTogRGVmaW5lLgoJKHhtYWxsb2Nfc2V0X3Byb2dyYW1fbmFtZSk6IFVzZS4KCSh4bWFsbG9jKTogVXNlLgoKVGh1IE1hciAxMSAwMTowNzo1NSAxOTk5ICBGcmFueiBTaXJsIDxGcmFuei5TaXJsLWtlcm5lbEBsYXV0ZXJiYWNoLmNvbT4KCgkqIGNvbmZpZy50YWJsZTogQ2xlYW51cCBhbmQgYWRkIG1oLSpwaWMgaGFuZGxpbmcgZm9yIGFscGhhLCBhcm0sIHBvd2VycGMKClN1biBGZWIgMjggMjI6MzA6NDQgMTk5OSAgR2VvZmZyZXkgTm9lciAgPG5vZXJAY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy50YWJsZTogQ2hlY2sgY3lnd2luKiwgbm90IGN5Z3dpbjMyKi4KClR1ZSBGZWIgIDkgMTY6Mzk6MDEgMTk5OSAgRGF2ZSBCcm9sbGV5ICA8YnJvbGxleUBjeWdudXMuY29tPgoKCSogTWFrZWZpbGUuaW46IENoYW5nZSBta3N0ZW1wIC0+IG1rc3RlbXBzLgoKVHVlIEZlYiAgOSAwMToxMjoyNyAxOTk5ICBNYXJjIEVzcGllIDxNYXJjLkVzcGllQGxpYWZhLmp1c3NpZXUuZnI+CgoJKiBNYWtlZmlsZS5pbiAoUkVRVUlSRURfT0ZJTEVTKTogcmVtb3ZlIG1rc3RlbXAubwoJKiBjb25maWd1cmUuaW4gKGZ1bmNzKTogQ2hlY2sgZm9yIGFuZCBjb25kaXRpb25hbGx5IGFkZCBta3N0ZW1wcyB0bwoJdGhlIGxpc3Qgb2YgZnVuY3Rpb25zIGxpYmliZXJ0eSB3aWxsIHByb3ZpZGUuCgkqIGNvbmZpZ3VyZTogUmVidWlsdC4KCldlZCBGZWIgIDMgMDA6MDE6MTUgMTk5OSAgTXVtaXQgS2hhbiAgPGtoYW5AeHJheWxpdGgud2lzYy5lZHU+CgoJKiBjbG9jay5jIChIWik6IERlZmluZSBpbiB0ZXJtcyBvZiAoSVNPIEMpIENMT0NLU19QRVJfU0VDIG9uCglwbGF0Zm9ybXMgdGhhdCBkb24ndCBoYXZlIEhaLgoJKiBnZXRydW50aW1lLmMgKEhaKTogTGlrZXdpc2UuCgpTYXQgSmFuIDMwIDEzOjI4OjA0IDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBNYWtlZmlsZS5pbiAoeHN0cmR1cC5vKTogRGVwZW5kIG9uIGNvbmZpZy5oLgoKV2VkIEphbiAxMyAwNzoyNjo0NCAxOTk5ICBILkouIEx1ICAoaGpsQGdudS5vcmcpCgoJKiBjcGx1cy1kZW0uYyAobW9wX3VwKTogU2V0IHdvcmstPnByZXZpb3VzX2FyZ3VtZW50IHRvIE5VTEwgYWZ0ZXIKCWZyZWVpbmcgaXQuCgpXZWQgSmFuIDEzIDE0OjE2OjM2IDE5OTkgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIHhzdHJkdXAuYyAoeHN0cmR1cCk6IFN3aXRjaCBmcm9tIHN0cmNweSB0byBtZW1jcHkgZm9yIHNwZWVkLgoKVHVlIEphbiAgNSAxNTo1ODoyOSAxOTk5ICBFbGVuYSBaYW5ub25pICA8ZXphbm5vbmlAa3dpa2VtYXJ0LmN5Z251cy5jb20+CgoJKiBNYWtlZmlsZS5pbiAoQ0ZJTEVTKTogZml4IHR5cG8sIHNwbGF5LXRyZWUuYyBpbnN0ZWFkIG9mCglzcGxheS10cmVlLm8uCgoxOTk5LTAxLTA0ICBKYXNvbiBNb2xlbmRhICAoanNtQGJ1Z3NoYWNrLmN5Z251cy5jb20pCgoJKiBjb25maWd1cmUuaW46IFJlcXVpcmUgYXV0b2NvbmYgMi4xMi4xIG9yIGhpZ2hlci4KCjE5OTgtMTItMzAgIE1pY2hhZWwgTWVpc3NuZXIgIDxtZWlzc25lckBjeWdudXMuY29tPgoKCSogcmFuZG9tLmMgKE5VTEwpOiBEb24ndCByZWRlZmluZSBOVUxMIGlmIGl0IGlzIGFscmVhZHkgZGVmaW5lZC4KClR1ZSBEZWMgMjIgMDk6NDM6MzUgMTk5OCAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogYXJndi5jIChidWlsZGFyZ3YpOiBDYXN0IHRoZSByZXN1bHQgb2YgYWxsb2NhIGluIGFzc2lnbm1lbnQuCgoJKiBjaG9vc2UtdGVtcC5jOiBJbmNsdWRlIHN0ZGxpYi5oLgoKCSogY3BsdXMtZGVtLmMgKGRlbWFuZ2xlX2FybV9wdCk6IFJlbW92ZSB1bnVzZWQgcHJvdG90eXBlLgogIAkoc25hcmZfbnVtZXJpY19saXRlcmFsKTogQ29uc3RpZnkgZmlyc3QgcGFyYW1ldGVyLgogIAkoY29kZV9mb3JfcXVhbGlmaWVyKTogQXZvaWQgYSBnY2MgZXh0ZW5zaW9uLCBtYWtlIHRoZSBwYXJhbWV0ZXIgYW4KIAlpbnQsIG5vdCBhIGNoYXIuCgkoZGVtYW5nbGVfcXVhbGlmaWVyKTogTGlrZXdpc2UuCgkoZGVtYW5nbGVfc2lnbmF0dXJlKTogQ2FzdCB0aGUgYXJndW1lbnQgb2YgYSBjdHlwZSBmdW5jdGlvbiB0bwoJdW5zaWduZWQgY2hhci4KCShhcm1fcHQpOiBBZGQgcGFyZW5zIGFyb3VuZCBhc3NpZ25tZW50IHVzZWQgYXMgdHJ1dGggdmFsdWUuCgkoZGVtYW5nbGVfYXJtX2hwX3RlbXBsYXRlKTogQ29uc3RpZnkgdmFyaWFibGUgYGFyZ3MnLgoJKGRvX2hwYWNjX3RlbXBsYXRlX2NvbnN0X3ZhbHVlKTogQ2FzdCB0aGUgYXJndW1lbnQgb2YgYSBjdHlwZQoJZnVuY3Rpb24gdG8gdW5zaWduZWQgY2hhci4KCShkb19ocGFjY190ZW1wbGF0ZV9saXRlcmFsKTogUmVtb3ZlIHVudXNlZCB2YXJpYWJsZSBgaScuCgkoc25hcmZfbnVtZXJpY19saXRlcmFsKTogQ29uc3RpZnkgcGFyYW1ldGVyIGBhcmdzJy4KCUNhc3QgdGhlIGFyZ3VtZW50IG9mIGEgY3R5cGUgZnVuY3Rpb24gdG8gdW5zaWduZWQgY2hhci4KCgkqIGZsb2F0Zm9ybWF0LmMgKGZsb2F0Zm9ybWF0X3RvX2RvdWJsZSk6IEFkZCBleHBsaWNpdCBicmFjZXMgdG8KIAlhdm9pZCBhbWJpZ3VvdXMgYGVsc2UnLgoKCSogZm5tYXRjaC5jIChmbm1hdGNoKTogQ2hhbmdlIHR5cGUgb2YgdmFyaWFibGVzIGBjJywgYGMxJywKIAlgY3N0YXJ0JyBhbmQgYGNlbmQnIHRvIHVuc2lnbmVkIGNoYXIuICBDYXN0IHRoZSBhcmd1bWVudCBvZiBtYWNybwogCWBGT0xEJywgd2hpY2ggdXNlcyBjdHlwZSBmdW5jdGlvbnMsIHRvIHVuc2lnbmVkIGNoYXIuCgoJKiBvYmphbGxvYy5jIChmcmVlKTogQWRkIHByb3RvdHlwZS4KClN1biBEZWMgMjAgMTY6MDM6NDYgMTk5OCAgSGFucy1QZXRlciBOaWxzc29uICA8aHBAYXhpcy5zZT4KCgkqIE1ha2VmaWxlLmluIChDRklMRVMpOiBGaXggdHlwbzogc3BsYXktdHJlZS5jLCBub3Qgc3BsYXktdHJlZS5vCgpGcmkgRGVjIDE4IDE3OjUwOjE4IDE5OTggIERhdmlkIFRheWxvciAgPHRheWxvckB0ZXhhcy5jeWdudXMuY29tPgoKCSogY3BsdXMtZGVtLmMgKGRlbWFuZ2xlX2FybV9wdCk6IHJlbW92ZSBkZWNsYXJhdGlvbiAtLSBmdW5jdGlvbgogCWRvZXNuJ3QgZXhpc3QuCgkoZG9faHBhY2NfdGVtcGxhdGVfbGl0ZXJhbCk6IHJlbW92ZSB1bnVzZWQgdmFyaWFibGUgYGknLgoKRnJpIERlYyAxOCAxNjoxMTo0MyBFU1QgMTk5OCAgQW5kcmV3IE1hY0xlb2QgIDxhbWFjbGVvZEBjeWdudXMuY29tPgoKCSogY3BsdXMtZGVtLmMgKGRlbWFuZ2xlX2Z1bmRfdHlwZSk6IFByb2Nlc3MgQ1YgYW5kIHUgY29kZXMgYmVmb3JlCglidW1waW5nIHRoZSBwb2ludGVyIHdlIHJlYWQgZnJvbS4gQWxzbyBwcmVwZW5kIHRoZXNlIGNvZGVzLAoJYXMgd2UgZG8gaW4gb3RoZXIgcGxhY2VzLgoKMTk5OC0xMi0xOCAgTmljayBDbGlmdG9uICA8bmlja2NAY3lnbnVzLmNvbT4KCgkqIGNwbHVzLWRlbS5jIChkZW1hbmdsZV9hcm1faHBfdGVtcGxhdGUpOiBNYWtlIHZhcmlhYmxlICdhcmdzJyBiZQoJJ2NvbnN0IGNoYXIgKicgaW4gb3JkZXIgdG8gbWF0Y2ggaXRzIHVzYWdlIHdoZW4gY2FsbGluZyBzaWJsaW5ncy4KCShzbmFyZl9udW1lcmljX2xpdGVyYWwpOiBNYWtlIGZpcnN0IGFyZyAnY29uc3QgY2hhciAqKicgaW4gb3JkZXIKCXRvIG1hdGNoIHVzYWdlLgoKTW9uIERlYyAxNCAwOTo1NTo1MCAxOTk4ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBjaG9vc2UtdGVtcC5jOiBEb24ndCBjaGVjayBJTl9HQ0MgYW55bW9yZS4KCgkqIGZsb2F0Zm9ybWF0LmMgKGZsb2F0Zm9ybWF0X2Zyb21fZG91YmxlKTogVXNlIGBjb25zdCcsIG5vdCBgQ09OU1QnLgoJKiBtZW1jaHIuYyAobWVtY2hyKTogTGlrZXdpc2UuCgkqIG1lbWNweS5jIChtZW1jcHkpOiBMaWtld2lzZS4KCSogbWVtbW92ZS5jIChtZW1tb3ZlKTogTGlrZXdpc2UuCgoJKiBta3N0ZW1wLmM6IERvbid0IGNoZWNrIElOX0dDQyBhbnltb3JlLgoJKiBwZXhlY3V0ZS5jOiBMaWtld2lzZS4KCSogc3BsYXktdHJlZS5jOiBMaWtld2lzZS4KCgkqIHN0cmNoci5jIChzdHJjaHIpOiBVc2UgYGNvbnN0Jywgbm90IGBDT05TVCcuCgkqIHN0cnJjaHIuYyAoc3RycmNocik6IExpa2V3aXNlLgoJKiBzdHJ0b2wuYyAoc3RydG9sKTogTGlrZXdpc2UuCgkqIHN0cnRvdWwuYyAoc3RydG91bCk6IExpa2V3aXNlLgoKRnJpIERlYyAgNCAxMzo1MTowNCAxOTk4ICBEYXZpZCBUYXlsb3IgICA8dGF5bG9yQHRleGFzLmN5Z251cy5jb20+CgkJCSAgRWxlbmEgWmFubm9uaSAgPGV6YW5ub25pQGN5Z251cy5jb20+CgkJCSAgU3RhbiBTaGVicyAgICAgPHNoZWJzQGN5Z251cy5jb20+CgkJCSAgRWRpdGggRXBzdGVpbiAgPGVlcHN0ZWluQGN5Z251cy5jb20+CgkJCSAgQW5kcmVzIE1hY0xlb2QgPGFtYWNsZW9kQGN5Z251cy5jb20+CgkJCSAgU2F0aXNoIFBhaQkgPHBhaUBhcG9sbG8uaHAuY29tPgoKCSogSFAgYUNDIGRlbWFuZ2xpbmcgc3VwcG9ydC4KCSogY3BsdXMtZGVtLmMKCShtYWluKTogUmVtb3ZlIGRlZmF1bHQgdG8gSFAgc3R5bGUgZGVtYW5nbGluZywgc2V0IHRvIEVERwogCWRlbWFuZ2xpbmcgY29ycmVjdGx5IHdoZW4gLWVkZyBzcGVjaWZpZWQ7IHNldCB0aGUgZGVtYW5nbGluZyBzdHlsZQogCXdoZW4gdXNlciBzcGVjaWZpZXMgJ2VkZycuIFNldCBzdHJpcF91bmRlcnNjb3JlIHRvCiAJcHJlcGVuZHNfdW5kZXJzY29yZSwgaWYgbm90IEhQVVhIUFBBLiAgU2V0CiAJY3VycmVudF9kZW1hbmdsaW5nX3N0eWxlIHRvIGhwX2RlbWFuZ2xpbmcgaWYgSFBVWEhQUEEuICBTZXQKIAljdXJyZW50IGRlbWFuZ2xpbmcgc3R5bGUgY29ycmVjdGx5IGlmIHRoZSBzd2l0Y2ggaXMgaHAuICBSZWFkCiAJbGFiZWwgY29ycmVjdGx5IGFsc28gaW4gdGhlIEhQIHN0eWxlIGNhc2UuCgkod29ya19zdHVmZik6IGFkZCB0ZW1wX3N0YXJ0IGZpZWxkOyBhZGQgZmllbGQgZm9yIHZvbGF0aWxlIG1lbWJlcgogCWZ1bmN0aW9uLgoJKGFybV9wdCk6IGhhbmRsZSBBUk1fREVNQU5HTElORyBhbmQgRURHX0RFTUFOR0xJTkcgc3R5bGVzOyBIUAogCXN0eWxlIGZvciB0aGlzIGNhc2UgaXMgdGhlIHNhbWUgYXMgQVJNLgoJKGRlbWFuZ2xlX2FyZ3MpOiBoYW5kbGUgRURHX0RFTUFOR0xJTkcgc3R5bGU7IHN1cHBvcnQgSFAgc3R5bGUuCgkoZGVtYW5nbGVfYXJtX2hwX3RlbXBsYXRlKTogbmV3IGZ1bmN0aW9uLiAoSXQgd2FzCiAJZGVtYW5nbGVfYXJtX3B0Lik7IGNoZWNrIGFuZCBzZXQgdmFsdWUgb2YgdGVtcF9zdGFydCBmaWVsZCBpbgogCW11bHRpcGxlIHBsYWNlcy4gQWxzbywgd2hlbiBjZWNoaW5nIGZvciBlbmQgb2YgdGVtcGxhdGUgYXJncywKIAljaGVjayB0byBzZWUgaWYgYXQgZW5kIG9mIHN0YXRpYyBtZW1iZXIgb2YgdGVtcGxhdGUgY2xhc3MuCgkoZGVtYW5nbGVfY2xhc3MpOiBuZXcgbG9jYWwgdmFyaWFibGUgOiBzYXZlX2NsYXNzX25hbWVfZW5kIERvbid0CiAJaW5jbHVkZSB0ZW1wbGF0ZSBhcmdzIGluIHN0cmluZyBkZWZpbmluZyBjbGFzcy4KCShkZW1hbmdsZV9jbGFzc19uYW1lKTogdXNlIGRlbWFuZ2VsX2FybV9ocF90ZW1wbGF0ZS4KCShkZW1hbmdsZV9mdW5jdGlvbl9uYW1lKTogaGFuZGxlIGNhc2Ugd2hlcmUgZGVtYW5nbGluZyBzdHlsZSBpcwogCUhQX0RFTUFOR0xJTkcgYW5kIGN1cnJlbnRseSBwb2ludCBhdCBhbiAnWCcgaW4gdGhlIG1hbmdsZWQgbmFtZS4KICAJSGFuZGxlIEVER19ERU1BTkdMSU5HIHN0eWxlLiAgSGFuZGxlIGNvbnN0cnVjdG9yIGFuZCBkZXN0cnVjdG9yCiAJb3BzIGZvciBIUCBzdHlsZS4KCShkZW1hbmdsZV9wcmVmaXgpOiBoYW5kbGUgRURHX0RFTUFOR0xJTkcgYW5kIEFSTV9ERU1BTkdMSU5HCiAJc3R5bGVzLiAgZ2xvYmFsIGRlc3RydWN0b3IgYW5kIGNvbnN0cnVjdG9yIGZvciBIUCBzdHlsZSBhcmUgc2FtZQogCWFzIGZvciBBUk0gc3R5bGUuIFNhbWUgZm9yIGxvY2FsIHZhcmlhYmxlcy4KCShkZW1hbmdsZV9xdWFsaWZpZWQpOiBoYW5kbGUgRURHX0RFTUFOR0xJTkcgc3R5bGUuCgkoZGVtYW5nbGVfc2lnbmF0dXJlKTogYWRkIGNhc2UgZm9yIHZvbGF0aWxlIG1lbWJlciBmdW5jdGlvbi4gIEZvcgogCWNhc2VzICcxJyAtICc5JyA6IGluaXRpYWxpemUgdGhlIHRlbXBfc3RhcnQgZmllbGQgdG8gLTEgYW5kIGhhbmRsZQogCXRoZSBFREdfREVNQU5HTElORyBzdHlsZS4gIGZvciBjYXNlICdGJyA6IGhhbmRsZSBFREdfREVNQU5HTElORwogCWFuZCBBVVRPX0RFTUFOR0xJTkcgc3R5bGVzLiAgSWYgZXhwZWN0aW5nIGEgZnVuY3Rpb24gYW5kIG1hbmFnZWQKIAl0byBkZW1hbmdsZSB0aGUgZnVuY3QgYXJncywgdGhlbiBoYW5kbGUgdGhlIExVQ0lEX0RFTUFOR0xJTkcsCiAJQVJNX0RFTUFOR0xJTkcsIGFuZCBFREdfREVNQU5HTElORyBzdHlsZXMuICBBZGQgY2FzZSBmb3IgbG9jYWwKIAljbGFzcyBuYW1lIGFmdGVyICJMbm5uXyBpbiBIUCBzdHlsZSBjYXNlLiBIUCBzdHlsZSB0b28gbmVlZHMgdG8KIAlmb3JnZXQgdHlwZXMuICBfbm5uIGlzIE9LIGZvciBIUCBzdHlsZSwgc28gZG9uJ3QgcmVwb3J0IGZhaWx1cmUuCgkoZG9faHBhY2NfdGVtcGxhdGVfY29uc3RfdmFsdWUpOiBuZXcgZnVuY3Rpb24uIEhhbmRsZSB0ZW1wbGF0ZSdzCiAJdmFsdWUgcGFyYW0gZm9yIEhQL2FDQy4KCShkb19ocGFjY190ZW1wbGF0ZV9saXRlcmFsKTogbmV3IGZ1bmN0aW9uLiAgSGFuZGxlIGEgdGVtcGxhdGUncwogCWxpdGVyYWwgcGFyYW1ldGVyIGZvciBIUCBhQ0MuCgkocmVjdXJzaXZlbHlfZGVtYW5nbGUpOiBuZXcgZnVuY3Rpb24KCShzbmFyZl9udW1lcmljX2xpdGVyYWwpOiBuZXcgZnVuY3Rpb24uCgkodXNhZ2UpOiBhZGQgJ2VkZycgdG8gdGhlIGxpc3Qgb2YgZGVtYW5nbGluZyBzdHlsZXM7IGFkZCBocCBzd2l0Y2gKIAl0byBtZXNzYWdlLgoKU2F0IE5vdiAyOCAxNzoyNToyMiAxOTk4ICBDaHJpc3RvcGhlciBGYXlsb3IgPGNnZkBjeWdudXMuY29tPgoKCSogcGV4ZWN1dGUuYzogUmVtb3ZlIG9ic29sZXRlIGlmZGVmZWQgY3lnd2luIGNvZGUuCgpGcmkgTm92IDI3IDEzOjI2OjA2IDE5OTggIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGNob29zZS10ZW1wLmM6IEFsd2F5cyBpbmNsdWRlIGxpYmliZXJ0eS5oLiAgQXZvaWQgcmVkdW5kYW5jaWVzLgoJKiBjcGx1cy1kZW0uYzogTGlrZXdpc2UuICBDb25mb3JtIHRvIGxpYmliZXJ0eS5oLgoJKiBwZXhlY3V0ZS5jOiBMaWtld2lzZS4KCSogc3BsYXktdHJlZS5jOiBMaWtld2lzZS4KCjE5OTgtMTEtMjUgIE1pa2UgU3R1bXAgIDxtcnNAd3JzLmNvbT4KCgkqIE1ha2VmaWxlLmluIChzcGxheS10cmVlLm8pOiBBZGQgY29uZmlnLmggZGVwZW5kZW5jeS4KCk1vbiBOb3YgMjMgMTY6NTk6NDkgMTk5OCAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogIGNvbmZpZ3VyZS5pbjogVXNlIEFDX1BSRVJFUSgyLjEyLjEpLgoKMTk5OC0xMS0xNiAgQmVuamFtaW4gS29zbmlrICA8YmtvekBoYWlnaHQuY29uc3RhbnQuY29tPgoKCSogY3BsdXMtZGVtLmMgKGRlbWFuZ2xlX2Z1bmRfdHlwZSk6IEFkZCBkZW1hbmdsaW5nIGZvciBDOXggdHlwZXMuCgpUaHUgTm92IDE5IDIyOjE1OjUwIDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIG1wdy5jIChtcHdfYWNjZXNzKTogQWRkIG1pc3NpbmcgcGFyZW5zLgoKVGh1IE5vdiAxOSAxMjo1OToyMSAxOTk4ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBjb25maWd1cmUuaW46IENhbGwgQUNfSEVBREVSX1NZU19XQUlULgoKCSogcGV4ZWN1dGUuYzogSW5jbHVkZSBzeXMvd2FpdC5oIHdoZW4gIUlOX0dDQy4KClRodSBOb3YgMTkgMTQ6Mzg6MjAgMTk5OCAgR2VvZmZyZXkgTm9lciAgPG5vZXJAY3lnbnVzLmNvbT4KCgkqIHBleGVjdXRlLmM6IHJldmVydCBiYWNrIHRvIGNoZWNraW5nIG9sZCBDeWd3aW4KCXByZXByb2Nlc3NvciBzeW1ib2wgdW50aWwgc29tZSB0aW1lIGhhcyBwYXNzZWQuCgpXZWQgTm92IDE4IDA4OjUyOjI2IDE5OTggIENocmlzdG9waGVyIEZheWxvciA8Y2dmQGN5Z251cy5jb20+CgoJKiBwZXhlY3V0ZS5jOiBSZW9yZ2FuaXplIFdJTjMyIGNhc2UgdG8gYWNjb21vZGF0ZSBDeWd3aW4KCXNpbmNlIGl0IHdpbGwgbm93IHN1cHBvcnQgc2ltaWxhciBjb25zdHJ1Y3RzLgoKRnJpIE5vdiAxMyAxOToxODowNSAxOTk4ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBjb25maWd1cmUuaW46IENoZWNrIGZvciBjYWxsb2MuCgoJKiBjYWxsb2MuYzogTmV3CWZpbGUuCgoJKiB4bWFsbG9jLmMgKHhjYWxsb2MpOiBOZXcgZnVuY3Rpb24uCgpGcmkgTm92IDEzIDA4OjUxOjQ2IEVTVCAxOTk4ICBBbmRyZXcgTWFjTGVvZCAgPGFtYWNsZW9kQGN5Z251cy5jb20+CgoJKmNwbHVzLWRlbS5jIChkZW1hbmdsZV9wcmVmaXgpOiBVc2UgdGhlIGxhc3QgIl9fIgoJaW4gdGhlIG1hbmdsZWQgbmFtZSB3aGVuIGxvb2tpbmcgZm9yIHRoZSBzaWduYXR1cmUuIFRoaXMgYWxsb3dzCgl0ZW1wbGF0ZSBuYW1lcyB0byBiZWdpbiB3aXRoICJfXyIuCgoxOTk4LTExLTA4ICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogY3BsdXMtZGVtLmMgKHR5cGVfa2luZF90KTogQWRkIHRrX3JlZmVyZW5jZS4KCShkZW1hbmdsZV90ZW1wbGF0ZV92YWx1ZV9wYXJtKTogSGFuZGxlIGl0LgoJKGRvX3R5cGUpOiBVc2UgaXQgZm9yIHJlZmVyZW5jZXMsIGluc3RlYWQgb2YgdGtfcG9pbnRlci4KCgkqIGNwbHVzLWRlbS5jIChkZW1hbmdsZV90ZW1wbGF0ZV92YWx1ZV9wYXJtKTogVXNlIGNwbHVzX2RlbWFuZ2xlLAoJbm90IGludGVybmFsX2NwbHVzX2RlbWFuZ2xlLgoKU2F0IE5vdiAgNyAxNjowMjoxMCAxOTk4ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBjaG9vc2UtdGVtcC5jOiBEb24ndCBpbmNsdWRlIGdhbnNpZGVjbC5oLgoJKiBta3N0ZW1wLmM6IExpa2V3aXNlLgoJKiBwZXhlY3V0ZS5jOiBMaWtld2lzZS4KCk1vbiBOb3YgIDIgMTU6MDU6MzMgMTk5OCAgR2VvZmZyZXkgTm9lciAgPG5vZXJAY3lnbnVzLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbjogZGV0ZWN0IGN5Z3dpbiogaW5zdGVhZCBvZiBjeWd3aW4zMioKCSogY29uZmlndXJlOiByZWdlbmVyYXRlCgpNb24gTm92ICAyIDEwOjIyOjAxIDE5OTggIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIHBleGVjdXRlLmM6IENoZWNrIEhBVkVfQ09ORklHX0gsIG5vdCBJTl9HQ0MsIHdoZW4gZGV0ZXJtaW5pbmcKIAl3aGV0aGVyIHRvIGluY2x1ZGUgY29uZmlnLmguICBQb3NzaWJseSBpbmNsdWRlIHVuaXN0ZC5oIGluIHRoZQogCSFJTl9HQ0MgY2FzZS4gIERlZmluZSBWRk9SS19TVFJJTkcgYXMgYSBwcmludGFibGUgZnVuY3Rpb24gY2FsbAogCWZvciBlcnJvciBtZXNzYWdlcyAoZWl0aGVyICJ2Zm9yayIgb3IgImZvcmsiLikgIElmIEhBVkVfVkZPUktfSCBpcwogCWRlZmluZWQsIGluY2x1ZGUgdmZvcmsuaC4gIElmIFZNUyBpcyBkZWZpbmVkLCBkZWZpbmUgdmZvcmsoKQogCWFwcHJvcHJpYXRlbHkuICBSZW1vdmUgdmZvcmsgY2hlY2sgb24gVVNHLCB3ZSdyZSB1c2luZyBhdXRvY29uZi4KICAJKHBleGVjdXRlKTogU2V0IGBlcnJtc2dfZm10JyB0byBWRk9SS19TVFJJTkcgaW5zdGVhZCBvZiBjaGVja2luZwogCWxvY2FsbHkgd2hhdCBzdHJpbmcgdG8gdXNlLgoKMTk5OC0xMC0yNiAgTWFyayBNaXRjaGVsbCAgPG1hcmtAbWFya21pdGNoZWxsLmNvbT4KCgkqIHNwbGF5LXRyZWUuYzogVHdlYWsgaW5jbHVkZSBkaXJlY3RpdmVzIHRvIG1ha2Ugc3VyZSBkZWNsYXJhdGlvbnMgb2YKCXhtYWxsb2MgYW5kIGZyZWUgYXJlIGF2YWlsYWJsZS4KCjE5OTgtMTAtMjUgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiBjcGx1cy1kZW0uYyAoZ251X3NwZWNpYWwpOiBGaXggaGFuZGxpbmcgb2YgdmlydHVhbCB0YWJsZXMgaW4KCWFub255bW91cyBuYW1lc3BhY2VzLgoKMTk5OC0xMC0yMyAgTWFyayBNaXRjaGVsbCAgPG1hcmtAbWFya21pdGNoZWxsLmNvbT4KCgkqIGNwbHVzLWRlbS5jICh3b3JrX3N0dWZmKTogUmVwbGFjZSBjb25zdF90eXBlIGFuZCB2b2xhdGlsZV90eXBlCgl3aXRoIHR5cGVfcXVhbHMuCgkoVFlQRV9VTlFVQUxJRklFRCk6IE5ldyBtYWNyby4KCShUWVBFX1FVQUxfQ09OU1QpOiBMaWtld2lzZS4KCShUWVBFX1FVQUxfVk9MQVRJTEUpOiBMaWtld2lzZS4KCShUWVBFX1FVQUxfUkVTVFJJQ1QpOiBMaWtld2lzZS4KCShjb2RlX2Zvcl9xdWFsaWZpZXIpOiBOZXcgZnVuY3Rpb24uCgkocXVhbGlmaWVyX3N0cmluZyk6IExpa2V3aXNlLgoJKGRlbWFuZ2xlX3F1YWxpZmllcik6IExpa2V3aXNlLgoJKGludGVybmFsX2NwbHVzX2RlbWFuZ2xlKTogVXNlIHRoZW0uCgkoZGVtYW5nbGVfc2lnbmF0dXJlKTogTGlrZXdpc2UuCgkoZGVtYW5nbGVfdGVtcGxhdGVfdmFsdWVfcGFybSk6IExpa2V3aXNlLgoJKGRvX3R5cGUpOiBMaWtld2lzZS4KCShkZW1hbmdsZV9mdW5kX3R5cGUpKTogTGlrZXdpc2UuCgpUaHUgT2N0IDIyIDE5OjU4OjQzIDE5OTggIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIHNwbGF5LXRyZWUuYyAoc3BsYXlfdHJlZV9mb3JlYWNoX2hlbHBlcik6IE1ha2UgZGVmaW5pdGlvbiBzdGF0aWMKCXRvIG1hdGNoIHByb3RvdHlwZS4KCjE5OTgtMTAtMjEgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiBzcGxheS10cmVlLmM6IE5ldyBmaWxlLgoJKiBNYWtlZmlsZS5pbiAoQ0ZJTEVTKTogQWRkIGl0LgoJKFJFUVVJUkVEX09GSUxFUyk6IExpa2V3aXNlLgoJKHNwbGF5LXRyZWUubyk6IEFkZCBkZXBlbmRlbmNpZXMuCgpUdWUgT2N0IDIwIDEyOjI5OjAyIDE5OTggIEFuZHJlYXMgU2Nod2FiICA8c2Nod2FiQGlzc2FuLmNzLnVuaS1kb3J0bXVuZC5kZT4KCgkqIGNwbHVzLWRlbS5jIChkZW1hbmdsZV9xdWFsaWZpZWQpOiBGaXggb2ZmLWJ5LW9uZSB3aGVuIGNoZWNraW5nCglyYW5nZSBvZiAnSycgaW5kZXguCgpUaHUgT2N0IDE1IDE4OjUxOjEyIDE5OTggIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGNob29zZS10ZW1wLmM6IFByb3RvdHlwZSBta3N0ZW1wcygpIHdoZW4gSU5fR0NDLgoKCSogY3BsdXMtZGVtLmMgKGNvbnN1bWVfY291bnQpOiBDYXN0IGFyZ3VtZW50IG9mIGN0eXBlIG1hY3JvIHRvCglgdW5zaWduZWQgY2hhcicuCgkoY3BsdXNfZGVtYW5nbGVfb3BuYW1lKTogQ2FzdCB0aGUgcmVzdWx0IG9mIGBzdHJsZW4nIHRvIChpbnQpIHdoZW4KCWNvbXBhcmluZyBhZ2FpbnN0IG9uZS4KCShjcGx1c19tYW5nbGVfb3BuYW1lKTogTGlrZXdpc2UuCgkoZGVtYW5nbGVfaW50ZWdyYWxfdmFsdWUpOiBDYXN0IGFyZ3VtZW50IG9mIGN0eXBlIG1hY3JvIHRvCglgdW5zaWduZWQgY2hhcicuCgkoZGVtYW5nbGVfdGVtcGxhdGVfdmFsdWVfcGFybSk6IExpa2V3aXNlLgoJKGRlbWFuZ2xlX3RlbXBsYXRlKTogSW5pdGlhbGl6ZSB2YXJpYWJsZSBgYmluZGV4Jy4gIENhc3QgdGhlCglyZXN1bHQgb2YgYHN0cmxlbicgdG8gKGludCkgd2hlbiBjb21wYXJpbmcgYWdhaW5zdCBvbmUuICBSZW1vdmUKCXVudXNlZCB2YXJpYWJsZSBgc3RhcnRfb2ZfdmFsdWVfcGFybScuCgkoZGVtYW5nbGVfY2xhc3NfbmFtZSk6IENhc3QgdGhlIHJlc3VsdCBvZiBgc3RybGVuJyB0byAoaW50KSB3aGVuCgljb21wYXJpbmcgYWdhaW5zdCBvbmUuCgkoZGVtYW5nbGVfcHJlZml4KTogQ2FzdCBhcmd1bWVudCBvZiBjdHlwZSBtYWNybyB0byBgdW5zaWduZWQgY2hhcicuCgkoZ251X3NwZWNpYWwpOiBMaWtld2lzZS4gIENhc3QgdGhlIHJlc3VsdCBvZiBgc3RybGVuJyB0byAoaW50KQoJd2hlbiBjb21wYXJpbmcgYWdhaW5zdCBvbmUuCgkoZGVtYW5nbGVfcXVhbGlmaWVkKTogQ2FzdCBhcmd1bWVudCBvZiBjdHlwZSBtYWNybyB0byBgdW5zaWduZWQgY2hhcicuCgkoZ2V0X2NvdW50KTogTGlrZXdpc2UuCgkoZG9fdHlwZSk6IExpa2V3aXNlLiAgQ2FzdCB0aGUgcmVzdWx0IG9mIGBzdHJsZW4nIHRvIChpbnQpIHdoZW4KCWNvbXBhcmluZyBhZ2FpbnN0IG9uZS4KCShkZW1hbmdsZV9mdW5kX3R5cGUpOiBDYXN0IGFyZ3VtZW50IG9mIGN0eXBlIG1hY3JvIHRvIGB1bnNpZ25lZCBjaGFyJy4KCShkZW1hbmdsZV9mdW5jdGlvbl9uYW1lKTogQ2FzdCB0aGUgcmVzdWx0IG9mIGBzdHJsZW4nIHRvIChpbnQpCgl3aGVuIGNvbXBhcmluZyBhZ2FpbnN0IG9uZS4KCgkqIG1rc3RlbXAuYyAobWtzdGVtcHMpOiBDYXN0IHZhcmlhYmxlIGBsZW4nIHRvIChpbnQpIHdoZW4KCWNvbXBhcmluZyBhZ2FpbnN0IG9uZS4KClR1ZSBPY3QgMTMgMjM6NTE6NTEgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogbWtzdGVtcC5jOiBDaGVjayBIQVZFX1NZU19USU1FX0ggYmVmb3JlIGluY2x1ZGluZyBzeXMvdGltZS5oCgkqIGNvbmZpZ3VyZS5pbiAoQUNfQ0hFQ0tfSEVBREVSUyk6IENoZWNrIGZvciBzeXMvdGltZS5oIHRvby4KCSogY29uZmlnLmluLCBjb25maWd1cmU6IFJlYnVpbHQuCgoJKiBnZXRvcHQuYzogQ2hlY2sgSEFWRV9TVFJJTkdTX0ggYmVmb3JlIGluY2x1ZGluZyBzdHJpbmdzLmguCgkqIGNvbmZpZ3VyZS5pbiAoQUNfQ0hFQ0tfSEVBREVSUyk6IENoZWNrIGZvciBzdHJpbmdzLmggdG9vLgoJKiBjb25maWcuaW4sIGNvbmZpZ3VyZTogUmVidWlsdC4KCk1vbiBPY3QgMTIgMTk6MTU6NTkgMTk5OCAgR2VvZmZyZXkgTm9lciAgPG5vZXJAY3lnbnVzLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbjogaW4gY29tbWVudCwgY2FsbCBBQ19FWEVFWFQgaW5zdGVhZCBvZiBBTV9FWEVFWFQKClN1biBPY3QgMTEgMTc6MzY6MDYgMTk5OCAgTWljaGFlbCBUaWVtYW5uICA8dGllbWFubkBob2xvZGVjay5jeWdudXMuY29tPgoKCSogTWFrZWZpbGUuaW4gKGNwbHVzLWRlbS5vLCBvYnN0YWNrLm8pOiBEZXBlbmQgdXBvbiBjb25maWcuaC4KClRodSBPY3QgIDggMjM6NDI6MDggMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogTWVyZ2UgZWdjcyAmIGRldm8gbGliaWJlcnR5LgoKMTk5OC0wOS0wOCAgTWFydGluIHZvbiBM9ndpcyAgPGxvZXdpc0BpbmZvcm1hdGlrLmh1LWJlcmxpbi5kZT4KCgkqIGNwbHVzLWRlbS5jIChkZW1hbmdsZV9hcm1fcHQpOiBEZW1hbmdsZSBhbm9ueW1vdXMgbmFtZXNwYWNlcy4KCk1vbiBTZXAgIDcgMjM6Mjk6MDEgMTk5OCAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogbWtzdGVtcC5jOiBJbmNsdWRlIGNvbmZpZy5oIGV2ZW4gd2hlbiBub3QgSU5fR0NDLiAgV3JhcCBoZWFkZXIKIAlpbmNsdXNpb25zIGluc2lkZSBIQVZFXypfSCBtYWNyb3MuICBJbmNsdWRlIGFuc2lkZWNsLmggd2hlbiBub3QKIAlJTl9HQ0MuCgoJKiB2YXNwcmludGYuYzogSW5jbHVkZSBzdGRhcmcuaC92YXJhcmdzLmggZmlyc3QuCgoJKiB2cHJpbnRmLmM6IExpa2V3aXNlLgoKU2F0IFNlcCAgNSAwMzoyNDo0OSAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBwZXhlY3V0ZS5jOiBVcGRhdGVzIGZyb20gZ2NjLiAgQ29weSBpbiBnY2MgaGFzIGJlZW4gcmVtb3ZlZC4gIFRoaXMKCWlzIHRoZSBjYW5vbmljYWwgY29weS4gIERlZmluZSBJU1NQQUNFIGlmICFJTl9HQ0MuCgkqIGFsbG9jYS5jLCB2ZnByaW50Zi5jLCBjaG9vc2UtdGVtcC5jLCBta3N0ZW1wLmMsIGdldG9wdC5jOiBTaW1pbGFybHkuCgkqIGdldG9wdDEuYywgb2JzdGFjay5jOiBTaW1pbGFybHkuCgkqIE1ha2VmaWxlLmluOiBCdWlsZCBta3N0ZW1wLm8KClR1ZSBTZXAgIDEgMjM6MTI6NDcgMTk5OCAgQ2hyaXN0b3BoZXIgRmF5bG9yIDxjZ2ZAY3lnbnVzLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbjogSW5jbHVkZSBhc3ByaW50ZiBpbiBsaXN0IG9mIGZ1bmN0aW9ucyBrbm93biBub3QKCXRvIGJlIGluIG5ld2xpYi4KCSogY29uZmlndXJlOiBSZWJ1aWxkLgoKV2VkIEF1ZyAxOSAxNDowNTowMSAxOTk4ICBNdW1pdCBLaGFuICA8a2hhbkB4cmF5bGl0aC53aXNjLmVkdT4KCgkqIGNwbHVzLWRlbS5jICh3b3JrX3N0dWZmKTogQWRkIGRsbGltcG9ydGVkLgoJKGRlbWFuZ2xlZF9wcmVmaXgpOiBNYXJrIHN5bWJvbHMgaW1wb3J0ZWQgZnJvbSBQRSBETEwuCgkoaW50ZXJuYWxfY3BsdXNfZGVtYW5nbGVkKTogSGFuZGxlLgoKMTk5OC0wOC0xNyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY3BsdXMtZGVtLmMgKGRvX3R5cGUpOiBGaXggc2ltcGxlIGFycmF5IGhhbmRsaW5nLiAgSWYgd2UgZmFpbCwKCXN0YXkgZmFpbGVkLgoKTW9uIEF1ZyAxNyAxMDo0MDozNCAxOTk4ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBjcGx1cy1kZW0uYzogSW5jbHVkZSBjb25maWcuaCBpZiBpdCBleGlzdHMuICBBbHNvLCBvbmx5Cglwcm90b3R5cGUgbWFsbG9jL3JlYWxsb2MgaWYgd2UgY2FuJ3QgZ2V0IHN0ZGxpYi5oLgoKU2F0IEF1ZyAxNSAxNjoxNTowMSAxOTk4ICBJYW4gTGFuY2UgVGF5bG9yICA8aWFuQGN5Z251cy5jb20+CgoJKiBjb25maWd1cmUuaW46IFN3aXRjaCBiYWNrIHRvIGNoZWNraW5nIC0td2l0aC10YXJnZXQtc3ViZGlyIHdoZW4KCWRlY2lkaW5nIHdoZXRoZXIgdG8gY2hlY2sgZm9yIG5ld2xpYiwgdW5kb2luZyBwYXJ0IG9mIEp1bHkgMTUKCWNoYW5nZS4KCSogY29uZmlndXJlOiBSZWJ1aWxkLgoKVGh1IEF1ZyAxMyAxNjo0NzozOCAxOTk4ICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogY3BsdXMtZGVtLmMgKHR5cGVfa2luZF90KTogTmV3IHR5cGUuCgkoZGVtYW5nbGVfdGVtcGxhdGVfdmFsdWVfcGFybSk6IEFkZCB0eXBlX2tpbmRfdCBwYXJhbWV0ZXIuICBSZWx5CglvbiB0aGlzIHBhcmFtdGVyLCByYXRoZXIgdGhhbiBkZW1hbmdsaW5nIHRoZSB0eXBlIGFnYWluLgoJKGRlbWFuZ2xlX2ludGVncmFsX3ZhbHVlKTogUGFzcyB0a19pbnRlZ3JhbC4KCShkZW1hbmdsZV90ZW1wbGF0ZV86IFBhc3MgdGhlIHZhbHVlIHJldHVybmVkIGZyb20gZG9fdHlwZS4KCShkb190eXBlKTogUmV0dXJuIGEgdHlwZV9raW5kX3QuICBQYXNzIHRrX2ludGVncmFsIHRvCglkZW1hbmdsZV90ZW1wbGF0ZV92YWx1ZV9wYXJtIGZvciBhcnJheSBib3VuZHMuCgkoZGVtYW5nbGVfZnVuZF90eXBlKTogTGlrZXdpc2UuCgoJQWxzbyBpbmNvcnBvcmF0ZSBmcm9tIEdDQyB2ZXJzaW9uOgoKCVR1ZSBKdWwgMjEgMTM6Mjg6MTkgMTk5OCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY3BsdXMtZGVtLmMgKGRvX3R5cGUpOiBVc2UgZGVtYW5nbGVfdGVtcGxhdGVfdmFsdWVfcGFybSBmb3IgYXJyYXlzLgoKVGh1IEF1ZyAxMyAxNjo0NzozOCAxOTk4ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBjcGx1cy1kZW0uYyAoZGVtYW5nbGVfbmVzdGVkX2FyZ3MpOiBNYWtlIGZ1bmN0aW9uIGRlZmluaXRpb24KCXN0YXRpYyB0byBtYXRjaCB0aGUgcHJvdG90eXBlLgoKVHVlIEp1bCAyOCAxMTozMzowOSAxOTk4ICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogY3BsdXMtZGVtLmMgKHR5cGVfa2luZF90KTogTmV3IHR5cGUuCgkoZGVtYW5nbGVfdGVtcGxhdGVfdmFsdWVfcGFybSk6IEFkZCB0eXBlX2tpbmRfdCBwYXJhbWV0ZXIuICBSZWx5CglvbiB0aGlzIHBhcmFtdGVyLCByYXRoZXIgdGhhbiBkZW1hbmdsaW5nIHRoZSB0eXBlIGFnYWluLgoJKGRlbWFuZ2xlX2ludGVncmFsX3ZhbHVlKTogUGFzcyB0a19pbnRlZ3JhbC4KCShkZW1hbmdsZV90ZW1wbGF0ZV86IFBhc3MgdGhlIHZhbHVlIHJldHVybmVkIGZyb20gZG9fdHlwZS4KCShkb190eXBlKTogUmV0dXJuIGEgdHlwZV9raW5kX3QuICBQYXNzIHRrX2ludGVncmFsIHRvCglkZW1hbmdsZV90ZW1wbGF0ZV92YWx1ZV9wYXJtIGZvciBhcnJheSBib3VuZHMuCgkoZGVtYW5nbGVfZnVuZF90eXBlKTogTGlrZXdpc2UuCgoJQWxzbyBpbmNvcnBvcmF0ZSBmcm9tIEdDQyB2ZXJzaW9uOgoKCVR1ZSBKdWwgMjEgMTM6Mjg6MTkgMTk5OCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY3BsdXMtZGVtLmMgKGRvX3R5cGUpOiBVc2UgZGVtYW5nbGVfdGVtcGxhdGVfdmFsdWVfcGFybSBmb3IgYXJyYXlzLgoKTW9uIEp1bCAyNyAxMjoxNjowOCAxOTk4ICBJYW4gTGFuY2UgVGF5bG9yICA8aWFuQGN5Z251cy5jb20+CgoJKiBNYWtlZmlsZS5pbiAoQUxMT0NBKTogTmV3IHZhcmlhYmxlLgoJKCQoVEFSR0VUTElCKSk6IEFkZCAkKEFMTE9DQSkgdG8gbGlicmFyeS4KCShuZWVkZWQtbGlzdCk6IEFkZCAkKEFMTE9DQSkuCgkoJChBTExPQ0EpKTogRGVwZW5kIHVwb24gc3RhbXAtcGljZGlyLgoKU3VuIEp1bCAxOSAwODoyMzoxNyAxOTk4ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBjcGx1cy1kZW0uYyAoZGVtYW5nbGVfbmVzdGVkX2FyZ3MpOiBNYWtlIGZ1bmN0aW9uIGRlZmluaXRpb24KCXN0YXRpYyB0byBtYXRjaCB0aGUgcHJvdG90eXBlLgoKV2VkIEp1bCAxNSAwMDoxMjo1OCAxOTk4ICBJYW4gTGFuY2UgVGF5bG9yICA8aWFuQGN5Z251cy5jb20+CgoJKiBjb25maWd1cmUuaW46IENoZWNrIC0td2l0aC1jcm9zcy1ob3N0IHJhdGhlciB0aGFuCgktLXdpdGgtdGFyZ2V0LXN1YmRpciB3aGVuIGRlY2lkaW5nIHdoZXRoZXIgYnVpbGQgdXNlcyBhIGNyb3NzCgljb21waWxlciwgYW5kIHdoZW4gZGVjaWRpbmcgd2hlcmUgdG8gaW5zdGFsbCB0aGUgbGlicmFyeS4KCSogY29uZmlndXJlOiBSZWJ1aWxkLgoKU3VuIEp1bCAxMiAwMToyNzowNSAxOTk4ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjcGx1cy1kZW0uYyAoZGVtYW5nbGVfbmVzdGVkX2FyZ3MpOiBSZXR1cm4gYSB2YWx1ZS4KClNhdCBKdWwgMTEgMTY6MTk6NDggMTk5OCAgTWFyayBNaXRjaGVsbCAgPG1hcmtAbWFya21pdGNoZWxsLmNvbT4KCgkqIGNwbHVzLWRlbS5jIChzdHJpbmcpOiBNb3ZlIGRlZmluaXRpb24gYmVmb3JlIHdvcmtfc3R1ZmYuCgkod29ya19zdHVmZik6IEFkZCB2b2xhdGlsZV90eXBlLCBmb3JnZXR0aW5nX3R5cGVzLAoJcHJldmlvdXNfYXJndW1lbnQsIGFuZCBucmVwZWF0cyBmaWVsZHMuCgkoU0NPUEVfU1RSSU5HKTogTmV3IG1hY3JvLgoJKGRlbWFuZ2xlX3RlbXBsYXRlKTogQWRkIGByZW1lbWJlcicgcGFyYW1ldGVyLiAgQWRkIGNvbW1lbnQuCglSZWdpc3RlciB0aGUgYEInIGNvZGUgdHlwZSBoZXJlLCBpZiByZW1lbWJlcmluZy4gIFRpZHkuICBGaXggY3Jhc2gKCW9uIE5VTEwgdG1wbF9hcmd2ZWMuICBCZSBjb25zaXN0ZW50IHdpdGggdXNlIG9mIHRuYW1lL3RyYXduYW1lLgoJKGRlbWFuZ2xlX25lc3RlZF9hcmdzKTogTmV3IGZ1bmN0aW9uLgoJKGludGVybmFsX2NwbHVzX2RlbWFuZ2xlKTogSGFuZGxlIHZvbGF0aWxlLXF1YWxpZmllZCBtZW1iZXIKCWZ1bmN0aW9ucy4KCShtb3BfdXApOiBEZWxldGUgdGhlIHByZXZpb3VzX2FyZ3VtZW50IHN0cmluZyBpZiBwcmVzZW50LgoJKGRlbWFuZ2xlX3NpZ25hdHVyZSk6IFRpZHkuICBIYW5kbGUgdm9sYXRpbGUtcXVhbGlmaWVkIG1lbWJlcgoJZnVuY3Rpb25zLiAgSGFuZGxlIGJhY2stcmVmZXJlbmNlcyB1c2luZyB0aGUgYEInIGNvZGUuICBVc2UgZXh0cmEKCXBhcmFtZXRlciB0byBkZW1hbmdsZV90ZW1wbGF0ZSBhbmQgU0NPUEVfU1RSSU5HIHdoZXJlIGFwcHJvcHJpYXRlLgoJKGRlbWFuZ2xlX3RlbXBsYXRlX3ZhbHVlX3Bhcm0pOiBGaXggdGhpbmtvOyAnQicgaXMgbm90IGFuIGludGVncmFsCgljb2RlLgoJKGRlbWFuZ2xlX2NsYXNzKTogVXNlIFNDT1BFX1NUUklORy4KCShnbnVfc3BlY2lhbCk6IFBhc3MgYWRkaXRpb25hbCBhcmd1bWVudCB0byBkZW1hbmdsZV90ZW1wbGF0ZS4KCVVzZSBTQ09QRV9TVFJJTkcuCgkoZGVtYW5nbGVfcXVhbGlmaWVkKTogU2F2ZSBxdWFsaWZpZWQgdHlwZXMgZm9yIGxhdGVyCgliYWNrLXJlZmVyZW5jZXMuICBIYW5kbGUgY29uc3RydWN0b3JzIGFuZCBkZXN0cnVjdG9ycyBmb3IgdGVtcGxhdGUKCXR5cGVzIGNvcnJlY3RseS4KCShkb190eXBlKTogVGlkeS4gIFVzZSBTQ09QRV9TVFJJTkcuICBQYXNzIGV4dHJhIGFyZ3VtZW50IHRvCglkZW1hbmdsZV90ZW1wbGF0ZS4gIFVzZSBkZW1hbmdsZWRfbmVzdGVkX2FyZ3MuICBEb24ndCByZW1lbWJlcgoJcXVhbGlmaWVkIHR5cGVzIGhlcmU7IHRoYXQncyBub3cgZG9uZSBpbiBkZW1hbmdsZV9xdWFsaWZpZWQuCglTaW1pbGFybHkgZm9yIHRlbXBsYXRlcy4KCShkb19hcmcpOiBJbXByb3ZlIGNvbW1tZW50LiAgSGFuZGxlICduJyByZXBlYXQgY29kZS4KCShyZW1lbWJlcl90eXBlKTogQ2hlY2sgZm9yZ2V0dGluZ190eXBlcy4KCShkZW1hbmdsZV9hcmdzKTogRGVhbCB3aXRoICduJyByZXBlYXQgY29kZXMuICBUaWR5LgoKVGh1IEp1bCAgMiAxNjoyNjoyNCAxOTk4ICBJYW4gTGFuY2UgVGF5bG9yICA8aWFuQGN5Z251cy5jb20+CgoJKiBjb25maWcudGFibGU6IE9ubHkgdXNlIG1oLWZic2QyMSBvbiAqLSotZnJlZWJzZDIuMi5bMDEyXSwgbm90IG9uCgkqLSotZnJlZWJzZDIuMi4qLiAgRnJvbSBEbWl0cmlqIFRlamJsdW0gPHRlamJsdW1AYXJjLmhxLmN0aS5ydT4uCgpNb24gSnVuIDE1IDE2OjI5OjAxIDE5OTggIElhbiBMYW5jZSBUYXlsb3IgIDxpYW5AY3lnbnVzLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbiAoc2V0b2Jqcyk6IENvcnJlY3QgcXVvdGluZyBlcnJvciBpbiBjeWd3aW4zMiBjYXNlLgoJRnJvbSBDaHJpcyBGYXlsb3IgPGNnZkBjeWdudXMuY29tPi4KCk1vbiBKdW4gIDEgMTM6NDc6NTUgMTk5OCAgSmFzb24gTW9sZW5kYSAgKGNyYXNoQGJ1Z3NoYWNrLmN5Z251cy5jb20pCgoJKiBvYnN0YWNrLmM6IFVwZGF0ZSB0byBsYXRlc3QgRlNGIHZlcnNpb24uCgpNb24gSnVuICAxIDE0OjE3OjM2IDE5OTggIE1pa2UgU3R1bXAgIDxtcnNAd3JzLmNvbT4KCgkqIE1ha2VmaWxlLmluOiBBZGQgYSBkZXBlbmRlbmN5IG9uIHN0YW1wLXBpY2RpciBmb3IgdGhlCglvYmplY3RzLCBzbyB0aGF0IHdlIGNhbiBkbyBhIHBhcmFsbGVsIGJ1aWxkLgoKU2F0IE1heSAzMCAyMjoxNzoxMyAxOTk4ICBNdW1pdCBLaGFuICA8a2hhbkB4cmF5bGl0aC53aXNjLmVkdT4KCgkqIGNvbmZpZ3VyZS5pbiAoY2hlY2tmdW5jcyk6IEFkZCBtaXNzaW5nICInIi4KCkZyaSBNYXkgMjkgMTI6NDA6NDEgMTk5OCAgSmFzb24gTW9sZW5kYSAgKGNyYXNoQGJ1Z3NoYWNrLmN5Z251cy5jb20pCgoJKiBvYnN0YWNrLmMgKF9vYnN0YWNrX21lbW9yeV91c2VkKTogIEVsaWRlIHRoaXMgZnVuY3Rpb24gaWYgd2UncmUKCW9uIGEgc3lzdGVtIHdpdGggR05VIGxpYmMuCgpUdWUgTWF5IDI2IDE4OjI4OjQzIDE5OTggIElhbiBMYW5jZSBUYXlsb3IgIDxpYW5AY3lnbnVzLmNvbT4KCgkqIE1ha2VmaWxlLmluIChkaXN0Y2xlYW4pOiBSZW1vdmUgY29uZmlnLmxvZy4KClR1ZSBNYXkgMjYgMTU6MDE6NTIgMTk5OCAgQW5kcmVhcyBTY2h3YWIgIDxzY2h3YWJAaXNzYW4uaW5mb3JtYXRpay51bmktZG9ydG11bmQuZGU+CgoJKiBNYWtlZmlsZS5pbiAoZGlzdGNsZWFuKTogRG9uJ3QgcmVtb3ZlIGFsbG9jYS1jb25mLmguCgpGcmkgTWF5IDIyIDAxOjM4OjA3IDE5OTggIEhhbnMtUGV0ZXIgTmlsc3NvbiAgPGhwQGF4aXMuc2U+CgoJKiBjcGx1cy1kZW0uYyAoTUJVRl9TSVpFKTogQnVtcGVkIGZyb20gNTEyIHRvIDMyNzY3LgoKMTk5OC0wNS0yMSAgTWFyayBNaXRjaGVsbCAgPG1taXRjaGVsbEB1c2EubmV0PgoKCSogY3BsdXMtZGVtLmMgKGRvX3R5cGUpOiBIYW5kbGUgdm9sYXRpbGUgcXVhbGlmaWNhdGlvbi4KCjE5OTgtMDUtMjEgIE1hbmZyZWQgSG9sbHN0ZWluICA8bWFuZnJlZEBzLWRpcmVrdG5ldC5kZT4KCgkqIGNvbmZpZ3VyZS5pbjogQ2hlY2sgZm9yIHVuaXN0ZC5oIGFzIHdlbGwuCgkqIGNvbmZpZ3VyZTogUmVidWlsZC4KCSogY29uZmlnLmluOiBSZWJ1aWxkLgoJKiBnZXRwYWdlc2l6ZS5jIChHTlVfT1VSX1BBR0VTSVpFKTogVXNlIHN5c2NvbmYgb25seSBpZiBfU0NfUEFHRVNJWkUKCWlzIGRlZmluZWQgaW4gdW5pc3RkLmguIFJlZm9ybWF0IGNvbmRpdGlvbmFsIGJsb2NrIGZvciBlYXNpZXIgcmVhZGluZy4KCgkqIGNvbmZpZy50YWJsZSAoc2hhcmVkKTogRGVmYXVsdCB0byBubyBpZiAke2VuYWJsZV9zaGFyZWR9CglpcyB1bnNldCBvciBlbXB0eTsgdGhpcyBsb2dpYyBpcyB1c2VkIGJ5IHRoZSB0b3BsZXZlbAoJY29uZmlndXJlIHNjcmlwdHMsIHRvby4KClNhdCBNYXkgMTYgMTQ6MDE6MjYgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogY29uZmlnLnRhYmxlOiBBZGQgbGluZSB0byBzZXQgZW5hYmxlX3NoYXJlZCBpbiB0aGUgTWFrZWZpbGUKCWFzIG5lZWRlZC4KCldlZCBNYXkgMTMgMTQ6MjQ6MzggMTk5OCAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogY3BsdXMtZGVtLmMgKHNxdWFuZ2xlX21vcF91cCk6IENoYW5nZSByZXR1cm4gdHlwZSB0byB2b2lkLgoJKGludGVybmFsX2NwbHVzX2RlbWFuZ2xlKTogUmVtb3ZlIHVudXNlZCBwYXJhbWV0ZXIgYG9wdGlvbnMnLgoJQWxsIGNhbGxlcnMgY2hhbmdlZC4KCShjcGx1c19kZW1hbmdsZV9vcG5hbWUpOiBSZW1vdmUgZnVuY3Rpb24gd2lkZSB2YXJpYWJsZSBgaW50IGknIGFuZAoJcmVwbGFjZSB3aXRoIGBzaXplX3QgaScgYXQgZWFjaCBsb2NhdGlvbiB3aGVyZSBpdCBpcyB1c2VkLgoJKGNwbHVzX21hbmdsZV9vcG5hbWUpOiBjaGFuZ2UgdHlwZSBvZiBgaScgZnJvbSBpbnQgdG8gc2l6ZV90LgoKV2VkIE1heSAxMyAxMzozOTozOCAxOTk4ICBJYW4gTGFuY2UgVGF5bG9yICA8aWFuQGN5Z251cy5jb20+CgoJKiBhbGxvY2EtY29uZi5oOiBJbmNsdWRlIGNvbmZpZy5oLiAgQ2hlY2sgSEFWRV9BTExPQ0FfSCByYXRoZXIKCXRoYW4gc3BhcmMgb3Igc3VuLgoJKiBNYWtlZmlsZS5pbiAoYXJndi5vKTogRGVwZW5kIHVwb24gY29uZmlnLmggYW5kIGFsbG9jYS1jb25mLmguCgpGcmkgTWF5ICA4IDAwOjIzOjUxIDE5OTggIElhbiBMYW5jZSBUYXlsb3IgIDxpYW5AY3lnbnVzLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbjogU2V0IGxpYmliZXJ0eV90b3BkaXIgY29ycmVjdGx5IHdoZW4gc3JjZGlyIGlzCgkiLiIgYW5kIHdpdGhfdGFyZ2V0X3N1YmRpciBpcyBub3Qgc2V0LgoJKiBjb25maWd1cmU6IFJlYnVpbGQuCgpUaHUgTWF5ICA3IDEzOjAxOjQ0IDE5OTggIElhbiBMYW5jZSBUYXlsb3IgIDxpYW5AY3lnbnVzLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbjogQWRkICotKi1taW5ndzMyKiBjYXNlLgoJKiBjb25maWd1cmU6IFJlYnVpbGQuCgpXZWQgTWF5ICA2IDExOjMzOjUxIDE5OTggIElhbiBMYW5jZSBUYXlsb3IgIDxpYW5AY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy50YWJsZTogTmV2ZXIgdXNlIGEgUElDIGZpbGUgZm9yICotKi1jeWd3aW4zMiouCgoJKiBNYWtlZmlsZS5pbiAoY29uZmlnLnN0YXR1cyk6IERlcGVuZCB1cG9uIGNvbmZpZy50YWJsZS4KCgkqIGNvbmZpZ3VyZS5pbjogT24gYSBjeWd3aW4zMiBob3N0LCBhbHdheXMgY29tcGlsZSByYW5kb20sIGFuZAoJZG9uJ3QgdGVzdCBmb3Igc3lzX3NpZ2xpc3QsIHN0cnNpZ25hbCwgb3IgcHNpZ25hbC4KCSogY29uZmlndXJlOiBSZWJ1aWxkLgoKCSogY2xvY2suYzogQ2hlY2sgSEFWRV9TWVNfUEFSQU1fSCByYXRoZXIgdGhhbiBOT19TWVNfUEFSQU1fSC4KCSogZ2V0Y3dkLmM6IExpa2V3aXNlLgoJKiBnZXRwYWdlc2l6ZS5jOiBMaWtld2lzZS4KCSogZ2V0cnVudGltZS5jOiBMaWtld2lzZS4KClR1ZSBNYXkgIDUgMTg6MDg6MzIgMTk5OCAgSWFuIExhbmNlIFRheWxvciAgPGlhbkBjeWdudXMuY29tPgoKCVVzZSBhdXRvY29uZiB0ZXN0cyByYXRoZXIgdGhhbiB0aGUgb2xkIGR1bW15LmMgdGVzdDoKCSogY29uZmlndXJlLmluOiBBZGQgQUNfQVJHX1dJVEggY2FsbHMgZm9yIC0td2l0aC10YXJnZXQtc3ViZGlyIGFuZAoJLS13aXRoLW5ld2xpYi4gIEFkZCBBQ19DT05GSUdfSEVBREVSLiAgVXNlIEFDX1JFUExBQ0VfRlVOQ1MgZm9yCgltb3N0IGZ1bmN0aW9ucy4gIEFkZCBzcGVjaWFsIGNhc2VzIHRvIGhhbmRsZSBuZXdsaWIgYW5kIFZ4V29ya3MuCglSZW1vdmUgdGFyZ2V0X21ha2VmaWxlX2ZyYWcuICBDcmVhdGUgc3RhbXAtaCBpbiBBQ19PVVRQVVQgaWYKCUNPTkZJR19IRUFERVJTIGlzIHNldC4gIE9ubHkgY2FsbCBjb25maWctbWwuaW4gaW4gQUNfT1VUUFVUIGlmCglDT05GSUdfRklMRVMgaXMgc2V0OyBzZXQgYWNfZmlsZSBiZWZvcmUgY2FsbGluZyBpdC4KCSogY29uZmlnLnRhYmxlIChhcm0tKi1yaXNjaXgqLCAqLSotY3lnd2luMzIpOiBSZW1vdmUuCgkoKi0qLWhwdXgqLCAqLSotaGl1eCosICotKi1pcml4NCosICotKi1zb2xhcmlzMiopOiBSZW1vdmUuCgkoKi0qLXN5c3Y0KiwgKi0qLWdvMzIsICotKi12eHdvcmtzNSosICotKi12eHdvcmtzKTogUmVtb3ZlCgkoaVszNDU2XS0qLW1pbmd3MzIqKTogUmVtb3ZlLgoJKiBNYWtlZmlsZS5pbiAoRVJST1JTX0NDLCBDT05GSUdfSCwgTkVFREVEX0xJU1QpOiBSZW1vdmUuCgkoTElCT0JKUyk6IE5ldyB2YXJpYWJsZS4KCShIT1NUX09GSUxFUywgRE9fQUxTTywgU1RBR0VTVFVGRik6IFJlbW92ZS4KCShhbGwpOiBEZXBlbmQgdXBvbiBuZWVkZWQtbGlzdC4gIERvbid0IGNoZWNrIFJVTEUxLgoJKEB0YXJnZXRfbWFrZWZpbGVfZnJhZ0ApOiBSZW1vdmUuCgkoQ09NUElMRS5jKTogSW5jbHVkZSBAREVGU0AuCgkoSEZJTEVTKTogQWRkIGFsbG9jYS1jb25mLmguCgkoUkVRVUlSRURfT0ZJTEVTKTogUmVtb3ZlIGJhc2VuYW1lLm8uCgkoJChUQVJHRVRMSUIpKTogTmV3IHRhcmdldC4KCShzdGFtcC1uZWVkZWQsIGxuZWVkZWQtbGlzdCwgbmVlZGVkLmF3aywgc3RhbXAtY29uZmlnKTogUmVtb3ZlLgoJKGxjb25maWcuaCwgbmVlZGVkMi5hd2ssIGR1bW15Lm8sIGVycm9ycyk6IFJlbW92ZS4KCShuZWVkZWQtbGlzdCwgY29uZmlnLmgpOiBSZXdyaXRlLgoJKFJVTEUxLCAkKFJVTEUxKSwgUlVMRTIsICQoUlVMRTIpKTogUmVtb3ZlLgoJKC5hbHdheXMuKTogUmVtb3ZlLgoJKE1ha2VmaWxlKTogU2V0IENPTkZJR19GSUxFUyBhbmQgQ09ORklHX0hFQURFUlMuCgkoc3RhbXAtaCk6IE5ldyB0YXJnZXQuCgkoYXRleGl0Lm8sIGNsb2NrLm8sIGdldGN3ZC5vLCBnZXRwYWdlc2l6ZS5vKTogTmV3IHRhcmdldHMuCgkoYmFzZW5hbWUubyk6IERvbid0IGRlcGVuZCB1cG9uIGNvbmZpZy5oLgoJKGdldHJ1bnRpbWUubyk6IERlcGVuZCB1cG9uIGNvbmZpZy5oLgoJKiBhdGV4aXQuYzogSW5jbHVkZSBjb25maWcuaC4gIENoZWNrIEhBVkVfT05fRVhJVCByYXRoZXIgdGhhbgoJTkVFRF9vbl9leGl0LgoJKiBiYXNlbmFtZS5jOiBEb24ndCBpbmNsdWRlIGNvbmZpZy5oLiAgRG9uJ3QgY2hlY2sgTkVFRF9iYXNlbmFtZS4KCSogY2xvY2suYzogSW5jbHVkZSBjb25maWcuaC4KCSogZ2V0Y3dkLmM6IExpa2V3aXNlLgoJKiBnZXRwYWdlc2l6ZS5jOiBMaWtld2lzZS4KCSogZ2V0cnVudGltZS5jOiBMaWtld2lzZS4gIEZpeCBjaGVja3Mgd2hpY2ggc2V0IEhBVkVfR0VUUlVTQUdFIGFuZAoJSEFWRV9USU1FUy4KCSogc3RyZXJyb3IuYzogQ2hhbmdlIHVzZXMgb2YgTkVFRF9zeXNfZXJybGlzdCB0bwoJSEFWRV9TWVNfRVJSTElTVC4gIExpa2V3aXNlIGZvciBORUVEX3N0cmVycm9yIGFuZCBIQVZFX1NUUkVSUk9SLgoJKiBzdHJzaWduYWwuYzogTGlrZXdpc2UgZm9yIE5FRURfc3lzX3NpZ2xpc3QgYW5kIEhBVkVfU1lTX1NJR0xJU1QsCglhbmQgZm9yIE5FRURfc3Ryc2lnbmFsIGFuZCBIQVZFX1NUUlNJR05BTCBhbmQgZm9yIE5FRURfcHNpZ25hbCBhbmQKCUhBVkVfUFNJR05BTC4KCSogYWNjb25maWcuaDogTmV3IGZpbGUuCgkqIGR1bW15LmM6IFJlbW92ZS4KCSogZnVuY3Rpb25zLmRlZjogUmVtb3ZlLgoJKiBjb25maWcvbWgtY3h1eDcgKEhERUZJTkVTKTogUmVtb3ZlIC1ESEFWRV9TWVNDT05GLgoJKiBjb25maWcvbWgtd2luZG93cyAoSERFRklORVMpOiBSZW1vdmUuCgkqIGNvbmZpZy9taC1jeWd3aW4zMjogUmVtb3ZlLgoJKiBjb25maWcvbWgtZ28zMjogUmVtb3ZlLgoJKiBjb25maWcvbWgtaXJpeDQ6IFJlbW92ZS4KCSogY29uZmlnL21oLXJpc2NpeDogUmVtb3ZlLgoJKiBjb25maWcvbWgtc3lzdjQ6IFJlbW92ZS4KCSogY29uZmlnL210LW1pbmd3MzI6IFJlbW92ZS4KCSogY29uZmlnL210LXZ4d29ya3M1OiBSZW1vdmUuCgkqIGNvbmZpZy5pbjogTmV3IGZpbGUsIGdlbmVyYXRlZCB1c2luZyBhdXRvaGVhZGVyLgoJKiBjb25maWd1cmU6IFJlYnVpbGQuCgpNb24gTWF5ICA0IDEzOjAwOjI4IDE5OTggIElhbiBMYW5jZSBUYXlsb3IgIDxpYW5AY3lnbnVzLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbjogUmV3cml0ZSB0byB1c2UgYXV0b2NvbmYuCgkqIGNvbmZpZ3VyZTogR2VuZXJhdGUgdXNpbmcgYXV0b2NvbmYuCgkqIGNvbmZpZy9taC1hNjhic2Q6IFJlbW92ZS4KCSogY29uZmlnL21oLWFwb2xsbzY4OiBSZW1vdmUuCgkqIGNvbmZpZy9taC1ocGJzZDogUmVtb3ZlLgoJKiBjb25maWcvbWgtbmNyMzAwMDogUmVtb3ZlLgoJKiBjb25maWcvbWgtc3lzdjogUmVtb3ZlLgoJKiBjb25maWcvbWgtYWl4IChSQU5MSUIsIElOU1RBTEwpOiBEb24ndCBkZWZpbmUuCgkqIGNvbmZpZy9taC1jeHV4NyAoUkFOTElCLCBJTlNUQUxMKTogRG9uJ3QgZGVmaW5lLgoJKiBjb25maWcvbWgtaXJpeDQgKENDLCBSQU5MSUIsIElOU1RBTEwpOiBEb24ndCBkZWZpbmUuCgkqIGNvbmZpZy9taC1zeXN2NCAoUkFOTElCLCBJTlNUQUxMKTogRG9uJ3QgZGVmaW5lLgoJKiBjb25maWcudGFibGU6IENoYW5nZSBjb25maWdfc2hlbGwgdG8gQ09ORklHX1NIRUxMLCBhbmQgdXNlCglsaWJpYmVydHlfdG9wZGlyIHRvIGZpbmQgbW92ZS1pZi1jaGFuZ2UuCiAJKG02OGstYXBvbGxvLWJzZCosIG02OGstYXBvbGxvLXN5c3YqKTogUmVtb3ZlLgoJKGlbMzQ1Nl04Ni1uY3Itc3lzdjQqLCAqLSotZGd1eCosIGhwcGEqLWhwLWJzZCopOiBSZW1vdmUuCgkoKi0qLWlyaXgqLCAqLSotbTg4a2JjcyosICotKi1zeXN2Kik6IFJlbW92ZS4KCSogTWFrZWZpbGUuaW4gKHNyY2Rpcik6IFNldCB0byBAc3JjZGlyQC4KCShWUEFUSCk6IExpa2V3aXNlLgoJKHByZWZpeCwgZXhlY19wcmVmaXgsIGJpbmRpciwgbGliZGlyKTogU2V0IHRvIGF1dG9jb25mIHZhcmlhYmxlcy4KCShTSEVMTCwgSU5TVEFMTCwgSU5TVEFMTF9QUk9HUkFNLCBJTlNUQUxMX0RBVEEpOiBMaWtld2lzZS4KCShDQywgQ0ZMQUdTLCBSQU5MSUIpKTogTGlrZXdpc2UuCgkoZGF0YWRpciwgbWFuKmRpciwgaW5mb2RpciwgaW5jbHVkZWRpciwgTUFLRUlORk8pOiBSZW1vdmUuCgkodGFyZ2V0X21ha2VmaWxlX2ZyYWcsIGhvc3RfbWFrZWZpbGVfZnJhZyk6IEFkZCBzdWJzdGl0dXRpb25zLgoJKElOU1RBTExfREVTVCk6IFNldCB0byBASU5TVEFMTF9ERVNUQC4KCShNYWtlZmlsZSk6IERlcGVuZCB1cG9uIGNvbmZpZy5zdGF0dXMuICBEb24ndCBkZXBlbmQgdXBvbgoJJChob3N0X21ha2VmaWxlX2ZyYWcpIG9yICQodGFyZ2V0X21ha2VmaWxlX2ZyYWcpLgoJKGNvbmZpZy5zdGF0dXMpOiBOZXcgdGFyZ2V0LgoKU3VuIE1heSAgMyAxNzo1ODo0OSAxOTk4ICBJYW4gTGFuY2UgVGF5bG9yICA8aWFuQGN5Z251cy5jb20+CgoJKiBjb25maWcvbXQtc3Vub3M0OiBSZW1vdmUuICBTaG91bGQgYmUgaGFuZGxlZCBieSAtLXdpdGgtaGVhZGVycwoJYW5kIC0td2l0aC1saWJyYXJpZXMgb3B0aW9ucyBhdCB0b3AgbGV2ZWwuCgkqIGNvbmZpZy50YWJsZTogTmV2ZXIgdXNlIG10LXN1bm9zNC4KCgkqIGFsbG9jYS1jb25mLmg6IE5ldyBmaWxlLCBjb21iaW5pbmcgYWxsb2NhLW5vcm0uaCBhbmQKCWFsbG9jYS1ib3RjaC5oLgoJKiBhbGxvY2Etbm9ybS5oOiBSZW1vdmUuCgkqIGFsbG9jYS1ib3RjaC5oOiBSZW1vdmUuCgkqIGNvbmZpZ3VyZS5pbjogU2V0IHNoZWxsIHZhcmlhYmxlcyBmaWxlcyBhbmQgbGlua3MgdG8gZW1wdHkuCgkqIGNvbmZpZy50YWJsZTogRG9uJ3Qgc2V0IHNoZWxsIHZhcmlhYmxlIGZpbGVzLgoJKiBjb25maWd1cmUuYmF0OiBEb24ndCBjcmVhdGUgYWxsb2NhLWNvbmYuaC4KCSogbWFrZWZpbGUudm1zOiBMaWtld2lzZS4KCSogbXB3LWNvbmZpZy5pbjogTGlrZXdpc2UuCgkqIHZtc2J1aWxkLmNvbTogTGlrZXdpc2UuCgpGcmkgTWF5ICAxIDExOjQxOjQyIDE5OTggIElhbiBMYW5jZSBUYXlsb3IgIDxpYW5AY3lnbnVzLmNvbT4KCgkqIE1ha2VmaWxlLmluICgkKEhPU1RfT0ZJTEVTKSAkKFJFUVVJUkVEX09GSUxFUykpOiBSZW1vdmUgb2xkCgl0YXJnZXQgZGVwZW5kaW5nIHVwb24gY29uZmlnLmguCgkoYWxsb2NhLm8pOiBBZGQgdGFyZ2V0IGRlcGVuZGluZyB1cG9uIGNvbmZpZy5oCgkoYmFzZW5hbWUubywgY2hvb3NlLXRlbXAubywgZm5tYXRjaC5vKTogTGlrZXdpc2UuCgkoZ2V0b3B0Lm8sIGdldG9wdDEubywgcGV4ZWN1dGUubywgc3RyZXJyb3Iubyk6IExpa2V3aXNlLgoJKHN0cnNpZ25hbC5vLCB4c3RyZXJyb3Iubyk6IExpa2V3aXNlLgoKRnJpIE1heSAgMSAwNDoyNjoyNSAxOTk4ICBQZXRlciBTY2hhdWVyIDxwZXNAcmVnZW50LmUtdGVjaG5pay50dS1tdWVuY2hlbi5kZT4KCgkqIGNwbHVzLWRlbS5jIChjcGx1c19kZW1hbmdsZV9vcG5hbWUpOiAgSW5pdGlhbGl6ZSB3b3JrLgoKTW9uIEFwciAyNyAxNTo1MzozMCBFRFQgMTk5OCBBbmRyZXcgTWFjTGVvZCA8YW1hY2xlb2RAY3lnbnVzLmNvbT4KCgkqIGNwbHVzLWRlbS5jIChkZW1hbmdsZV9xdWFsaWZpZWQpOiBSZXBsYWNlIG1pc3NpbmcgZWxzZS4KClN1biBBcHIgMjYgMTU6Mzg6NTAgMTk5OCAgQW5kcmVhcyBTY2h3YWIgIDxzY2h3YWJAaXNzYW4uaW5mb3JtYXRpay51bmktZG9ydG11bmQuZGU+CgoJKiBjcGx1cy1kZW0uYyAoZ251X3NwZWNpYWwpOiBGaXggb2ZmLWJ5LW9uZSBidWcgd2hlbiBjaGVja2luZyB0aGUKCWxlbmd0aCBpbiB0aGUgbmFtZSBvZiBhIHZpcnR1YWwgdGFibGUuCgpXZWQgQXByIDIyIDEwOjUzOjQ5IEVEVCAxOTk4IEFuZHJldyBNYWNMZW9kICA8YW1hY2xlb2RAY3lnbnVzLmNvbT4KCgkqIGNwbHVzLWRlbS5jIChzdHJ1Y3Qgd29yayBzdHVmZik6IEFkZCBmaWVsZCBmb3IgQiBhbmQgSyBtYW5nbGUgY29kZXMuCgkoY3BsdXNfZGVtYW5nbGVfb3BuYW1lKTogQ2FsbCBtb3BfdXBfc3F1YW5nbGUuCgkoY3BsdXNfZGVtYW5nbGUpOiBJbml0aWFsaXplIHNxdWFuZ2xlIGluZm8sIHRoZW4gY2FsbAoJaW50ZXJuYWxfY3BsdXNfZGVtYW5nbGUuIChNb3N0IGNvZGUgbW92ZWQgdGhlcmUgYXMgd2VsbCkKCShpbnRlcm5hbF9jcGx1c19kZW1hbmdsZSk6IE5ldyBmdW5jdGlvbiwgcGVyZm9ybXMgbW9zdCBvZiB3aGF0IHVzZQoJdG8gYmUgZG9uZSBpbiBjcGx1c19kZW1hbmdsZSwgYnV0IGlzIG9ubHkgY2FsbGVkIHdpdGggdGhpcyBmaWxlLgoJKHNxdWFuZ2xlX21vcF91cCk6IE5ldyBmdW5jdGlvbiB0byBjbGVhbiB1cCBCIGFuZCBLIGNvZGUgZGF0YS4KCShtb3BfdXApOiBzZXQgcG9pbnRlcnMgdG8gTlVMTCBhZnRlciBmcmVlaW5nLgoJKGRlbWFuZ2xlX3NpZ25hdHVyZSwgZGVtYW5nbGVfdGVtcGxhdGUsIGRlbWFuZ2xlX2NsYXNzKTogQWRkCglzd2l0Y2ggZWxlbWVudHMgdG8gaGFuZGxlIEsgYW5kIEIgY29kZXMuCgkoZGVtYW5nbGVfcHJlZml4LCBnbnVfc3BlY2lhbCwgZGVtYW5nbGVfcXVhbGlmaWVkKTogQWRkCgljb2RlIHRvIGhhbmRsZSBLIGFuZCBCIGNvZGVzLgoJKGRvX3R5cGUsIGRlbWFuZ2xlX2Z1bmRfdHlwZSk6IEhhbmRsZSBCIGFuZCBLIGNvZGVzLgoJKHJlbWVtYmVyX0t0eXBlKTogTmV3IGZ1bmN0aW9uIHRvIHN0b3JlIEsgaW5mby4KCShyZWdpc3Rlcl9CdHlwZSwgcmVtZW1iZXJfQnR5cGUpOiBOZXcgZnVuY3Rpb25zIGZvciBCIGNvZGVzLgoJKGZvcmdldF9CX2FuZF9LX3R5cGVzKTogTmV3IGZ1bmN0aW9uIHRvIGRlc3Ryb3kgQiBhbmQgSyBpbmZvLgoKRnJpIEFwciAxMCAwMTo0OToxMCAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBDT1BZSU5HLkxJQiwgY2hvb3NlLXRlbXAuYywgY3BsdXMtZGVtLmM6IFN5bmMgd2l0aCBlZ2NzICYgZ2NjLgoKVGh1IE1hciAgNSAwOToyMzoyOCAxOTk4ICBNYW5mcmVkIEhvbGxzdGVpbiAgPG1hbmZyZWRAcy1kaXJla3RuZXQuZGU+CgoJKiBjb25maWcudGFibGU6IE1ha2UgbG9jYXRpbmcgZnJhZyBmaWxlcyBmYWlsc2FmZSBldmVuIGZvciB0aGUKCXNwZWNpYWwgY2FzZSBpZiBjb25maWd1cmluZyBhbmQgYnVpbGRpbmcgaW4gc3JjZGlyLgoKTW9uIEZlYiAyMyAxNDozMzoxNSAxOTk4ICBJYW4gTGFuY2UgVGF5bG9yICA8aWFuQGN5Z251cy5jb20+CgoJKiBjaG9vc2UtdGVtcC5jOiBGaXggaGFuZGxpbmcgb2Ygc3lzL2ZpbGUuaCB0byB3b3JrIGluIGxpYmliZXJ0eS4KClN1biBGZWIgMjIgMTg6MDM6MjMgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogY2hvb3NlLXRlbXAuYzogU3luYyB3aXRoIGNvcHkgaW4gZ2NjLgoKVGh1IEZlYiAxMiAxNjoyOTo0OSAxOTk4ICBJYW4gTGFuY2UgVGF5bG9yICA8aWFuQGN5Z251cy5jb20+CgoJKiBnZXRvcHQuYzogVXBkYXRlIHRvIGxhdGVzdCBGU0YgdmVyc2lvbi4KCSogZ2V0b3B0MS5jOiBMaWtld2lzZS4KClR1ZSBGZWIgMTAgMTY6NTg6MzMgMTk5OCAgU3RhbiBTaGVicyAgPHNoZWJzQGFuZHJvcy5jeWdudXMuY29tPgoKCSogY3BsdXMtZGVtLmMgKGdudV9zcGVjaWFsKTogRG9uJ3QgZ2V0IGNvbmZ1c2VkIGJ5IC48ZGlnaXRzPgoJc3RyaW5ncyB0aGF0IGFyZSBub3QgYWN0dWFsbHkgbGVuZ3Rocy4KCkZyaSBGZWIgIDYgMDE6MzU6MTcgMTk5OCAgTWFuZnJlZCBIb2xsc3RlaW4gIDxtYW5mcmVkQHMtZGlyZWt0bmV0LmRlPgoKCSogTWFrZWZpbGUuaW4gKEZMQUdTX1RPX1BBU1MpOiBEb24ndCBwYXNzIFBJQ0ZMQUcuCgkoLmMubyk6IENoZWNrIHZhbHVlIG9mIGVuYWJsZV9zaGFyZWQsIG5vdCBQSUNGTEFHLgoJKHN0YW1wLXBpY2Rpcik6IERpdG8uCgpUaHUgRmViICA1IDE4OjQ4OjU2IDE5OTggIEdlb2ZmcmV5IE5vZXIgIDxub2VyQGN5Z251cy5jb20+CgoJKiBjb25maWcvbWgtY3lnd2luMzI6IHJlbW92ZSB2YXNwcmludGYubyBmcm9tIEVYVFJBX09GSUxFUwoJc2luY2UgaXQgZ2V0cyBidWlsdCBhdXRvbWF0aWNhbGx5CgpTdW4gRmViICAxIDAyOjUyOjMyIDE5OTggIE1pa2UgU3R1bXAgIDxtcnNAd3JzLmNvbT4KCgkqIGNvbmZpZy50YWJsZSAodnh3b3JrcyBjb25maWdzKTogRGVmYXVsdCB0byBWeFdvcmtzIDUueCwgYXMgdGhhdCBpcwoJdGhlIGN1cnJlbnRseSBzaGlwcGluZyBPUy4KClR1ZSBKYW4gMjcgMTY6MDg6MjAgMTk5OCAgUGF0IFJhbmtpbiAgPHJhbmtpbkBlcWwuY2FsdGVjaC5lZHU+CgoJKiB2bXNidWlsZC5jb20gW1JFUVVJUkVfT0ZJTEVTXTogU3luY2hyb25pemVkIHdpdGggTWFrZWZpbGUuaW46CglBZGQgZm5tYXRjaC5vIGFuZCBvYmphbGxvYy5vOyByZW1vdmUgdmFzcHJpbnRmLm8uCglbY29uZmlnLmhdOiBEZWZpbmUgTkVFRF9zdHJzaWduYWwuCgpNb24gSmFuIDE5IDEyOjIwOjAxIDE5OTggIElhbiBMYW5jZSBUYXlsb3IgIDxpYW5AY3lnbnVzLmNvbT4KCgkqIGZ1bmN0aW9ucy5kZWY6IENvcnJlY3QgYXJndW1lbnQgdHlwZXMgZm9yIHN0cmVycm9yIGFuZAoJc3Ryc2lnbmFsLiAgUmVwb3J0ZWQgYnkgQWxleCBHdXRtYW4gPGFndXRtYW5AZW1jLmNvbT4uCgpTdW4gSmFuIDE4IDE1OjU3OjI4IDE5OTggIE1pY2hhZWwgU255ZGVyICA8bXNueWRlckBjbGVhdmVyLmN5Z251cy5jb20+CgoJKiB2YXNwcmludGYuYyAoaW50X3Zhc3ByaW50Zik6IEluY3JlYXNlIGJ1ZmZlciBzaXplIGZvciBmbG9hdC9kb3VibGUKCXZhbHVlcy4KClNhdCBKYW4gMTcgMjI6Mjg6MzggMTk5OCAgTXVtaXQgS2hhbiAgPGtoYW5AeHJheWxpdGgud2lzYy5lZHU+CgkJCSAgSi5KLiBWYW5kZXJIZWlqZGVuIDxKLkoudmFuZGVySGVpamRlbkBzdHVkZW50LnV0d2VudGUubmw+CgoJQWRkIG1pbmd3MzIgc3VwcG9ydC4KCSogcGV4ZWN1dGUuYyAocGV4ZWN1dGUpOiBOZXcgZnVuY3Rpb24gZm9yIG1pbmd3MzIuIFN1cHBvcnRzIHBpcGVzLgoJKHB3YWl0KTogTmV3IGZ1bmN0aW9uIGZvciBtaW5ndzMyLgoKCSogY29uZmlnLnRhYmxlIChpWzM0NTZdODYtKi1taW5ndzMyKik6IFN1cHBvcnQgZm9yIGkzODYtbWluZ3czMi4KCSogY29uZmlnL210LW1pbmd3MzI6IE5ldyBmaWxlLgoJKiB4bWFsbG9jLmMgKGZpcnN0X2JyZWFrKTogTm90IHVzZWQgZm9yIG1pbmd3MzIuCgkoeG1hbGxvY19zZXRfcHJvZ3JhbV9uYW1lKTogRG9uJ3QgdXNlIHNicmsgb24gbWluZ3czMi4KCSh4bWFsbG9jKTogTGlrZXdpc2UuCgkoeHJlYWxsb2MpOiBMaWtld2lzZS4KClNhdCBKYW4gMTcgMjI6Mjg6MDUgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogY2hvb3NlLXRlbXAuYzogU3luYyB3aXRoIGdjYyB2ZXJzaW9uLgoKVHVlIEphbiAxMyAxODozNDozOSAxOTk4ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CgoJKiBNYWtlZmlsZS5pbiAoaW5zdGFsbF90b19saWJkaXIsIGluc3RhbGxfdG9fdG9vbGRpcik6IEFkZCBNVUxUSVNVQkRJUgoJdG8gYWxsIGZpbGVuYW1lcyBpbiBsaWJkaXIgYW5kIHRvb2xkaXIuCgkoZGlzdGNsZWFuKTogRG8gTVVMVElDTEVBTiBiZWZvcmUgZGVsZXRpbmcgTWFrZWZpbGUuCgkoc3RhbXAtbmVlZGVkLCBzdGFtcC1jb25maWcpOiBBZGQgTVVMVElTUkNUT1AgdG8KCXBhdGhuYW1lIGZvciBtb3ZlLWlmLWNoYW5nZS4KClRodSBEZWMgIDQgMTc6MjU6MTkgMTk5NyAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogc3Ryc2lnbmFsLmMgKHN5c19uc2lnKTogVHJ5IE5TSUcgYW5kIF9OU0lHLgoKV2VkIE5vdiAxOSAxMzozNzowNiAxOTk3ICBNaWNoYWVsIE1laXNzbmVyICA8bWVpc3NuZXJAY3lnbnVzLmNvbT4KCgkqIGFsbG9jYS1ub3JtLmggKGFsbG9jYSwgR0NDIGNhc2UpOiBEb24ndCByZWRlZmluZSBhbGxvY2EgaWYgaXQKCXdhcyBhbHJlYWR5IGRlZmluZWQgcHJldmlvdXNseS4KCk1vbiBOb3YgMTAgMTI6NDg6MDMgMTk5NyAgUGhpbGlwcGUgRGUgTXV5dGVyICA8cGhkbUBtYWNxZWwuYmU+CgoJKiBNYWtlZmlsZS5pbiAoSU5TVEFMTCk6IFVzZSAuLi9pbnN0YWxsLXNoLCBub3QgaW5zdGFsbC4KClR1ZSBPY3QgMjggMjM6NDE6MTUgMTk5NyAgSnVkeSBHb2xkYmVyZyAgPGpvZHlnQGlkdC5uZXQ+CgoJKiBNYWtlZmlsZS5pbiAoQ0ZJTEVTKTogQWRkIHBleGVjdXRlLmMuCgpXZWQgT2N0IDE1IDE5OjEzOjQ4IDE5OTcgIElhbiBMYW5jZSBUYXlsb3IgIDxpYW5AY3lnbnVzLmNvbT4KCgkqIGFzcHJpbnRmLmM6IENvbnNpc3RlbnRseSB1c2UgZWl0aGVyIHN0ZGFyZyBvciB2YXJhcmdzLgoKVHVlIE9jdCAxNCAxMjowMTowMCAxOTk3ICBNYXJrIE1pdGNoZWxsICA8bW1pdGNoZWxsQHVzYS5uZXQ+CgoJKiBjcGx1cy1kZW0uYyAoZGVtYW5nbGVfc2lnbmF0dXJlKTogRG9uJ3QgbG9vayBmb3IgcmV0dXJuIHR5cGVzIG9uCgljb25zdHJ1Y3RvcnMuICBIYW5kbGUgbWVtYmVyIHRlbXBsYXRlIGNvbnN0cnVjdG9ycy4KCkZyaSBPY3QgIDMgMTc6NTM6MzAgMTk5NyAgSWFuIExhbmNlIFRheWxvciAgPGlhbkBjeWdudXMuY29tPgoKCSogUkVBRE1FOiBGaXggY29uZmlndXJhdGlvbiBpbnN0cnVjdGlvbnMuCgpNb24gU2VwIDI5IDEyOjI4OjQxIDE5OTcgIElhbiBMYW5jZSBUYXlsb3IgIDxpYW5AY3lnbnVzLmNvbT4KCgkqIHBleGVjdXRlLmM6IFVwZGF0ZSB0byBjdXJyZW50IHZlcnNpb24gZnJvbSAvZ2QvZ251L2xpYjoKCglNb24gU2VwIDI5IDEyOjI3OjU5IDE5OTcgIElhbiBMYW5jZSBUYXlsb3IgIDxpYW5AY3lnbnVzLmNvbT4KCgkqIHBleGVjdXRlLmM6IFVzZSBzcGF3biBpZiBfX0NZR1dJTjMyX18uCgoJMTk5Ny0wOC0wOCAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+CgoJKiBwZXhlY3V0ZS5jOiBJbmNsdWRlICJjb25maWcuaCIgZmlyc3QsIGFzIHBlciBhdXRvY29uZiBtYW51YWwuCgoJRnJpIEp1biAyNyAxNToyMDoyOSAxOTk3ICBTY290dCBDaHJpc3RsZXkgPHNjb3R0Y0BuZXQtY29tbXVuaXR5LmNvbT4KCgkqIHBleGVjdXRlLmMgKGZpeF9hcmd2KTogTmV3IGZ1bmN0aW9uLgoJKHBleGVjdXRlKTogV2luMzIgYnV0IG5vdCBDeWd3aW4zMiBuZWVkcyBpdHMgYXJndW1lbnRzIGZpeGVkLgoJQWRkIHVuZGVyc2NvcmUgdG8gY3dhaXQgZnVuY3Rpb24gY2FsbC4KClN1biBTZXAgMjggMTI6MDA6NTIgMTk5NyAgTWFyayBNaXRjaGVsbCAgPG1taXRjaGVsbEB1c2EubmV0PgoKCSogY3BsdXMtZGVtLmMgKGRlbWFuZ2xlX3RlbXBsYXRlKTogQWRkIG5ldyBwYXJhbWV0ZXIuICBIYW5kbGUgbmV3Cgl0ZW1wbGF0ZS1mdW5jdGlvbiBtYW5nbGluZy4KCShjb25zdW1lX2NvdW50X3dpdGhfdW5kZXJzY29yZXMpOiBOZXcgZnVuY3Rpb24uCgkoZGVtYW5nbGVfc2lnbmF0dXJlKTogSGFuZGxlIG5ldyBuYW1lLW1hbmdsaW5nIHNjaGVtZS4KCldlZCBTZXAgMjQgMDA6MzE6NTkgMTk5NyAgRmVsaXggTGVlICA8ZmxlZUB5aW4uY3lnbnVzLmNvbT4KCgkqIGFzcHJpbnRmLmM6IHN0ZGFyZy5oIHdoZW4gQUxNT1NUX1NUREMKCSogY29uZmlnL21oLXdpbmRvd3MgKEVYVFJBX09GSUxFUyk6IGFkZCBhc3ByaW50Zi5vIGFuZAogCXN0cm5jYXNlY21wLm8uCgpUaHUgQXVnIDI4IDE0OjI3OjE1IDE5OTcgIEFuZHJldyBDYWduZXkgIDxjYWduZXlAYjEuY3lnbnVzLmNvbT4KCgkqIHZhc3ByaW50Zi5jICh2YXNwcmludGYpOiBBbGxvdyBmb3IgX0JTRF9WQV9MSVNUXy4KCgkqIGNvbmZpZy50YWJsZTogQWRkIGNhc2UgZm9yIEZyZWVCU0QgMi4xIGFuZCAyLjIsIG5lZWRzIG1oLWZic2QyMS4KCgkqIGNvbmZpZy9taC1mYnNkMjEgKEVYVFJBX09GSUxFUyk6IEZvcmNlIHZhc3ByaW50Zi5vCgpXZWQgU2VwIDEwIDEyOjQzOjEwIDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGNwbHVzLWRlbS5jIChkZW1hbmdsZV9mdW5kX3R5cGUpOiBDaGFuZ2UgImNvbXBsZXgiIHRvICJfX2NvbXBsZXgiLgoKRnJpIFNlcCAgNSAxNjozNDo0MiAxOTk3ICBBbmRyZXcgQ2FnbmV5ICA8Y2FnbmV5QGIxLmN5Z251cy5jb20+CgoJKiBhc3ByaW50Zi5jIChhc3ByaW50Zik6IE5ldyBmaWxlLgoJKiBNYWtlZmlsZS5pbiAoQ0ZJTEVTKTogQWRkIGFzcHJpbnRmLmMKCSogZnVuY3Rpb25zLmRlZjogRGl0dG8uCgpUaHUgQXVnIDI4IDE4OjUzOjM0IDE5OTcgIEFuZHJldyBDYWduZXkgIDxjYWduZXlAYjEuY3lnbnVzLmNvbT4KCgkqIGFyZ3YuYyAoZHVwYXJndik6IE5ldyBmdW5jdGlvbiwgZHVwbGljYXRlIGFuIGFyZ3VtZW50IHZlY3Rvci4KClR1ZSBBdWcgMTkgMjA6Mjg6NDUgMTk5NyAgR2VvZmZyZXkgTm9lciAgPG5vZXJAY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy9taC1jeWd3aW4zMjogYWxzbyBidWlsZCByYW5kb20ubwoKVHVlIEF1ZyAxOSAxNzoxMDo1NiAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjcGx1cy1kZW0uYzogQWRkICdleHRlcm4nIHRvIHByZXBlbmRzX3VuZGVyc2NvcmUuCgpXZWQgSnVsIDMwIDExOjQyOjE5IDE5OTcgIFBlciBCb3RobmVyICA8Ym90aG5lckBjeWdudXMuY29tPgoKCSogY3BsdXMtZGVtLmM6IFZhcmlvdXMgY2hhbmdlcyB0byBwcm9kdWNlIEphdmEgb3V0cHV0IHdoZW4gcGFzc2VkCglETUdMX0pBVkEuICBUaHVzICI6OiIgYmVjb21lcyAiLiIgYW5kICJKQXJyYXk8Rm9vPiIgYmVjb21lcyAiRm9vW10iLgoJKG1haW4pOiBTdXBwb3J0IC0tamF2YSBhbmQgLWogZmxhZ3MgdG8gc2V0IERNR0xfSkFWQS4KClR1ZSBKdWwgMjIgMTk6MDU6MjMgMTk5NyAgUm9iZXJ0IEhvZWhuZSA8cm9iZXJ0LmhvZWhuZUBNYXRoZW1hdGlrLlRVLUNoZW1uaXR6LkRFPgoKCSogY29uZmlnL21oLWdvMzIgKENDLCBBUiwgUkFOTElCKTogRG9uJ3QgZGVmaW5lLgoKVHVlIEp1bCAyMiAxNzo0OTo1NCAxOTk3ICBJYW4gTGFuY2UgVGF5bG9yICA8aWFuQGN5Z251cy5jb20+CgoJKiBNYWtlZmlsZS5pbiAoUkVRVUlSRURfT0ZJTEVTKTogQWRkIHBleGVjdXRlLm8uCgkocGV4ZWN1dGUubyk6IE5ldyB0YXJnZXQuCgoJKiBNYWtlZmlsZS5pbiAoc3RhbXAtbmVlZGVkKTogTmV3IHRhcmdldCwgcmVwbGFjaW5nIG5lZWRlZC1saXN0LgoJKG5lZWRlZC1saXN0KTogSnVzdCBkZXBlbmQgdXBvbiBzdGFtcC1uZWVkZWQuCgkoc3RhbXAtY29uZmlnKTogTmV3IHRhcmdldCwgcmVwbGFjaW5nIGNvbmZpZy5oLgoJKGNvbmZpZy5oKTogSnVzdCBkZXBlbmQgdXBvbiBzdGFtcC1jb25maWcuCgkobW9zdGx5Y2xlYW4pOiBSZW1vdmUgc3RhbXAtKi4KClRodSBKdW4gMTIgMTE6MDA6MTggMTk5NyAgQW5nZWxhIE1hcmllIFRob21hcyAoYW5nZWxhQGN5Z251cy5jb20pCgoJKiBNYWtlZmlsZS5pbiAoRkxBR1NfVE9fUEFTUyk6IHBhc3MgSU5TVEFMTCwgSU5TVEFMTF9QUk9HUkFNIGFuZAoJSU5TVEFMTF9EQVRBIGZvciBtdWx0aWxpYmJlZCBpbnN0YWxscwoKVHVlIEp1biAgMyAxMzoyMTowNSAxOTk3ICBEb3VnIEV2YW5zICA8ZGplQGNhbnVjay5jeWdudXMuY29tPgoKCVR1ZSBEZWMgMTAgMDk6NDQ6NTcgMTk5NiAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+CgoJKiBjaG9vc2UtdGVtcC5jIChjaG9vc2VfdGVtcF9iYXNlKTogRG9uJ3QgZHVtcCBjb3JlIGlmIFRNUERJUiBpcyBlbXB0eS4KCgkqIGNob29zZS10ZW1wLmMgKHRyeSk6IEluc2lzdCB0aGF0IHRlbXAgZGlyIGJlIHNlYXJjaGFibGUuCgoJV2VkIE9jdCAyMyAxNzozNjozOSAxOTk2ICBEb3VnIFJ1cHAgIChydXBwQGduYXQuY29tKQoKCSogY2hvb3NlLXRlbXAuYyAoY2hvb3NlX3RlbXBfYmFzZSk6IE9uIFZNUywgdXNlIHByb3BlciBzeW50YXgKCWZvciBjdXJyZW50IGRpcmVjdG9yeS4KCglTYXQgRmViIDE1IDE5OjAzOjQ4IDE5OTcgIEdlb2ZmcmV5IE5vZXIgIChub2VyQGN5Z251cy5jb20pCgoJKiBwZXhlY3V0ZS5jOiBSZW1vdmUgc3BlY2lhbCBjYXNlcyBmb3IgY3lnd2luMzIuCgkocHdhaXQpOiBSZW1vdmUgbG9jYWwgZGVmaW5pdGlvbiBvZiBgcGlkJy4KCglUdWUgTm92IDEyIDE4OjI2OjE1IDE5OTYgIERvdWcgUnVwcCAgKHJ1cHBAZ25hdC5jb20pCgoJKiBwZXhlY3V0ZS5jICh2Zm9yayk6IFN1cHBseSBuZXcgZGVmaW5pdGlvbiBmb3IgVk1TLgoJKHB3YWl0KTogVXNlIHdhaXRwaWQgaW5zdGVhZCBvZiB3YWl0IGZvciBWTVMuCgpUdWUgTWF5IDIwIDE0OjAyOjIwIDE5OTcgIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGxpc2EuY3lnbnVzLmNvbT4KCgkqIGNwbHVzLWRlbS5jIChkb190eXBlKTogSGFuZGxlIGBKJy4KCShkZW1hbmdsZV9mdW5kX3R5cGUpOiBQcmludCAiY29tcGxleCIgZm9yIGl0LgoKV2VkIEFwciAzMCAxMjoxNTo0NSAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjb25maWd1cmUuaW46IERvbid0IHR1cm4gb24gbXVsdGlsaWIgaGVyZS4KCk1vbiBBcHIgMjggMTk6MDQ6MzEgMTk5NyAgTWljaGFlbCBTbnlkZXIgIDxtc255ZGVyQGNsZWF2ZXIuY3lnbnVzLmNvbT4KCgkqIG9ic3RhY2suYzogbW92ZSBfb2JzdGFja19tZW1vcnlfdXNlZCBvdXRzaWRlIG9mIGlmZGVmLiAgQ2Fubm90IGJlCgllbGlkZWQ7IG5lZWRlZCBieSBnZGIgYW5kIG5vdCBwcmVzZW50IGluIGxpYmMuCgpUaHUgQXByIDI0IDE5OjMzOjQ3IDE5OTcgIElhbiBMYW5jZSBUYXlsb3IgIDxpYW5AY3lnbnVzLmNvbT4KCgkqIE1ha2VmaWxlLmluIChjbGVhbik6IFJlbW92ZSB0bXBtdWx0aS5vdXQuCgpUdWUgQXByIDIyIDEwOjI1OjE1IDE5OTcgIEZyZWQgRmlzaCAgPGZuZkBjeWdudXMuY29tPgoKCSogZmxvYXRmb3JtYXQuYyAoZmxvYXRmb3JtYXRfaWVlZV9kb3VibGVfbGl0dGxlYnl0ZV9iaWd3b3JkKToKCUFkZCBuZXcgZmxvYXRmb3JtYXQsIG1haW5seSBmb3IgQVJNIGRvdWJsZXMuCgpNb24gQXByIDE0IDEyOjExOjE2IDE5OTcgIElhbiBMYW5jZSBUYXlsb3IgIDxpYW5AY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy50YWJsZTogVXNlICR7Y29uZmlnX3NoZWxsfSB3aXRoICR7bW92ZWlmY2hhbmdlfS4gIEZyb20KCVRob21hcyBHcmFpY2hlbiA8Z3JhaWNoZW5AcnpwZC5kZT4uCgpGcmkgQXByICA0IDAzOjA5OjI0IDE5OTcgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBjeWdudXMuY29tPgoKCSogY29uZmlndXJlLmluOiBFbmFibGUgbXVsdGlsaWJpbmcgYnkgZGVmYXVsdC4KCVVwZGF0ZSBtdWx0aWxpYiB0ZW1wbGF0ZSB0byByZWFkIGNvbmZpZy1tbC5pbi4KClR1ZSBBcHIgIDEgMTY6MjY6MzkgMTk5NyAgS2xhdXMgS2FlbXBmICA8a2thZW1wZkBwcm9naXMuZGU+CgoJKiBtYWtlZmlsZS52bXM6IEFkZCBvYmphbGxvYy4KCk1vbiBNYXIgMzEgMjM6NTc6NTEgMTk5NyAgSC5KLiBMdSAgPGhqbEBnbnUuYWkubWl0LmVkdT4KCgkqIGNwbHVzLWRlbS5jIChkZW1hbmdsZV9pdCk6IEFkZCBwcm90b3R5cGUgZGVjbGFyYXRpb24uCgkodXNhZ2UsIGZhdGFsKTogTGlrZXdpc2UuCgoJKiB4ZXhpdC5jIChfeGV4aXRfY2xlYW51cCk6IEFkZCBwcm90b3R5cGUuCgoJKiBzdHJlcnJvci5jIChpbml0X2Vycm9yX3RhYmxlcyk6IERlY2xhcmUuCgpGcmkgTWFyIDI4IDExOjQzOjIwIDE5OTcgIEguSi4gTHUgIDxoamxAbHVjb24ub3JnPgoKCSogZnVuY3Rpb25zLmRlZjogQWRkIERFRiBvZiB2YXNwcmludGYsIGFuZCBERUZGVU5DIG9mIHN0cnNpZ25hbC4KCSogc3Ryc2lnbmFsLmM6IE9ubHkgZGVmaW5lIHN0cnNpZ25hbCBpZiBORUVEX3N0cnNpZ25hbC4KCSogTWFrZWZpbGUuaW4gKFJFUVVJUkVEX09GSUxFUyk6IFJlbW92ZSB2YXNwcmludGYuby4KCSogY29uZmlndXJlLmluOiBBZGQgTkVFRF9zdHJzaWduYWwgdG8geGNvbmZpZy5oLiAgQWRkIHZhc3ByaW50Zi5vCgl0byB4bmVlZGVkLWxpc3QuCgkqIGNvbmZpZy9taC1jeWd3aW4zMiAoSERFRklORVMpOiBBZGQgLURORUVEX3N0cnNpZ25hbC4KCShFWFRSQV9PRklMRVMpOiBEZWZpbmUgdG8gdmFzcHJpbnRmLm8uCgkqIGNvbmZpZy9taC13aW5kb3dzIChIREVGSU5FUyk6IEFkZCAtRE5FRURfc3Ryc2lnbmFsLgoJKEVYVFJBX09GSUxFUyk6IEFkZCB2YXNwcmludGYuby4KCSogY29uZmlnL210LXZ4d29ya3M1ICh2eGNvbmZpZy5oKTogRGVmaW5lIE5FRURfc3Ryc2lnbmFsLgoJKHZ4bmVlZGVkLWxpc3QpOiBBZGQgdmFzcHJpbnRmLm8uCgpUaHUgTWFyIDIwIDE3OjAyOjA5IDE5OTcgIElhbiBMYW5jZSBUYXlsb3IgIDxpYW5AY3lnbnVzLmNvbT4KCgkqIG9iamFsbG9jLmM6IEluY2x1ZGUgPHN0ZGlvLmg+LgoKTW9uIE1hciAxNyAxOToyMzoxMSAxOTk3ICBJYW4gTGFuY2UgVGF5bG9yICA8aWFuQGN5Z251cy5jb20+CgoJKiBvYmphbGxvYy5jOiBOZXcgZmlsZS4KCSogTWFrZWZpbGUuaW4gKENGSUxFUyk6IEFkZCBvYmphbGxvYy5jCgkoUkVRVUlSRURfT0ZJTEVTKTogQWRkIG9iamFsbG9jLm8uCgkob2JqYWxsb2Mubyk6IE5ldyB0YXJnZXQuCgpTYXQgTWFyIDE1IDE4OjQ5OjQxIDE5OTcgIElhbiBMYW5jZSBUYXlsb3IgIDxpYW5AY3lnbnVzLmNvbT4KCgkqIG9ic3RhY2suYzogVXBkYXRlIHRvIGN1cnJlbnQgRlNGIHZlcnNpb24uCgpGcmkgTWFyIDE0IDE0OjE4OjQ3IDE5OTcgIElhbiBMYW5jZSBUYXlsb3IgIDxpYW5AY3lnbnVzLmNvbT4KCgkqIGNwbHVzLWRlbS5jOiBBZGQgcHJvdG90eXBlcyBmb3IgYWxsIHN0YXRpYyBmdW5jdGlvbnMuCgkobXlzdHJzdHIpOiBNYWtlIHN0YXRpYy4gIE1ha2UgYXJndW1lbnRzIGFuZCByZXN1bHQgY29uc3QuCgkoY3BsdXNfbWF0Y2gpOiBSZW1vdmU7IG5vdCB1c2VkLgoKVHVlIE1hciAxMSAxNDoyMDozMSAxOTk3ICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBsaXNhLmN5Z251cy5jb20+CgoJKiBjcGx1cy1kZW0uYyAoZ251X3NwZWNpYWwpOiBDYWxsIGRlbWFuZ2xlZF9mdW5kX3R5cGUgZm9yIG90aGVyCglfX3QqIHN5bWJvbHMuCgpUdWUgTWFyIDExIDE1OjQxOjIxIDE5OTcgIEguSi4gTHUgIDxoamxAbHVjb24ub3JnPgoKCSogc3BhY2VzLmM6IERlY2xhcmUgbWFsbG9jIGFuZCBmcmVlIHByb3Blcmx5LgoJKiBzdHJzaWduYWwuYyAoaW5pdF9zaWduYWxfdGFibGVzKTogQWRkIHByb3RvdHlwZS4KCSogeGF0ZXhpdC5jIChfeGV4aXRfY2xlYW51cCk6IEFkZCBwYXJhbWV0ZXIgZGVjbGFyYXRpb25zLgoKV2VkIEZlYiAxOSAxNTo0MzoyNCAxOTk3ICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBsaXNhLmN5Z251cy5jb20+CgoJKiBNYWtlZmlsZS5pbiAobG5lZWRlZC1saXN0KTogSWYgYWxsb2NhLm8gaXMgbmVlZGVkLCB4ZXhpdC5vIGlzCglhbHNvIHJlcXVpcmVkIGJlY2F1c2Ugb2YgeG1hbGxvYy5vLgoKRnJpIEZlYiAxNCAxMzo0MzozOCAxOTk3ICBJYW4gTGFuY2UgVGF5bG9yICA8aWFuQGN5Z251cy5jb20+CgoJKiBzdHJzaWduYWwuYzogVW5jb25kaXRpb25hbGx5IHJlZGVmaW5lIHN5c19zaWdsaXN0IGFyb3VuZCB0aGUKCWluY2x1c2lvbiBvZiB0aGUgc3lzdGVtIGhlYWRlciBmaWxlcy4KClRodSBGZWIgMTMgMjI6MDE6MDQgMTk5NyAgS2xhdXMgS2FlbXBmICA8a2thZW1wZkBwcm9naXMuZGU+CgoJKiBtYWtlZmlsZS52bXM6IFJlbW92ZSA4IGJpdCBjaGFyYWN0ZXJzLiAgVXBkYXRlIHRvIGxhdGVzdAoJZ2NjIHJlbGVhc2UuCgpUdWUgRmViICA0IDExOjUyOjE5IDE5OTcgIElhbiBMYW5jZSBUYXlsb3IgIDxpYW5AY3lnbnVzLmNvbT4KCgkqIHN0cnNpZ25hbC5jOiBVc2UgTkVFRF9zeXNfc2lnbGlzdCBpbnN0ZWFkIG9mCglMT1NJTkdfU1lTX1NJR0xJU1QuCgkqIGNvbmZpZy50YWJsZTogRG9uJ3QgdXNlIG1oLWx5bnhvcy4KCSogY29uZmlnL21oLWx5bnhvczogUmVtb3ZlLgoKVGh1IEphbiAxNiAxNDo1MTowMyAxOTk3ICBCb2IgTWFuc29uICA8bWFuc29uQGNoYXJtZWQuY3lnbnVzLmNvbT4KCgkqIGNwbHVzLWRlbS5jOiBGaXggaW5kZW50aW5nOyBtYWtlIGlkZW50aWNhbCB0byB0aGUgY29weQoJaW4gR0NDLgoJKGRvX3R5cGUsIGNhc2UgJ00nKTogQ2hlY2sgZm9yIGEgdGVtcGxhdGUgYXMgd2VsbCBhcyBhIGNsYXNzLgoKVGh1IERlYyAxOSAxMzo1MTozMyAxOTk2ICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBsaXNhLmN5Z251cy5jb20+CgoJKiBjb25maWcvbXQtdnh3b3JrczUgKHZ4bmVlZGVkLWxpc3QpOiBSZW1vdmUgc2lnc2V0bWFzay5vLCBzaW5jZQoJdnh3b3JrcyA1LlswLTNdIGFsbCBoYXZlIHNpZ3NldG1hc2sgaW4gdGhlbTsgdGhlIG9uZSBwcm92aWRlZCBieQoJbGliaWJlcnR5IGlzIGluY29ycmVjdCwgYXMgd2VsbC4KCk1vbiBEZWMgIDIgMTU6MDM6NDIgMTk5NiAgTWljaGFlbCBNZWlzc25lciAgPG1laXNzbmVyQHRpa3Rvay5jeWdudXMuY29tPgoKCSogYWxsb2NhLmMgKGFsbG9jYSk6IFdoZW4gY29tcGlsZWQgd2l0aCBhbiBBTlNJL0lTTyBjb21waWxlciwKCWFsbG9jYSB0YWtlcyBhIHNpemVfdCBhcmd1bWVudCwgbm90IGp1c3QgdW5zaWduZWQuCgpNb24gTm92IDE4IDE1OjQyOjA4IDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGNwbHVzLWRlbS5jOiBOb3RlIHRoYXQgdGhpcyBmaWxlIGFsc28gbGl2ZXMgaW4gR0NDLgoKTW9uIE5vdiAxOCAxNToxOTowMCAxOTk2ICBEYXduIFBlcmNoaWsgIDxkYXduQGNyaXR0ZXJzLmN5Z251cy5jb20+CgoJKiBhbGxvY2EuYzogUmVtb3ZlIGluY2x1ZGUgb2YgbGliaWJlcnR5LmggZm9yIGhwdXguCgkqIGFyZ3YuYzogIFJlcGxhY2UgZGVmcyBmcm9tIGxpYmliZXJ0eS5oLgoJKiBzcGFjZXMuYzogUHV0IGJhY2sgZXh0ZXJucyBmcm9tIHJlbW92ZWQgZnJvbSBsaWJpYmVydHkuaC4KCSogdmFzcHJpbnRmLmM6IFJlbW92ZSBpbmNsdWRlIG9mIGxpYmliZXJ0eS5oIGZvciBocHV4LgoKTW9uIE5vdiAxOCAxNDowODowMCAxOTk2ICBEYXduIFBlcmNoaWsgIDxkYXduQGNyaXR0ZXJzLmN5Z251cy5jb20+CgoJKiBjcGx1cy1kZW0uYzogQ2hlY2tpbmcgaW4gYWdhaW47IGxhc3QgY2hlY2tpbiBmaWxlZCBkdWUgdG8gc3RpY2t5IHRhZy4KCldlZCBOb3YgMTMgMDg6MjI6MDAgMTk5NiAgRGF3biBQZXJjaGlrICA8ZGF3bkBjcml0dGVycy5jeWdudXMuY29tPgoKCSogY3BsdXMtZGVtLmM6IFJldmVydCBsYXN0IHR3byBjb21taXRzIGR1ZSB0byBjb25mbGljdHMgd2l0aAoJaHB1eCBzeXN0ZW0gaGVhZGVycy4KCldlZCBOb3YgMTMgMDg6MjI6MDAgMTk5NiAgRGF3biBQZXJjaGlrICA8ZGF3bkBjcml0dGVycy5jeWdudXMuY29tPgoKCSogYWxsb2NhLmMsIGFyZ3YuYywgc3BhY2VzLmMsIHN0cmNhc2VjbXAuYywgdmFzcHJpbnRmLmMsIHZwcmludGYuYzoKCVJldmVydCBsYXN0IGNvbW1pdCBkdWUgdG8gY29uZmxpY3RzIHdpdGggaHB1eCBzeXN0ZW0gaGVhZGVycy4KCldlZCBOb3YgMTMgMTA6MzY6NTAgMTk5NiAgTWljaGFlbCBNZWlzc25lciAgPG1laXNzbmVyQHRpa3Rvay5jeWdudXMuY29tPgoKCSogY3BsdXMtZGVtLmMgKHh7bSxyZX1hbGxvYyk6IE1ha2UgZGVjbGFyYXRpb25zIGNvbXBhdGliaWxlIHdpdGgKCWxpYmliZXJ0eS5oIHdoZW4gY29tcGlsZWQgd2l0aCBhIHN0YW5kYXJkIGNvbXBpbGVyLgoKVHVlIE5vdiAxMiAxNjozMTowMCAxOTk2ICBEYXduIFBlcmNoaWsgIDxkYXduQGNyaXR0ZXJzLmN5Z251cy5jb20+CgoJKiBhbGxvY2EuYzogSW5jbHVkZSBsaWJpYmVydHkuaCBmb3IgZGVmaW5pdGlvbiBvZiB4bWFsbG9jLgoJRG9uJ3QgcmVkZWZpbmUgTlVMTC4KCSogYXJndi5jOiBNb3ZlIHByb3RvdHlwZXMgdG8gbGliaWJlcnR5LmguCgkqIGNwbHVzLWRlbS5jOiBJbmNsdWRlIGxpYmliZXJ0eS5oIGZvciBkZWZpbml0aW9uIG9mIHhtYWxsb2MuCglEb24ndCByZWRlZmluZSBOVUxMLgoJVXNlIGNhc3RzIHRvIGVsaW1pbmF0ZSBjb21waWxlciB3YXJuaW5ncy4KCSogc3BhY2VzLmM6IFJlbW92ZSBwcm90b3R5cGVzIGZvciBtYWxsb2MgYW5kIGZyZWUgd2hpY2ggYXJlCglhbHJlYWR5IGluIGxpYmlicnR5LmguCgkqIHN0cmNhc2VjbXAuYzogVXNlIGNhc3RzIHRvIGVsaW1pbmF0ZSBjb21waWxlciB3YXJuaW5ncy4KCSogdmFzcHJpbnRmLmM6IEluY2x1ZGUgbGliaWJlcnR5LmggZm9yIGRlZmluaXRpb24gb2YgbWFsbG9jLgoJRG9uJ3QgcmVkZWZpbmUgTlVMTC4KCSogdnByaW50Zi5jOiBJbmNsdWRlIHN0ZGFyZy5oIGlmIF9fU1REQ19fLgoKRnJpIE9jdCAxMSAxNTo0MjoxMiAxOTk2ICBTdHUgR3Jvc3NtYW4gIChncm9zc21hbkBjcml0dGVycy5jeWdudXMuY29tKQoKCSogY29uZmlnL21oLXdpbmRvd3M6ICBBZGQgc3RyY2FzZWNtcC5vIHRvIEVYVFJBX09GSUxFUy4KCkZyaSBPY3QgMTEgMTE6MTY6MzEgMTk5NiAgU3RhbiBTaGVicyAgPHNoZWJzQGFuZHJvcy5jeWdudXMuY29tPgoKCSogbXB3LmMgKG1wd2lmeV9maWxlbmFtZSk6IFJld3JpdGUgdG8gc2ltcGxpZnksIGFuZCB0byBoYW5kbGUKCXVwd2FyZCBjb21wb25lbnRzIGNvcnJlY3RseS4KClR1ZSBPY3QgIDggMDg6NTU6MzQgMTk5NiAgU3R1IEdyb3NzbWFuICAoZ3Jvc3NtYW5AY3JpdHRlcnMuY3lnbnVzLmNvbSkKCgkqIGNvbmZpZy50YWJsZSwgY29uZmlnL21oLXdpbmRvd3M6ICBBZGQgc3VwcG9ydCBmb3IgYnVpbGRpbmcgdW5kZXIKCU1TVkMgKHRoZSBNaWNyb3NvZnQgYnVpbGQgZW52aXJvbm1lbnQpLgoKTW9uIE9jdCAgNyAxMDo1MDoyNyAxOTk2ICBJYW4gTGFuY2UgVGF5bG9yICA8aWFuQGN5Z251cy5jb20+CgoJKiBmbm1hdGNoLmM6IFVuZGVmIGNvbnN0IGlmIG5vdCBfX1NURENfXy4KClRodSBPY3QgIDMgMTM6NDY6MzkgMTk5NiAgSWFuIExhbmNlIFRheWxvciAgPGlhbkBjeWdudXMuY29tPgoKCSogZm5tYXRjaC5jOiBOZXcgZmlsZS4KCSogTWFrZWZpbGUuaW4gKENGSUxFUyk6IEFkZCBmbm1hdGNoLmMuCgkoUkVRVUlSRURfT0ZJTEVTKTogQWRkIGZubWF0Y2guby4KCShmbm1hdGNoLm8pOiBOZXcgdGFyZ2V0LgoKV2VkIFNlcCAxOCAxNDo0OToxMyAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjcGx1cy1kZW0uYyAoZGVtYW5nbGVfdGVtcGxhdGUpOiBGaXggaGFuZGxpbmcgb2YgYWRkcmVzcyBhcmdzLgoJKGdudV9zcGVjaWFsKTogSGFuZGxlIHR5cGVfaW5mbyBzdHVmZi4KCkZyaSBTZXAgMTMgMTc6NTI6NTUgMTk5NiAgU3RhbiBTaGVicyAgPHNoZWJzQGFuZHJvcy5jeWdudXMuY29tPgoKCSogbXB3LmMgKERlYnVnUEkpOiBNYWtlIHNldHRhYmxlIGZyb20gdGhlIGVudiB2YXIgREVCVUdfUEFUSE5BTUVTLgoJKG1wd2lmeV9maWxlbmFtZSk6IEhhbmRsZSAiOjovIiBjYXNlLgoKVGh1IFNlcCAxMiAxMzozMDo0MCAxOTk2ICBHZW9mZnJleSBOb2VyICA8bm9lckBjeWdudXMuY29tPgoKCSogY29uZmlnL21oLWN5Z3dpbjMyOiBuZXcgZmlsZSAobmVlZCAtRE5FRURfYmFzZW5hbWUgYW5kCgkJLURORUVEX3N5c19zaWdsaXN0IGZvciBuYXRpdmUgTlQgcmVidWlsZGluZykKCSogY29uZmlnLnRhYmxlICgqLSotY3lnd2luMzIpOiBuZXcgZW50cnkKCSogY2hvb3NlLXRlbXAuYzogYnJpbmcgaW4gc3luYyB3aXRoIGdjYyAocmV2ZXJ0IEF1ZyAxNyBjaGFuZ2UpCgpUaHUgQXVnIDI5IDE2OjQ4OjQ1IDE5OTYgIE1pY2hhZWwgTWVpc3NuZXIgIDxtZWlzc25lckB0aWt0b2suY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy50YWJsZSAoaVszNDVdODYtKi0qKTogUmVjb2duaXplIGk2ODYgZm9yIHBlbnRpdW0gcHJvLgoKVHVlIEF1ZyAyNyAxMzo0Nzo1OCAxOTk2ICBTdGFuIFNoZWJzICA8c2hlYnNAYW5kcm9zLmN5Z251cy5jb20+CgoJKiBwZXhlY3V0ZS5jIChwZXhlY3V0ZSkgW01QV106IFJlbW92ZSBvbGQgYm9ndXMgY29kZSB0aGF0CgltZXNzZWQgd2l0aCBhcmd1bWVudHMgdGhhdCBpbmNsdWRlZCBhICcvJywgYWRkIGVzY2FwZSBjaGFycwoJdG8gZG91YmxlIHF1b3RlcywgcmVtb3ZlIGNvbnN0IGRlY2wgZnJvbSBhcmcgdGhhdCBNYWMKCWNvbXBpbGVycyBkb24ndCBzZWVtIHRvIGxpa2UuCgpTYXQgQXVnIDE3IDA0OjQ0OjI3IDE5OTYgIEdlb2ZmcmV5IE5vZXIgIDxub2VyQGN5Z251cy5jb20+CgoJKiBwZXhlY3V0ZS5jOiBVcGRhdGUgdGVzdCBmb3Igd2luMzIgKCYmICEgY3lnd2luMzIpLgoJKiBjaG9vc2UtdGVtcC5jOiBmaXggV0lOMzIgcHJlcHJvY2Vzc29yIGRlZmluZXMKClRodSBBdWcgMTUgMTI6MjY6NDggMTk5NiAgU3RhbiBTaGVicyAgPHNoZWJzQGFuZHJvcy5jeWdudXMuY29tPgoKCSogbXB3LW1ha2Uuc2VkOiBBZGQgQERBU0hfQ19GTEFHQCBhbmQgQFNFR01FTlRfRkxBRyh7RGVmYXVsdH0pQAoJdG8gZWRpdGluZyBvZiBkZWZhdWx0IG1ha2VmaWxlIHJ1bGUuCgpTdW4gQXVnIDExIDIxOjAzOjI3IDE5OTYgIFN0dSBHcm9zc21hbiAgKGdyb3NzbWFuQGNyaXR0ZXJzLmN5Z251cy5jb20pCgoJKiBhbGxvY2Etbm9ybS5oOiAgSW5jbHVkZSA8bWFsbG9jLmg+IGlmIF9XSU4zMi4KCSogYXJndi5jOiAgSW5jbHVkZSBub24tcHJvdG90eXBlZCBkZWNscyBmb3IgbWFsbG9jIGFuZCBzdHJpbmcKCWZ1bmN0aW9ucyBpZiAhIF9XSU4zMiBvciBpZiBfX0dOVUNfXy4KClRodSBBdWcgIDggMTI6NDI6NDAgMTk5NiAgS2xhdXMgS2FlbXBmICA8a2thZW1wZkBwcm9naXMuZGU+CgoJKiBjb25maWcuaC12bXM6IE5ldyBmaWxlLgoJKiBtYWtlZmlsZS52bXM6IFVzZSBpdC4KCldlZCBBdWcgIDcgMTc6MTY6MTIgMTk5NiAgU3R1IEdyb3NzbWFuICAoZ3Jvc3NtYW5AY3JpdHRlcnMuY3lnbnVzLmNvbSkKCgkqIGdldG9wdC5jIChfZ2V0b3B0X2ludGVybmFsKTogIElmIGFyZ2MgaXMgMCwganVzdCByZXR1cm4gKGJlZm9yZQoJd2UgcmVmZXJlbmNlICphcmd2IGFuZCBzZWdmYXVsdCkuCgpNb24gQXVnICA1IDAxOjI5OjA4IDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIE1ha2VmaWxlLmluIChkaXN0Y2xlYW4pOiBBZGQgbXVsdGlsaWIub3V0LgoKVGh1IEp1bCAxOCAxNzo0MDo1NSAxOTk2ICBJYW4gTGFuY2UgVGF5bG9yICA8aWFuQGN5Z251cy5jb20+CgoJKiBhbGxvY2Etbm9ybS5oOiBDaGFuZ2UgI2lmZGVmIHNwYXJjIHRvICNpZiBkZWZpbmVkIChzcGFyYykgJiYKCWRlZmluZWQgKHN1bikuICBGcm9tIEFuZHJldyBHaWVydGggPEFORFJFV0dAbWljcm9saXNlLmNvLnVrPi4KCk1vbiBKdWwgIDEgMTM6NDA6NDQgMTk5NiAgS2VuIFJhZWJ1cm4gIDxyYWVidXJuQGN5Z251cy5jb20+CgoJVHVlIE1heSAyOCAxNToyOTowMyAxOTk2ICBQYXQgUmFua2luICA8cmFua2luQGVxbC5jYWx0ZWNoLmVkdT4KCgkqIHZtc2J1aWxkLmNvbSAoUkVRVUlSRF9PRklMRVMpOiBBZGQgY2hvb3NlLXRlbXAubyBhbmQgeHN0cmR1cC5vLgoKCVRodSBKYW4gMjUgMTg6MjA6MDQgMTk5NiAgUGF0IFJhbmtpbiAgPHJhbmtpbkBlcWwuY2FsdGVjaC5lZHU+CgoJKiB2bXNidWlsZC5jb206IENoYW5nZXMgdG8gaGFuZGxlIERFRkZVTkMob25fZXhpdCkuCgkoZG9fb2ZpbGVzKTogQWxsb3cgbm9uZXhpc3RlbnQgc291cmNlIGZpbGUgaW4gcGFzcyAzLgoJKGNoa19kZWZmdW5jKTogTmV3IHJvdXRpbmUuCgpUdWUgSnVuIDI1IDE5OjI0OjQzIDE5OTYgIERvdWcgRXZhbnMgIDxkamVAY2FudWNrLmN5Z251cy5jb20+CgoJKiBwZXhlY3V0ZS5jIChQRVhFQ1VURV9WRVJCT1NFKTogRGVmaW5lLgoJKE1QVyBwZXhlY3V0ZSk6IENoZWNrIGZsYWdzICYgUEVYRUNVVEVfVkVSQk9TRSBpbnN0ZWFkIG9mIHZlcmJvc2VfZmxhZy4KClR1ZSBKdW4gMjUgMjM6MTE6NDggMTk5NiAgSmFzb24gTW9sZW5kYSAgKGNyYXNoQGdvZHppbGxhLmN5Z251cy5jby5qcCkKCgkqIE1ha2VmaWxlLmluIChkb2NkaXIpOiBSZW1vdmVkLgoKVHVlIEp1biAyNSAyMzowMTowNyAxOTk2ICBKYXNvbiBNb2xlbmRhICAoY3Jhc2hAZ29kemlsbGEuY3lnbnVzLmNvLmpwKQoKCSogTWFrZWZpbGUuaW4gKG9sZGluY2x1ZGVkaXIpOiBSZW1vdmVkLgoKVHVlIEp1biAyNSAyMjo1MDowNyAxOTk2ICBKYXNvbiBNb2xlbmRhICAoY3Jhc2hAZ29kemlsbGEuY3lnbnVzLmNvLmpwKQoKCSogTWFrZWZpbGUuaW4gKGRhdGFkaXIpOiBTZXQgdG8gJChwcmVmaXgpL3NoYXJlLgoKVGh1IEp1biAyMCAyMToxNzo1MiAxOTk2ICBJYW4gTGFuY2UgVGF5bG9yICA8aWFuQGN5Z251cy5jb20+CgoJKiBjcGx1cy1kZW0uYyAoZGVtYW5nbGVfYXJtX3B0KTogUmVpbmRlbnQuICBBdm9pZCBlbmRsZXNzIGxvb3AgYnkKCWNoZWNraW5nIGZvciBlcnJvcnMgZnJvbSBkb190eXBlLgoKVHVlIEp1biAxOCAxNDozNjoxOSAxOTk2ICBLbGF1cyBLYWVtcGYgIDxra2FlbXBmQHByb2dpcy5kZT4KCgkqIG1ha2VmaWxlLnZtczogTmV3IGZpbGUuCgkqIHhtYWxsb2MuYzogSWYgVk1TLCBpbmNsdWRlIDxzdGRsaWIuaD4gYW5kIDx1bml4bGliLmg+IHJhdGhlcgoJdGhhbiBkZWNsYXJpbmcgbWFsbG9jLCByZWFsbG9jLCBhbmQgc2Jyay4KCk1vbiBKdW4gMTAgMTM6MTc6MTcgMTk5NiAgRG91ZyBFdmFucyAgPGRqZUBjYW51Y2suY3lnbnVzLmNvbT4KCgkqIHBleGVjdXRlLmM6IE5ldyBmaWxlLgoKV2VkIEp1biAgNSAxNjo1Nzo0NSAxOTk2ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEB0YW11LmVkdT4KCgkqIHhtYWxsb2MuYzogRGVjbGFyZSBzYnJrLgoKU2F0IE1heSAgNCAwNTowODo0NSAxOTk2ICBQZXRlciBTY2hhdWVyICAocGVzQHJlZ2VudC5lLXRlY2huaWsudHUtbXVlbmNoZW4uZGUpCgoJKiBhbGxvY2Etbm9ybS5oOiAgQWRkIFNQQVJDd29ya3MgY2MgY29tcGF0aWJsZSBfX2J1aWx0aW5fYWxsb2NhCglkZWNsYXJhdGlvbi4KCk1vbiBBcHIgMjIgMTg6NDE6NDkgMTk5NiAgSWFuIExhbmNlIFRheWxvciAgPGlhbkBjeWdudXMuY29tPgoKCSogeHN0cmVycm9yLmM6IEluY2x1ZGUgPHN0ZGlvLmg+LgoKU3VuIEFwciAyMSAxMTo1NToxMiAxOTk2ICBEb3VnIEV2YW5zICA8ZGplQGNhbnVjay5jeWdudXMuY29tPgoKCSogTWFrZWZpbGUuaW4gKENGSUxFUyk6IEFkZCBhdGV4aXQuYy4KClN1biBBcHIgMjEgMDk6NTA6MDkgMTk5NiAgU3RlcGhlbiBMIE1vc2hpZXIgIChtb3NoaWVyQHdvcmxkLnN0ZC5jb20pCgoJKiBjaG9vc2UtdGVtcC5jOiBJbmNsdWRlIHN5cy90eXBlcy5oIGJlZm9yZSBzeXMvZmlsZS5oIGZvciBzY28zLjJ2NS4KCldlZCBBcHIgMTcgMTE6MTc6NTUgMTk5NiAgRG91ZyBFdmFucyAgPGRqZUBjYW51Y2suY3lnbnVzLmNvbT4KCgkqIGNob29zZS10ZW1wLmM6IERvbid0ICNpbmNsdWRlIHN5cy9maWxlLmggaWZkZWYgTk9fU1lTX0ZJTEVfSC4KCSNpbmNsdWRlIDxzdGRpby5oPgoJKiBjb25maWcvbXQtdnh3b3JrczUgKEhERUZJTkVTKTogRGVmaW5lIE5PX1NZU19GSUxFX0guCgpUdWUgQXByIDE2IDExOjI3OjE2IDE5OTYgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIE1ha2VmaWxlLmluIChsbmVlZGVkLWxpc3QpOiBJZiBhbGxvY2EubyBpcyBuZWVkZWQsIHNvIGlzIHhtYWxsb2Muby4KCVJldmVydHMgRmViIDgsIDE5OTUgY2hhbmdlLgoKTW9uIEFwciAxNSAxMjo1MzoyNiAxOTk2ICBEb3VnIEV2YW5zICA8ZGplQGNhbnVjay5jeWdudXMuY29tPgoKCSogY2hvb3NlLXRlbXAuYzogTmV3IGZpbGUuCgkqIE1ha2VmaWxlLmluIChDRklMRVMpOiBBZGQgY2hvb3NlLXRlbXAuYy4KCShSRVFVSVJFRF9PRklMRVMpOiBBZGQgY2hvb3NlLXRlbXAuby4KClNhdCBBcHIgMTMgMTQ6MTk6MzAgMTk5NiAgU3R1IEdyb3NzbWFuICAoZ3Jvc3NtYW5AY3JpdHRlcnMuY3lnbnVzLmNvbSkKCgkqIGZsb2F0Zm9ybWF0LmMgKGZsb2F0Zm9ybWF0X3RvX2RvdWJsZSk6ICBEb24ndCBiaWFzIGV4cG9uZW50IHdoZW4KCWhhbmRsaW5nIHplcm8ncywgZGVub3JtcyBvciBOYU5zLgoKVGh1IEFwciAxMSAxMzozNjo1NiAxOTk2ICBTdHUgR3Jvc3NtYW4gIChncm9zc21hbkBjcml0dGVycy5jeWdudXMuY29tKQoKCSogZmxvYXRmb3JtYXQuYyAoZmxvYXRmb3JtYXRfdG9fZG91YmxlKTogIEZpeCBidWdzIHdpdGggaGFuZGxpbmcKCW51bWJlcnMgd2l0aCBmcmFjdGlvbnMgPCAzMiBiaXRzLgoKTW9uIEFwciAgOCAxNDo0ODozNCAxOTk2ICBJYW4gTGFuY2UgVGF5bG9yICA8aWFuQGN5Z251cy5jb20+CgoJKiBjb25maWcudGFibGU6IFBlcm1pdCAtLWVuYWJsZS1zaGFyZWQgdG8gc3BlY2lmeSBhIGxpc3Qgb2YKCWRpcmVjdG9yaWVzLgoKVHVlIE1hciAxOSAyMjowMjowNyAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjcGx1cy1kZW0uYyAoZGVtYW5nbGVfdGVtcGxhdGUpOiBGaXggZm9yIG5vbi1tYW5nbGVkIHBvaW50ZXIKCWFyZ3VtZW50cy4KCkZyaSBNYXIgIDggMTc6MjQ6MTggMTk5NiAgSWFuIExhbmNlIFRheWxvciAgPGlhbkBjeWdudXMuY29tPgoKCSogY29uZmlndXJlLmluOiBJZiBzcmNkaXIgaXMgYC4nIGFuZCB3aXRoX3RhcmdldF9zdWJkaXIgaXMgbm90CglgLicsIHRoZW4gc2V0IE1VTFRJU1JDVE9QIGJlZm9yZSBjYWxsaW5nIGNvbmZpZy1tbC5pbi4KClRodSBNYXIgIDcgMTM6Mzc6MTAgMTk5NiAgU3RhbiBTaGVicyAgPHNoZWJzQGFuZHJvcy5jeWdudXMuY29tPgoKCSogbXB3LmMgKG1wd19vcGVuKTogQWRkIGRlYnVnZ2luZyBvdXRwdXQgb3B0aW9uLgoKV2VkIE1hciAgNiAxNzozNjowMyAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjcGx1cy1kZW0uYyAoZGVtYW5nbGVfdGVtcGxhdGUpOiBGaXggZm9yIGFkZHJlc3Mtb2YtZXh0ZXJuIGFyZ3VtZW50cy4KClR1ZSBGZWIgMjcgMTI6MDA6NTAgMTk5NiAgUmF5bW9uZCBKb3UgIDxyam91QG1leGljYW4uY3lnbnVzLmNvbT4KCgkqIG1wdy5jIChtcHdpZnlfZmlsZW5hbWUpOiBDaGFuZ2UgNiB0byA1IGluCglzdHJuY21wICh1bml4bmFtZSwgIi90bXAvIiwgNSkuCgpUdWUgRmViIDIwIDEwOjU1OjUzIDE5OTYgIElhbiBMYW5jZSBUYXlsb3IgIDxpYW5AY3lnbnVzLmNvbT4KCgkqIGNwbHVzLWRlbS5jIChkZW1hbmdsZV90ZW1wbGF0ZSk6IEluaXRpYWxpemUgaXNfYm9vbC4gIENvcnJlY3RseQoJaGFuZGxlIDAgYXMgYSBwb2ludGVyIHZhbHVlIHBhcmFtZXRlci4KCk1vbiBGZWIgIDUgMTY6NDE6NDQgMTk5NiAgSWFuIExhbmNlIFRheWxvciAgPGlhbkBjeWdudXMuY29tPgoKCSogTWFrZWZpbGUuaW4gKGFsbCk6IERlcGVuZCB1cG9uIHJlcXVpcmVkLWxpc3QuCgkocmVxdWlyZWQtbGlzdCk6IE5ldyB0YXJnZXQuCgkoY2xlYW4pOiBSZW1vdmUgcmVxdWlyZWQtbGlzdC4KCldlZCBKYW4gMzEgMTA6MTk6NDEgMTk5NiAgU3RldmUgQ2hhbWJlcmxhaW4gIDxzYWNAc2xhc2guY3lnbnVzLmNvbT4KCgkqIHdpbjMyLmM6IERlbGV0ZWQuCgkqIGNvbmZpZy50YWJsZSAoaTM4Ni0qLXdpbjMyKTogRGVsZXRlZC4KCSogY29uZmlnL21oLWkzODZ3aW4zMjogRGVsZXRlZC4KClRodSBKYW4gMTggMTE6MzQ6MTcgMTk5NiAgSWFuIExhbmNlIFRheWxvciAgPGlhbkBjeWdudXMuY29tPgoKCSogY3BsdXMtZGVtLmMgKGNwbHVzX2RlbWFuZ2xlX29wbmFtZSk6IENoYW5nZSBvcG5hbWUgcGFyYW1ldGVyIHRvCgljb25zdCBjaGFyICouCgkoY3BsdXNfbWFuZ2xlX29wbmFtZSk6IENoYW5nZSByZXR1cm4gdHlwZSBhbmQgb3BuYW1lIHBhcmFtZXRlciB0bwoJY29uc3QgY2hhciAqLiAgRG9uJ3QgY2FzdCByZXR1cm4gdmFsdWUuCgpUdWUgSmFuIDE2IDEyOjEzOjExIDE5OTYgIFN0YW4gU2hlYnMgIDxzaGVic0BhbmRyb3MuY3lnbnVzLmNvbT4KCgkqIG1wdy5jOiBJbmNsdWRlIFRpbWVyLmgsIGluIG9yZGVyIHRvIGdldCBtNjhrIE1pY3Jvc2Vjb25kcyB0cmFwCglkZWZpbml0aW9uLgoKV2VkIEphbiAgMyAxMzoxNTowNCAxOTk2ICBGcmVkIEZpc2ggIDxmbmZAY3lnbnVzLmNvbT4KCgkqIG9ic3RhY2suYzogVXBkYXRlIGNvcHlyaWdodCB0byAxOTk2LgoJKF9vYnN0YWNrX21lbW9yeV91c2VkKTogRGVmaW5lIG5ldyBmdW5jdGlvbi4gIENhbGxlZCB2aWEKCW9ic3RhY2tfbWVtb3J5X3VzZWQgbWFjcm8uCgpUaHUgRGVjIDI4IDExOjM5OjQwIDE5OTUgIElhbiBMYW5jZSBUYXlsb3IgIDxpYW5AY3lnbnVzLmNvbT4KCgkqIHhzdHJkdXAuYzogTmV3IGZpbGUuCgkqIE1ha2VmaWxlLmluIChDRklMRVMpOiBBZGQgeHN0cmR1cC5jLgoJKFJFUVVJUkVEX09GSUxFUyk6IEFkZCB4c3RyZHVwLm8uCgkoeHN0cmR1cC5vKTogTmV3IHRhcmdldC4KCk1vbiBEZWMgMTEgMTg6MTg6NTIgMTk5NSAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgoKCSogYXRleGl0LmM6IE5ldyBzdHViIHRvIHByb3ZpZGUgYXRleGl0IG9uIHN5c3RlbXMgdGhhdCBoYXZlCglvbl9leGl0LCBsaWtlIFN1bk9TIDQuMS54IHN5c3RlbXMuCgkqIGZ1bmN0aW9ucy5kZWYgKG9uX2V4aXQsIGF0ZXhpdCk6IERpdHRvLgoKTW9uIERlYyAxMSAxNTo0MjoxNCAxOTk1ICBTdGFuIFNoZWJzICA8c2hlYnNAYW5kcm9zLmN5Z251cy5jb20+CgoJKiBtcHcuYyAobXB3X2Fib3J0KTogUmVtb3ZlIGRlY2wuCgkobXB3X2FjY2Vzcyk6IE1vdmUgZGVidWdnaW5nIHByaW50Zi4KClNhdCBEZWMgIDIgMDE6MjU6MjMgMTk5NSAgSWFuIExhbmNlIFRheWxvciAgPGlhbkBjeWdudXMuY29tPgoKCSogY29uZmlnLnRhYmxlOiBDb25zaXN0ZW50bHkgdXNlICR7aG9zdH0gcmF0aGVyIHRoYW4gJHt4aG9zdH0gb3IKCSR7dGFyZ2V0fS4KCSogY29uZmlndXJlLmluOiBEb24ndCBib3RoZXIgdG8gc2V0ICR7eGhvc3R9IGJlZm9yZSBjYWxsaW5nCgljb25maWcudGFibGUuCgpUdWUgTm92IDI4IDE0OjE2OjU3IDE5OTUgIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGxpc2EuY3lnbnVzLmNvbT4KCgkqIE1ha2VmaWxlLmluICguYy5vKTogVXNlIHRlc3QgaW5zdGVhZCBvZiB0aGUgbGVmdCBicmFja2V0LCB0bwoJYXZvaWQgcHJvYmxlbXMgd2l0aCBzb21lIHZlcnNpb25zIG9mIG1ha2UuCgpUdWUgTm92IDI4IDExOjQ1OjE3IDE5OTUgIFN0YW4gU2hlYnMgIDxzaGVic0BhbmRyb3MuY3lnbnVzLmNvbT4KCgkqIG1wdy1tYWtlLnNlZDogRml4IElOQ0RJUiBlZGl0IHRvIHdvcmsgd2l0aCBOb3YgMTQgY2hhbmdlLgoKVHVlIE5vdiAyMSAxMToyNjozNCAxOTk1ICBGcmVkIEZpc2ggIDxmbmZAcnRsLmN5Z251cy5jb20+CgoJKiBjb25maWcvbWgtaHB1eDogUmVtb3ZlLiAgSXQgd2FzIG9ubHkgdXNlZCB0byBkZWZpbmUgRVhUUkFfT0ZJTEVTLAoJd2hpY2ggd2FzIHNldCB0byBqdXN0IGFsbG9jYS5vLCB3aGljaCBpcyBub3cgYXV0b21hdGljYWxseSBtYXJrZWQKCWFzIG5lZWRlZCBieSB0aGUgYXV0b2NvbmZpZ3VyYXRpb24gcHJvY2Vzcy4KClR1ZSBOb3YgMjEgMTQ6MTU6MDYgMTk5NSAgSWFuIExhbmNlIFRheWxvciAgPGlhbkBjeWdudXMuY29tPgoKCSogY29uZmlnLnRhYmxlOiBDaGVjayAke3dpdGhfY3Jvc3NfaG9zdH0gcmF0aGVyIHRoYW4gY29tcGFyaW5nCgkke2hvc3R9IGFuZCAke3RhcmdldH0uCgpUaHUgTm92IDE2IDE0OjM0OjQyIDE5OTUgIElhbiBMYW5jZSBUYXlsb3IgIDxpYW5AY3lnbnVzLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbjogSWYgd2l0aF90YXJnZXRfc3ViZGlyIGlzIGVtcHR5LCBzZXQgeGhvc3QgdG8KCSR7aG9zdH0gcmF0aGVyIHRoYW4gJHt0YXJnZXR9IGJlZm9yZSBjYWxsaW5nIGNvbmZpZy50YWJsZS4KClR1ZSBOb3YgMTQgMDE6Mzg6MzAgMTk5NSAgRG91ZyBFdmFucyAgPGRqZUBjYW51Y2suY3lnbnVzLmNvbT4KCgkqIE1ha2VmaWxlLmluIChNVUxUSVRPUCk6IERlbGV0ZWQuCgkoTVVMVElTUkNUT1AsIE1VTFRJQlVJTERUT1ApOiBOZXcuCgkoRkxBR1NfVE9fUEFTUyk6IERlbGV0ZSBJTkNESVIuCgkoSU5DRElSKTogQWRkICQoTVVMVElTUkNUT1ApLgoJKGluc3RhbGxfdG9fbGliZGlyKTogQWRkICQoTVVMVElTVUJESVIpLiAgQ2FsbCAkKE1VTFRJRE8pLgoJKiBjb25maWd1cmUuaW46IERlbGV0ZSBjYWxsIHRvIGNmZy1tbC1jb20uaW4uICBDYWxsIGNvbmZpZy1tbC5pbgoJaW5zdGVhZCBvZiBjZmctbWwtcG9zLmluLgoJKGNyb3NzLWNvbXBpbGUgY2hlY2spOiBDaGFuZ2UgdG8gdGVzdCBmb3Igd2l0aF90YXJnZXRfc3ViZGlyLgoJKEVYVFJBX0xJTktTKTogRGVsZXRlLgoKU3VuIE5vdiAxMiAxMjoxMzowNCAxOTk1ICBTdGFuIFNoZWJzICA8c2hlYnNAYW5kcm9zLmN5Z251cy5jb20+CgoJKiBtcHctbWFrZS5zZWQ6IEFkZCBnZXRwYWdlc2l6ZS5jLm8gdG8gbmVlZGVkLWxpc3QuCgkqIG1wdy5jIFtVU0VfTVdfSEVBREVSU106IENvbmRpdGlvbmFsaXplIGNvbXBpbGluZyBvZgoJZnVuY3Rpb25zIHRoYXQgYXJlIHN1cHBsaWVkIGJ5IE1ldHJvd2Vya3MgbGlicmFyaWVzLgoJKGZzdGF0KTogQ2xlYW4gdXAgZGVzY3JpcHRvci0+cG9pbnRlciBjb252ZXJzaW9uIGNvZGUuCgkoSW5zdGFsbENvbnNvbGUsIGV0Yyk6IEVtcHR5IGRlZmluaXRpb25zLCBmb3Igd2hlbiBsaW5raW5nCgl3aXRoIFNJT1VYLgoKU3VuIE5vdiAgNSAxOToyNToyNyAxOTk1ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAa2FsZXNzaW4uY3lnbnVzLmNvbT4KCgkqIE1ha2VmaWxlLmluIChGTEFHU19UT19QQVNTKTogIEFsc28gcGFzcyBQSUNGTEFHUy4KCSguYy5vKTogIFN0eWxpc3RpYyBjaGFuZ2UuCgpUaHUgTm92ICAyIDEyOjA2OjI5IDE5OTUgIElhbiBMYW5jZSBUYXlsb3IgIDxpYW5AY3lnbnVzLmNvbT4KCgkqIHN0cnRvbC5jLCBzdHJ0b3VsLmM6IERvbid0IGluY2x1ZGUgPHN0ZGxpYi5oPi4gIEZyb20KCXBoZG1AaW5mby51Y2wuYWMuYmUgKFBoaWxpcHBlIERlIE11eXRlcikuCgpXZWQgTm92ICAxIDExOjU5OjM2IDE5OTUgIElhbiBMYW5jZSBUYXlsb3IgIDxpYW5AY3lnbnVzLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbjogQ29ycmVjdCBzZWQgY2FsbC4KCk1vbiBPY3QgMzAgMTM6MDM6NDUgMTk5NSAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGthbGVzc2luLmN5Z251cy5jb20+CgoJKiBjb25maWd1cmUuaW46ICBDbGVhbiB1cCAvIHNpbXBsaWZ5IGZvciBuYXRpdmUuCgoJKiBjb25maWd1cmUuaW46ICBNZXJnZSBpbiBzdHVmZiBmcm9tIC4uL3hpYmVydHkvY29uZmlndXJlLmluLgoJKiBNYWtlZmlsZS5pbiAoQ0MpOiAgQWRkIGRlZmluaXRpb24gKHNvIGl0IGNhbiBiZSBvdmVycnJpZGRlbgoJYnkgLi4vY29uZmlndXJlKS4KClR1ZSBPY3QgMjQgMTc6NTc6MjcgMTk5NSAgU3RhbiBTaGVicyAgPHNoZWJzQGFuZHJvcy5jeWdudXMuY29tPgoKCSogbXB3LW1ha2Uuc2VkOiBMZWF2ZSBzdHJlcnJvci5jLm8gaW4gc3RhbmRhcmQgbGlzdCBvZiBmdW5jdGlvbnMuCgkqIG1wdy5jIChSX09LLCBFTk9FTlQsIEVBQ0NFU1MsIEVOT1NZUyk6IFJlbW92ZS4KCShsaW5rKTogUmVtb3ZlIHVzZWxlc3MgZGVmaW5pdGlvbiB3aXRoIGVycm9yIHJldHVybi4KCShsYXN0X21pY3Jvc2Vjb25kcywgd2Fybl9pZl9zcGluX2RlbGF5LCByZWNvcmRfZm9yX3NwaW5fZGVsYXkpOgoJVXNlIFVuc2lnbmVkV2lkZSB0eXBlIGZvciBtaWNyb3NlY29uZCBjb3VudHMuCgpUaHUgT2N0IDE5IDEwOjUyOjA3IDE5OTUgIE1pY2hhZWwgTWVpc3NuZXIgIDxtZWlzc25lckB3b2dnbGVidWcudGlhYy5uZXQ+CgoJKiBtZW1jbXAuYyAobWVtY21wKTogQXJndW1lbnQgdHlwZXMgYXJlIGNvbnN0IHZvaWQgKiwgbm90IHZvaWQKCSpjb25zdC4KCgkqIHN0cm5jYXNlY21wLmMgKHN0cm5jYXNlY21wKTogSW5jbHVkZSBhbnNpZGVjbC5oL3N0ZGFyZy5oLCBub3QKCXN5cy90eXBlcy5oLgoJKiBzdHJjYXNlY21wLmMgKHN0cmNhc2VjbXApOiBEaXR0by4KClR1ZSBPY3QgMTAgMTE6MDM6MjQgMTk5NSAgRnJlZCBGaXNoICA8Zm5mQGN5Z251cy5jb20+CgoJKiBNYWtlZmlsZS5pbiAoQklTT04pOiAgUmVtb3ZlIG1hY3JvLgoKVHVlIFNlcCAyNiAxNTowNjo0NiAxOTk1ICBTdGFuIFNoZWJzICA8c2hlYnNAYW5kcm9zLmN5Z251cy5jb20+CgoJKiBNYWtlZmlsZS5pbiAoSEZJTEVTKTogQWRkIGRlZmF1bHQgZW1wdHkgZGVmaW5pdGlvbi4KCSogbXB3LWNvbmZpZy5pbiAoY29uZmlnLmgpOiBPbmx5IHVwZGF0ZSBpZiBjaGFuZ2VkLgoJKiBtcHctbWFrZS5pbjogUmVtb3ZlLgoJKiBtcHctbWFrZS5zZWQ6IE5ldyBmaWxlLCBlZGl0cyBNYWtlZmlsZS5pbiBpbnRvIE1QVyBtYWtlZmlsZS4KCSogbXB3LmM6IFJlbW92ZSBzZW1pLWNsb25lIG9mIHN0cmVycm9yIGNvZGUuCgkoc3lzX25lcnIsIHN5c19lcnJsaXN0KTogRGVmaW5lIGhlcmUuCgkoTWljcm9zZWNvbmRzKTogT25seSBkZWZpbmUgYXMgQS1saW5lIHRyYXAgaWYgbTY4ayBNYWMuCgpXZWQgU2VwIDIwIDEyOjUzOjMyIDE5OTUgIElhbiBMYW5jZSBUYXlsb3IgIDxpYW5AY3lnbnVzLmNvbT4KCgkqIE1ha2VmaWxlLmluIChtYWludGFpbmVyLWNsZWFuKTogTmV3IHN5bm9ueW0gZm9yIGRpc3RjbGVhbi4KCk1vbiBBdWcgMjggMTk6NDc6NTIgMTk5NSAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGthbGVzc2luLmN5Z251cy5jb20+CgoJKiBjb25maWcudGFibGU6ICBGb3IgaG9zdCwgZ2VuZXJhbGl6ZSByczYwMDAtaWJtLWFpeCoKCXRvICotaWJtLWFpeCogc28gd2UgYWxzbyBpbmNsdWRlIHBvd2VycGMuCgpUdWUgQXVnIDIyIDAzOjE4OjA1IDE5OTUgIEtlbiBSYWVidXJuICA8cmFlYnVybkBrci1sYXB0b3AuY3lnbnVzLmNvbT4KCglGcmkgSnVuIDE2IDE4OjM1OjQwIDE5OTUgIFBhdCBSYW5raW4gIChyYW5raW5AZXFsLmNhbHRlY2guZWR1KQoKCSogeHN0cmVycm9yLmM6IE5ldyBmaWxlLgoJKiBNYWtlZmlsZS5pbiwgdm1zYnVpbGQuY29tOiBDb21waWxlIGl0LgoKTW9uIEp1bCAzMSAxMjoxNjozMiAxOTk1ICBzdGV2ZSBjaGFtYmVybGFpbiAgPHNhY0BzbGFzaC5jeWdudXMuY29tPgoKCSogY29uZmlnLnRhYmxlIChpMzg2LSotd2luMzIpOiBOZXcuCgpGcmkgSnVsIDIxIDExOjM1OjUyIDE5OTUgIERvdWcgRXZhbnMgIDxkamVAY2FudWNrLmN5Z251cy5jb20+CgoJKiBNYWtlZmlsZS5pbiAoTVVMVElUT1ApOiBOZXcgdmFyaWFibGUuCgkoTVVMVElESVJTLCBNVUxUSVNVQkRJUiwgTVVMVElETywgTVVMVElDTEVBTik6IExpa2V3aXNlLgoJKGFsbCk6IEFkZCBtdWx0aWxpYiBzdXBwb3J0LgoJKGluc3RhbGxfdG9fdG9vbGRpciwgKmNsZWFuKTogTGlrZXdpc2UuCgpNb24gSnVsIDEwIDExOjQ3OjI3IDE5OTUgIEtlbiBSYWVidXJuICA8cmFlYnVybkBjeWdudXMuY29tPgoKCSogbWFrZWZpbGUuZG9zIChPQkpTKTogQWRkIGhleC5vLiAgRnJvbSBESiBEZWxvcmllLgoKRnJpIEp1biAzMCAxNzoyODo1OSAxOTk1ICBQYXQgUmFua2luICAocmFua2luQGVxbC5jYWx0ZWNoLmVkdSkKCgkqIHZtc2J1aWxkLmNvbTogIGNyZWF0ZSAibmV3LWxpYi5vbGIiLCBidWlsZCBsaWJpYmVydHkgdW5kZXIgdGhhdAoJbmFtZSwgYW5kIHRoZW4gbWFrZSBpdCBiZWNvbWUgImxpYmVydHkub2xiIiB3aGVuIGRvbmUsIHNvIHRoYXQgYW4KCWluY29tcGxldGUgYnVpbGQgYXR0ZW1wdCBuZXZlciBsZWF2ZXMgYmVoaW5kIHNvbWV0aGluZyB3aGljaCBsb29rcwoJbGlrZSBhIGNvbXBsZXRlIGxpYnJhcnkuCgpUaHUgSnVuIDI5IDAwOjIyOjAyIDE5OTUgIFN0ZXZlIENoYW1iZXJsYWluICA8c2FjQHNsYXNoLmN5Z251cy5jb20+CgoJKiBjb25maWcvbWgtaTM4NnBlOiBOZXcgZmlsZSBmb3IgUEUgaG9zdHMuCgkqIGNvbmZpZy50YWJsZTogVW5kZXJzdGFuZCBQRSBob3N0cy4KCldlZCBKdW4gMjggMTk6MTM6MjMgMTk5NSAgSmFzb24gTWVycmlsbCAgPGphc29uQHBoeWRlYXV4LmN5Z251cy5jb20+CgoJKiBjcGx1cy1kZW0uYzogVXBkYXRlIGZyb20gZ2NjLgoKCSogYXJndi5jLCBkdW1teS5jOiBJZiBfX1NURENfXywgI2luY2x1ZGUgImFsbG9jYS1jb25mLmgiIGFmdGVyCgk8c3RkZGVmLmg+LgoJKiBhbGxvY2Etbm9ybS5oOiBJZiBfX1NURENfXywgZGVjbGFyZSBhbGxvY2Egd2l0aCBpdHMgcGFyYW1ldGVyLgoKVGh1IEp1biAyMiAxODo1Nzo0NyAxOTk1ICBTdGFuIFNoZWJzICA8c2hlYnNAYW5kcm9zLmN5Z251cy5jb20+CgoJKiBtcHctbWFrZS5pbiAoQUxMX0NGTEFHUyk6IERlZmluZSBORUVEX2Jhc2VuYW1lLgoJKiBtcHcuYzogT25seSB0ZXN0IERlYnVnUEkgb25jZSB3aGVuZXZlciBwcmludGluZyBkZWJ1ZyBpbmZvLgoJKG1wd2lmeV9maWxlbmFtZSk6IElmIGZpbGVuYW1lIGlzIC90bXAvZm9vLCBjaGFuZ2UgaXQgaW50byA6X2ZvbywKCWFsc28gZml4IHRvIG5vdCB3cml0ZSBvbiBpbnB1dCBmaWxlbmFtZSBidWZmZXIuCgkobXB3X2FjY2Vzcyk6IFVzZSBzdGF0KCkgaW5zdGVhZCBvZiBvcGVuKCksIHdvcmtzIGZvciBkaXJlY3RvcmllcwoJYXMgd2VsbCBhcyBmaWxlcy4KCk1vbiBKdW4gMTkgMDA6MzM6MjIgMTk5NSAgSmFzb24gTWVycmlsbCAgPGphc29uQHBoeWRlYXV4LmN5Z251cy5jb20+CgoJKiBNYWtlZmlsZS5pbjogTWFzc2FnZSBicm9rZW4gc2hlbGxzIHRoYXQgcmVxdWlyZSAnZWxzZSB0cnVlJy4KClNhdCBKdW4gMTcgMjM6MjE6NTggMTk5NSAgRnJlZCBGaXNoICA8Zm5mQGN5Z251cy5jb20+CgoJKiBhbGxvY2Etbm9ybS5oOiBEZWNsYXJlIGFsbG9jYSBhcyB0eXBlICJQVFIiIHRvIG1hdGNoIGZ1bmN0aW9ucy5kZWYuCglEZWNsYXJlIF9fYnVpbHRpbl9hbGxvY2EgaW4gdGhlIHNwYXJjIGNhc2UsIGFzIGFyZ3YuYyBkaWQuCgkqIGFyZ3YuYzogUmVwbGFjZSBpbmxpbmUgdmVyc2lvbiBvZiBhbGxvY2Etbm9ybS5oIGF0IHN0YXJ0IG9mIGZpbGUgd2l0aAoJYSAjaW5jbHVkZSBvZiBhbGxvY2EtY29uZi5oLiAgUHJlY2VkZSBpdCB3aXRoIGFuIGluY2x1ZGUgb2YgYW5zaWRlY2wuaAoJYmVjYXVzZSBhbGxvY2Etbm9ybS5oIG5lZWRzIHRvIGRlY2xhcmUgYWxsb2NhIGFzICJQVFIiLgoKTW9uIEp1biAxMiAxNDoyNDoyNiAxOTk1ICBTdGV2ZSBDaGFtYmVybGFpbiAgPHNhY0BzbGFzaC5jeWdudXMuY29tPgoKCSogd2luMzIuYzogTmV3IGZpbGUuCgpGcmkgSnVuICA5IDE1OjE2OjE0IDE5OTUgIEphc29uIE1lcnJpbGwgIDxqYXNvbkBwaHlkZWF1eC5jeWdudXMuY29tPgoKCSogZHVtbXkuYzogI2luY2x1ZGUgImFsbG9jYS1jb25mLmgiLgoKV2VkIEp1biAgNyAxMTo0NjoyMyAxOTk1ICBKYXNvbiBNZXJyaWxsICA8amFzb25AcGh5ZGVhdXguY3lnbnVzLmNvbT4KCgkqIE1ha2VmaWxlLmluIChtb3N0bHljbGVhbik6IFJlbW92ZSBzdGFtcC1waWNkaXIuCgkoY2xlYW4pOiBEb24ndC4KCk1vbiBKdW4gIDUgMTg6NDY6MDYgMTk5NSAgSmFzb24gTWVycmlsbCAgPGphc29uQHBoeWRlYXV4LmN5Z251cy5jb20+CgoJKiBjb25maWcudGFibGUgKGZyYWdzKTogVXNlIHRvcGxldmVsIHBpYyBmcmFncy4KCgkqIE1ha2VmaWxlLmluIChQSUNGTEFHKTogTmV3IG1hY3JvLgoJKGFsbCk6IERlcGVuZCBvbiBzdGFtcC1waWNkaXIuCgkobmVlZGVkLWxpc3QpOiBEaXR0by4KCSguYy5vKTogQWxzbyBidWlsZCBwaWMgb2JqZWN0LgoJKHN0YW1wLXBpY2Rpcik6IE5ldyBydWxlLgoJKG1vc3RseWNsZWFuKTogUmVtb3ZlIHBpYy4KCShjbGVhbik6IFJlbW92ZSBzdGFtcC1waWNkaXIuCgpGcmkgTWFyIDI0IDE2OjU1OjQ4IDE5OTUgIFBhdCBSYW5raW4gIChyYW5raW5AZXFsLmNhbHRlY2guZWR1KQoKCSogdm1zYnVpbGQuY29tIChjb25maWcuaCk6IEFkZCBgI2RlZmluZSBORUVEX2Jhc2VuYW1lJy4KClR1ZSBNYXkgMjMgMTA6MTI6NDYgMTk5NSAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGthbGVzc2luLmN5Z251cy5jb20+CgoJKiBjbG9jay5jLCBnZXRvcHQuYywgc3RydG9kLmMsIHZzcHJpbnRmLmM6ICBDaGFuZ2UgZnJvbSB1c2luZyBMR1BMCgl0byBsaWJpby1zdHlsZSBjb3B5cmlnaHQuCgkqIGdldHBhZ2VzaXplLmM6ICBSZW1vdmUgRlNGIGNvcHlyaWdodC4KClNhdCBNYXkgMjAgMTI6MzA6MjMgMTk5NSAgS2VuIFJhZWJ1cm4gIDxyYWVidXJuQGtyLWxhcHRvcC5jeWdudXMuY29tPgoKCUFkZGVkIGltcHJvdmVkIFZNUyBzdXBwb3J0IGZyb20gUGF0IFJhbmtpbjoKCglGcmkgTWFyIDE3IDE4OjQwOjM2IDE5OTUgIFBhdCBSYW5raW4gIChyYW5raW5AZXFsLmNhbHRlY2guZWR1KQoKCSogdm1zYnVpbGQuY29tOiAgbmV3IGZpbGUuCgoJKiBnZXRwYWdlc2l6ZS5jIChnZXRwYWdlc2l6ZSk6ICBpbXBsZW1lbnQgZm9yIFZNUzsKCSogc3RyZXJyb3IuYyAoc3RyZXJyb3IsIHN0cmVycm5vLCBzdHJ0b2Vycm5vKTogIGFkZCBydWRpbWVudGFyeQoJc3VwcG9ydCBmb3IgRVZNU0VSUi4KClRodSBNYXkgMTggMTc6MDE6NDIgMTk5NSAgS2VuIFJhZWJ1cm4gIDxyYWVidXJuQGtyLWxhcHRvcC5jeWdudXMuY29tPgoKCVdlZCBNYXkgMTAgMTQ6Mjg6MTYgMTk5NSBSaWNoYXJkIEVhcm5zaGF3IChyZWFybnNoYUBhcm1sdGQuY28udWspCgoJKiBmbG9hdGZvcm1hdC5jIChmbG9hdGZvcm1hdF9hcm1fZXh0KTogRGVmaW5lLgoKVHVlIE1heSAxNiAxMzozMDo1OSAxOTk1ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAa2FsZXNzaW4uY3lnbnVzLmNvbT4KCgkqIGJhc2VuYW1lLmMsIGJjbXAuYywgZ2V0Y3dkLmMsIGluc3F1ZS5jLCByZW5hbWUuYywgc2lnc2V0bWFzay5jLAoJc3RyZXJyb3IuYywgc3Ryc2lnbmFsLmM6ICBSZW1vdmUgRlNGIGNvcHlyaWdodC4KCSogc2lnc2V0bWFzay5jOiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+IC0gc2VlbXMgdG8gYmUgbmVlZGVkIGJ5IElTQy4KCk1vbiBNYXkgMTUgMTk6NTM6MTcgMTk5NSAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGthbGVzc2luLmN5Z251cy5jb20+CgoJKiBiY29weS5jLCBiemVyby5jLCBtZW1jbXAuYywgbWVtY3B5LmMsIG1lbXNldC5jLCBzdHJjaHIuYywKCXN0cnJjaHIuYywgc3Ryc3RyLmMsIHZmb3JrLmM6ICBSZW1vdmUgRlNGIENvcHlyaWdodCwgYmVjYXVzZSB0aGlzCgltaWdodCBjb250YW1pbmF0ZSBsaWJzdGRjKysgd2l0aCB0aGUgTEdQTC4gIChPSydkIGJ5IFJNUyAxMSBPY3QgOTQuKQoJKiBzdHJjaHIuYywgc3RycmNoci5jOiAgQWRkIGNhc3QgdG8gc3VwcHJlc3MgY29uc3Qgd2FybmluZy4KClRodSBNYXkgIDQgMTQ6MzY6NDIgMTk5NSAgSmFzb24gTWVycmlsbCAgPGphc29uQHBoeWRlYXV4LmN5Z251cy5jb20+CgoJKiBjcGx1cy1kZW0uYzogVXNlIGNvbnN0IGluc3RlYWQgb2YgQ09OU1QuICBEb24ndCBpbmNsdWRlCglhbnNpZGVjbC5oIGRpcmVjdGx5LgoKV2VkIEFwciAxOSAwMTozMDoyNyAxOTk1ICBKYXNvbiBNZXJyaWxsICA8amFzb25AcGh5ZGVhdXguY3lnbnVzLmNvbT4KCgkqIGNwbHVzLWRlbS5jOiBEb24ndCBpbmNsdWRlIGxpYmliZXJ0eS5oLiAgRG8gZGVjbGFyZSB4bWFsbG9jIGFuZAoJeHJlYWxsb2MuCgkoLURNQUlOKTogRG9uJ3QgcmVseSBvbiBhbiBleHRlcm5hbGx5LWRlZmluZWQgdmVyc2lvbiBudW1iZXI7CglpbnN0ZWFkLCByZXF1aXJlIHRoZSB2ZXJzaW9uIG51bWJlciB0byBiZSBkZWZpbmVkIGFzIGEKCXByZXByb2Nlc3NvciBtYWNyby4gIEhhbmRsZSB0aGUgUlMvNjAwMCBsZWFkaW5nIGRvdC4gIERlZmluZQoJeG1hbGxvYywgeHJlYWxsb2MgYW5kIGZhdGFsLiAgRG9uJ3Qgc3RyaXAgYSBsZWFkaW5nIHVuZGVyc2NvcmUKCWlmIHdlIGNvdWxkbid0IGRlbWFuZ2xlIHRoZSB3b3JkLgoKVHVlIEFwciAgNCAxMzowMzo1MSAxOTk1ICBTdGFuIFNoZWJzICA8c2hlYnNAYW5kcm9zLmN5Z251cy5jb20+CgoJKE9sZCBtcHcuYyBjaGFuZ2UgZGVzY3JpcHRpb25zIHJldGFpbmVkIGZvciBpbmZvcm1hdGlvbmFsIHZhbHVlLikKCSogbXB3LmMgKHdhcm5pbmdfdGhyZXNob2xkKTogRGVmYXVsdCB0byAuNCBzZWMuCgkob3ZlcmZsb3dfY291bnQsIGN1cnJlbnRfcHJvZ3Jlc3MpOiBOZXcgZ2xvYmFscy4KCSh3YXJuX2lmX3NwaW5fZGVsYXkpOiBJbmNsdWRlIGN1cnJlbnQgcHJvZ3Jlc3MgdHlwZSwKCXN1Y2ggYXMgcHJvZ3JhbSBuYW1lLCBpbiBtZXNzYWdlLgoJKG1wd19zdGFydF9wcm9ncmVzcyk6IFNldCBjdXJyZW50X3Byb2dyZXNzIHZhcmlhYmxlIGZyb20gYXJnLgoJKG1wd19lbmRfcHJvZ3Jlc3MpOiBSZXBvcnQgc3BpbiBkZWxheXMgYnkgcG93ZXItb2YtdHdvLXNpemUKCWJ1Y2tldHMgaW5zdGVhZCBvZiBjb25zdGFudC1zaXplIGJ1Y2tldHMuCgoJKiBtcHcuYzogQ2xlYW4gdXAgZm9ybWF0dGluZywgdHlwZXMsIHJldHVybnMsIGV0Yy4KCShFTk9TWVMpOiBEZWZpbmUuCgkobXB3X2ZyZWFkLCBtcHdfZndyaXRlKTogRGVmaW5lLgoJKHNsZWVwKTogRGVmaW5lIGNvcnJlY3RseS4KCgkqIG1wdy5jOiBOZXcgY29kZSB0byBpbXBsZW1lbnQgY3Vyc29yIHNwaW5uaW5nIHN1cHBvcnQuCgkodW1hc2spOiBOZXcgZnVuY3Rpb24uCgkobXB3X2ZvcGVuLCBtcHdfZnNlZWssIHN0YXQsIGZzdGF0KTogQ2FsbCBQUk9HUkVTUy4KCgkqIG1wdy5jIChtcHdfYmFzZW5hbWUsIG1wd19taXhlZF9iYXNlbmFtZSk6IE5ldyBmdW5jdGlvbnMsIGZpbmQKCWJhc2VuYW1lcyBmb3IgTVBXIGFuZCBNUFcvVW5peCBmaWxlbmFtZXMuCgkobXB3X3NwZWNpYWxfaW5pdCk6IE5ldyBmdW5jdGlvbiwgY2FsbHMgTWFjc2J1ZyBpZiBkZXNpcmVkLgoKCSogbXB3LmM6IEFkZCBHUEwgbm90aWNlLgoJKG1wd2lmeV9maWxlbmFtZSk6IEFkZCBtb3JlIHRyYW5zZm9ybWF0aW9ucy4KCShtcHdfZm9wZW4pOiBDYWxsIG1wd2lmeV9maWxlbmFtZSBvbiBmaWxlIG5hbWVzLgoJKHJlbmFtZSk6IFJlbW92ZS4KCShjaGRpciwgZ2V0Y3dkKTogQWRkIHNpbXBsZSBkZWZpbml0aW9ucy4KCgkqIG1wdy5jOiBSYW5kb20gY2xlYW51cHMsIHJlbW92ZSB1bnVzZWQgY29kZSBiaXRzLgoJQWRkZWQgY29weSBvZiBzdHJlcnJvci5jIGZvciBnY2MncyB1c2UuCgkoc3RhdCwgZnN0YXQsIF9zdGF0KTogTmV3IHZlcnNpb25zIGJhc2VkIG9uIEd1aWRvIHZhbiBSb3NzdW0gY29kZS4KCgkqIG1wdy5jIChtcHdfZnNlZWspOiBNYWtlIGl0IHdvcmsgY29ycmVjdGx5IHdoZW4gZG9pbmcgU0VFS19DVVIuCgoJKiBtcHcuYyAoc3RhdCk6IFJlbW92ZSBoYWNrIGRlZmluaXRpb24sIGdldCBmcm9tIHN5cy9zdGF0LmguCgkoZm9yaywgdmZvcmssIGV0Yyk6IFByaW50IGVycm9yIG1lc3NhZ2VzIGlmIGNhbGxlZC4KCShnZXRydXNhZ2UsIHNicmssIGVudmlyb24sIGlzYXR0eSwgbGluaywgdXRpbWUsIG1rZGlyLCBybWRpciwKCXJlbmFtZSwgY2hvd24pOiBEZWZpbmUuCgoJKiBtcHctY29uZmlnLmluOiBOZXcgZmlsZSwgTVBXIHZlcnNpb24gb2YgY29uZmlndXJlLmluLgoJKiBtcHctbWFrZS5pbjogTmV3IGZpbGUsIE1QVyB2ZXJzaW9uIG9mIE1ha2VmaWxlLmluLgoJKiBtcHcuYzogTmV3IGZpbGUsIE1QVyBjb21wYXRpYmlsaXR5IHJvdXRpbmVzLgoKRnJpIE1hciAyNCAxNDoxMDozMCAxOTk1ICBKaW0gS2luZ2RvbiAgKGtpbmdkb25AbGlvdGguY3lnbnVzLmNvbSkKCgkqIGJhc2VuYW1lLmM6IEluY2x1ZGUgY29uZmlnLmggYmVmb3JlIGNoZWNraW5nIGZvciBORUVEX2Jhc2VuYW1lLgoKVGh1IE1hciAyMyAxOTowOTo1NCAxOTk1ICBKYXNvbiBNZXJyaWxsICA8amFzb25AcGh5ZGVhdXguY3lnbnVzLmNvbT4KCgkqIGZ1bmN0aW9ucy5kZWY6IEFkZCBERUZGVU5DIGZvciBiYXNlbmFtZS4KCgkqIGJhc2VuYW1lLmM6IE9ubHkgZGVmaW5lIGJhc2VuYW1lIGlmIE5FRURfYmFzZW5hbWUuCgpUaHUgTWFyIDE2IDEzOjM2OjA1IDE5OTUgIEphc29uIE1lcnJpbGwgIDxqYXNvbkBwaHlkZWF1eC5jeWdudXMuY29tPgoKCSogY29uZmlnLnRhYmxlOiBGaXggLS1lbmFibGUtc2hhcmVkIGxvZ2ljIGZvciBuYXRpdmUgYnVpbGRzLgoKTW9uIE1hciAxMyAxMTowNToxMSAxOTk1ICBKYXNvbiBNZXJyaWxsICA8amFzb25AcGh5ZGVhdXguY3lnbnVzLmNvbT4KCgkqIGNwbHVzLWRlbS5jIChkZW1hbmdsZV90ZW1wbGF0ZSk6IERlbWFuZ2xlIGJvb2wgbGl0ZXJhbHMgcHJvcGVybHkuCgpNb24gTWFyICA2IDIzOjU3OjI4IDE5OTUgIFN0dSBHcm9zc21hbiAgKGdyb3NzbWFuQGN5Z251cy5jb20pCgoJKiBzdHJ0b2wuYyBzdHJ0b3VsLmM6ICBSZXBsYWNlIHRoZXNlIHdpdGggbGVzcyBidWdneSB2ZXJzaW9ucyBmcm9tCglOZXRCU0QuICAoc3RydG91bCBpbiBwYXJ0aWN1bGFyIGNvdWxkbid0IGhhbmRsZSBiYXNlIDE2LikKCldlZCBNYXIgIDEgMTU6NTk6MDEgMTk5NSAgSWFuIExhbmNlIFRheWxvciAgPGlhbkBjeWdudXMuY29tPgoKCSogY29uZmlnL210LXZ4d29ya3M1IChIREVGSU5FUyk6IERlZmluZSBOT19TWVNfUEFSQU1fSC4KCgkqIGNsb2NrLmM6IElmIE5PX1NZU19QQVJBTV9IIGlzIGRlZmluZWQsIGRvbid0IGluY2x1ZGUKCTxzeXMvcGFyYW0uaD4uCgkqIGdldGN3ZC5jLCBnZXRwYWdlc2l6ZS5jLCBnZXRydW50aW1lLmM6IExpa2V3aXNlLgoKRnJpIEZlYiAxNyAxNTo0MDo1NSAxOTk1ICBJYW4gTGFuY2UgVGF5bG9yICA8aWFuQGN5Z251cy5jb20+CgoJKiBnZXRydW50aW1lLmMgKGdldF9ydW5fdGltZSk6IERvbid0IGFzc3VtZSB0aGF0IENMT0NLU19QRVJfU0VDIGlzCglhIG51bWJlcjsgQU5TSSBhcHBlYXJzIHRvIHBlcm1pdCBhbnkgZXhwcmVzc2lvbiwgaW5jbHVkaW5nIGEKCWZ1bmN0aW9uIGNhbGwuCgoJKiBjb25maWcudGFibGUgKCotKi12eHdvcmtzNSopOiBVc2UgbXQtdnh3b3JrczUgd2hlbiBjb25maWd1cmluZwoJeGliZXJ0eS4KCSogY29uZmlnL210LXZ4d29ya3M1OiBOZXcgZmlsZS4KClRodSBGZWIgIDkgMTQ6MTk6NDUgMTk5NSAgSWFuIExhbmNlIFRheWxvciAgPGlhbkBjeWdudXMuY29tPgoKCSogYmFzZW5hbWUuYyAoYmFzZW5hbWUpOiBDaGFuZ2UgYXJndW1lbnQgdG8gYmUgY29uc3QuCgpXZWQgRmViICA4IDE4OjA2OjUyIDE5OTUgIEphc29uIE1lcnJpbGwgIDxqYXNvbkBwaHlkZWF1eC5jeWdudXMuY29tPgoKCSogTWFrZWZpbGUuaW4gKGxuZWVkZWQtbGlzdCk6IERvbid0IHdvcnJ5IGFib3V0IHhtYWxsb2MuCgpTdW4gSmFuIDE1IDAwOjQwOjM2IDE5OTUgIEplZmYgTGF3ICAobGF3QHNuYWtlLmNzLnV0YWguZWR1KQoKCSogTWFrZWZpbGUuaW4gKGRpc3RjbGVhbik6IERlbGV0ZSB4aG9zdC1ta2ZyYWcuCgpUaHUgSmFuIDEyIDE2OjU0OjE4IDE5OTUgIEphc29uIE1lcnJpbGwgIDxqYXNvbkBwaHlkZWF1eC5jeWdudXMuY29tPgoKCSogTWFrZWZpbGUuaW4gKGxuZWVkZWQtbGlzdCk6IElmIGFsbG9jYS5vIGlzIG5lZWRlZCwgc28gaXMgeG1hbGxvYy5vLgoKV2VkIEphbiAxMSAyMjozOTo1NiAxOTk1ICBLZW4gUmFlYnVybiAgPHJhZWJ1cm5AY3Vqby5jeWdudXMuY29tPgoKCSogaGV4LmM6IE5ldyBmaWxlLgoJKiBNYWtlZmlsZS5pbiAoUkVRVUlSRURfT0ZJTEVTLCBDRklMRVMpOiBMaXN0IGl0LgoJKGhleC5vKTogQWRkIGRlcGVuZGVuY2llcy4KCgkqIGNwbHVzLWRlbS5jIChkZW1hbmdsZV9wcmVmaXgpOiBGb3IgR05VIHN0eWxlIGNvbnN0cnVjdG9yIGFuZAoJZGVzdHJ1Y3RvciBuYW1lcywgdHJ5IGRlbWFuZ2xpbmcgdGhlIHJlbWFpbmRlciBvZiB0aGUgc3RyaW5nLgoKV2VkIERlYyAyOCAwMDo0OToxNSAxOTk0ICBJYW4gTGFuY2UgVGF5bG9yICA8aWFuQHR3ZWVkbGVkdW1iLmN5Z251cy5jb20+CgoJKiB2YXNwcmludGYuYyAoaW50X3Zhc3ByaW50Zik6IE5ldyBzdGF0aWMgZnVuY3Rpb24uCgkodmFzcHJpbnRmKTogVXNlIGludF92YXNwcmludGYuICBSZW1vdmVzIGFzc3VtcHRpb24gdGhhdCB2YV9saXN0CglpcyBhc3NpZ25tZW50IGNvbXBhdGlibGUuCgpTYXQgTm92ICA1IDE5OjI5OjEyIDE5OTQgIEphc29uIE1lcnJpbGwgIChqYXNvbkBwaHlkZWF1eC5jeWdudXMuY29tKQoKCSogTWFrZWZpbGUuaW4gKExJQkNGTEFHUyk6IE5ldyB2YXJpYWJsZS4KCShGTEFHU19UT19QQVNTKTogUGFzcyBpdC4KCSguYy5vKTogVXNlIGl0LgoKVGh1IE5vdiAgMyAxOTowOTo0NyAxOTk0ICBLZW4gUmFlYnVybiAgPHJhZWJ1cm5AY3Vqby5jeWdudXMuY29tPgoKCSogZ2V0b3B0LmMsIGdldG9wdDEuYzogRG8gY29tcGlsZSB0aGVzZSBmdW5jdGlvbnMgdW5kZXIgTGludXgsCglzaW5jZSBtYW55IG5hdGl2ZSB2ZXJzaW9ucyBhcmUgYmFzZWQgb24gZ2xpYmMgYnV0IGFyZSBidWdneS4KCk1vbiBPY3QgMjQgMTU6MTY6NDYgMTk5NCAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGthbGVzc2luLmN5Z251cy5jb20+CgoJKiB2YXNwcmludGYuYzogIE1ha2UgJ2Zvcm1hdCcgYXJnIGJlIGNvbnN0LCB0byBhdm9pZCBhIG1pc21hdGNoCgl3aXRoIHByb3RvdHlwZSBpbiBHTlUgbGliYy4gIFN1cHBvcnQgc3RkYXJnLmggYXMgd2VsbCBhcyB2YXJhcmdzLmguCgpUdWUgT2N0IDExIDE3OjQ4OjI3IDE5OTQgIEphc29uIE1lcnJpbGwgIChqYXNvbkBwaHlkZWF1eC5jeWdudXMuY29tKQoKCSogTWFrZWZpbGUuaW4gKFJFUVVJUkVEX09GSUxFUyk6IEFkZCB2YXNwcmludGYuby4KCSogZnVuY3Rpb25zLmRlZjogUmVtb3ZlIHZhc3ByaW50Zi4KCldlZCBTZXAgMTQgMTc6MDQ6NTUgMTk5NCAgSWFuIExhbmNlIFRheWxvciAgKGlhbkBzYW5ndWluZS5jeWdudXMuY29tKQoKCSogeG1hbGxvYy5jIChmaXJzdF9icmVhayk6IE5ldyBzdGF0aWMgdmFyaWFibGUuCgkoeG1hbGxvY19zZXRfcHJvZ3JhbV9uYW1lKTogUmVjb3JkIHNicmsgKDApIGluIGZpcnN0X2JyZWFrLgoJKHhtYWxsb2MpOiBJZiBtZW1vcnkgYWxsb2NhdGlvbiBmYWlscywgdHJ5IHRvIHJlcG9ydCBob3cgbXVjaAoJbWVtb3J5IHdhcyBhbGxvY2F0ZWQgYnkgdGhlIHByb2dyYW0gdXAgdG8gdGhpcyBwb2ludC4KCSh4cmVhbGxvYyk6IExpa2V3aXNlLgoKU3VuIFNlcCAwNCAxNzo1ODoxMCAxOTk0ICBSaWNoYXJkIEVhcm5zaGF3IChyd2VAcGVnYXN1cy5lc3ByaXQuZWMub3JnKQoKCSogTWFrZWZpbGUuaW4gKEVSUk9SU19DQyk6IE5ldyB2YXJpYWJsZSwgZGVmYXVsdGVkIHRvICQoQ0MpLiAgVXNlIGl0Cgl3aGVuIGxpbmtpbmcgZHVtbXkuCgkqIGNvbmZpZy50YWJsZTogQWRkIGhvc3QgUklTQ2lYIE1ha2VmaWxlIGZyYWcuCgkqIGNvbmZpZy9taC1yaXNjaXg6IE5ldyBmaWxlLgoKVGh1IEF1ZyAyNSAxNzoyOTo0NCAxOTk0ICBJYW4gTGFuY2UgVGF5bG9yICAoaWFuQHNhbmd1aW5lLmN5Z251cy5jb20pCgoJKiBNYWtlZmlsZS5pbiAoRkxBR1NfVE9fUEFTUyk6IERlZmluZS4KCSgkKFJVTEUxKSk6IFVzZSAkKEZMQUdTX1RPX1BBU1MpLgoKV2VkIEF1ZyAyNCAxNzowODo0NyAxOTk0ICBJYW4gTGFuY2UgVGF5bG9yICAoaWFuQHNhbmd1aW5lLmN5Z251cy5jb20pCgoJKiB2YXNwcmludGYuYzogSW5jbHVkZSA8c3RyaW5nLmg+LgoJKHZhc3ByaW50Zik6IEFkZCBjYXN0cyB0byB2b2lkIGZvciB2YV9hcmcgdG8gYXZvaWQgZ2NjIHdhcm5pbmdzLgoJKiB4YXRleGl0LmM6IERlY2xhcmUgbWFsbG9jLgoKRnJpIEF1ZyAxOSAxNToyOToxMiAxOTk0ICBLdW5nIEhzdSAgKGt1bmdAbWV4aWNhbi5jeWdudXMuY29tKQoKCSogY3BsdXMtZGVtLmMgKGRlbWFuZ2xlX2FyZ3MpOiBGaXggYSBidWcgaW4gcHJldmlvdXMgcGF0Y2ggKHRoZQoJb25lIGJlbG93KS4KClRodSBBdWcgMTggMTQ6Mzc6MTQgMTk5NCAgS3VuZyBIc3UgIChrdW5nQG1leGljYW4uY3lnbnVzLmNvbSkKCgkqIGNwbHVzLWRlbS5jIChkZW1hbmdsZSBhcmdzKTogSGFuZGxlIEFSTSByZXBlYXQgZW5jb2Rpbmcgd2hlcmUKCXRoZSB0eXBlIGluZGV4IGlzIGdyZWF0ZXIgdGhhbiA5LgoKV2VkIEF1ZyAxNyAxNjoxMzo0OSAxOTk0ICBLdW5nIEhzdSAgKGt1bmdAbWV4aWNhbi5jeWdudXMuY29tKQoKCSogY3BsdXMtZGVtLmMgKGRlbWFuZ2xlX3F1YWxpZmllZCk6IGFjY2VwdCBvcHRpb25hbCAnXycgYmV0d2VlbgoJcXVhbGlmaWVkIG5hbWUuIFRoaXMgaXMgYmFlY2F1c2UgdGhlIHRlbXBsYXRlIG5hbWUgbWF5IGVuZCB3aXRoCgludW1lcmljIGFuZCBjYW4gbWl4ZWQgdXAgd2l0aCB0aGUgbGVuZ3RoIG9mIG5leHQgcXVhbGlmaWVkIG5hbWUuCgpXZWQgQXVnICAzIDA1OjUyOjE0IDE5OTQgIEQuIFYuIEhlbmtlbC1XYWxsYWNlICAoZ3VtYnlAY3lnbnVzLmNvbSkKCgkqIGNvbmZpZy9tdC1zdW5vczQ6IFVzZSBvdXIgc3RhbmRhcmQgbG9jYXRpb24gZm9yIGNyb3NzLWluY2x1ZGVzCglhbmQgY3Jvc3MtbGlicyB3aGVuIHRoZSB0YXJnZXQgaXMgYWxzbyBhICJob3N0IiBlbnZpcm9ubWVudCAoaWUgbm8KCW5ld2xpYjsgaW5jbHVkZXMgYW5kIHN1Y2ggZG9uJ3QgYmVsb25nIHRvIHVzKS4gIFRoaXMgaXMgc3BlY2lmaWMKCXRvIHRoZSBDeWdudXMgU3VwcG9ydCBlbnZpcm9ubWVudC4KClR1ZSBBdWcgIDIgMTU6MjU6MTIgMTk5NCAgS3VuZyBIc3UgIChrdW5nQG1leGljYW4uY3lnbnVzLmNvbSkKCgkqIGNwbHVzLWRlbS5jIChkZW1hbmdsZV90ZW1wbGF0ZSk6IGRlbWFuZ2xlIGFzIHh4eDwnUSc+IG5vdAoJeHh4PGNoPTgxPi4KCk1vbiBBdWcgIDEgMTc6MDI6NDggMTk5NCAgS3VuZyBIc3UgIChrdW5nQG1leGljYW4uY3lnbnVzLmNvbSkKCgkqIGNwbHVzLWRlbS5jIChtYWluKTogZmx1c2ggc3Rkb3V0IHRvIG1ha2UgcGlwZSB3b3JrLgoKU2F0IEp1bCAxNiAxMjo1NjozMiAxOTk0ICBTdGFuIFNoZWJzICAoc2hlYnNAYW5kcm9zLmN5Z251cy5jb20pCgoJKiBjb25maWcudGFibGUgKCotKi1jeHV4NyopOiAgUmVjb2duaXplLgoJKiBmbG9hdGZvcm1hdC5jIChmbG9hdGZvcm1hdF9tODgxMTBfZXh0KSBbSEFSUklTX0ZMT0FUX0ZPUk1BVF06CglIYXJyaXMtc3BlY2lmaWMgZmxvYXQgZm9ybWF0LgoJKiBjb25maWcvbWgtY3h1eDc6IE5ldyBmaWxlLgoKV2VkIEp1biAyOSAwMDoyNjoxNyAxOTk0ICBQZXRlciBTY2hhdWVyICAocGVzQHJlZ2VudC5lLXRlY2huaWsudHUtbXVlbmNoZW4uZGUpCgoJKiBjcGx1cy1kZW0uYyAoZGVtYW5nbGVfdGVtcGxhdGUpOiAgTWFrZSBzdXJlIHRoYXQgdGhlIHJlc3VsdCBvZgoJY29uc3VtZV9jb3VudCBkb2Vzbid0IGluZGV4IGJleW9uZCB0aGUgZW5kIG9mIHRoZSBzdHJpbmcuCgpNb24gSnVuIDIwIDIzOjU0OjM3IDE5OTQgIFBldGVyIFNjaGF1ZXIgIChwZXNAcmVnZW50LmUtdGVjaG5pay50dS1tdWVuY2hlbi5kZSkKCgkqIGNwbHVzLWRlbS5jIChnbnVfc3BlY2lhbCk6ICBIYW5kbGUgdnRhYmxlIG1hbmdsaW5nIG9mIGdjYy0yLjQuNSBhbmQKCWVhcmxpZXIuIEltcHJvdmUgdGVzdCBmb3IgbmV3IHZ0YWJsZSBtYW5nbGluZy4gQ2hhbmdlIG91dHB1dCBiYWNrCgl0byBgdmlydHVhbCB0YWJsZScuCgpNb24gSnVuIDIwIDExOjM3OjMwIDE5OTQgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5Ac2FuZ3VpbmUuY3lnbnVzLmNvbSkKCgkqIG9ic3RhY2suYzogQWx3YXlzIGNvbXBpbGUgdGhpcyBjb2RlLCBldmVuIGlmIHVzaW5nIHRoZSBHTlUKCWxpYnJhcnkuICBBdm9pZHMgcHJvYmxlbXMgd2l0aCByZWxhdGl2ZWx5IHJlY2VudCBiaW5hcnkKCWluY29tcGF0aWJpbGl0eS4KClRodSBKdW4gMTYgMTc6NTQ6MDEgMTk5NCAgSWFuIExhbmNlIFRheWxvciAgKGlhbkB0d2VlZGxlZHVtYi5jeWdudXMuY29tKQoKCSogY3BsdXMtZGVtLmM6IEluY2x1ZGUgbGliaWJlcnR5LmguCgkoeG1hbGxvYywgeHJlYWxsb2MsIGZyZWUpOiBEb24ndCBkZWNsYXJlLgoJKHN0cnN0cik6IERvbid0IGRlY2xhcmUgcGFyYW1ldGVycy4KCSh4bWFsbG9jLCB4cmVhbGxvYyk6IERvbid0IGRlZmluZS4KCShsb25nX29wdGlvbnMpOiBBZGQgbm8tc3RyaXAtdW5kZXJzY29yZXMuCgkobWFpbik6IENhbGwgeG1hbGxvY19zZXRfcHJvZ3JhbV9uYW1lLiAgUGFzcyBuIGluIHNob3J0IG9wdGlvbnMgdG8KCWdldG9wdF9sb25nLiAgSGFuZGxlIG9wdGlvbiAnbicgdG8gbm90IHN0cmlwIHVuZGVyc2NvcmVzLgoJKHVzYWdlKTogTWVudGlvbiAtbiBhbmQgLS1uby1zdHJpcC11bmRlcnNjb3Jlcy4KClN1biBKdW4gMTIgMDE6Mzc6MDkgMTk5NCAgSmFzb24gTWVycmlsbCAgKGphc29uQGRlbmViLmN5Z251cy5jb20pCgoJKiBjcGx1cy1kZW0uYyAoZGVtYW5nbGVfdGVtcGxhdGUpOiBTZXBhcmF0ZSBjb25zZWN1dGl2ZSA+J3Mgd2l0aCBhCglzcGFjZS4KCShnbnVfc3BlY2lhbCk6IERlbWFuZ2xlIHRlbXBsYXRlIGFuZCBxdWFsaWZpZWQgbmFtZXMgaW4gYSB2dGFibGUgbmFtZS4KCkZyaSBNYXkgMjcgMTI6Mjc6NTIgMTk5NCAgS2VuIFJhZWJ1cm4gIChyYWVidXJuQGN1am8uY3lnbnVzLmNvbSkKCglGcm9tIGdhcy0yLjMgYW5kIGJpbnV0aWxzLTIuNCBuZXQgcmVsZWFzZXM6CgoJV2VkIE1heSAxMSAyMjozMjowMCAxOTk0ICBESiBEZWxvcmllIChkakBjdHJvbi5jb20pCgoJKiBtYWtlZmlsZS5kb3M6IFtuZXddIE1ha2VmaWxlIGZvciBkb3MvZ28zMgoJKiBjb25maWd1cmUuYmF0OiB1cGRhdGUgZm9yIGxhdGVzdCBmaWxlcwoJKiBtc2Rvcy5jOiByZW1vdmUgc29tZSBmdW5jdGlvbnMgbm93IGluIGxpYmMuYQoKRnJpIE1heSAyMCAxODo1MzozMiAxOTk0ICBQZXIgQm90aG5lciAgKGJvdGhuZXJAa2FsZXNzaW4uY3lnbnVzLmNvbSkKCgkqIGNwbHVzLWRlbS5jIChnbnVfc3BlY2lhbCk6ICBSZWNvZ25pemUgdGh1bmtzLCBhcyB3ZWxsIGFzCgl0aGUgbmV3IG5hbWluZyBzdHlsZSBmb3IgdnRhYmxlcyAod2hlbiAtZnZ0YWJsZS10aHVua3MpLgoKV2VkIE1heSAxOCAxMzozNDowNiAxOTk0ICBJYW4gTGFuY2UgVGF5bG9yICAoaWFuQHR3ZWVkbGVkdW1iLmN5Z251cy5jb20pCgoJKiBNYWtlZmlsZS5pbiAoWFRSQUZMQUdTKTogRG9uJ3QgZGVmaW5lLgoJKC5jLm8sIGR1bW15Lm8pOiBEb24ndCB1c2UgWFRSQUZMQUdTLgoJKCQoUlVMRTEpKTogRG9uJ3QgcGFzcyBYVFJBRkxBR1MgZG93biBpbiByZWN1cnNpdmUgY2FsbC4KCkZyaSBNYXkgMTMgMTY6MDI6MTIgMTk5NCAgSmltIEtpbmdkb24gIChraW5nZG9uQGxpb3RoLmN5Z251cy5jb20pCgoJKiB2YXNwcmludGYuYzogTmV3IGZpbGUuCgkqIE1ha2VmaWxlLmluLCBmdW5jdGlvbnMuZGVmOiBBZGQgaXQuCgpGcmkgTWF5IDEzIDE2OjIwOjI4IDE5OTQgIEphc29uIE1lcnJpbGwgIChqYXNvbkBkZW5lYi5jeWdudXMuY29tKQoKCSogY3BsdXMtZGVtLmMgKGRlbWFuZ2xlX2Z1bmRfdHlwZSk6IEdyb2sgYm9vbC4KCkZyaSBNYXkgIDYgMTQ6NDQ6MjEgMTk5NCAgU3RldmUgQ2hhbWJlcmxhaW4gIChzYWNAY3lnbnVzLmNvbSkKCgkqIGNvbmZpZy50YWJsZTogQWRkIGdvMzIKCSogY29uZmlnL21oLWdvMzI6IE5ldyB0ZW1wbGF0ZS4KCkZyaSBNYXkgIDYgMTE6MDE6NTkgMTk5NCAgRC4gVi4gSGVua2VsLVdhbGxhY2UgIChndW1ieUBydGwuY3lnbnVzLmNvbSkKCgkqIGNvbmZpZy50YWJsZSwgY29uZmlnL210LXN1bm9zNDogY29uZmlnIGZvciB3aGVuIHN1bjQgaXMgY3Jvc3MgdGFyZ2V0LgoKTW9uIEFwciAxMSAwMDo1NDozMyAxOTk0ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCgoJKiBnZXRvcHQuYyBbbm90IF9fR05VX0xJQlJBUllfX10gW19fR0NDX19dIFtub3QgX19TVERDX19dOgoJRGVjbGFyZSBzdHJsZW4gdG8gcmV0dXJuIGludC4gIERvbid0IGluY2x1ZGUgc3RkZGVmLmguCgpGcmkgQXByICAxIDAwOjM4OjE3IDE5OTQgIEppbSBXaWxzb24gICh3aWxzb25AbW9sZS5nbnUuYWkubWl0LmVkdSkKCgkqIGdldG9wdC5jOiBEZWxldGUgdXNlIG9mIElOX0dDQyB0byBjb250cm9sIHdoZXRoZXIKCXN0ZGRlZi5oIG9yIGdzdGRkZWYuaCBpcyBpbmNsdWRlZC4KClRodSBBcHIgMTQgMTQ6MDA6NTYgMTk5NCAgS3VuZyBIc3UgIChrdW5nQG1leGljYW4uY3lnbnVzLmNvbSkKCgkqIGNwbHVzLWRlbS5jIChkZW1hbmdsZV9zaWduYXR1cmUpOiBGaXggYSBidWcgaW4gdGVtcGxhdGUgZnVuY3Rpb24KCXR5cGUgbnVtYmVyaW5nLgoKV2VkIEFwciAxMyAxNzoyMzowMyAxOTk0ICBLdW5nIEhzdSAgKGt1bmdAbWV4aWNhbi5jeWdudXMuY29tKQoKCSogY3BsdXMtZGVtLmMgKGRlbWFuZ2xlX3NpZ25hdHVyZSk6IEZpeCB0ZW1wbGF0ZSBmdW5jdGlvbiB3aXRoIGFybQoJc3R5bGUgYXJndW1lbnQgdHlwZSBudW1iZXIsIFRuLgoKV2VkIEFwciAxMyAxNzoxMToxNSAxOTk0ICBKYXNvbiBNZXJyaWxsICAoamFzb25AZGVuZWIuY3lnbnVzLmNvbSkKCgkqIGNwbHVzLWRlbS5jIChvcHRhYmxlKTogQWRkIG5ld1tdIGFuZCBkZWxldGVbXS4KCkZyaSBBcHIgIDggMTE6MjE6NDIgMTk5NCAgSmltIEtpbmdkb24gIChraW5nZG9uQGRlbmViLmN5Z251cy5jb20pCgoJKiBhcmd2LmMgKGJ1aWxkYXJndik6IERvbid0IHByb2R1Y2UgZW1wdHkgYXJndW1lbnQganVzdCBiZWNhdXNlCgl0aGVyZSBpcyB0cmFpbGluZyB3aGl0ZXNwYWNlLgoKV2VkIEFwciAgNiAxMTo0MjoxNCAxOTk0ICBLdW5nIEhzdSAgKGt1bmdAbWV4aWNhbi5jeWdudXMuY29tKQoKCSogY3BsdXMtZGVtLmMgKGRlbWFuZ2xlX3RlbXBsYXRlKTogZml4ICdRJyBxdWFsaWZpZWQgbmFtZSBidWcuCglIYW5kbGUgJ3AnIHNhbWUgYXMgJ1AnLgoJKiBjcGx1cy1kZW0uYyAoZG9fdHlwZSk6IEhhbmRsZSAncCcgc2FtZSBhcyAnUCcuCgpTYXQgTWFyIDI2IDEyOjAwOjEzIDE5OTQgIFBldGVyIFNjaGF1ZXIgIChwZXNAcmVnZW50LmUtdGVjaG5pay50dS1tdWVuY2hlbi5kZSkKCgkqIGZsb2F0Zm9ybWF0LmMgKGdldF9maWVsZCwgcHV0X2ZpZWxkKTogIEZpeCBvZmYgYnkgb25lIGVycm9yIGluCglsaXR0bGUgZW5kaWFuIGNhc2UuCgpUaHUgTWFyIDI0IDEwOjQwOjE5IDE5OTQgIEppbSBLaW5nZG9uICAoa2luZ2RvbkBsaW90aC5jeWdudXMuY29tKQoKCSogZmxvYXRmb3JtYXQuYyAoZmxvYXRmb3JtYXRfZnJvbV9kb3VibGUpOiBQYXNzIHVuc2lnbmVkIGNoYXIgKiwKCW5vdCBjaGFyICosIHRvIHB1dF9maWVsZC4KCkZyaSBNYXIgMTggMTI6MzQ6MzMgMTk5NCAgUGVyIEJvdGhuZXIgIChib3RobmVyQGthbGVzc2luLmN5Z251cy5jb20pCgoJKiBtZW1tb3ZlLmM6ICBSZS13cm90ZTsgIHBsYWNlZCBpbiBwdWJsaWMgZG9tYWluLgoKV2VkIE1hciAxNiAxMDozMzowNyAxOTk0ICBKaW0gS2luZ2RvbiAgKGtpbmdkb25AbGlvdGguY3lnbnVzLmNvbSkKCgkqIGNwbHVzLWRlbS5jIChkZW1hbmdsZV9wcmVmaXgpOiBJZiBBUk0gZGVtYW5nbGluZywgZG9uJ3QgdHJlYXQKCV9fUSogYXMgYSBjb25zdHJ1Y3Rvci4KCk1vbiBNYXIgMTQgMTI6MjY6MDIgMTk5NCAgSWFuIExhbmNlIFRheWxvciAgKGlhbkBjeWdudXMuY29tKQoKCSogaWVlZS1mbG9hdC5jOiBSZW1vdmVkOyBubyBsb25nZXIgdXNlZC4KCSogTWFrZWZpbGUuaW46IENoYW5nZWQgYWNjb3JkaW5nbHkuCgpNb24gTWFyICA3IDEyOjI4OjE3IDE5OTQgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AdHdlZWRsZWR1bWIuY3lnbnVzLmNvbSkKCgkqIGZsb2F0Zm9ybWF0LmMgKGdldF9maWVsZCk6IFJlbW92ZWQgdW51c2VkIGxvY2FsIHZhcmlhYmxlIGkuCgkocHV0X2ZpZWxkKTogUmVtb3ZlZCB1bnVzZWQgbG9jYWwgdmFyaWFibGUgaS4KClN1biBGZWIgMjcgMjE6NTA6MTEgMTk5NCAgSmltIEtpbmdkb24gIChraW5nZG9uQGRlbmViLmN5Z251cy5jb20pCgoJKiBmbG9hdGZvcm1hdC5jOiBOZXcgZmlsZSwgaW50ZW5kZWQgdG8gcmVwbGFjZSBpZWVlLWZsb2F0LmMuCgkqIE1ha2VmaWxlLmluOiBDaGFuZ2UgYWNjb3JkaW5nbHkuCgpUaHUgRmViIDI0IDExOjUxOjEyIDE5OTQgIERhdmlkIEouIE1hY2tlbnppZSAgKGRqbUBydGwuY3lnbnVzLmNvbSkKCgkqIGdldG9wdC5jOiBSZW1vdmUgI2lmZGVmIEdFVE9QVF9DT01QQVQgYW5kICNpZiAwIGNvZGUuCgkgKF9nZXRvcHRfaW5pdGlhbGl6ZSk6IE5ldyBmdW5jdGlvbiwgYnJva2VuIG91dCBvZiBfZ2V0b3B0X2ludGVybmFsLgoJIChfZ2V0b3B0X2ludGVybmFsKToKCSBJZiBsb25nX29ubHkgYW5kIHRoZSBBUkdWLWVsZW1lbnQgaGFzIHRoZSBmb3JtICItZiIsIHdoZXJlIGYgaXMKCSBhIHZhbGlkIHNob3J0IG9wdGlvbiwgZG9uJ3QgY29uc2lkZXIgaXQgYW4gYWJicmV2aWF0ZWQgZm9ybSBvZgoJIGEgbG9uZyBvcHRpb24gdGhhdCBzdGFydHMgd2l0aCBmLiAgT3RoZXJ3aXNlIHRoZXJlIHdvdWxkIGJlIG5vCgkgd2F5IHRvIGdpdmUgdGhlIC1mIHNob3J0IG9wdGlvbi4KClRodSBGZWIgMTAgMTQ6NDQ6MTYgMTk5NCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQoKCSogZ2V0b3B0LmMgW25vdCBfX0dOVV9MSUJSQVJZX19dIFtfX0dOVUNfX10gW25vdCBJTl9HQ0NdOgoJVGVzdCBqdXN0IF9fU1REQ19fLCBub3QgZW1hY3MuCgpXZWQgRmViICA5IDAwOjE0OjAwIDE5OTQgIFJpY2hhcmQgU3RhbGxtYW4gIChybXNAbW9sZS5nbnUuYWkubWl0LmVkdSkKCgkqIGdldG9wdC5jIFtub3QgX19HTlVfTElCUkFSWV9fXSBbX19HTlVDX19dIFtub3QgSU5fR0NDXQoJW2VtYWNzXSBbbm90IF9fU1REQ19fXTogRG9uJ3QgaW5jbHVkZSBzdGRkZWYuaC4gIERvbid0IGRlY2xhcmUgc3RybGVuLgoKRnJpIERlYyAyNCAxOTo0MzowMCAxOTkzICBOb2FoIEZyaWVkbWFuICAoZnJpZWRtYW5AbnV0cmltYXQuZ251LmFpLm1pdC5lZHUpCgoJKiBnZXRvcHQuYyAoX05PX1BST1RPKTogRGVmaW5lIGJlZm9yZSBjb25maWcuaCBpcyBpbmNsdWRlZC4KCk1vbiBTZXAgMjAgMTU6NTk6MDMgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIGdldG9wdC5jLCBnZXRvcHQxLmMgW2VtYWNzIHx8IENPTkZJR19CUk9LRVRTXTogSW5jbHVkZQoJPGNvbmZpZy5oPiBvbmx5IHVuZGVyIHRoZXNlLCBlbHNlICJjb25maWcuaCIuCgpUaHUgQXVnIDEyIDE4OjE2OjQ5IDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBnZXRvcHQuYywgZ2V0b3B0MS5jIFtIQVZFX0NPTkZJR19IXTogSW5jbHVkZQoJPGNvbmZpZy5oPiBpbnN0ZWFkIG9mICJjb25maWcuaCIuCgpTdW4gRmViIDIwIDE3OjE3OjAxIDE5OTQgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AbGlzYS5jeWdudXMuY29tKQoKCSogY29uY2F0LmM6IENoZWNrIEFOU0lfUFJPVE9UWVBFUyByYXRoZXIgdGhhbiBfX1NURENfXyB0byBkZWNpZGUKCXdoZXRoZXIgdG8gdXNlIHByb3RvdHlwZXMgb3Igbm90LgoJKiBzdHJlcnJvci5jIChjb25zdCk6IE5ldmVyIHVuZGVmaW5lOyBsZXQgYW5zaWRlY2wuaCBoYW5kbGUgaXQuCgkqIHN0cnNpZ25hbC5jIChjb25zdCk6IExpa2V3aXNlLgoKVGh1IEZlYiAxNyAxMzoyNzozNSAxOTk0ICBJYW4gTGFuY2UgVGF5bG9yICAoaWFuQHR3ZWVkbGVkdW1iLmN5Z251cy5jb20pCgoJKiB4YXRleGl0LmMgKF94ZXhpdF9jbGVhbnVwKTogRGVjbGFyZSBhcyBleHRlcm47IGRvbid0IGluaXRpYWxpemUuCglNZXJnaW5nIGNvbW1vbiBhbmQgaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG5lZWQgbm90IGJlIHN1cHBvcnRlZCBieQoJQU5TSSBDIGNvbXBpbGVycy4KCSh4YXRleGl0KTogSW5pdGlhbGl6ZSBfeGV4aXRfY2xlYW51cCBpZiBub3QgYWxyZWFkeSBzZXQuCgkqIHhleGl0LmM6IENvbW1lbnQgZml4LgoKV2VkIEZlYiAxNiAwMToxNTozNiAxOTk0ICBJYW4gTGFuY2UgVGF5bG9yICAoaWFuQHR3ZWVkbGVkdW1iLmN5Z251cy5jb20pCgoJKiB4bWFsbG9jLmM6IERvbid0IGRlY2xhcmUgeGV4aXQ7IGl0J3MgZGVjbGFyZWQgaW4gbGliaWJlcnR5LmguCgkoeHJlYWxsb2MpOiBJZiBvbGRtZW0gaXMgTlVMTCwgYWxsb2NhdGUgd2l0aCBtYWxsb2MsIHJhdGhlciB0aGFuCglhc3N1bWluZyB0aGF0IHJlYWxsb2Mgd29ya3MgY29ycmVjdGx5LgoKVHVlIEZlYiAxNSAwOToyNjoxNiAxOTk0ICBQZXRlciBTY2hhdWVyICAocGVzQHJlZ2VudC5lLXRlY2huaWsudHUtbXVlbmNoZW4uZGUpCgoJKiBjb25jYXQuYywgaWVlZS1mbG9hdC5jOiAgUmVwbGFjZSBpbmNsdXNpb24gb2YgPHN0cmluZy5oPgoJd2l0aCBleHBsaWNpdCBmdW5jdGlvbiBkZWNsYXJhdGlvbnMsIGFzIHJlY29tbWVuZGVkIGJ5IElhbiBUYXlsb3IuCgpTYXQgRmViIDEyIDEwOjMxOjExIDE5OTQgIERhdmlkIEouIE1hY2tlbnppZSAgKGRqbUBydGwuY3lnbnVzLmNvbSkKCgkqIHhtYWxsb2MuYyAoeG1hbGxvYywgeHJlYWxsb2MpOiBVc2UgUFRSIGFuZCBzaXplX3QgdGhyb3VnaG91dC4KCShtYWxsb2MsIHJlYWxsb2MpOiBEZWNsYXJlLgoKVGh1IEZlYiAxMCAxNzowODoxOSAxOTk0ICBJYW4gTGFuY2UgVGF5bG9yICAoaWFuQHR3ZWVkbGVkdW1iLmN5Z251cy5jb20pCgoJKiBhcmd2LmMsIGJhc2VuYW1lLmM6IEluY2x1ZGUgYW5zaWRlY2wuaCBhbmQgbGliaWJlcnR5LmguCgkqIGNvbmNhdC5jLCBmZG1hdGNoLmMsIGdldHJ1bnRpbWUuYywgc3BhY2VzLmM6IExpa2V3aXNlLgoJKiBzdHJlcnJvci5jLCBzdHJzaWduYWwuYywgeGF0ZXhpdC5jLCB4ZXhpdC5jOiBMaWtld2lzZS4KCSogeG1hbGxvYy5jOiBMaWtld2lzZS4KCSogY29uY2F0LmM6IERvbid0IGRlY2xhcmUgeG1hbGxvYy4gIElmIF9fU1REQ19fLCB1c2UgPHN0ZGFyZy5oPgoJbWFjcm9zLCBub3QgPHZhcmFyZ3MuaD4gbWFjcm9zLgoJKiBzcGFjZXMuYyAoc3BhY2VzKTogTWFrZSByZXR1cm4gdHlwZSBjb25zdC4gIERvbid0IGNyYXNoIGlmCgltYWxsb2MgcmV0dXJucyBOVUxMLgoJKiBzdHJlcnJvci5jIChzdHJ1Y3QgZXJyb3JfaW5mbyk6IE1ha2UgbmFtZSBhbmQgbXNnIGZpZWxkcyBjb25zdC4KCShlcnJvcl9uYW1lcyk6IE1ha2UgY29uc3QuCgkoc3RyZXJybm8pOiBNYWtlIGNvbnN0LgoJKHN0cnRvZXJybm8pOiBNYWtlIGFyZ3VtZW50IGNvbnN0LgoJKiBzdHJzaWduYWwuYyAoc3RydWN0IHNpZ25hbF9pbmZvKTogTWFrZSBuYW1lIGFuZCBtc2cgZmllbGRzCgljb25zdC4KCShzaWduYWxfbmFtZXMsIHN5c19zaWdsaXN0KTogTWFrZSBjb25zdC4KCShzdHJzaWduYWwsIHN0cnNpZ25vKTogTWFrZSBjb25zdC4KCShzdHJ0b3NpZ25vKTogTWFrZSBhcmd1bWVudCBjb25zdC4KCSogeGF0ZXhpdC5jOiBEZWNsYXJlIHBhcmFtZXRlciB0eXBlcy4KCSogeG1hbGxvYy5jIChuYW1lKTogTWFrZSBjb25zdC4KCSh4bWFsbG9jX3NldF9wcm9ncmFtX25hbWUpOiBNYWtlIGFyZ3VtZW50IGNvbnN0LgoJKiBNYWtlZmlsZS5pbiAoSU5DRElSKTogRGVmaW5lLgoJKC5jLm8pOiBVc2UgJChJTkNESVIpLgoJKGR1bW15Lm8pOiBMaWtld2lzZS4KCShhcmd2Lm8sIGJhc2VuYW1lLm8pOiBOZXcgdGFyZ2V0czsgZGVwZW5kIG9uIGxpYmliZXJ0eS5oLgoJKGNvbmNhdC5vLCBmZG1hdGNoLm8sIGdldHJ1bnRpbWUubywgc3BhY2VzLm8pOiBMaWtld2lzZS4KCShzdHJlcnJvci5vLCBzdHJzaWduYWwubywgeGF0ZXhpdC5vLCB4ZXhpdC5vKTogTGlrZXdpc2UuCgkoeG1hbGxvYy5vKTogTGlrZXdpc2UuCgkoY3BsdXMtZGVtLm8pOiBOZXcgdGFyZ2V0OyBkZXBlbmQgb24gZGVtYW5nbGUuaC4KCShnZXRvcHQubywgZ2V0b3B0MS5vKTogTmV3IHRhcmdldHM7IGRlcGVuZCBvbiBnZXRvcHQuaC4KCShpZWVlLWZsb2F0Lm8pOiBOZXcgdGFyZ2V0OyBkZXBlbmQgb24gaWVlZS1mbG9hdC5oLgoJKG9ic3RhY2subyk6IE5ldyB0YXJnZXQ7IGRlcGVuZCBvbiBvYnN0YWNrLmguCgpUdWUgRmViICA4IDA1OjI5OjA4IDE5OTQgIERhdmlkIEouIE1hY2tlbnppZSAgKGRqbUB0aGVwdWIuY3lnbnVzLmNvbSkKCglIYW5kbGUgb2JzdGFja19jaHVua19hbGxvYyByZXR1cm5pbmcgTlVMTC4gIFRoaXMgYWxsb3dzCglvYnN0YWNrcyB0byBiZSB1c2VkIGJ5IGxpYnJhcmllcywgd2l0aG91dCBmb3JjaW5nIHRoZW0KCXRvIGNhbGwgZXhpdCBvciBsb25nam1wLgoJKiBvYnN0YWNrLmMgKF9vYnN0YWNrX2JlZ2luLCBfb2JzdGFja19iZWdpbl8xLCBfb2JzdGFja19uZXdjaHVuayk6CglJZiBDQUxMX0NIVU5LRlVOIHJldHVybnMgTlVMTCwgc2V0IGFsbG9jX2ZhaWxlZCwgZWxzZSBjbGVhciBpdC4KCShfb2JzdGFja19iZWdpbiwgX29ic3RhY2tfYmVnaW5fMSk6IFJldHVybiAxIGlmIHN1Y2Nlc3NmdWwsIDAgaWYgbm90LgoKVHVlIEZlYiAgOCAwMDozMjoyOCAxOTk0ICBQZXRlciBTY2hhdWVyICAocGVzQHJlZ2VudC5lLXRlY2huaWsudHUtbXVlbmNoZW4uZGUpCgoJKiBjb25jYXQuYywgaWVlZS1mbG9hdC5jOiAgSW5jbHVkZSA8c3RyaW5nLmg+LgoKU3VuIEZlYiAgNiAyMToyODo0NiAxOTk0ICBEYXZpZCBKLiBNYWNrZW56aWUgIChkam1AdGhlcHViLmN5Z251cy5jb20pCgoJKiB4bWFsbG9jLmMgKHhtYWxsb2Nfc2V0X3Byb2dyYW1fbmFtZSk6IE5ldyBmdW5jdGlvbi4KCSh4bWFsbG9jLCB4cmVhbGxvYyk6IEluY2x1ZGUgdGhlIG5hbWUgaW4gdGhlIGVycm9yIG1lc3NhZ2UsIGlmIHNldC4KCgkqIFJlcGxhY2UgYXRleGl0LmMgd2l0aCB4YXRleGl0LmMuCgkqIE1ha2VmaWxlLmluIChDRklMRVMpLCBmdW5jdGlvbnMuZGVmOiBDaGFuZ2UgcmVmZXJlbmNlcy4KClNhdCBGZWIgIDUgMTQ6MDI6MzIgMTk5NCAgU3RhbiBTaGVicyAgKHNoZWJzQGFuZHJvcy5jeWdudXMuY29tKQoKCSogZ2V0cnVudGltZS5jIChnZXRfcnVuX3RpbWUpOiBVc2UgZ2V0cnVzYWdlIG9yIHRpbWVzIGlmCglIQVZFX0dFVFJVU0FHRSBvciBIQVZFX1RJTUVTIGFyZSBkZWZpbmVkLgoKRnJpIEZlYiAgNCAxNTo0OTozOCAxOTk0ICBEYXZpZCBKLiBNYWNrZW56aWUgIChkam1AdGhlcHViLmN5Z251cy5jb20pCgoJKiBhdGV4aXQuYzogTmV3IGZpbGUuCgkqIE1ha2VmaWxlLmluIChDRklMRVMpLCBmdW5jdGlvbnMuZGVmOiBBZGQgaXQuCgkqIHhleGl0LmM6IE5ldyBmaWxlLgoJKiBNYWtlZmlsZS5pbiAoQ0ZJTEVTLCBSRVFVSVJFRF9PRklMRVMpOiBBZGQgaXQuCgkqIHhtYWxsb2MuYyAoeG1hbGxvYywgeHJlYWxsb2MpOiBDYWxsIHhleGl0IGluc3RlYWQgb2YgZXhpdC4KCUNoYW5nZSByZXF1ZXN0IGZvciAwIGJ5dGVzIGludG8gcmVxdWVzdCBmb3IgMSBieXRlLgoKV2VkIEZlYiAgMiAxMTozNjo0OSAxOTk0ICBJYW4gTGFuY2UgVGF5bG9yICAoaWFuQHR3ZWVkbGVkdW1iLmN5Z251cy5jb20pCgoJKiB4bWFsbG9jLmMgKHhtYWxsb2MsIHhyZWFsbG9jKTogUHJpbnQgc2l6ZSB1c2luZyAlbHUsIGFuZCBjYXN0IHRvCgl1bnNpZ25lZCBsb25nLCB0byBhdm9pZCB3YXJuaW5ncy4KCkZyaSBKYW4gMjggMTc6NDk6MDYgMTk5NCAgS2VuIFJhZWJ1cm4gIChyYWVidXJuQGN1am8uY3lnbnVzLmNvbSkKCgkqIGR1bW15LmM6IERvbid0IGluY2x1ZGUgdGltZS5oIGV2ZXI7IGFsd2F5cyBkZWZpbmUgY2xvY2tfdCBhcwoJInVuc2lnbmVkIGxvbmciLiAgVW50aWwgZ2NjL2ZpeGluY2x1ZGVzIGVuc3VyZXMgdGhhdCBjbG9ja190CglleGlzdHMsIF9fU1REQ19fIGlzbid0IGEgc3VmZmljaWVudCB0ZXN0LiAgQW5kIGlmIGNsb2NrKCkgZG9lc24ndAoJZXhpc3QsIGNsb2NrX3QgcHJvYmFibHkgZG9lc24ndCBlaXRoZXIuCgpNb24gSmFuIDI0IDExOjUyOjMxIDE5OTQgIFN0YW4gU2hlYnMgIChzaGVic0BhbmRyb3MuY3lnbnVzLmNvbSkKCgkqIGNsb2NrLmMsIGdldHJ1bnRpbWUuYzogTmV3IGZpbGVzLgoJKiBNYWtlZmlsZS5pbjogQWRkIHRvIGZpbGUgbGlzdHMuCgkqIGZ1bmN0aW9ucy5kZWYgKGNsb2NrKTogQWRkIHRvIGxpc3QuCgkqIGR1bW15LmMgKHRpbWUuaCk6IEFkZCBpZiBfX1NURENfXy4KCShjbG9ja190KTogI2RlZmluZSBhcyAidW5zaWduZWQgbG9uZyIgaWYgbm90IF9fU1REQ19fLgoKVHVlIEphbiAxMSAxMToyNzo0NCAxOTk0ICBJYW4gTGFuY2UgVGF5bG9yICAoaWFuQHR3ZWVkbGVkdW1iLmN5Z251cy5jb20pCgoJKiBzdHJ0b2QuYzogRGVjbGFyZSBhdG9mLiAgRnJvbSBlZGxlckBqYW4udWx0cmEubnl1LmVkdSAoSmFuCglFZGxlcikuCgpUdWUgRGVjIDI4IDE0OjE3OjMwIDE5OTMgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AdHdlZWRsZWR1bWIuY3lnbnVzLmNvbSkKCgkqIE1ha2VmaWxlLmluIChlcnJvcnMpOiBVc2UgQ0ZMQUdTIGFzIHdlbGwgYXMgTERGTEFHUyB3aGVuCglsaW5raW5nLgoKRnJpIERlYyAxNyAxMjoyNjowNyAxOTkzICBLdW5nIEhzdSAgKGt1bmdAY2lyZGFuLmN5Z251cy5jb20pCgoJKiBjcGx1cy1kZW0uYyAoZGVtYW5nbGVfYXJtX3B0KTogTmV3IGZ1bmN0aW9uLiAgQ29tbW9uIGNvZGUKCWZvciBBUk0gdGVtcGxhdGUgZGVtYW5nbGluZy4KCSogY3BsdXMtZGVtLmMgKGRlbWFuZ2xlX2NsYXNzX25hbWUpOiBVc2UgZGVtYW5nbGVfYXJtX3B0LgoJKiBjcGx1cy1kZW0uYyAoZGVtYW5nbGVfcHJlZml4KTogTGlrZXdpc2UuCgpUdWUgTm92IDMwIDE1OjQ3OjQ4IDE5OTMgIEphc29uIE1lcnJpbGwgIChqYXNvbkBkZW5lYi5jeWdudXMuY29tKQoKCSogY3BsdXMtZGVtLmMgKGNwbHVzX2RlbWFuZ2xlX29wbmFtZSk6IEFkZCBDT05TVCB0byBwbGVhc2UgZ2NjLgoKU2F0IE5vdiAyNyAxMTowNTo1MCAxOTkzICBGcmVkIEZpc2ggIChmbmZAY3lnbnVzLmNvbSkKCglNZXJnZSBjaGFuZ2VzIGZyb20gdG9tQGJhc2lsLmljY2UucnVnLm5sIChUb20gUi5IYWdlbWFuKQoJKiBzdHJlcnJvci5jLCBzdHJzaWduYWwuYzogIEFzIGEgc21hbGwgc3BhY2Ugb3B0aW1pemF0aW9uLCBkb24ndAoJaW5jbHVkZSBtZXNzYWdlcyB3aGVuIHRoZXkgYXJlbid0IGFjdHVhbGx5IHVzZWQuCgoJTWVyZ2UgY2hhbmdlcyBmcm9tIHRha2VmaXZlLmNvLmF0IWpvZSAoSm9zZWYgTGVoZXJiYXVlcikKCSogY3BsdXMtZGVtLmMgKGRlbWFuZ2xlX3ByZWZpeCwgZGVtYW5nbGVfZnVuY3Rpb25fbmFtZSwKCWNwbHVzX2RlbWFuZ2xlX29wbmFtZSk6ICBGaXhlcyBmb3Igc3lzdGVtcyB3aGVyZSBjcGx1c19tYXJrZXIKCWlzIHNvbWV0aGluZyBvdGhlciB0aGFuICckJy4KCkZyaSBOb3YgMjYgMTM6NTE6MTEgMTk5MyAgUGVyIEJvdGhuZXIgIChib3RobmVyQGthbGVzc2luLmN5Z251cy5jb20pCgoJKiB3YWl0cGlkLmM6ICBTaW1wbGUtbWluZGVkIGFwcHJvY2ltYXRpb24gdG8gd2FpdHBpZAoJdXNpbmcgdmFuaWxsYSB3YWl0LgoJKiBmdW5jdGlvbnMuZGVmLCBNYWtlZmlsZS5pbjogIFVwZGF0ZSBhY2NvcmRpbmdseSwKClRodSBOb3YgMTggMTg6MDE6MTUgMTk5MyAgS3VuZyBIc3UgIChrdW5nQGNpcmRhbi5jeWdudXMuY29tKQoKCSogY3BsdXMtZGVtLmMoZGVtYW5nbGVfdGVtcGxhdGUpOiBmaXggYnVnIHRlbXBsYXRlIGluc3RhbnRpYXRpb24KCXdpdGggdmFsdWUgb2YgdXNlciBkZWZpbmVkIHR5cGUuCgpXZWQgTm92IDE3IDE4OjMwOjIxIDE5OTMgIEt1bmcgSHN1ICAoa3VuZ0BjaXJkYW4uY3lnbnVzLmNvbSkKCgkqIGNwbHVzLWRlbS5jKGNwbHVzX2RlbWFuZ2xlX29wbmFtZSk6IGFkZCB0aGUgc3ViamVjdCBuZXcgZnVuY3Rpb24KCXRvIHN1cHBvcnQgdW5pZmllZCBzZWFyY2ggb2Ygb3BlcmF0b3IgaW4gY2xhc3MuCgpXZWQgTm92IDEwIDA5OjQ3OjIyIDE5OTMgIEppbSBLaW5nZG9uICAoa2luZ2RvbkBsaW90aC5jeWdudXMuY29tKQoKCWdjYyAtV2FsbCBsaW50OgoJKiBzdHJ0b3VsLmMgKHN0cnRvdWwpOiB1c2UgIihkaWdpdCA9ICpzKSAhPSAnXDAnIiBub3QganVzdAoJImRpZ2l0ID0gKnMiIGFzIGNvbmRpdGlvbiBpbiB3aGlsZSBsb29wLgoKVHVlIE5vdiAgOSAxNTo1MjoyMiAxOTkzICBNYXJrIEVpY2hpbiAgKGVpY2hpbkBjeWdudXMuY29tKQoKCSogTWFrZWZpbGUuaW46IHBhc3MgU0hFTEwgdG8gcmVjdXJzaXZlIG1ha2UKClRodSBOb3YgIDQgMTI6MDk6MjYgMTk5MyAgUGVyIEJvdGhuZXIgIChib3RobmVyQGthbGVzc2luLmN5Z251cy5jb20pCgoJKiB2ZnByaW50Zi5jLCB2cHJpbnRmLmMsIHZzcHJpbnRmLmM6ICBNYWtlIGZvcm1hdCBhcmcKCWJlIChjb25zdCBjaGFyKiksIGZvciBBTlNJIChhbmQgZ2NjIHcvZml4cHJvdG8pIGNvbnNpc3RlbmN5LgoKVGh1IE5vdiAgNCAwODoyOTowNCAxOTkzICBKaW0gS2luZ2RvbiAgKGtpbmdkb25AbGlvdGguY3lnbnVzLmNvbSkKCgkqIGNvbmZpZy50YWJsZTogTWFrZSAqLSotaGl1eCogdXNlIG1oLWhwdXguCgpGcmkgT2N0IDIyIDA3OjUzOjE1IDE5OTMgIEppbSBLaW5nZG9uICAoa2luZ2RvbkBsaW90aC5jeWdudXMuY29tKQoKCSogY29uZmlnLnRhYmxlOiBBZGQgKiB0byBlbmQgb2YgYWxsIE9TIG5hbWVzLgoKVHVlIE9jdCAxOSAxNzoxMjowMSAxOTkzICBkYXZpZCBkIGB6b28nIHp1aG4gICh6b29AcnRsLmN5Z251cy5jb20pCgoJKiBNYWtlZmlsZS5pbiAobG5lZWRlZC1saXN0KTogZW5zdXJlIHRoYXQgb2JqZWN0IGZpbGUgbmFtZXMgYXJlCgkgIG5vdCBkdXBsaWNhdGVkLCBhcyBtdWx0aXBsZSBpbnN0YW5jZXMgb2YgdGhlIHNhbWUgb2JqZWN0IGZpbGUgaW4KCSAgYSBsaWJyYXJ5IGNhdXNlcyBwcm9ibGVtcyBvbiBzb21lIG1hY2hpbmVzCgpNb24gT2N0IDE4IDIxOjU5OjI4IDE5OTMgIEppbSBLaW5nZG9uICAoa2luZ2RvbkBsaW90aC5jeWdudXMuY29tKQoKCSogc3RyY2FzZWNtcC5jLCBzdHJuY2FzZWNtcC5jOiBDaGFuZ2UgdV9jaGFyIHRvIHVuc2lnbmVkIGNoYXIuCgpGcmkgT2N0IDE1IDIyOjE3OjExIDE5OTMgIGRhdmlkIGQgYHpvbycgenVobiAgKHpvb0BydGwuY3lnbnVzLmNvbSkKCgkqIHN0cm5jYXNlY21wLmM6IG5ldyBmaWxlLCBpbXBsZW1lbnRzIHN0cm5jYXNlY21wCgkqIHN0cmNhc2VjbXAuYzogbmV3IGZpbGUsIGltcGxlbWVudCBzdHJjYXNlY21wCgoJKiBNYWtlZmlsZS5pbiAoQ0ZJTEVTKTogbGlzdCB0aGVzZSB0d28gbmV3IHNvdXJjZSBmaWxlcwoKCSogZnVuY3Rpb25zLmRlZjogYWRkIHN0cmNhc2VjbXAgYW5kIHN0cm5jYXNlY21wIGVudHJpZXMKCkZyaSBPY3QgMTUgMTQ6NTM6MDUgMTk5MyAgSWFuIExhbmNlIFRheWxvciAgKGlhbkB0d2VlZGxlZHVtYi5jeWdudXMuY29tKQoKCSogc3RydG91bC5jIChzdHJ0b3VsKSwgc3RydG9sLmMgKHN0cnRvbCk6IEhhbmRsZSBvdmVyZmxvdwoJYWNjb3JkaW5nIHRvIEFOU0kgQy4KClRodSBPY3QgMTQgMTY6MzQ6MTkgMTk5MyAgS3VuZyBIc3UgIChrdW5nQGNpcmRhbi5jeWdudXMuY29tKQoKCSogY3BsdXMtZGVtLmM6IGFkZCBzdXBwb3J0IG9mIEFSTSBnbG9iYWwgY29uc3RydWN0b3IvZGVzdHJ1Y3RvciwKCWFuZCAnRycgZm9yIHBhc3NpbmcgcmVjb3JkIG9yIHVuaW9uIGluIHBhcmFtZXRlci4KCldlZCBPY3QgMTMgMTM6MzY6MTkgMTk5MyAgSmltIEtpbmdkb24gIChraW5nZG9uQGxpb3RoLmN5Z251cy5jb20pCgoJKiBNYWtlZmlsZS5pbjogRml4IGNvbW1lbnQgdG8gY2xhcmlmeSB0aGF0IHN0dWZmIGluIFJFUVVJUkVEX09GSUxFUwoJc2hvdWxkIG5vdCBiZSBpbiBmdW5jdGlvbnMuZGVmLgoKV2VkIE9jdCAxMyAxMzoxMzozOCAxOTkzICBJYW4gTGFuY2UgVGF5bG9yICAoaWFuQHR3ZWVkbGVkdW1iLmN5Z251cy5jb20pCgoJKiBmdW5jdGlvbnMuZGVmOiBSZW1vdmVkIHhtYWxsb2MuICBTdHVmZiBpbiBSRVFVSVJFRF9PRklMRVMgc2hvdWxkCglub3QgYmUgaW4gZnVuY3Rpb25zLmRlZi4KCk1vbiBPY3QgIDQgMTg6MjY6MzkgMTk5MyAgS3VuZyBIc3UgIChrdW5nQGNpcmRhbi5jeWdudXMuY29tKQoKCSogY3BsdXMtZGVtLmM6IGNoYW5nZSBnbG9ibCBjb25zdHJ1Y3Rvci9kZXN0cnVjdG9yIHRvIHByb3BlciBuYW1lCgpUdWUgU2VwIDI4IDE4OjExOjA3IDE5OTMgIEt1bmcgSHN1ICAoa3VuZ0BjaXJkYW4uY3lnbnVzLmNvbSkKCgkqIGNwbHVzLWRlbS5jOiBmaXggYnVnIGluIGNvbnN0cnVjdG9yL2Rlc3RydWN0b3IKClR1ZSBTZXAgMjggMTY6MjA6NDkgMTk5MyAgS3VuZyBIc3UgIChrdW5nQGNpcmRhbi5jeWdudXMuY29tKQoKCSogY3BsdXMtZGVtLmM6IHN1cHBvcnQgYm90aCBvbGQgYW5kIG5ldyBfdnQkLi4uIHZ0YmwgbWFuZ2xlZCBuYW1lcwoKRnJpIFNlcCAyNCAxOTowNzoxNiAxOTkzICBKYXNvbiBNZXJyaWxsICAoamFzb25AZGVuZWIuY3lnbnVzLmNvbSkKCgkqIGNwbHVzLWRlbS5jOiBGaXggZGVtYW5nbGVfdGVtcGxhdGUgcHJvdG90eXBlCgpGcmkgU2VwIDI0IDE3OjMyOjU1IDE5OTMgIEt1bmcgSHN1ICAoa3VuZ0BjaXJkYW4uY3lnbnVzLmNvbSkKCgkqIGNwbHVzLWRlbS5jOiBmaXggdGVtcGxhdGUgZGVtYW5nbGluZwoJKiBjcGx1cy1kZW0uYzogZml4IGNvbnN0IHR5cGUgZGVtYW5nbGluZwoJKiBjcGx1cy1kZW0uYzogZml4IGNvbnN0cnVjdG9yL2Rlc3RydWN0b3IsIHZpcnR1YWwgdGFibGUsCglxdWFsaWZpZXIsIGdsb2JhbCBjb25zdHJ1Y3Rvci9kZXN0cnVjdG9yIGRlbWFuZ2xpbmcKCldlZCBTZXAgIDEgMjM6MTM6MTEgMTk5MyAgSmltIEtpbmdkb24gIChraW5nZG9uQGxpb3RoLmN5Z251cy5jb20pCgoJKiBzdHJzaWduYWwuYywgc3RyZXJyb3IuYzogVXNlIGZ1bGx5LWJyYWNrZXRlZCBpbml0aWFsaXplciB0bwoJa2VlcCBnY2MgLVdhbGwgaGFwcHkuCgpGcmkgQXVnIDI3IDEwOjMwOjA5IDE5OTMgIEphc29uIE1lcnJpbGwgIChqYXNvbkBkZW5lYi5jeWdudXMuY29tKQoKCSogY3BsdXMtZGVtLmMgKGRvX3R5cGUpOiBBZGQgQ09OU1RTIHRvIG1ha2UgZ2NjIGhhcHB5IHdpdGggbGFzdAoJcGF0Y2guCgpGcmkgQXVnIDI3IDExOjI0OjU0IDE5OTMgIEppbSBLaW5nZG9uICAoa2luZ2RvbkBsaW90aC5jeWdudXMuY29tKQoKCVBhdGNoIGZyb20gUGF1bCBGbGluZGVyczoKCSogY3BsdXMtZGVtLmMgKGRvX3R5cGUpOiBEZWFsIHdpdGggYXJyYXlzLgoKVHVlIEF1ZyAyNCAxNDoyMzo1MCAxOTkzICBKaW0gS2luZ2RvbiAgKGtpbmdkb25AbGlvdGguY3lnbnVzLmNvbSkKCgkqIGNwbHVzLWRlbS5jIChkZW1hbmdsZV9xdWFsaWZpZWQ6IERlYWwgd2l0aCBHTlUgZm9ybWF0IGZvciBtb3JlCgl0aGFuIDkgY2xhc3Nlcy4KCldlZCBBdWcgMTggMTk6NTA6MjkgMTk5MyAgSmFzb24gTWVycmlsbCAgKGphc29uQGRlbmViLmN5Z251cy5jb20pCgoJKiBNYWtlZmlsZS5pbiAoZHVtbXkubyk6IFJlZGlyZWN0IHRvIC9kZXYvbnVsbCB0byBhdm9pZCAidmFyaWFibGUKCW5vdCBpbml0aWFsaXplZCIgd2FybmluZ3MgdW5kZXIgSFAvVVgKClN1biBBdWcgMTUgMjA6NDI6NDAgMTk5MyAgSmltIEtpbmdkb24gIChraW5nZG9uQGxpb3RoLmN5Z251cy5jb20pCgoJKiBzdHJlcnJvci5jOiBNb3ZlIGluY2x1ZGUgb2Ygc3RkaW8uaCBhZnRlciBzeXNfZXJybGlzdCAjZGVmaW5lLgoJQWxzbyByZW1vdmUgTlVMTCBkZWZpbml0aW9uIChzdGRpby5oIGFsd2F5cyBkZWZpbmVzIE5VTEwsIHNvIGl0CgluZXZlciBkaWQgYW55dGhpbmcgYnV0IGNsdXR0ZXIgdXAgdGhlIGNvZGUpLgoKU2F0IEF1ZyAxNCAxNDoyMTo0OSAxOTkzICBkYXZpZCBkIGB6b28nIHp1aG4gICh6b29AcnRsLmN5Z251cy5jb20pCgoJKiBNYWtlZmlsZS5pbiwgZnVuY3Rpb25zLmRlZjogaGFuZGxlIHhtYWxsb2MuYwoKCSogeG1hbGxvYy5jOiBwcm92aWRlIHhtYWxsb2MgYW5kIHhyZWFsbG9jIGZ1bmN0aW9ucwoKVGh1IEF1ZyAxMiAxNzozODo1NyAxOTkzICBEYXZpZCBKLiBNYWNrZW56aWUgIChkam1AdGhlcHViLmN5Z251cy5jb20pCgoJKiBjcGx1cy1kZW0uYzogRml4IGEgY29tbWVudC4KClNhdCBBdWcgIDcgMTM6NTY6MzUgMTk5MyAgRGF2aWQgSi4gTWFja2VuemllICAoZGptQHRoZXB1Yi5jeWdudXMuY29tKQoKCSogZ2V0b3B0MS5jOiBEZWNsYXJlIGNvbnN0IHRoZSB3YXkgZ2V0b3B0LmMgZG9lcy4KCkZyaSBBdWcgIDYgMTc6MDM6MTMgMTk5MyAgRGF2aWQgSi4gTWFja2VuemllICAoZGptQHRoZXB1Yi5jeWdudXMuY29tKQoKCSogb2JzdGFjay5jLCBhbGxvY2EuYzogVXBkYXRlIGZyb20gRlNGLgoJKiBnZXRvcHQuYywgZ2V0b3B0MS5jOiBVcGRhdGUgdG8gY3VycmVudCBGU0YgdmVyc2lvbiwgd2hpY2gKCWRvZXNuJ3QgdXNlIGFsbG9jYS4KClR1ZSBKdWwgMjcgMTQ6MDM6NTcgMTk5MyAgQnJlbmRhbiBLZWhvZSAgKGJyZW5kYW5AbGlzYS5jeWdudXMuY29tKQoKCSogTWFrZWZpbGUuaW4gKGRlbWFuZ2xlKTogQWRkIHRoZSB0YXJnZXQgd2l0aCBhIG1lc3NhZ2Ugc2F5aW5nCgl3aGVyZSBkZW1hbmdsZSB3ZW50LgoKTW9uIEp1bCAyNiAxNTo0OTo1NCAxOTkzICBKaW0gS2luZ2RvbiAgKGtpbmdkb25AbGlvdGguY3lnbnVzLmNvbSkKCgkqIE1ha2VmaWxlLmluOiBSZW1vdmUgb2Jzb2xldGUgYGRlbWFuZ2xlJyB0YXJnZXQuCgpUaHUgSnVsIDIyIDA4OjMxOjAxIDE5OTMgIEZyZWQgRmlzaCAgKGZuZkBkZW5lYi5jeWdudXMuY29tKQoKCSogY3BsdXMtZGVtLmMgKGFybV9zcGVjaWFsKTogIEFwcGx5IHBhdGNoIGZyb20gYXJnQGx1Y2lkLmNvbSB0bwoJYXZvaWQgaW5maW5pdGUgbG9vcCBvbiB2dGJsIHN5bWJvbHMgd2l0aCBkaXNhbWJpZ3VhdGluZyAianVuayIKCXRhY2tlZCBvbiB0aGUgZW5kLgoKTW9uIEp1bCAxOSAxNDoxMDozNyAxOTkzICBkYXZpZCBkIGB6b28nIHp1aG4gICh6b29AcnRsLmN5Z251cy5jb20pCgoJKiBzdHJzaWduYWwuYzogd29yayBhcm91bmQgc29tZSBzeXN0ZW1zIGxvc2luZyBkZWZpbml0aW9ucyBvZgoJc3lzX3NpZ2xpc3QKCgkqIGNvbmZpZy9taC1seW54b3M6IHRoaXMgc3lzdGVtIGhhcyBhIGxvc2luZyBkZWZpbml0aW9uIG9mCglzeXNfc2lnbGlzdAoKCSogY29uZmlnLnRhYmxlOiB1c2UgbWgtbHlueG9zIGZvciAqLSotbHlueG9zCgpNb24gSnVsIDE5IDE3OjA4OjUyIDE5OTMgIEtlbiBSYWVidXJuICAocmFlYnVybkBydGwuY3lnbnVzLmNvbSkKCgkqIGNvbmZpZy50YWJsZTogQWRkIHN1cHBvcnQgZm9yIEhQUEEgQlNEIGhvc3RzLgoKCSogY29uZmlnL21oLWhwYnNkOiBOZXcgZmlsZS4KCk1vbiBKdWwgMTIgMTg6MDA6NDAgMTk5MyAgSy4gUmljaGFyZCBQaXhsZXkgIChyaWNoQGN5Z251cy5jb20pCgoJKiBNYWtlZmlsZS5pbiAoVEFHUyk6IG1ha2Ugd29yayB3aGVuIHNyY2RpciAhPSBvYmpkaXIuCgpTdW4gSnVuIDI3IDE1OjM1OjMxIDE5OTMgIERhdmlkIEouIE1hY2tlbnppZSAgKGRqbUB0aGVwdWIuY3lnbnVzLmNvbSkKCgkqIGNwbHVzLWRlbS5jIChtYWluKTogQWRkIGxvbmcgb3B0aW9ucywgaW5jbHVkaW5nIC0taGVscCBhbmQKCS0tdmVyc2lvbi4KCSh1c2FnZSk6IE5ldyBmdW5jdGlvbiBmcm9tIGNvZGUgaW4gbWFpbi4KClR1ZSBKdW4gMjIgMTE6Mzc6MzggMTk5MyAgUGVyIEJvdGhuZXIgIChib3RobmVyQGRlbmViLmN5Z251cy5jb20pCgoJKiBjb25maWcudGFibGU6ICBOZXcgc2hlbGwgc2NpcHQsIHNvdXJjZWQgYnkgYm90aCAuL2NvbmZpZ3VyZSxpbgoJYW5kIC4uL3hpYmVydHkvY29uZmlndXJlLmluLCB0byBhdm9pZCBtYWludGFpbmFuY2UgbG9zc2FnZXMuCgkqIGNvbmZpZ3VyZS5pbiBhbmQgLi4veGliZXJ0eS9jb25maWd1cmUuaW46ICBVc2UgY29uZmlnLnRhYmxlLgoKCSogY29uZmlndXJlLmluOiBEb24ndCB1c2UgbWgtYWl4IGZvciBBSVggMy4yLCBvbmx5IGZvciAzLjEuCgkqIGNvbmZpZ3VyZS5pbjogTWFwICotKi1pcml4KiAoZXhjZXB0IGlyaXg0KSB0byBtaC1zeXN2LgoJKiAuLi94aWJlcnR5L2NvbmZpZ3VyZS5pbjogIFVwZGF0ZSBmcm9tIC4vY29uZmlndXJlLmluLgoKVHVlIEp1biAxNSAxNzowNTozMSAxOTkzICBkYXZpZCBkIGB6b28nIHp1aG4gICh6b28gYXQgY2lyZGFuLmN5Z251cy5jb20pCgoJKiBNYWtlZmlsZS5pbjogcmVtb3ZlIHBhcmVudGRpciBzdXBwb3J0CgpXZWQgTWF5IDI2IDEyOjU5OjA5IDE5OTMgIFBldGVyIFNjaGF1ZXIgIChwZXNAcmVnZW50LmUtdGVjaG5pay50dS1tdWVuY2hlbi5kZSkKCgkqIGNwbHVzLWRlbS5jICh4cmVhbGxvYyk6ICBNYXRjaCBkZWZpbml0aW9uIHdpdGggcHJvdG90eXBlLgoKVHVlIE1heSAyNSAxNDoyNzo1MSAxOTkzICBQZXRlciBTY2hhdWVyICAocGVzQHJlZ2VudC5lLXRlY2huaWsudHUtbXVlbmNoZW4uZGUpCgoJKiBjcGx1cy1kZW0uYyAoZGVtYW5nbGVfcHJlZml4KTogIERlbWFuZ2xlIGNmcm9udAoJbG9jYWwgdmFyaWFibGVzIGFzIGFuIGV4dGVuc2lvbiB0byBBUk0gZGVtYW5nbGluZy4KCkZyaSBNYXkgMjEgMDk6NTM6NTcgMTk5MyAgSmltIEtpbmdkb24gIChraW5nZG9uQGxpb3RoLmN5Z251cy5jb20pCgoJKiBpZWVlLWZsb2F0LmM6IERvbid0IHJlcXVpcmUgcG9pbnRlcnMgdG8gZG91YmxlIHRvIGJlIGFsaWduZWQuCgpUdWUgTWF5IDE4IDE3OjEyOjEwIDE5OTMgIEZyZWQgRmlzaCAgKGZuZkBjeWdudXMuY29tKQoKCShtZXJnZSBjaGFuZ2VzIGZyb20gZGxvbmdAY3NlLnVjc2MuZWR1KQoJKiBjcGx1cy1kZW0uYyAoY29uc3VtZV9jb3VudCk6ICBTaW1wbGlmeS4KCSogY3BsdXMtZGVtLmMgKGFybV9wdCwgZGVtYW5nbGVfY2xhc3NfbmFtZSk6ICBOZXcgZnVuY3Rpb25zLgoJKiBjcGx1cy1kZW0uYyAodmFyaW91cyk6ICBDYWxscyB0byBhcm1fcHQsIGRlbWFuZ2xlX2NsYXNzX25hbWUuCgoJKiBjcGx1cy1kZW0uYyAoeG1hbGxvYywgeHJlYWxsb2MsIHN0cnN0cik6ICBNYWtlIGV4dGVybiBkZWNscyBpbnRvCglmdWxsIHByb3RvdHlwZXMuCgkqIGNwbHVzLWRlbS5jIChmcmVlKTogIEFkZCBwcm90b3R5cGUuCgkqIGNwbHVzLWRlbS5jIChvcHRhYmxlKTogIEZ1bGx5IGJyYWNrZXRpemUgaW5pdGlhbGl6ZXIuCgpGcmkgTWF5IDE0IDE3OjEzOjA1IDE5OTMgIFBlciBCb3RobmVyICAoYm90aG5lckBjeWdudXMuY29tKQoKCSogY3BsdXMtZGVtLmM6ICBXaGV0aGVyIGluaXRpYWwgdW5kZXJzY29yZXMgYXJlIHN0cmlwcGVkCglkZXBlbmRzIG9uIHRoZSBleHRlcm5hbCB2YXJpYWJsZSBwcmVwZW5kc191bmRlcnNjb3JlCgkod2hpY2ggaXMgZ2VuZXJhdGVkIGJ5IHRoZSBiaW51dGlscyBNYWtlZmlsZSkuCgpGcmkgTWF5IDE0IDA3OjMyOjIwIDE5OTMgIEtlbiBSYWVidXJuICAocmFlYnVybkBkZW5lYi5jeWdudXMuY29tKQoKCSogY3BsdXMtZGVtLmMgKG1vcF91cCwgYXJtX3NwZWNpYWwpOiBSZW1vdmUgc29tZSB1bnVzZWQgdmFyaWFibGVzLgoKVHVlIE1heSAgNCAyMDozMTo1OSAxOTkzICBGcmVkIEZpc2ggIChmbmZAY3lnbnVzLmNvbSkKCgkqIGNwbHVzLWRlbS5jIChjb25zdW1lX2NvdW50KTogIFJldHVybiB6ZXJvIGlmIGFyZyBkb2VzIG5vdAoJc3RhcnQgd2l0aCBkaWdpdCwgYW5kIGRvbid0IGNvbnN1bWUgYW55IGlucHV0LgoKVHVlIE1heSAgNCAwODoxMDoyOCAxOTkzICBKaW0gS2luZ2RvbiAgKGtpbmdkb25AY3lnbnVzLmNvbSkKCgkqIE1ha2VmaWxlLmluIChkZW1hbmdsZSk6IFVzZSAke3NyY2Rpcn0gbm90ICReLgoKCSogc3RydG9kLmM6IE5ldyBmaWxlLCBuZWVkZWQgYXQgbGVhc3QgZm9yIEJTRCA0LjMuCgpTdW4gTWF5ICAyIDExOjMwOjQyIDE5OTMgIEZyZWQgRmlzaCAgKGZuZkBjeWdudXMuY29tKQoKCSogc3Ryc2lnbmFsLmMgKHN5c19zaWdsaXN0KTogIEZvciBBTlNJIGNvbXBpbGF0aW9ucywgdHlwZSBpcwoJImNvbnN0IGNoYXIgKmNvbnN0Ii4gIEFsc28gcmVtb3ZlIGNvbmRpdGlvbmFsaXphdGlvbiBvbiBfX1NURENfXwoJc2luY2UgY29uc3QgaXMgZGVmaW5lZCBhd2F5IGZvciBub24tQU5TSS4KCldlZCBBcHIgMjggMTk6Mjk6NTUgMTk5MyAgS2VuIFJhZWJ1cm4gIChyYWVidXJuQGRlbmViLmN5Z251cy5jb20pCgoJKiBjb25maWd1cmUuaW46IFJlY29nbml6ZSAqLSotaHB1eC4KCSogY29uZmlnL21oLWhwdXg6IE5ldyBmaWxlLgoKVHVlIEFwciAyNyAxNToyMjoxOSAxOTkzICBQZXIgQm90aG5lciAgKGJvdGhuZXJAY3lnbnVzLmNvbSkKCgkqIHRtcG5hbS5jOiAgQWRkZWQgQU5TSSB0bXBuYW0oKSBmdW5jdGlvbi4KCSogZnVuY3Rpb25zLmRlZiwgTWFrZWZpbGUuaW46ICBVcGRhdGUgYWNjb3JkaW5nbHkuCgpUdWUgQXByIDI3IDEzOjM4OjM4IDE5OTMgIFBldGVyIFNjaGF1ZXIgIChwZXNAcmVnZW50LmUtdGVjaG5pay50dS1tdWVuY2hlbi5kZSkKCgkqIGNwbHVzLWRlbS5jIChkZW1hbmdsZV9mdW5jdGlvbl9uYW1lKTogR2V0IHRoZSBkZW1hbmdsaW5nIG9mCglzdG9wX18xQSByaWdodC4KCkZyaSBBcHIgMTYgMjM6NDg6MjQgMTk5MyAgSmltIEtpbmdkb24gIChraW5nZG9uIGF0IGNhbHZpbikKCgkqIGNwbHVzLWRlbS5jOiBEZWNsYXJlIHN0cnN0ciByZXR1cm4gdHlwZS4KCkZyaSBNYXIgMjYgMTI6MDE6MjYgMTk5MyAgSmltIEtpbmdkb24gIChraW5nZG9uQGN5Z251cy5jb20pCgoJKiBzdHJzaWduYWwuYzogQWRkIHNvbWUgQUlYIHNpZ25hbHMuCgpUaHUgTWFyIDI1IDE1OjE3OjIzIDE5OTMgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AY3lnbnVzLmNvbSkKCgkqIE1ha2VmaWxlLmluIChNQUtFT1ZFUlJJREVTKTogRGVmaW5lIHRvIGJlIGVtcHR5LgoKV2VkIE1hciAyNCAwMTo1OToyNSAxOTkzICBkYXZpZCBkIGB6b28nIHp1aG4gICh6b28gYXQgcG9zZWlkb24uY3lnbnVzLmNvbSkKCgkqIE1ha2VmaWxlLmluOiBhZGQgaW5zdGFsbGNoZWNrICYgZHZpIHRhcmdldHMKClRodSBNYXIgMTggMTQ6MDU6NDQgMTk5MyAgUGVyIEJvdGhuZXIgIChib3RobmVyQHJ0bC5jeWdudXMuY29tKQoKCSogaWVlZS1mbG9hdC5jOiAgTmV3IGZpbGUsIG1vdmVkIGZyb20gLi4vZ2RiIChzaW5jZSBpdCBpcwoJbmVlZGVkIGJ5IC4uL29wY29kZS9tNjhrLWRpcy5jKS4KClR1ZSBNYXIgIDIgMTc6NDc6MzEgMTk5MyAgRnJlZCBGaXNoICAoZm5mQGN5Z251cy5jb20pCgoJKiBjcGx1cy1kZW0uYzogIFJlcGxhY2UgYWxsIHJlZmVyZW5jZXMgdG8gY2Zyb250IHdpdGggQVJNLgoKRnJpIEZlYiAyNiAwMDoxNzowNyAxOTkzICBQZXIgQm90aG5lciAgKGJvdGhuZXJAcnRsLmN5Z251cy5jb20pCgoJKiBjcGx1cy1kZW0uYzogIEZpeCBtYWluIHByb2dyYW0gKHdoZW4gY29tcGlsZWQgd2l0aCAtRE1BSU4pCgl0byBiZSBtb3JlIHVzZWZ1bCBhcyBhIGZpbHRlci4KClNhdCBGZWIgMjAgMjE6NDE6MzkgMTk5MyAgQnJlbmRhbiBLZWhvZSAgKGJyZW5kYW5AbGlzYS5jeWdudXMuY29tKQoKCSogTWFrZWZpbGUuaW4gKGluc3RhbGxfdG9fbGliZGlyLCBpbnN0YWxsX3RvX3Rvb2xkaXIpOiBHbyBpbnRvIHRoZQoJZGVzdGluYXRpb24gZGlyZWN0b3J5IGJlZm9yZSBydW5uaW5nICQoUkFOTElCKSwgaW4gY2FzZSB0aGF0Cglwcm9ncmFtIHRyaWVzIHRvIGNyZWF0ZSBhIGZpbGUgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5IGFzIHBhcnQgb2YKCWl0cyB3b3JrLgoKVGh1IEZlYiAxOCAyMzowMDoxOSAxOTkzICBKb2huIEdpbG1vcmUgIChnbnVAY3lnbnVzLmNvbSkKCgkqIHN0cnNpZ25hbC5jIChzeXNfc2lnbGlzdCk6ICBSZW1vdmUgeWV0IGFub3RoZXIgKiVeJiUmJCMgImNvbnN0IgoJYmVjYXVzZSBCU0QgNC40IGxhY2tzIG9uZS4gIElzbid0IHRoaXMgZnVuPwoKVGh1IEZlYiAxOCAxMToyNDoyNSAxOTkzICBGcmVkIEZpc2ggIChmbmZAY3lnbnVzLmNvbSkKCgkqIGNwbHVzLWRlbS5jIChkZW1hbmdsZV9zaWduYXR1cmUpOiAgU2V0IGZ1bmNfZG9uZSBhZnRlcgoJZGVtYW5nbGluZyBhIHRlbXBsYXRlLgoJKiBjcGx1cy1kZW0uYyAoZGVtYW5nbGVfdGVtcGxhdGUpOiAgRml4IHNldmVyYWwgc21hbGwgYnVncwoJaW4gZGVtYW5nbGluZyBHTlUgc3R5bGUgdGVtcGxhdGVzLgoJKiBjcGx1cy1kZW0uYyAoZGVtYW5nbGVfcHJlZml4KTogIEZpeCBmb3IgdGVtcGxhdGVzIGluIEdOVQoJc3R5bGUgY29uc3RydWN0b3JzLgoJKiBjcGx1cy1kZW0uYyAoZ251X3NwZWNpYWwpOiAgRml4IGZvciB0ZW1wbGF0ZXMgaW4gR05VIHN0eWxlCglzdGF0aWMgZGF0YSBtZW1iZXJzLgoKVHVlIEZlYiAxNiAxNzoyODozNSAxOTkzICBGcmVkIEZpc2ggIChmbmZAY3lnbnVzLmNvbSkKCgkqIGNwbHVzLWRlbS5jIChkZW1hbmdsZV9zaWduYXR1cmUpOiAgTW9kaWZ5IHRvIGluY2x1ZGUgdHlwZQoJbW9kaWZpZXJzIGxpa2Ugc3RhdGljIGFuZCBjb25zdCBpbiByZW1lbWJlcmVkIHR5cGVzLgoKVGh1IEZlYiAxMSAyMjoyMDo0NyAxOTkzICBGcmVkIEZpc2ggIChmbmZAY3lnbnVzLmNvbSkKCgkqIGNwbHVzLWRlbS5jIChkZW1hbmdsZWRfcXVhbGlmaWVkKTogIEFkZCBuZXcgcGFyYW1ldGVyIHRoYXQgdGVsbHMKCXdoZXRoZXIgdG8gcHJlcGVuZCBvciBhcHBlbmQgdGhlIHF1YWxpZmllcnMuCgkqIGNwbHVzLWRlbS5jIChzdHJpbmdfcHJlcGVuZHMpOiAgVXNlZCBub3csIHJlbW92ZSAjaWYgMC4KCSogY3BsdXMtZGVtLmMgKGRlbWFuZ2xlX3NpZ25hdHVyZSk6ICBDYWxsIGRlbWFuZ2xlX3F1YWxpZmllZAoJd2l0aCBwcmVwZW5kaW5nLgoJKiBjcGx1cy1kZW0uYyAoZ251X3NwZWNpYWwpOiAgUmVjb2duaXplIHN0YXRpYyBkYXRhIG1lbWJlcnMgdGhhdAoJdXNlIHF1YWxpZmllZCBuYW1lcy4KCSogY3BsdXMtZGVtLmMgKGRlbWFuZ2xlX3F1YWxpZmllZCk6ICBBY2N1bXVsYXRlIHF1YWxpZmllcnMgaW4gYQoJdGVtcG9yYXJ5IGJ1ZmZlciBhbmQgdGhlIHByZXBlbmQgb3IgYXBwZW5kIHRoZW0gdG8gdGhlIHJlc3VsdCwKCWFzIHNwZWNpZmllZCBieSB0aGUgbmV3ICJhcHBlbmQiIGZsYWcuCgkqIGNwbHVzLWRlbS5jIChkb190eXBlKTogIENhbGwgZGVtYW5nbGVkX3F1YWxpZmllZCB3aXRoCglhcHBlbmRpbmcuCgpNb24gRGVjIDI4IDEwOjQ3OjE5IDE5OTIgIEtlbiBSYWVidXJuICAocmFlYnVybkBjeWdudXMuY29tKQoKCSogc3Ryc2lnbmFsLmMgKHNpZ25hbF90YWJsZSk6IE5vdyBjb25zdC4KCShpbml0X3NpZ25hbF90YWJsZXMpOiBWYXJpYWJsZSBlaXAgbm93IHBvaW50cyB0byBjb25zdC4KCgkqIHN0cmVycm9yLmMgKGVycm9yX3RhYmxlKTogTm93IGNvbnN0LgoJKGluaXRfZXJyb3JfdGFibGVzKTogVmFyaWFibGUgZWlwIG5vdyBwb2ludHMgdG8gY29uc3QuCgpUdWUgRGVjIDE1IDE1OjM2OjUwIDE5OTIgIFBlciBCb3RobmVyICAoYm90aG5lckBjeWdudXMuY29tKQoKCSogbWVtY2hyLmMgKG1lbWNocik6ICBOZXcgKEFOU0kgc3RhbmRhcmQpIGZ1bmN0aW9uLgoJKiBNYWtlZmlsZS5pbiwgZnVuY3Rpb25zLmRlZjogIEFkZGVkIG1lbWNoci4KCSogTWFrZWZpbGUuaW4gKEFSX0ZMQUdTKTogVXNlIHJjIGluc3RhZCBvZiBub24tc3RhbmRhcmQgY3EuCgpXZWQgRGVjICAyIDIyOjQ5OjEwIDE5OTIgIGRhdmlkIGQgYHpvbycgenVobiAgKHpvbyBhdCBjaXJkYW4uY3lnbnVzLmNvbSkKCgkqIGdldG9wdC5jOiByZW1vdmUgdXNlIG9mIFVTRyBhcm91bmQgPGFsbG9jYS5oPiwgd2hpY2ggbmV2ZXIgbWVhbnQKCWFueXRoaW5nIGFueXdheQoKCSogY29uZmlnL21oLXthaXgsYXBvbGxvNjgsbmNyMzAwMCxzeXN2LHN5c3Y0fTogcmVtb3ZlZCBkZWZpbml0aW9ucwoJb2YgVVNHIGFuZCBVU0dyNAoKVGh1IE5vdiAxOSAwMzowOTozMyAxOTkyICBCcmVuZGFuIEtlaG9lICAoYnJlbmRhbkBsaXNhLmN5Z251cy5jb20pCgoJKiBjcGx1cy1kZW0uYyAoZGVtYW5nbGVfZnVuZF90eXBlKTogUmVjb2duaXplIGB3JywgYSB3aWRlIGNoYXJhY3RlcjsKCWl0J3Mgbm93IGEgdHlwZSBhY2NvcmRpbmcgdG8gdGhlIEFOU0kgWDNKMTYgd29ya2luZyBwYXBlcjsgb3V0cHV0Cgkid2NoYXJfdCIgZm9yIGl0LgoJKGRlbWFuZ2xlX3RlbXBsYXRlKTogQWNjZXB0IGB3JyBhcyBhbiBpbnRlZ3JhbCB0eXBlLgoJKHhtYWxsb2MsIHhyZWFsbG9jKTogVXNlIGBjaGFyIConLCBub3QgYFBUUicuICBDYXN0IGNhbGxzIHRvIHRoZWlyCgljb3VudGVycGFydHMgbWFsbG9jIGFuZCByZWFsbG9jIHRvIGBjaGFyIConLgoJKG1haW4pOiBFeGl0IHdpdGggYSAwIHN0YXR1cy4KCSogTWFrZWZpbGUuaW4gKGRlbWFuZ2xlKTogRG9uJ3QgZXhwZWN0IHRoZSB1c2VyIHRvIGRlZmluZQoJREVNQU5HTEUsIGluc3RlYWQgZm9yY2UgdG8gYmUgY3BsdXMtZGVtLmMuICBMb29rIGluICQoc3JjZGlyKS8uLi9pbmNsdWRlCglmb3IgZGVtYW5nbGUuaC4gIFBhc3MgaXQgYW55IEhERUZJTkVTIG9yIFhUUkFGTEFHUy4KCldlZCBOb3YgMTggMTg6NTY6MjAgMTk5MiAgSm9obiBHaWxtb3JlICAoZ251QGN5Z251cy5jb20pCgoJKiBNYWtlZmlsZS5pbiAoQVJfRkxBR1MpOiAgQXZvaWQgdmVyYm9zaXR5LgoJKiBjb25maWcvbWgtc3lzdjQ6ICBSZW1vdmUgQVJfRkxBR1Mgb3ZlcnJpZGUsIHVzZSBJTlNUQUxMPWNwLAoJcmVwbGFjZSBVU0dyNCB3aXRoIEhBVkVfU1lTQ09ORi4KCSogY29uZmlnL21oLXNvbGFyaXM6ICBSZW1vdmU7IG1oLXN5c3Y0IHdvcmtzIG5vdy4KCSogZ2V0cGFnZXNpemUuYzogIFJlcGxhY2UgVVNHcjQgd2l0aCBIQVZFX1NZU0NPTkYuCgkqIGNvbmZpZ3VyZS5pbjogIFNpbXBsaWZ5IGhvc3QgbWF0Y2hpbmcgdGFibGUsIHJlbW92ZSBzZXBhcmF0ZQoJc29sYXJpcyBjb25maWcgZmlsZS4KClN1biBOb3YgMTUgMDk6MzU6MTYgMTk5MiAgRnJlZCBGaXNoICAoZm5mQGN5Z251cy5jb20pCgoJKiBjb25maWd1cmUuaW4gKGlbMzRdODYtKi1zb2xhcmlzMiopOiAgQWRkLCB1c2UgbWgtc3lzdjQuCgpUdWUgTm92ICAzIDIxOjI3OjAzIDE5OTIgIEJyZW5kYW4gS2Vob2UgIChicmVuZGFuQGN5Z251cy5jb20pCgoJKiBjcGx1cy1kZW0uYyAoeG1hbGxvYywgeHJlYWxsb2MpOiBBZGQgZGVjbHMuCgkocmVtZW1iZXJfdHlwZSk6IERvbid0IGNhc3QgeG1hbGxvYy4KCShzdHJpbmdfbmVlZCk6IExpa2V3aXNlOyBkb24ndCBjYXN0IHhyZWFsbG9jIGVpdGhlci4KCkZyaSBPY3QgMjMgMDg6NTI6MDEgMTk5MiAgSWFuIExhbmNlIFRheWxvciAgKGlhbkBjeWdudXMuY29tKQoKCSogTWFrZWZpbGUuaW4sIGZ1bmN0aW9ucy5kZWZzLCByZW5hbWUuYzogYWRkZWQgc2ltcGxlCglpbXBsZW1lbnRhdGlvbiBvZiByZW5hbWUsIHNpbmNlIHNvbWUgYmludXRpbHMgcHJvZ3JhbXMgdXNlIGl0LgoKVGh1IE9jdCAxNSAxNToxODoyMiAxOTkyICBQZXIgQm90aG5lciAgKGJvdGhuZXJAY3lnbnVzLmNvbSkKCgkqIHN0cnNpZ25hbC5jOiAgQWRkIGFwcHJvcHJpYXRlICdjb25zdCcgdG8gc3lzX3NpZ2xpc3QKCWV4dGVybiBkZWNsYXJhdGlvbiAoaWYgX19TVERDX18pLiAgKE5lZWRlZCBmb3IgTGludXguKQoJKiBzdHJzaWduYWwuYyAoc3Ryc2lnbmFsKTogQWRkIGNhc3QgdG8gcmVtb3ZlIGNvbnN0LW5lc3MuCgpGcmkgT2N0ICA5IDAzOjIyOjU1IDE5OTIgIEpvaG4gR2lsbW9yZSAgKGdudUBjeWdudXMuY29tKQoKCSogTWFrZWZpbGUuaW4gKG5lZWRlZC5hd2ssIG5lZWRlZDIuYXdrKTogIFJlbW92ZSBlcnJvbmVvdXMgXCdzCgliZWZvcmUgIidzLCBkaWFnbm9zZWQgYnkgQlNEIDQuNCBhd2suCgpUaHUgT2N0ICA4IDE1OjI1OjEyIDE5OTIgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AY3lnbnVzLmNvbSkKCgkqIE1ha2VmaWxlLmluOiBjcmVhdGUgY29uZmlnLmggYW5kIG5lZWRlZC1saXN0IHRocm91Z2ggJChDT05GSUdfSCkKCWFuZCAkKE5FRURFRF9MSVNUKSwgdG8gZ2l2ZSBzb21lIGhvb2tzIGZvciB4aWJlcnR5LgoKVGh1IE9jdCAgMSAyMzozMTo0MiAxOTkyICBkYXZpZCBkIGB6b28nIHp1aG4gICh6b28gYXQgY2lyZGFuLmN5Z251cy5jb20pCgoJKiBjb25maWd1cmUuaW46IHVzZSBjcHUtdmVuZG9yLXRyaXBsZSBpbnN0ZWFkIG9mIG5lc3RlZCBjYXNlcwoKV2VkIFNlcCAzMCAxMToyNjo1OSAxOTkyICBQZXIgQm90aG5lciAgKGJvdGhuZXJAcnRsLmN5Z251cy5jb20pCgoJKiBNYWtlZmlsZS5pbiwgYXJndi5jLCBiYXNlbmFtZS5jLCBiY21wLmMsIGJjb3B5LmMsIGJ6ZXJvLmMsCgljb25jYXQuYywgY3BsdXMtZGVtLmMsIGZkbWF0Y2guYywgZ2V0Y3dkLmMsIGdldG9wdC5jLCBnZXRvcHQxLmMsCglnZXRwYWdlc2l6ZS5jLCBpbnNxdWUuYywgbWVtY21wLmMsIG1lbWNweS5jLCBtZW1tb3ZlLmMsIG1lbXNldC5jLAoJb2JzdGFjay5jLCBzaWdzZXRtYXNrLmMsIHNwYWNlcy5jLCBzdHJjaHIuYywgc3RyZXJyb3IuYywKCXN0cnJjaHIuYywgc3Ryc2lnbmFsLmMsIHN0cnN0ci5jLCB2Zm9yay5jLCB2c3ByaW50Zi5jOgoJQ29udmVydCBmcm9tIHVzaW5nIEdQTCB0byBMR1BMLgoKU2F0IFNlcCAyNiAwNDowMTozMCAxOTkyICBKb2huIEdpbG1vcmUgIChnbnVAY3lnbnVzLmNvbSkKCgkqIE1ha2VmaWxlLmluIChlcnJvcnMpOiAgTGVhdmUgZHVtbXkubyBhbmQgZHVtbXkgYXJvdW5kIHNvIHRoYXQKCXdlIGNhbiBzZWUgaG93IHRoZSBuZWVkZWQgbGlzdCB3YXMgZ2VuZXJhdGVkIChpdCdzIHNvbWV0aW1lcyB3cm9uZykuCgkobW9zdGx5Y2xlYW4pOiAgUmVtb3ZlIHRoZW0uCgpNb24gU2VwIDIxIDE0OjUwOjQyIDE5OTIgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AY3lnbnVzLmNvbSkKCgkqIGdldGN3ZC5jOiBzdXBwbHkgYSBkZWZhdWx0IGlmIE1BWFBBVEhMRU4gaXMgbm90IGRlZmluZWQuCgoJKiBjb25maWcvbWgtaXJpeDQ6IHNldCBFWFRSQV9PRklMRVMgdG8gYWxsb2NhLm8sIGZyb20gV1JTLgoKV2VkIFNlcCAgOSAxMjo0MTo0OCAxOTkyICBJYW4gTGFuY2UgVGF5bG9yICAoaWFuQGN5Z251cy5jb20pCgoJKiBNYWtlZmlsZS5pbjogVXNlIFhUUkFGTEFHUyB3aGVuIGNvbXBpbGluZywgc28gdGhhdCB4aWJlcnR5IHdvcmtzCgl3aGVuIGNyb3NzLWNvbXBpbGluZy4KClRodSBTZXAgIDMgMTM6Mjk6MzkgMTk5MiAgSy4gUmljaGFyZCBQaXhsZXkgIChyaWNoQHNlbmRhaS5jeWdudXMuY29tKQoKCSogY3BsdXMtZGVtLmM6IChkZW1hbmdsZV9wcmVmaXgpOiByZWR1Y3Rpb24gaW4gc3RyZW5ndGggb2Ygc3Ryc3RyCgkgIGFzIGEgdGltZSBvcHRpbWl6YXRpb24uCgoJKiBjcGx1cy1kZW0uYyAoY3BsdXNfZGVtYW5nbGUpOiByZW1vdmUgc3RycGJyayB0ZXN0LiAgQXBwZWFycyB0bwoJICBiZSBtb3JlIGV4cGVuc2l2ZSB0aGFuIHNpbXBseSBkZW1hbmdsaW5nLgoKCSogY3BsdXMtZGVtLmMgKGNwbHVzX21hdGNoKTogbmV3IGZ1bmN0aW9uLgoKVHVlIFNlcCAgMSAxNToyNDowNCAxOTkyICBQZXIgQm90aG5lciAgKGJvdGhuZXJAcnRsLmN5Z251cy5jb20pCgoJKiBjcGx1cy1kZW0uYzogICNpbmNsdWRlIDxzdGRpby5oPiwgdG8gZGVmaW5lIE5VTEwuCglEZWZpbmUgY3VycmVudF9kZW1hbmdsaW5nX3N0eWxlLgoKU3VuIEF1ZyAzMCAxNzo1ODoxOSAxOTkyICBQZXIgQm90aG5lciAgKGJvdGhuZXJAcnRsLmN5Z251cy5jb20pCgoJKiBjcGx1cy1kZW0uYzogIE5ldyBmaWxlLCBtb3ZlZCBmcm9tIC4uL2dkYi4KCSogY3BsdXMtZGVtLmMgKHNldF9jcGx1c19tYXJrZXJfZm9yX2RlbWFuZ2xpbmcpOiAgTmV3IGV4cG9ydGVkCglmdW5jdGlvbiwgdG8gYXZvaWQgY29tcGlsaW5nIGluIHRhcmdldC1kZXBlbmRlbmN5IGZvciBDUExVU19NQVJLRVIuCgkqIGNwbHVzLWRlbS5jIChjcGx1c19kZW1hbmdsZSk6ICBBbGxvdyBkZW1hbmdsaW5nIHN0eWxlIG9wdGlvbgoJdG8gYmUgcGFzc2VkIGFzIGEgcGFyYW1ldGVyLCBidXQgdXNpbmcgdGhlIGdsb2JhbCB2YXJpYWJsZQoJY3VycmVudF9kZW1hbmdsaW5nX3N0eWxlIGFzIGEgZGVmYXVsdC4KCSogTWFrZWZpbGUuaW46ICBVcGRhdGUgZm9yIGNwbHVzLWRlbS5jCgpTYXQgQXVnIDI5IDEwOjQ0OjA5IDE5OTIgIEZyZWQgRmlzaCAgKGZuZkBjeWdudXMuY29tKQoKCSogb2JzdGFjay5jOiAgTWVyZ2UgaW4gY29tbWVudCBjaGFuZ2VzIGZyb20gRlNGIHZlcnNpb24uICBOb3cKCW1hdGNoZXMgdGhlIEZTRiB2ZXJzaW9uIGV4YWN0bHkuCgpGcmkgQXVnIDI4IDE4OjM5OjA4IDE5OTIgIEpvaG4gR2lsbW9yZSAgKGdudUBjeWdudXMuY29tKQoKCSogb2JzdGFjay5jIChDQUxMX0ZSRUVGVU4pOiAgQ2FuJ3QgdXNlID86IHdpdGggdm9pZCB2YWx1ZXMgKGF0CglsZWFzdCBvbiBsb3NpbmcgREVDc3RhdGlvbnMhKTsgdXNlIGlmLXRoZW4tZWxzZSBpbnN0ZWFkLgoKV2VkIEF1ZyAxOSAxNDo0MDozNCAxOTkyICBJYW4gTGFuY2UgVGF5bG9yICAoaWFuQGN5Z251cy5jb20pCgoJKiBNYWtlZmlsZS5pbjogYWx3YXlzIGNyZWF0ZSBpbnN0YWxsYXRpb24gZGlyZWN0b3JpZXMuCgpNb24gQXVnIDEwIDE3OjMzOjQwIDE5OTIgIGRhdmlkIGQgYHpvbycgenVobiAgKHpvbyBhdCBjaXJkYW4uY3lnbnVzLmNvbSkKCiAgICAgICAqIE1ha2VmaWxlLmluOiBjbGVhbiB1cCBkZWZpbml0aW9uIG9mIENGSUxFUywgbW9yZSBjb21tZW50cwoKU2F0IEF1ZyAgOCAyMzoxMDo1OSAxOTkyICBGcmVkIEZpc2ggIChmbmZAY3lnbnVzLmNvbSkKCgkqIGdldG9wdC5jIChteV9pbmRleCk6ICBNYWtlIGZpcnN0IGFyZyBjb25zdCB0byBtYXRjaCBzdHJjaHIsCgl3aGljaCBpdCBzb21ldGltZXMgaXMgcmVtYXBwZWQgdG8uCgpTYXQgQXVnICAxIDEzOjQ4OjUwIDE5OTIgIEZyZWQgRmlzaCAgKGZuZkBjeWdudXMuY29tKQoKCSogb2JzdGFjay5jIChERUZBVUxUX0FMSUdOTUVOVCk6ICBVcGRhdGUgdG8gbWF0Y2ggRlNGIHZlcnNpb24uCgkqIG9ic3RhY2suYyAoX29ic3RhY2tfYmVnaW4pOiAgSW5pdGlhbGl6ZSB1c2VfZXh0cmFfYXJnLgoJKiBvYnN0YWNrLmMgKF9vYnN0YWNrX2JlZ2luXzEpOiAgTmV3LCBmcm9tIEZTRiB2ZXJzaW9uLgoKTW9uIEp1bCAyMCAyMTowNzo1OCAxOTkyICBGcmVkIEZpc2ggIChmbmZAY3lnbnVzLmNvbSkKCgkqIG9ic3RhY2suYyAoQ0FMTF9DSEVDS0ZVTiwgQ0FMTF9GUkVFRlVOKTogIFVzZSB1c2VfZXh0cmFfYXJnIGFuZAoJZXh0cmFfYXJnLgoJKiBvYnN0YWNrLmMgKF9vYnN0YWNrX2JlZ2luKTogIFJlbW92ZSBhcmVhX2lkIGFuZCBmbGFncyBhcmd1bWVudHMKCShwcmV2aW91c2x5IGFkZGVkIGZvciBtbWFsbG9jIHN1cHBvcnQsIGludGVyZmFjZSBoYXMgY2hhbmdlZCkuCglBbHNvIGNvbnZlcnQgZmxhZ3MgdXNhZ2UgdG8gdXNlIHVzZV9leHRyYV9hcmcgYW5kIG1heWJlX2VtcHR5X29iamVjdC4KCkZyaSBKdWwgMTAgMDA6NDE6NTMgMTk5MiAgRnJlZCBGaXNoICAoZm5mQGN5Z251cy5jb20pCgoJKiBhcmd2LmM6ICBNb3ZlIGV4cGFuZGFyZ3YgaW5saW5lIGFuZCBlbGltaW5hdGUgc3RhdGljIHZhcmlhYmxlcy4KCVJld3JpdGUgdG8gYWx3YXlzIGFsbG9jYXRlIGluIHBvd2VycyBvZiB0d28uICBGaXggdG8gcmV0dXJuIGFuCglhcmd2IHdpdGggYSBzaW5nbGUgbnVsbCBzdHJpbmcgYXJnIGlmIHBhc3NlZCBhIG51bGwgc3RyaW5nLgoKRnJpIEp1bCAgMyAyMDoyNzoyOSAxOTkyICBGcmVkIEZpc2ggIChmbmZAY3lnbnVzLmNvbSkKCgkqIHJhbmRvbS5jLCBzaWdzZXRtYXNrLmMsIHN0cmVycm9yLmMsIHN0cnNpZ25hbC5jOiAgUmVtb3ZlCgkiKHZvaWQpIiBjYXN0cyBmcm9tIGZ1bmN0aW9uIGNhbGxzIHdoZXJlIHRoZSByZXR1cm4gdmFsdWUgaXMKCWlnbm9yZWQsIGluIGFjY29yZGFuY2Ugd2l0aCBHTlUgY29kaW5nIHN0YW5kYXJkcy4KCk1vbiBKdW4gMjkgMTA6NTQ6MTkgMTk5MiAgRnJlZCBGaXNoICAoZm5mIGF0IGN5Z251cy5jb20pCgoJKiBiY29weS5jLCBzdHJlcnJvci5jLCBzdHJzaWduYWwuYzogIExpbnQuCgpUaHUgSnVuIDI1IDA5OjE4OjQxIDE5OTIgIEsuIFJpY2hhcmQgUGl4bGV5ICAocmljaEBydGwuY3lnbnVzLmNvbSkKCgkqIGdldG9wdC5jOiBtZXJnZSBjaGFuZ2VzIGZyb20gbWFrZS4KClRodSBKdW4gMjUgMDQ6NDM6MjIgMTk5MiAgSm9obiBHaWxtb3JlICAoZ251IGF0IGN5Z251cy5jb20pCgoJKiBhbGxvY2EuYzogIEluY29ycG9yYXRlIGZpeGVzIGZyb20gZ2RiL2FsbG9jYS5jLgoJRklYTUU6ICBFdmVudHVhbGx5IG1vdmUgZ2RiJ3MgYWxsb2NhIGNvbmZpZ3VyYXRpb24gZmlsZXMgaGVyZSwKCWFuZCByZW1vdmUgZ2RiL2FsbG9jYS5jIGFuZCBpdHMgTWFrZWZpbGUuaW4gc3VwcG9ydC4KClR1ZSBKdW4gMjMgMjE6NTY6MzAgMTk5MiAgRnJlZCBGaXNoICAoZm5mQGN5Z251cy5jb20pCgoJKiBkdW1teS5jOiAgRGVmaW5lIE5PVEhJTkcgdG8gLypub3RoaW5nKi8sIGNoYW5nZSByZXR1cm4gdHlwZQoJb2YgbWFpbiB0byBpbnQgYW5kIHJldHVybiB6ZXJvLgoJKiBmdW5jdGlvbnMuZGVmOiAgU3VwcGx5IE5PVEhJTkcgYXMgdGhlIGZvdXJ0aCBhcmcgdG8gbWFjcm9zCgl0aGF0IGRvbid0IGhhdmUgYW4gZXhwbGljaXQgYXJnLCB0byBzYXRpc2Z5IHBpY2t5IHByZXByb2Nlc3NvcnMuCgpXZWQgSnVuIDE3IDE4OjEzOjU4IDE5OTIgIFBlciBCb3RobmVyICAoYm90aG5lckBydGwuY3lnbnVzLmNvbSkKCgkqIE1ha2VmaWxlLmluOiAgQ2xlYW4gdXAgKmNsZWFuIHJ1bGVzLCBhcyBwZXIgc3RhbmRhcmRzLnRleGkuCgpUdWUgSnVuIDE2IDE2OjExOjU5IDE5OTIgIEsuIFJpY2hhcmQgUGl4bGV5ICAocmljaEBydGwuY3lnbnVzLmNvbSkKCgkqIGdldG9wdC5jLCBnZXRvcHQxLmM6IG1lcmdlZCBsYXJnZWx5IGdyYXR1aXRvdXMsIG1vc3RseQoJICB3aGl0ZXNwYWNlIGRpZmZzIGZyb20gb3RoZXIgcHJlcCBkaXN0cmlidXRpb25zLgoKTW9uIEp1biAxNSAxMjoyNTo0NiAxOTkyICBGcmVkIEZpc2ggIChmbmZAY3lnbnVzLmNvbSkKCgkqIGNvbmZpZy9taC1uY3IzMDAwIChJTlNUQUxMKTogIERvbid0IHVzZSAvdXNyL3VjYi9pbnN0YWxsLAoJaXQgaXMgYnJva2VuIG9uIG5jciAzMDAwJ3MuCgpNb24gSnVuIDE1IDAxOjAzOjI2IDE5OTIgIEpvaG4gR2lsbW9yZSAgKGdudSBhdCBjeWdudXMuY29tKQoKCSogc2lnc2V0bWFzay5jOiAgUmV3cml0ZS4gIE9sZCBvbmUgd2FzIHZlcnkgY29uZnVzZWQgYWJvdXQgaXRzCglhcmd1bWVudHMgYW5kIHJlc3VsdC4gIE5ldyBvbmUgY2FuJ3QgZG8gbXVjaCwgYnV0IGF0IGxlYXN0IGtub3dzCgl3aGF0IGl0IGNhbid0IGRvLCBhbmQgaXQncyBnb29kIGVub3VnaCBmb3IgR0RCJ3MgdXNlLgoKU3VuIEp1biAxNCAxNToxNzo0MCAxOTkyICBTdHUgR3Jvc3NtYW4gIChncm9zc21hbiBhdCBjeWdudXMuY29tKQoKCSogZnVuY3Rpb25zLmRlZjogIFVzZSBwcm9wZXIgcHJvdG90eXBlIGZvciBzdHJ0b3VsLgoKRnJpIEp1biAxMiAxOToyMjo0MCAxOTkyICBKb2huIEdpbG1vcmUgIChnbnUgYXQgY3lnbnVzLmNvbSkKCgkqIE1ha2VmaWxlLmluOiAgQWRkIHJhbmRvbS5jLgoJKiBjb25maWcvbWgtKjogIFVzZSAidHJ1ZSIgcmF0aGVyIHRoYW4gImVjaG8gPi9kZXYvbnVsbCIgZm9yIHJhbmxpYi4KCSogY29uZmlndXJlLmluOiAgdXBkYXRlIHNvbGFyaXMyIGNvbmZpZy4KCldlZCBKdW4gMTAgMTY6MzE6MjkgMTk5MiAgRnJlZCBGaXNoICAoZm5mQGN5Z251cy5jb20pCgoJKiByYW5kb20uYzogIEFkZCBmb3IgcmFuZG9tKCkgYW5kIHNyYW5kb20oKS4KCSogZnVuY3Rpb25zLmRlZjogIEFkZCByYW5kb20KClR1ZSBKdW4gIDkgMTc6Mjc6MTggMTk5MiAgRnJlZCBGaXNoICAoZm5mQGN5Z251cy5jb20pCgoJKiBjb25maWcve21oLW5jcjMwMDAsIG1oLXN5c3Y0fTogIEFkZCBkZWZpbml0aW9uIGZvciBJTlNUQUxMCgl1c2luZyAvdXNyL3VjYi9pbnN0YWxsLgoKTW9uIEp1biAgMSAxMzoyMDoxNyAxOTkyICBQZXIgQm90aG5lciAgKGJvdGhuZXJAcnRsLmN5Z251cy5jb20pCgoJKiBzdHJlcnJvci5jOiAgS2x1ZGdlIHRvIGd1YXJkIGFnYWluc3QgYSBjb25mbGljdCB3aXRoCglwb3NzaWJsZSBkZWNsYXJhdGlvbiBvZiBzeXNfZXJybGlzdCBpbiBlcnJuby5oLgoKU3VuIE1heSAzMSAxNTowNzo0NyAxOTkyICBNYXJrIEVpY2hpbiAgKGVpY2hpbiBhdCBjeWdudXMuY29tKQoKCSogY29uZmlndXJlLmluLCBjb25maWcvbWgtc29sYXJpczogYWRkIHNvbGFyaXMyIGNvbmZpZyBzdXBwb3J0LgoKRnJpIE1heSAyOSAxNzoyMzoyMyAxOTkyICBQZXIgQm90aG5lciAgKGJvdGhuZXJAcnRsLmN5Z251cy5jb20pCgoJKiBzaWdzZXRtYXNrLmM6ICAjaWZkZWYgb3V0IHNpZ3NldG1hc2sgaWYgU0lHX1NFVE1BU0sKCWlzIG5vdCBkZWZpbmVkIChzaG91bGQgYmUgZGVmaW5lZCBpbiBzaWduYWwuaCwgc2F5cyBQb3NpeC4pLgoKTW9uIE1heSAxOCAxNzozNTowNCAxOTkyICBLLiBSaWNoYXJkIFBpeGxleSAgKHJpY2hAY3lnbnVzLmNvbSkKCgkqIGdldG9wdC5jOiBtZXJnZWQgY2hhbmdlcyBmcm9tIG1ha2UtMy42Mi4xMS4KCkZyaSBNYXkgIDggMTQ6NTM6MDcgMTk5MiAgSy4gUmljaGFyZCBQaXhsZXkgIChyaWNoQGN5Z251cy5jb20pCgoJKiBnZXRvcHQuYzogbWVyZ2VkIGNoYW5nZXMgZnJvbSBiaXNvbi0xLjE4LgoKVHVlIE1heSAgNSAxMTo1MTo0MCAxOTkyICBQZXIgQm90aG5lciAgKGJvdGhuZXJAcnRsLmN5Z251cy5jb20pCgoJKiBNYWtlZmlsZS5pbjogIERvbid0IGhhdmUgJChFWFRSQV9PRklMRVMpIGRlcGVuZCBvbiBjb25maWcuaCwKCXNpbmNlIHRoYXQgaW50cm9kdWNlcyBhIGNpcmN1bGFyIGRlcGVuZGVuY3kuCgkoJChFWFRSQV9PRklMRVMpIGFyZSB1c2VkIHRvIGJ1aWxkIGNvbmZpZy5oLikKCgkqIHN0cnRvdWwuYzogIEZpeGVzIHRvIGhhbmRsZSBub24tZGVjaW1hbCBiYXNlcyBiZXR0ZXIuCgpXZWQgQXByIDIyIDA5OjI3OjUxIDE5OTIgIEZyZWQgRmlzaCAgKGZuZkBjeWdudXMuY29tKQoKCSogY29uZmlnL21oLW5jcjMwMDA6ICBSZXBsYWNlIE1JTlVTX0cgd2l0aCBDRkxBR1MuCgkqIE1ha2VmaWxlLmRvczogIEZpbmlzaCBNSU5VU19HIGVyYWRpY2F0aW9uLgoJKiBNYWtlZmlsZS5pbiAoQ0ZJTEVTKTogIEFkZCBzdHJzaWduYWwuYy4KCSogTWFrZWZpbGUuaW4gKFJFUVVJUkVEX09GSUxFUyk6ICBBZGQgc3RyZXJyb3IubyBzdHJzaWduYWwubwoJKiBNYWtlZmlsZS5pbiAobmVlZGVkLWxpc3QpOiAgU3BsaXQgY3JlYXRpb24gb2YgZXJyb3JzIGZpbGUgdG8KCXNlcGFyYXRlIG1ha2UgdGFyZ2V0LgoJKiBNYWtlZmlsZS5pbiAoY29uZmlnLmgsIG5lZWRlZDIuYXdrLCBlcnJvcnMpOiAgTmV3IHRhcmdldHMuCgkqIE1ha2VmaWxlLmluIChjbGVhbik6ICBTcGxpdCB0byBtdWx0aXBsZSBsaW5lcywgYWRkIG5lZWRlZDIuYXdrCglhbmQgY29uZmlnLmguCgkqIGR1bW15LmMgKERFRkZVTkMsIERFRlZBUik6ICBBZGQgZGVmaW5lcyBhbmQgdW5kZWZzLgoJKiBmdW5jdGlvbnMuZGVmIChzdHJlcnJvcik6ICBSZW1vdmUgZnJvbSBvcHRpb25hbCBsaXN0LgoJKiBmdW5jdGlvbnMuZGVmIChzeXNfbmVyciwgc3lzX2Vycmxpc3QsIHN5c19zaWdsaXN0KTogIERFRlZBUidzCgkqIGZ1bmN0aW9ucy5kZWYgKHN0cmVycm9yLCBwc2lnbmFsKTogIERFRkZVTkMncwoJKiBzdHJlcnJvci5jOiAgUmV3cml0ZSBmcm9tIHNjcmF0Y2ggdG8gdXNlIHN5c19lcnJsaXN0IG9ubHkgaWYKCWF2YWlsYWJsZSwgYWRkIGVycm5vX21heCgpLCBhZGQgc3RyZXJybm8oKSwgYWRkIHN0cnRvZXJybm8oKSwKCWFkZCB0ZXN0IGRyaXZlci4KCSogc3Ryc2lnbmFsLmM6ICBOZXcgZmlsZSwgc2lnbmFsIGVxdWl2YWxlbnQgdG8gc3RyZXJyb3IuYy4KCVVzZXMgc3lzX3NpZ2xpc3QgaWYgYXZhaWxhYmxlLCBkZWZpbmVzIHNpZ25vX21heCgpLCBzdHJzaWduYWwoKSwKCXN0cnNpZ25vKCksIHN0cnRvc2lnbm8oKSwgcHNpZ25hbCgpLCBhbmQgdGVzdCBkcml2ZXIuCgpNb24gQXByIDIwIDIwOjQ5OjMyIDE5OTIgIEsuIFJpY2hhcmQgUGl4bGV5ICAocmljaEBjeWdudXMuY29tKQoKCSogTWFrZWZpbGUuaW46IGRvIG5vdCBwcmludCByZWN1cnNpb24gbGluZS4KCgkqIE1ha2VmaWxlLmluOiBhbGxvdyBDRkxBR1MgdG8gYmUgcGFzc2VkIGluIGZyb20gY29tbWFuZCBsaW5lLgoJICBSZW1vdmVkIE1JTlVTX0cuICBEZWZhdWx0IENGTEFHUyB0byAtZy4KCk1vbiBBcHIgMjAgMTI6NTc6NDYgMTk5MiAgUGVyIEJvdGhuZXIgIChib3RobmVyQHJ0bC5jeWdudXMuY29tKQoKCSogY29uZmlnL21oLWFpeDogIE5ldy4gIEVYVFJBX09GSUxFUyBsaXN0cyBjb3B5c2lnbi5vLAoJc28gbGliZysrIHVzZXJzIGRvbid0IGhhdmUgdG8gYmUgaW5jb252ZW5pZW5jZWQgYnkgYQoJbGliYy5hIGJ1ZyAobGliYy5hIG5lZWRzIGNvcHlzaWduLCBidXQgZG9lc24ndCBkZWZpbmUgaXQhKS4KCSogY29uZmlndXJlLmluOiAgVXNlIGNvbmZpZy9taC1haXguCgkqIHN0cnRvdWwuYzogIEhhbmRsZSAnLScgYXMgcmVxdWlyZWQgYnkgQU5TSS4KCUNsZWFuIHVwIHJhZGl4IGhhbmRsaW5nLgoJKiBzdHJzdHIuYzogIEZpeCBidWdneSBhbGdvcml0aG0uCgkqIE1ha2VmaWxlLmluOiAgQ2hhbmdlIHNvIHRoYXQgJHtFWFRSQV9PRklMRVN9IGlzCglhcHBlbmRlZCB0byBuZWVkZWQtbGlzdCAod2hpY2ggaXMgdXNlZCBieSBsaWJnKyspLgoKRnJpIEFwciAxMCAyMjo1MTo0MSAxOTkyICBGcmVkIEZpc2ggIChmbmZAY3lnbnVzLmNvbSkKCgkqIGNvbmZpZ3VyZS5pbjogIFJlY29nbml6ZSBuZXcgbmNyMzAwMCBjb25maWcuCgkqIGNvbmZpZy9taC1uY3IzMDAwOiAgTmV3IGNvbmZpZyBmaWxlLgoKV2VkIEFwciAgMSAyMzozMTo0MyAxOTkyICBKb2huIEdpbG1vcmUgIChnbnUgYXQgY3lnbnVzLmNvbSkKCgkqIGFyZ3YuYywgZHVtbXkuYzogIExpbnQuCgpUdWUgTWFyIDMxIDE4OjQ2OjQ0IDE5OTIgIEZyZWQgRmlzaCAgKGZuZkBjeWdudXMuY29tKQoKCSogY29uZmlnL21oLXN5c3Y0OiAgTmV3IGNvbmZpZyBmaWxlLgoJKiBjb25maWd1cmUuaW4gKGhvc3RfbWFrZWZpbGVfZnJhZyk6ICBTZXQgdG8gY29uZmlnL21oLXN5c3Y0IGZvcgoJaG9zdF9vcyA9PSBzeXN2NC4KCSogZ2V0cGFnZXNpemUuYzogIEZvciBTVlI0LCB1c2Ugc3lzY29uZihfU0NfUEFHRVNJWkUpIHRvIGdldAoJcGFnZXNpemUuCgpTdW4gTWFyIDI5IDEyOjI2OjQyIDE5OTIgIEpvaG4gR2lsbW9yZSAgKGdudSBhdCBjeWdudXMuY29tKQoKCSogZ2V0b3B0LmM6ICBMaW50LgoKRnJpIE1hciAyNyAwODozMjo1NSAxOTkyICBGcmVkIEZpc2ggIChmbmZAY3lnbnVzLmNvbSkKCgkqIGZ1bmN0aW9ucy5kZWYgKGFsbG9jYSk6ICBGaXggcmV0dXJuIHR5cGUgYW5kIGFyZ3MgdG8gYXZvaWQKCXR5cGUgY2xhc2ggd2l0aCBnY2MncyBidWlsdGluIGFsbG9jYS4KClR1ZSBNYXIgMjQgMjM6MzM6NDIgMTk5MiAgSy4gUmljaGFyZCBQaXhsZXkgIChyaWNoQGN5Z251cy5jb20pCgoJKiBjb25maWd1cmUuaW4sIGNvbmZpZy9taC1pcml4NDogaXJpeDQgc3VwcG9ydC4KCgkqIE1ha2VmaWxlLmluLCBmdW5jdGlvbnMuZGVmLCBhbGxvY2EuYzogYWRkZWQgYWxsb2NhLgoKVHVlIE1hciAyNCAxNzozNDo0NiAxOTkyICBTdHUgR3Jvc3NtYW4gIChncm9zc21hbiBhdCBjeWdudXMuY29tKQoKCSogb2JzdGFjay5jIChDQUxMX0ZSRUVGVU4pOiAgTWFrZSBpdCBjb21waWxlIG9uIERFQ3N0YXRpb25zLgoKVGh1IE1hciAxOSAxMzo1Nzo0MiAxOTkyICBGcmVkIEZpc2ggIChmbmZAY3lnbnVzLmNvbSkKCgkqIGFyZ3YuYzogIEZpeCB2YXJpb3VzIGV4dGVybmFsIGZ1bmN0aW9uIGRlZmluaXRpb25zIHRvIGJlCgljb3JyZWN0IGluIGFuIEFOU0kgY29tcGlsYXRpb24gZW52aXJvbm1lbnQuCgpTYXQgTWFyIDE0IDE3OjI4OjE3IDE5OTIgIEZyZWQgRmlzaCAgKGZuZkBjeWdudXMuY29tKQoKCSogb2JzdGFjay5jOiAgQ2hhbmdlcyB0byBzdXBwb3J0IGNhbGxpbmcgbW1hbGxvYyBmdW5jdGlvbnMsCgl3aGljaCB0YWtlIGFuIGFkZGl0aW9uYWwgYXJndW1lbnQgb3ZlciBtYWxsb2MgZnVuY3Rpb25zLgoKRnJpIE1hciAgNiAyMjowMToxMCAxOTkyICBLLiBSaWNoYXJkIFBpeGxleSAgKHJpY2hAY3lnbnVzLmNvbSkKCgkqIGFkZGVkIGNoZWNrIHRhcmdldC4KClRodSBGZWIgMjcgMjI6MTk6MzkgMTk5MiAgUGVyIEJvdGhuZXIgIChib3RobmVyQGN5Z251cy5jb20pCgoJKiBhcmd2LmM6ICAjaW5jbHVkZSBhbGxvY2EtY29uZi5oIChuZWVkZWQgYnkgQUlYKS4KCldlZCBGZWIgMjYgMTg6MDQ6NDAgMTk5MiAgSy4gUmljaGFyZCBQaXhsZXkgIChyaWNoQGN5Z251cy5jb20pCgoJKiBNYWtlZmlsZS5pbiwgY29uZmlndXJlLmluOiByZW1vdmVkIHRyYWNlcyBvZiBuYW1lc3ViZGlyLAoJICAtc3ViZGlycywgJChzdWJkaXIpLCAkKHVuc3ViZGlyKSwgc29tZSByY3MgdHJpZ2dlcnMuICBGb3JjZWQKCSAgY29weXJpZ2h0cyB0byAnOTIsIGNoYW5nZWQgc29tZSBmcm9tIEN5Z251cyB0byBGU0YuCgpTYXQgRmViIDIyIDAxOjA5OjIxIDE5OTIgIFN0dSBHcm9zc21hbiAgKGdyb3NzbWFuIGF0IGN5Z251cy5jb20pCgoJKiBhcmd2LmM6ICBDaGVjayBpbiBGcmVkJ3MgdmVyc2lvbiB3aGljaCBmaXhlcyBwcm9ibGVtcyB3aXRoCglhbGxvY2EoKS4KCkZyaSBGZWIgIDcgMjE6NDY6MDggMTk5MiAgU3R1IEdyb3NzbWFuICAoZ3Jvc3NtYW4gYXQgY3lnbnVzLmNvbSkKCgkqIG1ha2VmaWxlLmRvczogIFJlbW92ZSBOVUwgdG8ga2VlcCBwYXRjaCBmcm9tIGZhaWxpbmcuCgpUaHUgSmFuIDMwIDIyOjQ4OjQxIDE5OTIgIFN0dSBHcm9zc21hbiAgKGdyb3NzbWFuIGF0IGN5Z251cy5jb20pCgoJKiBnZXRvcHQuYyAoX2dldG9wdF9pbnRlcm5hbCk6ICBGaXggdXNhZ2Ugb2YgZW51bSBoYXNfYXJnLgoKTW9uIEphbiAyMCAxODo1MzoyMyAxOTkyICBTdHUgR3Jvc3NtYW4gIChncm9zc21hbiBhdCBjeWdudXMuY29tKQoKIAkqIGdldG9wdC5jLCBnZXRvcHQxLmMsIC4uL2luY2x1ZGUvZ2V0b3B0Lmg6ICBHZXQgbGF0ZXN0IHZlcnNpb25zLgoKU2F0IEphbiAxOCAxNjo1MzowMSAxOTkyICBGcmVkIEZpc2ggIChmbmYgYXQgY3lnbnVzLmNvbSkKCgkqIGFyZ3YuYzogIE5ldyBmaWxlIHRvIGJ1aWxkIGFuZCBkZXN0cm95IHN0YW5kYXJkIGFyZ3VtZW50Cgl2ZWN0b3JzIGZyb20gYSBjb21tYW5kIHN0cmluZy4KCgkqIE1ha2VmaWxlLmluOiAgQWRkIGFyZ3YuYyBhbmQgYXJndi5vIHRvIGFwcHJvcHJpYXRlIG1hY3Jvcy4KCkZyaSBEZWMgMjAgMTI6MTI6NTcgMTk5MSAgRnJlZCBGaXNoICAoZm5mIGF0IGN5Z251cy5jb20pCgoJKiBjb25maWd1cmUuaW46ICBDaGFuZ2Ugc3ZyNCByZWZlcmVuY2VzIHRvIHN5c3Y0LgoKCSogcmluZGV4LmM6ICBEZWNsYXJlIHJldHVybiB0eXBlIG9mIGV4dGVybmFsbHkgdXNlZCBmdW5jdGlvbgoJc3RycmNocigpLgoKVGh1IERlYyAxOSAxODozNTowMyAxOTkxICBKb2huIEdpbG1vcmUgIChnbnUgYXQgY3lnbnVzLmNvbSkKCgkqIE1ha2VmaWxlLmluOiAgUmVtb3ZlICIqKioiIGluIG5vcm1hbCBvdXRwdXQsIHNpbmNlIE1ha2UgcHJvZHVjZXMKCXRoaXMgb24gZXJyb3JzLCBhbmQgaXQncyBjb252ZW5pZW50IHRvIHNlYXJjaCBmb3IuCgpUdWUgRGVjIDE3IDIzOjIxOjMwIDE5OTEgIFBlciBCb3RobmVyICAoYm90aG5lciBhdCBjeWdudXMuY29tKQoKCSogbWVtY21wLmMsIG1lbWNweS5jLCBtZW1tb3ZlLmMsIG1lbXNldC5jLCBzdHJjaHIuYywgc3RycmNoci5jOgoJTmV3IEFOU0kgZnVuY3Rpb25zLiAgVGhlIG9sZCBub24tQU5TSSBmdW5jdGlvbnMgKHN1Y2ggYXMgYmNvcHkpCglzaG91bGQgYmUgYXZvaWRlZC4KCSogYmNvcHkuYzogIEZpeCB0byBjb3JyZWN0bHkgaGFuZGxlIG92ZXJsYXBwaW5nIHJlZ2lvbnMuCgkqIGluZGV4LmMsIHJpbmRleC5jOiAgUmUtd3JpdGUgaW4gdGVybXMgb2Ygc3RyY2hyKCkgYW5kIHN0cnJjaHIoKS4KCSogZnVuY3Rpb25zLmRlZjogIEFkZCB0aGUgbmV3IGZ1bmN0aW9ucy4KCSogZnVuY3Rpb25zLmRlZjogIEFkZCA0dGggcGFyYW1ldGVyIHRvIERFRiBtYWNybywKCWFuIGFuc2lkZWNsLmgtc3R5bGUgcHJvdG90eXBlLgoJKiBkdW1teS5jOiAgVXNlIGV4cGFuZGVkIERFRiBtYWNybyB0byBjcmVhdGUgYSBkdW1teSBmdW5jdGlvbgoJY2FsbCwgd2l0aCBjb3JyZWN0IHBhcmFtZXRlciB0eXBlcy4gIChUaGlzIGF2b2lkcyBzb21lCgljb21wbGFpbnRzIGZyb20gZ2NjIGFib3V0IHByZWRlZmluZWQgYnVpbHRpbnMuKQoKCU1vdmUgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgY29uZmlnL21oLWRlZmF1bHQgaW50byBNYWtlZmlsZS5pbi4KCVRoaXMgYXZvaWQgZHVwbGljYXRpb24sIGFuZCBzaW1wbGlmaWVzIHRoaW5ncyBzbGlnaHRseS4KCSogTWFrZWZpbGUuaW46ICBUd2VhayBzbyB3ZSBkb24ndCBuZWVkIGNvbmZpZy9taC1kZWZhdWx0LgoJKiBSRUFETUU6ICBVcGRhdGUuCgkqIGNvbmZpZ3VyZS5pbjogIE5vIGxvbmdlciBuZWVkIGNvbmZpZy9taC1kZWZhdWx0LgoJKiBjb25maWcvbWgtZGVmYXVsdDogIERlbGV0ZWQuCgkqIGNvbmZpZy9taC1zeXN2OiAgUmVtb3ZlIGxpbmVzIGNvcGllZCBmcm9tIG9sZCBtaC1kZWZhdWx0LgoKVHVlIERlYyAxNyAwNTo0Njo0NiAxOTkxICBKb2huIEdpbG1vcmUgIChnbnUgYXQgY3lnbnVzLmNvbSkKCgkqIGZkbWF0Y2guYyAoZmRtYXRjaCk6ICBEb24ndCBjb21wYXJlIHN0X3JkZXYsIHdoaWNoIGlzIGZvcgoJJ21rbm9kJyBkZXZpY2UgbnVtYmVycy4KCk1vbiBEZWMgMTYgMTI6MjU6MzQgMTk5MSAgRnJlZCBGaXNoICAoZm5mIGF0IGN5Z251cy5jb20pCgoJKiBmZG1hdGNoLmMsIE1ha2VmaWxlLmluOiAgQWRkIG5ldyBmdW5jdGlvbiB0aGF0IHRha2VzIHR3bwoJb3BlbiBmaWxlIGRlc2NyaXB0b3JzIGFuZCByZXR1cm5zIG5vbnplcm8gaWYgdGhleSByZWZlciB0bwoJdGhlIHNhbWUgZmlsZSwgemVybyBvdGhlcndpc2UuICAodXNlZCBpbiBnZGIpCgpXZWQgRGVjIDExIDE3OjQwOjM5IDE5OTEgIFN0ZXZlIENoYW1iZXJsYWluICAoc2FjIGF0IHJ0bC5jeWdudXMuY29tKQoJRnJvbSBESjoKCSogbXNkb3MuYzogc3R1YiBmdW5jdGlvbnMgZm9yIGRvcy4KCSogbWFrZWZpbGUuZG9zLCBjb25maWdkai5iYXQ6IG5ldy4KCSogZ2V0b3B0LmM6IERvbid0IGluY2x1ZGUgYWxsb2NhLWNvbmYuaCBpbiBhIEdPMzIgd29ybGQuCgoKVHVlIERlYyAxMCAwNDoxNDo0OSAxOTkxICBLLiBSaWNoYXJkIFBpeGxleSAgKHJpY2ggYXQgcnRsLmN5Z251cy5jb20pCgoJKiBNYWtlZmlsZS5pbjogaW5mb2RpciBiZWxvbmdzIGluIGRhdGFkaXIuCgpGcmkgRGVjICA2IDIzOjI2OjQ1IDE5OTEgIEsuIFJpY2hhcmQgUGl4bGV5ICAocmljaCBhdCBydGwuY3lnbnVzLmNvbSkKCgkqIE1ha2VmaWxlLmluOiByZW1vdmUgc3BhY2VzIGZvbGxvd2luZyBoeXBoZW5zIGJlY2F1c2UgYnNkIG1ha2UKCSAgY2FuJ3QgY29wZS4gIGFkZGVkIHN0YW5kYXJkcy50ZXh0IHN1cHBvcnQuICBpbnN0YWxsIHVzaW5nCgkgIElOU1RBTExfREFUQS4KCgkqIGNvbmZpZ3VyZS5pbjogcmVtb3ZlIGNvbW1vbnRhcmdldHMgYXMgaXQgaXMgbm8gbG9uZ2VyIGEKCSAgcmVjb2duaXplZCBob29rLgoKVGh1IERlYyAgNSAyMjo0Njo0NiAxOTkxICBLLiBSaWNoYXJkIFBpeGxleSAgKHJpY2ggYXQgcnRsLmN5Z251cy5jb20pCgoJKiBNYWtlZmlsZS5pbjogaWRlc3RkaXIgYW5kIGRkZXN0ZGlyIGdvIGF3YXkuICBBZGRlZCBjb3B5cmlnaHRzCgkgIGFuZCBzaGlmdCBncGwgdG8gdjIuICBBZGRlZCBDaGFuZ2VMb2cgaWYgaXQgZGlkbid0IGV4aXN0LiBkb2NkaXIKCSAgYW5kIG1hbmRpciBub3cga2V5ZWQgb2ZmIGRhdGFkaXIgYnkgZGVmYXVsdC4KCkZyaSBOb3YgMjIgMTk6MTU6MjkgMTk5MSAgSm9obiBHaWxtb3JlICAoZ251IGF0IGN5Z251cy5jb20pCgoJKiBNYWtlZmlsZS5pbjogIGZpbmQtbmVlZGVkLmF3ayBkb2VzIG5vdCBmaXQgaW4gMTQgY2hhcnMuCgoJKiBNYWtlZmlsZS5pbjogIFN1cHByZXNzIGVycm9yIGNoZWNraW5nIHdoZW4gY29tcGlsaW5nIHRoZSB0ZXN0Cglwcm9ncmFtLCBiZWNhdXNlIFVsdHJpeCBtYWtlL3NoIGFib3J0cyB0aGVyZSBkdWUgdG8gYSBidWcuCgpGcmkgTm92IDIyIDEyOjIzOjE3IDE5OTEgIFBlciBCb3RobmVyICAoYm90aG5lciBhdCBjeWdudXMuY29tKQoKCSogTWFrZWZpbGUuaW46ICBSZS1kaWQgaG93IEVYVFJBX09GSUxFUyBpcyB1c2VkIHRvIGJlIG1vcmUgdXNlZnVsLgoJKiBSRUFETUU6ICBFeHBsYWluZWQgaG93IHRoZSBhdXRvLWNvbmZpZ3VyYXRpb24gd29ya3MsCglhbmQgaG93IHRvIGFkZCBuZXcgZmlsZXMgYW5kL29yIGNvbmZpZ3VyYXRpb25zLgoKRnJpIE5vdiAyMiAwOTo0NToyMyAxOTkxICBKb2huIEdpbG1vcmUgIChnbnUgYXQgY3lnbnVzLmNvbSkKCgkqIHN0cnRvdWwuYzogIEF2b2lkIGRlZmluaW5nIFVMT05HX01BWCBpZiBhbHJlYWR5IGRlZmluZWQ7CgljYXN0IGEgY29uc3QgY2hhciAqIHRvIGNoYXIgKiBmb3IgcGVkYW50cy4KCgkqIGdldG9wdC5jOiAgT25seSBkZWZpbmUgImNvbnN0IiBhZnRlciBsb2NhbCBpbmNsdWRlIGZpbGVzIGdldCB0bywKCWFuZCBvbmx5IGlmIHRoZXkgaGF2ZW4ndCBkZWZpbmVkIGl0LgoKVGh1IE5vdiAyMSAxNjo1ODo1MyAxOTkxICBKb2huIEdpbG1vcmUgIChnbnUgYXQgY3lnbnVzLmNvbSkKCgkqIGdldGN3ZC5jIChyZW1vdmUgZ2V0d2QuYyk6IEdOVSBjb2RlIHNob3VsZCBjYWxsIGdldGN3ZCgpLiAgV2UKCWVtdWxhdGUgaXQgd2l0aCBnZXR3ZCgpIGlmIGF2YWlsYWJsZS4gIFRoaXMgYXZvaWRzIGNhbGxlcnMgaGF2aW5nCgl0byBmaW5kIGEgTUFYUEFUSExFTiBvciBQQVRIX01BWCB2YWx1ZSBmcm9tIHNvbWV3aGVyZS4KCSogTWFrZWZpbGUuaW4sIGZ1bmN0aW9ucy5kZWY6ICBnZXR3ZC0+Z2V0Y3dkLgoJKiBjb25maWd1cmUuaW46ICBVc2UgZ2VuZXJpYyBjYXNlIGZvciBldmVyeSBzeXN0ZW0uCgkqIGNvbmZpZy9taC17ZGVsdGE4OCxtYWNoLHJzNjAwMCxzdnI0fTogIFJlbW92ZS4KCSogY29uZmlnL21oLXN5c3Y6ICBVc2UgZGVmYXVsdCBoYW5kbGluZywganVzdCBhZGQgLURVU0cuCgpUaHUgTm92IDE0IDEwOjU4OjA1IDE5OTEgIFBlciBCb3RobmVyICAoYm90aG5lciBhdCBjeWdudXMuY29tKQoKCSogTWFrZWZpbGUuaW4sIGNvbmZpZy9taC1kZWZhdWx0OiBSZS1kbyBtYWtlIG1hZ2ljCglzbyB0aGF0IGZvciB0aGUgZGVmYXVsdCAoImF1dG9tYXRpYyIpIG1vZGUgd2Ugb25seQoJY29tcGlsZSB0aGUgZmlsZXMgd2UgYWN0dWFsbHkgbmVlZC4gIERvIHRoaXMgdXNpbmcKCWEgcmVjdXJzaXZlIG1ha2U6ICBUaGUgdG9wLWxldmVsIGdlbmVyYXRlcyB0aGUgbGlzdAoJb2YgbmVlZGVkIGZpbGVzIChsb29zZWx5LCB0aGUgb25lcyBtaXNzaW5nIGluIGxpYmMpLAoJYW5kIHRoZW4gcGFzc2VzIHRoYXQgbGlzdCB0byB0aGUgcmVjdXJzaXZlIG1ha2UuCgkqIGNvbmZpZy9taC1tYWNoOiAgUmVtb3ZlIG9ic29sZXRlIFNUUkVSUk9SLXtDLE99IG1hY3Jvcy4KClR1ZSBOb3YgMTIgMTk6MTA6NTcgMTk5MSAgSm9obiBHaWxtb3JlICAoZ251IGF0IGN5Z251cy5jb20pCgoJUlMvNjAwMCBob3N0IHN1cHBvcnQgKGdydW1ibGUpLgoKCSogY29uZmlndXJlLmluOiAgQnVpbGQgYWxsb2NhLWNvbmYuaCBmaWxlIGZyb20gYWxsb2NhLW5vcm0uaAoJKGV2ZXJ5dGhpbmcgZWxzZSkgb3IgYWxsb2NhLWJvdGNoLmggKHJzLzYwMDApLgoJKiBNYWtlZmlsZS5pbjogIEluY2x1ZGUgLiBvbiB0aGUgaW5jbHVkZSBwYXRoLgoJKiBnZXRvcHQuYzogIFVzZSBhbGxvY2EtY29uZi5oLgoJKiBhbGxvY2Etbm9ybS5oOiAgSG93IHRvIGRlY2xhcmUgYWxsb2NhIG9uIHJlYXNvbmFibGUgbWFjaGluZXMuCgkqIGFsbG9jYS1ib3RjaC5oOiBIb3cgdG8gZGVjbGFyZSBhbGxvY2Egb24gYnJhaW5kZWFkIG1hY2hpbmVzLgoKVHVlIE5vdiAxMiAwOToyMTo0OCAxOTkxICBGcmVkIEZpc2ggIChmbmYgYXQgY3lnbnVzLmNvbSkKCgkqIGNvbmNhdC5jIDogIE5ldyBmaWxlLCBsaWtlIGNvbmNhdCgpIGluIGdkYiBidXQgY2FuIHRha2UgYQoJdmFyaWFibGUgbnVtYmVyIG9mIGFyZ3VtZW50cyByYXRoZXIgdGhhbiBmaXhlZCBhdCAzIGFyZ3MuICBGb3IKCW5vdywgY2xpZW50IGFwcGxpY2F0aW9ucyBtdXN0IHN1cHBseSBhbiB4bWFsbG9jKCksIHdoaWNoIGlzIGEKCWZyb250IGVuZCBmdW5jdGlvbiB0byBtYWxsb2MoKSB0aGF0IGRlYWxzIHdpdGggb3V0LW9mLW1lbW9yeQoJY29uZGl0aW9ucy4KCgkqIE1ha2VmaWxlLmluOiAgQWRkIGNvbmNhdC5jIGFuZCBjb25jYXQubyB0byBhcHByb3ByaWF0ZSBtYWNyb3MuCgpTYXQgTm92ICA5IDEzOjI5OjU5IDE5OTEgIEZyZWQgRmlzaCAgKGZuZiBhdCBjeWdudXMuY29tKQoKCSogY29uZmlnL21oLXN2cjQ6ICBBZGQgc2lnc2V0bWFzayB0byBsaXN0IG9mIHJlcXVpcmVkIGZ1bmN0aW9ucy4KClN1biBOb3YgIDMgMTE6NTc6NTYgMTk5MSAgUGVyIEJvdGhuZXIgIChib3RobmVyIGF0IGN5Z251cy5jb20pCgoJKiB2c3ByaW50Zi5jOiAgTmV3IGZpbGUuCgkqIGZ1bmN0aW9ucy5kZWYsIE1ha2VmaWxlLmluOiAgQWRkIHZzcHJpbnRmLgoKU3VuIE9jdCAyNyAxNjozMToyMiAxOTkxICBKb2huIEdpbG1vcmUgIChnbnUgYXQgY3lnbnVzLmNvbSkKCgkqIGNvbmZpZ3VyZS5pbiwgY29uZmlnL21oLXJzNjAwMDogIEFkZCBycy82MDAwIGhvc3Qgc3VwcG9ydC4KCSogTWFrZWZpbGUuaW46ICBDb21waWxlIHdpdGggZGVidWcgaW5mby4KCkZyaSBPY3QgMjUgMTc6MDE6MTIgMTk5MSAgUGVyIEJvdGhuZXIgIChib3RobmVyIGF0IGN5Z251cy5jb20pCgoJKiBNYWtlZmlsZS5pbiwgY29uZmlndXJlLmluLCBhbmQgbmV3IGZpbGVzOiBkdW1teS5jLCBmdW5jdGlvbnMuZGVmLAoJY29uZmlnL21mLWRlZmF1bHQ6ICBBZGRlZCBhIGRlZmF1bHQgY29uZmlndXJhdGlvbiBtb2RlLAoJd2hpY2ggaW5jbHVkZXMgaW50byBsaWJpYmVydHkuYSBmdW5jdGlvbnMgdGhhdCBhcmUgIm1pc3NpbmciIGluIGxpYmMuCgkqIHN0cmR1cC5jLCB2cHJpbnRmLmMsIHZmcHJpbnRmLmM6IE5ldyBmaWxlcy4KClRodSBPY3QgMjQgMDI6Mjk6MjYgMTk5MSAgRnJlZCBGaXNoICAoZm5mIGF0IGN5Z251cy5jb20pCgoJKiBjb25maWcvaG1ha2Utc3ZyNDogTmV3IGZpbGUuCgoJKiBjb25maWcvaG1ha2Utc3lzdjogQWRkIEhPU1RfQ0ZJTEVTIGFuZCBIT1NUX09GSUxFUy4KCgkqIGJhc2VuYW1lLmMsIGJjbXAuYywgYmNvcHkuYywgYnplcm8uYywgZ2V0cGFnZXNpemUuYyBnZXR3ZC5jLAoJaW5kZXguYywgaW5zcXVlLmMsIHJpbmRleC5jLCBzcGFjZXMuYywgc3Ryc3RyLmMsIHZmb3JrLmM6IE5ldwoJZmlsZXMgY29udGFpbmluZyBlaXRoZXIgcG9ydGFibGUgQyB2ZXJzaW9ucyBvciBlbXVsYXRpb25zIHVzaW5nCgluYXRpdmUgbGlicmFyeSBjYWxscy4KCgkqIHN0cmVycm9yLmM6ICBBZGQgY29weXJpZ2h0LCBpbnRlcm5hbCBkb2N1bWVudGF0aW9uLCBldGMuCgoJKiBzdHJ0b2wuYzogIFJlcGxhY2UgaGFyZHdpcmVkIGhleCBjb25zdGFudHMgd2l0aCBzb21lIG1vcmUKCXBvcnRhYmxlIG1hY3Jvcy4gIFJlbW92ZSBpbGxlZ2FsIChhY2NvcmRpbmcgdG8gZ2NjKSBjYXN0LgoKCSogc3RydG91bC5jOiBSZXBsYWNlIGhhcmR3aXJlZCBoZXggY29uc3RhbnQgd2l0aCBtb3JlIHBvcnRhYmxlCgltYWNyby4KCgkqIE1ha2VmaWxlLmluOiBNb3ZlIFRBUkdFVExJQiBhbmQgQ0ZMQUdTIHdoZXJlIG1ha2VmaWxlIGZyYWdtZW50cwoJY2FuIG92ZXJyaWRlIHRoZW0uICBBZGQgbmV3IHNvdXJjZSBhbmQgb2JqZWN0IGZpbGUgbmFtZXMgdG8gQ0ZJTEVTCglhbmQgT0ZJTEVTIHJlc3BlY3RpdmVseS4KCgkqIGNvbmZpZ3VyZS5pbjogQWRkIHN1cHBvcnQgZm9yIFNWUjQgbWFrZWZpbGUgZnJhZ21lbnRzLgoKVHVlIE9jdCAyMiAxOTowMDoyMyAxOTkxICBTdGV2ZSBDaGFtYmVybGFpbiAgKHN0ZXZlIGF0IGN5Z251cy5jb20pCgoJKiBNYWtlZmlsZS5pbjogTW92ZSBSQU5MSUIsIEFSIGFuZCBBUl9GTEFHUyB0byB3aGVyZSB0aGV5IGNhbiBiZQoJb3Zlci1yaWRkZW4gYnkgY29uZmlnL2htYWtlLSoKCSogY29uZmlndXJlLmluOiBhZGRlZCBtODhrY3ZzIHRvIHN5c3YgbGlzdAoKRnJpIE9jdCAgNCAwMToyOTowOCAxOTkxICBKb2huIEdpbG1vcmUgIChnbnUgYXQgY3lnbnVzLmNvbSkKCgkqIE1ha2VmaWxlLmluOiAgTW9zdCBob3N0cyBuZWVkIHN0cmVycm9yLCBidXQgb25lIG9yIHR3byBkb24ndCwKCWFuZCB0aGV5IG92ZXJyaWRlIHRoZXNlIGRlZmluaXRpb25zIGluIHRoZSBob3N0LWRlcGVuZGVudCBtYWtlZmlsZQoJZnJhZ21lbnQuCgkqIGNvbmZpZy9obWFrZS1tYWNoOiAgVGhlIG9kZCBtYW4gb3V0IG9uIHN0cmVycm9yIC0tIGl0J3Mgc3VwcGxpZWQuCgkqIHN0cmVycm9yLmM6ICBOZXcgZmlsZS4KCgkqIHN0cnRvbC5jLCBzdHJ0b3VsLmM6ICBBZGQgc3RydG9sIHRvIGxpYmliZXJ0eSwgc2luY2UgTWFjaCBsYWNrcwoJaXQgYW5kIGJmZCB1c2VzIGl0LgoJKiBjb25maWd1cmUuaW4sIE1ha2VmaWxlLmluLCBjb25maWcvaG1ha2UtbWFjaDogIE9ubHkgY29uZmlndXJlCglzdHJ0b2wgJiBzdHJvdG91bCBpbiBvbiBNYWNoLgoKVHVlIFNlcCAgMyAwNjozNjoyMyAxOTkxICBKb2huIEdpbG1vcmUgIChnbnUgYXQgY3lnaW50LmN5Z251cy5jb20pCgoJKiBvYnN0YWNrLmM6ICBNZXJnZSB3aXRoIGxhdGVzdCBGU0YgdmVyc2lvbi4KCgwKTG9jYWwgVmFyaWFibGVzOgp2ZXJzaW9uLWNvbnRyb2w6IG5ldmVyCkVuZDoK