LyoKICogIE5vdGVwYWQgKFNpbXBsaWZpZWQgQ2hpbmVzZSByZXNvdXJjZXMpCiAqCiAqICBDb3B5cmlnaHQgMjAwMiBsaXVzcGlkZXIgPGxpdXNwaWRlckB5YWhvby5jb20+CiAqCiAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQogKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogKgogKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQogKi8KCk1BSU5fTUVOVSBNRU5VIExBTkdVQUdFIExBTkdfQ0hJTkVTRSwgU1VCTEFOR19DSElORVNFX1NJTVBMSUZJRUQKewogUE9QVVAgIs7EvP6jqCZGo6kiIHsKICBNRU5VSVRFTSAi0MK9qKOoJk6jqS4uLiIsICAgICAgICAgICBDTURfTkVXCiAgTUVOVUlURU0gIrTyv6qjqCZPo6kiLCAgICAgICAgICAgICBDTURfT1BFTgogIE1FTlVJVEVNICKxo7Tmo6gmU6OpIiwgICAgICAgICAgICAgQ01EX1NBVkUKICBNRU5VSVRFTSAiwe205s6qKCZBKS4uLiIsICAgICAgIENNRF9TQVZFX0FTCiAgTUVOVUlURU0gIrTy06GjqCZQo6kiLCAgICAgICAgICAgIENNRF9QUklOVAogIE1FTlVJVEVNICLSs8PmyejWw6OoJlSjqS4uLiIsICAgIENNRF9QQUdFX1NFVFVQCiAgTUVOVUlURU0gIrTy06HJ6NbDo6gmUqOpLi4uIiwgQ01EX1BSSU5URVJfU0VUVVAKICBNRU5VSVRFTSBTRVBBUkFUT1IKICBNRU5VSVRFTSAizcuz9qOoJkWjqSIsICAgICAgICAgICAgIENNRF9FWElUCiB9ClBPUFVQICKx4Lyto6gmRaOpIiB7CiAgTUVOVUlURU0gIrO3z/ujqCZVo6lcdEN0cmwrWiIsICAgICBDTURfVU5ETwogIE1FTlVJVEVNIFNFUEFSQVRPUgogIE1FTlVJVEVNICK89MfQo6gmVKOpXHRDdHJsK1giLCAgICAgIENNRF9DVVQKICBNRU5VSVRFTSAiuLTWxqOoJkOjqVx0Q3RybCtDIiwgICAgIENNRF9DT1BZCiAgTUVOVUlURU0gItWzzPmjqCZQo6lcdEN0cmwrViIsICAgIENNRF9QQVNURQogIE1FTlVJVEVNICLJvrP9o6gmRKOpXHREZWwiLCAgICAgIENNRF9ERUxFVEUKICBNRU5VSVRFTSBTRVBBUkFUT1IKICBNRU5VSVRFTSAiyKvRoaOoJkGjqSIsICAgICAgIENNRF9TRUxFQ1RfQUxMCiAgTUVOVUlURU0gIrLlyOvI1cbaoaLKsbzko6gmVKOpXHRGNSIsICAgIENNRF9USU1FX0RBVEUKICBNRU5VSVRFTSBTRVBBUkFUT1IKICBNRU5VSVRFTSAi19S2r7u70NCjqCZXo6kiLCAgQ01EX1dSQVAKIH0KUE9QVVAgIsvRy/ejqCZTo6kiIHsKICBNRU5VSVRFTSAiy9HL96OoJlOjqSIsICAgICAgICAgICBDTURfU0VBUkNICiAgTUVOVUlURU0gIsvRy/fPwtK7uPajqCZTo6lcdEYzIiwgIENNRF9TRUFSQ0hfTkVYVAogfQpQT1BVUCAisO/W+qOoJkijqSIgewogIE1FTlVJVEVNICLE2sjdo6gmQ6OpIiwgICAgICAgICBDTURfSEVMUF9DT05URU5UUwogIE1FTlVJVEVNICLL0cv3o6gmU6OpLi4uIiwgICAgICAgIENNRF9IRUxQX1NFQVJDSAogIE1FTlVJVEVNICLI57rOyrnTw7Dv1vqjqCZIo6kiLCAgICAgQ01EX0hFTFBfT05fSEVMUAogIE1FTlVJVEVNIFNFUEFSQVRPUgogIFBPUFVQICLXysHP0MXPoqOoJk+jqS4uLiIgewogICBNRU5VSVRFTSAi08O7p9Dtv8nQrdLpo6gmTKOpIiwgICAgICAgICBDTURfTElDRU5TRQogICBNRU5VSVRFTSAi1PDIzs7eudijqCZOo6kiLCAgICAgQ01EX05PX1dBUlJBTlRZCiAgIE1FTlVJVEVNICK52NPaIFdpbmWjqCZBo6kiLCAgICAgIENNRF9BQk9VVF9XSU5FCiAgfQogfQp9CgovKiBEaWFsb2cgYFBhZ2Ugc2V0dXAnICovCgpESUFMT0dfUEFHRVNFVFVQIERJQUxPRyAwLCAwLCAyMjUsIDk1CkxBTkdVQUdFIExBTkdfQ0hJTkVTRSwgU1VCTEFOR19DSElORVNFX1NJTVBMSUZJRUQKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkZPTlQgMTAsICJIZWx2IgpDQVBUSU9OICLSs8PmyejWwyIKewpMVEVYVCAgICAi0rPDvKOoJkijqToiLCAgMHgxNDAsICAgMTAsIDA3LCA0MCwgMTUKRURJVFRFWFQgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNDEsICAgICAgIDYwLCAwNSwxMTAsIDEyLCBXU19CT1JERVIgfCBXU19UQUJTVE9QCkxURVhUICAgICK9xdeio6gmRqOpOiIsICAweDE0MiwgICAxMCwgMjQsIDQwLCAxNQpFRElUVEVYVCAgICAgICAgICAgICAgICAgICAgICAgICAweDE0MywgICAgICAgNjAsIDIyLDExMCwgMTIsIFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AKCkdST1VQQk9YICKx39S1v9Ww16OoJk2jqaO6IiwgICAgICAweDE0NCwgICAgIDEwLCA0MywxNjAsIDQ1CkxURVhUICAgICLX86OoJkyjqaO6IiwgICAgICAgIDB4MTQ1LCAgIDIwLCA1NSwgMzAsIDEwLCBXU19DSElMRApFRElUVEVYVCAvKlNUUklOR19QQUdFU0VUVVBfTEVGVFZBTFVFLCovICAgMHgxNDcsICAgICAgIDUwLCA1NSwgMzUsIDExLCBXU19DSElMRCB8IFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AKTFRFWFQgICAgIsnPo6gmVKOpo7oiLCAgICAgICAgIDB4MTQ4LCAgICAyMCwgNzMsIDMwLCAxMCwgV1NfQ0hJTEQKRURJVFRFWFQgLypTVFJJTkdfUEFHRVNFVFVQX1RPUFZBTFVFLCovICAgIDB4MTRBLCAgICAgICAgNTAsIDczLCAzNSwgMTEsIFdTX0NISUxEIHwgV1NfQk9SREVSIHwgV1NfVEFCU1RPUApMVEVYVCAgICAi09KjqCZSo6mjuiIsICAgICAgIDB4MTRCLCAxMDAsIDU1LCAzMCwgMTAsIFdTX0NISUxECkVESVRURVhUIC8qU1RSSU5HX1BBR0VTRVRVUF9SSUdIVFZBTFVFLCovICAweDE0RCwgICAgIDEzMCwgNTUsIDM1LCAxMSwgV1NfQ0hJTEQgfCBXU19CT1JERVIgfCBXU19UQUJTVE9QCkxURVhUICAgICLPwqOoJkKjqaO6IiwgICAgICAweDE0RSwxMDAsIDczLCAzMCwgMTAsIFdTX0NISUxECkVESVRURVhUIC8qU1RSSU5HX1BBR0VTRVRVUF9CT1RUT01WQUxVRSwqLyAweDE1MCwgICAgMTMwLCA3MywgMzUsIDExLCBXU19DSElMRCB8IFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AKCkRFRlBVU0hCVVRUT04gIsi3tqgiLCAgICAgICAgIDB4MTUxLCAgICAgICAgICAgICAgICAgICAxODAsICAzLCA0MCwgMTUsIFdTX1RBQlNUT1AKUFVTSEJVVFRPTiAgICAiyKHP+yIsICAgICAweDE1MiwgICAgICAgICAgICAgICAxODAsIDIxLCA0MCwgMTUsIFdTX1RBQlNUT1AKUFVTSEJVVFRPTiAgICAisO/W+qOoJqOpIiwgICAgICAgMHgxNTMsICAgICAgICAgICAgICAgIDE4MCwgMzksIDQwLCAxNSwgV1NfVEFCU1RPUAp9CgpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRSBMQU5HVUFHRSBMQU5HX0NISU5FU0UsIFNVQkxBTkdfQ0hJTkVTRV9TSU1QTElGSUVECnsKU1RSSU5HX1BBR0VTRVRVUF9IRUFERVJWQUxVRSwgICAiJm4iICAgICAgICAvKiBGSVhNRSAqLwpTVFJJTkdfUEFHRVNFVFVQX0ZPT1RFUlZBTFVFLCAgICJQYWdlICZzIiAgIC8qIEZJWE1FICovClNUUklOR19QQUdFU0VUVVBfTEVGVFZBTFVFLCAgICAgICAgICAgICAiMjAgbW0iICAgICAvKiBGSVhNRSAqLwpTVFJJTkdfUEFHRVNFVFVQX1JJR0hUVkFMVUUsICAgICIyMCBtbSIgICAgIC8qIEZJWE1FICovClNUUklOR19QQUdFU0VUVVBfVE9QVkFMVUUsICAgICAgICAgICAgICAiMjUgbW0iICAgICAvKiBGSVhNRSAqLwpTVFJJTkdfUEFHRVNFVFVQX0JPVFRPTVZBTFVFLCAgICIyNSBtbSIgICAgIC8qIEZJWE1FICovCgpTVFJJTkdfTk9URVBBRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAivMfKwrG+IgpTVFJJTkdfRVJST1IsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAitO3O8yIKU1RSSU5HX1dBUk5JTkcsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIr6vuOYiClNUUklOR19JTkZPLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICLQxc+iIgoKU1RSSU5HX1VOVElUTEVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIqOozrTD/MP7o6kiCgpTVFJJTkdfQUxMX0ZJTEVTLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiy/nT0M7EvP4gKCouKikiClNUUklOR19URVhUX0ZJTEVTX1RYVCwgICAgICAgICAgICAgICAgICAizsSxvs7EvP4gKCoudHh0KSIKClNUUklOR19UT09MQVJHRSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICK8x8rCsb6yu8TctPK/qiAnJXMnINXiw7S087XEzsS8/qGjXG4gXArH68q508Ox8LXEseC8rcb3oaMiClNUUklOR19OT1RFWFQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICLE+sO709DK5MjryM66zs7Esb6hoyBcClxux+vK5Mjr0rvQqdTZytQiClNUUklOR19ET0VTTk9URVhJU1QsICAgICAgICAgICAgICAgICAgICAgICAgICAgICLOxLz+ICclcydcbrK7tObU2lxuXG4gXArE+s/r0MK9qNK7uPbOxLz+wvCjvyIKU1RSSU5HX05PVFNBVkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIs7EvP4gJyVzJ1xu1f3OxNLRuPy4xFxuXG4gXArKx7fxsaO05rj8uMSjvyIKU1RSSU5HX05PVEZPVU5ELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi1dKyu7W9zsS8/iAnJXMnIgpTVFJJTkdfT1VUX09GX01FTU9SWSwgICAgICAgICAgICAgICAgICAgIsO709DX47m7tcTE2rTmv8nS1NPDwLTN6rPJtMvP7sjOzvGhoyBcClxux+u52LHV0rvQqbPM0PLKqbfFxNq05rrz1NnK1KGjIgoKfQo=