LyoKICogJElkJAogKgogKiBDb3B5cmlnaHQgqSAyMDAzIEtlaXRoIFBhY2thcmQKICoKICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgZGlzdHJpYnV0ZSwgYW5kIHNlbGwgdGhpcyBzb2Z0d2FyZSBhbmQgaXRzCiAqIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0CiAqIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZCB0aGF0IGJvdGggdGhhdAogKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nCiAqIGRvY3VtZW50YXRpb24sIGFuZCB0aGF0IHRoZSBuYW1lIG9mIEtlaXRoIFBhY2thcmQgbm90IGJlIHVzZWQgaW4KICogYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9mIHRoZSBzb2Z0d2FyZSB3aXRob3V0CiAqIHNwZWNpZmljLCB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uICBLZWl0aCBQYWNrYXJkIG1ha2VzIG5vCiAqIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UuICBJdAogKiBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgogKgogKiBLRUlUSCBQQUNLQVJEIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFLAogKiBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MsIElOIE5PCiAqIEVWRU5UIFNIQUxMIEtFSVRIIFBBQ0tBUkQgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgSU5ESVJFQ1QgT1IKICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsCiAqIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIKICogVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUgogKiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgogKi8KQEZVTkNACQlGY01hdHJpeEluaXQKQFBVUlBPU0VACWluaXRpYWxpemUgYW4gRmNNYXRyaXggc3RydWN0dXJlCkBUWVBFMUAJCUZjTWF0cml4ICoKQEFSRzFACQltYXRyaXgKQERFU0NACjxmdW5jdGlvbj5GY01hdHJpeEluaXQ8L2Z1bmN0aW9uPiBpbml0aWFsaXplcyA8cGFyYW1ldGVyPm1hdHJpeDwvcGFyYW1ldGVyPgp0byB0aGUgaWRlbnRpdHkgbWF0cml4LgpAQAoKQEZVTkNACQlGY01hdHJpeENvcHkKQFBVUlBPU0VACUNvcHkgYSBtYXRyaXgKQFRZUEUxQAkJY29uc3QgRmNNYXRyaXggKgpAQVJHMUAJCW1hdHJpeApAREVTQ0AKPGZ1bmN0aW9uPkZjTWF0cml4Q29weTwvZnVuY3Rpb24+IGFsbG9jYXRlcyBhIG5ldyBGY01hdHJpeAphbmQgY29waWVzIDxwYXJhbWV0ZXI+bWF0PC9wYXJhbWV0ZXI+IGludG8gaXQuCkBACgpARlVOQ0AJCUZjTWF0cml4RXF1YWwKQFBVUlBPU0VACUNvbXBhcmUgdHdvIG1hdHJpY2VzCkBUWVBFMUAJCWNvbnN0IEZjTWF0cml4ICoKQEFSRzFACQltYXRyaXgxCkBUWVBFMkAJCWNvbnN0IEZjTWF0cml4ICoKQEFSRzJACQltYXRyaXgyCkBERVNDQAo8ZnVuY3Rpb24+RmNNYXRyaXhFcXVhbDwvZnVuY3Rpb24+IGNvbXBhcmVzIDxwYXJhbWV0ZXI+bWF0cml4MTwvcGFyYW1ldGVyPgphbmQgPHBhcmFtZXRlcj5tYXRyaXgyPC9wYXJhbWV0ZXI+IHJldHVybmluZyBGY1RydWUgd2hlbiB0aGV5IGFyZSBlcXVhbCBhbmQKRmNGYWxzZSB3aGVuIHRoZXkgYXJlIG5vdC4KQEAKCkBGVU5DQAkJRmNNYXRyaXhNdWx0aXBseQpAUFVSUE9TRUAJTXVsdGlwbHkgbWF0cmljZXMKQFRZUEUxQAkJRmNNYXRyaXggKgpAQVJHMUAJCXJlc3VsdApAVFlQRTJACQljb25zdCBGY01hdHJpeCAqCkBBUkcyQAkJbWF0cml4MQpAVFlQRTNACQljb25zdCBGY01hdHJpeCAqCkBBUkczQAkJbWF0cml4MgpAREVTQ0AKPGZ1bmN0aW9uPkZjTWF0cml4TXVsdGlwbHk8L2Z1bmN0aW9uPiBtdWx0aXBsaWVzCjxwYXJhbWV0ZXI+bWF0cml4MTwvcGFyYW1ldGVyPiBhbmQgPHBhcmFtZXRlcj5tYXRyaXgyPC9wYXJhbWV0ZXI+IHN0b3JpbmcKdGhlIHJlc3VsdCBpbiA8cGFyYW1ldGVyPnJlc3VsdDwvcGFyYW1ldGVyPi4KQEAKCkBGVU5DQAkJRmNNYXRyaXhSb3RhdGUKQFBVUlBPU0VACVJvdGF0ZSBhIG1hdHJpeApAVFlQRTFACQlGY01hdHJpeCAqCkBBUkcxQAkJbWF0cml4CkBUWVBFMkAJCWRvdWJsZQpAQVJHMkAJCWNvcwpAVFlQRTNACQlkb3VibGUKQEFSRzNACQlzaW4KQERFU0NACjxmdW5jdGlvbj5GY01hdHJpeFJvdGF0ZTwvZnVuY3Rpb24+IHJvdGF0ZXMgPHBhcmFtZXRlcj5tYXRyaXg8L3BhcmFtZXRlcj4KYnkgdGhlIGFuZ2xlIHdobydzIHNpbmUgaXMgPHBhcmFtZXRlcj5zaW48L3BhcmFtZXRlcj4gYW5kIGNvc2luZSBpcwo8cGFyYW1ldGVyPmNvczwvcGFyYW1ldGVyPi4gIFRoaXMgaXMgZG9uZSBieSBtdWx0aXBseWluZyBieSB0aGUKbWF0cml4Ogo8cHJvZ3JhbWxpc3Rpbmc+CiAgY29zIC1zaW4KICBzaW4gIGNvcwo8L3Byb2dyYW1saXN0aW5nPgpAQAoKQEZVTkNACQlGY01hdHJpeFNjYWxlCkBQVVJQT1NFQAlTY2FsZSBhIG1hdHJpeApAVFlQRTFACQlGY01hdHJpeCAqCkBBUkcxQAkJbWF0cml4CkBUWVBFMkAJCWRvdWJsZQpAQVJHMkAJCXN4CkBUWVBFM0AJCWRvdWJsZQpAQVJHM0AJCWR5CkBERVNDQAo8ZnVuY3Rpb24+RmNNYXRyaXhTY2FsZTwvZnVuY3Rpb24+IG11bHRpcGxpZXMgPHBhcmFtZXRlcj5tYXRyaXg8L3BhcmFtZXRlcj4KeCB2YWx1ZXMgYnkgPHBhcmFtZXRlcj5zeDwvcGFyYW1ldGVyPiBhbmQgeSB2YWx1ZXMgYnkKPHBhcmFtZXRlcj5zeTwvcGFyYW1ldGVyPi4gIFRoaXMgaXMgZG9uZSBieSBtdWx0aXBseWluZyBieQp0aGUgbWF0cml4Ogo8cHJvZ3JhbWxpc3Rpbmc+CiAgIHN4ICAwCiAgIDAgICBzeQo8L3Byb2dyYW1saXN0aW5nPgpAQAoKQEZVTkNACQlGY01hdHJpeFNoZWFyCkBQVVJQT1NFQAlTaGVhciBhIG1hdHJpeApAVFlQRTFACQlGY01hdHJpeCAqCkBBUkcxQAkJbWF0cml4CkBUWVBFMkAJCWRvdWJsZQpAQVJHMkAJCXNoCkBUWVBFM0AJCWRvdWJsZQpAQVJHM0AJCXN2CkBERVNDQAo8ZnVuY3Rpb24+RmNNYXRyaXhTaGFyZTwvZnVuY3Rpb24+IHNoZWFycyA8cGFyYW1ldGVyPm1hdHJpeDwvcGFyYW1ldGVyPgpob3Jpem9udGFsbHkgYnkgPHBhcmFtZXRlcj5zaDwvcGFyYW1ldGVyPiBhbmQgdmVydGljYWxseSBieQo8cGFyYW1ldGVyPnN2PC9wYXJhbWV0ZXI+LiAgVGhpcyBpcyBkb25lIGJ5IG11bHRpcGx5aW5nIGJ5CnRoZSBtYXRyaXg6Cjxwcm9ncmFtbGlzdGluZz4KICAxICBzaAogIHN2ICAxCjwvcHJvZ3JhbWxpc3Rpbmc+CkBACg==