LyoKICogV2luZUNvbnNvbGUgU2ltcGxpZmllZCBDaGluZXNlIExhbmd1YWdlIFN1cHBvcnQKICoKICogQ29weXJpZ2h0IDIwMDIgbGl1c3BpZGVyIDxsaXVzcGlkZXJAeWFob28uY29tPgogKiAKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiAqLwoKTEFOR1VBR0UgTEFOR19DSElORVNFLCBTVUJMQU5HX0NISU5FU0VfU0lNUExJRklFRAoKU1RSSU5HVEFCTEUKQkVHSU4KSURTX0VESVQsCQkiseC8raOoJkWjqSIKSURTX0RFRkFVTFQsCQkiyejOqsSsyM/WtaOoJkSjqSIKSURTX1BST1BFUlRJRVMsCQkiyvTQ1KOoJlCjqSIKSURTX01BUkssCQkiseq8x6OoJk2jqSIKSURTX0NPUFksCQkiuLTWxqOoJkOjqSIKSURTX1BBU1RFLAkJItWzzPmjqCZQo6kiCklEU19TRUxFQ1RBTEwsCQkiyKvRoaOoJlOjqSIKSURTX1NDUk9MTCwJCSK59ravo6gmUqOpIgpJRFNfU0VBUkNILAkJIsvRy/ejqCZFo6kiCklEU19GTlRfRElTUExBWSwJIsO/uPbX1ra8yscgJWxkILj2z/HL2L/to6wlbGQguPbP8cvYuN8iCklEU19GTlRfUFJFVklFV18xLAki1eLKx9K7ts6y4srU0+++5CIKSURTX0ZOVF9QUkVWSUVXXzIsCSIiCklEU19ETEdfVElUX0RFRkFVTFQsICAgICLF5NbDIC0gxKzIz8no1sMiCklEU19ETEdfVElUX0NVUlJFTlQsICAgICLF5NbDIC0gtbHHsMno1sMiCklEU19ETEdfVElUX0VSUk9SLCAgICAgICJDb25maWd1cmF0aW9uIGVycm9yIgpJRFNfRExHX0VSUl9TQldJTlNJWkUsICAiU2NyZWVuIGJ1ZmZlciBzaXplIG11c3QgYmUgZ3JlYXRlciBvciBlcXVhbCB0byB0aGUgd2luZG93J3Mgb25lIgpFTkQKCklERF9PUFRJT04gRElBTE9HIExPQURPTkNBTEwgTU9WRUFCTEUgRElTQ0FSREFCTEUgMzYsIDI0LCAxNDAsIDEwNQpTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpDQVBUSU9OICIg0aHP7iAiCkZPTlQgMTQsICJIZWx2Igp7CglHUk9VUEJPWCAiueKx6rPftOciLCAtMSwgMTAsIDExLCA2MCwgNDQsIEJTX0dST1VQQk9YCglBVVRPUkFESU9CVVRUT04gItCho6gmU6OpIiwgSURDX09QVF9DVVJTT1JfU01BTEwsIDE0LCAyMywgNDQsIDEwLCBXU19UQUJTVE9QCglBVVRPUkFESU9CVVRUT04gItbQo6gmTaOpIiwgSURDX09QVF9DVVJTT1JfTUVESVVNLCAxNCwgMzMsIDQ0LCAxMCwgV1NfVEFCU1RPUAoJQVVUT1JBRElPQlVUVE9OICK086OoJkyjqSIsIElEQ19PUFRfQ1VSU09SX0xBUkdFLCAxNCwgNDMsIDQ0LCAxMCwgV1NfVEFCU1RPUAoKCUdST1VQQk9YICK/2NbGIiwgLTEsIDc1LCAxMSwgMTI1LCA0NCwgQlNfR1JPVVBCT1gKCUxURVhUICK1r7P2ssu1pSIsIC0xLCA3OSwgMjMsIDQwLCAxMAoJQVVUT0NIRUNLQk9YICImQ29udHJvbCIsIElEQ19PUFRfQ09ORl9DVFJMLCAxMjksIDIzLCA2MCwgMTAsIFdTX1RBQlNUT1AKCUFVVE9DSEVDS0JPWCAiUyZoaWZ0IiwgSURDX09QVF9DT05GX1NISUZULCAxMjksIDMzLCA2MCwgMTAsIFdTX1RBQlNUT1AKCUxURVhUICK/7MvZseC8rSIsIC0xLCA3OSwgNDMsIDUwLCAxMAoJQVVUT0NIRUNLQk9YICLG9NPDo6gmRaOpIiwgSURDX09QVF9RVUlDS19FRElULCAxMjksIDQzLCA2MCwgMTAsIFdTX1RBQlNUT1AKCglHUk9VUEJPWCAiwPrKt8P8we4iLCAtMSwgMTAsIDU3LCAxOTAsIDM1LCBCU19HUk9VUEJPWAoJTFRFWFQgItfutPO8x8K8w/zB7sr9o7oiLCAtMSwgMTQsIDY3LCA3OCwgMTgKCUVESVRURVhUIElEQ19PUFRfSElTVF9TSVpFLCA5MiwgNjksIDMxLCAxMiwgV1NfVEFCU1RPUHxXU19CT1JERVJ8RVNfTlVNQkVSCglDT05UUk9MICIiLCBJRENfT1BUX0hJU1RfU0laRV9VRCwgIm1zY3Rsc191cGRvd24zMiIsIFVEU19TRVRCVUREWUlOVHxVRFNfQUxJR05SSUdIVHxVRFNfQVVUT0JVRERZfFVEU19BUlJPV0tFWVN8VURTX05PVEhPVVNBTkRTLCAwLCAwLCAwLCAwCglBVVRPQ0hFQ0tCT1ggIsm+s/3BrND4z+DNrLXEw/zB7qOoJlKjqSIsIElEQ19PUFRfSElTVF9OT0RPVUJMRSwgMTMwLCA2NywgNTAsIDE4LCBXU19UQUJTVE9QfEJTX01VTFRJTElORQp9CgpJRERfRk9OVCBESUFMT0cgTE9BRE9OQ0FMTCBNT1ZFQUJMRSBESVNDQVJEQUJMRSAzNiwgMjQsIDE0MCwgMTA1ClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkNBUFRJT04gIiDX1szlICIKRk9OVCAxNCwgIkhlbHYiCnsKCUxURVhUICLX1szlo6gmRqOpIiwgLTEsIDUsIDUsIDI0LCA4CglMSVNUQk9YIElEQ19GTlRfTElTVF9GT05ULCA1LCAxOCwgOTAsIDQyLCBMQlNfU09SVHxXU19WU0NST0xMCglMVEVYVCAi0dXJq6OoJkOjqSIsIC0xLCAxMDAsIDUsIDUwLCA4CglDT05UUk9MICIiLCBJRENfRk5UX0NPTE9SX0ZHLCAiV2luZUNvbkNvbG9yUHJldmlldyIsIDBMLCAxMDAsIDE4LCA0OCwgMTYKCUNPTlRST0wgIiIsIElEQ19GTlRfQ09MT1JfQkssICJXaW5lQ29uQ29sb3JQcmV2aWV3IiwgMEwsIDEwMCwgNDAsIDQ4LCAxNgoJTFRFWFQgIrTz0KGjqCZTo6kiLCAtMSwgMTU4LCA1LCA0MCwgOAoJTElTVEJPWCBJRENfRk5UX0xJU1RfU0laRSwgMTU4LCAxOCwgNDAsIDYwLCBXU19WU0NST0xMCglDT05UUk9MICIiLCBJRENfRk5UX1BSRVZJRVcsICJXaW5lQ29uRm9udFByZXZpZXciLCAwTCwgNSwgNjAsIDEwOSwgNDAKCUxURVhUICIiLCBJRENfRk5UX0ZPTlRfSU5GTywgMTI4LCA3NiwgODAsIDE4Cn0KCklERF9DT05GSUcgRElBTE9HIExPQURPTkNBTEwgTU9WRUFCTEUgRElTQ0FSREFCTEUgMzYsIDI0LCAxNDAsIDEwNQpTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpDQVBUSU9OICIgxeTWwyAiCkZPTlQgMTQsICJIZWx2Igp7CglHUk9VUEJPWCAiu7qz5cf40/IiLCAtMSwgMTAsIDExLCAxMDAsIDQyLCBCU19HUk9VUEJPWAoJTFRFWFQgIr/ttsijqCZXo6mjuiIsIC0xLCAxNCwgMjUsIDU0LCA5CglFRElUVEVYVCBJRENfQ05GX1NCX1dJRFRILCA2OCwgMjMsIDM2LCAxMiwgV1NfVEFCU1RPUHxXU19CT1JERVJ8RVNfTlVNQkVSCglDT05UUk9MICIiLCBJRENfQ05GX1NCX1dJRFRIX1VELCAibXNjdGxzX3VwZG93bjMyIiwgVURTX1NFVEJVRERZSU5UfFVEU19BTElHTlJJR0hUfFVEU19BVVRPQlVERFl8VURTX0FSUk9XS0VZU3xVRFNfTk9USE9VU0FORFMsIDAsIDAsIDAsIDAKCUxURVhUICK437bIo6gmSKOpo7oiLCAtMSwgMTQsIDM5LCA1NCwgOQoJRURJVFRFWFQgSURDX0NORl9TQl9IRUlHSFQsIDY4LCAzNywgMzYsIDEyLCBXU19UQUJTVE9QfFdTX0JPUkRFUnxFU19OVU1CRVIKCUNPTlRST0wgIiIsIElEQ19DTkZfU0JfSEVJR0hUX1VELCAibXNjdGxzX3VwZG93bjMyIiwgVURTX1NFVEJVRERZSU5UfFVEU19BTElHTlJJR0hUfFVEU19BVVRPQlVERFl8VURTX0FSUk9XS0VZU3xVRFNfTk9USE9VU0FORFMsIDAsIDAsIDAsIDAKCglHUk9VUEJPWCAitLC/2rTz0KEiLCAtMSwgMTAsIDU1LCAxMDAsIDQyCglMVEVYVCAiv+22yKOoJkmjqaO6IiwgLTEsIDE0LCA2OSwgNTQsIDkKCUVESVRURVhUIElEQ19DTkZfV0lOX1dJRFRILCA2OCwgNjcsIDM2LCAxMiwgV1NfVEFCU1RPUHxXU19CT1JERVJ8RVNfTlVNQkVSCglDT05UUk9MICIiLCBJRENfQ05GX1dJTl9XSURUSF9VRCwgIm1zY3Rsc191cGRvd24zMiIsIFVEU19TRVRCVUREWUlOVHxVRFNfQUxJR05SSUdIVHxVRFNfQVVUT0JVRERZfFVEU19BUlJPV0tFWVN8VURTX05PVEhPVVNBTkRTLCAwLCAwLCAwLCAwCglMVEVYVCAiuN+2yKOoJkWjqaO6IiwgLTEsIDE0LCA4MywgNTQsIDkKCUVESVRURVhUIElEQ19DTkZfV0lOX0hFSUdIVCwgNjgsIDgxLCAzNiwgMTIsIFdTX1RBQlNUT1B8V1NfQk9SREVSfEVTX05VTUJFUgoJQ09OVFJPTCAiIiwgSURDX0NORl9XSU5fSEVJR0hUX1VELCAibXNjdGxzX3VwZG93bjMyIiwgVURTX1NFVEJVRERZSU5UfFVEU19BTElHTlJJR0hUfFVEU19BVVRPQlVERFl8VURTX0FSUk9XS0VZU3xVRFNfTk9USE9VU0FORFMsIDAsIDAsIDAsIDAKCglHUk9VUEJPWCAitbGzzNDyzcuz9rrzIiwgLTEsIDExNSwgMTEsIDgwLCA0MiwgQlNfR1JPVVBCT1gKCUFVVE9DSEVDS0JPWCAiudix1dDpxOLW1bbLo6gmQ6OpIiwgSURDX0NORl9DTE9TRV9FWElULCAxMTksIDI1LCA3NSwgMjAsIFdTX1RBQlNUT1AKCglHUk9VUEJPWCAiRWRpdGlvbiIsIC0xLCAxMTUsIDU1LCA4MCwgNDIKCUNPTUJPQk9YIElEQ19DTkZfRURJVElPTl9NT0RFLCAxMTksIDY5LCA3NSwgMjAsIENCU19EUk9QRE9XTkxJU1R8V1NfVlNDUk9MTHxXU19UQUJTVE9QCn0KCklERF9TQVZFX1NFVFRJTkdTIERJQUxPRyBMT0FET05DQUxMIE1PVkVBQkxFIERJU0NBUkRBQkxFIDIwLCAyMCwgMTQwLCA2MApTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19DQVBUSU9OCkNBUFRJT04gItDpxOLW1bbL1MvQ0LLOyv0iCkZPTlQgMTQsICJIZWx2Igp7CglHUk9VUEJPWCAiIiwgLTEsIDEwLCAxMCwgMTIwLCAzMSwgQlNfR1JPVVBCT1gKCUFVVE9SQURJT0JVVFRPTiAisaPB9LWxx7DF5NbD0tSx48/CtM7KudPDIiwgSURDX1NBVl9TQVZFLCAxNCwgMTUsIDExMCwgMTAsIFdTX1RBQlNUT1AKCUFVVE9SQURJT0JVVFRPTiAivfbQ3rjEtbHHsLvhu7AiLCBJRENfU0FWX1NFU1NJT04sIDE0LCAyNywgMTEwLCAxMCwgV1NfVEFCU1RPUAoKCVBVU0hCVVRUT04gIsi3tqgiLCBJRE9LLCAyMCwgNDUsIDM1LCAxMgoJUFVTSEJVVFRPTiAiyKHP+yIsIElEQ0FOQ0VMLCA2NSwgNDUsIDM1LCAxMgp9Cg==