LyogSGV5LCBFbWFjcywgb3BlbiB0aGlzIGZpbGUgd2l0aCAtKi0gY29kaW5nOiBjcDEyNTAgLSotCiAqCiAqIFdpbmVGaWxlCiAqIEN6ZWNoIExhbmd1YWdlIFN1cHBvcnQKICoKICogQ29weXJpZ2h0IDIwMDAgTWFydGluIEZ1Y2hzCiAqIENvcHlyaWdodCAyMDAyIFN0ZXZlbiBFZHdhcmRzCiAqIENvcHlyaWdodCAyMDAyIEFsZXhhbmRyZSBKdWxsaWFyZAogKiBDb3B5cmlnaHQgMjAwNCBEYXZpZCBLcmVkYmEKICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCiAqLwoKTEFOR1VBR0UgTEFOR19DWkVDSCwgU1VCTEFOR19ERUZBVUxUCgovKiBDemVjaCBzdHJpbmdzIGluIENQMTI1MCAqLwoKLyogTWVudSAqLwoKSURNX1dJTkVGSUxFIE1FTlUgRklYRUQgSU1QVVJFCnsKICAgIFBPUFVQICImU291Ym9yIiAgewogICAgICAgIE1FTlVJVEVNICImT3RldvjtdFx0RW50ZXIiLCAgICAgICAgICAgICBJRF9BQ1RJVkFURQogICAgICAgIE1FTlVJVEVNICImUPhlc3Vub3V0Li4uXHRGNyIsICAgICAgICAgICBJRF9GSUxFX01PVkUKICAgICAgICBNRU5VSVRFTSAiJktvcO1yb3ZhdC4uLlx0RjgiLCAgICAgICAgICAgSURfRklMRV9DT1BZCiAgICAgICAgTUVOVUlURU0gIiZWZSBzY2hy4W5jZS4uLlx0RjkiLCAgICAgICAgIDExOAogICAgICAgIE1FTlVJVEVNICImU21hemF0XHREZWwiLCAgICAgICAgICAgICAgICBJRF9GSUxFX0RFTEVURQogICAgICAgIE1FTlVJVEVNICJQ+CZlam1lbm92YXQuLi4iLCAgICAgICAgICAgICAxMDkKICAgICAgICBNRU5VSVRFTSAiViZsYXN0bm9zdGkuLi5cdEFsdCtFbnRlciIsICAgSURfRURJVF9QUk9QRVJUSUVTCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIiZLb21wcmVzZS4uLiIsICAgICAgICAgICAgICAgIDExOQogICAgICAgIE1FTlVJVEVNICImRGVrb21wcmVzZS4uLiIsICAgICAgICAgICAgICAxMjAKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiJlNwdXN0aXQuLi4iLCAgICAgICAgICAgICAgICAgSURfRVhFQ1VURQogICAgICAgIE1FTlVJVEVNICImVGlza25vdXQuLi4iLCAgICAgICAgICAgICAgICAxMDIKICAgICAgICBNRU5VSVRFTSAiQXNvY2lvdmF0Li4uIiwgICAgICAgICAgICAgICAgMTAzCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIlYmeXR2b/hpdCBhZHJlc+H4Li4uIiwgICAgICAgIDExMQogICAgICAgIE1FTlVJVEVNICImSGxlZGF0Li4uIiwgICAgICAgICAgICAgICAgICAxMDQKICAgICAgICBNRU5VSVRFTSAiJlp2b2xpdCB2b3Vib3J5Li4uIiwgICAgICAgICAgMTE2CiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiNpZm5kZWYgX05PX0VYVEVOU0lPTlMKICAgICAgICBNRU5VSVRFTSAiSyZvbmVjXHRBbHQrWCIsICAgICAgICAgICAgICAgSURfRklMRV9FWElUCiNlbHNlCiAgICAgICAgTUVOVUlURU0gIksmb25lYyIsICAgICAgICAgICAgICAgICAgICAgIElEX0ZJTEVfRVhJVAojZW5kaWYKICAgIH0KCiAgICBQT1BVUCAiJkRpc2siICB7CiAgICAgICAgTUVOVUlURU0gIiZLb3Dtcm92YXQgZGlzay4uLiIsICAgICAgICAgIDIwMQogICAgICAgIE1FTlVJVEVNICImSm1lbm92a2EgZGlzay4uLiIsICAgICAgICAgICAyMDIKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiJkZvcm3hdG92YXQgZGlzay4uLiIsICAgICAgICAgSURfRk9STUFUX0RJU0sKI2lmZGVmIF9XSU45NQogICAgICAgIE1FTlVJVEVNICImVnl0dm/4aXQgc3lzdGVtb3b9IGRpc2suLi4iLCAtMSAgLypUT0RPKi8KI2VuZGlmCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIlD4aXBvaml0ICZz7Z1vdukgemH47Xplbu0iLCAgIElEX0NPTk5FQ1RfTkVUV09SS19EUklWRQogICAgICAgIE1FTlVJVEVNICImT2Rwb2ppdCAmc+2db3bpIHph+O16ZW7tIiwgICBJRF9ESVNDT05ORUNUX05FVFdPUktfRFJJVkUKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiU2TtbGV0IGpha28uLi4iLCAgICAgICAgICAgICAgMjU0CiAgICAgICAgTUVOVUlURU0gIiZPZHN0cmFuaXQgc2TtbGVu7S4uLiIsICAgICAgIDI1NQogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICImWnZvbGl0IHph+O16ZW7tLi4uIiwgICAgICAgICAyNTEKICAgIH0KCiAgICBQT1BVUCAiJkFkcmVz4fhlIiAgewogICAgICAgIE1FTlVJVEVNICImRGFsmu0g+nJvdmXyXHQrIiwgICAgICAgICAgICAzMDEKICAgICAgICBNRU5VSVRFTSAiUm96YmFsaXQgJnN0cm9tXHQqIiwgICAgICAgICAgMzAyCiAgICAgICAgTUVOVUlURU0gIlJvemJhbGl0ICZ2mmVcdFN0cmcrKiIsICAgICAgIDMwMwogICAgICAgIE1FTlVJVEVNICJTYmFsaXQgJnN0cm9tXHQtIiwgICAgICAgICAgICAzMDQKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiJk96bmHoaXQgcG90b21reSIsICAgICAgICAgICAgNTA1CiAgICB9CgogICAgUE9QVVAgIiZab2JyYXplbu0iICB7CiAgICAgICAgTUVOVUlURU0gIiZTdHJvbSBhIGFkcmVz4fhlIiwgICAgICAgICAgIDQxMwogICAgICAgIE1FTlVJVEVNICImSmVuIHN0cm9tIiwgICAgICAgICAgICAgICAgICA0MTEKICAgICAgICBNRU5VSVRFTSAiSmVuICZhZHJlc+H4ZSIsICAgICAgICAgICAgICAgNDEyCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIiZSb3pk7GxpdCIsICAgICAgICAgICAgICAgICAgIElEX1ZJRVdfU1BMSVQKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiJkpt6W5vIiwgICAgICAgICAgICAgICAgICAgICAgSURfVklFV19OQU1FCiAgICAgICAgTUVOVUlURU0gIiZEZXRhaWx5IHaaZWNoIHNvdWJvcvkiLCAgICAgIElEX1ZJRVdfQUxMX0FUVFJJQlVURVMsIENIRUNLRUQKICAgICAgICBNRU5VSVRFTSAiyOEmc3Rl6G7pIGRldGFpbHkuLi4iLCAgICAgICAgSURfVklFV19TRUxFQ1RFRF9BVFRSSUJVVEVTCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIiZU+O1kaXQgcG9kbGUgam3pbmEiLCAgICAgICAgIElEX1ZJRVdfU09SVF9OQU1FCiAgICAgICAgTUVOVUlURU0gIlT47WRpdCAmcG9kbGUgdHlwdSIsICAgICAgICAgIElEX1ZJRVdfU09SVF9UWVBFCiAgICAgICAgTUVOVUlURU0gIlT47WRpdCBwb2RsZSAmdmVsaWtvc3RpIiwgICAgIElEX1ZJRVdfU09SVF9TSVpFCiAgICAgICAgTUVOVUlURU0gIlT47WRpdCBwb2RsZSAmZGF0YSIsICAgICAgICAgIElEX1ZJRVdfU09SVF9EQVRFCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIlT47WRpdCBwb2RsZSAmLi4uIiwgICAgICAgICAgIElEX1ZJRVdfRklMVEVSCiAgICB9CgogICAgUE9QVVAgIiZOYXN0YXZlbu0iICB7CiAgICAgICAgTUVOVUlURU0gIiZQb3R2cnpvduFu7S4uLiIsICAgICAgICAgICAgIDUwMQogICAgICAgIE1FTlVJVEVNICImUO1zbW8uLi4iLCAgICAgICAgICAgICAgICAgICBJRF9TRUxFQ1RfRk9OVAogICAgICAgIE1FTlVJVEVNICJVcHJhdml0IHBhbmVsICZu4XN0cm9q+S4uLiIsICA1MTIKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiJlBhbmVsIG7hc3Ryb2r5IiwgICAgICAgICAgICAgSURfVklFV19UT09MX0JBUiwgQ0hFQ0tFRAogICAgICAgIE1FTlVJVEVNICImUGFuZWwgemH47WVu7SIsICAgICAgICAgICAgICBJRF9WSUVXX0RSSVZFX0JBUiwgQ0hFQ0tFRAogICAgICAgIE1FTlVJVEVNICImU3Rhdm92/SD44WRlayIsICAgICAgICAgICAgICBJRF9WSUVXX1NUQVRVU0JBUiwgQ0hFQ0tFRAojaWZuZGVmIF9OT19FWFRFTlNJT05TCiAgICAgICAgTUVOVUlURU0gIiZDZWxh4SBvYnJhem92a2FcdEN0cmwrU2hpZnQrUyIsIElEX1ZJRVdfRlVMTFNDUkVFTgojZW5kaWYKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiJk1pbmltYWxpem92YXQgcPhpIHNwdZp07G7tIiwgNTA0CiAgICAgICAgTUVOVUlURU0gIiZVbG+eaXQgbmFzdGF2ZW7tIHD4aSB2eXBudXTtIiw1MTEKICAgIH0KCgogICAgUE9QVVAgIiZaYWJlenBl6GVu7SIgIHsKICAgICAgICBNRU5VSVRFTSAiJlD47XN0dXAuLi4iLCAgICAgICAgICAgICAgICAgNjA1CiAgICAgICAgTUVOVUlURU0gIiZMb2dvduFu7S4uLiIsICAgICAgICAgICAgICAgIDYwNgogICAgICAgIE1FTlVJVEVNICImVmxhc3Ru7WsuLi4iLCAgICAgICAgICAgICAgICA2MDcKICAgIH0KCiAgICBQT1BVUCAiJk9rbm8iICB7CiAgICAgICAgTUVOVUlURU0gIk5vdukgJm9rbm8iLCAgICAgICAgICAgICAgICAgIElEX1dJTkRPV19ORVcKICAgICAgICBNRU5VSVRFTSAiS2Fza+Fkb3bhbu1cdEN0cmwrRjUiLCAgICAgICAgSURfV0lORE9XX0NBU0NBREUKICAgICAgICBNRU5VSVRFTSAiVXNwb/jhZGF0ICZob3Jpem9udOFsbuwiLCAgICAgSURfV0lORE9XX1RJTEVfSE9SWgogICAgICAgIE1FTlVJVEVNICJVc3Bv+OFkYXQgJnZlcnRpa+FsbuxcdEN0cmwrRjQiLElEX1dJTkRPV19USUxFX1ZFUlQKI2lmbmRlZiBfTk9fRVhURU5TSU9OUwogICAgICAgIE1FTlVJVEVNICJaYXJvdm5hdCBhdXRvbWF0aWNreSIsICAgICAgICBJRF9XSU5ET1dfQVVUT1NPUlQKI2VuZGlmCiAgICAgICAgTUVOVUlURU0gIlphcm92bmF0ICZzeW1ib2x5IiwgICAgICAgICAgIElEX1dJTkRPV19BUlJBTkdFCiAgICAgICAgTUVOVUlURU0gIiZBa3R1YWxpem92YXRcdEY1IiwgICAgICAgICAgIElEX1JFRlJFU0gKICAgIH0KCiAgICBQT1BVUCAiJj8iICB7CiAgICAgICAgTUVOVUlURU0gIiZU6W1hdGEgbuFwb3bsZHlcdEYxIiwgICAgICAgIElEX0hFTFAKICAgICAgICBNRU5VSVRFTSAiSGxlZOFu7SB2ICZu4XBvduxk7C4uLlx0RjEiLCAgSURfSEVMUAogICAgICAgIE1FTlVJVEVNICImSmFrIHBvdZ7tdmF0IG7hcG927GR1XHRGMSIsICBJRF9IRUxQX1VTSU5HCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIiZJbmZvcm1hY2UgbyBXaW5lZmlsZS4uLiIsICAgIElEX0FCT1VUCiNpZmRlZiBfX1dJTkVfXwogICAgICAgIE1FTlVJVEVNICJJbmZvcm1hY2UgbyAmV2luZS4uLiIsICAgICAgICBJRF9BQk9VVF9XSU5FCiNlbmRpZgogICAgfQp9CgoKSUREX0VYRUNVVEUgRElBTE9HIEZJWEVEIElNUFVSRSAxNSwgMTMsIDIxMCwgNjMKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKQ0FQVElPTiAiU3B1c3RpdCIKRk9OVCA4LCAiTVMgU2hlbGwgRGxnIgp7CiAgICBDT05UUk9MICAgICAgICAgIiIsIDEwMSwgIlN0YXRpYyIsIFNTX1NJTVBMRXxTU19OT1BSRUZJWCwgMywgNiwgMTYyLCAxMAogICAgQ09OVFJPTCAgICAgICAgICImUPjta2F6OiIsIC0xLCAiU3RhdGljIiwgU1NfTEVGVE5PV09SRFdSQVB8V1NfR1JPVVAsIDMsIDE4LCA2MCwgMTAKICAgIEVESVRURVhUICAgICAgICAyMDEsIDMsIDI5LCAxMzQsIDEyLCBFU19BVVRPSFNDUk9MTAogICAgQ09OVFJPTCAgICAgICAgICJKYWtvICZTeW1ib2wiLCAyMTQsICJCdXR0b24iLCBCU19BVVRPQ0hFQ0tCT1h8V1NfVEFCU1RPUCwzLCA0NSwgNzEsIDEyCiAgICBERUZQVVNIQlVUVE9OICAgIk9LIiwgMSwgMTU4LCA2LCA0NywgMTQKICAgIFBVU0hCVVRUT04gICAgICAiWnJ1mml0IiwgMiwgMTU4LCAyMywgNDcsIDE0CiAgICBQVVNIQlVUVE9OICAgICAgIiZQb21vYyIsIDI1NCwgMTU4LCA0MywgNDcsIDE0Cn0KCklERF9TRUxFQ1RfREVTVElOQVRJT04gRElBTE9HIEZJWEVEIElNUFVSRSAxNSwgMTMsIDIxMCwgNjMKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKQ0FQVElPTiAiWnZvbHRlIGPtbCIKRk9OVCA4LCAiTVMgU2hlbGwgRGxnIgp7CiAgICBDT05UUk9MICAgICAgICAgIiIsIDEwMSwgIlN0YXRpYyIsIFNTX1NJTVBMRXxTU19OT1BSRUZJWCwgMywgNiwgMTYyLCAxMAogICAgQ09OVFJPTCAgICAgICAgICImQ2VzdGE6IiwgLTEsICJTdGF0aWMiLCBTU19MRUZUTk9XT1JEV1JBUHxXU19HUk9VUCwgMywgMTgsIDYwLCAxMAogICAgRURJVFRFWFQgICAgICAgIDIwMSwgMywgMjksIDEzNCwgMTIsIEVTX0FVVE9IU0NST0xMCiAgICBERUZQVVNIQlVUVE9OICAgIk9LIiwgMSwgMTU4LCA2LCA0NywgMTQKICAgIFBVU0hCVVRUT04gICAgICAiWnJ1mml0IiwgMiwgMTU4LCAyMywgNDcsIDE0CiAgICBQVVNIQlVUVE9OICAgICAgIiZQcm9jaOF6ZXQiLCAyNTQsIDE1OCwgNDMsIDQ3LCAxNAp9CgpTVFJJTkdUQUJMRQp7CiAgICBJRFNfRk9OVF9TRUxfRExHX05BTUUgICAiQXBsaWtvduFu7SBuYXN0YXZlbu0gcO1zbWEiCiAgICBJRFNfRk9OVF9TRUxfRVJST1IgICAgICAiQ2h5YmEgcPhpIHZvbGLsIG5vdulobyBw7XNtYS4iCn0KClNUUklOR1RBQkxFCnsKICAgIElEU19XSU5FRklMRSAgICAgICAgICAgICJXaW5lZmlsZSIKICAgIElEU19FUlJPUiAgICAgICAgICAgICAgICJDaHliYSIKICAgIElEU19ST09UX0ZTICAgICAgICAgICAgICJyb290IGZzIgogICAgSURTX1VOSVhGUyAgICAgICAgICAgICAgInVuaXhmcyIKICAgIElEU19ERVNLVE9QICAgICAgICAgICAgICJQbG9jaGEiCiAgICBJRFNfU0hFTEwgICAgICAgICAgICAgICAiUPjta2F6b3b9IPjhZGVrIgogICAgSURTX1RJVExFRk1UICAgICAgICAgICAgIiVzIC0gJXMiCiAgICBJRFNfTk9fSU1QTCAgICAgICAgICAgICAiWmF07W0gbmVpbXBsZW1lbnRvduFubyIKICAgIElEU19XSU5FICAgICAgICAgICAgICAgICJXSU5FIgogICAgSURTX1dJTkVfRklMRSAgICAgICAgICAgIldpbmUgRmlsZSIKfQoKU1RSSU5HVEFCTEUKewogICAgSURTX0NPTF9OQU1FICAgICAgICAgICAgIkpt6W5vIgogICAgSURTX0NPTF9TSVpFICAgICAgICAgICAgIlZlbGlrb3N0IgogICAgSURTX0NPTF9DREFURSAgICAgICAgICAgIkRhdHVtIHZ5dHZv+GVu7SIKICAgIElEU19DT0xfQURBVEUgICAgICAgICAgICJEYXR1bSBwb3NsZWRu7WhvIHD47XN0dXB1IgogICAgSURTX0NPTF9NREFURSAgICAgICAgICAgIkRhdHVtIHBvc2xlZG7tIG1vZGlmaWthY2UiCiAgICBJRFNfQ09MX0lEWCAgICAgICAgICAgICAiSW5kZXgvSW5vZGUiCiAgICBJRFNfQ09MX0xJTktTICAgICAgICAgICAiTGlua3kiCiAgICBJRFNfQ09MX0FUVFIgICAgICAgICAgICAiQXRyaWJ1dHkiCiAgICBJRFNfQ09MX1NFQyAgICAgICAgICAgICAiWmFiZXpwZehlbu0iCn0K