ZGlmZiAtLWdpdCBhL2JvYXJkL2NzYjIyNi9sb3dsZXZlbF9pbml0LlMgYi9ib2FyZC9jc2IyMjYvbG93bGV2ZWxfaW5pdC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhOWRjYmEKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9jc2IyMjYvbG93bGV2ZWxfaW5pdC5TCkBAIC0wLDAgKzEsNDM3IEBACisvKgorICogTW9zdCBvZiB0aGlzIHRha2VuIGZyb20gUmVkYm9vdCBoYWxfcGxhdGZvcm1fc2V0dXAuaCB3aXRoIGNsZWFudXAKKyAqCisgKiBOT1RFOiBJIGhhdmVuJ3QgY2xlYW4gdGhpcyB1cCBjb25zaWRlcmFibHksIGp1c3QgZW5vdWdoIHRvIGdldCBpdAorICogcnVubmluZy4gU2VlIGhhbF9wbGF0Zm9ybV9zZXR1cC5oIGZvciB0aGUgc291cmNlLiBTZWUKKyAqIGJvYXJkL2NyYWRsZS9sb3dsZXZlbF9pbml0LlMgZm9yIGFub3RoZXIgUFhBMjUwIHNldHVwIHRoYXQgaXMKKyAqIG11Y2ggY2xlYW5lci4KKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisjaW5jbHVkZSA8dmVyc2lvbi5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3B4YS1yZWdzLmg+CisKK0RSQU1fU0laRTogIC5sb25nICAgQ0ZHX0RSQU1fU0laRQorCisvKiB3YWl0IGZvciBjb3Byb2Nlc3NvciB3cml0ZSBjb21wbGV0ZSAqLworICAgLm1hY3JvIENQV0FJVCByZWcKKyAgIG1yYyAgcDE1LDAsXHJlZyxjMixjMCwwCisgICBtb3YgIFxyZWcsXHJlZworICAgc3ViICBwYyxwYywjNAorICAgLmVuZG0KKworX1RFWFRfQkFTRToKKwkud29yZAlURVhUX0JBU0UKKworCisvKgorICogCU1lbW9yeSBzZXR1cAorICovCisKKy5nbG9ibCBsb3dsZXZlbF9pbml0Citsb3dsZXZlbF9pbml0OgorCisgICAgbW92ICAgICAgcjEwLCBscgorCisJLyogU2V0IHVwIEdQSU8gcGlucyBmaXJzdCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisJbGRyCQlyMCwJPUdQU1IwCisJbGRyCQlyMSwJPUNGR19HUFNSMF9WQUwKKwlzdHIJCXIxLCAgIFtyMF0KKworCWxkcgkJcjAsCT1HUFNSMQorCWxkcgkJcjEsCT1DRkdfR1BTUjFfVkFMCisJc3RyCQlyMSwgICBbcjBdCisKKwlsZHIJCXIwLAk9R1BTUjIKKwlsZHIJCXIxLAk9Q0ZHX0dQU1IyX1ZBTAorCXN0cgkJcjEsICAgW3IwXQorCisJbGRyCQlyMCwJPUdQQ1IwCisJbGRyCQlyMSwJPUNGR19HUENSMF9WQUwKKwlzdHIJCXIxLCAgIFtyMF0KKworCWxkcgkJcjAsCT1HUENSMQorCWxkcgkJcjEsCT1DRkdfR1BDUjFfVkFMCisJc3RyCQlyMSwgICBbcjBdCisKKwlsZHIJCXIwLAk9R1BDUjIKKwlsZHIJCXIxLAk9Q0ZHX0dQQ1IyX1ZBTAorCXN0cgkJcjEsICAgW3IwXQorCisJbGRyCQlyMCwJPUdQRFIwCisJbGRyCQlyMSwJPUNGR19HUERSMF9WQUwKKwlzdHIJCXIxLCAgIFtyMF0KKworCWxkcgkJcjAsCT1HUERSMQorCWxkcgkJcjEsCT1DRkdfR1BEUjFfVkFMCisJc3RyCQlyMSwgICBbcjBdCisKKwlsZHIJCXIwLAk9R1BEUjIKKwlsZHIJCXIxLAk9Q0ZHX0dQRFIyX1ZBTAorCXN0cgkJcjEsICAgW3IwXQorCisJbGRyCQlyMCwJPUdBRlIwX0wKKwlsZHIJCXIxLAk9Q0ZHX0dBRlIwX0xfVkFMCisJc3RyCQlyMSwgICBbcjBdCisKKwlsZHIJCXIwLAk9R0FGUjBfVQorCWxkcgkJcjEsCT1DRkdfR0FGUjBfVV9WQUwKKwlzdHIJCXIxLCAgIFtyMF0KKworCWxkcgkJcjAsCT1HQUZSMV9MCisJbGRyCQlyMSwJPUNGR19HQUZSMV9MX1ZBTAorCXN0cgkJcjEsICAgW3IwXQorCisJbGRyCQlyMCwJPUdBRlIxX1UKKwlsZHIJCXIxLAk9Q0ZHX0dBRlIxX1VfVkFMCisJc3RyCQlyMSwgICBbcjBdCisKKwlsZHIJCXIwLAk9R0FGUjJfTAorCWxkcgkJcjEsCT1DRkdfR0FGUjJfTF9WQUwKKwlzdHIJCXIxLCAgIFtyMF0KKworCWxkcgkJcjAsCT1HQUZSMl9VCisJbGRyCQlyMSwJPUNGR19HQUZSMl9VX1ZBTAorCXN0cgkJcjEsICAgW3IwXQorCisJbGRyCXIwLAk9UFNTUgkJLyogZW5hYmxlIEdQSU8gcGlucyAqLworCWxkcgkJcjEsCT1DRkdfUFNTUl9WQUwKKwlzdHIJCXIxLCAgIFtyMF0KKworLyoJbGRyCXIzLAk9TVNDMQkJLyAgbG93IC0gYmFuayAyIEx1YmJvY2sgUmVnaXN0ZXJzIC8gU1JBTSAqLworLyoJbGRyCXIyLAk9Q0ZHX01TQzFfVkFMCS8gIGhpZ2ggLSBiYW5rIDMgRXRoZXJuZXQgQ29udHJvbGxlciAqLworLyoJc3RyCXIyLAlbcjNdCQkvICBuZWVkIHRvIHNldCBNU0MxIGJlZm9yZSB0cnlpbmcgdG8gd3JpdGUgdG8gdGhlIEhFWCBMRURzICovCisvKglsZHIJcjIsCVtyM10JCS8gIG5lZWQgdG8gcmVhZCBpdCBiYWNrIHRvIG1ha2Ugc3VyZSB0aGUgdmFsdWUgbGF0Y2hlcyAoc2VlIE1TQyBzZWN0aW9uIG9mIG1hbnVhbCkgKi8KKy8qICovCisvKglsZHIJcjEsCT1MRURfQkxBTksgKi8KKy8qCW1vdglyMCwJIzB4RkYgKi8KKy8qCXN0cglyMCwJW3IxXQkJLyAgdHVybiBvbiBoZXggbGVkcyAqLworLyogKi8KKy8qbG9vcDogKi8KKy8qICovCisvKiAgIGxkcglyMCwgPTB4QjAwNzAwMDEgKi8KKy8qICAgbGRyICAgIAlyMSwgPV9MRUQgKi8KKy8qICAgc3RyICAgIAlyMCwgW3IxXQkJLyAgaGV4IGRpc3BsYXkgKi8KKworCisJLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCS8qIEVuYWJsZSBtZW1vcnkgaW50ZXJmYWNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwkvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJLyogVGhlIHNlcXVlbmNlIGJlbG93IGlzIGJhc2VkIG9uIHRoZSByZWNvbW1lbmRlZCBpbml0IHN0ZXBzICAgICAgICAqLworCS8qIGRldGFpbGVkIGluIHRoZSBJbnRlbCBQWEEyNTAgT3BlcmF0aW5nIFN5c3RlbXMgRGV2ZWxvcGVycyBHdWlkZSwgKi8KKwkvKiBDaGFwdGVyIDEwLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisJLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCS8qIFN0ZXAgMTogV2FpdCBmb3IgYXQgbGVhc3QgMjAwIG1pY3Jvc2Vkb25kcyB0byBhbGxvdyBpbnRlcm5hbCAgICAgKi8KKwkvKiAgICAgICAgIGNsb2NrcyB0byBzZXR0bGUuIE9ubHkgbmVjZXNzYXJ5IGFmdGVyIGhhcmQgcmVzZXQuLi4gICAgICovCisJLyogICAgICAgICBGSVhNRTogY2FuIGJlIG9wdGltaXplZCBsYXRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworCWxkciByMywgPU9TQ1IJCQkvKiByZXNldCB0aGUgT1MgVGltZXIgQ291bnQgdG8gemVybyAqLworCW1vdiByMiwgIzAKKwlzdHIgcjIsIFtyM10KKwlsZHIgcjQsID0weDMwMAkJCS8qIHJlYWxseSAweDJFMSBpcyBhYm91dCAyMDB1c2VjLCAgICovCisJCQkJCS8qIHNvIDB4MzAwIHNob3VsZCBiZSBwbGVudHkgICAgICAgICovCisxOgorCWxkciByMiwgW3IzXQorCWNtcCByNCwgcjIKKwliZ3QgMWIKKworbWVtX2luaXQ6CisKKwlsZHIgICAgIHIxLCAgPU1FTUNfQkFTRQkJLyogZ2V0IG1lbW9yeSBjb250cm9sbGVyIGJhc2UgYWRkci4gKi8KKworCS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKwkvKiBTdGVwIDJhOiBJbml0aWFsaXplIEFzeW5jaHJvbm91cyBzdGF0aWMgbWVtb3J5IGNvbnRyb2xsZXIgICAgICAgICovCisJLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisJLyogTVNDIHJlZ2lzdGVyczogdGltaW5nLCBidXMgd2lkdGgsIG1lbSB0eXBlICAgICAgICAgICAgICAgICAgICAgICAqLworCisJLyogTVNDMDogbkNTKDAsMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCWxkciAgICAgcjIsICAgPUNGR19NU0MwX1ZBTAorCXN0ciAgICAgcjIsICAgW3IxLCAjTVNDMF9PRkZTRVRdCisJbGRyICAgICByMiwgICBbcjEsICNNU0MwX09GRlNFVF0JLyogcmVhZCBiYWNrIHRvIGVuc3VyZSAgICAgICovCisJCQkJCQkvKiB0aGF0IGRhdGEgbGF0Y2hlcyAgICAgICAgKi8KKwkvKiBNU0MxOiBuQ1MoMiwzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJbGRyICAgICByMiwgID1DRkdfTVNDMV9WQUwKKwlzdHIgICAgIHIyLCAgW3IxLCAjTVNDMV9PRkZTRVRdCisJbGRyICAgICByMiwgIFtyMSwgI01TQzFfT0ZGU0VUXQorCisJLyogTVNDMjogbkNTKDQsNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCWxkciAgICAgcjIsICA9Q0ZHX01TQzJfVkFMCisJc3RyICAgICByMiwgIFtyMSwgI01TQzJfT0ZGU0VUXQorCWxkciAgICAgcjIsICBbcjEsICNNU0MyX09GRlNFVF0KKworCS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKwkvKiBTdGVwIDJiOiBJbml0aWFsaXplIENhcmQgSW50ZXJmYWNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisJLyogTUVDUjogTWVtb3J5IEV4cGFuc2lvbiBDYXJkIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCWxkciAgICAgcjIsICA9Q0ZHX01FQ1JfVkFMCisJc3RyICAgICByMiwgIFtyMSwgI01FQ1JfT0ZGU0VUXQorCWxkcglyMiwJW3IxLCAjTUVDUl9PRkZTRVRdCisKKwkvKiBNQ01FTTA6IENhcmQgSW50ZXJmYWNlIHNsb3QgMCB0aW1pbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJbGRyICAgICByMiwgID1DRkdfTUNNRU0wX1ZBTAorCXN0ciAgICAgcjIsICBbcjEsICNNQ01FTTBfT0ZGU0VUXQorCWxkcglyMiwJW3IxLCAjTUNNRU0wX09GRlNFVF0KKworCS8qIE1DTUVNMTogQ2FyZCBJbnRlcmZhY2Ugc2xvdCAxIHRpbWluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwlsZHIgICAgIHIyLCAgPUNGR19NQ01FTTFfVkFMCisJc3RyICAgICByMiwgIFtyMSwgI01DTUVNMV9PRkZTRVRdCisJbGRyCXIyLAlbcjEsICNNQ01FTTFfT0ZGU0VUXQorCisJLyogTUNBVFQwOiBDYXJkIEludGVyZmFjZSBBdHRyaWJ1dGUgU3BhY2UgVGltaW5nLCBzbG90IDAgICAgICAgICAgICAqLworCWxkciAgICAgcjIsICA9Q0ZHX01DQVRUMF9WQUwKKwlzdHIgICAgIHIyLCAgW3IxLCAjTUNBVFQwX09GRlNFVF0KKwlsZHIJcjIsCVtyMSwgI01DQVRUMF9PRkZTRVRdCisKKwkvKiBNQ0FUVDE6IENhcmQgSW50ZXJmYWNlIEF0dHJpYnV0ZSBTcGFjZSBUaW1pbmcsIHNsb3QgMSAgICAgICAgICAgICovCisJbGRyICAgICByMiwgID1DRkdfTUNBVFQxX1ZBTAorCXN0ciAgICAgcjIsICBbcjEsICNNQ0FUVDFfT0ZGU0VUXQorCWxkcglyMiwJW3IxLCAjTUNBVFQxX09GRlNFVF0KKworCS8qIE1DSU8wOiBDYXJkIEludGVyZmFjZSBJL08gU3BhY2UgVGltaW5nLCBzbG90IDAgICAgICAgICAgICAgICAgICAgKi8KKwlsZHIgICAgIHIyLCAgPUNGR19NQ0lPMF9WQUwKKwlzdHIgICAgIHIyLCAgW3IxLCAjTUNJTzBfT0ZGU0VUXQorCWxkcglyMiwJW3IxLCAjTUNJTzBfT0ZGU0VUXQorCisJLyogTUNJTzE6IENhcmQgSW50ZXJmYWNlIEkvTyBTcGFjZSBUaW1pbmcsIHNsb3QgMSAgICAgICAgICAgICAgICAgICAqLworCWxkciAgICAgcjIsICA9Q0ZHX01DSU8xX1ZBTAorCXN0ciAgICAgcjIsICBbcjEsICNNQ0lPMV9PRkZTRVRdCisJbGRyCXIyLAlbcjEsICNNQ0lPMV9PRkZTRVRdCisKKwkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisJLyogU3RlcCAyYzogV3JpdGUgRkxZQ05GRyAgRklYTUU6IHdoYXQncyB0aGF0Pz8/ICAgICAgICAgICAgICAgICAgICAqLworCS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworCS8qIHRlc3QgaWYgd2UgcnVuIGZyb20gZmxhc2ggb3IgUkFNIC0gUkFNL0JESTogZG9uJ3Qgc2V0dXAgUkFNICAgICAgKi8KKwlhZHIJcjMsIG1lbV9pbml0CQkvKiByMCA8LSBjdXJyZW50IHBvc2l0aW9uIG9mIGNvZGUgICAqLworCWxkcglyMiwgPW1lbV9pbml0CisJY21wCXIzLCByMgkJCS8qIHNraXAgaW5pdCBpZiBpbiBwbGFjZSAgICAgICAgICAgICovCisJYmVxCWluaXRpcnFzCisKKworCS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKwkvKiBTdGVwIDJkOiBJbml0aWFsaXplIFRpbWluZyBmb3IgU3luYyBNZW1vcnkgKFNEQ0xLMCkgICAgICAgICAgICAgICovCisJLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisJLyogQmVmb3JlIGFjY2Vzc2luZyBNRFJFRlIgd2UgbmVlZCBhIHZhbGlkIERSSSBmaWVsZCwgc28gd2Ugc2V0ICAgICAqLworCS8qIHRoaXMgdG8gcG93ZXIgb24gZGVmYXVsdHMgKyBEUkkgZmllbGQuICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworCWxkciAJcjMsIAk9Q0ZHX01EUkVGUl9WQUwKKwlsZHIJcjIsCT0weEZGRgorCWFuZAlyMywJcjMsIHIyCisJbGRyCXI0LAk9MHgwM2NhNDAwMAorCW9ycglyNCwJcjQsICByMworCisJc3RyCXI0LAlbcjEsICNNRFJFRlJfT0ZGU0VUXQkvKiB3cml0ZSBiYWNrIE1EUkVGUiAgICAgICAgKi8KKwlsZHIgICAgIHI0LAlbcjEsICNNRFJFRlJfT0ZGU0VUXQorCisKKwkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisJLyogU3RlcCAzOiBJbml0aWFsaXplIFN5bmNocm9ub3VzIFN0YXRpYyBNZW1vcnkgKEZsYXNoL1BlcmlwaGVyYWxzKSAqLworCS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworCS8qIEluaXRpYWxpemUgU1hDTkZHIHJlZ2lzdGVyLiBBc3NlcnQgdGhlIGVuYWJsZSBiaXRzICAgICAgICAgICAgICAgKi8KKworCS8qIFdyaXRlIFNYTVJTIHRvIGNhdXNlIGFuIE1SUyBjb21tYW5kIHRvIGFsbCBlbmFibGVkIGJhbmtzIG9mICAgICAgKi8KKwkvKiBzeW5jaHJvbm91cyBzdGF0aWMgbWVtb3J5LiBOb3RlIHRoYXQgU1hMQ1IgbmVlZCBub3QgYmUgd3JpdHRlbiAgICovCisJLyogYXQgdGhpcyB0aW1lLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisJLyogRklYTUU6IHdlIHVzZSBhc3luYyBtb2RlIGZvciBub3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisKKwkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisJLyogU3RlcCA0OiBJbml0aWFsaXplIFNEUkFNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworCS8qIFN0ZXAgNGE6IGFzc2VydCBNRFJFRlI6Sz9SVU4gYW5kIGNvbmZpZ3VyZSAgICAgICAgICAgICAgICAgICAgICAgKi8KKwkvKiAgICAgICAgICBNRFJFRlI6SzFEQjIgYW5kIE1EUkVGUjpLMkRCMiBhcyBkZXNpcmVkLiAgICAgICAgICAgICAgICovCisKKwlsZHIJcjQsCT1DRkdfTURSRUZSX1ZBTAorCXN0cglyNCwJW3IxLCAjTURSRUZSX09GRlNFVF0JLyogd3JpdGUgYmFjayBNRFJFRlIgICAgICAgICovCisJbGRyCXI0LAlbcjEsICNNRFJFRlJfT0ZGU0VUXQorCisJLyogU3RlcCA0YjogZGUtYXNzZXJ0IE1EUkVGUjpTTEZSU0guICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisJYmljCXI0LAlyNCwgIyhNRFJFRlJfU0xGUlNIKQorCisJc3RyICAgICByNCwgICAgIFtyMSwgI01EUkVGUl9PRkZTRVRdICAgIC8qIHdyaXRlIGJhY2sgTURSRUZSICAgICAgICAqLworCWxkciAgICAgcjQsICAgICBbcjEsICNNRFJFRlJfT0ZGU0VUXQorCisKKwkvKiBTdGVwIDRjOiBhc3NlcnQgTURSRUZSOkUxUElOIGFuZCBFMFBJTyAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKwlvcnIJcjQsCXI0LAkjKE1EUkVGUl9FMVBJTnxNRFJFRlJfRTBQSU4pCisKKwlzdHIgICAgIHI0LCAgICAgW3IxLCAjTURSRUZSX09GRlNFVF0gICAgLyogd3JpdGUgYmFjayBNRFJFRlIgICAgICAgICovCisJbGRyICAgICByNCwgICAgIFtyMSwgI01EUkVGUl9PRkZTRVRdCisKKworCS8qIFN0ZXAgNGQ6IHdyaXRlIE1EQ05GRyB3aXRoIE1EQ05GRzpERXggZGVhc3NlcnRlZCAoc2V0IHRvIDApLCB0byAgKi8KKwkvKiAgICAgICAgICBjb25maWd1cmUgYnV0IG5vdCBlbmFibGUgZWFjaCBTRFJBTSBwYXJ0aXRpb24gcGFpci4gICAgICovCisKKwlsZHIJcjQsCT1DRkdfTURDTkZHX1ZBTAorCWJpYwlyNCwJcjQsCSMoTURDTkZHX0RFMHxNRENORkdfREUxKQorCisJc3RyICAgICByNCwgICAgIFtyMSwgI01EQ05GR19PRkZTRVRdCS8qIHdyaXRlIGJhY2sgTURDTkZHICAgICAgICAqLworCWxkciAgICAgcjQsICAgICBbcjEsICNNRENORkdfT0ZGU0VUXQorCisKKwkvKiBTdGVwIDRlOiBXYWl0IGZvciB0aGUgY2xvY2sgdG8gdGhlIFNEUkFNcyB0byBzdGFiaWxpemUsICAgICAgICAgICovCisJLyogICAgICAgICAgMTAwLi4yMDAgtXNlYy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisJbGRyIHIzLCA9T1NDUgkJCS8qIHJlc2V0IHRoZSBPUyBUaW1lciBDb3VudCB0byB6ZXJvICovCisJbW92IHIyLCAjMAorCXN0ciByMiwgW3IzXQorCWxkciByNCwgPTB4MzAwCQkJLyogcmVhbGx5IDB4MkUxIGlzIGFib3V0IDIwMHVzZWMsICAgKi8KKwkJCQkJLyogc28gMHgzMDAgc2hvdWxkIGJlIHBsZW50eSAgICAgICAgKi8KKzE6CisJbGRyIHIyLCBbcjNdCisJY21wIHI0LCByMgorCWJndCAxYgorCisKKwkvKiBTdGVwIDRmOiBUcmlnZ2VyIGEgbnVtYmVyICh1c3VhbGx5IDgpIHJlZnJlc2ggY3ljbGVzIGJ5ICAgICAgICAgICovCisJLyogICAgICAgICAgYXR0ZW1wdGluZyBub24tYnVyc3QgcmVhZCBvciB3cml0ZSBhY2Nlc3NlcyB0byBkaXNhYmxlZCAqLworCS8qICAgICAgICAgIFNEUkFNLCBhcyBjb21tb25seSBzcGVjaWZpZWQgaW4gdGhlIHBvd2VyIHVwIHNlcXVlbmNlICAgKi8KKwkvKiAgICAgICAgICBkb2N1bWVudGVkIGluIFNEUkFNIGRhdGEgc2hlZXRzLiBUaGUgYWRkcmVzcyhlcykgdXNlZCAgICovCisJLyogICAgICAgICAgZm9yIHRoaXMgcHVycG9zZSBtdXN0IG5vdCBiZSBjYWNoZWFibGUuICAgICAgICAgICAgICAgICAqLworCisJLyogICAgICAgICAgVGhlcmUgc2hvdWxkIDkgd3JpdGVzLCBzaW5jZSB0aGUgZmlyc3Qgd3JpdGUgZG9lc24ndCAgICAqLworCS8qICAgICAgICAgIHRyaWdnZXIgYSByZWZyZXNoIGN5Y2xlIG9uIFBYQTI1MC4gU2VlIEludGVsIFBYQTI1MCBhbmQgKi8KKwkvKiAgICAgICAgICBQWEEyMTAgUHJvY2Vzc29ycyBTcGVjaWZpY2F0aW9uIFVwZGF0ZSwgICAgICAgICAgICAgICAgICovCisJLyogICAgICAgICAgSmFuIDIwMDMsIEVycmF0YSAjMTE2LCBwYWdlIDMwLiAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisKKwlsZHIJcjMsCT1DRkdfRFJBTV9CQVNFCisJc3RyCXIyLCBbcjNdCisJc3RyCXIyLCBbcjNdCisJc3RyCXIyLCBbcjNdCisJc3RyCXIyLCBbcjNdCisJc3RyCXIyLCBbcjNdCisJc3RyCXIyLCBbcjNdCisJc3RyCXIyLCBbcjNdCisJc3RyCXIyLCBbcjNdCisJc3RyCXIyLCBbcjNdCisKKwkvKiBTdGVwIDRnOiBXcml0ZSBNRENORkcgd2l0aCBlbmFibGUgYml0cyBhc3NlcnRlZCAgICAgICAgICAgICAgICAgICovCisJLyogICAgICAgICAgKE1EQ05GRzpERXggc2V0IHRvIDEpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisJbGRyCXIzLCBbcjEsICNNRENORkdfT0ZGU0VUXQorCW9ycglyMywJcjMsCSMoTURDTkZHX0RFMHxNRENORkdfREUxKQorCXN0cglyMywgW3IxLCAjTURDTkZHX09GRlNFVF0KKworCS8qIFN0ZXAgNGg6IFdyaXRlIE1ETVJTLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworCWxkciAgICAgcjIsICA9Q0ZHX01ETVJTX1ZBTAorCXN0ciAgICAgcjIsICBbcjEsICNNRE1SU19PRkZTRVRdCisKKworCS8qIFdlIGFyZSBmaW5pc2hlZCB3aXRoIEludGVsJ3MgbWVtb3J5IGNvbnRyb2xsZXIgaW5pdGlhbGlzYXRpb24gICAgKi8KKworCS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKwkvKiBEaXNhYmxlIChtYXNrKSBhbGwgaW50ZXJydXB0cyBhdCBpbnRlcnJ1cHQgY29udHJvbGxlciAgICAgICAgICAgICovCisJLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitpbml0aXJxczoKKworCW1vdiAgICAgcjEsICMwCQkvKiBjbGVhciBpbnQuIGxldmVsIHJlZ2lzdGVyIChJUlEsIG5vdCBGSVEpICovCisJbGRyICAgICByMiwgID1JQ0xSCisJc3RyICAgICByMSwgIFtyMl0KKworCWxkciAgICAgcjIsICA9SUNNUgkvKiBtYXNrIGFsbCBpbnRlcnJ1cHRzIGF0IHRoZSBjb250cm9sbGVyICAgICovCisJc3RyICAgICByMSwgIFtyMl0KKworCisJLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCS8qIENsb2NrIGluaXRpYWxpc2F0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK2luaXRjbGtzOgorCisJLyogRGlzYWJsZSB0aGUgcGVyaXBoZXJhbCBjbG9ja3MsIGFuZCBzZXQgdGhlIGNvcmUgY2xvY2sgZnJlcXVlbmN5ICAqLworCS8qIChoYXJkLWNvZGluZyBhdCAzOTguMTJNSHogZm9yIG5vdykuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworCS8qIFR1cm4gT2ZmIEFMTCBvbi1jaGlwIHBlcmlwaGVyYWwgY2xvY2tzIGZvciByZS1jb25maWd1cmF0aW9uICAgICAgKi8KKwkvKiBOb3RlOiBTZWUgbGFiZWwgJ0VOQUJMRUNMS1MnIGZvciB0aGUgcmUtZW5hYmxpbmcgICAgICAgICAgICAgICAgICovCisJbGRyICAgICByMSwgID1DS0VOCisJbW92ICAgICByMiwgICMwCisJc3RyICAgICByMiwgIFtyMV0KKworCisJLyogZGVmYXVsdCB2YWx1ZSBpbiBjYXNlIG5vIHZhbGlkIHJvdGFyeSBzd2l0Y2ggc2V0dGluZyBpcyBmb3VuZCAgICAqLworCWxkciAgICAgcjIsID0oQ0NDUl9MMjd8Q0NDUl9NMnxDQ0NSX04xMCkgIC8qIERFRkFVTFQ6IHsyMDAvMjAwLzEwMH0gKi8KKworCS8qIC4uLiBhbmQgd3JpdGUgdGhlIGNvcmUgY2xvY2sgY29uZmlnIHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgKi8KKwlsZHIgICAgIHIxLCAgPUNDQ1IKKwlzdHIgICAgIHIyLCAgW3IxXQorCisJLyogZW5hYmxlIHRoZSAzMktoeiBvc2NpbGxhdG9yIGZvciBSVEMgYW5kIFBvd2VyTWFuYWdlciAgICAgICAgICAgICAqLworLyoKKwlsZHIgICAgIHIxLCAgPU9TQ0MKKwltb3YgICAgIHIyLCAgI09TQ0NfT09OCisJc3RyICAgICByMiwgIFtyMV0KKyovCisJLyogTk9URTogIHNwaW4gaGVyZSB1bnRpbCBPU0NDLk9PSyBnZXQgc2V0LCBtZWFuaW5nIHRoZSBQTEwgICAgICAgICAqLworCS8qIGhhcyBzZXR0bGVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKzYwOgorCWxkciAgICAgcjIsIFtyMV0KKwlhbmRzICAgIHIyLCByMiwgIzEKKwliZXEgICAgIDYwYgorCisJLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKwkvKiBTYXZlIFNEUkFNIHNpemUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJbGRyCXIxLCA9RFJBTV9TSVpFCisJc3RyCXI4LCBbcjFdCisKKwkvKiBJbnRlcnJ1cHQgaW5pdDogTWFzayBhbGwgaW50ZXJydXB0cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJbGRyCXIwLCA9SUNNUgkJCS8qIGVuYWJsZSBubyBzb3VyY2VzICAgICAgICAqLworCW1vdglyMSwgIzAKKwlzdHIJcjEsIFtyMF0KKworCS8qIEZJWE1FICovCisKKyNpZm5kZWYgREVCVUcKKwkvKkRpc2FibGUgc29mdHdhcmUgYW5kIGRhdGEgYnJlYWtwb2ludHMgKi8KKwltb3YJcjAsIzAKKwltY3IJcDE1LDAscjAsYzE0LGM4LDAgIC8qIGliY3IwICovCisJbWNyCXAxNSwwLHIwLGMxNCxjOSwwICAvKiBpYmNyMSAqLworCW1jcglwMTUsMCxyMCxjMTQsYzQsMCAgLyogZGJjb24gKi8KKworCS8qRW5hYmxlIGFsbCBkZWJ1ZyBmdW5jdGlvbmFsaXR5ICovCisJbW92CXIwLCMweDgwMDAwMDAwCisJbWNyCXAxNCwwLHIwLGMxMCxjMCwwICAvKiBkY3NyICovCisjZW5kaWYKKworCS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKwkvKiBFbmQgbG93bGV2ZWxfaW5pdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK2VuZGxvd2xldmVsX2luaXQ6CisKKyAgICBtb3YgICAgIHBjLCBscgo=