LyoKICogS29yZWFuIHJlc291cmNlcyBmb3Igd2luc3Bvb2wKICoKICogQ29weXJpZ2h0IDIwMDUgWXVuU29uZyBId2FuZwogKiAKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCiAqLwoKI2luY2x1ZGUgIndzcG9vbC5oIgoKTEFOR1VBR0UgTEFOR19LT1JFQU4sIFNVQkxBTkdfREVGQVVMVAoKRklMRU5BTUVfRElBTE9HIERJQUxPRyA2LCAxOCwgMjQ1LCA0NwpTVFlMRSBEU19DT05URVhUSEVMUCB8IERTX01PREFMRlJBTUUgfCBEU19TRVRGT05UIHwgRFNfU0VURk9SRUdST1VORCB8IFdTX1BPUFVQV0lORE9XIHwgV1NfVklTSUJMRSB8IFdTX0NBUFRJT04KQ0FQVElPTiAixsTAz7fOIMDOvOIiCkZPTlQgOSwgIk1TIFNoZWxsIERsZyIKQkVHSU4KICAgIExURVhUICLD4rfCIMbEwM8gwMy4pygmTyk6IiwgLTEsIDcsIDEzLCAxOTQsIDEzLCBXU19WSVNJQkxFCiAgICBFRElUVEVYVCBFRElUQk9YLCA2LCAyOCwgMTc0LCAxMiwgV1NfVklTSUJMRSB8IEVTX0FVVE9IU0NST0xMCiAgICBERUZQVVNIQlVUVE9OICLIrsDOIiwgSURPSywgMTk5LCAxMCwgNDAsIDE0LCBXU19WSVNJQkxFCiAgICBQVVNIQlVUVE9OICLD67zSIiwgSURDQU5DRUwsIDE5OSwgMjcsIDQwLCAxNCwgV1NfVklTSUJMRQpFTkQKClNUUklOR1RBQkxFCnsKICAgIElEU19DQVBUSU9OICLB9r+qIMb3xq4iCiAgICBJRFNfRklMRV9FWElTVFMgIsPit8IgxsTAz8C6IMG4wOfH1bTPtNkuICfIrsDOJ8C7ILSpuKO46SC1pL7uvrK/qcH6sMy0z7TZLiIKICAgIElEU19DQU5OT1RfT1BFTiAiw+K3wiDGxMDPwLsguLi16bz2IL74vcC0z7TZLiIKfQo=