IyBSZXdyaXRlIGRlZmF1bHQgcnVsZXMgZnJvbSAuYy5vOiAgdG8gIC5jLm86IC5jCi9eXC4vcy9eXChcLlthLXpdKlwpXChcLlthLXpdKlwpXCggKjogKlwpJC9cMVwyXDMgXDEvCgojIENoYW5nZSBkZXBlbmRlbmN5IGNoYXIuCi86Oi9zLzo6LyBcXE9wdGlvbi1mXFxPcHRpb24tZiAvZwovOi9zLzovIFxcT3B0aW9uLWYgL2cKL15bU1VdPS9zLyBcXE9wdGlvbi1mIC86L2cKCiMgQ2hhbmdlIHN5bnRheCBvZiBNYWtlZmlsZSB2YXJzLgovXCQvcy9cJHtcKFthLXpBLVowLTlfXSpcKX0ve1wxfS9nCi9cJC9zL1wkKFwoW2EtekEtWjAtOV9dKlwpKS97XDF9L2cKCiMgQ2hhbmdlICRAIHRvIHt0YXJnfQovXCRAL3MvXCRAL3t0YXJnfS9nCgojIENoYW5nZSBwYXRobmFtZSBzeW50YXguCiMKIyBJZiBsaW5lIGVuZHMgd2l0aCAuLiAgdGhlbiBhc3N1bWUgaXQgc2V0cyBhIHZhcmlhYmxlIHRoYXQgd2lsbAojIGJlIHVzZWQgdG8gcHJlZml4IHNvbWV0aGluZyBlbHNlIC0tIGVsaW1pbmF0ZSBvbmUgY29sb24sIGFzc3VtaW5nCiMgdGhhdCBhIHNsYXNoIGFmdGVyIHRoZSAke25hbWV9IHdpbGwgdHVybiBpbnRvIHRoZSBtaXNzaW5nIGNvbG9uLgojIE1hYyBwYXRobmFtZSBjb252ZW50aW9ucyBhcmUgSVJSRUdVTEFSIGFuZCBVR0xZIQovXC4vcyxcLlwuL1wuXC4kLDo6LAovXC4vcyxcLlwuJCw6LAojIFNhbWUgaWYgaXQgZW5kcyB3aXRoICAuICAoYSBzaW5nbGUgZG90KTsgdHVybiBpdCBpbnRvIG5vdGhpbmcuCi9cLi9zLFwuJCwsZwojIFJ1bGVzIGZvciAuLiBhbmQgLiBlbHNld2hlcmUgaW4gdGhlIGxpbmUKIyBDb252ZXJ0IC4uLzogdG8gOjosIHJlY3VyIHRvIGdldCB3aG9sZSBwYXRocy4KL1wuL3MsXC5cLi86LDo6LGcKIyBDb252ZXJ0IC4uLy4uLyB0byA6OjogCi9cLi9zLFwuXC4vXC5cLi8sOjo6LGcKL1wuL3MsXC5cLi8sOjosZwovXC5cLy9zLFwuLyw6LGcKL1wvL3MsLyw6LGcKCi89L3MvID0gXC4kLyA9IDovCgojIENvbW1lbnQgb3V0IGFueSBleHBsaWNpdCBzcmNkaXIgc2V0dGluZy4KIyAvc3JjZGlyL3MvXnNyY2Rpci8jIHNyY2Rpci8KCi92ZXJzaW9uL3MvXnZlcnNpb249LyMgdmVyc2lvbj0vCgovQkFTRURJUi9zL15CQVNFRElSID0uKiQvQkFTRURJUiA9ICJ7c3Jjcm9vdH0iLwove0JBU0VESVJ9Oi9zL3tCQVNFRElSfTove0JBU0VESVJ9L2cKIyBUaGUgb3JpZ2luYWwgbGluZXMgc2NyZXcgdXAgLUkkKHNyY2RpcikvLi4vZGVzICBieSBlbGltaW5hdGluZyBhIGNvbG9uLgojIFByb3Bvc2VkIGZpeDogIEVsaW1pbmF0ZSBzcmNkaXIgcHJlZml4ZXMgdG90YWxseS4KIy97c3JjZGlyfTovcy97c3JjZGlyfTovIntzcmNkaXJ9Ii9nCi97c3JjZGlyfTovcy97c3JjZGlyfTovL2cKIy8ie3NyY2Rpcn0iOi9zLyJ7c3JjZGlyfSI6LyJ7c3JjZGlyfSIvZwoKIyBDb21tZW50IG91dCBzZXR0aW5ncyBvZiBhbnl0aGluZyBzZXQgYnkgbXB3IGhvc3QgY29uZmlnLgojIy9DQy9zL15DQyAqPS8jQ0MgPS8KIyMvQ0ZMQUdTL3MvXkNGTEFHUyAqPS8jQ0ZMQUdTID0vCiMjL0xERkxBR1Mvcy9eTERGTEFHUyAqPS8jTERGTEFHUyA9LwoKIyBDaGFuZ2UgLUkgdXNhZ2UuCi8tSS9zLy1JXC4vLWkgOi9nCi8tSS9zLy1JOjpiZmQvLWkgOjpiZmQ6L2cKLy1JL3MvLUk6OmluY2x1ZGUvLWkgOjppbmNsdWRlOi9nCi8tSS9zLy1JLy1pIC9nCgojIENoYW5nZSAtRCB1c2FnZS4KLy1EL3MvXChbID1dXCktRFwoW14gXSpcKS9cMS1kIFwyL2cKCiMgQ2hhbmdlIGNvbnRpbnVhdGlvbiBjaGFyLgovXFwkL3MvXFwkL1xcT3B0aW9uLWQvCgojIENoYW5nZSB3aWxkY2FyZCBjaGFyLgovXlteI10vcy9cKi9cXE9wdGlvbi14L2cKCiMgQ2hhbmdlIHBhdGggb2YgdmFyaW91cyB0eXBlcyBvZiBzb3VyY2UgZmlsZXMuCiMvXC5bY2hseV0vcy9cKFsgCT48PV1cKVwoWy1hLXpBLVowLTlfJDoiXSpcKVwuXChbY2hseV1cKS9cMSJ7c30iXDIuXDMvZwojL1wuW2NobHldL3MvXlwoWy1hLXpBLVowLTlfJHt9OiJdKlwpXC5cKFtjaGx5XVwpLyJ7c30iXDEuXDIvZwojIFNraXAgdGhlIHtzfSBhbmQge299IGJ1c2luZXNzIGZvciBub3cuLi4KIyBGaXggc29tZSBvdmVyZW50aHVzaWFzbXMuCiMve3N9L3MvIntzfSIie3NyY2Rpcn0iLyJ7c3JjZGlyfSIvZwojL3tzfS9zLyJ7c30ie1woW2EtekEtWjAtOV9dKlwpZGlyfS8ie1wxZGlyfSIvZwojL3tzfS9zLyJ7c30ie1woW2EtekEtWjAtOV9dKlwpRElSfS8ie1wxRElSfSIvZwojL3tzfS9zLyJ7c30iIntcKFthLXpBLVowLTlfXSpcKWRpcn0iLyJ7XDFkaXJ9Ii9nCiMve3N9L3MvIntzfSIie1woW2EtekEtWjAtOV9dKlwpRElSfSIvIntcMURJUn0iL2cKIy97c30vcy8ie3N9IjovOi9nCiMve3N9L3MvXiJ7c30iLy9nCiMvXlwuL3MvIntzfSJcLi8uL2cKCiMgQ2hhbmdlIGV4dGVuc2lvbiBhbmQgcGF0aCBvZiBvYmplY3RzLCBleGNlcHQgaW4gdGhlIE9CSkVYVCBsaW5lLgojL15PQkpFWFQvIXMvXChbIAk9XVwpXChbLWEtekEtWjAtOV8ke306Il0qXClcLm8vXDEie299IlwyLmMuby9nCiMvXC5vL3MvXlwoWy1hLXpBLVowLTlfJHt9OiJdKlwpXC5vLyJ7b30iXDEuYy5vL2cKIyBTa2lwIHRoZSB7b30gc3R1ZmYgZm9yIG5vdy4uLgovXk9CSkVYVC8hcy9cKFsgCT1dXClcKFstYS16QS1aMC05XyR7fToiXSpcKVwuby9cMVwyLmMuby9nCi9cLm8vcy9eXChbLWEtekEtWjAtOV8ke306Il0qXClcLm8vXDEuYy5vL2cKIyBDbGVhbiB1cC4KIy9cLm8vcy8ie299IiJ7b30iLyJ7b30iL2cKIy97b30vcy9eIntvfSJcKFthLXpBLVowLTlfXSpcKT0vXDE9L2cKCiMgQ2hhbmdlIGV4dGVuc2lvbiBvZiBsaWJzLgojIC9cLmEvcy9saWJcKFthLXpdKlwpXC5hL2xpYlwxLm8vZwoKIyBSZW1vdmUgbm9uLWVjaG8gb3B0aW9uLgovXgktL3MvXgktLwkvCgojIENoYW5nZSBjcCB0byBkdXBsaWNhdGUuCiMgL2NwL3MvXlwoWyAJXSpcKWNwIC9cMUR1cGxpY2F0ZSAtZCAteSAvCiMgQ2hhbmdlIG12IHRvIHJlbmFtZS4KIyAvbXYvcy9eXChbIAldKlwpbXYgL1wxUmVuYW1lIC15IC8KIyAvUmVuYW1lL3MvXlwoWyAJXSpcKVJlbmFtZSAteSAtZi9cMVJlbmFtZSAteS8KIyBDaGFuZ2Ugcm0gdG8gZGVsZXRlLgovXlJNPS9zL3JtIC1mL0RlbGV0ZSAtaSAteS8KIyAvcm0vcy9eXChbIAldKlwpcm0gL1wxRGVsZXRlIC15IC8KIyAvRGVsZXRlL3MvXlwoWyAJXSpcKURlbGV0ZSAteSAtZi9cMURlbGV0ZSAteS8KIyBDb21tZW50IG91dCBzeW1saW5raW5nLgojIC9sbi9zL15cKFsgCV0qXClsbiAvXDEjIGxuIC8KCiMgUmVtb3ZlIC1jIGZyb20gZXhwbGljaXQgY29tcGlsZXIgY2FsbHMuCiMgLy1jL3Mve0NDfVwoLipcKSAtYyBcKC4qXClcKFstYS16XSpcKVwuYy97Q0N9XDEgXDJcMy5jIC1vICJ7b30iXDMuYy5vL2cKIyBEb24ndCBhc2suLi4gcHJldiBzdWJzdCBzZWVtcyB0byBvbWl0IHRoZSBzZWNvbmQgZmlsZW5hbWUuCiMgLy1vL3MvXChbLWEtel0qXClcLmMgLW8gIntvfSIuYy5vL1wxXC5jIC1vICJ7b30iXDEuYy5vLwoKIyBDaGFuZ2UgbGlua2luZyBjYyB0byBsaW5rLgovTERGTEFHUy8gICAgcy97Q0N9IFwoLipcKXtDRkxBR1N9XCguKlwpe0xERkxBR1N9L0xpbmsgXDEgXDIge0xERkxBR1N9LwovQ0ZMQUdTX0xJTksvcy97Q0N9IFwoLipcKXtDRkxBR1NfTElOS31cKC4qXCl7TERGTEFHU30vTGluayBcMSBcMiB7TERGTEFHU30vCgojIENvbW1lbnQgb3V0IC5QSE9OWSBydWxlcy4KL1wuUEhPTlkvcy9eXC5QSE9OWS8jIFwuUEhPTlkvCiMgQ29tbWVudCBvdXQgLlNVRkZJWEVTIHJ1bGVzLgovXC5TVUZGSVhFUy9zL15cLlNVRkZJWEVTLyMgXC5TVUZGSVhFUy8KIyBDb21tZW50IG91dCAuUFJFQ0lPVVMgcnVsZXMuCi9cLlBSRUNJT1VTL3MvXlwuUFJFQ0lPVVMvIyBcLlBSRUNJT1VTLwojIyBDb21tZW50IG91dCBkZWZhdWx0IHJ1bGVzLgojIy9eXC4vcy9eXChcLlthLXpdKlwuW2Etel0qIFwpLyMgXDEvCgojCiMgIEVuZCBvZiBvcmlnaW5hbCBoYWNrLW1mLnNlZAojCiMgIEJlZ2luIG9yaWdpbmFsIGhhY2stbWYyLnNlZAojCiMgVHJhbnNmb3JtIGV4cHJlc3Npb25zLgoKIyBTZXQgdGhlIGluc3RhbGwgcHJvZ3JhbSBhcHByb3ByaWF0ZS4KIyAvSU5TVEFMTC9zL15JTlNUQUxMICo9ICpgLipgOmluc3RhbGwuc2ggLWMvSU5TVEFMTCA9IER1cGxpY2F0ZSAteS8KCiMgSW5jbHVkZSBmcm9tIHRoZSBleHRyYS1pbmNsdWRlIGRpci4KIyAvXklOQ0xVREVTID0gL3MvXklOQ0xVREVTID0gL0lOQ0xVREVTID0gLWkgIntzcmNyb290fSJleHRyYS1pbmNsdWRlIC8KCiMgWXVjayAtIHJlbW92ZSB1bmNvbnZlcnRlZCBhdXRvY29uZiB0aGluZ3MuCiMgL0Avcy9AW14gCV0qQC8vZwoKIyBIYWNrZXJ5LCBwdXJlIGFuZCBzaW1wbGUKIyBUbyBzcGVlZCB1cCBjb21waWxlcywgcmVtb3ZlIGR1cGxpY2F0ZWQgLWkgb3B0aW9ucy4KLy1pL3MvXCgtaSBbXiBdKlwpIFwxIC9cMSAvZwoKIyBOb3RlISAgVGhlcmUgYXJlIDgtYml0IGNoYXJhY3RlcnMgaW4gdGhlIHRocmVlIGxpbmVzIGJlbG93OgojICAgCTB4YzQsIDB4YjYsIDB4YzUuCi9PcHRpb24vcy9cXE9wdGlvbi1mL8QvZwovT3B0aW9uL3MvXFxPcHRpb24tZC+2L2cKL09wdGlvbi9zL1xcT3B0aW9uLXgvxS9nCg==