IyAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQojICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKIyAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KIyAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQojICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCiMgICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKIyAgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAojICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgojICAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKIyAgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCiMgIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKIyAgdW5kZXIgdGhlIExpY2Vuc2UuCgojCiMgIFRoaXMgaXMgdGhlIG1haW4gaTE4biByZXNvdXJjZSBmaWxlIGZvciBKU1BXaWtpIGludGVybmFsCiMgIGNvZGUsIHRoZSBzby1jYWxsZWQgY29yZSBjb2RlLgojCiMgQW5yZWRlICJEdSIgb2RlciAiU2llIj8gaHR0cDovL2xpc3RzLndpa2ltZWRpYS5vcmcvcGlwZXJtYWlsL3dpa2lkZS1sLzIwMDctSnVseS8wMTk1OTUuaHRtbAojCiMgTW9tZW50YW4gd2lyZCAiZHUiIHZlcndlbmRldCwgaW0gR2Vpc3RlIHZvbiBKYW5uZSBKYWxrYW5lbnMgd2l0emlnZXIgCiMgdW5kIG9mZmVuZXIgQXJ0LCBTeXN0ZW1tZWxkdW5nZW4gaW4gZW5nbGlzY2ggenUgZm9ybXVsaWVyZW4uICJXaGVlISIuCiMgImR1IiBhbmltaWVydCB6dW0gbWl0bWFjaGVuLiBBbnJlZGUgd2lyZCBrbGVpbiBnZXNjaHJpZWJlbi4KIwojIERpZSBEYXRlaSBtdXNzIGluIGRlciBDb2RpZXJ1bmcgSVNPIDg4NTktMSAoTGF0aW4tMSkgYWJnZXNwZWljaGVydCB3ZXJkZW4uCiMgVW1sYXV0ZSB1bmQgU29uZGVyemVpY2hlbiBr9m5uZW4gZGFoZXIgZGlyZWt0IGVpbmdldGlwcHQgd2VyZGVuIHVuZCBt/HNzZW4gKGT8cmZlbikKIyBpbnNiZXNvbmRlcmUgbmljaHQgbWl0dGVscyBIVE1MLUVudGl0aWVzIGVzY2FwZWQgd2VyZGVuLgojCiMgVHJhbnNsYXRpb24gcmV2aXNlZCBvbiAyMDA4LTAyLTA1IGJ5IEZsb3JpYW4gSG9sZWN6ZWsKCiMKIyAgVGltZS9kYXRlIGZvcm1hdHRpbmcuICBTb21lIHBsdWdpbnMgbWlnaHQgYmUgdXNpbmcgc29tZSBzcGVjaWZpYyBmb3JtYXRzLAojICBidXQgeW91IGFyZSBmcmVlIHRvIHVzZSB0aGVzZSB0aW1lcyBhbmQgZGF0ZXMuCiMKCiMgVGltZWRhdGUgZm9ybWF0IHVzZWQgd2hlbiBhIGZ1bGwgdGltZS9kYXRlIGlzIHVzZWQKY29tbW9uLmRhdGV0aW1lZm9ybWF0ID0gZGQuTU0ueXl5eSwgSEg6bW06c3Mgenp6egoKIyBUaW1lIHN0YW1wIGZvcm1hdCB3aGVuIGEgc2ltcGxlIHRpbWUgc3RhbXAgaXMgbmVlZGVkICh3aXRob3V0IGRhdGUpCmNvbW1vbi50aW1lZm9ybWF0ID0gSEg6bW06c3MKCiMgRGF0ZSBzdGFtcCBmb3JtYXQgd2hlbiBzaG93aW5nIGp1c3QgdGhlIGRhdGUuCmNvbW1vbi5kYXRlZm9ybWF0ID0gRUVFRSwgZC4gTU1NTSB5eXl5CgojICJVbmtub3duIGF1dGhvciIKY29tbW9uLnVua25vd25hdXRob3IgPSBVbmJla2FubnRlckF1dG9yCgojIERlY2lzaW9ucwojIHswfT10YXNrIG93bmVyOyB7MX09cmVxdWVzdGVyOyB7Mi05fT1hZGRpdGlvbmFsIG1lc3NhZ2UgYXJndW1lbnRzIGZvciB3b3JrZmxvdwpkZWNpc2lvbi5lZGl0V2lraUFwcHJvdmFsPVNlaXRlIHsyfSBiZWFyYmVpdGVuCgojIFNlY3VyaXR5CgpzZWN1cml0eS5lcnJvci5ub2FjY2Vzcy5sb2dnZWQ9RHUgaGFzdCBrZWluZSBadWdyaWZmc2JlcmVjaHRpZ3VuZyBhdWYgezB9LiBXaWxsc3QgZHUgZGljaCBhbHMgYW5kZXJlciBcCglCZW51dHplciBhbm1lbGRlbj8Kc2VjdXJpdHkuZXJyb3Iubm9hY2Nlc3M9RHUgaGFzdCBrZWluZSBadWdyaWZmc2JlcmVjaHRpZ3VuZyBhdWYgezB9LiBCaXR0ZSBtZWxkZSBkaWNoIHp1ZXJzdCBhbiEKc2VjdXJpdHkuZXJyb3Iud3JvbmdpcD1EZWluZSBJUC1BZHJlc3NlIGhhdCBzaWNoIHp3aXNjaGVuemVpdGxpY2ggZ2XkbmRlcnQhIEVzIGlzdCBhdXMgU2ljaGVyaGVpdHNncvxuZGVuIFwKCW5pY2h0IGVybGF1YnQsIHZvbiBlaW5lciBhbmRlcmVuIElQLUFkcmVzc2UgenUgcG9zdGVuIGFscyBkZXIsIHZvbiBkZXIgYXVzIGRpZSBTZWl0ZSBnZWxhZGVuIHd1cmRlLgoKc2VjdXJpdHkuZXJyb3IuY3JlYXRlcHJvZmlsZWJlZm9yZWxvZ2luPUR1IG11c3N0IGRpY2ggYW5tZWxkZW4sIGJldm9yIGR1IGVpbiBQcm9maWwgZXJzdGVsbGVuIGthbm5zdCEKc2VjdXJpdHkuZXJyb3IuYmxhbmtwYXNzd29yZD1EYXMgUGFzc3dvcnQgZGFyZiBuaWNodCBsZWVyIHNlaW4hCnNlY3VyaXR5LmVycm9yLnBhc3N3b3Jkbm9tYXRjaD1EaWUgUGFzc3f2cnRlciBzdGltbWVuIG5pY2h0IPxiZXJlaW4hCgpzZWN1cml0eS5lcnJvci5pbGxlZ2FsZnVsbG5hbWU9RGVyIHZvbGxlIE5hbWUgezB9IGlzdCB1bmf8bHRpZyEKc2VjdXJpdHkuZXJyb3IuaWxsZWdhbGxvZ2lubmFtZT1EZXIgQmVudXR6ZXJuYW1lIHswfSBpc3QgdW5n/Gx0aWchCgojIFRoZXNlIHNob3VsZCByb3VnaGx5IG1hdGNoIHdoYXRldmVyIGlzIHVzZWQgaW4gZGVmYXVsdC5wcm9wZXJ0aWVzIGZvciBVc2VyUHJvZmlsZS5qc3AKc2VjdXJpdHkudXNlci5sb2dpbm5hbWU9QmVudXR6ZXJuYW1lCnNlY3VyaXR5LnVzZXIuZnVsbG5hbWU9dm9sbGVyIE5hbWUKc2VjdXJpdHkudXNlci5lbWFpbD1FLU1haWwtQWRyZXNzZQpzZWN1cml0eS51c2VyLmZ1bGxuYW1lLmludmFsaWQ9VW5n/Gx0aWdlciBCZW51dHplcm5hbWUKCiMgUmVuYW1pbmcKCnJlbmFtZS5lbXB0eT1EZXIgbmV1ZSBOYW1lIGb8ciBkaWUgU2VpdGUgd2FyIGxlZXIhCnJlbmFtZS5lcnJvci50aXRsZT1VbWJlbmVubmVuIGRlciBTZWl0ZSBuaWNodCBt9mdsaWNoCnJlbmFtZS5lcnJvci5yZWFzb249R3J1bmQ6CnJlbmFtZS5pZGVudGljYWw9RGllIFNlaXRlbm5hbWVuIHNpbmQgaWRlbnRpc2NoIQpyZW5hbWUuZXhpc3RzPURpZSBTZWl0ZSBleGlzdGllcnQgYmVyZWl0cyEKcmVuYW1lLnVua25vd25lcnJvcj1FaW4gdW5iZWthbm50ZXIgRmVobGVyIGlzdCBhdWZnZXRyZXRlbiEKCiMgTG9naW4uanNwCgpsb2dpbi5lcnJvci5wYXNzd29yZD1Vbmf8bHRpZ2VzIFBhc3N3b3J0IQpsb2dpbi5lcnJvci5ub2FjY2Vzcz1EdSBoYXN0IG9mZmVuYmFyIGtlaW5lIEJlcmVjaHRpZ3VuZyBoaWVyenUuIFNvcnJ5IQoKIyBMb3N0cGFzc3dvcmQKIyAwID0gbG9naW4gbmFtZSwgMSA9IHBhc3N3b3JkLCAyID0gVVJMLCAzID0gQXBwbGljYXRpb24gbmFtZSAoYXMgc2lnbmF0dXJlKQoKbG9zdHB3ZC5uZXdwYXNzd29yZC5lbWFpbD1EYXMgUGFzc3dvcnQgZvxyIGRlaW5lbiBadWdhbmcgYmVpIHszfSB3dXJkZSB3aWUgZ2V3/G5zY2h0IHp1cvxja2dlc2V0enQ6IFwKCVxuXG5CZW51dHplcm5hbWU6IHswfVxuUGFzc3dvcnQgICAgOiB7MX1cblxuRHUga2FubnN0IGRpY2ggdW50ZXIgezJ9IG5ldSBlaW5sb2dnZW4hIEJpdHRlIORuZGVyZSBkaWVzZXMgXAoJZ2VuZXJpZXJ0ZSBQYXNzd29ydCBpbiBlaW4gZWlnZW5lcy5cblxuLS0gezN9Cmxvc3Rwd2QubmV3cGFzc3dvcmQuc3ViamVjdD1OZXVlcyBQYXNzd29ydCBm/HIgezB9Cmxvc3Rwd2Qubm91c2VyPUVpbiBCZW51dHplciBtaXQgZGVyIEUtTWFpbC1BZHJlc3NlIHswfSBrb25udGUgbmljaHQgZ2VmdW5kZW4gd2VyZGVuIQpsb3N0cHdkLm5vbWFpbD1JbnRlcm5lciBGZWhsZXI6IERpZSBFLU1haWwga29ubnRlIG5pY2h0IGdlc2VuZGV0IHdlcmRlbi4gQml0dGUga29udGFrdGllcmUgZGVuIEFkbWluaXN0cmF0b3IgZGllc2VyIFNlaXRlIQpsb3N0cHdkLmVtYWlsZWQ9RWluIG5ldWVzIFBhc3N3b3J0IHd1cmRlIGFuIGRpZSBhbmdlZ2ViZW5lIEUtTWFpbC1BZHJlc3NlIGdlc2NoaWNrdCEKCmxvc3Rwd2QucmVzZXQudGl0bGU9UGFzc3dvcnQgenVy/GNrZ2VzZXR6dApsb3N0cHdkLnJlc2V0LnVuYWJsZT1QYXNzd29ydCB6dXL8Y2tzZXR6ZW4gbmljaHQgbfZnbGljaCwgYml0dGUgdmVyc3VjaGUgZXMgbm9jaCBlaW5tYWwhCgpsb3N0cHdkLnJlc2V0LmJsdXJiPVBhc3N3b3J0IHZlcmdlc3NlbiBvZGVyIHZlcmxvcmVuPyBCaXR0ZSBnaWIgZGllIGJlaSBkZXIgUmVnaXN0cmllcnVuZyB2ZXJ3ZW5kZXRlIEUtTWFpbC1BZHJlc3NlIGVpbiEKbG9zdHB3ZC5yZXNldC5zdWJtaXQ9UGFzc3dvcnQgenVy/GNrZ2VzZXR6dCEKCiMgVHJhZGl0aW9uYWxEaWZmUHJvdmlkZXIKCmRpZmYudHJhZGl0aW9uYWwuYWRkZWQ9WmVpbGUgezB9OiB7MX0gaGluenVnZWb8Z3QuCmRpZmYudHJhZGl0aW9uYWwuY2hhbmdlZD1aZWlsZSB7MH06IHsxfSBnZeRuZGVydC4KZGlmZi50cmFkaXRpb25hbC5yZW1vdmVkPVplaWxlIHswfTogezF9IGdlbPZzY2h0LgpkaWZmLnRyYWRpdGlvbmFsLm9uZWxpbmU9RWluZSBaZWlsZQpkaWZmLnRyYWRpdGlvbmFsLmxpbmVzPXsyfSBaZWlsZW4KCiMgSW5wdXRWYWxpZGF0b3IKCnZhbGlkYXRlLnVuc2FmZWNoYXJzPXswfSBkYXJmIGZvbGdlbmRlIFplaWNoZW4gbmljaHQgZW50aGFsdGVuOiB7MX0KdmFsaWRhdGUuaW52YWxpZGVtYWlsPURpZSBFLU1haWwtQWRyZXNzZSBpc3QgdW5n/Gx0aWchCnZhbGlkYXRlLmNhbnRiZW51bGw9ezB9IGRhcmYgbmljaHQgbGVlciBzZWluIQoKIyBVc2VyUHJvZmlsZVRhZwoKdXNlcnByb2ZpbGUubm9ncm91cHM9KGtlaW5lKQp1c2VycHJvZmlsZS5ub3JvbGVzPShrZWluZSkKCiMgTmV3R3JvdXAuanNwCm5ld2dyb3VwLmV4aXN0cz1FaW5lIEdydXBwZSBtaXQgZGVtIE5hbWVuIHswfSBnaWJ0IGVzIHNjaG9uLiBCaXR0ZSB35GhsZSBlaW5lbiBhbmRlcmVuIQoKIyBKU1BXaWtpTWFya3VwUGFyc2VyIAptYXJrdXBwYXJzZXIuZXJyb3IuaW52YWxpZHNldD1Vbmf8bHRpZ2VzIFNFVCBnZWZ1bmRlbjogezB9Cm1hcmt1cHBhcnNlci5lcnJvci5ub2ludGVyd2lraXJlZj1FcyBpc3Qga2VpbiBJbnRlcldpa2ktTGluayB7MH0gZGVmaW5pZXJ0IQptYXJrdXBwYXJzZXIuZXJyb3IucGFyc2VyZmFpbHVyZT1NYXJrdXAtUGFyc2VyIGdlc2NoZWl0ZXJ0OiB7MH0KbWFya3VwcGFyc2VyLmVycm9yLmphdmFzY3JpcHRhdHRlbXB0PVZlcnN1Y2gsIEphdmFzY3JpcHQgYXVzenVnZWJlbiEKbWFya3VwcGFyc2VyLmxpbmsuY3JlYXRlPUVyc3RlbGxlIHswfQoKIyBDYXB0Y2hhLmpzcApjYXB0Y2hhLmpzLmh1bWFuY2hlY2tjb21wbGV0ZS5hbGVydD1CaXR0ZSB35GhsZSBkaWUgS2F0emVuIGF1cyEKY2FwdGNoYS5kZXNjcmlwdGlvbj1XaXIgYmVm/HJjaHRlbiwgZHUga/ZubnRlc3QgZWluIEF1dG9tYXQgb2RlciBTcGFtbWVyIHNlaW4hIFVtIHp1IHplaWdlbiwgZGFzcyBkdSBlaW4gbm9ybWFsZXMgXAoJbWVuc2NobGljaGVzIEdlc2No9nBmIGJpc3QsIHfkaGxlIGJpdHRlIGF1cyBkZXIgZm9sZ2VuZGVuIEJpbGRlcnNlcmllIGFsbGUgS2F0emVuIGF1cyEKY2FwdGNoYS5hc2lycmEucGxlYXNlLnNlbGVjdD1CaXR0ZSB35GhsZSBhbGxlIEthdHplbiBhdXM6CmNhcHRjaGEuYXNpcnJhLmFkb3B0Lm1lPUFkb3B0aWVyJiMzOTsgbWljaCEKY2FwdGNoYS5hc2lycmEuYS5nZXQuY2hhbGxlbmdlPUxhZGUgYW5kZXJlIEJpbGRlciEKY2FwdGNoYS5hc2lycmEuYS53aGF0c3RoaXM9V2FzIGlzdCBkYXM/CmNhcHRjaGEuc3VibWl0PVdlaXRlcgoKIyBJbnN0YWxsLmpzcAppbnN0YWxsLmpzcC50aXRsZT1KU1BXaWtpIEluc3RhbGxhdGlvbgppbnN0YWxsLmpzcC5pbnRyby50aXRsZT1KU1BXaWtpIEluc3RhbGxhdGlvbgppbnN0YWxsLmpzcC5pbnRyby5wMT1XaWxsa29tbWVuISBEaWVzZSBrbGVpbmUgU2VpdGUgaXN0IGRhenUgZGEsIERpciD8YmVyIGRpZSBlcnN0ZW4gSPxyZGVuIGRlaW5lciBKU1BXaWtpLUluc3RhbGxhdGlvbiBcCgloaW53ZWd6dWhlbGZlbi4gV2VubiBkdSBkaWVzZSBTZWl0ZSBzaWVoc3QsIGhhc3QgZHUgSlNQV2lraSBiZXJlaXRzIGtvcnJla3QgaW4gZGVpbmVtIENvbnRhaW5lciBpbnN0YWxsaWVydC4KaW5zdGFsbC5qc3AuaW50cm8ucDI9RXMgbfxzc2VuIGpldHp0IGVpbiBwYWFyIERpbmdlIGtvbmZpZ3VyaWVydCB3ZXJkZW4uIFdlbm4gZHUgYXVmICdXZWl0ZXInIGtsaWNrc3QsIHdpcmQgZGllIERhdGVpIFwKCTxjb2RlPmpzcHdpa2kucHJvcGVydGllczwvY29kZT4gYXVzIGRlciBEaXN0cmlidXRpb24gYW5nZXBhc3N0IG9kZXIgbmV1IGVyc3RlbGx0LCBmYWxscyBzaWUgbmljaHQgZ2VmdW5kZW4gd2VyZGVuIGthbm4uCmluc3RhbGwuanNwLmludHJvLnAzPURpZXNlcyBJbnN0YWxsYXRpb25zcHJvZ3JhbW0gaXN0IHdpcmtsaWNoIG51ciBm/HIgTGV1dGUgZ2VkYWNodCwgZGllIG1pdCBKU1BXaWtpIHNjaG5lbGwgdW5kIGVpbmZhY2ggXAoJbG9zbGVnZW4gd29sbGVuLiBTb2xsdGVzdCBkdSBKU1BXaWtpIGluIGVpbiBiZXN0ZWhlbmRlcyBTeXN0ZW0gaW50ZWdyaWVyZW4gd29sbGVuLCBpc3QgZXMgcmF0c2FtIGRpZSBEYXRlaSBcCgk8Y29kZT5qc3B3aWtpLnByb3BlcnRpZXM8L2NvZGU+IHZvbiBIYW5kIHp1IGJlYXJiZWl0ZW4uIEVpbmUgVm9ybGFnZSBmaW5kZXN0IGR1IHVudGVyIDxjb2RlPkRlaW5XaWtpL1dFQi1JTkYvPC9jb2RlPi4KaW5zdGFsbC5qc3AuaW5zdGFsbC5pbmZvPUd1dGUgTmFjaHJpY2h0ZW46IAppbnN0YWxsLmpzcC5pbnN0YWxsLndhcm5pbmc9V2FybnVuZzogCmluc3RhbGwuanNwLmluc3RhbGwuZXJyb3I9S29ubnRlIGRpZSBLb25maWd1cmF0aW9uIG5pY2h0IHNwZWljaGVybjogCmluc3RhbGwuanNwLmluc3RhbGwubXNnLnJuZC5wd2Q9RGEgYmlzaGVyIG5vY2gga2VpbiBBZG1pbmlzdHJhdG9yenVnYW5nIGV4aXN0aWVydCBoYXQsIGhhdCBKU1BXaWtpIGVpbmVuIG1pdCB6dWbkbGxpZ2VtIFwKCVBhc3N3b3J0IGb8ciBkaWNoIGVyc3RlbGx0LiBEdSBrYW5uc3QgZGllc2VzIFBhc3N3b3J0IG5hdPxybGljaCBzcOR0ZXIg5G5kZXJuLiBEZXIgQmVudXR6ZXJuYW1lIGxhdXRldCB7MH0gdW5kIGRhcyBcCglQYXNzd29ydCBpc3QgezF9LiBCaXR0ZSBzY2hyZWliZSBkaXIgZGllc2UgWnVnYW5nc2RhdGVuIGF1ZiB1bmQgYmV3YWhyZSBzaWUgYW4gZWluZW0gc2ljaGVyZW4gUGxhdHogYXVmLiBKU1BXaWtpIGhhdCBcCglhdd9lcmRlbSBlaW5lIFdpa2ktR3J1cHBlIHsyfSBlcnN0ZWxsdCwgZGllIGRpZXNlbiBCZW51dHplciBlbnRo5Gx0LgppbnN0YWxsLmpzcC5pbnN0YWxsLm1zZy5hZG1pbi5ub3RleGlzdHM9UnVmc3QgZHUgZGllc2VzIEluc3RhbGxhdGlvbnNwcm9ncmFtbSB6dW0gZXJzdGVuIG1hbCBhdWY/IEZhbGxzIGphIHNvbGx0ZXN0IGR1IFwKCXdpc3NlbiwgZGFzcyBkdSBBZG1pbmlzdHJhdG9ycmVjaHRlIGJlbvZ0aWdzdCwgdW0gYXVmIGRpZXNlIFNlaXRlIGVybmV1dCB6dWdyZWlmZW4genUga/ZubmVuLCBuYWNoZGVtIEpTUFdpa2kgZWlubWFsIFwKCWRlaW5lIEtvbmZpZ3VyYXRpb25zZWluc3RlbGx1bmdlbiBhdXNnZXdlcnRldCB1bmQgZ2VzcGVpY2hlcnQgaGF0LiBXaXIgdHVuIGRhcyB1bSB6dSB2ZXJoaW5kZXJuLCBkYXNzIGJlbGllYmlnZSBMZXV0ZSBcCglhdXMgZGVtIEludGVybmV0IGL2c2UgRGluZ2UgbWl0IGRlaW5lbSBXaWtpIGFuc3RlbGxlbiBr9m5uZW4uCgppbnN0YWxsLmpzcC5iYXNpY3MudGl0bGU9R3J1bmRsZWdlbmRlcwppbnN0YWxsLmpzcC5iYXNpY3MuYXBwbmFtZS5sYWJlbD1BbndlbmR1bmdzbmFtZQppbnN0YWxsLmpzcC5iYXNpY3MuYXBwbmFtZS5kZXNjPVdpZSBzb2xsIGRlaW4gV2lraSBoZWnfZW4/IEVzIHNvbGx0ZSBlaW4gbfZnbGljaHN0IGt1cnplciBOYW1lIHNlaW4hCmluc3RhbGwuanNwLmJhc2ljcy5iYXNldXJsLmxhYmVsPUJhc2lzLVVSTAppbnN0YWxsLmpzcC5iYXNpY3MuYmFzZXVybC5kZXNjPUJpdHRlIGdpYiBkaWUgQWRyZXNzZSBlaW4sIHVudGVyIGRlciBzaWNoIGRlaW4gV2lraSBiZWZpbmRldCEKaW5zdGFsbC5qc3AuYmFzaWNzLnBhZ2Uuc3RvcmFnZS5sYWJlbD1TZWl0ZW5zcGVpY2hlcnVuZwppbnN0YWxsLmpzcC5iYXNpY3MucGFnZS5zdG9yYWdlLmRlc2M9U3RhbmRhcmRt5N9pZyB2ZXJ3ZW5kZXQgSlNQV2lraSBkZW4gVmVyc2lvbmluZ0ZpbGVQcm92aWRlciwgd2VsY2hlciBTZWl0ZW4gYWxzIFwKCWVpbnplbG5lIERhdGVpZW4gaW4gZWluZW0gYmVzdGltbXRlbiBWZXJ6ZWljaG5pcyBhdWYgZGVpbmVyIEZlc3RwbGF0dGUgYWJzcGVpY2hlcnQuIFdlbm4gZHUgZWluIG5pY2h0IGV4aXN0aWVyZW5kZXMgXAoJVmVyemVpY2huaXMgYW5naWJzdCwgd2lyZCBKU1BXaWtpIGVpbmVzIGb8ciBkaWNoIGVyc3RlbGxlbi4gQWxsZSBBbmjkbmdlIHdlcmRlbiBlYmVuZmFsbHMgaW4gZGllc2VtIFZlcnplaWNobmlzIFwKCWFiZ2VzcGVpY2hlcnQuCgppbnN0YWxsLmpzcC5zZWN1cml0eS50aXRsZT1TaWNoZXJoZWl0Cmluc3RhbGwuanNwLnNlY3VyaXR5LnNlYy5jb25mLmxhYmVsPVNpY2hlcmhlaXRzZWluc3RlbGx1bmdlbgppbnN0YWxsLmpzcC5zZWN1cml0eS5zZWMuY29uZi5vcHQxPUpBQVMgdW5kIENvbnRhaW5lciBTZWN1cml0eSAoU3RhbmRhcmQpCmluc3RhbGwuanNwLnNlY3VyaXR5LnNlYy5jb25mLm9wdDI9TnVyIENvbnRhaW5lciBTZWN1cml0eQppbnN0YWxsLmpzcC5zZWN1cml0eS5zZWMuY29uZi5kZXNjPVN0YW5kYXJkbeTfaWcgdmVyd2FsdGV0IEpTUFdpa2kgZGVuIFp1Z3JpZmYgYXVmIFJlc3NvdXJjZW4g/GJlciBlaW4gSkFBUy1iYXNpZXJ0ZXMgXAoJU2ljaGVyaGVpdHNzeXN0ZW0uIEF132VyZGVtIHdpcmQgZXMgamVnbGljaGUgZXZlbnR1ZWxsIHZvcmhhbmRlbmVuIENvbnRhaW5lci1TZWN1cml0eS1FaW5zdGVsbHVuZ2VuIGJlYWNodGVuLCBcCglzb2Zlcm4gZHUgc2llIGluIGRlaW5lciA8Y29kZT53ZWIueG1sPC9jb2RlPiBEYXRlaSBha3RpdmllcnQgaGFzdC4gV2VubiBkdSBKQUFTIGRlYWt0aXZpZXJzdCwgYXJiZWl0ZXQgSlNQV2lraSBcCglt9mdsaWNoZXJ3ZWlzZSBuaWNodCB3aWUgZXJ3YXJ0ZXQuIEF1cyBHcvxuZGVuIGRlciBGZWhsZXJzdWNoZSBrYW5uIGVzIHNlaW4sIGRhc3MgZHUgZGllcyB0cm90emRlbSB0dW4gd2lsbHN0LgppbnN0YWxsLmpzcC5zZWN1cml0eS5hZG1hY2NvdW50LmxhYmVsPUFkbWluaXN0cmF0b3J6dWdhbmcKaW5zdGFsbC5qc3Auc2VjdXJpdHkuYWRtYWNjb3VudC5lbmFibGVkPUFrdGl2aWVydAppbnN0YWxsLmpzcC5zZWN1cml0eS5hZG1hY2NvdW50Lm5vdGVuYWJsZWQ9RGVha3RpdmllcnQKaW5zdGFsbC5qc3Auc2VjdXJpdHkuYWRtYWNjb3VudC5lbmFibGVkLmRlc2M9RGllc2VzIFdpa2kgdmVyZvxndCD8YmVyIGVpbmVuIEFkbWluaXN0cmF0b3J6dWdhbmcgbmFtZW5zIDxzdHJvbmc+YWRtaW48L3N0cm9uZz4sIFwKCWRlciBNaXRnbGllZCBkZXIgV2lraS1HcnVwcGUgPHN0cm9uZz5BZG1pbjwvc3Ryb25nPiBpc3QuIFN0YW5kYXJkbeTfaWcgd2Vpc2VuIGRpZSBTaWNoZXJoZWl0c2VpbnN0ZWxsdW5nZW4gdm9uIFwKCUpTUFdpa2kgYWxsZW4gTWl0Z2xpZWRlcm4gZGllc2VyIEdydXBwZSBz5G10bGljaGUgUmVjaHRlIHp1ICg8Y29kZT5BbGxQZXJtaXNzaW9uPC9jb2RlPikuCmluc3RhbGwuanNwLnNlY3VyaXR5LmFkbWFjY291bnQubm90ZW5hYmxlZC5kZXNjPURpZXNlcyBXaWtpIHZlcmb8Z3Qgb2ZmZW5iYXIg/GJlciBrZWluZW4gQWRtaW5pc3RyYXRvcnp1Z2FuZy4gV2VubiBkdSBcCglhdWYgJ1dlaXRlcicga2xpY2tzdCwgd2lyZCBKU1BXaWtpIGVpbmVuIGb8ciBkaWNoIGVyc3RlbGxlbi4KCmluc3RhbGwuanNwLmFkdi5zZXR0aW5ncy50aXRsZT1FcndlaXRlcnRlIEVpbnN0ZWxsdW5nZW4KaW5zdGFsbC5qc3AuYWR2LnNldHRpbmdzLmxvZ2ZpbGUubGFiZWw9TG9nLURhdGVpZW4KaW5zdGFsbC5qc3AuYWR2LnNldHRpbmdzLmxvZ2ZpbGUuZGVzYz1KU1BXaWtpIHZlcndlbmRldCBBcGFjaGUgTG9nNGogZvxycyBMb2dnaW5nLiBCaXR0ZSB0ZWlsZSBKU1BXaWtpIG1pdCwgd28gZGllIFwKCUxvZy1EYXRlaWVuIGdlc3BlaWNoZXJ0IHdlcmRlbiBzb2xsZW4uCmluc3RhbGwuanNwLmFkdi5zZXR0aW5ncy53b3JrZGlyLmxhYmVsPUFyYmVpdHN2ZXJ6ZWljaG5pcwppbnN0YWxsLmpzcC5hZHYuc2V0dGluZ3Mud29ya2Rpci5kZXNjPUhpZXIgd2VyZGVuIHPkbXRsaWNoZSBDYWNoZXMgdW5kIGFuZGVyZSBMYXVmemVpdGRhdGVuIGdlc3BlaWNoZXJ0LgppbnN0YWxsLmpzcC5pbnN0ci5kZXNjPVdlbm4gZHUgYXVmICdXZWl0ZXInIGtsaWNrc3QsIHdpcmQgZGFzIEluc3RhbGxhdGlvbnNwcm9ncmFtbSBkZWluZSBFaW5zdGVsbHVuZ2VuIGluIDxjb2RlPnswfTwvY29kZT4gXAoJYWJzcGVpY2hlcm4uIEVzIHdpcmQgYXXfZXJkZW0gZWluZW4gQWRtaW5pc3RyYXRvcnp1Z2FuZyBtaXQgZWluZW0genVm5GxsaWdlbiBQYXNzd29ydCBzb3dpZSBlaW5lIGVudHNwcmVjaGVuZGUgXAoJQWRtaW4tR3J1cHBlIGVyc3RlbGxlbi4gCmluc3RhbGwuanNwLmluc3RyLnN1Ym1pdD1XZWl0ZXIKaW5zdGFsbC5qc3AudmFsaWRhdGVkLm5ldy5wcm9wcz1IaWVyIGlzdCBkZWluZSBuZXVlIGpzcHdpa2kucHJvcGVydGllcwoKIyBJbnN0YWxsZXIuamF2YQppbnN0YWxsLmluc3RhbGxlci51bmFibGUucmVhZC5wcm9wcz1GZWhsZXIgYmVpbSBMZXNlbiBkZXIgRWluc3RlbGx1bmdlbjogezB9Cmluc3RhbGwuaW5zdGFsbGVyLmRlZmF1bHQuYXBwbmFtZT1NZWluV2lraQppbnN0YWxsLmluc3RhbGxlci5kZWZhdWx0LnBhZ2VkaXI9Qml0dGUga29uZmlndXJpZXJlbiEKaW5zdGFsbC5pbnN0YWxsZXIucHJvcHMuc2F2ZWQ9RGVpbmUgbmV1ZW4gRWluc3RlbGx1bmdlbiB3dXJkZW4gZ2VzcGVpY2hlcnQuIEJpdHRlIHN0YXJ0ZSBkZWluZW4gQ29udGFpbmVyIG5ldSwgdW0gZGllIFwKCUVpbnN0ZWxsdW5nZW4genUg/GJlcm5laG1lbiAoc29mZXJuIGRpZXMgbmljaHQgZGllIEVyc3RpbnN0YWxsYXRpb24gd2FyKS4gU2Nyb2xsZSBldHdhcyB3ZWl0ZXIgbmFjaCB1bnRlbiwgdW0gZGVpbmUgXAoJbmV1ZSBqc3B3aWtpLnByb3BlcnRpZXMgenUgc2VoZW4uCmluc3RhbGwuaW5zdGFsbGVyLnByb3BzLm5vdHNhdmVkPUZlaGxlciBiZWltIFNjaHJlaWJlbiBkZXIgRWluc3RlbGx1bmdlbjogezB9LiBCaXR0ZSBzcGVpY2hlcmUgZGllIHVudGVuc3RlaGVuZGUgRGF0ZWkgXAoJYWxzIGRlaW5lIGpzcHdpa2kucHJvcGVydGllcyBhYjpcbnsxfQppbnN0YWxsLmluc3RhbGxlci52YWxpZGF0ZS5iYXNldXJsPUR1IG11c3N0IGRpZSBCYXNpcy1VUkwgZvxyIGRpZXNlcyBXaWtpIGFuZ2ViZW4uCmluc3RhbGwuaW5zdGFsbGVyLnZhbGlkYXRlLnBhZ2VkaXI9RHUgbXVzc3QgZGFzIFZlcnplaWNobmlzIGFuZ2ViZW4sIGluIGRlbSBkaWUgV2lraS1JbmhhbHRlIGdlc3BlaWNoZXJ0IHdlcmRlbiBzb2xsZW4uCmluc3RhbGwuaW5zdGFsbGVyLnZhbGlkYXRlLmFwcG5hbWU9RHUgbXVzc3QgZWluZW4gQW53ZW5kdW5nc25hbWVuIGFuZ2ViZW4uCmluc3RhbGwuaW5zdGFsbGVyLnZhbGlkYXRlLndvcmtkaXI9RHUgbXVzc3QgZWluIEFyYmVpdHN2ZXJ6ZWljaG5pcyBhbmdlYmVuLgppbnN0YWxsLmluc3RhbGxlci52YWxpZGF0ZS5sb2dkaXI9RHUgbXVzc3QgZWluIExvZy1WZXJ6ZWljaG5pcyBhbmdlYmVuLgoKIyBSU1NJbWFnZUxpbmtUYWcKcnNzLnRpdGxlPVJTUy1GZWVkIGb8ciBkaWUgU2VpdGUgezB9CgojIEF0dGFjaG1lbnRNYW5hZ2VyCmF0dGFjaC51bndhbnRlZC5maWxlPVVuZXJsYXVidGVyIERhdGVpbmFtZS4KYXR0YWNoLmVtcHR5LmZpbGU9S2VpbiBEYXRlaW5hbWUgdm9yaGFuZGVuLgphdHRhY2gucGFyZW50Lm5vdC5leGlzdD1EaWUg/GJlcmdlb3JkbmV0ZSBTZWl0ZSBleGlzdGllcnQgbmljaHQuCgojIFZhcmlhYmxlTWFuYWdlcgp2YXJtZ3Iubm90LmxvZ2dlZC5pbj1uaWNodCBhbmdlbWVsZGV0CnZhcm1nci5hdXRoZW50aWNhdGVkPWF1dGhlbnRpZml6aWVydAp2YXJtZ3IuYXNzZXJ0ZWQ9YW5nZW5vbW1lbmUgSWRlbnRpdOR0CnZhcm1nci5hbm9ueW1vdXM9YW5vbnltCgojIE91dGRhdGVkIG9yIHN1cGVyZmx1b3VzIHByb3BlcnRpZXMKCiMgZm9sZ2VuZGUgUHJvcGVydGllcyBzaW5kIGluIGRlciBha3R1ZWxsZW4gJ2RlZmF1bHQgZW4nIERhdGVpIG5pY2h0IGVudGhhbHRlbgojIEplIG5hY2ggVmVyd2VuZHVuZyBkZXIgdm9ybGllZ2VuZGVuIERhdGVpIHdlcmRlbiBzaWUgYWJlciB1bnRlciBVbXN05G5kZW4gd2VpdGVyaGluIGJlbvZ0aWd0LgojIERhaGVyIGlzdCBlcyBzaW5udm9sbCwgc2llIGluIGRpZXNlIHNwZXppZWxsZSBTZWt0aW9uIHp1IHZlcnNjaGllYmVuLgoKIyBtaW5kZXN0ZW5zIHNlaXQgVmVyc2lvbiAyLjYuMS1jdnMtNwpsb3N0cHdkLnJlc2V0LmNsaWNraGVyZT1LbGlja2UgaGllcgpsb3N0cHdkLnJlc2V0LmxvZ2luPXswfSB1bSBkaWNoIGFuenVtZWxkZW4sIHNvYmFsZCBkdSBkZWluIG5ldWVzIFBhc3N3b3J0IGVyaGFsdGVuIGhhc3QuCgojIG1pbmRlc3RlbnMgc2VpdCBWZXJzaW9uIDIuNi4xLXJjLTQKbG9naW4uZXJyb3IuY2Fwc2xvY2s9VW5n/Gx0aWdlIEFubWVsZHVuZyEgSXN0IGV2ZW50dWVsbCBkaWUgRmVzdHN0ZWxsdGFzdGUgKEdyb98tL0tsZWluc2NocmVpYnVuZykgYWt0aXZpZXJ0PwoKIyBzZWl0IFZlcnNpb24gMi43LjAtYWxwaGEtMzQKY29tbWVudC5ieT1Lb21tZW50YXIgdm9uIHswfQo=