LyoKICogd2luZWNvbnNvbGUgKFNwYW5pc2ggcmVzb3VyY2VzKQogKgogKiBDb3B5cmlnaHQgMjAwNCBKb3PpIE1hbnVlbCBGZXJyZXIgT3J0aXoKICogQ29weXJpZ2h0IDIwMDggSmFpbWUgUmF2ZSBUb3JyZXMKICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCiAqLwoKI2luY2x1ZGUgIndpbmVjb25zb2xlX3Jlcy5oIgoKTEFOR1VBR0UgTEFOR19TUEFOSVNILCBTVUJMQU5HX05FVVRSQUwKClNUUklOR1RBQkxFCkJFR0lOCklEU19FRElULAkJIiZFZGl0YXIiCklEU19ERUZBVUxULAkJIlBvciAmZGVmZWN0byIKSURTX1BST1BFUlRJRVMsCQkiJlByb3BpZWRhZGVzIgpJRFNfTUFSSywJCSImTWFyY2FyIgpJRFNfQ09QWSwJCSImQ29waWFyIgpJRFNfUEFTVEUsCQkiJlBlZ2FyIgpJRFNfU0VMRUNUQUxMLAkJIiZTZWxlY2Npb25hciB0b2RvIgpJRFNfU0NST0xMLAkJIkRlc3BsYXphJnIiCklEU19TRUFSQ0gsCQkiJkJ1c2NhciIKSURTX0ZOVF9ESVNQTEFZLAkiQ2FkYSBjYXJhY3RlciB0aWVuZSAlbGQgcO14ZWxlcyBkZSBhbmNobyBwb3IgJWxkIHDteGVsZXMgZGUgYWx0byIKSURTX0ZOVF9QUkVWSUVXLAkiRXN0byBlcyB1bmEgcHJ1ZWJhIgpJRFNfRExHX1RJVF9ERUZBVUxULCAgICAiQ29uZmlndXJhY2nzbiAtIFZhbG9yZXMgcG9yIGRlZmVjdG8iCklEU19ETEdfVElUX0NVUlJFTlQsICAgICJDb25maWd1cmFjafNuIC0gVmFsb3JlcyBhY3R1YWxlcyIKSURTX0RMR19USVRfRVJST1IsCSJFcnJvciBkZSBjb25maWd1cmFjafNuIgpJRFNfRExHX0VSUl9TQldJTlNJWkUsCSJFbCB0YW1h8W8gZGVsIGJ1ZmZlciBkZSBsYSBwYW50YWxsYSBkZWJlIHNlciBtYXlvciBvIGlndWFsIHF1ZSBlbCBkZSBsYSB2ZW50YW5hIgoKSURTX0NNRF9JTlZBTElEX0VWRU5UX0lEICAgIndpbmVjb25zb2xlOiBObyBzZSBwdWRvIHByb2Nlc2FyIGVsIGlkIGRlbCBldmVudG9cbiIKSURTX0NNRF9JTlZBTElEX0JBQ0tFTkQgICAgIndpbmVjb25zb2xlOiBGaW5hbCBpbnZhbGlkb1xuIgpJRFNfQ01EX0lOVkFMSURfT1BUSU9OICAgICAid2luZWNvbnNvbGU6IExpbmVhIGRlIGNvbWFuZG8gbm8gcmVjb25vY2lkYVxuIgpJRFNfQ01EX0FCT1VUICAgICAgICAgICAgICAiSW5pY2lhIHVuIHByb2dyYW1hIGVuIHVuYSBjb25zb2xhIGRlIFdpbmVcbiIKSURTX0NNRF9MQVVOQ0hfRkFJTEVEICAgICAgIndpbmVjb25zb2xlOiBFbCBhcnJhbnF1ZSBkZWwgcHJvZ3JhbWEgJXMgZmFsbPMuXG4iXAogICAgICAgICAgICAgICAgICAgICAgICAgICAiRWwgY29tYW5kbyBlcyBpbnbhbGlkby5cbiIKCklEU19VU0FHRV9IRUFERVIgICAgICAgICAgICJcblVzbzpcbiAgd2luZWNvbnNvbGUgW29wY2lvbmVzXSA8Y29tYW5kbz5cblxuT3BjaW9uZXM6XG4iCklEU19VU0FHRV9CQUNLRU5EICAgICAgICAgICIgIC0tYmFja2VuZD17dXNlcnxjdXJzZXN9ICBTZWxlY2Npb25hbmRvIHVzZXIgZ2VuZXJhcuEgdW5hIG51ZXZhIHZlbnRhbmEsIGN1cnNlc1xuIlwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlbnRhcmEgY29uZmlndXJhciBlbCB0ZXJtaW5hbCBhY3R1YWwgY29tbyB1bmEgY29uc29sYSBkZSBXaW5lXG4iCklEU19VU0FHRV9DT01NQU5EICAgICAgICAgICIgIDxjb21hbmRvPiAgICAgICAgICAgICAgICAgRUwgcHJvZ3JhbWEgZGUgV2luZSBxdWUgc2UgaW5pY2lhcuEgZW4gbGEgY29uc29sYVxuIgpJRFNfVVNBR0VfRk9PVEVSICAgICAgICAgICAiXG5FamVtcGxvOlxuICB3aW5lY29uc29sZSBjbWRcbkluaWNpYSBlbCBzaW1ib2xvIGRlbCBzaXN0ZW1hIGRlIFdpbmUgZW4gdW5hIGNvbnNvbGEgV2luZVxuXG4iCkVORAoKSUREX09QVElPTiBESUFMT0cgMzYsIDI0LCAxNDAsIDEwNQpTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpDQVBUSU9OICIgT3BjaW9uZXMgIgpGT05UIDgsICJNUyBTaGVsbCBEbGciCnsKCUdST1VQQk9YICJUYW5h8W8gZGVsIGN1cnNvciIsIC0xLCAxMCwgMTEsIDYwLCA0NCwgQlNfR1JPVVBCT1gKCUFVVE9SQURJT0JVVFRPTiAiJlBlcXVl8W8iLCBJRENfT1BUX0NVUlNPUl9TTUFMTCwgMTQsIDIzLCA0NCwgMTAsIFdTX1RBQlNUT1AKCUFVVE9SQURJT0JVVFRPTiAiJk1lZGlhbm8iLCBJRENfT1BUX0NVUlNPUl9NRURJVU0sIDE0LCAzMywgNDQsIDEwLCBXU19UQUJTVE9QCglBVVRPUkFESU9CVVRUT04gIiZHcmFuZGUiLCBJRENfT1BUX0NVUlNPUl9MQVJHRSwgMTQsIDQzLCA0NCwgMTAsIFdTX1RBQlNUT1AKCglHUk9VUEJPWCAiQ29udHJvbCIsIC0xLCA3NSwgMTEsIDEyNSwgNDQsIEJTX0dST1VQQk9YCglMVEVYVCAiTWVu+iBlbWVyZ2VudGUiLCAtMSwgNzksIDIzLCA0MCwgMTAKCUFVVE9DSEVDS0JPWCAiJkNvbnRyb2wiLCBJRENfT1BUX0NPTkZfQ1RSTCwgMTI5LCAyMywgNjAsIDEwLCBXU19UQUJTVE9QCglBVVRPQ0hFQ0tCT1ggIlMmaGlmdCIsIElEQ19PUFRfQ09ORl9TSElGVCwgMTI5LCAzMywgNjAsIDEwLCBXU19UQUJTVE9QCglMVEVYVCAiRWRpY2nzbiBy4XBpZGEiLCAtMSwgNzksIDQzLCA1MCwgMTAKCUFVVE9DSEVDS0JPWCAiJmhhYmlsaXRhciIsIElEQ19PUFRfUVVJQ0tfRURJVCwgMTI5LCA0MywgNjAsIDEwLCBXU19UQUJTVE9QCgoJR1JPVVBCT1ggIkhpc3RvcmlhbCBkZSBjb21hbmRvcyIsIC0xLCAxMCwgNTcsIDE5MCwgMzUsIEJTX0dST1VQQk9YCglMVEVYVCAiJk76bWVybyBkZSBjb21hbmRvcyByZWNvcmRhZG9zIDoiLCAtMSwgMTQsIDY3LCA3OCwgMTgKCUVESVRURVhUIElEQ19PUFRfSElTVF9TSVpFLCA5MiwgNjksIDMxLCAxMiwgV1NfVEFCU1RPUHxXU19CT1JERVJ8RVNfTlVNQkVSCglDT05UUk9MICIiLCBJRENfT1BUX0hJU1RfU0laRV9VRCwgIm1zY3Rsc191cGRvd24zMiIsIFVEU19TRVRCVUREWUlOVHxVRFNfQUxJR05SSUdIVHxVRFNfQVVUT0JVRERZfFVEU19BUlJPV0tFWVN8VURTX05PVEhPVVNBTkRTLCAwLCAwLCAwLCAwCglBVVRPQ0hFQ0tCT1ggIiZFbGltaW5hciBkdXBsaWNhZG9zIiwgSURDX09QVF9ISVNUX05PRE9VQkxFLCAxMzAsIDY3LCA1MCwgMTgsIFdTX1RBQlNUT1B8QlNfTVVMVElMSU5FCn0KCklERF9GT05UIERJQUxPRyAzNiwgMjQsIDE0MCwgMTA1ClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkNBUFRJT04gIiBGdWVudGUgIgpGT05UIDgsICJNUyBTaGVsbCBEbGciCnsKCUxURVhUICImRnVlbnRlIiwgLTEsIDUsIDUsIDI0LCA4CglMSVNUQk9YIElEQ19GTlRfTElTVF9GT05ULCA1LCAxOCwgOTAsIDQyLCBMQlNfU09SVHxXU19WU0NST0xMCglMVEVYVCAiJkNvbG9yIiwgLTEsIDEwMCwgNSwgNTAsIDgKCUNPTlRST0wgIiIsIElEQ19GTlRfQ09MT1JfRkcsICJXaW5lQ29uQ29sb3JQcmV2aWV3IiwgMEwsIDEwMCwgMTgsIDQ4LCAxNgoJQ09OVFJPTCAiIiwgSURDX0ZOVF9DT0xPUl9CSywgIldpbmVDb25Db2xvclByZXZpZXciLCAwTCwgMTAwLCA0MCwgNDgsIDE2CglMVEVYVCAiJlRhbWHxbyIsIC0xLCAxNTgsIDUsIDQwLCA4CglMSVNUQk9YIElEQ19GTlRfTElTVF9TSVpFLCAxNTgsIDE4LCA0MCwgNjAsIFdTX1ZTQ1JPTEwKCUNPTlRST0wgIiIsIElEQ19GTlRfUFJFVklFVywgIldpbmVDb25Gb250UHJldmlldyIsIDBMLCA1LCA2MCwgMTA5LCA0MAoJTFRFWFQgIiIsIElEQ19GTlRfRk9OVF9JTkZPLCAxMjgsIDc2LCA4MCwgMTgKfQoKSUREX0NPTkZJRyBESUFMT0cgMzYsIDI0LCAxNDAsIDEwNQpTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpDQVBUSU9OICIgQ29uZmlndXJhY2nzbiAiCkZPTlQgOCwgIk1TIFNoZWxsIERsZyIKewoJR1JPVVBCT1ggIlpvbmEgZGUgYnVmZmVyIiwgLTEsIDEwLCAxMSwgMTAwLCA0MiwgQlNfR1JPVVBCT1gKCUxURVhUICImQW5jaHVyYSA6IiwgLTEsIDE0LCAyNSwgNTQsIDkKCUVESVRURVhUIElEQ19DTkZfU0JfV0lEVEgsIDY4LCAyMywgMzYsIDEyLCBXU19UQUJTVE9QfFdTX0JPUkRFUnxFU19OVU1CRVIKCUNPTlRST0wgIiIsIElEQ19DTkZfU0JfV0lEVEhfVUQsICJtc2N0bHNfdXBkb3duMzIiLCBVRFNfU0VUQlVERFlJTlR8VURTX0FMSUdOUklHSFR8VURTX0FVVE9CVUREWXxVRFNfQVJST1dLRVlTfFVEU19OT1RIT1VTQU5EUywgMCwgMCwgMCwgMAoJTFRFWFQgIiZBbHR1cmEgOiIsIC0xLCAxNCwgMzksIDU0LCA5CglFRElUVEVYVCBJRENfQ05GX1NCX0hFSUdIVCwgNjgsIDM3LCAzNiwgMTIsIFdTX1RBQlNUT1B8V1NfQk9SREVSfEVTX05VTUJFUgoJQ09OVFJPTCAiIiwgSURDX0NORl9TQl9IRUlHSFRfVUQsICJtc2N0bHNfdXBkb3duMzIiLCBVRFNfU0VUQlVERFlJTlR8VURTX0FMSUdOUklHSFR8VURTX0FVVE9CVUREWXxVRFNfQVJST1dLRVlTfFVEU19OT1RIT1VTQU5EUywgMCwgMCwgMCwgMAoKCUdST1VQQk9YICJUYW1h8W8gZGUgdmVudGFuYSIsIC0xLCAxMCwgNTUsIDEwMCwgNDIKCUxURVhUICJBJm5jaHVyYSA6IiwgLTEsIDE0LCA2OSwgNTQsIDkKCUVESVRURVhUIElEQ19DTkZfV0lOX1dJRFRILCA2OCwgNjcsIDM2LCAxMiwgV1NfVEFCU1RPUHxXU19CT1JERVJ8RVNfTlVNQkVSCglDT05UUk9MICIiLCBJRENfQ05GX1dJTl9XSURUSF9VRCwgIm1zY3Rsc191cGRvd24zMiIsIFVEU19TRVRCVUREWUlOVHxVRFNfQUxJR05SSUdIVHxVRFNfQVVUT0JVRERZfFVEU19BUlJPV0tFWVN8VURTX05PVEhPVVNBTkRTLCAwLCAwLCAwLCAwCglMVEVYVCAiQSZsdHVyYSA6IiwgLTEsIDE0LCA4MywgNTQsIDkKCUVESVRURVhUIElEQ19DTkZfV0lOX0hFSUdIVCwgNjgsIDgxLCAzNiwgMTIsIFdTX1RBQlNUT1B8V1NfQk9SREVSfEVTX05VTUJFUgoJQ09OVFJPTCAiIiwgSURDX0NORl9XSU5fSEVJR0hUX1VELCAibXNjdGxzX3VwZG93bjMyIiwgVURTX1NFVEJVRERZSU5UfFVEU19BTElHTlJJR0hUfFVEU19BVVRPQlVERFl8VURTX0FSUk9XS0VZU3xVRFNfTk9USE9VU0FORFMsIDAsIDAsIDAsIDAKCglHUk9VUEJPWCAiRmluIGRlbCBwcm9ncmFtYSIsIC0xLCAxMTUsIDExLCA4MCwgNDIsIEJTX0dST1VQQk9YCglBVVRPQ0hFQ0tCT1ggIiZDZXJyYXIgY29uc29sYSIsIElEQ19DTkZfQ0xPU0VfRVhJVCwgMTE5LCAyNSwgNzUsIDIwLCBXU19UQUJTVE9QCgoJR1JPVVBCT1ggIkVkaWNp824iLCAtMSwgMTE1LCA1NSwgODAsIDQyCglDT01CT0JPWCBJRENfQ05GX0VESVRJT05fTU9ERSwgMTE5LCA2OSwgNzUsIDIwLCBDQlNfRFJPUERPV05MSVNUfFdTX1ZTQ1JPTEx8V1NfVEFCU1RPUAp9CgpJRERfU0FWRV9TRVRUSU5HUyBESUFMT0cgMjAsIDIwLCAxNDAsIDYwClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX0NBUFRJT04KQ0FQVElPTiAiUGFy4W1ldHJvcyBkZSBjb25zb2xhIgpGT05UIDgsICJNUyBTaGVsbCBEbGciCnsKCUdST1VQQk9YICIiLCAtMSwgMTAsIDEwLCAxMjAsIDMxLCBCU19HUk9VUEJPWAoJQVVUT1JBRElPQlVUVE9OICJHdWFyZGFyIGVzdGEgY29uZmlndXJhY2nzbiBwYXJhIHNlc2lvbmVzIHBvc3RlcmlvcmVzIiwgSURDX1NBVl9TQVZFLCAxNCwgMTUsIDExMCwgMTAsIFdTX1RBQlNUT1AKCUFVVE9SQURJT0JVVFRPTiAiTW9kaWZpY2FyIHPzbG8gbGEgc2VzafNuIGFjdHVhbCIsIElEQ19TQVZfU0VTU0lPTiwgMTQsIDI3LCAxMTAsIDEwLCBXU19UQUJTVE9QCgoJUFVTSEJVVFRPTiAiQWNlcHRhciIsIElET0ssIDIwLCA0NSwgMzUsIDEyCglQVVNIQlVUVE9OICJDYW5jZWxhciIsIElEQ0FOQ0VMLCA2NSwgNDUsIDM1LCAxMgp9Cg==