LyogSGV5LCBFbWFjcywgb3BlbiB0aGlzIGZpbGUgd2l0aCAtKi0gY29kaW5nOiBjcDEyNTAgLSotCiAqCiAqIFdpbmVGaWxlCiAqIEN6ZWNoIExhbmd1YWdlIFN1cHBvcnQKICoKICogQ29weXJpZ2h0IDIwMDAgTWFydGluIEZ1Y2hzCiAqIENvcHlyaWdodCAyMDAyIFN0ZXZlbiBFZHdhcmRzCiAqIENvcHlyaWdodCAyMDAyIEFsZXhhbmRyZSBKdWxsaWFyZAogKiBDb3B5cmlnaHQgMjAwNCBEYXZpZCBLcmVkYmEKICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCiAqLwoKTEFOR1VBR0UgTEFOR19DWkVDSCwgU1VCTEFOR19ERUZBVUxUCgovKiBDemVjaCBzdHJpbmdzIGluIENQMTI1MCAqLwoKLyogTWVudSAqLwoKSURNX1dJTkVGSUxFIE1FTlUgRklYRUQgSU1QVVJFCnsKICAgIFBPUFVQICImU291Ym9yIiAgewogICAgICAgIE1FTlVJVEVNICImT3RldvjtdFx0RW50ZXIiLCAgICAgICAgICAgICBJRF9BQ1RJVkFURQogICAgICAgIE1FTlVJVEVNICImUPhlc3Vub3V0Li4uXHRGNyIsICAgICAgICAgICBJRF9GSUxFX01PVkUKICAgICAgICBNRU5VSVRFTSAiJktvcO1yb3ZhdC4uLlx0RjgiLCAgICAgICAgICAgSURfRklMRV9DT1BZCiAgICAgICAgTUVOVUlURU0gIiZWZSBzY2hy4W5jZS4uLlx0RjkiLCAgICAgICAgIDExOAogICAgICAgIE1FTlVJVEVNICImU21hemF0XHREZWwiLCAgICAgICAgICAgICAgICBJRF9GSUxFX0RFTEVURQogICAgICAgIE1FTlVJVEVNICJQ+CZlam1lbm92YXQuLi4iLCAgICAgICAgICAgICAxMDkKICAgICAgICBNRU5VSVRFTSAiViZsYXN0bm9zdGkuLi5cdEFsdCtFbnRlciIsICAgSURfRURJVF9QUk9QRVJUSUVTCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIiZLb21wcmVzZS4uLiIsICAgICAgICAgICAgICAgIDExOQogICAgICAgIE1FTlVJVEVNICImRGVrb21wcmVzZS4uLiIsICAgICAgICAgICAgICAxMjAKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiJlNwdXN0aXQuLi4iLCAgICAgICAgICAgICAgICAgSURfRVhFQ1VURQogICAgICAgIE1FTlVJVEVNICImVGlza25vdXQuLi4iLCAgICAgICAgICAgICAgICAxMDIKICAgICAgICBNRU5VSVRFTSAiQXNvY2lvdmF0Li4uIiwgICAgICAgICAgICAgICAgMTAzCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIlYmeXR2b/hpdCBhZHJlc+H4Li4uIiwgICAgICAgIDExMQogICAgICAgIE1FTlVJVEVNICImSGxlZGF0Li4uIiwgICAgICAgICAgICAgICAgICAxMDQKICAgICAgICBNRU5VSVRFTSAiJlp2b2xpdCB2b3Vib3J5Li4uIiwgICAgICAgICAgMTE2CiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiNpZm5kZWYgX05PX0VYVEVOU0lPTlMKICAgICAgICBNRU5VSVRFTSAiSyZvbmVjXHRBbHQrWCIsICAgICAgICAgICAgICAgSURfRklMRV9FWElUCiNlbHNlCiAgICAgICAgTUVOVUlURU0gIksmb25lYyIsICAgICAgICAgICAgICAgICAgICAgIElEX0ZJTEVfRVhJVAojZW5kaWYKICAgIH0KCiAgICBQT1BVUCAiJkRpc2siICB7CiAgICAgICAgTUVOVUlURU0gIiZLb3Dtcm92YXQgZGlzay4uLiIsICAgICAgICAgIDIwMQogICAgICAgIE1FTlVJVEVNICImSm1lbm92a2EgZGlzay4uLiIsICAgICAgICAgICAyMDIKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiJkZvcm3hdG92YXQgZGlzay4uLiIsICAgICAgICAgSURfRk9STUFUX0RJU0sKI2lmZGVmIF9XSU45NQogICAgICAgIE1FTlVJVEVNICImVnl0dm/4aXQgc3lzdGVtb3b9IGRpc2suLi4iLCAtMSAgLypUT0RPKi8KI2VuZGlmCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIlD4aXBvaml0ICZz7Z1vdukgemH47Xplbu0iLCAgIElEX0NPTk5FQ1RfTkVUV09SS19EUklWRQogICAgICAgIE1FTlVJVEVNICImT2Rwb2ppdCAmc+2db3bpIHph+O16ZW7tIiwgICBJRF9ESVNDT05ORUNUX05FVFdPUktfRFJJVkUKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiU2TtbGV0IGpha28uLi4iLCAgICAgICAgICAgICAgMjU0CiAgICAgICAgTUVOVUlURU0gIiZPZHN0cmFuaXQgc2TtbGVu7S4uLiIsICAgICAgIDI1NQogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICImWnZvbGl0IHph+O16ZW7tLi4uIiwgICAgICAgICAyNTEKICAgIH0KCiAgICBQT1BVUCAiJkFkcmVz4fhlIiAgewogICAgICAgIE1FTlVJVEVNICImRGFsmu0g+nJvdmXyXHQrIiwgICAgICAgICAgICAzMDEKICAgICAgICBNRU5VSVRFTSAiUm96YmFsaXQgJnN0cm9tXHQqIiwgICAgICAgICAgMzAyCiAgICAgICAgTUVOVUlURU0gIlJvemJhbGl0ICZ2mmVcdFN0cmcrKiIsICAgICAgIDMwMwogICAgICAgIE1FTlVJVEVNICJTYmFsaXQgJnN0cm9tXHQtIiwgICAgICAgICAgICAzMDQKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiJk96bmHoaXQgcG90b21reSIsICAgICAgICAgICAgNTA1CiAgICB9CgogICAgUE9QVVAgIiZab2JyYXplbu0iICB7CiAgICAgICAgTUVOVUlURU0gIiZTdHJvbSBhIGFkcmVz4fhlIiwgICAgICAgICAgIDQxMwogICAgICAgIE1FTlVJVEVNICImSmVuIHN0cm9tIiwgICAgICAgICAgICAgICAgICA0MTEKICAgICAgICBNRU5VSVRFTSAiSmVuICZhZHJlc+H4ZSIsICAgICAgICAgICAgICAgNDEyCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIiZSb3pk7GxpdCIsICAgICAgICAgICAgICAgICAgIElEX1ZJRVdfU1BMSVQKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiJkpt6W5vIiwgICAgICAgICAgICAgICAgICAgICAgSURfVklFV19OQU1FCiAgICAgICAgTUVOVUlURU0gIiZEZXRhaWx5IHaaZWNoIHNvdWJvcvkiLCAgICAgIElEX1ZJRVdfQUxMX0FUVFJJQlVURVMsIENIRUNLRUQKICAgICAgICBNRU5VSVRFTSAiyOEmc3Rl6G7pIGRldGFpbHkuLi4iLCAgICAgICAgSURfVklFV19TRUxFQ1RFRF9BVFRSSUJVVEVTCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIiZU+O1kaXQgcG9kbGUgam3pbmEiLCAgICAgICAgIElEX1ZJRVdfU09SVF9OQU1FCiAgICAgICAgTUVOVUlURU0gIlT47WRpdCAmcG9kbGUgdHlwdSIsICAgICAgICAgIElEX1ZJRVdfU09SVF9UWVBFCiAgICAgICAgTUVOVUlURU0gIlT47WRpdCBwb2RsZSAmdmVsaWtvc3RpIiwgICAgIElEX1ZJRVdfU09SVF9TSVpFCiAgICAgICAgTUVOVUlURU0gIlT47WRpdCBwb2RsZSAmZGF0YSIsICAgICAgICAgIElEX1ZJRVdfU09SVF9EQVRFCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIlT47WRpdCBwb2RsZSAmLi4uIiwgICAgICAgICAgIElEX1ZJRVdfRklMVEVSCiAgICB9CgogICAgUE9QVVAgIiZOYXN0YXZlbu0iICB7CiAgICAgICAgTUVOVUlURU0gIiZQb3R2cnpvduFu7S4uLiIsICAgICAgICAgICAgIDUwMQogICAgICAgIE1FTlVJVEVNICImUO1zbW8uLi4iLCAgICAgICAgICAgICAgICAgICBJRF9TRUxFQ1RfRk9OVAogICAgICAgIE1FTlVJVEVNICJVcHJhdml0IHBhbmVsICZu4XN0cm9q+S4uLiIsICA1MTIKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiJlBhbmVsIG7hc3Ryb2r5IiwgICAgICAgICAgICAgSURfVklFV19UT09MX0JBUiwgQ0hFQ0tFRAogICAgICAgIE1FTlVJVEVNICImUGFuZWwgemH47WVu7SIsICAgICAgICAgICAgICBJRF9WSUVXX0RSSVZFX0JBUiwgQ0hFQ0tFRAogICAgICAgIE1FTlVJVEVNICImU3Rhdm92/SD44WRlayIsICAgICAgICAgICAgICBJRF9WSUVXX1NUQVRVU0JBUiwgQ0hFQ0tFRAojaWZuZGVmIF9OT19FWFRFTlNJT05TCiAgICAgICAgTUVOVUlURU0gIiZDZWxh4SBvYnJhem92a2FcdEN0cmwrU2hpZnQrUyIsIElEX1ZJRVdfRlVMTFNDUkVFTgojZW5kaWYKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiJk1pbmltYWxpem92YXQgcPhpIHNwdZp07G7tIiwgNTA0CiAgICAgICAgTUVOVUlURU0gIiZVbG+eaXQgbmFzdGF2ZW7tIHD4aSB2eXBudXTtIiw1MTEKICAgIH0KCgogICAgUE9QVVAgIiZaYWJlenBl6GVu7SIgIHsKICAgICAgICBNRU5VSVRFTSAiJlD47XN0dXAuLi4iLCAgICAgICAgICAgICAgICAgNjA1CiAgICAgICAgTUVOVUlURU0gIiZMb2dvduFu7S4uLiIsICAgICAgICAgICAgICAgIDYwNgogICAgICAgIE1FTlVJVEVNICImVmxhc3Ru7WsuLi4iLCAgICAgICAgICAgICAgICA2MDcKICAgIH0KCiAgICBQT1BVUCAiJk9rbm8iICB7CiAgICAgICAgTUVOVUlURU0gIk5vdukgJm9rbm8iLCAgICAgICAgICAgICAgICAgIElEX1dJTkRPV19ORVcKICAgICAgICBNRU5VSVRFTSAiS2Fza+Fkb3bhbu1cdEN0cmwrRjUiLCAgICAgICAgSURfV0lORE9XX0NBU0NBREUKICAgICAgICBNRU5VSVRFTSAiVXNwb/jhZGF0ICZob3Jpem9udOFsbuwiLCAgICAgSURfV0lORE9XX1RJTEVfSE9SWgogICAgICAgIE1FTlVJVEVNICJVc3Bv+OFkYXQgJnZlcnRpa+FsbuxcdEN0cmwrRjQiLElEX1dJTkRPV19USUxFX1ZFUlQKI2lmbmRlZiBfTk9fRVhURU5TSU9OUwogICAgICAgIE1FTlVJVEVNICJaYXJvdm5hdCBhdXRvbWF0aWNreSIsICAgICAgICBJRF9XSU5ET1dfQVVUT1NPUlQKI2VuZGlmCiAgICAgICAgTUVOVUlURU0gIlphcm92bmF0ICZzeW1ib2x5IiwgICAgICAgICAgIElEX1dJTkRPV19BUlJBTkdFCiAgICAgICAgTUVOVUlURU0gIiZBa3R1YWxpem92YXRcdEY1IiwgICAgICAgICAgIElEX1JFRlJFU0gKICAgIH0KCiAgICBQT1BVUCAiJj8iICB7CiAgICAgICAgTUVOVUlURU0gIiZU6W1hdGEgbuFwb3bsZHlcdEYxIiwgICAgICAgIElEX0hFTFAKICAgICAgICBNRU5VSVRFTSAiSGxlZOFu7SB2ICZu4XBvduxk7C4uLlx0RjEiLCAgSURfSEVMUAogICAgICAgIE1FTlVJVEVNICImSmFrIHBvdZ7tdmF0IG7hcG927GR1XHRGMSIsICBJRF9IRUxQX1VTSU5HCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIiZJbmZvcm1hY2UgbyBXaW5lZmlsZS4uLiIsICAgIElEX0FCT1VUCiAgICB9Cn0KCgpJRERfRVhFQ1VURSBESUFMT0cgRklYRUQgSU1QVVJFIDE1LCAxMywgMjEwLCA2MwpTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpDQVBUSU9OICJTcHVzdGl0IgpGT05UIDgsICJNUyBTaGVsbCBEbGciCnsKICAgIENPTlRST0wgICAgICAgICAiIiwgMTAxLCAiU3RhdGljIiwgU1NfU0lNUExFfFNTX05PUFJFRklYLCAzLCA2LCAxNjIsIDEwCiAgICBDT05UUk9MICAgICAgICAgIiZQ+O1rYXo6IiwgLTEsICJTdGF0aWMiLCBTU19MRUZUTk9XT1JEV1JBUHxXU19HUk9VUCwgMywgMTgsIDYwLCAxMAogICAgRURJVFRFWFQgICAgICAgIDIwMSwgMywgMjksIDEzNCwgMTIsIEVTX0FVVE9IU0NST0xMCiAgICBDT05UUk9MICAgICAgICAgIkpha28gJlN5bWJvbCIsIDIxNCwgIkJ1dHRvbiIsIEJTX0FVVE9DSEVDS0JPWHxXU19UQUJTVE9QLDMsIDQ1LCA3MSwgMTIKICAgIERFRlBVU0hCVVRUT04gICAiT0siLCAxLCAxNTgsIDYsIDQ3LCAxNAogICAgUFVTSEJVVFRPTiAgICAgICJacnWaaXQiLCAyLCAxNTgsIDIzLCA0NywgMTQKICAgIFBVU0hCVVRUT04gICAgICAiJlBvbW9jIiwgMjU0LCAxNTgsIDQzLCA0NywgMTQKfQoKSUREX1NFTEVDVF9ERVNUSU5BVElPTiBESUFMT0cgRklYRUQgSU1QVVJFIDE1LCAxMywgMjEwLCA2MwpTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpDQVBUSU9OICJadm9sdGUgY+1sIgpGT05UIDgsICJNUyBTaGVsbCBEbGciCnsKICAgIENPTlRST0wgICAgICAgICAiIiwgMTAxLCAiU3RhdGljIiwgU1NfU0lNUExFfFNTX05PUFJFRklYLCAzLCA2LCAxNjIsIDEwCiAgICBDT05UUk9MICAgICAgICAgIiZDZXN0YToiLCAtMSwgIlN0YXRpYyIsIFNTX0xFRlROT1dPUkRXUkFQfFdTX0dST1VQLCAzLCAxOCwgNjAsIDEwCiAgICBFRElUVEVYVCAgICAgICAgMjAxLCAzLCAyOSwgMTM0LCAxMiwgRVNfQVVUT0hTQ1JPTEwKICAgIERFRlBVU0hCVVRUT04gICAiT0siLCAxLCAxNTgsIDYsIDQ3LCAxNAogICAgUFVTSEJVVFRPTiAgICAgICJacnWaaXQiLCAyLCAxNTgsIDIzLCA0NywgMTQKICAgIFBVU0hCVVRUT04gICAgICAiJlByb2No4XpldCIsIDI1NCwgMTU4LCA0MywgNDcsIDE0Cn0KClNUUklOR1RBQkxFCnsKICAgIElEU19GT05UX1NFTF9ETEdfTkFNRSAgICJBcGxpa2924W7tIG5hc3RhdmVu7SBw7XNtYSIKICAgIElEU19GT05UX1NFTF9FUlJPUiAgICAgICJDaHliYSBw+Gkgdm9sYuwgbm926WhvIHDtc21hLiIKfQoKU1RSSU5HVEFCTEUKewogICAgSURTX1dJTkVGSUxFICAgICAgICAgICAgIldpbmVmaWxlIgogICAgSURTX0VSUk9SICAgICAgICAgICAgICAgIkNoeWJhIgogICAgSURTX1JPT1RfRlMgICAgICAgICAgICAgInJvb3QgZnMiCiAgICBJRFNfVU5JWEZTICAgICAgICAgICAgICAidW5peGZzIgogICAgSURTX0RFU0tUT1AgICAgICAgICAgICAgIlBsb2NoYSIKICAgIElEU19TSEVMTCAgICAgICAgICAgICAgICJQ+O1rYXpvdv0g+OFkZWsiCiAgICBJRFNfVElUTEVGTVQgICAgICAgICAgICAiJXMgLSAlcyIKICAgIElEU19OT19JTVBMICAgICAgICAgICAgICJaYXTtbSBuZWltcGxlbWVudG924W5vIgogICAgSURTX1dJTkVfRklMRSAgICAgICAgICAgIldpbmUgRmlsZSIKfQoKU1RSSU5HVEFCTEUKewogICAgSURTX0NPTF9OQU1FICAgICAgICAgICAgIkpt6W5vIgogICAgSURTX0NPTF9TSVpFICAgICAgICAgICAgIlZlbGlrb3N0IgogICAgSURTX0NPTF9DREFURSAgICAgICAgICAgIkRhdHVtIHZ5dHZv+GVu7SIKICAgIElEU19DT0xfQURBVEUgICAgICAgICAgICJEYXR1bSBwb3NsZWRu7WhvIHD47XN0dXB1IgogICAgSURTX0NPTF9NREFURSAgICAgICAgICAgIkRhdHVtIHBvc2xlZG7tIG1vZGlmaWthY2UiCiAgICBJRFNfQ09MX0lEWCAgICAgICAgICAgICAiSW5kZXgvSW5vZGUiCiAgICBJRFNfQ09MX0xJTktTICAgICAgICAgICAiTGlua3kiCiAgICBJRFNfQ09MX0FUVFIgICAgICAgICAgICAiQXRyaWJ1dHkiCiAgICBJRFNfQ09MX1NFQyAgICAgICAgICAgICAiWmFiZXpwZehlbu0iCgogICAgSURTX0ZSRUVfU1BBQ0VfRk1UICAgICAgIiVzIHogJXMgdm9sbulobyIKfQo=