CiMgU29tZSBvZiB0aGlzIHdpbGwgbmVlZCByZS1ldmFsdWF0aW9uIHBvc3QtTFNCLiAgVGhlIFNWSWRpciBpcyB0aGVyZQojIGJlY2F1c2UgdGhlIGxpbmsgYXBwZWFyZWQgYnJva2VuLiAgVGhlIHJlc3QgaXMgZm9yIGVhc3kgY29tcGlsYXRpb24sCiMgdGhlIHRyYWRlb2ZmIG9wZW4gdG8gZGlzY3Vzc2lvbi4gIChMQzk1NykKCiVkZWZpbmUJU1ZJZGlyCQkvZXRjL3JjLmQvaW5pdC5kCiV7IT9fZGVmYXVsdGRvY2RpcjolZGVmaW5lCV9kZWZhdWx0ZG9jZGlyCSV7X3ByZWZpeH0vc2hhcmUvZG9jL3BhY2thZ2VzfQoleyE/U1ZJY2RpcjolZGVmaW5lCQlTVkljZGlyCQkvZXRjL3N5c2NvbmZpZy9kYWVtb25zfQoKJWRlZmluZSBfbWFuZGlyCQkle19wcmVmaXh9L3NoYXJlL21hbi9lbgolZGVmaW5lIF9zeXNjb25mZGlyCS9ldGMvc3NoCiVkZWZpbmUJX2xpYmV4ZWNkaXIJJXtfbGliZGlyfS9zc2gKCiMgRG8gd2Ugd2FudCB0byBkaXNhYmxlIHJvb3RfbG9naW4/ICgxPXllcyAwPW5vKQolZGVmaW5lIG5vX3Jvb3RfbG9naW4gMAoKI29sZCBjdnMgc3R1ZmYuICBwbGVhc2UgdXBkYXRlIGJlZm9yZSB1c2UuICBtYXkgYmUgZGVwcmVjYXRlZC4KJWRlZmluZSB1c2Vfc3RhYmxlCTEKJWRlZmluZSB2ZXJzaW9uIAk2LjBwMQolaWYgJXt1c2Vfc3RhYmxlfQogICVkZWZpbmUgY3ZzCQkle25pbH0KICAlZGVmaW5lIHJlbGVhc2UgCTEKJWVsc2UKICAlZGVmaW5lIGN2cwkJY3ZzMjAwNTAzMTUKICAlZGVmaW5lIHJlbGVhc2UgCTByMQolZW5kaWYKJWRlZmluZSB4c2EJCXgxMS1zc2gtYXNrcGFzcwkJCiVkZWZpbmUgYXNrcGFzcwkJJXt4c2F9LTEuMi40LjEKCiMgT3BlblNTSCBwcml2aWxlZ2Ugc2VwYXJhdGlvbiByZXF1aXJlcyBhIHVzZXIgJiBncm91cCBJRAolZGVmaW5lIHNzaGRfdWlkICAgIDY3CiVkZWZpbmUgc3NoZF9naWQgICAgNjcKCk5hbWUgICAgICAgIAk6IG9wZW5zc2gKVmVyc2lvbiAgICAgCTogJXt2ZXJzaW9ufSV7Y3ZzfQpSZWxlYXNlICAgICAJOiAle3JlbGVhc2V9Ckdyb3VwICAgICAgIAk6IFN5c3RlbS9OZXR3b3JrCgpTdW1tYXJ5ICAgICAJOiBPcGVuU1NIIGZyZWUgU2VjdXJlIFNoZWxsIChTU0gpIGltcGxlbWVudGF0aW9uLgpTdW1tYXJ5KGRlKSAJOiBPcGVuU1NIIC0gZnJlaWUgSW1wbGVtZW50YXRpb24gZGVyIFNlY3VyZSBTaGVsbCAoU1NIKS4KU3VtbWFyeShlcykgCTogT3BlblNTSCBpbXBsZW1lbnRhY2nzbiBsaWJyZSBkZSBTZWN1cmUgU2hlbGwgKFNTSCkuClN1bW1hcnkoZnIpIAk6IEltcGzpbWVudGF0aW9uIGxpYnJlIGR1IHNoZWxsIHPpY3VyaXPpIE9wZW5TU0ggKFNTSCkuClN1bW1hcnkoaXQpIAk6IEltcGxlbWVudGF6aW9uZSBncmF0dWl0YSBPcGVuU1NIIGRlbGxhIFNlY3VyZSBTaGVsbC4KU3VtbWFyeShwdCkgCTogSW1wbGVtZW50YefjbyBsaXZyZSBPcGVuU1NIIGRvIHByb3RvY29sbyAnU2VjdXJlIFNoZWxsJyAoU1NIKS4KU3VtbWFyeShwdF9CUikgCTogSW1wbGVtZW50YefjbyBsaXZyZSBPcGVuU1NIIGRvIHByb3RvY29sbyBTZWN1cmUgU2hlbGwgKFNTSCkuCgpDb3B5cmlnaHQgICAJOiBCU0QKUGFja2FnZXIgICAgCTogUmF5bXVuZCBXaWxsIDxyYXlAY2FsZGVyYS5kZT4KVVJMICAgICAgICAgCTogaHR0cDovL3d3dy5vcGVuc3NoLmNvbS8KCk9ic29sZXRlcyAgIAk6IHNzaCwgc3NoLWNsaWVudHMsIG9wZW5zc2gtY2xpZW50cwoKQnVpbGRSb290ICAgCTogL3RtcC8le25hbWV9LSV7dmVyc2lvbn0KQnVpbGRSZXF1aXJlcwk6IFhGcmVlODYtaW1ha2UKCiMgJXt1c2Vfc3RhYmxlfT09MToJZnRwOi8vZnRwLm9wZW5ic2Qub3JnL3B1Yi9PcGVuQlNEL09wZW5TU0gvcG9ydGFibGUKIyAle3VzZV9zdGFibGV9PT0wOgk6cHNlcnZlcjpjdnNAYmFzcy5kaXJlY3RoaXQuY29tOi9jdnMvb3BlbnNzaF9jdnMKU291cmNlMDogc2VlLWFib3ZlOi8uLi4vb3BlbnNzaC0le3ZlcnNpb259LnRhci5negolaWYgJXt1c2Vfc3RhYmxlfQpTb3VyY2UxOiBzZWUtYWJvdmU6Ly4uLi9vcGVuc3NoLSV7dmVyc2lvbn0udGFyLmd6LmFzYwolZW5kaWYKU291cmNlMjogaHR0cDovL3d3dy5qbWtub2JsZS5uZXQvc29mdHdhcmUvJXt4c2F9LyV7YXNrcGFzc30udGFyLmd6ClNvdXJjZTM6IGh0dHA6Ly93d3cub3BlbnNzaC5jb20vZmFxLmh0bWwKCiVQYWNrYWdlIHNlcnZlcgpHcm91cCAgICAgICAJOiBTeXN0ZW0vTmV0d29yawpSZXF1aXJlcyAgICAJOiBvcGVuc3NoID0gJXt2ZXJzaW9ufQpPYnNvbGV0ZXMgICAJOiBzc2gtc2VydmVyCgpTdW1tYXJ5ICAgICAJOiBPcGVuU1NIIFNlY3VyZSBTaGVsbCBwcm90b2NvbCBzZXJ2ZXIgKHNzaGQpLgpTdW1tYXJ5KGRlKSAJOiBPcGVuU1NIIFNlY3VyZSBTaGVsbCBQcm90b2NvbC1TZXJ2ZXIgKHNzaGQpLgpTdW1tYXJ5KGVzKSAJOiBTZXJ2aWRvciBkZWwgcHJvdG9jb2xvIE9wZW5TU0ggU2VjdXJlIFNoZWxsIChzc2hkKS4KU3VtbWFyeShmcikgCTogU2VydmV1ciBkZSBwcm90b2NvbGUgZHUgc2hlbGwgc+ljdXJpc+kgT3BlblNTSCAoc3NoZCkuClN1bW1hcnkoaXQpIAk6IFNlcnZlciBPcGVuU1NIIHBlciBpbCBwcm90b2NvbGxvIFNlY3VyZSBTaGVsbCAoc3NoZCkuClN1bW1hcnkocHQpIAk6IFNlcnZpZG9yIGRvIHByb3RvY29sbyAnU2VjdXJlIFNoZWxsJyBPcGVuU1NIIChzc2hkKS4KU3VtbWFyeShwdF9CUikgCTogU2Vydmlkb3IgZG8gcHJvdG9jb2xvIFNlY3VyZSBTaGVsbCBPcGVuU1NIIChzc2hkKS4KCgolUGFja2FnZSBhc2twYXNzCkdyb3VwICAgICAgIAk6IFN5c3RlbS9OZXR3b3JrClJlcXVpcmVzICAgIAk6IG9wZW5zc2ggPSAle3ZlcnNpb259ClVSTCAgICAgICAJOiBodHRwOi8vd3d3Lmpta25vYmxlLm5ldC9zb2Z0d2FyZS94MTEtc3NoLWFza3Bhc3MvCk9ic29sZXRlcyAgIAk6IHNzaC1leHRyYXMKClN1bW1hcnkgICAgIAk6IE9wZW5TU0ggWDExIHBhc3MtcGhyYXNlIGRpYWxvZy4KU3VtbWFyeShkZSkgCTogT3BlblNTSCBYMTEgUGFzc3dvcnQtRGlhbG9nLgpTdW1tYXJ5KGVzKSAJOiBBcGxpY2FjafNuIGRlIHBldGljafNuIGRlIGZyYXNlIGNsYXZlIE9wZW5TU0ggWDExLgpTdW1tYXJ5KGZyKSAJOiBEaWFsb2d1ZSBwYXNzLXBocmFzZSBYMTEgZCdPcGVuU1NILgpTdW1tYXJ5KGl0KSAJOiBGaW5lc3RyYSBkaSBkaWFsb2dvIFgxMSBwZXIgbGEgZnJhc2Ugc2VncmV0YSBkaSBPcGVuU1NILgpTdW1tYXJ5KHB0KSAJOiBEaeFsb2dvIGRlIHBlZGlkbyBkZSBzZW5oYSBwYXJhIFgxMSBkbyBPcGVuU1NILgpTdW1tYXJ5KHB0X0JSKSAJOiBEaeFsb2dvIGRlIHBlZGlkbyBkZSBzZW5oYSBwYXJhIFgxMSBkbyBPcGVuU1NILgoKCiVEZXNjcmlwdGlvbgpPcGVuU1NIIChTZWN1cmUgU2hlbGwpIHByb3ZpZGVzIGFjY2VzcyB0byBhIHJlbW90ZSBzeXN0ZW0uIEl0IHJlcGxhY2VzCnRlbG5ldCwgcmxvZ2luLCAgcmV4ZWMsIGFuZCByc2gsIGFuZCBwcm92aWRlcyBzZWN1cmUgZW5jcnlwdGVkIApjb21tdW5pY2F0aW9ucyBiZXR3ZWVuIHR3byB1bnRydXN0ZWQgaG9zdHMgb3ZlciBhbiBpbnNlY3VyZSBuZXR3b3JrLiAgClgxMSBjb25uZWN0aW9ucyBhbmQgYXJiaXRyYXJ5IFRDUC9JUCBwb3J0cyBjYW4gYWxzbyBiZSBmb3J3YXJkZWQgb3ZlciAKdGhlIHNlY3VyZSBjaGFubmVsLgoKJURlc2NyaXB0aW9uIC1sIGRlCk9wZW5TU0ggKFNlY3VyZSBTaGVsbCkgc3RlbGx0IGRlbiBadWdhbmcgenUgYW5kZXJlbiBSZWNobmVybiBoZXIuIEVzIGVyc2V0enQKdGVsbmV0LCBybG9naW4sIHJleGVjIHVuZCByc2ggdW5kIHN0ZWxsdCBlaW5lIHNpY2hlcmUsIHZlcnNjaGz8c3NlbHRlClZlcmJpbmR1bmcgendpc2NoZW4gendlaSBuaWNodCB2ZXJ0cmF1ZW5zd/xyZGlnZW4gSG9zdHMg/GJlciBlaW5lIHVuc2ljaGVyZXMKTmV0endlcmsgaGVyLiBYMTEgVmVyYmluZHVuZ2VuIHVuZCBiZWxpZWJpZ2UgYW5kZXJlIFRDUC9JUCBQb3J0cyBr9m5uZW4gZWJlbnNvCvxiZXIgZGVuIHNpY2hlcmVuIENoYW5uZWwgd2VpdGVyZ2VsZWl0ZXQgd2VyZGVuLgoKJURlc2NyaXB0aW9uIC1sIGVzCk9wZW5TU0ggKFNlY3VyZSBTaGVsbCkgcHJvcG9yY2lvbmEgYWNjZXNvIGEgc2lzdGVtYXMgcmVtb3Rvcy4gUmVlbXBsYXphIGEKdGVsbmV0LCBybG9naW4sIHJleGVjLCB5IHJzaCwgeSBwcm9wb3JjaW9uYSBjb211bmljYWNpb25lcyBzZWd1cmFzIGVuY3JpcHRhZGFzCmVudHJlIGRvcyBlcXVpcG9zIGVudHJlIGxvcyBxdWUgbm8gc2UgaGEgZXN0YWJsZWNpZG8gY29uZmlhbnphIGEgdHJhdulzIGRlIHVuYQpyZWQgaW5zZWd1cmEuIExhcyBjb25leGlvbmVzIFgxMSB5IHB1ZXJ0b3MgVENQL0lQIGFyYml0cmFyaW9zIHRhbWJp6W4gcHVlZGVuCnNlciBjYW5hbGl6YWRhcyBzb2JyZSBlbCBjYW5hbCBzZWd1cm8uCgolRGVzY3JpcHRpb24gLWwgZnIKT3BlblNTSCAoU2VjdXJlIFNoZWxsKSBmb3Vybml0IHVuIGFjY+hzIOAgdW4gc3lzdOhtZSBkaXN0YW50LiBJbCByZW1wbGFjZQp0ZWxuZXQsIHJsb2dpbiwgcmV4ZWMgZXQgcnNoLCB0b3V0IGVuIGFzc3VyYW50IGRlcyBjb21tdW5pY2F0aW9ucyBjcnlwdOllcwpzZWN1cmlz6WVzIGVudHJlIGRldXggaPR0ZXMgbm9uIGZpYWJpbGlz6XMgc3VyIHVuIHLpc2VhdSBub24gc+ljdXJpc+kuIERlcwpjb25uZXhpb25zIFgxMSBldCBkZXMgcG9ydHMgVENQL0lQIGFyYml0cmFpcmVzIHBldXZlbnQg6WdhbGVtZW50IOp0cmUKdHJhbnNtaXMgc3VyIGxlIGNhbmFsIHPpY3VyaXPpLgoKJURlc2NyaXB0aW9uIC1sIGl0Ck9wZW5TU0ggKFNlY3VyZSBTaGVsbCkgZm9ybmlzY2UgbCdhY2Nlc3NvIGFkIHVuIHNpc3RlbWEgcmVtb3RvLgpTb3N0aXR1aXNjZSB0ZWxuZXQsIHJsb2dpbiwgcmV4ZWMsIGUgcnNoLCBlIGZvcm5pc2NlIGNvbXVuaWNhemlvbmkgc2ljdXJlCmUgY3JpdHRhdGUgdHJhIGR1ZSBob3N0IG5vbiBmaWRhdGkgc3UgdW5hIHJldGUgbm9uIHNpY3VyYS4gTGUgY29ubmVzc2lvbmkKWDExIGFkIHVuYSBwb3J0YSBUQ1AvSVAgYXJiaXRyYXJpYSBwb3Nzb25vIGVzc2VyZSBpbm9sdHJhdGUgYXR0cmF2ZXJzbwp1biBjYW5hbGUgc2ljdXJvLgoKJURlc2NyaXB0aW9uIC1sIHB0Ck9wZW5TU0ggKFNlY3VyZSBTaGVsbCkgZm9ybmVjZSBhY2Vzc28gYSB1bSBzaXN0ZW1hIHJlbW90by4gU3Vic3RpdHVpIG8KdGVsbmV0LCBybG9naW4sIHJleGVjLCBlIG8gcnNoIGUgZm9ybmVjZSBjb211bmljYef1ZXMgc2VndXJhcyBlIGNpZnJhZGFzCmVudHJlIGR1YXMgbeFxdWluYXMgc2VtIGNvbmZpYW7nYSBt+nR1YSBzb2JyZSB1bWEgcmVkZSBpbnNlZ3VyYS4KTGlnYef1ZXMgWDExIGUgcG9ydG9zIFRDUC9JUCBhcmJpdHLhcmlvcyB0YW1i6W0gcG9kZXIgc2VyIHJlZW52aWFkb3MKcGVsbyBjYW5hbCBzZWd1cm8uCgolRGVzY3JpcHRpb24gLWwgcHRfQlIKTyBPcGVuU1NIIChTZWN1cmUgU2hlbGwpIGZvcm5lY2UgYWNlc3NvIGEgdW0gc2lzdGVtYSByZW1vdG8uIFN1YnN0aXR1aSBvCnRlbG5ldCwgcmxvZ2luLCByZXhlYywgZSBvIHJzaCBlIGZvcm5lY2UgY29tdW5pY2Hn9WVzIHNlZ3VyYXMgZSBjcmlwdG9ncmFmYWRhcwplbnRyZSBkdWFzIG3hcXVpbmFzIHNlbSBjb25maWFu52Egbfp0dWEgc29icmUgdW1hIHJlZGUgaW5zZWd1cmEuCkxpZ2Hn9WVzIFgxMSBlIHBvcnRhcyBUQ1AvSVAgYXJiaXRy4XJpYXMgdGFtYultIHBvZGVtIHNlciByZWVudmlhZGFzCnBlbG8gY2FuYWwgc2VndXJvLgoKJURlc2NyaXB0aW9uIHNlcnZlcgpUaGlzIHBhY2thZ2UgaW5zdGFsbHMgdGhlIHNzaGQsIHRoZSBzZXJ2ZXIgcG9ydGlvbiBvZiBPcGVuU1NILiAKCiVEZXNjcmlwdGlvbiAtbCBkZSBzZXJ2ZXIKRGllc2VzIFBha2V0IGluc3RhbGxpZXJ0IGRlbiBzc2hkLCBkZW4gU2VydmVyLVRlaWwgZGVyIE9wZW5TU0guCgolRGVzY3JpcHRpb24gLWwgZXMgc2VydmVyCkVzdGUgcGFxdWV0ZSBpbnN0YWxhIHNzaGQsIGxhIHBhcnRlIHNlcnZpZG9yIGRlIE9wZW5TU0guCgolRGVzY3JpcHRpb24gLWwgZnIgc2VydmVyCkNlIHBhcXVldGFnZSBpbnN0YWxsZSBsZSAnc3NoZCcsIHBhcnRpZSBzZXJ2ZXVyIGRlIE9wZW5TU0guCgolRGVzY3JpcHRpb24gLWwgaXQgc2VydmVyClF1ZXN0byBwYWNjaGV0dG8gaW5zdGFsbGEgc3NoZCwgaWwgc2VydmVyIGRpIE9wZW5TU0guCgolRGVzY3JpcHRpb24gLWwgcHQgc2VydmVyCkVzdGUgcGFjb3RlIGludGFsYSBvIHNzaGQsIG8gc2Vydmlkb3IgZG8gT3BlblNTSC4KCiVEZXNjcmlwdGlvbiAtbCBwdF9CUiBzZXJ2ZXIKRXN0ZSBwYWNvdGUgaW50YWxhIG8gc3NoZCwgbyBzZXJ2aWRvciBkbyBPcGVuU1NILgoKJURlc2NyaXB0aW9uIGFza3Bhc3MKVGhpcyBwYWNrYWdlIGNvbnRhaW5zIGFuIFgxMS1iYXNlZCBwYXNzLXBocmFzZSBkaWFsb2cgdXNlZCBwZXIKZGVmYXVsdCBieSBzc2gtYWRkKDEpLiBJdCBpcyBiYXNlZCBvbiAle2Fza3Bhc3N9CmJ5IEppbSBLbm9ibGUgPGpta25vYmxlQHBvYm94LmNvbT4uCgoKJVByZXAKJXNldHVwICUoWyAteiAiJXtjdnN9IiBdIHx8IGVjaG8gIi1uICV7bmFtZX1fY3ZzIikgLWEyCiVpZiAhICV7dXNlX3N0YWJsZX0KICBhdXRvcmVjb25mCiVlbmRpZgoKCiVCdWlsZApDRkxBR1M9IiRSUE1fT1BUX0ZMQUdTIiBcCiVjb25maWd1cmUgXAogICAgICAgICAgICAtLXdpdGgtcGFtIFwKICAgICAgICAgICAgLS13aXRoLXRjcC13cmFwcGVycyBcCgkgICAgLS13aXRoLXByaXZzZXAtcGF0aD0le192YXJ9L2VtcHR5L3NzaGQgXAoJICAgICNsZWF2ZSB0aGlzIGxpbmUgZm9yIGVhc3kgZWRpdHMuCgolX19tYWtlCgpjZCAle2Fza3Bhc3N9CiVjb25maWd1cmUgXAoJICAgICNsZWF2ZSB0aGlzIGxpbmUgZm9yIGVhc3kgZWRpdHMuCgp4bWttZgolX19tYWtlIGluY2x1ZGVzCiVfX21ha2UKCgolSW5zdGFsbApbICV7YnVpbGRyb290fSAhPSAiLyIgXSAmJiBybSAtcmYgJXtidWlsZHJvb3R9CgptYWtlIGluc3RhbGwgREVTVERJUj0le2J1aWxkcm9vdH0KJW1ha2VpbnN0YWxsIC1DICV7YXNrcGFzc30gXAogICAgQklORElSPSV7X2xpYmV4ZWNkaXJ9IFwKICAgIE1BTlBBVEg9JXtfbWFuZGlyfSBcCiAgICBERVNURElSPSV7YnVpbGRyb290fQoKIyBPcGVuTGludXggc3BlY2lmaWMgY29uZmlndXJhdGlvbgpta2RpciAtcCAle2J1aWxkcm9vdH17L2V0Yy9wYW0uZCwle1NWSWNkaXJ9LCV7U1ZJZGlyfX0KbWtkaXIgLXAgJXtidWlsZHJvb3R9JXtfdmFyfS9lbXB0eS9zc2hkCgojIGVuYWJsaW5nIFgxMSBmb3J3YXJkaW5nIG9uIHRoZSBzZXJ2ZXIgaXMgY29udmVuaWVudCBhbmQgb2theSwKIyBvbiB0aGUgY2xpZW50IHNpZGUgaXQncyBhIHBvdGVudGlhbCBzZWN1cml0eSByaXNrIQolX19wZXJsIC1waSAtZSAnczojWDExRm9yd2FyZGluZyBubzpYMTFGb3J3YXJkaW5nIHllczpnJyBcCiAgICAle2J1aWxkcm9vdH0le19zeXNjb25mZGlyfS9zc2hkX2NvbmZpZwoKJWlmICV7bm9fcm9vdF9sb2dpbn0KJV9fcGVybCAtcGkgLWUgJ3M6I1Blcm1pdFJvb3RMb2dpbiB5ZXM6UGVybWl0Um9vdExvZ2luIG5vOmcnIFwKICAgICV7YnVpbGRyb290fSV7X3N5c2NvbmZkaXJ9L3NzaGRfY29uZmlnCiVlbmRpZgoKaW5zdGFsbCAtbTY0NCBjb250cmliL2NhbGRlcmEvc3NoZC5wYW0gJXtidWlsZHJvb3R9L2V0Yy9wYW0uZC9zc2hkCiMgRklYTUU6IGRpc2FibGVkLCBmaW5kIG91dCB3aHkgdGhpcyBkb2Vzbid0IHdvcmsgd2l0aCBuaXMKJV9fcGVybCAtcGkgLWUgJ3M6KC4qcGFtX2xpbWl0cy4qKTojJDE6JyBcCiAgICAle2J1aWxkcm9vdH0vZXRjL3BhbS5kL3NzaGQKCmluc3RhbGwgLW0gMDc1NSBjb250cmliL2NhbGRlcmEvc3NoZC5pbml0ICV7YnVpbGRyb290fSV7U1ZJZGlyfS9zc2hkCgojIHRoZSBsYXN0IG9uZSBpcyBuZWVkbGVzcywgYnV0IG1vcmUgZnV0dXJlLXByb29mCmZpbmQgJXtidWlsZHJvb3R9JXtTVklkaXJ9IC10eXBlIGYgLWV4ZWMgXAogICAgJV9fcGVybCAtcGkgLWUgJ3M6XEBTVklkaXJcQDole1NWSWRpcn06ZztcCgkJICAgIHM6XEBzeXNjb25mZGlyXEA6JXtfc3lzY29uZmRpcn06ZzsgXAoJCSAgICBzOi91c3Ivc2Jpbjole19zYmluZGlyfTpnJ1wKICAgIFx7XH0gXDsKCmNhdCA8PC1Fb0QgPiAle2J1aWxkcm9vdH0le1NWSWNkaXJ9L3NzaGQKCUlERU5UPXNzaGQKCURFU0NSSVBUSVZFPSJPcGVuU1NIIHNlY3VyZSBzaGVsbCBkYWVtb24iCgkjIFRoaXMgc2VydmljZSB3aWxsIGJlIG1hcmtlZCBhcyAnc2tpcHBlZCcgb24gYm9vdCBpZiB0aGVyZQoJIyBpcyBubyBob3N0IGtleS4gVXNlIHNzaC1ob3N0LWtleWdlbiB0byBnZW5lcmF0ZSBvbmUKCU9OQk9PVD0ieWVzIgoJT1BUSU9OUz0iIgpFb0QKClNLRz0le2J1aWxkcm9vdH0le19zYmluZGlyfS9zc2gtaG9zdC1rZXlnZW4KaW5zdGFsbCAtbSAwNzU1IGNvbnRyaWIvY2FsZGVyYS9zc2gtaG9zdC1rZXlnZW4gJFNLRwojIEZpeCB1cCBzb21lIHBhdGggbmFtZXMgaW4gdGhlIGtleWdlbiB0b3leSG9sCiAgICAlX19wZXJsIC1waSAtZSAnczpcQHN5c2NvbmZkaXJcQDole19zeXNjb25mZGlyfTpnOyBcCgkJICAgIHM6XEBzc2hrZXlnZW5cQDole19iaW5kaXJ9L3NzaC1rZXlnZW46ZycgXAoJJXtidWlsZHJvb3R9JXtfc2JpbmRpcn0vc3NoLWhvc3Qta2V5Z2VuCgojIFRoaXMgbG9va3MgdGVycmlibGUuICBFeHBlY3QgaXQgdG8gY2hhbmdlLgojIGluc3RhbGwgcmVtYWluaW5nIGRvY3MKRG9jRD0iJXtidWlsZHJvb3R9JXtfZGVmYXVsdGRvY2Rpcn0vJXtuYW1lfS0le3ZlcnNpb259Igpta2RpciAtcCAkRG9jRC8le2Fza3Bhc3N9CmNwIC1hIENSRURJVFMgQ2hhbmdlTG9nIExJQ0VOQ0UgT1ZFUlZJRVcgUkVBRE1FKiBUT0RPIFBST1RPQ09MKiAkRG9jRAppbnN0YWxsIC1wIC1tIDA0NDQgJXtTT1VSQ0UzfSAgJERvY0QvZmFxLmh0bWwKY3AgLWEgJXthc2twYXNzfS97UkVBRE1FLENoYW5nZUxvZyxUT0RPLFNzaEFza3Bhc3MqLmFkfSAgJERvY0QvJXthc2twYXNzfQolaWYgJXt1c2Vfc3RhYmxlfQogIGNwIC1wICV7YXNrcGFzc30vJXt4c2F9Lm1hbiAkRG9jRC8le2Fza3Bhc3N9LyV7eHNhfS4xCiVlbHNlCiAgY3AgLXAgJXthc2twYXNzfS8le3hzYX0ubWFuICV7YnVpbGRyb290fSV7X21hbmRpcn1tYW4xLyV7eHNhfS4xCiAgbG4gLXMgICV7eHNhfS4xICV7YnVpbGRyb290fSV7X21hbmRpcn1tYW4xL3NzaC1hc2twYXNzLjEKJWVuZGlmCgpmaW5kICV7YnVpbGRyb290fSV7X21hbmRpcn0gLXR5cGUgZiAtbm90IC1uYW1lCScqLmd6JyAtcHJpbnQwIHwgeGFyZ3MgLTByICVfX2d6aXAgLTluZgpybSAle2J1aWxkcm9vdH0le19tYW5kaXJ9L21hbjEvc2xvZ2luLjEgJiYgXAogICAgbG4gLXMgJXtfbWFuZGlyfS9tYW4xL3NzaC4xLmd6IFwKICAgICV7YnVpbGRyb290fSV7X21hbmRpcn0vbWFuMS9zbG9naW4uMS5negoKCiVDbGVhbgojJXtybURFU1RESVJ9ClsgJXtidWlsZHJvb3R9ICE9ICIvIiBdICYmIHJtIC1yZiAle2J1aWxkcm9vdH0KCiVQb3N0CiMgR2VuZXJhdGUgaG9zdCBrZXkgd2hlbiBub25lIGlzIHByZXNlbnQgdG8gZ2V0IHVwIGFuZCBydW5uaW5nLAojIGJvdGggY2xpZW50IGFuZCBzZXJ2ZXIgcmVxdWlyZSB0aGlzIGZvciBob3N0LWJhc2VkIGF1dGghCiMgc3NoLWhvc3Qta2V5Z2VuIGNoZWNrcyBmb3IgZXhpc3Rpbmcga2V5cy4KL3Vzci9zYmluL3NzaC1ob3N0LWtleWdlbgo6ICMgdG8gcHJvdGVjdCB0aGUgcnBtIGRhdGFiYXNlCgolcHJlIHNlcnZlcgole19zYmluZGlyfS9ncm91cGFkZCAtZyAle3NzaGRfZ2lkfSBzc2hkIDI+L2Rldi9udWxsIHx8IDoKJXtfc2JpbmRpcn0vdXNlcmFkZCAtZCAvdmFyL2VtcHR5L3NzaGQgLXMgL2Jpbi9mYWxzZSAtdSAle3NzaGRfdWlkfSBcCgktYyAiU1NIIERhZW1vbiB2aXJ0dWFsIHVzZXIiIC1nIHNzaGQgc3NoZCAyPi9kZXYvbnVsbCB8fCA6CjogIyB0byBwcm90ZWN0IHRoZSBycG0gZGF0YWJhc2UKCiVQb3N0IHNlcnZlcgppZiBbIC14ICV7TFNCaW5pdH0taW5zdGFsbCBdOyB0aGVuCiAgJXtMU0Jpbml0fS1pbnN0YWxsIHNzaGQKZWxzZQogIGxpc2EgLS1TeXNWLWluaXQgaW5zdGFsbCBzc2hkIFM1NSAyOjM6NDo1IEs0NSAwOjE6NgpmaQoKISAle1NWSWRpcn0vc3NoZCBzdGF0dXMgfHwgJXtTVklkaXJ9L3NzaGQgcmVzdGFydAo6ICMgdG8gcHJvdGVjdCB0aGUgcnBtIGRhdGFiYXNlCgoKJVByZVVuIHNlcnZlcgpbICIkMSIgPSAwIF0gfHwgZXhpdCAwCiEgJXtTVklkaXJ9L3NzaGQgc3RhdHVzIHx8ICV7U1ZJZGlyfS9zc2hkIHN0b3AKaWYgWyAteCAle0xTQmluaXR9LXJlbW92ZSBdOyB0aGVuCiAgJXtMU0Jpbml0fS1yZW1vdmUgc3NoZAplbHNlCiAgbGlzYSAtLVN5c1YtaW5pdCByZW1vdmUgc3NoZCAkMQpmaQo6ICMgdG8gcHJvdGVjdCB0aGUgcnBtIGRhdGFiYXNlCgolRmlsZXMgCiVkZWZhdHRyKC0scm9vdCxyb290KQolZGlyICV7X3N5c2NvbmZkaXJ9CiVjb25maWcgJXtfc3lzY29uZmRpcn0vc3NoX2NvbmZpZwole19iaW5kaXJ9L3NjcAole19iaW5kaXJ9L3NmdHAKJXtfYmluZGlyfS9zc2gKJXtfYmluZGlyfS9zbG9naW4KJXtfYmluZGlyfS9zc2gtYWRkCiVhdHRyKDI3NTUscm9vdCxub2JvZHkpICV7X2JpbmRpcn0vc3NoLWFnZW50CiV7X2JpbmRpcn0vc3NoLWtleWdlbgole19iaW5kaXJ9L3NzaC1rZXlzY2FuCiVkaXIgJXtfbGliZXhlY2Rpcn0KJWF0dHIoNDcxMSxyb290LHJvb3QpICV7X2xpYmV4ZWNkaXJ9L3NzaC1rZXlzaWduCiV7X2xpYmV4ZWNkaXJ9L3NzaC1wa2NzMTEtaGVscGVyCiV7X3NiaW5kaXJ9L3NzaC1ob3N0LWtleWdlbgolZGlyICV7X2RlZmF1bHRkb2NkaXJ9LyV7bmFtZX0tJXt2ZXJzaW9ufQole19kZWZhdWx0ZG9jZGlyfS8le25hbWV9LSV7dmVyc2lvbn0vQ1JFRElUUwole19kZWZhdWx0ZG9jZGlyfS8le25hbWV9LSV7dmVyc2lvbn0vQ2hhbmdlTG9nCiV7X2RlZmF1bHRkb2NkaXJ9LyV7bmFtZX0tJXt2ZXJzaW9ufS9MSUNFTkNFCiV7X2RlZmF1bHRkb2NkaXJ9LyV7bmFtZX0tJXt2ZXJzaW9ufS9PVkVSVklFVwole19kZWZhdWx0ZG9jZGlyfS8le25hbWV9LSV7dmVyc2lvbn0vUkVBRE1FKgole19kZWZhdWx0ZG9jZGlyfS8le25hbWV9LSV7dmVyc2lvbn0vVE9ETwole19kZWZhdWx0ZG9jZGlyfS8le25hbWV9LSV7dmVyc2lvbn0vZmFxLmh0bWwKJXtfbWFuZGlyfS9tYW4xLyoKJXtfbWFuZGlyfS9tYW44L3NzaC1rZXlzaWduLjguZ3oKJXtfbWFuZGlyfS9tYW44L3NzaC1wa2NzMTEtaGVscGVyLjguZ3oKJXtfbWFuZGlyfS9tYW41L3NzaF9jb25maWcuNS5negogCiVGaWxlcyBzZXJ2ZXIKJWRlZmF0dHIoLSxyb290LHJvb3QpCiVkaXIgJXtfdmFyfS9lbXB0eS9zc2hkCiVjb25maWcgJXtTVklkaXJ9L3NzaGQKJWNvbmZpZyAvZXRjL3BhbS5kL3NzaGQKJWNvbmZpZyAle19zeXNjb25mZGlyfS9tb2R1bGkKJWNvbmZpZyAle19zeXNjb25mZGlyfS9zc2hkX2NvbmZpZwolY29uZmlnICV7U1ZJY2Rpcn0vc3NoZAole19saWJleGVjZGlyfS9zZnRwLXNlcnZlcgole19zYmluZGlyfS9zc2hkCiV7X21hbmRpcn0vbWFuNS9tb2R1bGkuNS5negole19tYW5kaXJ9L21hbjUvc3NoZF9jb25maWcuNS5negole19tYW5kaXJ9L21hbjgvc2Z0cC1zZXJ2ZXIuOC5negole19tYW5kaXJ9L21hbjgvc3NoZC44Lmd6CiAKJUZpbGVzIGFza3Bhc3MKJWRlZmF0dHIoLSxyb290LHJvb3QpCiV7X2xpYmV4ZWNkaXJ9L3NzaC1hc2twYXNzCiV7X2xpYmV4ZWNkaXJ9L3gxMS1zc2gtYXNrcGFzcwole19kZWZhdWx0ZG9jZGlyfS8le25hbWV9LSV7dmVyc2lvbn0vJXthc2twYXNzfQogCgolQ2hhbmdlTG9nCiogVHVlIEphbiAxOCAyMDExIFRpbSBSaWNlIDx0aW1AbXVsdGl0YWxlbnRzLm5ldD4KLSBVc2UgQ0ZMQUdTIGZyb20gTWFrZWZpbGUgaW5zdGVhZCBvZiBSUE0gc28gYnVpbGQgY29tcGxldGVzLgotIFNpZ25hdHVyZXMgd2VyZSBjaGFuZ2VkIHRvIC5hc2Mgc2luY2UgNC4xcDEuCgoqIE1vbiBKYW4gMDEgMTk5OCAuLi4KVGVtcGxhdGUgVmVyc2lvbjogMS4zMQoKJElkOiBvcGVuc3NoLnNwZWMsdiAxLjc3IDIwMTIvMDQvMjAgMDA6NTg6NDMgZGptIEV4cCAkCg==