LyoKICogIE5vdGVwYWQgKEZpbm5pc2ggcmVzb3VyY2VzKQogKgogKiAgQ29weXJpZ2h0IDE5OTkgYnkgSnVra2EgSWl2b25lbiA8aWl2b25lbkBpa2kuZmk+CiAqICBDb3B5cmlnaHQgMjAwMiBTeWx2YWluIFBldHJlb2xsZSA8c3BldHJlb2xsZUB5YWhvby5mcj4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiAqLwoKTUFJTl9NRU5VIE1FTlUgTEFOR1VBR0UgTEFOR19GSU5OSVNILCBTVUJMQU5HX05FVVRSQUwKewogUE9QVVAgIiZUaWVkb3N0byIgewogIE1FTlVJVEVNICImVXVzaS4uLiIsIDB4MTAwCiAgTUVOVUlURU0gIiZBdmFhIiwgMHgxMDEKICBNRU5VSVRFTSAiVGEmbGxldGEiLCAweDEwMgogIE1FTlVJVEVNICJUYWxsZXRhICZuaW1lbGzkLi4uIiwgMHgxMDMKICBNRU5VSVRFTSAiVCZ1bG9zdGEiLCAweDEwNAogIE1FTlVJVEVNICImU2l2dW4gYXNldHVrc2V0Li4uIiwgMHgxMDUKICBNRU5VSVRFTSAiJktpcmpvaXR0aW1lbiBhc2V0dWtzZXQuLi4iLCAweDEwNgogIE1FTlVJVEVNIFNFUEFSQVRPUgogIE1FTlVJVEVNICImUG9pc3R1IiwgMHgxMDgKIH0KUE9QVVAgIiZNdW9ra2FhIiB7CiAgTUVOVUlURU0gIiZQYWxhdXRhXHRDdHJsK1oiLCAweDExMAogIE1FTlVJVEVNIFNFUEFSQVRPUgogIE1FTlVJVEVNICImTGVpa2thYVx0Q3RybCtYIiwgMHgxMTEKICBNRU5VSVRFTSAiJktvcGlvaVx0Q3RybCtDIiwgMHgxMTIKICBNRU5VSVRFTSAiTCZpaXTkXHRDdHJsK1YiLCAweDExMwogIE1FTlVJVEVNICJQJm9pc3RhXHREZWwiLCAweDExNAogIE1FTlVJVEVNIFNFUEFSQVRPUgogIE1FTlVJVEVNICImVmFsaXRzZSBrYWlra2kiLCAweDExNgogIE1FTlVJVEVNICImQWlrYS9Q5Gl25G3k5HLkXHRGNSIsIDB4MTE3CiAgTUVOVUlURU0gU0VQQVJBVE9SCiAgTUVOVUlURU0gIkthJnRrYWlzZSBwaXRr5CByaXZpIiwgMHgxMTkKIH0KUE9QVVAgIiZFdHNpIiB7CiAgTUVOVUlURU0gIkV0c2kuLi4iLCAweDEyMAogIE1FTlVJVEVNICJFdHNpICZzZXVyYWF2YVx0RjMiLCAweDEyMQogfQpQT1BVUCAiJkFwdWEiIHsKICBNRU5VSVRFTSAiJlNpc+RsdPYiLCAweDEzMAogIE1FTlVJVEVNICImRXRzaS4uLiIsIDB4MTMxCiAgTUVOVUlURU0gIkFwdWEgJk9wYXN0dWtzZXN0YSIsIDB4MTMyCiAgTUVOVUlURU0gU0VQQVJBVE9SCiAgUE9QVVAgIkluZiZvLi4uIiB7CiAgIE1FTlVJVEVNICImTGlzZW5zc2kiLCAweDEzNQogICBNRU5VSVRFTSAiJkVJIFRBS1VVVEEiLCAweDEzNgogICBNRU5VSVRFTSAiJlRpZXRvamEgV2luZTppc3RhIiwgMHgxMzcKICB9CiB9Cn0gCgovKiBEaWFsb2cgYFBhZ2Ugc2V0dXAnICovCgpESUFMT0dfUEFHRVNFVFVQXyBESUFMT0cgMCwgMCwgMjI1LCA5NQpMQU5HVUFHRSBMQU5HX0ZJTk5JU0gsIFNVQkxBTkdfTkVVVFJBTApTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKRk9OVCA4LCAiSGVsdiIKQ0FQVElPTiAiU2l2dW4gYXNldHVrc2V0Igp7CkxURVhUICAgICImWWzkb3RzaWtrbzoiLCAgMHgxNDAsICAgMTAsIDA3LCA0MCwgMTUKRURJVFRFWFQgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNDEsICAgICAgIDYwLCAwNSwxMTAsIDEyLCBXU19CT1JERVIgfCBXU19UQUJTVE9QCkxURVhUICAgICJBbGFvJnRzaWtrbzoiLCAgMHgxNDIsICAgMTAsIDI0LCA0MCwgMTUKRURJVFRFWFQgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNDMsICAgICAgIDYwLCAyMiwxMTAsIDEyLCBXU19CT1JERVIgfCBXU19UQUJTVE9QCgpHUk9VUEJPWCAiJk1hcmdpbmFhbGk6IiwgICAgICAweDE0NCwgICAgIDEwLCA0MywxNjAsIDQ1CkxURVhUICAgICImVmFzZW46IiwgICAgICAgIDB4MTQ1LCAgIDIwLCA1NSwgMzAsIDEwLCBXU19DSElMRApFRElUVEVYVCAvKlNUUklOR19QQUdFU0VUVVBfTEVGVFZBTFVFLCovICAgMHgxNDcsICAgICAgIDUwLCA1NSwgMzUsIDExLCBXU19DSElMRCB8IFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AKTFRFWFQgICAgIlkmbOQ6IiwgICAgICAgICAweDE0OCwgICAgMjAsIDczLCAzMCwgMTAsIFdTX0NISUxECkVESVRURVhUIC8qU1RSSU5HX1BBR0VTRVRVUF9UT1BWQUxVRSwqLyAgICAweDE0QSwgICAgICAgIDUwLCA3MywgMzUsIDExLCBXU19DSElMRCB8IFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AKTFRFWFQgICAgIiZPaWtlYToiLCAgICAgICAweDE0QiwgMTAwLCA1NSwgMzAsIDEwLCBXU19DSElMRApFRElUVEVYVCAvKlNUUklOR19QQUdFU0VUVVBfUklHSFRWQUxVRSwqLyAgMHgxNEQsICAgICAxMzAsIDU1LCAzNSwgMTEsIFdTX0NISUxEIHwgV1NfQk9SREVSIHwgV1NfVEFCU1RPUApMVEVYVCAgICAiJkFsYToiLCAgICAgIDB4MTRFLDEwMCwgNzMsIDMwLCAxMCwgV1NfQ0hJTEQKRURJVFRFWFQgLypTVFJJTkdfUEFHRVNFVFVQX0JPVFRPTVZBTFVFLCovIDB4MTUwLCAgICAxMzAsIDczLCAzNSwgMTEsIFdTX0NISUxEIHwgV1NfQk9SREVSIHwgV1NfVEFCU1RPUAoKREVGUFVTSEJVVFRPTiAiT0siLCAgICAgICAgIDB4MTUxLCAgICAgICAgICAgICAgICAgICAxODAsICAzLCA0MCwgMTUsIFdTX1RBQlNUT1AKUFVTSEJVVFRPTiAgICAiUGVydXV0YSIsICAgICAweDE1MiwgICAgICAgICAgICAgICAxODAsIDIxLCA0MCwgMTUsIFdTX1RBQlNUT1AKUFVTSEJVVFRPTiAgICAiJkFwdWEiLCAgICAgICAweDE1MywgICAgICAgICAgICAgICAgMTgwLCAzOSwgNDAsIDE1LCBXU19UQUJTVE9QCn0KClNUUklOR1RBQkxFIERJU0NBUkRBQkxFIExBTkdVQUdFIExBTkdfRklOTklTSCwgU1VCTEFOR19ORVVUUkFMCnsKU1RSSU5HX1BBR0VTRVRVUF9IRUFERVJWQUxVRSwJIiZuIiAgICAgICAgLyogRklYTUUgKi8KU1RSSU5HX1BBR0VTRVRVUF9GT09URVJWQUxVRSwJIlNpdnUgJnMiICAgLyogRklYTUUgKi8KU1RSSU5HX1BBR0VTRVRVUF9MRUZUVkFMVUUsCQkiMjAgbW0iICAgICAvKiBGSVhNRSAqLwpTVFJJTkdfUEFHRVNFVFVQX1JJR0hUVkFMVUUsCSIyMCBtbSIgICAgIC8qIEZJWE1FICovClNUUklOR19QQUdFU0VUVVBfVE9QVkFMVUUsCQkiMjUgbW0iICAgICAvKiBGSVhNRSAqLwpTVFJJTkdfUEFHRVNFVFVQX0JPVFRPTVZBTFVFLAkiMjUgbW0iICAgICAvKiBGSVhNRSAqLwoKU1RSSU5HX05PVEVQQUQsCQkJCQkiTm90ZXBhZCIKU1RSSU5HX0VSUk9SLAkJCQkJIlZJUkhFIgpTVFJJTkdfV0FSTklORywJCQkJCSJWQVJPSVRVUyIKU1RSSU5HX0lORk8sCQkJCQkiVGllZG9pdHVzIgoKU1RSSU5HX1VOVElUTEVELAkJCQkiKG90c2lrb2ltYXRvbikiCgpTVFJJTkdfQUxMX0ZJTEVTLAkJCQkiS2Fpa2tpIHRpZWRvc3RvdCAoKi4qKSIKU1RSSU5HX1RFWFRfRklMRVNfVFhULAkJCSJUZWtzdGkgdGllZG9zdG90ICgqLnR4dCkiCgpTVFJJTkdfVE9PTEFSR0UsCQkJCSJUaWVkb3N0byAnJXMnIG9uIGxpaWFuIHN1dXJpLlxuIFwKUGxlYXNlIHVzZSBhIGRpZmZlcmVudCBlZGl0b3IuIgpTVFJJTkdfTk9URVhULAkJCQkJIkV0IHN59nR05G55dCBsYWlua2FhbiB0ZWtzdGnkLiBcClxuS2lyam9pdGEgam90YWluIGphIHlyaXTkIHV1ZGVsbGVlbiIKU1RSSU5HX0RPRVNOT1RFWElTVCwJCQkJIkZpbGUgJyVzJ1xuZG9lcyBub3QgZXhpc3RcblxuIFwKRG8geW91IHdhbnQgdG8gY3JlYXRlIGEgbmV3IGZpbGUgPyIKU1RSSU5HX05PVFNBVkVELAkJCQkiRmlsZSAnJXMnXG5oYXMgYmVlbiBtb2RpZmllZFxuXG4gXApXb3VsZCB5b3UgbGlrZSB0byBzYXZlIHRoZSBjaGFuZ2VzID8iClNUUklOR19OT1RGT1VORCwJCQkJCSInJXMnIGVpIGz2eWR5LiIKU1RSSU5HX09VVF9PRl9NRU1PUlksCQkJIk11aXN0aWEgZWkgb2xlIHJpaXR05Hbkc3RpIHTkbeRuIFwKXG50ZWh05HbkbiB0ZWtlbWlzZWtzaS4gU3VsamUgam9raW4gc292ZWxsdXMgdmFwYXV0dGFha3Nlc2lcbiBcCm11aXN0aWEuIgoKfQoK