LyoKICogTm90ZXBhZCAoUnVzc2lhbiByZXNvdXJjZXMpCiAqCiAqIENvcHlyaWdodCAyMDAzIElnb3IgU3RlcGluCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQogKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogKgogKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQQogKi8KCk1BSU5fTUVOVSBNRU5VIExBTkdVQUdFIExBTkdfUlVTU0lBTiwgU1VCTEFOR19ERUZBVUxUCnsKIFBPUFVQICIm1ODp6yIgewogIE1FTlVJVEVNICLR7ufkJuDy/CIsICAgICAgICAgICBDTURfTkVXCiAgTUVOVUlURU0gIibO8urw+/L8Li4uIiwgICAgICAgICAgICAgQ01EX09QRU4KICBNRU5VSVRFTSAiJtHu9fDg7ejy/CIsICAgICAgICAgICAgIENNRF9TQVZFCiAgTUVOVUlURU0gItHu9fDg7ejy/CAm6uDqLi4uIiwgICAgICAgQ01EX1NBVkVfQVMKICBNRU5VSVRFTSBTRVBBUkFUT1IKICBNRU5VSVRFTSAiz+Dw4Cbs5fLw+yDx8vDg7ej2+y4uLiIsICAgIENNRF9QQUdFX1NFVFVQCiAgTUVOVUlURU0gIibN4PHy8O7p6uAg7/Do7fLl8OAuLi4iLCBDTURfUFJJTlRFUl9TRVRVUAogIE1FTlVJVEVNICImz+X34PLg8vwiLCAgICAgICAgICAgIENNRF9QUklOVAogIE1FTlVJVEVNIFNFUEFSQVRPUgogIE1FTlVJVEVNICLCJvv17uQiLCAgICAgICAgICAgICBDTURfRVhJVAogfQpQT1BVUCAiJs/w4OLq4CIgewogIE1FTlVJVEVNICImzvLs5e3o8vxcdEN0cmwrWiIsICAgICBDTURfVU5ETwogIE1FTlVJVEVNIFNFUEFSQVRPUgogIE1FTlVJVEVNICImwvvw5efg8vxcdEN0cmwrWCIsICAgICAgQ01EX0NVVAogIE1FTlVJVEVNICImyu7v6PDu4uDy/Fx0Q3RybCtDIiwgICAgIENNRF9DT1BZCiAgTUVOVUlURU0gIsLx8ibg4ujy/Fx0Q3RybCtWIiwgICAgQ01EX1BBU1RFCiAgTUVOVUlURU0gIibT5ODr6PL8XHREZWwiLCAgICAgIENNRF9ERUxFVEUKICBNRU5VSVRFTSBTRVBBUkFUT1IKICBNRU5VSVRFTSAiwvvk5evo8vwg4ibx5SIsICAgICAgIENNRF9TRUxFQ1RfQUxMCiAgTUVOVUlURU0gIsLw5ewm/yDoIOTg8uBcdEY1IiwgICAgQ01EX1RJTUVfREFURQogIE1FTlVJVEVNIFNFUEFSQVRPUgogIE1FTlVJVEVNICImz+Xw5e3u8SDv7iDx6+7i4OwiLCAgQ01EX1dSQVAKICBNRU5VSVRFTSAiJtjw6PTyLi4uIiwgICAgICAgICAgIENNRF9GT05UCiB9ClBPUFVQICLPJu7o8eoiIHsKICBNRU5VSVRFTSAiJs3g6fLoIiwgICAgICAgICAgIENNRF9TRUFSQ0gKICBNRU5VSVRFTSAizeDp8uggJuTg6+XlXHRGMyIsICBDTURfU0VBUkNIX05FWFQKIH0KUE9QVVAgIibR7/Dg4urgIiB7CiAgTUVOVUlURU0gIibR7uTl8Obg7ejlIiwgICAgICAgICBDTURfSEVMUF9DT05URU5UUwogIE1FTlVJVEVNICImz+7o8eouLi4iLCAgICAgICAgQ01EX0hFTFBfU0VBUkNICiAgTUVOVUlURU0gIibI8e/u6/zn7uLg7ejlIPHv8ODi6ugiLCAgICAgQ01EX0hFTFBfT05fSEVMUAogIE1FTlVJVEVNIFNFUEFSQVRPUgogIFBPUFVQICIm0eLl5OXt6P8uLi4iIHsKICAgTUVOVUlURU0gIibL6Pbl7efo/yIsICAgICAgICAgQ01EX0xJQ0VOU0UKICAgTUVOVUlURU0gIibBxccgw8DQwM3SyMkiLCAgICAgQ01EX05PX1dBUlJBTlRZCiAgIE1FTlVJVEVNICImTyBXaW5lIiwgICAgICBDTURfQUJPVVRfV0lORQogIH0KIH0KfQoKLyogRGlhbG9nIGBQYWdlIHNldHVwJyAqLwoKRElBTE9HX1BBR0VTRVRVUCBESUFMT0cgMCwgMCwgMjI1LCA5NQpMQU5HVUFHRSBMQU5HX1JVU1NJQU4sIFNVQkxBTkdfREVGQVVMVApTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKRk9OVCA4LCAiTVMgU2hlbGwgRGxnIgpDQVBUSU9OICLP4PDg7OXy8Psg8fLw4O3o9vsiCnsKTFRFWFQgICAgIsIm5fD17ejpIOru6+7t8ujy8+s6IiwgIDB4MTQwLCAgIDEwLCAwNywgNDAsIDE1CkVESVRURVhUICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTQxLCAgICAgICA2MCwgMDUsMTEwLCAxMiwgV1NfQk9SREVSIHwgV1NfVEFCU1RPUApMVEVYVCAgICAizSbo5u3o6SDq7uvu7fLo8vPrOiIsICAweDE0MiwgICAxMCwgMjQsIDQwLCAxNQpFRElUVEVYVCAgICAgICAgICAgICAgICAgICAgICAgICAweDE0MywgICAgICAgNjAsIDIyLDExMCwgMTIsIFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AKCkdST1VQQk9YICLP7uv/ICjs7Ck6IiwgICAgICAweDE0NCwgICAgIDEwLCA0MywxNjAsIDQ1CkxURVhUICAgICImy+Xi7uU6IiwgICAgICAgIDB4MTQ1LCAgIDIwLCA1NSwgMzAsIDEwLCBXU19DSElMRApFRElUVEVYVCAvKlNUUklOR19QQUdFU0VUVVBfTEVGVFZBTFVFLCovICAgMHgxNDcsICAgICAgIDUwLCA1NSwgMzUsIDExLCBXU19DSElMRCB8IFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AKTFRFWFQgICAgIibC5fD17eXlOiIsICAgICAgICAgMHgxNDgsICAgIDIwLCA3MywgMzAsIDEwLCBXU19DSElMRApFRElUVEVYVCAvKlNUUklOR19QQUdFU0VUVVBfVE9QVkFMVUUsKi8gICAgMHgxNEEsICAgICAgICA1MCwgNzMsIDM1LCAxMSwgV1NfQ0hJTEQgfCBXU19CT1JERVIgfCBXU19UQUJTVE9QCkxURVhUICAgICImz/Dg4u7lOiIsICAgICAgIDB4MTRCLCAxMDAsIDU1LCAzMCwgMTAsIFdTX0NISUxECkVESVRURVhUIC8qU1RSSU5HX1BBR0VTRVRVUF9SSUdIVFZBTFVFLCovICAweDE0RCwgICAgIDEzMCwgNTUsIDM1LCAxMSwgV1NfQ0hJTEQgfCBXU19CT1JERVIgfCBXU19UQUJTVE9QCkxURVhUICAgICImzejm7eXlOiIsICAgICAgMHgxNEUsMTAwLCA3MywgMzAsIDEwLCBXU19DSElMRApFRElUVEVYVCAvKlNUUklOR19QQUdFU0VUVVBfQk9UVE9NVkFMVUUsKi8gMHgxNTAsICAgIDEzMCwgNzMsIDM1LCAxMSwgV1NfQ0hJTEQgfCBXU19CT1JERVIgfCBXU19UQUJTVE9QCgpERUZQVVNIQlVUVE9OICJPSyIsICAgICAgICAgSURPSywgICAgICAgICAgICAgICAgICAgMTgwLCAgMywgNDAsIDE1LCBXU19UQUJTVE9QClBVU0hCVVRUT04gICAgIs7y7OXt4CIsICAgICBJRENBTkNFTCwgICAgICAgICAgICAgICAxODAsIDIxLCA0MCwgMTUsIFdTX1RBQlNUT1AKUFVTSEJVVFRPTiAgICAiJtHv8ODi6uAiLCAgICAgICBJREhFTFAsICAgICAgICAgICAgICAgIDE4MCwgMzksIDQwLCAxNSwgV1NfVEFCU1RPUAp9CgpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRSBMQU5HVUFHRSBMQU5HX1JVU1NJQU4sIFNVQkxBTkdfREVGQVVMVAp7ClNUUklOR19QQUdFU0VUVVBfSEVBREVSVkFMVUUsICAgIiZuIiAgICAgICAgLyogRklYTUUgKi8KU1RSSU5HX1BBR0VTRVRVUF9GT09URVJWQUxVRSwgICAi0fLw4O3o9uAgJnMiICAgLyogRklYTUUgKi8KU1RSSU5HX1BBR0VTRVRVUF9MRUZUVkFMVUUsICAgICAgICAgICAgICIyMCDs7CIgICAgIC8qIEZJWE1FICovClNUUklOR19QQUdFU0VUVVBfUklHSFRWQUxVRSwgICAgIjIwIOzsIiAgICAgLyogRklYTUUgKi8KU1RSSU5HX1BBR0VTRVRVUF9UT1BWQUxVRSwgICAgICAgICAgICAgICIyNSDs7CIgICAgIC8qIEZJWE1FICovClNUUklOR19QQUdFU0VUVVBfQk9UVE9NVkFMVUUsICAgIjI1IOzsIiAgICAgLyogRklYTUUgKi8KClNUUklOR19OT1RFUEFELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICLB6+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=