LyoKICogUmVnZWRpdCByZXNvdXJjZXMKICoKICogQ29weXJpZ2h0IDIwMDIgUm9iZXJ0IERpY2tlbnNvbgogKiBDb3B5cmlnaHQgMjAwMyBWaW5jZW50IELpcm9uCiAqIENvcHlyaWdodCAyMDA1LTIwMDYgSm9uYXRoYW4gRXJuc3QKICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCiAqLwoKTEFOR1VBR0UgTEFOR19GUkVOQ0gsIFNVQkxBTkdfTkVVVFJBTAoKLyoKICogTWVudQogKi8KCklEQ19SRUdFRElUIE1FTlUgRElTQ0FSREFCTEUKQkVHSU4KICAgIFBPUFVQICImRmljaGllciIKICAgIEJFR0lOCiAgICAgICAgTUVOVUlURU0gIiZRdWl0dGVyIiwgICAgICAgICAgICAgICAgICAgICAgIElEX1JFR0lTVFJZX0VYSVQKICAgIEVORAogICAgUE9QVVAgIkFpZCZlIgogICAgQkVHSU4KICAgICAgICBNRU5VSVRFTSAiwCAmcHJvcG9zIiwgICAgICAgICAgICAgICAgICBJRF9IRUxQX0FCT1VUCiAgICBFTkQKRU5ECgpJRFJfUkVHRURJVF9NRU5VIE1FTlUgRElTQ0FSREFCTEUKQkVHSU4KICAgIFBPUFVQICImUmVnaXN0cmVzIgogICAgQkVHSU4KICAgICAgICBNRU5VSVRFTSAiJkltcG9ydGVyIHVuIGZpY2hpZXIgZGUgcmVnaXN0cmVzLi4uIiwgICAgSURfUkVHSVNUUllfSU1QT1JUUkVHSVNUUllGSUxFCiAgICAgICAgTUVOVUlURU0gIiZFeHBvcnRlciB1biBmaWNoaWVyIGRlIHJlZ2lzdHJlcy4uLiIsICAgIElEX1JFR0lTVFJZX0VYUE9SVFJFR0lTVFJZRklMRQogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICImQ29ubmVjdGVyIOAgZGVzIHJlZ2lzdHJlcyB2aWEgbGUgculzZWF1Li4uIiwgSURfUkVHSVNUUllfQ09OTkVDVE5FVFdPUktSRUdJU1RSWSwgR1JBWUVECiAgICAgICAgTUVOVUlURU0gIiZE6WNvbm5lY3RlciBkZSByZWdpc3RyZXMgculzZWF1Li4uIiwgSURfUkVHSVNUUllfRElTQ09OTkVDVE5FVFdPUktSRUdJU1RSWSwgR1JBWUVECiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIkltJnByaW1lclx0Q3RybCtQIiwgICAgICAgICAgICAgIElEX1JFR0lTVFJZX1BSSU5ULCBHUkFZRUQKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiJlF1aXR0ZXIiLCAgICAgICAgICAgICAgICAgICAgICAgSURfUkVHSVNUUllfRVhJVAogICAgRU5ECiAgICBQT1BVUCAiySZkaXRpb24iCiAgICBCRUdJTgogICAgICAgIE1FTlVJVEVNICImTW9kaWZpZXIiLCAgICAgICAgICAgICAgICAgICAgIElEX0VESVRfTU9ESUZZCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgUE9QVVAgIiZOb3V2ZWxsZSIKICAgICAgICBCRUdJTgogICAgICAgICAgICBNRU5VSVRFTSAiJkNs6SIsICAgICAgICAgICAgICAgICAgICAgICAgSURfRURJVF9ORVdfS0VZCiAgICAgICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgICAgICBNRU5VSVRFTSAiVmFsZXVyIGMmaGHubmUiLCAgICAgICAgICAgICAgIElEX0VESVRfTkVXX1NUUklOR1ZBTFVFCiAgICAgICAgICAgIE1FTlVJVEVNICJWYWxldXIgJmJpbmFpcmUiLCAgICAgICAgICAgICAgIElEX0VESVRfTkVXX0JJTkFSWVZBTFVFCiAgICAgICAgICAgIE1FTlVJVEVNICJWYWxldXIgJm1vdCBkb3VibGUiLCAgICAgICAgICAgICAgICBJRF9FRElUX05FV19EV09SRFZBTFVFCiAgICAgICAgRU5ECiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIiZTdXBwcmltZXJcdFN1cHByIiwgICAgICAgICAgICAgICAgSURfRURJVF9ERUxFVEUKICAgICAgICBNRU5VSVRFTSAiUmVuJm9tbWVyXHRGMiIsICAgICAgICAgICAgICAgICAgSURfRURJVF9SRU5BTUUKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiJkNvcGllciBsZSBub20gZGUgbGEgY2zpIiwgICAgICAgICAgICAgIElEX0VESVRfQ09QWUtFWU5BTUUKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiJlJlY2hlcmNoZXIuLi5cdEN0cmwrRiIsICAgICAgICAgICAgICBJRF9FRElUX0ZJTkQsIEdSQVlFRAogICAgICAgIE1FTlVJVEVNICJSZWNoZXJjaGVyIGxlIHMmdWl2YW50XHRGMyIsICAgICAgICAgIElEX0VESVRfRklORE5FWFQsIEdSQVlFRAogICAgRU5ECiAgICBQT1BVUCAiJkFmZmljaGFnZSIKICAgIEJFR0lOCiAgICAgICAgTUVOVUlURU0gIiZCYXJyZSBkJ+l0YXQiLCAgICAgICAgICAgICAgICAgSURfVklFV19TVEFUVVNCQVIKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiJlPpcGFyYXRldXIiLCAgICAgICAgICAgICAgICAgICAgICBJRF9WSUVXX1NQTElUCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIiZSYWZyYe5jaGlyXHRGNSIsICAgICAgICAgICAgICAgIElEX1ZJRVdfUkVGUkVTSAogICAgRU5ECiAgICBQT1BVUCAiJlNpZ25ldHMiCiAgICBCRUdJTgogICAgICAgIE1FTlVJVEVNICImQWpvdXRlciBhdXggc2lnbmV0cyIsICAgICAgICAgIElEX0ZBVk9SSVRFU19BRERUT0ZBVk9SSVRFUwogICAgICAgIE1FTlVJVEVNICImU3VwcHJpbWVyIGRlcyBzaWduZXRzIiwgICAgICAgIElEX0ZBVk9SSVRFU19SRU1PVkVGQVZPUklURQogICAgRU5ECiAgICBQT1BVUCAiQWlkJmUiCiAgICBCRUdJTgogICAgICAgIE1FTlVJVEVNICImU29tbWFpcmVcdEYxIiwgICAgICAgICAgICAgICAgSURfSEVMUF9IRUxQVE9QSUNTCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgIE1FTlVJVEVNICImwCBwcm9wb3MgZGUgbCfpZGl0ZXVyIGRlIHJlZ2lzdHJlcyIsICAgICAgSURfSEVMUF9BQk9VVAogICAgRU5ECkVORAoKSURSX1BPUFVQX01FTlVTIE1FTlUgRElTQ0FSREFCTEUKQkVHSU4KICBQT1BVUCAiIgogIEJFR0lOCglNRU5VSVRFTSAiJk1vZGlmaWVyIiwgICAgICAgICAgICAgICAgICAgICBJRF9FRElUX01PRElGWQoJTUVOVUlURU0gIk1vZGlmaWVyIGRvbm7pZXMgYmluYWlyZXMiLCAgICAgICAgICBJRF9FRElUX01PRElGWV9CSU4KCU1FTlVJVEVNIFNFUEFSQVRPUgoJTUVOVUlURU0gIiZTdXBwcmltZXJcdERlbCIsICAgICAgICAgICAgICAgIElEX0VESVRfREVMRVRFCglNRU5VSVRFTSAiUmVuJm9tbWVyIiwgICAgICAgICAgICAgICAgICAgICBJRF9FRElUX1JFTkFNRQogIEVORAogIFBPUFVQICIiCiAgQkVHSU4KICAgICAgICBQT1BVUCAiJk5vdXZlbGxlIgogICAgICAgIEJFR0lOCiAgICAgICAgICAgIE1FTlVJVEVNICImQ2zpIiwgICAgICAgICAgICAgICAgICAgICAgICBJRF9FRElUX05FV19LRVkKICAgICAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgICAgIE1FTlVJVEVNICJWYWxldXIgYyZoYe5uZSIsICAgICAgICAgICAgICAgSURfRURJVF9ORVdfU1RSSU5HVkFMVUUKICAgICAgICAgICAgTUVOVUlURU0gIlZhbGV1ciAmYmluYWlyZSIsICAgICAgICAgICAgICAgSURfRURJVF9ORVdfQklOQVJZVkFMVUUKICAgICAgICAgICAgTUVOVUlURU0gIlZhbGV1ciAmbW90IGRvdWJsZSIsICAgICAgICAgICAgICAgIElEX0VESVRfTkVXX0RXT1JEVkFMVUUKICAgICAgICBFTkQKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiJlN1cHByaW1lclx0RGVsIiwgICAgICAgICAgICAgICAgSURfRURJVF9ERUxFVEUKICAgICAgICBNRU5VSVRFTSAiUmVuJm9tbWVyXHRGMiIsICAgICAgICAgICAgICAgICAgSURfRURJVF9SRU5BTUUKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiJkNvcGllciBsZSBub20gZGUgbGEgY2zpIiwgICAgICAgICAgICAgIElEX0VESVRfQ09QWUtFWU5BTUUKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiJlJlY2hlcmNoZXJcdEN0cmwrRiIsICAgICAgICAgICAgICAgSURfRURJVF9GSU5ELCBHUkFZRUQKICBFTkQKRU5ECgoKLyoKICogRGlhbG9nCiAqLwoKSUREX0FCT1VUQk9YIERJQUxPRyBESVNDQVJEQUJMRSAgMjIsIDE3LCAyMzAsIDc1ClNUWUxFIERTX01PREFMRlJBTUUgfCBEU19OT0lETEVNU0cgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpDQVBUSU9OICLAIHByb3BvcyIKRk9OVCA4LCAiTVMgU2hlbGwgRGxnIgpCRUdJTgogICAgSUNPTiAgICAgICAgICAgIElESV9SRUdFRElULElESV9SRUdFRElULDE0LDksMTYsMTYKICAgIExURVhUICAgICAgICAgICAiUmVnZWRpdCBSZWFjdE9TIFZlcnNpb24gMS4wIixJRENfU1RBVElDLDQ5LDEwLDExOSw4LAogICAgICAgICAgICAgICAgICAgIFNTX05PUFJFRklYCiAgICBMVEVYVCAgICAgICAgICAgIkNvcHlyaWdodCAoQykgMjAwMiBwYXIgbCfpcXVpcGUgZGUgUmVhY3RPUyIsSURDX1NUQVRJQyw0OSwyMCwxMTksOAogICAgREVGUFVTSEJVVFRPTiAgICJPSyIsSURPSywxOTUsNiwzMCwxMSxXU19HUk9VUApFTkQKCklERF9FWFBPUlRfVEVNUExBVEUgRElBTE9HIERJU0NBUkRBQkxFICA1MCwgNTAsIDI3OCwgNTQKU1RZTEUgRFNfM0RMT09LIHwgRFNfQ09OVFJPTCB8IFdTX0NISUxEIHwgV1NfVklTSUJMRSB8IFdTX0NMSVBTSUJMSU5HUyB8CiAgICBXU19CT1JERVIKRk9OVCA4LCAiTVMgU2hlbGwgRGxnIgpCRUdJTgogICAgR1JPVVBCT1ggIiZFeHBvcnRlciBsZSByZWdpc3RyZSIsIElEQ19FWFBPUlRfQkFTRSwgNiwgNiwgMjY2LCA0MiwgV1NfR1JPVVAKICAgIEFVVE9SQURJT0JVVFRPTiAiJlRvdXQiLCBJRENfRVhQT1JUX0FMTCwgMTIsIDE1LCAyNDQsIDEyCiAgICBBVVRPUkFESU9CVVRUT04gIiZT6WxlY3Rpb25uZXIgdW5lIGJyYW5jaGWgOiIsIElEQ19FWFBPUlRfU0VMRUNURUQsIDEyLCAzMCwgNzAsIDEyCiAgICBFRElUVEVYVCBJRENfRVhQT1JUX1BBVEgsIDgyLCAzMCwgMTg0LCAxMgpFTkQKCklERF9GSU5EIERJQUxPRyBESVNDQVJEQUJMRSAgMjIsIDE3LCAyMTAsIDg1ClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpDQVBUSU9OICJSZWNoZXJjaGUiCkZPTlQgOCwgIk1TIFNoZWxsIERsZyIKQkVHSU4KICAgIExURVhUICAgICAgICAgICAiUmVjaGVyY2hlcqA6IixJRENfU1RBVElDLDUsNywxMTksOAogICAgRURJVFRFWFQgICAgICAgIElEQ19WQUxVRV9OQU1FLDQwLDUsMTI1LDEyLCBXU19CT1JERVIgfCBXU19UQUJTVE9QIHwgRVNfQVVUT0hTQ1JPTEwKICAgIExURVhUICAgICAgICAgICAiUmVnYXJkZXIgZGFuc6A6IixJRENfU1RBVElDLDUsIDIyLCAxMTksIDgKICAgIENIRUNLQk9YICAgICAgICAiQ2zpcyIsIElEQ19GSU5EX0tFWVMsIDUsIDM0LCA5MCwgMTAsIFdTX1RBQlNUT1AgfCBXU19HUk9VUCB8IEJTX0FVVE9DSEVDS0JPWAogICAgQ0hFQ0tCT1ggICAgICAgICJWYWxldXJzIiwgSURDX0ZJTkRfVkFMVUVTLCA1LCA0NiwgOTAsIDEwLCBXU19UQUJTVE9QIHwgQlNfQVVUT0NIRUNLQk9YCiAgICBDSEVDS0JPWCAgICAgICAgIkRvbm7pZXMiLCBJRENfRklORF9DT05URU5ULCA1LCA1OCwgOTAsIDEwLCBXU19UQUJTVE9QIHwgQlNfQVVUT0NIRUNLQk9YCiAgICBDSEVDS0JPWCAgICAgICAgIk1vdCBlbnRpZXIgc2V1bGVtZW50IiwgSURDX0ZJTkRfV0hPTEUsIDUsIDcwLCA5MCwgMTAsIFdTX1RBQlNUT1AgfCBCU19BVVRPQ0hFQ0tCT1gKICAgIERFRlBVU0hCVVRUT04gICAiU3VpdmFudCIsSURPSywxNzUsNSwzMCwxMSxXU19HUk9VUAogICAgUFVTSEJVVFRPTiAgICAgICJGZXJtZXIiLElEQ0FOQ0VMLDE3NSwyMiwzMCwxMSwgV1NfR1JPVVAKRU5ECgpJRERfQURERkFWT1JJVEUgRElBTE9HIERJU0NBUkRBQkxFICAyMiwgMTcsIDIxMCwgNTUKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkNBUFRJT04gIkFqb3V0ZXIgYXV4IHNpZ25ldHMiCkZPTlQgOCwgIk1TIFNoZWxsIERsZyIKQkVHSU4KICAgIExURVhUICAgICAgICAgICAiTm9tIGR1IHNpZ25ldKA6IixJRENfU1RBVElDLDUsNSwxMTksOAogICAgRURJVFRFWFQgICAgICAgIElEQ19WQUxVRV9OQU1FLDUsMTUsMjAwLDEyLCBXU19CT1JERVIgfCBXU19UQUJTVE9QIHwgRVNfQVVUT0hTQ1JPTEwKICAgIERFRlBVU0hCVVRUT04gICAiT0siLElET0ssMTQwLDQwLDMwLDExLFdTX0dST1VQCiAgICBQVVNIQlVUVE9OICAgICAgIkFubnVsZXIiLElEQ0FOQ0VMLDE3NSw0MCwzMCwxMSwgV1NfR1JPVVAKRU5ECgpJRERfREVMRkFWT1JJVEUgRElBTE9HIERJU0NBUkRBQkxFICAyMiwgMTcsIDIxMCwgOTAKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkNBUFRJT04gIlN1cHByaW1lciBsZXMgc2lnbmV0cyIKRk9OVCA4LCAiTVMgU2hlbGwgRGxnIgpCRUdJTgogICAgTFRFWFQgICAgICAgICAgICJT6WxlY3Rpb25uZXogdW4gb3UgcGx1c2lldXJzIHNpZ25ldHOgOiIsSURDX1NUQVRJQyw1LDUsMTE5LDgKICAgIExJU1RCT1ggICAgICAgICBJRENfTkFNRV9MSVNULDUsMTUsMjAwLDUyLCBXU19CT1JERVIgfCBXU19UQUJTVE9QIHwgTEJTX1NPUlQgfCBMQlNfTk9JTlRFR1JBTEhFSUdIVCB8IFdTX1ZTQ1JPTEwKICAgIERFRlBVU0hCVVRUT04gICAiT0siLElET0ssMTQwLDczLDMwLDExLFdTX0dST1VQCiAgICBQVVNIQlVUVE9OICAgICAgIkFubnVsZXIiLElEQ0FOQ0VMLDE3NSw3MywzMCwxMSwgV1NfR1JPVVAKRU5ECgpJRERfRURJVF9TVFJJTkcgRElBTE9HIERJU0NBUkRBQkxFICAyMiwgMTcsIDIxMCwgNzUKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkNBUFRJT04gIk1vZGlmaWNhdGlvbiBkZSBsYSBjJmhh7m5lIgpGT05UIDgsICJNUyBTaGVsbCBEbGciCkJFR0lOCiAgICBMVEVYVCAgICAgICAgICAgIk5vbSBkZSBsYSB2YWxldXKgOiIsSURDX1NUQVRJQyw1LDUsMTE5LDgKICAgIEVESVRURVhUICAgICAgICBJRENfVkFMVUVfTkFNRSw1LDE1LDIwMCwxMiwgV1NfQk9SREVSIHwgV1NfVEFCU1RPUCB8IFdTX0RJU0FCTEVECiAgICBMVEVYVCAgICAgICAgICAgIkRvbm7pZXMgZGUgbGEgdmFsZXVyoDoiLElEQ19TVEFUSUMsNSwzMCwxMTksOAogICAgRURJVFRFWFQgICAgICAgIElEQ19WQUxVRV9EQVRBLDUsNDAsMjAwLDEyLCBXU19CT1JERVIgfCBXU19UQUJTVE9QIHwgRVNfQVVUT0hTQ1JPTEwKICAgIERFRlBVU0hCVVRUT04gICAiT0siLElET0ssMTQwLDYwLDMwLDExLFdTX0dST1VQCiAgICBQVVNIQlVUVE9OICAgICAgIkFubnVsZXIiLElEQ0FOQ0VMLDE3NSw2MCwzMCwxMSxXU19HUk9VUApFTkQKCklERF9FRElUX0RXT1JEIERJQUxPRyBESVNDQVJEQUJMRSAgMjIsIDE3LCAyMTAsIDEwMApTVFlMRSBEU19NT0RBTEZSQU1FIHwgRFNfTk9JRExFTVNHIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKQ0FQVElPTiAiTW9kaWZpY2F0aW9uIGRlIGxhIHZhbGV1ciBEV09SRCIKRk9OVCA4LCAiTVMgU2hlbGwgRGxnIgpCRUdJTgogICAgTFRFWFQgICAgICAgICAgICJOb20gZGUgbGEgdmFsZXVyoDoiLElEQ19TVEFUSUMsNSw1LDExOSw4CiAgICBFRElUVEVYVCAgICAgICAgSURDX1ZBTFVFX05BTUUsNSwxNSwyMDAsMTIsIFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AgfCBXU19ESVNBQkxFRAogICAgTFRFWFQgICAgICAgICAgICJEb25u6WVzIGRlIHZhbGV1cqA6IixJRENfU1RBVElDLDUsMzAsOTAsOAogICAgRURJVFRFWFQgICAgICAgIElEQ19WQUxVRV9EQVRBLDUsNDAsOTAsMTIsIFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AKICAgIEdST1VQQk9YICAgICAgICAiQmFzZSIsIElEQ19EV09SRF9CQVNFLCAxMjAsIDMwLCA4NSwgMzcsIEJTX0dST1VQQk9YCiAgICBBVVRPUkFESU9CVVRUT04gIkhleGFk6WNpbWFsZSIsIElEQ19EV09SRF9IRVgsIDEzMCwgNDAsIDYwLCAxMCwgV1NfVEFCU1RPUAogICAgQVVUT1JBRElPQlVUVE9OICJE6WNpbWFsZSIsIElEQ19EV09SRF9ERUMsIDEzMCwgNTIsIDYwLCAxMCwgV1NfVEFCU1RPUAogICAgREVGUFVTSEJVVFRPTiAgICJPSyIsSURPSywxNDAsODAsMzAsMTEsV1NfR1JPVVAKICAgIFBVU0hCVVRUT04gICAgICAiQW5udWxlciIsSURDQU5DRUwsMTc1LDgwLDMwLDExLFdTX0dST1VQCkVORAoKSUREX0VESVRfQklOQVJZIERJQUxPRyBESVNDQVJEQUJMRSAgMjIsIDE3LCAyMTAsIDEwMApTVFlMRSBEU19NT0RBTEZSQU1FIHwgRFNfTk9JRExFTVNHIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKQ0FQVElPTiAiTW9kaWZpY2F0aW9uIGRlIGxhIHZhbGV1ciBiaW5haXJlIgpGT05UIDgsICJNUyBTaGVsbCBEbGciCkJFR0lOCiAgICBMVEVYVCAgICAgICAgICAgIk5vbSBkZSBsYSB2YWxldXI6IixJRENfU1RBVElDLDUsNSwxMTksOAogICAgRURJVFRFWFQgICAgICAgIElEQ19WQUxVRV9OQU1FLDUsMTUsMjAwLDEyLCBXU19CT1JERVIgfCBXU19UQUJTVE9QIHwgRVNfQVVUT0hTQ1JPTEx8IFdTX0RJU0FCTEVECiAgICBMVEVYVCAgICAgICAgICAgIkRvbm7pZXMgZGUgbGEgdmFsZXVyOiIsSURDX1NUQVRJQyw1LDMwLDkwLDgKICAgIENPTlRST0wgICAgICAgICAiIixJRENfVkFMVUVfREFUQSwiSGV4RWRpdCIsV1NfVEFCU1RPUCw0LDQwLDE2MCw0MAogICAgREVGUFVTSEJVVFRPTiAgICJPSyIsSURPSywxNDAsODAsMzAsMTEsV1NfR1JPVVAKICAgIFBVU0hCVVRUT04gICAiQW5udWxlciIsSURDQU5DRUwsMTc1LDgwLDMwLDExLFdTX0dST1VQCkVORAoKLyoKICogU3RyaW5nIFRhYmxlCiAqLwoKU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUKQkVHSU4KICAgIElEU19MSVNUX0NPTFVNTl9OQU1FICAgICJOb20iCiAgICBJRFNfTElTVF9DT0xVTU5fVFlQRSAgICAiVHlwZSIKICAgIElEU19MSVNUX0NPTFVNTl9EQVRBICAgICJWYWxldXIiCkVORAoKU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUKQkVHSU4KICAgIElEU19BUFBfVElUTEUgICAgICAgICAgICLJZGl0ZXVyIGRlIHJlZ2lzdHJlcyIKICAgIElEQ19SRUdFRElUICAgICAgICAgICAgICJSRUdFRElUIgogICAgSURDX1JFR0VESVRfRlJBTUUgICAgICAgIlJFR0VESVRfRlJBTUUiCkVORAoKU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUKQkVHSU4KICAgIElEX1JFR0lTVFJZX01FTlUgICAgICAgICJDb250aWVudCBkZXMgY29tbWFuZGVzIHBvdXIgdHJhdmFpbGxlciBzdXIgbGVzIHJlZ2lzdHJlcyBkZSBtYW5p6HJlIGdsb2JhbGUiCiAgICBJRF9FRElUX01FTlUgICAgICAgICAgICAiQ29udGllbnQgZGVzIGNvbW1hbmRlcyBwb3VyIOlkaXRlciBkZXMgdmFsZXVycyBvdSBkZXMgY2zpcyIKICAgIElEX1ZJRVdfTUVOVSAgICAgICAgICAgICJDb250aWVudCBkZXMgY29tbWFuZGVzIHBvdXIgcGVyc29ubmFsaXNlciBsYSBmZW7qdHJlIGRlcyByZWdpc3RyZXMiCiAgICBJRF9GQVZPUklURVNfTUVOVSAgICAgICAiQ29udGllbnQgZGVzIGNvbW1hbmRlcyBwb3VyIGFjY+lkZXIgYXV4IGNs6XMgZnLpcXVlbW1lbnQgdXRpbGlz6WVzIgogICAgSURfSEVMUF9NRU5VICAgICAgICAgICAgIkNvbnRpZW50IGRlcyBjb21tYW5kZXMgcG91ciBhZmZpY2hlciBkZSBsJ2FpZGUgZXQgZGUgbCdpbmZvcm1hdGlvbiDgIHByb3BvcyBkZSBsJ+lkaXRldXIgZGUgcmVnaXN0cmVzIgogICAgSURfRURJVF9ORVdfTUVOVSAgICAgICAgIkNvbnRpZW50IGRlcyBjb21tYW5kZXMgcG91ciBjcullciBkZSBub3V2ZWxsZXMgY2zpcyBvdSB2YWxldXJzIgpFTkQKClNUUklOR1RBQkxFIERJU0NBUkRBQkxFCkJFR0lOCiAgICBJRF9FRElUX01PRElGWSAgICAgICAgICAiTW9kaWZpZSBsZXMgZG9ubullcyBkJ3VuZSB2YWxldXIiCiAgICBJRF9FRElUX05FV19LRVkgICAgICAgICAiQWpvdXRlIHVuZSBub3V2ZWxsZSBjbOkiCiAgICBJRF9FRElUX05FV19TVFJJTkdWQUxVRSAiQWpvdXRlIHVuZSBub3V2ZWxsZSB2YWxldXIgY2hh7m5lIgogICAgSURfRURJVF9ORVdfQklOQVJZVkFMVUUgIkFqb3V0ZSB1bmUgbm91dmVsbGUgdmFsZXVyIGJpbmFpcmUiCiAgICBJRF9FRElUX05FV19EV09SRFZBTFVFICAiQWpvdXRlIHVuZSBub3V2ZWxsZSB2YWxldXIgbW90IGRvdWJsZSIKICAgIElEX1JFR0lTVFJZX0lNUE9SVFJFR0lTVFJZRklMRSAiSW1wb3J0ZSB1biBmaWNoaWVyIHRleHRlIGRhbnMgbGVzIHJlZ2lzdHJlcyIKICAgIElEX1JFR0lTVFJZX0VYUE9SVFJFR0lTVFJZRklMRQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIkV4cG9ydGUgdG91dCBvdSB1bmUgcGFydGllIGRlcyByZWdpc3RyZXMgZGFucyB1biBmaWNoaWVyIHRleHRlIgogICAgSURfUkVHSVNUUllfQ09OTkVDVE5FVFdPUktSRUdJU1RSWQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNvbm5lY3RlIGF1eCByZWdpc3RyZXMgZCd1biBvcmRpbmF0ZXVyIGRpc3RhbnQiCiAgICBJRF9SRUdJU1RSWV9ESVNDT05ORUNUTkVUV09SS1JFR0lTVFJZCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiROljb25uZWN0ZSBkZXMgcmVnaXN0cmVzIGQndW4gb3JkaW5hdGV1ciBkaXN0YW50IgogICAgSURfUkVHSVNUUllfUFJJTlQgICAgICAgIkltcHJpbWUgdG91dCBvdSB1bmUgcGFydGllIGRlcyByZWdpc3RyZXMiCi8qICAgIElEX0hFTFBfSEVMUFRPUElDUyAgICAgICJPdXZyZSBsJ2FpZGUgZGUgbCfpZGl0ZXVyIGRlIHJlZ2lzdHJlcyIgKi8KICAgIElEX0hFTFBfQUJPVVQgICAgICAgICAgICJBZmZpY2hlIGRlIGwnaW5mb3JtYXRpb24gc3VyIGxlIHByb2dyYW1tZSwgbGUgbnVt6XJvIGRlIHZlcnNpb24gZXQgbGUgY29weXJpZ2h0IgpFTkQKClNUUklOR1RBQkxFIERJU0NBUkRBQkxFCkJFR0lOCiAgICBJRF9SRUdJU1RSWV9FWElUICAgICAgICAiUXVpdHRlIGwn6WRpdGV1ciBkZSByZWdpc3RyZXMiCiAgICBJRF9GQVZPUklURVNfQUREVE9GQVZPUklURVMgIkFqb3V0ZSBkZXMgY2zpcyDgIGxhIGxpc3RlIGRlcyBzaWduZXRzIgogICAgSURfRkFWT1JJVEVTX1JFTU9WRUZBVk9SSVRFICJSZXRpcmUgZGVzIGNs6XMgZGUgbGEgbGlzdGUgZGVzIHNpZ25ldHMiCiAgICBJRF9WSUVXX1NUQVRVU0JBUiAgICAgICAiTW9udHJlIG91IGNhY2hlIGxhIGJhcnJlIGQn6XRhdCIKICAgIElEX1ZJRVdfU1BMSVQgICAgICAgICAgICJDaGFuZ2UgbGEgcG9zaXRpb24gZGUgbGEgc+lwYXJhdGlvbiBlbnRyZSBsZXMgZGV1eCBwYW5uZWF1eCIKICAgIElEX1ZJRVdfUkVGUkVTSCAgICAgICAgICJSYWZyYe5jaGl0IGxhIGZlbup0cmUiCiAgICBJRF9FRElUX0RFTEVURSAgICAgICAgICAiU3VwcHJpbWUgbGEgc+lsZWN0aW9uIgogICAgSURfRURJVF9SRU5BTUUgICAgICAgICAgIlJlbm9tbWUgbGEgc+lsZWN0aW9uIgogICAgSURfRURJVF9DT1BZS0VZTkFNRSAgICAgIkNvcGllIGxlIG5vbSBkZSBsYSBjbOkgc+lsZWN0aW9ubullIHZlcnMgbGUgcHJlc3NlLXBhcGllciIKICAgIElEX0VESVRfRklORCAgICAgICAgICAgICJSZWNoZXJjaGUgZHUgdGV4dGUgZGFucyB1bmUgY2zpLCB1bmUgdmFsZXVyIG91IGRlcyBkb25u6WVzIgogICAgSURfRURJVF9GSU5ETkVYVCAgICAgICAgIlJlY2hlcmNoZSBsJ29jY3VyZW5jZSBzdWl2YW50ZSBkdSB0ZXh0ZSBkZSBsYSBkZXJuaehyZSByZWNoZXJjaGUiCkVORAoKU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUKQkVHSU4KICAgIElEU19FUlJPUgkJICAgICJFcnJldXIiCiAgICBJRFNfQkFEX0tFWQkJICAgICJOZSBwZXV0IHBhcyBxdWVzdGlvbm5lciBsYSBjbOkgJyVzJyIKICAgIElEU19CQURfVkFMVUUgICAgICAgICAgICJOZSBwZXV0IHBhcyBxdWVzdGlvbm5lciBsYSB2YWxldXIgJyVzJyIKICAgIElEU19VTlNVUFBPUlRFRF9UWVBFICAgICJOZSBwZXV0IHBhcyDpZGl0ZXIgZGVzIGNs6XMgZGUgY2UgdHlwZSAoJWxkKSIKICAgIElEU19UT09fQklHX1ZBTFVFICAgICAgICJMYSB2YWxldXIgZXN0IHRyb3AgZ3JhbmRlICglbGQpIgogICAgSURTX0RFTEVURV9CT1hfVElUTEUgICAgIkNvbmZpcm1leiBsJ2VmZmFjZW1lbnQgZGUgdmFsZXVyIgogICAgSURTX0RFTEVURV9CT1hfVEVYVCAgICAgIsp0ZXMgdm91cyBz+3Igdm91cyB2b3VsZXogc3VwcHJpbWVyIGxhIHZhbGV1ciAnJXMnPyIKICAgIElEU19ORVdLRVkgICAgICAgICAgICAgICJOb3V2ZWxsZSBDbOkgIyVkIgogICAgSURTX05FV1ZBTFVFICAgICAgICAgICAgIk5vdXZlbGxlIFZhbGV1ciAjJWQiCiAgICBJRFNfTk9URk9VTkQgICAgICAgICAgICAiT2NjdXJlbmNlIGRlICclcycgbm9uIHRyb3V26WUiCkVORAoKU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUKQkVHSU4KICAgIElEU19GSUxFRElBTE9HX0lNUE9SVF9USVRMRSAgICJJbXBvcnRlciB1biBmaWNoaWVyIGRlIHJlZ2lzdHJlIgogICAgSURTX0ZJTEVESUFMT0dfRVhQT1JUX1RJVExFICAgIkV4cG9ydGVyIHVuIGZpY2hpZXIgZGUgcmVnaXN0cmUiCiAgICBJRFNfRklMRURJQUxPR19GSUxURVIgICAgICAgICAiRmljaGllcnMgZGUgcmVnaXN0cmVzXDAqLnJlZ1wwRmljaGllcnMgZGUgcmVnaXN0cmVzIFdpbjl4L05UNCAoUkVHRURJVDQpXDAqLnJlZ1wwVG91cyBsZXMgZmljaGllcnMgKCouKilcMCouKlwwXDAiCkVORAoKU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUKQkVHSU4KICAgIElEU19SRUdJU1RSWV9ST09UX05BTUUgICAgICAgICAgICJQb3N0ZSBkZSB0cmF2YWlsIgogICAgSURTX1JFR0lTVFJZX0RFRkFVTFRfVkFMVUUgICAgICAgIihwYXIgZOlmYXV0KSIKICAgIElEU19SRUdJU1RSWV9WQUxVRV9OT1RfU0VUICAgICAgICIodmFsZXVyIG5vbiBk6WZpbmllKSIKICAgIElEU19SRUdJU1RSWV9WQUxVRV9DQU5UX0RJU1BMQVkgICIoaW1wb3NzaWJsZSBkJ2FmZmljaGVyIGxhIHZhbGV1cikiCiAgICBJRFNfUkVHSVNUUllfVU5LTk9XTl9UWVBFICAgICAgICAiKCVkIGluY29ubnUpIgpFTkQKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCi8qCiAqIFRFWFRJTkNMVURFCiAqLwoKMSBURVhUSU5DTFVERSBESVNDQVJEQUJMRQpCRUdJTgogICAgInJlc291cmNlLmhcMCIKRU5ECgoKCi8qCiAqIFN0cmluZyBUYWJsZQogKi8KCi8qCiAqU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUKICpCRUdJTgogKiAgICBJRF9IRUxQX0hFTFBUT1BJQ1MgICAgICAiT3V2cmUgbCdhaWRlIGRlIGwn6WRpdGV1ciBkZSByZWdpc3RyZXMuIgogKiAgICBJRF9IRUxQX0FCT1VUICAgICAgICAgICAiQWZmaWNoZSBkZSBsJ2luZm9ybWF0aW9uIHN1ciBsZSBwcm9ncmFtbWUsIGxlIG51belybyBkZSB2ZXJzaW9uIGV0IGxlIGNvcHlyaWdodC4iCiAqRU5ECiAqLwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwo=