LyoKICogQ29weXJpZ2h0IDIwMDEgRXJpYyBQb3VlY2gKICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiAqLwoKTEFOR1VBR0UgTEFOR19GUkVOQ0gsIFNVQkxBTkdfREVGQVVMVAoKU1RSSU5HVEFCTEUKQkVHSU4KSURTX0VESVQsCQkiJkVkaXRlciIKSURTX0RFRkFVTFQsCQkiUGFyICZk6WZhdXQiCklEU19QUk9QRVJUSUVTLAkJIiZQcm9wcmnpdOlzIgpJRFNfTUFSSywJCSImTWFycXVlciIKSURTX0NPUFksCQkiJkNvcGllciIKSURTX1BBU1RFLAkJIkMmb2xsZXIiCklEU19TRUxFQ1RBTEwsCQkiJlPpbGVjdGlvbm5lciB0b3V0IgpJRFNfU0NST0xMLAkJIiZE6WZpbGVyIgpJRFNfU0VBUkNILAkJIkMmaGVyY2hlciIKSURTX0ZOVF9ESVNQTEFZLAkiQ2hhcXVlIGNhcmFjdOhyZSBhICVsZCBwb2ludHMgZW4gbGFyZ2V1ciBldCAlbGQgcG9pbnRzIGVuIGhhdXRldXIiCklEU19GTlRfUFJFVklFV18xLAkiQ2VjaSBlc3QgdW4gdGVzdCIKSURTX0ZOVF9QUkVWSUVXXzIsCSLp6OD06yIKSURTX0RMR19USVRfREVGQVVMVCAgICAgIkNvbmZpZ3VyYXRpb24gcGFyIGTpZmF1bHQiCklEU19ETEdfVElUX0NVUlJFTlQgICAgICJDb25maWd1cmF0aW9uIGNvdXJhbnRlIgpFTkQKCklERF9PUFRJT04gRElBTE9HIExPQURPTkNBTEwgTU9WRUFCTEUgRElTQ0FSREFCTEUgMzYsIDI0LCAxNDAsIDEwNQpTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpDQVBUSU9OICIgT3B0aW9ucyAiCkZPTlQgOCwgIkhlbHYiCnsKCUdST1VQQk9YICJUYWlsbGUgZHUgY3Vyc2V1ciIsIC0xLCAxMCwgMTEsIDYwLCA0NCwgQlNfR1JPVVBCT1gKCUFVVE9SQURJT0JVVFRPTiAiJlBldGl0IiwgSURDX09QVF9DVVJTT1JfU01BTEwsIDE0LCAyMywgNDQsIDEwLCBXU19UQUJTVE9QCglBVVRPUkFESU9CVVRUT04gIiZNb3llbiIsIElEQ19PUFRfQ1VSU09SX01FRElVTSwgMTQsIDMzLCA0NCwgMTAsIFdTX1RBQlNUT1AKCUFVVE9SQURJT0JVVFRPTiAiJkdyYW5kIiwgSURDX09QVF9DVVJTT1JfTEFSR0UsIDE0LCA0MywgNDQsIDEwLCBXU19UQUJTVE9QCgoJR1JPVVBCT1ggIkNvbnRy9GxlIiwgLTEsIDc1LCAxMSwgMTI1LCA0NCwgQlNfR1JPVVBCT1gKCUxURVhUICJQb3B1cCBtZW51IiwgLTEsIDc5LCAyMywgNTAsIDEwCglBVVRPQ0hFQ0tCT1ggIiZDb250cm9sIiwgSURDX09QVF9DT05GX0NUUkwsIDEyOSwgMjMsIDYwLCAxMCwgV1NfVEFCU1RPUAoJQVVUT0NIRUNLQk9YICJTJmhpZnQiLCBJRENfT1BUX0NPTkZfU0hJRlQsIDEyOSwgMzMsIDYwLCAxMCwgV1NfVEFCU1RPUAoJTFRFWFQgIkVkaXRpb24gcmFwaWRlIiwgLTEsIDc5LCA0MywgNTAsIDEwCglBVVRPQ0hFQ0tCT1ggIiZhY3RpdmVyIiwgSURDX09QVF9RVUlDS19FRElULCAxMjksIDQzLCA2MCwgMTAsIFdTX1RBQlNUT1AKCglHUk9VUEJPWCAiSGlzdG9yaXF1ZSBkZXMgY29tbWFuZGVzIiwgLTEsIDEwLCA1NywgMTkwLCAzNSwgQlNfR1JPVVBCT1gKCUxURVhUICImVGFpbGxlIGRlIGxhIG3pbW9pcmUgdGFtcG9uIDoiLCAtMSwgMTQsIDY3LCA3OCwgMTgKCUVESVRURVhUIElEQ19PUFRfSElTVF9TSVpFLCA5MiwgNjksIDMxLCAxMiwgV1NfVEFCU1RPUHxXU19CT1JERVJ8RVNfTlVNQkVSCglDT05UUk9MICIiLCBJRENfT1BUX0hJU1RfU0laRV9VRCwgIm1zY3Rsc191cGRvd24zMiIsIFVEU19TRVRCVUREWUlOVHxVRFNfQUxJR05SSUdIVHxVRFNfQVVUT0JVRERZfFVEU19BUlJPV0tFWVN8VURTX05PVEhPVVNBTkRTLCAwLCAwLCAwLCAwCglBVVRPQ0hFQ0tCT1ggIiZTdXBwcmltZXIgbGVzIGRvdWJsb25zIiwgSURDX09QVF9ISVNUX0RPVUJMRSwgMTMwLCA2NywgNTAsIDE4LCBXU19UQUJTVE9QfEJTX01VTFRJTElORQp9CgpJRERfRk9OVCBESUFMT0cgTE9BRE9OQ0FMTCBNT1ZFQUJMRSBESVNDQVJEQUJMRSAzNiwgMjQsIDE0MCwgMTA1ClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkNBUFRJT04gIiBQb2xpY2UgIgpGT05UIDgsICJIZWx2Igp7CglMVEVYVCAiJlBvbGljZSIsIC0xLCA1LCA1LCAyNCwgOAoJTElTVEJPWCBJRENfRk5UX0xJU1RfRk9OVCwgNSwgMTgsIDkwLCA0MiwgTEJTX1NPUlR8V1NfVlNDUk9MTAoJTFRFWFQgIiZDb3VsZXVyIiwgLTEsIDEwMCwgNSwgNTAsIDgKCUNPTlRST0wgIiIsIElEQ19GTlRfQ09MT1JfRkcsICJXaW5lQ29uQ29sb3JQcmV2aWV3IiwgMEwsIDEwMCwgMTgsIDQ4LCAxNgoJQ09OVFJPTCAiIiwgSURDX0ZOVF9DT0xPUl9CSywgIldpbmVDb25Db2xvclByZXZpZXciLCAwTCwgMTAwLCA0MCwgNDgsIDE2CglMVEVYVCAiJlRhaWxsZSIsIC0xLCAxNTgsIDUsIDQwLCA4CglMSVNUQk9YIElEQ19GTlRfTElTVF9TSVpFLCAxNTgsIDE4LCA0MCwgNjAsIFdTX1ZTQ1JPTEwKCUNPTlRST0wgIiIsIElEQ19GTlRfUFJFVklFVywgIldpbmVDb25Gb250UHJldmlldyIsIDBMLCA1LCA2MCwgMTA5LCA0MAoJTFRFWFQgIiIsIElEQ19GTlRfRk9OVF9JTkZPLCAxMjgsIDc2LCA4MCwgMTgKfQoKSUREX0NPTkZJRyBESUFMT0cgTE9BRE9OQ0FMTCBNT1ZFQUJMRSBESVNDQVJEQUJMRSAzNiwgMjQsIDE0MCwgMTA1ClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkNBUFRJT04gIiBDb25maWd1cmF0aW9uICIKRk9OVCA4LCAiSGVsdiIKewoJR1JPVVBCT1ggIlRhaWxsZSBt6W1vaXJlIHRhbXBvbiDpY3JhbiIsIC0xLCAxMCwgMTEsIDExMCwgNDIsIEJTX0dST1VQQk9YCglMVEVYVCAiJkxhcmdldXIgOiIsIC0xLCAxNCwgMjUsIDU0LCA5CglFRElUVEVYVCBJRENfQ05GX1NCX1dJRFRILCA3OCwgMjMsIDM2LCAxMiwgV1NfVEFCU1RPUHxXU19CT1JERVJ8RVNfTlVNQkVSCglDT05UUk9MICIiLCBJRENfQ05GX1NCX1dJRFRIX1VELCAibXNjdGxzX3VwZG93bjMyIiwgVURTX1NFVEJVRERZSU5UfFVEU19BTElHTlJJR0hUfFVEU19BVVRPQlVERFl8VURTX0FSUk9XS0VZU3xVRFNfTk9USE9VU0FORFMsIDAsIDAsIDAsIDAKCUxURVhUICJIYSZ1dGV1ciA6IiwgLTEsIDE0LCAzOSwgNTQsIDkKCUVESVRURVhUIElEQ19DTkZfU0JfSEVJR0hULCA3OCwgMzcsIDM2LCAxMiwgV1NfVEFCU1RPUHxXU19CT1JERVJ8RVNfTlVNQkVSCglDT05UUk9MICIiLCBJRENfQ05GX1NCX0hFSUdIVF9VRCwgIm1zY3Rsc191cGRvd24zMiIsIFVEU19TRVRCVUREWUlOVHxVRFNfQUxJR05SSUdIVHxVRFNfQVVUT0JVRERZfFVEU19BUlJPV0tFWVN8VURTX05PVEhPVVNBTkRTLCAwLCAwLCAwLCAwCgoJR1JPVVBCT1ggIlRhaWxsZSBkZSBsYSBmZW7qdHJlIiwgLTEsIDEwLCA1NSwgMTEwLCA0MgoJTFRFWFQgIkxhJnJnZXVyIDoiLCAtMSwgMTQsIDY5LCA1NCwgOQoJRURJVFRFWFQgSURDX0NORl9XSU5fV0lEVEgsIDc4LCA2NywgMzYsIDEyLCBXU19UQUJTVE9QfFdTX0JPUkRFUnxFU19OVU1CRVIKCUNPTlRST0wgIiIsIElEQ19DTkZfV0lOX1dJRFRIX1VELCAibXNjdGxzX3VwZG93bjMyIiwgVURTX1NFVEJVRERZSU5UfFVEU19BTElHTlJJR0hUfFVEU19BVVRPQlVERFl8VURTX0FSUk9XS0VZU3xVRFNfTk9USE9VU0FORFMsIDAsIDAsIDAsIDAKCUxURVhUICJIYXUmdGV1ciA6IiwgLTEsIDE0LCA4MywgNTQsIDkKCUVESVRURVhUIElEQ19DTkZfV0lOX0hFSUdIVCwgNzgsIDgxLCAzNiwgMTIsIFdTX1RBQlNUT1B8V1NfQk9SREVSfEVTX05VTUJFUgoJQ09OVFJPTCAiIiwgSURDX0NORl9XSU5fSEVJR0hUX1VELCAibXNjdGxzX3VwZG93bjMyIiwgVURTX1NFVEJVRERZSU5UfFVEU19BTElHTlJJR0hUfFVEU19BVVRPQlVERFl8VURTX0FSUk9XS0VZU3xVRFNfTk9USE9VU0FORFMsIDAsIDAsIDAsIDAKfQo=