LyoKICogIE5vdGVwYWQgKEh1bmdhcmlhbiByZXNvdXJjZXMpCiAqCiAqICBDb3B5cmlnaHQgMTk5Nyw5OCBNYXJjZWwgQmF1cgogKiAgUHJvb2ZyZWFkIDE5OTggYnkgRGF2aWQgTGVlIExhbWJlcnQKICogIENvcHlyaWdodCAyMDAyIFN5bHZhaW4gUGV0cmVvbGxlCiAqICBDb3B5cmlnaHQgMjAwMiBab2x5IE5hZ3kKICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCiAqLwoKTUFJTl9NRU5VIE1FTlUgTEFOR1VBR0UgTEFOR19IVU5HQVJJQU4sIFNVQkxBTkdfREVGQVVMVAp7CiBQT1BVUCAiJkbhamwiIHsKICBNRU5VSVRFTSAi2iZqXHRDdHJsK04iLCAgICAgICAgICAgQ01EX05FVwogIE1FTlVJVEVNICJNZWcmbnlpdOFzLi4uXHRDdHJsK08iLCAgICAgICAgICAgICBDTURfT1BFTgogIE1FTlVJVEVNICImTWVudOlzXHRDdHJsK1MiLCAgICAgICAgICAgICBDTURfU0FWRQogIE1FTlVJVEVNICJNZW506XMgbeEmc2vpbnQuLi4iLCAgICAgICBDTURfU0FWRV9BUwogIE1FTlVJVEVNIFNFUEFSQVRPUgogIE1FTlVJVEVNICImT2xkYWxiZeFsbO104XMuLi4iLCAgICBDTURfUEFHRV9TRVRVUAogIE1FTlVJVEVNICJOeW9tJnRhdOFzLi4uXHRDdHJsK1AiLCAgICAgICAgICAgIENNRF9QUklOVAogIE1FTlVJVEVNICJOeW9tdGF08yAmYmXhbGztdOFzLi4uIiwgQ01EX1BSSU5URVJfU0VUVVAKICBNRU5VSVRFTSBTRVBBUkFUT1IKICBNRU5VSVRFTSAiJktpbOlw6XMiLCAgICAgICAgICAgICBDTURfRVhJVAogfQpQT1BVUCAiUyZ6ZXJrZXN6dOlzIiB7CiAgTUVOVUlURU0gIiZWaXNzemF2b27hc1x0Q3RybCtaIiwgICAgIENNRF9VTkRPCiAgTUVOVUlURU0gU0VQQVJBVE9SCiAgTUVOVUlURU0gIktpduEmZ+FzXHRDdHJsK1giLCAgICAgIENNRF9DVVQKICBNRU5VSVRFTSAiJk3hc29s4XNcdEN0cmwrQyIsICAgICBDTURfQ09QWQogIE1FTlVJVEVNICImQmVpbGxlc3p06XNcdEN0cmwrViIsICAgIENNRF9QQVNURQogIE1FTlVJVEVNICJU9nImbOlzXHREZWwiLCAgICAgIENNRF9ERUxFVEUKICBNRU5VSVRFTSBTRVBBUkFUT1IKICBNRU5VSVRFTSAiJkF6IPZzc3plcyBraWplbPZs6XNlIiwgICAgICAgQ01EX1NFTEVDVF9BTEwKICBNRU5VSVRFTSAiJklk9S9k4XR1bVx0RjUiLCAgICBDTURfVElNRV9EQVRFCiAgTUVOVUlURU0gU0VQQVJBVE9SCiAgTUVOVUlURU0gIiZIb3Nzevogc29yb2sgdPZyZGVs6XNlIiwgIENNRF9XUkFQCiB9ClBPUFVQICImS2VyZXPpcyIgewogIE1FTlVJVEVNICImS2VyZXPpcy4uLiIsICAgICAgICAgICBDTURfU0VBUkNICiAgTUVOVUlURU0gIkv2dmUmdGtlevUga2VyZXPpc2VcdEYzIiwgIENNRF9TRUFSQ0hfTkVYVAogfQpQT1BVUCAiJlP6Z/MiIHsKICBNRU5VSVRFTSAiJlTpbWFr9nL2ayIsICAgICAgICAgQ01EX0hFTFBfQ09OVEVOVFMKICBNRU5VSVRFTSAiJktlcmVz6XMuLi4iLCAgICAgICAgQ01EX0hFTFBfU0VBUkNICiAgTUVOVUlURU0gIiZIYXN6buFsYXQiLCAgICAgQ01EX0hFTFBfT05fSEVMUAogIE1FTlVJVEVNIFNFUEFSQVRPUgogIFBPUFVQICJJbmYmb3Jt4WNp8yIgewogICBNRU5VSVRFTSAiJkxpY2VuYy4uLiIsICAgICAgICAgQ01EX0xJQ0VOU0UKICAgTUVOVUlURU0gIiZTRU1NSSBHQVJBTkNJQS4uLiIsICAgICBDTURfTk9fV0FSUkFOVFkKICAgTUVOVUlURU0gIiZXaW5lIG7pdmplZ3kuLi4iLCAgICAgIENNRF9BQk9VVF9XSU5FCiAgfQogfQp9CgovKiBEaWFsb2cgYFBhZ2Ugc2V0dXAnICovCgpESUFMT0dfUEFHRVNFVFVQIERJQUxPRyAwLCAwLCAyMjUsIDk1CkxBTkdVQUdFIExBTkdfSFVOR0FSSUFOLCBTVUJMQU5HX0RFRkFVTFQKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkZPTlQgOCwgIk1TIFNoZWxsIERsZyIKQ0FQVElPTiAiT2xkYWxiZeFsbO104XMiCnsKTFRFWFQgICAgIiZGZWps6WM6IiwgIDB4MTQwLCAgIDEwLCAwNywgNDAsIDE1CkVESVRURVhUIElEQ19QQUdFU0VUVVBfSEVBREVSVkFMVUUsICAgNjAsIDA1LDExMCwgMTIsIFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AKTFRFWFQgICAgIiZM4WJs6WM6IiwgIDB4MTQyLCAgIDEwLCAyNCwgNDAsIDE1CkVESVRURVhUIElEQ19QQUdFU0VUVVBfRk9PVEVSVkFMVUUsICAgNjAsIDIyLDExMCwgMTIsIFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AKCkdST1VQQk9YICImTWFyZ/NrOiIsICAgICAgMHgxNDQsICAgICAxMCwgNDMsMTYwLCA0NQpMVEVYVCAgICAiJkJhbDoiLCAgICAgICAgMHgxNDUsICAgMjAsIDU1LCAzMCwgMTAsIFdTX0NISUxECkVESVRURVhUIElEQ19QQUdFU0VUVVBfTEVGVFZBTFVFLCAgICAgNTAsIDU1LCAzNSwgMTEsIFdTX0NISUxEIHwgV1NfQk9SREVSIHwgV1NfVEFCU1RPUApMVEVYVCAgICAiJkZlbHP1OiIsICAgICAgICAgMHgxNDgsICAgIDIwLCA3MywgMzAsIDEwLCBXU19DSElMRApFRElUVEVYVCBJRENfUEFHRVNFVFVQX1RPUFZBTFVFLCAgICAgIDUwLCA3MywgMzUsIDExLCBXU19DSElMRCB8IFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AKTFRFWFQgICAgIiZKb2JiOiIsICAgICAgIDB4MTRCLCAxMDAsIDU1LCAzMCwgMTAsIFdTX0NISUxECkVESVRURVhUIElEQ19QQUdFU0VUVVBfUklHSFRWQUxVRSwgICAxMzAsIDU1LCAzNSwgMTEsIFdTX0NISUxEIHwgV1NfQk9SREVSIHwgV1NfVEFCU1RPUApMVEVYVCAgICAiJkFsc/M6IiwgICAgICAweDE0RSwxMDAsIDczLCAzMCwgMTAsIFdTX0NISUxECkVESVRURVhUIElEQ19QQUdFU0VUVVBfQk9UVE9NVkFMVUUsICAxMzAsIDczLCAzNSwgMTEsIFdTX0NISUxEIHwgV1NfQk9SREVSIHwgV1NfVEFCU1RPUAoKREVGUFVTSEJVVFRPTiAiT0siLCAgICAgICAgIElET0ssICAgICAgICAgICAgICAgICAgIDE4MCwgIDMsIDQwLCAxNSwgV1NfVEFCU1RPUApQVVNIQlVUVE9OICAgICJN6WdzZSIsICAgICBJRENBTkNFTCwgICAgICAgICAgICAgICAxODAsIDIxLCA0MCwgMTUsIFdTX1RBQlNUT1AKUFVTSEJVVFRPTiAgICAiJlP6Z/MiLCAgICAgICBJREhFTFAsICAgICAgICAgICAgICAgIDE4MCwgMzksIDQwLCAxNSwgV1NfVEFCU1RPUAp9CgpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRSBMQU5HVUFHRSBMQU5HX0hVTkdBUklBTiwgU1VCTEFOR19ERUZBVUxUCnsKU1RSSU5HX1BBR0VTRVRVUF9IRUFERVJWQUxVRSwgICAiJmYiClNUUklOR19QQUdFU0VUVVBfRk9PVEVSVkFMVUUsICAgIk9sZGFsc3rhbTogJnAuIgoKU1RSSU5HX05PVEVQQUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkplZ3l6ZXR09m1iIgpTVFJJTkdfRVJST1IsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSElCQSIKU1RSSU5HX1dBUk5JTkcsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZJR1lFTE1FWlRFVMlTIgpTVFJJTkdfSU5GTywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5mb3Jt4WNp8yIKClNUUklOR19VTlRJVExFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIobul2dGVsZW4pIgoKU1RSSU5HX0FMTF9GSUxFUywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk1pbmRlbiBm4WpsICgqLiopIgpTVFJJTkdfVEVYVF9GSUxFU19UWFQsICAgICAgICAgICAgICAgICAgIlN69nZlZ2bhamxvayAoKi50eHQpIgoKU1RSSU5HX1RPT0xBUkdFLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiclcycgZuFqbCB0+mwgbmFneSBt6XJldPsuXG4gXApL6XJlbSBoYXN6buFsam9uIG3hc2lrIHN69nZlZ3N6ZXJrZXN6dPUgcHJvZ3JhbW90LiIKU1RSSU5HX05PVEVYVCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkEgc3r2dmVnIG5lbSB0YXJ0YWxtYXoga2FyYWt0ZXJ0ISBcClxuS+lyZW0gZ+lwZWxqZW4gYmUgbulo4W55IGthcmFrdGVydCDpcyBwcvNi4WxqYSD6anJhISIKU1RSSU5HX0RPRVNOT1RFWElTVCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkEgbWVnYWRvdHQgJyVzJ1xuZuFqbCBuZW0gbOl0ZXppayFcblxuIFwKS+124W4gbOl0cmVob3puaSD6aiBm4WpsdD8iClNUUklOR19OT1RTQVZFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICInJXMnIGbhamxcbm3zZG9zdWx0XG5cbiBcClN6ZXJldG7pIG1lbnRlbmkgYSB24Wx0b3rhc29rYXQ/IgpTVFJJTkdfTk9URk9VTkQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICInJXMnIG5lbSB0YWzhbGhhdPMhIgpTVFJJTkdfT1VUX09GX01FTU9SWSwgICAgICAgICAgICAgICAgICAgIk5pbmNzIGVsZWdlbmT1IHN6YWJhZCBtZW3zcmlhIVwKXG5a4XJqb24gYmUgbulo4W55IGFsa2FsbWF64XN0LCBlenplbCBu9nZlbHZlIGEgc3phYmFkIG1lbfNyaWEgbelyZXTpdFwKISIKCn0K