LyoKICogTm90ZXBhZCAoUnVzc2lhbiByZXNvdXJjZXMpCiAqCiAqIENvcHlyaWdodCAyMDAzIElnb3IgU3RlcGluCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQogKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogKgogKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQQogKi8KCkxBTkdVQUdFIExBTkdfUlVTU0lBTiwgU1VCTEFOR19ERUZBVUxUCgpNQUlOX01FTlUgTUVOVQp7CiBQT1BVUCAiJtTg6esiIHsKICBNRU5VSVRFTSAi0e7n5Cbg8vxcdEN0cmwrTiIsICAgICAgICAgICBDTURfTkVXCiAgTUVOVUlURU0gIibO8urw+/L8Li4uXHRDdHJsK08iLCAgICAgICAgICAgICBDTURfT1BFTgogIE1FTlVJVEVNICIm0e718ODt6PL8XHRDdHJsK1MiLCAgICAgICAgICAgICBDTURfU0FWRQogIE1FTlVJVEVNICLR7vXw4O3o8vwgJurg6i4uLiIsICAgICAgIENNRF9TQVZFX0FTCiAgTUVOVUlURU0gU0VQQVJBVE9SCiAgTUVOVUlURU0gIibP5ffg8uDy/C4uLlx0Q3RybCtQIiwgICAgICBDTURfUFJJTlQKICBNRU5VSVRFTSAiz+Dw4Cbs5fLw+yDx8vDg7ej2+y4uLiIsICAgIENNRF9QQUdFX1NFVFVQCiAgTUVOVUlURU0gIibN4PHy8O7p6uAg7/Do7fLl8OAuLi4iLCBDTURfUFJJTlRFUl9TRVRVUAogIE1FTlVJVEVNIFNFUEFSQVRPUgogIE1FTlVJVEVNICLCJvv17uQiLCAgICAgICAgICAgICBDTURfRVhJVAogfQpQT1BVUCAiJs/w4OLq4CIgewogIE1FTlVJVEVNICImzvLs5e3o8vxcdEN0cmwrWiIsICAgICBDTURfVU5ETwogIE1FTlVJVEVNIFNFUEFSQVRPUgogIE1FTlVJVEVNICImwvvw5efg8vxcdEN0cmwrWCIsICAgICAgQ01EX0NVVAogIE1FTlVJVEVNICImyu7v6PDu4uDy/Fx0Q3RybCtDIiwgICAgIENNRF9DT1BZCiAgTUVOVUlURU0gIsLx8ibg4ujy/Fx0Q3RybCtWIiwgICAgQ01EX1BBU1RFCiAgTUVOVUlURU0gIibT5ODr6PL8XHREZWwiLCAgICAgIENNRF9ERUxFVEUKICBNRU5VSVRFTSBTRVBBUkFUT1IKICBNRU5VSVRFTSAiwvvk5evo8vwg4ibx5SIsICAgICAgIENNRF9TRUxFQ1RfQUxMCiAgTUVOVUlURU0gIsLw5ewm/yDoIOTg8uBcdEY1IiwgICAgQ01EX1RJTUVfREFURQogIE1FTlVJVEVNIFNFUEFSQVRPUgogIE1FTlVJVEVNICImz+Xw5e3u8SDv7iDx6+7i4OwiLCAgQ01EX1dSQVAKICBNRU5VSVRFTSAiJtjw6PTyLi4uIiwgICAgICAgICAgIENNRF9GT05UCiB9ClBPUFVQICLPJu7o8eoiIHsKICBNRU5VSVRFTSAiJs3g6fLoLi4uIiwgICAgICAgICAgIENNRF9TRUFSQ0gKICBNRU5VSVRFTSAizeDp8uggJuTg6+XlXHRGMyIsICBDTURfU0VBUkNIX05FWFQKIH0KUE9QVVAgIibR7/Dg4urgIiB7CiAgTUVOVUlURU0gIibR7uTl8Obg7ejlIiwgICAgICAgICBDTURfSEVMUF9DT05URU5UUwogIE1FTlVJVEVNICImz+7o8eouLi4iLCAgICAgICAgQ01EX0hFTFBfU0VBUkNICiAgTUVOVUlURU0gIibI8e/u6/zn7uLg7ejlIPHv8ODi6ugiLCAgICAgQ01EX0hFTFBfT05fSEVMUAogIE1FTlVJVEVNIFNFUEFSQVRPUgogIE1FTlVJVEVNICImziBOb3RlcGFkIiwgQ01EX0hFTFBfQUJPVVRfTk9URVBBRAogfQp9CgovKiBEaWFsb2cgYFBhZ2Ugc2V0dXAnICovCgpESUFMT0dfUEFHRVNFVFVQIERJQUxPRyAwLCAwLCAyMjUsIDk1ClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpGT05UIDgsICJNUyBTaGVsbCBEbGciCkNBUFRJT04gIs/g8ODs5fLw+yDx8vDg7ej2+yIKewpMVEVYVCAgICAiwibl8PXt6Okg6u7r7u3y6PLz6zoiLCAgMHgxNDAsICAgMTAsIDA3LCA0MCwgMTUKRURJVFRFWFQgSURDX1BBR0VTRVRVUF9IRUFERVJWQUxVRSwgICA2MCwgMDUsMTEwLCAxMiwgV1NfQk9SREVSIHwgV1NfVEFCU1RPUApMVEVYVCAgICAizSbo5u3o6SDq7uvu7fLo8vPrOiIsICAweDE0MiwgICAxMCwgMjQsIDQwLCAxNQpFRElUVEVYVCBJRENfUEFHRVNFVFVQX0ZPT1RFUlZBTFVFLCAgIDYwLCAyMiwxMTAsIDEyLCBXU19CT1JERVIgfCBXU19UQUJTVE9QCgpHUk9VUEJPWCAiz+7r/yAo7OwpOiIsICAgICAgMHgxNDQsICAgICAxMCwgNDMsMTYwLCA0NQpMVEVYVCAgICAiJsvl4u7lOiIsICAgICAgICAweDE0NSwgICAyMCwgNTUsIDMwLCAxMCwgV1NfQ0hJTEQKRURJVFRFWFQgSURDX1BBR0VTRVRVUF9MRUZUVkFMVUUsICAgICA1MCwgNTUsIDM1LCAxMSwgV1NfQ0hJTEQgfCBXU19CT1JERVIgfCBXU19UQUJTVE9QCkxURVhUICAgICImwuXw9e3l5ToiLCAgICAgICAgIDB4MTQ4LCAgICAyMCwgNzMsIDMwLCAxMCwgV1NfQ0hJTEQKRURJVFRFWFQgSURDX1BBR0VTRVRVUF9UT1BWQUxVRSwgICAgICA1MCwgNzMsIDM1LCAxMSwgV1NfQ0hJTEQgfCBXU19CT1JERVIgfCBXU19UQUJTVE9QCkxURVhUICAgICImz/Dg4u7lOiIsICAgICAgIDB4MTRCLCAxMDAsIDU1LCAzMCwgMTAsIFdTX0NISUxECkVESVRURVhUIElEQ19QQUdFU0VUVVBfUklHSFRWQUxVRSwgICAxMzAsIDU1LCAzNSwgMTEsIFdTX0NISUxEIHwgV1NfQk9SREVSIHwgV1NfVEFCU1RPUApMVEVYVCAgICAiJs3o5u3l5ToiLCAgICAgIDB4MTRFLDEwMCwgNzMsIDMwLCAxMCwgV1NfQ0hJTEQKRURJVFRFWFQgSURDX1BBR0VTRVRVUF9CT1RUT01WQUxVRSwgIDEzMCwgNzMsIDM1LCAxMSwgV1NfQ0hJTEQgfCBXU19CT1JERVIgfCBXU19UQUJTVE9QCgpERUZQVVNIQlVUVE9OICJPSyIsICAgICAgICAgSURPSywgICAgICAgICAgICAgICAgICAgMTgwLCAgMywgNDAsIDE1LCBXU19UQUJTVE9QClBVU0hCVVRUT04gICAgIs7y7OXt4CIsICAgICBJRENBTkNFTCwgICAgICAgICAgICAgICAxODAsIDIxLCA0MCwgMTUsIFdTX1RBQlNUT1AKUFVTSEJVVFRPTiAgICAiJtHv8ODi6uAiLCAgICAgICBJREhFTFAsICAgICAgICAgICAgICAgIDE4MCwgMzksIDQwLCAxNSwgV1NfVEFCU1RPUAp9CgpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRQp7ClNUUklOR19QQUdFU0VUVVBfSEVBREVSVkFMVUUsICAgIiZmIgpTVFJJTkdfUEFHRVNFVFVQX0ZPT1RFUlZBTFVFLCAgICLR8vDg7ej24CAmcCIKClNUUklOR19OT1RFUEFELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICLB6+7q7e7yIgpTVFJJTkdfRVJST1IsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiztjIwcrAIgpTVFJJTkdfV0FSTklORywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiws3IzMDNyMUiClNUUklOR19JTkZPLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICLI7fTu8Ozg9uj/IgoKU1RSSU5HX1VOVElUTEVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIijh5ecg5+Dj7uvu4urgKSIKClNUUklOR19BTExfRklMRVMsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICLC8eUg9ODp6/sgKCouKikiClNUUklOR19URVhUX0ZJTEVTX1RYVCwgICAgICAgICAgICAgICAgICAi0uXq8fLu4vvlIPTg6ev7ICgqLnR4dCkiCgpTVFJJTkdfVE9PTEFSR0UsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi1ODp6yAnJXMnIPHr6Pjq7uwg4e7r/Pju6SDk6/8g4evu6u3u8uAuXG4gXArI8e/u6/zn8+ny5SDk8PPj7ukg8OXk4Ory7vAuIgpTVFJJTkdfTk9URVhULCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiwvsg7eUg4uLl6+gg7ejq4Oru4+4g8uXq8fLgLiBcClxuwuLl5Ojy5SD38u4t7ejh8+T8IOgg7+7v8O7h8+ny5SDl+eUuIgpTVFJJTkdfRE9FU05PVEVYSVNULCAgICAgICAgICAgICAgICAgICAgICAgICAgICAi1ODp6yAnJXMnXG7t5SDx8/nl8fLi8+XyXG5cbiBcCtXu8ujy5SDx7ufk4PL8IO3u4vvpIPTg6es/IgpTVFJJTkdfTk9UU0FWRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi1ODp6yAnJXMnXG7h++sg6Ofs5e3l7VxuXG4gXArV7vLo8uUg8e718ODt6PL8IOjn7OXt5e3o/z8iClNUUklOR19OT1RGT1VORCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiclcycg7eUg7eDp5OXtLiIKU1RSSU5HX09VVF9PRl9NRU1PUlksICAgICAgICAgICAgICAgICAgICLN5eTu8fLg8u737e4g7+Ds//LoIOTr/yDn4OLl8Pjl7ej/IP3y7ukg7u/l8OD26OggXApcbsfg6vDu6fLlIO7k7e4g6OvoIO3l8eru6/zq7iDv8Ojr7ubl7ejpIOgg7+7i8u7w6PLlIO/u7/vy6vMuIgoKfQo=