This file is encoded. To restore it, run:
./decode
To re-encode after decoding, run ./encode. Both scripts are
idempotent — running either when the file is already in that state is a
no-op, so you can run them as many times as you want without corrupting
anything. Encoded and decoded are the only two possible states.
IyBBZGRpdAoKQSBuYXRpdmUgaU9TIG11c2ljIHBsYXllciBiYWNrZWQgYnkgR29vZ2xlIERyaXZlLCBPbmVEcml2ZSwgYW5kIGxvY2FsIGlQaG9uZSBzdG9yYWdlLiBCcm93c2UgeW91ciBjbG91ZCBmb2xkZXJzIGFzIGFsYnVtcywgaW1wb3J0IGF1ZGlvIGZyb20geW91ciBkZXZpY2UsIGJ1aWxkIGEgcGVyc29uYWwgbGlicmFyeSwgYW5kIHN0cmVhbSB3aXRoIGZ1bGwgcGxheWJhY2sgY29udHJvbHMg4oCUIHdpdGhvdXQgZG93bmxvYWRpbmcgeW91ciBlbnRpcmUgY29sbGVjdGlvbi4KCiMjIEZlYXR1cmVzCgotICoqRHVhbCBsaWJyYXJ5OiBDbG91ZCArIGlQaG9uZSBTdG9yYWdlKiog4oCUIFRvZ2dsZSBiZXR3ZWVuIHlvdXIgY2xvdWQgbGlicmFyeSBhbmQgbG9jYWxseSBpbXBvcnRlZCBtdXNpYyBmcm9tIHRoZSBuYXYgYmFyIGRyb3Bkb3duCi0gKipHb29nbGUgRHJpdmUgYW5kIE9uZURyaXZlIGJhY2tlbmRzKiog4oCUIFNpZ24gaW4gd2l0aCBHb29nbGUgb3IgTWljcm9zb2Z0OyBlYWNoIGFjY291bnQncyBjbG91ZCBkcml2ZSBiZWNvbWVzIGEgbXVzaWMgbGlicmFyeSB3aXRoIHRoZSBzYW1lIGZlYXR1cmUgc2V0IChicm93c2UsIHN0cmVhbSwgdXBsb2FkLCBzaGFyZSkuIE9uZURyaXZlIGFsYnVtcyBza2lwIEdvb2dsZS1vbmx5IGZlYXR1cmVzIChjaGF0LCBzdGFycmVkIGZvbGRlcnMsIGNvbW1lbnRlciByb2xlKQotICoqTXVsdGktYWNjb3VudCwgbXVsdGktcHJvdmlkZXIgc2lnbi1pbioqIOKAlCBHb29nbGUgYW5kIE1pY3Jvc29mdCBhY2NvdW50cyBsaXZlIGluIG9uZSBhY2NvdW50IHN3aXRjaGVyOyBlYWNoIGFjY291bnQgaGFzIGl0cyBvd24gaXNvbGF0ZWQgbGlicmFyeSBhbmQgZGF0YQotICoqWW91ciBjbG91ZCBhcyB5b3VyIG11c2ljIGxpYnJhcnkqKiDigJQgQWRkIGFueSBmb2xkZXIgKG93bmVkIG9yIHNoYXJlZCkgYXMgYW4gYWxidW0sIG9yIGNyZWF0ZSBuZXcgYWxidW1zIGRpcmVjdGx5IGZyb20gdGhlIGFwcAotICoqaVBob25lIFN0b3JhZ2UgbGlicmFyeSoqIOKAlCBJbXBvcnQgYXVkaW8gZmlsZXMgb3IgZm9sZGVycyBkaXJlY3RseSBmcm9tIHlvdXIgZGV2aWNlOyBmaWxlcyBhcmUgY29waWVkIGludG8gdGhlIGFwcCBmb3IgcGVybWFuZW50IG9mZmxpbmUgYWNjZXNzCi0gKipTdHJlYW1pbmcgd2l0aCBzbWFydCBjYWNoaW5nKiog4oCUIENsb3VkIHRyYWNrcyBzdHJlYW0gb24gZGVtYW5kIGFuZCBjYWNoZSBsb2NhbGx5OyB1cGNvbWluZyB0cmFja3MgYXJlIHByZWZldGNoZWQgZm9yIGdhcGxlc3MgcGxheWJhY2sKLSAqKkdhcGxlc3MgcGxheWJhY2sqKiDigJQgU2VhbWxlc3MgdHJhbnNpdGlvbnMgYmV0d2VlbiB0cmFja3Mgd2l0aCBubyBnYXAsIHVzaW5nIHByZS1zY2hlZHVsZWQgYXVkaW8gc2VnbWVudHMgdmlhIEFWQXVkaW9FbmdpbmUKLSAqKkZ1bGwgcGxheWJhY2sgY29udHJvbHMqKiDigJQgUGxheS9wYXVzZSwgc2tpcCwgc2h1ZmZsZSwgcmVwZWF0LCBzY3J1YmJpbmcsIGFuZCBxdWV1ZSBtYW5hZ2VtZW50IGZyb20gYm90aCB0aGUgaW4tYXBwIHBsYXllciBhbmQgbWluaSBwbGF5ZXIgYmFyCi0gKipDcm9zcy1saWJyYXJ5IHF1ZXVlaW5nKiog4oCUIFF1ZXVlIGFuZCBwbGF5IHRyYWNrcyBmcm9tIGNsb3VkIGFuZCBpUGhvbmUgU3RvcmFnZSBsaWJyYXJpZXMgc2ltdWx0YW5lb3VzbHkKLSAqKkxvY2sgc2NyZWVuICYgQ29udHJvbCBDZW50ZXIqKiDigJQgQmFja2dyb3VuZCBhdWRpbyB3aXRoIE5vdyBQbGF5aW5nIGNvbnRyb2xzIGFuZCBhbGJ1bSBhcnR3b3JrCi0gKipMaXZlIEVRIHZpc3VhbGl6ZXIqKiDigJQgU3dpcGUgbGVmdCBvbiB0aGUgYWxidW0gY292ZXIgaW4gZnVsbCBwbGF5ZXIgbW9kZSB0byBzZWUgYSByZWFsLXRpbWUgZnJlcXVlbmN5IHNwZWN0cnVtIGFuYWx5emVyICgyMCBIeuKAkzIwIGtIeiwgcG93ZXJlZCBieSBBVkF1ZGlvRW5naW5lICsgQWNjZWxlcmF0ZSBGRlQpCi0gKipBbGJ1bSBhcnQqKiDigJQgU2V0IGNvdmVyIGltYWdlcyBmcm9tIHlvdXIgcGhvdG8gbGlicmFyeSBvciBmaWxlcywgd2l0aCBjcm9wcGluZzsgYXJ0d29yayBkaXNwbGF5cyBpbiB0aGUgbGlicmFyeSwgcGxheWVyLCBhbmQgbG9jayBzY3JlZW4KLSAqKkNvbGxhYm9yYXRpdmUgdHJhY2sgb3JkZXJpbmcqKiDigJQgRWRpdG9ycyBjYW4gcmVvcmRlciB0cmFja3MgYW5kIG9yZ2FuaXplIHdpdGggZGlzYyBtYXJrZXJzOyBvcmRlcmluZyBpcyBzdG9yZWQgYXMgYC5hZGRpdC1kYXRhYCBpbiB0aGUgY2xvdWQgZm9sZGVyIHNvIGFsbCB1c2VycyBzZWUgdGhlIHNhbWUgbGF5b3V0Ci0gKipTaGFyaW5nICYgcGVybWlzc2lvbnMqKiDigJQgVmlldyBhbmQgbWFuYWdlIGNsb3VkIGZvbGRlciBwZXJtaXNzaW9ucyBkaXJlY3RseSBpbiB0aGUgYXBwIOKAlCBhZGQgcGVvcGxlLCBjaGFuZ2Ugcm9sZXMsIHRvZ2dsZSBsaW5rIHNoYXJpbmcgKEdvb2dsZSBEcml2ZSBzdXBwb3J0cyB2aWV3ZXIvY29tbWVudGVyL2VkaXRvcjsgT25lRHJpdmUgaXMgdmlld2VyL2VkaXRvcikKLSAqKkdyb3VwIGNoYXQqKiDigJQgUmVhbC10aW1lIHBlci1hbGJ1bSBtZXNzYWdpbmcgdmlhIEdvb2dsZSBEcml2ZSBjb21tZW50cywgd2l0aCBsaXF1aWQgZ2xhc3MgVUksIG1lbWJlciBhdmF0YXJzLCBhbmQgaW5saW5lIG5hdmlnYXRpb24gdG8gc2hhcmluZyBzZXR0aW5ncyAoR29vZ2xlIERyaXZlIGFsYnVtcyBvbmx5IOKAlCB0aGUgTWljcm9zb2Z0IEdyYXBoIEFQSSBoYXMgbm8gY29tbWVudHMgZXF1aXZhbGVudCkKLSAqKkxpYnJhcnkgbW9kZXMqKiDigJQgR3JpZCBvciBsaXN0IGxheW91dCAoU2V0dGluZ3Mg4oaSIExpYnJhcnkpLCB3aXRoIGRyYWctdG8tYXJyYW5nZSBhbGJ1bSBvcmRlcmluZyBhbmQgc2VhcmNoCi0gKipUcmFjayBzcGxpdHRpbmcqKiDigJQgQ3V0IG9uZSBsb25nIGZpbGUgaW50byBzZXBhcmF0ZSB0cmFja3MsIHdpdGggd2F2ZWZvcm0tYXNzaXN0ZWQgc3BsaXQgcG9pbnRzCi0gKipCdWcgcmVwb3J0cyoqIOKAlCAiUGxzIHJlcG9ydCBidWdzIiBpbiB0aGUgYWNjb3VudCBtZW51IG1haWxzIGZlZWRiYWNrIHdpdGggdGhlIGJ1aWxkIG51bWJlciBhbmQgZGV2aWNlIGF0dGFjaGVkCi0gKipUcmFjayBtYW5hZ2VtZW50Kiog4oCUIFBlci10cmFjayBlbGxpcHNpcyBtZW51IHdpdGggZmlsZSBpbmZvIChkYXRlIG1vZGlmaWVkLCBmaWxlIHR5cGUpLCBkb3dubG9hZC9zaGFyZSB2aWEgaU9TIHNoYXJlIHNoZWV0LCBhbmQgb2ZmbGluZSBhY2Nlc3MgdG9nZ2xlCi0gKipBbGJ1bSBkb3dubG9hZCoqIOKAlCBEb3dubG9hZCBhbiBlbnRpcmUgYWxidW0gYXMgYSB6aXAgZmlsZSB2aWEgdGhlIGlPUyBzaGFyZSBzaGVldAotICoqQnJvYWQgZm9ybWF0IHN1cHBvcnQqKiDigJQgUGxheXMgTVAzLCBNNEEsIFdBViwgQUFDLCBBSUZGLCBGTEFDLCBhbmQgbW9yZTsgYXV0b21hdGljYWxseSBjb252ZXJ0cyBpbmNvbXBhdGlibGUgZm9ybWF0cyB1c2luZyBBVkFzc2V0RXhwb3J0U2Vzc2lvbi9BVkFzc2V0UmVhZGVyIGZhbGxiYWNrcwotICoqVGhlbWluZyoqIOKAlCBDaG9vc2UgZnJvbSBhIHBhbGV0dGUgb2YgYWNjZW50IGNvbG9ycwotICoqQXV0by1zeW5jKiog4oCUIEFsYnVtIGNvbnRlbnRzIHN5bmMgZnJvbSB0aGUgY2xvdWQgZWFjaCB0aW1lIHlvdSBvcGVuIHRoZW0KCiMjIFJlcXVpcmVtZW50cwoKLSBpT1MgMjYuMisKLSBYY29kZSAyNisKLSBBbiBBcHBsZSBJRCBmb3IgY29kZSBzaWduaW5nIChmcmVlIEFwcGxlIERldmVsb3BlciBhY2NvdW50IGlzIGZpbmUg4oCUIG5vIHBhaWQgRGV2ZWxvcGVyIFByb2dyYW0gZW5yb2xsbWVudCByZXF1aXJlZCkKCiMjIEdldHRpbmcgU3RhcnRlZAoKVGhlIHByb2plY3QgaW50ZW50aW9uYWxseSBrZWVwcyBzaWduaW5nIHNldHRpbmdzIG91dCBvZiB0aGUgc2hhcmVkIGBwcm9qZWN0LnBieHByb2pgLiBFYWNoIGRldmVsb3BlciBzdXBwbGllcyB0aGVpciBvd24gYnVuZGxlIGlkZW50aWZpZXIgYW5kIHRlYW0gSUQgdmlhIGEgZ2l0aWdub3JlZCBgTG9jYWwueGNjb25maWdgIGZpbGUuIFRoaXMgYXZvaWRzIHRoZSBjb25zdGFudCB0dWctb2Ytd2FyIHRoYXQgaGFwcGVucyB3aGVuIG11bHRpcGxlIHBlb3BsZSBvbiBmcmVlIEFwcGxlIGFjY291bnRzIHRyeSB0byBzaWduIHRoZSBzYW1lIGFwcCDigJQgQXBwbGUgd29uJ3QgbGV0IHR3byBwZXJzb25hbCB0ZWFtcyBjbGFpbSB0aGUgc2FtZSBidW5kbGUgSUQuCgojIyMgMS4gQ2xvbmUgYW5kIG9wZW4gdGhlIHByb2plY3QKCmBgYGJhc2gKZ2l0IGNsb25lIGh0dHBzOi8vZ2l0aHViLmNvbS9vbGRiZWF1dHkvQWRkaXQuZ2l0CmNkIEFkZGl0Cm9wZW4gQWRkaXQueGNvZGVwcm9qCmBgYAoKTGV0IFhjb2RlIHJlc29sdmUgdGhlICoqR29vZ2xlU2lnbkluLWlPUyoqIFNQTSBkZXBlbmRlbmN5IChzaG91bGQgaGFwcGVuIGF1dG9tYXRpY2FsbHkgb24gZmlyc3Qgb3BlbikuCgojIyMgMi4gQ3JlYXRlIHlvdXIgYExvY2FsLnhjY29uZmlnYAoKQSB0ZW1wbGF0ZSBpcyBjb21taXR0ZWQgYXQgYEFkZGl0L0xvY2FsLnhjY29uZmlnLmV4YW1wbGVgLiBDb3B5IGl0IHRvIGBMb2NhbC54Y2NvbmZpZ2AgKHNhbWUgZm9sZGVyKSDigJQgdGhpcyBmaWxlIGlzIGdpdGlnbm9yZWQsIHNvIHlvdXIgdmFsdWVzIHN0YXkgb24geW91ciBtYWNoaW5lLgoKYGBgYmFzaApjcCBBZGRpdC9Mb2NhbC54Y2NvbmZpZy5leGFtcGxlIEFkZGl0L0xvY2FsLnhjY29uZmlnCmBgYAoKRWRpdCB0aGUgbmV3IGZpbGU6CgpgYGAKUFJPRFVDVF9CVU5ETEVfSURFTlRJRklFUiA9IHlvdXJuYW1lLkFkZGl0CkRFVkVMT1BNRU5UX1RFQU0gPSBBQkNERTEyMzQ1CmBgYAoKLSAqKmBQUk9EVUNUX0JVTkRMRV9JREVOVElGSUVSYCoqOiBwaWNrIGEgc3RyaW5nIHVuaXF1ZSB0byB5b3UgKGUuZy4gYHlvdXJuYW1lLkFkZGl0YCwgYGNvbS55b3VybmFtZS5hZGRpdGApLiBBcHBsZSB3aWxsIHJlZnVzZSBzaWduaW5nIGlmIGFub3RoZXIgcGVyc29uYWwgdGVhbSBoYXMgYWxyZWFkeSBjbGFpbWVkIHRoZSBzYW1lIHN0cmluZy4KLSAqKmBERVZFTE9QTUVOVF9URUFNYCoqOiB5b3VyIDEwLWNoYXJhY3RlciB0ZWFtIElELiBGaW5kIGl0IGluICoqWGNvZGUg4oaSIFNldHRpbmdzIOKGkiBBY2NvdW50cyDihpIgY2xpY2sgeW91ciBBcHBsZSBJRCDihpIgIlBlcnNvbmFsIFRlYW0iIHJvdyDihpIgIlRlYW0gSUQiIGNvbHVtbioqLgoKIyMjIDMuIFRyaWdnZXIgc2lnbmluZyBpbiBYY29kZQoKMS4gSW4gdGhlIHByb2plY3QgbmF2aWdhdG9yLCBzZWxlY3QgdGhlIHByb2plY3QsIHRoZW4gdGhlIGBBZGRpdGAgdGFyZ2V0LgoyLiBHbyB0byB0aGUgKipTaWduaW5nICYgQ2FwYWJpbGl0aWVzKiogdGFiLgozLiBDb25maXJtICoqQXV0b21hdGljYWxseSBtYW5hZ2Ugc2lnbmluZyoqIGlzIGNoZWNrZWQuCjQuIEJ1bmRsZSBJZGVudGlmaWVyIHNob3VsZCBhbHJlYWR5IHJlYWQgd2hhdGV2ZXIgeW91IHB1dCBpbiBgTG9jYWwueGNjb25maWdgLgo1LiBJZiAqKlRlYW0qKiBzaG93cyAiTm9uZSIsIHBpY2sgeW91ciBQZXJzb25hbCBUZWFtIGZyb20gdGhlIGRyb3Bkb3duLgoKUGlja2luZyBhIHRlYW0gaW4gdGhlIFVJIG1heSBjYXVzZSBYY29kZSB0byByZS1zdGFtcCBgREVWRUxPUE1FTlRfVEVBTWAgZGlyZWN0bHkgaW50byBgcHJvamVjdC5wYnhwcm9qYC4gSWYgeW91IHBsYW4gdG8gY29tbWl0IGFuZCBwdXNoIGJhY2ssIHJ1biB0aGlzIGNsZWFudXAgZmlyc3Qgc28geW91ciB0ZWFtIElEIGRvZXNuJ3QgZW5kIHVwIGluIHRoZSBzaGFyZWQgZmlsZToKCmBgYGJhc2gKc2VkIC1pICcnICcvREVWRUxPUE1FTlRfVEVBTSA9IC9kJyBBZGRpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmBgYAoKVGhlbiB2ZXJpZnkgZXZlcnl0aGluZyBzdGlsbCByZXNvbHZlcyBjb3JyZWN0bHkgZnJvbSB0aGUgeGNjb25maWc6CgpgYGBiYXNoCnhjb2RlYnVpbGQgLXByb2plY3QgQWRkaXQueGNvZGVwcm9qIC1zY2hlbWUgQWRkaXQgLWRlc3RpbmF0aW9uICdnZW5lcmljL3BsYXRmb3JtPWlPUycgXAogIC1zaG93QnVpbGRTZXR0aW5ncyAyPi9kZXYvbnVsbCB8IGdyZXAgLUUgIlBST0RVQ1RfQlVORExFX0lERU5USUZJRVJ8REVWRUxPUE1FTlRfVEVBTSIKYGBgCgpZb3Ugc2hvdWxkIHNlZSB5b3VyIGJ1bmRsZSBJRCBhbmQgdGVhbSBJRCwgYm90aCBzb3VyY2VkIGZyb20gYExvY2FsLnhjY29uZmlnYC4KCiMjIyA0LiBCdWlsZCBhbmQgcnVuCgpQbHVnIGluIHlvdXIgaVBob25lIChvciBwaWNrIGEgc2ltdWxhdG9yKSwgc2VsZWN0IGl0IGFzIHRoZSBydW4gZGVzdGluYXRpb24sIGFuZCBoaXQg4oyYUi4KClRoZXJlJ3MgYWxzbyBhIGAuL2RlcGxveWAgc2NyaXB0IGF0IHRoZSByZXBvIHJvb3QgdGhhdCBidWlsZHMgYW5kIGluc3RhbGxzIHRvIGEgdGV0aGVyZWQgaVBob25lICoqd2l0aG91dCoqIGFuIFhjb2RlIHJ1biBzZXNzaW9uIOKAlCBubyBkZWJ1Z2dlciBhdHRhY2gsIG5vdGhpbmcgdG8gaGFuZy4gSXQgcmVhZHMgdGhlIGJ1bmRsZSBJRCBmcm9tIHlvdXIgYExvY2FsLnhjY29uZmlnYCBhbmQgcGFzc2VzIGAtYWxsb3dQcm92aXNpb25pbmdVcGRhdGVzYCBzbyBhbiBleHBpcmVkIHByb2ZpbGUgcmVuZXdzIGl0c2VsZiBpbnN0ZWFkIG9mIGZhaWxpbmcgdGhlIGJ1aWxkLiBUaGUgZGV2aWNlIElEcyBhdCB0aGUgdG9wIG9mIHRoZSBzY3JpcHQgYXJlIGhhcmRjb2RlZDsgc3dhcCBpbiB5b3VycyBmcm9tIGB4Y3J1biBkZXZpY2VjdGwgbGlzdCBkZXZpY2VzYC4KCj4gKipGcmVlIHNpZ25pbmcgY2F2ZWF0Kio6IHByb3Zpc2lvbmluZyBwcm9maWxlcyBmb3IgZnJlZSBBcHBsZSBhY2NvdW50cyBleHBpcmUgZXZlcnkgKio3IGRheXMqKi4gWW91J2xsIG5lZWQgdG8gcmVkZXBsb3kgZnJvbSBYY29kZSByb3VnaGx5IHdlZWtseS4gVGhlIHBhaWQgQXBwbGUgRGV2ZWxvcGVyIFByb2dyYW0gKCQ5OS95ZWFyKSBleHRlbmRzIHRoaXMgdG8gYSB5ZWFyLCBidXQgaXNuJ3QgcmVxdWlyZWQgdG8gZGV2ZWxvcCBvciB0ZXN0LgoKIyMjIE9BdXRoIGNsaWVudHMgKEdvb2dsZSArIE1pY3Jvc29mdCkKCkJvdGggT0F1dGggY2xpZW50cyBhcmUgcHJvdmlkZWQgYnkgdGhlIHByb2plY3Qgb3duZXIg4oCUIG5vIHNldHVwIGlzIG5lZWRlZCBvbiB5b3VyIGVuZDsgc2lnbi1pbiB3b3JrcyBvdXQgb2YgdGhlIGJveCBvbmNlIHRoZSBhcHAgaXMgcnVubmluZy4KCi0gKipHb29nbGUqKjogY2xpZW50IElEIGxpdmVzIGluIGBDb25zdGFudHMuZ29vZ2xlQ2xpZW50SURgLCBkdXBsaWNhdGVkIGluIGBJbmZvLnBsaXN0YCAoYEdJRENsaWVudElEYCArIHRoZSBgY29tLmdvb2dsZXVzZXJjb250ZW50LmFwcHMuKmAgVVJMIHNjaGVtZSkuCi0gKipNaWNyb3NvZnQqKjogY2xpZW50IElEIGxpdmVzIGluIGBDb25zdGFudHMubWljcm9zb2Z0Q2xpZW50SURgIChhbiBBenVyZSAiQXBwIHJlZ2lzdHJhdGlvbiIgQXBwbGljYXRpb24gSUQpLiBUaGUgcmVkaXJlY3QgVVJJIGlzIGEgZml4ZWQgY3VzdG9tIHNjaGVtZSAoYGFkZGl0LW1zYXV0aDovL2NhbGxiYWNrYCkgaGFuZGxlZCBieSBgQVNXZWJBdXRoZW50aWNhdGlvblNlc3Npb25gIOKAlCBkZWxpYmVyYXRlbHkgbm90IE1TQUwncyBgbXNhdXRoLjxidW5kbGVJZD5gIHBhdHRlcm4sIHNvIHBlci1kZXZlbG9wZXIgYnVuZGxlIElEcyBuZWVkIG5vIEF6dXJlIGNoYW5nZXMgYW5kIG5vIEluZm8ucGxpc3QgVVJMIHNjaGVtZSBlbnRyeS4KCiMjIyBXb3JraW5nIHdpdGggY29sbGFib3JhdG9ycwoKVGhlIHhjY29uZmlnIHNldHVwIGlzIHdoYXQgYWxsb3dzIG11bHRpcGxlIGRldmVsb3BlcnMgb24gZnJlZSBBcHBsZSBhY2NvdW50cyB0byBzaGFyZSB0aGlzIGNvZGViYXNlIHdpdGhvdXQgc3RlcHBpbmcgb24gZWFjaCBvdGhlcidzIHNpZ25pbmcgc2V0dGluZ3MuIEEgZmV3IHRoaW5ncyB0byBrbm93OgoKLSAqKllvdXIgYExvY2FsLnhjY29uZmlnYCBuZXZlciBnb2VzIHRocm91Z2ggZ2l0LioqIEl0J3MgY292ZXJlZCBieSB0aGUgYCoueGNjb25maWdgIHJ1bGUgaW4gYC5naXRpZ25vcmVgLiBQdWxscyBhbmQgcHVzaGVzIGxlYXZlIGl0IHVudG91Y2hlZC4KLSAqKkRvbid0IGVkaXQgc2lnbmluZyBzZXR0aW5ncyBpbiBYY29kZSB1bmxlc3MgeW91IGhhdmUgdG8uKiogVG9nZ2xpbmcgYXV0by1zaWduaW5nIG9yIGNoYW5naW5nIHRlYW0gcGlja3MgdGVuZHMgdG8gbWFrZSBYY29kZSByZS1zdGFtcCBgREVWRUxPUE1FTlRfVEVBTWAgaW50byBgcHJvamVjdC5wYnhwcm9qYC4gSWYgdGhhdCBoYXBwZW5zLCBydW4gdGhlIGBzZWRgIGxpbmUgZnJvbSBzdGVwIDMgYWJvdmUgYmVmb3JlIGNvbW1pdHRpbmcuCi0gKipCdW5kbGUgSURzIGFyZSBjbGFpbWVkIHBlciBBcHBsZSBJRC4qKiBXaG9ldmVyIHNpZ25zIGZpcnN0IHdpdGggYSBnaXZlbiBidW5kbGUgSUQgbG9ja3MgaXQgdG8gdGhlaXIgdGVhbS4gSWYgeW91IHNlZSAiRmFpbGVkIFJlZ2lzdGVyaW5nIEJ1bmRsZSBJZGVudGlmaWVyOiBjYW5ub3QgYmUgcmVnaXN0ZXJlZCB0byB5b3VyIGRldmVsb3BtZW50IHRlYW0sIiBhbm90aGVyIGNvbGxhYm9yYXRvciAob3Igc29tZW9uZSBlbHNlIGVudGlyZWx5KSBoYXMgYWxyZWFkeSBjbGFpbWVkIHRoYXQgc3RyaW5nLiBKdXN0IHBpY2sgYSBtb3JlIHVuaXF1ZSBvbmUgaW4geW91ciBgTG9jYWwueGNjb25maWdgLgotICoqRmlyc3QgcnVuIG9uIGEgZGV2aWNlIGdpdmVzIHlvdSBhbiBlbXB0eSBsaWJyYXJ5LioqIERpZmZlcmVudCBidW5kbGUgSURzIGFyZSBkaWZmZXJlbnQgYXBwcyB0byBpT1Mg4oCUIHlvdXIgb2xkIGluc3RhbGwgbGl2ZXMgaW4gaXRzIG93biBzYW5kYm94IGNvbnRhaW5lciB3aXRoIGl0cyBvd24gZGF0YS4gRWl0aGVyIGRlbGV0ZSB0aGUgb2xkIGluc3RhbGwgdmlhICoqU2V0dGluZ3Mg4oaSIEdlbmVyYWwg4oaSIGlQaG9uZSBTdG9yYWdlKiogb3IgYWNjZXB0IHRoYXQgeW91J2xsIHJlLXNpZ24gaW4gdG8gRHJpdmUgb24gdGhlIG5ldyBidWlsZC4KCiMjIEFyY2hpdGVjdHVyZQoKYGBgCi4K4pSc4pSA4pSAIEFkZGl0Lnhjb2RlcHJvagrilJzilIDilIAgSW5mby5wbGlzdArilJzilIDilIAgZGVwbG95ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEJ1aWxkICsgaW5zdGFsbCB0byBhIHRldGhlcmVkIGlQaG9uZSB3aXRoIG5vIFhjb2RlIHJ1biBzZXNzaW9uCuKUnOKUgOKUgCBlbmNvZGUgLyBkZWNvZGUgICAgICAgICAgICAgICAgICAgICMgUkVBRE1FIGJhc2U2NCB0b2dnbGUgKHNlZSAiRG9jIGVuY29kaW5nIikK4pSc4pSA4pSAIFJFQURNRS5tZCAgICAgICAgICAgICAgICAgICAgICAgICAgIyBIdW1hbi1mYWNpbmcgc2V0dXAvZmVhdHVyZSBkb2NzICh0aGlzIGZpbGUpCuKUnOKUgOKUgCBBR0VOVFMubWQgICAgICAgICAgICAgICAgICAgICAgICAgICMgU2xpbSBhbHdheXMtb24gYWdlbnQgY29udGV4dCAoYXV0by1sb2FkZWQpCuKUnOKUgOKUgCBDTEFVREUubWQgICAgICAgICAgICAgICAgICAgICAgICAgICMgU3ltbGluayDihpIgQUdFTlRTLm1kIChDbGF1ZGUgQ29kZSBjb21wYXRpYmlsaXR5KQrilJzilIDilIAgLm9tcC8K4pSCICAg4pSU4pSA4pSAIHNraWxscy8K4pSCICAgICAgIOKUlOKUgOKUgCBhdWRpby1wbGF5YmFjay9TS0lMTC5tZCAgICAjIERlZXAgcGxheWJhY2sgaW50ZXJuYWxzLCBsb2FkZWQgb24gZGVtYW5kCuKUnOKUgOKUgCB0b29scy8K4pSCICAg4pSU4pSA4pSAIG1ha2VfYXBwX2ljb24ucHkgICAgICAgICAgICAgICAjIFJlZ2VuZXJhdGVzIEFkZGl0L0FwcEljb24uaWNvbiBmcm9tIEFkZGl0U3RydWN0dXJlJ3MgZ2VvbWV0cnkK4pSU4pSA4pSAIEFkZGl0LwogICAg4pSc4pSA4pSAIExvY2FsLnhjY29uZmlnLmV4YW1wbGUgICAgICAgICAjIFRlbXBsYXRlIOKAlCBjb3B5IHRvIExvY2FsLnhjY29uZmlnIChnaXRpZ25vcmVkKQogICAg4pSc4pSA4pSAIEFwcEljb24uaWNvbiAgICAgICAgICAgICAgICAgICAgIyBJY29uIENvbXBvc2VyIGRvY3VtZW50IChnZW5lcmF0ZWQg4oCUIHNlZSB0b29scy8pCiAgICDilJzilIDilIAgKi5vdGYgICAgICAgICAgICAgICAgICAgICAgICAgICMgQnVuZGxlZCBVSSArIHJlYWRvdXQgdHlwZWZhY2VzCiAgICDilIIKICAgIOKUnOKUgOKUgCBBZGRpdEFwcC5zd2lmdCAgICAgICAgICAgICAgICAgIyBFbnRyeSBwb2ludCwgc2VydmljZSB3aXJpbmcsIHNoYXJlZCBTd2lmdERhdGEgY29udGFpbmVyLCBBY2NvdW50Q29udGFpbmVyVmlldwogICAg4pSc4pSA4pSAIENvbnRlbnRWaWV3LnN3aWZ0ICAgICAgICAgICAgICAjIEF1dGggZ2F0ZSArIHJvb3QgbmF2aWdhdGlvbgogICAg4pSc4pSA4pSAIExhdW5jaFNjcmVlbi5zdG9yeWJvYXJkCiAgICDilIIKICAgIOKUnOKUgOKUgCBNb2RlbHMvCiAgICDilIIgICDilJzilIDilIAgQWxidW0uc3dpZnQgICAgICAgICAgICAgICAgIyBTd2lmdERhdGEgbW9kZWwg4oCUIGNsb3VkIGZvbGRlciBvciBsb2NhbCBhbGJ1bQogICAg4pSCICAg4pSc4pSA4pSAIFRyYWNrLnN3aWZ0ICAgICAgICAgICAgICAgICMgU3dpZnREYXRhIG1vZGVsIOKAlCBhdWRpbyBmaWxlIChjbG91ZCBvciBsb2NhbCkKICAgIOKUgiAgIOKUnOKUgOKUgCBBZGRpdE1ldGFkYXRhLnN3aWZ0ICAgICAgICAjIC5hZGRpdC1kYXRhIEpTT04gc2NoZW1hLCBkaXNjIG1hcmtlcnMKICAgIOKUgiAgIOKUlOKUgOKUgCBEcml2ZU1vZGVscy5zd2lmdCAgICAgICAgICAjIFByb3ZpZGVyLW5ldXRyYWwgZmlsZS9wZXJtaXNzaW9uIERUT3MKICAgIOKUggogICAg4pSc4pSA4pSAIFNlcnZpY2VzLwogICAg4pSCICAg4pSc4pSA4pSAIEdvb2dsZUF1dGhTZXJ2aWNlLnN3aWZ0ICAgICAgICMgR29vZ2xlIFNpZ24tSW4sIG11bHRpLWFjY291bnQsIHRva2VuIG1hbmFnZW1lbnQKICAgIOKUgiAgIOKUnOKUgOKUgCBNaWNyb3NvZnRBdXRoU2VydmljZS5zd2lmdCAgICAjIE1pY3Jvc29mdCBPQXV0aCAoUEtDRSArIEFTV2ViQXV0aGVudGljYXRpb25TZXNzaW9uKSwgS2V5Y2hhaW4gdG9rZW5zCiAgICDilIIgICDilJzilIDilIAgQ2xvdWRBdXRoQ29vcmRpbmF0b3Iuc3dpZnQgICAgIyBVbmlmaWVkIHNlc3Npb24gZmFjYWRlIG92ZXIgYm90aCBhdXRoIHByb3ZpZGVycwogICAg4pSCICAg4pSc4pSA4pSAIEdvb2dsZURyaXZlU2VydmljZS5zd2lmdCAgICAgICMgRHJpdmUgQVBJIHYzIFJFU1QgY2xpZW50CiAgICDilIIgICDilJzilIDilIAgT25lRHJpdmVTZXJ2aWNlLnN3aWZ0ICAgICAgICAgIyBNaWNyb3NvZnQgR3JhcGggY2xpZW50IG1hcHBlZCBpbnRvIHRoZSBzaGFyZWQgRHJpdmUgRFRPcwogICAg4pSCICAg4pSc4pSA4pSAIENsb3VkRHJpdmVTZXJ2aWNlLnN3aWZ0ICAgICAgICMgUHJvdmlkZXItbmV1dHJhbCBwcm90b2NvbCArIHBlci1hbGJ1bSByb3V0aW5nIChDbG91ZFNlcnZpY2VSb3V0ZXIpCiAgICDilIIgICDilJzilIDilIAgQXVkaW9QbGF5ZXJTZXJ2aWNlLnN3aWZ0ICAgICAgIyBBVkF1ZGlvRW5naW5lIHBsYXliYWNrLCBnYXBsZXNzLCBxdWV1ZSwgcmVtb3RlIGNvbW1hbmRzCiAgICDilIIgICDilJzilIDilIAgQXVkaW9DYWNoZVNlcnZpY2Uuc3dpZnQgICAgICAgIyBPbi1kZXZpY2UgYXVkaW8gZmlsZSBjYWNoZSB3aXRoIGZvcm1hdCBjb252ZXJzaW9uCiAgICDilIIgICDilJzilIDilIAgQXVkaW9BbmFseXplclNlcnZpY2Uuc3dpZnQgICAgIyBSZWFsLXRpbWUgRkZUIHNwZWN0cnVtIGFuYWx5c2lzIGZvciB0aGUgRVEgcmVhZG91dAogICAg4pSCICAg4pSc4pSA4pSAIEFsYnVtQXJ0U2VydmljZS5zd2lmdCAgICAgICAgICMgQ292ZXIgYXJ0IG1lbW9yeSArIGRpc2sgY2FjaGUKICAgIOKUgiAgIOKUnOKUgOKUgCBBY2NvdW50TWFuYWdlci5zd2lmdCAgICAgICAgICAjIE11bHRpLWFjY291bnQgc3RvcmFnZSwgcGVyLWFjY291bnQgaXNvbGF0aW9uCiAgICDilIIgICDilJTilIDilIAgVGhlbWVTZXJ2aWNlLnN3aWZ0ICAgICAgICAgICAgIyBQZXItc2NoZW1lIGFjY2VudCBjb2xvciBwZXJzaXN0ZW5jZQogICAg4pSCCiAgICDilJzilIDilIAgVmlld3MvCiAgICDilIIgICDilJzilIDilIAgU2lnbkluVmlldy5zd2lmdCAgICAgICAgICAgICAgIyBTaWduLWluIHNjcmVlbgogICAg4pSCICAg4pSc4pSA4pSAIExvYWRpbmdTcGxhc2hWaWV3LnN3aWZ0ICAgICAgICMgTGF1bmNoL2FjY291bnQtc3dpdGNoIHNwbGFzaCDigJQgd29yZG1hcmsgdW5kZXIgdGhlIHNwaW5uaW5nIG9yYgogICAg4pSCICAg4pSc4pSA4pSAIExpYnJhcnlWaWV3LnN3aWZ0ICAgICAgICAgICAgICMgQWxidW0gZ3JpZC9saXN0LCBzZWFyY2gsIGFycmFuZ2UgbW9kZSwgYWNjb3VudCBtZW51LCBsb2NhbCBpbXBvcnQKICAgIOKUgiAgIOKUnOKUgOKUgCBBbGJ1bURldGFpbFZpZXcuc3dpZnQgICAgICAgICAjIFRyYWNrIGxpc3QsIGRpc2MgbWFya2Vycywgc3luYywgcGxheWJhY2ssIHRyYWNrIG1lbnVzCiAgICDilIIgICDilJzilIDilIAgQWxidW1EZXRhaWxWaWV3K0VkaXRNb2RlLnN3aWZ0IyBJbmxpbmUgZWRpdCBtb2RlIChleHRlbnNpb24pOyBhbHNvIGR1cGxpY2F0ZS10by1jbG91ZAogICAg4pSCICAg4pSc4pSA4pSAIEFsYnVtRGV0YWlsU3VwcG9ydC5zd2lmdCAgICAgICMgQWxidW0tZGV0YWlsIHN1YnZpZXdzIChjYWNoZSByaW5nLCByb3dzLCBvdmVybGF5cykKICAgIOKUgiAgIOKUnOKUgOKUgCBBZGRBbGJ1bVZpZXcuc3dpZnQgICAgICAgICAgICAjIEJyb3dzZSBjbG91ZCBmb2xkZXJzIHRvIGFkZCBleGlzdGluZyBhbGJ1bXMgLyBjb3B5IHRoZW0KICAgIOKUgiAgIOKUnOKUgOKUgCBDcmVhdGVBbGJ1bVZpZXcuc3dpZnQgICAgICAgICAjIFBpY2sgbG9jYXRpb24gKyBjcmVhdGUgbmV3IGFsYnVtIGZvbGRlcgogICAg4pSCICAg4pSc4pSA4pSAIERyaXZlQXVkaW9QaWNrZXJWaWV3LnN3aWZ0ICAgICMgQnJvd3NlIGEgY2xvdWQgdG8gYWRkIGxvb3NlIHRyYWNrcwogICAg4pSCICAg4pSc4pSA4pSAIE5vd1BsYXlpbmdWaWV3LnN3aWZ0ICAgICAgICAgICMgRnVsbCBwbGF5ZXI7IG1vcnBocyBpbiBwbGFjZSBpbnRvIGl0cyBvd24gcXVldWUKICAgIOKUgiAgIOKUnOKUgOKUgCBOb3dQbGF5aW5nUGlsbC5zd2lmdCAgICAgICAgICAjIE1pbmkgcGxheWVyIHRoYXQgZXhwYW5kcyBpbnRvIHRoZSBmdWxsIHBsYXllcgogICAg4pSCICAg4pSc4pSA4pSAIE1pbmlTY3J1YmJlci5zd2lmdCAgICAgICAgICAgICMgV2F2ZWZvcm0gc2NydWJiZXIgc2hhcmVkIGJ5IHRoZSBwbGF5ZXJzCiAgICDilIIgICDilJzilIDilIAgUGl4ZWxFUUdyaWQuc3dpZnQgICAgICAgICAgICAgIyBQaXhlbC9MRUQgZnJlcXVlbmN5IHJlYWRvdXQKICAgIOKUgiAgIOKUnOKUgOKUgCBUcmFja1NwbGl0Vmlldy5zd2lmdCAgICAgICAgICAjIFNwbGl0IG9uZSBsb25nIGZpbGUgaW50byBzZXBhcmF0ZSB0cmFja3MKICAgIOKUgiAgIOKUnOKUgOKUgCBDaGF0Vmlldy5zd2lmdCAgICAgICAgICAgICAgICAjIFBlci1hbGJ1bSBncm91cCBjaGF0IChHb29nbGUgRHJpdmUgY29tbWVudHMgb25seSkKICAgIOKUgiAgIOKUnOKUgOKUgCBTaGFyaW5nU2hlZXQuc3dpZnQgICAgICAgICAgICAjIENsb3VkIGZvbGRlciBwZXJtaXNzaW9ucyBtYW5hZ2VtZW50CiAgICDilIIgICDilJzilIDilIAgU2V0dGluZ3NWaWV3LnN3aWZ0ICAgICAgICAgICAgIyBBcHBlYXJhbmNlLCBhY2NlbnQgY29sb3JzLCBsaWJyYXJ5IGxheW91dAogICAg4pSCICAg4pSc4pSA4pSAIEZlZWRiYWNrVmlldy5zd2lmdCAgICAgICAgICAgICMgIlBscyByZXBvcnQgYnVncyIg4oCUIG1haWxzIGZlZWRiYWNrIHdpdGggYnVpbGQgKyBkZXZpY2UKICAgIOKUgiAgIOKUnOKUgOKUgCBDYWNoZUluc3BlY3RvclZpZXcuc3dpZnQgICAgICAjIERFQlVHLW9ubHkgY2FjaGUgYnJvd3NlcgogICAg4pSCICAg4pSc4pSA4pSAIEltYWdlQ3JvcHBlclZpZXcuc3dpZnQgICAgICAgICMgQ292ZXIgYXJ0IGNyb3AgdG9vbAogICAg4pSCICAg4pSc4pSA4pSAIFBpeGVsU29ydENvdmVyVmlldy5zd2lmdCAgICAgICMgVGFwLXRvLXNvcnQgbHVtaW5hbmNlIHZpc3VhbGl6ZXIgZm9yIGFsYnVtIGNvdmVycwogICAg4pSCICAg4pSc4pSA4pSAIFN0cnVjdHVyZVZpZXcuc3dpZnQgICAgICAgICAgICMgVGhlIGFwcCBpY29uJ3MgZG90IGZpZWxkLCBkcmF3YWJsZSBmcm9tIGFueSBhbmdsZQogICAg4pSCICAg4pSc4pSA4pSAIFBsYXNtYU9yYi5zd2lmdCAgICAgICAgICAgICAgICMgUmF5bWFyY2hlZCBnbGFzcyBiYXVibGUgKHNjcm9sbC1kcml2ZW4gYW5kIGZyZWUtc3Bpbm5pbmcpCiAgICDilIIgICDilJzilIDilIAgU3RvcmFnZVNvdXJjZUxvZ28uc3dpZnQgICAgICAgIyAzRCBEcml2ZSAvIE9uZURyaXZlIG1hcmtzCiAgICDilIIgICDilJzilIDilIAgU2Nyb2xsVG9ycXVlLnN3aWZ0ICAgICAgICAgICAgIyBTaGFyZWQgc2Nyb2xsLXZlbG9jaXR5IOKGkiB0d2lzdCBmb3IgdGhlIGdsYXNzIG9ybmFtZW50cwogICAg4pSCICAg4pSc4pSA4pSAIExvYWRpbmdJbmRpY2F0b3Iuc3dpZnQgICAgICAgICMgVGhlIGFwcCdzIG9uZSBpbmRldGVybWluYXRlIHNwaW5uZXIKICAgIOKUgiAgIOKUnOKUgOKUgCBNYXJxdWVlVGV4dC5zd2lmdCAgICAgICAgICAgICAjIFNjcm9sbGluZyB0ZXh0IGZvciBvdmVybG9uZyB0aXRsZXMKICAgIOKUgiAgIOKUlOKUgOKUgCBGYWRpbmdUcnVuY2F0aW9uLnN3aWZ0ICAgICAgICAjIFJldXNhYmxlIHRleHQtZmFkZS1vdXQgbW9kaWZpZXIgZm9yIGNsaXBwZWQgbGFiZWxzCiAgICDilIIKICAgIOKUnOKUgOKUgCBTaGFkZXJzLwogICAg4pSCICAg4pSc4pSA4pSAIEdsYXNzUm9vbS5oICAgICAgICAgICAgICAgICAjIExpZ2h0aW5nIHJpZywgZmlsbSBhbmQgdG9uZSBtYXAgc2hhcmVkIGJ5IHRoZSBvcm5hbWVudHMKICAgIOKUgiAgIOKUnOKUgOKUgCBQbGFzbWFPcmIubWV0YWwgICAgICAgICAgICAgIyBUaGUgdG9vbGJhci9zcGxhc2ggYmF1YmxlCiAgICDilIIgICDilJTilIDilIAgR2xhc3NMb2dvLm1ldGFsICAgICAgICAgICAgICMgVGhlIHRocmVlIGxpYnJhcnkgYnJhbmQgbWFya3MKICAgIOKUggogICAg4pSU4pSA4pSAIFV0aWxpdGllcy8KICAgICAgICDilJzilIDilIAgQ29uc3RhbnRzLnN3aWZ0ICAgICAgICAgICAgICMgT0F1dGggY2xpZW50IElEcywgQVBJIGJhc2UgVVJMcywgTUlNRSBhbGxvdy1saXN0CiAgICAgICAg4pSc4pSA4pSAIEFkZGl0U3RydWN0dXJlLnN3aWZ0ICAgICAgICAjIFRoZSBkb3QtcGxhbmUgc3VyZmFjZSBiZWhpbmQgdGhlIGFwcCBpY29uCiAgICAgICAg4pSc4pSA4pSAIFBob3NwaG9yLnN3aWZ0ICAgICAgICAgICAgICAjIERlc2lnbi1sYW5ndWFnZSBraXQ6IHR5cG9ncmFwaHkgdGllcnMsIHJlYWRvdXQgY29sb3IKICAgICAgICDilJzilIDilIAgVGFjdGlsZUNvbnRyb2xzLnN3aWZ0ICAgICAgICMgQ2hhc3Npcy1sYXllciBjb250cm9scyAod2VsbHMsIHNvY2tldHMsIGVuZ3JhdmVkIGxhYmVscykKICAgICAgICDilJzilIDilIAgQXBwQ29sb3JzLnN3aWZ0ICAgICAgICAgICAgICMgQXBwIGJhY2tncm91bmQsIGFjY2VudCBsZWdpYmlsaXR5IGhlbHBlcnMKICAgICAgICDilJzilIDilIAgQ292ZXJDb2xvci5zd2lmdCAgICAgICAgICAgICMgRG9taW5hbnQtY29sb3IgZXh0cmFjdGlvbiBmcm9tIGFydHdvcmsKICAgICAgICDilJzilIDilIAgRmxhdFNsaWRlTmF2aWdhdGlvbi5zd2lmdCAgICMgQ3VzdG9tIHB1c2gvcG9wIHRyYW5zaXRpb24KICAgICAgICDilJzilIDilIAgU2VsZWN0QWxsVGV4dC5zd2lmdCAgICAgICAgICMgVGV4dCBmaWVsZCB0aGF0IHByZS1zZWxlY3RzIG9uIGZvY3VzCiAgICAgICAg4pSc4pSA4pSAIFRyYWNrU3BsaXRFbmdpbmUuc3dpZnQgICAgICAjIE9mZmxpbmUgYXVkaW8gYW5hbHlzaXMgKyBzZWdtZW50IGV4cG9ydAogICAgICAgIOKUlOKUgOKUgCBMaWJyYXJ5Q2xlYW51cC5zd2lmdCAgICAgICAgIyBPcnBoYW5lZC1kYXRhIHBydW5pbmcKYGBgCgojIyMgU2VydmljZXMKCkFsbCBzZXJ2aWNlcyB1c2UgYEBPYnNlcnZhYmxlYCBhbmQgYXJlIGluamVjdGVkIHZpYSBTd2lmdFVJJ3MgYEBFbnZpcm9ubWVudGAuCgp8IFNlcnZpY2UgfCBSb2xlIHwKfC0tLXwtLS18CnwgKipHb29nbGVBdXRoU2VydmljZSoqIHwgR29vZ2xlIE9BdXRoIDIuMCBzaWduLWluLCB0b2tlbiByZWZyZXNoIChHb29nbGVTaWduSW4gU0RLKSB8CnwgKipNaWNyb3NvZnRBdXRoU2VydmljZSoqIHwgTWljcm9zb2Z0IE9BdXRoIDIuMCArIFBLQ0UgdmlhIEFTV2ViQXV0aGVudGljYXRpb25TZXNzaW9uOyByZWZyZXNoIHRva2VucyBpbiBLZXljaGFpbiB8CnwgKipDbG91ZEF1dGhDb29yZGluYXRvcioqIHwgVW5pZmllZCBzZXNzaW9uIGZhY2FkZSDigJQgb25lIGFjY291bnQgc3dpdGNoZXIsIGRpc3BhdGNoZXMgdG8gdGhlIHJpZ2h0IHByb3ZpZGVyIHwKfCAqKkdvb2dsZURyaXZlU2VydmljZSoqIHwgQWxsIERyaXZlIEFQSSBjYWxscyDigJQgZmlsZXMsIGZvbGRlcnMsIHBlcm1pc3Npb25zLCBjb21tZW50cywgdXBsb2FkcyB8CnwgKipPbmVEcml2ZVNlcnZpY2UqKiB8IE1pY3Jvc29mdCBHcmFwaCBjYWxscyBtYXBwZWQgaW50byB0aGUgc2FtZSBEVE9zOyBjb21wb3NpdGUgYGRyaXZlSWRcfGl0ZW1JZGAgZmlsZSBJRHMgfAp8ICoqQ2xvdWRTZXJ2aWNlUm91dGVyKiogfCBQaWNrcyBHb29nbGUvT25lRHJpdmUgY2xpZW50IHBlciBhbGJ1bSAoYHN0b3JhZ2VTb3VyY2VgKSwgcGVyIGZpbGUgSUQsIG9yIHBlciBhY3RpdmUgYWNjb3VudCB8CnwgKipBdWRpb1BsYXllclNlcnZpY2UqKiB8IEFWQXVkaW9FbmdpbmUgcXVldWUsIGdhcGxlc3MgcGxheWJhY2ssIHNodWZmbGUvcmVwZWF0LCBOb3cgUGxheWluZyBpbmZvIGNlbnRlciB8CnwgKipBdWRpb0NhY2hlU2VydmljZSoqIHwgRG93bmxvYWRzIGFuZCBjYWNoZXMgYXVkaW8gdG8gZGlzaywgcHJlZmV0Y2hlcyBuZXh0IHRyYWNrcywgZm9ybWF0IGNvbnZlcnNpb24gfAp8ICoqQXVkaW9BbmFseXplclNlcnZpY2UqKiB8IFJlYWwtdGltZSBGRlQgc3BlY3RydW0gYW5hbHlzaXMgdmlhIEFjY2VsZXJhdGUgZnJhbWV3b3JrIHwKfCAqKkFsYnVtQXJ0U2VydmljZSoqIHwgVHdvLXRpZXIgY292ZXIgYXJ0IGNhY2hlIChOU0NhY2hlICsgZGlzayksIGNsb3VkIGRvd25sb2FkIGZhbGxiYWNrIHwKfCAqKkFjY291bnRNYW5hZ2VyKiogfCBQZXJzaXN0cyBrbm93biBhY2NvdW50cyAoYm90aCBwcm92aWRlcnMpLCBoYW5kbGVzIHBlci1hY2NvdW50IGRhdGEgaXNvbGF0aW9uIHwKfCAqKlRoZW1lU2VydmljZSoqIHwgUGVyc2lzdHMgYSBzZXBhcmF0ZSBhY2NlbnQgY29sb3IgcGVyIGxpZ2h0L2Rhcmsgc2NoZW1lLCBwbHVzIHRoZSBhcHBlYXJhbmNlIG92ZXJyaWRlIHwKCioqUHJvdmlkZXIgcGFyaXR5Kio6IGJvdGggYmFja2VuZHMgaW1wbGVtZW50IHRoZSBgQ2xvdWREcml2ZVNlcnZpY2VgIHByb3RvY29sLCBzbyBhbGJ1bXMgZnJvbSBlaXRoZXIgcHJvdmlkZXIgZ2V0IHRoZSBzYW1lIGZlYXR1cmUgc2V0LiBPbmVEcml2ZSBkaWZmZXJlbmNlczogbm8gcGVyLWFsYnVtIGNoYXQgKEdyYXBoIGhhcyBubyBjb21tZW50cyBBUEkpLCBubyBTdGFycmVkIGJyb3dzZSB0YWIsIGFuZCBzaGFyaW5nIHJvbGVzIGFyZSBWaWV3ZXIvRWRpdG9yIG9ubHkgKG5vIENvbW1lbnRlcikuIFRoZXNlIGFyZSBnYXRlZCBieSBjYXBhYmlsaXR5IGZsYWdzIG9uIHRoZSBwcm90b2NvbCAoYHN1cHBvcnRzQ29tbWVudHNgLCBgc3VwcG9ydHNTdGFycmVkYCwgYHN1cHBvcnRzQ29tbWVudGVyUm9sZWApIHJhdGhlciB0aGFuIGhhcmRjb2RlZCBwcm92aWRlciBjaGVja3MuCgojIyMgRGF0YQoKTG9jYWwgcGVyc2lzdGVuY2UgdXNlcyAqKlN3aWZ0RGF0YSoqIHdpdGggdHdvIG1vZGVsczoKCi0gKipBbGJ1bSoqIOKAlCBNYXBzIHRvIGEgY2xvdWQgZm9sZGVyIChHb29nbGUgRHJpdmUgb3IgT25lRHJpdmUpIG9yIGEgbG9jYWxseSBpbXBvcnRlZCBhbGJ1bS4gU3RvcmVzIGZvbGRlciBJRCwgZGlzcGxheSBuYW1lLCBhcnRpc3QsIGNvdmVyIGFydCByZWZlcmVuY2VzLCB0cmFjayBjb3VudCwgb3JkZXJpbmcsIGVkaXQgcGVybWlzc2lvbnMsIGFuZCBzdG9yYWdlIHNvdXJjZSAoYGdvb2dsZURyaXZlYCAvIGBvbmVEcml2ZWAgLyBgbG9jYWxTdG9yYWdlYCkuCi0gKipUcmFjayoqIOKAlCBNYXBzIHRvIGFuIGF1ZGlvIGZpbGUgaW4gdGhlIGNsb3VkIG9yIGEgbG9jYWwgZmlsZSBvbiBkZXZpY2UuIFN0b3JlcyBmaWxlIElELCBuYW1lLCBNSU1FIHR5cGUsIGR1cmF0aW9uLCB0cmFjayBudW1iZXIsIGFuZCBvcHRpb25hbCBsb2NhbCBmaWxlIHBhdGguIE9uZURyaXZlIGZpbGUgSURzIGFyZSBjb21wb3NpdGUgYGRyaXZlSWR8aXRlbUlkYCBzdHJpbmdzIChHcmFwaCBpdGVtIElEcyBhcmUgb25seSB1bmlxdWUgd2l0aGluIG9uZSBkcml2ZSkuCgpUcmFjayBvcmRlcmluZyBhbmQgZGlzYyBtYXJrZXJzIGFyZSBzdG9yZWQgaW4gYSBgLmFkZGl0LWRhdGFgIEpTT04gZmlsZSB3aXRoaW4gZWFjaCBjbG91ZCBmb2xkZXIgKGZvciBjbG91ZCBhbGJ1bXMpIG9yIGluIHRoZSBTd2lmdERhdGEgYGNhY2hlZFRyYWNrbGlzdGAgZmllbGQgKGZvciBsb2NhbCBhbGJ1bXMpLCBrZWVwaW5nIHRoZSBsYXlvdXQgY29sbGFib3JhdGl2ZSBhY3Jvc3MgZGV2aWNlcyBhbmQgdXNlcnMuCgpBbGwgYWNjb3VudHMgc2hhcmUgYSBzaW5nbGUgU3dpZnREYXRhIHN0b3JlOyBkYXRhIGlzIGlzb2xhdGVkIHBlciBhY2NvdW50IHZpYSBhbiBgYWNjb3VudElkYCBvbiBlYWNoIGBBbGJ1bWAgKGxlZ2FjeSBwZXItYWNjb3VudCBzdG9yZXMgYXJlIG1pZ3JhdGVkIGluIG9uIGZpcnN0IGxhdW5jaCkuIEVhY2ggYWNjb3VudCBzdGlsbCBnZXRzIGl0cyBvd24gb24tZGlzayBhdWRpbyBjYWNoZSBkaXJlY3RvcnkuCgojIyBEb2MgZW5jb2RpbmcKCmBSRUFETUUubWRgIGNhbiBiZSB0b2dnbGVkIGJldHdlZW4gaXRzIHBsYWludGV4dCBmb3JtIGFuZCBhIGJhc2U2NC1lbmNvZGVkIGZvcm0gd2l0aCB0d28gaGVscGVyIHNjcmlwdHMgYXQgdGhlIHJlcG8gcm9vdDoKCmBgYGJhc2gKLi9lbmNvZGUgICAgIyBwbGFpbnRleHQg4oaSIGVuY29kZWQKLi9kZWNvZGUgICAgIyBlbmNvZGVkIOKGkiBwbGFpbnRleHQKYGBgCgpXaGVuIGVuY29kZWQsIGBSRUFETUUubWRgIGlzIHJlcGxhY2VkIHdpdGggYSBzaG9ydCBkZWNvZGUtaW5zdHJ1Y3Rpb24gc3R1YiBwbHVzIGEgYmFzZTY0IGJsb2IuIFJ1biBgLi9kZWNvZGVgIHRvIHJlc3RvcmUgaXQgYnl0ZS1mb3ItYnl0ZS4gQm90aCBzY3JpcHRzIGFyZSAqKmlkZW1wb3RlbnQqKiDigJQgdGhlcmUgYXJlIG9ubHkgdHdvIHBvc3NpYmxlIHN0YXRlcyAoZW5jb2RlZCBhbmQgZGVjb2RlZCksIGFuZCBydW5uaW5nIGVpdGhlciBzY3JpcHQgd2hlbiB0aGUgZmlsZSBpcyBhbHJlYWR5IGluIHRoYXQgc3RhdGUgaXMgYSBuby1vcC4KCk9ubHkgYFJFQURNRS5tZGAgaXMgZW5jb2RhYmxlLiBgQUdFTlRTLm1kYCAoYW5kIGl0cyBgQ0xBVURFLm1kYCBzeW1saW5rKSBpcyBkZWxpYmVyYXRlbHkgZXhjbHVkZWQ6IGl0J3MgYXV0by1sb2FkZWQgaW50byB0aGUgY29kaW5nIGFnZW50J3MgY29udGV4dCBldmVyeSBzZXNzaW9uLCBzbyBhIGJhc2U2NCBibG9iIHRoZXJlIHdvdWxkIHBvaXNvbiB0aGF0IGNvbnRleHQuCgpUaGUgc2NyaXB0cyBhcmUgcHVyZSBiYXNoIHdpdGggbm8gZGVwZW5kZW5jaWVzIGJleW9uZCBgYmFzZTY0YCBhbmQgYGF3a2AsIGJvdGggcHJlLWluc3RhbGxlZCBvbiBtYWNPUyBhbmQgYW55IHN0YW5kYXJkIExpbnV4IGVudmlyb25tZW50LgoKIyMgTGljZW5zZQoKVGhpcyBwcm9qZWN0IGlzIHByb3ZpZGVkIGFzLWlzIGZvciBwZXJzb25hbCB1c2UuCg==