LyoKICogTm90ZXBhZAogKiBQb3J0dWd1ZXNlIExhbmd1YWdlIFN1cHBvcnQKICoKICogQ29weXJpZ2h0IDE5OTkgTWFyY2VsIEJhdXIgPGFsdmVzQGNvcnJlaW9uZXQuY29tLmJyPgogKiBDb3B5cmlnaHQgMjAwMiBTeWx2YWluIFBldHJlb2xsZSA8c3BldHJlb2xsZUB5YWhvby5mcj4KICogQ29weXJpZ2h0IDIwMDMgTWFyY2VsbyBEdWFydGUKICogQ29weXJpZ2h0IDIwMDQgQW3pcmljbyBKb3PpIE1lbG8KICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiAqLwoKTEFOR1VBR0UgTEFOR19QT1JUVUdVRVNFLCBTVUJMQU5HX1BPUlRVR1VFU0VfQlJBWklMSUFOCgpNQUlOX01FTlUgTUVOVQp7CiBQT1BVUCAiJkFycXVpdm8iIHsKICBNRU5VSVRFTSAiJk5vdm8uLi4iLAkJQ01EX05FVwogIE1FTlVJVEVNICJBJmJyaXIiLAkJQ01EX09QRU4KICBNRU5VSVRFTSAiJlNhbHZhciIsCQlDTURfU0FWRQogIE1FTlVJVEVNICJTYWx2YXIgJmNvbW8uLi4iLAlDTURfU0FWRV9BUwogIE1FTlVJVEVNIFNFUEFSQVRPUgogIE1FTlVJVEVNICImSW1wcmltaXIiLAkJQ01EX1BSSU5UCiAgTUVOVUlURU0gIkMmb25maWd1cmFyIHDhZ2luYS4uLiIsCUNNRF9QQUdFX1NFVFVQCiAgTUVOVUlURU0gIkNvbmZpZ3VyYXIgaSZtcHJlc3NvcmEuLi4iLCBDTURfUFJJTlRFUl9TRVRVUAogIE1FTlVJVEVNIFNFUEFSQVRPUgogIE1FTlVJVEVNICJTYWkmciIsCQlDTURfRVhJVAogfQpQT1BVUCAiJkVkaXRhciIgewogIE1FTlVJVEVNICImRGVzZmF6ZXJcdEN0cmwrWiIsIENNRF9VTkRPCiAgTUVOVUlURU0gU0VQQVJBVE9SCiAgTUVOVUlURU0gIiZSZWNvcnRhclx0Q3RybCtYIiwJQ01EX0NVVAogIE1FTlVJVEVNICImQ29waWFyXHRDdHJsK0MiLAlDTURfQ09QWQogIE1FTlVJVEVNICJDJm9sYXJcdEN0cmwrViIsCUNNRF9QQVNURQogIE1FTlVJVEVNICJFJnhjbHVpclx0RGVsIiwJQ01EX0RFTEVURQogIE1FTlVJVEVNIFNFUEFSQVRPUgogIE1FTlVJVEVNICJTZWxlY2lvbmFyICZ0dWRvIiwJQ01EX1NFTEVDVF9BTEwKICBNRU5VSVRFTSAiJkRhdGEvSG9yYVx0RjUiLAlDTURfVElNRV9EQVRFCiAgTUVOVUlURU0gU0VQQVJBVE9SCiAgTUVOVUlURU0gIiZRdWVicmFyIGF1dG9t4XRpY2EgZGUgbGluaGEiLAlDTURfV1JBUAogIE1FTlVJVEVNICImRm9udGUuLi4iLCAgICAgICAgICBDTURfRk9OVAogfQpQT1BVUCAiJlBlc3F1aXNhIiB7CiAgTUVOVUlURU0gIiZMb2NhbGl6YXIuLi4iLAlDTURfU0VBUkNICiAgTUVOVUlURU0gIkxvY2FsaXphciAmcHLzeGltYVx0RjMiLAlDTURfU0VBUkNIX05FWFQKIH0KUE9QVVAgIiZBanVkYSIgewogIE1FTlVJVEVNICImQ29udGX6ZG8iLAkJQ01EX0hFTFBfQ09OVEVOVFMKICBNRU5VSVRFTSAiJlByb2N1cmFyLi4uIiwJQ01EX0hFTFBfU0VBUkNICiAgTUVOVUlURU0gIiZBanVkYSBuYSBhanVkYSIsCUNNRF9IRUxQX09OX0hFTFAKICBNRU5VSVRFTSBTRVBBUkFUT1IKICBQT1BVUCAiJkluZm9ybWHn9WVzLi4uIiB7CiAgIE1FTlVJVEVNICImTGljZW7nYSIsCQlDTURfTElDRU5TRQogICBNRU5VSVRFTSAiJlNFTSBHQVJBTlRJQSIsCUNNRF9OT19XQVJSQU5UWQogICBNRU5VSVRFTSAiJlNvYnJlIG8gV2luZSIsCUNNRF9BQk9VVF9XSU5FCiAgfQogfQp9CgpMQU5HVUFHRSBMQU5HX1BPUlRVR1VFU0UsIFNVQkxBTkdfUE9SVFVHVUVTRQoKTUFJTl9NRU5VIE1FTlUKewogUE9QVVAgIiZGaWNoZWlybyIgewogIE1FTlVJVEVNICImTm92by4uLiIsCQlDTURfTkVXCiAgTUVOVUlURU0gIkEmYnJpciIsCQlDTURfT1BFTgogIE1FTlVJVEVNICImR3JhdmFyIiwJCUNNRF9TQVZFCiAgTUVOVUlURU0gImdyYXZhciAmY29tby4uLiIsCUNNRF9TQVZFX0FTCiAgTUVOVUlURU0gU0VQQVJBVE9SCiAgTUVOVUlURU0gIiZJbXByaW1pciIsCQlDTURfUFJJTlQKICBNRU5VSVRFTSAiQyZvbmZpZ3VyYXIgcOFnaW5hLi4uIiwJQ01EX1BBR0VfU0VUVVAKICBNRU5VSVRFTSAiQ29uZmlndXJhciBpJm1wcmVzc29yYS4uLiIsIENNRF9QUklOVEVSX1NFVFVQCiAgTUVOVUlURU0gU0VQQVJBVE9SCiAgTUVOVUlURU0gIlNhaSZyIiwJCUNNRF9FWElUCiB9ClBPUFVQICImRWRpdGFyIiB7CiAgTUVOVUlURU0gIiZEZXNmYXplclx0Q3RybCtaIiwgQ01EX1VORE8KICBNRU5VSVRFTSBTRVBBUkFUT1IKICBNRU5VSVRFTSAiJlJlY29ydGFyXHRDdHJsK1giLAlDTURfQ1VUCiAgTUVOVUlURU0gIiZDb3BpYXJcdEN0cmwrQyIsCUNNRF9DT1BZCiAgTUVOVUlURU0gIkMmb2xhclx0Q3RybCtWIiwJQ01EX1BBU1RFCiAgTUVOVUlURU0gIkUmeGNsdWlyXHREZWwiLAlDTURfREVMRVRFCiAgTUVOVUlURU0gU0VQQVJBVE9SCiAgTUVOVUlURU0gIlNlbGVjaW9uYXIgJnR1ZG8iLAlDTURfU0VMRUNUX0FMTAogIE1FTlVJVEVNICImRGF0YS9Ib3JhXHRGNSIsCUNNRF9USU1FX0RBVEUKICBNRU5VSVRFTSBTRVBBUkFUT1IKICBNRU5VSVRFTSAiJlF1ZWJyYXIgYXV0b23hdGljYSBkZSBsaW5oYSIsCUNNRF9XUkFQCiAgTUVOVUlURU0gIiZUaXBvIGRlIExldHJhLi4uIiwgICAgICAgICAgQ01EX0ZPTlQKIH0KUE9QVVAgIiZQZXNxdWlzYSIgewogIE1FTlVJVEVNICImTG9jYWxpemFyLi4uIiwJQ01EX1NFQVJDSAogIE1FTlVJVEVNICJMb2NhbGl6YXIgJnBy83hpbWFcdEYzIiwJQ01EX1NFQVJDSF9ORVhUCiB9ClBPUFVQICImQWp1ZGEiIHsKICBNRU5VSVRFTSAiJkNvbnRl+mRvIiwJCUNNRF9IRUxQX0NPTlRFTlRTCiAgTUVOVUlURU0gIiZQcm9jdXJhci4uLiIsCUNNRF9IRUxQX1NFQVJDSAogIE1FTlVJVEVNICImQWp1ZGEgbmEgYWp1ZGEiLAlDTURfSEVMUF9PTl9IRUxQCiAgTUVOVUlURU0gU0VQQVJBVE9SCiAgUE9QVVAgIiZJbmZvcm1h5/Vlcy4uLiIgewogICBNRU5VSVRFTSAiJkxpY2Vu52EiLAkJQ01EX0xJQ0VOU0UKICAgTUVOVUlURU0gIiZTRU0gR0FSQU5USUEiLAlDTURfTk9fV0FSUkFOVFkKICAgTUVOVUlURU0gIiZBY2VyY2EgZG8gV2luZSIsCUNNRF9BQk9VVF9XSU5FCiAgfQogfQp9CgoKLyogRGlhbG9nIGBQYWdlIHNldHVwJyAqLwoKTEFOR1VBR0UgTEFOR19QT1JUVUdVRVNFLCBTVUJMQU5HX05FVVRSQUwKCkRJQUxPR19QQUdFU0VUVVAgRElBTE9HIDAsIDAsIDIyNSwgOTUKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkZPTlQgOCwgIk1TIFNoZWxsIERsZyIKQ0FQVElPTiAiQ29uZmlndXJhciBw4WdpbmEiCnsKTFRFWFQgICAgIiZDYWJl52FsaG86IiwgIDB4MTQwLCAgIDEwLCAwNywgNDAsIDE1CkVESVRURVhUICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTQxLCAgICAgICA2MCwgMDUsMTEwLCAxMiwgV1NfQk9SREVSIHwgV1NfVEFCU1RPUApMVEVYVCAgICAiJlJvZGFw6ToiLCAgMHgxNDIsICAgMTAsIDI0LCA0MCwgMTUKRURJVFRFWFQgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNDMsICAgICAgIDYwLCAyMiwxMTAsIDEyLCBXU19CT1JERVIgfCBXU19UQUJTVE9QCgpHUk9VUEJPWCAiJk1hcmdlbnM6IiwgICAgICAweDE0NCwgICAgIDEwLCA0MywxNjAsIDQ1CkxURVhUICAgICImRXNxdWVyZGE6IiwgICAgICAgIDB4MTQ1LCAgIDIwLCA1NSwgMzAsIDEwLCBXU19DSElMRApFRElUVEVYVCAvKlNUUklOR19QQUdFU0VUVVBfTEVGVFZBTFVFLCovICAgMHgxNDcsICAgICAgIDUwLCA1NSwgMzUsIDExLCBXU19DSElMRCB8IFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AKTFRFWFQgICAgIiZTdXBlcmlvcjoiLCAgICAgICAgIDB4MTQ4LCAgICAyMCwgNzMsIDMwLCAxMCwgV1NfQ0hJTEQKRURJVFRFWFQgLypTVFJJTkdfUEFHRVNFVFVQX1RPUFZBTFVFLCovICAgIDB4MTRBLCAgICAgICAgNTAsIDczLCAzNSwgMTEsIFdTX0NISUxEIHwgV1NfQk9SREVSIHwgV1NfVEFCU1RPUApMVEVYVCAgICAiJkRpcmVpdGE6IiwgICAgICAgMHgxNEIsIDEwMCwgNTUsIDMwLCAxMCwgV1NfQ0hJTEQKRURJVFRFWFQgLypTVFJJTkdfUEFHRVNFVFVQX1JJR0hUVkFMVUUsKi8gIDB4MTRELCAgICAgMTMwLCA1NSwgMzUsIDExLCBXU19DSElMRCB8IFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AKTFRFWFQgICAgIiZJbmZlcmlvcjoiLCAgICAgIDB4MTRFLDEwMCwgNzMsIDMwLCAxMCwgV1NfQ0hJTEQKRURJVFRFWFQgLypTVFJJTkdfUEFHRVNFVFVQX0JPVFRPTVZBTFVFLCovIDB4MTUwLCAgICAxMzAsIDczLCAzNSwgMTEsIFdTX0NISUxEIHwgV1NfQk9SREVSIHwgV1NfVEFCU1RPUAoKREVGUFVTSEJVVFRPTiAiT0siLCAgICAgICAgIDB4MTUxLCAgICAgICAgICAgICAgICAgICAxODAsICAzLCA0MCwgMTUsIFdTX1RBQlNUT1AKUFVTSEJVVFRPTiAgICAiQ2FuY2VsYXIiLCAgICAgMHgxNTIsICAgICAgICAgICAgICAgMTgwLCAyMSwgNDAsIDE1LCBXU19UQUJTVE9QClBVU0hCVVRUT04gICAgIiZBanVkYSIsICAgICAgIDB4MTUzLCAgICAgICAgICAgICAgICAxODAsIDM5LCA0MCwgMTUsIFdTX1RBQlNUT1AKfQoKCkxBTkdVQUdFIExBTkdfUE9SVFVHVUVTRSwgU1VCTEFOR19QT1JUVUdVRVNFX0JSQVpJTElBTgoKU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUKewpTVFJJTkdfUEFHRVNFVFVQX0hFQURFUlZBTFVFLAkiJm4iICAgICAgICAvKiBGSVhNRSAqLwpTVFJJTkdfUEFHRVNFVFVQX0ZPT1RFUlZBTFVFLAkiUOFnaW5hICZzIiAgIC8qIEZJWE1FICovClNUUklOR19QQUdFU0VUVVBfTEVGVFZBTFVFLAkJIjIwIG1tIiAgICAgLyogRklYTUUgKi8KU1RSSU5HX1BBR0VTRVRVUF9SSUdIVFZBTFVFLAkiMjAgbW0iICAgICAvKiBGSVhNRSAqLwpTVFJJTkdfUEFHRVNFVFVQX1RPUFZBTFVFLAkJIjI1IG1tIiAgICAgLyogRklYTUUgKi8KU1RSSU5HX1BBR0VTRVRVUF9CT1RUT01WQUxVRSwJIjI1IG1tIiAgICAgLyogRklYTUUgKi8KClNUUklOR19OT1RFUEFELAkJCQkJIk5vdGVwYWQiClNUUklOR19FUlJPUiwJCQkJCSJFUlJPIgpTVFJJTkdfV0FSTklORywJCQkJCSJBVklTTyIKU1RSSU5HX0lORk8sCQkJCQkiSW5mb3JtYefjbyIKClNUUklOR19VTlRJVExFRCwJCQkJIihzZW0gbm9tZSkiCgpTVFJJTkdfQUxMX0ZJTEVTLAkJCQkiVG9kb3Mgb3MgYXJxdWl2b3MgKCouKikiClNUUklOR19URVhUX0ZJTEVTX1RYVCwJCQkiQXJxdWl2b3MgdGV4dG8gKCoudHh0KSIKClNUUklOR19UT09MQVJHRSwJCQkJIkFycXVpdm8gJyVzJyDpIG11aXRvIGxvbmdvIHBhcmEgbyBub3RlcGFkLlxuIFwKUG9yIGZhdm9yIHVzZSB1bSBlZGl0b3IgZGlmZXJlbnRlLiIKU1RSSU5HX05PVEVYVCwJCQkJCSJWb2PqIG7jbyBkaWdpdG91IG5lbmh1bSB0ZXh0by4gXApcblBvciBmYXZvciBkaWdpdGUgYWxndW1hIGNvaXNhIGUgdGVudGUgbm92YW1lbnRlIgpTVFJJTkdfRE9FU05PVEVYSVNULAkJCQkiQXJxdWl2byAnJXMnXG5u428gZXhpc3RlXG5cbiBcClZvY+ogZGVzZWphIGNyaWFyIHVtIG5vdm8gYXJxdWl2bz8iClNUUklOR19OT1RTQVZFRCwJCQkJIkFycXVpdm8gJyVzJ1xuZm9pIG1vZGlmaWNhZG9cblxuIFwKR29zdGFyaWEgZGUgc2FsdmFyIGFzIGFsdGVyYefVZXM/IgpTVFJJTkdfTk9URk9VTkQsCQkJCQkiJyVzJyBu428gcG9kZSBzZXIgZW5jb250cmFkby4iClNUUklOR19PVVRfT0ZfTUVNT1JZLAkJCSJO428gaOEgbWVt83JpYSBzdWZpY2llbnRlIHBhcmEgY29tcGxldGFyIGVzc2EgXAp0YXJlZmEuIFxuRmVjaGUgdW1hIG91IG1haXMgYXBsaWNh5/VlcyBwYXJhIGF1bWVudGFyIGEgcXVhbnRpZGFkZSBkZSBtZW3zcmlhIGxpdnJlLiIKfQoKTEFOR1VBR0UgTEFOR19QT1JUVUdVRVNFLCBTVUJMQU5HX1BPUlRVR1VFU0UKClNUUklOR1RBQkxFIERJU0NBUkRBQkxFCnsKIFNUUklOR19QQUdFU0VUVVBfSEVBREVSVkFMVUUsCSImbiIgICAgICAgIC8qIEZJWE1FICovCiBTVFJJTkdfUEFHRVNFVFVQX0ZPT1RFUlZBTFVFLAkiUOFnaW5hICZzIiAvKiBGSVhNRSAqLwogU1RSSU5HX1BBR0VTRVRVUF9MRUZUVkFMVUUsCSIyMCBtbSIgICAgIC8qIEZJWE1FICovCiBTVFJJTkdfUEFHRVNFVFVQX1JJR0hUVkFMVUUsCSIyMCBtbSIgICAgIC8qIEZJWE1FICovCiBTVFJJTkdfUEFHRVNFVFVQX1RPUFZBTFVFLAkiMjUgbW0iICAgICAvKiBGSVhNRSAqLwogU1RSSU5HX1BBR0VTRVRVUF9CT1RUT01WQUxVRSwJIjI1IG1tIiAgICAgLyogRklYTUUgKi8KCiBTVFJJTkdfTk9URVBBRCwJCSJOb3RlcGFkIgogU1RSSU5HX0VSUk9SLAkJCSJFUlJPIgogU1RSSU5HX1dBUk5JTkcsCQkiQVZJU08iCiBTVFJJTkdfSU5GTywJCQkiSW5mb3JtYefjbyIKCiBTVFJJTkdfVU5USVRMRUQsCQkiKHNlbSBub21lKSIKCiBTVFJJTkdfQUxMX0ZJTEVTLAkJIlRvZG9zIG9zIGFycXVpdm9zICgqLiopIgogU1RSSU5HX1RFWFRfRklMRVNfVFhULAkJIkZpY2hlaXJvcyBkZSB0ZXh0byAoKi50eHQpIgoKIFNUUklOR19UT09MQVJHRSwJCSJGaWNoZWlyb3MgJyVzJyDpIG11aXRvIGxvbmdvIHBhcmEgbyBub3RlcGFkLlxuIFwKIFBvciBmYXZvciB1c2UgdW0gZWRpdG9yIGRpZmVyZW50ZS4iCiBTVFJJTkdfTk9URVhULAkJCSJO428gZGlnaXRvdSBuZW5odW0gdGV4dG8uIFwKIFxuUG9yIGZhdm9yIGRpZ2l0ZSBhbGd1bWEgY29pc2EgZSB0ZW50ZSBub3ZhbWVudGUiCiBTVFJJTkdfRE9FU05PVEVYSVNULAkJIkZpY2hlaXJvICclcydcbm7jbyBleGlzdGVcblxuIFwKRGVzZWphIGNyaWFyIHVtIG5vdm8gZmljaGVpcm8/IgogU1RSSU5HX05PVFNBVkVELAkJIkZpY2hlaXJvICclcydcbmZvaSBtb2RpZmljYWRvXG5cbiBcCkdvc3RhcmlhIGRlIGdyYXZhciBhcyBhbHRlcmHn1WVzPyIKIFNUUklOR19OT1RGT1VORCwJCSInJXMnIG7jbyBwb2RlIHNlciBlbmNvbnRyYWRvLiIKIFNUUklOR19PVVRfT0ZfTUVNT1JZLAkJIk7jbyBo4SBtZW3zcmlhIHN1ZmljaWVudGUgcGFyYSBjb21wbGV0YXIgZXN0YSBcCnRhcmVmYS4gXG5GZWNoZSB1bWEgb3UgbWFpcyBhcGxpY2Hn9WVzIHBhcmEgYXVtZW50YXIgYSBxdWFudGlkYWRlIGRlIG1lbfNyaWEgbGl2cmUuIgp9Cg==