LyoKICogQ29weXJpZ2h0IDE5OTggSnVlcmdlbiBTY2htaWVkCiAqIENvcHlyaWdodCAyMDAzIEZpbGlwIE5hdmFyYQogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKICovCgpMQU5HVUFHRSBMQU5HX0NaRUNILCBTVUJMQU5HX0RFRkFVTFQKCk1FTlVfMDAxIE1FTlUgRElTQ0FSREFCTEUKQkVHSU4KCU1FTlVJVEVNICImVmVkbGUgc2ViZSIsCQlGQ0lETV9TSFZJRVdfQklHSUNPTgoJTUVOVUlURU0gIiZJa29ueSIsCQlGQ0lETV9TSFZJRVdfU01BTExJQ09OCglNRU5VSVRFTSAiJlNlem5hbSIsCQlGQ0lETV9TSFZJRVdfTElTVFZJRVcKCU1FTlVJVEVNICImUG9kcm9ibm9zdGkiLAlGQ0lETV9TSFZJRVdfUkVQT1JUVklFVwpFTkQKCi8qCiBzaGVsbHZpZXcgYmFja2dyb3VuZCBtZW51CiovCk1FTlVfMDAyIE1FTlUgRElTQ0FSREFCTEUKQkVHSU4KCVBPUFVQICIiCglCRUdJTgoJICBQT1BVUCAiWiZvYnJheml0IgoJICBCRUdJTgoJICAgIE1FTlVJVEVNICImVmVkbGUgc2ViZSIsCUZDSURNX1NIVklFV19CSUdJQ09OCgkgICAgTUVOVUlURU0gIiZJa29ueSIsCQlGQ0lETV9TSFZJRVdfU01BTExJQ09OCgkgICAgTUVOVUlURU0gIiZTZXpuYW0iLAkJRkNJRE1fU0hWSUVXX0xJU1RWSUVXCgkgICAgTUVOVUlURU0gIiZQb2Ryb2Jub3N0aSIsCUZDSURNX1NIVklFV19SRVBPUlRWSUVXCgkgIEVORAoJICBNRU5VSVRFTSBTRVBBUkFUT1IKCSAgUE9QVVAgIlNl+GFkaXQgJmlrb255IgoJICBCRUdJTgoJICAgIE1FTlVJVEVNICJQb2RsZSAmTuF6dnUiLAkweDMwCS8qIGNvbHVtbiAwICovCgkgICAgTUVOVUlURU0gIlBvZGxlICZUeXB1IiwJMHgzMgkvKiBjb2x1bW4gMiAqLwoJICAgIE1FTlVJVEVNICJQb2RsZSAmVmVsaWtvc3RpIiwJMHgzMQkvKiAuLi4gKi8KCSAgICBNRU5VSVRFTSAiUG9kbGUgJkRhdGEiLAkweDMzCgkgICAgTUVOVUlURU0gU0VQQVJBVE9SCgkgICAgTUVOVUlURU0gIiZSb3ZuYXQgYXV0b21hdGlja3kiLAlGQ0lETV9TSFZJRVdfQVVUT0FSUkFOR0UKCSAgRU5ECgkgIE1FTlVJVEVNICJaYXJvdm5hdCBpa29ueSIsCUZDSURNX1NIVklFV19TTkFQVE9HUklECgkgIE1FTlVJVEVNIFNFUEFSQVRPUgoJICBNRU5VSVRFTSAiQSZrdHVhbGl6b3ZhdCIsCUZDSURNX1NIVklFV19SRUZSRVNICgkgIE1FTlVJVEVNIFNFUEFSQVRPUgoJICBNRU5VSVRFTSAiViZsb55pdCIsCQlGQ0lETV9TSFZJRVdfSU5TRVJUCgkgIE1FTlVJVEVNICJWbG+eaXQgeuFzdCZ1cGNlIiwJRkNJRE1fU0hWSUVXX0lOU0VSVExJTksKCSAgTUVOVUlURU0gU0VQQVJBVE9SCgkgIFBPUFVQICImTm92/SIKCSAgQkVHSU4KCSAgICBNRU5VSVRFTSAiTm924SAmc2xvnmthIiwJRkNJRE1fU0hWSUVXX05FV0ZPTERFUgoJICAgIE1FTlVJVEVNICJOb3b9ICZ64XN0dXBjZSIsCUZDSURNX1NIVklFV19ORVdMSU5LCgkgICAgTUVOVUlURU0gU0VQQVJBVE9SCgkgIEVORAoJICBNRU5VSVRFTSBTRVBBUkFUT1IKCSAgTUVOVUlURU0gIiZWbGFzdG5vc3RpIiwJRkNJRE1fU0hWSUVXX1BST1BFUlRJRVMKCUVORApFTkQKCi8qCiBzaGVsbHZpZXcgaXRlbSBtZW51CiovCk1FTlVfU0hWX0ZJTEUgTUVOVSBESVNDQVJEQUJMRQpCRUdJTgoJUE9QVVAgIiIKCUJFR0lOCgkgIE1FTlVJVEVNICJQJnJvemtvdW1hdCIsCQlGQ0lETV9TSFZJRVdfRVhQTE9SRQoJICBNRU5VSVRFTSAiTyZ0ZXb47XQiLAkJCUZDSURNX1NIVklFV19PUEVOCgkgIE1FTlVJVEVNIFNFUEFSQVRPUgoJICBNRU5VSVRFTSAiVnlqJm1vdXQiLAkJCUZDSURNX1NIVklFV19DVVQKCSAgTUVOVUlURU0gIiZLb3Dtcm92YXQiLAkJRkNJRE1fU0hWSUVXX0NPUFkKCSAgTUVOVUlURU0gU0VQQVJBVE9SCgkgIE1FTlVJVEVNICJWeXR2b/hpdCB64XN0dXBjJmUiLAlGQ0lETV9TSFZJRVdfQ1JFQVRFTElOSwoJICBNRU5VSVRFTSAiTyZkc3RyYW5pdCIsCQlGQ0lETV9TSFZJRVdfREVMRVRFCgkgIE1FTlVJVEVNICImUPhlam1lbm92YXQiLAkJRkNJRE1fU0hWSUVXX1JFTkFNRQoJICBNRU5VSVRFTSBTRVBBUkFUT1IKCSAgTUVOVUlURU0gIiZWbGFzdG5vc3RpIiwJCUZDSURNX1NIVklFV19QUk9QRVJUSUVTCglFTkQKRU5ECgpTSEJSU0ZPUkZPTERFUl9NU0dCT1ggRElBTE9HIExPQURPTkNBTEwgTU9WRUFCTEUgRElTQ0FSREFCTEUgMTUsIDQwLCAxODgsIDE5MgpTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUgfCBEU19NT0RBTEZSQU1FIHwgRFNfU0VURk9OVCB8IERTXzNETE9PSwpDQVBUSU9OICJQcm9jaOF6ZXQuLi4iCkZPTlQgOCwgIkhlbHYiCnsKIERFRlBVU0hCVVRUT04gIk9LIiwgMSwgODAsIDE3NiwgNTAsIDEyLCBCU19ERUZQVVNIQlVUVE9OIHwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCiBQVVNIQlVUVE9OICJTdG9ybm8iLCAyLCAxMzQsIDE3NiwgNTAsIDEyLCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKIExURVhUICIiLCBJRERfVElUTEUsIDQsIDQsIDE4MCwgMTIKIExURVhUICIiLCBJRERfU1RBVFVTLCA0LCAyNSwgMTgwLCAxMgogQ09OVFJPTCAiIiwgSUREX1RSRUVWSUVXLCAiU3lzVHJlZVZpZXczMiIsCiAJVFZTX0hBU0JVVFRPTlMgfCBUVlNfSEFTTElORVMgfCBUVlNfTElORVNBVFJPT1QgfAoJV1NfQk9SREVSIHwgV1NfVEFCU1RPUCwKCTQsIDQwLCAxODAsIDEyMAp9CgpTSEVMTF9BQk9VVF9NU0dCT1ggRElBTE9HIExPQURPTkNBTEwgTU9WRUFCTEUgRElTQ0FSREFCTEUgMTUsIDQwLCAyMTAsIDE1MgpTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19WSVNJQkxFIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKQ0FQVElPTiAiTyBhcGxpa2FjaSAlcyIKRk9OVCAxMCwgIkhlbHYiCnsKIERFRlBVU0hCVVRUT04gIk9LIiwgSURPSywgMTUzLCAxMzAsIDUwLCAxMgogTElTVEJPWCA5OSwgOCwgNjUsIDEzNywgODIsIExCU19OT1RJRlkgfCBXU19WU0NST0xMIHwgV1NfQk9SREVSCiBJQ09OICIiLCAxMDg4LCAxODksIDEwLCAxNCwgMTYKIExURVhUICIiLCAxMDAsIDgsIDEwLCAxMzcsIDMzCiBMVEVYVCAiV2luZSBqZSBkoWxlbToiLCA5OCwgOCwgNTUsIDEzNywgMTAKfQoKU0hFTExfUlVOX0RMRyBESUFMT0cgTE9BRE9OQ0FMTCBNT1ZFQUJMRSBESVNDQVJEQUJMRSAwLCAwLCAyMjcsIDk1ClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX1ZJU0lCTEUgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpDQVBUSU9OICIiCkZPTlQgOCwgIkhlbHYiCnsKIElDT04gIiIsIDEyMjk3LCA3LCAxMSwgMTgsIDIwLCBXU19WSVNJQkxFCiBMVEVYVCAiWmFkZWp0ZSBu4XpldiBwcm9ncmFtdSwgc2xvnmt5LCBkb2t1bWVudHUsIG5lYm8gemRyb2plIHYgc+10aSBJbnRlcm5ldCBhIFdpbmUgamVqIHBybyB24XMgb3RldvhlLiIsIDEyMjg5LCAzNiwgMTEsIDE4MiwgMTgKIExURVhUICImT3RldvjtdDoiLCAxMjMwNSwgNywgMzksIDI0LCAxMAogQ09OVFJPTCAiIiwgMTIyOTgsICJDT01CT0JPWCIsIFdTX0dST1VQIHwgV1NfVlNDUk9MTCB8IFdTX1ZJU0lCTEUgfCBDQlNfRElTQUJMRU5PU0NST0xMIHwgQ0JTX0FVVE9IU0NST0xMIHwgQ0JTX0RST1BET1dOLCAzNiwgMzcsIDE4MywgMTAwCiBERUZQVVNIQlVUVE9OICJPSyIsIElET0ssIDYyLCA2MywgNTAsIDE0LCBXU19UQUJTVE9QCiBQVVNIQlVUVE9OICJTdG9ybm8iLCBJRENBTkNFTCwgMTE2LCA2MywgNTAsIDE0LCBXU19UQUJTVE9QCiBQVVNIQlVUVE9OICImUHJvY2jhemV0Li4uIiwgMTIyODgsIDE3MCwgNjMsIDUwLCAxNCwgV1NfVEFCU1RPUAp9CgovKgoJc3BlY2lhbCBmb2xkZXJzCiovClNUUklOR1RBQkxFIERJU0NBUkRBQkxFCnsKCUlEU19ERVNLVE9QCQkiUGxvY2hhIgoJSURTX01ZQ09NUFVURVIJCSJUZW50byBwb+jtdGHoIgp9CgovKgoJY29udGV4dCBtZW51cwoqLwpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRQp7CglJRFNfVklFV19MQVJHRQkJIiZWZWRsZSBzZWJlIgoJSURTX1ZJRVdfU01BTEwJCSImSWtvbnkiCglJRFNfVklFV19MSVNUCQkiJlNlem5hbSIKCUlEU19WSUVXX0RFVEFJTFMJIiZQb2Ryb2Jub3N0aSIKCUlEU19TRUxFQ1QJCSJWeWJyYXQiCglJRFNfT1BFTgkJIk90ZXb47XQiCn0KClNUUklOR1RBQkxFIERJU0NBUkRBQkxFCnsKCUlEU19DUkVBVEVGT0xERVJfREVOSUVEICJOZWx6ZSB2eXR2b/hpdCBub3ZvdSBzbG+ea3UgcHJvdG+eZSBw+GlzdHVwIGJ5bCBvZGVw+GVuLiIKCUlEU19DUkVBVEVGT0xERVJfQ0FQVElPTiAiQ2h5YmEgcPhpIHBva3VzdSB2eXR2b/hpdCBub3b9IGFkcmVz4fgiCglJRFNfREVMRVRFSVRFTV9DQVBUSU9OICJQb3R2cmRpdCBvZHN0cmFu7G7tIHNvdWJvcnUiCglJRFNfREVMRVRFRk9MREVSX0NBUFRJT04gIlBvdHZyZGl0IG9kc3RyYW7sbu0gYWRyZXPh+GUiCglJRFNfT1ZFUldSSVRFRklMRV9DQVBUSU9OICJQb3R2cmRpdCBw+GVwc+Fu7SBzb3Vib3J1IgoJSURTX0RFTEVURUlURU1fVEVYVCAiT3ByYXZkdSBjaGNldGUgb2RzdHJhbml0ICclMSc/IgoJSURTX0RFTEVURU1VTFRJUExFX1RFWFQgIk9wcmF2ZHUgY2hjZXRlIG9kc3RyYW5pdCB07GNodG8gJTEgcG9sb55laz8iCglJRFNfT1ZFUldSSVRFRklMRV9URVhUICJQ+GVqZXRlIHNpIHD4ZXBzYXQgc291Ym9yICclMSc/Igp9CgovKgljb2x1bW5zIGluIHRoZSBzaGVsbHZpZXcJKi8KU1RSSU5HVEFCTEUKQkVHSU4KCUlEU19TSFZfQ09MVU1OMQkJIk7hemV2IgoJSURTX1NIVl9DT0xVTU4yCQkiVmVsaWtvc3QiCglJRFNfU0hWX0NPTFVNTjMJCSJUeXAiCglJRFNfU0hWX0NPTFVNTjQJCSJabexu7G5vIgoJSURTX1NIVl9DT0xVTU41CQkiQXRyaWJ1dHkiCglJRFNfU0hWX0NPTFVNTjYJCSJWZWxpa29zdCIKCUlEU19TSFZfQ09MVU1ONwkJIlZvbG7pIG3tc3RvIgoJSURTX1NIVl9DT0xVTU44CQkiSm3pbm8iCglJRFNfU0hWX0NPTFVNTjkJCSJLb21lbnTh+CIKRU5ECg==