LyoKICogUmVnZWRpdCAoRHV0Y2ggcmVzb3VyY2VzKQogKgogKiBDb3B5cmlnaHQgMjAwMyBIYW5zIExlaWRla2tlcgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKICovCgpMQU5HVUFHRSBMQU5HX0RVVENILCBTVUJMQU5HX0RFRkFVTFQKCi8qCiAqIE1lbnUKICovCgpJRENfUkVHRURJVCBNRU5VIERJU0NBUkRBQkxFCkJFR0lOCiAgICBQT1BVUCAiJkJlc3RhbmQiCiAgICBCRUdJTgogICAgICAgIE1FTlVJVEVNICImQWZzbHVpdGVuIiwgICAgICAgICAgICAgICAgICBJRF9SRUdJU1RSWV9FWElUCiAgICBFTkQKICAgIFBPUFVQICImSGVscCIKICAgIEJFR0lOCiAgICAgICAgTUVOVUlURU0gIiZJbmZvIC4uLiIsICAgICAgICAgICAgICAgICAgIElEX0hFTFBfQUJPVVQKICAgIEVORApFTkQKCklEUl9SRUdFRElUX01FTlUgTUVOVSBESVNDQVJEQUJMRQpCRUdJTgogICAgUE9QVVAgIiZSZWdpc3RlcmJlc3RhbmQiCiAgICBCRUdJTgogICAgICAgIE1FTlVJVEVNICJSZWdpc3RlcmJlc3RhbmQgJmltcG9ydGVyZW4uLi4iLCAgICBJRF9SRUdJU1RSWV9JTVBPUlRSRUdJU1RSWUZJTEUKICAgICAgICBNRU5VSVRFTSAiUmVnaXN0ZXJiZXN0YW5kICZleHBvcnRlcmVuLi4uIiwgICAgSURfUkVHSVNUUllfRVhQT1JUUkVHSVNUUllGSUxFCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIlZlcmJpbmRpbmcgJm1ha2VuIG1ldCBuZXR3ZXJrcmVnaXN0ZXIuLi4iLCBJRF9SRUdJU1RSWV9DT05ORUNUTkVUV09SS1JFR0lTVFJZLCBHUkFZRUQKICAgICAgICBNRU5VSVRFTSAiVmVyYmluZGluZyAmdmVyYnJla2VuIG1ldCBuZXR3ZXJrcmVnaXN0ZXIuLi4iLCBJRF9SRUdJU1RSWV9ESVNDT05ORUNUTkVUV09SS1JFR0lTVFJZLCBHUkFZRUQKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiQWYmZHJ1a2tlblx0Q3RybCtQIiwgICAgICAgICAgICAgICAgSURfUkVHSVNUUllfUFJJTlQsIEdSQVlFRAogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICImQWZzbHVpdGVuIiwgICAgICAgICAgICAgICAgICAgICAgICBJRF9SRUdJU1RSWV9FWElUCiAgICBFTkQKICAgIFBPUFVQICImQmV3ZXJrZW4iCiAgICBCRUdJTgogICAgICAgIE1FTlVJVEVNICImV2lqemlnZW4iLCAgICAgICAgICAgICAgICAgICAgICAgICBJRF9FRElUX01PRElGWQogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIFBPUFVQICImTmlldXciCiAgICAgICAgQkVHSU4KICAgICAgICAgICAgTUVOVUlURU0gIiZTbGV1dGVsIiwgICAgICAgICAgICAgICAgICAgICAgSURfRURJVF9ORVdfS0VZCiAgICAgICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgICAgICBNRU5VSVRFTSAiJlRla2VucmVla3N3YWFyZGUiLCAgICAgICAgICAgICBJRF9FRElUX05FV19TVFJJTkdWQUxVRQogICAgICAgICAgICBNRU5VSVRFTSAiJkJpbmFpcmUgd2FhcmRlIiwgICAgICAgICAgICAgICBJRF9FRElUX05FV19CSU5BUllWQUxVRQogICAgICAgICAgICBNRU5VSVRFTSAiJkRXT1JELXdhYXJkZSIsICAgICAgICAgICAgICAgICBJRF9FRElUX05FV19EV09SRFZBTFVFCiAgICAgICAgRU5ECiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIiZWZXJ3aWpkZXJlblx0RGVsIiwgICAgICAgICAgICAgICAgIElEX0VESVRfREVMRVRFCiAgICAgICAgTUVOVUlURU0gIiZOYWFtIHdpanppZ2VuXHRGMiIgICAgICAgICAgICAgICAgIElEX0VESVRfUkVOQU1FCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIiZTbGV1dGVsbmFhbSBrb3Bp63JlbiIsICAgICAgICAgICAgIElEX0VESVRfQ09QWUtFWU5BTUUKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiJlpvZWtlblx0Q3RybCtGIiwgICAgICAgICAgICAgICAgICAgSURfRURJVF9GSU5ELCBHUkFZRUQKICAgICAgICBNRU5VSVRFTSAiVm9sZ2VuZGUgWm9la2VuXHRGMyIsICAgICAgICAgICAgICAgSURfRURJVF9GSU5ETkVYVCwgR1JBWUVECiAgICBFTkQKICAgIFBPUFVQICJCZWUmbGQiCiAgICBCRUdJTgogICAgICAgIE1FTlVJVEVNICImU3RhdHVzYmFsayIsICAgICAgICAgICAgICAgICAgICAgICBJRF9WSUVXX1NUQVRVU0JBUgogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICJTJnBsaXRzZW4iLCAgICAgICAgICAgICAgICAgICAgICAgICBJRF9WSUVXX1NQTElUCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIiZWZXJuaWV1d2VuXHRGNSIsICAgICAgICAgICAgICAgICAgIElEX1ZJRVdfUkVGUkVTSAogICAgRU5ECiAgICBQT1BVUCAiJkZhdm9yaWV0ZW4iCiAgICBCRUdJTgogICAgICAgIE1FTlVJVEVNICImVG9ldm9lZ2VuIGFhbiBmYXZvcmlldGVuIiwgICAgICAgICBJRF9GQVZPVVJJVEVTX0FERFRPRkFWT1VSSVRFUwogICAgICAgICwgR1JBWUVECiAgICAgICAgTUVOVUlURU0gIiZWZXJ3aWpkZXJlbiB1aXQgZmF2b3JpZXRlbiIsICAgICAgIElEX0ZBVk9VUklURVNfUkVNT1ZFRkFWT1VSSVRFCiAgICAgICAgLCBHUkFZRUQKICAgIEVORAogICAgUE9QVVAgIiZIZWxwIgogICAgQkVHSU4KICAgICAgICBNRU5VSVRFTSAiJkhlbHAtb25kZXJ3ZXJwZW4iLCAgICAgICAgICAgICAgICAgSURfSEVMUF9IRUxQVE9QSUNTCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIiZJbmZvIiwgICAgICBJRF9IRUxQX0FCT1VUCiAgICBFTkQKRU5ECgoKLyoKICogRGlhbG9nCiAqLwoKSUREX0FCT1VUQk9YIERJQUxPRyBESVNDQVJEQUJMRSAgMjIsIDE3LCAyMzAsIDc1ClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpDQVBUSU9OICJJbmZvIgpGT05UIDgsICJNUyBTaGVsbCBEbGciCkJFR0lOCiAgICBJQ09OICAgICAgICAgICAgSURJX1JFR0VESVQsSURJX1JFR0VESVQsMTQsOSwxNiwxNgogICAgTFRFWFQgICAgICAgICAgICJSZWFjdE9TIHJlZ2VkaXQgVmVyc2lvbiAxLjAiLElEQ19TVEFUSUMsNDksMTAsMTE5LDgsCiAgICAgICAgICAgICAgICAgICAgU1NfTk9QUkVGSVgKICAgIExURVhUICAgICAgICAgICAiQ29weXJpZ2h0IChDKSAyMDAyIFJlYWN0T1MgVGVhbSIsSURDX1NUQVRJQyw0OSwyMCwxMTksOAogICAgREVGUFVTSEJVVFRPTiAgICJPSyIsSURPSywxOTUsNiwzMCwxMSxXU19HUk9VUApFTkQKCi8qCiAqIFN0cmluZyBUYWJsZQogKi8KClNUUklOR1RBQkxFIERJU0NBUkRBQkxFCkJFR0lOCiAgICBJRFNfTElTVF9DT0xVTU5fTkFNRSAgICAiTmFhbSIKICAgIElEU19MSVNUX0NPTFVNTl9UWVBFICAgICJUeXBlIgogICAgSURTX0xJU1RfQ09MVU1OX0RBVEEgICAgIkdlZ2V2ZW5zIgpFTkQKClNUUklOR1RBQkxFIERJU0NBUkRBQkxFCkJFR0lOCiAgICBJRFNfQVBQX1RJVExFICAgICAgICAgICAiUmVnaXN0ZXItZWRpdG9yIgogICAgSURDX1JFR0VESVQgICAgICAgICAgICAgIlJFR0VESVQiCiAgICBJRENfUkVHRURJVF9GUkFNRSAgICAgICAiUkVHRURJVF9GUkFNRSIKRU5ECgpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRQpCRUdJTgogICAgSURfUkVHSVNUUllfTUVOVSAgICAgICAgIk9wZHJhY2h0ZW4gdm9vciBoZXQgd2Vya2VuIG1ldCBoZXQgZ2VoZWxlIHJlZ2lzdGVyIgogICAgSURfRURJVF9NRU5VICAgICAgICAgICAgIk9wZHJhY2h0ZW4gdm9vciBoZXQgYmV3ZXJrZW4gdmFuIHdhYXJkZW4gb2Ygc2xldXRlbHMiCiAgICBJRF9WSUVXX01FTlUgICAgICAgICAgICAiT3BkcmFjaHRlbiB2b29yIGhldCBhYW5wYXNzZW4gdmFuIGhldCByZWdpc3RlcnZlbnN0ZXIiCiAgICBJRF9GQVZPVVJJVEVTX01FTlUgICAgICAiT3BkcmFjaHRlbiB2b29yIHRvZWdhbmcgdG90IHZhYWsgZ2VicnVpa3RlIHNsZXV0ZWxzIgogICAgSURfSEVMUF9NRU5VICAgICAgICAgICAgIk9wZHJhY2h0ZW4gdm9vciBoZXQgd2VlcmdldmVuIHZhbiBIZWxwIGVuIGluZm9ybWF0aWUgb3ZlciBkZSBSZWdpc3Rlci1lZGl0b3IiCiAgICBJRF9FRElUX05FV19NRU5VICAgICAgICAiT3BkcmFjaHRlbiB2b29yIGhldCBtYWtlbiB2YW4gbmlldXdlIHNsZXV0ZWxzIG9mIHdhYXJkZW4iCkVORAoKU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUKQkVHSU4KICAgIElEX0VESVRfTU9ESUZZICAgICAgICAgICJEZSBnZWdldmVucyB2YW4gZGUgd2FhcmRlIHdpanppZ2VuIgogICAgSURfRURJVF9ORVdfS0VZICAgICAgICAgIkVlbiBuaWV1d2Ugc2xldXRlbCB0b2V2b2VnZW4iCiAgICBJRF9FRElUX05FV19TVFJJTkdWQUxVRSAiRWVuIG5pZXV3ZSB0ZWtlbnJlZWtzd2FhcmRlIHRvZXZvZWdlbiIKICAgIElEX0VESVRfTkVXX0JJTkFSWVZBTFVFICJFZW4gbmlldXdlIGJpbmFpcmUgd2FhcmRlIHRvZXZvZWdlbiIKICAgIElEX0VESVRfTkVXX0RXT1JEVkFMVUUgICJFZW4gbmlldXdlIERXT1JELXdhYXJkZSB0b2V2b2VnZW4iIAogICAgSURfUkVHSVNUUllfSU1QT1JUUkVHSVNUUllGSUxFICJFZW4gdGVrc3RiZXN0YW5kIGluIGhldCByZWdpc3RlciBpbXBvcnRlcmVuIgogICAgSURfUkVHSVNUUllfRVhQT1JUUkVHSVNUUllGSUxFCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSGV0IHJlZ2lzdGVyIG9mIGVlbiBnZWRlZWx0ZSBlcnZhbiBuYWFyIGVlbiB0ZWtzdGJlc3RhbmQgZXhwb3J0ZXJlbiIKICAgIElEX1JFR0lTVFJZX0NPTk5FQ1RORVRXT1JLUkVHSVNUUlkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJFZW4gdmVyYmluZGluZyBtYWtlbiBtZXQgaGV0IHJlZ2lzdGVyIHZhbiBlZW4gZXh0ZXJuZSBjb21wdXRlciIKICAgIElEX1JFR0lTVFJZX0RJU0NPTk5FQ1RORVRXT1JLUkVHSVNUUlkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJEZSB2ZXJiaW5kaW5nIG1ldCBoZXQgcmVnaXN0ZXIgdmFuIGVlbiBleHRlcm5lIGNvbXB1dGVyIHZlcmJyZWtlbiIKICAgIElEX1JFR0lTVFJZX1BSSU5UICAgICAgICJIZXQgcmVnaXN0ZXIgb2YgZWVuIGdlZGVlbHRlIGVydmFuIGFmZHJ1a2tlbiIKLyogICAgSURfSEVMUF9IRUxQVE9QSUNTICAgICAgIkhlbHAgdm9vciBkZSBSZWdpc3Rlci1lZGl0b3Igb3BlbmVuIiAqLwogICAgSURfSEVMUF9BQk9VVCAgICAgICAgICAgIlByb2dyYW1tYWdlZ2V2ZW5zLCB2ZXJzaWVudW1tZXIgZW4gY29weXJpZ2h0Z2VnZXZlbnMgd2VlcmdldmVuIgpFTkQKClNUUklOR1RBQkxFIERJU0NBUkRBQkxFCkJFR0lOCiAgICBJRF9SRUdJU1RSWV9FWElUICAgICAgICAiRGUgUmVnaXN0ZXItZWRpdG9yIGFmc2x1aXRlbiIKICAgIElEX0ZBVk9VUklURVNfQUREVE9GQVZPVVJJVEVTICJTbGV1dGVscyB0b2V2b2VnZW4gYWFuIGRlIGxpanN0IG1ldCBmYXZvcmlldGVuIgogICAgSURfRkFWT1VSSVRFU19SRU1PVkVGQVZPVVJJVEUgIlNsZXV0ZWxzIHZlcndpamRlcmVuIHVpdCBkZSBsaWpzdCBtZXQgZmF2b3JpZXRlbiIKICAgIElEX1ZJRVdfU1RBVFVTQkFSICAgICAgICJEZSBzdGF0dXNiYWxrIHdlZXJnZXZlbiBvZiB2ZXJiZXJnZW4iCiAgICBJRF9WSUVXX1NQTElUICAgICAgICAgICAiRGUgcG9zaXRpZSB2YW4gZGUgc3BsaXRzaW5nIHR1c3NlbiB0d2VlIGRlZWx2ZW5zdGVycyB3aWp6aWdlbiIKICAgIElEX1ZJRVdfUkVGUkVTSCAgICAgICAgICJIZXQgdmVuc3RlciB2ZXJuaWV1d2VuIgogICAgSURfRURJVF9ERUxFVEUgICAgICAgICAgIkRlIHNlbGVjdGllIHZlcndpamRlcmVuIgogICAgSURfRURJVF9SRU5BTUUgICAgICAgICAgIkRlIG5hYW0gdmFuIGRlIHNlbGVjdGllIHdpanppZ2VuIgogICAgSURfRURJVF9DT1BZS0VZTkFNRSAgICAgIkRlIG5hYW0gdmFuIGRlIGdlc2VsZWN0ZWVyZGUgc2xldXRlbCBuYWFyIGhldCBLbGVtYm9yZCBrb3Bp63JlbiIKICAgIElEX0VESVRfRklORCAgICAgICAgICAgICJFZW4gdGVrZW5yZWVrcyB6b2VrZW4gaW4gZWVuIHNsZXV0ZWwsIGVlbiB3YWFyZGUgb2YgZ2VnZXZlbnMiCiAgICBJRF9FRElUX0ZJTkRORVhUICAgICAgICAiRGUgb3BnZWdldmVuIHRla3N0IG5vZ21hYWxzIHpvZWtlbiIKRU5ECgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgoKLyoKICogRGlhbG9nCiAqLwoKSUREX0RJQUxPRzEgRElBTE9HIERJU0NBUkRBQkxFICA1MCwgNTAsIDI2OCwgOTgKU1RZTEUgRFNfM0RMT09LIHwgRFNfQ09OVFJPTCB8IFdTX0NISUxEIHwgV1NfVklTSUJMRSB8IFdTX0NMSVBTSUJMSU5HUyB8CiAgICBXU19CT1JERVIKRk9OVCA4LCAiTVMgU2hlbGwgRGxnIgpCRUdJTgpFTkQKCklERF9ESUFMT0cyIERJQUxPRyBESVNDQVJEQUJMRSAgMCwgMCwgMTg3LCA5NQpTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpDQVBUSU9OICJEaWFsb2ciCkZPTlQgOCwgIk1TIFNoZWxsIERsZyIKQkVHSU4KICAgIERFRlBVU0hCVVRUT04gICAiT0siLElET0ssMTMwLDcsNTAsMTQKICAgIFBVU0hCVVRUT04gICAgICAiQW5udWxlcmVuIixJRENBTkNFTCwxMzAsMjQsNTAsMTQKRU5ECgoKLyoKICogVEVYVElOQ0xVREUKICovCgoxIFRFWFRJTkNMVURFIERJU0NBUkRBQkxFCkJFR0lOCiAgICAicmVzb3VyY2UuaFwwIgpFTkQK