LyoKICogQ29weXJpZ2h0IDE5OTggSnVlcmdlbiBTY2htaWVkCiAqIENvcHlyaWdodCAyMDAzLDIwMDQsMjAwNywyMDA4IEpvc+kgTWFudWVsIEZlcnJlciBPcnRpegogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EKICovCgojaW5jbHVkZSAic2hyZXNkZWYuaCIKCkxBTkdVQUdFIExBTkdfU1BBTklTSCwgU1VCTEFOR19ORVVUUkFMCgpNRU5VXzAwMSBNRU5VIERJU0NBUkRBQkxFCkJFR0lOCglNRU5VSVRFTSAiSWNvbm9zICZncmFuZGVzIiwJRkNJRE1fU0hWSUVXX0JJR0lDT04KCU1FTlVJVEVNICJJY29ub3MgJnBlcXVl8W9zIiwJRkNJRE1fU0hWSUVXX1NNQUxMSUNPTgoJTUVOVUlURU0gIiZMaXN0YSIsCQlGQ0lETV9TSFZJRVdfTElTVFZJRVcKCU1FTlVJVEVNICImRGV0YWxsZXMiLAkJRkNJRE1fU0hWSUVXX1JFUE9SVFZJRVcKRU5ECgovKgogc2hlbGx2aWV3IGJhY2tncm91bmQgbWVudQoqLwpNRU5VXzAwMiBNRU5VIERJU0NBUkRBQkxFCkJFR0lOCglQT1BVUCAiIgoJQkVHSU4KCSAgUE9QVVAgIiZWZXIiCgkgIEJFR0lOCgkgICAgTUVOVUlURU0gIkljb25vcyAmZ3JhbmRlcyIsICAgICBGQ0lETV9TSFZJRVdfQklHSUNPTgoJICAgIE1FTlVJVEVNICJJY29ub3MgJnBlcXVl8W9zIiwgICAgRkNJRE1fU0hWSUVXX1NNQUxMSUNPTgoJICAgIE1FTlVJVEVNICImTGlzdGEiLCAgICAgICAgICAgICAgRkNJRE1fU0hWSUVXX0xJU1RWSUVXCgkgICAgTUVOVUlURU0gIiZEZXRhbGxlcyIsICAgICAgICAgICBGQ0lETV9TSFZJRVdfUkVQT1JUVklFVwoJICBFTkQKCSAgTUVOVUlURU0gU0VQQVJBVE9SCgkgIFBPUFVQICJPcmRlbmFyICZpY29ub3MiCgkgIEJFR0lOCgkgICAgTUVOVUlURU0gIlBvciAmbm9tYnJlIiwJMHgzMAkvKiBjb2x1bW4gMCAqLwoJICAgIE1FTlVJVEVNICJQb3IgJnRpcG8iLAkweDMyCS8qIGNvbHVtbiAyICovCgkgICAgTUVOVUlURU0gIlBvciB0JmFtYfFvIiwJMHgzMQkvKiAuLi4gKi8KCSAgICBNRU5VSVRFTSAiUG9yICZmZWNoYSIsCTB4MzMKCSAgICBNRU5VSVRFTSBTRVBBUkFUT1IKCSAgICBNRU5VSVRFTSAiJk9yZGVuYXIgYXV0b23hdGljYW1lbnRlIiwJRkNJRE1fU0hWSUVXX0FVVE9BUlJBTkdFCgkgIEVORAoJICBNRU5VSVRFTSAiQWxpbmVhciBpY29ub3MiLAkJRkNJRE1fU0hWSUVXX1NOQVBUT0dSSUQKCSAgTUVOVUlURU0gU0VQQVJBVE9SCgkgIE1FTlVJVEVNICJBY3R1YWxpemFyIiwJCUZDSURNX1NIVklFV19SRUZSRVNICgkgIE1FTlVJVEVNIFNFUEFSQVRPUgoJICBNRU5VSVRFTSAiUGVnYXIiLAkJCUZDSURNX1NIVklFV19JTlNFUlQKCSAgTUVOVUlURU0gIlBlZ2FyIGFjY2VzbyBkaXJlY3RvIiwJRkNJRE1fU0hWSUVXX0lOU0VSVExJTksKCSAgTUVOVUlURU0gU0VQQVJBVE9SCgkgIFBPUFVQICJOdWV2byIKCSAgQkVHSU4KCSAgICBNRU5VSVRFTSAiTnVldmEgJmNhcnBldGEiLAkJRkNJRE1fU0hWSUVXX05FV0ZPTERFUgoJICAgIE1FTlVJVEVNICJOdWV2byAmYWNjZXNvIGRpcmVjdG8iLAlGQ0lETV9TSFZJRVdfTkVXTElOSwoJICAgIE1FTlVJVEVNIFNFUEFSQVRPUgoJICBFTkQKCSAgTUVOVUlURU0gU0VQQVJBVE9SCgkgIE1FTlVJVEVNICJQcm9waWVkYWRlcyIsCUZDSURNX1NIVklFV19QUk9QRVJUSUVTCglFTkQKRU5ECgovKgogc2hlbGx2aWV3IGl0ZW0gbWVudQoqLwpNRU5VX1NIVl9GSUxFIE1FTlUgRElTQ0FSREFCTEUKQkVHSU4KCVBPUFVQICIiCglCRUdJTgoJICBNRU5VSVRFTSAiJlNlbGVjY2lvbmFyIgkJRkNJRE1fU0hWSUVXX09QRU4KCSAgTUVOVUlURU0gIkUmeHBsb3JhciIsCQkJRkNJRE1fU0hWSUVXX0VYUExPUkUKCSAgTUVOVUlURU0gIiZBYnJpciIsCQkJRkNJRE1fU0hWSUVXX09QRU4KCSAgTUVOVUlURU0gU0VQQVJBVE9SCgkgIE1FTlVJVEVNICJDJm9ydGFyIiwJCQlGQ0lETV9TSFZJRVdfQ1VUCgkgIE1FTlVJVEVNICImQ29waWFyIiwJCQlGQ0lETV9TSFZJRVdfQ09QWQoJICBNRU5VSVRFTSBTRVBBUkFUT1IKCSAgTUVOVUlURU0gIkMmcmVhciBhY2Nlc28gZGlyZWN0byIsCUZDSURNX1NIVklFV19DUkVBVEVMSU5LCgkgIE1FTlVJVEVNICImRWxpbWluYXIiLAkJCUZDSURNX1NIVklFV19ERUxFVEUKCSAgTUVOVUlURU0gIlJlJm5vbWJyYXIiLAkJRkNJRE1fU0hWSUVXX1JFTkFNRQoJICBNRU5VSVRFTSBTRVBBUkFUT1IKCSAgTUVOVUlURU0gIiZQcm9waWVkYWRlcyIsCQlGQ0lETV9TSFZJRVdfUFJPUEVSVElFUwoJRU5ECkVORAoKTUVOVV9DUEFORUwgTUVOVQpCRUdJTgogICAgUE9QVVAgIiZGaWxlIgogICAgQkVHSU4KICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiRSZ4aXQiLCBJRE1fQ1BBTkVMX0VYSVQKICAgIEVORAoKICAgIFBPUFVQICImVmlldyIKICAgIEJFR0lOCiAgICAgICAgTUVOVUlURU0gIkljb25vcyAmZ3JhbmRlcyIsIEZDSURNX1NIVklFV19CSUdJQ09OCiAgICAgICAgTUVOVUlURU0gIkljb25vcyAmcGVxdWXxb3MiLCBGQ0lETV9TSFZJRVdfU01BTExJQ09OCiAgICAgICAgTUVOVUlURU0gIiZMaXN0YSIsIEZDSURNX1NIVklFV19MSVNUVklFVwogICAgICAgIE1FTlVJVEVNICImRGV0YWxsZXMiLCBGQ0lETV9TSFZJRVdfUkVQT1JUVklFVwogICAgRU5ECgogICAgUE9QVVAgIiZIZWxwIgogICAgQkVHSU4KICAgICAgICBNRU5VSVRFTSAiJkFib3V0IENvbnRyb2wgUGFuZWwuLi4iLCBJRE1fQ1BBTkVMX0FCT1VUCiAgICBFTkQKRU5ECgpTSEJSU0ZPUkZPTERFUl9NU0dCT1ggRElBTE9HIExPQURPTkNBTEwgTU9WRUFCTEUgRElTQ0FSREFCTEUgMTUsIDQwLCAxODgsIDE5MgpTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUgfCBEU19NT0RBTEZSQU1FIHwgRFNfU0VURk9OVCB8IERTXzNETE9PSwpDQVBUSU9OICJFeHBsb3JhciBjYXJwZXRhIgpGT05UIDgsICJNUyBTaGVsbCBEbGciCnsKIERFRlBVU0hCVVRUT04gIkFjZXB0YXIiLCAxLCA4MCwgMTc2LCA1MCwgMTIsIEJTX0RFRlBVU0hCVVRUT04gfCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKIFBVU0hCVVRUT04gIkNhbmNlbGFyIiwgMiwgMTM0LCAxNzYsIDUwLCAxMiwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCiBMVEVYVCAiIiwgSUREX1RJVExFLCA0LCA0LCAxODAsIDEyCiBMVEVYVCAiIiwgSUREX1NUQVRVUywgNCwgMjUsIDE4MCwgMTIKIENPTlRST0wgIiIsIElERF9UUkVFVklFVywgIlN5c1RyZWVWaWV3MzIiLAogCVRWU19IQVNCVVRUT05TIHwgVFZTX0hBU0xJTkVTIHwgVFZTX0xJTkVTQVRST09UIHwKCVdTX0JPUkRFUiB8IFdTX1RBQlNUT1AsCgk0LCA0MCwgMTgwLCAxMjAKfQoKU0hORVdCUlNGT1JGT0xERVJfTVNHQk9YIERJQUxPRyBMT0FET05DQUxMIE1PVkVBQkxFIERJU0NBUkRBQkxFIDE1LCA0MCwgMjE4LCAxOTYKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VIHwgV1NfU0laRUJPWCB8IERTX01PREFMRlJBTUUgfCBEU19TRVRGT05UIHwgRFNfM0RMT09LCkNBUFRJT04gIkV4cGxvcmFyIGNhcnBldGEiCkZPTlQgOCwgIk1TIFNoZWxsIERsZyIKewogTFRFWFQgIiIsIElERF9USVRMRSwgMTAsIDgsIDE5OCwgMjQKIExURVhUICIiLCBJRERfU1RBVFVTLCAxMCwgMjUsIDE5OCwgMTIKIExURVhUICJDYXJwZXRhOiIsIElERF9GT0xERVIsIDEwLCAxNTYsIDQwLCAxMgogQ09OVFJPTCAiIiwgSUREX1RSRUVWSUVXLCAiU3lzVHJlZVZpZXczMiIsCiAgICAgICBUVlNfSEFTQlVUVE9OUyB8IFRWU19IQVNMSU5FUyB8IFRWU19MSU5FU0FUUk9PVCB8CiAgICAgICBXU19CT1JERVIgfCBXU19UQUJTVE9QLAogICAgICAgMTIsIDM4LCAxOTQsIDEwNQogRURJVFRFWFQgSUREX0ZPTERFUlRFWFQsIDQ2LCAxNTAsIDE2MCwgMTQsIFdTX0JPUkRFUiB8IFdTX0dST1VQIHwgV1NfVEFCU1RPUAogUFVTSEJVVFRPTiAiJkhhY2VyIG51ZXZhIGNhcnBldGEiLCBJRERfTUFLRU5FV0ZPTERFUiwgMTIsIDE3NCwgNzAsIDE0LCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKIERFRlBVU0hCVVRUT04gIkFjZXB0YXIiLCBJRE9LLCAxMDIsIDE3NCwgNTAsIDE0LCBCU19ERUZQVVNIQlVUVE9OIHwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCiBQVVNIQlVUVE9OICJDYW5jZWxhciIsIElEQ0FOQ0VMLCAxNTYsIDE3NCwgNTAsIDE0LCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKfQoKU0hFTExfWUVTVE9BTExfTVNHQk9YIERJQUxPRyAyMDAsIDEwMCwgMjgwLCA5MApTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19WSVNJQkxFIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKQ0FQVElPTiAiTWVuc2FqZSIKRk9OVCA4LCAiTVMgU2hlbGwgRGxnIgp7CiAgICBERUZQVVNIQlVUVE9OICImU+0iLCBJRFlFUywgMzQsIDY5LCA1MywgMTQsIFdTX0dST1VQIHwgV1NfVEFCU1RPUAogICAgUFVTSEJVVFRPTiAiU+0gYSAmdG9kbyIsIElERF9ZRVNUT0FMTCwgOTIsIDY5LCA2NSwgMTQsIFdTX0dST1VQIHwgV1NfVEFCU1RPUAogICAgUFVTSEJVVFRPTiAiJk5vIiwgSUROTywgMTYyLCA2OSwgNTMsIDE0LCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKICAgIFBVU0hCVVRUT04gIiZDYW5jZWxhciIsIElEQ0FOQ0VMLCAyMjAsIDY5LCA1MywgMTQsIFdTX0dST1VQIHwgV1NfVEFCU1RPUAogICAgSUNPTiAiIiwgSUREX0lDT04sIDEwLCAxMCwgMTYsIDE2CiAgICBMVEVYVCAiIiwgSUREX01FU1NBR0UsIDQwLCAxMCwgMjM4LCA1MiwgMAp9CgpTSEVMTF9BQk9VVF9NU0dCT1ggRElBTE9HIExPQURPTkNBTEwgTU9WRUFCTEUgRElTQ0FSREFCTEUgMTUsIDQwLCAyMjAsIDE1MgpTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19WSVNJQkxFIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKQ0FQVElPTiAiQWNlcmNhIGRlICVzIgpGT05UIDEwLCAiTVMgU2hlbGwgRGxnIgp7CiBERUZQVVNIQlVUVE9OICJBY2VwdGFyIiwgSURPSywgMTUzLCAxMzMsIDYwLCAxMiwgV1NfVEFCU1RPUAogUFVTSEJVVFRPTiAiJkxpY2VuY2lhIGRlIFdpbmUuLi4iLCBJRENfQUJPVVRfTElDRU5TRSwgMTUzLCAxMTMsIDYwLCAxMiwgV1NfVEFCU1RPUAogTElTVEJPWCBJRENfQUJPVVRfTElTVEJPWCwgOCwgNjUsIDEzNywgODIsIExCU19OT1RJRlkgfCBXU19WU0NST0xMIHwgV1NfQk9SREVSCiBJQ09OICIiLCBzdGMxLCAxMCwgMTAsIDMwLCAzMAogTFRFWFQgIiIsIElEQ19BQk9VVF9TVEFUSUNfVEVYVDEsIDQyLCAxMCwgMTcwLCAxMAogTFRFWFQgIiIsIElEQ19BQk9VVF9TVEFUSUNfVEVYVDIsIDQyLCAyMiwgMTcwLCAxMAogTFRFWFQgIkVqZWN1dOFuZG9zZSBlbiAlcyIsIElEQ19BQk9VVF9TVEFUSUNfVEVYVDMsIDQyLCAzNCwgMTcwLCAxMAogTFRFWFQgIldpbmUgbGUgaGEgc2lkbyBwcm9wb3JjaW9uYWRvIHBvcjoiLCBJRENfQUJPVVRfV0lORV9URVhULCA4LCA1NCwgMjA0LCAxMAp9CgpTSEVMTF9SVU5fRExHIERJQUxPRyBMT0FET05DQUxMIE1PVkVBQkxFIERJU0NBUkRBQkxFIDAsIDAsIDIyNywgOTUKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfVklTSUJMRSB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkNBUFRJT04gIiIKRk9OVCA4LCAiTVMgU2hlbGwgRGxnIgp7CiBJQ09OICIiLCAxMjI5NywgNywgMTEsIDE4LCAyMCwgV1NfVklTSUJMRQogTFRFWFQgIkludHJvZHV6Y2EgZWwgbm9tYnJlIGRlIHVuIHByb2dyYW1hLCBjYXJwZXRhLCBkb2N1bWVudG8gbyByZWN1cnNvIGRlIEludGVybmV0OyB5IFdpbmUgbG8gYWJyaXLhIHBhcmEgdXN0ZWQuIiwgMTIyODksIDM2LCAxMSwgMTgyLCAxOAogTFRFWFQgIiZBYnJpcjoiLCAxMjMwNSwgNywgMzksIDI0LCAxMAogQ09OVFJPTCAiIiwgMTIyOTgsICJDT01CT0JPWCIsIFdTX1RBQlNUT1AgfCBXU19HUk9VUCB8IFdTX1ZTQ1JPTEwgfCBXU19WSVNJQkxFIHwgQ0JTX0RJU0FCTEVOT1NDUk9MTCB8IENCU19BVVRPSFNDUk9MTCB8IENCU19EUk9QRE9XTiwgMzYsIDM3LCAxODMsIDEwMAogREVGUFVTSEJVVFRPTiAiQWNlcHRhciIsIElET0ssIDYyLCA2MywgNTAsIDE0LCBXU19UQUJTVE9QCiBQVVNIQlVUVE9OICJDYW5jZWxhciIsIElEQ0FOQ0VMLCAxMTYsIDYzLCA1MCwgMTQsIFdTX1RBQlNUT1AKIFBVU0hCVVRUT04gIiZFeGFtaW5hci4uLiIsIDEyMjg4LCAxNzAsIDYzLCA1MCwgMTQsIFdTX1RBQlNUT1AKfQoKU1RSSU5HVEFCTEUKewogICAgICAgIC8qIGNvbHVtbnMgaW4gdGhlIHNoZWxsdmlldyAqLwoJSURTX1NIVl9DT0xVTU4xICAgICAgICAgIkFyY2hpdm8iCglJRFNfU0hWX0NPTFVNTjIgICAgICAgICAiVGFtYfFvIgoJSURTX1NIVl9DT0xVTU4zICAgICAgICAgIlRpcG8iCglJRFNfU0hWX0NPTFVNTjQgICAgICAgICAiTW9kaWZpY2FkbyIKCUlEU19TSFZfQ09MVU1ONSAgICAgICAgICJBdHJpYnV0b3MiCglJRFNfU0hWX0NPTFVNTjYgICAgICAgICAiVGFtYfFvIgoJSURTX1NIVl9DT0xVTU43ICAgICAgICAgIlRhbWHxbyBkaXNwb25pYmxlIgoJSURTX1NIVl9DT0xVTU44ICAgICAgICAgIk5vbWJyZSIKCUlEU19TSFZfQ09MVU1OOSAgICAgICAgICJDb21lbnRhcmlvcyIKCUlEU19TSFZfQ09MVU1OMTAgICAgICAgICJQcm9waWV0YXJvIgoJSURTX1NIVl9DT0xVTU4xMSAgICAgICAgIkdydXBvIgoJSURTX1NIVl9DT0xVTU5fREVMRlJPTSAgIkx1Z2FyIG9yaWdpbmFsIgoJSURTX1NIVl9DT0xVTU5fREVMREFURSAgIkZlY2hhIGRlIGJvcnJhZG8iCgogICAgICAgIC8qIHNwZWNpYWwgZm9sZGVycyAqLwoJSURTX0RFU0tUT1AJCSJFc2NyaXRvcmlvIgoJSURTX01ZQ09NUFVURVIJCSJNaSBQQyIKICAgICAgICBJRFNfUkVDWUNMRUJJTl9GT0xERVJfTkFNRSAiUGFwZWxlcmEgZGUgcmVjaWNsYWplIgoJSURTX0NPTlRST0xQQU5FTAkiQ29udHJvbCBQYW5lbCIKCiAgICAgICAgLyogY29udGV4dCBtZW51cyAqLwoJSURTX1ZJRVdfTEFSR0UJCSJJY29ub3MgJmdyYW5kZXMiCglJRFNfVklFV19TTUFMTAkJIkljb25vcyAmcGVxdWXxb3MiCglJRFNfVklFV19MSVNUCQkiJkxpc3RhIgoJSURTX1ZJRVdfREVUQUlMUwkiJkRldGFsbGVzIgoJSURTX1NFTEVDVAkJIlNlbGVjY2lvbmFyIgoJSURTX09QRU4JCSJBYnJpciIKCglJRFNfQ1JFQVRFRk9MREVSX0RFTklFRCAiTm8gc2UgcHVlZGUgY3JlYXIgbnVldmEgY2FycGV0YTogUGVybWlzbyBkZW5lZ2Fkby4iCglJRFNfQ1JFQVRFRk9MREVSX0NBUFRJT04gIkVycm9yIGR1cmFudGUgbGEgY3JlYWNp824gZGUgdW5hIG51ZXZhIGNhcnBldGEiCglJRFNfREVMRVRFSVRFTV9DQVBUSU9OICJDb25maXJtYXIgZWxpbWluYWNp824gZGUgYXJjaGl2byIKCUlEU19ERUxFVEVGT0xERVJfQ0FQVElPTiAiQ29uZmlybWFyIGVsaW1pbmFjafNuIGRlIGNhcnBldGEiCglJRFNfREVMRVRFSVRFTV9URVhUICK/U2VndXJvIHF1ZSBkZXNlYSBlbGltaW5hciAnJTEnPyIKCUlEU19ERUxFVEVNVUxUSVBMRV9URVhUICK/U2VndXJvIHF1ZSBkZXNlYSBlbGltaW5hciBlc3RvcyAlMSBlbGVtZW50b3M/IgoJSURTX0RFTEVURVNFTEVDVEVEX1RFWFQgIr9TZWd1cm8gcXVlIGRlc2VhIGVsaW1pbmFyIGVsIChsb3MpIGVsZW1lbnRvKHMpIHNlbGVjY2lvbmFkbyhzKT8iCglJRFNfVFJBU0hJVEVNX1RFWFQgIr9TZWd1cm8gcXVlIGRlc2VhIGVudmlhciAnJTEnIGEgbGEgcGFwZWxlcmEgZGUgcmVjaWNsYWplPyIKCUlEU19UUkFTSEZPTERFUl9URVhUICK/U2VndXJvIHF1ZSBkZXNlYSBlbnZpYXIgJyUxJyB5IHRvZG8gc3UgY29udGVuaWRvIGEgbGEgcGFwZWxlcmEgZGUgcmVjaWNsYWplPyIKCUlEU19UUkFTSE1VTFRJUExFX1RFWFQgIr9TZWd1cm8gcXVlIGRlc2VhIGVudmlhciBlc3RvcyAlMSBlbGVtZW50b3MgYSBsYSBwYXBlbGVyYSBkZSByZWNpY2xhamU/IgoJSURTX0NBTlRUUkFTSF9URVhUICJFbCBlbGVtZW50byAnJTEnIG5vIHB1ZWRlIGVudmlhcnNlIGEgbGEgcGFwZWxlcmEgZGUgcmVjaWNsYWplLiC/RGVzZWEgZWxpbWluYXJsbyBlbiBzdSBsdWdhcj8iCglJRFNfT1ZFUldSSVRFRklMRV9URVhUICJFc3RhIGNhcnBldGEgeWEgY29udGllbmUgdW4gYXJjaGl2byBsbGFtYWRvICclMScuXG5cbr9EZXNlYSByZWVtcGxhemFybG8/IgoJSURTX09WRVJXUklURUZJTEVfQ0FQVElPTiAiQ29uZmlybWFyIHNvYnJlZXNjcml0dXJhIGRlIGFyY2hpdm8iCglJRFNfT1ZFUldSSVRFRk9MREVSX1RFWFQgIkVzdGEgY2FycGV0YSB5YSBjb250aWVuZSB1bmEgY2FycGV0YSBsbGFtYWRhICclMScuXG5cbiJcCgkgICAgIlNpIGxvcyBhcmNoaXZvcyBkZSBsYSBjYXJwZXRhIGRlIGRlc3Rpbm8gdGllbmVuIGxvcyBtaXNtb3Mgbm9tYnJlcyBxdWUgbG9zXG4iXAoJICAgICJkZSBsYSBjYXJwZXRhIHNlbGVjY2lvbmFkYSwg6XN0b3Mgc2Vy4W4gcmVlbXBsYXphZG9zLiC/VG9kYXbtYSBkZXNlYSBtb3ZlclxuIlwKCSAgICAibyBjb3BpYXIgbGEgY2FycGV0YT8iCgogICAgICAgIC8qIG1lc3NhZ2UgYm94IHN0cmluZ3MgKi8KICAgICAgICBJRFNfUkVTVEFSVF9USVRMRQkiUmVpbmljaWFyIgogICAgICAgIElEU19SRVNUQVJUX1BST01QVAkiv0Rlc2VhIHNpbXVsYXIgdW4gcmVpbmljaW8gZGUgV2luZG93cz8iCiAgICAgICAgSURTX1NIVVRET1dOX1RJVExFCSJBcGFnYXIiCiAgICAgICAgSURTX1NIVVRET1dOX1BST01QVAkiv0Rlc2VhIHRlcm1pbmFyIHN1IHNlc2nzbiBkZSBXaW5lPyIKCiAgICAgICAgLyogc2hlbGwgZm9sZGVyIHBhdGggZGVmYXVsdCB2YWx1ZXMgKi8KCUlEU19QUk9HUkFNUyAgICAgICAgICAgICAgICAiTWVu+iBJbmljaW9cXFByb2dyYW1hcyIKCUlEU19QRVJTT05BTCAgICAgICAgICAgICAgICAiTWlzIGRvY3VtZW50b3MiCglJRFNfRkFWT1JJVEVTICAgICAgICAgICAgICAgIkZhdm9yaXRvcyIKCUlEU19TVEFSVFVQICAgICAgICAgICAgICAgICAiTWVu+iBJbmljaW9cXFByb2dyYW1hc1xcSW5pY2lvIgoJSURTX1JFQ0VOVCAgICAgICAgICAgICAgICAgICJSZWNpZW50ZXMiCglJRFNfU0VORFRPICAgICAgICAgICAgICAgICAgIkVudmlhciBhIgoJSURTX1NUQVJUTUVOVSAgICAgICAgICAgICAgICJNZW76IEluaWNpbyIKCUlEU19NWU1VU0lDICAgICAgICAgICAgICAgICAiTWkgbfpzaWNhIgoJSURTX01ZVklERU8gICAgICAgICAgICAgICAgICJNaXMgdu1kZW9zIgoJSURTX0RFU0tUT1BESVJFQ1RPUlkgICAgICAgICJFc2NyaXRvcmlvIgoJSURTX05FVEhPT0QgICAgICAgICAgICAgICAgICJFbnRvcm5vIGRlIHJlZCIKCUlEU19URU1QTEFURVMgICAgICAgICAgICAgICAiUGxhbnRpbGxhcyIKCUlEU19BUFBEQVRBICAgICAgICAgICAgICAgICAiRGF0b3MgZGUgcHJvZ3JhbWEiCglJRFNfUFJJTlRIT09EICAgICAgICAgICAgICAgIlZlY2luZGFyaW8gZGUgaW1wcmVzafNuIgoJSURTX0xPQ0FMX0FQUERBVEEgICAgICAgICAgICJDb25maWd1cmFjafNuIGxvY2FsXFxEYXRvcyBkZSBwcm9ncmFtYSIKCUlEU19JTlRFUk5FVF9DQUNIRSAgICAgICAgICAiQ29uZmlndXJhY2nzbiBsb2NhbFxcQXJjaGl2b3MgdGVtcG9yYWxlcyBkZSBJbnRlcm5ldCIKCUlEU19DT09LSUVTICAgICAgICAgICAgICAgICAiQ29va2llcyIKCUlEU19ISVNUT1JZICAgICAgICAgICAgICAgICAiQ29uZmlndXJhY2nzbiBsb2NhbFxcSGlzdG9yaWFsIgoJSURTX1BST0dSQU1fRklMRVMgICAgICAgICAgICJBcmNoaXZvcyBkZSBwcm9ncmFtYSIKCUlEU19NWVBJQ1RVUkVTICAgICAgICAgICAgICAiTWlzIGlt4WdlbmVzIgoJSURTX1BST0dSQU1fRklMRVNfQ09NTU9OICAgICJBcmNoaXZvcyBkZSBwcm9ncmFtYVxcQXJjaGl2b3MgY29tdW5lcyIKCUlEU19DT01NT05fRE9DVU1FTlRTICAgICAgICAiRG9jdW1lbnRvcyIKCUlEU19BRE1JTlRPT0xTICAgICAgICAgICAgICAiTWVu+iBJbmljaW9cXFByb2dyYW1hc1xcQWNjZXNvcmlvc1xcSGVycmFtaWVudGFzIGRlbCBzaXN0ZW1hIgoJSURTX0NPTU1PTl9NVVNJQyAgICAgICAgICAgICJEb2N1bWVudG9zXFxNaSBt+nNpY2EiCglJRFNfQ09NTU9OX1BJQ1RVUkVTICAgICAgICAgIkRvY3VtZW50b3NcXE1pcyBpbeFnZW5lcyIKCUlEU19DT01NT05fVklERU8gICAgICAgICAgICAiRG9jdW1lbnRvc1xcTWlzIHbtZGVvcyIKCUlEU19DREJVUk5fQVJFQSAgICAgICAgICAgICAiQ29uZmlndXJhY2nzbiBsb2NhbFxcRGF0b3MgZGUgcHJvZ3JhbWFcXE1pY3Jvc29mdFxcQ0QgQnVybmluZyIKCglJRFNfTkVXRk9MREVSCQkiTnVldmEgY2FycGV0YSIKCglJRFNfQ1BBTkVMX1RJVExFICAgICAgICAgICAgIldpbmUgQ29udHJvbCBQYW5lbCIKCUlEU19DUEFORUxfTkFNRSAgICAgICAgICAgICAiTmFtZSIKCUlEU19DUEFORUxfREVTQ1JJUFRJT04gICAgICAiRGVzY3JpcHRpb24iCn0KClNUUklOR1RBQkxFCnsKSURTX0xJQ0VOU0VfQ0FQVElPTiwgICAgICAgICAgICAiTGljZW5jaWEgZGUgV2luZSIKSURTX0xJQ0VOU0UsCiJXaW5lIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBcCm1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgXApMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgXAp2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cblxuXApXaW5lIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIFwKYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgXApNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBcCkxlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG5cblwKWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBcCkxpY2Vuc2UgYWxvbmcgd2l0aCBXaW5lOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIFwKRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4iCn0K