ClIgVW5kZXIgZGV2ZWxvcG1lbnQgKHVuc3RhYmxlKSAoMjAyMi0wMy0xOSByODE5NDIpIC0tICJVbnN1ZmZlcmVkIENvbnNlcXVlbmNlcyIKQ29weXJpZ2h0IChDKSAyMDIyIFRoZSBSIEZvdW5kYXRpb24gZm9yIFN0YXRpc3RpY2FsIENvbXB1dGluZwpQbGF0Zm9ybTogeDg2XzY0LXBjLWxpbnV4LWdudSAoNjQtYml0KQoKUiBpcyBmcmVlIHNvZnR3YXJlIGFuZCBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCllvdSBhcmUgd2VsY29tZSB0byByZWRpc3RyaWJ1dGUgaXQgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zLgpUeXBlICdsaWNlbnNlKCknIG9yICdsaWNlbmNlKCknIGZvciBkaXN0cmlidXRpb24gZGV0YWlscy4KClIgaXMgYSBjb2xsYWJvcmF0aXZlIHByb2plY3Qgd2l0aCBtYW55IGNvbnRyaWJ1dG9ycy4KVHlwZSAnY29udHJpYnV0b3JzKCknIGZvciBtb3JlIGluZm9ybWF0aW9uIGFuZAonY2l0YXRpb24oKScgb24gaG93IHRvIGNpdGUgUiBvciBSIHBhY2thZ2VzIGluIHB1YmxpY2F0aW9ucy4KClR5cGUgJ2RlbW8oKScgZm9yIHNvbWUgZGVtb3MsICdoZWxwKCknIGZvciBvbi1saW5lIGhlbHAsIG9yCidoZWxwLnN0YXJ0KCknIGZvciBhbiBIVE1MIGJyb3dzZXIgaW50ZXJmYWNlIHRvIGhlbHAuClR5cGUgJ3EoKScgdG8gcXVpdCBSLgoKPiAjIyBSZWdyZXNzaW9uIHRlc3RzIGZvciB3aGljaCB0aGUgcHJpbnRlZCBvdXRwdXQgaXMgdGhlIGlzc3VlCj4gIyMjIF9hbmRfIG11c3Qgd29yayAobm8gUmVjb21tZW5kZWQgcGFja2FnZXMsIHBsZWFzZSkKPiAKPiBwZGYoInJlZy10ZXN0cy0yLnBkZiIsIGVuY29kaW5nID0gIklTT0xhdGluMS5lbmMiKQo+IAo+ICMjIGZvcmNlIHN0YW5kYXJkIGhhbmRsaW5nIGZvciBkYXRhIGZyYW1lcwo+IG9wdGlvbnMoc3RyaW5nc0FzRmFjdG9ycz1GQUxTRSkgIyBSID49IDQuMC4wCj4gb3B0aW9ucyh1c2VGYW5jeVF1b3Rlcz1GQUxTRSkKPiAKPiAjIyMgbW92ZWQgZnJvbSB2YXJpb3VzIC5SZCBmaWxlcwo+ICMjIGFiYnJldmlhdGUKPiBmb3IobSBpbiAxOjUpIHsKKyAgIGNhdCgiXG4iLG0sIjpcbiIpCisgICBwcmludChhcy52ZWN0b3IoYWJicmV2aWF0ZShzdGF0ZS5uYW1lLCBtaW5sPW0pKSkKKyB9CgogMSA6CiBbMV0gIkFsYiIgICJBbHMiICAiQXJ6IiAgIkFyayIgICJDbGYiICAiQ2xyIiAgIkNuIiAgICJEIiAgICAiRiIgICAgIkciICAgClsxMV0gIkgiICAgICJJZCIgICAiSWwiICAgIkluIiAgICJJdyIgICAiS25zIiAgIktudCIgICJMIiAgICAiTWFuIiAgIk1yIiAgClsyMV0gIk1zc2MiICJNYyIgICAiTW5uIiAgIk1zc3MiICJNc3NyIiAiTW50IiAgIk5iIiAgICJOdiIgICAiTkgiICAgIk5KIiAgClszMV0gIk5NIiAgICJOWSIgICAiTkMiICAgIk5EIiAgICJPaCIgICAiT2siICAgIk9yIiAgICJQIiAgICAiUkkiICAgIlNDIiAgCls0MV0gIlNEIiAgICJUbiIgICAiVHgiICAgIlUiICAgICJWcm0iICAiVnJnIiAgIldzaCIgICJXViIgICAiV3NjIiAgIld5IiAgCgogMiA6CiBbMV0gIkFsYiIgICJBbHMiICAiQXJ6IiAgIkFyayIgICJDbGYiICAiQ2xyIiAgIkNuIiAgICJEbCIgICAiRmwiICAgIkdyIiAgClsxMV0gIkh3IiAgICJJZCIgICAiSWwiICAgIkluIiAgICJJdyIgICAiS25zIiAgIktudCIgICJMcyIgICAiTWFuIiAgIk1yIiAgClsyMV0gIk1zc2MiICJNYyIgICAiTW5uIiAgIk1zc3MiICJNc3NyIiAiTW50IiAgIk5iIiAgICJOdiIgICAiTkgiICAgIk5KIiAgClszMV0gIk5NIiAgICJOWSIgICAiTkMiICAgIk5EIiAgICJPaCIgICAiT2siICAgIk9yIiAgICJQbiIgICAiUkkiICAgIlNDIiAgCls0MV0gIlNEIiAgICJUbiIgICAiVHgiICAgIlV0IiAgICJWcm0iICAiVnJnIiAgIldzaCIgICJXViIgICAiV3NjIiAgIld5IiAgCgogMyA6CiBbMV0gIkFsYiIgICJBbHMiICAiQXJ6IiAgIkFyayIgICJDbGYiICAiQ2xyIiAgIkNubiIgICJEbHciICAiRmxyIiAgIkdyZyIgClsxMV0gIkhhdyIgICJJZGgiICAiSWxsIiAgIkluZCIgICJJb3ciICAiS25zIiAgIktudCIgICJMc24iICAiTWFuIiAgIk1yeSIgClsyMV0gIk1zc2MiICJNY2giICAiTW5uIiAgIk1zc3MiICJNc3NyIiAiTW50IiAgIk5iciIgICJOdmQiICAiTndIIiAgIk53SiIgClszMV0gIk53TSIgICJOd1kiICAiTnJDIiAgIk5yRCIgICJPaGkiICAiT2tsIiAgIk9yZyIgICJQbm4iICAiUmhJIiAgIlN0QyIgCls0MV0gIlN0RCIgICJUbm4iICAiVHhzIiAgIlV0aCIgICJWcm0iICAiVnJnIiAgIldzaCIgICJXc1YiICAiV3NjIiAgIld5bSIgCgogNCA6CiBbMV0gIkFsYm0iICJBbHNrIiAiQXJ6biIgIkFya24iICJDbGZyIiAiQ2xyZCIgIkNubmMiICJEbHdyIiAiRmxyZCIgIkdlcmciClsxMV0gIkhhd2EiICJJZGFoIiAiSWxsbiIgIkluZG4iICJJb3dhIiAiS25zcyIgIktudGMiICJMb3NuIiAiTWFpbiIgIk1yeWwiClsyMV0gIk1zc2MiICJNY2hnIiAiTW5ucyIgIk1zc3MiICJNc3NyIiAiTW50biIgIk5icnMiICJOZXZkIiAiTndIbSIgIk53SnIiClszMV0gIk53TXgiICJOd1lyIiAiTnJ0QyIgIk5ydEQiICJPaGlvIiAiT2tsaCIgIk9yZ24iICJQbm5zIiAiUmhkSSIgIlN0aEMiCls0MV0gIlN0aEQiICJUbm5zIiAiVGV4cyIgIlV0YWgiICJWcm1uIiAiVnJnbiIgIldzaG4iICJXc3RWIiAiV3NjbiIgIld5bW4iCgogNSA6CiBbMV0gIkFsYWJtIiAiQWxhc2siICJBcml6biIgIkFya25zIiAiQ2xmcm4iICJDb2xyZCIgIkNubmN0IiAiRGVsd3IiICJGbG9yZCIKWzEwXSAiR2VvcmciICJIYXdhaSIgIklkYWhvIiAiSWxsbnMiICJJbmRpbiIgIklvd2EiICAiS2Fuc3MiICJLbnRjayIgIkxvdXNuIgpbMTldICJNYWluZSIgIk1yeWxuIiAiTXNzY2giICJNY2hnbiIgIk1ubnN0IiAiTXNzc3MiICJNaXNzciIgIk1vbnRuIiAiTmJyc2siClsyOF0gIk5ldmFkIiAiTndIbXAiICJOd0pycyIgIk53TXhjIiAiTndZcmsiICJOcnRoQyIgIk5ydGhEIiAiT2hpbyIgICJPa2xobSIKWzM3XSAiT3JlZ24iICJQbm5zeSIgIlJoZElzIiAiU3RoQ3IiICJTdGhEayIgIlRubnNzIiAiVGV4YXMiICJVdGFoIiAgIlZybW50IgpbNDZdICJWaXJnbiIgIldzaG5nIiAiV3N0VnIiICJXc2NucyIgIld5bW5nIgo+IAo+ICMjIGFwcGx5Cj4geCA8LSBjYmluZCh4MSA9IDMsIHgyID0gYyg0OjEsIDI6NSkpCj4gZGltbmFtZXMoeClbWzFdXSA8LSBsZXR0ZXJzWzE6OF0KPiBhcHBseSh4LCAgMiwgc3VtbWFyeSkgIyA2IHggbiBtYXRyaXgKICAgICAgICB4MSB4MgpNaW4uICAgICAzICAxCjFzdCBRdS4gIDMgIDIKTWVkaWFuICAgMyAgMwpNZWFuICAgICAzICAzCjNyZCBRdS4gIDMgIDQKTWF4LiAgICAgMyAgNQo+IGFwcGx5KHgsICAxLCBxdWFudGlsZSkjIDUgeCBuIG1hdHJpeAogICAgICAgIGEgYiAgICBjICAgZCAgICBlIGYgICAgZyAgIGgKMCUgICAzLjAwIDMgMi4wMCAxLjAgMi4wMCAzIDMuMDAgMy4wCjI1JSAgMy4yNSAzIDIuMjUgMS41IDIuMjUgMyAzLjI1IDMuNQo1MCUgIDMuNTAgMyAyLjUwIDIuMCAyLjUwIDMgMy41MCA0LjAKNzUlICAzLjc1IDMgMi43NSAyLjUgMi43NSAzIDMuNzUgNC41CjEwMCUgNC4wMCAzIDMuMDAgMy4wIDMuMDAgMyA0LjAwIDUuMAo+IAo+IGQuYXJyIDwtIDI6NQo+IGFyciA8LSBhcnJheSgxOnByb2QoZC5hcnIpLCBkLmFyciwKKyAgICAgICAgICBsaXN0KE5VTEwsbGV0dGVyc1sxOmQuYXJyWzJdXSxOVUxMLHBhc3RlKCJWIiw0KzE6ZC5hcnJbNF0sc2VwPSIiKSkpCj4gYWEgPC0gYXJyYXkoMToyMCxjKDIsMiw1KSkKPiBzdHIoYXBwbHkoYWFbRkFMU0UsLCxkcm9wPUZBTFNFXSwgMSwgZGltKSkjIGVtcHR5IGludGVnZXIsIGBpbmNvcnJlY3QnIGRpbS4KIGludCgwKSAKPiBzdG9waWZub3QoCisgICAgICAgIGFwcGx5KGFyciwgMToyLCBzdW0pID09IHQoYXBwbHkoYXJyLCAyOjEsIHN1bSkpLAorICAgICAgICBhYSA9PSBhcHBseShhYSwyOjMsZnVuY3Rpb24oeCkgeCksCisgICAgICAgIGFsbC5lcXVhbChhcHBseShhcHBseShhYSwyOjMsIHN1bSksMixzdW0pLAorICAgICAgICAgICAgICAgICAgMTArMTYqMDo0LCB0b2xlcmFuY2UgPSA0Ki5NYWNoaW5lJGRvdWJsZS5lcHMpCisgKQo+IG1hcmcgPC0gbGlzdCgxOjIsIDI6MywgYygyLDQpLCBjKDEsMyksIDI6NCwgMTozLCAxOjQpCj4gZm9yKG0gaW4gbWFyZykgcHJpbnQoYXBwbHkoYXJyLCBwcmludChtKSwgc3VtKSkKWzFdIDEgMgogICAgICAgIGEgICAgYiAgICBjClsxLF0gMTE2MCAxMjAwIDEyNDAKWzIsXSAxMTgwIDEyMjAgMTI2MApbMV0gMiAzCiAgWywxXSBbLDJdIFssM10gWyw0XQphICA0OTUgIDU1NSAgNjE1ICA2NzUKYiAgNTE1ICA1NzUgIDYzNSAgNjk1CmMgIDUzNSAgNTk1ICA2NTUgIDcxNQpbMV0gMiA0CiAgIFY1ICBWNiAgVjcgIFY4ICBWOQphICA4NCAyNzYgNDY4IDY2MCA4NTIKYiAxMDAgMjkyIDQ4NCA2NzYgODY4CmMgMTE2IDMwOCA1MDAgNjkyIDg4NApbMV0gMSAzCiAgICAgWywxXSBbLDJdIFssM10gWyw0XQpbMSxdICA3NjUgIDg1NSAgOTQ1IDEwMzUKWzIsXSAgNzgwICA4NzAgIDk2MCAxMDUwClsxXSAyIDMgNAosICwgVjUKCiAgWywxXSBbLDJdIFssM10gWyw0XQphICAgIDMgICAxNSAgIDI3ICAgMzkKYiAgICA3ICAgMTkgICAzMSAgIDQzCmMgICAxMSAgIDIzICAgMzUgICA0NwoKLCAsIFY2CgogIFssMV0gWywyXSBbLDNdIFssNF0KYSAgIDUxICAgNjMgICA3NSAgIDg3CmIgICA1NSAgIDY3ICAgNzkgICA5MQpjICAgNTkgICA3MSAgIDgzICAgOTUKCiwgLCBWNwoKICBbLDFdIFssMl0gWywzXSBbLDRdCmEgICA5OSAgMTExICAxMjMgIDEzNQpiICAxMDMgIDExNSAgMTI3ICAxMzkKYyAgMTA3ICAxMTkgIDEzMSAgMTQzCgosICwgVjgKCiAgWywxXSBbLDJdIFssM10gWyw0XQphICAxNDcgIDE1OSAgMTcxICAxODMKYiAgMTUxICAxNjMgIDE3NSAgMTg3CmMgIDE1NSAgMTY3ICAxNzkgIDE5MQoKLCAsIFY5CgogIFssMV0gWywyXSBbLDNdIFssNF0KYSAgMTk1ICAyMDcgIDIxOSAgMjMxCmIgIDE5OSAgMjExICAyMjMgIDIzNQpjICAyMDMgIDIxNSAgMjI3ICAyMzkKClsxXSAxIDIgMwosICwgMQoKICAgICAgIGEgICBiICAgYwpbMSxdIDI0NSAyNTUgMjY1ClsyLF0gMjUwIDI2MCAyNzAKCiwgLCAyCgogICAgICAgYSAgIGIgICBjClsxLF0gMjc1IDI4NSAyOTUKWzIsXSAyODAgMjkwIDMwMAoKLCAsIDMKCiAgICAgICBhICAgYiAgIGMKWzEsXSAzMDUgMzE1IDMyNQpbMixdIDMxMCAzMjAgMzMwCgosICwgNAoKICAgICAgIGEgICBiICAgYwpbMSxdIDMzNSAzNDUgMzU1ClsyLF0gMzQwIDM1MCAzNjAKClsxXSAxIDIgMyA0CiwgLCAxLCBWNQoKICAgICBhIGIgYwpbMSxdIDEgMyA1ClsyLF0gMiA0IDYKCiwgLCAyLCBWNQoKICAgICBhICBiICBjClsxLF0gNyAgOSAxMQpbMixdIDggMTAgMTIKCiwgLCAzLCBWNQoKICAgICAgYSAgYiAgYwpbMSxdIDEzIDE1IDE3ClsyLF0gMTQgMTYgMTgKCiwgLCA0LCBWNQoKICAgICAgYSAgYiAgYwpbMSxdIDE5IDIxIDIzClsyLF0gMjAgMjIgMjQKCiwgLCAxLCBWNgoKICAgICAgYSAgYiAgYwpbMSxdIDI1IDI3IDI5ClsyLF0gMjYgMjggMzAKCiwgLCAyLCBWNgoKICAgICAgYSAgYiAgYwpbMSxdIDMxIDMzIDM1ClsyLF0gMzIgMzQgMzYKCiwgLCAzLCBWNgoKICAgICAgYSAgYiAgYwpbMSxdIDM3IDM5IDQxClsyLF0gMzggNDAgNDIKCiwgLCA0LCBWNgoKICAgICAgYSAgYiAgYwpbMSxdIDQzIDQ1IDQ3ClsyLF0gNDQgNDYgNDgKCiwgLCAxLCBWNwoKICAgICAgYSAgYiAgYwpbMSxdIDQ5IDUxIDUzClsyLF0gNTAgNTIgNTQKCiwgLCAyLCBWNwoKICAgICAgYSAgYiAgYwpbMSxdIDU1IDU3IDU5ClsyLF0gNTYgNTggNjAKCiwgLCAzLCBWNwoKICAgICAgYSAgYiAgYwpbMSxdIDYxIDYzIDY1ClsyLF0gNjIgNjQgNjYKCiwgLCA0LCBWNwoKICAgICAgYSAgYiAgYwpbMSxdIDY3IDY5IDcxClsyLF0gNjggNzAgNzIKCiwgLCAxLCBWOAoKICAgICAgYSAgYiAgYwpbMSxdIDczIDc1IDc3ClsyLF0gNzQgNzYgNzgKCiwgLCAyLCBWOAoKICAgICAgYSAgYiAgYwpbMSxdIDc5IDgxIDgzClsyLF0gODAgODIgODQKCiwgLCAzLCBWOAoKICAgICAgYSAgYiAgYwpbMSxdIDg1IDg3IDg5ClsyLF0gODYgODggOTAKCiwgLCA0LCBWOAoKICAgICAgYSAgYiAgYwpbMSxdIDkxIDkzIDk1ClsyLF0gOTIgOTQgOTYKCiwgLCAxLCBWOQoKICAgICAgYSAgIGIgICBjClsxLF0gOTcgIDk5IDEwMQpbMixdIDk4IDEwMCAxMDIKCiwgLCAyLCBWOQoKICAgICAgIGEgICBiICAgYwpbMSxdIDEwMyAxMDUgMTA3ClsyLF0gMTA0IDEwNiAxMDgKCiwgLCAzLCBWOQoKICAgICAgIGEgICBiICAgYwpbMSxdIDEwOSAxMTEgMTEzClsyLF0gMTEwIDExMiAxMTQKCiwgLCA0LCBWOQoKICAgICAgIGEgICBiICAgYwpbMSxdIDExNSAxMTcgMTE5ClsyLF0gMTE2IDExOCAxMjAKCj4gZm9yKG0gaW4gbWFyZykgIyMgNzUlIG9mIHRoZSB0aW1lIGhlcmUgd2FzIHNwZW50IG9uIHRoZSBuYW1lcworICAgcHJpbnQoZGltKGFwcGx5KGFyciwgcHJpbnQobSksIHF1YW50aWxlLCBuYW1lcz1GQUxTRSkpID09IGMoNSxkLmFyclttXSkpClsxXSAxIDIKWzFdIFRSVUUgVFJVRSBUUlVFClsxXSAyIDMKWzFdIFRSVUUgVFJVRSBUUlVFClsxXSAyIDQKWzFdIFRSVUUgVFJVRSBUUlVFClsxXSAxIDMKWzFdIFRSVUUgVFJVRSBUUlVFClsxXSAyIDMgNApbMV0gVFJVRSBUUlVFIFRSVUUgVFJVRQpbMV0gMSAyIDMKWzFdIFRSVUUgVFJVRSBUUlVFIFRSVUUKWzFdIDEgMiAzIDQKWzFdIFRSVUUgVFJVRSBUUlVFIFRSVUUgVFJVRQo+IAo+ICMjIEJlc3NlbAo+IG51cyA8LSBjKDA6NSwxMCwyMCkKPiAKPiB4MCA8LSAyXigtMjA6MTApCj4gcGxvdCh4MCx4MCwgbG9nPSd4eScsIHlsYWI9IiIsIHlsaW09YyguMSwxZTYwKSx0eXBlPSduJywKKyAgICAgIG1haW4gPSAiQmVzc2VsIEZ1bmN0aW9ucyAtWV9udSh4KSAgbmVhciAwXG4gbG9nIC0gbG9nICBzY2FsZSIpCj4gZm9yKG51IGluIHNvcnQoYyhudXMsbnVzKy41KSkpIGxpbmVzKHgwLCAtYmVzc2VsWSh4MCxudT1udSksIGNvbCA9IG51KzIpCj4gbGVnZW5kKDMsMWU1MCwgbGVnPXBhc3RlKCJudT0iLCBwYXN0ZShudXMsbnVzKy41LCBzZXA9IiwiKSksIGNvbD1udXMrMiwgbHdkPTEpCj4gCj4geCA8LSBzZXEoMyw1MDApO3lsIDwtIGMoLS4zLCAuMikKPiBwbG90KHgseCwgeWxpbSA9IHlsLCB5bGFiPSIiLHR5cGU9J24nLCBtYWluID0gIkJlc3NlbCBGdW5jdGlvbnMgIFlfbnUoeCkiKQo+IGZvcihudSBpbiBudXMpe3h4IDwtIHhbeCA+IC42Km51XTsgbGluZXMoeHgsYmVzc2VsWSh4eCxudT1udSksIGNvbCA9IG51KzIpfQo+IGxlZ2VuZCgzMDAsLS4wOCwgbGVnPXBhc3RlKCJudT0iLG51cyksIGNvbCA9IG51cysyLCBsd2Q9MSkKPiAKPiB4IDwtIHNlcSgxMCw1MDAwMCxieT0xMCk7eWwgPC0gYygtLjEsIC4xKQo+IHBsb3QoeCx4LCB5bGltID0geWwsIHlsYWI9IiIsdHlwZT0nbicsIG1haW4gPSAiQmVzc2VsIEZ1bmN0aW9ucyAgWV9udSh4KSIpCj4gZm9yKG51IGluIG51cyl7eHggPC0geFt4ID4gLjYqbnVdOyBsaW5lcyh4eCxiZXNzZWxZKHh4LG51PW51KSwgY29sID0gbnUrMil9Cj4gc3VtbWFyeShiWSA8LSBiZXNzZWxZKDIsbnUgPSBudSA8LSBzZXEoMCwxMDAsbGVuPTUwMSkpKQogICAgICAgTWluLiAgICAgMXN0IFF1LiAgICAgIE1lZGlhbiAgICAgICAgTWVhbiAgICAgM3JkIFF1LiAgICAgICAgTWF4LiAKLTMuMDAxZSsxNTUgLTEuMDY3ZSsxMDcgIC0xLjk3NmUrNjIgLTkuOTYxZSsxNTIgIC0yLjA1OWUrMjMgICAxLjAwMGUrMDAgCj4gd2hpY2goYlkgPj0gMCkKWzFdIDEgMiAzIDQgNQo+IHN1bW1hcnkoYlkgPC0gYmVzc2VsWSgyLG51ID0gbnUgPC0gc2VxKDMsMzAwLGxlbj01MSkpKQogICAgICAgTWluLiAgICAgMXN0IFF1LiAgICAgIE1lZGlhbiAgICAgICAgTWVhbiAgICAgM3JkIFF1LiAgICAgICAgTWF4LiAKICAgICAgIC1JbmYgICAgICAgIC1JbmYgLTIuMjQ4ZSsyNjMgICAgICAgIC1JbmYgLTMuNzc3ZSsxMTYgIC0xLjAwMGUrMDAgClRoZXJlIHdlcmUgMjIgd2FybmluZ3MgKHVzZSB3YXJuaW5ncygpIHRvIHNlZSB0aGVtKQo+IHN1bW1hcnkoYkkgPC0gYmVzc2VsSSh4ID0geCA8LSAxMDo3MDAsIDEpKQogICAgICBNaW4uICAgIDFzdCBRdS4gICAgIE1lZGlhbiAgICAgICBNZWFuICAgIDNyZCBRdS4gICAgICAgTWF4LiAKIDIuNjcxZSswMyAgNi4wMjZlKzc3IDMuMTYxZSsxNTIgMy41MDFlKzI5OSAyLjQwOWUrMjI3IDEuNTI5ZSszMDIgCj4gIyMgZW5kIG9mIG1vdmVkIGZyb20gQmVzc2VsLlJkCj4gCj4gIyMgZGF0YS5mcmFtZQo+IHNldC5zZWVkKDEyMykKPiBMMyA8LSBMRVRURVJTWzE6M10KPiBkIDwtIGRhdGEuZnJhbWUoY2JpbmQoeD0xLCB5PTE6MTApLCBmYWMgPSBzYW1wbGUoTDMsIDEwLCByZXBsYWNlPVRSVUUpLAorICAgICAgICAgICAgICAgICBzdHJpbmdzQXNGYWN0b3JzPVRSVUUpCj4gc3RyKGQpCidkYXRhLmZyYW1lJzoJMTAgb2JzLiBvZiAgMyB2YXJpYWJsZXM6CiAkIHggIDogbnVtICAxIDEgMSAxIDEgMSAxIDEgMSAxCiAkIHkgIDogbnVtICAxIDIgMyA0IDUgNiA3IDggOSAxMAogJCBmYWM6IEZhY3RvciB3LyAzIGxldmVscyAiQSIsIkIiLCJDIjogMyAzIDMgMiAzIDIgMiAyIDMgMQo+IChkMCAgPC0gZFssIEZBTFNFXSkgIyBOVUxMIGRhdGFmcmFtZSB3aXRoIDEwIHJvd3MKZGF0YSBmcmFtZSB3aXRoIDAgY29sdW1ucyBhbmQgMTAgcm93cwo+IChkLjAgPC0gZFtGQUxTRSwgXSkgIyA8MCByb3dzPiBkYXRhZnJhbWUgICgzIGNvbHMpClsxXSB4ICAgeSAgIGZhYwo8MCByb3dzPiAob3IgMC1sZW5ndGggcm93Lm5hbWVzKQo+IChkMDAgPC0gZDBbRkFMU0UsXSkgIyBOVUxMIGRhdGFmcmFtZSB3aXRoIDAgcm93cwpkYXRhIGZyYW1lIHdpdGggMCBjb2x1bW5zIGFuZCAwIHJvd3MKPiBzdG9waWZub3QoaWRlbnRpY2FsKGQsIGNiaW5kKGQsIGQwKSksCisgICAgICAgICAgIGlkZW50aWNhbChkLCBjYmluZChkMCwgZCkpKQo+IHN0b3BpZm5vdChpZGVudGljYWwoZCwgcmJpbmQoZCxkLjApKSwKKyAgICAgICAgICAgaWRlbnRpY2FsKGQsIHJiaW5kKGQuMCxkKSksCisgICAgICAgICAgIGlkZW50aWNhbChkLCByYmluZChkMDAsZCkpLAorICAgICAgICAgICBpZGVudGljYWwoZCwgcmJpbmQoZCxkMDApKSkKPiAjIyBDb21tZW50czogZmFpbGVkIGJlZm9yZSB2ZXIuIDEuNC4wCj4gCj4gIyMgZGlhZwo+IGRpYWcoYXJyYXkoMTo0LCBkaW09NSkpCiAgICAgWywxXSBbLDJdIFssM10gWyw0XSBbLDVdClsxLF0gICAgMSAgICAwICAgIDAgICAgMCAgICAwClsyLF0gICAgMCAgICAyICAgIDAgICAgMCAgICAwClszLF0gICAgMCAgICAwICAgIDMgICAgMCAgICAwCls0LF0gICAgMCAgICAwICAgIDAgICAgNCAgICAwCls1LF0gICAgMCAgICAwICAgIDAgICAgMCAgICAxCj4gIyMgdGVzdCBiZWhhdmlvdXIgd2l0aCAwIHJvd3Mgb3IgY29sdW1ucwo+IGRpYWcoMCkKPDAgeCAwIG1hdHJpeD4KPiB6IDwtIG1hdHJpeCgwLCAwLCA0KQo+IGRpYWcoeikKbnVtZXJpYygwKQo+IGRpYWcoeikgPC0gbnVtZXJpYygwKQo+IHoKICAgICBbLDFdIFssMl0gWywzXSBbLDRdCj4gIyMgZW5kIG9mIG1vdmVkIGZyb20gZGlhZy5SZAo+IAo+ICMjIGZvcm1hdAo+ICMjIGhhbmRsaW5nIG9mIHF1b3Rlcwo+IHp6IDwtIGRhdGEuZnJhbWUoYT1JKCJhYmMiKSwgYj1JKCJkZWZcImdoIikpCj4gZm9ybWF0KHp6KQogICAgYSAgICAgIGIKMSBhYmMgZGVmImdoCj4gIyMgIiAoRSBmb250aWZpY2F0aW9uKQo+IAo+ICMjIHByaW50aW5nIG1vcmUgdGhhbiAxNiBpcyBwbGF0Zm9ybS1kZXBlbmRlbnQKPiBmb3IoaSBpbiBjKDE6NSwxMCwxNSwxNikpIGNhdChpLCI6XHQiLGZvcm1hdChwaSxkaWdpdHM9aSksIlxuIikKMSA6CSAzIAoyIDoJIDMuMSAKMyA6CSAzLjE0IAo0IDoJIDMuMTQyIAo1IDoJIDMuMTQxNiAKMTAgOgkgMy4xNDE1OTI2NTQgCjE1IDoJIDMuMTQxNTkyNjUzNTg5NzkgCjE2IDoJIDMuMTQxNTkyNjUzNTg5NzkzIAo+IAo+IHAgPC0gYyg0NywxMywyLC4xLC4wMjMsLjAwNDUsIDFlLTEwMCkvMTAwMAo+IGZvcm1hdC5wdmFsKHApClsxXSAiMC4wNDcwIiAgIjAuMDEzMCIgICIwLjAwMjAiICAiMC4wMDAxIiAgIjIuM2UtMDUiICI0LjVlLTA2IiAiPCAyZS0xNiIKPiBmb3JtYXQucHZhbChwIC8gMC45KQpbMV0gIjAuMDUyMjIyMjIiICIwLjAxNDQ0NDQ0IiAiMC4wMDIyMjIyMiIgIjAuMDAwMTExMTEiICIyLjU1NTZlLTA1IgpbNl0gIjUuMDAwMGUtMDYiICI8IDIuMjJlLTE2Igo+IGZvcm1hdC5wdmFsKHAgLyAwLjksIGRpZz0zKQpbMV0gIjAuMDUyMjIyIiAiMC4wMTQ0NDQiICIwLjAwMjIyMiIgIjAuMDAwMTExIiAiMi41NmUtMDUiICI1LjAwZS0wNiIgIjwgMmUtMTYiIAo+ICMjIGVuZCBvZiBtb3ZlZCBmcm9tIGZvcm1hdC5SZAo+IAo+IAo+ICMjIGlzLmZpbml0ZQo+IHggPC0gYygxMDAsLTFlLTEzLEluZiwtSW5mLCBOYU4sIHBpLCBOQSkKPiB4ICMgIDEuMDAwMDAwIC0zLjAwMDAwMCAgICAgICBJbmYgICAgICAtSW5mICAgICAgICBOQSAgMy4xNDE1OTMgICAgICAgIE5BClsxXSAgMS4wMDAwMDBlKzAyIC0xLjAwMDAwMGUtMTMgICAgICAgICAgIEluZiAgICAgICAgICAtSW5mICAgICAgICAgICBOYU4KWzZdICAzLjE0MTU5M2UrMDAgICAgICAgICAgICBOQQo+IG5hbWVzKHgpIDwtIGZvcm1hdEMoeCwgZGlnPTMpCj4gaXMuZmluaXRlKHgpCiAgIDEwMCAtMWUtMTMgICAgSW5mICAgLUluZiAgICBOYU4gICAzLjE0ICAgICBOQSAKICBUUlVFICAgVFJVRSAgRkFMU0UgIEZBTFNFICBGQUxTRSAgIFRSVUUgIEZBTFNFIAo+ICMjLSAgIDEwMCAtMWUtMTMgSW5mIC1JbmYgTmFOIDMuMTQgTkEKPiAjIy0gICAgIFQgICAgICBUICAgLiAgICAuICAgLiAgICBUICAuCj4gaXMubmEoeCkKICAgMTAwIC0xZS0xMyAgICBJbmYgICAtSW5mICAgIE5hTiAgIDMuMTQgICAgIE5BIAogRkFMU0UgIEZBTFNFICBGQUxTRSAgRkFMU0UgICBUUlVFICBGQUxTRSAgIFRSVUUgCj4gIyMtICAgMTAwIC0xZS0xMyBJbmYgLUluZiBOYU4gMy4xNCBOQQo+ICMjLSAgICAgLiAgICAgIC4gICAuICAgIC4gICBUICAgIC4gIFQKPiB3aGljaChpcy5uYSh4KSAmICFpcy5uYW4oeCkpIyBvbmx5ICdOQSc6IDcKICBOQSAKICAgNyAKPiAKPiBpcy5uYSh4KSB8IGlzLmZpbml0ZSh4KQogICAxMDAgLTFlLTEzICAgIEluZiAgIC1JbmYgICAgTmFOICAgMy4xNCAgICAgTkEgCiAgVFJVRSAgIFRSVUUgIEZBTFNFICBGQUxTRSAgIFRSVUUgICBUUlVFICAgVFJVRSAKPiAjIy0gICAxMDAgLTFlLTEzIEluZiAtSW5mIE5hTiAzLjE0IE5BCj4gIyMtICAgICBUICAgICAgVCAgIC4gICAgLiAgIFQgICAgVCAgVAo+IGlzLmluZmluaXRlKHgpCiAgIDEwMCAtMWUtMTMgICAgSW5mICAgLUluZiAgICBOYU4gICAzLjE0ICAgICBOQSAKIEZBTFNFICBGQUxTRSAgIFRSVUUgICBUUlVFICBGQUxTRSAgRkFMU0UgIEZBTFNFIAo+ICMjLSAgIDEwMCAtMWUtMTMgSW5mIC1JbmYgTmFOIDMuMTQgTkEKPiAjIy0gICAgIC4gICAgICAuICAgVCAgICBUICAgLiAgICAuICAuCj4gCj4gIyMtLSBlaXRoZXIgIGZpbml0ZSBvciBpbmZpbml0ZSAgb3IgIE5BOgo+IGFsbChpcy5uYSh4KSAhPSBpcy5maW5pdGUoeCkgfCBpcy5pbmZpbml0ZSh4KSkgIyBUUlVFClsxXSBUUlVFCj4gYWxsKGlzLm5hbih4KSAhPSBpcy5maW5pdGUoeCkgfCBpcy5pbmZpbml0ZSh4KSkgIyBGQUxTRTogaGF2ZSAncmVhbCcgTkEKWzFdIEZBTFNFCj4gCj4gIyMtLS0gSW50ZWdlcgo+IChpeCA8LSBzdHJ1Y3R1cmUoYXMuaW50ZWdlcih4KSxuYW1lcz0gbmFtZXMoeCkpKQogICAxMDAgLTFlLTEzICAgIEluZiAgIC1JbmYgICAgTmFOICAgMy4xNCAgICAgTkEgCiAgIDEwMCAgICAgIDAgICAgIE5BICAgICBOQSAgICAgTkEgICAgICAzICAgICBOQSAKV2FybmluZyBtZXNzYWdlOgpJbiBzdHJ1Y3R1cmUoYXMuaW50ZWdlcih4KSwgbmFtZXMgPSBuYW1lcyh4KSkgOgogIE5BcyBpbnRyb2R1Y2VkIGJ5IGNvZXJjaW9uIHRvIGludGVnZXIgcmFuZ2UKPiAjIy0gICAxMDAgLTFlLTEzICAgIEluZiAgIC1JbmYgICAgTmFOICAgMy4xNCAgICAgTkEKPiAjIy0gICAxMDAgICAgICAwICAgICBOQSAgICAgTkEgICAgIE5BICAgICAgMyAgICAgTkEKPiBhbGwoaXMubmEoaXgpICE9IGlzLmZpbml0ZShpeCkgfCBpcy5pbmZpbml0ZShpeCkpICMgVFJVRSAoc3RpbGwpClsxXSBUUlVFCj4gCj4gc3RvcmFnZS5tb2RlKGlpIDwtIC0zOjUpClsxXSAiaW50ZWdlciIKPiBzdG9yYWdlLm1vZGUoem0gPC0gb3V0ZXIoaWksaWksIEZVTj0iKiIpKSMgaW50ZWdlcgpbMV0gImRvdWJsZSIKPiBzdG9yYWdlLm1vZGUoemQgPC0gb3V0ZXIoaWksaWksIEZVTj0iLyIpKSMgZG91YmxlClsxXSAiZG91YmxlIgo+IHJhbmdlKHpkLCBuYS5ybT1UUlVFKSMgLUluZiAgSW5mClsxXSAtSW5mICBJbmYKPiB6ZFssaWk9PTBdClsxXSAtSW5mIC1JbmYgLUluZiAgTmFOICBJbmYgIEluZiAgSW5mICBJbmYgIEluZgo+IAo+IChzdG9yYWdlLm1vZGUocHJpbnQoMToxIC8gMDowKSkpIyBJbmYgImRvdWJsZSIKWzFdIEluZgpbMV0gImRvdWJsZSIKPiAoc3RvcmFnZS5tb2RlKHByaW50KDE6MSAvIDE6MSkpKSMgMSAiZG91YmxlIgpbMV0gMQpbMV0gImRvdWJsZSIKPiAoc3RvcmFnZS5tb2RlKHByaW50KDE6MSArIDE6MSkpKSMgMiAiaW50ZWdlciIKWzFdIDIKWzFdICJpbnRlZ2VyIgo+IChzdG9yYWdlLm1vZGUocHJpbnQoMjoyICogMjoyKSkpIyA0ICJpbnRlZ2VyIgpbMV0gNApbMV0gImludGVnZXIiCj4gIyMgZW5kIG9mIG1vdmVkIGZyb20gaXMuZmluaXRlLlJkCj4gCj4gCj4gIyMga3JvbmVja2VyCj4gZnJlZCA8LSBtYXRyaXgoMToxMiwgMywgNCwgZGltbmFtZXM9bGlzdChMRVRURVJTWzE6M10sIExFVFRFUlNbNDo3XSkpCj4gYmlsbCA8LSBjKCJoYXBweSIgPSAxMDAsICJzYWQiID0gMTAwMCkKPiBrcm9uZWNrZXIoZnJlZCwgYmlsbCwgbWFrZS5kaW1uYW1lcyA9IFRSVUUpCiAgICAgICAgICBEOiAgIEU6ICAgRjogICAgRzoKQTpoYXBweSAgMTAwICA0MDAgIDcwMCAgMTAwMApBOnNhZCAgIDEwMDAgNDAwMCA3MDAwIDEwMDAwCkI6aGFwcHkgIDIwMCAgNTAwICA4MDAgIDExMDAKQjpzYWQgICAyMDAwIDUwMDAgODAwMCAxMTAwMApDOmhhcHB5ICAzMDAgIDYwMCAgOTAwICAxMjAwCkM6c2FkICAgMzAwMCA2MDAwIDkwMDAgMTIwMDAKPiAKPiBiaWxsIDwtIG91dGVyKGJpbGwsIGMoImNhdCI9MywgImRvZyI9NCkpCj4ga3JvbmVja2VyKGZyZWQsIGJpbGwsIG1ha2UuZGltbmFtZXMgPSBUUlVFKQogICAgICAgIEQ6Y2F0IEQ6ZG9nIEU6Y2F0IEU6ZG9nIEY6Y2F0IEY6ZG9nIEc6Y2F0IEc6ZG9nCkE6aGFwcHkgICAzMDAgICA0MDAgIDEyMDAgIDE2MDAgIDIxMDAgIDI4MDAgIDMwMDAgIDQwMDAKQTpzYWQgICAgMzAwMCAgNDAwMCAxMjAwMCAxNjAwMCAyMTAwMCAyODAwMCAzMDAwMCA0MDAwMApCOmhhcHB5ICAgNjAwICAgODAwICAxNTAwICAyMDAwICAyNDAwICAzMjAwICAzMzAwICA0NDAwCkI6c2FkICAgIDYwMDAgIDgwMDAgMTUwMDAgMjAwMDAgMjQwMDAgMzIwMDAgMzMwMDAgNDQwMDAKQzpoYXBweSAgIDkwMCAgMTIwMCAgMTgwMCAgMjQwMCAgMjcwMCAgMzYwMCAgMzYwMCAgNDgwMApDOnNhZCAgICA5MDAwIDEyMDAwIDE4MDAwIDI0MDAwIDI3MDAwIDM2MDAwIDM2MDAwIDQ4MDAwCj4gCj4gIyBkaW1uYW1lcyBhcmUgaGFyZCB3b3JrOiBsZXQncyB0ZXN0IHRoZW0gdGhvcm91Z2hseQo+IAo+IGRpbW5hbWVzKGJpbGwpIDwtIE5VTEwKPiBrcm9uZWNrZXIoZnJlZCwgYmlsbCwgbWFrZT1UUlVFKQogICAgIEQ6ICAgIEQ6ICAgIEU6ICAgIEU6ICAgIEY6ICAgIEY6ICAgIEc6ICAgIEc6CkE6ICAzMDAgICA0MDAgIDEyMDAgIDE2MDAgIDIxMDAgIDI4MDAgIDMwMDAgIDQwMDAKQTogMzAwMCAgNDAwMCAxMjAwMCAxNjAwMCAyMTAwMCAyODAwMCAzMDAwMCA0MDAwMApCOiAgNjAwICAgODAwICAxNTAwICAyMDAwICAyNDAwICAzMjAwICAzMzAwICA0NDAwCkI6IDYwMDAgIDgwMDAgMTUwMDAgMjAwMDAgMjQwMDAgMzIwMDAgMzMwMDAgNDQwMDAKQzogIDkwMCAgMTIwMCAgMTgwMCAgMjQwMCAgMjcwMCAgMzYwMCAgMzYwMCAgNDgwMApDOiA5MDAwIDEyMDAwIDE4MDAwIDI0MDAwIDI3MDAwIDM2MDAwIDM2MDAwIDQ4MDAwCj4ga3JvbmVja2VyKGJpbGwsIGZyZWQsIG1ha2U9VFJVRSkKICAgICA6RCAgICA6RSAgICA6RiAgICA6RyAgICA6RCAgICA6RSAgICA6RiAgICA6Rwo6QSAgMzAwICAxMjAwICAyMTAwICAzMDAwICAgNDAwICAxNjAwICAyODAwICA0MDAwCjpCICA2MDAgIDE1MDAgIDI0MDAgIDMzMDAgICA4MDAgIDIwMDAgIDMyMDAgIDQ0MDAKOkMgIDkwMCAgMTgwMCAgMjcwMCAgMzYwMCAgMTIwMCAgMjQwMCAgMzYwMCAgNDgwMAo6QSAzMDAwIDEyMDAwIDIxMDAwIDMwMDAwICA0MDAwIDE2MDAwIDI4MDAwIDQwMDAwCjpCIDYwMDAgMTUwMDAgMjQwMDAgMzMwMDAgIDgwMDAgMjAwMDAgMzIwMDAgNDQwMDAKOkMgOTAwMCAxODAwMCAyNzAwMCAzNjAwMCAxMjAwMCAyNDAwMCAzNjAwMCA0ODAwMAo+IAo+IGRpbShiaWxsKSA8LSBjKDIsIDIsIDEpCj4gZGltbmFtZXMoYmlsbCkgPC0gbGlzdChjKCJoYXBweSIsICJzYWQiKSwgTlVMTCwgIiIpCj4ga3JvbmVja2VyKGZyZWQsIGJpbGwsIG1ha2U9VFJVRSkKLCAsIDoKCiAgICAgICAgICBEOiAgICBEOiAgICBFOiAgICBFOiAgICBGOiAgICBGOiAgICBHOiAgICBHOgpBOmhhcHB5ICAzMDAgICA0MDAgIDEyMDAgIDE2MDAgIDIxMDAgIDI4MDAgIDMwMDAgIDQwMDAKQTpzYWQgICAzMDAwICA0MDAwIDEyMDAwIDE2MDAwIDIxMDAwIDI4MDAwIDMwMDAwIDQwMDAwCkI6aGFwcHkgIDYwMCAgIDgwMCAgMTUwMCAgMjAwMCAgMjQwMCAgMzIwMCAgMzMwMCAgNDQwMApCOnNhZCAgIDYwMDAgIDgwMDAgMTUwMDAgMjAwMDAgMjQwMDAgMzIwMDAgMzMwMDAgNDQwMDAKQzpoYXBweSAgOTAwICAxMjAwICAxODAwICAyNDAwICAyNzAwICAzNjAwICAzNjAwICA0ODAwCkM6c2FkICAgOTAwMCAxMjAwMCAxODAwMCAyNDAwMCAyNzAwMCAzNjAwMCAzNjAwMCA0ODAwMAoKPiAKPiBiaWxsIDwtIGFycmF5KDE6MjQsIGMoMywgNCwgMikpCj4gZGltbmFtZXMoYmlsbCkgPC0gbGlzdChOVUxMLCBOVUxMLCBjKCJoYXBweSIsICJzYWQiKSkKPiBrcm9uZWNrZXIoYmlsbCwgZnJlZCwgbWFrZT1UUlVFKQosICwgaGFwcHk6CgogICA6RCA6RSA6RiA6RyA6RCA6RSA6RiA6RyA6RCA6RSA6RiAgOkcgOkQgOkUgIDpGICA6Rwo6QSAgMSAgNCAgNyAxMCAgNCAxNiAyOCA0MCAgNyAyOCA0OSAgNzAgMTAgNDAgIDcwIDEwMAo6QiAgMiAgNSAgOCAxMSAgOCAyMCAzMiA0NCAxNCAzNSA1NiAgNzcgMjAgNTAgIDgwIDExMAo6QyAgMyAgNiAgOSAxMiAxMiAyNCAzNiA0OCAyMSA0MiA2MyAgODQgMzAgNjAgIDkwIDEyMAo6QSAgMiAgOCAxNCAyMCAgNSAyMCAzNSA1MCAgOCAzMiA1NiAgODAgMTEgNDQgIDc3IDExMAo6QiAgNCAxMCAxNiAyMiAxMCAyNSA0MCA1NSAxNiA0MCA2NCAgODggMjIgNTUgIDg4IDEyMQo6QyAgNiAxMiAxOCAyNCAxNSAzMCA0NSA2MCAyNCA0OCA3MiAgOTYgMzMgNjYgIDk5IDEzMgo6QSAgMyAxMiAyMSAzMCAgNiAyNCA0MiA2MCAgOSAzNiA2MyAgOTAgMTIgNDggIDg0IDEyMAo6QiAgNiAxNSAyNCAzMyAxMiAzMCA0OCA2NiAxOCA0NSA3MiAgOTkgMjQgNjAgIDk2IDEzMgo6QyAgOSAxOCAyNyAzNiAxOCAzNiA1NCA3MiAyNyA1NCA4MSAxMDggMzYgNzIgMTA4IDE0NAoKLCAsIHNhZDoKCiAgIDpEIDpFICA6RiAgOkcgOkQgIDpFICA6RiAgOkcgOkQgIDpFICA6RiAgOkcgOkQgIDpFICA6RiAgOkcKOkEgMTMgNTIgIDkxIDEzMCAxNiAgNjQgMTEyIDE2MCAxOSAgNzYgMTMzIDE5MCAyMiAgODggMTU0IDIyMAo6QiAyNiA2NSAxMDQgMTQzIDMyICA4MCAxMjggMTc2IDM4ICA5NSAxNTIgMjA5IDQ0IDExMCAxNzYgMjQyCjpDIDM5IDc4IDExNyAxNTYgNDggIDk2IDE0NCAxOTIgNTcgMTE0IDE3MSAyMjggNjYgMTMyIDE5OCAyNjQKOkEgMTQgNTYgIDk4IDE0MCAxNyAgNjggMTE5IDE3MCAyMCAgODAgMTQwIDIwMCAyMyAgOTIgMTYxIDIzMAo6QiAyOCA3MCAxMTIgMTU0IDM0ICA4NSAxMzYgMTg3IDQwIDEwMCAxNjAgMjIwIDQ2IDExNSAxODQgMjUzCjpDIDQyIDg0IDEyNiAxNjggNTEgMTAyIDE1MyAyMDQgNjAgMTIwIDE4MCAyNDAgNjkgMTM4IDIwNyAyNzYKOkEgMTUgNjAgMTA1IDE1MCAxOCAgNzIgMTI2IDE4MCAyMSAgODQgMTQ3IDIxMCAyNCAgOTYgMTY4IDI0MAo6QiAzMCA3NSAxMjAgMTY1IDM2ICA5MCAxNDQgMTk4IDQyIDEwNSAxNjggMjMxIDQ4IDEyMCAxOTIgMjY0CjpDIDQ1IDkwIDEzNSAxODAgNTQgMTA4IDE2MiAyMTYgNjMgMTI2IDE4OSAyNTIgNzIgMTQ0IDIxNiAyODgKCj4ga3JvbmVja2VyKGZyZWQsIGJpbGwsIG1ha2U9VFJVRSkKLCAsIDpoYXBweQoKICAgRDogRDogRDogRDogRTogRTogRTogRTogRjogRjogRjogIEY6IEc6IEc6ICBHOiAgRzoKQTogIDEgIDQgIDcgMTAgIDQgMTYgMjggNDAgIDcgMjggNDkgIDcwIDEwIDQwICA3MCAxMDAKQTogIDIgIDUgIDggMTEgIDggMjAgMzIgNDQgMTQgMzUgNTYgIDc3IDIwIDUwICA4MCAxMTAKQTogIDMgIDYgIDkgMTIgMTIgMjQgMzYgNDggMjEgNDIgNjMgIDg0IDMwIDYwICA5MCAxMjAKQjogIDIgIDggMTQgMjAgIDUgMjAgMzUgNTAgIDggMzIgNTYgIDgwIDExIDQ0ICA3NyAxMTAKQjogIDQgMTAgMTYgMjIgMTAgMjUgNDAgNTUgMTYgNDAgNjQgIDg4IDIyIDU1ICA4OCAxMjEKQjogIDYgMTIgMTggMjQgMTUgMzAgNDUgNjAgMjQgNDggNzIgIDk2IDMzIDY2ICA5OSAxMzIKQzogIDMgMTIgMjEgMzAgIDYgMjQgNDIgNjAgIDkgMzYgNjMgIDkwIDEyIDQ4ICA4NCAxMjAKQzogIDYgMTUgMjQgMzMgMTIgMzAgNDggNjYgMTggNDUgNzIgIDk5IDI0IDYwICA5NiAxMzIKQzogIDkgMTggMjcgMzYgMTggMzYgNTQgNzIgMjcgNTQgODEgMTA4IDM2IDcyIDEwOCAxNDQKCiwgLCA6c2FkCgogICBEOiBEOiBEOiBEOiBFOiAgRTogIEU6ICBFOiAgRjogIEY6ICBGOiAgRjogIEc6ICBHOiAgRzogIEc6CkE6IDEzIDE2IDE5IDIyIDUyICA2NCAgNzYgIDg4ICA5MSAxMTIgMTMzIDE1NCAxMzAgMTYwIDE5MCAyMjAKQTogMTQgMTcgMjAgMjMgNTYgIDY4ICA4MCAgOTIgIDk4IDExOSAxNDAgMTYxIDE0MCAxNzAgMjAwIDIzMApBOiAxNSAxOCAyMSAyNCA2MCAgNzIgIDg0ICA5NiAxMDUgMTI2IDE0NyAxNjggMTUwIDE4MCAyMTAgMjQwCkI6IDI2IDMyIDM4IDQ0IDY1ICA4MCAgOTUgMTEwIDEwNCAxMjggMTUyIDE3NiAxNDMgMTc2IDIwOSAyNDIKQjogMjggMzQgNDAgNDYgNzAgIDg1IDEwMCAxMTUgMTEyIDEzNiAxNjAgMTg0IDE1NCAxODcgMjIwIDI1MwpCOiAzMCAzNiA0MiA0OCA3NSAgOTAgMTA1IDEyMCAxMjAgMTQ0IDE2OCAxOTIgMTY1IDE5OCAyMzEgMjY0CkM6IDM5IDQ4IDU3IDY2IDc4ICA5NiAxMTQgMTMyIDExNyAxNDQgMTcxIDE5OCAxNTYgMTkyIDIyOCAyNjQKQzogNDIgNTEgNjAgNjkgODQgMTAyIDEyMCAxMzggMTI2IDE1MyAxODAgMjA3IDE2OCAyMDQgMjQwIDI3NgpDOiA0NSA1NCA2MyA3MiA5MCAxMDggMTI2IDE0NCAxMzUgMTYyIDE4OSAyMTYgMTgwIDIxNiAyNTIgMjg4Cgo+IAo+IGZyZWQgPC0gb3V0ZXIoZnJlZCwgYygiZnJlcXVlbnRpc3QiPTQsICJiYXllc2lhbiI9NDAwMCkpCj4ga3JvbmVja2VyKGZyZWQsIGJpbGwsIG1ha2U9VFJVRSkKLCAsIGZyZXF1ZW50aXN0OmhhcHB5CgogICBEOiBEOiAgRDogIEQ6IEU6ICBFOiAgRTogIEU6ICBGOiAgRjogIEY6ICBGOiAgRzogIEc6ICBHOiAgRzoKQTogIDQgMTYgIDI4ICA0MCAxNiAgNjQgMTEyIDE2MCAgMjggMTEyIDE5NiAyODAgIDQwIDE2MCAyODAgNDAwCkE6ICA4IDIwICAzMiAgNDQgMzIgIDgwIDEyOCAxNzYgIDU2IDE0MCAyMjQgMzA4ICA4MCAyMDAgMzIwIDQ0MApBOiAxMiAyNCAgMzYgIDQ4IDQ4ICA5NiAxNDQgMTkyICA4NCAxNjggMjUyIDMzNiAxMjAgMjQwIDM2MCA0ODAKQjogIDggMzIgIDU2ICA4MCAyMCAgODAgMTQwIDIwMCAgMzIgMTI4IDIyNCAzMjAgIDQ0IDE3NiAzMDggNDQwCkI6IDE2IDQwICA2NCAgODggNDAgMTAwIDE2MCAyMjAgIDY0IDE2MCAyNTYgMzUyICA4OCAyMjAgMzUyIDQ4NApCOiAyNCA0OCAgNzIgIDk2IDYwIDEyMCAxODAgMjQwICA5NiAxOTIgMjg4IDM4NCAxMzIgMjY0IDM5NiA1MjgKQzogMTIgNDggIDg0IDEyMCAyNCAgOTYgMTY4IDI0MCAgMzYgMTQ0IDI1MiAzNjAgIDQ4IDE5MiAzMzYgNDgwCkM6IDI0IDYwICA5NiAxMzIgNDggMTIwIDE5MiAyNjQgIDcyIDE4MCAyODggMzk2ICA5NiAyNDAgMzg0IDUyOApDOiAzNiA3MiAxMDggMTQ0IDcyIDE0NCAyMTYgMjg4IDEwOCAyMTYgMzI0IDQzMiAxNDQgMjg4IDQzMiA1NzYKCiwgLCBmcmVxdWVudGlzdDpzYWQKCiAgICBEOiAgRDogIEQ6ICBEOiAgRTogIEU6ICBFOiAgRTogIEY6ICBGOiAgRjogIEY6ICBHOiAgRzogICBHOiAgIEc6CkE6ICA1MiAgNjQgIDc2ICA4OCAyMDggMjU2IDMwNCAzNTIgMzY0IDQ0OCA1MzIgNjE2IDUyMCA2NDAgIDc2MCAgODgwCkE6ICA1NiAgNjggIDgwICA5MiAyMjQgMjcyIDMyMCAzNjggMzkyIDQ3NiA1NjAgNjQ0IDU2MCA2ODAgIDgwMCAgOTIwCkE6ICA2MCAgNzIgIDg0ICA5NiAyNDAgMjg4IDMzNiAzODQgNDIwIDUwNCA1ODggNjcyIDYwMCA3MjAgIDg0MCAgOTYwCkI6IDEwNCAxMjggMTUyIDE3NiAyNjAgMzIwIDM4MCA0NDAgNDE2IDUxMiA2MDggNzA0IDU3MiA3MDQgIDgzNiAgOTY4CkI6IDExMiAxMzYgMTYwIDE4NCAyODAgMzQwIDQwMCA0NjAgNDQ4IDU0NCA2NDAgNzM2IDYxNiA3NDggIDg4MCAxMDEyCkI6IDEyMCAxNDQgMTY4IDE5MiAzMDAgMzYwIDQyMCA0ODAgNDgwIDU3NiA2NzIgNzY4IDY2MCA3OTIgIDkyNCAxMDU2CkM6IDE1NiAxOTIgMjI4IDI2NCAzMTIgMzg0IDQ1NiA1MjggNDY4IDU3NiA2ODQgNzkyIDYyNCA3NjggIDkxMiAxMDU2CkM6IDE2OCAyMDQgMjQwIDI3NiAzMzYgNDA4IDQ4MCA1NTIgNTA0IDYxMiA3MjAgODI4IDY3MiA4MTYgIDk2MCAxMTA0CkM6IDE4MCAyMTYgMjUyIDI4OCAzNjAgNDMyIDUwNCA1NzYgNTQwIDY0OCA3NTYgODY0IDcyMCA4NjQgMTAwOCAxMTUyCgosICwgYmF5ZXNpYW46aGFwcHkKCiAgICAgIEQ6ICAgIEQ6ICAgICBEOiAgICAgRDogICAgRTogICAgIEU6ICAgICBFOiAgICAgRTogICAgIEY6ICAgICBGOiAgICAgRjoKQTogIDQwMDAgMTYwMDAgIDI4MDAwICA0MDAwMCAxNjAwMCAgNjQwMDAgMTEyMDAwIDE2MDAwMCAgMjgwMDAgMTEyMDAwIDE5NjAwMApBOiAgODAwMCAyMDAwMCAgMzIwMDAgIDQ0MDAwIDMyMDAwICA4MDAwMCAxMjgwMDAgMTc2MDAwICA1NjAwMCAxNDAwMDAgMjI0MDAwCkE6IDEyMDAwIDI0MDAwICAzNjAwMCAgNDgwMDAgNDgwMDAgIDk2MDAwIDE0NDAwMCAxOTIwMDAgIDg0MDAwIDE2ODAwMCAyNTIwMDAKQjogIDgwMDAgMzIwMDAgIDU2MDAwICA4MDAwMCAyMDAwMCAgODAwMDAgMTQwMDAwIDIwMDAwMCAgMzIwMDAgMTI4MDAwIDIyNDAwMApCOiAxNjAwMCA0MDAwMCAgNjQwMDAgIDg4MDAwIDQwMDAwIDEwMDAwMCAxNjAwMDAgMjIwMDAwICA2NDAwMCAxNjAwMDAgMjU2MDAwCkI6IDI0MDAwIDQ4MDAwICA3MjAwMCAgOTYwMDAgNjAwMDAgMTIwMDAwIDE4MDAwMCAyNDAwMDAgIDk2MDAwIDE5MjAwMCAyODgwMDAKQzogMTIwMDAgNDgwMDAgIDg0MDAwIDEyMDAwMCAyNDAwMCAgOTYwMDAgMTY4MDAwIDI0MDAwMCAgMzYwMDAgMTQ0MDAwIDI1MjAwMApDOiAyNDAwMCA2MDAwMCAgOTYwMDAgMTMyMDAwIDQ4MDAwIDEyMDAwMCAxOTIwMDAgMjY0MDAwICA3MjAwMCAxODAwMDAgMjg4MDAwCkM6IDM2MDAwIDcyMDAwIDEwODAwMCAxNDQwMDAgNzIwMDAgMTQ0MDAwIDIxNjAwMCAyODgwMDAgMTA4MDAwIDIxNjAwMCAzMjQwMDAKICAgICAgIEY6ICAgICBHOiAgICAgRzogICAgIEc6ICAgICBHOgpBOiAyODAwMDAgIDQwMDAwIDE2MDAwMCAyODAwMDAgNDAwMDAwCkE6IDMwODAwMCAgODAwMDAgMjAwMDAwIDMyMDAwMCA0NDAwMDAKQTogMzM2MDAwIDEyMDAwMCAyNDAwMDAgMzYwMDAwIDQ4MDAwMApCOiAzMjAwMDAgIDQ0MDAwIDE3NjAwMCAzMDgwMDAgNDQwMDAwCkI6IDM1MjAwMCAgODgwMDAgMjIwMDAwIDM1MjAwMCA0ODQwMDAKQjogMzg0MDAwIDEzMjAwMCAyNjQwMDAgMzk2MDAwIDUyODAwMApDOiAzNjAwMDAgIDQ4MDAwIDE5MjAwMCAzMzYwMDAgNDgwMDAwCkM6IDM5NjAwMCAgOTYwMDAgMjQwMDAwIDM4NDAwMCA1MjgwMDAKQzogNDMyMDAwIDE0NDAwMCAyODgwMDAgNDMyMDAwIDU3NjAwMAoKLCAsIGJheWVzaWFuOnNhZAoKICAgICAgIEQ6ICAgICBEOiAgICAgRDogICAgIEQ6ICAgICBFOiAgICAgRTogICAgIEU6ICAgICBFOiAgICAgRjogICAgIEY6ICAgICBGOgpBOiAgNTIwMDAgIDY0MDAwICA3NjAwMCAgODgwMDAgMjA4MDAwIDI1NjAwMCAzMDQwMDAgMzUyMDAwIDM2NDAwMCA0NDgwMDAgNTMyMDAwCkE6ICA1NjAwMCAgNjgwMDAgIDgwMDAwICA5MjAwMCAyMjQwMDAgMjcyMDAwIDMyMDAwMCAzNjgwMDAgMzkyMDAwIDQ3NjAwMCA1NjAwMDAKQTogIDYwMDAwICA3MjAwMCAgODQwMDAgIDk2MDAwIDI0MDAwMCAyODgwMDAgMzM2MDAwIDM4NDAwMCA0MjAwMDAgNTA0MDAwIDU4ODAwMApCOiAxMDQwMDAgMTI4MDAwIDE1MjAwMCAxNzYwMDAgMjYwMDAwIDMyMDAwMCAzODAwMDAgNDQwMDAwIDQxNjAwMCA1MTIwMDAgNjA4MDAwCkI6IDExMjAwMCAxMzYwMDAgMTYwMDAwIDE4NDAwMCAyODAwMDAgMzQwMDAwIDQwMDAwMCA0NjAwMDAgNDQ4MDAwIDU0NDAwMCA2NDAwMDAKQjogMTIwMDAwIDE0NDAwMCAxNjgwMDAgMTkyMDAwIDMwMDAwMCAzNjAwMDAgNDIwMDAwIDQ4MDAwMCA0ODAwMDAgNTc2MDAwIDY3MjAwMApDOiAxNTYwMDAgMTkyMDAwIDIyODAwMCAyNjQwMDAgMzEyMDAwIDM4NDAwMCA0NTYwMDAgNTI4MDAwIDQ2ODAwMCA1NzYwMDAgNjg0MDAwCkM6IDE2ODAwMCAyMDQwMDAgMjQwMDAwIDI3NjAwMCAzMzYwMDAgNDA4MDAwIDQ4MDAwMCA1NTIwMDAgNTA0MDAwIDYxMjAwMCA3MjAwMDAKQzogMTgwMDAwIDIxNjAwMCAyNTIwMDAgMjg4MDAwIDM2MDAwMCA0MzIwMDAgNTA0MDAwIDU3NjAwMCA1NDAwMDAgNjQ4MDAwIDc1NjAwMAogICAgICAgRjogICAgIEc6ICAgICBHOiAgICAgIEc6ICAgICAgRzoKQTogNjE2MDAwIDUyMDAwMCA2NDAwMDAgIDc2MDAwMCAgODgwMDAwCkE6IDY0NDAwMCA1NjAwMDAgNjgwMDAwICA4MDAwMDAgIDkyMDAwMApBOiA2NzIwMDAgNjAwMDAwIDcyMDAwMCAgODQwMDAwICA5NjAwMDAKQjogNzA0MDAwIDU3MjAwMCA3MDQwMDAgIDgzNjAwMCAgOTY4MDAwCkI6IDczNjAwMCA2MTYwMDAgNzQ4MDAwICA4ODAwMDAgMTAxMjAwMApCOiA3NjgwMDAgNjYwMDAwIDc5MjAwMCAgOTI0MDAwIDEwNTYwMDAKQzogNzkyMDAwIDYyNDAwMCA3NjgwMDAgIDkxMjAwMCAxMDU2MDAwCkM6IDgyODAwMCA2NzIwMDAgODE2MDAwICA5NjAwMDAgMTEwNDAwMApDOiA4NjQwMDAgNzIwMDAwIDg2NDAwMCAxMDA4MDAwIDExNTIwMDAKCj4gIyMgZW5kIG9mIG1vdmVkIGZyb20ga3JvbmVja2VyLlJkCj4gCj4gIyMgbWVyZ2UKPiBhdXRob3JzIDwtIGRhdGEuZnJhbWUoCisgICAgIHN1cm5hbWUgPSBjKCJUdWtleSIsICJWZW5hYmxlcyIsICJUaWVybmV5IiwgIlJpcGxleSIsICJNY05laWwiKSwKKyAgICAgbmF0aW9uYWxpdHkgPSBjKCJVUyIsICJBdXN0cmFsaWEiLCAiVVMiLCAiVUsiLCAiQXVzdHJhbGlhIiksCisgICAgIGRlY2Vhc2VkID0gYygieWVzIiwgcmVwKCJubyIsIDQpKSwgc3RyaW5nc0FzRmFjdG9ycz1UUlVFKQo+IGJvb2tzIDwtIGRhdGEuZnJhbWUoCisgICAgIG5hbWUgPSBjKCJUdWtleSIsICJWZW5hYmxlcyIsICJUaWVybmV5IiwKKyAgICAgICAgICAgICAgIlJpcGxleSIsICJSaXBsZXkiLCAiTWNOZWlsIiwgIlIgQ29yZSIpLAorICAgICB0aXRsZSA9IGMoIkV4cGxvcmF0b3J5IERhdGEgQW5hbHlzaXMiLAorICAgICAgICAgICAgICAgIk1vZGVybiBBcHBsaWVkIFN0YXRpc3RpY3MgLi4uIiwKKyAgICAgICAgICAgICAgICJMSVNQLVNUQVQiLAorICAgICAgICAgICAgICAgIlNwYXRpYWwgU3RhdGlzdGljcyIsICJTdG9jaGFzdGljIFNpbXVsYXRpb24iLAorICAgICAgICAgICAgICAgIkludGVyYWN0aXZlIERhdGEgQW5hbHlzaXMiLAorICAgICAgICAgICAgICAgIkFuIEludHJvZHVjdGlvbiB0byBSIiksCisgICAgIG90aGVyLmF1dGhvciA9IGMoTkEsICJSaXBsZXkiLCBOQSwgTkEsIE5BLCBOQSwKKyAJCSAgICAgIlZlbmFibGVzICYgU21pdGgiKSwKKyAJICAgc3RyaW5nc0FzRmFjdG9ycz1UUlVFKQo+IGIyIDwtIGJvb2tzOyBuYW1lcyhiMilbMV0gPC0gbmFtZXMoYXV0aG9ycylbMV0KPiAKPiBtZXJnZShhdXRob3JzLCBiMiwgYWxsLnggPSBUUlVFKQogICBzdXJuYW1lIG5hdGlvbmFsaXR5IGRlY2Vhc2VkICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlIG90aGVyLmF1dGhvcgoxICAgTWNOZWlsICAgQXVzdHJhbGlhICAgICAgIG5vICAgICBJbnRlcmFjdGl2ZSBEYXRhIEFuYWx5c2lzICAgICAgICAgPE5BPgoyICAgUmlwbGV5ICAgICAgICAgIFVLICAgICAgIG5vICAgICAgICAgICAgU3BhdGlhbCBTdGF0aXN0aWNzICAgICAgICAgPE5BPgozICAgUmlwbGV5ICAgICAgICAgIFVLICAgICAgIG5vICAgICAgICAgU3RvY2hhc3RpYyBTaW11bGF0aW9uICAgICAgICAgPE5BPgo0ICBUaWVybmV5ICAgICAgICAgIFVTICAgICAgIG5vICAgICAgICAgICAgICAgICAgICAgTElTUC1TVEFUICAgICAgICAgPE5BPgo1ICAgIFR1a2V5ICAgICAgICAgIFVTICAgICAgeWVzICAgICBFeHBsb3JhdG9yeSBEYXRhIEFuYWx5c2lzICAgICAgICAgPE5BPgo2IFZlbmFibGVzICAgQXVzdHJhbGlhICAgICAgIG5vIE1vZGVybiBBcHBsaWVkIFN0YXRpc3RpY3MgLi4uICAgICAgIFJpcGxleQo+IG1lcmdlKGF1dGhvcnMsIGIyLCBhbGwueSA9IFRSVUUpCiAgIHN1cm5hbWUgbmF0aW9uYWxpdHkgZGVjZWFzZWQgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGUgICAgIG90aGVyLmF1dGhvcgoxICAgTWNOZWlsICAgQXVzdHJhbGlhICAgICAgIG5vICAgICBJbnRlcmFjdGl2ZSBEYXRhIEFuYWx5c2lzICAgICAgICAgICAgIDxOQT4KMiAgIFJpcGxleSAgICAgICAgICBVSyAgICAgICBubyAgICAgICAgICAgIFNwYXRpYWwgU3RhdGlzdGljcyAgICAgICAgICAgICA8TkE+CjMgICBSaXBsZXkgICAgICAgICAgVUsgICAgICAgbm8gICAgICAgICBTdG9jaGFzdGljIFNpbXVsYXRpb24gICAgICAgICAgICAgPE5BPgo0ICBUaWVybmV5ICAgICAgICAgIFVTICAgICAgIG5vICAgICAgICAgICAgICAgICAgICAgTElTUC1TVEFUICAgICAgICAgICAgIDxOQT4KNSAgICBUdWtleSAgICAgICAgICBVUyAgICAgIHllcyAgICAgRXhwbG9yYXRvcnkgRGF0YSBBbmFseXNpcyAgICAgICAgICAgICA8TkE+CjYgVmVuYWJsZXMgICBBdXN0cmFsaWEgICAgICAgbm8gTW9kZXJuIEFwcGxpZWQgU3RhdGlzdGljcyAuLi4gICAgICAgICAgIFJpcGxleQo3ICAgUiBDb3JlICAgICAgICA8TkE+ICAgICA8TkE+ICAgICAgICAgIEFuIEludHJvZHVjdGlvbiB0byBSIFZlbmFibGVzICYgU21pdGgKPiAKPiAjIyBlbXB0eSBkLmYuIDoKPiBtZXJnZShhdXRob3JzLCBiMls3LF0pClsxXSBzdXJuYW1lICAgICAgbmF0aW9uYWxpdHkgIGRlY2Vhc2VkICAgICB0aXRsZSAgICAgICAgb3RoZXIuYXV0aG9yCjwwIHJvd3M+IChvciAwLWxlbmd0aCByb3cubmFtZXMpCj4gCj4gbWVyZ2UoYXV0aG9ycywgYjJbNyxdLCBhbGwueSA9IFRSVUUpCiAgc3VybmFtZSBuYXRpb25hbGl0eSBkZWNlYXNlZCAgICAgICAgICAgICAgICB0aXRsZSAgICAgb3RoZXIuYXV0aG9yCjEgIFIgQ29yZSAgICAgICAgPE5BPiAgICAgPE5BPiBBbiBJbnRyb2R1Y3Rpb24gdG8gUiBWZW5hYmxlcyAmIFNtaXRoCj4gbWVyZ2UoYXV0aG9ycywgYjJbNyxdLCBhbGwueCA9IFRSVUUpCiAgIHN1cm5hbWUgbmF0aW9uYWxpdHkgZGVjZWFzZWQgdGl0bGUgb3RoZXIuYXV0aG9yCjEgICBNY05laWwgICBBdXN0cmFsaWEgICAgICAgbm8gIDxOQT4gICAgICAgICA8TkE+CjIgICBSaXBsZXkgICAgICAgICAgVUsgICAgICAgbm8gIDxOQT4gICAgICAgICA8TkE+CjMgIFRpZXJuZXkgICAgICAgICAgVVMgICAgICAgbm8gIDxOQT4gICAgICAgICA8TkE+CjQgICAgVHVrZXkgICAgICAgICAgVVMgICAgICB5ZXMgIDxOQT4gICAgICAgICA8TkE+CjUgVmVuYWJsZXMgICBBdXN0cmFsaWEgICAgICAgbm8gIDxOQT4gICAgICAgICA8TkE+Cj4gIyMgZW5kIG9mIG1vdmVkIGZyb20gbWVyZ2UuUmQKPiAKPiAjIyBOQQo+IGlzLm5hKGMoMSxOQSkpClsxXSBGQUxTRSAgVFJVRQo+IGlzLm5hKHBhc3RlKGMoMSxOQSkpKQpbMV0gRkFMU0UgRkFMU0UKPiBpcy5uYShsaXN0KCkpIyBsb2dpY2FsKDApCmxvZ2ljYWwoMCkKPiBsbCA8LSBsaXN0KHBpLCJDIixOYU4sSW5mLCAxOjMsIGMoMCxOQSksIE5BKQo+IGlzLm5hIChsbCkKWzFdIEZBTFNFIEZBTFNFICBUUlVFIEZBTFNFIEZBTFNFIEZBTFNFICBUUlVFCj4gbGFwcGx5KGxsLCBpcy5uYW4pICAjIGlzLm5hbiBubyBsb25nZXIgd29ya3Mgb24gbGlzdHMKW1sxXV0KWzFdIEZBTFNFCgpbWzJdXQpbMV0gRkFMU0UKCltbM11dClsxXSBUUlVFCgpbWzRdXQpbMV0gRkFMU0UKCltbNV1dClsxXSBGQUxTRSBGQUxTRSBGQUxTRQoKW1s2XV0KWzFdIEZBTFNFIEZBTFNFCgpbWzddXQpbMV0gRkFMU0UKCj4gIyMgZW5kIG9mIG1vdmVkIGZyb20gTkEuUmQKPiAKPiAjIyBpcy5uYSB3YXMgcmV0dXJuaW5nIHVuc2V0IHZhbHVlcyBvbiBuZXN0ZWQgbGlzdHMKPiBsbCA8LSBsaXN0KGxpc3QoMSkpCj4gZm9yIChpIGluIDE6NSkgcHJpbnQoYXMuaW50ZWdlcihpcy5uYShsbCkpKQpbMV0gMApbMV0gMApbMV0gMApbMV0gMApbMV0gMAo+IAo+ICMjIHNjYWxlCj4gIyMgdGVzdCBvdXQgTkEgaGFuZGxpbmcKPiB0bSA8LSBtYXRyaXgoYygyLDEsMCwxLDAsTkEsTkEsTkEsMCksIG5yb3c9MykKPiBzY2FsZSh0bSwgLCBGQUxTRSkKICAgICBbLDFdIFssMl0gWywzXQpbMSxdICAgIDEgIDAuNSAgIE5BClsyLF0gICAgMCAtMC41ICAgTkEKWzMsXSAgIC0xICAgTkEgICAgMAphdHRyKCwic2NhbGVkOmNlbnRlciIpClsxXSAxLjAgMC41IDAuMAo+IHNjYWxlKHRtKQogICAgIFssMV0gICAgICAgWywyXSBbLDNdClsxLF0gICAgMSAgMC43MDcxMDY4ICAgTkEKWzIsXSAgICAwIC0wLjcwNzEwNjggICBOQQpbMyxdICAgLTEgICAgICAgICBOQSAgTmFOCmF0dHIoLCJzY2FsZWQ6Y2VudGVyIikKWzFdIDEuMCAwLjUgMC4wCmF0dHIoLCJzY2FsZWQ6c2NhbGUiKQpbMV0gMS4wMDAwMDAwIDAuNzA3MTA2OCAwLjAwMDAwMDAKPiAjIyBlbmQgb2YgbW92ZWQgZnJvbSBzY2FsZS5SZAo+IAo+ICMjIHRhYnVsYXRlCj4gdGFidWxhdGUobnVtZXJpYygwKSkKWzFdIDAKPiAjIyBlbmQgb2YgbW92ZWQgZnJvbSB0YWJ1bGF0ZS5SZAo+IAo+ICMjIHRzCj4gIyBFbnN1cmUgd29ya2luZyBhcml0aG1ldGljIGZvciAndHMnIG9iamVjdHMgOgo+IHogPC0gdHMobWF0cml4KDE6MzAwLCAxMDAsIDMpLCBzdGFydCA9IGMoMTk2MSwgMSksIGZyZXF1ZW5jeSA9IDEyKQo+IHN0b3BpZm5vdCh6ID09IHopCj4gc3RvcGlmbm90KHoteiA9PSAwKQo+IGlmKEZBTFNFKSAjIyA8PC0tIG5vdCBjdXJyZW50bHk6IF9SX0NIRUNLX01BVFJJWF9EQVRBXyBcXCByZWxhdGVkIHRvIGVhcmxpZXIgY29kZToKKyB0b29sczo6YXNzZXJ0V2FybmluZyhtYXRyaXgoMTo5MCwgMTAsIDMpLCB2ZXJib3NlPVRSVUUpCj4gCj4gdHMoMTo1LCBzdGFydD0yLCBlbmQ9NCkgIyB0cnVuY2F0ZQpUaW1lIFNlcmllczoKU3RhcnQgPSAyIApFbmQgPSA0IApGcmVxdWVuY3kgPSAxIApbMV0gMSAyIDMKPiB0cygxOjUsIHN0YXJ0PTMsIGVuZD0xNykjIHJlcGVhdApUaW1lIFNlcmllczoKU3RhcnQgPSAzIApFbmQgPSAxNyAKRnJlcXVlbmN5ID0gMSAKIFsxXSAxIDIgMyA0IDUgMSAyIDMgNCA1IDEgMiAzIDQgNQo+ICMjIGVuZCBvZiBtb3ZlZCBmcm9tIHRzLlJkCj4gCj4gIyMjIGVuZCBvZiBtb3ZlZAo+IAo+IAo+ICMjIFBSIDcxNSAoUHJpbnRpbmcgbGlzdCBlbGVtZW50cyB3L2F0dHJpYnV0ZXMpCj4gIyMKPiBsIDwtIGxpc3QoYT0xMCkKPiBhdHRyKGwkYSwgInh4IikgPC0gMjMKPiBsCiRhClsxXSAxMAphdHRyKCwieHgiKQpbMV0gMjMKCj4gIyMgQ29tbWVudHM6Cj4gIyMgc2hvdWxkIHByaW50IGFzCj4gIyAkYToKPiAjIFsxXSAxMAo+ICMgYXR0cigkYSwgInh4Iik6Cj4gIyBbMV0gMjMKPiAKPiAjIyBPbiB0aGUgb3RoZXIgaGFuZAo+IG0gPC0gbWF0cml4KGMoMSwgMiwgMywgMCwgMTAsIE5BKSwgMywgMikKPiBuYS5vbWl0KG0pCiAgICAgWywxXSBbLDJdClsxLF0gICAgMSAgICAwClsyLF0gICAgMiAgIDEwCmF0dHIoLCJuYS5hY3Rpb24iKQpbMV0gMwphdHRyKCwiY2xhc3MiKQpbMV0gIm9taXQiCj4gIyMgc2hvdWxkIHByaW50IGFzCj4gIyAgICAgIFssMV0gWywyXQo+ICMgWzEsXSAgICAxICAgIDAKPiAjIFsyLF0gICAgMiAgIDEwCj4gIyBhdHRyKCwibmEuYWN0aW9uIikKPiAjIFsxXSAzCj4gIyBhdHRyKCwibmEuYWN0aW9uIikKPiAjIFsxXSAib21pdCIKPiAKPiAjIyBhbmQKPiB4IDwtIDEKPiBhdHRyKHgsICJmb28iKSA8LSBsaXN0KGE9ImEiKQo+IHgKWzFdIDEKYXR0cigsImZvbyIpCmF0dHIoLCJmb28iKSRhClsxXSAiYSIKCj4gIyMgc2hvdWxkIHByaW50IGFzCj4gIyBbMV0gMQo+ICMgYXR0cigsImZvbyIpCj4gIyBhdHRyKCwiZm9vIikkYQo+ICMgWzFdICJhIgo+IAo+IAo+ICMjIFBSIDc0NiAocHJpbnRpbmcgb2YgbGlzdHMpCj4gIyMKPiB0ZXN0Lmxpc3QgPC0gbGlzdChBID0gbGlzdChmb3JtdWxhPVl+WCwgc3Vic2V0PVRSVUUpLAorICAgICAgICAgICAgICAgICAgIEIgPSBsaXN0KGZvcm11bGE9WX5YLCBzdWJzZXQ9VFJVRSkpCj4gCj4gdGVzdC5saXN0CiRBCiRBJGZvcm11bGEKWSB+IFgKCiRBJHN1YnNldApbMV0gVFJVRQoKCiRCCiRCJGZvcm11bGEKWSB+IFgKCiRCJHN1YnNldApbMV0gVFJVRQoKCj4gIyMgQ29tbWVudHM6Cj4gIyMgc2hvdWxkIHByaW50IGFzCj4gIyAkQQo+ICMgJEEkZm9ybXVsYQo+ICMgWSB+IFgKPiAjCj4gIyAkQSRzdWJzZXQKPiAjIFsxXSBUUlVFCj4gIwo+ICMKPiAjICRCCj4gIyAkQiRmb3JtdWxhCj4gIyBZIH4gWAo+ICMKPiAjICRCJHN1YnNldAo+ICMgWzFdIFRSVUUKPiAKPiAjIyBNYXJjIEZlbGRlc21hbiAyMDAxLUZlYi0wMS4gIFByZWNpc2lvbiBpbiBzdW1tYXJ5LmRhdGEuZnJhbWUgJiAqLm1hdHJpeAo+IHN1bW1hcnkoYXR0ZW51KQogICAgIGV2ZW50ICAgICAgICAgICAgbWFnICAgICAgICAgICBzdGF0aW9uICAgICAgICAgZGlzdCAgICAgICAKIE1pbi4gICA6IDEuMDAgICBNaW4uICAgOjUuMDAwICAgMTE3ICAgIDogIDUgICBNaW4uICAgOiAgMC41MCAgCiAxc3QgUXUuOiA5LjAwICAgMXN0IFF1Ljo1LjMwMCAgIDEwMjggICA6ICA0ICAgMXN0IFF1LjogMTEuMzIgIAogTWVkaWFuIDoxOC4wMCAgIE1lZGlhbiA6Ni4xMDAgICAxMTMgICAgOiAgNCAgIE1lZGlhbiA6IDIzLjQwICAKIE1lYW4gICA6MTQuNzQgICBNZWFuICAgOjYuMDg0ICAgMTEyICAgIDogIDMgICBNZWFuICAgOiA0NS42MCAgCiAzcmQgUXUuOjIwLjAwICAgM3JkIFF1Ljo2LjYwMCAgIDEzNSAgICA6ICAzICAgM3JkIFF1LjogNDcuNTUgIAogTWF4LiAgIDoyMy4wMCAgIE1heC4gICA6Ny43MDAgICAoT3RoZXIpOjE0NyAgIE1heC4gICA6MzcwLjAwICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkEncyAgIDogMTYgICAgICAgICAgICAgICAgICAgCiAgICAgYWNjZWwgICAgICAgIAogTWluLiAgIDowLjAwMzAwICAKIDFzdCBRdS46MC4wNDQyNSAgCiBNZWRpYW4gOjAuMTEzMDAgIAogTWVhbiAgIDowLjE1NDIyICAKIDNyZCBRdS46MC4yMTkyNSAgCiBNYXguICAgOjAuODEwMDAgIAogICAgICAgICAgICAgICAgICAKPiBzdW1tYXJ5KGF0dGVudSwgZGlnaXRzID0gNSkKICAgICBldmVudCAgICAgICAgICAgICBtYWcgICAgICAgICAgICBzdGF0aW9uICAgICAgICAgZGlzdCAgICAgICAgCiBNaW4uICAgOiAxLjAwMCAgIE1pbi4gICA6NS4wMDAwICAgMTE3ICAgIDogIDUgICBNaW4uICAgOiAgMC41MDAgIAogMXN0IFF1LjogOS4wMDAgICAxc3QgUXUuOjUuMzAwMCAgIDEwMjggICA6ICA0ICAgMXN0IFF1LjogMTEuMzI1ICAKIE1lZGlhbiA6MTguMDAwICAgTWVkaWFuIDo2LjEwMDAgICAxMTMgICAgOiAgNCAgIE1lZGlhbiA6IDIzLjQwMCAgCiBNZWFuICAgOjE0Ljc0MiAgIE1lYW4gICA6Ni4wODQxICAgMTEyICAgIDogIDMgICBNZWFuICAgOiA0NS42MDMgIAogM3JkIFF1LjoyMC4wMDAgICAzcmQgUXUuOjYuNjAwMCAgIDEzNSAgICA6ICAzICAgM3JkIFF1LjogNDcuNTUwICAKIE1heC4gICA6MjMuMDAwICAgTWF4LiAgIDo3LjcwMDAgICAoT3RoZXIpOjE0NyAgIE1heC4gICA6MzcwLjAwMCAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkEncyAgIDogMTYgICAgICAgICAgICAgICAgICAgIAogICAgIGFjY2VsICAgICAgICAKIE1pbi4gICA6MC4wMDMwMCAgCiAxc3QgUXUuOjAuMDQ0MjUgIAogTWVkaWFuIDowLjExMzAwICAKIE1lYW4gICA6MC4xNTQyMiAgCiAzcmQgUXUuOjAuMjE5MjUgIAogTWF4LiAgIDowLjgxMDAwICAKICAgICAgICAgICAgICAgICAgCj4gc3VtbWFyeShkYXRhLm1hdHJpeChhdHRlbnUpLCBkaWdpdHMgPSA1KSMgdGhlIHNhbWUgZm9yIG1hdHJpeAogICAgIGV2ZW50ICAgICAgICAgICAgIG1hZyAgICAgICAgICAgIHN0YXRpb24gICAgICAgICAgICAgZGlzdCAgICAgICAgCiBNaW4uICAgOiAxLjAwMCAgIE1pbi4gICA6NS4wMDAwICAgTWluLiAgIDogIDEuMDAwICAgTWluLiAgIDogIDAuNTAwICAKIDFzdCBRdS46IDkuMDAwICAgMXN0IFF1Ljo1LjMwMDAgICAxc3QgUXUuOiAyNC4yNTAgICAxc3QgUXUuOiAxMS4zMjUgIAogTWVkaWFuIDoxOC4wMDAgICBNZWRpYW4gOjYuMTAwMCAgIE1lZGlhbiA6IDU2LjUwMCAgIE1lZGlhbiA6IDIzLjQwMCAgCiBNZWFuICAgOjE0Ljc0MiAgIE1lYW4gICA6Ni4wODQxICAgTWVhbiAgIDogNTYuOTI4ICAgTWVhbiAgIDogNDUuNjAzICAKIDNyZCBRdS46MjAuMDAwICAgM3JkIFF1Ljo2LjYwMDAgICAzcmQgUXUuOiA4Ni43NTAgICAzcmQgUXUuOiA0Ny41NTAgIAogTWF4LiAgIDoyMy4wMDAgICBNYXguICAgOjcuNzAwMCAgIE1heC4gICA6MTE3LjAwMCAgIE1heC4gICA6MzcwLjAwMCAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkEncyAgIDoxNiAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICBhY2NlbCAgICAgICAgCiBNaW4uICAgOjAuMDAzMDAgIAogMXN0IFF1LjowLjA0NDI1ICAKIE1lZGlhbiA6MC4xMTMwMCAgCiBNZWFuICAgOjAuMTU0MjIgIAogM3JkIFF1LjowLjIxOTI1ICAKIE1heC4gICA6MC44MTAwMCAgCiAgICAgICAgICAgICAgICAgIAo+ICMjIENvbW1lbnRzOgo+ICMjIE5vIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGVzZSBpbiAxLjIuMSBhbmQgZWFybGllcgo+IHNldC5zZWVkKDEpCj4geCA8LSBjKHJvdW5kKHJ1bmlmKDEwKSwgMiksIDEwMDAwKQo+IHN1bW1hcnkoeCkKICAgICBNaW4uICAgMXN0IFF1LiAgICBNZWRpYW4gICAgICBNZWFuICAgM3JkIFF1LiAgICAgIE1heC4gCiAgICAwLjA2MCAgICAgMC4zMjAgICAgIDAuNjMwICAgOTA5LjU5MiAgICAgMC45MDUgMTAwMDAuMDAwIAo+IHN1bW1hcnkoZGF0YS5mcmFtZSh4KSkKICAgICAgIHggICAgICAgICAgICAKIE1pbi4gICA6ICAgIDAuMDYwICAKIDFzdCBRdS46ICAgIDAuMzIwICAKIE1lZGlhbiA6ICAgIDAuNjMwICAKIE1lYW4gICA6ICA5MDkuNTkyICAKIDNyZCBRdS46ICAgIDAuOTA1ICAKIE1heC4gICA6MTAwMDAuMDAwICAKPiAjIyBDb21tZW50czoKPiAjIyBBbGwgZW50cmllcyBzaG93IGFsbCAzIGRpZ2l0cyBhZnRlciB0aGUgZGVjaW1hbCBwb2ludCBub3cuCj4gCj4gIyMgQ2hvbmcgR3UgMjAwMS1GZWItMTYuICBzdGVwIG9uIGJpbm9taWFscwo+IGRldGcxIDwtCisgc3RydWN0dXJlKGxpc3QoVGVtcCA9IGZhY3RvcihjKDJMLCAxTCwgMkwsIDFMLCAyTCwgMUwsIDJMLAorICAgICAxTCwgMkwsIDFMLCAyTCwgMUwpLCBsYWJlbHMgPSBjKCJIaWdoIiwgIkxvdyIpKSwKKyAgICAgTS51c2VyID0gZmFjdG9yKGMoMUwsIDFMLCAyTCwgMkwsIDFMLCAxTCwgMkwsIDJMLCAxTCwKKyAgICAgMUwsIDJMLCAyTCksIGxhYmVscyA9IGMoIk4iLCAiWSIpKSwKKyAgICAgU29mdCA9IGZhY3RvcihjKDFMLCAxTCwgMUwsIDFMLCAyTCwgMkwsIDJMLCAyTCwgM0wsIDNMLCAzTCwgM0wpLAorICAgICBsYWJlbHMgPSBjKCJIYXJkIiwgIk1lZGl1bSIsICJTb2Z0IikpLAorICAgICBNID0gYyg0MiwgMzAsIDUyLCA0MywKKyAgICAgNTAsIDIzLCA1NSwgNDcsIDUzLCAyNywgNDksIDI5KSwgWCA9IGMoNjgsIDQyLCAzNywgMjQsIDY2LAorICAgICAzMywgNDcsIDIzLCA2MywgMjksIDU3LCAxOSkpLCBuYW1lcyA9IGMoIlRlbXAiLCAiTS51c2VyIiwKKyAiU29mdCIsICJNIiwgIlgiKSwgY2xhc3MgPSAiZGF0YS5mcmFtZSIsIHJvdy5uYW1lcyA9IGMoIjEiLCAiMyIsCisgIjUiLCAiNyIsICI5IiwgIjExIiwgIjEzIiwgIjE1IiwgIjE3IiwgIjE5IiwgIjIxIiwgIjIzIikpCj4gZGV0ZzEubTAgPC0gZ2xtKGNiaW5kKFgsTSl+MSxiaW5vbWlhbCxkZXRnMSkKPiBkZXRnMS5tMAoKQ2FsbDogIGdsbShmb3JtdWxhID0gY2JpbmQoWCwgTSkgfiAxLCBmYW1pbHkgPSBiaW5vbWlhbCwgZGF0YSA9IGRldGcxKQoKQ29lZmZpY2llbnRzOgooSW50ZXJjZXB0KSAgCiAgICAwLjAxNTg3ICAKCkRlZ3JlZXMgb2YgRnJlZWRvbTogMTEgVG90YWwgKGkuZS4gTnVsbCk7ICAxMSBSZXNpZHVhbApOdWxsIERldmlhbmNlOgkgICAgMzIuODMgClJlc2lkdWFsIERldmlhbmNlOiAzMi44MyAJQUlDOiA5Mi41Mgo+IHN0ZXAoZGV0ZzEubTAsc2NvcGU9bGlzdCh1cHBlcj1+TS51c2VyKlRlbXAqU29mdCkpClN0YXJ0OiAgQUlDPTkyLjUyCmNiaW5kKFgsIE0pIH4gMQoKICAgICAgICAgRGYgRGV2aWFuY2UgICAgQUlDCisgTS51c2VyICAxICAgMTIuMjQ0IDczLjk0MgorIFRlbXAgICAgMSAgIDI4LjQ2NCA5MC4xNjIKPG5vbmU+ICAgICAgICAzMi44MjYgOTIuNTI0CisgU29mdCAgICAyICAgMzIuNDMwIDk2LjEyOAoKU3RlcDogIEFJQz03My45NApjYmluZChYLCBNKSB+IE0udXNlcgoKICAgICAgICAgRGYgRGV2aWFuY2UgICAgQUlDCisgVGVtcCAgICAxICAgIDguNDQ0IDcyLjE0Mgo8bm9uZT4gICAgICAgIDEyLjI0NCA3My45NDIKKyBTb2Z0ICAgIDIgICAxMS45NjcgNzcuNjY1Ci0gTS51c2VyICAxICAgMzIuODI2IDkyLjUyNAoKU3RlcDogIEFJQz03Mi4xNApjYmluZChYLCBNKSB+IE0udXNlciArIFRlbXAKCiAgICAgICAgICAgICAgRGYgRGV2aWFuY2UgICAgQUlDCisgTS51c2VyOlRlbXAgIDEgICAgNS42NTYgNzEuMzU0Cjxub25lPiAgICAgICAgICAgICAgOC40NDQgNzIuMTQyCi0gVGVtcCAgICAgICAgIDEgICAxMi4yNDQgNzMuOTQyCisgU29mdCAgICAgICAgIDIgICAgOC4yMjggNzUuOTI2Ci0gTS51c2VyICAgICAgIDEgICAyOC40NjQgOTAuMTYyCgpTdGVwOiAgQUlDPTcxLjM1CmNiaW5kKFgsIE0pIH4gTS51c2VyICsgVGVtcCArIE0udXNlcjpUZW1wCgogICAgICAgICAgICAgIERmIERldmlhbmNlICAgIEFJQwo8bm9uZT4gICAgICAgICAgICAgNS42NTYwIDcxLjM1NAotIE0udXNlcjpUZW1wICAxICAgOC40NDQwIDcyLjE0MgorIFNvZnQgICAgICAgICAyICAgNS40OTUyIDc1LjE5MwoKQ2FsbDogIGdsbShmb3JtdWxhID0gY2JpbmQoWCwgTSkgfiBNLnVzZXIgKyBUZW1wICsgTS51c2VyOlRlbXAsIGZhbWlseSA9IGJpbm9taWFsLCAKICAgIGRhdGEgPSBkZXRnMSkKCkNvZWZmaWNpZW50czoKICAgIChJbnRlcmNlcHQpICAgICAgICAgIE0udXNlclkgICAgICAgICAgVGVtcExvdyAgTS51c2VyWTpUZW1wTG93ICAKICAgICAgICAwLjI2MjM2ICAgICAgICAgLTAuODUxODMgICAgICAgICAgMC4wNDQxMSAgICAgICAgICAwLjQ0NDI3ICAKCkRlZ3JlZXMgb2YgRnJlZWRvbTogMTEgVG90YWwgKGkuZS4gTnVsbCk7ICA4IFJlc2lkdWFsCk51bGwgRGV2aWFuY2U6CSAgICAzMi44MyAKUmVzaWR1YWwgRGV2aWFuY2U6IDUuNjU2IAlBSUM6IDcxLjM1Cj4gCj4gIyMgUFIgODI5IChlbXB0eSB2YWx1ZXMgaW4gYWxsLnZhcnMpCj4gIyMgVGhpcyBleGFtcGxlIGJ5IFV3ZSBMaWdnZXMgPGxpZ2dlc0BzdGF0aXN0aWsudW5pLWRvcnRtdW5kLmRlPgo+IAo+IHRlbXAgPC0gbWF0cml4KDE6NCwgMikKPiBhbGwudmFycyh0ZW1wIH4gMykgIyBPSwpbMV0gInRlbXAiCj4gYWxsLnZhcnModGVtcFsxLCBdIH4gMykgIyB3cm9uZyBpbiAxLjIuMQpbMV0gInRlbXAiCj4gCj4gIyMgMjAwMS1GZWItMjIgZnJvbSBEYXZpZCBTY290dC4KPiAjIyByYW5rLWRlZmljaWVudCByZXNpZHVhbHMgaW4gYSBtYW5vdmEgbW9kZWwuCj4gZ29mWC5kZjwtCisgICBzdHJ1Y3R1cmUobGlzdChBID0gYygwLjY5NjcwNjcwOTM0NzE2NSwgMC4zNjIzNTc3NTQ0NzY2NzMsCisgLTAuMDI5MTk5NTIyMzAxMjg4OCwKKyAwLjY5NjcwNjcwOTM0NzE2NSwgMC42OTY3MDY3MDkzNDcxNjUsIC0wLjAyOTE5OTUyMjMwMTI4ODgsIDAuNjk2NzA2NzA5MzQ3MTY1LAorIC0wLjAyOTE5OTUyMjMwMTI4ODgsIDAuMzYyMzU3NzU0NDc2NjczLCAwLjY5NjcwNjcwOTM0NzE2NSwgLTAuMDI5MTk5NTIyMzAxMjg4OCwKKyAwLjM2MjM1Nzc1NDQ3NjY3MywgLTAuNDE2MTQ2ODM2NTQ3MTQyLCAwLjM2MjM1Nzc1NDQ3NjY3MywgMC42OTY3MDY3MDkzNDcxNjUsCisgMC42OTY3MDY3MDkzNDcxNjUsIDAuMzYyMzU3NzU0NDc2NjczLCAtMC40MTYxNDY4MzY1NDcxNDIsIC0wLjAyOTE5OTUyMjMwMTI4ODgsCisgLTAuNDE2MTQ2ODM2NTQ3MTQyLCAwLjY5NjcwNjcwOTM0NzE2NSwgLTAuNDE2MTQ2ODM2NTQ3MTQyLCAwLjM2MjM1Nzc1NDQ3NjY3MywKKyAtMC4wMjkxOTk1MjIzMDEyODg4KSwgQiA9IGMoMC43MTczNTYwOTA4OTk1MjMsIDAuOTMyMDM5MDg1OTY3MjI2LAorIDAuOTk5NTczNjAzMDQxNTA1LCAwLjcxNzM1NjA5MDg5OTUyMywgMC43MTczNTYwOTA4OTk1MjMsIDAuOTk5NTczNjAzMDQxNTA1LAorIDAuNzE3MzU2MDkwODk5NTIzLCAwLjk5OTU3MzYwMzA0MTUwNSwgMC45MzIwMzkwODU5NjcyMjYsIDAuNzE3MzU2MDkwODk5NTIzLAorIDAuOTk5NTczNjAzMDQxNTA1LCAwLjkzMjAzOTA4NTk2NzIyNiwgMC45MDkyOTc0MjY4MjU2ODIsIDAuOTMyMDM5MDg1OTY3MjI2LAorIDAuNzE3MzU2MDkwODk5NTIzLCAwLjcxNzM1NjA5MDg5OTUyMywgMC45MzIwMzkwODU5NjcyMjYsIDAuOTA5Mjk3NDI2ODI1NjgyLAorIDAuOTk5NTczNjAzMDQxNTA1LCAwLjkwOTI5NzQyNjgyNTY4MiwgMC43MTczNTYwOTA4OTk1MjMsIDAuOTA5Mjk3NDI2ODI1NjgyLAorIDAuOTMyMDM5MDg1OTY3MjI2LCAwLjk5OTU3MzYwMzA0MTUwNSksIEMgPSBjKC0wLjAyOTE5OTUyMjMwMTI4ODgsCisgLTAuNzM3MzkzNzE1NTQxMjQ2LCAtMC45OTgyOTQ3NzU3OTQ3NTMsIC0wLjAyOTE5OTUyMjMwMTI4ODgsCisgLTAuMDI5MTk5NTIyMzAxMjg4OCwgLTAuOTk4Mjk0Nzc1Nzk0NzUzLCAtMC4wMjkxOTk1MjIzMDEyODg4LAorIC0wLjk5ODI5NDc3NTc5NDc1MywgLTAuNzM3MzkzNzE1NTQxMjQ2LCAtMC4wMjkxOTk1MjIzMDEyODg4LAorIC0wLjk5ODI5NDc3NTc5NDc1MywgLTAuNzM3MzkzNzE1NTQxMjQ2LCAtMC42NTM2NDM2MjA4NjM2MTIsIC0wLjczNzM5MzcxNTU0MTI0NiwKKyAtMC4wMjkxOTk1MjIzMDEyODg4LCAtMC4wMjkxOTk1MjIzMDEyODg4LCAtMC43MzczOTM3MTU1NDEyNDYsCisgLTAuNjUzNjQzNjIwODYzNjEyLCAtMC45OTgyOTQ3NzU3OTQ3NTMsIC0wLjY1MzY0MzYyMDg2MzYxMiwKKyAtMC4wMjkxOTk1MjIzMDEyODg4LAorIC0wLjY1MzY0MzYyMDg2MzYxMiwgLTAuNzM3MzkzNzE1NTQxMjQ2LCAtMC45OTgyOTQ3NzU3OTQ3NTMpLAorICAgICBEID0gYygwLjk5OTU3MzYwMzA0MTUwNSwgMC42NzU0NjMxODA1NTExNSwgLTAuMDU4Mzc0MTQzNDI3NTgwMSwKKyAgICAgMC45OTk1NzM2MDMwNDE1MDUsIDAuOTk5NTczNjAzMDQxNTA1LCAtMC4wNTgzNzQxNDM0Mjc1ODAxLAorICAgICAwLjk5OTU3MzYwMzA0MTUwNSwgLTAuMDU4Mzc0MTQzNDI3NTgwMSwgMC42NzU0NjMxODA1NTExNSwKKyAgICAgMC45OTk1NzM2MDMwNDE1MDUsIC0wLjA1ODM3NDE0MzQyNzU4MDEsIDAuNjc1NDYzMTgwNTUxMTUsCisgICAgIC0wLjc1NjgwMjQ5NTMwNzkyOCwgMC42NzU0NjMxODA1NTExNSwgMC45OTk1NzM2MDMwNDE1MDUsCisgICAgIDAuOTk5NTczNjAzMDQxNTA1LCAwLjY3NTQ2MzE4MDU1MTE1LCAtMC43NTY4MDI0OTUzMDc5MjgsCisgICAgIC0wLjA1ODM3NDE0MzQyNzU4MDEsIC0wLjc1NjgwMjQ5NTMwNzkyOCwgMC45OTk1NzM2MDMwNDE1MDUsCisgICAgIC0wLjc1NjgwMjQ5NTMwNzkyOCwgMC42NzU0NjMxODA1NTExNSwgLTAuMDU4Mzc0MTQzNDI3NTgwMQorICAgICApLCBncm91cHMgPSBmYWN0b3IoYygxTCwgMUwsIDFMLCAxTCwgMUwsIDFMLCAxTCwgMUwsIDJMLCAyTCwgMkwsIDJMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAyTCwgMkwsIDJMLCAyTCwgM0wsIDNMLCAzTCwgM0wsIDNMLCAzTCwgM0wsIDNMKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGMoIjEiLCAiMiIsICIzIikpKSwKKyBuYW1lcyA9IGMoIkEiLCAiQiIsICJDIiwgIkQiLCAiZ3JvdXBzIiksIHJvdy5uYW1lcyA9IDE6MjQsCisgY2xhc3MgPSAiZGF0YS5mcmFtZSIpCj4gCj4gZ29mWC5tYW5vdmEgPC0gbWFub3ZhKGZvcm11bGEgPSBjYmluZChBLCBCLCBDLCBEKSB+IGdyb3VwcywgZGF0YSA9IGdvZlguZGYpCj4gdHJ5KHN1bW1hcnkoZ29mWC5tYW5vdmEpKQpFcnJvciBpbiBzdW1tYXJ5Lm1hbm92YShnb2ZYLm1hbm92YSkgOiByZXNpZHVhbHMgaGF2ZSByYW5rIDMgPCA0Cj4gIyMgc2hvdWxkIGZhaWwgd2l0aCBhbiBlcnJvciBtZXNzYWdlIGByZXNpZHVhbHMgaGF2ZSByYW5rIDMgPCA0Jwo+IAo+ICMjIFByaW9yIHRvIDEuMy4wIGRpc3QgZGlkIG5vdCBoYW5kbGUgbWlzc2luZyB2YWx1ZXMsIGFuZCB0aGUKPiAjIyBpbnRlcm5hbCBDIGNvZGUgd2FzIGluY29ycmVjdGx5IHNjYWxpbmcgZm9yIG1pc3NpbmcgdmFsdWVzLgo+IHogPC0gYXMubWF0cml4KHQodHJlZXMpKQo+IHpbMSwxXSA8LSB6WzIsMl0gPC0gelszLDNdIDwtIHpbMiw0XSA8LSBOQQo+IGRpc3QoeiwgbWV0aG9kPSJldWNsaWRlYW4iKQogICAgICAgICAgR2lydGggICBIZWlnaHQKSGVpZ2h0IDM1Mi40MzY1ICAgICAgICAgClZvbHVtZSAxMjMuNTUwMyAyNjEuNTgwMgo+IGRpc3QoeiwgbWV0aG9kPSJtYXhpbXVtIikKICAgICAgIEdpcnRoIEhlaWdodApIZWlnaHQgIDcyLjcgICAgICAgClZvbHVtZSAgNTYuNCAgIDYzLjMKPiBkaXN0KHosIG1ldGhvZD0ibWFuaGF0dGFuIikKICAgICAgICAgICBHaXJ0aCAgICBIZWlnaHQKSGVpZ2h0IDE5NTQuODgyMSAgICAgICAgICAKVm9sdW1lICA1NTcuMTQ0OCAxMzkyLjM0MjkKPiBkaXN0KHosIG1ldGhvZD0iY2FuYmVycmEiKQogICAgICAgICAgR2lydGggICBIZWlnaHQKSGVpZ2h0IDIxLjY2NDc3ICAgICAgICAgClZvbHVtZSAxMC45NjIwMCAxMy42MzM2NQo+IAo+ICMjIEYuIFR1c2VsbCAyMDAxLTAzLTA3LiAgcHJpbnRpbmcga2VybmVscy4KPiBrZXJuZWwoImRhbmllbGwiLCBtPTUpCkRhbmllbGwoNSkgCmNvZWZbLTVdID0gMC4wOTA5MQpjb2VmWy00XSA9IDAuMDkwOTEKY29lZlstM10gPSAwLjA5MDkxCmNvZWZbLTJdID0gMC4wOTA5MQpjb2VmWy0xXSA9IDAuMDkwOTEKY29lZlsgMF0gPSAwLjA5MDkxCmNvZWZbIDFdID0gMC4wOTA5MQpjb2VmWyAyXSA9IDAuMDkwOTEKY29lZlsgM10gPSAwLjA5MDkxCmNvZWZbIDRdID0gMC4wOTA5MQpjb2VmWyA1XSA9IDAuMDkwOTEKPiBrZXJuZWwoIm1vZGlmaWVkLmRhbmllbGwiLCBtPTUpCm1EYW5pZWxsKDUpIApjb2VmWy01XSA9IDAuMDUKY29lZlstNF0gPSAwLjEwCmNvZWZbLTNdID0gMC4xMApjb2VmWy0yXSA9IDAuMTAKY29lZlstMV0gPSAwLjEwCmNvZWZbIDBdID0gMC4xMApjb2VmWyAxXSA9IDAuMTAKY29lZlsgMl0gPSAwLjEwCmNvZWZbIDNdID0gMC4xMApjb2VmWyA0XSA9IDAuMTAKY29lZlsgNV0gPSAwLjA1Cj4ga2VybmVsKCJkYW5pZWxsIiwgbT1jKDMsNSw3KSkKRGFuaWVsbCgzLDUsNykgCmNvZWZbLTE1XSA9IDAuMDAwODY1OApjb2VmWy0xNF0gPSAwLjAwMjU5NzQKY29lZlstMTNdID0gMC4wMDUxOTQ4CmNvZWZbLTEyXSA9IDAuMDA4NjU4MApjb2VmWy0xMV0gPSAwLjAxMjk4NzAKY29lZlstMTBdID0gMC4wMTgxODE4CmNvZWZbIC05XSA9IDAuMDI0MjQyNApjb2VmWyAtOF0gPSAwLjAzMDMwMzAKY29lZlsgLTddID0gMC4wMzYzNjM2CmNvZWZbIC02XSA9IDAuMDQyNDI0Mgpjb2VmWyAtNV0gPSAwLjA0ODQ4NDgKY29lZlsgLTRdID0gMC4wNTM2Nzk3CmNvZWZbIC0zXSA9IDAuMDU4MDA4Nwpjb2VmWyAtMl0gPSAwLjA2MTQ3MTkKY29lZlsgLTFdID0gMC4wNjQwNjkzCmNvZWZbICAwXSA9IDAuMDY0OTM1MQpjb2VmWyAgMV0gPSAwLjA2NDA2OTMKY29lZlsgIDJdID0gMC4wNjE0NzE5CmNvZWZbICAzXSA9IDAuMDU4MDA4Nwpjb2VmWyAgNF0gPSAwLjA1MzY3OTcKY29lZlsgIDVdID0gMC4wNDg0ODQ4CmNvZWZbICA2XSA9IDAuMDQyNDI0Mgpjb2VmWyAgN10gPSAwLjAzNjM2MzYKY29lZlsgIDhdID0gMC4wMzAzMDMwCmNvZWZbICA5XSA9IDAuMDI0MjQyNApjb2VmWyAxMF0gPSAwLjAxODE4MTgKY29lZlsgMTFdID0gMC4wMTI5ODcwCmNvZWZbIDEyXSA9IDAuMDA4NjU4MApjb2VmWyAxM10gPSAwLjAwNTE5NDgKY29lZlsgMTRdID0gMC4wMDI1OTc0CmNvZWZbIDE1XSA9IDAuMDAwODY1OAo+ICMjIGZpeGVkIGJ5IHBhdGNoIGZyb20gQWRyaWFuIFRyYXBsZXR0aSAyMDAxLTAzLTA4Cj4gCj4gIyMgU3RhcnQgbmV3IHllYXIgKGkuZS4gbGluZSkgYXQgSmFuOgo+ICh0dCA8LSB0cygxOjEwLCBzdGFydCA9IGMoMTkyMCw3KSwgZW5kID0gYygxOTIxLDQpLCBmcmVxID0gMTIpKQogICAgIEphbiBGZWIgTWFyIEFwciBNYXkgSnVuIEp1bCBBdWcgU2VwIE9jdCBOb3YgRGVjCjE5MjAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICAgMiAgIDMgICA0ICAgNSAgIDYKMTkyMSAgIDcgICA4ICAgOSAgMTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAo+IGNiaW5kKHR0LCB0dCArIDEpCiAgICAgICAgIHR0IHR0ICsgMQpKdWwgMTkyMCAgMSAgICAgIDIKQXVnIDE5MjAgIDIgICAgICAzClNlcCAxOTIwICAzICAgICAgNApPY3QgMTkyMCAgNCAgICAgIDUKTm92IDE5MjAgIDUgICAgICA2CkRlYyAxOTIwICA2ICAgICAgNwpKYW4gMTkyMSAgNyAgICAgIDgKRmViIDE5MjEgIDggICAgICA5Ck1hciAxOTIxICA5ICAgICAxMApBcHIgMTkyMSAxMCAgICAgMTEKPiAKPiAKPiAjIyBQUiA4ODMgKGNvcih4LHkpIHdoZW4gaXMubnVsbCh5KSkKPiB0cnkoY292KHJub3JtKDEwKSwgTlVMTCkpCkVycm9yIGluIGNvdihybm9ybSgxMCksIE5VTEwpIDogCiAgc3VwcGx5IGJvdGggJ3gnIGFuZCAneScgb3IgYSBtYXRyaXgtbGlrZSAneCcKPiB0cnkoY29yKHJub3JtKDEwKSwgTlVMTCkpCkVycm9yIGluIGNvcihybm9ybSgxMCksIE5VTEwpIDogCiAgc3VwcGx5IGJvdGggJ3gnIGFuZCAneScgb3IgYSBtYXRyaXgtbGlrZSAneCcKPiAjIyBnYXZlIHRoZSB2YXJpYW5jZSBhbmQgMSByZXNwZWN0aXZlbHkgaW4gMS4yLjIuCj4gCj4gCj4gIyMgUFIgOTYwIChmb3JtYXQoKSBvZiBhIGNoYXJhY3RlciBtYXRyaXggY29udmVydHMgdG8gdmVjdG9yKQo+ICMjIGV4YW1wbGUgZnJvbSA8Sm9obi5QZXRlcnNAdGlwLmNzaXJvLmF1Pgo+IGEgPC0gbWF0cml4KGMoImF4eCIsImIiLCJjIiwiZCIsImUiLCJmIiwiZyIsImgiKSwgbnJvdz0yKQo+IGZvcm1hdChhKQogICAgIFssMV0gIFssMl0gIFssM10gIFssNF0gClsxLF0gImF4eCIgImMgICIgImUgICIgImcgICIKWzIsXSAiYiAgIiAiZCAgIiAiZiAgIiAiaCAgIgo+IGZvcm1hdChhLCBqdXN0aWZ5PSJyaWdodCIpCiAgICAgWywxXSAgWywyXSAgWywzXSAgWyw0XSAKWzEsXSAiYXh4IiAiICBjIiAiICBlIiAiICBnIgpbMixdICIgIGIiICIgIGQiICIgIGYiICIgIGgiCj4gIyMgbG9zdCBkaW1lbnNpb25zIGluIDEuMi4zCj4gCj4gCj4gIyMgUFIgOTYzCj4gcmVzIDwtIHN2ZChyYmluZCgxOjcpKSMjICR2IGxvc3QgZGltZW5zaW9ucyBpbiAxLjIuMwo+IGlmKHJlcyR1WzEsMV0gPCAwKSB7cmVzJHUgPC0gLXJlcyR1OyByZXMkdiA8LSAtcmVzJHZ9Cj4gcmVzCiRkClsxXSAxMS44MzIxNgoKJHUKICAgICBbLDFdClsxLF0gICAgMQoKJHYKICAgICAgICAgICBbLDFdClsxLF0gMC4wODQ1MTU0MwpbMixdIDAuMTY5MDMwODUKWzMsXSAwLjI1MzU0NjI4Cls0LF0gMC4zMzgwNjE3MApbNSxdIDAuNDIyNTc3MTMKWzYsXSAwLjUwNzA5MjU1Cls3LF0gMC41OTE2MDc5OAoKPiAKPiAKPiAjIyBNYWtlIHN1cmUgIG9uLmV4aXQoKSBrZWVwcyBiZWluZyBldmFsdWF0ZWQgaW4gdGhlIHByb3BlciBlbnYgW2Zyb20gUERdOgo+ICMjIEEgbW9yZSBjb21wbGV0ZSBleGFtcGxlOgo+IGcxIDwtIGZ1bmN0aW9uKGZpdHRlZCkgeyBvbi5leGl0KHJlbW92ZShmaXR0ZWQpKTsgcmV0dXJuKGZ1bmN0aW9uKGZvbykgZm9vKSB9Cj4gZzIgPC0gZnVuY3Rpb24oZml0dGVkKSB7IG9uLmV4aXQocmVtb3ZlKGZpdHRlZCkpOyAgICAgICAgZnVuY3Rpb24oZm9vKSBmb28gfQo+IGYgPC0gZnVuY3Rpb24oZykgeyBmaXR0ZWQgPC0gMTsgaCA8LSBnKGZpdHRlZCk7IHByaW50KGZpdHRlZCkKKyAgICAgICAgICAgICAgICAgICAgbHMoZW52aXI9ZW52aXJvbm1lbnQoaCkpIH0KPiBmKGcxKQpbMV0gMQpjaGFyYWN0ZXIoMCkKPiBmKGcyKQpbMV0gMQpjaGFyYWN0ZXIoMCkKPiAKPiBmMiA8LSBmdW5jdGlvbigpCisgeworICAgZy5mb28gPC0gZzEKKyAgIGcuYmFyIDwtIGcyCisgICBnIDwtIGZ1bmN0aW9uKHgsLi4uKSBVc2VNZXRob2QoImciKQorICAgZml0dGVkIDwtIDE7IGNsYXNzKGZpdHRlZCkgPC0gImZvbyIKKyAgIGggPC0gZyhmaXR0ZWQpOyBwcmludChmaXR0ZWQpOyBwcmludChscyhlbnZpcj1lbnZpcm9ubWVudChoKSkpCisgICBmaXR0ZWQgPC0gMTsgY2xhc3MoZml0dGVkKSA8LSAiYmFyIgorICAgaCA8LSBnKGZpdHRlZCk7IHByaW50KGZpdHRlZCk7IHByaW50KGxzKGVudmlyPWVudmlyb25tZW50KGgpKSkKKyAgIGludmlzaWJsZShOVUxMKQorIH0KPiBmMigpClsxXSAxCmF0dHIoLCJjbGFzcyIpClsxXSAiZm9vIgpjaGFyYWN0ZXIoMCkKWzFdIDEKYXR0cigsImNsYXNzIikKWzFdICJiYXIiCmNoYXJhY3RlcigwKQo+ICMjIFRoZSBmaXJzdCBjYXNlIGluIGYyKCkgaXMgYnJva2VuIGluIDEuMy4wKC1wYXRjaGVkKS4KPiAKPiAjIyBvbi5leGl0KCkgY29uc2lzdGVuY3kgY2hlY2sgZnJvbSBMdWtlOgo+IGcgPC0gZnVuY3Rpb24oKSBhcy5lbnZpcm9ubWVudCgtMSkKPiBmIDwtIGZ1bmN0aW9uKHgpIFVzZU1ldGhvZCgiZiIpCj4gZi5mb28gPC0gZnVuY3Rpb24oeCkgeyBvbi5leGl0KGUgPDwtIGcoKSk7IE5VTEwgfQo+IGYuYmFyIDwtIGZ1bmN0aW9uKHgpIHsgb24uZXhpdChlIDw8LSBnKCkpOyByZXR1cm4oTlVMTCkgfQo+IGYoc3RydWN0dXJlKDEsY2xhc3MgPSAiZm9vIikpCk5VTEwKPiBscyhlbnYgPSBlKSMgb25seSAieCIsIGkuZS4gKm5vdCogdGhlIEdsb2JhbEVudgpbMV0gIngiCj4gZihzdHJ1Y3R1cmUoMSxjbGFzcyA9ICJiYXIiKSkKTlVMTAo+IHN0b3BpZm5vdCgieCIgPT0gbHMoZW52ID0gZSkpIyBhcyBhYm92ZTsgd3JvbmdseSB3YXMgLkdsb2JhbEVudiBpbiBSIDEuMy54Cj4gCj4gCj4gIyMgc29tZSB0ZXN0cyB0aGF0IFIgc3VwcG9ydHMgbG9naWNhbCB2YXJpYWJsZXMgaW4gZm9ybXVsYWUKPiAjIyBpdCBjb2VyY2VkIHRoZW0gdG8gbnVtZXJpYyBwcmlvciB0byAxLjQuMAo+ICMjIHRoZXkgc2hvdWxkIGFwcGVhciBsaWtlIDItbGV2ZWwgZmFjdG9ycywgZm9sbG93aW5nIFMKPiAKPiBvbGRDb24gPC0gb3B0aW9ucygiY29udHJhc3RzIikKPiB5IDwtIHJub3JtKDEwKQo+IHggPC0gcmVwKGMoVFJVRSwgRkFMU0UpLCA1KQo+IG1vZGVsLm1hdHJpeCh5IH4geCkKICAgKEludGVyY2VwdCkgeFRSVUUKMSAgICAgICAgICAgIDEgICAgIDEKMiAgICAgICAgICAgIDEgICAgIDAKMyAgICAgICAgICAgIDEgICAgIDEKNCAgICAgICAgICAgIDEgICAgIDAKNSAgICAgICAgICAgIDEgICAgIDEKNiAgICAgICAgICAgIDEgICAgIDAKNyAgICAgICAgICAgIDEgICAgIDEKOCAgICAgICAgICAgIDEgICAgIDAKOSAgICAgICAgICAgIDEgICAgIDEKMTAgICAgICAgICAgIDEgICAgIDAKYXR0cigsImFzc2lnbiIpClsxXSAwIDEKYXR0cigsImNvbnRyYXN0cyIpCmF0dHIoLCJjb250cmFzdHMiKSR4ClsxXSAiY29udHIudHJlYXRtZW50IgoKPiBsbSh5IH4geCkKCkNhbGw6CmxtKGZvcm11bGEgPSB5IH4geCkKCkNvZWZmaWNpZW50czoKKEludGVyY2VwdCkgICAgICAgIHhUUlVFICAKICAgLTAuMDUyOTMgICAgIC0wLjIwMDE4ICAKCj4gREYgPC0gZGF0YS5mcmFtZSh4LCB5KQo+IGxtKHkgfiB4LCBkYXRhPURGKQoKQ2FsbDoKbG0oZm9ybXVsYSA9IHkgfiB4LCBkYXRhID0gREYpCgpDb2VmZmljaWVudHM6CihJbnRlcmNlcHQpICAgICAgICB4VFJVRSAgCiAgIC0wLjA1MjkzICAgICAtMC4yMDAxOCAgCgo+IG9wdGlvbnMoY29udHJhc3RzPWMoImNvbnRyLmhlbG1lcnQiLCAiY29udHIucG9seSIpKQo+IG1vZGVsLm1hdHJpeCh5IH4geCkKICAgKEludGVyY2VwdCkgeDEKMSAgICAgICAgICAgIDEgIDEKMiAgICAgICAgICAgIDEgLTEKMyAgICAgICAgICAgIDEgIDEKNCAgICAgICAgICAgIDEgLTEKNSAgICAgICAgICAgIDEgIDEKNiAgICAgICAgICAgIDEgLTEKNyAgICAgICAgICAgIDEgIDEKOCAgICAgICAgICAgIDEgLTEKOSAgICAgICAgICAgIDEgIDEKMTAgICAgICAgICAgIDEgLTEKYXR0cigsImFzc2lnbiIpClsxXSAwIDEKYXR0cigsImNvbnRyYXN0cyIpCmF0dHIoLCJjb250cmFzdHMiKSR4ClsxXSAiY29udHIuaGVsbWVydCIKCj4gbG0oeSB+IHgsIGRhdGE9REYpCgpDYWxsOgpsbShmb3JtdWxhID0geSB+IHgsIGRhdGEgPSBERikKCkNvZWZmaWNpZW50czoKKEludGVyY2VwdCkgICAgICAgICAgIHgxICAKICAgIC0wLjE1MzAgICAgICAtMC4xMDAxICAKCj4geiA8LSAxOjEwCj4gbG0oeSB+IHgqeikKCkNhbGw6CmxtKGZvcm11bGEgPSB5IH4geCAqIHopCgpDb2VmZmljaWVudHM6CihJbnRlcmNlcHQpICAgICAgICAgICB4MSAgICAgICAgICAgIHogICAgICAgICB4MTp6ICAKICAtMC4wODgwODkgICAgLTAuNTA4MTcwICAgIC0wLjAwNTEwMiAgICAgMC4wNzM3MzMgIAoKPiBsbSh5IH4geCp6IC0gMSkKCkNhbGw6CmxtKGZvcm11bGEgPSB5IH4geCAqIHogLSAxKQoKQ29lZmZpY2llbnRzOgogICB4RkFMU0UgICAgICB4VFJVRSAgICAgICAgICB6ICAgICAgIHgxOnogIAogMC40MjAwODEgIC0wLjU5NjI1OSAgLTAuMDA1MTAyICAgMC4wNzM3MzMgIAoKPiBvcHRpb25zKG9sZENvbikKPiAKPiAjIyBkaWZmaW52LCBBZHJpYW4gVHJhcGxldHRpLCAyMDAxLTA4LTI3Cj4geCA8LSB0cygxOjEwKQo+IGRpZmZpbnYoZGlmZih4KSx4aT14WzFdKQpUaW1lIFNlcmllczoKU3RhcnQgPSAxIApFbmQgPSAxMCAKRnJlcXVlbmN5ID0gMSAKIFsxXSAgMSAgMiAgMyAgNCAgNSAgNiAgNyAgOCAgOSAxMAo+IGRpZmZpbnYoZGlmZih4LGxhZz0xLGRpZmZlcmVuY2VzPTIpLGxhZz0xLGRpZmZlcmVuY2VzPTIseGk9eFsxOjJdKQpUaW1lIFNlcmllczoKU3RhcnQgPSAxIApFbmQgPSAxMCAKRnJlcXVlbmN5ID0gMSAKIFsxXSAgMSAgMiAgMyAgNCAgNSAgNiAgNyAgOCAgOSAxMAo+ICMjIGxhc3QgaGFkIHdyb25nIHN0YXJ0IGFuZCBlbmQKPiAKPiAjIyBQUiMxMDcyICAoUmVhZGluZyBJbmYgYW5kIE5hTiB2YWx1ZXMpCj4gYXMubnVtZXJpYyhhcy5jaGFyYWN0ZXIoTmFOKSkKWzFdIE5hTgo+IGFzLm51bWVyaWMoYXMuY2hhcmFjdGVyKEluZikpClsxXSBJbmYKPiAjIyB3ZXJlIE5BIG9uIFdpbmRvd3MgYXQgbGVhc3QgdW5kZXIgMS4zLjAuCj4gCj4gIyMgUFIjMTA5MiAocm93c3VtIGRpbW5hbWVzKQo+IHJvd3N1bShtYXRyaXgoMToxMiwgMyw0KSwgYygiWSIsIlgiLCJZIikpCiAgWywxXSBbLDJdIFssM10gWyw0XQpYICAgIDIgICAgNSAgICA4ICAgMTEKWSAgICA0ICAgMTAgICAxNiAgIDIyCj4gIyMgcm93bmFtZXMgd2VyZSAxLDIgaW4gPD0gMS4zLjEuCj4gCj4gIyMgUFIjMTExNSAoc2F2aW5nIHN0cmluZ3Mgd2l0aCBhc2NpaT1UUlVFKQo+IHggPC0geSA8LSB1bmxpc3QoYXMubGlzdCgKKyAgICAgcGFyc2UodGV4dD1wYXN0ZSgiXCJcXCIsIGFzLmNoYXJhY3Rlcihhcy5vY3Rtb2RlKDE6MjU1KSksICJcIiIsc2VwPSIiKSkpKQo+IHNhdmUoeCwgYXNjaWk9VFJVRSwgZmlsZT0oZm4gPC0gdGVtcGZpbGUodG1wZGlyID0gZ2V0d2QoKSkpKQo+IGxvYWQoZm4pCj4gYWxsKHg9PXkpClsxXSBUUlVFCj4gdW5saW5rKGZuKQo+ICMjIDEuMy4xIGhhZCB0cm91YmxlIHdpdGggXAo+IAo+IAo+ICMjIFNvbWUgdGVzdHMgb2Ygc2luaygpIGFuZCBjb25uZWN0aW9ucygpCj4gIyMgY2FwdHVyZSBhbGwgdGhlIG91dHB1dCB0byBhIGZpbGUuCj4genogPC0gZmlsZSgiYWxsLlJvdXQiLCBvcGVuPSJ3dCIpCj4gc2luayh6eikKPiBzaW5rKHp6LCB0eXBlPSJtZXNzYWdlIikKPiB0cnkobG9nKCJhIikpCj4gIyMgYmFjayB0byB0aGUgY29uc29sZQo+IHNpbmsodHlwZT0ibWVzc2FnZSIpCj4gc2luaygpCj4gdHJ5KGxvZygiYSIpKQpFcnJvciBpbiBsb2coImEiKSA6IG5vbi1udW1lcmljIGFyZ3VtZW50IHRvIG1hdGhlbWF0aWNhbCBmdW5jdGlvbgo+IAo+ICMjIGNhcHR1cmUgYWxsIHRoZSBvdXRwdXQgdG8gYSBmaWxlLgo+IHp6IDwtIGZpbGUoImFsbC5Sb3V0Iiwgb3Blbj0id3QiKQo+IHNpbmsoenopCj4gc2luayh6eiwgdHlwZT0ibWVzc2FnZSIpCj4gdHJ5KGxvZygiYSIpKQo+IAo+ICMjIGJhaWwgb3V0Cj4gY2xvc2VBbGxDb25uZWN0aW9ucygpCj4gKGZvbyA8LSBzaG93Q29ubmVjdGlvbnMoKSkKICAgICBkZXNjcmlwdGlvbiBjbGFzcyBtb2RlIHRleHQgaXNvcGVuIGNhbiByZWFkIGNhbiB3cml0ZQo+IHN0b3BpZm5vdChucm93KGZvbykgPT0gMCkKPiB0cnkobG9nKCJhIikpCkVycm9yIGluIGxvZygiYSIpIDogbm9uLW51bWVyaWMgYXJndW1lbnQgdG8gbWF0aGVtYXRpY2FsIGZ1bmN0aW9uCj4gdW5saW5rKCJhbGwuUm91dCIpCj4gIyMgbWFueSBvZiB0aGVzZSB3ZXJlIHVudGVzdGVkIGJlZm9yZSAxLjQuMC4KPiAKPiAKPiAjIyB0ZXN0IG1lYW4oKSB3b3JrcyBvbiBsb2dpY2FsIGJ1dCBub3QgZmFjdG9yCj4geCA8LSBjKFRSVUUsIEZBTFNFLCBUUlVFLCBUUlVFKQo+IG1lYW4oeCkKWzFdIDAuNzUKPiBtZWFuKGFzLmZhY3Rvcih4KSkKWzFdIE5BCldhcm5pbmcgbWVzc2FnZToKSW4gbWVhbi5kZWZhdWx0KGFzLmZhY3Rvcih4KSkgOgogIGFyZ3VtZW50IGlzIG5vdCBudW1lcmljIG9yIGxvZ2ljYWw6IHJldHVybmluZyBOQQo+ICMjIGxhc3QgaGFkIGNvbmZ1c2luZyBlcnJvciBtZXNzYWdlIGluIDEuMy4xLgo+IAo+IAo+ICMjIEt1cnQgSG9ybmlrIDIwMDEtTm92LTEzCj4geiA8LSB0YWJsZSh4ID0gMToyLCB5ID0gMToyKQo+IHogLSAxCiAgIHkKeCAgICAxICAyCiAgMSAgMCAtMQogIDIgLTEgIDAKPiB1bmNsYXNzKHogLSAxKQogICB5CnggICAgMSAgMgogIDEgIDAgLTEKICAyIC0xICAwCj4gIyMgbG9zdCBvYmplY3QgYml0IHByaW9yIHRvIDEuNC4wLCBzbyBwcmludGVkIGNsYXNzIGF0dHJpYnV0ZS4KPiAKPiAKPiAjIyBQUiMxMjI2ICAocHJlZGljdC5tbG0gaWdub3JlZCBuZXdkYXRhKQo+IGN0bCA8LSBjKDQuMTcsNS41OCw1LjE4LDYuMTEsNC41MCw0LjYxLDUuMTcsNC41Myw1LjMzLDUuMTQpCj4gdHJ0IDwtIGMoNC44MSw0LjE3LDQuNDEsMy41OSw1Ljg3LDMuODMsNi4wMyw0Ljg5LDQuMzIsNC42OSkKPiBncm91cCA8LSBnbCgyLDEwLDIwLCBsYWJlbHMgPSBjKCJDdGwiLCJUcnQiKSkKPiB3ZWlnaHQgPC0gYyhjdGwsIHRydCkKPiBkYXRhIDwtIGRhdGEuZnJhbWUod2VpZ2h0LCBncm91cCkKPiBmaXQgPC0gbG0oY2JpbmQodz13ZWlnaHQsIHcyPXdlaWdodF4yKSB+IGdyb3VwLCBkYXRhPWRhdGEpCj4gcHJlZGljdChmaXQsIG5ld2RhdGE9ZGF0YVsxOjIsIF0pCiAgICAgIHcgICAgICAgdzIKMSA1LjAzMiAyNS42MjcwMgoyIDUuMDMyIDI1LjYyNzAyCj4gIyMgd2FzIDIwIHJvd3MgaW4gUiA8PSAxLjQuMAo+IAo+IAo+ICMjIENob25nIEd1IDIwMDItRmViLTg6IGAuJyBub3QgZXhwYW5kZWQgaW4gZHJvcDEKPiBsYWIgPC0gZGltbmFtZXMoSGFpckV5ZUNvbG9yKQo+IEhhaXJFeWUgPC0gY2JpbmQoZXhwYW5kLmdyaWQoSGFpcj1sYWIkSGFpciwgRXllPWxhYiRFeWUsIFNleD1sYWIkU2V4LAorIAkJCSAgICAgc3RyaW5nc0FzRmFjdG9ycyA9IFRSVUUpLAorIAkJIEZyID0gYXMudmVjdG9yKEhhaXJFeWVDb2xvcikpCj4gSGFpckV5ZS5maXQgPC0gZ2xtKEZyIH4gLiBeMiwgcG9pc3NvbiwgSGFpckV5ZSkKPiBkcm9wMShIYWlyRXllLmZpdCkKU2luZ2xlIHRlcm0gZGVsZXRpb25zCgpNb2RlbDoKRnIgfiAoSGFpciArIEV5ZSArIFNleCleMgogICAgICAgICBEZiBEZXZpYW5jZSAgICBBSUMKPG5vbmU+ICAgICAgICAgNi43NjEgMTkxLjY0CkhhaXI6RXllICA5ICAxNTYuNjc4IDMyMy41NgpIYWlyOlNleCAgMyAgIDE4LjMyNyAxOTcuMjEKRXllOlNleCAgIDMgICAxMS43NjQgMTkwLjY0Cj4gIyMgYnJva2VuIGFyb3VuZCAxLjIuMSBpdCBzZWVtcy4KPiAKPiAKPiAjIyBQUiMxMzI5ICAoc3Vic2NyaXB0aW5nIG1hdHJpeCBsaXN0cykKPiBtIDwtIGxpc3QoYTE9MTozLCBhMj00OjYsIGEzPXBpLCBhND1jKCJhIiwiYiIsImMiKSkKPiBkaW0obSkgPC0gYygyLDIpCj4gbQogICAgIFssMV0gICAgICBbLDJdICAgICAgIApbMSxdIGludGVnZXIsMyAzLjE0MTU5MyAgIApbMixdIGludGVnZXIsMyBjaGFyYWN0ZXIsMwo+IG1bLDJdCltbMV1dClsxXSAzLjE0MTU5MwoKW1syXV0KWzFdICJhIiAiYiIgImMiCgo+IG1bMiwyXQpbWzFdXQpbMV0gImEiICJiIiAiYyIKCj4gIyMgMS40LjEgcmV0dXJuZWQgbnVsbCBjb21wb25lbnRzOiB0aGUgY2FzZSB3YXMgbWlzc2luZyBmcm9tIGEgc3dpdGNoLgo+IAo+IG0gPC0gbGlzdChhMT0xOjMsIGEyPTQ6NiwgYTM9cGksIGE0PWMoImEiLCJiIiwiYyIpKQo+IG1hdHJpeChtLCAyLCAyKQogICAgIFssMV0gICAgICBbLDJdICAgICAgIApbMSxdIGludGVnZXIsMyAzLjE0MTU5MyAgIApbMixdIGludGVnZXIsMyBjaGFyYWN0ZXIsMwo+ICMjIDEuNC4xIGdhdmUgYFVuaW1wbGVtZW50ZWQgZmVhdHVyZSBpbiBjb3B5VmVjdG9yJwo+IAo+IHggPC0gdmVjdG9yKCJsaXN0Iiw2KQo+IGRpbSh4KSA8LSBjKDIsMykKPiB4WzEsMl0gPC0gbGlzdChsZXR0ZXJzWzEwOjExXSkKPiB4CiAgICAgWywxXSBbLDJdICAgICAgICBbLDNdClsxLF0gTlVMTCBjaGFyYWN0ZXIsMiBOVUxMClsyLF0gTlVMTCBOVUxMICAgICAgICBOVUxMCj4gIyMgMS40LjEgZ2F2ZSBgaW5jb21wYXRpYmxlIHR5cGVzIGluIHN1YnNldCBhc3NpZ25tZW50Jwo+IAo+IAo+ICMjIHByaW50aW5nIG9mIG1hdHJpeCBsaXN0cwo+IG0gPC0gbGlzdChhcy5pbnRlZ2VyKDEpLCBwaSwgMys1aSwgInRlc3RpdCIsIFRSVUUsIGZhY3RvcigiZm9vIikpCj4gZGltKG0pIDwtIGMoMSwgNikKPiBtCiAgICAgWywxXSBbLDJdICAgICBbLDNdIFssNF0gICAgIFssNV0gWyw2XQpbMSxdIDEgICAgMy4xNDE1OTMgMys1aSAidGVzdGl0IiBUUlVFIGZvbyAKPiAjIyBwcmlvciB0byAxLjUuMCBoYWQgcXVvdGVzIGZvciAyRCBjYXNlIChidXQgbm90IGtELCBrID4gMiksCj4gIyMgZ2F2ZSAibnVtZXJpYywxIiBldGMsIChldmVuICJudW1lcmljLDEiIGZvciBpbnRlZ2VycyBhbmQgZmFjdG9ycykKPiAKPiAKPiAjIyBlbnN1cmUgUk5HIGlzIHVuYWx0ZXJlZC4KPiBmb3IodHlwZSBpbiBjKCJXaWNobWFubi1IaWxsIiwgIk1hcnNhZ2xpYS1NdWx0aWNhcnJ5IiwgIlN1cGVyLUR1cGVyIiwKKyAgICAgICAgICAgICAgICJNZXJzZW5uZS1Ud2lzdGVyIiwgIktudXRoLVRBT0NQIiwgIktudXRoLVRBT0NQLTIwMDIiKSkKKyB7CisgICAgIHNldC5zZWVkKDEyMywgdHlwZSkKKyAgICAgcHJpbnQoUk5Ha2luZCgpKQorICAgICBydW5pZigxMDApOyBwcmludChydW5pZig0KSkKKyAgICAgc2V0LnNlZWQoMTAwMCwgdHlwZSkKKyAgICAgcnVuaWYoMTAwKTsgcHJpbnQocnVuaWYoNCkpCisgICAgIHNldC5zZWVkKDc3LCB0eXBlKQorICAgICBydW5pZigxMDApOyBwcmludChydW5pZig0KSkKKyB9ClsxXSAiV2ljaG1hbm4tSGlsbCIgIkludmVyc2lvbiIgICAgICJSZWplY3Rpb24iICAgIApbMV0gMC44MzA4ODQxIDAuNDY0MDIyMSAwLjk0NjAwODIgMC44NzY0NjQ0ClsxXSAwLjEyOTA5ODc2IDAuMDcyOTQ4NTEgMC40NTU5NDU2MCAwLjY4ODg0OTExClsxXSAwLjQwNjI0NTAgMC43MTg4NDMyIDAuNjI0MTczOCAwLjI1MTE2MTEKWzFdICJNYXJzYWdsaWEtTXVsdGljYXJyeSIgIkludmVyc2lvbiIgICAgICAgICAgICAiUmVqZWN0aW9uIiAgICAgICAgICAgClsxXSAwLjM0Nzk3MDUgMC45NDY5MzUxIDAuMjQ4OTIwNyAwLjczMjkyNTEKWzFdIDAuNTA0MTUxMiAwLjM2MTc4NzMgMC4xNDY5MTg0IDAuMzc5ODExOQpbMV0gMC4xNDM4ODEyOCAwLjA0MTk2Mjk0IDAuMzYyMTQwMTUgMC44NjA1MzU3NQpbMV0gIlN1cGVyLUR1cGVyIiAiSW52ZXJzaW9uIiAgICJSZWplY3Rpb24iICAKWzFdIDAuMjcyMjUxMCAwLjkyMzAyNDAgMC4zOTcxNzQzIDAuODI4NDQ3NApbMV0gMC41NzA2MjQxIDAuMTgwNjAyMyAwLjk2MzM4NjAgMC44NDM0NDQ0ClsxXSAwLjA5MzU2NTg1IDAuNDEwODExMjQgMC4zODYzNTYyNyAwLjcyOTkzMzk2ClsxXSAiTWVyc2VubmUtVHdpc3RlciIgIkludmVyc2lvbiIgICAgICAgICJSZWplY3Rpb24iICAgICAgIApbMV0gMC41OTk5ODkwIDAuMzMyODIzNSAwLjQ4ODYxMzAgMC45NTQ0NzM4ClsxXSAwLjU5OTM2NzkgMC40NTE2ODE4IDAuMTM2ODI1NCAwLjcyNjE3ODgKWzFdIDAuMDk1OTQ5NjEgMC4zMTIzNTY1MSAwLjgxMjQ0MzM1IDAuNzIzMzA4NDYKWzFdICJLbnV0aC1UQU9DUCIgIkludmVyc2lvbiIgICAiUmVqZWN0aW9uIiAgClsxXSAwLjk0NDU1MDIgMC4zMzY2Mjk3IDAuNjI5Njg4MSAwLjU5MTQxNjEKWzFdIDAuOTIxMzk1NCAwLjU0NjgxMzggMC44ODE3MTAwIDAuNDQ0MjIzNwpbMV0gMC44MDE2OTYyIDAuOTIyNjA4MCAwLjE0NzM0ODQgMC44ODI3NzA3ClsxXSAiS251dGgtVEFPQ1AtMjAwMiIgIkludmVyc2lvbiIgICAgICAgICJSZWplY3Rpb24iICAgICAgIApbMV0gMC45MzAzNjM0IDAuMjgxMjIzOSAwLjEwODU4MDYgMC44MDUzMjI4ClsxXSAwLjI5MTY2MjcgMC45MDg1MDE3IDAuNzk1ODk2NSAwLjE5ODA2NTUKWzFdIDAuMDUyNDc1NzUgMC4yODI5MDg2NyAwLjIwOTMwMzI0IDAuMTY3OTQ4ODcKV2FybmluZyBtZXNzYWdlczoKMTogSW4gc2V0LnNlZWQoMTIzLCB0eXBlKSA6CiAgUk5Ha2luZDogTWFyc2FnbGlhLU11bHRpY2FycnkgaGFzIHBvb3Igc3RhdGlzdGljYWwgcHJvcGVydGllcwoyOiBJbiBzZXQuc2VlZCgxMDAwLCB0eXBlKSA6CiAgUk5Ha2luZDogTWFyc2FnbGlhLU11bHRpY2FycnkgaGFzIHBvb3Igc3RhdGlzdGljYWwgcHJvcGVydGllcwozOiBJbiBzZXQuc2VlZCg3NywgdHlwZSkgOgogIFJOR2tpbmQ6IE1hcnNhZ2xpYS1NdWx0aWNhcnJ5IGhhcyBwb29yIHN0YXRpc3RpY2FsIHByb3BlcnRpZXMKPiBSTkdraW5kKG5vcm1hbC5raW5kID0gIktpbmRlcm1hbi1SYW1hZ2UiKQo+IHNldC5zZWVkKDEyMykKPiBSTkdraW5kKCkKWzFdICJLbnV0aC1UQU9DUC0yMDAyIiAiS2luZGVybWFuLVJhbWFnZSIgIlJlamVjdGlvbiIgICAgICAgCj4gcm5vcm0oNCkKWzFdIC0xLjk2OTkwOTAgLTIuMjQyOTM0MCAgMC41MzM5MzIxICAwLjIwOTcxNTMKPiBSTkdraW5kKG5vcm1hbC5raW5kID0gIkFocmVucy1EaWV0ZXIiKQo+IHNldC5zZWVkKDEyMykKPiBSTkdraW5kKCkKWzFdICJLbnV0aC1UQU9DUC0yMDAyIiAiQWhyZW5zLURpZXRlciIgICAgIlJlamVjdGlvbiIgICAgICAgCj4gcm5vcm0oNCkKWzFdICAwLjA2MjY3MjI5ICAwLjEyNDIxNTY4IC0xLjg2NjUzNDk5IC0wLjE0NTM1OTIxCj4gUk5Ha2luZChub3JtYWwua2luZCA9ICJCb3gtTXVsbGVyIikKPiBzZXQuc2VlZCgxMjMpCj4gUk5Ha2luZCgpClsxXSAiS251dGgtVEFPQ1AtMjAwMiIgIkJveC1NdWxsZXIiICAgICAgICJSZWplY3Rpb24iICAgICAgIAo+IHJub3JtKDQpClsxXSAgMi4yNjE2MDk5MCAgMC41OTAxMDMwMyAgMC4zMDE3NjA0NSAtMC4wMTM0NjEzOQo+IHNldC5zZWVkKDEyMykKPiBydW5pZig0KQpbMV0gMC4wNDA2MjEzMCAwLjA2NTExODI1IDAuOTkyOTA0ODggMC45NTU0MDQ2Nwo+IHNldC5zZWVkKDEyMywgImRlZmF1bHQiKQo+IHNldC5zZWVkKDEyMywgIk1hcnNhZ2xpYS1NdWx0aWNhcnJ5IikgIyMgQ2FyZWZ1bCwgbm90IHRoZSBkZWZhdWx0IGFueW1vcmUKV2FybmluZyBtZXNzYWdlOgpJbiBzZXQuc2VlZCgxMjMsICJNYXJzYWdsaWEtTXVsdGljYXJyeSIpIDoKICBSTkdraW5kOiBNYXJzYWdsaWEtTXVsdGljYXJyeSBoYXMgcG9vciBzdGF0aXN0aWNhbCBwcm9wZXJ0aWVzCj4gcnVuaWYoNCkKWzFdIDAuMTIwMDQyNyAwLjE5OTE2MDAgMC43MjkyODIxIDAuODExNTkyMgo+ICMjIGxhc3Qgc2V0LnNlZWQgZmFpbGVkIDwgMS41LjAuCj4gCj4gCj4gIyMgbWVyZ2luZywgZ2dyb3RoZW5kaWVja0B5aWZhbi5uZXQsIDIwMDItMDMtMTYKPiBkLmRmIDwtIGRhdGEuZnJhbWUoeCA9IDE6MywgeSA9IGMoIkEiLCJEIiwiRSIpLCB6ID0gYyg2LDksMTApKQo+IG1lcmdlKGQuZGZbMSxdLCBkLmRmKQogIHggeSB6CjEgMSBBIDYKPiAjIyAxLjQuMSBnb3QgY29uZnVzZWQgYnkgaW5jb25zaXN0ZW5jaWVzIGluIGFzLmNoYXJhY3Rlcgo+IAo+IAo+ICMjIFBSIzEzOTQgKGxldmVsczwtLmZhY3RvcikKPiBmIDwtIGZhY3RvcihjKCJhIiwiYiIpKQo+IGxldmVscyhmKSA8LSBsaXN0KEM9IkMiLCBBPSJhIiwgQj0iYiIpCj4gZgpbMV0gQSBCCkxldmVsczogQyBBIEIKPiAjIyB3YXMgIFsxXSBDIEE7IExldmVsczogIEMgQSAgaW4gMS40LjEKPiAKPiAKPiAjIyBOQSBsZXZlbHMgaW4gZmFjdG9ycwo+ICh4IDwtIGZhY3RvcihjKCJhIiwgIk5BIiwgImIiKSwgZXhjbHVkZT1OVUxMKSkKWzFdIGEgIE5BIGIgCkxldmVsczogTkEgYSBiCj4gIyMgMS40LjEgaGFkIHdyb25nIG9yZGVyIGZvciBsZXZlbHMKPiBpcy5uYSh4KVszXSA8LSBUUlVFCj4geApbMV0gYSAgICBOQSAgIDxOQT4KTGV2ZWxzOiBOQSBhIGIKPiAjIyBtaXNzaW5nIGVudHJ5IHByaW50cyBhcyA8TkE+Cj4gCj4gCj4gIyMgcHJpbnRpbmcvZm9ybWF0dGluZyBOQSBzdHJpbmdzCj4gKHggPC0gYygiYSIsICJOQSIsIE5BLCAiYiIpKQpbMV0gImEiICAiTkEiIE5BICAgImIiIAo+IHByaW50KHgsIHF1b3RlID0gRkFMU0UpClsxXSBhICAgIE5BICAgPE5BPiBiICAgCj4gcGFzdGUoeCkKWzFdICJhIiAgIk5BIiAiTkEiICJiIiAKPiBmb3JtYXQoeCkKWzFdICJhICIgIk5BIiAiTkEiICJiICIKPiBmb3JtYXQoeCwganVzdGlmeSA9ICJyaWdodCIpClsxXSAiIGEiICJOQSIgIk5BIiAiIGIiCj4gZm9ybWF0KHgsIGp1c3RpZnkgPSAibm9uZSIpClsxXSAiYSIgICJOQSIgIk5BIiAiYiIgCj4gIyMgbm90IGlkZWFsLgo+IAo+IAo+ICMjIHByaW50LnRzIHByb2JsZW1zICBnZ3JvdGhlbmRpZWNrQHlpZmFuLm5ldCBvbiBSLWhlbHAsIDIwMDItMDQtMDEKPiB4IDwtIDE6MjAKPiB0dDEgPC0gdHMoeCxzdGFydD1jKDE5NjAsMiksIGZyZXE9MTIpCj4gdHQyIDwtIHRzKDEwK3gsc3RhcnQ9YygxOTYwLDIpLCBmcmVxPTEyKQo+IGNiaW5kKHR0MSwgdHQyKQogICAgICAgICB0dDEgdHQyCkZlYiAxOTYwICAgMSAgMTEKTWFyIDE5NjAgICAyICAxMgpBcHIgMTk2MCAgIDMgIDEzCk1heSAxOTYwICAgNCAgMTQKSnVuIDE5NjAgICA1ICAxNQpKdWwgMTk2MCAgIDYgIDE2CkF1ZyAxOTYwICAgNyAgMTcKU2VwIDE5NjAgICA4ICAxOApPY3QgMTk2MCAgIDkgIDE5Ck5vdiAxOTYwICAxMCAgMjAKRGVjIDE5NjAgIDExICAyMQpKYW4gMTk2MSAgMTIgIDIyCkZlYiAxOTYxICAxMyAgMjMKTWFyIDE5NjEgIDE0ICAyNApBcHIgMTk2MSAgMTUgIDI1Ck1heSAxOTYxICAxNiAgMjYKSnVuIDE5NjEgIDE3ICAyNwpKdWwgMTk2MSAgMTggIDI4CkF1ZyAxOTYxICAxOSAgMjkKU2VwIDE5NjEgIDIwICAzMAo+ICMjIDEuNC4xIGhhZCBgSmFuIDE5NjEnIGFzIGBOQSAxOTYxJwo+ICMjIC4uLmFuZCAxLjkuMSBoYWQgaXQgYXMgYEphbiAxOTYwJyEhCj4gCj4gIyMgZ2xtIGJvdW5kYXJ5IGJ1Z3MgKHJlbGF0ZWQgdG8gUFIjMTMzMSkKPiB4IDwtIGMoMC4zNSwgMC42NCwgMC4xMiwgMS42NiwgMS41MiwgMC4yMywgLTEuOTksIDAuNDIsIDEuODYsIC0wLjAyLAorICAgICAgICAtMS42NCwgLTAuNDYsIC0wLjEsIDEuMjUsIDAuMzcsIDAuMzEsIDEuMTEsIDEuNjUsIDAuMzMsIDAuODksCisgICAgICAgIC0wLjI1LCAtMC44NywgLTAuMjIsIDAuNzEsIC0yLjI2LCAwLjc3LCAtMC4wNSwgMC4zMiwgLTAuNjQsIDAuMzksCisgICAgICAgIDAuMTksIC0xLjYyLCAwLjM3LCAwLjAyLCAwLjk3LCAtMi42MiwgMC4xNSwgMS41NSwgLTEuNDEsIC0yLjM1LAorICAgICAgICAtMC40MywgMC41NywgLTAuNjYsIC0wLjA4LCAwLjAyLCAwLjI0LCAtMC4zMywgLTAuMDMsIC0xLjEzLCAwLjMyLAorICAgICAgICAxLjU1LCAyLjEzLCAtMC4xLCAtMC4zMiwgLTAuNjcsIDEuNDQsIDAuMDQsIC0xLjEsIC0wLjk1LCAtMC4xOSwKKyAgICAgICAgLTAuNjgsIC0wLjQzLCAtMC44NCwgMC42OSwgLTAuNjUsIDAuNzEsIDAuMTksIDAuNDUsIDAuNDUsIC0xLjE5LAorICAgICAgICAxLjMsIDAuMTQsIC0wLjM2LCAtMC41LCAtMC40NywgLTEuMzEsIC0xLjAyLCAxLjE3LCAxLjUxLCAtMC4zMywKKyAgICAgICAgLTAuMDEsIC0wLjU5LCAtMC4yOCwgLTAuMTgsIC0xLjA3LCAwLjY2LCAtMC43MSwgMS44OCwgLTAuMTQsCisgICAgICAgIC0wLjE5LCAwLjg0LCAwLjQ0LCAxLjMzLCAtMC4yLCAtMC40NSwgMS40NiwgMSwgLTEuMDIsIDAuNjgsIDAuODQpCj4geSA8LSBjKDEsIDAsIDEsIDEsIDEsIDEsIDAsIDEsIDEsIDEsIDAsIDEsIDEsIDEsIDAsIDAsIDEsIDEsIDEsIDAsCisgICAgICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEsIDAsIDAsIDAsIDAsIDEsIDAsIDEsIDAsIDAsIDEsIDAsIDEsIDEsCisgICAgICAgIDEsIDAsIDEsIDEsIDAsIDEsIDAsIDAsIDAsIDEsIDEsIDAsIDEsIDAsIDEsIDEsIDAsIDEsIDAsIDAsIDEsCisgICAgICAgIDAsIDEsIDAsIDEsIDEsIDAsIDAsIDAsIDEsIDEsIDAsIDEsIDEsIDAsIDAsIDEsIDEsIDEsIDAsIDAsIDEsCisgICAgICAgIDEsIDAsIDAsIDEsIDEsIDEsIDAsIDEsIDAsIDEsIDAsIDEsIDEsIDEsIDEsIDAsIDApCj4gdHJ5KGdsbSh5IH4geCwgZmFtaWx5ID0gcG9pc3NvbihpZGVudGl0eSkpKQpFcnJvciA6IG5vIHZhbGlkIHNldCBvZiBjb2VmZmljaWVudHMgaGFzIGJlZW4gZm91bmQ6IHBsZWFzZSBzdXBwbHkgc3RhcnRpbmcgdmFsdWVzCkluIGFkZGl0aW9uOiBXYXJuaW5nIG1lc3NhZ2U6CkluIGxvZyh5L211KSA6IE5hTnMgcHJvZHVjZWQKPiAjIyBmYWlsZWQgYmVjYXVzZSBzdGFydCA9IE5VTEwgaW4gMS40LjEKPiAjIyBub3cgZ2l2ZXMgdXNlZnVsIGVycm9yIG1lc3NhZ2UKPiBnbG0oeSB+IHgsIGZhbWlseSA9IHBvaXNzb24oaWRlbnRpdHkpLCBzdGFydCA9IGMoMSwwKSkKCkNhbGw6ICBnbG0oZm9ybXVsYSA9IHkgfiB4LCBmYW1pbHkgPSBwb2lzc29uKGlkZW50aXR5KSwgc3RhcnQgPSBjKDEsIAogICAgMCkpCgpDb2VmZmljaWVudHM6CihJbnRlcmNlcHQpICAgICAgICAgICAgeCAgCiAgICAgMC41MTE0ICAgICAgIDAuMTY5MCAgCgpEZWdyZWVzIG9mIEZyZWVkb206IDk5IFRvdGFsIChpLmUuIE51bGwpOyAgOTggUmVzaWR1YWwKTnVsbCBEZXZpYW5jZToJICAgIDY4LjAxIApSZXNpZHVhbCBEZXZpYW5jZTogNjAuNjYgCUFJQzogMTY4LjcKV2FybmluZyBtZXNzYWdlczoKMTogc3RlcCBzaXplIHRydW5jYXRlZDogb3V0IG9mIGJvdW5kcyAKMjogc3RlcCBzaXplIHRydW5jYXRlZDogb3V0IG9mIGJvdW5kcyAKPiAjIyBzdGVwIHJlZHVjdGlvbiBmYWlsZWQgaW4gMS40LjEKPiBzZXQuc2VlZCgxMjMpCj4geSA8LSBycG9pcygxMDAsIHBtYXgoMyp4LCAwKSkKPiBnbG0oeSB+IHgsIGZhbWlseSA9IHBvaXNzb24oaWRlbnRpdHkpLCBzdGFydCA9IGMoMSwwKSkKCkNhbGw6ICBnbG0oZm9ybXVsYSA9IHkgfiB4LCBmYW1pbHkgPSBwb2lzc29uKGlkZW50aXR5KSwgc3RhcnQgPSBjKDEsIAogICAgMCkpCgpDb2VmZmljaWVudHM6CihJbnRlcmNlcHQpICAgICAgICAgICAgeCAgCiAgICAgMS4xNTYxICAgICAgIDAuNDQxMyAgCgpEZWdyZWVzIG9mIEZyZWVkb206IDk5IFRvdGFsIChpLmUuIE51bGwpOyAgOTggUmVzaWR1YWwKTnVsbCBEZXZpYW5jZToJICAgIDMxNy4yIApSZXNpZHVhbCBEZXZpYW5jZTogMjI4LjUgCUFJQzogMzQ0LjcKVGhlcmUgd2VyZSAyNyB3YXJuaW5ncyAodXNlIHdhcm5pbmdzKCkgdG8gc2VlIHRoZW0pCj4gd2FybmluZ3MoKQpXYXJuaW5nIG1lc3NhZ2VzOgoxOiBzdGVwIHNpemUgdHJ1bmNhdGVkOiBvdXQgb2YgYm91bmRzCjI6IHN0ZXAgc2l6ZSB0cnVuY2F0ZWQ6IG91dCBvZiBib3VuZHMKMzogc3RlcCBzaXplIHRydW5jYXRlZDogb3V0IG9mIGJvdW5kcwo0OiBzdGVwIHNpemUgdHJ1bmNhdGVkOiBvdXQgb2YgYm91bmRzCjU6IHN0ZXAgc2l6ZSB0cnVuY2F0ZWQ6IG91dCBvZiBib3VuZHMKNjogc3RlcCBzaXplIHRydW5jYXRlZDogb3V0IG9mIGJvdW5kcwo3OiBzdGVwIHNpemUgdHJ1bmNhdGVkOiBvdXQgb2YgYm91bmRzCjg6IHN0ZXAgc2l6ZSB0cnVuY2F0ZWQ6IG91dCBvZiBib3VuZHMKOTogc3RlcCBzaXplIHRydW5jYXRlZDogb3V0IG9mIGJvdW5kcwoxMDogc3RlcCBzaXplIHRydW5jYXRlZDogb3V0IG9mIGJvdW5kcwoxMTogc3RlcCBzaXplIHRydW5jYXRlZDogb3V0IG9mIGJvdW5kcwoxMjogc3RlcCBzaXplIHRydW5jYXRlZDogb3V0IG9mIGJvdW5kcwoxMzogc3RlcCBzaXplIHRydW5jYXRlZDogb3V0IG9mIGJvdW5kcwoxNDogc3RlcCBzaXplIHRydW5jYXRlZDogb3V0IG9mIGJvdW5kcwoxNTogc3RlcCBzaXplIHRydW5jYXRlZDogb3V0IG9mIGJvdW5kcwoxNjogc3RlcCBzaXplIHRydW5jYXRlZDogb3V0IG9mIGJvdW5kcwoxNzogc3RlcCBzaXplIHRydW5jYXRlZDogb3V0IG9mIGJvdW5kcwoxODogc3RlcCBzaXplIHRydW5jYXRlZDogb3V0IG9mIGJvdW5kcwoxOTogc3RlcCBzaXplIHRydW5jYXRlZDogb3V0IG9mIGJvdW5kcwoyMDogc3RlcCBzaXplIHRydW5jYXRlZDogb3V0IG9mIGJvdW5kcwoyMTogc3RlcCBzaXplIHRydW5jYXRlZDogb3V0IG9mIGJvdW5kcwoyMjogc3RlcCBzaXplIHRydW5jYXRlZDogb3V0IG9mIGJvdW5kcwoyMzogc3RlcCBzaXplIHRydW5jYXRlZDogb3V0IG9mIGJvdW5kcwoyNDogc3RlcCBzaXplIHRydW5jYXRlZDogb3V0IG9mIGJvdW5kcwoyNTogc3RlcCBzaXplIHRydW5jYXRlZDogb3V0IG9mIGJvdW5kcwoyNjogZ2xtLmZpdDogYWxnb3JpdGhtIGRpZCBub3QgY29udmVyZ2UKMjc6IGdsbS5maXQ6IGFsZ29yaXRobSBzdG9wcGVkIGF0IGJvdW5kYXJ5IHZhbHVlCj4gCj4gCj4gIyMgZXh0ZW5kaW5nIGNoYXIgYXJycmF5cwo+IHggPC0geSA8LSBMRVRURVJTWzE6Ml0KPiB4WzVdIDwtICJDIgo+IGxlbmd0aCh5KSA8LSA1Cj4geApbMV0gIkEiICJCIiBOQSAgTkEgICJDIgo+IHkKWzFdICJBIiAiQiIgTkEgIE5BICBOQSAKPiAjIyB4IHdhcyBmaWxsZWQgd2l0aCAiIiwgeSB3aXRoIE5BIGluIDEuNS4wCj4gCj4gCj4gIyMgZm9ybXVsYSB3aXRoIG5vIGludGVyY2VwdCwgMjAwMi0wNy0yMgo+IG9sZGNvbiA8LSBvcHRpb25zKGNvbnRyYXN0cyA9IGMoImNvbnRyLmhlbG1lcnQiLCAiY29udHIucG9seSIpKQo+IFUgPC0gZ2woMywgNiwgMTgsIGxhYmVscz1sZXR0ZXJzWzE6M10pCj4gViA8LSBnbCgzLCAyLCAxOCwgbGFiZWxzPWxldHRlcnNbMTozXSkKPiBBIDwtIHJlcChjKDAsIDEpLCA5KQo+IEIgPC0gcmVwKGMoMSwgMCksIDkpCj4gc2V0LnNlZWQoMSk7IHkgPC0gcm5vcm0oMTgpCj4gdGVybXMoeSB+IEE6VSArIEE6ViAtIDEpCnkgfiBBOlUgKyBBOlYgLSAxCmF0dHIoLCJ2YXJpYWJsZXMiKQpsaXN0KHksIEEsIFUsIFYpCmF0dHIoLCJmYWN0b3JzIikKICBBOlUgQTpWCnkgICAwICAgMApBICAgMiAgIDIKVSAgIDIgICAwClYgICAwICAgMQphdHRyKCwidGVybS5sYWJlbHMiKQpbMV0gIkE6VSIgIkE6ViIKYXR0cigsIm9yZGVyIikKWzFdIDIgMgphdHRyKCwiaW50ZXJjZXB0IikKWzFdIDAKYXR0cigsInJlc3BvbnNlIikKWzFdIDEKYXR0cigsIi5FbnZpcm9ubWVudCIpCjxlbnZpcm9ubWVudDogUl9HbG9iYWxFbnY+Cj4gbG0oeSB+IEE6VSArIEE6ViAtIDEpJGNvZWZmaWNpZW50cyAgIyAxLjUuMSB1c2VkIGR1bW1pZXMgY29kaW5nIGZvciBWCiAgICAgICBBOlVhICAgICAgICBBOlViICAgICAgICBBOlVjICAgICAgICBBOlYxICAgICAgICBBOlYyIAogMC4yNTMwMzg4NCAtMC4yMTg3NTQ5OSAtMC43MTcwODUyOCAtMC42MTQ2NzE5MyAtMC4wOTAzMDQzNiAKPiBsbSh5IH4gKEEgKyBCKSA6IChVICsgVikgLSAxKSAjIDEuNS4xIHVzZWQgZHVtbWllcyBjb2RpbmcgZm9yIEE6ViBidXQgbm90IEI6VgoKQ2FsbDoKbG0oZm9ybXVsYSA9IHkgfiAoQSArIEIpOihVICsgVikgLSAxKQoKQ29lZmZpY2llbnRzOgogICBBOlVhICAgICBBOlViICAgICBBOlVjICAgICBBOlYxICAgICBBOlYyICAgICBCOlVhICAgICBCOlViICAgICBCOlVjICAKIDAuMjUzMCAgLTAuMjE4OCAgLTAuNzE3MSAgLTAuNjE0NyAgLTAuMDkwMyAgIDEuNzQyOCAgIDAuMDYxMyAgIDAuNzY0OSAgCiAgIEI6VjEgICAgIEI6VjIgIAotMC40NDIwICAgMC41Mzg4ICAKCj4gb3B0aW9ucyhvbGRjb24pCj4gIyMgMS41LjEgbWlzY29tcHV0ZWQgdGhlIGZpcnN0IGZhY3RvciBpbiB0aGUgZm9ybXVsYS4KPiAKPiAKPiAjIyBxdWFudGlsZSBleHRyZW1lcywgTU0gMTMgQXByIDIwMDAgYW5kIFBSIzE4NTIKPiAocXEgPC0gc2FwcGx5KDA6NSwgZnVuY3Rpb24oaykgeworICAgICB4IDwtIGMocmVwKC1JbmYsaysxKSwgMDprLCByZXAoSW5mLCBrKSkKKyAgICAgc2FwcGx5KDE6OSwgZnVuY3Rpb24odHlwKQorICAgICAgICAgICAgcXVhbnRpbGUoeCwgcHI9KDI6MTApLzEwLCB0eXBlPXR5cCkpCisgfSwgc2ltcGxpZnk9ImFycmF5IikpCiwgLCAxCgogICAgIFssMV0gWywyXSBbLDNdIFssNF0gWyw1XSBbLDZdIFssN10gWyw4XSBbLDldCjIwJSAgLUluZiAtSW5mIC1JbmYgLUluZiAtSW5mIC1JbmYgLUluZiAtSW5mIC1JbmYKMzAlICAtSW5mIC1JbmYgLUluZiAtSW5mIC1JbmYgLUluZiAtSW5mIC1JbmYgLUluZgo0MCUgIC1JbmYgLUluZiAtSW5mIC1JbmYgLUluZiAtSW5mIC1JbmYgLUluZiAtSW5mCjUwJSAgLUluZiAtSW5mIC1JbmYgLUluZiAtSW5mIC1JbmYgLUluZiAtSW5mIC1JbmYKNjAlICAgICAwICAgIDAgLUluZiAtSW5mIC1JbmYgLUluZiAtSW5mIC1JbmYgLUluZgo3MCUgICAgIDAgICAgMCAtSW5mIC1JbmYgLUluZiAgICAwIC1JbmYgLUluZiAtSW5mCjgwJSAgICAgMCAgICAwICAgIDAgLUluZiAgICAwICAgIDAgLUluZiAgICAwICAgIDAKOTAlICAgICAwICAgIDAgICAgMCAtSW5mICAgIDAgICAgMCAtSW5mICAgIDAgICAgMAoxMDAlICAgIDAgICAgMCAgICAwICAgIDAgICAgMCAgICAwICAgIDAgICAgMCAgICAwCgosICwgMgoKICAgICBbLDFdIFssMl0gWywzXSBbLDRdIFssNV0gWyw2XSBbLDddICAgICAgWyw4XSAgWyw5XQoyMCUgIC1JbmYgLUluZiAtSW5mIC1JbmYgLUluZiAtSW5mIC1JbmYgICAgICAtSW5mICAtSW5mCjMwJSAgLUluZiAtSW5mIC1JbmYgLUluZiAtSW5mIC1JbmYgLUluZiAgICAgIC1JbmYgIC1JbmYKNDAlICAtSW5mIC1JbmYgLUluZiAtSW5mIC1JbmYgLUluZiAtSW5mICAgICAgLUluZiAgLUluZgo1MCUgICAgIDAgIDAuMCAtSW5mIC1JbmYgIDAuMCAgMC4wICAwLjAgMC4wMDAwMDAwIDAuMDAwCjYwJSAgICAgMCAgMC41ICAgIDAgIDAuMCAgMC41ICAwLjYgIDAuNCAwLjUzMzMzMzMgMC41MjUKNzAlICAgICAxICAxLjAgICAgMSAgMC41ICAxLjAgIEluZiAgMC44ICAgICAgIEluZiAgIEluZgo4MCUgICAgIDEgIEluZiAgICAxICAxLjAgIEluZiAgSW5mICBJbmYgICAgICAgSW5mICAgSW5mCjkwJSAgIEluZiAgSW5mICAgIDEgIEluZiAgSW5mICBJbmYgIEluZiAgICAgICBJbmYgICBJbmYKMTAwJSAgSW5mICBJbmYgIEluZiAgSW5mICBJbmYgIEluZiAgSW5mICAgICAgIEluZiAgIEluZgoKLCAsIDMKCiAgICAgWywxXSBbLDJdIFssM10gWyw0XSBbLDVdIFssNl0gWyw3XSAgICAgWyw4XSAgWyw5XQoyMCUgIC1JbmYgLUluZiAtSW5mIC1JbmYgLUluZiAtSW5mIC1JbmYgICAgIC1JbmYgIC1JbmYKMzAlICAtSW5mIC1JbmYgLUluZiAtSW5mIC1JbmYgLUluZiAtSW5mICAgICAtSW5mICAtSW5mCjQwJSAgICAgMCAgMC4wIC1JbmYgLUluZiAtSW5mIC1JbmYgLUluZiAgICAgLUluZiAgLUluZgo1MCUgICAgIDAgIDAuNSAgICAwICAwLjAgIDAuNSAgMC41ICAwLjUgMC41MDAwMDAgMC41MDAKNjAlICAgICAxICAxLjAgICAgMSAgMC44ICAxLjMgIDEuNCAgMS4yIDEuMzMzMzMzIDEuMzI1CjcwJSAgICAgMiAgMi4wICAgIDIgIDEuNiAgSW5mICBJbmYgIDEuOSAgICAgIEluZiAgIEluZgo4MCUgICBJbmYgIEluZiAgICAyICBJbmYgIEluZiAgSW5mICBJbmYgICAgICBJbmYgICBJbmYKOTAlICAgSW5mICBJbmYgIEluZiAgSW5mICBJbmYgIEluZiAgSW5mICAgICAgSW5mICAgSW5mCjEwMCUgIEluZiAgSW5mICBJbmYgIEluZiAgSW5mICBJbmYgIEluZiAgICAgIEluZiAgIEluZgoKLCAsIDQKCiAgICAgWywxXSBbLDJdIFssM10gWyw0XSBbLDVdIFssNl0gWyw3XSAgICAgWyw4XSAgWyw5XQoyMCUgIC1JbmYgLUluZiAtSW5mIC1JbmYgLUluZiAtSW5mIC1JbmYgICAgIC1JbmYgIC1JbmYKMzAlICAtSW5mIC1JbmYgLUluZiAtSW5mIC1JbmYgLUluZiAtSW5mICAgICAtSW5mICAtSW5mCjQwJSAgICAgMCAgICAwIC1JbmYgLUluZiAtSW5mIC1JbmYgICAgMCAgICAgLUluZiAgLUluZgo1MCUgICAgIDEgICAgMSAgICAxICAwLjUgIDEuMCAgMS4wICAgIDEgMS4wMDAwMDAgMS4wMDAKNjAlICAgICAyICAgIDIgICAgMiAgMS42ICAyLjEgIDIuMiAgICAyIDIuMTMzMzMzIDIuMTI1CjcwJSAgICAgMyAgICAzICAgIDMgIDIuNyAgSW5mICBJbmYgICAgMyAgICAgIEluZiAgIEluZgo4MCUgICBJbmYgIEluZiAgSW5mICBJbmYgIEluZiAgSW5mICBJbmYgICAgICBJbmYgICBJbmYKOTAlICAgSW5mICBJbmYgIEluZiAgSW5mICBJbmYgIEluZiAgSW5mICAgICAgSW5mICAgSW5mCjEwMCUgIEluZiAgSW5mICBJbmYgIEluZiAgSW5mICBJbmYgIEluZiAgICAgIEluZiAgIEluZgoKLCAsIDUKCiAgICAgWywxXSBbLDJdIFssM10gWyw0XSBbLDVdIFssNl0gWyw3XSAgICAgICBbLDhdICBbLDldCjIwJSAgLUluZiAtSW5mIC1JbmYgLUluZiAtSW5mIC1JbmYgLUluZiAgICAgICAtSW5mICAtSW5mCjMwJSAgLUluZiAtSW5mIC1JbmYgLUluZiAtSW5mIC1JbmYgLUluZiAgICAgICAtSW5mICAtSW5mCjQwJSAgICAgMCAgMC4wICAgIDAgLUluZiAgMC4xICAwLjAgIDAuMiAwLjA2NjY2NjY3IDAuMDc1CjUwJSAgICAgMSAgMS41ICAgIDEgIDEuMCAgMS41ICAxLjUgIDEuNSAxLjUwMDAwMDAwIDEuNTAwCjYwJSAgICAgMyAgMy4wICAgIDIgIDIuNCAgMi45ICAzLjAgIDIuOCAyLjkzMzMzMzMzIDIuOTI1CjcwJSAgICAgNCAgNC4wICAgIDQgIDMuOCAgSW5mICBJbmYgIEluZiAgICAgICAgSW5mICAgSW5mCjgwJSAgIEluZiAgSW5mICBJbmYgIEluZiAgSW5mICBJbmYgIEluZiAgICAgICAgSW5mICAgSW5mCjkwJSAgIEluZiAgSW5mICBJbmYgIEluZiAgSW5mICBJbmYgIEluZiAgICAgICAgSW5mICAgSW5mCjEwMCUgIEluZiAgSW5mICBJbmYgIEluZiAgSW5mICBJbmYgIEluZiAgICAgICAgSW5mICAgSW5mCgosICwgNgoKICAgICBbLDFdIFssMl0gWywzXSBbLDRdIFssNV0gWyw2XSBbLDddICAgICAgWyw4XSAgWyw5XQoyMCUgIC1JbmYgLUluZiAtSW5mIC1JbmYgLUluZiAtSW5mIC1JbmYgICAgICAtSW5mICAtSW5mCjMwJSAgLUluZiAtSW5mIC1JbmYgLUluZiAtSW5mIC1JbmYgLUluZiAgICAgIC1JbmYgIC1JbmYKNDAlICAgICAwICAgIDAgICAgMCAtSW5mICAwLjMgIDAuMiAgMC40IDAuMjY2NjY2NyAwLjI3NQo1MCUgICAgIDIgICAgMiAgICAxICAxLjUgIDIuMCAgMi4wICAyLjAgMi4wMDAwMDAwIDIuMDAwCjYwJSAgICAgNCAgICA0ICAgIDMgIDMuMiAgMy43ICAzLjggIDMuNiAzLjczMzMzMzMgMy43MjUKNzAlICAgICA1ICAgIDUgICAgNSAgNC45ICBJbmYgIEluZiAgSW5mICAgICAgIEluZiAgIEluZgo4MCUgICBJbmYgIEluZiAgSW5mICBJbmYgIEluZiAgSW5mICBJbmYgICAgICAgSW5mICAgSW5mCjkwJSAgIEluZiAgSW5mICBJbmYgIEluZiAgSW5mICBJbmYgIEluZiAgICAgICBJbmYgICBJbmYKMTAwJSAgSW5mICBJbmYgIEluZiAgSW5mICBJbmYgIEluZiAgSW5mICAgICAgIEluZiAgIEluZgoKPiB4IDwtIGMoLUluZiwgLUluZiwgSW5mLCBJbmYpCj4gbWVkaWFuKHgpClsxXSBOYU4KPiBxdWFudGlsZSh4KQogIDAlICAyNSUgIDUwJSAgNzUlIDEwMCUgCi1JbmYgLUluZiAgTmFOICBJbmYgIEluZiAKPiAjIyAxLjUuMSBoYWQgLUluZiBub3QgTmFOIGluIHNldmVyYWwgcGxhY2VzCj4gCj4gCj4gIyMgTkFzIGluIG1hdHJpeCBkaW1uYW1lcwo+IHogPC0gbWF0cml4KDE6OSwgMywgMykKPiBkaW1uYW1lcyh6KSA8LSBsaXN0KGMoIngiLCAieSIsIE5BKSwgYygxLCBOQSwgMykpCj4gegogICAgIDEgPE5BPiAzCnggICAgMSAgICA0IDcKeSAgICAyICAgIDUgOAo8TkE+IDMgICAgNiA5Cj4gIyMgTkFzIGluIGRpbW5hbWVzIG1pc2FsaWduZWQgd2hlbiBwcmludGluZyBpbiAxLjUuMQo+IAo+IAo+ICMjIHdlaWdodGVkIGFvdiAoUFIjMTkzMCkKPiByIDwtIGMoMTAsMjMsMjMsMjYsMTcsNSw1Myw1NSwzMiw0NiwxMCw4LDEwLDgsMjMsMCwzLDIyLDE1LDMyLDMpCj4gbiA8LSBjKDM5LDYyLDgxLDUxLDM5LDYsNzQsNzIsNTEsNzksMTMsMTYsMzAsMjgsNDUsNCwxMiw0MSwzMCw1MSw3KQo+IHRydCA8LSBmYWN0b3IocmVwKDE6NCxjKDUsNiw1LDUpKSkKPiBZIDwtIHIvbgo+IHogPC0gYW92KFkgfiB0cnQsIHdlaWdodHM9bikKPiAjIyAxLjUuMSBnYXZlIHVud2VpZ2h0ZWQgUlNTCj4gCj4gCj4gIyMgcmJpbmQgKFBSIzIyNjYpCj4gdGVzdCA8LSBhcy5kYXRhLmZyYW1lKG1hdHJpeCgxOjI1LCA1LCA1KSkKPiB0ZXN0MSA8LSBtYXRyaXgoLSgxOjEwKSwgMiwgNSkKPiByYmluZCh0ZXN0LCB0ZXN0MSkKICBWMSBWMiBWMyBWNCAgVjUKMSAgMSAgNiAxMSAxNiAgMjEKMiAgMiAgNyAxMiAxNyAgMjIKMyAgMyAgOCAxMyAxOCAgMjMKNCAgNCAgOSAxNCAxOSAgMjQKNSAgNSAxMCAxNSAyMCAgMjUKNiAtMSAtMyAtNSAtNyAgLTkKNyAtMiAtNCAtNiAtOCAtMTAKPiByYmluZCh0ZXN0MSwgdGVzdCkKICBWMSBWMiBWMyBWNCAgVjUKMSAtMSAtMyAtNSAtNyAgLTkKMiAtMiAtNCAtNiAtOCAtMTAKMyAgMSAgNiAxMSAxNiAgMjEKNCAgMiAgNyAxMiAxNyAgMjIKNSAgMyAgOCAxMyAxOCAgMjMKNiAgNCAgOSAxNCAxOSAgMjQKNyAgNSAxMCAxNSAyMCAgMjUKPiAjIyAxLjYuMSB0cmVhdGVkIG1hdHJpeCBhcyBhIHZlY3Rvci4KPiAKPiAKPiAjIyBlc2NhcGVzIGluIG5vbi1xdW90ZWQgcHJpbnRpbmcKPiB4IDwtICJcXGFiY1xcIgo+IG5hbWVzKHgpIDwtIDEKPiB4CiAgICAgICAgMSAKIlxcYWJjXFwiIAo+IHByaW50KHgsIHF1b3RlPUZBTFNFKQogICAgICAxIApcXGFiY1xcIAo+ICMjIDEuNi4yIGhhZCBsYWJlbCBtaXNhbGlnbmVkCj4gCj4gCj4gIyMgc3VtbWFyeSBvbiBkYXRhIGZyYW1lcyBjb250YWluaW5nIGRhdGEgZnJhbWVzIChQUiMxODkxKQo+IHggPC0gZGF0YS5mcmFtZSgxOjEwKQo+IHgkeiA8LSBkYXRhLmZyYW1lKHg9MToxMCx5eXk9MTE6MjApCj4gc3VtbWFyeSh4KQogICAgIFgxLjEwICAgICAgICAgICAgIHoueCAgICAgICAgICAgICB6Lnl5eSAgICAgCiBNaW4uICAgOiAxLjAwICAgTWluLiAgIDogMS4wMCAgICBNaW4uICAgOjExLjAwICAKIDFzdCBRdS46IDMuMjUgICAxc3QgUXUuOiAzLjI1ICAgIDFzdCBRdS46MTMuMjUgIAogTWVkaWFuIDogNS41MCAgIE1lZGlhbiA6IDUuNTAgICAgTWVkaWFuIDoxNS41MCAgCiBNZWFuICAgOiA1LjUwICAgTWVhbiAgIDogNS41MCAgICBNZWFuICAgOjE1LjUwICAKIDNyZCBRdS46IDcuNzUgICAzcmQgUXUuOiA3Ljc1ICAgIDNyZCBRdS46MTcuNzUgIAogTWF4LiAgIDoxMC4wMCAgIE1heC4gICA6MTAuMDAgICAgTWF4LiAgIDoyMC4wMCAgCj4gIyMgMS42LjIgaGFkIE5VTEwgbGFiZWxzIG9uIG91dHB1dCB3aXRoIHogY29sdW1ucyBzdGFja2VkLgo+IAo+IAo+ICMjIHJlLW9yZGVyaW5ncyBpbiB0ZXJtcy5mb3JtdWxhIChQUiMyMjA2KQo+IGZvcm0gPC0gZm9ybXVsYSh5IH4gYSArIGI6YyArIGQgKyBlICsgZTpkKQo+ICh0dCA8LSB0ZXJtcyhmb3JtKSkKeSB+IGEgKyBiOmMgKyBkICsgZSArIGU6ZAphdHRyKCwidmFyaWFibGVzIikKbGlzdCh5LCBhLCBiLCBjLCBkLCBlKQphdHRyKCwiZmFjdG9ycyIpCiAgYSBkIGUgYjpjIGQ6ZQp5IDAgMCAwICAgMCAgIDAKYSAxIDAgMCAgIDAgICAwCmIgMCAwIDAgICAyICAgMApjIDAgMCAwICAgMiAgIDAKZCAwIDEgMCAgIDAgICAxCmUgMCAwIDEgICAwICAgMQphdHRyKCwidGVybS5sYWJlbHMiKQpbMV0gImEiICAgImQiICAgImUiICAgImI6YyIgImQ6ZSIKYXR0cigsIm9yZGVyIikKWzFdIDEgMSAxIDIgMgphdHRyKCwiaW50ZXJjZXB0IikKWzFdIDEKYXR0cigsInJlc3BvbnNlIikKWzFdIDEKYXR0cigsIi5FbnZpcm9ubWVudCIpCjxlbnZpcm9ubWVudDogUl9HbG9iYWxFbnY+Cj4gKHR0MiA8LSB0ZXJtcyhmb3JtdWxhKHR0KSkpCnkgfiBhICsgYjpjICsgZCArIGUgKyBlOmQKYXR0cigsInZhcmlhYmxlcyIpCmxpc3QoeSwgYSwgYiwgYywgZCwgZSkKYXR0cigsImZhY3RvcnMiKQogIGEgZCBlIGI6YyBkOmUKeSAwIDAgMCAgIDAgICAwCmEgMSAwIDAgICAwICAgMApiIDAgMCAwICAgMiAgIDAKYyAwIDAgMCAgIDIgICAwCmQgMCAxIDAgICAwICAgMQplIDAgMCAxICAgMCAgIDEKYXR0cigsInRlcm0ubGFiZWxzIikKWzFdICJhIiAgICJkIiAgICJlIiAgICJiOmMiICJkOmUiCmF0dHIoLCJvcmRlciIpClsxXSAxIDEgMSAyIDIKYXR0cigsImludGVyY2VwdCIpClsxXSAxCmF0dHIoLCJyZXNwb25zZSIpClsxXSAxCmF0dHIoLCIuRW52aXJvbm1lbnQiKQo8ZW52aXJvbm1lbnQ6IFJfR2xvYmFsRW52Pgo+IHN0b3BpZm5vdChpZGVudGljYWwodHQsIHR0MikpCj4gdGVybXMoZGVsZXRlLnJlc3BvbnNlKHR0KSkKfmEgKyBiOmMgKyBkICsgZSArIGU6ZAphdHRyKCwidmFyaWFibGVzIikKbGlzdChhLCBiLCBjLCBkLCBlKQphdHRyKCwiZmFjdG9ycyIpCiAgYSBkIGUgYjpjIGQ6ZQphIDEgMCAwICAgMCAgIDAKYiAwIDAgMCAgIDIgICAwCmMgMCAwIDAgICAyICAgMApkIDAgMSAwICAgMCAgIDEKZSAwIDAgMSAgIDAgICAxCmF0dHIoLCJ0ZXJtLmxhYmVscyIpClsxXSAiYSIgICAiZCIgICAiZSIgICAiYjpjIiAiZDplIgphdHRyKCwib3JkZXIiKQpbMV0gMSAxIDEgMiAyCmF0dHIoLCJpbnRlcmNlcHQiKQpbMV0gMQphdHRyKCwicmVzcG9uc2UiKQpbMV0gMAphdHRyKCwiLkVudmlyb25tZW50IikKPGVudmlyb25tZW50OiBSX0dsb2JhbEVudj4KPiAjIyBib3RoIHR0IGFuZCB0dDIgcmUtb3JkZXJlZCB0aGUgZm9ybXVsYSA8IDEuNy4wCj4gIyMgbm93IHRyeSB3aXRoIGEgZG90Cj4gdGVybXMoYnJlYWtzIH4gLiwgZGF0YSA9IHdhcnBicmVha3MpCmJyZWFrcyB+IHdvb2wgKyB0ZW5zaW9uCmF0dHIoLCJ2YXJpYWJsZXMiKQpsaXN0KGJyZWFrcywgd29vbCwgdGVuc2lvbikKYXR0cigsImZhY3RvcnMiKQogICAgICAgIHdvb2wgdGVuc2lvbgpicmVha3MgICAgIDAgICAgICAgMAp3b29sICAgICAgIDEgICAgICAgMAp0ZW5zaW9uICAgIDAgICAgICAgMQphdHRyKCwidGVybS5sYWJlbHMiKQpbMV0gIndvb2wiICAgICJ0ZW5zaW9uIgphdHRyKCwib3JkZXIiKQpbMV0gMSAxCmF0dHIoLCJpbnRlcmNlcHQiKQpbMV0gMQphdHRyKCwicmVzcG9uc2UiKQpbMV0gMQphdHRyKCwiLkVudmlyb25tZW50IikKPGVudmlyb25tZW50OiBSX0dsb2JhbEVudj4KPiB0ZXJtcyhicmVha3MgfiAuIC0gdGVuc2lvbiwgZGF0YSA9IHdhcnBicmVha3MpCmJyZWFrcyB+ICh3b29sICsgdGVuc2lvbikgLSB0ZW5zaW9uCmF0dHIoLCJ2YXJpYWJsZXMiKQpsaXN0KGJyZWFrcywgd29vbCwgdGVuc2lvbikKYXR0cigsImZhY3RvcnMiKQogICAgICAgIHdvb2wKYnJlYWtzICAgICAwCndvb2wgICAgICAgMQp0ZW5zaW9uICAgIDAKYXR0cigsInRlcm0ubGFiZWxzIikKWzFdICJ3b29sIgphdHRyKCwib3JkZXIiKQpbMV0gMQphdHRyKCwiaW50ZXJjZXB0IikKWzFdIDEKYXR0cigsInJlc3BvbnNlIikKWzFdIDEKYXR0cigsIi5FbnZpcm9ubWVudCIpCjxlbnZpcm9ubWVudDogUl9HbG9iYWxFbnY+Cj4gdGVybXMoYnJlYWtzIH4gLiAtIHRlbnNpb24sIGRhdGEgPSB3YXJwYnJlYWtzLCBzaW1wbGlmeSA9IFRSVUUpCmJyZWFrcyB+IHdvb2wKYXR0cigsInZhcmlhYmxlcyIpCmxpc3QoYnJlYWtzLCB3b29sLCB0ZW5zaW9uKQphdHRyKCwiZmFjdG9ycyIpCiAgICAgICAgd29vbApicmVha3MgICAgIDAKd29vbCAgICAgICAxCnRlbnNpb24gICAgMAphdHRyKCwidGVybS5sYWJlbHMiKQpbMV0gIndvb2wiCmF0dHIoLCJvcmRlciIpClsxXSAxCmF0dHIoLCJpbnRlcmNlcHQiKQpbMV0gMQphdHRyKCwicmVzcG9uc2UiKQpbMV0gMQphdHRyKCwiLkVudmlyb25tZW50IikKPGVudmlyb25tZW50OiBSX0dsb2JhbEVudj4KPiB0ZXJtcyhicmVha3MgfiAuIF4yLCBkYXRhID0gd2FycGJyZWFrcykKYnJlYWtzIH4gKHdvb2wgKyB0ZW5zaW9uKV4yCmF0dHIoLCJ2YXJpYWJsZXMiKQpsaXN0KGJyZWFrcywgd29vbCwgdGVuc2lvbikKYXR0cigsImZhY3RvcnMiKQogICAgICAgIHdvb2wgdGVuc2lvbiB3b29sOnRlbnNpb24KYnJlYWtzICAgICAwICAgICAgIDAgICAgICAgICAgICAwCndvb2wgICAgICAgMSAgICAgICAwICAgICAgICAgICAgMQp0ZW5zaW9uICAgIDAgICAgICAgMSAgICAgICAgICAgIDEKYXR0cigsInRlcm0ubGFiZWxzIikKWzFdICJ3b29sIiAgICAgICAgICJ0ZW5zaW9uIiAgICAgICJ3b29sOnRlbnNpb24iCmF0dHIoLCJvcmRlciIpClsxXSAxIDEgMgphdHRyKCwiaW50ZXJjZXB0IikKWzFdIDEKYXR0cigsInJlc3BvbnNlIikKWzFdIDEKYXR0cigsIi5FbnZpcm9ubWVudCIpCjxlbnZpcm9ubWVudDogUl9HbG9iYWxFbnY+Cj4gdGVybXMoYnJlYWtzIH4gLiBeMiwgZGF0YSA9IHdhcnBicmVha3MsIHNpbXBsaWZ5ID0gVFJVRSkKYnJlYWtzIH4gd29vbCArIHRlbnNpb24gKyB3b29sOnRlbnNpb24KYXR0cigsInZhcmlhYmxlcyIpCmxpc3QoYnJlYWtzLCB3b29sLCB0ZW5zaW9uKQphdHRyKCwiZmFjdG9ycyIpCiAgICAgICAgd29vbCB0ZW5zaW9uIHdvb2w6dGVuc2lvbgpicmVha3MgICAgIDAgICAgICAgMCAgICAgICAgICAgIDAKd29vbCAgICAgICAxICAgICAgIDAgICAgICAgICAgICAxCnRlbnNpb24gICAgMCAgICAgICAxICAgICAgICAgICAgMQphdHRyKCwidGVybS5sYWJlbHMiKQpbMV0gIndvb2wiICAgICAgICAgInRlbnNpb24iICAgICAgIndvb2w6dGVuc2lvbiIKYXR0cigsIm9yZGVyIikKWzFdIDEgMSAyCmF0dHIoLCJpbnRlcmNlcHQiKQpbMV0gMQphdHRyKCwicmVzcG9uc2UiKQpbMV0gMQphdHRyKCwiLkVudmlyb25tZW50IikKPGVudmlyb25tZW50OiBSX0dsb2JhbEVudj4KPiAjIyAxLjYuMiBleHBhbmRlZCB0aGVzZSBmb3JtdWxhZSBvdXQgYXMgaW4gc2ltcGxpZnkgPSBUUlVFCj4gCj4gCj4gIyMgcHJpbnRpbmcgYXR0cmlidXRlcyAoUFIjMjUwNikKPiAoeCA8LSBzdHJ1Y3R1cmUoMTo0LCBvdGhlcj1hcy5mYWN0b3IoTEVUVEVSU1sxOjNdKSkpClsxXSAxIDIgMyA0CmF0dHIoLCJvdGhlciIpClsxXSBBIEIgQwpMZXZlbHM6IEEgQiBDCj4gIyMgPCAxLjcuMCBwcmludGVkIHRoZSBjb2RlcyBvZiB0aGUgZmFjdG9yIGF0dHJpYnV0ZQo+IAo+IAo+ICMjIGFkZCBsb2dpY2FsIG1hdHJpeCByZXBsYWNlbWVudCBpbmRleGluZyBmb3IgZGF0YSBmcmFtZXMKPiBURU1QIDwtIGRhdGEuZnJhbWUoVkFSMT1jKDEsMiwzLDQsNSksIFZBUjI9Yyg1LDQsMywyLDEpLCBWQVIzPWMoMSwxLDEsMSxOQSkpCj4gVEVNUFssYygxLDMpXVtURU1QWyxjKDEsMyldPT0xICYgIWlzLm5hKFRFTVBbLGMoMSwzKV0pXSA8IC0xMApbMV0gRkFMU0UgRkFMU0UgRkFMU0UgRkFMU0UgRkFMU0UKPiBURU1QCiAgVkFSMSBWQVIyIFZBUjMKMSAgICAxICAgIDUgICAgMQoyICAgIDIgICAgNCAgICAxCjMgICAgMyAgICAzICAgIDEKNCAgICA0ICAgIDIgICAgMQo1ICAgIDUgICAgMSAgIE5BCj4gIyMKPiAKPiAjIyBtb3ZlZCBmcm9tIHJlZy1wbG90LlIgYXMgZXhhY3Qgb3V0cHV0IGRlcGVuZHMgb24gcm91bmRpbmcgZXJyb3IKPiAjIyBQUiAzOTAgKGF4aXMgZm9yIHNtYWxsIHJhbmdlcykKPiAKPiByZWxyYW5nZSA8LSBmdW5jdGlvbih4KSB7CisgICAgICMjIFRoZSByZWxhdGl2ZSByYW5nZSBpbiBFUFMgdW5pdHMKKyAgICAgciA8LSByYW5nZSh4KQorICAgICBkaWZmKHIpL21heChhYnMocikpLy5NYWNoaW5lJGRvdWJsZS5lcHMKKyB9Cj4gCj4geCA8LSBjKDAuMTIzNDU2Nzg5MTIzNDU2NzgsCisgICAgICAgIDAuMTIzNDU2Nzg5MTIzNDU2NzksCisgICAgICAgIDAuMTIzNDU2Nzg5MTIzNDU2NzYpCj4gIyByZWxyYW5nZSh4KSAjIyAxLjAxMjUsIGJ1dCBkZXBlbmRzIG9uIHN0cnRvZAo+IHBsb3QoeCkgIyBgZXh0cmEgaG9yaXpvbnRhbCcgOyAgKy0gb2sgb24gU29sYXJpczsgbGFiZWwgb2ZmIG9uIExpbnV4Cj4gCj4geSA8LSBjKDAuOTk5OTU2MzI1NTM2MzM4Mzk3MzQxOCwKKyAgICAgICAgMC45OTk5NTYzMjU1MzYzMzg5NTI0NTMzLAorICAgICAgICAwLjk5OTk1NjMyNTUzNjMzODI4NjMxOTQpCj4gIyMgVGhlIHJlbGF0aXZlIHJhbmdlIG51bWJlcjoKPiAjIHJlbHJhbmdlKHkpICMjIDMuMDAwMTMxLCBidXQgZGVwZW5kcyBvbiBzdHJ0b2QKPiBwbG90KHkpIyBvbmNlIGdhdmUgaW5maW5pdGUgbG9vcCBvbiBTb2xhcmlzIFtUTF07ICB5LWF4aXMgdG9vIGxvbmcKPiAKPiAjIyBDb21tZW50czogVGhlIHdob2xlIGlzc3VlIHdhcyBmaW5hbGx5IGRlZmVycmVkIHRvIG1haW4vZ3JhcGhpY3MuYyBsLjE5NDQKPiAjIyAgICBlcnJvcigicmVsYXRpdmUgcmFuZ2Ugb2YgdmFsdWVzIGlzIHRvbyBzbWFsbCB0byBjb21wdXRlIGFjY3VyYXRlbHkiKTsKPiAjIyB3aGljaCBpcyBub3Qgb2theS4KPiAKPiBzZXQuc2VlZCgxMDEpCj4gcGFyKG1mcm93ID0gYygzLDMpKQo+IGZvcihqLmZhYyBpbiAxZS0xMiogYygxMCwgMSwgLjcsIC4zLCAuMiwgLjEsIC4wNSwgLjAzLCAuMDEpKSB7CisgIyMgICAgICAgICAgID09PT0KKyAgICAgI3NldC5zZWVkKDEwMSkgIyBvciBkb24ndAorICAgICB4IDwtIHBpICsgaml0dGVyKG51bWVyaWMoMTAxKSwgZiA9IGouZmFjKQorICAgICBycnR4dCA8LSBwYXN0ZSgicmVsLnJhbmdlID0iLCBmb3JtYXRDKHJlbHJhbmdlKHgpLCBkaWcgPSA0KSwiKiBFUFMiKQorICAgICBjYXQoImouZiA9ICIsIGZvcm1hdChqLmZhYyksIiA7ICAiLCBycnR4dCwiXG4iLHNlcD0iIikKKyAgICAgcGxvdCh4LCB0eXBlID0gImwiLCBtYWluID0gcnJ0eHQpCisgICAgIGNhdCgicGFyKFwidXNyXCIpWzM6NF06IiwgZm9ybWF0QyhwYXIoInVzciIpWzM6NF0sIHdpZCA9IDEwKSwiXG4iLAorICAgICAgICAgInBhcihcInlheHBcIikgOiAgICIsIGZvcm1hdEMocGFyKCJ5YXhwIiksIHdpZCA9IDEwKSwiXG5cbiIsIHNlcD0iIikKKyB9CmouZiA9IDFlLTExIDsgIHJlbC5yYW5nZSA9IDU1My45ICogRVBTCnBhcigidXNyIilbMzo0XTogICAgIDMuMTQyICAgICAzLjE0MgpwYXIoInlheHAiKSA6ICAgICAgICAzLjE0MiAgICAgMy4xNDIgICAgICAgICAzCgpqLmYgPSAxZS0xMiA7ICByZWwucmFuZ2UgPSA1Ni4wMiAqIEVQUwpwYXIoInVzciIpWzM6NF06ICAgICAzLjE0MiAgICAgMy4xNDIKcGFyKCJ5YXhwIikgOiAgICAgICAgMy4xNDIgICAgIDMuMTQyICAgICAgICAgMwoKai5mID0gN2UtMTMgOyAgcmVsLnJhbmdlID0gMzkuNDcgKiBFUFMKcGFyKCJ1c3IiKVszOjRdOiAgICAgMy4xNDIgICAgIDMuMTQyCnBhcigieWF4cCIpIDogICAgICAgIDMuMTQyICAgICAzLjE0MiAgICAgICAgIDUKCmouZiA9IDNlLTEzIDsgIHJlbC5yYW5nZSA9IDE2LjU1ICogRVBTCnBhcigidXNyIilbMzo0XTogICAgIDMuMTQyICAgICAzLjE0MgpwYXIoInlheHAiKSA6ICAgICAgICAzLjE0MiAgICAgMy4xNDIgICAgICAgICAxCgpqLmYgPSAyZS0xMyA7ICByZWwucmFuZ2UgPSAxMS40NiAqIEVQUwpwYXIoInVzciIpWzM6NF06ICAgICAzLjEwOCAgICAgMy4xNzYKcGFyKCJ5YXhwIikgOiAgICAgICAgIDMuMTEgICAgICAzLjE3ICAgICAgICAgNgoKai5mID0gMWUtMTMgOyAgcmVsLnJhbmdlID0gNS4wOTMgKiBFUFMKcGFyKCJ1c3IiKVszOjRdOiAgICAgMy4xMDggICAgIDMuMTc2CnBhcigieWF4cCIpIDogICAgICAgICAzLjExICAgICAgMy4xNyAgICAgICAgIDYKCmouZiA9IDVlLTE0IDsgIHJlbC5yYW5nZSA9IDIuNTQ2ICogRVBTCnBhcigidXNyIilbMzo0XTogICAgIDMuMTA4ICAgICAzLjE3NgpwYXIoInlheHAiKSA6ICAgICAgICAgMy4xMSAgICAgIDMuMTcgICAgICAgICA2CgpqLmYgPSAzZS0xNCA7ICByZWwucmFuZ2UgPSAxLjI3MyAqIEVQUwpwYXIoInVzciIpWzM6NF06ICAgICAzLjEwOCAgICAgMy4xNzYKcGFyKCJ5YXhwIikgOiAgICAgICAgIDMuMTEgICAgICAzLjE3ICAgICAgICAgNgoKai5mID0gMWUtMTQgOyAgcmVsLnJhbmdlID0gICAgIDAgKiBFUFMKcGFyKCJ1c3IiKVszOjRdOiAgICAgMS43ODQgICAgIDQuNDk5CnBhcigieWF4cCIpIDogICAgICAgICAgICAyICAgICAgICAgNCAgICAgICAgIDQKCldhcm5pbmcgbWVzc2FnZToKSW4gcGxvdC53aW5kb3coLi4uKSA6CiAgYXhpcygyLCAqKTogcmFuZ2Ugb2YgdmFsdWVzICggICAgMCkgaXMgc21hbGwgd3J0IHxNfCA9ICAgICAgIDQgLS0+IG5vdCBwcmV0dHkoKQo+IHBhcihtZnJvdyA9IGMoMSwxKSkKPiAjIyBUaGUgd2FybmluZ3MgZnJvbSBpbnNpZGUgR1NjYWxlKCkgd2lsbCBkaWZmZXIgaW4gdGhlaXIgIHJlbHJhbmdlKCkgLi4uCj4gIyMgPj4gZG8gc2xvcHB5IHRlc3RpbmcKPiAjIyAyMDAzLTAyLTAzIGhvcGVmdWxseSBubyBtb3JlLiAgQkRSCj4gIyMgZW5kIG9mIFBSIDM5MAo+IAo+IAo+ICMjIHNjb3BpbmcgcnVsZXMgY2FsbGluZyBzdGVwIGluc2lkZSBhIGZ1bmN0aW9uCj4gImNlbWVudCIgPC0KKyAgICAgc3RydWN0dXJlKGxpc3QoeDEgPSBjKDcsIDEsIDExLCAxMSwgNywgMTEsIDMsIDEsIDIsIDIxLCAxLCAxMSwgMTApLAorICAgICAgICAgICAgICAgICAgICB4MiA9IGMoMjYsIDI5LCA1NiwgMzEsIDUyLCA1NSwgNzEsIDMxLCA1NCwgNDcsIDQwLCA2NiwgNjgpLAorICAgICAgICAgICAgICAgICAgICB4MyA9IGMoNiwgMTUsIDgsIDgsIDYsIDksIDE3LCAyMiwgMTgsIDQsIDIzLCA5LCA4KSwKKyAgICAgICAgICAgICAgICAgICAgeDQgPSBjKDYwLCA1MiwgMjAsIDQ3LCAzMywgMjIsIDYsIDQ0LCAyMiwgMjYsIDM0LCAxMiwgMTIpLAorICAgICAgICAgICAgICAgICAgICB5ID0gYyg3OC41LCA3NC4zLCAxMDQuMywgODcuNiwgOTUuOSwgMTA5LjIsIDEwMi43LCA3Mi41LAorICAgICAgICAgICAgICAgICAgICA5My4xLCAxMTUuOSwgODMuOCwgMTEzLjMsIDEwOS40KSksCisgICAgICAgICAgICAgICBuYW1lcyA9IGMoIngxIiwgIngyIiwgIngzIiwgIng0IiwgInkiKSwgY2xhc3MgPSAiZGF0YS5mcmFtZSIsCisgICAgICAgICAgICAgICByb3cubmFtZXMgPSAxOjEzKQo+IHRlc3RzdGVwIDwtIGZ1bmN0aW9uKGZvcm11bGEsIGRhdGEpCisgeworICAgICBkMiA8LSBkYXRhCisgICAgIGZpdCA8LSBsbShmb3JtdWxhLCBkYXRhPWQyKQorICAgICBzdGVwKGZpdCkKKyB9Cj4gdGVzdHN0ZXAoZm9ybXVsYSh5IH4gLiksIGNlbWVudCkKU3RhcnQ6ICBBSUM9MjYuOTQKeSB+IHgxICsgeDIgKyB4MyArIHg0CgogICAgICAgRGYgU3VtIG9mIFNxICAgIFJTUyAgICBBSUMKLSB4MyAgICAxICAgIDAuMTA5MSA0Ny45NzMgMjQuOTc0Ci0geDQgICAgMSAgICAwLjI0NzAgNDguMTExIDI1LjAxMQotIHgyICAgIDEgICAgMi45NzI1IDUwLjgzNiAyNS43MjgKPG5vbmU+ICAgICAgICAgICAgICA0Ny44NjQgMjYuOTQ0Ci0geDEgICAgMSAgIDI1Ljk1MDkgNzMuODE1IDMwLjU3NgoKU3RlcDogIEFJQz0yNC45Nwp5IH4geDEgKyB4MiArIHg0CgogICAgICAgRGYgU3VtIG9mIFNxICAgIFJTUyAgICBBSUMKPG5vbmU+ICAgICAgICAgICAgICAgNDcuOTcgMjQuOTc0Ci0geDQgICAgMSAgICAgIDkuOTMgIDU3LjkwIDI1LjQyMAotIHgyICAgIDEgICAgIDI2Ljc5ICA3NC43NiAyOC43NDIKLSB4MSAgICAxICAgIDgyMC45MSA4NjguODggNjAuNjI5CgpDYWxsOgpsbShmb3JtdWxhID0geSB+IHgxICsgeDIgKyB4NCwgZGF0YSA9IGQyKQoKQ29lZmZpY2llbnRzOgooSW50ZXJjZXB0KSAgICAgICAgICAgeDEgICAgICAgICAgIHgyICAgICAgICAgICB4NCAgCiAgICA3MS42NDgzICAgICAgIDEuNDUxOSAgICAgICAwLjQxNjEgICAgICAtMC4yMzY1ICAKCj4gIyMgZmFpbGVkIGluIDEuNi4yCj4gCj4gc3RyKGFycmF5KDEpKSMgbm90IGEgc2NhbGFyCiBudW0gWzEoMWQpXSAxCj4gCj4gCj4gIyMgbmEucHJpbnQ9IiIgc2hvdWxkbid0IGFwcGx5IHRvIChkaW0pbmFtZXMhCj4gKHRmIDwtIHRhYmxlKGZmIDwtIGZhY3RvcihjKDE6MixOQSwyKSwgZXhjbHVkZT1OVUxMKSkpCgogICAxICAgIDIgPE5BPiAKICAgMSAgICAyICAgIDEgCj4gaWRlbnRpY2FsKGxldmVscyhmZiksIGRpbW5hbWVzKHRmKVtbMV1dKQpbMV0gVFJVRQo+IHN0cihsZXZlbHMoZmYpKQogY2hyIFsxOjNdICIxIiAiMiIgTkEKPiAjIyBub3QgcXVpdGUgb2sgcHJldmlvdXMgdG8gMS43LjAKPiAKPiAKPiAjIyBQUiMzMDU4ICBwcmludGluZyB3aXRoIG5hLnByaW50IGFuZCByaWdodD1UUlVFCj4gYSA8LSBtYXRyaXgoIGMoTkEsICJhIiwgImIiLCAiMTAiLAorICAgICAgICAgICAgICAgIE5BLCBOQSwgICJkIiwgIjEyIiwKKyAgICAgICAgICAgICAgICBOQSwgTkEsICBOQSwgICIxNCIpLAorICAgICAgICAgICAgIGJ5cm93PVQsIG5jb2w9NCApCj4gcHJpbnQoYSwgcmlnaHQ9VFJVRSwgbmEucHJpbnQ9IiAiKQogICAgIFssMV0gWywyXSBbLDNdIFssNF0KWzEsXSAgICAgICAiYSIgICJiIiAiMTAiClsyLF0gICAgICAgICAgICAiZCIgIjEyIgpbMyxdICAgICAgICAgICAgICAgICIxNCIKPiBwcmludChhLCByaWdodD1UUlVFLCBuYS5wcmludD0iLS0tLSIpCiAgICAgWywxXSBbLDJdIFssM10gWyw0XQpbMSxdIC0tLS0gICJhIiAgImIiICIxMCIKWzIsXSAtLS0tIC0tLS0gICJkIiAiMTIiClszLF0gLS0tLSAtLS0tIC0tLS0gIjE0Igo+ICMjIG1pc2FsaWduZWQgaW4gMS43LjAKPiAKPiAKPiAjIyBhc3NpZ25pbmcgZmFjdG9ycyB0byBkaW1uYW1lcwo+IEEgPC0gbWF0cml4KDE6NCwgMikKPiBhYSA8LSBmYWN0b3IobGV0dGVyc1sxOjJdKQo+IGRpbW5hbWVzKEEpIDwtIGxpc3QoYWEsIE5VTEwpCj4gQQogIFssMV0gWywyXQphICAgIDEgICAgMwpiICAgIDIgICAgNAo+IGRpbW5hbWVzKEEpCltbMV1dClsxXSAiYSIgImIiCgpbWzJdXQpOVUxMCgo+ICMjIDEuNy4wIGdhdmUgaW50ZXJuYWwgY29kZXMgYXMgZGlzcGxheSBhbmQgZGltbmFtZXMoKQo+ICMjIDEuNy4xYmV0YSBnYXZlIE5BcyB2aWEgZGltbmFtZXMoKQo+ICMjIDEuOC4wIGNvbnZlcnRzIGZhY3RvcnMgdG8gY2hhcmFjdGVyCj4gCj4gCj4gIyMgd2lzaGxpc3QgUFIjMjc3NjogYWxpYXNlZCBjb2VmcyBpbiBsbS9nbG0KPiBzZXQuc2VlZCgxMjMpCj4geDIgPC0geDEgPC0gMToxMAo+IHgzIDwtIDAuMSooMToxMCleMgo+IHkgPC0geDEgKyBybm9ybSgxMCkKPiAoZml0IDwtIGxtKHkgfiB4MSArIHgyICsgeDMpKQoKQ2FsbDoKbG0oZm9ybXVsYSA9IHkgfiB4MSArIHgyICsgeDMpCgpDb2VmZmljaWVudHM6CihJbnRlcmNlcHQpICAgICAgICAgICB4MSAgICAgICAgICAgeDIgICAgICAgICAgIHgzICAKICAgICAxLjQ3MTkgICAgICAgMC41ODY3ICAgICAgICAgICBOQSAgICAgICAwLjI1ODcgIAoKPiBzdW1tYXJ5KGZpdCwgY29yID0gVFJVRSkKCkNhbGw6CmxtKGZvcm11bGEgPSB5IH4geDEgKyB4MiArIHgzKQoKUmVzaWR1YWxzOgogICAgTWluICAgICAgMVEgIE1lZGlhbiAgICAgIDNRICAgICBNYXggCi0xLjA1NzIgLTAuNDgzNiAgMC4wNzk5ICAwLjQ0MjQgIDEuMjY5OSAKCkNvZWZmaWNpZW50czogKDEgbm90IGRlZmluZWQgYmVjYXVzZSBvZiBzaW5ndWxhcml0aWVzKQogICAgICAgICAgICBFc3RpbWF0ZSBTdGQuIEVycm9yIHQgdmFsdWUgUHIoPnx0fCkKKEludGVyY2VwdCkgICAxLjQ3MTkgICAgIDAuOTQ4NCAgIDEuNTUyICAgIDAuMTY1CngxICAgICAgICAgICAgMC41ODY3ICAgICAwLjM5NjEgICAxLjQ4MSAgICAwLjE4Mgp4MiAgICAgICAgICAgICAgICBOQSAgICAgICAgIE5BICAgICAgTkEgICAgICAgTkEKeDMgICAgICAgICAgICAwLjI1ODcgICAgIDAuMzUwOSAgIDAuNzM3ICAgIDAuNDg1CgpSZXNpZHVhbCBzdGFuZGFyZCBlcnJvcjogMC44MDYzIG9uIDcgZGVncmVlcyBvZiBmcmVlZG9tCk11bHRpcGxlIFItc3F1YXJlZDogIDAuOTMyNiwJQWRqdXN0ZWQgUi1zcXVhcmVkOiAgMC45MTM0IApGLXN0YXRpc3RpYzogNDguNDMgb24gMiBhbmQgNyBERiwgIHAtdmFsdWU6IDcuOTQ2ZS0wNQoKQ29ycmVsYXRpb24gb2YgQ29lZmZpY2llbnRzOgogICAoSW50ZXJjZXB0KSB4MSAgIAp4MSAtMC45MSAgICAgICAgICAgIAp4MyAgMC44MSAgICAgICAtMC45NwoKPiAoZml0IDwtIGdsbSh5IH4geDEgKyB4MiArIHgzKSkKCkNhbGw6ICBnbG0oZm9ybXVsYSA9IHkgfiB4MSArIHgyICsgeDMpCgpDb2VmZmljaWVudHM6CihJbnRlcmNlcHQpICAgICAgICAgICB4MSAgICAgICAgICAgeDIgICAgICAgICAgIHgzICAKICAgICAxLjQ3MTkgICAgICAgMC41ODY3ICAgICAgICAgICBOQSAgICAgICAwLjI1ODcgIAoKRGVncmVlcyBvZiBGcmVlZG9tOiA5IFRvdGFsIChpLmUuIE51bGwpOyAgNyBSZXNpZHVhbApOdWxsIERldmlhbmNlOgkgICAgNjcuNTMgClJlc2lkdWFsIERldmlhbmNlOiA0LjU1MSAJQUlDOiAyOC41MQo+IHN1bW1hcnkoZml0LCBjb3IgPSBUUlVFKQoKQ2FsbDoKZ2xtKGZvcm11bGEgPSB5IH4geDEgKyB4MiArIHgzKQoKRGV2aWFuY2UgUmVzaWR1YWxzOiAKICAgIE1pbiAgICAgICAxUSAgIE1lZGlhbiAgICAgICAzUSAgICAgIE1heCAgCi0xLjA1NzIgIC0wLjQ4MzYgICAwLjA3OTkgICAwLjQ0MjQgICAxLjI2OTkgIAoKQ29lZmZpY2llbnRzOiAoMSBub3QgZGVmaW5lZCBiZWNhdXNlIG9mIHNpbmd1bGFyaXRpZXMpCiAgICAgICAgICAgIEVzdGltYXRlIFN0ZC4gRXJyb3IgdCB2YWx1ZSBQcig+fHR8KQooSW50ZXJjZXB0KSAgIDEuNDcxOSAgICAgMC45NDg0ICAgMS41NTIgICAgMC4xNjUKeDEgICAgICAgICAgICAwLjU4NjcgICAgIDAuMzk2MSAgIDEuNDgxICAgIDAuMTgyCngyICAgICAgICAgICAgICAgIE5BICAgICAgICAgTkEgICAgICBOQSAgICAgICBOQQp4MyAgICAgICAgICAgIDAuMjU4NyAgICAgMC4zNTA5ICAgMC43MzcgICAgMC40ODUKCihEaXNwZXJzaW9uIHBhcmFtZXRlciBmb3IgZ2F1c3NpYW4gZmFtaWx5IHRha2VuIHRvIGJlIDAuNjUwMTc1MykKCiAgICBOdWxsIGRldmlhbmNlOiA2Ny41MzE2ICBvbiA5ICBkZWdyZWVzIG9mIGZyZWVkb20KUmVzaWR1YWwgZGV2aWFuY2U6ICA0LjU1MTIgIG9uIDcgIGRlZ3JlZXMgb2YgZnJlZWRvbQpBSUM6IDI4LjUwNwoKTnVtYmVyIG9mIEZpc2hlciBTY29yaW5nIGl0ZXJhdGlvbnM6IDIKCkNvcnJlbGF0aW9uIG9mIENvZWZmaWNpZW50czoKICAgKEludGVyY2VwdCkgeDEgICAKeDEgLTAuOTEgICAgICAgICAgICAKeDMgIDAuODEgICAgICAgLTAuOTcKCj4gIyMgb21pdHRlZCBzaWxlbnRseSBpbiBzdW1tYXJ5LmdsbSA8IDEuOC4wCj4gCj4gCj4gIyMgbGlzdC1saWtlIGluZGV4aW5nIG9mIGRhdGEgZnJhbWVzIHdpdGggZHJvcCBzcGVjaWZpZWQKPiB3b21lblsiaGVpZ2h0Il0KICAgaGVpZ2h0CjEgICAgICA1OAoyICAgICAgNTkKMyAgICAgIDYwCjQgICAgICA2MQo1ICAgICAgNjIKNiAgICAgIDYzCjcgICAgICA2NAo4ICAgICAgNjUKOSAgICAgIDY2CjEwICAgICA2NwoxMSAgICAgNjgKMTIgICAgIDY5CjEzICAgICA3MAoxNCAgICAgNzEKMTUgICAgIDcyCj4gd29tZW5bImhlaWdodCIsIGRyb3AgPSBGQUxTRV0gICMgc2FtZSB3aXRoIGEgd2FybmluZwogICBoZWlnaHQKMSAgICAgIDU4CjIgICAgICA1OQozICAgICAgNjAKNCAgICAgIDYxCjUgICAgICA2Mgo2ICAgICAgNjMKNyAgICAgIDY0CjggICAgICA2NQo5ICAgICAgNjYKMTAgICAgIDY3CjExICAgICA2OAoxMiAgICAgNjkKMTMgICAgIDcwCjE0ICAgICA3MQoxNSAgICAgNzIKV2FybmluZyBtZXNzYWdlOgpJbiBgWy5kYXRhLmZyYW1lYCh3b21lbiwgImhlaWdodCIsIGRyb3AgPSBGQUxTRSkgOgogICdkcm9wJyBhcmd1bWVudCB3aWxsIGJlIGlnbm9yZWQKPiB3b21lblsiaGVpZ2h0IiwgZHJvcCA9IFRSVUVdICAgIyBkaXR0bwogICBoZWlnaHQKMSAgICAgIDU4CjIgICAgICA1OQozICAgICAgNjAKNCAgICAgIDYxCjUgICAgICA2Mgo2ICAgICAgNjMKNyAgICAgIDY0CjggICAgICA2NQo5ICAgICAgNjYKMTAgICAgIDY3CjExICAgICA2OAoxMiAgICAgNjkKMTMgICAgIDcwCjE0ICAgICA3MQoxNSAgICAgNzIKV2FybmluZyBtZXNzYWdlOgpJbiBgWy5kYXRhLmZyYW1lYCh3b21lbiwgImhlaWdodCIsIGRyb3AgPSBUUlVFKSA6CiAgJ2Ryb3AnIGFyZ3VtZW50IHdpbGwgYmUgaWdub3JlZAo+IHdvbWVuWywiaGVpZ2h0IiwgZHJvcCA9IEZBTFNFXSAjIG5vIHdhcm5pbmcKICAgaGVpZ2h0CjEgICAgICA1OAoyICAgICAgNTkKMyAgICAgIDYwCjQgICAgICA2MQo1ICAgICAgNjIKNiAgICAgIDYzCjcgICAgICA2NAo4ICAgICAgNjUKOSAgICAgIDY2CjEwICAgICA2NwoxMSAgICAgNjgKMTIgICAgIDY5CjEzICAgICA3MAoxNCAgICAgNzEKMTUgICAgIDcyCj4gd29tZW5bLCJoZWlnaHQiLCBkcm9wID0gVFJVRV0gICMgYSB2ZWN0b3IKIFsxXSA1OCA1OSA2MCA2MSA2MiA2MyA2NCA2NSA2NiA2NyA2OCA2OSA3MCA3MSA3Mgo+ICMjIHNlY29uZCBhbmQgdGhpcmQgd2VyZSBpbnRlcnByZXRlZCBhcyB3b21lblsiaGVpZ2h0IiwgLCBkcm9wXSBpbiAxLjcueAo+IAo+IAo+ICMjIG1ha2UubmFtZXMKPiBtYWtlLm5hbWVzKCIiKQpbMV0gIlgiCj4gbWFrZS5uYW1lcygiLmFhIikKWzFdICIuYWEiCj4gIyMgd2FzICJYLmFhIiBpbiAxLjcuMQo+IG1ha2UubmFtZXMoIi4yIikKWzFdICJYLjIiCj4gbWFrZS5uYW1lcygiLjJhIikgIyBub3QgdmFsaWQgaW4gUgpbMV0gIlguMmEiCj4gbWFrZS5uYW1lcyhhcy5jaGFyYWN0ZXIoTkEpKQpbMV0gIk5BLiIKPiAjIwo+IAo+IAo+ICMjIHN0cmFuZ2UgbmFtZXMgaW4gZGF0YSBmcmFtZXMKPiBhcy5kYXRhLmZyYW1lKGxpc3Qocm93Lm5hbWVzPTE3KSkgICMgMCByb3dzIGluIDEuNy4xCiAgcm93Lm5hbWVzCjEgICAgICAgIDE3Cj4gYWEgPC0gZGF0YS5mcmFtZShhYT0xOjMpCj4gYWFbWyJyb3cubmFtZXMiXV0gPC0gNDo2Cj4gYWEgIyBmaW5lIGluIDEuNy4xCiAgYWEgcm93Lm5hbWVzCjEgIDEgICAgICAgICA0CjIgIDIgICAgICAgICA1CjMgIDMgICAgICAgICA2Cj4gQSA8LSBtYXRyaXgoNDo5LCAzLCAyKQo+IGNvbG5hbWVzKEEpIDwtIGxldHRlcnNbMToyXQo+IGFhW1sicm93Lm5hbWVzIl1dIDwtIEEKPiBhYQogIGFhIHJvdy5uYW1lcy5hIHJvdy5uYW1lcy5iCjEgIDEgICAgICAgICAgIDQgICAgICAgICAgIDcKMiAgMiAgICAgICAgICAgNSAgICAgICAgICAgOAozICAzICAgICAgICAgICA2ICAgICAgICAgICA5Cj4gIyMgd3JvbmcgcHJpbnRlZCBuYW1lcyBpbiAxLjcuMQo+IAo+ICMjIGFzc2lnbmluZyB0byBOVUxMIC0tLSBub3cgY29uc2lzdGVudGx5IGJlaGF2ZXMgYXMgaWYgYXNzaWduaW5nIHRvIGxpc3QoKSAhCj4gYSA8LSBOVUxMCj4gYVtbImEiXV0gPC0gMQo+IGEKJGEKWzFdIDEKCj4gYSA8LSBOVUxMCj4gYVtbImEiXV0gPC0gInNvbWV0aGluZyIKPiBhCiRhClsxXSAic29tZXRoaW5nIgoKPiBhIDwtIE5VTEwKPiBhW1siYSJdXSA8LSAxOjMKPiBhCiRhClsxXSAxIDIgMwoKPiAjIyBMYXN0IHdhcyBhbiBlcnJvciBpbiAxLjcuMQo+IAo+IAo+ICMjIGV4YW1wbGVzIG9mIDAtcmFuayBtb2RlbHMsIHNvbWUgZW1wdHksIHNvbWUgcmFuay1kZWZpY2llbnQKPiB5IDwtIHJub3JtKDEwKQo+IHggPC0gcmVwKDAsIDEwKQo+IChmaXQgPC0gbG0oeSB+IDApKQoKQ2FsbDoKbG0oZm9ybXVsYSA9IHkgfiAwKQoKTm8gY29lZmZpY2llbnRzCgo+IHN1bW1hcnkoZml0KQoKQ2FsbDoKbG0oZm9ybXVsYSA9IHkgfiAwKQoKUmVzaWR1YWxzOgogICAgIE1pbiAgICAgICAxUSAgIE1lZGlhbiAgICAgICAzUSAgICAgIE1heCAKLTEuMzY5MTkgLTAuMjEwNzMgIDAuMDA4NDAgIDAuMDg0MzcgIDAuNTUyOTIgCgpObyBDb2VmZmljaWVudHMKClJlc2lkdWFsIHN0YW5kYXJkIGVycm9yOiAwLjUyMzUgb24gMTAgZGVncmVlcyBvZiBmcmVlZG9tCgo+IGFub3ZhKGZpdCkKQW5hbHlzaXMgb2YgVmFyaWFuY2UgVGFibGUKClJlc3BvbnNlOiB5CiAgICAgICAgICBEZiBTdW0gU3EgTWVhbiBTcSBGIHZhbHVlIFByKD5GKQpSZXNpZHVhbHMgMTAgMi43NDA0IDAuMjc0MDQgICAgICAgICAgICAgICAKPiBwcmVkaWN0KGZpdCkKIDEgIDIgIDMgIDQgIDUgIDYgIDcgIDggIDkgMTAgCiAwICAwICAwICAwICAwICAwICAwICAwICAwICAwIAo+IHByZWRpY3QoZml0LCBkYXRhLmZyYW1lKHg9eCksIHNlPVRSVUUpCiRmaXQKIDEgIDIgIDMgIDQgIDUgIDYgIDcgIDggIDkgMTAgCiAwICAwICAwICAwICAwICAwICAwICAwICAwICAwIAoKJHNlLmZpdAogWzFdIDAgMCAwIDAgMCAwIDAgMCAwIDAKCiRkZgpbMV0gMTAKCiRyZXNpZHVhbC5zY2FsZQpbMV0gMC41MjM0ODQzCgo+IHByZWRpY3QoZml0LCB0eXBlPSJ0ZXJtcyIsIHNlPVRSVUUpCiRmaXQKICAgICAKIFsxLF0KIFsyLF0KIFszLF0KIFs0LF0KIFs1LF0KIFs2LF0KIFs3LF0KIFs4LF0KIFs5LF0KWzEwLF0KYXR0cigsImNvbnN0YW50IikKWzFdIDAKCiRzZS5maXQKICAgICAKIFsxLF0KIFsyLF0KIFszLF0KIFs0LF0KIFs1LF0KIFs2LF0KIFs3LF0KIFs4LF0KIFs5LF0KWzEwLF0KCiRkZgpbMV0gMTAKCiRyZXNpZHVhbC5zY2FsZQpbMV0gMC41MjM0ODQzCgo+IHZhcmlhYmxlLm5hbWVzKGZpdCkgI3Nob3VsZCBiZSBlbXB0eQpjaGFyYWN0ZXIoMCkKPiBtb2RlbC5tYXRyaXgoZml0KQogIAoxIAoyIAozIAo0IAo1IAo2IAo3IAo4IAo5IAoxMAphdHRyKCwiYXNzaWduIikKaW50ZWdlcigwKQo+IAo+IChmaXQgPC0gbG0oeSB+IHggKyAwKSkKCkNhbGw6CmxtKGZvcm11bGEgPSB5IH4geCArIDApCgpDb2VmZmljaWVudHM6CiB4ICAKTkEgIAoKPiBzdW1tYXJ5KGZpdCkKCkNhbGw6CmxtKGZvcm11bGEgPSB5IH4geCArIDApCgpSZXNpZHVhbHM6CiAgICAgTWluICAgICAgIDFRICAgTWVkaWFuICAgICAgIDNRICAgICAgTWF4IAotMS4zNjkxOSAtMC4yMTA3MyAgMC4wMDg0MCAgMC4wODQzNyAgMC41NTI5MiAKCkNvZWZmaWNpZW50czogKDEgbm90IGRlZmluZWQgYmVjYXVzZSBvZiBzaW5ndWxhcml0aWVzKQogIEVzdGltYXRlIFN0ZC4gRXJyb3IgdCB2YWx1ZSBQcig+fHR8KQp4ICAgICAgIE5BICAgICAgICAgTkEgICAgICBOQSAgICAgICBOQQoKUmVzaWR1YWwgc3RhbmRhcmQgZXJyb3I6IDAuNTIzNSBvbiAxMCBkZWdyZWVzIG9mIGZyZWVkb20KCj4gYW5vdmEoZml0KQpBbmFseXNpcyBvZiBWYXJpYW5jZSBUYWJsZQoKUmVzcG9uc2U6IHkKICAgICAgICAgIERmIFN1bSBTcSBNZWFuIFNxIEYgdmFsdWUgUHIoPkYpClJlc2lkdWFscyAxMCAyLjc0MDQgMC4yNzQwNCAgICAgICAgICAgICAgIAo+IHByZWRpY3QoZml0KQogMSAgMiAgMyAgNCAgNSAgNiAgNyAgOCAgOSAxMCAKIDAgIDAgIDAgIDAgIDAgIDAgIDAgIDAgIDAgIDAgCj4gcHJlZGljdChmaXQsIGRhdGEuZnJhbWUoeD14KSwgc2U9VFJVRSkKJGZpdAogMSAgMiAgMyAgNCAgNSAgNiAgNyAgOCAgOSAxMCAKIDAgIDAgIDAgIDAgIDAgIDAgIDAgIDAgIDAgIDAgCgokc2UuZml0CiBbMV0gMCAwIDAgMCAwIDAgMCAwIDAgMAoKJGRmClsxXSAxMAoKJHJlc2lkdWFsLnNjYWxlClsxXSAwLjUyMzQ4NDMKCldhcm5pbmcgbWVzc2FnZToKSW4gcHJlZGljdC5sbShmaXQsIGRhdGEuZnJhbWUoeCA9IHgpLCBzZSA9IFRSVUUpIDoKICBwcmVkaWN0aW9uIGZyb20gYSByYW5rLWRlZmljaWVudCBmaXQgbWF5IGJlIG1pc2xlYWRpbmcKPiBwcmVkaWN0KGZpdCwgdHlwZT0idGVybXMiLCBzZT1UUlVFKQokZml0CiAgIHgKMSAgMAoyICAwCjMgIDAKNCAgMAo1ICAwCjYgIDAKNyAgMAo4ICAwCjkgIDAKMTAgMAphdHRyKCwiY29uc3RhbnQiKQpbMV0gMAoKJHNlLmZpdAogICB4CjEgIDAKMiAgMAozICAwCjQgIDAKNSAgMAo2ICAwCjcgIDAKOCAgMAo5ICAwCjEwIDAKCiRkZgpbMV0gMTAKCiRyZXNpZHVhbC5zY2FsZQpbMV0gMC41MjM0ODQzCgo+IHZhcmlhYmxlLm5hbWVzKGZpdCkgI3Nob3VsZCBiZSBlbXB0eQpjaGFyYWN0ZXIoMCkKPiBtb2RlbC5tYXRyaXgoZml0KQogICB4CjEgIDAKMiAgMAozICAwCjQgIDAKNSAgMAo2ICAwCjcgIDAKOCAgMAo5ICAwCjEwIDAKYXR0cigsImFzc2lnbiIpClsxXSAxCj4gCj4gKGZpdCA8LSBnbG0oeSB+IDApKQoKQ2FsbDogIGdsbShmb3JtdWxhID0geSB+IDApCgpObyBjb2VmZmljaWVudHMKCgpEZWdyZWVzIG9mIEZyZWVkb206IDEwIFRvdGFsIChpLmUuIE51bGwpOyAgMTAgUmVzaWR1YWwKTnVsbCBEZXZpYW5jZToJICAgIDIuNzQgClJlc2lkdWFsIERldmlhbmNlOiAyLjc0IAlBSUM6IDE3LjQzCj4gc3VtbWFyeShmaXQpCgpDYWxsOgpnbG0oZm9ybXVsYSA9IHkgfiAwKQoKRGV2aWFuY2UgUmVzaWR1YWxzOiAKICAgICBNaW4gICAgICAgIDFRICAgIE1lZGlhbiAgICAgICAgM1EgICAgICAgTWF4ICAKLTEuMzY5MTkgIC0wLjIxMDczICAgMC4wMDg0MCAgIDAuMDg0MzcgICAwLjU1MjkyICAKCk5vIENvZWZmaWNpZW50cwoKKERpc3BlcnNpb24gcGFyYW1ldGVyIGZvciBnYXVzc2lhbiBmYW1pbHkgdGFrZW4gdG8gYmUgMC4yNzQwMzU4KQoKICAgIE51bGwgZGV2aWFuY2U6IDIuNzQwNCAgb24gMTAgIGRlZ3JlZXMgb2YgZnJlZWRvbQpSZXNpZHVhbCBkZXZpYW5jZTogMi43NDA0ICBvbiAxMCAgZGVncmVlcyBvZiBmcmVlZG9tCkFJQzogMTcuNDM0CgpOdW1iZXIgb2YgRmlzaGVyIFNjb3JpbmcgaXRlcmF0aW9uczogMAoKPiBhbm92YShmaXQpCkFuYWx5c2lzIG9mIERldmlhbmNlIFRhYmxlCgpNb2RlbDogZ2F1c3NpYW4sIGxpbms6IGlkZW50aXR5CgpSZXNwb25zZTogeQoKVGVybXMgYWRkZWQgc2VxdWVudGlhbGx5IChmaXJzdCB0byBsYXN0KQoKCiAgICAgRGYgRGV2aWFuY2UgUmVzaWQuIERmIFJlc2lkLiBEZXYKTlVMTCAgICAgICAgICAgICAgICAgICAgMTAgICAgIDIuNzQwNAo+IHByZWRpY3QoZml0KQogMSAgMiAgMyAgNCAgNSAgNiAgNyAgOCAgOSAxMCAKIDAgIDAgIDAgIDAgIDAgIDAgIDAgIDAgIDAgIDAgCj4gcHJlZGljdChmaXQsIGRhdGEuZnJhbWUoeD14KSwgc2U9VFJVRSkKJGZpdAogMSAgMiAgMyAgNCAgNSAgNiAgNyAgOCAgOSAxMCAKIDAgIDAgIDAgIDAgIDAgIDAgIDAgIDAgIDAgIDAgCgokc2UuZml0CiBbMV0gMCAwIDAgMCAwIDAgMCAwIDAgMAoKJHJlc2lkdWFsLnNjYWxlClsxXSAwLjUyMzQ4NDMKCj4gcHJlZGljdChmaXQsIHR5cGU9InRlcm1zIiwgc2U9VFJVRSkKJGZpdAogICAgIAogWzEsXQogWzIsXQogWzMsXQogWzQsXQogWzUsXQogWzYsXQogWzcsXQogWzgsXQogWzksXQpbMTAsXQphdHRyKCwiY29uc3RhbnQiKQpbMV0gMAoKJHNlLmZpdAogICAgIAogWzEsXQogWzIsXQogWzMsXQogWzQsXQogWzUsXQogWzYsXQogWzcsXQogWzgsXQogWzksXQpbMTAsXQoKJHJlc2lkdWFsLnNjYWxlClsxXSAwLjUyMzQ4NDMKCj4gCj4gKGZpdCA8LSBnbG0oeSB+IHggKyAwKSkKCkNhbGw6ICBnbG0oZm9ybXVsYSA9IHkgfiB4ICsgMCkKCkNvZWZmaWNpZW50czoKIHggIApOQSAgCgpEZWdyZWVzIG9mIEZyZWVkb206IDEwIFRvdGFsIChpLmUuIE51bGwpOyAgMTAgUmVzaWR1YWwKTnVsbCBEZXZpYW5jZToJICAgIDIuNzQgClJlc2lkdWFsIERldmlhbmNlOiAyLjc0IAlBSUM6IDE3LjQzCj4gc3VtbWFyeShmaXQpCgpDYWxsOgpnbG0oZm9ybXVsYSA9IHkgfiB4ICsgMCkKCkRldmlhbmNlIFJlc2lkdWFsczogCiAgICAgTWluICAgICAgICAxUSAgICBNZWRpYW4gICAgICAgIDNRICAgICAgIE1heCAgCi0xLjM2OTE5ICAtMC4yMTA3MyAgIDAuMDA4NDAgICAwLjA4NDM3ICAgMC41NTI5MiAgCgpDb2VmZmljaWVudHM6ICgxIG5vdCBkZWZpbmVkIGJlY2F1c2Ugb2Ygc2luZ3VsYXJpdGllcykKICBFc3RpbWF0ZSBTdGQuIEVycm9yIHQgdmFsdWUgUHIoPnx0fCkKeCAgICAgICBOQSAgICAgICAgIE5BICAgICAgTkEgICAgICAgTkEKCihEaXNwZXJzaW9uIHBhcmFtZXRlciBmb3IgZ2F1c3NpYW4gZmFtaWx5IHRha2VuIHRvIGJlIDAuMjc0MDM1OCkKCiAgICBOdWxsIGRldmlhbmNlOiAyLjc0MDQgIG9uIDEwICBkZWdyZWVzIG9mIGZyZWVkb20KUmVzaWR1YWwgZGV2aWFuY2U6IDIuNzQwNCAgb24gMTAgIGRlZ3JlZXMgb2YgZnJlZWRvbQpBSUM6IDE3LjQzNAoKTnVtYmVyIG9mIEZpc2hlciBTY29yaW5nIGl0ZXJhdGlvbnM6IDIKCj4gYW5vdmEoZml0KQpBbmFseXNpcyBvZiBEZXZpYW5jZSBUYWJsZQoKTW9kZWw6IGdhdXNzaWFuLCBsaW5rOiBpZGVudGl0eQoKUmVzcG9uc2U6IHkKClRlcm1zIGFkZGVkIHNlcXVlbnRpYWxseSAoZmlyc3QgdG8gbGFzdCkKCgogICAgIERmIERldmlhbmNlIFJlc2lkLiBEZiBSZXNpZC4gRGV2Ck5VTEwgICAgICAgICAgICAgICAgICAgIDEwICAgICAyLjc0MDQKeCAgICAgMCAgICAgICAgMCAgICAgICAgMTAgICAgIDIuNzQwNAo+IHByZWRpY3QoZml0KQogMSAgMiAgMyAgNCAgNSAgNiAgNyAgOCAgOSAxMCAKIDAgIDAgIDAgIDAgIDAgIDAgIDAgIDAgIDAgIDAgCj4gcHJlZGljdChmaXQsIGRhdGEuZnJhbWUoeD14KSwgc2U9VFJVRSkKJGZpdAogMSAgMiAgMyAgNCAgNSAgNiAgNyAgOCAgOSAxMCAKIDAgIDAgIDAgIDAgIDAgIDAgIDAgIDAgIDAgIDAgCgokc2UuZml0CiBbMV0gMCAwIDAgMCAwIDAgMCAwIDAgMAoKJHJlc2lkdWFsLnNjYWxlClsxXSAwLjUyMzQ4NDMKCldhcm5pbmcgbWVzc2FnZToKSW4gcHJlZGljdC5sbShvYmplY3QsIG5ld2RhdGEsIHNlLmZpdCwgc2NhbGUgPSByZXNpZHVhbC5zY2FsZSwgdHlwZSA9IGlmICh0eXBlID09ICA6CiAgcHJlZGljdGlvbiBmcm9tIGEgcmFuay1kZWZpY2llbnQgZml0IG1heSBiZSBtaXNsZWFkaW5nCj4gcHJlZGljdChmaXQsIHR5cGU9InRlcm1zIiwgc2U9VFJVRSkKJGZpdAogICB4CjEgIDAKMiAgMAozICAwCjQgIDAKNSAgMAo2ICAwCjcgIDAKOCAgMAo5ICAwCjEwIDAKYXR0cigsImNvbnN0YW50IikKWzFdIDAKCiRzZS5maXQKICAgeAoxICAwCjIgIDAKMyAgMAo0ICAwCjUgIDAKNiAgMAo3ICAwCjggIDAKOSAgMAoxMCAwCgokcmVzaWR1YWwuc2NhbGUKWzFdIDAuNTIzNDg0MwoKPiAjIyBMb3RzIG9mIHByb2JsZW1zIGluIDEuNy54Cj4gCj4gCj4gIyMgbG0uaW5mbHVlbmNlIG9uIGRlZmljaWVudCBsbSBtb2RlbHMKPiBkYXQgPC0gZGF0YS5mcmFtZSh5PXJub3JtKDEwKSwgeDE9MToxMCwgeDI9MToxMCwgeDMgPSAwLCB3dD1jKDAscmVwKDEsIDkpKSwKKyAgICAgICAgICAgICAgICAgICByb3cubmFtZXM9bGV0dGVyc1sxOjEwXSkKPiBkYXRbMywgMV0gPC0gZGF0WzQsIDJdIDwtIE5BCj4gbG0uaW5mbHVlbmNlKGxtKHkgfiB4MSArIHgyLCBkYXRhPWRhdCwgd2VpZ2h0cz13dCwgbmEuYWN0aW9uPW5hLm9taXQpKQokaGF0CiAgICAgICAgYiAgICAgICAgIGUgICAgICAgICBmICAgICAgICAgZyAgICAgICAgIGggICAgICAgICBpICAgICAgICAgaiAKMC42NTQ2MDUzIDAuMjEwNTI2MyAwLjE1NDYwNTMgMC4xNDQ3MzY4IDAuMTgwOTIxMSAwLjI2MzE1NzkgMC4zOTE0NDc0IAoKJGNvZWZmaWNpZW50cwogIChJbnRlcmNlcHQpICAgICAgICAgICB4MQpiICAxLjM5MTM4Nzg0IC0wLjE3MzI2NzE2NQplIC0wLjcwOTMwOTcyICAwLjA2ODY0Mjg3NwpmICAwLjEyMDM5ODA5IC0wLjAwNzgxODA1OApnICAwLjAxOTcxNTk1ICAwLjAwMTMxNDM5NwpoICAwLjAzMjcyNjM3IC0wLjAxNzMyNTcyNgppIC0wLjM2OTI5NTI2ICAwLjA5MjMyMzgxNApqICAwLjMzODYxMzExIC0wLjA3MDE2MzA3NgoKJHNpZ21hCiAgICAgICAgYiAgICAgICAgIGUgICAgICAgICBmICAgICAgICAgZyAgICAgICAgIGggICAgICAgICBpICAgICAgICAgaiAKMC45NjQxNDQxIDAuNzQzNDU5OCAxLjA0OTY3MjcgMS4wNjgxOTA4IDEuMDM4OTU4NiAwLjc2MzM3NDggMS4wMDkzMTg3IAoKJHd0LnJlcwogICAgICAgICBiICAgICAgICAgIGUgICAgICAgICAgZiAgICAgICAgICBnICAgICAgICAgIGggICAgICAgICAgaSAgICAgICAgICBqIAogMC41NTEzMDQ2IC0xLjM3Mjg1NzUgIDAuNDAxODQ4MiAgMC4xNzA4NzE2IC0wLjQ3OTM0NTEgIDEuMjkyNTMzNCAtMC41NjQzNTUyIAoKPiBsbS5pbmZsdWVuY2UobG0oeSB+IHgxICsgeDIsIGRhdGE9ZGF0LCB3ZWlnaHRzPXd0LCBuYS5hY3Rpb249bmEuZXhjbHVkZSkpCiRoYXQKICAgICAgICBiICAgICAgICAgZSAgICAgICAgIGMgICAgICAgICBkICAgICAgICAgZiAgICAgICAgIGcgICAgICAgICBoICAgICAgICAgaSAKMC42NTQ2MDUzIDAuMjEwNTI2MyAwLjAwMDAwMDAgMC4wMDAwMDAwIDAuMTU0NjA1MyAwLjE0NDczNjggMC4xODA5MjExIDAuMjYzMTU3OSAKICAgICAgICBqIAowLjM5MTQ0NzQgCgokY29lZmZpY2llbnRzCiAgKEludGVyY2VwdCkgICAgICAgICAgIHgxCmIgIDEuMzkxMzg3ODQgLTAuMTczMjY3MTY1CmUgLTAuNzA5MzA5NzIgIDAuMDY4NjQyODc3CmMgIDAuMDAwMDAwMDAgIDAuMDAwMDAwMDAwCmQgIDAuMDAwMDAwMDAgIDAuMDAwMDAwMDAwCmYgIDAuMTIwMzk4MDkgLTAuMDA3ODE4MDU4CmcgIDAuMDE5NzE1OTUgIDAuMDAxMzE0Mzk3CmggIDAuMDMyNzI2MzcgLTAuMDE3MzI1NzI2CmkgLTAuMzY5Mjk1MjYgIDAuMDkyMzIzODE0CmogIDAuMzM4NjEzMTEgLTAuMDcwMTYzMDc2Cgokc2lnbWEKICAgICAgICBiICAgICAgICAgZSAgICAgICAgIGMgICAgICAgICBkICAgICAgICAgZiAgICAgICAgIGcgICAgICAgICBoICAgICAgICAgaSAKMC45NjQxNDQxIDAuNzQzNDU5OCAwLjk1ODk4NTQgMC45NTg5ODU0IDEuMDQ5NjcyNyAxLjA2ODE5MDggMS4wMzg5NTg2IDAuNzYzMzc0OCAKICAgICAgICBqIAoxLjAwOTMxODcgCgokd3QucmVzCiAgICAgICAgIGIgICAgICAgICAgZSAgICAgICAgICBjICAgICAgICAgIGQgICAgICAgICAgZiAgICAgICAgICBnICAgICAgICAgIGggCiAwLjU1MTMwNDYgLTEuMzcyODU3NSAgICAgICAgIE5BICAgICAgICAgTkEgIDAuNDAxODQ4MiAgMC4xNzA4NzE2IC0wLjQ3OTM0NTEgCiAgICAgICAgIGkgICAgICAgICAgaiAKIDEuMjkyNTMzNCAtMC41NjQzNTUyIAoKPiBsbS5pbmZsdWVuY2UobG0oeSB+IDAsIGRhdGE9ZGF0LCB3ZWlnaHRzPXd0LCBuYS5hY3Rpb249bmEub21pdCkpCiRoYXQKYiBkIGUgZiBnIGggaSBqIAowIDAgMCAwIDAgMCAwIDAgCgokY29lZmZpY2llbnRzCiAKYgpkCmUKZgpnCmgKaQpqCgokc2lnbWEKICAgICAgICBiICAgICAgICAgZCAgICAgICAgIGUgICAgICAgICBmICAgICAgICAgZyAgICAgICAgIGggICAgICAgICBpICAgICAgICAgaiAKMC45MzY2Mjg5IDAuOTM2NjI4OSAwLjkzNjYyODkgMC45MzY2Mjg5IDAuOTM2NjI4OSAwLjkzNjYyODkgMC45MzY2Mjg5IDAuOTM2NjI4OSAKCiR3dC5yZXMKICAgICAgICAgYiAgICAgICAgICBkICAgICAgICAgIGUgICAgICAgICAgZiAgICAgICAgICBnICAgICAgICAgIGggICAgICAgICAgaSAKIDAuMzYwNDU0NyAgMC4xMTQ2ODEyIC0xLjE0MjY3NTMgIDAuNzcyMzc0NCAgMC42ODE3NDE5ICAwLjE3MTg2OTMgIDIuMDg0MDkxOCAKICAgICAgICAgaiAKIDAuMzY3NTQ3MyAKCj4gcHJpbnQod2lkdGggPSA5OSwKKyBsbS5pbmZsdWVuY2UobG0oeSB+IDAsIGRhdGE9ZGF0LCB3ZWlnaHRzPXd0LCBuYS5hY3Rpb249bmEuZXhjbHVkZSkpCisgKSA7IHN0b3BpZm5vdChnZXRPcHRpb24oIndpZHRoIikgPT0gODApCiRoYXQKYiBkIGMgZSBmIGcgaCBpIGogCjAgMCAwIDAgMCAwIDAgMCAwIAoKJGNvZWZmaWNpZW50cwogCmIKZApjCmUKZgpnCmgKaQpqCgokc2lnbWEKICAgICAgICBiICAgICAgICAgZCAgICAgICAgIGMgICAgICAgICBlICAgICAgICAgZiAgICAgICAgIGcgICAgICAgICBoICAgICAgICAgaSAgICAgICAgIGogCjAuOTM2NjI4OSAwLjkzNjYyODkgMC45MzY2Mjg5IDAuOTM2NjI4OSAwLjkzNjYyODkgMC45MzY2Mjg5IDAuOTM2NjI4OSAwLjkzNjYyODkgMC45MzY2Mjg5IAoKJHd0LnJlcwogICAgICAgICBiICAgICAgICAgIGQgICAgICAgICAgYyAgICAgICAgICBlICAgICAgICAgIGYgICAgICAgICAgZyAgICAgICAgICBoICAgICAgICAgIGkgICAgICAgICAgaiAKIDAuMzYwNDU0NyAgMC4xMTQ2ODEyICAgICAgICAgTkEgLTEuMTQyNjc1MyAgMC43NzIzNzQ0ICAwLjY4MTc0MTkgIDAuMTcxODY5MyAgMi4wODQwOTE4ICAwLjM2NzU0NzMgCgo+IGxtLmluZmx1ZW5jZShsbSh5IH4gMCArIHgzLCBkYXRhPWRhdCwgd2VpZ2h0cz13dCwgbmEuYWN0aW9uPW5hLm9taXQpKQokaGF0CmIgZCBlIGYgZyBoIGkgaiAKMCAwIDAgMCAwIDAgMCAwIAoKJGNvZWZmaWNpZW50cwogCmIKZAplCmYKZwpoCmkKagoKJHNpZ21hCiAgICAgICAgYiAgICAgICAgIGQgICAgICAgICBlICAgICAgICAgZiAgICAgICAgIGcgICAgICAgICBoICAgICAgICAgaSAgICAgICAgIGogCjAuOTM2NjI4OSAwLjkzNjYyODkgMC45MzY2Mjg5IDAuOTM2NjI4OSAwLjkzNjYyODkgMC45MzY2Mjg5IDAuOTM2NjI4OSAwLjkzNjYyODkgCgokd3QucmVzCiAgICAgICAgIGIgICAgICAgICAgZCAgICAgICAgICBlICAgICAgICAgIGYgICAgICAgICAgZyAgICAgICAgICBoICAgICAgICAgIGkgCiAwLjM2MDQ1NDcgIDAuMTE0NjgxMiAtMS4xNDI2NzUzICAwLjc3MjM3NDQgIDAuNjgxNzQxOSAgMC4xNzE4NjkzICAyLjA4NDA5MTggCiAgICAgICAgIGogCiAwLjM2NzU0NzMgCgo+IGxtLmluZmx1ZW5jZShsbSh5IH4gMCArIHgzLCBkYXRhPWRhdCwgd2VpZ2h0cz13dCwgbmEuYWN0aW9uPW5hLmV4Y2x1ZGUpKQokaGF0CmIgZCBjIGUgZiBnIGggaSBqIAowIDAgMCAwIDAgMCAwIDAgMCAKCiRjb2VmZmljaWVudHMKIApiCmQKYwplCmYKZwpoCmkKagoKJHNpZ21hCiAgICAgICAgYiAgICAgICAgIGQgICAgICAgICBjICAgICAgICAgZSAgICAgICAgIGYgICAgICAgICBnICAgICAgICAgaCAgICAgICAgIGkgCjAuOTM2NjI4OSAwLjkzNjYyODkgMC45MzY2Mjg5IDAuOTM2NjI4OSAwLjkzNjYyODkgMC45MzY2Mjg5IDAuOTM2NjI4OSAwLjkzNjYyODkgCiAgICAgICAgaiAKMC45MzY2Mjg5IAoKJHd0LnJlcwogICAgICAgICBiICAgICAgICAgIGQgICAgICAgICAgYyAgICAgICAgICBlICAgICAgICAgIGYgICAgICAgICAgZyAgICAgICAgICBoIAogMC4zNjA0NTQ3ICAwLjExNDY4MTIgICAgICAgICBOQSAtMS4xNDI2NzUzICAwLjc3MjM3NDQgIDAuNjgxNzQxOSAgMC4xNzE4NjkzIAogICAgICAgICBpICAgICAgICAgIGogCiAyLjA4NDA5MTggIDAuMzY3NTQ3MyAKCj4gbG0uaW5mbHVlbmNlKGxtKHkgfiAwLCBkYXRhPWRhdCwgbmEuYWN0aW9uPW5hLmV4Y2x1ZGUpKQokaGF0CmEgYiBjIGQgZSBmIGcgaCBpIGogCjAgMCAwIDAgMCAwIDAgMCAwIDAgCgokY29lZmZpY2llbnRzCiAKYQpiCmMKZAplCmYKZwpoCmkKagoKJHNpZ21hCiAgICAgICAgYSAgICAgICAgIGIgICAgICAgICBjICAgICAgICAgZCAgICAgICAgIGUgICAgICAgICBmICAgICAgICAgZyAgICAgICAgIGggCjAuODg2MDkxNiAwLjg4NjA5MTYgMC44ODYwOTE2IDAuODg2MDkxNiAwLjg4NjA5MTYgMC44ODYwOTE2IDAuODg2MDkxNiAwLjg4NjA5MTYgCiAgICAgICAgaSAgICAgICAgIGogCjAuODg2MDkxNiAwLjg4NjA5MTYgCgokd3QucmVzCiAgICAgICAgIGEgICAgICAgICAgYiAgICAgICAgICBjICAgICAgICAgIGQgICAgICAgICAgZSAgICAgICAgICBmICAgICAgICAgIGcgCiAwLjIxOTYyODAgIDAuMzYwNDU0NyAgICAgICAgIE5BICAwLjExNDY4MTIgLTEuMTQyNjc1MyAgMC43NzIzNzQ0ICAwLjY4MTc0MTkgCiAgICAgICAgIGggICAgICAgICAgaSAgICAgICAgICBqIAogMC4xNzE4NjkzICAyLjA4NDA5MTggIDAuMzY3NTQ3MyAKCj4gIyMgbGFzdCB0aHJlZSBtaXNiZWhhdmVkIGluIDEuNy54LCBub25lIGhhZCBwcm9wZXIgbmFtZXMuCj4gCj4gCj4gIyMgbGVuZ3RoIG9mIHJlc3VsdHMgaW4gQVJNQWFjZiB3aGVuIGxhZy5tYXggaXMgdXNlZAo+IEFSTUFhY2YoYXI9YygxLjMsLTAuNiwgLTAuMiwgMC4xKSxsYWcubWF4PTEpICMgd2FzIDQgaW4gMS43LjEKICAgICAgICAwICAgICAgICAgMSAKMS4wMDAwMDAwIDAuNzY0NDA0NiAKPiBBUk1BYWNmKGFyPWMoMS4zLC0wLjYsIC0wLjIsIDAuMSksbGFnLm1heD0yKQogICAgICAgIDAgICAgICAgICAxICAgICAgICAgMiAKMS4wMDAwMDAwIDAuNzY0NDA0NiAwLjI2NzYwNTYgCj4gQVJNQWFjZihhcj1jKDEuMywtMC42LCAtMC4yLCAwLjEpLGxhZy5tYXg9MykKICAgICAgICAgMCAgICAgICAgICAxICAgICAgICAgIDIgICAgICAgICAgMyAKIDEuMDAwMDAwMCAgMC43NjQ0MDQ2ICAwLjI2NzYwNTYgLTAuMjM0MzE1MCAKPiBBUk1BYWNmKGFyPWMoMS4zLC0wLjYsIC0wLjIsIDAuMSksbGFnLm1heD00KQogICAgICAgICAwICAgICAgICAgIDEgICAgICAgICAgMiAgICAgICAgICAzICAgICAgICAgIDQgCiAxLjAwMDAwMDAgIDAuNzY0NDA0NiAgMC4yNjc2MDU2IC0wLjIzNDMxNTAgLTAuNTE4MDUzOCAKPiBBUk1BYWNmKGFyPWMoMS4zLC0wLjYsIC0wLjIsIDAuMSksbGFnLm1heD01KSAjIGZhaWxlZCBpbiAxLjcuMQogICAgICAgICAwICAgICAgICAgIDEgICAgICAgICAgMiAgICAgICAgICAzICAgICAgICAgIDQgICAgICAgICAgNSAKIDEuMDAwMDAwMCAgMC43NjQ0MDQ2ICAwLjI2NzYwNTYgLTAuMjM0MzE1MCAtMC41MTgwNTM4IC0wLjUwOTk2MTYgCj4gQVJNQWFjZihhcj1jKDEuMywtMC42LCAtMC4yLCAwLjEpLGxhZy5tYXg9NikKICAgICAgICAgMCAgICAgICAgICAxICAgICAgICAgIDIgICAgICAgICAgMyAgICAgICAgICA0ICAgICAgICAgIDUgICAgICAgICAgNiAKIDEuMDAwMDAwMCAgMC43NjQ0MDQ2ICAwLjI2NzYwNTYgLTAuMjM0MzE1MCAtMC41MTgwNTM4IC0wLjUwOTk2MTYgLTAuMjc4NDk0MiAKPiBBUk1BYWNmKGFyPWMoMS4zLC0wLjYsIC0wLjIsIDAuMSksbGFnLm1heD0xMCkKICAgICAgICAgMCAgICAgICAgICAxICAgICAgICAgIDIgICAgICAgICAgMyAgICAgICAgICA0ICAgICAgICAgIDUgICAgICAgICAgNiAKIDEuMDAwMDAwMCAgMC43NjQ0MDQ2ICAwLjI2NzYwNTYgLTAuMjM0MzE1MCAtMC41MTgwNTM4IC0wLjUwOTk2MTYgLTAuMjc4NDk0MiAKICAgICAgICAgNyAgICAgICAgICA4ICAgICAgICAgIDkgICAgICAgICAxMCAKIDAuMDI0MTEzNyAgMC4yNDg2MzEzICAwLjMxMzQ1NTEgIDAuMjI1NjQwOCAKPiAjIwo+IAo+IAo+ICMjIEluZGV4aW5nIG5vbi1leGlzdGVudCBjb2x1bW5zIGluIGEgZGF0YSBmcmFtZQo+IHggPC0gZGF0YS5mcmFtZShhID0gMSwgYiA9IDIpCj4gdHJ5KHhbYygiYSIsICJjIildKQpFcnJvciBpbiBgWy5kYXRhLmZyYW1lYCh4LCBjKCJhIiwgImMiKSkgOiB1bmRlZmluZWQgY29sdW1ucyBzZWxlY3RlZAo+IHRyeSh4WywgYygiYSIsICJjIildKQpFcnJvciBpbiBgWy5kYXRhLmZyYW1lYCh4LCAsIGMoImEiLCAiYyIpKSA6IHVuZGVmaW5lZCBjb2x1bW5zIHNlbGVjdGVkCj4gdHJ5KHhbMSwgYygiYSIsICJjIildKQpFcnJvciBpbiBgWy5kYXRhLmZyYW1lYCh4LCAxLCBjKCJhIiwgImMiKSkgOiB1bmRlZmluZWQgY29sdW1ucyBzZWxlY3RlZAo+ICMjIFNlY29uZCBzdWNjZWVkZWQsIHRoaXJkIGdhdmUgdW5pZm9ybWF0aXZlIGVycm9yIG1lc3NhZ2UgaW4gMS43LnguCj4gCj4gCj4gIyMgbWV0aG9kcyhjbGFzcyA9ICkgd2l0aCBuYW1lc3BhY2VzLCAuUHJpbWl0aXZlcyBldGMgKG1hbnkgbWlzc2luZyBpbiAxLjcueCk6Cj4gbWV0aDJnZW4gPC0gZnVuY3Rpb24oY2wpCisgICAgIG5vcXVvdGUoc3ViKHBhc3RlKCJcXC4iLGNsLCIkIixzZXA9IiIpLCIiLCBjKC5TM21ldGhvZHMoY2xhc3MgPSBjbCkpKSkKPiBtZXRoMmdlbigiZGF0YS5mcmFtZSIpCiBbMV0gJDwtICAgICAgICAgICBNYXRoICAgICAgICAgIE9wcyAgICAgICAgICAgU3VtbWFyeSAgICAgICBbICAgICAgICAgICAgCiBbNl0gWzwtICAgICAgICAgICBbWyAgICAgICAgICAgIFtbPC0gICAgICAgICAgYWdncmVnYXRlICAgICBhbnlEdXBsaWNhdGVkClsxMV0gYW55TkEgICAgICAgICBhcy5kYXRhLmZyYW1lIGFzLmxpc3QgICAgICAgYXMubWF0cml4ICAgICBhcy52ZWN0b3IgICAgClsxNl0gYnkgICAgICAgICAgICBjYmluZCAgICAgICAgIGRpbSAgICAgICAgICAgZGltbmFtZXMgICAgICBkaW1uYW1lczwtICAgClsyMV0gZHJvcGxldmVscyAgICBkdXBsaWNhdGVkICAgIGVkaXQgICAgICAgICAgZm9ybWF0ICAgICAgICBmb3JtdWxhICAgICAgClsyNl0gaGVhZCAgICAgICAgICBpcy5uYSAgICAgICAgIG1lcmdlICAgICAgICAgbmEuZXhjbHVkZSAgICBuYS5vbWl0ICAgICAgClszMV0gcGxvdCAgICAgICAgICBwcmludCAgICAgICAgIHByb21wdCAgICAgICAgcmJpbmQgICAgICAgICByb3cubmFtZXMgICAgClszNl0gcm93Lm5hbWVzPC0gICByb3dzdW0gICAgICAgIHNwbGl0ICAgICAgICAgc3BsaXQ8LSAgICAgICBzdGFjayAgICAgICAgCls0MV0gc3RyICAgICAgICAgICBzdWJzZXQgICAgICAgIHN1bW1hcnkgICAgICAgdCAgICAgICAgICAgICB0YWlsICAgICAgICAgCls0Nl0gdHJhbnNmb3JtICAgICB0eXBlLmNvbnZlcnQgIHVuaXF1ZSAgICAgICAgdW5zdGFjayAgICAgICB3aXRoaW4gICAgICAgCls1MV0geHRmcm0gICAgICAgIAo+IG1ldGgyZ2VuKCJkZW5kcm9ncmFtIikKIFsxXSBbWyAgICAgICAgICAgIGFzLmRlbmRyb2dyYW0gYXMuaGNsdXN0ICAgICBjb3BoZW5ldGljICAgIGN1dCAgICAgICAgICAKIFs2XSBsYWJlbHMgICAgICAgIG1lcmdlICAgICAgICAgbm9icyAgICAgICAgICBwbG90ICAgICAgICAgIHByaW50ICAgICAgICAKWzExXSByZW9yZGVyICAgICAgIHJldiAgICAgICAgICAgc3RyICAgICAgICAgIAo+ICMjIC0tPiB0aGUgb3V0cHV0IG1heSBuZWVkIHNvbWV3aGF0IGZyZXF1ZW50IHVwZGF0aW5nLi4KPiAKPiAKPiAjIyBzdWJzZXR0aW5nIGEgMUQgYXJyYXkgbG9zdCB0aGUgZGltZW5zaW9ucwo+IHggPC0gYXJyYXkoMTo1LCBkaW09Yyg1KSkKPiBkaW0oeCkKWzFdIDUKPiBkaW0oeFssIGRyb3A9VFJVRV0pClsxXSA1Cj4gZGltKHhbMjozXSkKWzFdIDIKPiBkaW0oeFsyXSkKTlVMTAo+IGRpbSh4WzIsIGRyb3A9RkFMU0VdKQpbMV0gMQo+IGRpbW5hbWVzKHgpIDwtIGxpc3Qoc29tZT1sZXR0ZXJzWzE6NV0pCj4geFtdCnNvbWUKYSBiIGMgZCBlIAoxIDIgMyA0IDUgCj4geFsyOjNdCnNvbWUKYiBjIAoyIDMgCj4geFsyXQpiIAoyIAo+IHhbMiwgZHJvcD1GQUxTRV0Kc29tZQpiIAoyIAo+ICMjIGJvdGggZGltIGFuZCBkaW1uYW1lcyBsb3N0IGluIDEuOC4wCj4gCj4gCj4gIyMgcHJpbnQuZGlzdCgpIGRpZG4ndCBzaG93IE5BJ3MgcHJpb3IgdG8gMS44LjEKPiB4IDwtIGNiaW5kKGMoMSxOQSwyLDMpLCBjKE5BLDIsTkEsMSkpCj4gKGQgPC0gZGlzdCh4KSkKICAgICAgICAgMSAgICAgICAgMiAgICAgICAgMwoyICAgICAgIE5BICAgICAgICAgICAgICAgICAgCjMgMS40MTQyMTQgICAgICAgTkEgICAgICAgICAKNCAyLjgyODQyNyAxLjQxNDIxNCAxLjQxNDIxNAo+IHByaW50KGQsIGRpYWcgPSBUUlVFKQogICAgICAgICAxICAgICAgICAyICAgICAgICAzICAgICAgICA0CjEgMC4wMDAwMDAgICAgICAgICAgICAgICAgICAgICAgICAgICAKMiAgICAgICBOQSAwLjAwMDAwMCAgICAgICAgICAgICAgICAgIAozIDEuNDE0MjE0ICAgICAgIE5BIDAuMDAwMDAwICAgICAgICAgCjQgMi44Mjg0MjcgMS40MTQyMTQgMS40MTQyMTQgMC4wMDAwMDAKPiAjIwo+IAo+IAo+ICMjIG9mZnNldHMgaW4gbW9kZWwgdGVybXMgd2hlcmUgc29tZXRpbWVzIG5vdCBkZWxldGVkIGNvcnJlY3RseQo+IGF0dHJpYnV0ZXModGVybXMofiBhICsgYiArIGE6YiArIG9mZnNldChjKSkpW2MoIm9mZnNldCIsICJ0ZXJtLmxhYmVscyIpXQokb2Zmc2V0ClsxXSAzCgokdGVybS5sYWJlbHMKWzFdICJhIiAgICJiIiAgICJhOmIiCgo+IGF0dHJpYnV0ZXModGVybXMoeSB+IGEgKyBiICsgYTpiICsgb2Zmc2V0KGMpKSlbYygib2Zmc2V0IiwgInRlcm0ubGFiZWxzIildCiRvZmZzZXQKWzFdIDQKCiR0ZXJtLmxhYmVscwpbMV0gImEiICAgImIiICAgImE6YiIKCj4gYXR0cmlidXRlcyh0ZXJtcyh+IG9mZnNldChjKSArIGEgKyBiICsgYTpiKSlbYygib2Zmc2V0IiwgInRlcm0ubGFiZWxzIildCiRvZmZzZXQKWzFdIDEKCiR0ZXJtLmxhYmVscwpbMV0gImEiICAgImIiICAgImE6YiIKCj4gYXR0cmlidXRlcyh0ZXJtcyh5IH4gb2Zmc2V0KGMpICsgYSArIGIgKyBhOmIpKVtjKCJvZmZzZXQiLCAidGVybS5sYWJlbHMiKV0KJG9mZnNldApbMV0gMgoKJHRlcm0ubGFiZWxzClsxXSAiYSIgICAiYiIgICAiYTpiIgoKPiAjIyBlcnJvcnMgcHJpb3IgdG8gMS44LjEKPiAKPiAKPiAjIyAwLWxldmVsIGZhY3RvcnMgZ2F2ZSBub25zZW5zaWNhbCBhbnN3ZXJzIGluIG1vZGVsLm1hdHJpeAo+IG0gPC0gbW9kZWwuZnJhbWUofngsIGRhdGEuZnJhbWUoeD1OQSksIG5hLmFjdGlvbj1uYS5wYXNzKQo+IG1vZGVsLm1hdHJpeCh+eCwgbSkKICAoSW50ZXJjZXB0KSB4VFJVRQoxICAgICAgICAgICAxICAgIE5BCmF0dHIoLCJhc3NpZ24iKQpbMV0gMCAxCmF0dHIoLCJjb250cmFzdHMiKQphdHRyKCwiY29udHJhc3RzIikkeApbMV0gImNvbnRyLnRyZWF0bWVudCIKCj4gbG0uZml0IDwtIGxtKHkgfiB4LCBkYXRhLmZyYW1lKHg9MToxMCwgeT0xOjEwKSkKPiB0cnkocHJlZGljdChsbS5maXQsIGRhdGEuZnJhbWUoeD1OQSkpKQpFcnJvciA6IHZhcmlhYmxlICd4JyB3YXMgZml0dGVkIHdpdGggdHlwZSAibnVtZXJpYyIgYnV0IHR5cGUgImxvZ2ljYWwiIHdhcyBzdXBwbGllZAo+ICMjIHdyb25nIGFuc3dlcnMgaW4gMS44LjAsIHJlZnVzZWQgdG8gcnVuIGluIDEuOC4xCj4gCj4gCj4gCj4gIyMgZmFpbHVyZSB0byBwcmludCBkYXRhIGZyYW1lIGNvbnRhaW5pbmcgYXJyYXlzCj4gIyMgcmFpc2VkIGJ5IEpvaG4gRm94IG9uIFItZGV2ZWwgb24gMjAwNC0wMS0wOAo+IHkxIDwtIGFycmF5KDE6MTAsIGRpbT0xMCkKPiB5MiA8LSBhcnJheSgxOjMwLCBkaW09YygxMCwzKSwgZGltbmFtZXM9bGlzdChOVUxMLCBsZXR0ZXJzWzE6M10pKQo+IHkzIDwtIGFycmF5KDE6NDAsIGRpbT1jKDEwLDIsMiksCisgICAgICAgICAgICAgZGltbmFtZXM9bGlzdChOVUxMLCBsZXR0ZXJzWzE6Ml0sIE5VTEwpKQo+IGRhdGEuZnJhbWUoeT15MSkKICAgIHkKMSAgIDEKMiAgIDIKMyAgIDMKNCAgIDQKNSAgIDUKNiAgIDYKNyAgIDcKOCAgIDgKOSAgIDkKMTAgMTAKPiBkYXRhLmZyYW1lKHk9eTIpCiAgIHkuYSB5LmIgeS5jCjEgICAgMSAgMTEgIDIxCjIgICAgMiAgMTIgIDIyCjMgICAgMyAgMTMgIDIzCjQgICAgNCAgMTQgIDI0CjUgICAgNSAgMTUgIDI1CjYgICAgNiAgMTYgIDI2CjcgICAgNyAgMTcgIDI3CjggICAgOCAgMTggIDI4CjkgICAgOSAgMTkgIDI5CjEwICAxMCAgMjAgIDMwCj4gZGF0YS5mcmFtZSh5PXkzKQogICB5LmEuMSB5LmIuMSB5LmEuMiB5LmIuMgoxICAgICAgMSAgICAxMSAgICAyMSAgICAzMQoyICAgICAgMiAgICAxMiAgICAyMiAgICAzMgozICAgICAgMyAgICAxMyAgICAyMyAgICAzMwo0ICAgICAgNCAgICAxNCAgICAyNCAgICAzNAo1ICAgICAgNSAgICAxNSAgICAyNSAgICAzNQo2ICAgICAgNiAgICAxNiAgICAyNiAgICAzNgo3ICAgICAgNyAgICAxNyAgICAyNyAgICAzNwo4ICAgICAgOCAgICAxOCAgICAyOCAgICAzOAo5ICAgICAgOSAgICAxOSAgICAyOSAgICAzOQoxMCAgICAxMCAgICAyMCAgICAzMCAgICA0MAo+IAo+IGFzLmRhdGEuZnJhbWUoeTEpCiAgIHkxCjEgICAxCjIgICAyCjMgICAzCjQgICA0CjUgICA1CjYgICA2CjcgICA3CjggICA4CjkgICA5CjEwIDEwCj4gYXMuZGF0YS5mcmFtZSh5MikKICAgIGEgIGIgIGMKMSAgIDEgMTEgMjEKMiAgIDIgMTIgMjIKMyAgIDMgMTMgMjMKNCAgIDQgMTQgMjQKNSAgIDUgMTUgMjUKNiAgIDYgMTYgMjYKNyAgIDcgMTcgMjcKOCAgIDggMTggMjgKOSAgIDkgMTkgMjkKMTAgMTAgMjAgMzAKPiBhcy5kYXRhLmZyYW1lKHkzKQogICBhLjEgYi4xIGEuMiBiLjIKMSAgICAxICAxMSAgMjEgIDMxCjIgICAgMiAgMTIgIDIyICAzMgozICAgIDMgIDEzICAyMyAgMzMKNCAgICA0ICAxNCAgMjQgIDM0CjUgICAgNSAgMTUgIDI1ICAzNQo2ICAgIDYgIDE2ICAyNiAgMzYKNyAgICA3ICAxNyAgMjcgIDM3CjggICAgOCAgMTggIDI4ICAzOAo5ICAgIDkgIDE5ICAyOSAgMzkKMTAgIDEwICAyMCAgMzAgIDQwCj4gCj4gWCA8LSBkYXRhLmZyYW1lKHg9MToxMCkKPiBYJHkgPC0geTEKPiBYCiAgICB4ICB5CjEgICAxICAxCjIgICAyICAyCjMgICAzICAzCjQgICA0ICA0CjUgICA1ICA1CjYgICA2ICA2CjcgICA3ICA3CjggICA4ICA4CjkgICA5ICA5CjEwIDEwIDEwCj4gc2FwcGx5KFgsIGRpbSkKJHgKTlVMTAoKJHkKWzFdIDEwCgo+IAo+IFgkeSA8LSB5Mgo+IFgKICAgIHggeS5hIHkuYiB5LmMKMSAgIDEgICAxICAxMSAgMjEKMiAgIDIgICAyICAxMiAgMjIKMyAgIDMgICAzICAxMyAgMjMKNCAgIDQgICA0ICAxNCAgMjQKNSAgIDUgICA1ICAxNSAgMjUKNiAgIDYgICA2ICAxNiAgMjYKNyAgIDcgICA3ICAxNyAgMjcKOCAgIDggICA4ICAxOCAgMjgKOSAgIDkgICA5ICAxOSAgMjkKMTAgMTAgIDEwICAyMCAgMzAKPiBzYXBwbHkoWCwgZGltKQokeApOVUxMCgokeQpbMV0gMTAgIDMKCj4gCj4gWCR5IDwtIHkzCj4gWAogICAgeCB5LmEuMSB5LmIuMSB5LmEuMiB5LmIuMgoxICAgMSAgICAgMSAgICAxMSAgICAyMSAgICAzMQoyICAgMiAgICAgMiAgICAxMiAgICAyMiAgICAzMgozICAgMyAgICAgMyAgICAxMyAgICAyMyAgICAzMwo0ICAgNCAgICAgNCAgICAxNCAgICAyNCAgICAzNAo1ICAgNSAgICAgNSAgICAxNSAgICAyNSAgICAzNQo2ICAgNiAgICAgNiAgICAxNiAgICAyNiAgICAzNgo3ICAgNyAgICAgNyAgICAxNyAgICAyNyAgICAzNwo4ICAgOCAgICAgOCAgICAxOCAgICAyOCAgICAzOAo5ICAgOSAgICAgOSAgICAxOSAgICAyOSAgICAzOQoxMCAxMCAgICAxMCAgICAyMCAgICAzMCAgICA0MAo+IHNhcHBseShYLCBkaW0pCiR4Ck5VTEwKCiR5ClsxXSAxMCAgMiAgMgoKPiAjIyBUaGUgbGFzdCBvbmUgZmFpbHMgaW4gUy4KPiAKPiAjIyB0ZXN0IG9mIHVzZXIgaG9va3MKPiBmb3IoaWQgaW4gYygiQSIsICJCIikpIHsKKyAgICAgZXZhbChzdWJzdGl0dXRlKAorICAgICB7Cisgc2V0SG9vayhwYWNrYWdlRXZlbnQoInN0YXRzNCIsICJvbkxvYWQiKSwKKyAgICAgICAgIGZ1bmN0aW9uKHBrZ25hbWUsIC4uLikgY2F0KCJvbkxvYWQiLCBzUXVvdGUocGtnbmFtZSksIGlkLCAiXG4iKSk7Cisgc2V0SG9vayhwYWNrYWdlRXZlbnQoInN0YXRzNCIsICJhdHRhY2giKSwKKyAgICAgICAgIGZ1bmN0aW9uKHBrZ25hbWUsIC4uLikgY2F0KCJhdHRhY2giLCBzUXVvdGUocGtnbmFtZSksIGlkLCAiXG4iKSk7Cisgc2V0SG9vayhwYWNrYWdlRXZlbnQoInN0YXRzNCIsICJkZXRhY2giKSwKKyAgICAgICAgIGZ1bmN0aW9uKHBrZ25hbWUsIC4uLikgY2F0KCJkZXRhY2giLCBzUXVvdGUocGtnbmFtZSksIGlkLCAiXG4iKSk7Cisgc2V0SG9vayhwYWNrYWdlRXZlbnQoInN0YXRzNCIsICJvblVubG9hZCIpLAorICAgICAgICAgZnVuY3Rpb24ocGtnbmFtZSwgLi4uKSBjYXQoIm9uVW5sb2FkIiwgc1F1b3RlKHBrZ25hbWUpLCBpZCwgIlxuIikpCisgICAgIH0sCisgICAgICAgICAgICAgICAgICAgICBsaXN0KGlkPWlkKSkpCisgfQo+IGxvYWROYW1lc3BhY2UoInN0YXRzNCIpCm9uTG9hZCAnc3RhdHM0JyBBIApvbkxvYWQgJ3N0YXRzNCcgQiAKPGVudmlyb25tZW50OiBuYW1lc3BhY2U6c3RhdHM0Pgo+IGxpYnJhcnkoInN0YXRzNCIpCmF0dGFjaCAnc3RhdHM0JyBBIAphdHRhY2ggJ3N0YXRzNCcgQiAKPiBkZXRhY2goInBhY2thZ2U6c3RhdHM0IikKZGV0YWNoICdzdGF0czQnIEIgCmRldGFjaCAnc3RhdHM0JyBBIAo+IHVubG9hZE5hbWVzcGFjZSgic3RhdHM0IikKb25VbmxvYWQgJ3N0YXRzNCcgQiAKb25VbmxvYWQgJ3N0YXRzNCcgQSAKPiAjIyBKdXN0IHRlc3RzCj4gCj4gCj4gIyMgcmVwKDAtbGVuZ3RoLXZlY3RvciwgbGVuZ3RoLm91dCA+IDApCj4gcmVwKGludGVnZXIoMCksIGxlbmd0aC5vdXQ9MCkKaW50ZWdlcigwKQo+IHJlcChpbnRlZ2VyKDApLCBsZW5ndGgub3V0PTEwKQogWzFdIE5BIE5BIE5BIE5BIE5BIE5BIE5BIE5BIE5BIE5BCj4gdHlwZW9mKC5MYXN0LnZhbHVlKQpbMV0gImludGVnZXIiCj4gcmVwKGxvZ2ljYWwoMCksIGxlbmd0aC5vdXQ9MCkKbG9naWNhbCgwKQo+IHJlcChsb2dpY2FsKDApLCBsZW5ndGgub3V0PTEwKQogWzFdIE5BIE5BIE5BIE5BIE5BIE5BIE5BIE5BIE5BIE5BCj4gdHlwZW9mKC5MYXN0LnZhbHVlKQpbMV0gImxvZ2ljYWwiCj4gcmVwKG51bWVyaWMoMCksIGxlbmd0aC5vdXQ9MCkKbnVtZXJpYygwKQo+IHJlcChudW1lcmljKDApLCBsZW5ndGgub3V0PTEwKQogWzFdIE5BIE5BIE5BIE5BIE5BIE5BIE5BIE5BIE5BIE5BCj4gdHlwZW9mKC5MYXN0LnZhbHVlKQpbMV0gImRvdWJsZSIKPiByZXAoY2hhcmFjdGVyKDApLCBsZW5ndGgub3V0PTApCmNoYXJhY3RlcigwKQo+IHJlcChjaGFyYWN0ZXIoMCksIGxlbmd0aC5vdXQ9MTApCiBbMV0gTkEgTkEgTkEgTkEgTkEgTkEgTkEgTkEgTkEgTkEKPiB0eXBlb2YoLkxhc3QudmFsdWUpClsxXSAiY2hhcmFjdGVyIgo+IHJlcChjb21wbGV4KDApLCBsZW5ndGgub3V0PTApCmNvbXBsZXgoMCkKPiByZXAoY29tcGxleCgwKSwgbGVuZ3RoLm91dD0xMCkKIFsxXSBOQSBOQSBOQSBOQSBOQSBOQSBOQSBOQSBOQSBOQQo+IHR5cGVvZiguTGFzdC52YWx1ZSkKWzFdICJjb21wbGV4Igo+IHJlcChsaXN0KCksIGxlbmd0aC5vdXQ9MCkKbGlzdCgpCj4gcmVwKGxpc3QoKSwgbGVuZ3RoLm91dD0xMCkKW1sxXV0KTlVMTAoKW1syXV0KTlVMTAoKW1szXV0KTlVMTAoKW1s0XV0KTlVMTAoKW1s1XV0KTlVMTAoKW1s2XV0KTlVMTAoKW1s3XV0KTlVMTAoKW1s4XV0KTlVMTAoKW1s5XV0KTlVMTAoKW1sxMF1dCk5VTEwKCj4gIyMgYWx3YXlzIDAtbGVuZ3RoIGJlZm9yZSAxLjkuMAo+IAo+IAo+ICMjIHN1cHBseWluZyAwLWxlbmd0aCBkYXRhIHRvIGFycmF5IGFuZCBtYXRyaXgKPiBhcnJheShudW1lcmljKDApLCBjKDIsIDIpKQogICAgIFssMV0gWywyXQpbMSxdICAgTkEgICBOQQpbMixdICAgTkEgICBOQQo+IGFycmF5KGxpc3QoKSwgYygyLDIpKQogICAgIFssMV0gWywyXQpbMSxdIE5VTEwgTlVMTApbMixdIE5VTEwgTlVMTAo+ICMgd29ya2VkIDwgMS44LjAsIGVycm9yIGluIDEuOC54Cj4gbWF0cml4KGNoYXJhY3RlcigwKSwgMSwgMikKICAgICBbLDFdIFssMl0KWzEsXSBOQSAgIE5BICAKPiBtYXRyaXgoaW50ZWdlcigwKSwgMSwgMikKICAgICBbLDFdIFssMl0KWzEsXSAgIE5BICAgTkEKPiBtYXRyaXgobG9naWNhbCgwKSwgMSwgMikKICAgICBbLDFdIFssMl0KWzEsXSAgIE5BICAgTkEKPiBtYXRyaXgobnVtZXJpYygwKSwgMSwgMikKICAgICBbLDFdIFssMl0KWzEsXSAgIE5BICAgTkEKPiBtYXRyaXgoY29tcGxleCgwKSwgMSwgMikKICAgICBbLDFdIFssMl0KWzEsXSAgIE5BICAgTkEKPiBtYXRyaXgobGlzdCgpLCAxLCAyKQogICAgIFssMV0gWywyXQpbMSxdIE5VTEwgTlVMTAo+ICMjIGRpZCBub3Qgd29yayA8IDEuOS4wCj4gCj4gCj4gIyMgUyBjb21wYXRpYmlsaXR5IGNoYW5nZSBpbiAxLjkuMAo+IHJlcCgxOjIsIGVhY2g9MywgbGVuZ3RoPTEyKQogWzFdIDEgMSAxIDIgMiAyIDEgMSAxIDIgMiAyCj4gIyMgdXNlZCB0byBwYWQgd2l0aCBOQXMuCj4gCj4gCj4gIyMgUFIjNjUxMDogYW92KCkgd2l0aCBlcnJvciBhbmQgLTEKPiBzZXQuc2VlZCgxKQo+IHRlc3QuZGYgPC0gZGF0YS5mcmFtZSAoeT1ybm9ybSg4KSwgYT1nbCgyLDEsOCksIGI9Z2woMiwzLDgpLGM9Z2woMiw0LDgpKQo+IGFvdih5IH4gYSArIGIgKyBFcnJvcihjKSwgZGF0YT10ZXN0LmRmKQoKQ2FsbDoKYW92KGZvcm11bGEgPSB5IH4gYSArIGIgKyBFcnJvcihjKSwgZGF0YSA9IHRlc3QuZGYpCgpHcmFuZCBNZWFuOiAwLjgwNjY1MzQKClN0cmF0dW0gMTogYwoKVGVybXM6CiAgICAgICAgICAgICAgICAgICAgICAgIGIKU3VtIG9mIFNxdWFyZXMgIDAuMzE3NjQ4OQpEZWcuIG9mIEZyZWVkb20gICAgICAgICAxCgpFc3RpbWF0ZWQgZWZmZWN0cyBhcmUgYmFsYW5jZWQKClN0cmF0dW0gMjogV2l0aGluCgpUZXJtczoKICAgICAgICAgICAgICAgICAgICAgICBhICAgICAgICBiIFJlc2lkdWFscwpTdW0gb2YgU3F1YXJlcyAgMS4zODk0NTMgMi4xNDgxNDkgIDUuMDQ4Njg5CkRlZy4gb2YgRnJlZWRvbSAgICAgICAgMSAgICAgICAgMSAgICAgICAgIDQKClJlc2lkdWFsIHN0YW5kYXJkIGVycm9yOiAxLjEyMzQ2NApFc3RpbWF0ZWQgZWZmZWN0cyBtYXkgYmUgdW5iYWxhbmNlZAo+IGFvdih5IH4gYSArIGIgLSAxICsgRXJyb3IoYyksIGRhdGE9dGVzdC5kZikKCkNhbGw6CmFvdihmb3JtdWxhID0geSB+IGEgKyBiIC0gMSArIEVycm9yKGMpLCBkYXRhID0gdGVzdC5kZikKClN0cmF0dW0gMTogYwoKVGVybXM6CiAgICAgICAgICAgICAgICAgICAgICAgYSAgICAgICAgYgpTdW0gb2YgU3F1YXJlcyAgNS4yMDU1MTggMC4zMTc2NDkKRGVnLiBvZiBGcmVlZG9tICAgICAgICAxICAgICAgICAxCgoxIG91dCBvZiAzIGVmZmVjdHMgbm90IGVzdGltYWJsZQpFc3RpbWF0ZWQgZWZmZWN0cyBtYXkgYmUgdW5iYWxhbmNlZAoKU3RyYXR1bSAyOiBXaXRoaW4KClRlcm1zOgogICAgICAgICAgICAgICAgICAgICAgIGEgICAgICAgIGIgUmVzaWR1YWxzClN1bSBvZiBTcXVhcmVzICAxLjM4OTQ1MyAyLjE0ODE0OSAgNS4wNDg2ODkKRGVnLiBvZiBGcmVlZG9tICAgICAgICAxICAgICAgICAxICAgICAgICAgNAoKUmVzaWR1YWwgc3RhbmRhcmQgZXJyb3I6IDEuMTIzNDY0CjEgb3V0IG9mIDMgZWZmZWN0cyBub3QgZXN0aW1hYmxlCkVzdGltYXRlZCBlZmZlY3RzIG1heSBiZSB1bmJhbGFuY2VkCj4gIyMgd3JvbmcgYXNzaWdubWVudCB0byBzdHJhdGEgbGFiZWxzIDwgMS45LjAKPiAjIyBOb3RlIHRoaXMgaXMgdW5iYWxhbmNlZCBhbmQgbm90IGEgZ29vZCBleGFtcGxlCj4gCj4gYmlub20udGVzdChjKDgwMCwxMCkpIyBwLXZhbHVlIDwgZXBzaWxvbgoKCUV4YWN0IGJpbm9taWFsIHRlc3QKCmRhdGE6ICBjKDgwMCwgMTApCm51bWJlciBvZiBzdWNjZXNzZXMgPSA4MDAsIG51bWJlciBvZiB0cmlhbHMgPSA4MTAsIHAtdmFsdWUgPCAyLjJlLTE2CmFsdGVybmF0aXZlIGh5cG90aGVzaXM6IHRydWUgcHJvYmFiaWxpdHkgb2Ygc3VjY2VzcyBpcyBub3QgZXF1YWwgdG8gMC41Cjk1IHBlcmNlbnQgY29uZmlkZW5jZSBpbnRlcnZhbDoKIDAuOTc3NDEzNCAwLjk5NDA2NDMKc2FtcGxlIGVzdGltYXRlczoKcHJvYmFiaWxpdHkgb2Ygc3VjY2VzcyAKICAgICAgICAgICAgIDAuOTg3NjU0MyAKCj4gCj4gCj4gIyMgYW92IHdpdGggYSBzaW5ndWxhciBlcnJvciBtb2RlbAo+IHJkIDwtIGMoMTYuNTMsIDEyLjEyLCAxMC4wNCwgMTUuMzIsIDEyLjMzLCAxMC4xLCAxNy4wOSwgMTEuNjksIDExLjgxLCAxNC43NSwKKyAgICAgICAgIDEwLjcyLCA4Ljc5LCAxMy4xNCwgOS43OSwgOC4zNiwgMTUuNjIsIDkuNjQsIDguNzIsIDE1LjMyLAorICAgICAgICAgMTEuMzUsIDguNTIsIDEzLjI3LCA5Ljc0LCA4Ljc4LCAxMy4xNiwgMTAuMTYsIDguNCwgMTMuMDgsIDkuNjYsCisgICAgICAgICA4LjE2LCAxMi4xNywgOS4xMywgNy40MywgMTMuMjgsIDkuMTYsIDcuOTIsIDExOC43NywgNzguODMsIDYyLjIsCisgICAgICAgICAxMDcuMjksIDczLjc5LCA1OC41OSwgMTE4LjksIDY2LjM1LCA1My4xMiwgMzcyLjYyLCAyNDUuMzksIDIyMy43MiwKKyAgICAgICAgIDMyNi4wMywgMjMyLjY3LCAyMDkuNDQsIDI5Ny41NSwgMjM5LjcxLCAyMjMuOCkKPiBzYW1wbGUuZGYgPC0gZGF0YS5mcmFtZShkZXAudmFyaWFibGU9cmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgc3ViamVjdD1mYWN0b3IocmVwKHBhc3RlKCJzdWJqIiwxOjYsIHNlcD0iIiksZWFjaD05KSksCisgICAgICAgICAgICAgICAgICAgICAgICAgZjE9ZmFjdG9yKHJlcChyZXAoYygiZjEiLCJmMiIsImYzIiksZWFjaD02KSwzKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgZjI9ZmFjdG9yKHJlcChjKCJnMSIsImcyIiwiZzMiKSxlYWNoPTE4KSkKKyApCj4gc2FtcGxlLmFvdiA8LSBhb3YoZGVwLnZhcmlhYmxlIH4gZjEgKiBmMiArIEVycm9yKHN1YmplY3QvKGYxK2YyKSksIGRhdGE9c2FtcGxlLmRmKQpXYXJuaW5nIG1lc3NhZ2U6CkluIGFvdihkZXAudmFyaWFibGUgfiBmMSAqIGYyICsgRXJyb3Ioc3ViamVjdC8oZjEgKyBmMikpLCBkYXRhID0gc2FtcGxlLmRmKSA6CiAgRXJyb3IoKSBtb2RlbCBpcyBzaW5ndWxhcgo+IHNhbXBsZS5hb3YKCkNhbGw6CmFvdihmb3JtdWxhID0gZGVwLnZhcmlhYmxlIH4gZjEgKiBmMiArIEVycm9yKHN1YmplY3QvKGYxICsgZjIpKSwgCiAgICBkYXRhID0gc2FtcGxlLmRmKQoKR3JhbmQgTWVhbjogNjUuMDc0NDQKClN0cmF0dW0gMTogc3ViamVjdAoKVGVybXM6CiAgICAgICAgICAgICAgICAgICAgICAgZjEgICAgICAgIGYyICAgICBmMTpmMgpTdW0gb2YgU3F1YXJlcyAgIDQ3ODE1Ljk5IDMxMjgyNC40OSAxMDAzNzAuOTYKRGVnLiBvZiBGcmVlZG9tICAgICAgICAgMSAgICAgICAgIDIgICAgICAgICAyCgoyIG91dCBvZiA3IGVmZmVjdHMgbm90IGVzdGltYWJsZQpFc3RpbWF0ZWQgZWZmZWN0cyBtYXkgYmUgdW5iYWxhbmNlZAoKU3RyYXR1bSAyOiBzdWJqZWN0OmYxCgpUZXJtczoKICAgICAgICAgICAgICAgICAgICAgIGYxICAgIGYxOmYyClN1bSBvZiBTcXVhcmVzICA0ODMuOTYyOCA4NjkuNjg3NgpEZWcuIG9mIEZyZWVkb20gICAgICAgIDIgICAgICAgIDQKCkVzdGltYXRlZCBlZmZlY3RzIG1heSBiZSB1bmJhbGFuY2VkCgpTdHJhdHVtIDM6IFdpdGhpbgoKVGVybXM6CiAgICAgICAgICAgICAgICBSZXNpZHVhbHMKU3VtIG9mIFNxdWFyZXMgICAyOTIwNC4xMwpEZWcuIG9mIEZyZWVkb20gICAgICAgIDQyCgpSZXNpZHVhbCBzdGFuZGFyZCBlcnJvcjogMjYuMzY5MjMKPiBzdW1tYXJ5KHNhbXBsZS5hb3YpCgpFcnJvcjogc3ViamVjdAogICAgICBEZiBTdW0gU3EgTWVhbiBTcQpmMSAgICAgMSAgNDc4MTYgICA0NzgxNgpmMiAgICAgMiAzMTI4MjQgIDE1NjQxMgpmMTpmMiAgMiAxMDAzNzEgICA1MDE4NQoKRXJyb3I6IHN1YmplY3Q6ZjEKICAgICAgRGYgU3VtIFNxIE1lYW4gU3EKZjEgICAgIDIgIDQ4NC4wICAgMjQyLjAKZjE6ZjIgIDQgIDg2OS43ICAgMjE3LjQKCkVycm9yOiBXaXRoaW4KICAgICAgICAgIERmIFN1bSBTcSBNZWFuIFNxIEYgdmFsdWUgUHIoPkYpClJlc2lkdWFscyA0MiAgMjkyMDQgICA2OTUuMyAgICAgICAgICAgICAgIAo+IHNhbXBsZS5hb3YgPC0gYW92KGRlcC52YXJpYWJsZSB+IGYxICogZjIgKyBFcnJvcihzdWJqZWN0LyhmMitmMSkpLCBkYXRhPXNhbXBsZS5kZikKV2FybmluZyBtZXNzYWdlOgpJbiBhb3YoZGVwLnZhcmlhYmxlIH4gZjEgKiBmMiArIEVycm9yKHN1YmplY3QvKGYyICsgZjEpKSwgZGF0YSA9IHNhbXBsZS5kZikgOgogIEVycm9yKCkgbW9kZWwgaXMgc2luZ3VsYXIKPiBzYW1wbGUuYW92CgpDYWxsOgphb3YoZm9ybXVsYSA9IGRlcC52YXJpYWJsZSB+IGYxICogZjIgKyBFcnJvcihzdWJqZWN0LyhmMiArIGYxKSksIAogICAgZGF0YSA9IHNhbXBsZS5kZikKCkdyYW5kIE1lYW46IDY1LjA3NDQ0CgpTdHJhdHVtIDE6IHN1YmplY3QKClRlcm1zOgogICAgICAgICAgICAgICAgICAgICAgIGYxICAgICAgICBmMiAgICAgZjE6ZjIKU3VtIG9mIFNxdWFyZXMgICA0NzgxNS45OSAzMTI4MjQuNDkgMTAwMzcwLjk2CkRlZy4gb2YgRnJlZWRvbSAgICAgICAgIDEgICAgICAgICAyICAgICAgICAgMgoKMiBvdXQgb2YgNyBlZmZlY3RzIG5vdCBlc3RpbWFibGUKRXN0aW1hdGVkIGVmZmVjdHMgbWF5IGJlIHVuYmFsYW5jZWQKClN0cmF0dW0gMjogc3ViamVjdDpmMQoKVGVybXM6CiAgICAgICAgICAgICAgICAgICAgICBmMSAgICBmMTpmMgpTdW0gb2YgU3F1YXJlcyAgNDgzLjk2MjggODY5LjY4NzYKRGVnLiBvZiBGcmVlZG9tICAgICAgICAyICAgICAgICA0CgpFc3RpbWF0ZWQgZWZmZWN0cyBtYXkgYmUgdW5iYWxhbmNlZAoKU3RyYXR1bSAzOiBXaXRoaW4KClRlcm1zOgogICAgICAgICAgICAgICAgUmVzaWR1YWxzClN1bSBvZiBTcXVhcmVzICAgMjkyMDQuMTMKRGVnLiBvZiBGcmVlZG9tICAgICAgICA0MgoKUmVzaWR1YWwgc3RhbmRhcmQgZXJyb3I6IDI2LjM2OTIzCj4gc3VtbWFyeShzYW1wbGUuYW92KQoKRXJyb3I6IHN1YmplY3QKICAgICAgRGYgU3VtIFNxIE1lYW4gU3EKZjEgICAgIDEgIDQ3ODE2ICAgNDc4MTYKZjIgICAgIDIgMzEyODI0ICAxNTY0MTIKZjE6ZjIgIDIgMTAwMzcxICAgNTAxODUKCkVycm9yOiBzdWJqZWN0OmYxCiAgICAgIERmIFN1bSBTcSBNZWFuIFNxCmYxICAgICAyICA0ODQuMCAgIDI0Mi4wCmYxOmYyICA0ICA4NjkuNyAgIDIxNy40CgpFcnJvcjogV2l0aGluCiAgICAgICAgICBEZiBTdW0gU3EgTWVhbiBTcSBGIHZhbHVlIFByKD5GKQpSZXNpZHVhbHMgNDIgIDI5MjA0ICAgNjk1LjMgICAgICAgICAgICAgICAKPiAjIyBmYWlsZWQgaW4gMS44LjEKPiAKPiAKPiAjIyBQUiM2NjQ1ICBzdGVtKCkgd2l0aCBuZWFyLWNvbnN0YW50IHZhbHVlcwo+IHN0ZW0ocmVwKDEsIDEwMCkpCgogIFRoZSBkZWNpbWFsIHBvaW50IGlzIGF0IHRoZSB8CgogIDEgfCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCsyMAoKPiBzdGVtKHJlcCgwLjEsIDEwKSkKCiAgVGhlIGRlY2ltYWwgcG9pbnQgaXMgMSBkaWdpdChzKSB0byB0aGUgbGVmdCBvZiB0aGUgfAoKICAxIHwgMDAwMDAwMDAwMAoKPiBzdGVtKGMocmVwKDEsIDEwKSwgMSsxLmUtOCkpCgogIFRoZSBkZWNpbWFsIHBvaW50IGlzIDggZGlnaXQocykgdG8gdGhlIGxlZnQgb2YgdGhlIHwKCiAgMTAwMDAwMDAwIHwgMDAwMDAwMDAwMAogIDEwMDAwMDAwMCB8IAogIDEwMDAwMDAwMSB8IDAKCj4gc3RlbShjKHJlcCgxLCAxMCksIDErMS5lLTkpKQoKICBUaGUgZGVjaW1hbCBwb2ludCBpcyA4IGRpZ2l0KHMpIHRvIHRoZSBsZWZ0IG9mIHRoZSB8CgogIDEwMDAwMDAwMCB8IDAwMDAwMDAwMDAxCgo+IHN0ZW0oYyhyZXAoMSwgMTApLCAxKzEuZS0xMCksIGF0b209MCkgIyBpbnRlZ2VyLW92ZXJmbG93IGlzIGF2b2lkZWQuCgogIFRoZSBkZWNpbWFsIHBvaW50IGlzIDggZGlnaXQocykgdG8gdGhlIGxlZnQgb2YgdGhlIHwKCiAgMTAwMDAwMDAwIHwgMDAwMDAwMDAwMDAKCj4gIyMgIGhhZCBpbnRlZ2VyIG92ZXJmbG93cyBpbiAxLjguMSwgYW5kIHNpbGx5IHNoaWZ0cyBvZiBkZWNpbWFsIHBvaW50Cj4gCj4gCj4gIyMgUFIjNjYzMyB3YXJuaW5ncyB3aXRoIHZlY3RvciBvcCBtYXRyaXgsIGFuZCBtb3JlCj4gc2V0LnNlZWQoMSkKPiB4MSA8LSBybm9ybSgzKQo+IHkxIDwtIHJub3JtKDQpCj4geDEgKiB5MQpbMV0gIDAuNTU3NDY4MiAgMC4xNDEwNTAyICAwLjE2MDkxOTQgLTAuMzY0MTYzNwpXYXJuaW5nIG1lc3NhZ2U6CkluIHgxICogeTEgOgogIGxvbmdlciBvYmplY3QgbGVuZ3RoIGlzIG5vdCBhIG11bHRpcGxlIG9mIHNob3J0ZXIgb2JqZWN0IGxlbmd0aAo+IHgxICogYXMubWF0cml4KHkxKSAjIG5vIHdhcm5pbmcgaW4gMS44LjEKICAgICAgICAgICBbLDFdClsxLF0gIDAuNTU3NDY4MgpbMixdICAwLjE0MTA1MDIKWzMsXSAgMC4xNjA5MTk0Cls0LF0gLTAuMzY0MTYzNwpXYXJuaW5nIG1lc3NhZ2U6CkluIHgxICogYXMubWF0cml4KHkxKSA6CiAgbG9uZ2VyIG9iamVjdCBsZW5ndGggaXMgbm90IGEgbXVsdGlwbGUgb2Ygc2hvcnRlciBvYmplY3QgbGVuZ3RoCj4geDEgKiBtYXRyaXgoeTEsMiwyKSMgZGl0dG8KICAgICAgICAgIFssMV0gICAgICAgWywyXQpbMSxdIDAuNTU3NDY4MiAgMC4xNjA5MTk0ClsyLF0gMC4xNDEwNTAyIC0wLjM2NDE2MzcKV2FybmluZyBtZXNzYWdlOgpJbiB4MSAqIG1hdHJpeCh5MSwgMiwgMikgOgogIGxvbmdlciBvYmplY3QgbGVuZ3RoIGlzIG5vdCBhIG11bHRpcGxlIG9mIHNob3J0ZXIgb2JqZWN0IGxlbmd0aAo+IHoxIDwtIHgxID4gMAo+IHoyIDwtIHkxID4gMAo+IHoxICYgejIKWzFdICBUUlVFICBUUlVFICBUUlVFIEZBTFNFCldhcm5pbmcgbWVzc2FnZToKSW4gejEgJiB6MiA6CiAgbG9uZ2VyIG9iamVjdCBsZW5ndGggaXMgbm90IGEgbXVsdGlwbGUgb2Ygc2hvcnRlciBvYmplY3QgbGVuZ3RoCj4gejEgJiBhcy5tYXRyaXgoejIpICMgbm8gd2FybmluZyBpbiAxLjguMQogICAgICBbLDFdClsxLF0gIFRSVUUKWzIsXSAgVFJVRQpbMyxdICBUUlVFCls0LF0gRkFMU0UKV2FybmluZyBtZXNzYWdlOgpJbiB6MSAmIGFzLm1hdHJpeCh6MikgOgogIGxvbmdlciBvYmplY3QgbGVuZ3RoIGlzIG5vdCBhIG11bHRpcGxlIG9mIHNob3J0ZXIgb2JqZWN0IGxlbmd0aAo+IHgxIDwgeTEgICAgICAgICAgICAjIG5vIHdhcm5pbmcgaW4gMS44LjEKWzFdIEZBTFNFICBUUlVFIEZBTFNFIEZBTFNFCldhcm5pbmcgbWVzc2FnZToKSW4geDEgPCB5MSA6CiAgbG9uZ2VyIG9iamVjdCBsZW5ndGggaXMgbm90IGEgbXVsdGlwbGUgb2Ygc2hvcnRlciBvYmplY3QgbGVuZ3RoCj4geDEgPCBhcy5tYXRyaXgoeTEpICMgZGl0dG8KICAgICAgWywxXQpbMSxdIEZBTFNFClsyLF0gIFRSVUUKWzMsXSBGQUxTRQpbNCxdIEZBTFNFCldhcm5pbmcgbWVzc2FnZToKSW4geDEgPCBhcy5tYXRyaXgoeTEpIDoKICBsb25nZXIgb2JqZWN0IGxlbmd0aCBpcyBub3QgYSBtdWx0aXBsZSBvZiBzaG9ydGVyIG9iamVjdCBsZW5ndGgKPiAjIwo+IAo+IAo+ICMjIHN1bW1hcnkgbWV0aG9kIGZvciBtbGUKPiBsaWJyYXJ5KHN0YXRzNCkKb25Mb2FkICdzdGF0czQnIEEgCm9uTG9hZCAnc3RhdHM0JyBCIAphdHRhY2ggJ3N0YXRzNCcgQSAKYXR0YWNoICdzdGF0czQnIEIgCj4gTiA8LSBjKHJlcCgzOjYsIDMpLCA3LDcsIHJlcCg4LDYpLCA5LDksIDEwLDEyKSMgc2FtcGxlIGZyb20gUG9pcyhsYW0gPSA3KQo+IHN1bW1hcnkobWxlKGZ1bmN0aW9uKExhbSA9IDEpIC1zdW0oZHBvaXMoTiwgTGFtKSkpKQpNYXhpbXVtIGxpa2VsaWhvb2QgZXN0aW1hdGlvbgoKQ2FsbDoKbWxlKG1pbnVzbG9nbCA9IGZ1bmN0aW9uKExhbSA9IDEpIC1zdW0oZHBvaXMoTiwgTGFtKSkpCgpDb2VmZmljaWVudHM6CiAgICBFc3RpbWF0ZSBTdGQuIEVycm9yCkxhbSA2LjA2Mzc1NSAgIDIuMzA3NTQ2CgotMiBsb2cgTDogLTUuNDM3MDU5IAo+ICMjICJDb2VmZmljaWVudHMiIHdhcyAiTlVMTCIgaW4gMS45LjAncyAiZGV2ZWwiCj4gCj4gCj4gIyMgUFIjNjY1NiB0ZXJtcy5mb3JtdWxhKHNpbXBsaWZ5ID0gVFJVRSkgd2FzIGxvc2luZyBvZmZzZXQgdGVybXMKPiAjIyBzdWNjZXNzaXZlIG9mZnNldHMgY2F1c2VkIHByb2JsZW1zCj4gZGYgPC0gZGF0YS5mcmFtZSh4PTE6NCwgeT1zcXJ0KCAxOjQpLCB6PWMoMjo0LDEpKQo+IGZpdDEgPC0gZ2xtKHkgfiBvZmZzZXQoeCkgKyB6LCBkYXRhPWRmKQo+IHVwZGF0ZShmaXQxLCAiLiB+LiIpJGNhbGwKZ2xtKGZvcm11bGEgPSB5IH4geiArIG9mZnNldCh4KSwgZGF0YSA9IGRmKQo+ICMjIGxvc3Qgb2Zmc2V0IGluIDEuNy4wIHRvIDEuOC4xCj4gdGVybXMoeSB+IG9mZnNldCh4KSArIG9mZnNldChsb2coeCkpICsgeiwgZGF0YT1kZikKeSB+IG9mZnNldCh4KSArIG9mZnNldChsb2coeCkpICsgegphdHRyKCwidmFyaWFibGVzIikKbGlzdCh5LCBvZmZzZXQoeCksIG9mZnNldChsb2coeCkpLCB6KQphdHRyKCwib2Zmc2V0IikKWzFdIDIgMwphdHRyKCwiZmFjdG9ycyIpCiAgICAgICAgICAgICAgIHoKeSAgICAgICAgICAgICAgMApvZmZzZXQoeCkgICAgICAwCm9mZnNldChsb2coeCkpIDAKeiAgICAgICAgICAgICAgMQphdHRyKCwidGVybS5sYWJlbHMiKQpbMV0gInoiCmF0dHIoLCJvcmRlciIpClsxXSAxCmF0dHIoLCJpbnRlcmNlcHQiKQpbMV0gMQphdHRyKCwicmVzcG9uc2UiKQpbMV0gMQphdHRyKCwiLkVudmlyb25tZW50IikKPGVudmlyb25tZW50OiBSX0dsb2JhbEVudj4KPiAjIyBmYWlsZWQgdG8gcmVtb3ZlIHNlY29uZCBvZmZzZXQgZnJvbSBmb3JtdWxhIGluIDEuOC4xCj4gdGVybXMoeSB+IG9mZnNldCh4KSArIHogLSB6LCBkYXRhPWRmLCBzaW1wbGlmeSA9IFRSVUUpCnkgfiBvZmZzZXQoeCkKYXR0cigsInZhcmlhYmxlcyIpCmxpc3QoeSwgb2Zmc2V0KHgpLCB6KQphdHRyKCwib2Zmc2V0IikKWzFdIDIKYXR0cigsImZhY3RvcnMiKQppbnRlZ2VyKDApCmF0dHIoLCJ0ZXJtLmxhYmVscyIpCmNoYXJhY3RlcigwKQphdHRyKCwib3JkZXIiKQppbnRlZ2VyKDApCmF0dHIoLCJpbnRlcmNlcHQiKQpbMV0gMQphdHRyKCwicmVzcG9uc2UiKQpbMV0gMQphdHRyKCwiLkVudmlyb25tZW50IikKPGVudmlyb25tZW50OiBSX0dsb2JhbEVudj4KPiAjIyBmaXJzdCBmaXggZmFpbGVkIGZvciBtb2RlbHMgd2l0aCBubyBub24tb2Zmc2V0IHRlcm1zLgo+IAo+IAo+ICMjIG9ubHkgdGhlIGZpcnN0IHR3byB3ZXJlIHdyb25nIHVwIHRvIDEuOC4xOgo+IDM6NCAqIDFlLTEwMApbMV0gM2UtMTAwIDRlLTEwMAo+IDg6MTEqIDFlLTEwMApbMV0gOC4wZS0xMDAgOS4wZS0xMDAgIDEuMGUtOTkgIDEuMWUtOTkKPiAxOjIgKiAxZS05OQpbMV0gMWUtOTkgMmUtOTkKPiAxOjIgKiAxZSs5OQpbMV0gMWUrOTkgMmUrOTkKPiA4OjExKiAxZSs5OQpbMV0gIDguMGUrOTkgIDkuMGUrOTkgMS4wZSsxMDAgMS4xZSsxMDAKPiAzOjQgKiAxZSsxMDAKWzFdIDNlKzEwMCA0ZSsxMDAKPiAjIwo+IAo+IAo+ICMjIG5lZ2F0aXZlIHN1YnNjcmlwdHMgY291bGQgYmUgbWl4ZWQgd2l0aCBOQXMKPiB4IDwtIDE6Mwo+IHRyeSh4Wy1jKDEsIE5BKV0pCkVycm9yIGluIHhbLWMoMSwgTkEpXSA6IG9ubHkgMCdzIG1heSBiZSBtaXhlZCB3aXRoIG5lZ2F0aXZlIHN1YnNjcmlwdHMKPiAjIyB3b3JrZWQgb24gc29tZSBwbGF0Zm9ybXMsIHNlZ2ZhdWx0ZWQgb24gb3RoZXJzIGluIDEuOC4xCj4gCj4gCj4gIyMgdmVjdG9yICdib3JkZXInIChhbmQgbm8gJ3BjaCcsICdjZXgnIG5vciAnYmcnKToKPiBib3hwbG90KGNvdW50IH4gc3ByYXksIGRhdGEgPSBJbnNlY3RTcHJheXMsIGJvcmRlcj0yOjcpCj4gIyMgZ2F2ZSB3YXJuaW5ncyBpbiAxLjkuMAo+IAo+IHN1bW1hcnkoYXMuRGF0ZShwYXN0ZSgiMjAwMi0xMiIsIDI2OjMxLCBzZXA9Ii0iKSkpCiAgICAgICAgTWluLiAgICAgIDFzdCBRdS4gICAgICAgTWVkaWFuICAgICAgICAgTWVhbiAgICAgIDNyZCBRdS4gICAgICAgICBNYXguIAoiMjAwMi0xMi0yNiIgIjIwMDItMTItMjciICIyMDAyLTEyLTI4IiAiMjAwMi0xMi0yOCIgIjIwMDItMTItMjkiICIyMDAyLTEyLTMxIiAKPiAjIyBwcmludGVkIGFsbCAiMjAwMi4tMTItMjkiIGluIDEuOS4xIHtiZWNhdXNlIGRpZ2l0cyB3YXMgdG9vIHNtYWxsfQo+IGFzLm1hdHJpeChkYXRhLmZyYW1lKGQgPSBhcy5QT1NJWGN0KCIyMDA0LTA3LTIwIikpKQogICAgIGQgICAgICAgICAgIApbMSxdICIyMDA0LTA3LTIwIgo+ICMjIGdhdmUgYSB3YXJuaW5nIGluIDEuOS4xCj4gCj4gCj4gIyMgRHVtcCBzaG91bGQgcXVvdGUgd2hlbiBuZWNlc3NhcnkgKFBSIzY4NTcpCj4geCA8LSBxdW90ZShiKQo+IGR1bXAoIngiLCAiIikKeCA8LQpxdW90ZShiKQo+ICMjIGRvZXNuJ3QgcXVvdGUgYiBpbiAxLjkuMAo+IAo+IAo+ICMjIHNvbWUgY2hlY2tzIG9mIGluZGV4aW5nIGJ5IGNoYXJhY3RlciwgdXNlZCB0byB0ZXN0IGhhc2hpbmcgY29kZQo+IHggPC0gMToyNgo+IG5hbWVzKHgpIDwtIGxldHRlcnMKPiB4W2MoImEiLCAiYWEiLCAiYWEiKV0gPC0gMTAwOjEwMgo+IHgKICBhICAgYiAgIGMgICBkICAgZSAgIGYgICBnICAgaCAgIGkgICBqICAgayAgIGwgICBtICAgbiAgIG8gICBwICAgcSAgIHIgICBzICAgdCAKMTAwICAgMiAgIDMgICA0ICAgNSAgIDYgICA3ICAgOCAgIDkgIDEwICAxMSAgMTIgIDEzICAxNCAgMTUgIDE2ICAxNyAgMTggIDE5ICAyMCAKICB1ICAgdiAgIHcgICB4ICAgeSAgIHogIGFhIAogMjEgIDIyICAyMyAgMjQgIDI1ICAyNiAxMDIgCj4gCj4geCA8LSAxOjI2Cj4gbmFtZXMoeCkgPC0gcmVwKCIiLCAyNikKPiB4W2MoImEiLCAiYWEiLCAiYWEiKV0gPC0gMTAwOjEwMgo+IHgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAxICAgMiAgIDMgICA0ICAgNSAgIDYgICA3ICAgOCAgIDkgIDEwICAxMSAgMTIgIDEzICAxNCAgMTUgIDE2ICAxNyAgMTggIDE5ICAyMCAKICAgICAgICAgICAgICAgICAgICAgICAgICBhICBhYSAKIDIxICAyMiAgMjMgIDI0ICAyNSAgMjYgMTAwIDEwMiAKPiAjIwo+IAo+IAo+ICMjIHRlc3RzIG9mIHJhdyB0eXBlCj4gIyB0ZXN0cyBvZiBsb2dpYyBvcGVyYXRvcnMKPiB4IDwtICJBIHRlc3Qgc3RyaW5nIgo+ICh5IDwtIGNoYXJUb1Jhdyh4KSkKIFsxXSA0MSAyMCA3NCA2NSA3MyA3NCAyMCA3MyA3NCA3MiA2OSA2ZSA2Nwo+ICh4eCA8LSBjKHksIGFzLnJhdygwKSwgY2hhclRvUmF3KCJtb3JlIikpKQogWzFdIDQxIDIwIDc0IDY1IDczIDc0IDIwIDczIDc0IDcyIDY5IDZlIDY3IDAwIDZkIDZmIDcyIDY1Cj4gCj4gIXkKIFsxXSBiZSBkZiA4YiA5YSA4YyA4YiBkZiA4YyA4YiA4ZCA5NiA5MSA5OAo+IHkgJiBhcy5yYXcoMTUpCiBbMV0gMDEgMDAgMDQgMDUgMDMgMDQgMDAgMDMgMDQgMDIgMDkgMGUgMDcKPiB5IHwgYXMucmF3KDEyOCkKIFsxXSBjMSBhMCBmNCBlNSBmMyBmNCBhMCBmMyBmNCBmMiBlOSBlZSBlNwo+IAo+ICMgdGVzdHMgb2YgYmluYXJ5IHJlYWQvd3JpdGUKPiB6eiA8LSBmaWxlKCJ0ZXN0YmluIiwgIndiIikKPiB3cml0ZUJpbih4eCwgenopCj4gY2xvc2UoenopCj4genogPC0gZmlsZSgidGVzdGJpbiIsICJyYiIpCj4gKHl5IDwtIHJlYWRCaW4oenosICJyYXciLCAxMDApKQogWzFdIDQxIDIwIDc0IDY1IDczIDc0IDIwIDczIDc0IDcyIDY5IDZlIDY3IDAwIDZkIDZmIDcyIDY1Cj4gc2Vlayh6eiwgMCwgInN0YXJ0IikKWzFdIDE4Cj4gcmVhZEJpbih6eiwgImludGVnZXIiLCBuPTEwMCwgc2l6ZSA9IDEpICMgcmVhZCBhcyBzbWFsbCBpbnRlZ2VycwogWzFdICA2NSAgMzIgMTE2IDEwMSAxMTUgMTE2ICAzMiAxMTUgMTE2IDExNCAxMDUgMTEwIDEwMyAgIDAgMTA5IDExMSAxMTQgMTAxCj4gc2Vlayh6eiwgMCwgInN0YXJ0IikKWzFdIDE4Cj4gcmVhZEJpbih6eiwgImNoYXJhY3RlciIsIDEwMCkgICMgaXMgY29uZnVzZWQgYnkgZW1iZWRkZWQgbnVsLgpbMV0gIkEgdGVzdCBzdHJpbmciCldhcm5pbmcgbWVzc2FnZToKSW4gcmVhZEJpbih6eiwgImNoYXJhY3RlciIsIDEwMCkgOgogIGluY29tcGxldGUgc3RyaW5nIGF0IGVuZCBvZiBmaWxlIGhhcyBiZWVuIGRpc2NhcmRlZAo+IHNlZWsoenosIDAsICJzdGFydCIpClsxXSAxOAo+IHJlYWRDaGFyKHp6LCBsZW5ndGgoeHgpKSAjIHRydW5jYXRlcyBhdCBlbWJlZGRlZCBudWwKWzFdICJBIHRlc3Qgc3RyaW5nIgpXYXJuaW5nIG1lc3NhZ2U6CkluIHJlYWRDaGFyKHp6LCBsZW5ndGgoeHgpKSA6IHRydW5jYXRpbmcgc3RyaW5nIHdpdGggZW1iZWRkZWQgbnVscwo+IHNlZWsoenopICMgbWFrZSBzdXJlIGN1cnJlbnQgcG9zaXRpb24gaXMgcmVwb3J0ZWQgcHJvcGVybHkKWzFdIDE4Cj4gY2xvc2UoenopCj4gdW5saW5rKCJ0ZXN0YmluIikKPiAKPiAjIHRlc3RzIG9mIEFTQ0lJIHJlYWQvd3JpdGUuCj4gY2F0KHh4LCBmaWxlPSJ0ZXN0YXNjaWkiKQo+IHNjYW4oInRlc3Rhc2NpaSIsIHdoYXQ9cmF3KDApKQpSZWFkIDE4IGl0ZW1zCiBbMV0gNDEgMjAgNzQgNjUgNzMgNzQgMjAgNzMgNzQgNzIgNjkgNmUgNjcgMDAgNmQgNmYgNzIgNjUKPiB1bmxpbmsoInRlc3Rhc2NpaSIpCj4gIyMKPiAKPiAKPiAjIyBFeGFtcGxlIG9mIHByZWRpY3Rpb24gbm90IGZyb20gbmV3ZGF0YSBhcyBpbnRlbmRlZC4KPiBzZXQuc2VlZCgxKQo+IHkgPC0gcm5vcm0oMTApCj4geCAgPC0gY2JpbmQoMToxMCwgc2FtcGxlKDE6MTApKSAjIG1hdHJpeAo+IHh0IDwtIGNiaW5kKDE6MiwgIDM6NCkKPiAobG0xIDwtIGxtKHkgfiB4KSkKCkNhbGw6CmxtKGZvcm11bGEgPSB5IH4geCkKCkNvZWZmaWNpZW50czoKKEludGVyY2VwdCkgICAgICAgICAgIHgxICAgICAgICAgICB4MiAgCiAgICAxLjg4ODAzICAgICAtMC4xNTY5NCAgICAgLTAuMDkwNzIgIAoKPiBwcmVkaWN0KGxtMSwgbmV3ZGF0YSA9IGRhdGEuZnJhbWUoeD0geHQpKQogICAgICAgICAgMSAgICAgICAgICAgMiAgICAgICAgICAgMyAgICAgICAgICAgNCAgICAgICAgICAgNSAgICAgICAgICAgNiAKIDEuMzY4MjAzNDEgIDEuMDI5ODI0MzMgIDEuMTQ1MDUyMTggIDAuMzUzMDY2MTUgIDAuOTIxOTAwOTQgIDAuMTI5OTE0OTIgCiAgICAgICAgICA3ICAgICAgICAgICA4ICAgICAgICAgICA5ICAgICAgICAgIDEwIAogMC4zMzU4NjQxNiAtMC4wOTMyMzYzMSAtMC4xNTk0NTEyNCAgMC4yMjc5NDA3OCAKV2FybmluZyBtZXNzYWdlOgonbmV3ZGF0YScgaGFkIDIgcm93cyBidXQgdmFyaWFibGVzIGZvdW5kIGhhdmUgMTAgcm93cyAKPiAjIyB3YXJucyBhcyBmcm9tIDIuMC4wCj4gCj4gCj4gIyMgZXZhbCBjb3VsZCBhbHRlciBhIGRhdGEuZnJhbWUvbGlzdCBzZWNvbmQgYXJndW1lbnQKPiBkYXRhKHRyZWVzKQo+IGEgPC0gdHJlZXMKPiBldmFsKHF1b3RlKHtHaXJ0aFsxXTwtTkE7R2lydGh9KSxhKQogWzFdICAgTkEgIDguNiAgOC44IDEwLjUgMTAuNyAxMC44IDExLjAgMTEuMCAxMS4xIDExLjIgMTEuMyAxMS40IDExLjQgMTEuNyAxMi4wClsxNl0gMTIuOSAxMi45IDEzLjMgMTMuNyAxMy44IDE0LjAgMTQuMiAxNC41IDE2LjAgMTYuMyAxNy4zIDE3LjUgMTcuOSAxOC4wIDE4LjAKWzMxXSAyMC42Cj4gYVsxLCBdCiAgR2lydGggSGVpZ2h0IFZvbHVtZQoxICAgOC4zICAgICA3MCAgIDEwLjMKPiB0cmVlc1sxLCBdCiAgR2lydGggSGVpZ2h0IFZvbHVtZQoxICAgOC4zICAgICA3MCAgIDEwLjMKPiAjIyBib3RoIGEgYW5kIHRyZWVzIGdvdCBhbHRlcmVkIGluIDEuOS4xCj4gCj4gCj4gIyMgd3JpdGUudGFibGUgZGlkIG5vdCBhcHBseSBxbWV0aG9kIHRvIGNvbC5uYW1lcyAoUFIjNzE3MSkKPiB4IDwtIGRhdGEuZnJhbWUoInRlc3Qgc3RyaW5nIHdpdGggXCIiID0gYygiYSBcIiBhbmQgYSAnIiksIGNoZWNrLm5hbWVzPUZBTFNFKQo+IHdyaXRlLnRhYmxlKHgpCiJ0ZXN0IHN0cmluZyB3aXRoIFwiIgoiMSIgImEgXCIgYW5kIGEgJyIKPiB3cml0ZS50YWJsZSh4LCBxbWV0aG9kID0gImRvdWJsZSIpCiJ0ZXN0IHN0cmluZyB3aXRoICIiIgoiMSIgImEgIiIgYW5kIGEgJyIKPiAjIyBRdW90ZSBpbiBjb2wgbmFtZSB3YXMgdW5lc2NhcGVkIGluIDEuOS4xLgo+IAo+IAo+ICMjIGV4dGVuc2lvbnMgdG8gcmVhZC50YWJsZQo+IE1hdCA8LSBtYXRyaXgoYygxOjMsIGxldHRlcnNbMTozXSwgMTozLCBMRVRURVJTWzE6M10sCisgICAgICAgICAgICAgICAgIGMoIjIwMDQtMDEtMDEiLCAiMjAwNC0wMi0wMSIsICIyMDA0LTAzLTAxIiksCisgICAgICAgICAgICAgICAgIGMoIjIwMDQtMDEtMDEgMTI6MDAiLCAiMjAwNC0wMi0wMSAxMjowMCIsICIyMDA0LTAzLTAxIDEyOjAwIikpLAorICAgICAgICAgICAgICAgMywgNikKPiBmb28gPC0gdGVtcGZpbGUodG1wZGlyID0gZ2V0d2QoKSkKPiB3cml0ZS50YWJsZShNYXQsIGZvbywgY29sLm5hbWVzID0gRkFMU0UsIHJvdy5uYW1lcyA9IEZBTFNFKQo+IHJlYWQudGFibGUoZm9vLCBjb2xDbGFzc2VzID0gYyhOQSwgTkEsICJOVUxMIiwgImNoYXJhY3RlciIsICJEYXRlIiwgIlBPU0lYY3QiKSwKKyAgICAgICAgICAgIHN0cmluZ3NBc0ZhY3RvcnM9VFJVRSkKICBWMSBWMiBWNCAgICAgICAgIFY1ICAgICAgICAgICAgICAgICAgVjYKMSAgMSAgYSAgQSAyMDA0LTAxLTAxIDIwMDQtMDEtMDEgMTI6MDA6MDAKMiAgMiAgYiAgQiAyMDA0LTAyLTAxIDIwMDQtMDItMDEgMTI6MDA6MDAKMyAgMyAgYyAgQyAyMDA0LTAzLTAxIDIwMDQtMDMtMDEgMTI6MDA6MDAKPiB1bmxpc3Qoc2FwcGx5KC5MYXN0LnZhbHVlLCBjbGFzcykpCiAgICAgICAgIFYxICAgICAgICAgIFYyICAgICAgICAgIFY0ICAgICAgICAgIFY1ICAgICAgICAgVjYxICAgICAgICAgVjYyIAogICJpbnRlZ2VyIiAgICAiZmFjdG9yIiAiY2hhcmFjdGVyIiAgICAgICJEYXRlIiAgICJQT1NJWGN0IiAgICAiUE9TSVh0IiAKPiByZWFkLnRhYmxlKGZvbywgY29sQ2xhc3NlcyA9IGMoImZhY3RvciIsTkEsIk5VTEwiLCJmYWN0b3IiLCJEYXRlIiwiUE9TSVhjdCIpLAorICAgICAgICAgICAgc3RyaW5nc0FzRmFjdG9ycz1UUlVFKQogIFYxIFYyIFY0ICAgICAgICAgVjUgICAgICAgICAgICAgICAgICBWNgoxICAxICBhICBBIDIwMDQtMDEtMDEgMjAwNC0wMS0wMSAxMjowMDowMAoyICAyICBiICBCIDIwMDQtMDItMDEgMjAwNC0wMi0wMSAxMjowMDowMAozICAzICBjICBDIDIwMDQtMDMtMDEgMjAwNC0wMy0wMSAxMjowMDowMAo+IHVubGlzdChzYXBwbHkoLkxhc3QudmFsdWUsIGNsYXNzKSkKICAgICAgIFYxICAgICAgICBWMiAgICAgICAgVjQgICAgICAgIFY1ICAgICAgIFY2MSAgICAgICBWNjIgCiAiZmFjdG9yIiAgImZhY3RvciIgICJmYWN0b3IiICAgICJEYXRlIiAiUE9TSVhjdCIgICJQT1NJWHQiIAo+IHJlYWQudGFibGUoZm9vLCBjb2xDbGFzc2VzID0gYyhWND0iY2hhcmFjdGVyIiksIHN0cmluZ3NBc0ZhY3RvcnM9VFJVRSkKICBWMSBWMiBWMyBWNCAgICAgICAgIFY1ICAgICAgICAgICAgICAgVjYKMSAgMSAgYSAgMSAgQSAyMDA0LTAxLTAxIDIwMDQtMDEtMDEgMTI6MDAKMiAgMiAgYiAgMiAgQiAyMDA0LTAyLTAxIDIwMDQtMDItMDEgMTI6MDAKMyAgMyAgYyAgMyAgQyAyMDA0LTAzLTAxIDIwMDQtMDMtMDEgMTI6MDAKPiB1bmxpc3Qoc2FwcGx5KC5MYXN0LnZhbHVlLCBjbGFzcykpCiAgICAgICAgIFYxICAgICAgICAgIFYyICAgICAgICAgIFYzICAgICAgICAgIFY0ICAgICAgICAgIFY1ICAgICAgICAgIFY2IAogICJpbnRlZ2VyIiAgICAiZmFjdG9yIiAgICJpbnRlZ2VyIiAiY2hhcmFjdGVyIiAgICAiZmFjdG9yIiAgICAiZmFjdG9yIiAKPiB1bmxpbmsoZm9vKQo+ICMjIGFkZGVkIGluIDIuMC4wCj4gCj4gCj4gIyMgd3JpdGUudGFibGUgd2l0aCBjb21wbGV4IGNvbHVtbnMgKFBSIzcyNjAsIGluIHBhcnQpCj4gd3JpdGUudGFibGUoZGF0YS5mcmFtZSh4ID0gMC41KzE6NCwgeSA9IDE6NCArIDEuNWkpLCBmaWxlID0gIiIpCiJ4IiAieSIKIjEiIDEuNSAxKzEuNWkKIjIiIDIuNSAyKzEuNWkKIjMiIDMuNSAzKzEuNWkKIjQiIDQuNSA0KzEuNWkKPiAjIHByaW50ZWQgYWxsIGFzIGNvbXBsZXggaW4gMi4wLjAuCj4gd3JpdGUudGFibGUoZGF0YS5mcmFtZSh4ID0gMC41KzE6NCwgeSA9IDE6NCArIDEuNWkpLCBmaWxlID0gIiIsIGRlYz0iLCIpCiJ4IiAieSIKIjEiIDEsNSAxKzEsNWkKIjIiIDIsNSAyKzEsNWkKIjMiIDMsNSAzKzEsNWkKIjQiIDQsNSA0KzEsNWkKPiAjIyB1c2VkICcuJyBub3QgJywnIGluIDIuMC4wCj4gCj4gIyMgc3BsaW5lZnVuKCkgdmFsdWUgdGVzdAo+ICh4IDwtIHNlcSgwLDYsIGxlbmd0aD0yNSkpCiBbMV0gMC4wMCAwLjI1IDAuNTAgMC43NSAxLjAwIDEuMjUgMS41MCAxLjc1IDIuMDAgMi4yNSAyLjUwIDIuNzUgMy4wMCAzLjI1IDMuNTAKWzE2XSAzLjc1IDQuMDAgNC4yNSA0LjUwIDQuNzUgNS4wMCA1LjI1IDUuNTAgNS43NSA2LjAwCj4gbXggPC0gc2FwcGx5KGMoImZtbSIsICJuYXQiLCAicGVyIiksCisgICAgICAgICAgICAgIGZ1bmN0aW9uKG0pIHNwbGluZWZ1bigxOjUsIGMoMSwyLDQsMywxKSwgbWV0aG9kID0gbSkoeCkpCj4gY2JpbmQoeCxteCkKICAgICAgICAgeCAgICAgICBmbW0gICAgICAgICBuYXQgICAgICAgcGVyCiBbMSxdIDAuMDAgNS4zMzMzMzMzICAwLjQ2NDI4NTcxIDMuMDAwMDAwMAogWzIsXSAwLjI1IDMuNTMxMjUwMCAgMC41OTgyMTQyOSAyLjQwNjI1MDAKIFszLF0gMC41MCAyLjI1MDAwMDAgIDAuNzMyMTQyODYgMS44MTI1MDAwCiBbNCxdIDAuNzUgMS40MjcwODMzICAwLjg2NjA3MTQzIDEuMzEyNTAwMAogWzUsXSAxLjAwIDEuMDAwMDAwMCAgMS4wMDAwMDAwMCAxLjAwMDAwMDAKIFs2LF0gMS4yNSAwLjkwNjI1MDAgIDEuMTQxMTgzMDQgMC45NDUzMTI1CiBbNyxdIDEuNTAgMS4wODMzMzMzICAxLjMyNTg5Mjg2IDEuMTI1MDAwMAogWzgsXSAxLjc1IDEuNDY4NzUwMCAgMS41OTc2NTYyNSAxLjQ5MjE4NzUKIFs5LF0gMi4wMCAyLjAwMDAwMDAgIDIuMDAwMDAwMDAgMi4wMDAwMDAwClsxMCxdIDIuMjUgMi42MDkzNzUwICAyLjU0ODU0OTExIDIuNTkzNzUwMApbMTEsXSAyLjUwIDMuMjA4MzMzMyAgMy4xNDczMjE0MyAzLjE4NzUwMDAKWzEyLF0gMi43NSAzLjcwMzEyNTAgIDMuNjcyNDMzMDQgMy42ODc1MDAwClsxMyxdIDMuMDAgNC4wMDAwMDAwICA0LjAwMDAwMDAwIDQuMDAwMDAwMApbMTQsXSAzLjI1IDQuMDMxMjUwMCAgNC4wMzk2MjA1NCA0LjA1NDY4NzUKWzE1LF0gMy41MCAzLjgzMzMzMzMgIDMuODM0ODIxNDMgMy44NzUwMDAwClsxNixdIDMuNzUgMy40Njg3NTAwICAzLjQ2MjYxMTYxIDMuNTA3ODEyNQpbMTcsXSA0LjAwIDMuMDAwMDAwMCAgMy4wMDAwMDAwMCAzLjAwMDAwMDAKWzE4LF0gNC4yNSAyLjQ4NDM3NTAgIDIuNTExNzE4NzUgMi40MDYyNTAwClsxOSxdIDQuNTAgMS45NTgzMzMzICAyLjAxMzM5Mjg2IDEuODEyNTAwMApbMjAsXSA0Ljc1IDEuNDUzMTI1MCAgMS41MDgzNzA1NCAxLjMxMjUwMDAKWzIxLF0gNS4wMCAxLjAwMDAwMDAgIDEuMDAwMDAwMDAgMS4wMDAwMDAwClsyMixdIDUuMjUgMC42MzAyMDgzICAwLjQ5MTA3MTQzIDAuOTQ1MzEyNQpbMjMsXSA1LjUwIDAuMzc1MDAwMCAtMC4wMTc4NTcxNCAxLjEyNTAwMDAKWzI0LF0gNS43NSAwLjI2NTYyNTAgLTAuNTI2Nzg1NzEgMS40OTIxODc1ClsyNSxdIDYuMDAgMC4zMzMzMzMzIC0xLjAzNTcxNDI5IDIuMDAwMDAwMAo+IAo+IAo+ICMjIGluZmluaXRlIGxvb3AgaW4gcmVhZC5md2YgKFBSIzczNTApCj4gY2F0KGZpbGU9InRlc3QudHh0Iiwgc2VwID0gIlxuIiwgIiMgY29tbWVudCAxIiwgIjEyMzQ1NjcgICAjIGNvbW1lbnQgMiIsCisgICAgICIxIDIzNDU2NyAgIyBjb21tZW50IDMiLCAiMTIzNDUgIDY3ICMgY29tbWVudCA0IiwgIiMgY29tbWVudCA1IikKPiByZWFkLmZ3ZigidGVzdC50eHQiLCB3aWR0aD1jKDIsMiwzKSwgc2tpcD0xLCBuPTQpICMgbG9vcGVkCiAgVjEgVjIgIFYzCjEgMTIgMzQgNTY3CjIgIDEgMjMgNDU2CjMgMTIgMzQgICA1Cj4gcmVhZC5md2YoInRlc3QudHh0Iiwgd2lkdGg9YygyLDIsMyksIHNraXA9MSkgICAgICAjIDEgbGluZSBzaG9ydAogIFYxIFYyICBWMwoxIDEyIDM0IDU2NwoyICAxIDIzIDQ1NgozIDEyIDM0ICAgNQo+IHJlYWQuZndmKCJ0ZXN0LnR4dCIsIHdpZHRoPWMoMiwyLDMpLCBza2lwPTApCiAgVjEgVjIgIFYzCjEgMTIgMzQgNTY3CjIgIDEgMjMgNDU2CjMgMTIgMzQgICA1Cj4gdW5saW5rKCJ0ZXN0LnR4dCIpCj4gIyMKPiAKPiAKPiAjIyBzcGxpdCB3YXMgbm90IGhhbmRsaW5nIGxpc3RzIGFuZCByYXdzCj4gc3BsaXQoYXMubGlzdCgxOjMpLCBjKDEsMSwyKSkKJGAxYAokYDFgW1sxXV0KWzFdIDEKCiRgMWBbWzJdXQpbMV0gMgoKCiRgMmAKJGAyYFtbMV1dClsxXSAzCgoKPiAoeSA8LSBjaGFyVG9SYXcoIkEgdGVzdCBzdHJpbmciKSkKIFsxXSA0MSAyMCA3NCA2NSA3MyA3NCAyMCA3MyA3NCA3MiA2OSA2ZSA2Nwo+ICh6IDwtIHNwbGl0KHksIHJlcCgxOjUsIHRpbWVzPWMoMSwxLDQsMSw2KSkpKQokYDFgClsxXSA0MQoKJGAyYApbMV0gMjAKCiRgM2AKWzFdIDc0IDY1IDczIDc0CgokYDRgClsxXSAyMAoKJGA1YApbMV0gNzMgNzQgNzIgNjkgNmUgNjcKCj4gc2FwcGx5KHosIHJhd1RvQ2hhcikKICAgICAgIDEgICAgICAgIDIgICAgICAgIDMgICAgICAgIDQgICAgICAgIDUgCiAgICAgIkEiICAgICAgIiAiICAgInRlc3QiICAgICAgIiAiICJzdHJpbmciIAo+ICMjIHdyb25nIHJlc3VsdHMgaW4gMi4wLjAKPiAKPiAKPiAjIyB0ZXN0cyBvZiBjaGFuZ2VkIFMzIGltcGxpY2l0IGNsYXNzZXMgaW4gMi4xLjAKPiBmb28gPC0gZnVuY3Rpb24oeCwgLi4uKSBVc2VNZXRob2QoImZvbyIpCj4gZm9vLm51bWVyaWMgPC0gZnVuY3Rpb24oeCkgY2F0KCJudW1lcmljIGFyZ1xuIikKPiBmb28oMToxMCkKbnVtZXJpYyBhcmcKPiBmb28ocGkpCm51bWVyaWMgYXJnCj4gZm9vKG1hdHJpeCgxOjEwLCAyLCA1KSkKbnVtZXJpYyBhcmcKPiBmb28uaW50ZWdlciA8LSBmdW5jdGlvbih4KSBjYXQoImludGVnZXIgYXJnXG4iKQo+IGZvby5kb3VibGUgPC0gZnVuY3Rpb24oeCkgY2F0KCJkb3VibGUgYXJnXG4iKQo+IGZvbygxOjEwKQppbnRlZ2VyIGFyZwo+IGZvbyhwaSkKZG91YmxlIGFyZwo+IGZvbyhtYXRyaXgoMToxMCwgMiwgNSkpCmludGVnZXIgYXJnCj4gIyMKPiAKPiAKPiAjIyBzdHIoKSBpbnRlcnByZXRlZCBlc2NhcGUgc2VxdWVuY2VzIHByaW9yIHRvIDIuMS4wCj4geCA8LSAiYWJcYmNcbmRlZiIKPiBzdHIoeCkKIGNociAiYWJcYmNcbmRlZiIKPiBzdHIoeCwgdmVjLmxlbj0wKSMgZmFpbGVkIGluIHJldiAzMjI0NAogY2hyICAuLi4KPiBzdHIoZmFjdG9yKHgpKQogRmFjdG9yIHcvIDEgbGV2ZWwgImFiXGJjXG5kZWYiOiAxCj4gCj4geCA8LSBjKCJhIiwgTkEsICJiIikKPiBmYWN0b3IoeCkKWzFdIGEgICAgPE5BPiBiICAgCkxldmVsczogYSBiCj4gZmFjdG9yKHgsIGV4Y2x1ZGU9IiIpClsxXSBhICAgIDxOQT4gYiAgIApMZXZlbHM6IGEgYiA8TkE+Cj4gc3RyKHgpCiBjaHIgWzE6M10gImEiIE5BICJiIgo+IHN0cihmYWN0b3IoeCkpCiBGYWN0b3Igdy8gMiBsZXZlbHMgImEiLCJiIjogMSBOQSAyCj4gc3RyKGZhY3Rvcih4LCBleGNsdWRlPSIiKSkKIEZhY3RvciB3LyAzIGxldmVscyAiYSIsImIiLE5BOiAxIDMgMgo+ICMjCj4gCj4gCj4gIyMgcHJpbnQuZmFjdG9yKHF1b3RlPVRSVUUpIHdhcyBub3QgcXVvdGluZyBsZXZlbHMKPiB4IDwtIGMoImEiLCBOQSwgImIiLCAnYSAiIHRlc3QnKSAjIiAoY29tbWVudCBmb3IgZm9udGlmaWNhdGlvbikKPiBmYWN0b3IoeCkKWzFdIGEgICAgICAgIDxOQT4gICAgIGIgICAgICAgIGEgIiB0ZXN0CkxldmVsczogYSBhICIgdGVzdCBiCj4gZmFjdG9yKHgsIGV4Y2x1ZGU9IiIpClsxXSBhICAgICAgICA8TkE+ICAgICBiICAgICAgICBhICIgdGVzdApMZXZlbHM6IGEgYSAiIHRlc3QgYiA8TkE+Cj4gcHJpbnQoZmFjdG9yKHgpLCBxdW90ZT1UUlVFKQpbMV0gImEiICAgICAgICAgTkEgICAgICAgICAgImIiICAgICAgICAgImEgXCIgdGVzdCIKTGV2ZWxzOiAiYSIgImEgXCIgdGVzdCIgImIiCj4gcHJpbnQoZmFjdG9yKHgsIGV4Y2x1ZGU9IiIpLCBxdW90ZT1UUlVFKQpbMV0gImEiICAgICAgICAgTkEgICAgICAgICAgImIiICAgICAgICAgImEgXCIgdGVzdCIKTGV2ZWxzOiAiYSIgImEgXCIgdGVzdCIgImIiIE5BCj4gIyMgbGFzdCB0d28gcHJpbnRlZCBsZXZlbHMgZGlmZmVyZW50bHkgZnJvbSB2YWx1ZXMgaW4gMi4wLjEKPiAKPiAKPiAjIyB3cml0ZS50YWJsZSBpbiBtYXJnaW5hbCBjYXNlcwo+IHggPC0gbWF0cml4KCwgMywgMCkKPiB3cml0ZS50YWJsZSh4KSAjIDMgcm93cwoiMSIgCiIyIiAKIjMiIAo+IHdyaXRlLnRhYmxlKHgsIHJvdy5uYW1lcz1GQUxTRSkKCgoKPiAjIG5vdGU6IHNjYW4gYW5kIHJlYWQudGFibGUgd29uJ3QgcmVhZCB0aGlzIGFzIHRoZXkgdGFrZSBlbXB0eSBmaWVsZHMgYXMgTkEKPiAjIyB3YXMgMSByb3cgaW4gMi4wLjEKPiAKPiAKPiAjIyBNb3JlIHRlc3RzIG9mIHdyaXRlLnRhYmxlCj4geCA8LSBsaXN0KGE9MSwgYj0xOjIsIGM9Mzo0LCBkPTUpCj4gZGltKHgpIDwtIGMoMiwyKQo+IHgKICAgICBbLDFdICAgICAgWywyXSAgICAgClsxLF0gMSAgICAgICAgIGludGVnZXIsMgpbMixdIGludGVnZXIsMiA1ICAgICAgICAKPiB3cml0ZS50YWJsZSh4KQoiVjEiICJWMiIKIjEiIDEgMzo0CiIyIiAxOjIgNQo+IAo+IHgxIDwtIGRhdGEuZnJhbWUoYT0xOjIsIGI9SShtYXRyaXgoTEVUVEVSU1sxOjRdLCAyLCAyKSksIGMgPSBjKCIoaSkiLCAiKGlpKSIpKQo+IHgxCiAgYSBiLjEgYi4yICAgIGMKMSAxICAgQSAgIEMgIChpKQoyIDIgICBCICAgRCAoaWkpCj4gd3JpdGUudGFibGUoeDEpICMgSW4gMi4wLjEgaGFkIDMgaGVhZGVycywgNCBjb2xzCiJhIiAiYi4xIiAiYi4yIiAiYyIKIjEiIDEgQSBDICIoaSkiCiIyIiAyIEIgRCAiKGlpKSIKPiB3cml0ZS50YWJsZSh4MSwgcXVvdGU9YygyLDMsNCkpCiJhIiAiYi4xIiAiYi4yIiAiYyIKIjEiIDEgIkEiICJDIiAiKGkpIgoiMiIgMiAiQiIgIkQiICIoaWkpIgo+IAo+IHgyIDwtIGRhdGEuZnJhbWUoYT0xOjIsIGI9SShsaXN0KGE9MSwgYj0yKSkpCj4geDIKICBhIGIKYSAxIDEKYiAyIDIKPiB3cml0ZS50YWJsZSh4MikKImEiICJiIgoiYSIgMSAxCiJiIiAyIDIKPiAKPiB4MyA8LSBzZXEoYXMuRGF0ZSgiMjAwNS0wMS0wMSIpLCBsZW49NiwgYnk9ImRheSIpCj4geDQgPC0gZGF0YS5mcmFtZSh4PTE6NiwgeT14MykKPiBkaW0oeDMpIDwtIGMoMiwzKQo+IHgzClsxXSAiMjAwNS0wMS0wMSIgIjIwMDUtMDEtMDIiICIyMDA1LTAxLTAzIiAiMjAwNS0wMS0wNCIgIjIwMDUtMDEtMDUiCls2XSAiMjAwNS0wMS0wNiIKPiB3cml0ZS50YWJsZSh4MykgIyBtYXRyaXgsIHNvIGxvc2VzIGNsYXNzCiJWMSIgIlYyIiAiVjMiCiIxIiAxMjc4NCAxMjc4NiAxMjc4OAoiMiIgMTI3ODUgMTI3ODcgMTI3ODkKPiB4NAogIHggICAgICAgICAgeQoxIDEgMjAwNS0wMS0wMQoyIDIgMjAwNS0wMS0wMgozIDMgMjAwNS0wMS0wMwo0IDQgMjAwNS0wMS0wNAo1IDUgMjAwNS0wMS0wNQo2IDYgMjAwNS0wMS0wNgo+IHdyaXRlLnRhYmxlKHg0KSAjIHByZXNlcnZlcyBjbGFzcywgZG9lcyBub3QgcXVvdGUKIngiICJ5IgoiMSIgMSAyMDA1LTAxLTAxCiIyIiAyIDIwMDUtMDEtMDIKIjMiIDMgMjAwNS0wMS0wMwoiNCIgNCAyMDA1LTAxLTA0CiI1IiA1IDIwMDUtMDEtMDUKIjYiIDYgMjAwNS0wMS0wNgo+ICMjCj4gCj4gCj4gIyMgUHJvYmxlbSB3aXRoIGVhcmxpZXIgcmVnZXhwIGNvZGUgc3BvdHRlZCBieSBLSAo+IGdyZXAoIiguKnMpezJ9IiwgIkFya2Fuc2FzIiwgdiA9IFRSVUUpClsxXSAiQXJrYW5zYXMiCj4gZ3JlcCgiKC4qcyl7M30iLCAiQXJrYW5zYXMiLCB2ID0gVFJVRSkKY2hhcmFjdGVyKDApCj4gZ3JlcCgiKC4qcyl7M30iLCBzdGF0ZS5uYW1lLCB2ID0gVFJVRSkKWzFdICJNYXNzYWNodXNldHRzIiAiTWlzc2lzc2lwcGkiICAKPiAjIyBUaG91Z2h0IEFya2Fuc2FzIGhhZCAzIHMncy4KPiAKPiAKPiAjIyBSZXBsYWNpbmcgcGFydCBvZiBhIG5vbi1leGlzdGVudCBjb2x1bW4gY291bGQgY3JlYXRlIGEgc2hvcnQgY29sdW1uLgo+IHh4PC0gZGF0YS5mcmFtZShhPTE6NCwgYj1sZXR0ZXJzWzE6NF0pCj4geHhbMjozLCAiYyJdIDwtIDI6Mwo+ICMjIGdhdmUgc2hvcnQgY29sdW1uIGluIFIgPCAyLjEuMC4KPiAKPiAKPiAjIyBhZGQxL2Ryb3AxIGNvdWxkIGdpdmUgbWlzbGVhZGluZyByZXN1bHRzIGlmIG1pc3NpbmcgdmFsdWVzIHdlcmUgaW52b2x2ZWQKPiB5IDwtIHJub3JtKDE6MjApCj4geCA8LSAxOjIwOyB4WzEwXSA8LSBOQQo+IHgyIDwtIHJ1bmlmKDIwKTsgeDJbMjBdIDwtIE5BCj4gZml0IDwtIGxtKHkgfiB4KQo+IGRyb3AxKGZpdCkKU2luZ2xlIHRlcm0gZGVsZXRpb25zCgpNb2RlbDoKeSB+IHgKICAgICAgIERmIFN1bSBvZiBTcSAgICAgUlNTICAgICBBSUMKPG5vbmU+ICAgICAgICAgICAgICAgOS4xNzI4IC05LjgzNTgKeCAgICAgICAxICAgIDEuNjU5MyAxMC44MzIxIC04LjY3NjYKPiByZXMgPC0gIHRyeShzdGF0czo6OmRyb3AxLmRlZmF1bHQoZml0KSkKRXJyb3IgaW4gc3RhdHM6Ojpkcm9wMS5kZWZhdWx0KGZpdCkgOiAKICBudW1iZXIgb2Ygcm93cyBpbiB1c2UgaGFzIGNoYW5nZWQ6IHJlbW92ZSBtaXNzaW5nIHZhbHVlcz8KPiBzdG9waWZub3QoaW5oZXJpdHMocmVzLCAidHJ5LWVycm9yIikpCj4gYWRkMShmaXQsIH4gLiAreDIpClNpbmdsZSB0ZXJtIGFkZGl0aW9ucwoKTW9kZWw6CnkgfiB4CiAgICAgICBEZiBTdW0gb2YgU3EgICAgUlNTICAgICBBSUMKPG5vbmU+ICAgICAgICAgICAgICA4Ljg0NzUgLTguNzg0Mgp4MiAgICAgIDEgIDAuMDMwOTMyIDguODE2NiAtNi44NDczCldhcm5pbmcgbWVzc2FnZToKSW4gYWRkMS5sbShmaXQsIH4uICsgeDIpIDogdXNpbmcgdGhlIDE4LzE5IHJvd3MgZnJvbSBhIGNvbWJpbmVkIGZpdAo+IHJlcyA8LSAgdHJ5KHN0YXRzOjo6YWRkMS5kZWZhdWx0KGZpdCwgfiAuICt4MikpCkVycm9yIGluIHN0YXRzOjo6YWRkMS5kZWZhdWx0KGZpdCwgfi4gKyB4MikgOiAKICBudW1iZXIgb2Ygcm93cyBpbiB1c2UgaGFzIGNoYW5nZWQ6IHJlbW92ZSBtaXNzaW5nIHZhbHVlcz8KPiBzdG9waWZub3QoaW5oZXJpdHMocmVzLCAidHJ5LWVycm9yIikpCj4gIyMgMi4wLjEgcmFuIGFuZCBnYXZlIGluY29ycmVjdCBhbnN3ZXJzLgo+IAo+IAo+ICMjIChQUiM3Nzg5KSBlc2NhcGVkIHF1b3RlcyBpbiB0aGUgZmlyc3QgZml2ZSBsaW5lcyBmb3IgcmVhZC50YWJsZQo+IHRmIDwtIHRlbXBmaWxlKHRtcGRpciA9IGdldHdkKCkpCj4geCA8LSBjKCI2ICdUVjIgIFNob3J0bGFuZCBTdHJlZXQnIiwKKyAgICAgICAgIjIgJ0kgZG9uXFxcJ3Qgd2F0Y2ggVFYgYXQgNyciLAorICAgICAgICAiMSAnSVxcXCdtIG5vdCBib3RoZXJlZCwgd2hhdGV2ZXIgdGhhdCBsb29rcyBnb29kJyIsCisgICAgICAgICIyICdJIGNoYW5uZWwgc3VyZiciKQo+IHdyaXRlTGluZXMoeCwgdGYpCj4gcmVhZC50YWJsZSh0ZikKICBWMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVjIKMSAgNiAgICAgICAgICAgICAgICAgICAgICBUVjIgIFNob3J0bGFuZCBTdHJlZXQKMiAgMiAgICAgICAgICAgICAgICAgICAgICBJIGRvbid0IHdhdGNoIFRWIGF0IDcKMyAgMSBJJ20gbm90IGJvdGhlcmVkLCB3aGF0ZXZlciB0aGF0IGxvb2tzIGdvb2QKNCAgMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSSBjaGFubmVsIHN1cmYKPiB4IDwtIGMoIjYgJ1RWMiAgU2hvcnRsYW5kIFN0cmVldCciLAorICAgICAgICAiMiAnSSBkb24nJ3Qgd2F0Y2ggVFYgYXQgNyciLAorICAgICAgICAiMSAnSScnbSBub3QgYm90aGVyZWQsIHdoYXRldmVyIHRoYXQgbG9va3MgZ29vZCciLAorICAgICAgICAiMiAnSSBjaGFubmVsIHN1cmYnIikKPiB3cml0ZUxpbmVzKHgsIHRmKQo+IHJlYWQudGFibGUodGYsIHNlcD0iICIpCiAgVjEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFYyCjEgIDYgICAgICAgICAgICAgICAgICAgICAgVFYyICBTaG9ydGxhbmQgU3RyZWV0CjIgIDIgICAgICAgICAgICAgICAgICAgICAgSSBkb24ndCB3YXRjaCBUViBhdCA3CjMgIDEgSSdtIG5vdCBib3RoZXJlZCwgd2hhdGV2ZXIgdGhhdCBsb29rcyBnb29kCjQgIDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEkgY2hhbm5lbCBzdXJmCj4gdW5saW5rKHRmKQo+ICMjIG1hbmdsZWQgaW4gMi4wLjEKPiAKPiAKPiAjIyAoUFIjNzgwMikgcHJpbnRDb2VmbWF0KHNpZ25pZi5sZWdlbmQgPUZBTFNFKSBmYWlsZWQKPiBzZXQuc2VlZCgxMjMpCj4gY21hdCA8LSBjYmluZChybm9ybSgzLCAxMCksIHNxcnQocmNoaXNxKDMsIDEyKSkpCj4gY21hdCA8LSBjYmluZChjbWF0LCBjbWF0WywxXS9jbWF0WywyXSkKPiBjbWF0IDwtIGNiaW5kKGNtYXQsIDIqcG5vcm0oLWNtYXRbLDNdKSkKPiBjb2xuYW1lcyhjbWF0KSA8LSBjKCJFc3RpbWF0ZSIsICJTdGQuRXJyIiwgIlogdmFsdWUiLCAiUHIoPnopIikKPiBwcmludENvZWZtYXQoY21hdCwgc2lnbmlmLnN0YXJzID0gVFJVRSkKICAgICBFc3RpbWF0ZSBTdGQuRXJyIFogdmFsdWUgICAgUHIoPnopICAgIApbMSxdICAxMS4zMDkyICAyLjg2MzYgIDMuOTQ5MyA3LjgzN2UtMDUgKioqClsyLF0gIDExLjIzMDEgIDMuNTMwMSAgMy4xODEyICAwLjAwMTQ2NyAqKiAKWzMsXSAgIDkuOTE2MSAgMy4wOTI3ICAzLjIwNjMgIDAuMDAxMzQ0ICoqIAotLS0KU2lnbmlmLiBjb2RlczogIDAgJyoqKicgMC4wMDEgJyoqJyAwLjAxICcqJyAwLjA1ICcuJyAwLjEgJyAnIDEKPiBwcmludENvZWZtYXQoY21hdCwgc2lnbmlmLnN0YXJzID0gVFJVRSwgc2lnbmlmLmxlZ2VuZCA9IEZBTFNFKQogICAgIEVzdGltYXRlIFN0ZC5FcnIgWiB2YWx1ZSAgICBQcig+eikgICAgClsxLF0gIDExLjMwOTIgIDIuODYzNiAgMy45NDkzIDcuODM3ZS0wNSAqKioKWzIsXSAgMTEuMjMwMSAgMy41MzAxICAzLjE4MTIgIDAuMDAxNDY3ICoqIApbMyxdICAgOS45MTYxICAzLjA5MjcgIDMuMjA2MyAgMC4wMDEzNDQgKiogCj4gIyBubyBzdGFycywgc28gbm8gbGVnZW5kCj4gcHJpbnRDb2VmbWF0KGNtYXQsIHNpZ25pZi5zdGFycyA9IEZBTFNFKQogICAgIEVzdGltYXRlIFN0ZC5FcnIgWiB2YWx1ZSAgICBQcig+eikKWzEsXSAgMTEuMzA5MiAgMi44NjM2ICAzLjk0OTMgNy44MzdlLTA1ClsyLF0gIDExLjIzMDEgIDMuNTMwMSAgMy4xODEyICAwLjAwMTQ2NwpbMyxdICAgOS45MTYxICAzLjA5MjcgIDMuMjA2MyAgMC4wMDEzNDQKPiBwcmludENvZWZtYXQoY21hdCwgc2lnbmlmLnN0YXJzID0gVFJVRSwgc2lnbmlmLmxlZ2VuZCA9IFRSVUUpCiAgICAgRXN0aW1hdGUgU3RkLkVyciBaIHZhbHVlICAgIFByKD56KSAgICAKWzEsXSAgMTEuMzA5MiAgMi44NjM2ICAzLjk0OTMgNy44MzdlLTA1ICoqKgpbMixdICAxMS4yMzAxICAzLjUzMDEgIDMuMTgxMiAgMC4wMDE0NjcgKiogClszLF0gICA5LjkxNjEgIDMuMDkyNyAgMy4yMDYzICAwLjAwMTM0NCAqKiAKLS0tClNpZ25pZi4gY29kZXM6ICAwICcqKionIDAuMDAxICcqKicgMC4wMSAnKicgMC4wNSAnLicgMC4xICcgJyAxCj4gIyMgZGlkIG5vdCB3b3JrIGluIDIuMS4wCj4gCj4gCj4gIyMgUFIjNzgyNCBzdWJzY3JpcHRpbmcgYW4gYXJyYXkgYnkgYSBtYXRyaXgKPiB4IDwtIG1hdHJpeCgxOjYsIG5jb2w9MikKPiB4W3JiaW5kKGMoMSwxKSwgYygyLDIpKV0KWzFdIDEgNQo+IHhbcmJpbmQoYygxLDEpLCBjKDIsMiksIGMoMCwxKSldClsxXSAxIDUKPiB4W3JiaW5kKGMoMSwxKSwgYygyLDIpLCBjKDAsMCkpXQpbMV0gMSA1Cj4geFtyYmluZChjKDEsMSksIGMoMiwyKSwgYygwLDIpKV0KWzFdIDEgNQo+IHhbcmJpbmQoYygxLDEpLCBjKDIsMiksIGMoMCwzKSldClsxXSAxIDUKPiB4W3JiaW5kKGMoMSwxKSwgYygyLDIpLCBjKDEsMCkpXQpbMV0gMSA1Cj4geFtyYmluZChjKDEsMSksIGMoMiwyKSwgYygyLDApKV0KWzFdIDEgNQo+IHhbcmJpbmQoYygxLDEpLCBjKDIsMiksIGMoMywwKSldClsxXSAxIDUKPiB4W3JiaW5kKGMoMSwwKSwgYygwLDIpLCBjKDMsMCkpXQppbnRlZ2VyKDApCj4geFtyYmluZChjKDEsMCksIGMoMCwwKSwgYygzLDApKV0KaW50ZWdlcigwKQo+IHhbcmJpbmQoYygxLDEpLCBjKDIsMiksIGMoMSwyKSldClsxXSAxIDUgNAo+IHhbcmJpbmQoYygxLDEpLCBjKDIsTkEpLCBjKDEsMikpXQpbMV0gIDEgTkEgIDQKPiB4W3JiaW5kKGMoMSwwKSwgYygyLE5BKSwgYygxLDIpKV0KWzFdIE5BICA0Cj4gdHJ5KHhbcmJpbmQoYygxLDEpLCBjKDIsMiksIGMoLTEsMikpXSkKRXJyb3IgaW4geFtyYmluZChjKDEsIDEpLCBjKDIsIDIpLCBjKC0xLCAyKSldIDogCiAgbmVnYXRpdmUgdmFsdWVzIGFyZSBub3QgYWxsb3dlZCBpbiBhIG1hdHJpeCBzdWJzY3JpcHQKPiB0cnkoeFtyYmluZChjKDEsMSksIGMoMiwyKSwgYygtMiwyKSldKQpFcnJvciBpbiB4W3JiaW5kKGMoMSwgMSksIGMoMiwgMiksIGMoLTIsIDIpKV0gOiAKICBuZWdhdGl2ZSB2YWx1ZXMgYXJlIG5vdCBhbGxvd2VkIGluIGEgbWF0cml4IHN1YnNjcmlwdAo+IHRyeSh4W3JiaW5kKGMoMSwxKSwgYygyLDIpLCBjKC0zLDIpKV0pCkVycm9yIGluIHhbcmJpbmQoYygxLCAxKSwgYygyLCAyKSwgYygtMywgMikpXSA6IAogIG5lZ2F0aXZlIHZhbHVlcyBhcmUgbm90IGFsbG93ZWQgaW4gYSBtYXRyaXggc3Vic2NyaXB0Cj4gdHJ5KHhbcmJpbmQoYygxLDEpLCBjKDIsMiksIGMoLTQsMikpXSkKRXJyb3IgaW4geFtyYmluZChjKDEsIDEpLCBjKDIsIDIpLCBjKC00LCAyKSldIDogCiAgbmVnYXRpdmUgdmFsdWVzIGFyZSBub3QgYWxsb3dlZCBpbiBhIG1hdHJpeCBzdWJzY3JpcHQKPiB0cnkoeFtyYmluZChjKDEsMSksIGMoMiwyKSwgYygtMSwtMSkpXSkKRXJyb3IgaW4geFtyYmluZChjKDEsIDEpLCBjKDIsIDIpLCBjKC0xLCAtMSkpXSA6IAogIG5lZ2F0aXZlIHZhbHVlcyBhcmUgbm90IGFsbG93ZWQgaW4gYSBtYXRyaXggc3Vic2NyaXB0Cj4gdHJ5KHhbcmJpbmQoYygxLDEsMSksIGMoMiwyLDIpKV0pClsxXSAxIDIgMSAyIDEgMgo+IAo+ICMgdmVyaWZ5IHRoYXQgcmFuZ2UgY2hlY2tzIGFyZSBhcHBsaWVkIHRvIG5lZ2F0aXZlIGluZGljZXMKPiB4IDwtIG1hdHJpeCgxOjYsIG5jb2w9MykKPiB0cnkoeFtyYmluZChjKDEsMSksIGMoMiwyKSwgYygtMywzKSldKQpFcnJvciBpbiB4W3JiaW5kKGMoMSwgMSksIGMoMiwgMiksIGMoLTMsIDMpKV0gOiAKICBuZWdhdGl2ZSB2YWx1ZXMgYXJlIG5vdCBhbGxvd2VkIGluIGEgbWF0cml4IHN1YnNjcmlwdAo+IHRyeSh4W3JiaW5kKGMoMSwxKSwgYygyLDIpLCBjKC00LDMpKV0pCkVycm9yIGluIHhbcmJpbmQoYygxLCAxKSwgYygyLCAyKSwgYygtNCwgMykpXSA6IAogIG5lZ2F0aXZlIHZhbHVlcyBhcmUgbm90IGFsbG93ZWQgaW4gYSBtYXRyaXggc3Vic2NyaXB0Cj4gIyMgZ2VuZXJhbGx5IGFsbG93ZWQgaW4gMi4xLjAuCj4gCj4gCj4gIyMgcHJpbnRpbmcgUkFXIG1hdHJpY2VzL2FycmF5cyB3YXMgbm90IGltcGxlbWVudGVkCj4gcyA8LSBzYXBwbHkoMDo3LCBmdW5jdGlvbihpKSByYXdTaGlmdChjaGFyVG9SYXcoIm15IHRleHQiKSxpKSkKPiBzCiAgICAgWywxXSBbLDJdIFssM10gWyw0XSBbLDVdIFssNl0gWyw3XSBbLDhdClsxLF0gICA2ZCAgIGRhICAgYjQgICA2OCAgIGQwICAgYTAgICA0MCAgIDgwClsyLF0gICA3OSAgIGYyICAgZTQgICBjOCAgIDkwICAgMjAgICA0MCAgIDgwClszLF0gICAyMCAgIDQwICAgODAgICAwMCAgIDAwICAgMDAgICAwMCAgIDAwCls0LF0gICA3NCAgIGU4ICAgZDAgICBhMCAgIDQwICAgODAgICAwMCAgIDAwCls1LF0gICA2NSAgIGNhICAgOTQgICAyOCAgIDUwICAgYTAgICA0MCAgIDgwCls2LF0gICA3OCAgIGYwICAgZTAgICBjMCAgIDgwICAgMDAgICAwMCAgIDAwCls3LF0gICA3NCAgIGU4ICAgZDAgICBhMCAgIDQwICAgODAgICAwMCAgIDAwCj4gZGltKHMpIDwtIGMoNyw0LDIpCj4gcwosICwgMQoKICAgICBbLDFdIFssMl0gWywzXSBbLDRdClsxLF0gICA2ZCAgIGRhICAgYjQgICA2OApbMixdICAgNzkgICBmMiAgIGU0ICAgYzgKWzMsXSAgIDIwICAgNDAgICA4MCAgIDAwCls0LF0gICA3NCAgIGU4ICAgZDAgICBhMApbNSxdICAgNjUgICBjYSAgIDk0ICAgMjgKWzYsXSAgIDc4ICAgZjAgICBlMCAgIGMwCls3LF0gICA3NCAgIGU4ICAgZDAgICBhMAoKLCAsIDIKCiAgICAgWywxXSBbLDJdIFssM10gWyw0XQpbMSxdICAgZDAgICBhMCAgIDQwICAgODAKWzIsXSAgIDkwICAgMjAgICA0MCAgIDgwClszLF0gICAwMCAgIDAwICAgMDAgICAwMApbNCxdICAgNDAgICA4MCAgIDAwICAgMDAKWzUsXSAgIDUwICAgYTAgICA0MCAgIDgwCls2LF0gICA4MCAgIDAwICAgMDAgICAwMApbNyxdICAgNDAgICA4MCAgIDAwICAgMDAKCj4gIyMgZW1wdHkgPCAyLjEuMQo+IAo+IAo+ICMjIGludGVycHJldGF0aW9uIG9mICcuJyBkaXJlY3RseSBieSBtb2RlbC5tYXRyaXgKPiBkZCA8LSBkYXRhLmZyYW1lKGEgPSBnbCgzLDQpLCBiID0gZ2woNCwxLDEyKSkKPiBtb2RlbC5tYXRyaXgofiAuXjIsIGRhdGEgPSBkZCkKICAgKEludGVyY2VwdCkgYTIgYTMgYjIgYjMgYjQgYTI6YjIgYTM6YjIgYTI6YjMgYTM6YjMgYTI6YjQgYTM6YjQKMSAgICAgICAgICAgIDEgIDAgIDAgIDAgIDAgIDAgICAgIDAgICAgIDAgICAgIDAgICAgIDAgICAgIDAgICAgIDAKMiAgICAgICAgICAgIDEgIDAgIDAgIDEgIDAgIDAgICAgIDAgICAgIDAgICAgIDAgICAgIDAgICAgIDAgICAgIDAKMyAgICAgICAgICAgIDEgIDAgIDAgIDAgIDEgIDAgICAgIDAgICAgIDAgICAgIDAgICAgIDAgICAgIDAgICAgIDAKNCAgICAgICAgICAgIDEgIDAgIDAgIDAgIDAgIDEgICAgIDAgICAgIDAgICAgIDAgICAgIDAgICAgIDAgICAgIDAKNSAgICAgICAgICAgIDEgIDEgIDAgIDAgIDAgIDAgICAgIDAgICAgIDAgICAgIDAgICAgIDAgICAgIDAgICAgIDAKNiAgICAgICAgICAgIDEgIDEgIDAgIDEgIDAgIDAgICAgIDEgICAgIDAgICAgIDAgICAgIDAgICAgIDAgICAgIDAKNyAgICAgICAgICAgIDEgIDEgIDAgIDAgIDEgIDAgICAgIDAgICAgIDAgICAgIDEgICAgIDAgICAgIDAgICAgIDAKOCAgICAgICAgICAgIDEgIDEgIDAgIDAgIDAgIDEgICAgIDAgICAgIDAgICAgIDAgICAgIDAgICAgIDEgICAgIDAKOSAgICAgICAgICAgIDEgIDAgIDEgIDAgIDAgIDAgICAgIDAgICAgIDAgICAgIDAgICAgIDAgICAgIDAgICAgIDAKMTAgICAgICAgICAgIDEgIDAgIDEgIDEgIDAgIDAgICAgIDAgICAgIDEgICAgIDAgICAgIDAgICAgIDAgICAgIDAKMTEgICAgICAgICAgIDEgIDAgIDEgIDAgIDEgIDAgICAgIDAgICAgIDAgICAgIDAgICAgIDEgICAgIDAgICAgIDAKMTIgICAgICAgICAgIDEgIDAgIDEgIDAgIDAgIDEgICAgIDAgICAgIDAgICAgIDAgICAgIDAgICAgIDAgICAgIDEKYXR0cigsImFzc2lnbiIpCiBbMV0gMCAxIDEgMiAyIDIgMyAzIDMgMyAzIDMKYXR0cigsImNvbnRyYXN0cyIpCmF0dHIoLCJjb250cmFzdHMiKSRhClsxXSAiY29udHIudHJlYXRtZW50IgoKYXR0cigsImNvbnRyYXN0cyIpJGIKWzFdICJjb250ci50cmVhdG1lbnQiCgo+ICMjIGxvc3QgXjIgaW4gMi4xLjEKPiAKPiAKPiAjIyBhZGQxLmxtIGFuZCBkcm9wLmxtIGRpZCBub3Qga25vdyBhYm91dCBvZmZzZXRzIChQUiM4MDQ5KQo+IHNldC5zZWVkKDIpCj4geSA8LSBybm9ybSgxMCkKPiB6IDwtIDE6MTAKPiBsbTAgPC0gbG0oeSB+IDEpCj4gbG0xIDwtIGxtKHkgfiAxLCBvZmZzZXQgPSAxOjEwKQo+IGxtMiA8LSBsbSh5IH4geiwgb2Zmc2V0ID0gMToxMCkKPiAKPiBhZGQxKGxtMCwgc2NvcGUgPSB+IHopClNpbmdsZSB0ZXJtIGFkZGl0aW9ucwoKTW9kZWw6CnkgfiAxCiAgICAgICBEZiAgU3VtIG9mIFNxICAgIFJTUyAgICAgIEFJQwo8bm9uZT4gICAgICAgICAgICAgICA2LjMxNjEgLTIuNTk0NzkKeiAgICAgICAxIDAuMDAwMjk3NjUgNi4zMTU4IC0wLjU5NTI2Cj4gYW5vdmEobG0xLCBsbTIpCkFuYWx5c2lzIG9mIFZhcmlhbmNlIFRhYmxlCgpNb2RlbCAxOiB5IH4gMQpNb2RlbCAyOiB5IH4gegogIFJlcy5EZiAgICBSU1MgRGYgU3VtIG9mIFNxICAgICBGICAgIFByKD5GKSAgICAKMSAgICAgIDkgODkuMTMwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCjIgICAgICA4ICA2LjMxNiAgMSAgICA4Mi44MTQgMTA0LjkgNy4wOTllLTA2ICoqKgotLS0KU2lnbmlmLiBjb2RlczogIDAgJyoqKicgMC4wMDEgJyoqJyAwLjAxICcqJyAwLjA1ICcuJyAwLjEgJyAnIDEKPiBhZGQxKGxtMSwgc2NvcGUgPSB+IHopClNpbmdsZSB0ZXJtIGFkZGl0aW9ucwoKTW9kZWw6CnkgfiAxCiAgICAgICBEZiBTdW0gb2YgU3EgICAgUlNTICAgICBBSUMKPG5vbmU+ICAgICAgICAgICAgICA4OS4xMzAgMjMuODc1MQp6ICAgICAgIDEgICAgODIuODE0ICA2LjMxNiAtMC41OTUzCj4gZHJvcDEobG0yKQpTaW5nbGUgdGVybSBkZWxldGlvbnMKCk1vZGVsOgp5IH4gegogICAgICAgRGYgU3VtIG9mIFNxICAgIFJTUyAgICAgQUlDCjxub25lPiAgICAgICAgICAgICAgIDYuMzE2IC0wLjU5NTMKeiAgICAgICAxICAgIDgyLjgxNCA4OS4xMzAgMjMuODc1MQo+ICMjIExhc3QgdHdvIGlnbm9yZWQgdGhlIG9mZnNldCBpbiAyLjEuMQo+IAo+IAo+ICMjIHRlc3RzIG9mIHJhdyBjb252ZXJzaW9uCj4gYXMucmF3KDEyMzQpClsxXSAwMApXYXJuaW5nIG1lc3NhZ2U6Cm91dC1vZi1yYW5nZSB2YWx1ZXMgdHJlYXRlZCBhcyAwIGluIGNvZXJjaW9uIHRvIHJhdyAKPiBhcy5yYXcobGlzdChhPTEyMzQpKQpbMV0gMDAKV2FybmluZyBtZXNzYWdlOgpvdXQtb2YtcmFuZ2UgdmFsdWVzIHRyZWF0ZWQgYXMgMCBpbiBjb2VyY2lvbiB0byByYXcgCj4gIyMgMi4xLjE6IHNwdXJpb3VzIGFuZCBtaXNzaW5nIG1lc3NhZ2VzLCB3cm9uZyByZXN1bHQgZm9yIHNlY29uZC4KPiAKPiAKPiAjIyMgZW5kIG9mIHRlc3RzIGFkZGVkIGluIDIuMS4xIHBhdGNoZWQgIyMjCj4gCj4gCj4gIyMgVGVzdHMgb2YgbG9naWNhbCBtYXRyaXggaW5kZXhpbmcgd2l0aCBOQXMKPiBkZjEgPC0gZGF0YS5mcmFtZShhID0gYyhOQSwgMCwgMywgNCkpOyBtMSA8LSBhcy5tYXRyaXgoZGYxKQo+IGRmMiA8LSBkYXRhLmZyYW1lKGEgPSBjKE5BLCAwLCAwLCA0KSk7IG0yIDwtIGFzLm1hdHJpeChkZjIpCj4gZGYxW2RmMSA9PSAwXSA8LSAyOyBkZjEKICAgYQoxIE5BCjIgIDIKMyAgMwo0ICA0Cj4gbTFbbTEgPT0gMF0gPC0gMjsgICBtMQogICAgICBhClsxLF0gTkEKWzIsXSAgMgpbMyxdICAzCls0LF0gIDQKPiBkZjJbZGYyID09IDBdIDwtIDI7IGRmMiAgIyBub3QgYWxsb3dlZCBpbiAyLnswLDF9LnoKICAgYQoxIE5BCjIgIDIKMyAgMgo0ICA0Cj4gbTJbbTIgPT0gMF0gPC0gMjsgICBtMgogICAgICBhClsxLF0gTkEKWzIsXSAgMgpbMyxdICAyCls0LF0gIDQKPiBkZjFbZGYxID09IDJdICMgdGhpcyBpcyBmaXJzdCBjb2VyY2VkIHRvIGEgbWF0cml4LCBhbmQgZHJvcHMgdG8gYSB2ZWN0b3IKWzFdIE5BICAyCj4gZGYzIDwtIGRhdGEuZnJhbWUoYT0xOjIsIGI9MjozKQo+IGRmM1tkZjMgPT0gMl0gICAgICAgICAgICAjIGhhZCBzcHVyaW91cyBuYW1lcwpbMV0gMiAyCj4gIyBidXQgbm90IGFsbG93ZWQKPiAjIyAobW9kaWZpZWQgdG8gbWFrZSBwcmludGVkIHJlc3VsdCB0aGUgc2FtZSB3aGV0aGVyIG51bWVyaWMoKSBpcwo+ICMjICBjb21waWxlZCBvciBpbnRlcnByZXRlZCkKPiAjIyB0cnkoZGYyW2RmMiA9PSAyXSA8LSAxOjIpCj4gIyMgdHJ5KG0yW20yID09IDJdIDwtIDE6MikKPiB0cnlDYXRjaChkZjJbZGYyID09IDJdIDwtIDE6MiwKKyAgICAgICAgICBlcnJvciA9IGZ1bmN0aW9uKGUpIHBhc3RlKCJFcnJvcjoiLCBjb25kaXRpb25NZXNzYWdlKGUpKSkKWzFdICJFcnJvcjogTkFzIGFyZSBub3QgYWxsb3dlZCBpbiBzdWJzY3JpcHRlZCBhc3NpZ25tZW50cyIKPiB0cnlDYXRjaChtMlttMiA9PSAyXSA8LSAxOjIsCisgICAgICAgICAgZXJyb3IgPSBmdW5jdGlvbihlKSBwYXN0ZSgiRXJyb3I6IiwgY29uZGl0aW9uTWVzc2FnZShlKSkpClsxXSAiRXJyb3I6IE5BcyBhcmUgbm90IGFsbG93ZWQgaW4gc3Vic2NyaXB0ZWQgYXNzaWdubWVudHMiCj4gIyMKPiAKPiAKPiAjIyB2ZWN0b3IgaW5kZXhpbmcgb2YgbWF0cmljZXM6IGlzc3VlIGlzIHdoZW4gcm93bmFtZXMgYXJlIHVzZWQKPiAjIDFEIGFycmF5Cj4gbTEgPC0gYygwLDEsMiwwKQo+IGRpbShtMSkgPC0gNAo+IGRpbW5hbWVzKG0xKSA8LSBsaXN0KDE6NCkKPiBtMVttMSA9PSAwXSAgICAgICAgICAgICAgICAgICAgICAgICMgaGFzIHJvd25hbWVzCjEgNCAKMCAwIAo+IG0xW3doaWNoKG0xID09IDApXSAgICAgICAgICAgICAgICAgIyBoYXMgcm93bmFtZXMKMSA0IAowIDAgCj4gbTFbd2hpY2gobTEgPT0gMCwgYXJyLmluZCA9IFRSVUUpXSAjIG5vIG5hbWVzIDwgMi4yLjAgKHNpZGUgZWZmZWN0IG9mIFBSIzkzNykKMSA0IAowIDAgCj4gCj4gIyAyRCBhcnJheSB3aXRoIDIgY29scwo+IG0yIDwtIGFzLm1hdHJpeChkYXRhLmZyYW1lKGE9YygwLDEsMiwwKSwgYj0wOjMpKQo+IG0yW20yID09IDBdICAgICAgICAgICAgICAgICAgICAgICAgIyBhIHZlY3RvciwgaGFkIG5hbWVzIDwgMi4yLjAKWzFdIDAgMCAwCj4gbTJbd2hpY2gobTIgPT0gMCldICAgICAgICAgICAgICAgICAjIGEgdmVjdG9yLCBoYWQgbmFtZXMgPCAyLjIuMApbMV0gMCAwIDAKPiBtMlt3aGljaChtMiA9PSAwLCBhcnIuaW5kID0gVFJVRSldICMgbm8gbmFtZXMgKFBSIzkzNykKWzFdIDAgMCAwCj4gCj4gIyAyRCBhcnJheSB3aXRoIG9uZSBjb2w6IGNvdWxkIHVzZSByb3duYW1lcyBidXQgZG8gbm90Lgo+IG0yMSA8LSBtMlssIDEsIGRyb3AgPSBGQUxTRV0KPiBtMjFbbTIxID09IDBdClsxXSAwIDAKPiBtMjFbd2hpY2gobTIxID09IDApXQpbMV0gMCAwCj4gbTIxW3doaWNoKG0yMSA9PSAwLCBhcnIuaW5kID0gVFJVRSldClsxXSAwIDAKPiAjIyBub3QgY29uc2lzdGVudCA8IDIuMi4wOiBTIG5ldmVyIGdpdmVzIG5hbWVzCj4gCj4gCj4gIyMgdGVzdHMgb2YgaW5kZXhpbmcgYXMgcXVvdGVkIGluIEV4dHJhY3QuUmQKPiB4IDwtIE5VTEwKPiB4JGZvbyA8LSAyCj4geCAjIG5vdywgYSBsaXN0CiRmb28KWzFdIDIKCj4geCA8LSBOVUxMCj4geFtbMl1dIDwtIHBpCj4geCAjIG5vdywgYSBsaXN0LCB0b28KW1sxXV0KTlVMTAoKW1syXV0KWzFdIDMuMTQxNTkzCgo+IHggPC0gTlVMTAo+IHhbWzFdXSA8LSAxOjMKPiB4ICMgbGlzdApbWzFdXQpbMV0gMSAyIDMKCj4gIyMKPiAKPiAKPiAjIyBwcmludGluZyBvZiBhIGtlcm5lbDoKPiBrZXJuZWwoMSkKdW5rbm93biAKY29lZlswXSA9IDEKPiAjIyBwcmludGVkIHdyb25nbHkgaW4gUiA8PSAyLjEuMQo+IAo+IAo+ICMjIHVzaW5nIE5VTEwgYXMgYSByZXBsYWNlbWVudCB2YWx1ZQo+IERGIDwtIGRhdGEuZnJhbWUoQT0xOjIsIEI9Mzo0KQo+IHRyeShERlsyLCAxOjNdIDwtIE5VTEwpCkVycm9yIGluIHhbW2pqXV1baXNlcV0gPC0gdmpqIDogcmVwbGFjZW1lbnQgaGFzIGxlbmd0aCB6ZXJvCj4gIyMgd3JvbmcgZXJyb3IgbWVzc2FnZSBpbiBSIDwgMi4yLjAKPiAKPiAKPiAjIyB0ZXN0cyBvZiBzaWduaWYKPiBvYiA8LSAwOjkgKiAyMDAwCj4gcHJpbnQoc2lnbmlmKG9iLCAzKSwgZGlnaXRzPTE3KSAjIGhhZCByb3VuZGluZyBlcnJvciBpbiAyLjEuMQogWzFdICAgICAwICAyMDAwICA0MDAwICA2MDAwICA4MDAwIDEwMDAwIDEyMDAwIDE0MDAwIDE2MDAwIDE4MDAwCj4gc2lnbmlmKDEuMjM0N2UtMzA1LCA0KQpbMV0gMS4yMzVlLTMwNQo+IHNpZ25pZigxLjIzNDdlLTMwNiwgNCkgICMgb25seSAzIGRpZ2l0cyBpbiAyLjEuMQpbMV0gMS4yMzVlLTMwNgo+IHNpZ25pZigxLjIzNDdlLTMwNywgNCkKWzFdIDEuMjM1ZS0zMDcKPiAjIwo+IAo+ICMjIyBlbmQgb2YgdGVzdHMgYWRkZWQgaW4gMi4yLjAgcGF0Y2hlZCAjIyMKPiAKPiAKPiAjIyBwcmludGluZyBsaXN0cyB3aXRoIE5BIG5hbWVzCj4gQSA8LSBsaXN0KDEsIDIpCj4gbmFtZXMoQSkgPC0gYygiTkEiLCBOQSkKPiBBCiRgTkFgClsxXSAxCgokPE5BPgpbMV0gMgoKPiAjIyBib3RoIHByaW50ZWQgYXMgIk5BIiBpbiAyLjIuMAo+IAo+IAo+ICMjIHN1YnNjcmlwdGluZyB3aXRoIGJvdGggTkEgYW5kICJOQSIgbmFtZXMKPiB4IDwtIDE6NAo+IG5hbWVzKHgpIDwtIGMoTkEsICJOQSIsICJhIiwgIiIpCj4geFtuYW1lcyh4KV0KPE5BPiAgIE5BICAgIGEgPE5BPiAKICBOQSAgICAyICAgIDMgICBOQSAKPiAjIyAyLjIuMCBoYWQgdGhlIHNlY29uZCBtYXRjaGluZyB0aGUgZmlyc3QuCj4gbHggPC0gYXMubGlzdCh4KQo+IGx4W1thcy5jaGFyYWN0ZXIoTkEpXV0KTlVMTAo+IGx4W2FzLmNoYXJhY3RlcihOQSldCiQ8TkE+Ck5VTEwKCj4gIyMgMi4yLjAgaGFkIGJvdGggbWF0Y2hpbmcgZWxlbWVudCAxCj4gCj4gCj4gIyMgZGF0YSBmcmFtZSByZXBsYWNlbWVudCBzdWJzY3JpcHRpbmcKPiAjIENoYXJsZXMgQy4gQmVycnksIFItZGV2ZWwsIDIwMDUtMTAtMjYKPiBhLmZyYW1lIDwtIGRhdGEuZnJhbWUoIHg9bGV0dGVyc1sxOjVdICkKPiBhLmZyYW1lWyAyOjUsICJ5IiBdIDwtIGxldHRlcnNbMjo1XQo+IGEuZnJhbWUgICMgYWRkZWQgcm93cyAxOjQKICB4ICAgIHkKMSBhIDxOQT4KMiBiICAgIGIKMyBjICAgIGMKNCBkICAgIGQKNSBlICAgIGUKPiAjIGFuZCBhZGRpbmcgYW5kIHJlcGxhY2luZyBtYXRyaWNlcyBmYWlsZWQKPiBhLmZyYW1lWyAsInkiIF0gPC0gbWF0cml4KDE6MTAsIDUsIDIpCj4gYS5mcmFtZQogIHggeS4xIHkuMgoxIGEgICAxICAgNgoyIGIgICAyICAgNwozIGMgICAzICAgOAo0IGQgICA0ICAgOQo1IGUgICA1ICAxMAo+IGEuZnJhbWVbMzo1ICwieSIgXSA8LSBtYXRyaXgoMTo2LCAzLCAyKQo+IGEuZnJhbWUKICB4IHkuMSB5LjIKMSBhICAgMSAgIDYKMiBiICAgMiAgIDcKMyBjICAgMSAgIDQKNCBkICAgMiAgIDUKNSBlICAgMyAgIDYKPiBhLmZyYW1lIDwtIGRhdGEuZnJhbWUoIHg9bGV0dGVyc1sxOjVdICkKPiBhLmZyYW1lWzM6NSAsInkiIF0gPC0gbWF0cml4KDE6NiwgMywgMikKPiBhLmZyYW1lCiAgeCB5LjEgeS4yCjEgYSAgTkEgIE5BCjIgYiAgTkEgIE5BCjMgYyAgIDEgICA0CjQgZCAgIDIgICA1CjUgZSAgIDMgICA2Cj4gIyMgZmFpbGVkL3dyb25nIGFucyBpbiAyLjIuMAo+IAo+IAo+ICMjIyBlbmQgb2YgdGVzdHMgYWRkZWQgaW4gMi4yLjAgcGF0Y2hlZCAjIyMKPiAKPiAKPiAjIyB0ZXN0IG9mIGZpeCBvZiB0cml2aWFsIHdhcm5pbmcgUFIjODI1Mgo+IHBhaXJzKGlyaXNbMTo0XSwgb21hPXJlcCgzLDQpKQo+ICMjIHdhcm5lZCBpbiAyLjIuMCBvbmx5Cj4gCj4gCj4gIyMgc3RyKDxkZW5kcm9ncmFtPikKPiBkZW5kIDwtIGFzLmRlbmRyb2dyYW0oaGNsdXN0KGRpc3QoVVNBcnJlc3RzKSwgImF2ZSIpKSAjICJwcmludCgpIiBtZXRob2QKPiBkZW5kMiA8LSBjdXQoZGVuZCwgaD03MCkKPiBzdHIoZGVuZDIkdXBwZXIpCi0tW2RlbmRyb2dyYW0gdy8gMiBicmFuY2hlcyBhbmQgNCBtZW1iZXJzIGF0IGggPSAxNTJdCiAgfC0tW2RlbmRyb2dyYW0gdy8gMiBicmFuY2hlcyBhbmQgMiBtZW1iZXJzIGF0IGggPSA3Ny42XQogIHwgIHwtLWxlYWYgIkJyYW5jaCAxIiAoaD0gMzguNSBtaWRwb2ludCA9IDAuNSwgeC5tZW1iZXIgPSAyICkKICB8ICBgLS1sZWFmICJCcmFuY2ggMiIgKGg9IDQ0LjMgbWlkcG9pbnQgPSA1LjAzLCB4Lm1lbWJlciA9IDE0ICkKICBgLS1bZGVuZHJvZ3JhbSB3LyAyIGJyYW5jaGVzIGFuZCAyIG1lbWJlcnMgYXQgaCA9IDg5LjJdCiAgICAgfC0tbGVhZiAiQnJhbmNoIDMiIChoPSA0NC44IG1pZHBvaW50ID0gNi44LCB4Lm1lbWJlciA9IDE0ICkKICAgICBgLS1sZWFmICJCcmFuY2ggNCIgKGg9IDU0LjcgbWlkcG9pbnQgPSA3LjY1LCB4Lm1lbWJlciA9IDIwICkKPiAjIyB7e2ZvciBFbWFjczogYH19ICBnYXZlIG11Y2ggdG9vIG1hbnkgc3BhY2VzIGluIDIuMi5bMDFdCj4gCj4gCj4gIyMgZm9ybWF0QyBvbiBXaW5kb3dzIChQUiM4MzM3KQo+IHh4ICA8LSBwaSAqIDEwXigtNTo0KQo+IGNiaW5kKGZvcm1hdEMoeHgsIHdpZCA9IDkpKQogICAgICBbLDFdICAgICAgIAogWzEsXSAiMy4xNDJlLTA1IgogWzIsXSAiMC4wMDAzMTQyIgogWzMsXSAiIDAuMDAzMTQyIgogWzQsXSAiICAwLjAzMTQyIgogWzUsXSAiICAgMC4zMTQyIgogWzYsXSAiICAgIDMuMTQyIgogWzcsXSAiICAgIDMxLjQyIgogWzgsXSAiICAgIDMxNC4yIgogWzksXSAiICAgICAzMTQyIgpbMTAsXSAiMy4xNDJlKzA0Igo+IGNiaW5kKGZvcm1hdEMoeHgsIHdpZCA9IDksIGZsYWcgPSAiLSIpKQogICAgICBbLDFdICAgICAgIAogWzEsXSAiMy4xNDJlLTA1IgogWzIsXSAiMC4wMDAzMTQyIgogWzMsXSAiMC4wMDMxNDIgIgogWzQsXSAiMC4wMzE0MiAgIgogWzUsXSAiMC4zMTQyICAgIgogWzYsXSAiMy4xNDIgICAgIgogWzcsXSAiMzEuNDIgICAgIgogWzgsXSAiMzE0LjIgICAgIgogWzksXSAiMzE0MiAgICAgIgpbMTAsXSAiMy4xNDJlKzA0Igo+IGNiaW5kKGZvcm1hdEMoeHgsIHdpZCA9IDksIGZsYWcgPSAiMCIpKQogICAgICBbLDFdICAgICAgIAogWzEsXSAiMy4xNDJlLTA1IgogWzIsXSAiMC4wMDAzMTQyIgogWzMsXSAiMDAuMDAzMTQyIgogWzQsXSAiMDAwLjAzMTQyIgogWzUsXSAiMDAwMC4zMTQyIgogWzYsXSAiMDAwMDMuMTQyIgogWzcsXSAiMDAwMDMxLjQyIgogWzgsXSAiMDAwMDMxNC4yIgogWzksXSAiMDAwMDAzMTQyIgpbMTAsXSAiMy4xNDJlKzA0Igo+ICMjIGV4dHJhIHNwYWNlIG9uIDIuMi4xCj4gCj4gCj4gIyMgYW4gaW1wb3NzaWJsZSBnbG0gZml0Cj4gc3VjY2VzcyA8LSBjKDEzLDEyLDExLDE0LDE0LDExLDEzLDExLDEyKQo+IGZhaWx1cmUgPC0gYygwLDAsMCwwLDAsMCwwLDIsMikKPiBwcmVkaWN0b3IgPC0gYygwLCA1XigwOjcpKQo+IHRyeShnbG0oY2JpbmQoc3VjY2VzcyxmYWlsdXJlKSB+IDArcHJlZGljdG9yLCBmYW1pbHkgPSBiaW5vbWlhbChsaW5rPSJsb2ciKSkpCkVycm9yIDogbm8gdmFsaWQgc2V0IG9mIGNvZWZmaWNpZW50cyBoYXMgYmVlbiBmb3VuZDogcGxlYXNlIHN1cHBseSBzdGFydGluZyB2YWx1ZXMKPiAjIG5vIGNvZWZmaWNpZW50IGlzIHBvc3NpYmxlIGFzIHRoZSBmaXJzdCBjYXNlIHdpbGwgaGF2ZSBtdSA9IDEKPiAjIyAyLjIuMSBnYXZlIGEgc3Vic2NyaXB0IG91dCBvZiByYW5nZSB3YXJuaW5nIGluc3RlYWQuCj4gCj4gCj4gIyMgZXJyb3IgbWVzc2FnZSBmcm9tIHNvbHZlIChQUiM4NDk0KQo+IHRlbXAgPC0gZGlhZygxLCA1KVssIDE6NF0KPiByb3duYW1lcyh0ZW1wKSA8LSBhcy5jaGFyYWN0ZXIoMTo1KQo+IGNvbG5hbWVzKHRlbXApIDwtIGFzLmNoYXJhY3RlcigxOjQpCj4gdHJ5KHNvbHZlKHRlbXApKQpFcnJvciBpbiBzb2x2ZS5kZWZhdWx0KHRlbXApIDogJ2EnICg1IHggNCkgbXVzdCBiZSBzcXVhcmUKPiAjIGFsc28gY29tcGxleAo+IHRyeShzb2x2ZSh0ZW1wKzBpKSkKRXJyb3IgaW4gc29sdmUuZGVmYXVsdCh0ZW1wICsgKDArMGkpKSA6ICdhJyAoNSB4IDQpIG11c3QgYmUgc3F1YXJlCj4gIyBhbmQgbm9uLWNvbWZvcm1hbnQgc3lzdGVtcwo+IHRyeShzb2x2ZSh0ZW1wLCBkaWFnKDMpKSkKRXJyb3IgaW4gc29sdmUuZGVmYXVsdCh0ZW1wLCBkaWFnKDMpKSA6ICdhJyAoNSB4IDQpIG11c3QgYmUgc3F1YXJlCj4gIyMgZ2F2ZSBlcnJvcnMgZnJvbSByb3duYW1lczwtIGluIDIuMi4xCj4gCj4gCj4gIyMgUFIjODQ2MiB0ZXJtcy5mb3JtdWxhKHNpbXBsaWZ5ID0gVFJVRSkgbmVlZHMgcGFyZW50aGVzZXMuCj4gdXBkYXRlLmZvcm11bGEgKFJlYWN0aW9uIH4gRGF5cyArIChEYXlzIHwgU3ViamVjdCksIC4gfiAuICsgSShEYXlzXjIpKQpSZWFjdGlvbiB+IERheXMgKyAoRGF5cyB8IFN1YmplY3QpICsgSShEYXlzXjIpCj4gIyMgPCAyLjMuMCBkcm9wcGVkIHBhcmVucyBvbiBzZWNvbmQgdGVybS4KPiAKPiAKPiAjIyBQUiM4NTI4OiBlcnJvcnMgaW4gdGhlIHBvc3QtMi4xLjAgcGdhbW1hCj4gcGdhbW1hKHNlcSgwLjc1LCAxLjI1LCBieT0wLjA1KSoxZTEwMCwgc2hhcGUgPSAxZTEwMCwgbG9nPVRSVUUpCiBbMV0gLTMuNzY4MjA3ZSs5OCAtMi4zMTQzNTVlKzk4IC0xLjI1MTg5M2UrOTggLTUuMzYwNTE2ZSs5NyAtMS4yOTMyOTRlKzk3CiBbNl0gLTYuOTMxNDcyZS0wMSAgMC4wMDAwMDBlKzAwICAwLjAwMDAwMGUrMDAgIDAuMDAwMDAwZSswMCAgMC4wMDAwMDBlKzAwClsxMV0gIDAuMDAwMDAwZSswMAo+IHBnYW1tYShzZXEoMC43NSwgMS4yNSwgYnk9MC4wNSkqMWUxMDAsIHNoYXBlID0gMWUxMDAsIGxvZz1UUlVFLCBsb3dlcj1GQUxTRSkKIFsxXSAgMC4wMDAwMDBlKzAwICAwLjAwMDAwMGUrMDAgIDAuMDAwMDAwZSswMCAgMC4wMDAwMDBlKzAwICAwLjAwMDAwMGUrMDAKIFs2XSAtNi45MzE0NzJlLTAxIC0xLjIwOTgzNmUrOTcgLTQuNjg5ODIwZSs5NyAtMS4wMjM4MDZlKzk4IC0xLjc2Nzg0NGUrOTgKWzExXSAtMi42ODU2NDVlKzk4Cj4gcGdhbW1hKGMoMS0xZS0xMCwgMSsxZS0xMCkqMWUxMDAsIHNoYXBlID0gMWUxMDApClsxXSAwIDEKPiBwZ2FtbWEoMC45KjFlMjUsIDFlMjUsIGxvZz1UUlVFKQpbMV0gLTUuMzYwNTE2ZSsyMgo+ICMjIHdlcmUgTmFOLCAtSW5mIGV0YyBpbiAyLjIuMS4KPiAKPiAKPiAjIyArIGZvciBQT1NJWHQgb2JqZWN0cyB3YXMgbm9uLWNvbW11dGF0aXZlCj4gIyBTUFNTLXN0eWxlIGRhdGVzCj4gYygxMDQ4NTg0OTYwMCwxMDQ3NzY0MTYwMCwxMDU2MTEwNDAwMCwxMDU2Mjc0NTYwMCkrSVNPZGF0ZSgxNTgyLDEwLDE0KQpbMV0gIjE5MTUtMDEtMjYgMTI6MDA6MDAgR01UIiAiMTkxNC0xMC0yMyAxMjowMDowMCBHTVQiClszXSAiMTkxNy0wNi0xNSAxMjowMDowMCBHTVQiICIxOTE3LTA3LTA0IDEyOjAwOjAwIEdNVCIKPiAjIyB3YXMgaW4gdGhlIGxvY2FsIHRpbWUgem9uZSBpbiAyLjIuMS4KPiAKPiAKPiAjIyBMaW1pdGluZyBsaW5lcyBvbiBkZXBhcnNlICh3aXNobGlzdCBQUiM4NjM4KQo+IG9wIDwtIG9wdGlvbnMoZGVwYXJzZS5tYXgubGluZXMgPSAzKQo+IGYgPC0gZnVuY3Rpb24oLi4uKSBicm93c2VyKCkKPiBkby5jYWxsKGYsIG10Y2FycykKQ2FsbGVkIGZyb206IChmdW5jdGlvbiAoLi4uKSAKYnJvd3NlcigpKShtcGcgPSBjKDIxLCAyMSwgMjIuOCwgMjEuNCwgMTguNywgMTguMSwgMTQuMywgMjQuNCwgCjIyLjgsIDE5LjIsIDE3LjgsIDE2LjQsIDE3LjMsIDE1LjIsIDEwLjQsIDEwLjQsIDE0LjcsIDMyLjQsIDMwLjQsIAogIC4uLgpCcm93c2VbMV0+IGMKPiAKPiBvcCA8LSBjKG9wLCBvcHRpb25zKGVycm9yID0gZXhwcmVzc2lvbihOVUxMKSkpCj4gZiA8LSBmdW5jdGlvbiguLi4pIHN0b3AoKQo+IGRvLmNhbGwoZiwgbXRjYXJzKQpFcnJvciBpbiAoZnVuY3Rpb24gKC4uLikgIDogCkNhbGxzOiBkby5jYWxsIC0+IDxBbm9ueW1vdXM+Cj4gdHJhY2ViYWNrKCkKMzogc3RvcCgpCjI6IChmdW5jdGlvbiAoLi4uKSAKICAgc3RvcCgpKShtcGcgPSBjKDIxLCAyMSwgMjIuOCwgMjEuNCwgMTguNywgMTguMSwgMTQuMywgMjQuNCwgMjIuOCwgCiAgIDE5LjIsIDE3LjgsIDE2LjQsIDE3LjMsIDE1LjIsIDEwLjQsIDEwLjQsIDE0LjcsIDMyLjQsIDMwLjQsIDMzLjksIAogICAgLi4uCjE6IGRvLmNhbGwoZiwgbXRjYXJzKQo+IAo+ICMjIERlYnVnZ2VyIGNhbiBoYW5kbGUgYSBmdW5jdGlvbiB0aGF0IGhhcyBhIHNpbmdsZSBmdW5jdGlvbiBjYWxsIGFzIGl0cyBib2R5Cj4gZyA8LSBmdW5jdGlvbihmdW4pIGZ1bigxKQo+IGRlYnVnKGcpCj4gZyhmdW5jdGlvbih4KSB4KzEpCmRlYnVnZ2luZyBpbjogZyhmdW5jdGlvbih4KSB4ICsgMSkKZGVidWc6IGZ1bigxKQpCcm93c2VbMl0+IApleGl0aW5nIGZyb206IGcoZnVuY3Rpb24oeCkgeCArIDEpClsxXSAyCj4gb3B0aW9ucyhvcCkKPiAjIyB1bmxpbWl0ZWQgPCAyLjMuMAo+IAo+IAo+ICMjIHJvdyBuYW1lcyBpbiBhcy50YWJsZSAoUFIjODY1MikKPiBhcy50YWJsZShtYXRyaXgoMTo2MCwgbmNvbD0yKSkKICAgIEEgIEIKQSAgIDEgMzEKQiAgIDIgMzIKQyAgIDMgMzMKRCAgIDQgMzQKRSAgIDUgMzUKRiAgIDYgMzYKRyAgIDcgMzcKSCAgIDggMzgKSSAgIDkgMzkKSiAgMTAgNDAKSyAgMTEgNDEKTCAgMTIgNDIKTSAgMTMgNDMKTiAgMTQgNDQKTyAgMTUgNDUKUCAgMTYgNDYKUSAgMTcgNDcKUiAgMTggNDgKUyAgMTkgNDkKVCAgMjAgNTAKVSAgMjEgNTEKViAgMjIgNTIKVyAgMjMgNTMKWCAgMjQgNTQKWSAgMjUgNTUKWiAgMjYgNTYKQTEgMjcgNTcKQjEgMjggNTgKQzEgMjkgNTkKRDEgMzAgNjAKPiAjIyByb3dzIHBhc3QgMjYgaGFkIE5BIHJvdyBuYW1lcwo+IAo+IAo+ICMjIHN1bW1hcnkgb24gYSBnbG0gd2l0aCB6ZXJvIHdlaWdodHMgYW5kIGVzdGltYXRlZCBkaXNwZXJzaW9uIChQUiM4NzIwKQo+IHkgPC0gcm5vcm0oMTApCj4geCA8LSAxOjEwCj4gdyA8LSBjKHJlcCgxLDkpLCAwKQo+IHN1bW1hcnkoZ2xtKHkgfiB4LCB3ZWlnaHRzID0gdykpCgpDYWxsOgpnbG0oZm9ybXVsYSA9IHkgfiB4LCB3ZWlnaHRzID0gdykKCkRldmlhbmNlIFJlc2lkdWFsczogCiAgICBNaW4gICAgICAgMVEgICBNZWRpYW4gICAgICAgM1EgICAgICBNYXggIAotMS43ODA2ICAtMC4xNDE2ICAgMC4xODYzICAgMC41NjkwICAgMS4yMDU3ICAKCkNvZWZmaWNpZW50czoKICAgICAgICAgICAgRXN0aW1hdGUgU3RkLiBFcnJvciB0IHZhbHVlIFByKD58dHwpCihJbnRlcmNlcHQpICAtMC43NTMyICAgICAwLjc4NjIgIC0wLjk1OCAgICAwLjM3MAp4ICAgICAgICAgICAgIDAuMTMxMSAgICAgMC4xMzk3ICAgMC45MzggICAgMC4zNzkKCihEaXNwZXJzaW9uIHBhcmFtZXRlciBmb3IgZ2F1c3NpYW4gZmFtaWx5IHRha2VuIHRvIGJlIDEuMTcxMjUpCgogICAgTnVsbCBkZXZpYW5jZTogOS4yMjk4ICBvbiA4ICBkZWdyZWVzIG9mIGZyZWVkb20KUmVzaWR1YWwgZGV2aWFuY2U6IDguMTk4OCAgb24gNyAgZGVncmVlcyBvZiBmcmVlZG9tCkFJQzogSW5mCgpOdW1iZXIgb2YgRmlzaGVyIFNjb3JpbmcgaXRlcmF0aW9uczogMgoKV2FybmluZyBtZXNzYWdlOgpJbiBzdW1tYXJ5LmdsbShnbG0oeSB+IHgsIHdlaWdodHMgPSB3KSkgOgogIG9ic2VydmF0aW9ucyB3aXRoIHplcm8gd2VpZ2h0IG5vdCB1c2VkIGZvciBjYWxjdWxhdGluZyBkaXNwZXJzaW9uCj4gc3VtbWFyeShnbG0oeSB+IHgsIHN1YnNldCA9IHcgPiAwKSkKCkNhbGw6CmdsbShmb3JtdWxhID0geSB+IHgsIHN1YnNldCA9IHcgPiAwKQoKRGV2aWFuY2UgUmVzaWR1YWxzOiAKICAgIE1pbiAgICAgICAxUSAgIE1lZGlhbiAgICAgICAzUSAgICAgIE1heCAgCi0xLjc4MDYgIC0wLjE1ODIgICAwLjM3MjYgICAwLjU4OTYgICAxLjIwNTcgIAoKQ29lZmZpY2llbnRzOgogICAgICAgICAgICBFc3RpbWF0ZSBTdGQuIEVycm9yIHQgdmFsdWUgUHIoPnx0fCkKKEludGVyY2VwdCkgIC0wLjc1MzIgICAgIDAuNzg2MiAgLTAuOTU4ICAgIDAuMzcwCnggICAgICAgICAgICAgMC4xMzExICAgICAwLjEzOTcgICAwLjkzOCAgICAwLjM3OQoKKERpc3BlcnNpb24gcGFyYW1ldGVyIGZvciBnYXVzc2lhbiBmYW1pbHkgdGFrZW4gdG8gYmUgMS4xNzEyNSkKCiAgICBOdWxsIGRldmlhbmNlOiA5LjIyOTggIG9uIDggIGRlZ3JlZXMgb2YgZnJlZWRvbQpSZXNpZHVhbCBkZXZpYW5jZTogOC4xOTg4ICBvbiA3ICBkZWdyZWVzIG9mIGZyZWVkb20KQUlDOiAzMC43MDIKCk51bWJlciBvZiBGaXNoZXIgU2NvcmluZyBpdGVyYXRpb25zOiAyCgo+ICMjIGhhcyBOQSBkaXNwZXJzaW9uIGluIDIuMi4xCj4gCj4gCj4gIyMgc3Vic3RpdHV0ZSB3YXMgbG9zaW5nICIuLi4iIGFmdGVyIHIzNzI2OQo+IHlhYSA8LSBmdW5jdGlvbiguLi4pIHN1YnN0aXR1dGUobGlzdCguLi4pKQo+IHlhYShmb28oLi4uKSkKbGlzdChmb28oLi4uKSkKPiAjIyBhbmQgd2Fzbid0IHN1YnN0aXR1dGluZyBhZnRlciAiLi4uIgo+IHN1YnN0aXR1dGUobGlzdCguLi4sIHgpLCBsaXN0KHg9MSkpCmxpc3QoLi4uLCAxKQo+ICMjIGZpeGVkIGZvciAyLjMuMAo+IAo+IAo+ICMjIHVuaXJvb3QgbmV2ZXIgd2FybmVkIChQUiM4NzUwKQo+IGZmIDwtIGZ1bmN0aW9uKHgpICh4LXBpKV4zCj4gdW5pcm9vdChmZiwgYygtMTAsMTApLCBtYXhpdGVyPTEwKQokcm9vdApbMV0gMy4yOTExMjYKCiRmLnJvb3QKWzFdIDAuMDAzMzQzNTg3CgokaXRlcgpbMV0gMTAKCiRpbml0Lml0ClsxXSBOQQoKJGVzdGltLnByZWMKWzFdIDAuODI5NTAyMwoKV2FybmluZyBtZXNzYWdlOgpJbiB1bmlyb290KGZmLCBjKC0xMCwgMTApLCBtYXhpdGVyID0gMTApIDogX05PVF8gY29udmVyZ2VkIGluIDEwIGl0ZXJhdGlvbnMKPiAjIyBzaG91bGQgd2FybiwgZGlkIG5vdCA8IDIuMy4wCj4gCj4gCj4gIyMjIGVuZCBvZiB0ZXN0cyBhZGRlZCBpbiAyLjMuMCAjIyMKPiAKPiAKPiAjIyBwcm9kIGV0YyBvbiBlbXB0eSBsaXN0cyBhbmQgcmF3IHZlY3RvcnMKPiB0cnkobWluKGxpc3QoKSkpCkVycm9yIGluIG1pbihsaXN0KCkpIDogaW52YWxpZCAndHlwZScgKGxpc3QpIG9mIGFyZ3VtZW50Cj4gdHJ5KG1heChsaXN0KCkpKQpFcnJvciBpbiBtYXgobGlzdCgpKSA6IGludmFsaWQgJ3R5cGUnIChsaXN0KSBvZiBhcmd1bWVudAo+IHRyeShzdW0obGlzdCgpKSkKRXJyb3IgaW4gc3VtKGxpc3QoKSkgOiBpbnZhbGlkICd0eXBlJyAobGlzdCkgb2YgYXJndW1lbnQKPiB0cnkocHJvZChsaXN0KCkpKQpFcnJvciBpbiBwcm9kKGxpc3QoKSkgOiBpbnZhbGlkICd0eXBlJyAobGlzdCkgb2YgYXJndW1lbnQKPiB0cnkobWluKHJhdygpKSkKRXJyb3IgaW4gbWluKHJhdygpKSA6IGludmFsaWQgJ3R5cGUnIChyYXcpIG9mIGFyZ3VtZW50Cj4gdHJ5KG1heChyYXcoKSkpCkVycm9yIGluIG1heChyYXcoKSkgOiBpbnZhbGlkICd0eXBlJyAocmF3KSBvZiBhcmd1bWVudAo+IHRyeShzdW0ocmF3KCkpKQpFcnJvciBpbiBzdW0ocmF3KCkpIDogaW52YWxpZCAndHlwZScgKHJhdykgb2YgYXJndW1lbnQKPiB0cnkocHJvZChyYXcoKSkpCkVycm9yIGluIHByb2QocmF3KCkpIDogaW52YWxpZCAndHlwZScgKHJhdykgb2YgYXJndW1lbnQKPiAjIyBJbmYsIC1JbmYsIGxpc3QoTlVMTCkgZXRjIGluIDIuMi4xCj4gCj4gciA8LSBoaXN0KHJub3JtKDEwMCksIHBsb3QgPSBGQUxTRSwgYnJlYWtzID0gMTIsCisgICAgICAgICAgICMjIGFyZ3VtZW50cyB3aGljaCBkb24ndCBtYWtlIHNlbnNlIGZvciBwbG90PUZBTFNFIC0gZ2l2ZSBhIHdhcm5pbmc6CisgICAgICAgICAgIHhsYWIgPSAiTigwLDEpIiwgY29sID0gImJsdWUiKQpXYXJuaW5nIG1lc3NhZ2U6CkluIGhpc3QuZGVmYXVsdChybm9ybSgxMDApLCBwbG90ID0gRkFMU0UsIGJyZWFrcyA9IDEyLCB4bGFiID0gIk4oMCwxKSIsICA6CiAgYXJndW1lbnRzICdjb2wnLCAneGxhYicgYXJlIG5vdCBtYWRlIHVzZSBvZgo+ICMjIGdhdmUgbm8gd2FybmluZyBpbiAyLjMuMCBhbmQgZWFybGllcgo+IAo+IAo+ICMjIHJiaW5kLmRhdGEuZnJhbWUgb24gcGVybXV0ZWQgY29scyAoUFIjODg2OCkKPiBkMSA8LSBkYXRhLmZyYW1lKHg9MToxMCwgeT1sZXR0ZXJzWzE6MTBdLCB6PTE6MTApCj4gZDIgPC0gZGF0YS5mcmFtZSh5PUxFVFRFUlNbMTo1XSwgej01OjEsIHg9NzoxMSkKPiByYmluZChkMSwgZDIpCiAgICB4IHkgIHoKMSAgIDEgYSAgMQoyICAgMiBiICAyCjMgICAzIGMgIDMKNCAgIDQgZCAgNAo1ICAgNSBlICA1CjYgICA2IGYgIDYKNyAgIDcgZyAgNwo4ICAgOCBoICA4CjkgICA5IGkgIDkKMTAgMTAgaiAxMAoxMSAgNyBBICA1CjEyICA4IEIgIDQKMTMgIDkgQyAgMwoxNCAxMCBEICAyCjE1IDExIEUgIDEKPiAjIGdvdCBmYWN0b3IgeSAgd3JvbmcgaW4gMi4zLjAKPiAjIGFuZCBmYWlsZWQgd2l0aCBkdXBsaWNhdGVkIGNvbCBuYW1lcy4KPiBkMSA8LSBkYXRhLmZyYW1lKHg9MToyLCB5PTU6NiwgeD04OjksIGNoZWNrLm5hbWVzPUZBTFNFKQo+IGQyIDwtIGRhdGEuZnJhbWUoeD0zOjQsIHg9LSgxOjIpLCB5PTg6OSwgY2hlY2submFtZXM9RkFMU0UpCj4gcmJpbmQoZDEsIGQyKQogIHggeSAgeAoxIDEgNSAgOAoyIDIgNiAgOQozIDMgOCAtMQo0IDQgOSAtMgo+ICMjIGNvcnJ1cHQgaW4gMi4zLjAKPiAKPiAKPiAjIyBzb3J0Lmxpc3Qgb24gY29tcGxleCB2ZWN0b3JzIHdhcyB1bmltcGxlbWVudGVkIHByaW9yIHRvIDIuNC4wCj4geCA8LSByZXAoMjoxLCBjKDIsIDIpKSArIDFpKmMoNCwgMSwgMiwgMykKPiAobyA8LSBzb3J0Lmxpc3QoeCkpClsxXSAzIDQgMiAxCj4geFtvXQpbMV0gMSsyaSAxKzNpIDIrMWkgMis0aQo+IHNvcnQoeCkgICMgZm9yIGEgY3Jvc3MtY2hlY2sKWzFdIDErMmkgMSszaSAyKzFpIDIrNGkKPiAjIwo+IAo+IAo+ICMjIFBSIzkwNDQgd3JpdGUudGFibGUocXVvdGU9VFJVRSwgcm93Lm5hbWVzPUZBTFNFKSBkaWQgbm90IHF1b3RlIGNvbHVtbiBuYW1lcwo+IG0gPC0gbWF0cml4KDE6OSwgbnJvdz0zLCBkaW1uYW1lcz1saXN0KGMoIkEiLCJCIiwiQyIpLCAgYygiSSIsIklJIiwiSUlJIikpKQo+IHdyaXRlLnRhYmxlKG0pCiJJIiAiSUkiICJJSUkiCiJBIiAxIDQgNwoiQiIgMiA1IDgKIkMiIDMgNiA5Cj4gd3JpdGUudGFibGUobSwgY29sLm5hbWVzPUZBTFNFKQoiQSIgMSA0IDcKIkIiIDIgNSA4CiJDIiAzIDYgOQo+IHdyaXRlLnRhYmxlKG0sIHJvdy5uYW1lcz1GQUxTRSkKIkkiICJJSSIgIklJSSIKMSA0IDcKMiA1IDgKMyA2IDkKPiAjIHdyb25nIDwgMi4zLjEgcGF0Y2hlZC4KPiB3cml0ZS50YWJsZShtLCBxdW90ZT1GQUxTRSkKSSBJSSBJSUkKQSAxIDQgNwpCIDIgNSA4CkMgMyA2IDkKPiB3cml0ZS50YWJsZShtLCBjb2wubmFtZXM9RkFMU0UsIHF1b3RlPUZBTFNFKQpBIDEgNCA3CkIgMiA1IDgKQyAzIDYgOQo+IHdyaXRlLnRhYmxlKG0sIHJvdy5uYW1lcz1GQUxTRSwgcXVvdGU9RkFMU0UpCkkgSUkgSUlJCjEgNCA3CjIgNSA4CjMgNiA5Cj4gZCA8LSBhcy5kYXRhLmZyYW1lKG0pCj4gd3JpdGUudGFibGUoZCkKIkkiICJJSSIgIklJSSIKIkEiIDEgNCA3CiJCIiAyIDUgOAoiQyIgMyA2IDkKPiB3cml0ZS50YWJsZShkLCBjb2wubmFtZXM9RkFMU0UpCiJBIiAxIDQgNwoiQiIgMiA1IDgKIkMiIDMgNiA5Cj4gd3JpdGUudGFibGUoZCwgcm93Lm5hbWVzPUZBTFNFKQoiSSIgIklJIiAiSUlJIgoxIDQgNwoyIDUgOAozIDYgOQo+IHdyaXRlLnRhYmxlKGQsIHF1b3RlPUZBTFNFKQpJIElJIElJSQpBIDEgNCA3CkIgMiA1IDgKQyAzIDYgOQo+IHdyaXRlLnRhYmxlKGQsIGNvbC5uYW1lcz1GQUxTRSwgcXVvdGU9RkFMU0UpCkEgMSA0IDcKQiAyIDUgOApDIDMgNiA5Cj4gd3JpdGUudGFibGUoZCwgcm93Lm5hbWVzPUZBTFNFLCBxdW90ZT1GQUxTRSkKSSBJSSBJSUkKMSA0IDcKMiA1IDgKMyA2IDkKPiB3cml0ZS50YWJsZShtLCBxdW90ZT1udW1lcmljKDApKSAjIG5vdCB0aGUgc2FtZSBhcyBGQUxTRQoiSSIgIklJIiAiSUlJIgoiQSIgMSA0IDcKIkIiIDIgNSA4CiJDIiAzIDYgOQo+ICMjCj4gCj4gCj4gIyMgcmVtb3ZpbmcgdmFyaWFibGUgZnJvbSBiYXNlZW52Cj4gdHJ5KHJlbW92ZSgibHMiLCBlbnZpcj1iYXNlZW52KCkpKQpFcnJvciBpbiByZW1vdmUoImxzIiwgZW52aXIgPSBiYXNlZW52KCkpIDogCiAgY2Fubm90IHJlbW92ZSB2YXJpYWJsZXMgZnJvbSB0aGUgYmFzZSBlbnZpcm9ubWVudAo+IHRyeShyZW1vdmUoImxzIiwgZW52aXI9YXNOYW1lc3BhY2UoImJhc2UiKSkpCkVycm9yIGluIHJlbW92ZSgibHMiLCBlbnZpciA9IGFzTmFtZXNwYWNlKCJiYXNlIikpIDogCiAgY2Fubm90IHJlbW92ZSB2YXJpYWJsZXMgZnJvbSBiYXNlIG5hbWVzcGFjZQo+ICMjIG5vIG1lc3NhZ2UgaW4gMi4zLjEKPiAKPiAKPiAjIyB0ZXN0cyBvZiBiZWhhdmlvdXIgb2YgZmFjdG9ycwo+ICh4IDwtIGZhY3RvcihMRVRURVJTWzE6NV0pWzI6NF0pClsxXSBCIEMgRApMZXZlbHM6IEEgQiBDIEQgRQo+IHhbMl0KWzFdIEMKTGV2ZWxzOiBBIEIgQyBEIEUKPiB4W1syXV0KWzFdIEMKTGV2ZWxzOiBBIEIgQyBEIEUKPiBzdG9waWZub3QoaWRlbnRpY2FsKHhbMl0sIHhbWzJdXSkpCj4gYXMubGlzdCh4KQpbWzFdXQpbMV0gQgpMZXZlbHM6IEEgQiBDIEQgRQoKW1syXV0KWzFdIEMKTGV2ZWxzOiBBIEIgQyBEIEUKCltbM11dClsxXSBECkxldmVsczogQSBCIEMgRCBFCgo+ICh4eCA8LSB1bmxpc3QoYXMubGlzdCh4KSkpClsxXSBCIEMgRApMZXZlbHM6IEEgQiBDIEQgRQo+IHN0b3BpZm5vdChpZGVudGljYWwoeCwgeHgpKQo+IGFzLnZlY3Rvcih4LCAibGlzdCIpCltbMV1dClsxXSBCCkxldmVsczogQSBCIEMgRCBFCgpbWzJdXQpbMV0gQwpMZXZlbHM6IEEgQiBDIEQgRQoKW1szXV0KWzFdIEQKTGV2ZWxzOiBBIEIgQyBEIEUKCj4gKHN4IDwtIHNhcHBseSh4LCBmdW5jdGlvbiguKS4pKQpbMV0gQiBDIEQKTGV2ZWxzOiBBIEIgQyBEIEUKPiBzdG9waWZub3QoaWRlbnRpY2FsKHgsIHN4KSkKPiAjIyBjaGFuZ2VkIGluIDIuNC4wCj4gCj4gCj4gIyMgYXMuY2hhcmFjdGVyIG9uIGEgZmFjdG9yIHdpdGggIk5BIiBsZXZlbAo+IGFzLmNoYXJhY3Rlcihhcy5mYWN0b3IoYygiQUIiLCAiQ0QiLCBOQSkpKQpbMV0gIkFCIiAiQ0QiIE5BICAKPiBhcy5jaGFyYWN0ZXIoYXMuZmFjdG9yKGMoIk5BIiwgIkNEIiwgTkEpKSkgICMgdXNlIDxOQT4gaXMgMi4zLngKWzFdICJOQSIgIkNEIiBOQSAgCj4gYXMudmVjdG9yKGFzLmZhY3RvcihjKCJOQSIsICJDRCIsIE5BKSkpICAgICAjIGJ1dCB0aGlzIGRpZCBub3QKWzFdICJOQSIgIkNEIiBOQSAgCj4gIyMgdXNlZCA8TkE+IGJlZm9yZQo+IAo+IAo+ICMjIFsgb24gYSB6ZXJvLWNvbHVtbiBkYXRhIGZyYW1lLCBuYW1lcyBvZiBzdWNoCj4gZGF0YS5mcmFtZSgpW0ZBTFNFXQpkYXRhIGZyYW1lIHdpdGggMCBjb2x1bW5zIGFuZCAwIHJvd3MKPiBuYW1lcyhkYXRhLmZyYW1lKCkpCmNoYXJhY3RlcigwKQo+ICMgZ2F2ZSBOVUxMIG5hbWVzIGFuZCBoZW5jZSBzcHVyaW91cyB3YXJuaW5nLgo+IAo+IAo+ICMjIHJlc2lkdWFscyBmcm9tIHplcm8td2VpZ2h0IGdsbSBmaXRzCj4gZC5BRCA8LSBkYXRhLmZyYW1lKHRyZWF0bWVudCA9IGdsKDMsMyksIG91dGNvbWUgPSBnbCgzLDEsOSksCisgICAgICAgICAgICAgICAgICAgIGNvdW50cyA9IGMoMTgsMTcsMTUsMjAsMTAsMjAsMjUsMTMsMTIpKQo+IGZpdCA8LSBnbG0oY291bnRzIH4gb3V0Y29tZSArIHRyZWF0bWVudCwgZmFtaWx5ID0gcG9pc3NvbiwKKyAgICAgICAgICAgIGRhdGEgPSBkLkFELCB3ZWlnaHRzID0gYygwLCByZXAoMSw4KSkpCj4gcHJpbnQocmVzaWR1YWxzKGZpdCwgdHlwZT0id29ya2luZyIpLAorICAgICAgIHdpZHRoID0gMzcpICMgZmlyc3Qgd2FzIE5BIDwgMi40LjAgLy8gIHVzaW5nIG5ldyAnd2lkdGgnCiAgICAgICAgICAxICAgICAgICAgICAyICAgICAgICAgICAzIAotMC4zMTI1MDAwMCAgMC4xNTU0Njg3NSAtMC4xMzIzMTM4MyAKICAgICAgICAgIDQgICAgICAgICAgIDUgICAgICAgICAgIDYgCi0wLjExMTExMTExIC0wLjIwOTA5MDkxICAwLjM0NjIyODI0IAogICAgICAgICAgNyAgICAgICAgICAgOCAgICAgICAgICAgOSAKIDAuMTExMTExMTEgIDAuMDI4MTgxODIgLTAuMTkyMjYzMDYgCj4gIyMgd29ya2luZyByZXNpZHVhbHMgd2VyZSBOQSBmb3IgemVyby13ZWlnaHQgY2FzZXMuCj4gZml0MiA8LSBnbG0oY291bnRzIH4gb3V0Y29tZSArIHRyZWF0bWVudCwgZmFtaWx5ID0gcG9pc3NvbiwKKyAgICAgICAgICAgICBkYXRhID0gZC5BRCwgd2VpZ2h0cyA9IGMoMCwgcmVwKDEsOCkpLCB5ID0gRkFMU0UpCj4gZm9yKHogaW4gYygicmVzcG9uc2UiLCAid29ya2luZyIsICJkZXZpYW5jZSIsICJwZWFyc29uIikpCisgICAgIHN0b3BpZm5vdChhbGwuZXF1YWwocmVzaWR1YWxzKGZpdCwgdHlwZT16KSwgcmVzaWR1YWxzKGZpdDIsIHR5cGU9eiksCisgICAgICAgICAgICAgICAgICAgICAgICAgc2NhbGUgPSAxLCB0b2xlcmFuY2UgPSAxZS0xMCkpCj4gCj4gIyMgYXBwbHkgb24gYXJyYXlzIHdpdGggemVybyBleHRlbnRzCj4gIyMgUm9iaW4gSGFua2luLCBSLWhlbHAsIDIwMDYtMDItMTMKPiBBIDwtIGFycmF5KDAsIGMoMywgMCwgNCkpCj4gZGltbmFtZXMoQSkgPC0gbGlzdChEMSA9IGxldHRlcnNbMTozXSwgRDIgPSBOVUxMLCBEMyA9IExFVFRFUlNbMTo0XSkKPiBmIDwtIGZ1bmN0aW9uKHgpIDUKPiBhcHBseShBLCAxOjIsIGYpCiAgIEQyCkQxIAogIGEKICBiCiAgYwo+IGFwcGx5KEEsIDEsIGYpCmEgYiBjIAo1IDUgNSAKPiBhcHBseShBLCAyLCBmKQpudW1lcmljKDApCj4gIyMgZHJvcHBlZCBkaW1zIGluIDIuMy4xCj4gCj4gCj4gIyMgcHJpbnQgYSBmYWN0b3Igd2l0aCBuYW1lcwo+IHN0cnVjdHVyZShmYWN0b3IoMTo0KSwgbmFtZXMgPSBsZXR0ZXJzWzE6NF0pCmEgYiBjIGQgCjEgMiAzIDQgCkxldmVsczogMSAyIDMgNAo+ICMjIGRyb3BwZWQgbmFtZXMgPCAyLjQuMAo+IAo+IAo+ICMjIHNvbWUgdGVzdHMgb2YgZmFjdG9yIG1hdHJpY2VzCj4gQSA8LSBmYWN0b3IoNzoxMikKPiBkaW0oQSkgPC0gYygyLCAzKQo+IEEKICAgICBbLDFdIFssMl0gWywzXQpbMSxdIDcgICAgOSAgICAxMSAgClsyLF0gOCAgICAxMCAgIDEyICAKTGV2ZWxzOiA3IDggOSAxMCAxMSAxMgo+IHN0cihBKQogRmFjdG9yWzE6MiwgMTozXSB3LyA2IGxldmVscyAiNyIsIjgiLCI5IiwiMTAiLC4uOiAxIDIgMyA0IDUgNgo+IEFbLCAxOjJdCiAgICAgWywxXSBbLDJdClsxLF0gNyAgICA5ICAgClsyLF0gOCAgICAxMCAgCkxldmVsczogNyA4IDkgMTAgMTEgMTIKPiBBWywgMToyLCBkcm9wPVRSVUVdClsxXSA3ICA4ICA5ICAxMApMZXZlbHM6IDcgOCA5IDEwCj4gQVsxLDFdIDwtICI5Igo+IEEKICAgICBbLDFdIFssMl0gWywzXQpbMSxdIDkgICAgOSAgICAxMSAgClsyLF0gOCAgICAxMCAgIDEyICAKTGV2ZWxzOiA3IDggOSAxMCAxMSAxMgo+ICMjIG1pc2JlaGF2ZWQgPCAyLjQuMAo+IAo+IAo+ICMjIFtkcHFyXXQgd2l0aCB2ZWN0b3IgbmNwCj4gbmMgPC0gYygwLCAwLjAwMDEsIDEpCj4gZHQoMS44LCAxMCwgbmMpClsxXSAwLjA4MzExNjM5IDAuMDgzMTI5NzIgMC4yNjY1MDM5Mwo+IHB0KDEuOCwgMTAsIG5jKQpbMV0gMC45NDg5NzM5IDAuOTQ4OTY0MSAwLjc1ODQyNjcKPiBxdCgwLjk1LCAxMCwgbmMpClsxXSAxLjgxMjQ2MSAxLjgxMjU3OSAzLjA0MTc0Mgo+ICMjIGdhdmUgd2FybmluZ3MgaW4gMi4zLjEsIHNob3J0IGFuc3dlciBmb3IgcXQuCj4gZHQoMS44LCAxMCwgLW5jWy0xXSkKWzFdIDAuMDgzMTAzMDYgMC4wMTA3NDYyOQo+IHB0KDEuOCwgMTAsIC1uY1stMV0pClsxXSAwLjk0ODk4MzcgMC45OTQ5NDcyCj4gcXQoMC45NSwgMTAsIC1uY1stMV0pClsxXSAxLjgxMjM0MjkgMC42Nzk3OTAyCj4gIyMgcXQgaW4gMi4zLjEgZGlkIG5vdCBhbGxvdyBuZWdhdGl2ZSBuY3AuCj4gCj4gCj4gIyMgbWVyZ2UoKSB1c2VkIHRvIGluc2VydCByb3cgbmFtZXMgYXMgZmFjdG9yLCBub3QgY2hhcmFjdGVyLCBzbwo+ICMjIHNvcnRpbmcgd2FzIHVuZXhwZWN0ZWQuCj4gQSA8LSBkYXRhLmZyYW1lKGEgPSAxOjQpCj4gcm93Lm5hbWVzKEEpIDwtIGMoIjIwMDItMTEtMTUiLCAiMjAwMi0xMi0xNSIsICIyMDAzLTAxLTE1IiwgIjIwMDMtMDItMTUiKQo+IEIgPC0gZGF0YS5mcmFtZShiID0gMTo0KQo+IHJvdy5uYW1lcyhCKSA8LSBjKCIyMDAyLTA5LTE1IiwgIjIwMDItMTAtMTUiLCAiMjAwMi0xMS0xNSIsICIyMDAyLTEyLTE1IikKPiBtZXJnZShBLCBCLCBieT0wLCBhbGw9VFJVRSkKICAgUm93Lm5hbWVzICBhICBiCjEgMjAwMi0wOS0xNSBOQSAgMQoyIDIwMDItMTAtMTUgTkEgIDIKMyAyMDAyLTExLTE1ICAxICAzCjQgMjAwMi0xMi0xNSAgMiAgNAo1IDIwMDMtMDEtMTUgIDMgTkEKNiAyMDAzLTAyLTE1ICA0IE5BCj4gCj4gCj4gIyMgYXNzaWduaW5nIHRvIGEgbGlzdCBsb29wIGluZGV4IGNvdWxkIGFsdGVyIHRoZSBpbmRleCAoUFIjOTIxNikKPiBMIDwtIGxpc3QoYSA9IGxpc3QodHh0ID0gIm9yaWdpbmFsIHZhbHVlIikpCj4gZiA8LSBmdW5jdGlvbihMTCkgeworICAgICBmb3IgKGxsIGluIExMKSBsbCR0eHQgPC0gImNoYW5nZWQgaW4gZiIKKyAgICAgTEwKKyB9Cj4gZihMKQokYQokYSR0eHQKWzFdICJvcmlnaW5hbCB2YWx1ZSIKCgo+IEwKJGEKJGEkdHh0ClsxXSAib3JpZ2luYWwgdmFsdWUiCgoKPiAjIyBib3RoIHdlcmUgY2hhbmdlZCA8IDIuNC4wCj4gCj4gCj4gIyMgc3VtbWFyeS5tbG0gbWlzYmVoYXZlZCB3aXRoIG5hLmFjdGlvbiA9IG5hLmV4Y2x1ZGUKPiBuIDwtIDUwCj4geCA8LSBydW5pZihuPW4pCj4geTEgPC0gMiAqIHggKyBybm9ybShuPW4pCj4geTIgPC0gNSAqIHggKyBybm9ybShuPW4pCj4geTJbc2FtcGxlKDE6biwgc2l6ZT01KV0gPC0gTkEKPiB5IDwtIGNiaW5kKHkxLCB5MikKPiBmaXQgPC0gbG0oeSB+IDEsIG5hLmFjdGlvbj0ibmEuZXhjbHVkZSIpCj4gc3VtbWFyeShmaXQpClJlc3BvbnNlIHkxIDoKCkNhbGw6CmxtKGZvcm11bGEgPSB5MSB+IDEsIG5hLmFjdGlvbiA9ICJuYS5leGNsdWRlIikKClJlc2lkdWFsczoKICAgIE1pbiAgICAgIDFRICBNZWRpYW4gICAgICAzUSAgICAgTWF4IAotMy4yMzU5IC0wLjg3NjYgIDAuMjMzOCAgMC45OTQ0ICAyLjU5MDUgCgpDb2VmZmljaWVudHM6CiAgICAgICAgICAgIEVzdGltYXRlIFN0ZC4gRXJyb3IgdCB2YWx1ZSBQcig+fHR8KSAgICAKKEludGVyY2VwdCkgICAxLjE0MTkgICAgIDAuMTk2NiAgIDUuODA4IDYuNDdlLTA3ICoqKgotLS0KU2lnbmlmLiBjb2RlczogIDAgJyoqKicgMC4wMDEgJyoqJyAwLjAxICcqJyAwLjA1ICcuJyAwLjEgJyAnIDEKClJlc2lkdWFsIHN0YW5kYXJkIGVycm9yOiAxLjMxOSBvbiA0NCBkZWdyZWVzIG9mIGZyZWVkb20KICAoNSBvYnNlcnZhdGlvbnMgZGVsZXRlZCBkdWUgdG8gbWlzc2luZ25lc3MpCgoKUmVzcG9uc2UgeTIgOgoKQ2FsbDoKbG0oZm9ybXVsYSA9IHkyIH4gMSwgbmEuYWN0aW9uID0gIm5hLmV4Y2x1ZGUiKQoKUmVzaWR1YWxzOgogICAgTWluICAgICAgMVEgIE1lZGlhbiAgICAgIDNRICAgICBNYXggCi00LjI4MjIgLTEuMjU0OCAgMC40MzY0ICAxLjIxODUgIDMuODU3NSAKCkNvZWZmaWNpZW50czoKICAgICAgICAgICAgRXN0aW1hdGUgU3RkLiBFcnJvciB0IHZhbHVlIFByKD58dHwpICAgIAooSW50ZXJjZXB0KSAgIDIuNzA5OCAgICAgMC4yNzk4ICAgOS42ODUgMS43N2UtMTIgKioqCi0tLQpTaWduaWYuIGNvZGVzOiAgMCAnKioqJyAwLjAwMSAnKionIDAuMDEgJyonIDAuMDUgJy4nIDAuMSAnICcgMQoKUmVzaWR1YWwgc3RhbmRhcmQgZXJyb3I6IDEuODc3IG9uIDQ0IGRlZ3JlZXMgb2YgZnJlZWRvbQogICg1IG9ic2VydmF0aW9ucyBkZWxldGVkIGR1ZSB0byBtaXNzaW5nbmVzcykKCgo+ICMjIGZhaWxlZCA8IDIuNC4wCj4gCj4gUk5Ha2luZCgiZGVmYXVsdCIsImRlZmF1bHQiKSMjIHJlc2V0IHRvIGRlZmF1bHQgLSBlYXNlICBSIGNvcmUKPiAKPiAjIyBwcmV0dHlOdW0gbG9zdCBhdHRyaWJ1dGVzIChQUiM4Njk1KQo+IGZvcm1hdChtYXRyaXgoMToxNiwgNCksIGJpZy5tYXJrID0gIiwiKQogICAgIFssMV0gWywyXSBbLDNdIFssNF0KWzEsXSAiIDEiICIgNSIgIiA5IiAiMTMiClsyLF0gIiAyIiAiIDYiICIxMCIgIjE0IgpbMyxdICIgMyIgIiA3IiAiMTEiICIxNSIKWzQsXSAiIDQiICIgOCIgIjEyIiAiMTYiCj4gIyMgd2FzIGEgdmVjdG9yIDwgMi40LjAKPiAKPiAKPiAjIyBwcmludGluZyBvZiBjb21wbGV4IG51bWJlcnMgb2YgdmVyeSBkaWZmZXJlbnQgbWFnbml0dWRlcwo+IDFlMTAwICArIDFlNDRpClsxXSAxZSsxMDArMGUrMDBpCj4gMWUxMDAgKyBwaSoxaSoxMF4oYygtMTAwLDAsMSw0MCwxMDApKQpbMV0gMWUrMTAwKyAwLjAwMDAwMGUrMDBpIDFlKzEwMCsgMC4wMDAwMDBlKzAwaSAxZSsxMDArIDAuMDAwMDAwZSswMGkKWzRdIDFlKzEwMCsgMC4wMDAwMDBlKzAwaSAxZSsxMDArMy4xNDE1OTNlKzEwMGkKPiAjIyBmaXJzdCB3YXMgc2lsbHksIHNlY29uZCBub3Qgcm91bmRlZCBjb3JyZWN0bHkgaW4gMi4yLjAgLSAyLjMuMQo+ICMjIFdlIGRvbid0IGdldCB0aGVtIGxpbmluZyB1cCwgYnV0IHRoYXQgaXMgYSBwcmludGYgaXNzdWUKPiAjIyB0aGF0IG9ubHkgaGFwcGVucyBmb3IgdmVyeSBsYXJnZSBjb21wbGV4IG5vcy4KPiAKPiAKPiAjIyMgZW5kIG9mIHRlc3RzIGFkZGVkIGluIDIuNC4wICMjIwo+IAo+IAo+ICMjIFBsYXRmb3JtLXNwZWNpZmljIGJlaGF2aW91ciBpbiBsb3dlc3MgcmVwb3J0ZWQgdG8gUi1oZWxwCj4gIyMgMjAwNi0xMC0xMiBieSBGcmFuayBIYXJyZWxsCj4geCA8LSBjKDAsNyw4LDE0LDE1LDEyMCwyNDIpCj4geSA8LSBjKDEyMiwxMjgsMTMwLDE1OCwxMTAsMTEwLDkyKQo+IGxvd2Vzcyh4LCB5LCBpdGVyPTApCiR4ClsxXSAgIDAgICA3ICAgOCAgMTQgIDE1IDEyMCAyNDIKCiR5ClsxXSAxMjEuOTU3MzUgMTI4LjAwMDAwIDEzMS4wNjY0OSAxMzYuOTM2NzMgMTI2Ljc2NDY3IDEwOS45OTkwMyAgOTIuMDAwMDMKCj4gbG93ZXNzKHgsIHkpCiR4ClsxXSAgIDAgICA3ICAgOCAgMTQgIDE1IDEyMCAyNDIKCiR5ClsxXSAxMjIgMTI4IDEyOCAxNTggMTEwIDExMCAgOTIKCj4gIyMgTUFEIG9mIGl0ZXJhdGVkIHJlc2lkdWFscyB3YXMgemVybywgYW5kIHJlc3VsdCBkZXBlbmRlZCBvbiB0aGUgcGxhdGZvcm0uCj4gCj4gCj4gIyMgUFIjOTI2MzogcHJvYmxlbXMgd2l0aCBSX1Zpc2libGUKPiBhIDwtIGxpc3QoYj01KQo+IGFbWyh0PC0nYicpXV0KWzFdIDUKPiB4IDwtIG1hdHJpeCg1Oi02LCAzKQo+IHhbMiwgaW52aXNpYmxlKDMpXQpbMV0gLTIKPiAjIyBib3RoIGludmlzaWJsZSBpbiAyLjQuMAo+IAo+IAo+ICMjIyBlbmQgb2YgdGVzdHMgYWRkZWQgaW4gMi40LjEgIyMjCj4gCj4gCj4gIyMgdGVzdHMgb2YgZGVwYXJzaW5nCj4geCA8LWxpc3QoYSA9IE5BLCBiID0gYXMuaW50ZWdlcihOQSksIGM9MCtOQSwgZD0waStOQSwKKyAgICAgICAgICBlID0gMSwgZiA9IDE6MSwgZyA9IDE6MywgaCA9IGMoTkEsIDE6MyksCisgICAgICAgICAgaSA9IGFzLmNoYXJhY3RlcihOQSksIGogPSBjKCJmb28iLCBOQSwgImJhciIpCisgICAgICAgICAgKQo+IGRwdXQoeCwgY29udHJvbD1OVUxMKQpsaXN0KE5BLCBOQSwgTkEsIE5BLCAxLCAxLCAxOjMsIGMoTkEsIDEsIDIsIDMpLCBOQSwgYygiZm9vIiwgCk5BLCAiYmFyIikpCj4gZHB1dCh4LCBjb250cm9sPSJrZWVwSW50ZWdlciIpCmxpc3QoTkEsIE5BX2ludGVnZXJfLCBOQSwgTkEsIDEsIDFMLCAxOjMsIGMoTkEsIDFMLCAyTCwgM0wpLCAKICAgIE5BLCBjKCJmb28iLCBOQSwgImJhciIpKQo+IGRwdXQoeCwgY29udHJvbD0ia2VlcE5BIikKbGlzdChOQSwgTkFfaW50ZWdlcl8sIE5BX3JlYWxfLCBOQV9jb21wbGV4XywgMSwgMSwgMTozLCBjKE5BLCAKMSwgMiwgMyksIE5BX2NoYXJhY3Rlcl8sIGMoImZvbyIsIE5BLCAiYmFyIikpCj4gZHB1dCh4KQpsaXN0KGEgPSBOQSwgYiA9IE5BX2ludGVnZXJfLCBjID0gTkFfcmVhbF8sIGQgPSBOQV9jb21wbGV4XywgCiAgICBlID0gMSwgZiA9IDFMLCBnID0gMTozLCBoID0gYyhOQSwgMUwsIDJMLCAzTCksIGkgPSBOQV9jaGFyYWN0ZXJfLCAKICAgIGogPSBjKCJmb28iLCBOQSwgImJhciIpKQo+IGRwdXQoeCwgY29udHJvbD0iYWxsIikKbGlzdChhID0gTkEsIGIgPSBOQV9pbnRlZ2VyXywgYyA9IE5BX3JlYWxfLCBkID0gTkFfY29tcGxleF8sIAogICAgZSA9IDEsIGYgPSAxTCwgZyA9IDE6MywgaCA9IGMoTkEsIDFMLCAyTCwgM0wpLCBpID0gTkFfY2hhcmFjdGVyXywgCiAgICBqID0gYygiZm9vIiwgTkEsICJiYXIiKSkKPiBkcHV0KHgsIGNvbnRyb2w9YygiYWxsIiwgIlNfY29tcGF0aWJsZSIpKQpsaXN0KGEgPSBOQSwgYiA9IGFzLmludGVnZXIoTkEpLCBjID0gYXMuZG91YmxlKE5BKSwgZCA9IGFzLmNvbXBsZXgoTkEpLCAKICAgIGUgPSAxLiwgZiA9IGFzLmludGVnZXIoMSksIGcgPSAxOjMsIGggPSBhcy5pbnRlZ2VyKGMoTkEsIAogICAgMSwgMiwgMykpLCBpID0gYXMuY2hhcmFjdGVyKE5BKSwgaiA9IGMoImZvbyIsIE5BLCAiYmFyIikpCj4gdG1wIDwtIHRlbXBmaWxlKHRtcGRpciA9IGdldHdkKCkpCj4gZHB1dCh4LCB0bXAsIGNvbnRyb2w9ImFsbCIpCj4gc3RvcGlmbm90KGlkZW50aWNhbChkZ2V0KHRtcCksIHgpKQo+IGRwdXQoeCwgdG1wLCBjb250cm9sPWMoImFsbCIsICJTX2NvbXBhdGlibGUiKSkKPiBzdG9waWZub3QoaWRlbnRpY2FsKGRnZXQodG1wKSwgeCkpCj4gdW5saW5rKHRtcCkKPiAjIyBjaGFuZ2VzIGluIDIuNS4wCj4gCj4gCj4gIyMgZ2l2ZSBiZXR0ZXIgZXJyb3IgbWVzc2FnZSBmb3IgbmxzIHdpdGggbm8gcGFyYW1ldGVycwo+ICMjIEl2byBXZWxjaCwgUi1oZWxwLCAyMDA2LTEyLTIzLgo+IGQgPC0gZGF0YS5mcmFtZSh5PSBydW5pZigxMCksIHg9cnVuaWYoMTApKQo+IHRyeShubHMoeSB+IDEvKDEreCksIGRhdGEgPSBkLCBzdGFydD1saXN0KHg9MC41LHk9MC41KSwgdHJhY2U9VFJVRSkpCkVycm9yIGluIG5scyh5IH4gMS8oMSArIHgpLCBkYXRhID0gZCwgc3RhcnQgPSBsaXN0KHggPSAwLjUsIHkgPSAwLjUpLCAgOiAKICBubyBwYXJhbWV0ZXJzIHRvIGZpdAo+ICMjIGNoYW5nZWQgaW4gMi40LjEgcGF0Y2hlZAo+IAo+IAo+ICMjIGN1dChicmVha3M9InllYXJzIiksIGluIHBhcnQgUFIjOTQzMwo+IGN1dChhcy5EYXRlKGMoIjIwMDAtMDEtMTciLCIyMDAxLTAxLTEzIiwiMjAwMS0wMS0yMCIpKSwgYnJlYWtzPSJ5ZWFycyIpClsxXSAyMDAwLTAxLTAxIDIwMDEtMDEtMDEgMjAwMS0wMS0wMQpMZXZlbHM6IDIwMDAtMDEtMDEgMjAwMS0wMS0wMQo+IGN1dChhcy5QT1NJWGN0KGMoIjIwMDAtMDEtMTciLCIyMDAxLTAxLTEzIiwiMjAwMS0wMS0yMCIpKSwgYnJlYWtzPSJ5ZWFycyIpClsxXSAyMDAwLTAxLTAxIDIwMDEtMDEtMDEgMjAwMS0wMS0wMQpMZXZlbHM6IDIwMDAtMDEtMDEgMjAwMS0wMS0wMQo+ICMjIGRpZCBub3QgZ2V0IGRheSAwMSA8IDIuNC4xIHBhdGNoZWQKPiAKPiAKPiAjIyBtYW5pcHVsYXRpbmcgcm93bmFtZXM6IHByb2JsZW1zIGluIHByZS0yLjUuMAo+IEEgPC0gZGF0YS5mcmFtZShhPWNoYXJhY3RlcigwKSkKPiB0cnkocm93Lm5hbWVzKEEpIDwtIDE6MTApICMgc3VjY2VlZGVkIGluIERlYyAyMDA2CkVycm9yIGluIGAucm93TmFtZXNERjwtYCh4LCB2YWx1ZSA9IHZhbHVlKSA6IGludmFsaWQgJ3Jvdy5uYW1lcycgbGVuZ3RoCj4gQSA8LSBsaXN0KGE9MTozKQo+IGNsYXNzKEEpIDwtICJkYXRhLmZyYW1lIgo+IHJvdy5uYW1lcyhBKSA8LSBsZXR0ZXJzWzI0OjI2XSAjIGZhaWxlZCBhdCBvbmUgcG9pbnQgaW4gRGVjIDIwMDYKPiBBCiAgYQp4IDEKeSAyCnogMwo+ICMjCj4gCj4gCj4gIyMgZXh0cmVtZSBjYXNlcyBmb3Igc3Vic2V0dGluZyBvZiBkYXRhIGZyYW1lcwo+IHcgPC0gd29tZW5bMSwgXQo+IHdbXQogIGhlaWdodCB3ZWlnaHQKMSAgICAgNTggICAgMTE1Cj4gd1ssZHJvcCA9IFRSVUVdCiAgaGVpZ2h0IHdlaWdodAoxICAgICA1OCAgICAxMTUKV2FybmluZyBtZXNzYWdlOgpJbiBgWy5kYXRhLmZyYW1lYCh3LCAsIGRyb3AgPSBUUlVFKSA6ICdkcm9wJyBhcmd1bWVudCB3aWxsIGJlIGlnbm9yZWQKPiB3WzEsXQogIGhlaWdodCB3ZWlnaHQKMSAgICAgNTggICAgMTE1Cj4gd1ssXQogIGhlaWdodCB3ZWlnaHQKMSAgICAgNTggICAgMTE1Cj4gd1sxLCAsIGRyb3AgPSBGQUxTRV0KICBoZWlnaHQgd2VpZ2h0CjEgICAgIDU4ICAgIDExNQo+IHdbLCAsIGRyb3AgPSBGQUxTRV0KICBoZWlnaHQgd2VpZ2h0CjEgICAgIDU4ICAgIDExNQo+IHdbMSwgLCBkcm9wID0gVFJVRV0KJGhlaWdodApbMV0gNTgKCiR3ZWlnaHQKWzFdIDExNQoKPiB3WywgLCBkcm9wID0gVFJVRV0KJGhlaWdodApbMV0gNTgKCiR3ZWlnaHQKWzFdIDExNQoKPiAjIyByZWdyZXNzaW9uIHRlc3Q6IGNvZGUgY2hhbmdlZCBmb3IgMi41LjAKPiAKPiAKPiAjIyBkYXRhLmZyYW1lKCkgd2l0aCB6ZXJvIGNvbHVtbnMgaWdub3JlZCAncm93Lm5hbWVzJwo+ICh4IDwtIGRhdGEuZnJhbWUocm93Lm5hbWVzPTE6NCkpCmRhdGEgZnJhbWUgd2l0aCAwIGNvbHVtbnMgYW5kIDQgcm93cwo+IG5yb3coeCkKWzFdIDQKPiByb3cubmFtZXMoeCkKWzFdICIxIiAiMiIgIjMiICI0Igo+IGF0dHIoeCwgInJvdy5uYW1lcyIpClsxXSAxIDIgMyA0Cj4gIyMgaWdub3JlZCBwcmlvciB0byAyLjUuMC4KPiAKPiAKPiAjIyBpZGVudGljYWwgb24gZGF0YS5mcmFtZXMKPiBkMCA8LSBkMSA8LSBkYXRhLmZyYW1lKDE6NCwgcm93Lm5hbWVzPTE6NCkKPiByb3cubmFtZXMoZDApIDwtIE5VTEwKPiBkcHV0KGQwKQpzdHJ1Y3R1cmUobGlzdChYMS40ID0gMTo0KSwgY2xhc3MgPSAiZGF0YS5mcmFtZSIsIHJvdy5uYW1lcyA9IGMoTkEsIAotNEwpKQo+IGRwdXQoZDEpCnN0cnVjdHVyZShsaXN0KFgxLjQgPSAxOjQpLCBjbGFzcyA9ICJkYXRhLmZyYW1lIiwgcm93Lm5hbWVzID0gYyhOQSwgCjRMKSkKPiBpZGVudGljYWwoZDAsIGQxKQpbMV0gVFJVRQo+IGFsbC5lcXVhbChkMCwgZDEpClsxXSBUUlVFCj4gIyMgY2hhbmdlIHRvIGlkZW50aWNhbCgsYXR0cmliLmFzLnNldCkgY29kZSB0byBzdXBwb3J0IGludGVybmFsIHJlcHJlc2VudGF0aW9uIGluIDQuMi4wCj4gaWRlbnRpY2FsKGQwLCBkMSwgYXR0cmliLmFzLnNldCA9IEZBTFNFKQpbMV0gVFJVRQo+ICMjCj4gcm93Lm5hbWVzKGQxKSA8LSBhcy5jaGFyYWN0ZXIoMTo0KQo+IGRwdXQoZDEpCnN0cnVjdHVyZShsaXN0KFgxLjQgPSAxOjQpLCBjbGFzcyA9ICJkYXRhLmZyYW1lIiwgcm93Lm5hbWVzID0gYygiMSIsIAoiMiIsICIzIiwgIjQiKSkKPiBpZGVudGljYWwoZDAsIGQxKQpbMV0gRkFMU0UKPiBhbGwuZXF1YWwoZDAsIGQxKQpbMV0gIkF0dHJpYnV0ZXM6IDwgQ29tcG9uZW50IFwicm93Lm5hbWVzXCI6IE1vZGVzOiBudW1lcmljLCBjaGFyYWN0ZXIgPiIgICAgICAgICAgICAgIApbMl0gIkF0dHJpYnV0ZXM6IDwgQ29tcG9uZW50IFwicm93Lm5hbWVzXCI6IHRhcmdldCBpcyBudW1lcmljLCBjdXJyZW50IGlzIGNoYXJhY3RlciA+Igo+ICMjIGlkZW50aWNhbCB1c2VkIGludGVybmFsIHJlcHJlc2VudGF0aW9uIHByaW9yIHRvIDIuNS4wCj4gCj4gCj4gIyMgYWxsLmVxdWFsCj4gIyBpZ25vcmVkIGNoZWNrLmF0dHJpYnV0ZXMgaW4gMi40LjEKPiBhbGwuZXF1YWwoZGF0YS5mcmFtZSh4PTE6NSwgcm93Lm5hbWVzPWxldHRlcnNbMTo1XSksCisgICAgICAgICAgIGRhdGEuZnJhbWUoeD0xOjUscm93Lm5hbWVzPUxFVFRFUlNbMTo1XSksCisgICAgICAgICAgIGNoZWNrLmF0dHJpYnV0ZXM9RkFMU0UpClsxXSBUUlVFCj4gIyB0cmVhdGVkIGxvZ2ljYWxzIGFzIG51bWVyaWMKPiBhbGwuZXF1YWwoYyhULCBGLCBGKSwgYyhULCBULCBGKSkKWzFdICIxIGVsZW1lbnQgbWlzbWF0Y2giCj4gYWxsLmVxdWFsKGMoVCwgVCwgRiksIGMoVCwgRiwgRikpClsxXSAiMSBlbGVtZW50IG1pc21hdGNoIgo+ICMgaWdub3JlZCByYXc6Cj4gYWxsLmVxdWFsKGFzLnJhdygxOjMpLCBhcy5yYXcoMTozKSkKWzFdIFRSVUUKPiBhbGwuZXF1YWwoYXMucmF3KDE6MyksIGFzLnJhdygzOjEpKQpbMV0gIjIgZWxlbWVudCBtaXNtYXRjaGVzIgo+ICMjCj4gCj4gCj4gIyMgdGVzdHMgb2YgZGVwYXJzaW5nCj4gIyBpZiB3ZSBydW4gdGhpcyBmcm9tIHN0ZGluLCB3ZSB3aWxsIGhhdmUgbm8gc291cmNlLCBzbyBmYWtlIGl0Cj4gZiA8LSBmdW5jdGlvbih4LCB4bSAgPSBtYXgoMUwsIHgpKSB7eHggPC0gMEw7IHl5IDwtIE5BX3JlYWxffQo+IGF0dHIoZiwgInNyY3JlZiIpIDwtIHNyY3JlZihzcmNmaWxlY29weSgiIiwKKyAgICAgImZ1bmN0aW9uKHgsIHhtICA9IG1heCgxTCwgeCkpIHt4eCA8LSAwTDsgeXkgPC0gTkFfcmVhbF99IiksCisgICAgIGMoMUwsIDFMLCAxTCwgNTZMKSkKPiBmICMgdXNlcyB0aGUgc291cmNlCmZ1bmN0aW9uKHgsIHhtICA9IG1heCgxTCwgeCkpIHt4eCA8LSAwTDsgeXkgPC0gTkFfcmVhbF99Cj4gZHB1dChmKSAjIG5vdCBzb3VyY2UKZnVuY3Rpb24gKHgsIHhtID0gbWF4KDFMLCB4KSkgCnsKICAgIHh4IDwtIDBMCiAgICB5eSA8LSBOQV9yZWFsXwp9Cj4gZHB1dChmLCBjb250cm9sPSJhbGwiKSAjIHVzZXMgdGhlIHNvdXJjZQpmdW5jdGlvbih4LCB4bSAgPSBtYXgoMUwsIHgpKSB7eHggPC0gMEw7IHl5IDwtIE5BX3JlYWxffQo+IGNhdChkZXBhcnNlKGYpLCBzZXA9IlxuIikKZnVuY3Rpb24gKHgsIHhtID0gbWF4KDFMLCB4KSkgCnsKICAgIHh4IDwtIDBMCiAgICB5eSA8LSBOQV9yZWFsXwp9Cj4gZHVtcCgiZiIsIGZpbGU9IiIpCmYgPC0KZnVuY3Rpb24oeCwgeG0gID0gbWF4KDFMLCB4KSkge3h4IDwtIDBMOyB5eSA8LSBOQV9yZWFsX30KPiAjIHJlbW92ZSB0aGUgc291cmNlCj4gYXR0cihmLCAic3JjcmVmIikgPC0gTlVMTAo+IGYKZnVuY3Rpb24gKHgsIHhtID0gbWF4KDFMLCB4KSkgCnsKICAgIHh4IDwtIDBMCiAgICB5eSA8LSBOQV9yZWFsXwp9Cj4gZHB1dChmLCBjb250cm9sPSJhbGwiKQpmdW5jdGlvbiAoeCwgeG0gPSBtYXgoMUwsIHgpKSAKewogICAgeHggPC0gMEwKICAgIHl5IDwtIE5BX3JlYWxfCn0KPiBkdW1wKCJmIiwgZmlsZT0iIikKZiA8LQpmdW5jdGlvbiAoeCwgeG0gPSBtYXgoMUwsIHgpKSAKewogICAgeHggPC0gMEwKICAgIHl5IDwtIE5BX3JlYWxfCn0KPiAKPiBleHByZXNzaW9uKGJpbiA8LSBiaW4gKyAxTCkKZXhwcmVzc2lvbihiaW4gPC0gYmluICsgMUwpCj4gIyMgZGlkIG5vdCBwcmVzZXJ2ZSBlLmcuIDFMIGF0IHNvbWUgcG9pbnQgaW4gcHJlLTIuNS4wCj4gCj4gCj4gIyMgTkFzIGluIHN1YnN0ciB3ZXJlIGhhbmRsZWQgYXMgbGFyZ2UgbmVnYXRpdmUgbnVtYmVycwo+IHggPC0gImFiY2RlIgo+IHN1YnN0cih4LCAxLCAzKQpbMV0gImFiYyIKPiBzdWJzdHIoeCwgTkEsIDEpClsxXSBOQQo+IHN1YnN0cih4LCAxLCBOQSkKWzFdIE5BCj4gc3Vic3RyKHgsIE5BLCAzKSA8LSAiYWJjIjsgeApbMV0gTkEKPiBzdWJzdHIoeCwgMSwgTkEpIDwtICJBQSI7IHgKWzFdIE5BCj4gc3Vic3RyKHgsIDEsIDIpIDwtIE5BX2NoYXJhY3Rlcl87IHgKWzFdIE5BCj4gIyMgIiIgb3Igbm8gY2hhbmdlIGluIDIuNC4xLCBleGNlcHQgbGFzdAo+IAo+IAo+ICMjIHJlZ3Jlc3Npb24gdGVzdHMgZm9yIHBtaW4vcG1heCwgcmV3cml0dGVuIGluIEMgZm9yIDIuNS4wCj4gIyBOVUxMID09IGludGVnZXIoMCkKPiBwbWluKE5VTEwsIGludGVnZXIoMCkpCmludGVnZXIoMCkKPiBwbWF4KGludGVnZXIoMCksIE5VTEwpCmludGVnZXIoMCkKPiBwbWluKE5VTEwsIDE6MykjIG5vdyBvawppbnRlZ2VyKDApCj4gcG1heChwaSwgTlVMTCwgMjo0KQpudW1lcmljKDApCj4gCj4geCA8LSBjKDEsIE5BLCBOQSwgNCwgNSkKPiB5IDwtIGMoMiwgTkEsIDQsIE5BLCAzKQo+IHBtaW4oeCwgeSkKWzFdICAxIE5BIE5BIE5BICAzCj4gc3RvcGlmbm90KGlkZW50aWNhbChwbWluKHgsIHkpLCBwbWluKHksIHgpKSkKPiBwbWluKHgsIHksIG5hLnJtPVRSVUUpClsxXSAgMSBOQSAgNCAgNCAgMwo+IHN0b3BpZm5vdChpZGVudGljYWwocG1pbih4LCB5LCBuYS5ybT1UUlVFKSwgcG1pbih5LCB4LCBuYS5ybT1UUlVFKSkpCj4gcG1heCh4LCB5KQpbMV0gIDIgTkEgTkEgTkEgIDUKPiBzdG9waWZub3QoaWRlbnRpY2FsKHBtYXgoeCwgeSksIHBtYXgoeSwgeCkpKQo+IHBtYXgoeCwgeSwgbmEucm09VFJVRSkKWzFdICAyIE5BICA0ICA0ICA1Cj4gc3RvcGlmbm90KGlkZW50aWNhbChwbWF4KHgsIHksIG5hLnJtPVRSVUUpLCBwbWF4KHksIHgsIG5hLnJtPVRSVUUpKSkKPiAKPiB4IDwtIGFzLmludGVnZXIoeCk7IHkgPC0gYXMuaW50ZWdlcih5KQo+IHBtaW4oeCwgeSkKWzFdICAxIE5BIE5BIE5BICAzCj4gc3RvcGlmbm90KGlkZW50aWNhbChwbWluKHgsIHkpLCBwbWluKHksIHgpKSkKPiBwbWluKHgsIHksIG5hLnJtPVRSVUUpClsxXSAgMSBOQSAgNCAgNCAgMwo+IHN0b3BpZm5vdChpZGVudGljYWwocG1pbih4LCB5LCBuYS5ybT1UUlVFKSwgcG1pbih5LCB4LCBuYS5ybT1UUlVFKSkpCj4gcG1heCh4LCB5KQpbMV0gIDIgTkEgTkEgTkEgIDUKPiBzdG9waWZub3QoaWRlbnRpY2FsKHBtYXgoeCwgeSksIHBtYXgoeSwgeCkpKQo+IHBtYXgoeCwgeSwgbmEucm09VFJVRSkKWzFdICAyIE5BICA0ICA0ICA1Cj4gc3RvcGlmbm90KGlkZW50aWNhbChwbWF4KHgsIHksIG5hLnJtPVRSVUUpLCBwbWF4KHksIHgsIG5hLnJtPVRSVUUpKSkKPiAKPiB4IDwtIGFzLmNoYXJhY3Rlcih4KTsgeSA8LSBhcy5jaGFyYWN0ZXIoeSkKPiBwbWluKHgsIHkpClsxXSAiMSIgTkEgIE5BICBOQSAgIjMiCj4gc3RvcGlmbm90KGlkZW50aWNhbChwbWluKHgsIHkpLCBwbWluKHksIHgpKSkKPiBwbWluKHgsIHksIG5hLnJtPVRSVUUpClsxXSAiMSIgTkEgICI0IiAiNCIgIjMiCj4gc3RvcGlmbm90KGlkZW50aWNhbChwbWluKHgsIHksIG5hLnJtPVRSVUUpLCBwbWluKHksIHgsIG5hLnJtPVRSVUUpKSkKPiBwbWF4KHgsIHkpClsxXSAiMiIgTkEgIE5BICBOQSAgIjUiCj4gc3RvcGlmbm90KGlkZW50aWNhbChwbWF4KHgsIHkpLCBwbWF4KHksIHgpKSkKPiBwbWF4KHgsIHksIG5hLnJtPVRSVUUpClsxXSAiMiIgTkEgICI0IiAiNCIgIjUiCj4gc3RvcGlmbm90KGlkZW50aWNhbChwbWF4KHgsIHksIG5hLnJtPVRSVUUpLCBwbWF4KHksIHgsIG5hLnJtPVRSVUUpKSkKPiAKPiAjIHRlc3RzIG9mIGNsYXNzZWQgcXVhbnRpdGllcwo+IHggPC0gLmxlYXAuc2Vjb25kc1sxOjIzXTsgeSA8LSByZXYoeCkKPiB4WzJdIDwtIHlbMl0gPC0geFszXSA8LSB5WzRdIDwtIE5BCj4gZm9ybWF0KHBtaW4oeCwgeSksIHR6PSJHTVQiKSAgIyBUWiBuYW1lcyBkaWZmZXIgYnkgcGxhdGZvcm0KIFsxXSAiMTk3Mi0wNy0wMSIgTkEgICAgICAgICAgIE5BICAgICAgICAgICBOQSAgICAgICAgICAgIjE5NzYtMDEtMDEiCiBbNl0gIjE5NzctMDEtMDEiICIxOTc4LTAxLTAxIiAiMTk3OS0wMS0wMSIgIjE5ODAtMDEtMDEiICIxOTgxLTA3LTAxIgpbMTFdICIxOTgyLTA3LTAxIiAiMTk4My0wNy0wMSIgIjE5ODItMDctMDEiICIxOTgxLTA3LTAxIiAiMTk4MC0wMS0wMSIKWzE2XSAiMTk3OS0wMS0wMSIgIjE5NzgtMDEtMDEiICIxOTc3LTAxLTAxIiAiMTk3Ni0wMS0wMSIgIjE5NzUtMDEtMDEiClsyMV0gIjE5NzQtMDEtMDEiICIxOTczLTAxLTAxIiAiMTk3Mi0wNy0wMSIKPiBjbGFzcyhwbWluKHgsIHkpKQpbMV0gIlBPU0lYY3QiICJQT1NJWHQiIAo+IHN0b3BpZm5vdChpZGVudGljYWwocG1pbih4LCB5KSwgcG1pbih5LCB4KSkpCj4gZm9ybWF0KHBtaW4oeCwgeSwgbmEucm09VFJVRSksIHR6PSJHTVQiKQogWzFdICIxOTcyLTA3LTAxIiBOQSAgICAgICAgICAgIjE5OTctMDctMDEiICIxOTc1LTAxLTAxIiAiMTk3Ni0wMS0wMSIKIFs2XSAiMTk3Ny0wMS0wMSIgIjE5NzgtMDEtMDEiICIxOTc5LTAxLTAxIiAiMTk4MC0wMS0wMSIgIjE5ODEtMDctMDEiClsxMV0gIjE5ODItMDctMDEiICIxOTgzLTA3LTAxIiAiMTk4Mi0wNy0wMSIgIjE5ODEtMDctMDEiICIxOTgwLTAxLTAxIgpbMTZdICIxOTc5LTAxLTAxIiAiMTk3OC0wMS0wMSIgIjE5NzctMDEtMDEiICIxOTc2LTAxLTAxIiAiMTk3NS0wMS0wMSIKWzIxXSAiMTk3NC0wMS0wMSIgIjE5NzMtMDEtMDEiICIxOTcyLTA3LTAxIgo+IHN0b3BpZm5vdChpZGVudGljYWwocG1pbih4LCB5LCBuYS5ybT1UUlVFKSwgcG1pbih5LCB4LCBuYS5ybT1UUlVFKSkpCj4gZm9ybWF0KHBtYXgoeCwgeSksIHR6PSJHTVQiKQogWzFdICIyMDA2LTAxLTAxIiBOQSAgICAgICAgICAgTkEgICAgICAgICAgIE5BICAgICAgICAgICAiMTk5NC0wNy0wMSIKIFs2XSAiMTk5My0wNy0wMSIgIjE5OTItMDctMDEiICIxOTkxLTAxLTAxIiAiMTk5MC0wMS0wMSIgIjE5ODgtMDEtMDEiClsxMV0gIjE5ODUtMDctMDEiICIxOTgzLTA3LTAxIiAiMTk4NS0wNy0wMSIgIjE5ODgtMDEtMDEiICIxOTkwLTAxLTAxIgpbMTZdICIxOTkxLTAxLTAxIiAiMTk5Mi0wNy0wMSIgIjE5OTMtMDctMDEiICIxOTk0LTA3LTAxIiAiMTk5Ni0wMS0wMSIKWzIxXSAiMTk5Ny0wNy0wMSIgIjE5OTktMDEtMDEiICIyMDA2LTAxLTAxIgo+IHN0b3BpZm5vdChpZGVudGljYWwocG1heCh4LCB5KSwgcG1heCh5LCB4KSkpCj4gZm9ybWF0KHBtYXgoeCwgeSwgbmEucm09VFJVRSksIHR6PSJHTVQiKQogWzFdICIyMDA2LTAxLTAxIiBOQSAgICAgICAgICAgIjE5OTctMDctMDEiICIxOTc1LTAxLTAxIiAiMTk5NC0wNy0wMSIKIFs2XSAiMTk5My0wNy0wMSIgIjE5OTItMDctMDEiICIxOTkxLTAxLTAxIiAiMTk5MC0wMS0wMSIgIjE5ODgtMDEtMDEiClsxMV0gIjE5ODUtMDctMDEiICIxOTgzLTA3LTAxIiAiMTk4NS0wNy0wMSIgIjE5ODgtMDEtMDEiICIxOTkwLTAxLTAxIgpbMTZdICIxOTkxLTAxLTAxIiAiMTk5Mi0wNy0wMSIgIjE5OTMtMDctMDEiICIxOTk0LTA3LTAxIiAiMTk5Ni0wMS0wMSIKWzIxXSAiMTk5Ny0wNy0wMSIgIjE5OTktMDEtMDEiICIyMDA2LTAxLTAxIgo+IHN0b3BpZm5vdChpZGVudGljYWwocG1heCh4LCB5LCBuYS5ybT1UUlVFKSwgcG1heCh5LCB4LCBuYS5ybT1UUlVFKSkpCj4gCj4geCA8LSBhcy5QT1NJWGx0KHgsIHR6PSJHTVQiKTsgeSA8LSBhcy5QT1NJWGx0KHksIHR6PSJHTVQiKQo+IGZvcm1hdChwbWluKHgsIHkpLCB0ej0iR01UIikKIFsxXSAiMTk3Mi0wNy0wMSIgTkEgICAgICAgICAgIE5BICAgICAgICAgICBOQSAgICAgICAgICAgIjE5NzYtMDEtMDEiCiBbNl0gIjE5NzctMDEtMDEiICIxOTc4LTAxLTAxIiAiMTk3OS0wMS0wMSIgIjE5ODAtMDEtMDEiICIxOTgxLTA3LTAxIgpbMTFdICIxOTgyLTA3LTAxIiAiMTk4My0wNy0wMSIgIjE5ODItMDctMDEiICIxOTgxLTA3LTAxIiAiMTk4MC0wMS0wMSIKWzE2XSAiMTk3OS0wMS0wMSIgIjE5NzgtMDEtMDEiICIxOTc3LTAxLTAxIiAiMTk3Ni0wMS0wMSIgIjE5NzUtMDEtMDEiClsyMV0gIjE5NzQtMDEtMDEiICIxOTczLTAxLTAxIiAiMTk3Mi0wNy0wMSIKPiBjbGFzcyhwbWluKHgsIHkpKQpbMV0gIlBPU0lYbHQiICJQT1NJWHQiIAo+IHN0b3BpZm5vdChpZGVudGljYWwocG1pbih4LCB5KSwgcG1pbih5LCB4KSkpCj4gZm9ybWF0KHBtaW4oeCwgeSwgbmEucm09VFJVRSksIHR6PSJHTVQiKQogWzFdICIxOTcyLTA3LTAxIiBOQSAgICAgICAgICAgIjE5OTctMDctMDEiICIxOTc1LTAxLTAxIiAiMTk3Ni0wMS0wMSIKIFs2XSAiMTk3Ny0wMS0wMSIgIjE5NzgtMDEtMDEiICIxOTc5LTAxLTAxIiAiMTk4MC0wMS0wMSIgIjE5ODEtMDctMDEiClsxMV0gIjE5ODItMDctMDEiICIxOTgzLTA3LTAxIiAiMTk4Mi0wNy0wMSIgIjE5ODEtMDctMDEiICIxOTgwLTAxLTAxIgpbMTZdICIxOTc5LTAxLTAxIiAiMTk3OC0wMS0wMSIgIjE5NzctMDEtMDEiICIxOTc2LTAxLTAxIiAiMTk3NS0wMS0wMSIKWzIxXSAiMTk3NC0wMS0wMSIgIjE5NzMtMDEtMDEiICIxOTcyLTA3LTAxIgo+IHN0b3BpZm5vdChpZGVudGljYWwocG1pbih4LCB5LCBuYS5ybT1UUlVFKSwgcG1pbih5LCB4LCBuYS5ybT1UUlVFKSkpCj4gZm9ybWF0KHBtYXgoeCwgeSksIHR6PSJHTVQiKQogWzFdICIyMDA2LTAxLTAxIiBOQSAgICAgICAgICAgTkEgICAgICAgICAgIE5BICAgICAgICAgICAiMTk5NC0wNy0wMSIKIFs2XSAiMTk5My0wNy0wMSIgIjE5OTItMDctMDEiICIxOTkxLTAxLTAxIiAiMTk5MC0wMS0wMSIgIjE5ODgtMDEtMDEiClsxMV0gIjE5ODUtMDctMDEiICIxOTgzLTA3LTAxIiAiMTk4NS0wNy0wMSIgIjE5ODgtMDEtMDEiICIxOTkwLTAxLTAxIgpbMTZdICIxOTkxLTAxLTAxIiAiMTk5Mi0wNy0wMSIgIjE5OTMtMDctMDEiICIxOTk0LTA3LTAxIiAiMTk5Ni0wMS0wMSIKWzIxXSAiMTk5Ny0wNy0wMSIgIjE5OTktMDEtMDEiICIyMDA2LTAxLTAxIgo+IHN0b3BpZm5vdChpZGVudGljYWwocG1heCh4LCB5KSwgcG1heCh5LCB4KSkpCj4gZm9ybWF0KHBtYXgoeCwgeSwgbmEucm09VFJVRSksIHR6PSJHTVQiKQogWzFdICIyMDA2LTAxLTAxIiBOQSAgICAgICAgICAgIjE5OTctMDctMDEiICIxOTc1LTAxLTAxIiAiMTk5NC0wNy0wMSIKIFs2XSAiMTk5My0wNy0wMSIgIjE5OTItMDctMDEiICIxOTkxLTAxLTAxIiAiMTk5MC0wMS0wMSIgIjE5ODgtMDEtMDEiClsxMV0gIjE5ODUtMDctMDEiICIxOTgzLTA3LTAxIiAiMTk4NS0wNy0wMSIgIjE5ODgtMDEtMDEiICIxOTkwLTAxLTAxIgpbMTZdICIxOTkxLTAxLTAxIiAiMTk5Mi0wNy0wMSIgIjE5OTMtMDctMDEiICIxOTk0LTA3LTAxIiAiMTk5Ni0wMS0wMSIKWzIxXSAiMTk5Ny0wNy0wMSIgIjE5OTktMDEtMDEiICIyMDA2LTAxLTAxIgo+IHN0b3BpZm5vdChpZGVudGljYWwocG1heCh4LCB5LCBuYS5ybT1UUlVFKSwgcG1heCh5LCB4LCBuYS5ybT1UUlVFKSkpCj4gIyMgcmVncmVzaW9uIHRlc3RzCj4gCj4gCj4gIyMgcmVncmVzc2lvbiB0ZXN0cyBvbiBuYW1lcyBvZiAxRCBhcnJheXMKPiB4IDwtIGFzLmFycmF5KDE6MykKPiBuYW1lcyh4KSA8LSBsZXR0ZXJzW3hdICMgc2V0cyBkaW1uYW1lcywgcmVhbGx5Cj4gbmFtZXMoeCkKWzFdICJhIiAiYiIgImMiCj4gZGltbmFtZXMoeCkKW1sxXV0KWzFdICJhIiAiYiIgImMiCgo+IGF0dHJpYnV0ZXMoeCkKJGRpbQpbMV0gMwoKJGRpbW5hbWVzCiRkaW1uYW1lc1tbMV1dClsxXSAiYSIgImIiICJjIgoKCj4gbmFtZXMoeCkgPC0gTlVMTAo+IGF0dHIoeCwgIm5hbWVzIikgPC0gTEVUVEVSU1t4XSAjIHNldHMgZGltbmFtZXMsIHJlYWxseQo+IG5hbWVzKHgpClsxXSAiQSIgIkIiICJDIgo+IGRpbW5hbWVzKHgpCltbMV1dClsxXSAiQSIgIkIiICJDIgoKPiBhdHRyaWJ1dGVzKHgpCiRkaW0KWzFdIDMKCiRkaW1uYW1lcwokZGltbmFtZXNbWzFdXQpbMV0gIkEiICJCIiAiQyIKCgo+ICMjIHJlZ3Jlc3Npb24gdGVzdHMKPiAKPiAKPiAjIyByZWdyZXNzaW9uIHRlc3RzIG9uIE5BIGF0dHJpYnV0ZSBuYW1lcwo+IHggPC0gMTozCj4gYXR0cih4LCAiTkEiKSA8LSA0Cj4gYXR0cmlidXRlcyh4KQokYE5BYApbMV0gNAoKPiBhdHRyKHgsICJOQSIpClsxXSA0Cj4gYXR0cih4LCBOQV9jaGFyYWN0ZXJfKQpOVUxMCj4gdHJ5KGF0dHIoeCwgTkFfY2hhcmFjdGVyXykgPC0gNSkKRXJyb3IgaW4gYXR0cih4LCBOQV9jaGFyYWN0ZXJfKSA8LSA1IDogCiAgJ25hbWUnIG11c3QgYmUgbm9uLW51bGwgY2hhcmFjdGVyIHN0cmluZwo+ICMjIHByaW9yIHRvIDIuNS4wIE5BIHdhcyB0cmVhdGVkIGFzICJOQSIKPiAKPiAKPiAjIyBxciB3aXRoIHBpdm90aW5nIChQUiM5NjIzKQo+IEEgPC0gbWF0cml4KGMoMCwwLDAsIDEsMSwxKSwgbnJvdyA9IDMsCisgICAgICAgICAgICAgZGltbmFtZXMgPSBsaXN0KGxldHRlcnNbMTozXSwgYygiemVybyIsIm9uZSIpKSkKPiB5IDwtIG1hdHJpeChjKDYsNyw4KSwgbnJvdyA9IDMsIGRpbW5hbWVzID0gbGlzdChMRVRURVJTWzE6M10sICJ5IikpCj4gcXIuY29lZihxcihBKSwgeSkKICAgICAgeQp6ZXJvIE5BCm9uZSAgIDcKPiBxci5maXR0ZWQocXIoQSksIHkpCiAgeQpBIDcKQiA3CkMgNwo+IAo+IHFyLmNvZWYocXIobWF0cml4KDA6MSwgMSwgZGltbmFtZXM9bGlzdChOVUxMLCBjKCJ6ZXJvIiwib25lIikpKSksIDUpCnplcm8gIG9uZSAKICBOQSAgICA1IAo+ICMjIGNvZWYgbmFtZXMgd2VyZSByZXR1cm5lZCB1bnBpdm90ZWQgPD0gMi41LjAKPiAKPiAjIyByZWFkQ2hhciByZWFkIGV4dHJhIGl0ZW1zLCB0ZXJtaW5hdGVkIG9uIHplcm9zCj4geCA8LSBhcy5yYXcoNjU6NzQpCj4gcmVhZENoYXIoeCwgbmNoYXI9YygzLDMsMCwzLDMsMykpClsxXSAiQUJDIiAiREVGIiAiIiAgICAiR0hJIiAiSiIgIAo+IGYgPC0gdGVtcGZpbGUodG1wZGlyID0gZ2V0d2QoKSkKPiB3cml0ZUNoYXIoIkFCQ0RFRkdISUoiLCBjb249ZiwgZW9zPU5VTEwpCj4gcmVhZENoYXIoZiwgbmNoYXI9YygzLDMsMCwzLDMsMykpClsxXSAiQUJDIiAiREVGIiAiIiAgICAiR0hJIiAiSiIgIAo+IHVubGluayhmKQo+ICMjCj4gCj4gCj4gIyMgY29ybmVyIGNhc2VzIGZvciBjb3IKPiBzZXQuc2VlZCgxKQo+IFggPC0gY2JpbmQoTkEsIDE6Mywgcm5vcm0oMykpCj4gdHJ5KGNvcihYLCB1c2UgPSAiY29tcGxldGUiKSkKRXJyb3IgaW4gY29yKFgsIHVzZSA9ICJjb21wbGV0ZSIpIDogbm8gY29tcGxldGUgZWxlbWVudCBwYWlycwo+IHRyeShjb3IoWCwgdXNlID0gImNvbXBsZXRlIiwgbWV0aG9kPSJzcGVhcm1hbiIpKQpFcnJvciBpbiBjb3IoWCwgdXNlID0gImNvbXBsZXRlIiwgbWV0aG9kID0gInNwZWFybWFuIikgOiAKICBubyBjb21wbGV0ZSBlbGVtZW50IHBhaXJzCj4gdHJ5KGNvcihYLCB1c2UgPSAiY29tcGxldGUiLCBtZXRob2Q9ImtlbmRhbGwiKSkKRXJyb3IgaW4gY29yKFgsIHVzZSA9ICJjb21wbGV0ZSIsIG1ldGhvZCA9ICJrZW5kYWxsIikgOiAKICBubyBjb21wbGV0ZSBlbGVtZW50IHBhaXJzCj4gY29yKFgsIHVzZSA9ICJwYWlyIikKICAgICBbLDFdICAgICAgIFssMl0gICAgICAgWywzXQpbMSxdICAgTkEgICAgICAgICBOQSAgICAgICAgIE5BClsyLF0gICBOQSAgMS4wMDAwMDAwIC0wLjE5NDI3MzkKWzMsXSAgIE5BIC0wLjE5NDI3MzkgIDEuMDAwMDAwMAo+IGNvcihYLCB1c2UgPSAicGFpciIsIG1ldGhvZD0ic3BlYXJtYW4iKQogICAgIFssMV0gWywyXSBbLDNdClsxLF0gICBOQSAgIE5BICAgTkEKWzIsXSAgIE5BICAxLjAgLTAuNQpbMyxdICAgTkEgLTAuNSAgMS4wCj4gY29yKFgsIHVzZSA9ICJwYWlyIiwgbWV0aG9kPSJrZW5kYWxsIikKICAgICBbLDFdICAgICAgIFssMl0gICAgICAgWywzXQpbMSxdICAgTkEgICAgICAgICBOQSAgICAgICAgIE5BClsyLF0gICBOQSAgMS4wMDAwMDAwIC0wLjMzMzMzMzMKWzMsXSAgIE5BIC0wLjMzMzMzMzMgIDEuMDAwMDAwMAo+IAo+IFhbMSwxXSA8LSAxCj4gY29yKFgsIHVzZSA9ICJjb21wbGV0ZSIpCiAgICAgWywxXSBbLDJdIFssM10KWzEsXSAgIE5BICAgTkEgICBOQQpbMixdICAgTkEgICBOQSAgIE5BClszLF0gICBOQSAgIE5BICAgTkEKPiBjb3IoWCwgdXNlID0gImNvbXBsZXRlIiwgbWV0aG9kPSJzcGVhcm1hbiIpCiAgICAgWywxXSBbLDJdIFssM10KWzEsXSAgIE5BICAgTkEgICBOQQpbMixdICAgTkEgICBOQSAgIE5BClszLF0gICBOQSAgIE5BICAgTkEKPiBjb3IoWCwgdXNlID0gImNvbXBsZXRlIiwgbWV0aG9kPSJrZW5kYWxsIikKICAgICBbLDFdIFssMl0gWywzXQpbMSxdICAgTkEgICBOQSAgIE5BClsyLF0gICBOQSAgIE5BICAgTkEKWzMsXSAgIE5BICAgTkEgICBOQQo+IGNvcihYLCB1c2UgPSAicGFpciIpCiAgICAgWywxXSAgICAgICBbLDJdICAgICAgIFssM10KWzEsXSAgIE5BICAgICAgICAgTkEgICAgICAgICBOQQpbMixdICAgTkEgIDEuMDAwMDAwMCAtMC4xOTQyNzM5ClszLF0gICBOQSAtMC4xOTQyNzM5ICAxLjAwMDAwMDAKPiBjb3IoWCwgdXNlID0gInBhaXIiLCBtZXRob2Q9InNwZWFybWFuIikKICAgICBbLDFdIFssMl0gWywzXQpbMSxdICAgTkEgICBOQSAgIE5BClsyLF0gICBOQSAgMS4wIC0wLjUKWzMsXSAgIE5BIC0wLjUgIDEuMAo+IGNvcihYLCB1c2UgPSAicGFpciIsIG1ldGhvZD0ia2VuZGFsbCIpCiAgICAgWywxXSAgICAgICBbLDJdICAgICAgIFssM10KWzEsXSAgIE5BICAgICAgICAgTkEgICAgICAgICBOQQpbMixdICAgTkEgIDEuMDAwMDAwMCAtMC4zMzMzMzMzClszLF0gICBOQSAtMC4zMzMzMzMzICAxLjAwMDAwMDAKPiAjIyBub3QgY29uc2lzdGVudCBpbiAyLjYueAo+IAo+IAo+ICMjIGNvbmZpbnQgb24gcmFuay1kZWZpY2llbnQgbW9kZWxzIChpbiBwYXJ0LCBQUiMxMDQ5NCkKPiBqdW5rIDwtIGRhdGEuZnJhbWUoeCA9IHJlcCgxLCAxMEwpLAorICAgICAgICAgICAgICAgICAgICB1ID0gZmFjdG9yKHNhbXBsZShjKCJZIiwgIk4iKSwgMTAsIHJlcGxhY2U9VFJVRSkpLAorICAgICAgICAgICAgICAgICAgICBhbnMgPSBybm9ybSgxMCkpCj4gZml0IDwtICBsbShhbnMgfiB4ICsgdSwgZGF0YSA9IGp1bmspCj4gY29uZmludChmaXQpCiAgICAgICAgICAgICAgICAgMi41ICUgICAgOTcuNSAlCihJbnRlcmNlcHQpIC0wLjMyMjQ4NTcgMi4yMTk0NTk0CnggICAgICAgICAgICAgICAgICAgTkEgICAgICAgIE5BCnVZICAgICAgICAgIC0yLjY4MjEyNDAgMC4zNTYwODE1Cj4gY29uZmludC5kZWZhdWx0KGZpdCkKICAgICAgICAgICAgICAgICAyLjUgJSAgICA5Ny41ICUKKEludGVyY2VwdCkgLTAuMTMxNzYyOSAyLjAyODczNjYKeCAgICAgICAgICAgICAgICAgICBOQSAgICAgICAgTkEKdVkgICAgICAgICAgLTIuNDU0MTY2NiAwLjEyODEyNDIKPiAjIyBNaXNtYXRjaCBnYXZlIE5BIGZvciAndScgaW4gMi42LjEKPiAKPiAKPiAjIyBjb3JydXB0IGRhdGEgZnJhbWUgcHJvZHVjZWQgYnkgc3Vic2V0dGluZyAoUFIjMTA1NzQpCj4geCA8LSBkYXRhLmZyYW1lKGE9MTozLCBiPTI6NCkKPiB4WywzXSA8LSB4Cldhcm5pbmcgbWVzc2FnZToKSW4gYFs8LS5kYXRhLmZyYW1lYChgKnRtcCpgLCAsIDMsIHZhbHVlID0gbGlzdChhID0gMTozLCBiID0gMjo0KSkgOgogIHByb3ZpZGVkIDIgdmFyaWFibGVzIHRvIHJlcGxhY2UgMSB2YXJpYWJsZXMKPiB4CiAgYSBiIGEuMQoxIDEgMiAgIDEKMiAyIDMgICAyCjMgMyA0ICAgMwo+ICMjIHdhcm5pbmcgZHVyaW5nIHByaW50aW5nIDwgMi43LjAKPiAKPiAKPiAjIyBmb3JtYXQuZmFjdG9yIHVzZWQgdG8gbG9zZSBkaW1bbmFtZXNdIGFuZCBuYW1lcyAoUFIjMTE1MTIpCj4geCA8LSBmYWN0b3IoYygiYWEiLCBsZXR0ZXJzWy0xXSkpCj4gZGltKHgpIDwtIGMoMTMsMikKPiBmb3JtYXQoeCwganVzdGlmeT0icmlnaHQiKQogICAgICBbLDFdIFssMl0KIFsxLF0gImFhIiAiIG4iCiBbMixdICIgYiIgIiBvIgogWzMsXSAiIGMiICIgcCIKIFs0LF0gIiBkIiAiIHEiCiBbNSxdICIgZSIgIiByIgogWzYsXSAiIGYiICIgcyIKIFs3LF0gIiBnIiAiIHQiCiBbOCxdICIgaCIgIiB1IgogWzksXSAiIGkiICIgdiIKWzEwLF0gIiBqIiAiIHciClsxMSxdICIgayIgIiB4IgpbMTIsXSAiIGwiICIgeSIKWzEzLF0gIiBtIiAiIHoiCj4gIyMKPiAKPiAKPiAjIyByZW1vdmluZyBjb2x1bW5zIGluIHdpdGhpbiAoUFIjMTEzMSkKPiBhYmMgPC0gZGF0YS5mcmFtZShhPTE6NSwgYj0yOjYsIGM9Mzo3KQo+IHdpdGhpbihhYmMsIGI8LU5VTEwpCiAgYSBjCjEgMSAzCjIgMiA0CjMgMyA1CjQgNCA2CjUgNSA3Cj4gd2l0aGluKGFiYyx7ZDwtYSs3O2I8LU5VTEx9KQogIGEgYyAgZAoxIDEgMyAgOAoyIDIgNCAgOQozIDMgNSAxMAo0IDQgNiAxMQo1IDUgNyAxMgo+IHdpdGhpbihhYmMse2E8LWErNztiPC1OVUxMfSkKICAgYSBjCjEgIDggMwoyICA5IDQKMyAxMCA1CjQgMTEgNgo1IDEyIDcKPiAjIyBTZWNvbmQgcHJvZHVjZWQgY29ycnVwdCBkYXRhIGZyYW1lIGluIDIuNy4xCj4gCj4gCj4gIyMgYWdncmVnYXRlIG9uIGFuIGVtcHR5IGRhdGEgZnJhbWUgKFBSIzEzMTY3KQo+IHogPC0gZGF0YS5mcmFtZShhPWludGVnZXIoMCksIGI9bnVtZXJpYygwKSkKPiB0cnkoYWdncmVnYXRlKHosIGJ5PXpbMV0sIEZVTj1zdW0pKQpFcnJvciBpbiBhZ2dyZWdhdGUuZGF0YS5mcmFtZSh6LCBieSA9IHpbMV0sIEZVTiA9IHN1bSkgOiAKICBubyByb3dzIHRvIGFnZ3JlZ2F0ZQo+ICMjIGZhaWxlZCBpbiB1bmxpc3QgaW4gMi44LjAsIG5vdyBnaXZlcyBleHBsaWNpdCBtZXNzYWdlLgo+IGFnZ3JlZ2F0ZShkYXRhLmZyYW1lKGE9MToxMClbRl0sIGxpc3QocmVwKDE6MiwgZWFjaD01KSksIHN1bSkKICBHcm91cC4xCjEgICAgICAgMQoyICAgICAgIDIKPiAjIyB1c2VkIHRvIGZhaWwgb2JzY3VyZWx5Lgo+IAo+IAo+ICMjIHN1YnNldHRpbmcgZGF0YSBmcmFtZXMgd2l0aCBkdXBsaWNhdGUgcm93cwo+IHogPC0gZGF0YS5mcmFtZShhPTEsIGE9MiwgYj0zLCBjaGVjay5uYW1lcz1GQUxTRSkKPiB6W10gIyBPSwogIGEgYSBiCjEgMSAyIDMKPiB6WzEsIF0KICBhIGEgYgoxIDEgMiAzCj4gIyMgaGFkIHJvdyBuYW1lcyBhLCBhLjEsIGIgaW4gMi44LjAuCj4gCj4gCj4gIyMgaW5jb3JyZWN0IHdhcm5pbmcgZHVlIHRvIGxhY2sgb2YgZnV6ei4KPiBUUyA8LSAgdHMoY28yWzE6MTkyXSwgZnJlcT0yNCkKPiB0bXAyIDwtIHdpbmRvdyhUUywgc3RhcnQoVFMpLCBlbmQoVFMpKQo+ICMjIHdhcm5lZCBpbiAyLjguMAo+IAo+ICMjIGZhaWxlZCB0byBhZGQgdGFnCj4gQ2FsbCA8LSBjYWxsKCJmb28iLCAxKQo+IENhbGxbWyJiYXIiXV0gPC0gMgo+IENhbGwKZm9vKDEsIGJhciA9IDIpCj4gIyMgdW5uYW1lZCBjYWxsIGluIDIuOC4xCj4gCj4gb3B0aW9ucyhrZWVwLnNvdXJjZSA9IFRSVUUpCj4gIyMgJDwtIG9uIHBhaXJsaXN0cyBmYWlsZWQgdG8gZHVwbGljYXRlIChmcm9tIEZlbGl4IEFuZHJld3MsCj4gIyMgaHR0cHM6Ly9zdGF0LmV0aHouY2gvcGlwZXJtYWlsL3ItZGV2ZWwvMjAwOS1KYW51YXJ5LzA1MTY5OC5odG1sKQo+IGZvbyA8LSBmdW5jdGlvbihnaXZlbiA9IE5VTEwpIHsKKyAgICAgY2FsbE9iaiA8LSBxdW90ZShjYWxsRnVuYygpKQorICAgICBpZighaXMubnVsbChnaXZlbikpIGNhbGxPYmokZ2l2ZW4gPC0gZ2l2ZW4KKyAgICAgaWYgKGlzLm51bGwoZ2l2ZW4pKSBjYWxsT2JqJGRlZmF1bHQgPC0gVFJVRQorICAgICBjYWxsT2JqCisgfQo+IAo+IGZvbygpCmNhbGxGdW5jKGRlZmF1bHQgPSBUUlVFKQo+IGZvbyhnaXZlbiA9IFRSVUUpCmNhbGxGdW5jKGdpdmVuID0gVFJVRSkKPiBmb28oImJsYWggYmxhaCIpCmNhbGxGdW5jKGdpdmVuID0gImJsYWggYmxhaCIpCj4gZm9vKGdpdmVuID0gVFJVRSkKY2FsbEZ1bmMoZ2l2ZW4gPSBUUlVFKQo+IGZvbygpCmNhbGxGdW5jKGRlZmF1bHQgPSBUUlVFKQo+ICMjIGFsdGVyZWQgZm9vKCkgaW4gMi44LjEuCj4gCj4gIyMgVXNpbmcgICcjJyBmbGFnIGluICBzcHJpbnRmKCk6Cj4gZm9ybXMgPC0gYygiJSM3LjVnIiwiJSM1LmYiLCAiJSM3eCIsICIlIzVkIiwgIiUjOS4wZSIpCj4gbnVtcyA8LSBsaXN0KC0zLjE0NSwgLTMxLCAgIDB4YWJjLCAgLTEyM0wsIDEyMzQ1NikKPiByYmluZChtYXBwbHkoc3ByaW50ZiwgZm9ybXMsICAgICAgICAgICAgICAgbnVtcyksCisgICAgICAgbWFwcGx5KHNwcmludGYsIHN1YigiIyIsICcnLCBmb3JtcyksIG51bXMpKQogICAgICUjNy41ZyAgICAlIzUuZiAgICUjN3ggICAgICAlIzVkICAgICUjOS4wZSAgICAgClsxLF0gIi0zLjE0NTAiICIgLTMxLiIgIiAgMHhhYmMiICIgLTEyMyIgIiAgIDEuZSswNSIKWzIsXSAiIC0zLjE0NSIgIiAgLTMxIiAiICAgIGFiYyIgIiAtMTIzIiAiICAgIDFlKzA1Igo+ICMjIGdhdmUgYW4gZXJyb3IgaW4gcHJlLXJlbGVhc2UgdmVyc2lvbnMgb2YgMi45LjAKPiAKPiAjIyAoYXV0bylwcmludGluZyBvZiBmdW5jdGlvbnMge3dpdGggLyB3aXRob3V0IHNvdXJjZSBhdHRyaWJ1dGV9LAo+ICMjIGluY2x1ZGluZyBwcmltaXRpdmVzCj4gc2luayhjb24gPC0gdGV4dENvbm5lY3Rpb24oIm9mIiwgInciKSkgOyBjIDsgc2luayhOVUxMKTsgY2xvc2UoY29uKQo+IG9mMiA8LSBjYXB0dXJlLm91dHB1dChwcmludChjKSkKPiBzdG9waWZub3QoaWRlbnRpY2FsKG9mMiwgb2YpLAorICAgICAgICAgICBpZGVudGljYWwob2YyLCAiZnVuY3Rpb24gKC4uLikgIC5QcmltaXRpdmUoXCJjXCIpIikpCj4gIyMgXl4gd291bGQgaGF2ZSBmYWlsZWQgdXAgdG8gUiAyLjkueAo+IGZvbwpmdW5jdGlvbihnaXZlbiA9IE5VTEwpIHsKICAgIGNhbGxPYmogPC0gcXVvdGUoY2FsbEZ1bmMoKSkKICAgIGlmKCFpcy5udWxsKGdpdmVuKSkgY2FsbE9iaiRnaXZlbiA8LSBnaXZlbgogICAgaWYgKGlzLm51bGwoZ2l2ZW4pKSBjYWxsT2JqJGRlZmF1bHQgPC0gVFJVRQogICAgY2FsbE9iagp9CjxieXRlY29kZTogMHgyNWFjODgwPgo+IHByaW50KGZvbywgdXNlU291cmNlID0gRkFMU0UpCmZ1bmN0aW9uIChnaXZlbiA9IE5VTEwpIAp7CiAgICBjYWxsT2JqIDwtIHF1b3RlKGNhbGxGdW5jKCkpCiAgICBpZiAoIWlzLm51bGwoZ2l2ZW4pKSAKICAgICAgICBjYWxsT2JqJGdpdmVuIDwtIGdpdmVuCiAgICBpZiAoaXMubnVsbChnaXZlbikpIAogICAgICAgIGNhbGxPYmokZGVmYXVsdCA8LSBUUlVFCiAgICBjYWxsT2JqCn0KPGJ5dGVjb2RlOiAweDI1YWM4ODA+Cj4gYXR0cihmb28sICJzcmNyZWYiKSA8LSBOVUxMCj4gZm9vCmZ1bmN0aW9uIChnaXZlbiA9IE5VTEwpIAp7CiAgICBjYWxsT2JqIDwtIHF1b3RlKGNhbGxGdW5jKCkpCiAgICBpZiAoIWlzLm51bGwoZ2l2ZW4pKSAKICAgICAgICBjYWxsT2JqJGdpdmVuIDwtIGdpdmVuCiAgICBpZiAoaXMubnVsbChnaXZlbikpIAogICAgICAgIGNhbGxPYmokZGVmYXVsdCA8LSBUUlVFCiAgICBjYWxsT2JqCn0KPGJ5dGVjb2RlOiAweDI1YWM4ODA+Cj4gKGYgPC0gc3RydWN0dXJlKGZ1bmN0aW9uKCl7fSwgbm90ZSA9ICJqdXN0IGEgbm90ZSIsCisgICAgICAgICAgICAgICAgIHlhZGEgPSBmdW5jdGlvbigpICJub3QgdGhlIHNhbWUiKSkKZnVuY3Rpb24oKXt9CmF0dHIoLCJub3RlIikKWzFdICJqdXN0IGEgbm90ZSIKYXR0cigsInlhZGEiKQpmdW5jdGlvbigpICJub3QgdGhlIHNhbWUiCj4gcHJpbnQoZiwgdXNlU291cmNlID0gVFJVRSkKZnVuY3Rpb24oKXt9CmF0dHIoLCJub3RlIikKWzFdICJqdXN0IGEgbm90ZSIKYXR0cigsInlhZGEiKQpmdW5jdGlvbigpICJub3QgdGhlIHNhbWUiCj4gcHJpbnQoZiwgdXNlU291cmNlID0gRkFMU0UpICMgbXVzdCBwcmludCBhdHRyaWJ1dGVzCmZ1bmN0aW9uICgpIAp7Cn0KYXR0cigsIm5vdGUiKQpbMV0gImp1c3QgYSBub3RlIgphdHRyKCwieWFkYSIpCmZ1bmN0aW9uICgpIAoibm90IHRoZSBzYW1lIgo+IHByaW50LmZ1bmN0aW9uIDwtIGZ1bmN0aW9uKHgsIC4uLikgeworICAgICBjYXQoIm15IHByaW50KDxmdW5jdGlvbj4pOiAiKTsgc3RyKHgsIGdpdmUuYXR0cj1GQUxTRSk7IGludmlzaWJsZSh4KSB9Cj4gcHJpbnQuZnVuY3Rpb24KbXkgcHJpbnQoPGZ1bmN0aW9uPik6IGZ1bmN0aW9uICh4LCAuLi4pICAKPiBwcmludChwcmludC5mdW5jdGlvbikKbXkgcHJpbnQoPGZ1bmN0aW9uPik6IGZ1bmN0aW9uICh4LCAuLi4pICAKPiBybShwcmludC5mdW5jdGlvbikKPiAjIyBhdXRvLXByaW50aW5nIGFuZCBwcmludGluZyBkaWZmZXJlZCB1cCB0byBSIDIuOS54IC0tIGFuZCB0aGVuICpBR0FJTiogaW4gUiAzLjYuMAo+IAo+IAo+ICMjIE1ha2Ugc3VyZSBkZXBhcnNpbmcgZG9lcyBub3QgcmVzZXQgcGFyYW1ldGVycwo+IHByaW50KGxpc3QoZiwgZXhwcmVzc2lvbihmb28pLCBmLCBxdW90ZShmb28pLCBmLCBiYXNlOjpsaXN0LCBmKSwKKyAgICAgICB1c2VTb3VyY2UgPSBGQUxTRSkKW1sxXV0KZnVuY3Rpb24gKCkgCnsKfQphdHRyKCwibm90ZSIpClsxXSAianVzdCBhIG5vdGUiCmF0dHIoLCJ5YWRhIikKZnVuY3Rpb24gKCkgCiJub3QgdGhlIHNhbWUiCgpbWzJdXQpleHByZXNzaW9uKGZvbykKCltbM11dCmZ1bmN0aW9uICgpIAp7Cn0KYXR0cigsIm5vdGUiKQpbMV0gImp1c3QgYSBub3RlIgphdHRyKCwieWFkYSIpCmZ1bmN0aW9uICgpIAoibm90IHRoZSBzYW1lIgoKW1s0XV0KZm9vCgpbWzVdXQpmdW5jdGlvbiAoKSAKewp9CmF0dHIoLCJub3RlIikKWzFdICJqdXN0IGEgbm90ZSIKYXR0cigsInlhZGEiKQpmdW5jdGlvbiAoKSAKIm5vdCB0aGUgc2FtZSIKCltbNl1dCmZ1bmN0aW9uICguLi4pICAuUHJpbWl0aXZlKCJsaXN0IikKCltbN11dCmZ1bmN0aW9uICgpIAp7Cn0KYXR0cigsIm5vdGUiKQpbMV0gImp1c3QgYSBub3RlIgphdHRyKCwieWFkYSIpCmZ1bmN0aW9uICgpIAoibm90IHRoZSBzYW1lIgoKPiAKPiBwcmludENvZWZtYXQoY2JpbmQoMCwxKSkKICAgICBbLDFdIFssMl0KWzEsXSAgICAwICAgIDEKPiAjIyB3b3VsZCBwcmludCBOYU4gdXAgdG8gUiAyLjkuMAo+IAo+IAo+ICMjIGNvbnRpbnVpdHkgY29ycmVjdGlvbiBmb3IgS2VuZGFsbCdzIHRhdS4gIEltcHJvdmVzIHRoaXMgZXhhbXBsZS4KPiBjb3IudGVzdChjKDEsIDIsIDMsIDQsIDUpLCBjKDgsIDYsIDcsIDUsIDMpLCBtZXRob2QgPSAia2VuZGFsbCIsCisgICAgICAgICAgZXhhY3QgPSBUUlVFKQoKCUtlbmRhbGwncyByYW5rIGNvcnJlbGF0aW9uIHRhdQoKZGF0YTogIGMoMSwgMiwgMywgNCwgNSkgYW5kIGMoOCwgNiwgNywgNSwgMykKVCA9IDEsIHAtdmFsdWUgPSAwLjA4MzMzCmFsdGVybmF0aXZlIGh5cG90aGVzaXM6IHRydWUgdGF1IGlzIG5vdCBlcXVhbCB0byAwCnNhbXBsZSBlc3RpbWF0ZXM6CiB0YXUgCi0wLjggCgo+IGNvci50ZXN0KGMoMSwgMiwgMywgNCwgNSksIGMoOCwgNiwgNywgNSwgMyksIG1ldGhvZCA9ICJrZW5kYWxsIiwKKyAgICAgICAgICBleGFjdCA9IEZBTFNFKQoKCUtlbmRhbGwncyByYW5rIGNvcnJlbGF0aW9uIHRhdQoKZGF0YTogIGMoMSwgMiwgMywgNCwgNSkgYW5kIGMoOCwgNiwgNywgNSwgMykKeiA9IC0xLjk1OTYsIHAtdmFsdWUgPSAwLjA1MDA0CmFsdGVybmF0aXZlIGh5cG90aGVzaXM6IHRydWUgdGF1IGlzIG5vdCBlcXVhbCB0byAwCnNhbXBsZSBlc3RpbWF0ZXM6CiB0YXUgCi0wLjggCgo+IGNvci50ZXN0KGMoMSwgMiwgMywgNCwgNSksIGMoOCwgNiwgNywgNSwgMyksIG1ldGhvZCA9ICJrZW5kYWxsIiwKKyAgICAgICAgICBleGFjdCA9IEZBTFNFLCBjb250aW51aXR5ID0gVFJVRSkKCglLZW5kYWxsJ3MgcmFuayBjb3JyZWxhdGlvbiB0YXUKCmRhdGE6ICBjKDEsIDIsIDMsIDQsIDUpIGFuZCBjKDgsIDYsIDcsIDUsIDMpCnogPSAtMS43MTQ2LCBwLXZhbHVlID0gMC4wODY0MQphbHRlcm5hdGl2ZSBoeXBvdGhlc2lzOiB0cnVlIHRhdSBpcyBub3QgZXF1YWwgdG8gMApzYW1wbGUgZXN0aW1hdGVzOgogdGF1IAotMC44IAoKPiAjIGFuZCBhIGxpdHRsZSBmb3IgU3BlYXJtYW4ncwo+IGNvci50ZXN0KGMoMSwgMiwgMywgNCwgNSksIGMoOCwgNiwgNywgNSwgMyksIG1ldGhvZCA9ICJzcGVhcm1hbiIsCisgICAgICAgICAgZXhhY3QgPSBUUlVFKQoKCVNwZWFybWFuJ3MgcmFuayBjb3JyZWxhdGlvbiByaG8KCmRhdGE6ICBjKDEsIDIsIDMsIDQsIDUpIGFuZCBjKDgsIDYsIDcsIDUsIDMpClMgPSAzOCwgcC12YWx1ZSA9IDAuMDgzMzMKYWx0ZXJuYXRpdmUgaHlwb3RoZXNpczogdHJ1ZSByaG8gaXMgbm90IGVxdWFsIHRvIDAKc2FtcGxlIGVzdGltYXRlczoKIHJobyAKLTAuOSAKCj4gY29yLnRlc3QoYygxLCAyLCAzLCA0LCA1KSwgYyg4LCA2LCA3LCA1LCAzKSwgbWV0aG9kID0gInNwZWFybWFuIiwKKyAgICAgICAgICBleGFjdCA9IEZBTFNFKQoKCVNwZWFybWFuJ3MgcmFuayBjb3JyZWxhdGlvbiByaG8KCmRhdGE6ICBjKDEsIDIsIDMsIDQsIDUpIGFuZCBjKDgsIDYsIDcsIDUsIDMpClMgPSAzOCwgcC12YWx1ZSA9IDAuMDM3MzkKYWx0ZXJuYXRpdmUgaHlwb3RoZXNpczogdHJ1ZSByaG8gaXMgbm90IGVxdWFsIHRvIDAKc2FtcGxlIGVzdGltYXRlczoKIHJobyAKLTAuOSAKCj4gY29yLnRlc3QoYygxLCAyLCAzLCA0LCA1KSwgYyg4LCA2LCA3LCA1LCAzKSwgbWV0aG9kID0gInNwZWFybWFuIiwKKyAgICAgICAgICBleGFjdCA9IEZBTFNFLCBjb250aW51aXR5ID0gVFJVRSkKCglTcGVhcm1hbidzIHJhbmsgY29ycmVsYXRpb24gcmhvCgpkYXRhOiAgYygxLCAyLCAzLCA0LCA1KSBhbmQgYyg4LCA2LCA3LCA1LCAzKQpTID0gMzgsIHAtdmFsdWUgPSAwLjA5Njg5CmFsdGVybmF0aXZlIGh5cG90aGVzaXM6IHRydWUgcmhvIGlzIG5vdCBlcXVhbCB0byAwCnNhbXBsZSBlc3RpbWF0ZXM6CiByaG8gCi0wLjkgCgo+ICMjIEtlbmRhbGwgY2FzZSBpcyB3aXNoIG9mIFBSIzEzNjkxCj4gCj4gCj4gIyMgY29ycnVwdCBkYXRhIGZyYW1lLCBQUiMxMzcyNAo+IGZvbyA8LSBtYXRyaXgoMToxMiwgbnJvdyA9IDMpCj4gYmFyIDwtIGFzLmRhdGEuZnJhbWUoZm9vKQo+IHZhbCA8LSBpbnRlZ2VyKDApCj4gdHJ5KGJhciROZXdDb2wgPC0gdmFsKQpFcnJvciBpbiBgJDwtLmRhdGEuZnJhbWVgKGAqdG1wKmAsIE5ld0NvbCwgdmFsdWUgPSBpbnRlZ2VyKDApKSA6IAogIHJlcGxhY2VtZW50IGhhcyAwIHJvd3MsIGRhdGEgaGFzIDMKPiAjIHNpbWlsYXIsIG5vdCBpbiB0aGUgcmVwb3J0Cj4gdHJ5KGJhcltbIk5ld0NvbCJdXSA8LSB2YWwpCkVycm9yIGluIGBbWzwtLmRhdGEuZnJhbWVgKGAqdG1wKmAsICJOZXdDb2wiLCB2YWx1ZSA9IGludGVnZXIoMCkpIDogCiAgcmVwbGFjZW1lbnQgaGFzIDAgcm93cywgZGF0YSBoYXMgMwo+ICMgWyBdIGlzIHRyaWNrZXIsIHNvIGp1c3QgY2hlY2sgdGhlIHJlc3VsdCBpcyByZWFzb25hYmxlIGFuZCBwcmludHMKPiBiYXJbIk5ld0NvbCJdIDwtIHZhbAo+IGJhclssICJOZXdDb2wyIl0gPC0gdmFsCj4gYmFyW0ZBTFNFLCAiTmV3Q29sMyJdIDwtIHZhbAo+IGJhcgogIFYxIFYyIFYzIFY0IE5ld0NvbCBOZXdDb2wyIE5ld0NvbDMKMSAgMSAgNCAgNyAxMCAgICAgTkEgICAgICBOQSAgICAgIE5BCjIgIDIgIDUgIDggMTEgICAgIE5BICAgICAgTkEgICAgICBOQQozICAzICA2ICA5IDEyICAgICBOQSAgICAgIE5BICAgICAgTkEKPiAjIyBTdWNjZWVkZWQgYnV0IGdhdmUgY29ycnVwdCByZXN1bHQgaW4gMi45LjAKPiAKPiAKPiAjIyBQcmludGluZyBOQV9jb21wbGV4Xwo+IG0yMiA8LSBtYXRyaXgobGlzdChOQV9jb21wbGV4XywgMywgIkEgc3RyaW5nIiwgTkFfY29tcGxleF8pLCAyLDIpCj4gcHJpbnQobTIyKQogICAgIFssMV0gWywyXSAgICAgIApbMSxdIE5BICAgIkEgc3RyaW5nIgpbMixdIDMgICAgTkEgICAgICAgIAo+IHByaW50KG0yMiwgbmEucHJpbnQ9IjxtaXNzaW5nIHZhbHVlPiIpCiAgICAgWywxXSAgICAgICAgICAgIFssMl0gICAgICAgICAgIApbMSxdIDxtaXNzaW5nIHZhbHVlPiAiQSBzdHJpbmciICAgICAKWzIsXSAzICAgICAgICAgICAgICAgPG1pc3NpbmcgdmFsdWU+Cj4gIyMgdXNlZCB1bmluaXRpYWxpemVkIHZhcmlhYmxlIGluIEMsIG5vdGljYWJseSBXaW5kb3dzLCBmb3IgUiA8PSAyLjkuMAo+IAo+IAo+ICMjIG5vbi1zdGFuZGFyZCB2YXJpYWJsZSBuYW1lcyBpbiB1cGRhdGUgZXRjCj4gIyMgbmV2ZXIgZ3VhcmFudGVlZCB0byB3b3JrLCByZXF1ZXN0ZWQgYnkgU3VuZGFyIERvcmFpLVJhaiBpbgo+ICMjIGh0dHBzOi8vc3RhdC5ldGh6LmNoL3BpcGVybWFpbC9yLWRldmVsLzIwMDktSnVseS8wNTQxODQuaHRtbAo+IHVwZGF0ZShgYTogYmAgfiB4LCB+IC4gKyB5KQpgYTogYmAgfiB4ICsgeQo+ICMjIDIuOS4xIGRyb3BwZWQgYmFja3RpY2tzCj4gCj4gCj4gIyMgcHJpbnQobHMuc3RyKC4pKSBkaWQgZXZhbHVhdGUgY2FsbHMKPiBFIDwtIG5ldy5lbnYoKTsgRSRjbCA8LSBjYWxsKCJwcmludCIsICJCb28gISIpCj4gbHMuc3RyKEUpCmNsIDogIGxhbmd1YWdlIHByaW50KCJCb28gISIpCj4gIyMgMi4xMC4wIGRpZCBwcmludC4uCj4gCj4gCj4gIyMgY29tcGxldGUuY2FzZXMgd2l0aCBubyBpbnB1dAo+IHRyeShjb21wbGV0ZS5jYXNlcygpKQpFcnJvciBpbiBjb21wbGV0ZS5jYXNlcygpIDogbm8gaW5wdXQgaGFzIGRldGVybWluZWQgdGhlIG51bWJlciBvZiBjYXNlcwo+IHRyeShjb21wbGV0ZS5jYXNlcyhsaXN0KCksIGxpc3QoKSkpCkVycm9yIGluIGNvbXBsZXRlLmNhc2VzKGxpc3QoKSwgbGlzdCgpKSA6IAogIG5vIGlucHV0IGhhcyBkZXRlcm1pbmVkIHRoZSBudW1iZXIgb2YgY2FzZXMKPiAjIyBnYXZlIHVuaGVscGZ1bCBtZXNzYWdlcyBpbiAyLjEwLjAsIHNpbGx5IHJlc3VsdHMgaW4gcHJlLTIuMTAuMQo+IAo+IAo+ICMjIGVycm9yIG1lc3NhZ2VzIGZyb20gKEMtbGV2ZWwpIGV2YWxMaXN0Cj4gdHN0IDwtIGZ1bmN0aW9uKHkpIHsgc3RvcGlmbm90KGlzLm51bWVyaWMoeSkpOyB5KyAxIH0KPiB0cnkodHN0KCkpICMgZXZlbiBuaWNlciBzaW5jZSBSIDMuNS4wJ3MgY2hhbmdlIHRvIHNlcXVlbnRpYWwgc3RvcGlmbm90KCkKRXJyb3IgaW4gc3RvcGlmbm90KGlzLm51bWVyaWMoeSkpIDogCiAgYXJndW1lbnQgInkiIGlzIG1pc3NpbmcsIHdpdGggbm8gZGVmYXVsdAo+IHRyeShjKDEsLDIpKQpFcnJvciBpbiBjKDEsICwgMikgOiBhcmd1bWVudCAyIGlzIGVtcHR5Cj4gIyMgY2hhbmdlIGluIDIuOC4wIG1hZGUgdGhlc2UgbGVzcyBjbGVhcgo+IAo+IAo+ICMjIGVtcHR5IGxldmVscyBmcm9tIGN1dC5EYXRlIChjb3NtZXRpYywgUFIjMTQxNjIpCj4geCA8LSBhcy5EYXRlKGMoIjIwMDktMDMtMjEiLCIyMDA5LTAzLTMxIikpCj4gY3V0KHgsIGJyZWFrcz0gInF1YXJ0ZXIiKSAjIGhhZCB0d28gbGV2ZWxzIGluIDIuMTAuMQpbMV0gMjAwOS0wMS0wMSAyMDA5LTAxLTAxCkxldmVsczogMjAwOS0wMS0wMQo+IGN1dChhcy5QT1NJWGx0KHgpLCBicmVha3M9ICJxdWFydGVyIikKWzFdIDIwMDktMDEtMDEgMjAwOS0wMS0wMQpMZXZlbHM6IDIwMDktMDEtMDEKPiAjIyByZW1vdmUgZW1wdHkgZmluYWwgbGV2ZWwKPiAKPiAKPiAjIyB0ZXN0cyBvZiBlcnJvciBjb25kaXRpb25zIGluIHN3aXRjaCgpCj4gc3dpdGNoKCJhIiwgYT0sIGI9LCBjPSwgNCkKWzFdIDQKPiBzd2l0Y2goImEiLCBhPSwgYj0sIGM9LCApCj4gLkxhc3QudmFsdWUKTlVMTAo+IHN3aXRjaCgiYSIsIGE9LCBiPSwgYz0sIGludmlzaWJsZSg0KSkKPiAuTGFzdC52YWx1ZQpbMV0gNAo+ICMjIHZpc2libGlsdHkgY2hhbmdlZCBpbiAyLjExLjAKPiAKPiAKPiAjIyByb3VuZGluZyBlcnJvciBpbiBhZ2dyZWdhdGUudHMKPiAjIyBodHRwczovL3N0YXQuZXRoei5jaC9waXBlcm1haWwvci1kZXZlbC8yMDEwLUFwcmlsLzA1NzIyNS5odG1sCj4geCA8LSByZXAoNjoxMCwgMTo1KQo+IGFnZ3JlZ2F0ZShhcy50cyh4KSwgRlVOID0gbWVhbiwgbmRlbHRhdCA9IDUpClRpbWUgU2VyaWVzOgpTdGFydCA9IDEgCkVuZCA9IDExIApGcmVxdWVuY3kgPSAwLjIgClsxXSAgNy4yICA4LjggMTAuMAo+IHggPC0gcmVwKDY6MTAsIDE6NSkKPiBhZ2dyZWdhdGUoYXMudHMoeCksIEZVTiA9IG1lYW4sIG5mcmVxdWVuY3kgPSAwLjIpClRpbWUgU2VyaWVzOgpTdGFydCA9IDEgCkVuZCA9IDExIApGcmVxdWVuY3kgPSAwLjIgClsxXSAgNy4yICA4LjggMTAuMAo+ICMjIHBsYXRmb3JtLWRlcGVuZGVudCBpbiAyLjEwLjEKPiAKPiAKPiAjIyB3aXNoIG9mIFBSIzk1NzQKPiBhIDwtIGMoMC4xLCAwLjMsIDAuNCwgMC41LCAwLjMsIDAuMDAwMSkKPiBmb3JtYXQucHZhbChhLCBlcHM9MC4wMSkKWzFdICIwLjEiICAgIjAuMyIgICAiMC40IiAgICIwLjUiICAgIjAuMyIgICAiPDAuMDEiCj4gZm9ybWF0LnB2YWwoYSwgZXBzPTAuMDEsIG5zbWFsbCA9MikKWzFdICIwLjEwIiAgIjAuMzAiICAiMC40MCIgICIwLjUwIiAgIjAuMzAiICAiPDAuMDEiCj4gIyMgZ3JhbnRlZCBpbiAyLjEyLjAKPiAKPiAKPiAjIyBwcmludGluZyBmcmFjdGlvbmFsIGRhdGVzCj4gYXMuRGF0ZSgwLjUsIG9yaWdpbj0iMTk2OS0xMi0zMSIpClsxXSAiMTk2OS0xMi0zMSIKPiAjIyBjaGFuZ2VkIHRvIHJvdW5kIGRvd24gaW4gMi4xMi4xCj4gCj4gCj4gIyMgcHJpbnRpbmcgZGF0YSBmcmFtZXMgd2l0aCAgIiIgIGNvbG5hbWVzCj4gZGZyIDwtIGRhdGEuZnJhbWUoeD0xOjYsIENDPTExOjE2LCBmID0gZ2woMywyKSk7IGNvbG5hbWVzKGRmcilbMl0gPC0gIiIKPiBkZnIKICB4ICAgIGYKMSAxIDExIDEKMiAyIDEyIDEKMyAzIDEzIDIKNCA0IDE0IDIKNSA1IDE1IDMKNiA2IDE2IDMKPiAjIyBub3cgcHJpbnRzIHRoZSBzYW1lIGFzIGRhdGEubWF0cml4KGRmcikgZG9lcyBoZXJlCj4gCj4gCj4gIyMgZm9ybWF0KC4sIHplcm8ucHJpbnQpIC0tPiBwcmV0dHlOdW0oKQo+IHNldC5zZWVkKDkpOyBtIDwtIG1hdHJpeChsb2NhbCh7eCA8LSBybm9ybSg0MCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ24oeCkqcm91bmQoZXhwKDIqeCkpLzEwfSksIDgsNSkKPiBub3F1b3RlKGZvcm1hdChtLCB6ZXJvLnByaW50PSAiLiIpKQogICAgIFssMV0gWywyXSBbLDNdIFssNF0gWyw1XQpbMSxdICAuICAgLTAuMSAtMC4xICAuICAgIDAuOApbMixdICAuICAgIC4gICAgLiAgIDIxLjQgIDAuMQpbMyxdIC0wLjEgIDEuMyAgMC42ICAwLjIgIDAuMQpbNCxdIC0wLjEgIC4gICAgLiAgICAuICAgIC4gIApbNSxdICAwLjIgIDAuMSAgMy40ICAwLjIgIDAuMgpbNixdICAuICAgLTAuMSAgMC4xICAwLjIgIC4gIApbNyxdICAxLjEgIDQuMCAtMC4xICAuICAgIDAuMgpbOCxdIC0wLjEgIC4gICAgMC42IC0wLjEgIDAuMQo+ICMjIHVzZWQgdG8gcHJpbnQgICIuIDAiIGluc3RlYWQgb2YgIi4gICIKPiAKPiAKPiAjIyB0ZXN0cyBvZiBOQSBoYXZpbmcgcHJlY2VkZW5jZSBvdmVyIE5hTiAtLSBhbGwgbXVzdCBwcmludCAiTkEiCj4gbWluKGMoTmFOLCBOQSkpClsxXSBOQQo+IG1pbihjKE5BLCBOYU4pKSAjIE5hTiBpbiAyLjEyLjIKWzFdIE5BCj4gbWluKE5hTiwgTkFfcmVhbF8pICAjIE5hTiBpbiAyLjEyLjIKWzFdIE5BCj4gbWluKE5BX3JlYWxfLCBOYU4pClsxXSBOQQo+IG1heChjKE5hTiwgTkEpKQpbMV0gTkEKPiBtYXgoYyhOQSwgTmFOKSkgICMgTmFOIGluIDIuMTIuMgpbMV0gTkEKPiBtYXgoTmFOLCBOQV9yZWFsXykgICMgTmFOIGluIDIuMTIuMgpbMV0gTkEKPiBtYXgoTkFfcmVhbF8sIE5hTikKWzFdIE5BCj4gIyMgbWlnaHQgZGVwZW5kIG9uIGNvbXBpbGVyIDwgMi4xMy4wCj4gCj4gCj4gIyMgUFIjMTQ1MTQKPiAjIERhdGEgYXJlIGZyb20gQ29ub3ZlciwgIk5vbnBhcmFtZXRyaWMgU3RhdGlzdGljcyIsIDNyZCBFZCwgcC4gMTk3LAo+ICMgcmUtYXJyYW5nZWQgdG8gbWFrZSBhIGxvd2VyLXRhaWwgdGVzdCB0aGUgaXNzdWUgb2YgcmVsZXZhbmNlOiAgd2UKPiAjIHdhbnQgdG8gc2VlIGlmIHByZWduYW50IG51cnNlcyBleHBvc2VkIHRvIG5pdHJvdXMgb3hpZGUgaGF2ZSBoaWdoZXIKPiAjIHJhdGVzIG9mIG1pc2NhcnJpYWdlLCBzdHJhdGlmeWluZyBvbiB0aGUgdHlwZSBvZiBudXJzZS4KPiBOaXRyb3VzIDwtIGFycmF5KGMoMzIsMjEwLDgsMjYsMTgsMjEsMywzLDcsNzUsMCwxMCksIGRpbSA9IGMoMiwyLDMpLAorICAgICAgICAgICAgICAgICAgZGltbmFtZXMgPSBsaXN0KGMoIkV4cG9zZWQiLCJOb3RFeHBvc2VkIiksCisgICAgICAgICAgICAgICAgICBjKCJGdWxsVGVybSIsIk1pc2NhcnJpYWdlIiksCisgICAgICAgICAgICAgICAgICBjKCJEZW50YWxBc3N0IiwiT3BlclJvb21OdXJzZSIsIk91dHBhdGllbnROdXJzZSIpKSkKPiBtYW50ZWxoYWVuLnRlc3QoTml0cm91cywgZXhhY3Q9VFJVRSwgYWx0ZXJuYXRpdmU9Imxlc3MiKQoKCUV4YWN0IGNvbmRpdGlvbmFsIHRlc3Qgb2YgaW5kZXBlbmRlbmNlIGluIDIgeCAyIHggayB0YWJsZXMKCmRhdGE6ICBOaXRyb3VzClMgPSA1NywgcC12YWx1ZSA9IDAuMTk1OQphbHRlcm5hdGl2ZSBoeXBvdGhlc2lzOiB0cnVlIGNvbW1vbiBvZGRzIHJhdGlvIGlzIGxlc3MgdGhhbiAxCjk1IHBlcmNlbnQgY29uZmlkZW5jZSBpbnRlcnZhbDoKIDAuMDAwMDAwIDEuMzg4MTk3CnNhbXBsZSBlc3RpbWF0ZXM6CmNvbW1vbiBvZGRzIHJhdGlvIAogICAgICAgIDAuNjY1MjQxOCAKCj4gbWFudGVsaGFlbi50ZXN0KE5pdHJvdXMsIGV4YWN0PUZBTFNFLCBhbHRlcm5hdGl2ZT0ibGVzcyIpCgoJTWFudGVsLUhhZW5zemVsIGNoaS1zcXVhcmVkIHRlc3Qgd2l0aCBjb250aW51aXR5IGNvcnJlY3Rpb24KCmRhdGE6ICBOaXRyb3VzCk1hbnRlbC1IYWVuc3plbCBYLXNxdWFyZWQgPSAwLjcxNDMyLCBkZiA9IDEsIHAtdmFsdWUgPSAwLjE5OQphbHRlcm5hdGl2ZSBoeXBvdGhlc2lzOiB0cnVlIGNvbW1vbiBvZGRzIHJhdGlvIGlzIGxlc3MgdGhhbiAxCjk1IHBlcmNlbnQgY29uZmlkZW5jZSBpbnRlcnZhbDoKIDAuMDAwMDAwIDEuMjYwMDUzCnNhbXBsZSBlc3RpbWF0ZXM6CmNvbW1vbiBvZGRzIHJhdGlvIAogICAgICAgIDAuNjY0NTM3NCAKCj4gIyMgZXhhY3QgPSBGQUxTRSBnYXZlIHRoZSB3cm9uZyB0YWlsIGluIDIuMTIuMi4KPiAKPiAKPiAjIyBzY2FuKHN0cmlwLndoaXRlPVRSVUUpIGNvdWxkIHN0cmlwIHRyYWlsaW5nIChidXQgbm90IGxlYWRpbmcpIHNwYWNlCj4gIyMgaW5zaWRlIHF1b3RlZCBzdHJpbmdzLgo+IHdyaXRlTGluZXMoJyAiICBBICAiOyAiQiIgOyJDIjsiIEQgIjsiRSAiOyAgRiAgO0cgICcsICJmb28iKQo+IGNhdChyZWFkTGluZXMoImZvbyIpLCBzZXAgPSAiXG4iKQogIiAgQSAgIjsgIkIiIDsiQyI7IiBEICI7IkUgIjsgIEYgIDtHICAKPiBzY2FuKCdmb28nLCBsaXN0KCIiKSwgc2VwPSI7IilbWzFdXQpSZWFkIDcgcmVjb3JkcwpbMV0gIiAgIEEgICIgIiBCICIgICAgIkMiICAgICAgIiBEICIgICAgIkUgIiAgICAgIiAgRiAgIiAgIkcgICIgICAKPiBzY2FuKCdmb28nLCAiIiwgc2VwPSI7IikKUmVhZCA3IGl0ZW1zClsxXSAiICAgQSAgIiAiIEIgIiAgICAiQyIgICAgICAiIEQgIiAgICAiRSAiICAgICAiICBGICAiICAiRyAgIiAgIAo+IHNjYW4oJ2ZvbycsIGxpc3QoIiIpLCBzZXA9IjsiLCBzdHJpcC53aGl0ZSA9IFRSVUUpW1sxXV0KUmVhZCA3IHJlY29yZHMKWzFdICIgIEEgICIgIkIiICAgICAiQyIgICAgICIgRCAiICAgIkUgIiAgICAiRiIgICAgICJHIiAgICAKPiBzY2FuKCdmb28nLCAiIiwgc2VwPSI7Iiwgc3RyaXAud2hpdGUgPSBUUlVFKQpSZWFkIDcgaXRlbXMKWzFdICIgIEEgICIgIkIiICAgICAiQyIgICAgICIgRCAiICAgIkUgIiAgICAiRiIgICAgICJHIiAgICAKPiB1bmxpbmsoJ2ZvbycpCj4gCj4gd3JpdGVMaW5lcygnICIgIEEgICJcbiAiQiIgXG4iQyJcbiIgRCAiXG4iRSAiXG4gIEYgIFxuRyAgJywgImZvbzIiKQo+IHNjYW4oJ2ZvbzInLCAiIikKUmVhZCA3IGl0ZW1zClsxXSAiICBBICAiICJCIiAgICAgIkMiICAgICAiIEQgIiAgICJFICIgICAgIkYiICAgICAiRyIgICAgCj4gc2NhbignZm9vMicsICIiLCBzdHJpcC53aGl0ZT1UUlVFKSAjIGRvY3VtZW50ZWQgdG8gYmUgaWdub3JlZCAuLi4KUmVhZCA3IGl0ZW1zClsxXSAiICBBICAiICJCIiAgICAgIkMiICAgICAiIEQgIiAgICJFICIgICAgIkYiICAgICAiRyIgICAgCj4gdW5saW5rKCdmb28yJykKPiAjIyBDaGFuZ2VkIGZvciAyLjEzLjAsIGZvdW5kIHdoZW4gaW52ZXN0aWdhdGluZyBub24tYnVnIFBSIzE0NTIyLgo+IAo+IAo+ICMjIFBSIzE0NDg4OiBtaXNzaW5nIHZhbHVlcyBpbiByYW5rIGNvcnJlbGF0aW9ucwo+IHNldC5zZWVkKDEpCj4geCA8LSBydW5pZigxMCkKPiB5IDwtIHJ1bmlmKDEwKQo+IHhbM10gPC0gTkE7IHlbNV0gPC0gTkEKPiB4eSA8LSBjYmluZCh4LCB5KQo+IAo+IGNvcih4LCB5LCBtZXRob2QgPSAic3BlYXJtYW4iLCB1c2UgPSAiY29tcGxldGUub2JzIikKWzFdIDAuMjM4MDk1Mgo+IGNvcih4LCB5LCBtZXRob2QgPSAic3BlYXJtYW4iLCB1c2UgPSAicGFpcndpc2UuY29tcGxldGUub2JzIikKWzFdIDAuMjM4MDk1Mgo+IGNvcihuYS5vbWl0KHh5KSwgIG1ldGhvZCA9ICJzcGVhcm1hbiIsIHVzZSA9ICJjb21wbGV0ZS5vYnMiKQogICAgICAgICAgeCAgICAgICAgIHkKeCAxLjAwMDAwMDAgMC4yMzgwOTUyCnkgMC4yMzgwOTUyIDEuMDAwMDAwMAo+IGNvcih4eSwgIG1ldGhvZCA9ICJzcGVhcm1hbiIsIHVzZSA9ICJjb21wbGV0ZS5vYnMiKQogICAgICAgICAgeCAgICAgICAgIHkKeCAxLjAwMDAwMDAgMC4yMzgwOTUyCnkgMC4yMzgwOTUyIDEuMDAwMDAwMAo+IGNvcih4eSwgIG1ldGhvZCA9ICJzcGVhcm1hbiIsIHVzZSA9ICJwYWlyd2lzZS5jb21wbGV0ZS5vYnMiKQogICAgICAgICAgeCAgICAgICAgIHkKeCAxLjAwMDAwMDAgMC4yMzgwOTUyCnkgMC4yMzgwOTUyIDEuMDAwMDAwMAo+ICMjIGluY29uc2lzdGVudCBpbiBSIDwgMi4xMy4wCj4gCj4gCj4gIyMgaW50ZWdlciBvdmVyZmxvdyBpbiByb3dzdW0oKSB3ZW50IHVuZGV0ZWN0ZWQKPiAjIGh0dHBzOi8vc3RhdC5ldGh6LmNoL3BpcGVybWFpbC9yLWRldmVsLzIwMTEtTWFyY2gvMDYwMzA0Lmh0bWwKPiB4IDwtIDJlOUwKPiByb3dzdW0oYyh4LCB4KSwgYygiYSIsICJhIikpCiAgWywxXQphICAgTkEKPiByb3dzdW0oZGF0YS5mcmFtZSh6ID0gYyh4LCB4KSksIGMoImEiLCAiYSIpKQogICB6CmEgTkEKPiAjIyBvdmVyZmxvdyBpbiBSIDwgMi4xMy4wLgo+IAo+IAo+ICMjIG1ldGhvZCBkaXNwYXRjaCBpbiBbWy5kYXRhLmZyYW1lOgo+ICMjIGh0dHBzOi8vc3RhdC5ldGh6LmNoL3BpcGVybWFpbC9yLWRldmVsLzIwMTEtQXByaWwvMDYwNDA5Lmh0bWwKPiBkIDwtIGRhdGEuZnJhbWUobnVtID0gMTo0LAorICAgICAgICAgICBmYWMgPSBmYWN0b3IobGV0dGVyc1sxMToxNF0sIGxldmVscyA9IGxldHRlcnNbMToxNV0pLAorICAgICAgICAgICBkYXRlID0gYXMuRGF0ZSgiMjAxMS0wNC0wMSIpICsgKDA6MyksCisgICAgICAgICAgIHB2ID0gcGFja2FnZV92ZXJzaW9uKGMoIjEuMi0zIiwgIjQuNSIsICI2LjciLCAiOC45LTEwIikpKQo+IGZvciAoaSBpbiBzZXFfYWxvbmcoZCkpIHByaW50KGRbWzEsIGldXSkKWzFdIDEKWzFdIGsKTGV2ZWxzOiBhIGIgYyBkIGUgZiBnIGggaSBqIGsgbCBtIG4gbwpbMV0gIjIwMTEtMDQtMDEiClsxXSAnMS4yLjMnCj4gIyMgZGlkIG5vdCBkaXNwYXRjaCBpbiBSIDwgMi4xNC4wCj4gCj4gCj4gIyMgc29tZSB0ZXN0cyBvZiAyNDowMCBhcyBtaWRuaWdodAo+IGFzLlBPU0lYbHQoIjIwMTEtMDUtMTYgMjQ6MDA6MDAiLCB0eiA9ICJHTVQiKQpbMV0gIjIwMTEtMDUtMTcgR01UIgo+IGFzLlBPU0lYbHQoIjIwMTAtMDEtMzEgMjQ6MDA6MDAiLCB0eiA9ICJHTVQiKQpbMV0gIjIwMTAtMDItMDEgR01UIgo+IGFzLlBPU0lYbHQoIjIwMTEtMDItMjggMjQ6MDA6MDAiLCB0eiA9ICJHTVQiKQpbMV0gIjIwMTEtMDMtMDEgR01UIgo+IGFzLlBPU0lYbHQoIjIwMDgtMDItMjggMjQ6MDA6MDAiLCB0eiA9ICJHTVQiKQpbMV0gIjIwMDgtMDItMjkgR01UIgo+IGFzLlBPU0lYbHQoIjIwMDgtMDItMjkgMjQ6MDA6MDAiLCB0eiA9ICJHTVQiKQpbMV0gIjIwMDgtMDMtMDEgR01UIgo+IGFzLlBPU0lYbHQoIjIwMTAtMTItMzEgMjQ6MDA6MDAiLCB0eiA9ICJHTVQiKQpbMV0gIjIwMTEtMDEtMDEgR01UIgo+ICMjIG5ldyBpbiAyLjE0LjAKPiAKPiAKPiAjIyBVbndhcnJhbnRlZCBjb252ZXJzaW9uIG9mIGxvZ2ljYWwgdmFsdWVzCj4gdHJ5KGRvdWJsZShGQUxTRSkpCkVycm9yIGluIGRvdWJsZShGQUxTRSkgOiBpbnZhbGlkICdsZW5ndGgnIGFyZ3VtZW50Cj4geCA8LSAxOjMKPiB0cnkobGVuZ3RoKHgpIDwtIFRSVUUpCkVycm9yIGluIGxlbmd0aCh4KSA8LSBUUlVFIDogaW52YWxpZCB2YWx1ZQo+ICMjIGNvZXJjZWQgdG8gaW50ZWdlciBpbiAyLjEzLngKPiAKPiAKPiAjIyBmaWx0ZXIocmVjdXJzaXZlID0gVFJVRSkgb24gaW5wdXQgd2l0aCBOQXMKPiAjIGh0dHBzOi8vc3RhdC5ldGh6LmNoL3BpcGVybWFpbC9yLWRldmVsLzIwMTEtSnVseS8wNjE1NDcuaHRtbAo+IHggPC0gYygxOjQsIE5BLCA2OjkpCj4gY2JpbmQoeCwgIjEiPWZpbHRlcih4LCAwLjUsIG1ldGhvZD0icmVjdXJzaXZlIiksCisgICAgICAgICAgIjIiPWZpbHRlcih4LCBjKDAuNSwgMC4wKSwgbWV0aG9kPSJyZWN1cnNpdmUiKSwKKyAgICAgICAgICAiMyI9ZmlsdGVyKHgsIGMoMC41LCAwLjAsIDAuMCksIG1ldGhvZD0icmVjdXJzaXZlIikpClRpbWUgU2VyaWVzOgpTdGFydCA9IDEgCkVuZCA9IDkgCkZyZXF1ZW5jeSA9IDEgCiAgIHggICAgIDEgICAgIDIgICAgIDMKMSAgMSAxLjAwMCAxLjAwMCAxLjAwMAoyICAyIDIuNTAwIDIuNTAwIDIuNTAwCjMgIDMgNC4yNTAgNC4yNTAgNC4yNTAKNCAgNCA2LjEyNSA2LjEyNSA2LjEyNQo1IE5BICAgIE5BICAgIE5BICAgIE5BCjYgIDYgICAgTkEgICAgTkEgICAgTkEKNyAgNyAgICBOQSAgICBOQSAgICBOQQo4ICA4ICAgIE5BICAgIE5BICAgIE5BCjkgIDkgICAgTkEgICAgTkEgICAgTkEKPiAjIyBOQXMgaW4gd3JvbmcgcGxhY2UgaW4gUiA8PSAyLjEzLjEuCj4gCj4gCj4gIyMgUFIjMTQ2NzkuICBGb3JtYXQgZGVwZW5kcyBpZiBUWiBpcyBzZXQuCj4geCA8LSBhcy5QT1NJWGx0KGMoIjIwMTAtMDItMjcgMjI6MzA6MzMiLCAiMjAwOS0wOC0wOSAwNjowMTowMyIsCisgICAgICAgICAgICAgICAgICAgIjIwMTAtMDctMjMgMTc6Mjk6NTkiKSkKPiBzdG9waWZub3QoIWlzLm5hKHRydW5jKHgsIHVuaXRzID0gImRheXMiKVsxOjNdKSkKPiAjIyBnYXZlIE5BcyBhZnRlciB0aGUgZmlyc3QgaW4gUiA8IDIuMTMuMgo+IAo+IAo+ICMjIGV4cGxpY2l0IGVycm9yIG1lc3NhZ2UgZm9yIHNpbGx5IGlucHV0ICh0b2wgPSAwKQo+IGFhIDwtIGMoMSwgMiwgMywgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgMTIsIDEzLCAxNCkKPiB0cnkoc21vb3RoLnNwbGluZShhYSwgc2VxX2Fsb25nKGFhKSkpCkVycm9yIGluIHNtb290aC5zcGxpbmUoYWEsIHNlcV9hbG9uZyhhYSkpIDogCiAgJ3RvbCcgbXVzdCBiZSBzdHJpY3RseSBwb3NpdGl2ZSBhbmQgZmluaXRlCj4gZml0IDwtIHNtb290aC5zcGxpbmUoYWEsIHNlcV9hbG9uZyhhYSksIHRvbCA9IDAuMSkKPiAjIGFjdHVhbCBvdXRwdXQgaXMgdG9vIHVuc3RhYmxlIHRvIGRpZmYuCj4gIyMgQmV0dGVyIG1lc3NhZ2UgZnJvbSBSIDIuMTQuMgo+IAo+IAo+ICMjIFBSIzE0ODQwCj4gZCA8LSBkYXRhLmZyYW1lKHggPSAxOjksCisgICAgICAgICAgICAgICAgIHkgPSAxOjkgKyAwLjEqYygxLCAyLCAtMSwgMCwgMSwgMTAwMCwgMCwgMSwgLTEpLAorICAgICAgICAgICAgICAgICB3ID0gYygxLCAwLjUsIDIsIDEsIDIsIDAsIDEsIDIsIDEpKQo+IGZpdCA8LSBsbSh5IH4geCwgZGF0YT1kLCB3ZWlnaHRzPXcpCj4gc3VtbWFyeShmaXQpCgpDYWxsOgpsbShmb3JtdWxhID0geSB+IHgsIGRhdGEgPSBkLCB3ZWlnaHRzID0gdykKCldlaWdodGVkIFJlc2lkdWFsczoKICAgIE1pbiAgICAgIDFRICBNZWRpYW4gICAgICAzUSAgICAgTWF4IAotMC4xODgzIC0wLjAzMTAgIDAuMDAwMCAgMC4xMDA2ICAwLjExNjUgCgpDb2VmZmljaWVudHM6CiAgICAgICAgICAgIEVzdGltYXRlIFN0ZC4gRXJyb3IgdCB2YWx1ZSBQcig+fHR8KSAgICAKKEludGVyY2VwdCkgIDAuMDM5NDkgICAgMC4wODYxMiAgIDAuNDU5ICAgIDAuNjYzICAgIAp4ICAgICAgICAgICAgMC45OTc4OCAgICAwLjAxNTAyICA2Ni40MTkgNy44M2UtMTAgKioqCi0tLQpTaWduaWYuIGNvZGVzOiAgMCAnKioqJyAwLjAwMSAnKionIDAuMDEgJyonIDAuMDUgJy4nIDAuMSAnICcgMQoKUmVzaWR1YWwgc3RhbmRhcmQgZXJyb3I6IDAuMTIzMiBvbiA2IGRlZ3JlZXMgb2YgZnJlZWRvbQpNdWx0aXBsZSBSLXNxdWFyZWQ6ICAwLjk5ODYsCUFkanVzdGVkIFItc3F1YXJlZDogIDAuOTk4NCAKRi1zdGF0aXN0aWM6ICA0NDEyIG9uIDEgYW5kIDYgREYsICBwLXZhbHVlOiA3LjgzNGUtMTAKCj4gIyMgaXNzdWUgaXMgaG93IHRoZSA1LW51bWJlciBzdW1tYXJ5IGlzIGxhYmVsbGVkCj4gIyMgKGFsc28gc2VlbiBpbiBleGFtcGxlKGNhc2UubmFtZXMpKQo+IAo+IAo+ICMjIGlzLnVuc29ydGVkIGdvdCBpdCBiYWNrd2FyZHMgZm9yIGRhdGFmcmFtZXMgb2YgbW9yZSB0aGFuIG9uZSBjb2x1bW4KPiAjIyBpdCBpcyBzdXBwb3NlZCB0byBsb29rIGZvciB2aW9sYXRpb25zIG9mIHhbMl0gPiB4WzFdLCB4WzNdID4geFsyXSwgZXRjLgo+IGlzLnVuc29ydGVkKGRhdGEuZnJhbWUoeD0yOjEpKQpbMV0gRkFMU0UKPiBpcy51bnNvcnRlZChkYXRhLmZyYW1lKHg9MToyLCB5PTM6NCkpClsxXSBGQUxTRQo+IGlzLnVuc29ydGVkKGRhdGEuZnJhbWUoeD0zOjQsIHk9MToyKSkKWzFdIFRSVUUKPiAjIyBSIDwgMi4xNS4xIGdvdCB0aGVzZSBhcyBGQUxTRSwgVFJVRSwgRkFMU0UuCj4gCj4gCj4gbGlicmFyeSgibWV0aG9kcyIpIyAobm90IG5lZWRlZCBoZXJlKQo+IGFzc2VydEVycm9yIDwtIHRvb2xzOjphc3NlcnRFcnJvcgo+IGFzc2VydEVycm9yViA8LSBmdW5jdGlvbihleHByKSBhc3NlcnRFcnJvcihleHByLCB2ZXJib3NlPVRSVUUpCj4gYXNzZXJ0RXJyb3JWKCBnZXRNZXRob2QobHMsICJiYXIiLCBmZGVmPWxzKSApCkFzc2VydGVkIGVycm9yOiBubyBnZW5lcmljIGZ1bmN0aW9uIGZvdW5kIGZvciAnbHMnCj4gYXNzZXJ0RXJyb3JWKCBnZXRNZXRob2Qoc2hvdywgImJhciIpICkKQXNzZXJ0ZWQgZXJyb3I6IG5vIG1ldGhvZCBmb3VuZCBmb3IgZnVuY3Rpb24gJ3Nob3cnIGFuZCBzaWduYXR1cmUgYmFyCj4gIyMgUiA8IDIuMTUuMSBnYXZlCj4gIyMgICBjYW5ub3QgY29lcmNlIHR5cGUgJ2Nsb3N1cmUnIHRvIHZlY3RvciBvZiB0eXBlICdjaGFyYWN0ZXInCj4gCj4gCj4gIyMgY29ybmVyIGNhc2VzIGZvciBhcnJheQo+ICMgYWxsb3dlZCwgZ2F2ZSBub24tYXJyYXkgaW4gMi4xNS54Cj4gdHJ5KGFycmF5KDEsIGludGVnZXIoKSkpCkVycm9yIGluIGFycmF5KDEsIGludGVnZXIoKSkgOiAnZGltcycgY2Fubm90IGJlIG9mIGxlbmd0aCAwCj4gIyBpZiBubyBkaW1zLCBhbiBlcnJvciB0byBzdXBwbHkgZGltbmFtZXMKPiB0cnkoYXJyYXkoMSwgaW50ZWdlcigpLCBsaXN0KDEsIDIpKSkKRXJyb3IgaW4gYXJyYXkoMSwgaW50ZWdlcigpLCBsaXN0KDEsIDIpKSA6ICdkaW1zJyBjYW5ub3QgYmUgb2YgbGVuZ3RoIDAKPiAjIwo+IAo+IAo+ICMjIGlzLm5hKCkgb24gYW4gZW1wdHkgZGF0YWZyYW1lIChQUiMxNDA1OSkKPiBERiA8LSBkYXRhLmZyYW1lKHJvdy5uYW1lcz0xOjMpCj4gaXMubmEoREYpOyBzdHIoLkxhc3QudmFsdWUpCiAKMQoyCjMKIGxvZ2lbMTozLCAwIF0gCiAtIGF0dHIoKiwgImRpbW5hbWVzIik9TGlzdCBvZiAyCiAgLi4kIDogY2hyIFsxOjNdICIxIiAiMiIgIjMiCiAgLi4kIDogTlVMTAo+IGlzLm5hKERGW0ZBTFNFLCBdKTsgc3RyKC5MYXN0LnZhbHVlKQo8MCB4IDAgbWF0cml4PgogbG9naVswICwgMCBdIAo+ICMjIGZpcnN0IGZhaWxlZCBpbiBSIDIuMTUuMSwgc2Vjb25kIGdhdmUgTlVMTAo+IAo+IAo+ICMjIHNwbGl0KCkgd2l0aCBkb3RzIGluIGxldmVscwo+IGRmIDwtIGRhdGEuZnJhbWUoeCA9IHJlcChjKCJhIiwgImEuYiIpLCAzTCksIHkgPSByZXAoYygiYi5jIiwgImMiKSwgM0wpLAorICAgICAgICAgICAgICAgICAgeiA9IDE6NikKPiBkZgogICAgeCAgIHkgegoxICAgYSBiLmMgMQoyIGEuYiAgIGMgMgozICAgYSBiLmMgMwo0IGEuYiAgIGMgNAo1ICAgYSBiLmMgNQo2IGEuYiAgIGMgNgo+IHNwbGl0KGRmLCBkZlssIDE6Ml0pICMgZGVmYXVsdCBpcyBzZXAgPSAiLiIKJGEuYi5jCiAgICB4ICAgeSB6CjEgICBhIGIuYyAxCjIgYS5iICAgYyAyCjMgICBhIGIuYyAzCjQgYS5iICAgYyA0CjUgICBhIGIuYyA1CjYgYS5iICAgYyA2CgokYS5iLmIuYwpbMV0geCB5IHoKPDAgcm93cz4gKG9yIDAtbGVuZ3RoIHJvdy5uYW1lcykKCiRhLmMKWzFdIHggeSB6CjwwIHJvd3M+IChvciAwLWxlbmd0aCByb3cubmFtZXMpCgo+IHNwbGl0KGRmLCBkZlssIDE6Ml0sIHNlcCA9ICI6IikKJGBhOmIuY2AKICB4ICAgeSB6CjEgYSBiLmMgMQozIGEgYi5jIDMKNSBhIGIuYyA1CgokYGEuYjpiLmNgClsxXSB4IHkgego8MCByb3dzPiAob3IgMC1sZW5ndGggcm93Lm5hbWVzKQoKJGBhOmNgClsxXSB4IHkgego8MCByb3dzPiAob3IgMC1sZW5ndGggcm93Lm5hbWVzKQoKJGBhLmI6Y2AKICAgIHggeSB6CjIgYS5iIGMgMgo0IGEuYiBjIDQKNiBhLmIgYyA2Cgo+ICMjCj4gCj4gCj4gIyMgVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBzb3J0Lmxpc3QgYW5kIG9yZGVyCj4geiA8LSBjKDRMLCBOQSwgMkwsIDNMLCBOQSwgMUwpCj4gb3JkZXIoeiwgbmEubGFzdCA9IE5BKQpbMV0gNiAzIDQgMQo+IHNvcnQubGlzdCh6LCBuYS5sYXN0ID0gTkEpClsxXSA0IDIgMyAxCj4gc29ydC5saXN0KHosIG5hLmxhc3QgPSBOQSwgbWV0aG9kID0gInNoZWxsIikKWzFdIDQgMiAzIDEKPiBzb3J0Lmxpc3QoeiwgbmEubGFzdCA9IE5BLCBtZXRob2QgPSAicXVpY2siKQpbMV0gNCAyIDMgMQo+IHNvcnQubGlzdCh6LCBuYS5sYXN0ID0gTkEsIG1ldGhvZCA9ICJyYWRpeCIpClsxXSA0IDIgMyAxCj4gIyMgRGlmZmVyZW5jZXMgZmlyc3QgZG9jdW1lbnRlZCBpbiBSIDIuMTUuMgo+IAo+IAo+ICMjIFBSIzE1MDI4OiBuYW1lcyBsb25nZXIgdGhhbiBjdXRvZmYgTkIgKD0gMTAwMCkKPiBOQiA8LSAxMDAwCj4gbG5zIDwtIGNhcHR1cmUub3V0cHV0KAorICAgICBzZXROYW1lcyhjKDI1NSwgMTAwMCwgMzAwMDApLAorICAgICAgICAgICAgICBjKHBhc3RlKHJlcC5pbnQoImEiLCBOQisyKSwgY29sbGFwc2U9IiIpLAorICAgICAgICAgICAgICAgIHBhc3RlKHJlcC5pbnQoImIiLCBOQisyKSwgY29sbGFwc2U9IiIpLAorICAgICAgICAgICAgICAgIHBhc3RlKHJlcC5pbnQoImMiLCBOQisyKSwgY29sbGFwc2U9IiIpKSkpCj4gc3ViKCJeICsiLCAnJywgbG5zWzIqIDE6M10pClsxXSAiMjU1ICIgICAiMTAwMCAiICAiMzAwMDAgIgo+ICMjICp2YWx1ZXMqIHdlcmUgY3V0b2ZmIHdoZW4gcHJpbnRlZAo+IAo+IAo+ICMjIGFsbG93cyBkZXBhcnNlIGxpbWl0cyB0byBiZSBzZXQKPiBmb3JtIDwtIHJlYWxseWxvbmduYW1leSB+IHJlYWxseWxvbmduYW1leDAgKyByZWFsbHlsb25nbmFtZXgxICsgcmVhbGx5bG9uZ25hbWV4MiArIHJlYWxseWxvbmduYW1leDMKPiBmb3JtCnJlYWxseWxvbmduYW1leSB+IHJlYWxseWxvbmduYW1leDAgKyByZWFsbHlsb25nbmFtZXgxICsgcmVhbGx5bG9uZ25hbWV4MiArIAogICAgcmVhbGx5bG9uZ25hbWV4Mwo+IG9wIDwtIG9wdGlvbnMoZGVwYXJzZS5jdXRvZmY9ODApCj4gZm9ybQpyZWFsbHlsb25nbmFtZXkgfiByZWFsbHlsb25nbmFtZXgwICsgcmVhbGx5bG9uZ25hbWV4MSArIHJlYWxseWxvbmduYW1leDIgKyByZWFsbHlsb25nbmFtZXgzCj4gb3B0aW9ucyhkZXBhcnNlLmN1dG9mZj01MCkKPiBmb3JtCnJlYWxseWxvbmduYW1leSB+IHJlYWxseWxvbmduYW1leDAgKyByZWFsbHlsb25nbmFtZXgxICsgCiAgICByZWFsbHlsb25nbmFtZXgyICsgcmVhbGx5bG9uZ25hbWV4Mwo+IG9wdGlvbnMob3ApCj4gIyMgZml4ZWQgdG8gNjAgaW4gUiAyLjE1LngKPiAKPiAKPiAjIyBQUiMxNTE3OTogdXNlciBkZWZpbmVkIGJpbmFyeSBvcHMgd2VyZSBub3QgZGVwYXJzZWQgcHJvcGVybHkKPiBxdW90ZSggYCVeJWAoeCwgYCVeJWAoeSx6KSkgKQp4ICVeJSAoeSAlXiUgeikKPiBxdW90ZSggYCVeJWAoeCkgKQpgJV4lYCh4KQo+ICMjCj4gCj4gCj4gIyMgQW5vbnltb3VzIGZ1bmN0aW9uIGNhbGxzIHdlcmUgbm90IGRlcGFyc2VkIHByb3Blcmx5Cj4gc3Vic3RpdHV0ZShmKHgpLCBsaXN0KGYgPSBmdW5jdGlvbih4KSB4ICsgMSkpCihmdW5jdGlvbih4KSB4ICsgMSkoeCkKPiBzdWJzdGl0dXRlKGYoeCksIGxpc3QoZiA9IHF1b3RlKGZ1bmN0aW9uKHgpIHggKyAxKSkpCihmdW5jdGlvbih4KSB4ICsgMSkoeCkKPiBzdWJzdGl0dXRlKGYoeCksIGxpc3QoZiA9IHF1b3RlKGYrZykpKQooZiArIGcpKHgpCj4gc3Vic3RpdHV0ZShmKHgpLCBsaXN0KGYgPSBxdW90ZShiYXNlOjptZWFuKSkpCmJhc2U6Om1lYW4oeCkKPiBzdWJzdGl0dXRlKGYoeCksIGxpc3QoZiA9IHF1b3RlKGFbbl0pKSkKYVtuXSh4KQo+IHN1YnN0aXR1dGUoZih4KSwgbGlzdChmID0gcXVvdGUoZyh5KSkpKQpnKHkpKHgpCj4gIyMgVGhlIGZpcnN0IHRocmVlIG5lZWQgcGFyZW5zLCB0aGUgbGFzdCB0aHJlZSBkb24ndC4KPiAKPiAKPiAjIyBQUiMxNTI0NyA6IHN0cigpIG9uIGludmFsaWQgZGF0YSBmcmFtZSBuYW1lcyAod2hlcmUgcHJpbnQoKSB3b3Jrcyk6Cj4gZCA8LSBkYXRhLmZyYW1lKDE6MywgIkIiLCA0LCBzdHJpbmdzQXNGYWN0b3JzPVRSVUUpCj4gbmFtZXMoZCkgPC0gYygiQSIsICJCXHhiYSIsIkNceGFiY2QiKQo+IHN0cihkKQonZGF0YS5mcmFtZSc6CTMgb2JzLiBvZiAgMyB2YXJpYWJsZXM6CiAkIEEgICAgICA6IGludCAgMSAyIDMKICQgQrogIDogRmFjdG9yIHcvIDEgbGV2ZWwgIkIiOiAxIDEgMQogJCBDq2NkOiBudW0gIDQgNCA0Cj4gIyMgZ2F2ZSBhbiBlcnJvciBpbiBSIDw9IDMuMC4wCj4gCj4gCj4gIyMgUFIjMTUyOTkgOiBhZGRpbmcgYSBzaW1wbGUgdmVjdG9yIHRvIGEgY2xhc3NlZCBvYmplY3QgcHJvZHVjZWQgYSBiYWQgcmVzdWx0Ogo+IDE6MiArIHRhYmxlKDE6MikKCjEgMiAKMiAzIAo+ICMjIFByaW50ZWQgdGhlIGNsYXNzIGF0dHJpYnV0ZSBpbiBSIDw9IDMuMC4wCj4gCj4gCj4gIyMgUFIjMTUzMTEgOiByZWdtYXRjaGVzPC0gbWlzaGFuZGxlZCByZWdleHByIHJlc3VsdHMuCj4gICB4IDwtIGMoJzEnLCAnQicsICczJykKPiAgIG0gPC0gcmVnZXhwcignXFxkJywgeCkKPiAgIHJlZ21hdGNoZXMoeCwgbSkgPC0gYygnQScsICdDJykKPiAgIHByaW50KHgpClsxXSAiQSIgIkIiICJDIgo+ICMjIEdhdmUgYSB3YXJuaW5nIGFuZCBhIHdyb25nIHJlc3VsdCB1cCB0byAzLjAuMQo+IAo+IAo+ICMjIEJhZCB3YXJuaW5nIGZvdW5kIGJ5IFJhZGZvcmQgTmVhbAo+ICAgc2F2ZW9wdCA8LSBvcHRpb25zKHdhcm5QYXJ0aWFsTWF0Y2hEb2xsYXI9VFJVRSkKPiAgIHBsIDwtIHBhaXJsaXN0KGFiYz0xLCBkZWY9MikKPiAgIHBsJGFiClsxXSAxCldhcm5pbmcgbWVzc2FnZToKSW4gcGwkYWIgOiBwYXJ0aWFsIG1hdGNoIG9mICdhYicgdG8gJ2FiYycKPiAgIGlmICghaXMubnVsbChzYXZlb3B0W1sid2FyblBhcnRpYWxNYXRjaERvbGxhciJdXSkpIG9wdGlvbnMoc2F2ZW9wdCkKPiAjIyAnYWJjJyB3YXMganVzdCAnJwo+IAo+IAo+ICMjIHNlcSgpIHdpdGggTmFOIGV0YyBpbnB1dHMgbm93IGdpdmVzIGV4cGxpY2l0IGVycm9yIG1lc3NhZ2VzCj4gdHJ5KHNlcShOYU4pKQpFcnJvciBpbiBzZXEuZGVmYXVsdChOYU4pIDogJ2Zyb20nIG11c3QgYmUgYSBmaW5pdGUgbnVtYmVyCj4gdHJ5KHNlcSh0byA9IE5hTikpCkVycm9yIGluIHNlcS5kZWZhdWx0KHRvID0gTmFOKSA6ICd0bycgbXVzdCBiZSBhIGZpbml0ZSBudW1iZXIKPiB0cnkoc2VxKE5hTiwgTmFOKSkKRXJyb3IgaW4gc2VxLmRlZmF1bHQoTmFOLCBOYU4pIDogJ2Zyb20nIG11c3QgYmUgYSBmaW5pdGUgbnVtYmVyCj4gdHJ5KHNlcS5pbnQoTmFOKSkKRXJyb3IgaW4gc2VxLmludChOYU4pIDogJ2Zyb20nIG11c3QgYmUgYSBmaW5pdGUgbnVtYmVyCj4gdHJ5KHNlcS5pbnQodG8gPSBOYU4pKQpFcnJvciBpbiBzZXEuaW50KHRvID0gTmFOKSA6ICd0bycgbXVzdCBiZSBhIGZpbml0ZSBudW1iZXIKPiB0cnkoc2VxLmludChOYU4sIE5hTikpCkVycm9yIGluIHNlcS5pbnQoTmFOLCBOYU4pIDogJ2Zyb20nIG11c3QgYmUgYSBmaW5pdGUgbnVtYmVyCj4gIyMgUiAzLjAuMSBnYXZlIG1lc3NhZ2VzIGZyb20gJzonIG9yIGFib3V0IG5lZ2F0aXZlLWxlbmd0aCB2ZWN0b3JzLgo+IAo+IAo+ICMjIFNvbWUgZGltbmFtZXMgd2VyZSBsb3N0IGZyb20gMUQgYXJyYXlzOiBQUiMxNTMwMQo+IHggPC0gYXJyYXkoMDoyLCBkaW09MywgZGltbmFtZXM9bGlzdChkMT1MRVRURVJTWzE6M10pKQo+IHgKZDEKQSBCIEMgCjAgMSAyIAo+IHhbXQpkMQpBIEIgQyAKMCAxIDIgCj4geFszOjFdCmQxCkMgQiBBIAoyIDEgMCAKPiB4IDwtIGFycmF5KDAsIGRpbW5hbWVzPWxpc3QoZDE9IkEiKSkKPiB4CmQxCkEgCjAgCj4geFtdCmQxCkEgCjAgCj4geFtkcm9wID0gRkFMU0VdCmQxCkEgCjAgCj4gIyMgbG9zdCBkaW1uYW1lcyBpbiAzLjAuMQo+IAo+IAo+ICMjIFBSIzE1Mzk2Cj4gbG9hZChmaWxlLnBhdGgoU3lzLmdldGVudignU1JDRElSJyksICdhcmltYS5yZGEnKSkKPiAoZjEgPC0gYXJpbWEoeCwgeHJlZyA9IHhyZWcsIG9yZGVyID0gYygxLDEsMSksIHNlYXNvbmFsID0gYygxLDAsMSkpKQoKQ2FsbDoKYXJpbWEoeCA9IHgsIG9yZGVyID0gYygxLCAxLCAxKSwgc2Vhc29uYWwgPSBjKDEsIDAsIDEpLCB4cmVnID0geHJlZykKCkNvZWZmaWNpZW50czoKICAgICAgICAgIGFyMSAgICAgbWExICAgIHNhcjEgICAgIHNtYTEgICAgeHJlZwogICAgICAtMC40NzkxICAwLjM1MjUgIDAuOTg3NyAgLTAuODI5NSAgMC4zNTc0CnMuZS4gICAwLjQxNjIgIDAuNDQyMCAgMC4wMzI5ICAgMC4yMjA5ICAwLjc0NDAKCnNpZ21hXjIgZXN0aW1hdGVkIGFzIDAuMDAxNDk5OiAgbG9nIGxpa2VsaWhvb2QgPSAxNjMuNzksICBhaWMgPSAtMzE1LjU4Cj4gKGYyIDwtIGFyaW1hKGRpZmYoeCksIHhyZWcgPSBkaWZmKHhyZWcpLCBvcmRlciA9IGMoMSwwLDEpLCBzZWFzb25hbCA9IGMoMSwwLDEpLAorICAgICAgICAgICAgICBpbmNsdWRlLm1lYW4gPSBGQUxTRSkpCgpDYWxsOgphcmltYSh4ID0gZGlmZih4KSwgb3JkZXIgPSBjKDEsIDAsIDEpLCBzZWFzb25hbCA9IGMoMSwgMCwgMSksIHhyZWcgPSBkaWZmKHhyZWcpLCAKICAgIGluY2x1ZGUubWVhbiA9IEZBTFNFKQoKQ29lZmZpY2llbnRzOgogICAgICAgICAgYXIxICAgICBtYTEgICAgc2FyMSAgICAgc21hMSAgZGlmZih4cmVnKQogICAgICAtMC40NzkxICAwLjM1MjYgIDAuOTg3NyAgLTAuODI5NSAgICAgIDAuMzU3MQpzLmUuICAgMC40MTYyICAwLjQ0MjAgIDAuMDMyOSAgIDAuMjIxMCAgICAgIDAuNzQ0MQoKc2lnbWFeMiBlc3RpbWF0ZWQgYXMgMC4wMDE0OTk6ICBsb2cgbGlrZWxpaG9vZCA9IDE2My43OSwgIGFpYyA9IC0zMTUuNTgKPiBzdG9waWZub3QoYWxsLmVxdWFsKGNvZWYoZjEpLCBjb2VmKGYyKSwgdG9sZXJhbmNlID0gMWUtMywgY2hlY2submFtZXMgPSBGQUxTRSkpCj4gIyMgZmlyc3QgZ2F2ZSBsb2NhbCBvcHRpbSBpbiAzLjAuMQo+IAo+ICMjIGFsbC5lcXVhbCBhbHdheXMgY2hlY2tlZCB0aGUgbmFtZXMKPiB4IDwtIGMoYT0xLCBiPTIpCj4geSA8LSBjKGE9MSwgZD0yKQo+IGFsbC5lcXVhbCh4LCB5LCBjaGVjay5uYW1lcyA9IEZBTFNFKQpbMV0gVFJVRQo+ICMjIGZhaWxlZCBvbiBtaXNtYXRjaGVkIGF0dHJpYnV0ZXMKPiAKPiAKPiAjIyBQUiMxNTQxMTsgUFIjMTgwOTggPT0+IGRpZ2l0cz0wIG5vdCBvazoKPiBmb3JtYXQoOTk5MiwgZGlnaXRzID0gMykKWzFdICI5OTkyIgo+IGZvcm1hdCg5OTk2LCBkaWdpdHMgPSAzKQpbMV0gIjk5OTYiCj4gZm9ybWF0KDAuMDAwMiwgZGlnaXRzID0gMSwgbnNtYWxsID0gMiwgc2NpZW50aWZpYyA9IEZBTFNFKQpbMV0gIjAuMDAwMiIKPiBhc3NlcnRFcnJvclYoCisgZm9ybWF0KHBpKjEwLCAgZGlnaXRzID0gMCkpCkFzc2VydGVkIGVycm9yOiBpbnZhbGlkIHZhbHVlIDAgZm9yICdkaWdpdHMnIGFyZ3VtZW50Cj4gZm9ybWF0KHBpKjEwLCAgZGlnaXRzID0gMSkKWzFdICIzMSIKPiBmb3JtYXQocGkqMTAsICBkaWdpdHMgPSAxLCBuc21hbGwgPSAxKQpbMV0gIjMxLjQiCj4gIyMgc2Vjb25kIGFkZGVkIGFuIGV4dHJhIHNwYWNlLgo+IAo+ICMjIGFuZCBvbmUgYnJhbmNoIG9mIHRoaXMgd2FzIHdyb25nOgo+IHh4IDwtIGMoLTg2ODcwMjY4LCAxMDc4MzMzNTgsIDMwMjUzNjk4NSwgNDgxMDE1MzA5LCA2NzU3MTg5MzUsIDg1NDE5NzI1OSwKKyAgICAgICAgIDEwMTY0NTAyODEsIDExNzg3MDMzMDMsIDEzMjQ3MzEwMjMsIDE0NTQ1MzM0NDEpCj4geHgKIFsxXSAgLTg2ODcwMjY4ICAxMDc4MzMzNTggIDMwMjUzNjk4NSAgNDgxMDE1MzA5ICA2NzU3MTg5MzUgIDg1NDE5NzI1OQogWzddIDEwMTY0NTAyODEgMTE3ODcwMzMwMyAxMzI0NzMxMDIzIDE0NTQ1MzM0NDEKPiAjIyBkcm9wcGVkIHNwYWNlcyB3aXRob3V0IGxvbmcgZG91Ymxlcwo+IAo+ICMjIGFuZCByb3VuZGluZyB3YXMgYmVpbmcgZGV0ZWN0ZWQgaW1wcm9wZXJseSAoUFIjMTU1ODMpCj4gMTAwMCogKCgxMF4oMS80KSkgXiBjKDA6NCkpClsxXSAgMTAwMC4wMDAgIDE3NzguMjc5ICAzMTYyLjI3OCAgNTYyMy40MTMgMTAwMDAuMDAwCj4gNy8wLjA3ClsxXSAxMDAKPiAjIyBTcGFjaW5nIHdhcyBpbmNvcnJlY3QKPiAKPiAKPiAjIyBQUiMxNTQ2OAo+IE0gPC0gbWF0cml4KDExOjE0LCBuY29sPTIsIGRpbW5hbWVzPWxpc3QocGFzdGUwKCJSb3ciLCAxOjIpLCBwYXN0ZTAoIkNvbCIsCisgMToyKSkpCj4gTCA8LSBsaXN0KGVsZW0xPTEsIGVsZW0yPTIpCj4gcmJpbmQoTSwgTCkKICAgICBDb2wxIENvbDIKUm93MSAxMSAgIDEzICAKUm93MiAxMiAgIDE0ICAKTCAgICAxICAgIDIgICAKPiByYmluZChMLCBNKQogICAgIGVsZW0xIGVsZW0yCkwgICAgMSAgICAgMiAgICAKUm93MSAxMSAgICAxMyAgIApSb3cyIDEyICAgIDE0ICAgCj4gY2JpbmQoTSwgTCkKICAgICBDb2wxIENvbDIgTApSb3cxIDExICAgMTMgICAxClJvdzIgMTIgICAxNCAgIDIKPiBjYmluZChMLCBNKQogICAgICBMIENvbDEgQ29sMgplbGVtMSAxIDExICAgMTMgIAplbGVtMiAyIDEyICAgMTQgIAo+ICMjIGxvc3QgdGhlIGRpbSBvZiBNLCBzbyByZXR1cm5lZCBOVUxMIGVudHJpZXMKPiAKPiAKPiAjIyBOQV9jaGFyYWN0ZXJfIHdhcyBub3QgaGFuZGxlZCBwcm9wZXJseSBpbiBtaW4gYW5kIG1heCAocmVwb3J0ZWQgYnkgTWFnbnVzIFRob3IgVG9yZmFzb24pCj4gc3RyKG1pbihOQSwgImJsYSIpKQogY2hyIE5BCj4gc3RyKG1pbigiYmxhIiwgTkEpKQogY2hyIE5BCj4gc3RyKG1pbihOQV9jaGFyYWN0ZXJfLCAiYmxhIikpCiBjaHIgTkEKPiBzdHIobWF4KE5BLCAiYmxhIikpCiBjaHIgTkEKPiBzdHIobWF4KCJibGEiLCBOQSkpCiBjaHIgTkEKPiBzdHIobWF4KE5BX2NoYXJhY3Rlcl8sICJibGEiKSkKIGNociBOQQo+ICMjIE5BX2NoYXJhY3Rlcl8gY291bGQgYmUgdHJlYXRlZCBhcyAiTkEiOyBkZXBlbmRpbmcgb24gdGhlIGxvY2FsZSwgaXQgd291bGQgbm90IG5lY2Vzc2FyaWx5Cj4gIyMgYmUgdGhlIG1pbiBvciBtYXguCj4gCj4gCj4gIyMgV2hlbiB0d28gZW50cmllcyBuZWVkZWQgdG8gYmUgY3V0IHRvIHdpZHRoLCBzdHIoKSBtaXhlZCB1cAo+ICMjIHRoZSB2YWx1ZXMgKHJlcG9ydGVkIGJ5IEdlcnJpdCBFaWNobmVyKQo+IG9sZG9wdHMgPC0gb3B0aW9ucyh3aWR0aD03MCkKPiBuIDwtIDExICAgICAgIyBudW1iZXIgb2Ygcm93cyBvZiBkYXRhIGZyYW1lCj4gTSA8LSAxMDAwMCAgICMgb3JkZXIgb2YgbWFnbml0dWRlIG9mIG51bWVyaWNhbCB2YWx1ZXMKPiBsb25nZXIuY2hhci5zdHJpbmcgPC0gInpqdHZvcmttb3lkc2VwbnhrYWJtZW9uZHJqYWFudXRqbWZ4bGd6bXJianAiCj4gWCA8LSBkYXRhLmZyYW1lKCBBID0gMTpuICogTSwKKyAgICAgICAgICAgICAgICAgIEIgPSBmYWN0b3IocmVwKGxvbmdlci5jaGFyLnN0cmluZywgbikpKQo+IHN0ciggWCwgc3RyaWN0LndpZHRoID0gImN1dCIpCidkYXRhLmZyYW1lJzoJMTEgb2JzLiBvZiAgMiB2YXJpYWJsZXM6CiAkIEE6IG51bSAgMWUrMDQgMmUrMDQgM2UrMDQgNGUrMDQgNWUrMDQgNmUrMDQgN2UrMDQgOGUrMDQgOWUrMDQgMWUrLi4KICQgQjogRmFjdG9yIHcvIDEgbGV2ZWwgInpqdHZvcmttb3lkc2VwbnhrYWJtZW9uZHJqYWFudXRqbWZ4bGd6bXJiaiIuLgo+IG9wdGlvbnMob2xkb3B0cykKPiAjIyBUaGUgZmlyc3Qgcm93IG9mIHRoZSBzdHIoKSByZXN1bHQgd2FzIGR1cGxpY2F0ZWQuCj4gCj4gCj4gIyMgUFIxNTYyNDogcm91bmRpbmcgaW4gZXh0cmVtZSBjYXNlcwo+IGRwb2lzKDJeNTIsMSwxKQpbMV0gLTEuNTc4MjI2ZSsxNwo+IGRwb2lzKDJeNTIrMSwxLDEpClsxXSAtMS41NzgyMjZlKzE3Cj4gIyMgc2Vjb25kIHdhcm5lZCBpbiBSIDMuMC4yLgo+IAo+IAo+ICMjIEV4YW1wbGUgZnJvbSBQUjE1NjI1Cj4gZiA8LSBmaWxlLnBhdGgoU3lzLmdldGVudignU1JDRElSJyksICdFbWJlZGRlZE51bHMuY3N2JykKPiAjIyBUaGlzIGlzIGEgZmlsZSB3aXRoIGEgVVRGLTggQk9NIGFuZCBzb21lIGZpZWxkcyB3aGljaCBhcmUgYSBzaW5nbGUgbnVsLgo+ICMjIFRoZSBvdXRwdXQgZG9lcyByZWx5IG9uIHRoaXMgYmVpbmcgcnVuIGluIGEgbm9uLVVURi04IGxvY2FsZSAoQyBpbiB0ZXN0cykuCj4gcmVhZC5jc3YoZikgIyB3YXJucwogIFguLi5Db2xBIENvbEIgQ29sQwoxICAgICAgICBhICAgTkEgICBOQQoyICAgICAgICBiICAgTkEgICBOQQozICAgICAgICBjICAgTkEgICBOQQo0ICAgICAgICBkICAgTkEgICBOQQo1ICAgICAgICBlICAgTkEgICAgMQo2ICAgICAgICBmICAgTkEgICAgMQpXYXJuaW5nIG1lc3NhZ2VzOgoxOiBJbiByZWFkLnRhYmxlKGZpbGUgPSBmaWxlLCBoZWFkZXIgPSBoZWFkZXIsIHNlcCA9IHNlcCwgcXVvdGUgPSBxdW90ZSwgIDoKICBsaW5lIDIgYXBwZWFycyB0byBjb250YWluIGVtYmVkZGVkIG51bGxzCjI6IEluIHJlYWQudGFibGUoZmlsZSA9IGZpbGUsIGhlYWRlciA9IGhlYWRlciwgc2VwID0gc2VwLCBxdW90ZSA9IHF1b3RlLCAgOgogIGxpbmUgMyBhcHBlYXJzIHRvIGNvbnRhaW4gZW1iZWRkZWQgbnVsbHMKMzogSW4gcmVhZC50YWJsZShmaWxlID0gZmlsZSwgaGVhZGVyID0gaGVhZGVyLCBzZXAgPSBzZXAsIHF1b3RlID0gcXVvdGUsICA6CiAgbGluZSA0IGFwcGVhcnMgdG8gY29udGFpbiBlbWJlZGRlZCBudWxscwo0OiBJbiByZWFkLnRhYmxlKGZpbGUgPSBmaWxlLCBoZWFkZXIgPSBoZWFkZXIsIHNlcCA9IHNlcCwgcXVvdGUgPSBxdW90ZSwgIDoKICBsaW5lIDUgYXBwZWFycyB0byBjb250YWluIGVtYmVkZGVkIG51bGxzCjU6IEluIHNjYW4oZmlsZSA9IGZpbGUsIHdoYXQgPSB3aGF0LCBzZXAgPSBzZXAsIHF1b3RlID0gcXVvdGUsIGRlYyA9IGRlYywgIDoKICBlbWJlZGRlZCBudWwocykgZm91bmQgaW4gaW5wdXQKPiByZWFkLmNzdihmLCBza2lwTnVsID0gVFJVRSwgZmlsZUVuY29kaW5nID0gIlVURi04LUJPTSIpCiAgQ29sQSBDb2xCIENvbEMKMSAgICBhICAgTkEgICAgMQoyICAgIGIgICBOQSAgICAxCjMgICAgYyAgIE5BICAgIDEKNCAgICBkICAgTkEgICAgMQo1ICAgIGUgICBOQSAgICAxCjYgICAgZiAgIE5BICAgIDEKPiAjIyAnc2tpcE51bCcgaXMgbmV3IGluIDMuMS4wLiAgU2hvdWxkIG5vdCB3YXJuIG9uIEJPTSwgaWdub3JlIGluIHNlY29uZC4KPiAKPiAKPiAjIyBhbGwuZXF1YWwgZGF0ZXRpbWUgbWV0aG9kCj4geCA8LSBTeXMudGltZSgpCj4gYWxsLmVxdWFsKHgseCkKWzFdIFRSVUUKPiAKPiAjIEZJWE1FOiBjaGVjay50em9uZSA9IEZBTFNFIG5lZWRlZCBiZWNhdXNlIHNpbmNlIDc5MDM3LCBhbGwuZXF1YWwuUE9TSVh0Cj4gIyBzdHJpY3RseSByZXBvcnRzICIiIGFuZCB0aGUgY3VycmVudCB0aW1lIHpvbmUgKGV2ZW4gZnJvbSBUWiBlbnZpcm9ubWVudAo+ICMgdmFyaWFibGUpIGFzIGRpZmZlcmVudC4gIFRoZSBjb252ZXJzaW9uIHJvdW5kLXRyaXAgZnJvbSBTeXMudGltZSgpCj4gIyAoUE9TSVhjdCkgdmlhIFBPU0lYbHQgYW5kIGJhY2sgdG8gUE9TSVhjdCBjcmVhdGVzIGFuIG9iamVjdCB3aXRoIHRoZQo+ICMgY3VycmVudCB0aW1lIHpvbmUsIHlldCB0aGUgb3JpZ2luYWwgaXMgd2l0aCAiIiBhcyB0aW1lIHpvbmUgKGFuZCBib3RoCj4gIyByZWZlciB0byB0aGUgc2FtZSB0aW1lIHpvbmUpLgo+IGFsbC5lcXVhbCh4LCBhcy5QT1NJWGx0KHgpLCBjaGVjay50em9uZSA9IEZBTFNFKQpbMV0gVFJVRQo+IAo+IGFsbC5lcXVhbCh4LCBhcy5udW1lcmljKHgpKSAgIyBlcnJvcmVkIGluIFIgPD0gNC4wLjIKWzFdICInY3VycmVudCcgaXMgbm90IGEgUE9TSVh0Igo+IGFsbC5lcXVhbCh4LCBhcy5QT1NJWGx0KHgsIHR6ID0gIkVTVDVFRFQiKSkKWzFdICIndHpvbmUnIGF0dHJpYnV0ZXMgYXJlIGluY29uc2lzdGVudCAoJycgYW5kICdFU1Q1RURUJykiCj4gYWxsLmVxdWFsKHgsIHgrMWUtNCkKWzFdIFRSVUUKPiBpc1RSVUUoYWxsLmVxdWFsKHgsIHgrMC4wMDIpKSAjIG1lc3NhZ2Ugd2lsbCBkZXBlbmQgb24gcmVwcmVzZW50YXRpb24gZXJyb3IKWzFdIEZBTFNFCj4gIyMgYXMuUE9TSVh0IG1ldGhvZCBpcyBuZXcgaW4gMy4xLjAuCj4gCj4gCj4gCj4gIyMgTWlzdXNlIG9mIFBSIzE1NjMzCj4gdHJ5KGJhcnRsZXR0LnRlc3QoeWllbGQgfiBibG9jaypOLCBkYXRhID0gbnBrKSkKRXJyb3IgaW4gYmFydGxldHQudGVzdC5mb3JtdWxhKHlpZWxkIH4gYmxvY2sgKiBOLCBkYXRhID0gbnBrKSA6IAogICdmb3JtdWxhJyBzaG91bGQgYmUgb2YgdGhlIGZvcm0gcmVzcG9uc2UgfiBncm91cAo+IHRyeShmbGlnbmVyLnRlc3QgKHlpZWxkIH4gYmxvY2sqTiwgZGF0YSA9IG5waykpCkVycm9yIGluIGZsaWduZXIudGVzdC5mb3JtdWxhKHlpZWxkIH4gYmxvY2sgKiBOLCBkYXRhID0gbnBrKSA6IAogICdmb3JtdWxhJyBzaG91bGQgYmUgb2YgdGhlIGZvcm0gcmVzcG9uc2UgfiBncm91cAo+ICMjIHVzZWQgdGhlIGZpcnN0IGZhY3RvciB3aXRoIGFuIGluY29ycmVjdCBkZXNjcmlwdGlvbiBpbiBSIDwgMy4wLjMKPiAKPiAKPiAjIyBNaXNndWlkZWQgZXhwZWN0YXRpb24gb2YgUFIjMTU2ODcKPiB4eCA8LSB3aW5kb3coQWlyUGFzc2VuZ2Vycywgc3RhcnQgPSAxOTYwKQo+IGNiaW5kKHh4LCB4eCkKICAgICAgICAgIHh4ICB4eApKYW4gMTk2MCA0MTcgNDE3CkZlYiAxOTYwIDM5MSAzOTEKTWFyIDE5NjAgNDE5IDQxOQpBcHIgMTk2MCA0NjEgNDYxCk1heSAxOTYwIDQ3MiA0NzIKSnVuIDE5NjAgNTM1IDUzNQpKdWwgMTk2MCA2MjIgNjIyCkF1ZyAxOTYwIDYwNiA2MDYKU2VwIDE5NjAgNTA4IDUwOApPY3QgMTk2MCA0NjEgNDYxCk5vdiAxOTYwIDM5MCAzOTAKRGVjIDE5NjAgNDMyIDQzMgo+IG9wIDwtIG9wdGlvbnMoZGlnaXRzID0gMikKPiBjYmluZCh4eCwgeHgpCiAgICAgICAgICB4eCAgeHgKSmFuIDE5NjAgNDE3IDQxNwpGZWIgMTk2MCAzOTEgMzkxCk1hciAxOTYwIDQxOSA0MTkKQXByIDE5NjAgNDYxIDQ2MQpNYXkgMTk2MCA0NzIgNDcyCkp1biAxOTYwIDUzNSA1MzUKSnVsIDE5NjAgNjIyIDYyMgpBdWcgMTk2MCA2MDYgNjA2ClNlcCAxOTYwIDUwOCA1MDgKT2N0IDE5NjAgNDYxIDQ2MQpOb3YgMTk2MCAzOTAgMzkwCkRlYyAxOTYwIDQzMiA0MzIKPiBvcHRpb25zKG9wKQo+ICMjICdkaWdpdHMnIHdhcyBhcHBsaWVkIHRvIHRoZSB0aW1lLgo+IAo+IAo+ICMjIFJlbGF0ZWQgdG8gUFIjMTUxOTAKPiBkaWZmdGltZSgKKyAgICAgYXMuUE9TSVhjdChjKCIxOTcwLTAxLTAxIDAwOjAwOjAwIiwgIjE5NzAtMDEtMDEgMTI6MDA6MDAiKSwgdHo9IkVTVDVFRFQiKSwKKyAgICAgYXMuUE9TSVhjdChjKCIxOTcwLTAxLTAxIDAwOjAwOjAwIiwgIjE5NzAtMDEtMDEgMDA6MDA6MDAiKSwgdHo9IlVUQyIpKQpUaW1lIGRpZmZlcmVuY2VzIGluIGhvdXJzClsxXSAgNSAxNwo+ICMjIGtlcHQgdHpvbmUgZnJvbSBmaXJzdCBhcmcuCj4gCj4gCj4gIyMgUFIjMTU3MDYKPiB4MSA8LSBhcy5kZW5kcm9ncmFtKGhjbHVzdChkaXN0KGMoaT0xLGlpPTIsaWlpPTMsdj01LHZpPTYsdmlpPTcpKSkpCj4gYXR0cihjb3BoZW5ldGljKHgxKSwgIkxhYmVscyIpClsxXSAiaWlpIiAiaSIgICAiaWkiICAidmlpIiAidiIgICAidmkiIAo+ICMjIGdhdmUgYSBtYXRyaXggaW4gMy4wLjMKPiAKPiAKPiAjIyBQUiMxNTcwOAo+IGFhIDwtIGFub3ZhKCBsbShzciB+IC4sIGRhdGEgPSBMaWZlQ3ljbGVTYXZpbmdzKSApCj4gb3AgPC0gb3B0aW9ucyh3aWR0aCA9IDUwKQo+IGFhCkFuYWx5c2lzIG9mIFZhcmlhbmNlIFRhYmxlCgpSZXNwb25zZTogc3IKICAgICAgICAgIERmIFN1bSBTcSBNZWFuIFNxIEYgdmFsdWUgICAgUHIoPkYpICAgIApwb3AxNSAgICAgIDEgMjA0LjEyIDIwNC4xMTggMTQuMTE1NyAwLjAwMDQ5MjIgKioqCnBvcDc1ICAgICAgMSAgNTMuMzQgIDUzLjM0MyAgMy42ODg5IDAuMDYxMTI1NSAuICAKZHBpICAgICAgICAxICAxMi40MCAgMTIuNDAxICAwLjg1NzYgMC4zNTkzNTUxICAgIApkZHBpICAgICAgIDEgIDYzLjA1ICA2My4wNTQgIDQuMzYwNSAwLjA0MjQ3MTEgKiAgClJlc2lkdWFscyA0NSA2NTAuNzEgIDE0LjQ2MCAgICAgICAgICAgICAgICAgICAgICAKLS0tClNpZ25pZi4gY29kZXM6ICAKMCAnKioqJyAwLjAwMSAnKionIDAuMDEgJyonIDAuMDUgJy4nIDAuMSAnICcgMQo+IG9wdGlvbnMod2lkdGggPSA0MCkKPiBhYSA7IG9wdGlvbnMob3ApCkFuYWx5c2lzIG9mIFZhcmlhbmNlIFRhYmxlCgpSZXNwb25zZTogc3IKICAgICAgICAgIERmIFN1bSBTcSBNZWFuIFNxIEYgdmFsdWUKcG9wMTUgICAgICAxIDIwNC4xMiAyMDQuMTE4IDE0LjExNTcKcG9wNzUgICAgICAxICA1My4zNCAgNTMuMzQzICAzLjY4ODkKZHBpICAgICAgICAxICAxMi40MCAgMTIuNDAxICAwLjg1NzYKZGRwaSAgICAgICAxICA2My4wNSAgNjMuMDU0ICA0LjM2MDUKUmVzaWR1YWxzIDQ1IDY1MC43MSAgMTQuNDYwICAgICAgICAKICAgICAgICAgICAgIFByKD5GKSAgICAKcG9wMTUgICAgIDAuMDAwNDkyMiAqKioKcG9wNzUgICAgIDAuMDYxMTI1NSAuICAKZHBpICAgICAgIDAuMzU5MzU1MSAgICAKZGRwaSAgICAgIDAuMDQyNDcxMSAqICAKUmVzaWR1YWxzICAgICAgICAgICAgICAKLS0tClNpZ25pZi4gY29kZXM6ICAKICAwICcqKionIDAuMDAxICcqKicgMC4wMSAnKicgMC4wNQogICcuJyAwLjEgJyAnIDEKPiAjIyBkaWQgbm90IGxpbmUgd3JhcCAiU2lnbmlmLiBjb2RlcyIgcHJldmlvdXNseQo+IAo+IAo+ICMjIFBSIzE1NzE4Cj4gZCA8LSBkYXRhLmZyYW1lKGE9MSkKPiBkW2ludGVnZXIoKSwgImEiXSA8LSAyCj4gIyMgd2FybmVkIGluIDMuMC4zLgo+IAo+IAo+ICMjIFBSIzE1NzgxCj4gb3B0aW9ucyhmb28gPSAxKQo+IHByaW50KG9wdGlvbnMoZm9vID0gTlVMTCkpCiRmb28KWzFdIDEKCj4gIyMgcHJpbnRlZCB3cm9uZyB2YWx1ZSBpbiAzLjEuMAo+IAo+IAo+ICMjIGdldFBhcnNlRGF0YSBidWcgcmVwb3J0ZWQgYnkgQW5kcmV3IFJlZGQKPiByYXcgPC0gIgorIGZ1bmN0aW9uKCBhICAgIyBwYXJhbWV0ZXIgMQorICAgICAgICAgICwgYj0yICMgcGFyYW1ldGVyIDIKKyAgICAgICAgICApe2ErYn0iCj4gcCA8LSBwYXJzZSh0ZXh0ID0gcmF3KQo+IGdldFBhcnNlRGF0YShwKQogICBsaW5lMSBjb2wxIGxpbmUyIGNvbDIgaWQgcGFyZW50ICAgICAgICAgIHRva2VuIHRlcm1pbmFsICAgICAgICAgIHRleHQKMzIgICAgIDIgICAgMSAgICAgNCAgIDE1IDMyICAgICAgMCAgICAgICAgICAgZXhwciAgICBGQUxTRSAgICAgICAgICAgICAgCjMgICAgICAyICAgIDEgICAgIDIgICAgOCAgMyAgICAgMzIgICAgICAgRlVOQ1RJT04gICAgIFRSVUUgICAgICBmdW5jdGlvbgo0ICAgICAgMiAgICA5ICAgICAyICAgIDkgIDQgICAgIDMyICAgICAgICAgICAgJygnICAgICBUUlVFICAgICAgICAgICAgICgKNSAgICAgIDIgICAxMSAgICAgMiAgIDExICA1ICAgICAzMiBTWU1CT0xfRk9STUFMUyAgICAgVFJVRSAgICAgICAgICAgICBhCjYgICAgICAyICAgMTUgICAgIDIgICAyNyAgNiAgICAgMzIgICAgICAgIENPTU1FTlQgICAgIFRSVUUgIyBwYXJhbWV0ZXIgMQo4ICAgICAgMyAgIDEwICAgICAzICAgMTAgIDggICAgIDMyICAgICAgICAgICAgJywnICAgICBUUlVFICAgICAgICAgICAgICwKMTAgICAgIDMgICAxMiAgICAgMyAgIDEyIDEwICAgICAzMiBTWU1CT0xfRk9STUFMUyAgICAgVFJVRSAgICAgICAgICAgICBiCjExICAgICAzICAgMTMgICAgIDMgICAxMyAxMSAgICAgMzIgICAgIEVRX0ZPUk1BTFMgICAgIFRSVUUgICAgICAgICAgICAgPQoxMiAgICAgMyAgIDE0ICAgICAzICAgMTQgMTIgICAgIDEzICAgICAgTlVNX0NPTlNUICAgICBUUlVFICAgICAgICAgICAgIDIKMTMgICAgIDMgICAxNCAgICAgMyAgIDE0IDEzICAgICAzMiAgICAgICAgICAgZXhwciAgICBGQUxTRSAgICAgICAgICAgICAgCjE0ICAgICAzICAgMTYgICAgIDMgICAyOCAxNCAgICAgMzIgICAgICAgIENPTU1FTlQgICAgIFRSVUUgIyBwYXJhbWV0ZXIgMgoxNiAgICAgNCAgIDEwICAgICA0ICAgMTAgMTYgICAgIDMyICAgICAgICAgICAgJyknICAgICBUUlVFICAgICAgICAgICAgICkKMjkgICAgIDQgICAxMSAgICAgNCAgIDE1IDI5ICAgICAzMiAgICAgICAgICAgZXhwciAgICBGQUxTRSAgICAgICAgICAgICAgCjE5ICAgICA0ICAgMTEgICAgIDQgICAxMSAxOSAgICAgMjkgICAgICAgICAgICAneycgICAgIFRSVUUgICAgICAgICAgICAgewoyNiAgICAgNCAgIDEyICAgICA0ICAgMTQgMjYgICAgIDI5ICAgICAgICAgICBleHByICAgIEZBTFNFICAgICAgICAgICAgICAKMjAgICAgIDQgICAxMiAgICAgNCAgIDEyIDIwICAgICAyMiAgICAgICAgIFNZTUJPTCAgICAgVFJVRSAgICAgICAgICAgICBhCjIyICAgICA0ICAgMTIgICAgIDQgICAxMiAyMiAgICAgMjYgICAgICAgICAgIGV4cHIgICAgRkFMU0UgICAgICAgICAgICAgIAoyMSAgICAgNCAgIDEzICAgICA0ICAgMTMgMjEgICAgIDI2ICAgICAgICAgICAgJysnICAgICBUUlVFICAgICAgICAgICAgICsKMjMgICAgIDQgICAxNCAgICAgNCAgIDE0IDIzICAgICAyNSAgICAgICAgIFNZTUJPTCAgICAgVFJVRSAgICAgICAgICAgICBiCjI1ICAgICA0ICAgMTQgICAgIDQgICAxNCAyNSAgICAgMjYgICAgICAgICAgIGV4cHIgICAgRkFMU0UgICAgICAgICAgICAgIAoyNCAgICAgNCAgIDE1ICAgICA0ICAgMTUgMjQgICAgIDI5ICAgICAgICAgICAgJ30nICAgICBUUlVFICAgICAgICAgICAgIH0KPiAjIyBHb3Qgc29tZSBwYXJlbnRzIHdyb25nCj4gCj4gCj4gIyMgd2lzaCBvZiBQUiMxNTgxOQo+IHNldC5zZWVkKDEyMyk7IHggPC0gcnVuaWYoMTApOyB5IDwtIHJub3JtKDEwKQo+IG9wIDwtIG9wdGlvbnMoT3V0RGVjID0gIiwiKQo+IGZpdCA8LSBsbSh5IH4geCkKPiBzdW1tYXJ5KGZpdCkKCkNhbGw6CmxtKGZvcm11bGEgPSB5IH4geCkKClJlc2lkdWFsczoKICAgICBNaW4gICAgICAgMVEgICBNZWRpYW4gICAgICAgM1EgICAgICBNYXggCi0xLDYyMTU1IC0wLDMzNDcxICAwLDA1MjM4ICAwLDU1MjI3ICAxLDE5NzQyIAoKQ29lZmZpY2llbnRzOgogICAgICAgICAgICBFc3RpbWF0ZSBTdGQuIEVycm9yIHQgdmFsdWUgUHIoPnx0fCkKKEludGVyY2VwdCkgICAwLDg5OTQgICAgIDAsNjI4MiAgIDEsNDMyICAgIDAsMTkwCnggICAgICAgICAgICAtMSwzMjc1ICAgICAwLDk3ODAgIC0xLDM1NyAgICAwLDIxMgoKUmVzaWR1YWwgc3RhbmRhcmQgZXJyb3I6IDAsODY0OCBvbiA4IGRlZ3JlZXMgb2YgZnJlZWRvbQpNdWx0aXBsZSBSLXNxdWFyZWQ6ICAwLDE4NzIsCUFkanVzdGVkIFItc3F1YXJlZDogIDAsMDg1NTcgCkYtc3RhdGlzdGljOiAxLDg0MiBvbiAxIGFuZCA4IERGLCAgcC12YWx1ZTogMCwyMTE3Cgo+IG9wdGlvbnMob3ApCj4gIyMgdGhvc2UgcGFydHMgdXNpbmcgZm9ybWF0QyBzdGlsbCB1c2VkIGEgZGVjaW1hbCBwb2ludC4KPiAKPiAKPiAjIyBQcmludGluZyBhIGxpc3Qgd2l0aCAiYmFkIiBjb21wb25lbnQgbmFtZXMKPiBMIDwtIGxpc3QoYGFcXGJgID0gMSwgYGFcXGNgID0gMiwgYGFcYmNgID0gImJhY2tzcGFjZSIpCj4gc2V0Q2xhc3MoImZvbyIsIHJlcHJlc2VudGF0aW9uKGBcXENgID0gIm51bWVyaWMiKSkKPiAjIyB0aGUgbmV4dCB0aHJlZSBhbGwgcHJpbnQgY29ycmVjdGx5Ogo+IG5hbWVzKEwpClsxXSAiYVxcYiIgImFcXGMiICJhXGJjIgo+IHVubGlzdChMKQogICAgICAgYVxcYiAgICAgICAgYVxcYyAgICAgICAgYVxiYyAKICAgICAgICAiMSIgICAgICAgICAiMiIgImJhY2tzcGFjZSIgCj4gYXMucGFpcmxpc3QoTCkKJGBhXFxiYApbMV0gMQoKJGBhXFxjYApbMV0gMgoKJGBhXGJjYApbMV0gImJhY2tzcGFjZSIKCj4gY2F0KG5hbWVzKEwpLCAiXG4iKSMgeWVzLCBiYWNrc3BhY2UgaXMgYmFja3NwYWNlIGhlcmUKYVxiIGFcYyBhCGMgCj4gTAokYGFcXGJgClsxXSAxCgokYGFcXGNgClsxXSAyCgokYGFcYmNgClsxXSAiYmFja3NwYWNlIgoKPiBuZXcoImZvbyIpCkFuIG9iamVjdCBvZiBjbGFzcyAiZm9vIgpTbG90ICJcXEMiOgpudW1lcmljKDApCgo+ICMjIHRoZSBsYXN0IHR3byBsaW5lcyBwcmludGVkIHdyb25nbHkgaW4gUiA8PSAzLjEuMQo+IAo+IAo+ICMjIFByaW50aW5nIG9mIGFycmF5cyB3aGVyZSBsYXN0IGRpbSguKSA9PSAwIDoKPiByIDwtIG1hdHJpeCgsMCw0LCBkaW1uYW1lcz1saXN0KFJvdz1OVUxMLCBDb2w9cGFzdGUwKCJjIiwxOjQpKSkKPiByCiAgICAgIENvbApSb3cgICAgYzEgYzIgYzMgYzQKPiB0KHIpICMgZGlkIG5vdCBwcmludCAiUm93IiwgIkNvbCIKICAgIFJvdwpDb2wgCiAgYzEKICBjMgogIGMzCiAgYzQKPiBBIDwtIGFycmF5KGRpbT0zOjAsIGRpbW5hbWVzPWxpc3QoRDE9YygiYSIsImIiLCJjIiksIEQyPWMoIlgiLCJZIiksIEQzPSJJIiwgRDQ9TlVMTCkpCj4gQSAjIyBkaWQgbm90IHByaW50ICphbnl0aGluZyoKPDMgeCAyIHggMSB4IDAgYXJyYXkgb2YgbG9naWNhbD4KICAgRDIKRDEgIFggWQogIGEKICBiCiAgYwoKPiBBWywsIkkiLF0gIyBkaXR0bwo8MyB4IDIgeCAwIGFycmF5IG9mIGxvZ2ljYWw+CiAgIEQyCkQxICBYIFkKICBhCiAgYgogIGMKCj4gQVssLDAsXSAgICMgZGl0dG8KPDMgeCAyIHggMCB4IDAgYXJyYXkgb2YgbG9naWNhbD4KICAgRDIKRDEgIFggWQogIGEKICBiCiAgYwoKPiBhcGVybShBLCBjKDM6MSw0KSkgICAjIGRpdHRvCjwxIHggMiB4IDMgeCAwIGFycmF5IG9mIGxvZ2ljYWw+CiAgIEQyCkQzICBYIFkKICBJCgo+IGFwZXJtKEEsIGMoMToyLCA0OjMpKSMgZGl0dG8KPDMgeCAyIHggMCB4IDEgYXJyYXkgb2YgbG9naWNhbD4KICAgRDIKRDEgIFggWQogIGEKICBiCiAgYwoKPiB1bm5hbWUoQSkgICAgICAgICAgICAjIGRpdHRvCjwzIHggMiB4IDEgeCAwIGFycmF5IG9mIGxvZ2ljYWw+CiAgICAgWywxXSBbLDJdClsxLF0KWzIsXQpbMyxdCgo+IGZvcm1hdChBWywsMSxdKQkgICAgICMgZGl0dG8KPDMgeCAyIHggMCBhcnJheSBvZiBjaGFyYWN0ZXI+CiAgIEQyCkQxICBYIFkKICBhCiAgYgogIGMKCj4gYXBlcm0oQSwgNDoxKSAjIHdhcyBvaywgaXMgdW5jaGFuZ2VkCiwgLCBEMiA9IFgsIEQxID0gYQoKICAgICAgRDMKRDQgICAgIEkKCiwgLCBEMiA9IFksIEQxID0gYQoKICAgICAgRDMKRDQgICAgIEkKCiwgLCBEMiA9IFgsIEQxID0gYgoKICAgICAgRDMKRDQgICAgIEkKCiwgLCBEMiA9IFksIEQxID0gYgoKICAgICAgRDMKRDQgICAgIEkKCiwgLCBEMiA9IFgsIEQxID0gYwoKICAgICAgRDMKRDQgICAgIEkKCiwgLCBEMiA9IFksIEQxID0gYwoKICAgICAgRDMKRDQgICAgIEkKCj4gIyMgc29tZXRpbWVzIG5vdCBwcmludGluZyBhbnl0aGluZyBpbiBSIDw9IDMuMS4xCj4gCj4gCj4gIyMgUHJpbnRpbmcgb2JqZWN0cyB3aXRoIHZlcnkgbG9uZyBuYW1lcyBjdXQgb2ZmIGxpdGVyYWwgdmFsdWVzIChQUiMxNTk5OSkKPiBtYWtlX2xvbmdfbmFtZSA8LSBmdW5jdGlvbihuKQorIHsKKyAgIHBhc3RlMChyZXAoImEiLCBuKSwgY29sbGFwc2UgPSAiIikKKyB9Cj4gc2V0TmFtZXMoVFJVRSwgbWFrZV9sb25nX25hbWUoMTAwMCkpICAjIHZhbHVlIHByaW50ZWQgYXMgVFJVCmFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFJVRSAKPiBzZXROYW1lcyhUUlVFLCBtYWtlX2xvbmdfbmFtZSgxMDAyKSkgICMgdmFsdWUgcHJpbnRlZCBhcyBUCmFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUlVFIAo+IHNldE5hbWVzKFRSVUUsIG1ha2VfbG9uZ19uYW1lKDEwMDMpKSAgIyB2YWx1ZSBub3QgcHJpbnRlZAphYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRSVUUgCj4gIyMKPiAKPiAKPiAjIyBQUiMxNjQzNwo+IGRkIDwtIGRhdGEuZnJhbWUoRiA9IGZhY3RvcihyZXAoYygiQSIsIkIiLCJDIiksIGVhY2ggPSAzKSksIG51bSA9IDE6OSkKPiBjcyA8LSBsaXN0KEYgPSBjb250ci5zdW0oMywgY29udHJhc3RzID0gRkFMU0UpKQo+IGExIDwtIGFvdihudW0gfiBGLCBkYXRhID0gZGQsIGNvbnRyYXN0cyA9IGNzKQo+IG1vZGVsLnRhYmxlcyhhMSwgIm1lYW5zIikKVGFibGVzIG9mIG1lYW5zCkdyYW5kIG1lYW4KICAKNSAKCiBGIApGCkEgQiBDIAoyIDUgOCAKPiB0MSA8LSBUdWtleUhTRChhMSkgIyMgZG9uJ3QgcHJpbnQgdG8gYXZvaWQgcHJlY2lzaW9uIGlzc3Vlcy4KPiBhMiA8LSBhb3YobnVtIH4gMCtGLCBkYXRhID0gZGQsIGNvbnRyYXN0cyA9IGNzKQo+IG1vZGVsLnRhYmxlcyhhMiwgIm1lYW5zIikKVGFibGVzIG9mIG1lYW5zCgogRiAKRgpBIEIgQyAKMiA1IDggCj4gdDIgPC0gVHVrZXlIU0QoYTIpCj4gYXR0cih0MSwgIm9yaWcuY2FsbCIpIDwtIGF0dHIodDIsICJvcmlnLmNhbGwiKQo+IHN0b3BpZm5vdChhbGwuZXF1YWwodDEsIHQyKSkKPiAjIyBmdW5jdGlvbnMgYm90aCBmYWlsZWQgb24gYTIgaW4gUiA8PSAzLjIuMi4KPiAKPiAKPiAjIyBkZXBhcnNlKCkgZGlkIG5vdCBhZGQgcGFyZW5zIGJlZm9yZSBbCj4gc3Vic3RpdHV0ZShhWzFdLCBsaXN0KGEgPSBxdW90ZSh4ICogeSkpKQooeCAqIHkpWzFdCj4gIyMgc2hvdWxkIGJlICh4ICogeSlbMV0sIHdhcyB4ICogeVsxXQo+ICMgQ2hlY2sgYWxsIGxldmVscyBvZiBwcmVjZWRlbmNlCj4gIyAoQ29tbWVudCBvdXQgaWxsZWdhbCBvbmVzKQo+IHF1b3RlKGAkYChhIDo6IGIsIGMpKQphOjpiJGMKPiAjIHF1b3RlKGA6OmAoYSAkIGIsIGMgJCBkKSkKPiBxdW90ZShgW2AoYSAkIGIsIGMgJCBkKSkKYSRiW2MkZF0KPiBxdW90ZShgJGAoYVtiXSwgYykpCmFbYl0kYwo+IHF1b3RlKGBeYChhW2JdLCBjW2RdKSkKYVtiXV5jW2RdCj4gcXVvdGUoYFtgKGEgXiBiLCBjIF4gZCkpCihhXmIpW2NeZF0KPiBxdW90ZShgLWAoYSBeIGIpKQotYV5iCj4gcXVvdGUoYF5gKC1iLCAtZCkpCigtYileLWQKPiBxdW90ZShgOmAoLWIsIC1kKSkKLWI6LWQKPiBxdW90ZShgLWAoYSA6IGIpKQotKGE6YikKPiBxdW90ZShgJWluJWAoYSA6IGIsIGMgOiBkKSkKYTpiICVpbiUgYzpkCj4gcXVvdGUoYDpgKGEgJWluJSBiLCBjICVpbiUgZCkpCihhICVpbiUgYik6KGMgJWluJSBkKQo+IHF1b3RlKGAqYChhICVpbiUgYiwgYyAlaW4lIGQpKQphICVpbiUgYiAqIGMgJWluJSBkCj4gcXVvdGUoYCVpbiVgKGEgKiBiLCBjICogZCkpCihhICogYikgJWluJSAoYyAqIGQpCj4gcXVvdGUoYCtgKGEgKiBiLCBjICogZCkpCmEgKiBiICsgYyAqIGQKPiBxdW90ZShgKmAoYSArIGIsIGMgKyBkKSkKKGEgKyBiKSAqIChjICsgZCkKPiBxdW90ZShgPGAoYSArIGIsIGMgKyBkKSkKYSArIGIgPCBjICsgZAo+IHF1b3RlKGArYChhIDwgYiwgYyA8IGQpKQooYSA8IGIpICsgKGMgPCBkKQo+IHF1b3RlKGAhYChhIDwgYikpCiFhIDwgYgo+IHF1b3RlKGA8YCghYiwgIWQpKQooIWIpIDwgIWQKPiBxdW90ZShgJmAoIWIsICFkKSkKIWIgJiAhZAo+IHF1b3RlKGAhYChhICYgYikpCiEoYSAmIGIpCj4gcXVvdGUoYHxgKGEgJiBiLCBjICYgZCkpCmEgJiBiIHwgYyAmIGQKPiBxdW90ZShgJmAoYSB8IGIsIGMgfCBkKSkKKGEgfCBiKSAmIChjIHwgZCkKPiBxdW90ZShgfmAoYSB8IGIsIGMgfCBkKSkKYSB8IGIgfiBjIHwgZAo+IHF1b3RlKGB8YChhIH4gYiwgYyB+IGQpKQooYSB+IGIpIHwgKGMgfiBkKQo+IHF1b3RlKGAtPmAoYSB+IGIsIGQpKQpgLT5gKGEgfiBiLCBkKQo+IHF1b3RlKGB+YChhIC0+IGIsIGMgLT4gZCkpCihiIDwtIGEpIH4gKGQgPC0gYykKPiBxdW90ZShgPC1gKGEsIGMgLT4gZCkpCmEgPC0gZCA8LSBjCj4gcXVvdGUoYC0+YChhIDwtIGIsIGMpKQpgLT5gKGEgPC0gYiwgYykKPiBxdW90ZShgPWAoYSwgYyA8LSBkKSkKYSA9IGMgPC0gZAo+IHF1b3RlKGA8LWAoYSwgYD1gKGMsIGQpKSkKYSA8LSAoYyA9IGQpCj4gcXVvdGUoYD9gKGA9YChhLCBiKSwgYD1gKGMsIGQpKSkKYD9gKChhID0gYiksIChjID0gZCkpCj4gcXVvdGUoYD1gKGEsIGMgPyBkKSkKYSA9IGA/YChjLCBkKQo+IHF1b3RlKGA/YChhID0gYikpCmA/YChhID0gYikKPiBxdW90ZShgPWAoYiwgP2QpKQpiID0gYD9gKGQpCj4gCj4gIyMgZHB1dCgpIHF1b3RlZCB0aGUgZW1wdHkgc3ltYm9sIChQUiMxNjY4NikKPiBhIDwtIGFsaXN0KG9uZSA9IDEsIHR3byA9ICkKPiBkcHV0KGEpCmxpc3Qob25lID0gMSwgdHdvID0gKQo+ICMjIGRlcGFyc2VkIHR3byB0byBxdW90ZSgpCj4gCj4gIyMgRGVwYXJzaW5nIG9mIHJlcGVhdGVkIHVuYXJ5IG9wZXJhdG9yczsgdGhlIGZpcnN0IDMgd2VyZSAiYWx3YXlzIiBvazoKPiBxdW90ZSh+fngpCn5+eAo+IHF1b3RlKCsreCkKKyt4Cj4gcXVvdGUoLS14KQotLXgKPiBxdW90ZSghIXgpICMgd2FzIGAhKCF4KWAKISF4Cj4gcXVvdGUoPz94KSAjIFN1Ym9wdGltYWwKYD9gKGA/YCh4KSkKPiBxdW90ZSh+Ky0hP3gpICMgZGl0dG86IC4uLi5gP2AoeCkKfistIWA/YCh4KQo+ICMjIGAhYCBubyBsb25nZXIgcHJvZHVjZXMgcGFyZW50aGVzZXMgbm93Cj4gIyMKPiAjIyBUaGVyZSBzaG91bGQgYmUgbm8gcGFyZW50aGVzZXMgKGFsd2F5cyB3b3JrZWQpCj4gcXVvdGUoKyF4KQorIXgKPiAKPiAKPiAjIyBzdW1tYXJ5LmRhdGEuZnJhbWUoKSB3aXRoIE5BcyBpbiBjb2x1bW5zIG9mIGNsYXNzICJEYXRlIiAtLSBQUiMxNjcwOQo+IHggPC0gYygxODAwMDAwMCwgMTg4MTA5MjQsIDE5MDkxMjI3LCAxOTAyNzIzMywgMTkzMTA1MjYsIDE5NjkxMjI4LCBOQSkKPiB4LkRhdGUgPC0gYXMuRGF0ZShhcy5jaGFyYWN0ZXIoeCksIGZvcm1hdCA9ICIlWSVtJWQiKQo+IHN1bW1hcnkoeC5EYXRlKQogICAgICAgIE1pbi4gICAgICAxc3QgUXUuICAgICAgIE1lZGlhbiAgICAgICAgIE1lYW4gICAgICAzcmQgUXUuICAgICAgICAgTWF4LiAKIjE4ODEtMDktMjQiICIxOTAyLTEyLTA0IiAiMTkyMC0wOS0xMCIgIjE5MjMtMDQtMTIiICIxOTQxLTAxLTE3IiAiMTk2OS0xMi0yOCIgCiAgICAgICAgTkEncyAKICAgICAgICAgIjMiIAo+IERGLkRhdGVzIDwtIGRhdGEuZnJhbWUoYzEgPSB4LkRhdGUpCj4gc3VtbWFyeShERi5EYXRlcykgIyMgTkEncyBtaXNzaW5nIGZyb20gb3V0cHV0IDoKICAgICAgIGMxICAgICAgICAgICAgCiBNaW4uICAgOjE4ODEtMDktMjQgIAogMXN0IFF1LjoxOTAyLTEyLTA0ICAKIE1lZGlhbiA6MTkyMC0wOS0xMCAgCiBNZWFuICAgOjE5MjMtMDQtMTIgIAogM3JkIFF1LjoxOTQxLTAxLTE3ICAKIE1heC4gICA6MTk2OS0xMi0yOCAgCiBOQSdzICAgOjMgICAgICAgICAgIAo+IERGLkRhdGVzJHgxIDwtIDE6Nwo+IHN1bW1hcnkoREYuRGF0ZXMpICMjIE5BJ3Mgc3RpbGwgbWlzc2luZwogICAgICAgYzEgICAgICAgICAgICAgICAgICAgeDEgICAgIAogTWluLiAgIDoxODgxLTA5LTI0ICAgTWluLiAgIDoxLjAgIAogMXN0IFF1LjoxOTAyLTEyLTA0ICAgMXN0IFF1LjoyLjUgIAogTWVkaWFuIDoxOTIwLTA5LTEwICAgTWVkaWFuIDo0LjAgIAogTWVhbiAgIDoxOTIzLTA0LTEyICAgTWVhbiAgIDo0LjAgIAogM3JkIFF1LjoxOTQxLTAxLTE3ICAgM3JkIFF1Ljo1LjUgIAogTWF4LiAgIDoxOTY5LTEyLTI4ICAgTWF4LiAgIDo3LjAgIAogTkEncyAgIDozICAgICAgICAgICAgICAgICAgICAgICAgIAo+IERGLkRhdGVzJHgyIDwtIGMoMTo2LCBOQSkKPiAjIyBub3csIE5BJ3Mgc2hvdyBmaW5lOgo+IHN1bW1hcnkoREYuRGF0ZXMpCiAgICAgICBjMSAgICAgICAgICAgICAgICAgICB4MSAgICAgICAgICAgIHgyICAgICAgCiBNaW4uICAgOjE4ODEtMDktMjQgICBNaW4uICAgOjEuMCAgIE1pbi4gICA6MS4wMCAgCiAxc3QgUXUuOjE5MDItMTItMDQgICAxc3QgUXUuOjIuNSAgIDFzdCBRdS46Mi4yNSAgCiBNZWRpYW4gOjE5MjAtMDktMTAgICBNZWRpYW4gOjQuMCAgIE1lZGlhbiA6My41MCAgCiBNZWFuICAgOjE5MjMtMDQtMTIgICBNZWFuICAgOjQuMCAgIE1lYW4gICA6My41MCAgCiAzcmQgUXUuOjE5NDEtMDEtMTcgICAzcmQgUXUuOjUuNSAgIDNyZCBRdS46NC43NSAgCiBNYXguICAgOjE5NjktMTItMjggICBNYXguICAgOjcuMCAgIE1heC4gICA6Ni4wMCAgCiBOQSdzICAgOjMgICAgICAgICAgICAgICAgICAgICAgICAgIE5BJ3MgICA6MSAgICAgCj4gIyMgMiBvZiA0ICBzdW1tYXJ5KC4pIGFib3ZlIGRpZCBub3Qgc2hvdyBOQSdzICBpbiBSIDw9IDMuMi4zCj4gCj4gCj4gIyMgUHJpbnRpbmcgY29tcGxleCBtYXRyaXgKPiBtYXRyaXgoMWksMiwxMykKICAgICBbLDFdIFssMl0gWywzXSBbLDRdIFssNV0gWyw2XSBbLDddIFssOF0gWyw5XSBbLDEwXSBbLDExXSBbLDEyXSBbLDEzXQpbMSxdIDArMWkgMCsxaSAwKzFpIDArMWkgMCsxaSAwKzFpIDArMWkgMCsxaSAwKzFpICAwKzFpICAwKzFpICAwKzFpICAwKzFpClsyLF0gMCsxaSAwKzFpIDArMWkgMCsxaSAwKzFpIDArMWkgMCsxaSAwKzFpIDArMWkgIDArMWkgIDArMWkgIDArMWkgIDArMWkKPiAjIyBTcGFjaW5nIHdhcyB3cm9uZyBpbiBSIDw9IDMuMi40Cj4gCj4gCj4gRSA8LSBleHByZXNzaW9uKHBvbHkgPSB4XjMgLSAzICogeF4yKQo+IHN0cihFKQogIGV4cHJlc3Npb24ocG9seSA9IHheMyAtIDMgKiB4XjIpCj4gIyMgbm8gbG9uZ2VyIHNob3dzICJzdHJ1Y3R1cmUoLi4uLiwgLk5hbWVzID0gLi4pIgo+IAo+IAo+ICMjIHN1bW1hcnkoPGxvZ2ljYWw+KSB3b3JraW5nIHZpYSB0YWJsZSgpOgo+IGxvZ2kgPC0gYyhOQSwgbG9naWNhbCgzKSwgTkEsICFsb2dpY2FsKDIpLCBOQSkKPiBzdW1tYXJ5KGxvZ2kpCiAgIE1vZGUgICBGQUxTRSAgICBUUlVFICAgIE5BJ3MgCmxvZ2ljYWwgICAgICAgMyAgICAgICAyICAgICAgIDMgCj4gc3VtbWFyeShsb2dpWyFpcy5uYShsb2dpKV0pCiAgIE1vZGUgICBGQUxTRSAgICBUUlVFIApsb2dpY2FsICAgICAgIDMgICAgICAgMiAKPiBzdW1tYXJ5KFRSVUUpCiAgIE1vZGUgICAgVFJVRSAKbG9naWNhbCAgICAgICAxIAo+ICMjIHdhcyBhbHdheXMgc2hvd2luZyBjb3VudHMgZm9yIE5BJ3MgZXZlbiB3aGVuIDAgaW4gIDIuOC4wIDw9IFIgPD0gMy4zLjEKPiBpaSA8LSBhcy5pbnRlZ2VyKGxvZ2kpCj4gc3VtbWFyeShpaSkKICAgTWluLiAxc3QgUXUuICBNZWRpYW4gICAgTWVhbiAzcmQgUXUuICAgIE1heC4gICAgTkEncyAKICAgIDAuMCAgICAgMC4wICAgICAwLjAgICAgIDAuNCAgICAgMS4wICAgICAxLjAgICAgICAgMyAKPiBzdW1tYXJ5KGlpWyFpcy5uYShpaSldKQogICBNaW4uIDFzdCBRdS4gIE1lZGlhbiAgICBNZWFuIDNyZCBRdS4gICAgTWF4LiAKICAgIDAuMCAgICAgMC4wICAgICAwLjAgICAgIDAuNCAgICAgMS4wICAgICAxLjAgCj4gc3VtbWFyeSgxTCkKICAgTWluLiAxc3QgUXUuICBNZWRpYW4gICAgTWVhbiAzcmQgUXUuICAgIE1heC4gCiAgICAgIDEgICAgICAgMSAgICAgICAxICAgICAgIDEgICAgICAgMSAgICAgICAxIAo+IAo+IAo+ICMjIHN0ci5kZWZhdWx0KCkgZm9yICJBc0lzIiBhcnJheXMKPiBzdHIoSShtIDwtIG1hdHJpeChwaSoxOjQsIDIpKSkKICdBc0lzJyBudW0gWzE6MiwgMToyXSAzLjE0IDYuMjggOS40MiAxMi41Nwo+ICMjIGRpZCBsb29rIHVnbHkgKGJlY2F1c2Ugb2YgdG9TdHJpbmcoKSBmb3IgbnVtYmVycykgaW4gUiA8PSAzLjMuMQo+IAo+IAo+ICMjIGNoZWNrIGF1dG9tYXRpYyBjb2VyY2lvbnMgZnJvbSBkb3VibGUgdG8gaW50ZWdlcgo+ICMjCj4gIyMgdGhlc2Ugc2hvdWxkIHdvcmsgZHVlIHRvIGNvZXJjaW9uCj4gc3ByaW50ZigiJWQiLCAxKQpbMV0gIjEiCj4gc3ByaW50ZigiJWQiLCBOQV9yZWFsXykKWzFdICJOQSIKPiBzcHJpbnRmKCIlZCIsIGMoMSwyKSkKWzFdICIxIiAiMiIKPiBzcHJpbnRmKCIlZCIsIGMoMSxOQSkpClsxXSAiMSIgICJOQSIKPiBzcHJpbnRmKCIlZCIsIGMoTkEsMSkpClsxXSAiTkEiICIxIiAKPiAjIwo+ICMjIHRoZXNlIHNob3VsZCBmYWlsCj4gYXNzZXJ0RXJyb3JWKCBzcHJpbnRmKCIlZCIsIDEuMSkgKQpBc3NlcnRlZCBlcnJvcjogaW52YWxpZCBmb3JtYXQgJyVkJzsgdXNlIGZvcm1hdCAlZiwgJWUsICVnIG9yICVhIGZvciBudW1lcmljIG9iamVjdHMKPiBhc3NlcnRFcnJvclYoIHNwcmludGYoIiVkIiwgYygxLjEsMSkpICkKQXNzZXJ0ZWQgZXJyb3I6IGludmFsaWQgZm9ybWF0ICclZCc7IHVzZSBmb3JtYXQgJWYsICVlLCAlZyBvciAlYSBmb3IgbnVtZXJpYyBvYmplY3RzCj4gYXNzZXJ0RXJyb3JWKCBzcHJpbnRmKCIlZCIsIGMoMSwxLjEpKSApCkFzc2VydGVkIGVycm9yOiBpbnZhbGlkIGZvcm1hdCAnJWQnOyB1c2UgZm9ybWF0ICVmLCAlZSwgJWcgb3IgJWEgZm9yIG51bWVyaWMgb2JqZWN0cwo+IGFzc2VydEVycm9yViggc3ByaW50ZigiJWQiLCBOYU4pICkKQXNzZXJ0ZWQgZXJyb3I6IGludmFsaWQgZm9ybWF0ICclZCc7IHVzZSBmb3JtYXQgJWYsICVlLCAlZyBvciAlYSBmb3IgbnVtZXJpYyBvYmplY3RzCj4gYXNzZXJ0RXJyb3JWKCBzcHJpbnRmKCIlZCIsIGMoMSxOYU4pKSApCkFzc2VydGVkIGVycm9yOiBpbnZhbGlkIGZvcm1hdCAnJWQnOyB1c2UgZm9ybWF0ICVmLCAlZSwgJWcgb3IgJWEgZm9yIG51bWVyaWMgb2JqZWN0cwo+IAo+IAo+ICMjIGZvcm1hdHRpbmcgb2YgbmFtZWQgcmF3czoKPiBzZXROYW1lcyhhcy5yYXcoMTozKSwgYygiYSIsICJiYmJiIiwgImMiKSkKICAgYSBiYmJiICAgIGMgCiAgMDEgICAwMiAgIDAzIAo+ICMjIHdhcyBxdWl0ZSB1Z2x5IGZvciBSIDw9IDMuNC4yCj4gCj4gCj4gIyMgc3RyKHgpIHdoZW4gaXMudmVjdG9yKHgpIGlzIGZhbHNlIDoKPiBzdHIoc3RydWN0dXJlKGMoYSA9IDEsIGIgPSAyOjcpLCBjb2xvciA9ICJibHVlIikpCiBOYW1lZCBudW0gWzE6N10gMSAyIDMgNCA1IDYgNwogLSBhdHRyKCosICJuYW1lcyIpPSBjaHIgWzE6N10gImEiICJiMSIgImIyIiAiYjMiIC4uLgogLSBhdHRyKCosICJjb2xvciIpPSBjaHIgImJsdWUiCj4gIyMgZGlkIHByaW50ICIgYXRvbWljIFsxOjddIC4uLiIgaW4gUiA8PSAzLjQueAo+IAo+IAo+ICMjIGNoZWNrIHN0b3BpZm5vdChleHBycyA9IC4uLi4pCj4gdHJ5Q2F0Y2goc3RvcGlmbm90KGV4cHJzID0geworICAgYWxsLmVxdWFsKHBpLCAzLjE0MTU5MjcpCisgICAyIDwgMgorICAgY2F0KCJLaWxyb3kgd2FzIGhlcmUhXG4iKQorICAgYWxsKDE6MTAgPCAxMikKKyAgICJhIiA8ICJiIgorIH0pLCBlcnJvciA9IGZ1bmN0aW9uKGUpIGUkbWVzc2FnZSkgLT4gTSA7IGNhdCgiRXJyb3I6ICIsIE0sICJcbiIpCkVycm9yOiAgMiA8IDIgaXMgbm90IFRSVUUgCj4gCj4gdHJ5Q2F0Y2goc3RvcGlmbm90KGV4cHJzID0geworICAgYWxsLmVxdWFsKHBpLCAzLjE0MTU5MjcpCisgICB7IGNhdCgiS2lscm95IHdhcyBoZXJlIVxuIik7IFRSVUUgfQorICAgcGkgPCAzCisgICBjYXQoIndoZXJlYXMgSSB3b24ndCBiZSBwcmludGVkIC4uLlxuIikKKyAgIGFsbCgxOjEwIDwgMTIpCisgICAiYSIgPCAiYiIKKyB9KSwgZXJyb3IgPSBmdW5jdGlvbihlKSBlJG1lc3NhZ2UpIC0+IE0yIDsgY2F0KCJFcnJvcjogIiwgTTIsICJcbiIpCktpbHJveSB3YXMgaGVyZSEKRXJyb3I6ICBwaSA8IDMgaXMgbm90IFRSVUUgCj4gCj4gc3RvcGlmbm90KGV4cHJzID0geworICAgYWxsLmVxdWFsKHBpLCAzLjE0MTU5MjcpCisgICB7IGNhdCgiXG5LaWxyb3kgd2FzIGhlcmUhIC4uLiAiKTsgVFJVRSB9CisgICBwaSA+IDMKKyAgIGFsbCgxOjEwIDwgMTIpCisgICAiYSIgPCAiYiIKKyAgIHsgY2F0KCJhbmQgSSdtIHByaW50ZWQgYXMgd2VsbCAuLi5cbiIpOyBUUlVFfQorIH0pCgpLaWxyb3kgd2FzIGhlcmUhIC4uLiBhbmQgSSdtIHByaW50ZWQgYXMgd2VsbCAuLi4KPiAjIyB3aXRob3V0ICJ7IC4uIH0iIDoKPiBzdG9waWZub3QoZXhwcnMgPSAyID09IDIpCj4gdHJ5KHN0b3BpZm5vdChleHBycyA9IDEgPiAyKSkKRXJyb3IgOiAxID4gMiBpcyBub3QgVFJVRQo+ICMjIHBhc3NpbmcgYW4gZXhwcmVzc2lvbiBvYmplY3Q6Cj4gc3RvcGlmbm90KGV4cHJPYmplY3QgPSBleHByZXNzaW9uKDIgPT0gMiwgcGkgPCA0KSkKPiB0cnlDYXRjaChzdG9waWZub3QoZXhwck9iamVjdCA9IGV4cHJlc3Npb24oCisgICAgICAgICAgICAgICAgICAgICAgICAyID09IDIsCisgICAgICAgICAgICAgICAgICAgICAgICB7IGNhdCgiXG4gS2lscm95IGFnYWluIC4uIik7IFRSVUUgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHBpIDwgNCwKKyAgICAgICAgICAgICAgICAgICAgICAgIDAgPT0gMSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgY2F0KCJcbiBubyB3YXkuLlxuIik7IFRSVUUgfSkpLAorICAgICAgICAgIGVycm9yID0gZnVuY3Rpb24oZSkgZSRtZXNzYWdlKSAtPiBNMwoKIEtpbHJveSBhZ2FpbiAuLj4gY2F0KCJFcnJvcjogIiwgTTMsICJcbiIpCkVycm9yOiAgMCA9PSAxIGlzIG5vdCBUUlVFIAo+ICMjIHdhcyBwYXJ0bHkgbm90IG9rIGZvciBtYW55IHdlZWtzIGluIFItZGV2ZWwsIGVhcmx5IDIwMTgKPiAKPiAKPiAjIyBwcmludC5odGVzdCgpIHdpdGggc21hbGwgJ2RpZ2l0cycKPiBwcmludCh0LnRlc3QoMToyOCksIGRpZ2l0cyA9IDMpCgoJT25lIFNhbXBsZSB0LXRlc3QKCmRhdGE6ICAxOjI4CnQgPSA5LCBkZiA9IDI3LCBwLXZhbHVlID0gNmUtMTAKYWx0ZXJuYXRpdmUgaHlwb3RoZXNpczogdHJ1ZSBtZWFuIGlzIG5vdCBlcXVhbCB0byAwCjk1IHBlcmNlbnQgY29uZmlkZW5jZSBpbnRlcnZhbDoKIDExLjMgMTcuNwpzYW1wbGUgZXN0aW1hdGVzOgptZWFuIG9mIHggCiAgICAgMTQuNSAKCj4gIyMgc2hvd2VkICdkZiA9IDMwJyBmcm9tIHNpZ25pZigqLCBkaWdpdHM9MSkgYW5kIHRvbyBtYW55IGRpZ2l0cyBmb3IgQ0ksIGluIFIgPD0gMy41LjEKPiAKPiAKPiAjIyBzdHIoPGQuZnJhbWUgdy8gYXR0cmliPik6Cj4gdHJlZUEgPC0gdHJlZXMKPiBhdHRyKHRyZWVBLCAic29tZUEiKSA8LSAxOjc3Cj4gc3RyKHRyZWVBKQonZGF0YS5mcmFtZSc6CTMxIG9icy4gb2YgIDMgdmFyaWFibGVzOgogJCBHaXJ0aCA6IG51bSAgOC4zIDguNiA4LjggMTAuNSAxMC43IDEwLjggMTEgMTEgMTEuMSAxMS4yIC4uLgogJCBIZWlnaHQ6IG51bSAgNzAgNjUgNjMgNzIgODEgODMgNjYgNzUgODAgNzUgLi4uCiAkIFZvbHVtZTogbnVtICAxMC4zIDEwLjMgMTAuMiAxNi40IDE4LjggMTkuNyAxNS42IDE4LjIgMjIuNiAxOS45IC4uLgogLSBhdHRyKCosICJzb21lQSIpPSBpbnQgWzE6NzddIDEgMiAzIDQgNSA2IDcgOCA5IDEwIC4uLgo+ICMjIG5vdyBzaG93cyB0aGUgKmxlbmd0aCogb2YgInNvbWVBIgo+IAo+IAo+ICMjIHN1bW1hcnlScHJvZigpIGJ1ZyBQUiMxNTg4NiAgKyAiUnByb2YoKSBub3QgZW5hYmxlZCIgUFIjMTc4MzYKPiBpZihjYXBhYmlsaXRpZXMoIlJwcm9mIikpIHsKKyAgICAgUnByb2YodGYgPC0gdGVtcGZpbGUoIlJwcm9mLm91dCIsIHRtcGRpciA9IGdldHdkKCkpLCBtZW1vcnkucHJvZmlsaW5nPVRSVUUsIGxpbmUucHJvZmlsaW5nPUZBTFNFKQorICAgICBvdXQgPC0gbGFwcGx5KDE6MTAwMDAsIHJub3JtLCBuPSA1MTIpCisgICAgIFJwcm9mKE5VTEwpCisgICAgIGlmKGludGVyYWN0aXZlKCkpCisgICAgICAgICBwcmludChsZW5ndGgocmVhZExpbmVzKHRmKSkpICMgY2EuIDEwIC4uIDIwIGxpbmVzCisgICAgIG9wIDwtIG9wdGlvbnMod2FybiA9IDIpICMgbm8gd2FybmluZ3MsIGV2ZW4gIQorICAgICBmb3IgKGNzIGluIDE6MjEpIHMgPC0gc3VtbWFyeVJwcm9mKHRmLCBtZW1vcnk9InRzZXJpZXMiLCBjaHVua3NpemU9Y3MpCisgICAgICMjICJhbHdheXMiIHRyaWdnZXJlZCBhbiBlcnJvciAob3IgYSB3YXJuaW5nKSBpbiBSIDw9IDMuNi4zCisgICAgIG9wdGlvbnMob3ApCisgICAgIHVubGluayh0ZikKKyB9Cj4gCj4gCj4gIyMgcHJpbnRpbmcgKm5hbWVkKiBjb21wbGV4IHZlY3RvcnMgKCpub3QqIGFycmF5cyksIFBSIzE3ODY4IChhbmQgUFIjMTgwMTkpOgo+IGEgPC0gMToxMjsgKHogPC0gYSArIGEqMWkpOyBuYW1lcyh6KSA8LSBsZXR0ZXJzW3NlcV9hbG9uZyh6KV07IHoKIFsxXSAgMSsgMWkgIDIrIDJpICAzKyAzaSAgNCsgNGkgIDUrIDVpICA2KyA2aSAgNysgN2kgIDgrIDhpICA5KyA5aSAxMCsxMGkKWzExXSAxMSsxMWkgMTIrMTJpCiAgICAgYSAgICAgIGIgICAgICBjICAgICAgZCAgICAgIGUgICAgICBmICAgICAgZyAgICAgIGggICAgICBpICAgICAgaiAgICAgIGsgCiAxKyAxaSAgMisgMmkgIDMrIDNpICA0KyA0aSAgNSsgNWkgIDYrIDZpICA3KyA3aSAgOCsgOGkgIDkrIDlpIDEwKzEwaSAxMSsxMWkKICAgICBsIAoxMisxMmkKPiAjIyBmaXhlZCBpbiBSLWRldmVsIGluIEp1bHkgMjAyMDsgIFIgNC4wLjMgcGF0Y2hlZCBvbiBEZWMgMjYsIDIwMjAKPiAKPiAKPiAjIyBpZGVudGljYWwoKikgb24gIi4uLiIgb2JqZWN0Cj4gKGRkZCA8LSAoZnVuY3Rpb24oLi4uKSBlbnZpcm9ubWVudCgpKSgxKSQuLi4pICMgPC4uLj4KPC4uLj4KPiAgZGQyIDwtIChmdW5jdGlvbiguLi4pIGVudmlyb25tZW50KCkpKDEpJC4uLgo+IHN0b3BpZm5vdCggaWRlbnRpY2FsKGRkZCwgZGQyKSApCj4gIyMgSW4gUiA8PSA0LjAuMywgIHByaW50ZWQgdG8gY29uc29sZSAobm8gd2FybmluZywgbm8gbWVzc2FnZSEpOgo+ICMjICJVbmtub3duIFR5cGU6IC4uLiAoMTEpIgo+IAo+IAo+ICMjIHByaW50Q29lZm1hdCgpIHNob3VsZCBrZWVwIE5hTiB2YWx1ZXMgKFBSIzE3MzM2KQo+ICMjY20gPC0gc3VtbWFyeShsbShjKDAsMCwwKSB+IDEpKSRjb2VmZmljaWVudHMKPiBjbSA8LSBjYmluZChFc3RpbWF0ZSA9IDAsIFNFID0gMCwgdCA9IE5hTiwgIlByKD58dHwpIiA9IE5hTikKPiBwcmludENvZWZtYXQoY20pICAjIE5hTidzIHdlcmUgcmVwbGFjZWQgYnkgTkEgaW4gUiA8IDQuMS4wCiAgICAgRXN0aW1hdGUgU0UgICB0IFByKD58dHwpClsxLF0gICAgICAgIDAgIDAgTmFOICAgICAgTmFOCj4gCj4gCj4gIyMgZGVwYXJzZSgpIHdyYXBzIGNmbG93IGJvZGllcyB3aGVuIGRlZXBseSBidXJyaWVkIHRocm91Z2ggYSBMSFMgKFBSIzE4MjMyKQo+ICMjCj4gIyMgVGhlc2UgZGlkbid0IHByaW50IHRoZSBzYW1lIGJlZm9yZSBmaXgsIHRoZSBicXVvdGUoKSBleHByZXNzaW9uCj4gIyMgbWlzc2VkIHBhcmVudGhlc2VzCj4gIHF1b3RlKDEgKyAgICAgICAgKGlmIChUUlVFKSAyKSAgKyAzKQoxICsgKGlmIChUUlVFKSAyKSArIDMKPiBicXVvdGUoMSArIC4ocXVvdGUoaWYgKFRSVUUpIDIpKSArIDMpCjEgKyAoaWYgKFRSVUUpIDIpICsgMwo+IGJxdW90ZSgyICogLihxdW90ZShpZiAoVFJVRSkgMiBlbHNlIDMpKSAvIDQpCjIgKiAoaWYgKFRSVUUpIDIgZWxzZSAzKS80Cj4gIyMgRnJvbSBTdWhhcnRvLiBGYWlsZWQgYGxlZnRgIHN0YXRlIHdhc24ndCBwcm9wZXJseSBmb3J3YXJkZWQgYWNyb3NzIG9wZXJhdG9ycwo+IGJxdW90ZSgxICsgKysuKHF1b3RlKGlmIChUUlVFKSAyKSkgKyAzKQoxICsgKysoaWYgKFRSVUUpIDIpICsgMwo+IGJxdW90ZSgxXi0gLiAgKHF1b3RlKGlmIChUUlVFKSAyKSkgKyAzKQoxXi0oaWYgKFRSVUUpIDIpICsgMwo+ICMjIChmb3VuZCB3aGVuIGZpZGRsaW5nIHcvIGNhc2VzIGJlbG93KToKPiBxdW90ZShgLWAoMSArIGlmKEwpIDIsIDMrNCkpIyB3cm9uZ2x5IHdhcyAgMSArIGlmIChMKSAyIC0gKDMgKyA0KQoxICsgKGlmIChMKSAyKSAtICgzICsgNCkKPiAjIwo+ICMjX18gQWxsIHRoZSBmb2xsb3dpbmcgd2VyZSBvayBpbiBSIDw9IDQuMS54IGFscmVhZHkgX18KPiBicXVvdGUoMSArIC4ocXVvdGUoaWYgKFRSVUUpIDIpKSBeIDMpICMgYWxyZWFkeSBjb3JyZWN0IHByZXZpb3VzbHkKMSArIChpZiAoVFJVRSkgMileMwo+ICMjIG90aGVyIGNvbnN0cnVjdHMgY2FuY2VsIHRoZSBMSFMgc3RhdGUgPT0+IGBpZmAgY2FsbCBpc24ndCB3cmFwcGVkOgo+IGJxdW90ZSgxICsgLihxdW90ZSggICBmKGlmIChUUlVFKSAyKSkpICsgMykKMSArIGYoaWYgKFRSVUUpIDIpICsgMwo+IGJxdW90ZSgxICsgLihxdW90ZSgoMiArIGlmIChUUlVFKSAzKSkpICsgNCkKMSArICgyICsgaWYgKFRSVUUpIDMpICsgNAo+ICMjIGNmbG93IGJvZGllcyBhcmUgb25seSB3cmFwcGVkIGlmIG5lZWRlZCA9PT4gbm8gcGFyZW50aGVzZXMgaGVyZSA6Cj4gcXVvdGUoYSA8LSBpZiAoVFJVRSkgMSkKYSA8LSBpZiAoVFJVRSkgMQo+ICMjIHByaW50IHRoZSBzYW1lCj4gcXVvdGUoYF5gKC0xLCAyKSkKKC0xKV4yCj4gcXVvdGUoKC0xKV4yKQooLTEpXjIKPiAjIyBubyBwYXJlbnRoZXNlczoKPiBxdW90ZSgxXi0yKQoxXi0yCj4gcXVvdGUoMV4tMiArIDMpCjFeLTIgKyAzCj4gIyMgVGhlICJmb3JtdWxhIiBjYXNlIG9mIEFkcmlhbiBEdXNhIChtYWludGFpbmVyIG9mIFFDQSk7IFItZGV2ZWwgTUwsIE5vdi4xNSwgMjAyMQo+IHF1b3RlKEEgKyB+QiArIEMgfiBEKSAjIG5vIHBhcmVucwpBICsgfkIgKyBDIH4gRAo+ICMjICdzaW1wbGUnIGJpbmFyeSBvcAo+IHF1b3RlKGEkImIiKQphJGIKPiAjIyBXaGVuIGNmbG93IGJvZHkgaXMgYnVycmllZCBkZWVwbHkgdGhyb3VnaCB0aGUgcmlnaHQsIGRvbid0IHJld3JhcAo+ICMjIHVubmVjZXNzYXJpbHkuIFRoZXJlIHNob3VsZCBiZSBvbmx5IG9uZSBzZXQgb2YgcGFyZW50aGVzZXMuCj4gIyMgQ2FzZXMgd2hlcmUgUi1kZXZlbCA4MTIxMSBzdGlsbCBnYXZlIHVubmVlZGVkIHBhcmVuczoKPiBxdW90ZShgXmAoMSArIGlmKEwpIDIsIDMpKQooMSArIGlmIChMKSAyKV4zCj4gcXVvdGUoYCpgKDEgLSBpZihMKSAyIGVsc2UgMjIsIDMpKQooMSAtIGlmIChMKSAyIGVsc2UgMjIpICogMwo+IHF1b3RlKGBeYCgxICsgcmVwZWF0IDIsIDMpKQooMSArIHJlcGVhdCAyKV4zCj4gcXVvdGUoYCpgKDEgKyByZXBlYXQgMiwgMykpCigxICsgcmVwZWF0IDIpICogMwo+IHF1b3RlKGA9YCgxICsgcmVwZWF0IDIsIDMpKSMgKm5vKiBwYXJlbnMgaW4gUiA8PSA0LjEueAoxICsgKHJlcGVhdCAyKSA9IDMKPiBxdW90ZShgPWAoMSArIGArYCgyLCByZXBlYXQgMyksIDQpKQoxICsgKDIgKyByZXBlYXQgMykgPSA0Cj4gcXVvdGUoYCtgKGA8LWAoMSwgYD1gKDIsIHJlcGVhdCAzKSksIDQpKSAjICgxIDwtICgyID0gLi4KKDEgPC0gKDIgPSByZXBlYXQgMykpICsgNAo+IHF1b3RlKGArYChgOmAoMSwgYD1gKDIsIHJlcGVhdCAzKSksIDQpKQoxOigyID0gcmVwZWF0IDMpICsgNAo+ICMjIE5vIHBhcmVudGhlc2VzIHdoZW4gdGhlIGNmbG93IGZvcm0gaXMgdHJhaWxpbmcKPiBxdW90ZSgxICsgK3JlcGVhdCAyKQoxICsgK3JlcGVhdCAyCj4gcXVvdGUoYDwtYCgxLCArcmVwZWF0IDIpKQoxIDwtICtyZXBlYXQgMgo+IHF1b3RlKDFeK3JlcGVhdCAyKQoxXityZXBlYXQgMgo+IHF1b3RlKGAkYCgxLCArcmVwZWF0IDIpKQpgJGAoMSwgK3JlcGVhdCAyKQo+ICMjIE1vcmUgY2FzZXMgd2hlcmUgcGFyZW5zIGFyZSBuZWVkZWQKPiBxdW90ZShgXmAoYCtgKHJlcGVhdCAxLCAyKSwgMykpCigocmVwZWF0IDEpICsgMileMwo+IHF1b3RlKGArYChgK2AocmVwZWF0IDEsIDIpLCAzKSkKKHJlcGVhdCAxKSArIDIgKyAzCj4gcXVvdGUoYCtgKGArYChgK2AocmVwZWF0IDEsIHJlcGVhdCAyKSwgcmVwZWF0IDMpLCA0KSkKKHJlcGVhdCAxKSArIChyZXBlYXQgMikgKyAocmVwZWF0IDMpICsgNAo+ICMjX18gZW5kIHsgYWxsIGZpbmUgaW4gb2xkZXIgUiB9Cj4gCj4gIyMgVW5hcnkgb3BlcmF0b3JzIGFyZSBwYXJlbnRoZXNpc2VkIGlmIG5lZWRlZDsgcHJpbnQgdGhlIHNhbWU6Cj4gcXVvdGUoKC1hKSRiKQooLWEpJGIKPiBxdW90ZShgJGAoLWEsIGIpKSAgICAjIG5vIHBhcmVucyBpbiBSIDw9IDQuMS54CigtYSkkYgo+ICMjIEJpbmFyeSBvcGVyYXRvcnMgYXJlIHBhcmVudGhlc2lzZWQgb24gdGhlIExIUyBvZiBgJGAuIDsgdGhlIHNhbWU6Cj4gcXVvdGUoKDEgKyAxKSRiKQooMSArIDEpJGIKPiBxdW90ZShgJGAoMSArIDEsIGIpKSAjIG5vIHBhcmVucyBpbiBSIDw9IDQuMS54CigxICsgMSkkYgo+ICMjCj4gIyMgVW5wYXJzZWFibGUgZXhwcmVzc2lvbnMgYXJlIGRlcGFyc2VkIGluIHByZWZpeGVkIGZvcm0KPiBxdW90ZShgJGAoMSkpICAgICAgICMgd2FzIDEkTlVMTCAgaW4gUiA8PSA0LjEueApgJGAoMSkKPiBxdW90ZShgJGAoMSwgMiwgMykpICMgd2FzIDEkMgpgJGAoMSwgMiwgMykKPiBxdW90ZShgJGAoMSwgTkFfY2hhcmFjdGVyXykpICMgd2FzIDEkTkFfY2hhci4uCmAkYCgxLCBOQV9jaGFyYWN0ZXJfKQo+IHF1b3RlKGAkYCgxLCBpZihMKSAyKSkgICAjIHdhcyAxJGlmIChMKSAyCmAkYCgxLCBpZiAoTCkgMikKPiBxdW90ZShgJGAoYCRgKDEsIGlmKEwpIDIpLCAzKSkKYCRgKGAkYCgxLCBpZiAoTCkgMiksIDMpCj4gIyMgTm8gcGFyZW5zIGJlY2F1c2UgcHJlZml4IGZvcm0KPiBxdW90ZShgJGAoMSArIHJlcGVhdCAyLCAzKSkKYCRgKDEgKyByZXBlYXQgMiwgMykKPiBxdW90ZShgPWAoYCRgKDEsIGAkYCgyLCByZXBlYXQgMykpLCA0KSkKYCRgKDEsIGAkYCgyLCByZXBlYXQgMykpID0gNAo+ICMjIHRoZXNlIHdlcmUgcmVhbGx5IGJhZCBpbiAgUiA8PSA0LjEueAo+IAo+IAo+ICMjIERlcGFyc2luZyBvZiAhICAtLSBQUiMxODI4NAo+ICMjIG5vIHBhcmVucyBpbiAzLjUuMCA8PSBSIDw9IDQuMS54Ogo+IHF1b3RlKDEgKyAgYCFgKDIpICsgMykgLT4geDsgeAoxICsgKCEyKSArIDMKPiBxdW90ZSgxICsgK2AhYCgyKSArIDMpCjEgKyArKCEyKSArIDMKPiBxdW90ZSgxICsgYCFgKCEyKSArIDMpCjEgKyAoISEyKSArIDMKPiBxdW90ZSgxICsgYCFgKGlmKEwpIDIpICsgMykKMSArICghaWYgKEwpIDIpICsgMwo+ICMjIG9rIGluIDMuNS4wIDw9IFIgPD0gNC4xLng6Cj4gcXVvdGUoYCZgKGEgPCAhYiwgZCkpCmEgPCAhYiAmIGQKPiAjIyBkZXBhcnNlLS1wYXJzZSByb3VuZHRyaXAgaXMgc3RhYmxlIChiYXNpY2FsbHkpCj4gc3RvcGlmbm90KGV2YWwoeCkgPT0gNCwgZXZhbChwYXJzZSh0ZXh0ID0gZGVwYXJzZSh4KSkpID09IDQpCj4gIyMgZXZhbCgpZWQgdG8gMSBzaW5jZSBSIDMuNS4wIHthbHNvIGJlY2F1c2Ugb2YgdGhlIHdlYWsgcHJlY2VkZW5jZSBvZiBgIWB9Cj4gCg==