LyoKICogIE5vdGVwYWQgKE5vcndlZ2lhbiBCb2tt5WwgcmVzb3VyY2VzKQogKgogKiAgQ29weXJpZ2h0IDIwMDUtMjAwNiBBbGV4YW5kZXIgTi4gU/hybmVzIDxhbGV4QHRoZWhhbmRvZmFnb255LmNvbT4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCiAqLwoKTEFOR1VBR0UgTEFOR19OT1JXRUdJQU4sIFNVQkxBTkdfTk9SV0VHSUFOX0JPS01BTAoKTUFJTl9NRU5VIE1FTlUKewogUE9QVVAgIiZGaWwiIHsKICBNRU5VSVRFTSAiJk55IC4gLiAuXHRDdHJsK04iLCAgICAgICAgICAgQ01EX05FVwogIE1FTlVJVEVNICImxXBuZVx0Q3RybCtPIiwgICAgIENNRF9PUEVOCiAgTUVOVUlURU0gIiZMYWdyZVx0Q3RybCtTIiwgICAgIENNRF9TQVZFCiAgTUVOVUlURU0gIkxhZ3ImZSBzb20gLiAuIC4iLCAgICAgICBDTURfU0FWRV9BUwogIE1FTlVJVEVNIFNFUEFSQVRPUgogIE1FTlVJVEVNICImU2tyaXYgdXRcdEN0cmwrUCIsICAgICAgICAgICAgQ01EX1BSSU5UCiAgTUVOVUlURU0gIlNpZGVvcHBzZSZ0dCAuIC4gLiIsICAgIENNRF9QQUdFX1NFVFVQCiAgTUVOVUlURU0gIlNrJnJpdmVyb3Bwc2V0dCAuIC4gLiIsIENNRF9QUklOVEVSX1NFVFVQCiAgTUVOVUlURU0gU0VQQVJBVE9SCiAgTUVOVUlURU0gIiZBdnNsdXR0IiwgICAgICAgICAgICAgQ01EX0VYSVQKIH0KUE9QVVAgIlImZWRpZ2VyIiB7CiAgTUVOVUlURU0gIiZBbmdyZVx0Q3RybCtaIiwgICAgIENNRF9VTkRPCiAgTUVOVUlURU0gU0VQQVJBVE9SCiAgTUVOVUlURU0gIktsaXBwIHUmdFx0Q3RybCtYIiwgICAgICBDTURfQ1VUCiAgTUVOVUlURU0gIiZLb3BpZXJcdEN0cmwrQyIsICAgICBDTURfQ09QWQogIE1FTlVJVEVNICImTGltIGlublx0Q3RybCtWIiwgICAgQ01EX1BBU1RFCiAgTUVOVUlURU0gIiZTbGV0dFx0RGVsIiwgICAgICBDTURfREVMRVRFCiAgTUVOVUlURU0gU0VQQVJBVE9SCiAgTUVOVUlURU0gIk1lcmsgJmFsdFx0Q3RybCtBIiwgICAgICAgQ01EX1NFTEVDVF9BTEwKICBNRU5VSVRFTSAiJlRpZC9EYXRvXHRGNSIsICAgIENNRF9USU1FX0RBVEUKICBNRU5VSVRFTSBTRVBBUkFUT1IKICBNRU5VSVRFTSAiVGVrc3Ricnl0aW4mZyIsICBDTURfV1JBUAogIE1FTlVJVEVNICJTa3ImaWZ0IC4gLiAuIiwgICAgICAgICAgQ01EX0ZPTlQKIH0KUE9QVVAgIiZT+GsiIHsKICBNRU5VSVRFTSAiJlP4a1x0Q3RybCtGIiwgICBDTURfU0VBUkNICiAgTUVOVUlURU0gIiZT+GsgZXR0ZXIgbmVzdCZlXHRGMyIsICBDTURfU0VBUkNIX05FWFQKIH0KUE9QVVAgIiZIamVscCIgewogIE1FTlVJVEVNICImSW5uaG9sZCIsICAgICAgICAgQ01EX0hFTFBfQ09OVEVOVFMKICBNRU5VSVRFTSAiJlP4ayAuIC4gLiIsICAgICAgICBDTURfSEVMUF9TRUFSQ0gKICBNRU5VSVRFTSAiJkhqZWxwIG9tIGhqZWxwIiwgICAgIENNRF9IRUxQX09OX0hFTFAKICBNRU5VSVRFTSBTRVBBUkFUT1IKICBQT1BVUCAiSW5mJm9ybWFzam9uIC4gLiAuIiB7CiAgIE1FTlVJVEVNICImTGlzZW5zIiwgICAgICAgICBDTURfTElDRU5TRQogICBNRU5VSVRFTSAiSSZOR0VOIEdBUkFOVEkiLCAgICAgQ01EX05PX1dBUlJBTlRZCiAgIE1FTlVJVEVNICImT20gV2luZSIsICAgICAgQ01EX0FCT1VUX1dJTkUKICB9CiB9Cn0KCi8qIERpYWxvZyBgUGFnZSBzZXR1cCcgKi8KCkRJQUxPR19QQUdFU0VUVVAgRElBTE9HIDAsIDAsIDIyNSwgOTUKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkZPTlQgOCwgIk1TIFNoZWxsIERsZyIKQ0FQVElPTiAiU2lkZW9wcHNldHQiCnsKTFRFWFQgICAgIiZUb3BwdGVrc3Q6IiwgIDB4MTQwLCAgIDEwLCAwNywgNDAsIDE1CkVESVRURVhUICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTQxLCAgICAgICA2MCwgMDUsMTEwLCAxMiwgV1NfQk9SREVSIHwgV1NfVEFCU1RPUApMVEVYVCAgICAiJkJ1bm50ZWtzdDoiLCAgMHgxNDIsICAgMTAsIDI0LCA0MCwgMTUKRURJVFRFWFQgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNDMsICAgICAgIDYwLCAyMiwxMTAsIDEyLCBXU19CT1JERVIgfCBXU19UQUJTVE9QCgpHUk9VUEJPWCAiJk1hcmc6IiwgICAgICAweDE0NCwgICAgIDEwLCA0MywxNjAsIDQ1CkxURVhUICAgICImVmVuc3RyZToiLCAgICAgICAgMHgxNDUsICAgMjAsIDU1LCAzMCwgMTAsIFdTX0NISUxECkVESVRURVhUIC8qU1RSSU5HX1BBR0VTRVRVUF9MRUZUVkFMVUUsKi8gICAweDE0NywgICAgICAgNTAsIDU1LCAzNSwgMTEsIFdTX0NISUxEIHwgV1NfQk9SREVSIHwgV1NfVEFCU1RPUApMVEVYVCAgICAiJlRvcHA6IiwgICAgICAgICAweDE0OCwgICAgMjAsIDczLCAzMCwgMTAsIFdTX0NISUxECkVESVRURVhUIC8qU1RSSU5HX1BBR0VTRVRVUF9UT1BWQUxVRSwqLyAgICAweDE0QSwgICAgICAgIDUwLCA3MywgMzUsIDExLCBXU19DSElMRCB8IFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AKTFRFWFQgICAgIkj4eSZyZToiLCAgICAgICAweDE0QiwgMTAwLCA1NSwgMzAsIDEwLCBXU19DSElMRApFRElUVEVYVCAvKlNUUklOR19QQUdFU0VUVVBfUklHSFRWQUxVRSwqLyAgMHgxNEQsICAgICAxMzAsIDU1LCAzNSwgMTEsIFdTX0NISUxEIHwgV1NfQk9SREVSIHwgV1NfVEFCU1RPUApMVEVYVCAgICAiJkJ1bm46IiwgICAgICAweDE0RSwxMDAsIDczLCAzMCwgMTAsIFdTX0NISUxECkVESVRURVhUIC8qU1RSSU5HX1BBR0VTRVRVUF9CT1RUT01WQUxVRSwqLyAweDE1MCwgICAgMTMwLCA3MywgMzUsIDExLCBXU19DSElMRCB8IFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AKCkRFRlBVU0hCVVRUT04gIk9LIiwgICAgICAgICBJRE9LLCAgICAgICAgICAgICAgICAgICAxODAsICAzLCA0MCwgMTUsIFdTX1RBQlNUT1AKUFVTSEJVVFRPTiAgICAiQXZicnl0IiwgICAgIElEQ0FOQ0VMLCAgICAgICAgICAgICAgIDE4MCwgMjEsIDQwLCAxNSwgV1NfVEFCU1RPUApQVVNIQlVUVE9OICAgICImSGplbHAiLCAgICAgICBJREhFTFAsICAgICAgICAgICAgICAgIDE4MCwgMzksIDQwLCAxNSwgV1NfVEFCU1RPUAp9CgpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRQp7ClNUUklOR19QQUdFU0VUVVBfSEVBREVSVkFMVUUsICAgIiZuIiAgICAgICAgLyogRklYTUUgKi8KU1RSSU5HX1BBR0VTRVRVUF9GT09URVJWQUxVRSwgICAiU2lkZSAmcyIgICAvKiBGSVhNRSAqLwpTVFJJTkdfUEFHRVNFVFVQX0xFRlRWQUxVRSwgICAgICAgICAgICAgIjIwbW0iICAgICAvKiBGSVhNRSAqLwpTVFJJTkdfUEFHRVNFVFVQX1JJR0hUVkFMVUUsICAgICIyMG1tIiAgICAgLyogRklYTUUgKi8KU1RSSU5HX1BBR0VTRVRVUF9UT1BWQUxVRSwgICAgICAgICAgICAgICIyNW1tIiAgICAgLyogRklYTUUgKi8KU1RSSU5HX1BBR0VTRVRVUF9CT1RUT01WQUxVRSwgICAiMjVtbSIgICAgIC8qIEZJWE1FICovCgpTVFJJTkdfTk9URVBBRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTm90aXNibG9rayIKU1RSSU5HX0VSUk9SLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZFSUwiClNUUklOR19XQVJOSU5HLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBRFZBUlNFTCIKU1RSSU5HX0lORk8sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZm9ybWFzam9uIgoKU1RSSU5HX1VOVElUTEVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIihVdGVuIG5hdm4pIgoKU1RSSU5HX0FMTF9GSUxFUywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFsbGUgZmlsZXIgKCouKikiClNUUklOR19URVhUX0ZJTEVTX1RYVCwgICAgICAgICAgICAgICAgICAiVGVrc3RmaWxlciAoKi50eHQpIgoKU1RSSU5HX1RPT0xBUkdFLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZpbGVuIKslc7sgZXIgZm9yIHN0b3IgZm9yIE5vdGlzYmxva2suXG4gXApCcnVrIGVuIGFubmVuIHJlZGlnZXJlci4iClNUUklOR19OT1RFWFQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJEdSBza3JldiBpa2tlIGlubiBub2UgdGVrc3QuIFwKXG5Ta3JpdiBub2Ugb2cgcHL4diBpZ2plbi4iClNUUklOR19ET0VTTk9URVhJU1QsICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGaWxlbiCrJXO7IGZpbm5lcyBpa2tlLlxuXG4gXApPcHByZXR0ZSBlbiBueSBmaWw/IgpTVFJJTkdfTk9UU0FWRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRmlsZW4gqyVzuyBlciBlbmRyZXQuXG5cbiBcCkxhZ3JlIGVuZHJpbmdlbmU/IgpTVFJJTkdfTk9URk9VTkQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJLbGFydGUgaWtrZSBmaW5uZSCrJXO7LiIKU1RSSU5HX09VVF9PRl9NRU1PUlksICAgICAgICAgICAgICAgICAgICJJa2tlIG5vayBtaW5uZSBmb3Ig5SBmdWxsZvhyZSBcCm9wZXJhc2pvbmVuLiBcbkx1a2sgZXQgZWxsZXIgZmxlcmUgcHJvZ3JhbW1lciBmb3Ig5SBmcmlnavhyZSBcbm1lciBcCm1pbm5lLiIKCn0KClNUUklOR1RBQkxFIERJU0NBUkRBQkxFIExBTkdVQUdFIExBTkdfTk9SV0VHSUFOLCBTVUJMQU5HX05PUldFR0lBTl9CT0tNQUwKewpJRFNfTElDRU5TRV9DQVBUSU9OLCAgICAgICAgICAgICJMSVNFTlMiCklEU19MSUNFTlNFLAoiRGV0dGUgYmlibGlvdGVrZXQgZXIgZnJpIHByb2dyYW12YXJlOyBkdSBrYW4gcmVkaXN0cmlidWVyZSBkZXQgb2cvZWxsZXIgXAplbmRyZSBkZXQgdW5kZXIgdmlsa+VyZW5lIGkgq0dOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgXApMaWNlbnNluywgdXRnaXR0IGF2IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVudGVuIFwKdmVyc2pvbiAyLjEgYXYgTGlzZW5zZW4sIGVsbGVyIChodmlzIGR1IPhuc2tlciBkZXQpIGVuIG55ZXJlIHZlcnNqb24uXG5cCkRldHRlIGJpYmxpb3Rla2V0IGRpc3RyaWJ1ZXJlcyBpIGjlcCBvbSBhdCBkZXQgZXIgbnl0dGlnLCBcCm1lbiBVVEVOIEVOSFZFUiBHQVJBTlRJOyB1dGVuIGdhbmdlbiBkZW4gdXR0cnlrdGUgZ2FyYW50aWVuIGZvciBcCkhBTkRFTFNEWUtUSUdIRVQgZWxsZXIgRUdORVRIRVQgRk9SIEVUIFNQRVNJRUxUIEZPUk3FTC4gU2Ugq0dOVSBcCkxlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNluyBmb3IgZmxlcmUgZGV0YWxqZXIuXG5cCkR1IHNrYWwgaGEgbW90dGF0dCBldCBla3NlbXBsYXIgYXYgq0dOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgXApMaWNlbnNluyBzYW1tZW4gbWVkIGRldHRlIGJpYmxpb3Rla2V0OyBodmlzIGlra2UsIHNrcml2IHRpbDogdGhlIEZyZWUgU29mdHdhcmUgXApGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBIgoKSURTX1dBUlJBTlRZX0NBUFRJT04sICJJTkdFTiBHQVJBTlRJIgpJRFNfV0FSUkFOVFksCiJEZXR0ZSBiaWJsaW90ZWtldCBkaXN0cmlidWVyZXMgaSBo5XAgb20gYXQgZGV0IGVyIG55dHRpZywgXAptZW4gVVRFTiBFTkhWRVIgR0FSQU5USTsgdXRlbiBlbmdhbmcgZW4gdXR0cnlrdGUgZ2FyYW50aWVuIGZvciBcCkhBTkRFTFNEWUtUSUdIRVQgZWxsZXIgRUdORVRIRVQgRk9SIEVUIFNQRVNJRUxUIEZPUk3FTC4gU2Ugq0dOVSBcCkxlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNluyBmb3IgZmxlcmUgZGV0YWxqZXIuIgp9Cg==