@layerzerolabs/oft-stellar-sdk 1.2.34

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,1638 @@
1
+ import { Buffer } from "buffer";
2
+ import { AssembledTransaction, Client as ContractClient, ClientOptions as ContractClientOptions, MethodOptions } from '@stellar/stellar-sdk/contract';
3
+ import type { u32, u64, i128, Option } from '@stellar/stellar-sdk/contract';
4
+ export * from '@stellar/stellar-sdk';
5
+ export * as contract from '@stellar/stellar-sdk/contract';
6
+ export * as rpc from '@stellar/stellar-sdk/rpc';
7
+ import type { xdr } from '@stellar/stellar-sdk';
8
+ export type InvokerContractAuthEntry = xdr.ScVal;
9
+ /**
10
+ * Embedded WASM bytecode (base64-encoded)
11
+ * Size: 78174 bytes (76.34 KB)
12
+ */
13
+ export declare const WASM_BASE64 = "AGFzbQEAAAABlQIsYAF+AX5gA35+fgF+YAJ+fgF+YAR+fn5+AX5gAAF+YAF+AX9gAn9/AGACfn8BfmACf38Bf2AFfn5+fn4AYAJ/fwF+YAN+fn4AYAR/f39+AGADf39/AX5gAABgA39/fwBgAX8AYAF+AGACfn4Bf2ABfwF+YAJ/fgBgAAF/YAJ+fwBgAX8Bf2ADf35+AGAEf39/fwF+YAV/fn9+fgBgA35/fwBgAn9+AX9gBH9/fn4AYAV+f39/fwBgBn9+fn5+fwBgBX9+fn5+AGAEfn5+fgBgBX5+fn5+AX5gA35/fgBgA35+fwBgA39+fwBgBn5+fn5+fgF+YAJ+fwF/YAR+fn9/AX5gAn5+AGAEf35+fwBgA39/fwF/AvcBKQF2ATMAAAFsAV8AAQFiATgAAAFiAWUAAgFsATEAAgFsATcAAwFhATAAAAF4ATAAAgFiAV8AAAFiAWYAAQFiATQABAF4ATcABAFkAV8AAQFsATIAAgF4ATEAAgF2AV8ABAF2ATYAAgFhATYAAAF2ATEAAgFpAV8AAAFpATAAAAFiATEAAwFiATMAAgF2AWcAAgFpATgAAAFpATcAAAFpATYAAgFiAWoAAgFiATIAAwFtATkAAQFtAWEAAwFiAW0AAQFiATAAAAF4ATQABAF4ATMABAF4ATgABAFsATAAAgFsATgAAgF4ATUAAAF2AWQAAgF2ATIAAgPnAeUBBQYHCAkCCgsJDAoNDg8QBxEKEgYTBgoUEAQOFRMGEAoQDhAWChcYCBQUGBYEEBYOEBMQChMGBA8UBgIYBBIYFBkVExoUGxQQHBwQDgQGBBcGEBAOFRAAHQ8GBA8dFxQeFBQPHyADAgICAhQBAhQCBAAAAAQAAAQCFCEKIAQEBQQEBAIUARMUIAMQABMiBgYRIQQEBAABAgESBQQRIyQWEwELAgITEBAAAgAAAiUCBAAUAiYTCicCDigBAgIBBAQEACkCDhUYBAQCBgIUEwQQBgQEDg8UDwYGBg8TBhYfKiAgKisrIAQFAXABAQEFAwEAEQYhBH8BQYCAwAALfwBBzInAAAt/AEH2jcAAC38AQYCOwAALB+kIQQZtZW1vcnkCAA5zZXRfcmF0ZV9saW1pdACOARFyYXRlX2xpbWl0X2NvbmZpZwCPARRyYXRlX2xpbWl0X2luX2ZsaWdodACQARNyYXRlX2xpbWl0X2NhcGFjaXR5AJEBE3NldF9kZWZhdWx0X2ZlZV9icHMAkgELc2V0X2ZlZV9icHMAlAEXc2V0X2ZlZV9kZXBvc2l0X2FkZHJlc3MAlQEPZGVmYXVsdF9mZWVfYnBzAJgBB2ZlZV9icHMAmQERZWZmZWN0aXZlX2ZlZV9icHMAmgELaGFzX29mdF9mZWUAmwETZmVlX2RlcG9zaXRfYWRkcmVzcwCcAQVwYXVzZQCdAQd1bnBhdXNlAJ4BCWlzX3BhdXNlZACfAQlxdW90ZV9vZnQAoAEFdG9rZW4ApQEPc2hhcmVkX2RlY2ltYWxzAKYBF2RlY2ltYWxfY29udmVyc2lvbl9yYXRlAKgBEWFwcHJvdmFsX3JlcXVpcmVkAKkBDW1zZ19pbnNwZWN0b3IAqgERc2V0X21zZ19pbnNwZWN0b3IAqwEKcXVvdGVfc2VuZACtAQRzZW5kALEBDV9fY29uc3RydWN0b3IAtQEIb2Z0X3R5cGUAugEMb2FwcF92ZXJzaW9uALsBCGVuZHBvaW50ALwBBHBlZXIAvQEIc2V0X3BlZXIAvgEMc2V0X2RlbGVnYXRlAL8BCmdyYW50X3JvbGUAwAELcmV2b2tlX3JvbGUAyQENcmVub3VuY2Vfcm9sZQDLAQ5zZXRfcm9sZV9hZG1pbgDMARFyZW1vdmVfcm9sZV9hZG1pbgDQAQhoYXNfcm9sZQDRAQ5nZXRfcm9sZV9hZG1pbgDSARVnZXRfcm9sZV9tZW1iZXJfY291bnQA0wEPZ2V0X3JvbGVfbWVtYmVyANQBEmdldF9leGlzdGluZ19yb2xlcwDXARVhbGxvd19pbml0aWFsaXplX3BhdGgA2AEKbmV4dF9ub25jZQDaAQpsel9yZWNlaXZlANsBFWlzX2NvbXBvc2VfbXNnX3NlbmRlcgDiARBlbmZvcmNlZF9vcHRpb25zAOMBFHNldF9lbmZvcmNlZF9vcHRpb25zAOQBD2NvbWJpbmVfb3B0aW9ucwDlAQphdXRob3JpemVyAOYBBW93bmVyAOcBDXBlbmRpbmdfb3duZXIA6AESdHJhbnNmZXJfb3duZXJzaGlwAOkBGGJlZ2luX293bmVyc2hpcF90cmFuc2ZlcgDrARBhY2NlcHRfb3duZXJzaGlwAO8BEnJlbm91bmNlX293bmVyc2hpcADwARNleHRlbmRfaW5zdGFuY2VfdHRsAPEBD3NldF90dGxfY29uZmlncwDzAQt0dGxfY29uZmlncwD2ARJmcmVlemVfdHRsX2NvbmZpZ3MA+QEVaXNfdHRsX2NvbmZpZ3NfZnJvemVuAPoBAV8DAQtvZnRfdmVyc2lvbgC7AQpfX2RhdGFfZW5kAwILX19oZWFwX2Jhc2UDAwrTkwLlAekBAwJ/AX4BfyOAgICAAEEgayIBJICAgIAAQQIhAgJAIABC/wGDQssAUg0AIAAQgICAgAAhAyABQQA2AgggASAANwMAIAEgA0IgiD4CDCABQRBqIAEQqoCAgABBAiECIAEpAxAiAEICUQ0AIACnQQFxDQACQCABKQMYIgCnQf8BcSIEQcoARg0AIARBDkcNAQsCQAJAIABBgILAgAAQq4CAgABCIIinDgIAAQILIAEoAgggASgCDBCsgICAAA0BQQAhAgwBCyABKAIIIAEoAgwQrICAgAANAEEBIQILIAFBIGokgICAgAAgAgtKAgF+AX9CAiECAkAgASgCCCIDIAEoAgxPDQAgACABKQMAIAOtQiCGQgSEEJKAgIAANwMIIAEgA0EBajYCCEIAIQILIAAgAjcDAAsZACAAIAGtQiCGQgSEQoSAgIAgEJ+AgIAACxkAAkAgASAASQ0AIAEgAGsPCxD0gICAAAALsQEBAn8jgICAgABBMGsiBSSAgICAACAFIAMgBBCugICAADcDECAFIAI3AwggBSABNwMAQQAhBgNAAkAgBkEYRw0AQQAhBgJAA0AgBkEYRg0BIAVBGGogBmogBSAGaikDADcDACAGQQhqIQYMAAsLIABCju7qlb623vMAIAVBGGpBAxCvgICAABCwgICAACAFQTBqJICAgIAADwsgBUEYaiAGakICNwMAIAZBCGohBgwACwtDAQF/I4CAgIAAQRBrIgIkgICAgAAgAiAAIAEQ54CAgAACQCACKAIAQQFHDQAACyACKQMIIQEgAkEQaiSAgICAACABCxoAIACtQiCGQgSEIAGtQiCGQgSEEJeAgIAACyEAAkAgACABIAIQjICAgABC/wGDQgJRDQAQ9ICAgAAACwuxAQECfyOAgICAAEEwayIFJICAgIAAIAUgAyAEEK6AgIAANwMQIAUgAjcDCCAFIAE3AwBBACEGA0ACQCAGQRhHDQBBACEGAkADQCAGQRhGDQEgBUEYaiAGaiAFIAZqKQMANwMAIAZBCGohBgwACwsgAEKO7uqVvrbe8wAgBUEYakEDEK+AgIAAELCAgIAAIAVBMGokgICAgAAPCyAFQRhqIAZqQgI3AwAgBkEIaiEGDAALCx4AIAAgARCzgICAACACrUIghkIEhCADEIGAgIAAGgvHAQIBfwF+I4CAgIAAQRBrIgIkgICAgAACQAJAAkACQAJAAkAgAA4DAAECAAsgAkGKgMCAAEENEOCAgIAAIAIoAgANAyACIAIpAwgQ4YCAgAAMAgsgAkGXgMCAAEEGEOCAgIAAIAIoAgANAiACIAIpAwggAa1CIIZCBIQQ5ICAgAAMAQsgAkGdgMCAAEEREOCAgIAAIAIoAgANASACIAIpAwgQ4YCAgAALIAIpAwghAyACKQMAUA0BCwALIAJBEGokgICAgAAgAwurAQIBfwJ+I4CAgIAAQRBrIgMkgICAgAAQtYCAgAAgAyAAIAEQtoCAgAACQAJAAkAgAykDAFANACADKQMIIQQgAikDACIFEIKAgIAAQoCAgIAQVA0CIAUQgoCAgABC/////x9YDQEgAhC3gICAACAEIAVBAhC4gICAABCDgICAACEEDAILIAIpAwAhBAwBC0KDgICAgPoBELmAgIAAAAsgA0EQaiSAgICAACAEC0gBAX8jgICAgABBEGsiACSAgICAACAAQQRqEPeBgIAAAkAgACgCBEEBRw0AIAAoAgggACgCDBDygYCAAAsgAEEQaiSAgICAAAteAQF+ELWAgIAAAkACQCABIAIQuoCAgAAiA0IBELuAgIAARQ0AIANCARCEgICAACIDQv8Bg0LIAFENAQALIABCADcDAA8LIABCATcDACAAIAM3AwggASACELyAgIAAC70BAgF/AX4jgICAgABBEGsiASSAgICAACABQQA2AgggASAANgIEAkACQAJAIAFBBGpBAhDdgYCAACICEIKAgIAAQoCAgIBwg0KAgICAIFINACABQQA7AQ4gAhCCgICAAEKAgICAcINCgICAgCBSDQEgAiABQQ5qQQIQ7oCAgAAgAS8BDkGABkcNAiABQRBqJICAgIAADwtCg4CAgICCARC5gICAAAALEOCBgIAAAAtCg4CAgID6ARC5gICAAAALJQAgACABrUIghkIEhCAAEIKAgIAAQoCAgIBwg0IEhBCJgICAAAsLACAAEKaAgIAAGguKAQIBfwF+I4CAgIAAQTBrIgIkgICAgAAgAkEgakHAhsCAAEEPEOCAgIAAAkACQCACKAIgDQAgAiACKQMoNwMIIAIgAa1CIIZCBIQ3AxggAiAArUIghkIEhDcDECACQSBqIAJBCGoQ4oCAgAAgAigCIEUNAQsACyACKQMoIQMgAkEwaiSAgICAACADCw8AIAAgARCkgICAAEIBUQtrAgF/An4jgICAgABBEGsiAiSAgICAACACQQRqEMeAgIAAAkAgAigCBEEBRw0AIAI1AgwhAyACNQIIIQQgACABELqAgIAAQgEgBEIghkIEhCADQiCGQgSEEIWAgIAAGgsgAkEQaiSAgICAAAtOAgF/AX4jgICAgABBEGsiASSAgICAACABIAAQvoCAgAACQCABKAIADQBCg4CAgJD6ARC5gICAAAALIAEpAwghAiABQRBqJICAgIAAIAILiwECAX8BfiOAgICAAEEQayICJICAgIAAELWAgIAAAkACQAJAQQEgARC/gICAACIDQgEQu4CAgABFDQAgAiADQgEQhICAgAAQwICAgAAgAigCAEEBRw0BAAsgAEIANwMADAELIAIpAwghAyAAQgE3AwAgACADNwMIIAEQwYCAgAALIAJBEGokgICAgAALmwECAX8BfiOAgICAAEEQayICJICAgIAAAkACQAJAAkAgAEEBcUUNACACQfyFwIAAQQQQ4ICAgAAgAigCAA0CIAIgAikDCCABrUIghkIEhBDkgICAAAwBCyACQfSFwIAAQQgQ4ICAgAAgAigCAA0BIAIgAikDCBDhgICAAAsgAikDCCEDIAIpAwBQDQELAAsgAkEQaiSAgICAACADCyMAAkAgAUL/AYNCyABRDQAgAEIBNwMADwsgACABEO+AgIAAC2sCAX8CfiOAgICAAEEQayIBJICAgIAAIAFBBGoQx4CAgAACQCABKAIEQQFHDQAgATUCDCECIAE1AgghA0EBIAAQv4CAgABCASADQiCGQgSEIAJCIIZCBIQQhYCAgAAaCyABQRBqJICAgIAAC0kCAX8BfhC1gICAAAJAAkBBACAAEL+AgIAAIgFCAhC7gICAAEUNACABQgIQhICAgAAiAUL/AYNCzQBRDQEACxDDgICAAAALIAELCQAQ9ICAgAAAC00CAX8BfhC1gICAAEEAIQACQEEAEMWAgIAAIgFCAhC7gICAAEUNAEEBIQACQAJAIAFCAhCEgICAAKdB/wFxDgIBAgALAAtBACEACyAAC8IBAgF/AX4jgICAgABBEGsiASSAgICAAAJAAkACQAJAAkACQCAAQf8BcQ4DAAECAAsgAUHejcCAAEEGEOCAgIAAIAEoAgANAyABIAEpAwgQ4YCAgAAMAgsgAUHkjcCAAEEIEOCAgIAAIAEoAgANAiABIAEpAwgQ4YCAgAAMAQsgAUHsjcCAAEEKEOCAgIAAIAEoAgANASABIAEpAwgQ4YCAgAALIAEpAwghAiABKQMAUA0BCwALIAFBEGokgICAgAAgAgtrAgF/An4jgICAgABBEGsiAiSAgICAACACQQRqEMeAgIAAAkAgAigCBEEBRw0AIAI1AgwhAyACNQIIIQQgACABEMiAgIAAQgEgBEIghkIEhCADQiCGQgSEEIWAgIAAGgsgAkEQaiSAgICAAAsMACAAQQIQgYKAgAAL+gECAX8CfiOAgICAAEEwayICJICAgIAAIAJBIGpBnIPAgABBCRDggICAAAJAAkAgAigCIA0AIAIpAyghAwJAAkAgAUEBcUUNACACQSBqQfeBwIAAQQgQ4ICAgAAgAigCIA0CIAJBIGogAikDKBDhgICAAAwBCyACQSBqQfCBwIAAQQcQ4ICAgAAgAigCIA0BIAJBIGogAikDKBDhgICAAAsgAikDKCEEIAIpAyCnDQAgAiAENwMQIAIgAzcDCCACIACtQiCGQgSENwMYIAJBIGogAkEIahDigICAACACKAIgRQ0BCwALIAIpAyghAyACQTBqJICAgIAAIAMLawIBfwJ+I4CAgIAAQRBrIgEkgICAgAAgAUEEahDHgICAAAJAIAEoAgRBAUcNACABNQIMIQIgATUCCCEDQQEgABCzgICAAEIBIANCIIZCBIQgAkIghkIEhBCFgICAABoLIAFBEGokgICAgAALTQEBfyOAgICAAEEQayIAJICAgIAAIAAQy4CAgAACQCAAKAIADQBCg4CAgOCFARC5gICAAAALIAApAwgQhoCAgAAaIABBEGokgICAgAALEAAQtYCAgAAgABDWgICAAAuQAgMBfwF+An8jgICAgABBIGsiAiSAgICAAEGAgMCAAEEKEM2AgIAAIQMCQAJAAkACQAJAIABC/wGDQg5SDQAgA0L/AYNCDlENAQsgACADEIeAgIAAUEUNAQwCCyACIANCCIg3AwggAiAAQgiINwMYAkADQCACQRhqEM6AgIAAIQQgAkEIahDOgICAACEFIARBgIDEAEYNASAEIAVGDQAMAgsLIAVBgIDEAEYNAQsgAiABKQMAIAAQz4CAgAAgAigCAA0BQoOAgIDghwEQuYCAgAAACyACQQhqEMuAgIAAIAJBEGpBACACKAIIGyABENCAgIAADQBCg4CAgOCHARC5gICAAAALIAJBIGokgICAgAALRQIBfwF+I4CAgIAAQRBrIgIkgICAgAAgAiAAIAEQ/IGAgAACQCACKAIAQQFHDQAACyACKQMIIQMgAkEQaiSAgICAACADC5YBAgF+An8gACkDACEBA0ACQCABUEUNAEGAgMQADwsCQAJAIAFCMIinQT9xIgJBAUcNAEHfACECDAELAkACQAJAIAJBf2pBC08NAEEuIQMMAQsCQCACQXRqQRpPDQBBNSEDDAELIAJBJU0NAUE7IQMLIAIgA2ohAgwBCyAAIAFCBoYiATcDAAwBCwsgACABQgaGNwMAIAILTQECfyOAgICAAEEQayIDJICAgIAAELWAgIAAIANBCGogAiABENOAgIAAIAMoAgwhBCAAIAMoAgg2AgAgACAENgIEIANBEGokgICAgAALLQEBfyAAIAFyRSECAkAgAEUNACABRQ0AIAApAwAgASkDABDmgICAACECCyACCxIAELWAgIAAIAAgARDSgICAAAuSAQECfyOAgICAAEEgayICJICAgIAAIAJBBDYCCCACIAE3AxACQAJAAkAgAkEIahDNgYCAACIBQgEQu4CAgABFDQAgAUIBEISAgIAAIgGnQf8BcSIDQQ5GDQEgA0HKAEYNAQALIABCADcDAAwBCyAAQgE3AwAgACABNwMIIAJBCGoQzoGAgAALIAJBIGokgICAgAALbwEDfyOAgICAAEEgayIDJICAgIAAIAMgAjcDGCADIAE3AxAgA0ECNgIIIAMgA0EIahD/gYCAACADKAIEIQQCQCADKAIAIgVFDQAgA0EIahDOgYCAAAsgACAENgIEIAAgBTYCACADQSBqJICAgIAAC4oBAQF/I4CAgIAAQSBrIgIkgICAgAAgAkEQaiAAENGAgIAAAkACQCACKAIQQQFHDQAgAkEIaiABKQMAIAIpAxgQz4CAgAAgAigCCA0BCyACQRBqEMuAgIAAIAEgAkEYakEAIAIoAhAbENCAgIAADQBCg4CAgOCHARC5gICAAAALIAJBIGokgICAgAALkgECAX8BfiOAgICAAEEgayIAJICAgIAAIABBEGoQ1oCAgAAgACkDGCEBIAApAxBBiwgQ14CAgAAgACABNwMIIABBEGoQy4CAgAACQCAAQQhqIABBGGpBACAAKAIQGxDQgICAAA0AQoOAgIDggAEQuYCAgAAACyABEIaAgIAAGiAAKQMIIQEgAEEgaiSAgICAACABCxAAELWAgIAAIAAQ24CAgAALKQACQCAAp0EBcUUNAA8LIAFB+ndqrUIghkKDgICA4IABfBC5gICAAAALQgEBfyOAgICAAEEQayIAJICAgIAAIAAQ2YCAgAACQCAAKQMAUA0AQoOAgIDAgQEQuYCAgAAACyAAQRBqJICAgIAAC1MBAn4QtYCAgABCACEBAkACQEEBENqAgIAAIgJCABC7gICAAEUNACACQgAQhICAgAAiAUL/AYNCzQBSDQEgACABNwMIQgEhAQsgACABNwMADwsAC5IBAgF/AX4jgICAgABBEGsiASSAgICAAAJAAkACQAJAIABBAXFFDQAgAUG9i8CAAEEMEOCAgIAAIAEoAgANAiABIAEpAwgQ4YCAgAAMAQsgAUG4i8CAAEEFEOCAgIAAIAEoAgANASABIAEpAwgQ4YCAgAALIAEpAwghAiABKQMAUA0BCwALIAFBEGokgICAgAAgAgtNAQJ+QgAhAQJAAkBBABDagICAACICQgIQu4CAgABFDQAgAkICEISAgIAAIgFC/wGDQs0AUg0BIAAgATcDCEIBIQELIAAgATcDAA8LAAsTACABrUIghkIEhEICIABBAXEbC1oCAX8BfiOAgICAAEEQayIBJICAgIAAAkACQAJAIAAtABhBAkcNAEICIQIMAQsgASAAEN6AgIAAIAEoAgBBAXENASABKQMIIQILIAFBEGokgICAgAAgAg8LAAuVAgIBfwN+I4CAgIAAQSBrIgIkgICAgAAgAkEIaiABKQMAIAEpAwgQ54CAgABCASEDAkAgAigCCA0AIAIpAxAhBAJAAkAgAS0AGEEBRw0AIAJBCGpBk4LAgABBBRDggICAACACKAIIDQIgAkEIaiACKQMQEOGAgIAADAELIAJBCGpBkILAgABBAxDggICAACACKAIIDQEgAkEIaiACKQMQEOGAgIAACyACKQMQIQUgAikDCKcNACACQQhqIAEpAxAQ6ICAgAAgAigCCA0AIAIgAikDEDcDGCACIAU3AxAgAiAENwMIIABBwILAgABBAyACQQhqQQMQ6YCAgAA3AwhCACEDCyAAIAM3AwAgAkEgaiSAgICAAAtgAgF/AX4jgICAgABBEGsiACSAgICAACAAQZeEwIAAQQcQ4ICAgAACQAJAIAAoAgANACAAIAApAwgQ4YCAgAAgACgCAEEBRw0BCwALIAApAwghASAAQRBqJICAgIAAIAELUQIBfwF+I4CAgIAAQRBrIgMkgICAgAAgAyABIAIQ/IGAgABCASEEAkAgAygCAA0AIAAgAykDCDcDCEIAIQQLIAAgBDcDACADQRBqJICAgIAAC0QBAX8jgICAgABBEGsiAiSAgICAACACIAE3AwggAkEIakEBEK+AgIAAIQEgAEIANwMAIAAgATcDCCACQRBqJICAgIAAC10CAX8BfiOAgICAAEEgayICJICAgIAAIAIgASkDEDcDGCACIAEpAwg3AxAgAiABKQMANwMIIAJBCGpBAxCvgICAACEDIABCADcDACAAIAM3AwggAkEgaiSAgICAAAuTAQEBfyOAgICAAEEQayICJICAgIAAAkACQAJAAkAgAKdBAXFFDQAgAkH3g8CAAEEIEOCAgIAAIAIoAgANAiACIAIpAwggARDkgICAAAwBCyACQe2DwIAAQQoQ4ICAgAAgAigCAA0BIAIgAikDCBDhgICAAAsgAikDCCEAIAIpAwBQDQELAAsgAkEQaiSAgICAACAAC0gBAX8jgICAgABBEGsiAySAgICAACADIAI3AwggAyABNwMAIANBAhCvgICAACECIABCADcDACAAIAI3AwggA0EQaiSAgICAAAtgAgF/AX4jgICAgABBEGsiACSAgICAACAAQbeBwIAAQQYQ4ICAgAACQAJAIAAoAgANACAAIAApAwgQ4YCAgAAgACgCAEEBRw0BCwALIAApAwghASAAQRBqJICAgIAAIAELDQAgACABEIeAgIAAUAtbAAJAAkAgAUKAgICAgICAwAB8Qv//////////AFYNACABIAGFIAIgAUI/h4WEQgBSDQAgAUIIhkILhCEBDAELIAIgARCagICAACEBCyAAQgA3AwAgACABNwMICzsAAkACQCABQv//////////AFYNACABQgiGQgaEIQEMAQsgARCTgICAACEBCyAAQgA3AwAgACABNwMICy4AAkAgASADRg0AAAsgAK1CIIZCBIQgAq1CIIZCBIQgAa1CIIZCBIQQnYCAgAALSgEBfgJAAkBBABDrgICAACIAQgIQu4CAgABFDQAgAEICEISAgIAAIgBC/wGDQgRRDQEAC0KDgICAsPcCELmAgIAAAAsgAEIgiKcLwgECAX8BfiOAgICAAEEQayIBJICAgIAAAkACQAJAAkACQAJAIABB/wFxDgMAAQIACyABQfCHwIAAQQwQ4ICAgAAgASgCAA0DIAEgASkDCBDhgICAAAwCCyABQfyHwIAAQQUQ4ICAgAAgASgCAA0CIAEgASkDCBDhgICAAAwBCyABQYGIwIAAQQwQ4ICAgAAgASgCAA0BIAEgASkDCBDhgICAAAsgASkDCCECIAEpAwBQDQELAAsgAUEQaiSAgICAACACC8sGBQF/An4BfwN+AX8jgICAgABB4ABrIgUkgICAgAACQAJAAkACQAJAIAIpAzAiBhCCgICAACIHQoCAgIAQWg0AQQEhCAwBCyAFQcAAaiABEIiAgIAAQQQQuICAgAAiAUIEQoSAgIDAABCJgICAABDtgICAACAFKAJAQQFGDQMgBSkDSCEJIAVBADYCQCAJIAVBwABqQQQQ7oCAgAAgBSgCQCIIQf///wdxDQECQAJAAkAgCEEYdg4CAAEECyAFQcAAaiABQoSAgIDAAEKEgICAgAEQiYCAgAAQ7YCAgAAgBSgCQEEBRg0FIAUpA0ghCSAFQQA2AkAgCSAFQcAAakEEEO6AgIAAIAUoAkANAyAFQcAAaiABQoSAgICAAUKEgICAgAUQiYCAgAAQ74CAgAAgBSgCQEEBRw0BDAULIAVBwABqIAFChICAgMAAQoSAgIDABBCJgICAABDvgICAACAFKAJAQQFGDQQLIAUpA0ghCkECIQgLIAVBwABqEPCAgIAAAkACQCAFKQNAIgEgBSkDSCIJhFANACACKQMgIQsCQCADIARCgICAgICAgICAf4WEQgBSDQAgASAJg0J/UQ0BCyAFIAMgBCABIAkQiYKAgAAgBSkDCEIBWQ0BIAUpAwAhBCAFEIqAgIAANwNAIAVBwABqIAsQ8YCAgAAgBBDygICAACEMAkACQCAHQv////8PVg0AIAwpAwAhBAwBCyAMIAoQ8YCAgAApAwAgBhCDgICAACEECyACKAJAIAggAkEoahC0gICAACEDIAVBGGoQ84CAgAAgBSgCGEEBRw0DIAUpAyAhARCLgICAACEJIAUgAzcDOCAFIAQ3AzAgBSAJNwMoQQAhAgNAAkAgAkEYRw0AQQAhAgJAA0AgAkEYRg0BIAVBwABqIAJqIAVBKGogAmopAwA3AwAgAkEIaiECDAALCyABQo7yqLWNn7sBIAVBwABqQQMQr4CAgAAQjICAgABC/gGDUEUNAgwFCyAFQcAAaiACakICNwMAIAJBCGohAgwACwsQ9ICAgAAAC0KDgICAwPcCELmAgIAAAAtCg4CAgID3AhC5gICAAAALIAAgAzcDCCAAIAQ3AwAgBUHgAGokgICAgAAPCwALNgEBfkIBIQICQCABEIKAgIAAQoCAgIBwg0KAgICAwABSDQAgACABNwMIQgAhAgsgACACNwMACx8AIABCBCABrUIghkIEhCACrUIghkIEhBCVgICAABoLNgEBfkIBIQICQCABEIKAgIAAQoCAgIBwg0KAgICAgARSDQAgACABNwMIQgAhAgsgACACNwMAC+kBAgJ/BH4jgICAgABBwABrIgEkgICAgAACQAJAEOqAgIAAIgINAEIAIQNCASEEDAELQgAhA0IKIQVCASEEQgAhBgJAA0ACQCACQQFxRQ0AIAFBADYCPCABQSBqIAQgAyAFIAYgAUE8ahCGgoCAACABKAI8DQIgASkDKCEDIAEpAyAhBCACQQFGDQMLIAFBADYCHCABIAUgBiAFIAYgAUEcahCGgoCAACABKAIcDQEgASkDCCEGIAEpAwAhBSACQQF2IQIMAAsLEPSAgIAAAAsgACAENwMAIAAgAzcDCCABQcAAaiSAgICAAAvCAQEEfyOAgICAAEHAAGsiAiSAgICAACACQSBqQRhqIgNCADcDACACQSBqQRBqIgRCADcDACACQSBqQQhqIgVCADcDACACQgA3AyAgASACQSBqQSAQ7oCAgAAgAkEYaiADKQMANwMAIAJBEGogBCkDADcDACACQQhqIAUpAwA3AwAgAiACKQMgNwMAIAApAwAhASAAIAEgARCCgICAAEKAgICAcINCBIQgAkEgEOGBgIAANwMAIAJBwABqJICAgIAAIAALpwEBAX8jgICAgABBEGsiAiSAgICAACACIAFCOIYgAUKA/gODQiiGhCABQoCA/AeDQhiGIAFCgICA+A+DQgiGhIQgAUIIiEKAgID4D4MgAUIYiEKAgPwHg4QgAUIoiEKA/gODIAFCOIiEhIQ3AwggACkDACEBIAAgASABEIKAgIAAQoCAgIBwg0IEhCACQQhqQQgQ4YGAgAA3AwAgAkEQaiSAgICAACAACwwAIABBAhD2gICAAAsJABD7gYCAAAALTgIBfwF+I4CAgIAAQRBrIgAkgICAgAAgAEEBEPaAgIAAAkAgACgCAA0AQoOAgICw9wIQuYCAgAAACyAAKQMIIQEgAEEQaiSAgICAACABC00BAn5CACECAkACQCABEOuAgIAAIgNCAhC7gICAAEUNACADQgIQhICAgAAiAkL/AYNCzQBSDQEgACACNwMIQgEhAgsgACACNwMADwsACw4AELWAgIAAEPWAgIAAC2MBAX8jgICAgABBEGsiASSAgICAACABQQhqIAAQ+YCAgAACQAJAIAEoAghBAXFFDQAgASgCDCEADAELIAEQ+oCAgAAgASgCBEEAIAEoAgBBAXEbIQALIAFBEGokgICAgAAgAAtkAgF+AX8CQAJAAkBBASABELOAgIAAIgJCARC7gICAAA0AQQAhAQwBCyACQgEQhICAgAAiAkL/AYNCBFINASABEMmAgIAAIAJCIIinIQNBASEBCyAAIAE2AgAgACADNgIEDwsAC1oDAX8BfgF/QQAhAQJAAkBBACAAELOAgIAAIgJCAhC7gICAAEUNACACQgIQhICAgAAiAkL/AYNCBFINASACQiCIpyEDQQEhAQsgACADNgIEIAAgATYCAA8LAAtPAQJ+QgAhAQJAAkBBAiAAELOAgIAAIgJCAhC7gICAAEUNACACQgIQhICAgAAiAUL/AYNCzQBSDQEgACABNwMIQgEhAQsgACABNwMADwsACx0AAkAQ/YCAgAANAA8LQoOAgIDghAMQuYCAgAAACxAAEOWAgIAAQgIQu4CAgAALqQECAX8BfiOAgICAAEEQayIBJICAgIAAAkAgABD9gICAAEYNABDlgICAACECAkACQCAARQ0AIAJCAUICEIGAgIAAGgwBCyACQgIQjYCAgAAaC0G9gcCAAEEKEM2AgIAAEP+AgIAA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IQMMAAsLQQIhAwJAIAFC/wGDQswAUg0AIAFBwILAgABBAyACQQhqQQMQiIGAgAAgAkEgaiACKQMIEImBgIAAIAIoAiBBAUYNACACKQMQIgFC/wGDQssAUg0AIAIpAzghBCACKQMwIQUgARCAgICAACEGIAJBADYCSCACIAE3A0AgAiAGQiCIPgJMIAJBIGogAkHAAGoQqoCAgAAgAikDICIBQgJRDQAgAadBAXENAAJAIAIpAygiAadB/wFxIgdBygBGDQAgB0EORw0BCwJAAkACQCABQZiCwIAAEKuAgIAAQiCIpw4CAAEDCyACKAJIIAIoAkwQrICAgAANAkEAIQcMAQsgAigCSCACKAJMEKyAgIAADQFBASEHCyACQSBqIAIpAxgQioGAgAAgAigCIA0AIAIpAyghASAAIAU3AwAgACABNwMQIAAgBDcDCCAHIQMLIAAgAzoAGCACQdAAaiSAgICAAAsxAAJAIAIgBEYNAAALIAAgAa1CIIZCBIQgA61CIIZCBIQgAq1CIIZCBIQQnoCAgAAaC30CAX8BfgJAAkACQAJAIAGnQf8BcSICQcUARg0AIAJBC0cNAiAAIAFCP4c3AxggACABQgiHNwMQDAELIAEQmICAgAAhAyABEJmAgIAAIQEgACADNwMYIAAgATcDEAtCACEBDAELIABCg5CAgIABNwMIQgEhAQsgACABNwMAC10CAX8BfgJAAkAgAadB/wFxIgJBwABGDQACQCACQQZGDQBCASEDQoOQgICAASEBDAILIAFCCIghAUIAIQMMAQtCACEDIAEQlICAgAAhAQsgACADNwMAIAAgATcDCAvPAQIBfwR+I4CAgIAAQdAAayIDJICAgIAAELWAgIAAIAMgASACEIGBgIAAAkACQAJAIAMtAChBAkcNAEL///////////8AIQRCfyEFDAELIAMpAxAhBiADKQMYIQQgA0HAAGogAxCCgYCAACAEIAMpA0giBYUgBCAEIAV9IAYgAykDQCIHVK19IgWFg0J/Vw0BIAVCACAFQgBVGyEEQgAgBiAHfSAFQgBTGyEFCyAAIAU3AwAgACAENwMIIANB0ABqJICAgIAADwsQ9ICAgAAAC5cDAgF/BH4jgICAgABBwABrIgYkgICAgAAQ/ICAgAAgBkEwahDwgICAACAGKQM4IQcgBikDMCEIAkACQCAF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ACACIAE3AwBBgIDAgABBChDNgICAACACEMyAgIAAIAEQhoCAgAAaELWAgIAAIAJBCGoQ+4CAgAAgA6chBAJAAkAgAigCCCIFQQFHDQAgBEEBcUUNACACKQMQIAAQ5oCAgABFDQEMAwsgBSAEckEBcUUNAgtBAiACELOAgIAAIQECQAJAIARBAXENACABQgIQjYCAgAAaQgAhAQwBCyABIABCAhCBgICAABpCASEBC0HsgMCAAEEXEM2AgIAAEP+AgIAAIQMgAiABIAAQl4GAgAA3AxggA0GYgcCAAEEBIAJBGGpBARDpgICAABCOgICAABogAkEgaiSAgICAAEICDwsAC0KDgICA4IMDELmAgIAAAAs5AAJAIAFCAlENAAJAIAFC/wGDQs0AUQ0AIABCAjcDAA8LIAAgATcDCCAAQgE3AwAPCyAAQgA3AwALDQAgAUICIACnQQFxGwtHAgF/AX4jgICAgABBEGsiACSAgICAABC1gICAACAAQQhqEPqAgIAAIAAoAgggACgCDBDcgICAACEBIABBEGokgICAgAAgAQtaAQF/I4CAgIAAQRBrIgEkgICAgAACQCAAQv8Bg0IEUQ0AAAsQtYCAgAAgAUEIaiAAQiCIpxD5gICAACABKAIIIAEoAgwQ3ICAgAAhACABQRBqJICAgIAAIAALKgACQCAAQv8Bg0IEUQ0AAAsQtYCAgAAgAEIgiKcQ+ICAgACtQiCGQgSECx4AAkAgAEL/AYNCBFENAAALIABCIIinEIaBgIAArQtEAgF/AX4jgICAgABBEGsiACSAgICAABC1gICAACAAEPuAgIAAIAApAwAgACkDCBCXgYCAACEBIABBEGokgICAgAAgAQtpAQF/I4CAgIAAQRBrIgEkgICAgAACQCAAQv8Bg0LNAFENAAALIAEgADcDCEHYgcCAAEELEM2AgIAAIAFBCGoQzICAgAAgABCGgICAABoQtYCAgABBARD+gICAACABQRBqJICAgIAAQgILaQEBfyOAgICAAEEQayIBJICAgIAAAkAgAEL/AYNCzQBRDQAACyABIAA3AwhB44HAgABBDRDNgICAACABQQhqEMyAgIAAIAAQhoCAgAAaELWAgIAAQQAQ/oCAgAAgAUEQaiSAgICAAEICCw8AELWAgIAAEP2AgIAArQvHBQICfwd+I4CAgIAAQbABayICJICAgIAAAkACQAJAIABC/wGDQs0AUg0AIAJBMGogARChgYCAACACKAIwQQFxDQAgAigCgAEhAyACKQNYIQAgAikDUCEBIAIpA0ghBCACKQNAIQUQtYCAgAAgBSAEIAEgABCigYCAABCPgICAACEGIAJBMGogBSAEIAEgACADEIyBgIAAAkAgAikDMCIEIAIpA0AiBVYgAikDOCIAIAIpA0giAVUgACABURtFDQAgACABhSAAIAAgAX0gBCAFVK19IgeFg0IAUw0CQZCEwIAAQQcQo4GAgAAhCCACQTBqIAQgBX0gBxDngICAACACKAIwQQFGDQEgAiACKQM4NwOoASACIAg3A6ABIAZBvInAgABBAiACQaABakECEOmAgIAAEJCAgIAAIQYLIAJBMGpBASADEIuBgIAAQn8hB0IAIQgCQCACKQMwIglCf4UgAikDOCIKQv///////////wCFhFANAAJAIAMQ+ICAgAAiA0GQzgBHDQBCACEHQgAhCAwBCwJAIAMNACAJIQcgCiEIDAELIAJBADYCLCACQRBqIAkgCkKQzgBCACACQSxqEIaCgIAAIAIoAiwNAiADQZDOAEsNAiACIAIpAxAgAikDGEGQzgAgA2utQgAQiYKAgAAgAikDCCEIIAIpAwAhBwsgAkGgAWogByAIEOeAgIAAIAIoAqABDQAgAikDqAEhByACQaABakIAQgAQ54CAgAAgAigCoAFBAUYNACACIAIpA6gBNwOYASACIAc3A5ABQZSJwIAAQQIgAkGQAWpBAhDpgICAACEHIAJBoAFqIAQgACAFIAEQpIGAgAAgAigCoAFBAUcNAgsACxD0gICAAAALIAIgAikDqAE3A0AgAiAGNwM4IAIgBzcDMCACQTBqQQMQr4CAgAAhACACQbABaiSAgICAACAAC4YDAgJ/CX4jgICAgABB4ABrIgIkgICAgABBACEDAkADQCADQThGDQEgAkEIaiADakICNwMAIANBCGohAwwACwtCACEEQgEhBQJAIAFC/wGDQswAUg0AIAFBzIjAgABBByACQQhqQQcQiIGAgAAgAkHAAGogAikDCBCJgYCAACACKAJAQQFGDQAgAikDECIBQv8Bg0LIAFINACACKQMYIgZC/wGDQgRSDQAgAikDICIHQv8Bg0LIAFINACACKQNYIQggAikDUCEJIAJBwABqIAIpAygQiYGAgAAgAigCQEEBRg0AIAIpAzAiCkL/AYNCyABSDQAgAikDWCELIAIpA1AhDCACQcAAaiACKQM4EMCAgIAAIAIoAkANACACKQNIIQQgACAMNwMgIAAgCTcDECAAIAZCIIinNgJQIAAgCjcDSCAAIAE3A0AgACAHNwM4IAAgBDcDMCAAIAs3AyggACAINwMYQgAhBUIAIQQLIAAgBTcDACAAIAQ3AwggAkHgAGokgICAgAALJQACQAJAIAFCAFMNACADQn9VDQELQoOAgICQ9wIQuYCAgAAACwsaACAArUIghkIEhCABrUIghkIEhBCWgICAAAuHAQEBfyOAgICAAEEQayIFJICAgIAAIAUgAyAEEOeAgIAAQgEhBAJAIAUoAgANACAFKQMIIQMgBSABIAIQ54CAgAAgBSgCAA0AIAUgBSkDCDcDCCAFIAM3AwAgAEGoh8CAAEECIAVBAhDpgICAADcDCEIAIQQLIAAgBDcDACAFQRBqJICAgIAACwgAEPeAgIAACzkBAn8QtYCAgAACQBD1gICAABCngYCAACIAEOqAgIAAIgFPDQAQ9ICAgAAACyAAIAFrrUIghkIEhAs1AAJAIABCjvCx0+zFqtMAEI+AgIAAEIyAgIAAIgBC/wGDQgRRDQAQ9ICAgAAACyAAQiCIpwtEAgF/AX4jgICAgABBEGsiACSAgICAABC1gICAACAAEPCAgIAAIAApAwAgACkDCBCugICAACEBIABBEGokgICAgAAgAQsKABC1gICAAEIAC0QCAX8BfiOAgICAAEEQayIAJICAgIAAELWAgIAAIAAQ84CAgAAgACkDACAAKQMIEJeBgIAAIQEgAEEQaiSAgICAACABC/MBAgF/AX4jgICAgABBIGsiAiSAgICAACACQRBqIAAQloGAgAACQCACKQMQIgBCAlENACABQv8Bg0LNAFINACACKQMYIQMgAiABNwMIQYCAwIAAQQoQzYCAgAAgAkEIahDMgICAACABEIaAgIAAGhC1gICAAAJAAkAgAKdBAXFFDQBBAiADEKyBgIAADAELQQIQ64CAgABCAhCNgICAABoLQcyHwIAAQREQzYCAgAAQ/4CAgAAhASACIAAgAxCXgYCAADcDECABQeiHwIAAQQEgAkEQakEBEOmAgIAAEI6AgIAAGiACQSBqJICAgIAAQgIP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EI6AgIAAGiADQSBqJICAgIAAQgIPCwALlAECAX8BfiOAgICAAEEQayICJICAgIAAIAIgABCWgYCAAAJAIAIpAwAiAEICUQ0AIAFC/wGDQs0AUg0AIAIpAwghAyACIAE3AwBBgIDAgABBChDNgICAACACEMyAgIAAIAEQhoCAgAAaELWAgIAAEMKAgIAAEIuAgIAAIAAgAxC5gYCAACACQRBqJICAgIAAQgIPCwAL8AICA38BfiOAgICAAEEwayIDJICAgIAAAkACQAJAIABC/wGDQs0AUg0AAkAgAadB/wFxIgRBDkYNACAEQcoARw0BCyACQv8Bg0LNAFINACADIAI3AwgQtYCAgAAgAhCGgICAABogASADQQhqENSAgIAAAkAgASAAEMGBgIAADQAgARDCgYCAACIEIQUCQCAEDQAQw4GAgAAiBhCAgICAAEKAgICAgCBaDQMgBiABEJCAgIAAEMSBgIAAQQAhBQsgASAFIAAQxYGAgAAgASAAIAQQxoGAgAAgBEEBaiIERQ0DIAEgBBDHgYCAACADQcmLwIAAQQwQzYCAgAA3AyggAyAANwMgIAMgATcDECADIANBKGo2AhggA0EQahDIgYCAACEBIAMgAjcDECABQdyLwIAAQQEgA0EQakEBEOmAgIAAEI6AgIAAGgsgA0EwaiSAgICAAEICDwsAC0KDgICAoIcBELmAgIAAAAsQ9ICAgAAAC10BAn8jgICAgABBIGsiAiSAgICAACACIAE3AxggAiAANwMQIAJBAjYCCAJAIAJBCGoQzYGAgABCARC7gICAACIDRQ0AIAJBCGoQzoGAgAALIAJBIGokgICAgAAgAwtkAQN/I4CAgIAAQSBrIgEkgICAgAAgAUEDNgIIIAEgADcDECABIAFBCGoQ/4GAgAAgASgCBCECAkAgASgCACIDRQ0AIAFBCGoQzoGAgAALIAFBIGokgICAgAAgAkEAIANBAXEbC3kCAX8BfiOAgICAAEEgayIAJICAgIAAIABBADYCCAJAAkACQCAAQQhqEM2BgIAAIgFCARC7gICAAEUNACABQgEQhICAgAAiAUL/AYNCywBSDQIgAEEIahDOgYCAAAwBCxCPgICAACEBCyAAQSBqJICAgIAAIAEPCwALSAEBfyOAgICAAEEgayIBJICAgIAAIAFBADYCCCABQQhqEM2BgIAAIABCARCBgICAABogAUEIahDOgYCAACABQSBqJICAgIAAC1YBAX8jgICAgABBIGsiAySAgICAACADIAE2AgwgAyAANwMQIANBATYCCCADQQhqEM2BgIAAIAJCARCBgICAABogA0EIahDOgYCAACADQSBqJICAgIAAC00BAX8jgICAgABBIGsiAySAgICAACADIAE3AxggAyAANwMQIANBAjYCCCADQQhqIAIQgIKAgAAgA0EIahDOgYCAACADQSBqJICAgIAAC0YBAX8jgICAgABBIGsiAiSAgICAACACQQM2AgggAiAANwMQIAJBCGogARCAgoCAACACQQhqEM6BgIAAIAJBIGokgICAgAALqQECAX8BfiOAgICAAEEwayIBJICAgIAAIAEgACkDEDcDECABIAApAwA3AwggASAAKAIIKQMANwMAQQAhAAN+AkAgAEEYRw0AQQAhAAJAA0AgAEEYRg0BIAFBGGogAGogASAAaikDADcDACAAQQhqIQAMAAsLIAFBGGpBAxCvgICAACECIAFBMGokgICAgAAgAg8LIAFBGGogAGpCAjcDACAAQQhqIQAMAAsLhwEBAn8jgICAgABBEGsiAySAgICAAAJAIABC/wGDQs0AUg0AAkAgAadB/wFxIgRBDkYNACAEQcoARw0BCyACQv8Bg0LNAFINACADIAI3AwgQtYCAgAAgAhCGgICAABogASADQQhqENSAgIAAIAAgASACEMqBgIAAIANBEGokgICAgABCAg8LAAvsAwIDfwF+I4CAgIAAQTBrIgMkgICAgAACQAJAAkACQCABIAAQwYGAgABFDQAgARDCgYCAACIERQ0BIANBCGogASAAENOAgIAAIAMoAgwhBSADKAIIQb0IEISCgIAAIAEgBRCFgoCAACADIAA3AyAgAyABNwMYIANBAjYCECADQRBqEM2BgIAAQgEQjYCAgAAaIAUgBEF/aiIERw0CDAMLQoOAgIDQhwEQuYCAgAAAC0KDgICAsIcBELmAgIAAAAsgA0EQaiABIAQQ1YGAgAAgAykDECADKQMYENaBgIAAIQYgASAEEIWCgIAAIAEgBSAGEMWBgIAAIAEgBiAFEMaBgIAACyABIAQQx4GAgAACQAJAIAQNACADEMOBgIAAIgYgARCngICAABCTgYCAACADKAIAIgRBAkYNASADKAIEIQUgBEG8CBCEgoCAAAJAIAUgBhCAgICAAEIgiKdPDQAgBiAFrUIghkIEhBCogICAACEGCyAGEMSBgIAACyADQeSLwIAAQQwQzYCAgAA3AyggAyAANwMgIAMgATcDECADIANBKGo2AhggA0EQahDIgYCAACEBIAMgAjcDECABQdyLwIAAQQEgA0EQakEBEOmAgIAAEI6AgIAAGiADQTBqJICAgIAADwsQ9ICAgAAAC0sBAX8CQAJAIACnQf8BcSICQQ5GDQAgAkHKAEcNAQsgAUL/AYNCzQBSDQAQtYCAgAAgARCGgICAABogASAAIAEQyoGAgABCAg8LAAvfAQICfwJ+I4CAgIAAQTBrIgIkgICAgAACQAJAIACnQf8BcSIDQQ5GDQAgA0HKAEcNAQsCQCABp0H/AXEiA0EORg0AIANBygBHDQELEMqAgIAAELWAgIAAIAJBCGogABDSgICAACACKQMIIQQgAikDECEFIAJBBDYCCCACIAA3AxAgAkEIahDNgYCAACABQgEQgYCAgAAaIAJBCGoQzoGAgAAgAiABNwMgIAJCATcDGCACIAU3AxAgAiAENwMIIAIgADcDKCACQQhqEM+BgIAAIAJBMGokgICAgABCAg8LAAuXAwIBfwJ+I4CAgIAAQTBrIgEkgICAgAACQAJAAkACQAJAAkACQAJAAkACQCAAKAIADgUAAQIEBQALIAFBCGpBtIzAgABBDRDggICAACABKAIIDQcgAUEIaiABKQMQEOGAgIAADAULIAFBIGpBwYzAgABBEhDggICAACABKAIgDQYgASABKQMoNwMIIAEgACkDCDcDECABIAA1AgRCIIZCBIQ3AxggAUEgaiABQQhqEOKAgIAADAELIAFBIGpB04zAgABBEhDggICAACABKAIgDQUgASABKQMoNwMIIAEgACkDEDcDGCABIAApAwg3AxAgAUEgaiABQQhqEOKAgIAACyABKQMoIQIgASkDICEDDAMLIAFBCGpB5YzAgABBERDggICAACABKAIIDQMgAUEIaiABKQMQIAApAwgQ5ICAgAAMAQsgAUEIakH2jMCAAEEJEOCAgIAAIAEoAggNAiABQQhqIAEpAxAgACkDCBDkgICAAAsgASkDECECIAEpAwghAwsgA1ANAQsACyABQTBqJICAgIAAIAILaQIBfwJ+I4CAgIAAQRBrIgEkgICAgAAgAUEEahDHgICAAAJAIAEoAgRBAUcNACABNQIMIQIgATUCCCEDIAAQzYGAgABCASADQiCGQgSEIAJCIIZCBIQQhYCAgAAaCyABQRBqJICAgIAAC/kBAwF/An4BfyOAgICAAEEgayIBJICAgIAAIAApAyAhAkHwi8CAAEESEM2AgIAAIQMgASACNwMIIAEgAzcDAEEAIQQDQAJAIARBEEcNAEEAIQQCQANAIARBEEYNASABQRBqIARqIAEgBGopAwA3AwAgBEEIaiEEDAALCyABQRBqQQIQr4CAgAAhAiAAKQMQIAApAxgQl4GAgAAhAyABIAApAwAgACkDCBCXgYCAADcDGCABIAM3AxAgAkGkjMCAAEECIAFBEGpBAhDpgICAABCOgICAABogAUEgaiSAgICAAA8LIAFBEGogBGpCAjcDACAEQQhqIQQMAAsLwQEBAn8jgICAgABBwABrIgEkgICAgAACQAJAAkAgAKdB/wFxIgJBDkYNACACQcoARw0BCxDKgICAABC1gICAACABQQhqIAAQ0oCAgAAgASgCCEUNASABQQQ2AhggASAANwMgIAFBGGoQzYGAgABCARCNgICAABogASAANwM4IAFCADcDKCABIAEpAxA3AyAgAUIBNwMYIAFBGGoQz4GAgAAgAUHAAGokgICAgABCAg8LAAtCg4CAgICHARC5gICAAAALbQECfyOAgICAAEEQayICJICAgIAAAkAgAEL/AYNCzQBSDQACQCABp0H/AXEiA0EORg0AIANBygBHDQELIAJBCGogACABEM+AgIAAIAIoAgggAigCDBDcgICAACEAIAJBEGokgICAgAAgAA8LAAtYAQJ/I4CAgIAAQRBrIgEkgICAgAACQCAAp0H/AXEiAkEORg0AIAJBygBGDQAACyABIAAQ0YCAgAAgASkDACABKQMIEJeBgIAAIQAgAUEQaiSAgICAACAACzMBAX8CQCAAp0H/AXEiAUEORg0AIAFBygBGDQAACxC1gICAACAAEMKBgIAArUIghkIEhAtzAQJ/I4CAgIAAQRBrIgIkgICAgAACQAJAIACnQf8BcSIDQQ5GDQAgA0HKAEcNAQsgAUL/AYNCBFINABC1gICAACACIAAgAUIgiKcQ1YGAgAAgAikDACACKQMIENaBgIAAIQAgAkEQaiSAgICAACAADwsA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IAIgAzcDECACIAE3AwggAEGMi8CAAEECIAJBCGpBAhDpgICAABCOgICAABoMAQsQ7YGAgAAgAUIgiKdJDQNBASAAQgAQ7oGAgABBARDagICAAEIAIAFChICAgHCDIgEgARCFgICAABpBoIrAgABBFhDNgICAABD/gICAACEEIAIgATcDGCACIAM3AxAgAiAANwMIIARBvIrAgABBAyACQQhqQQMQ6YCAgAAQjoCAgAAaCyACQSBqJICAgIAAQgIPCwALQoOAgIDwgAEQuYCAgAAAC0KDgICAgIEBELmAgIAAAAsTAEEBENqAgIAAQgAQjYCAgAAaCzMBAn4QooCAgAAhAAJAEKOAgIAAQiCIIgEgAEIgiCIAVA0AIAGnIACnaw8LEPSAgIAAAAsVACAAENqAgIAAIAEgAhCBgICAABoLiAECAX8CfiOAgICAAEEQayIAJICAgIAAELWAgIAAIAAQ2YCAgAAgACkDCCEBIAApAwBBiQgQ14CAgAAgARCGgICAABogABDbgICAAAJAIAAoAgANABDDgICAAAALIAApAwghAhDsgYCAACABELiBgIAAIAIgARDqgYCAACAAQRBqJICAgIAAQgILhAECAX8CfiOAgICAAEEQayIAJICAgIAAELWAgIAAENWAgIAAIQEQ2ICAgABBABDagICAAEICEI2AgIAAGkGci8CAAEETEM2AgIAAEP+AgIAAIQIgACABNwMIIAJBsIvAgABBASAAQQhqQQEQ6YCAgAAQjoCAgAAaIABBEGokgICAgABCAgsxAAJAIABC/wGDQgRSDQAgAUL/AYNCBFINACAAQiCIpyABQiCIpxDygYCAAEICDwsACxsAIACtQiCGQgSEIAGtQiCGQgSEEKWAgIAAGgu8BAEFfyOAgICAAEHQAGsiAiSAgICAACACQShqIAAQ9IGAgAACQCACKAIoQQJGDQAgAkEIakEIaiACQShqQQhqIgMoAgA2AgAgAiACKQIoNwMIIAJBKGogARD0gYCAACACKAIoQQJGDQAgAkEYakEIaiADKAIANgIAIAIgAikCKDcDGBDKgICAABC1gICAAAJAAkACQBDEgICAAA0AEO2BgIAAIgNBgPuAAyADQYD7gANJGyEEIAIgAkEYajYCLCACIAJBCGo2AihBACEDA0AgA0EIRg0DAkAgAkEoaiADaigCACIFKAIAQQFxRQ0AIAUoAggiBiAESw0DIAUoAgQgBksNAwsgA0EEaiEDDAALC0KDgICA0P8AELmAgIAAAAtCg4CAgMD/ABC5gICAAAALAkACQCACKAIIQQFHDQAgAigCDCACKAIQELaBgIAADAELQQEQxYCAgABCAhCNgICAABoLAkACQCACKAIYQQFHDQAgAigCHCACKAIgELeBgIAADAELQQIQxYCAgABCAhCNgICAABoLIAJBKGpBCGogAkEIakEIaigCADYCACACQTxqIAJBGGpBCGooAgA2AgAgAiACKQMINwMoIAIgAikDGDcCNEGYjcCAAEEPEM2AgIAAEP+AgIAAIQAgAkEoahD1gYCAACEBIAIgAkE0ahD1gYCAADcDSCACIAE3A0AgAEG8jcCAAEECIAJBwABqQQIQ6YCAgAAQjoCAgAAaIAJB0ABqJICAgIAAQgIPCwALaAEBfyOAgICAAEEQayICJICAgIAAAkACQCABQgJRDQAgAkEEaiABEP2BgIAAAkAgAigCBEUNACAAQQI2AgAMAgsgACACKQIINwIEIABBATYCAAwBCyAAQQA2AgALIAJBEGokgICAgAALQwIBfwF+I4CAgIAAQRBrIgEkgICAgAAgASAAEPiBgIAAAkAgASgCAEEBRw0AAAsgASkDCCECIAFBEGokgICAgAAgAgugAQICfwF+I4CAgIAAQcAAayIAJICAgIAAELWAgIAAIABBCGoQ94GAgAAgAEEUaiIBEMeAgIAAIABBMGogAEEIahD4gYCAAAJAAkAgACgCMA0AIAApAzghAiAAQTBqIAEQ+IGAgAAgACgCMEEBRw0BCwALIAAgACkDODcDKCAAIAI3AyAgAEEgakECEK+AgIAAIQIgAEHAAGokgICAgAAgAgsMACAAQQEQgYKAgAALMAACQCABKAIAQQFHDQAgACABKAIEIAEoAggQ/oGAgAAPCyAAQgA3AwAgAEICNwMIC4gBAQF/I4CAgIAAQRBrIgAkgICAgAAQyoCAgAAQtYCAgAACQBDEgICAAEUNAEKDgICA4P8AELmAgIAAAAtBABDFgICAAEIBQgIQgYCAgAAaQcyNwIAAQRIQzYCAgAAQ/4CAgABBBEEAIABBCGpBABDpgICAABCOgICAABogAEEQaiSAgICAAEICCwkAEMSAgIAArQsDAAAL2wECAX4E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cGF5X2luX3pyb3JlY2VpdmVyACEEEAAHAAAAHgIQAAcAAAAgAxAABwAAACUCEAAKAAAALwIQAAgAAABub25jZXNlbmRlcnNyY19laWQAAGACEAAFAAAAZQIQAAYAAABrAhAABwAAAG5hdGl2ZV9mZWV6cm9fZmVlAAAAjAIQAAoAAACWAhAABwAAAGZlZWd1aWQAsAIQAAMAAACzAhAABAAAAGACEAAFAAAAbmF0aXZlX3Rva2Vuc2V0X2RlbGVnYXRlc2VuZF9jb21wb3NlRW5kcG9pbnRQZWVyZWlkcGVlcgAAAxAAAwAAAAMDEAAEAAAAbXNnX3R5cGVvcHRpb25zAAADEAADAAAAGAMQAAgAAAAgAxAABwAAAEVuZm9yY2VkT3B0aW9uc2VuZm9yY2VkX29wdGlvbl9zZXRlbmZvcmNlZF9vcHRpb25zAABiAxAAEAAAAAAAAAAO+aziQb7SAGFtb3VudF9yZWNlaXZlZF9sZGFtb3VudF9zZW50X2xkiAMQABIAAACaAxAADgAAAG9mdF9yZWNlaXZlZIgDEAASAAAAbXNnX2luc3BlY3Rvcl9zZXRpbnNwZWN0b3IAAN0DEAAJAAAARGVjaW1hbHNEaWZmVG9rZW5Nc2dJbnNwZWN0b3JhbW91bnRfbGRjb21wb3NlX21zZ2RzdF9laWRleHRyYV9vcHRpb25zbWluX2Ftb3VudF9sZG9mdF9jbWR0bwANBBAACQAAABYEEAALAAAAIQQQAAcAAAAoBBAADQAAADUEEAANAAAAQgQQAAcAAABJBBAAAgAAAG1heF9hbW91bnRfbGQAAACEBBAADQAAADUEEAANAAAAZGVzY3JpcHRpb25mZWVfYW1vdW50X2xkpAQQAAsAAACvBBAADQAAAAAAABIAAAAAAAAAAAAAABIAAAABdGhyZXNob2xkb3duZXJzaGlwX3RyYW5zZmVycmVkbmV3X293bmVyb2xkX293bmVy/gQQAAkAAAAHBRAACQAAAG93bmVyc2hpcF90cmFuc2ZlcnJpbmd0dGwAAAD+BBAACQAAAAcFEAAJAAAANgUQAAMAAABvd25lcnNoaXBfdHJhbnNmZXJfY2FuY2VsbGVkY2FuY2VsbGVkX3BlbmRpbmdfb3duZXJvd25lcnAFEAAXAAAAhwUQAAUAAABvd25lcnNoaXBfcmVub3VuY2VkAAcFEAAJAAAAT3duZXJQZW5kaW5nT3duZXJyb2xlX2dyYW50ZWRjYWxsZXIA1QUQAAYAAAByb2xlX3Jldm9rZWRyb2xlX2FkbWluX2NoYW5nZWRuZXdfYWRtaW5fcm9sZXByZXZpb3VzX2FkbWluX3JvbGUAAgYQAA4AAAAQBhAAEwAAAEV4aXN0aW5nUm9sZXNSb2xlSW5kZXhUb0FjY291bnRSb2xlQWNjb3VudFRvSW5kZXhSb2xlQWNjb3VudHNDb3VudFJvbGVBZG1pbmV4dGVuZF90b38GEAAJAAAA4AQQAAkAAAB0dGxfY29uZmlnc19zZXRpbnN0YW5jZXBlcnNpc3RlbnQAAACnBhAACAAAAK8GEAAKAAAAdHRsX2NvbmZpZ3NfZnJvemVuRnJvemVuSW5zdGFuY2VQZXJzaXN0ZW50APuvAg5jb250cmFjdHNwZWN2MAAAAAIAAAAAAAAAAAAAAA1PRlRGZWVTdG9yYWdlAAAAAAAAAwAAAAAAAAAAAAAADURlZmF1bHRGZWVCcHMAAAAAAAABAAAAAAAAAAZGZWVCcHMAAAAAAAEAAAAEAAAAAAAAAAAAAAARRmVlRGVwb3NpdEFkZHJlc3MAAAAAAAAEAAAAAAAAAAAAAAALT0ZURmVlRXJyb3IAAAAAAwAAAAAAAAANSW52YWxpZEZlZUJwcwAAAAAADBwAAAAAAAAAGEludmFsaWRGZWVEZXBvc2l0QWRkcmVzcwAADB0AAAAAAAAACVNhbWVWYWx1ZQAAAAAADB4AAAAFAAAAAAAAAAAAAAAQRGVmYXVsdEZlZUJwc1NldAAAAAEAAAATZGVmYXVsdF9mZWVfYnBzX3NldAAAAAABAAAAS1RoZSBkZWZhdWx0IGZlZSByYXRlIGluIGJhc2lzIHBvaW50cywgb3IgTm9uZSBpZiB0aGUgZGVmYXVsdCBmZWUgaXMgcmVtb3ZlZAAAAAAHZmVlX2JwcwAAAAPoAAAABAAAAAAAAAACAAAABQAAAAAAAAAAAAAACUZlZUJwc1NldAAAAAAAAAEAAAALZmVlX2Jwc19zZXQAAAAAAgAAAAAAAAAHZHN0X2VpZAAAAAAEAAAAAAAAADtUaGUgZmVlIHJhdGUgaW4gYmFzaXMgcG9pbnRzLCBvciBOb25lIGlmIHRoZSBmZWUgaXMgcmVtb3ZlZAAAAAAHZmVlX2JwcwAAAAPoAAAABAAAAAAAAAACAAAABQAAAAAAAAAAAAAAFEZlZURlcG9zaXRBZGRyZXNzU2V0AAAAAQAAABdmZWVfZGVwb3NpdF9hZGRyZXNzX3NldAAAAAABAAAASVRoZSBhZGRyZXNzIHRvIGRlcG9zaXQgZmVlcyB0bywgb3IgTm9uZSB0byByZW1vdmUgdGhlIGZlZSBkZXBvc2l0IGFkZHJlc3MAAAAAAAATZmVlX2RlcG9zaXRfYWRkcmVzcwAAAAPoAAAAEwAAAAAAAAACAAAAAgAAAAAAAAAAAAAAEk9GVFBhdXNhYmxlU3RvcmFnZQAAAAAAAQAAAAAAAAAAAAAABlBhdXNlZAAAAAAABAAAAAAAAAAAAAAAEE9GVFBhdXNhYmxlRXJyb3IAAAACAAAAAAAAAAZQYXVzZWQAAAAADCYAAAAAAAAAFFBhdXNlU3RhdHVzVW5jaGFuZ2VkAAAMJwAAAAUAAAAAAAAAAAAAAAlQYXVzZWRTZXQAAAAAAAABAAAACnBhdXNlZF9zZXQAAAAAAAEAAAAAAAAABnBhdXNlZAAAAAAAAQAAAAAAAAACAAAAAgAAAAAAAAAAAAAACURpcmVjdGlvbgAAAAAAAAIAAAAAAAAAAAAAAAdJbmJvdW5kAAAAAAAAAAAAAAAACE91dGJvdW5kAAAAAgAAAAAAAAAAAAAABE1vZGUAAAACAAAAAAAAADNOZXQgcmF0ZSBsaW1pdDogcmVsZWFzZXMgZGVjcmVtZW50IGluLWZsaWdodCBhbW91bnQAAAAAA05ldAAAAAAAAAAAOUdyb3NzIHJhdGUgbGltaXQ6IHJlbGVhc2VzIGRvIG5vdCBhZmZlY3QgaW4tZmxpZ2h0IGFtb3VudAAAAAAAAAVHcm9zcwAAAAAAAAEAAAA5Q29uZmlndXJhdGlvbiBmb3IgcmF0ZSBsaW1pdGluZywgdXNlZCBhcyBpbnB1dCBwYXJhbWV0ZXIuAAAAAAAAAAAAAA9SYXRlTGltaXRDb25maWcAAAAAAwAAAAAAAAAFbGltaXQAAAAAAAALAAAAAAAAAARtb2RlAAAH0AAAAARNb2RlAAAAAAAAAA53aW5kb3dfc2Vjb25kcwAAAAAABgAAAAQAAAAAAAAAAAAAAA5SYXRlTGltaXRFcnJvcgAAAAAABQAAAAAAAAARRXhjZWVkZWRSYXRlTGltaXQAAAAAAAwwAAAAAAAAAA1JbnZhbGlkQW1vdW50AAAAAAAMMQAAAAAAAAAQSW52YWxpZFRpbWVzdGFtcAAADDIAAAAAAAAADUludmFsaWRDb25maWcAAAAAAAwzAAAAAAAAAAlTYW1lVmFsdWUAAAAAAAw0AAAABQAAAAAAAAAAAAAADFJhdGVMaW1pdFNldAAAAAEAAAAOcmF0ZV9saW1pdF9zZXQAAAAAAAMAAAAAAAAACWRpcmVjdGlvbgAAAAAAB9AAAAAJRGlyZWN0aW9uAAAAAAAAAAAAAAAAAAADZWlkAAAAAAQAAAAAAAAAQlRoZSByYXRlIGxpbWl0IGNvbmZpZ3VyYXRpb24sIG9yIE5vbmUgaWYgdGhlIHJhdGUgbGltaXQgaXMgcmVtb3ZlZAAAAAAABmNvbmZpZwAAAAAD6AAAB9AAAAAPUmF0ZUxpbWl0Q29uZmlnAAAAAAAAAAACAAAAAgAAABdUaGUgT0ZUIG9wZXJhdGlvbiB0eXBlLgAAAAAAAAAAB09mdFR5cGUAAAAAAgAAAAAAAAAnTG9jayB0b2tlbnMgb24gc2VuZCwgdW5sb2NrIG9uIHJlY2VpdmUuAAAAAApMb2NrVW5sb2NrAAAAAAABAAAAZUJ1cm4gdG9rZW5zIG9uIHNlbmQsIG1pbnQgb24gcmVjZWl2ZS4KVGhlIGFkZHJlc3MgaXMgdGhlIE1pbnRhYmxlIGNvbnRyYWN0IHVzZWQgZm9yIG1pbnRpbmcgb24gY3JlZGl0AAAAAAAACE1pbnRCdXJuAAAAAQAAABMAAAAAAAABLlNldHMgb3IgcmVtb3ZlcyBhIHJhdGUgbGltaXQgZm9yIGEgc3BlY2lmaWMgZGlyZWN0aW9uIGFuZCBlbmRwb2ludC4KCiMgQXJndW1lbnRzCiogYGRpcmVjdGlvbmAgLSBUaGUgZGlyZWN0aW9uIChJbmJvdW5kIG9yIE91dGJvdW5kKQoqIGBlaWRgIC0gVGhlIGVuZHBvaW50IElECiogYGNvbmZpZ2AgLSBUaGUgcmF0ZSBsaW1pdCBjb25maWd1cmF0aW9uLCBvciBOb25lIHRvIHJlbW92ZSB0aGUgcmF0ZSBsaW1pdAoqIGBvcGVyYXRvcmAgLSBUaGUgYWRkcmVzcyB0aGF0IG11c3QgaGF2ZSBSQVRFX0xJTUlURVJfTUFOQUdFUl9ST0xFAAAAAAAOc2V0X3JhdGVfbGltaXQAAAAAAAQAAAAAAAAACWRpcmVjdGlvbgAAAAAAB9AAAAAJRGlyZWN0aW9uAAAAAAAAAAAAAANlaWQAAAAABAAAAAAAAAAGY29uZmlnAAAAAAPoAAAH0AAAAA9SYXRlTGltaXRDb25maWcAAAAAAAAAAAhvcGVyYXRvcgAAABMAAAAAAAAAAAAAAG9SZXR1cm5zIHRoZSByYXRlIGxpbWl0IGNvbmZpZ3VyYXRpb24gZm9yIGEgZGlyZWN0aW9uIGFuZCBlbmRwb2ludC4KUmV0dXJucyBOb25lIGlmIG5vIHJhdGUgbGltaXQgaXMgY29uZmlndXJlZC4AAAAAEXJhdGVfbGltaXRfY29uZmlnAAAAAAAAAgAAAAAAAAAJZGlyZWN0aW9uAAAAAAAH0AAAAAlEaXJlY3Rpb24AAAAAAAAAAAAAA2VpZAAAAAAEAAAAAQAAA+gAAAfQAAAAD1JhdGVMaW1pdENvbmZpZwAAAAAAAAAAQlJldHVybnMgdGhlIGN1cnJlbnQgaW4tZmxpZ2h0IGFtb3VudCBmb3IgYSBkaXJlY3Rpb24gYW5kIGVuZHBvaW50LgAAAAAAFHJhdGVfbGltaXRfaW5fZmxpZ2h0AAAAAgAAAAAAAAAJZGlyZWN0aW9uAAAAAAAH0AAAAAlEaXJlY3Rpb24AAAAAAAAAAAAAA2VpZAAAAAAEAAAAAQAAAAsAAAAAAAAAblJldHVybnMgdGhlIGF2YWlsYWJsZSBjYXBhY2l0eSBmb3IgYSBkaXJlY3Rpb24gYW5kIGVuZHBvaW50LgpSZXR1cm5zIGkxMjg6Ok1BWCBpZiBubyByYXRlIGxpbWl0IGlzIGNvbmZpZ3VyZWQuAAAAAAATcmF0ZV9saW1pdF9jYXBhY2l0eQAAAAACAAAAAAAAAAlkaXJlY3Rpb24AAAAAAAfQAAAACURpcmVjdGlvbgAAAAAAAAAAAAADZWlkAAAAAAQAAAABAAAACwAAAAAAAAFPU2V0cyBvciByZW1vdmVzIHRoZSBkZWZhdWx0IGZlZSByYXRlIGluIGJhc2lzIHBvaW50cy4KCi0gYFNvbWUobilgOiBzZXRzIHRoZSBkZWZhdWx0IGZlZSB0byBgbmAgYmFzaXMgcG9pbnRzIChtdXN0IGJlID4wIGFuZCA8PTEwLDAwMCkuCi0gYFNvbWUoMClgOiByZWplY3RlZCDigJQgdXNlIGBOb25lYCB0byByZW1vdmUgdGhlIGRlZmF1bHQgZmVlIGluc3RlYWQuCi0gYE5vbmVgOiByZW1vdmVzIHRoZSBkZWZhdWx0IGZlZSAoZWZmZWN0aXZlIHJhdGUgYmVjb21lcyAwKS4KKiBgb3BlcmF0b3JgIC0gVGhlIGFkZHJlc3MgdGhhdCBtdXN0IGhhdmUgRkVFX0NPTkZJR19NQU5BR0VSX1JPTEUAAAAAE3NldF9kZWZhdWx0X2ZlZV9icHMAAAAAAgAAAAAAAAAPZGVmYXVsdF9mZWVfYnBzAAAAA+gAAAAEAAAAAAAAAAhvcGVyYXRvcgAAABMAAAAAAAAAAAAAAbFTZXRzIG9yIHJlbW92ZXMgdGhlIGZlZSByYXRlIGZvciBhIHNwZWNpZmljIGRlc3RpbmF0aW9uIGVuZHBvaW50LgoKLSBgU29tZSgwKWA6IGV4cGxpY2l0bHkgc2V0cyB6ZXJvIGZlZSBmb3IgdGhpcyBkZXN0aW5hdGlvbiwgb3ZlcnJpZGluZyB0aGUgZGVmYXVsdCBmZWUuCi0gYE5vbmVgOiByZW1vdmVzIHRoZSBwZXItZGVzdGluYXRpb24gb3ZlcnJpZGU7IGZhbGxzIGJhY2sgdG8gdGhlIGRlZmF1bHQgZmVlLgoKIyBBcmd1bWVudHMKKiBgZHN0X2VpZGAgLSBUaGUgZGVzdGluYXRpb24gZW5kcG9pbnQgSUQKKiBgZmVlX2Jwc2AgLSBUaGUgZmVlIHJhdGUgKDAtMTAsMDAwKSwgb3IgTm9uZSB0byByZW1vdmUgdGhlIGZlZSBjb25maWd1cmF0aW9uCiogYG9wZXJhdG9yYCAtIFRoZSBhZGRyZXNzIHRoYXQgbXVzdCBoYXZlIEZFRV9DT05GSUdfTUFOQUdFUl9ST0xFAAAAAAAAC3NldF9mZWVfYnBzAAAAAAMAAAAAAAAAB2RzdF9laWQAAAAABAAAAAAAAAAHZmVlX2JwcwAAAAPoAAAABAAAAAAAAAAIb3BlcmF0b3IAAAATAAAAAAAAAAAAAADaU2V0cyBvciByZW1vdmVzIHRoZSBhZGRyZXNzIHdoZXJlIGNvbGxlY3RlZCBmZWVzIHdpbGwgYmUgZGVwb3NpdGVkLgoKIyBBcmd1bWVudHMKKiBgZmVlX2RlcG9zaXRfYWRkcmVzc2AgLSBUaGUgYWRkcmVzcyB0byBkZXBvc2l0IGZlZXMgdG8sIG9yIE5vbmUgdG8gcmVtb3ZlIHRoZSBmZWUgZGVwb3NpdCBhZGRyZXNzCiogYG9wZXJhdG9yYCAtIFRoZSBhdXRob3JpemVyIGFkZHJlc3MAAAAAABdzZXRfZmVlX2RlcG9zaXRfYWRkcmVzcwAAAAACAAAAAAAAABNmZWVfZGVwb3NpdF9hZGRyZXNzAAAAA+gAAAATAAAAAAAAAAhvcGVyYXRvcgAAABMAAAAAAAAAAAAAADVSZXR1cm5zIHRoZSBkZWZhdWx0IGZlZSByYXRlIGluIGJhc2lzIHBvaW50cywgaWYgc2V0LgAAAAAAAA9kZWZhdWx0X2ZlZV9icHMAAAAAAAAAAAEAAAPoAAAABAAAAAAAAAA4UmV0dXJucyB0aGUgZmVlIHJhdGUgZm9yIGEgc3BlY2lmaWMgZGVzdGluYXRpb24sIGlmIHNldC4AAAAHZmVlX2JwcwAAAAABAAAAAAAAAAdkc3RfZWlkAAAAAAQAAAABAAAD6AAAAAQAAAAAAAAAU1JldHVybnMgdGhlIGVmZmVjdGl2ZSBmZWUgcmF0ZSBmb3IgYSBkZXN0aW5hdGlvbiAoZGVzdGluYXRpb24tc3BlY2lmaWMgb3IgZGVmYXVsdCkuAAAAABFlZmZlY3RpdmVfZmVlX2JwcwAAAAAAAAEAAAAAAAAAB2RzdF9laWQAAAAABAAAAAEAAAAEAAAAAAAAAFNSZXR1cm5zIHRydWUgaWYgdGhlIE9GVCBoYXMgYSBmZWUgcmF0ZSBncmVhdGVyIHRoYW4gMCBmb3IgdGhlIHNwZWNpZmllZCBkZXN0aW5hdGlvbgAAAAALaGFzX29mdF9mZWUAAAAAAQAAAAAAAAAHZHN0X2VpZAAAAAAEAAAAAQAAAAEAAAAAAAAAIFJldHVybnMgdGhlIGZlZSBkZXBvc2l0IGFkZHJlc3MuAAAAE2ZlZV9kZXBvc2l0X2FkZHJlc3MAAAAAAAAAAAEAAAPoAAAAEwAAAAAAAAClUGF1c2VzIHRoZSBPRlQuIFdoZW4gcGF1c2VkLCB0aGUgT0ZUIHdpbGwgcmVqZWN0IG5ldyBzZW5kL3JlY2VpdmUvcXVvdGVfc2VuZC9xdW90ZV9vZnQgb3BlcmF0aW9ucy4KCiMgQXJndW1lbnRzCiogYG9wZXJhdG9yYCAtIFRoZSBhZGRyZXNzIHRoYXQgbXVzdCBoYXZlIFBBVVNFUl9ST0xFAAAAAAAABXBhdXNlAAAAAAAAAQAAAAAAAAAIb3BlcmF0b3IAAAATAAAAAAAAAAAAAABWVW5wYXVzZXMgdGhlIE9GVC4KCiMgQXJndW1lbnRzCiogYG9wZXJhdG9yYCAtIFRoZSBhZGRyZXNzIHRoYXQgbXVzdCBoYXZlIFVOUEFVU0VSX1JPTEUAAAAAAAd1bnBhdXNlAAAAAAEAAAAAAAAACG9wZXJhdG9yAAAAEwAAAAAAAAAAAAAAJFJldHVybnMgdGhlIHBhdXNlZCBzdGF0ZSBvZiB0aGUgT0ZULgAAAAlpc19wYXVzZWQAAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAAAAAlxdW90ZV9vZnQAAAAAAAACAAAAAAAAAARmcm9tAAAAEwAAAAAAAAAKc2VuZF9wYXJhbQAAAAAH0AAAAAlTZW5kUGFyYW0AAAAAAAABAAAD7QAAAAMAAAfQAAAACE9GVExpbWl0AAAD6gAAB9AAAAAMT0ZURmVlRGV0YWlsAAAH0AAAAApPRlRSZWNlaXB0AAAAAAAAAAAAR1JldHVybnMgdGhlIGFkZHJlc3Mgb2YgdGhlIHVuZGVybHlpbmcgU0VQLTQxIHRva2VuIG1hbmFnZWQgYnkgdGhpcyBPRlQuAAAAAAV0b2tlbgAAAAAAAAAAAAABAAAAEwAAAAAAAAChUmV0dXJucyB0aGUgT0ZUIG1lc3NhZ2luZyBwcm90b2NvbCB2ZXJzaW9uIGFzIGAobWFqb3IsIG1pbm9yKWAuCgpUaGUgdmVyc2lvbiBpcyB1c2VkIGJ5IG9mZi1jaGFpbiB0b29saW5nIGFuZCBwZWVyIGNvbnRyYWN0cyB0byB2ZXJpZnkgd2lyZS1mb3JtYXQKY29tcGF0aWJpbGl0eS4AAAAAAAALb2Z0X3ZlcnNpb24AAAAAAAAAAAEAAAPtAAAAAgAAAAYAAAAGAAAAAAAAAWZSZXR1cm5zIHRoZSAqKnNoYXJlZCBkZWNpbWFscyoqIOKAlCB0aGUgY29tbW9uIGRlY2ltYWwgcHJlY2lzaW9uIHVzZWQgaW4gY3Jvc3MtY2hhaW4KbWVzc2FnZXMuCgpUb2tlbiBhbW91bnRzIGFyZSBub3JtYWxpemVkIHRvIHRoaXMgcHJlY2lzaW9uIGJlZm9yZSBlbmNvZGluZyBpbnRvIExheWVyWmVybwptZXNzYWdlcywgZW5zdXJpbmcgY29uc2lzdGVudCB2YWx1ZXMgcmVnYXJkbGVzcyBvZiBlYWNoIGNoYWluJ3MgbmF0aXZlIHRva2VuCmRlY2ltYWxzLiBGb3IgZXhhbXBsZSwgYSB0b2tlbiB3aXRoIDE4IGxvY2FsIGRlY2ltYWxzIGFuZCA2IHNoYXJlZCBkZWNpbWFscyBoYXMgYQpjb252ZXJzaW9uIHJhdGUgb2YgMTBeMTIuAAAAAAAPc2hhcmVkX2RlY2ltYWxzAAAAAAAAAAABAAAABAAAAAAAAAFMUmV0dXJucyB0aGUgKipkZWNpbWFsIGNvbnZlcnNpb24gcmF0ZSoqIChgMTAgXiAobG9jYWxfZGVjaW1hbHMgLSBzaGFyZWRfZGVjaW1hbHMpYCkuCgpUaGlzIG11bHRpcGxpZXIgY29udmVydHMgYmV0d2VlbiBsb2NhbC1kZWNpbWFsIGFtb3VudHMgKHVzZWQgb24tY2hhaW4pIGFuZApzaGFyZWQtZGVjaW1hbCBhbW91bnRzICh1c2VkIGluIGNyb3NzLWNoYWluIG1lc3NhZ2VzKS4gQW55IHN1Yi1jb252ZXJzaW9uLXJhdGUKcmVtYWluZGVyICgiZHVzdCIpIGlzIHN0cmlwcGVkIGJlZm9yZSBzZW5kaW5nIHRvIGF2b2lkIHJvdW5kaW5nIGRpc2NyZXBhbmNpZXMKYWNyb3NzIGNoYWlucy4AAAAXZGVjaW1hbF9jb252ZXJzaW9uX3JhdGUAAAAAAAAAAAEAAAALAAAAAAAAAaxJbmRpY2F0ZXMgd2hldGhlciB0aGUgY2FsbGVyIG11c3QgYXBwcm92ZSBhIHRva2VuIGFsbG93YW5jZSBiZWZvcmUgY2FsbGluZyBbYHNlbmRgXShPRlRDb3JlOjpzZW5kKS4KCi0gKipgZmFsc2VgKiogKGRlZmF1bHQpIOKAlCBubyBzZXBhcmF0ZSBhcHByb3ZhbCBzdGVwIGlzIG5lZWRlZC4KLSAqKmB0cnVlYCoqIOKAlCB0aGUgY2FsbGVyIG11c3QgZ3JhbnQgYSB0b2tlbiBhbGxvd2FuY2UgdG8gdGhpcyBjb250cmFjdCBiZWZvcmUKc2VuZGluZyAoZS5nLiwgdmlhIGB0b2tlbi5hcHByb3ZlKG9mdF9hZGRyZXNzLCBhbW91bnQsIC4uLilgKS4KCldhbGxldCBhbmQgZnJvbnRlbmQgaW50ZWdyYXRvcnMgc2hvdWxkIGNoZWNrIHRoaXMgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgYW4gYXBwcm92YWwKdHJhbnNhY3Rpb24gbXVzdCBwcmVjZWRlIHRoZSBzZW5kLgAAABFhcHByb3ZhbF9yZXF1aXJlZAAAAAAAAAAAAAABAAAAAQAAAAAAAAEtUmV0dXJucyB0aGUgY3VycmVudCBtZXNzYWdlIGluc3BlY3RvciBjb250cmFjdCBhZGRyZXNzLCBvciBgTm9uZWAgaWYgdW5zZXQuCgpXaGVuIHNldCwgdGhlIGluc3BlY3RvcidzIGBpbnNwZWN0YCBtZXRob2QgaXMgaW52b2tlZCBkdXJpbmcgYm90aApbYHF1b3RlX3NlbmRgXShPRlRDb3JlOjpxdW90ZV9zZW5kKSBhbmQgW2BzZW5kYF0oT0ZUQ29yZTo6c2VuZCkgdG8gdmFsaWRhdGUgdGhlCm91dGdvaW5nIG1lc3NhZ2UgcGF5bG9hZCBhbmQgb3B0aW9ucyBiZWZvcmUgdGhleSByZWFjaCB0aGUgTGF5ZXJaZXJvIGVuZHBvaW50LgAAAAAAAA1tc2dfaW5zcGVjdG9yAAAAAAAAAAAAAAEAAAPoAAAAEwAAAAAAAAJmU2V0cyBvciByZW1vdmVzIHRoZSBtZXNzYWdlIGluc3BlY3RvciBjb250cmFjdC4KClRoZSBtZXNzYWdlIGluc3BlY3RvciBpcyBhbiAqKm9wdGlvbmFsKiogdmFsaWRhdGlvbiBob29rLiBXaGVuIGNvbmZpZ3VyZWQsIGV2ZXJ5Cm91dGJvdW5kIG1lc3NhZ2UgKGZyb20gYm90aCBgc2VuZGAgYW5kIGBxdW90ZV9zZW5kYCkgaXMgcGFzc2VkIHRvIHRoZSBpbnNwZWN0b3IKY29udHJhY3QncyBgaW5zcGVjdChjb250cmFjdCwgbWVzc2FnZSwgb3B0aW9ucylgIG1ldGhvZC4gVGhlIGluc3BlY3RvciBzaG91bGQKKipwYW5pYyoqIHRvIHJlamVjdCBpbnZhbGlkIG1lc3NhZ2VzLCBhY3RpbmcgYXMgYW4gb24tY2hhaW4gcG9saWN5IGdhdGUuCgpQYXNzIGBOb25lYCB0byByZW1vdmUgdGhlIGluc3BlY3RvciBhbmQgZGlzYWJsZSBvdXRib3VuZCB2YWxpZGF0aW9uLgoKIyBBdXRob3JpemF0aW9uClJlcXVpcmVzIHRoZSBjYWxsZXIgdG8gYmUgdGhlIGF1dGhvcml6ZXIuCgojIEFyZ3VtZW50cwoqIGBpbnNwZWN0b3JgIC0gQWRkcmVzcyBvZiB0aGUgaW5zcGVjdG9yIGNvbnRyYWN0LCBvciBgTm9uZWAgdG8gcmVtb3ZlIGl0CiogYG9wZXJhdG9yYCAtIFRoZSBhdXRob3JpemVyIGFkZHJlc3MAAAAAABFzZXRfbXNnX2luc3BlY3RvcgAAAAAAAAIAAAAAAAAACWluc3BlY3RvcgAAAAAAA+gAAAATAAAAAAAAAAhvcGVyYXRvcgAAABMAAAAAAAAAAAAAArBRdW90ZXMgdGhlICoqTGF5ZXJaZXJvIG1lc3NhZ2luZyBmZWUqKiByZXF1aXJlZCBmb3IgYSBjcm9zcy1jaGFpbiBzZW5kLgoKQnVpbGRzIHRoZSBvdXRnb2luZyBtZXNzYWdlIGFuZCBvcHRpb25zIGZyb20gYHNlbmRfcGFyYW1gLCB0aGVuIHF1ZXJpZXMgdGhlCkxheWVyWmVybyBlbmRwb2ludCBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgZmVlLiBJZiBhIG1lc3NhZ2UgaW5zcGVjdG9yIGlzIHNldCwgaXQKd2lsbCBhbHNvIHZhbGlkYXRlIHRoZSBtZXNzYWdlIGF0IHRoaXMgc3RhZ2UuCgojIEFyZ3VtZW50cwoqIGBmcm9tYCAtIFRoZSBhZGRyZXNzIHRoYXQgd291bGQgaW5pdGlhdGUgdGhlIHRyYW5zZmVyCiogYHNlbmRfcGFyYW1gIC0gVGhlIHByb3Bvc2VkIHRyYW5zZmVyIHBhcmFtZXRlcnMKKiBgcGF5X2luX3pyb2AgLSBgdHJ1ZWAgdG8gcGF5IHRoZSBtZXNzYWdpbmcgZmVlIGluIHRoZSBaUk8gdG9rZW47IGBmYWxzZWAgdG8gcGF5CmluIHRoZSBjaGFpbidzIG5hdGl2ZSB0b2tlbgoKIyBSZXR1cm5zCkEgW2BNZXNzYWdpbmdGZWVgXShlbmRwb2ludF92Mjo6TWVzc2FnaW5nRmVlKSBjb250YWluaW5nIHRoZSBgbmF0aXZlX2ZlZWAgYW5kCmB6cm9fZmVlYCByZXF1aXJlZCBieSB0aGUgZW5kcG9pbnQuIFBhc3MgdGhpcyB2YWx1ZSAob3IgYSBzdXBlcnNldCkgdG8KW2BzZW5kYF0oT0ZUQ29yZTo6c2VuZCkuAAAACnF1b3RlX3NlbmQAAAAAAAMAAAAAAAAABGZyb20AAAATAAAAAAAAAApzZW5kX3BhcmFtAAAAAAfQAAAACVNlbmRQYXJhbQAAAAAAAAAAAAAKcGF5X2luX3pybwAAAAAAAQAAAAEAAAfQAAAADE1lc3NhZ2luZ0ZlZQAAAAAAAANFRXhlY3V0ZXMgYSBjcm9zcy1jaGFpbiB0b2tlbiB0cmFuc2ZlciB2aWEgdGhlIExheWVyWmVybyBlbmRwb2ludC4KCkJ1aWxkcyB0aGUgT0ZUIG1lc3NhZ2UgYW5kIG9wdGlvbnMsIHRoZW4gc2VuZHMgdGhlIG1lc3NhZ2UgdGhyb3VnaCB0aGUgTGF5ZXJaZXJvIGVuZHBvaW50LgoKIyBBcmd1bWVudHMKKiBgZnJvbWAgLSBUaGUgdG9rZW4gc2VuZGVyIChtdXN0IGF1dGhvcml6ZSB0aGUgY2FsbCkKKiBgc2VuZF9wYXJhbWAgLSBUcmFuc2ZlciBwYXJhbWV0ZXJzIGluY2x1ZGluZyBkZXN0aW5hdGlvbiBjaGFpbiAoYGRzdF9laWRgKSwKcmVjaXBpZW50IChgdG9gKSwgYW1vdW50LCBzbGlwcGFnZSBmbG9vciAoYG1pbl9hbW91bnRfbGRgKSwgZXh0cmEgb3B0aW9ucywgYW5kCmFuIG9wdGlvbmFsIGNvbXBvc2UgbWVzc2FnZQoqIGBmZWVgIC0gVGhlIG1lc3NhZ2luZyBmZWUgdG8gcGF5IChvYnRhaW4gZnJvbSBbYHF1b3RlX3NlbmRgXShPRlRDb3JlOjpxdW90ZV9zZW5kKSkKKiBgcmVmdW5kX2FkZHJlc3NgIC0gQWRkcmVzcyB0byByZWNlaXZlIGFueSBleGNlc3MgZmVlIHJlZnVuZAoKIyBSZXR1cm5zCiogW2BNZXNzYWdpbmdSZWNlaXB0YF0oZW5kcG9pbnRfdjI6Ok1lc3NhZ2luZ1JlY2VpcHQpIOKAlCB0aGUgTGF5ZXJaZXJvIG1lc3NhZ2UgR1VJRCwKbm9uY2UsIGFuZCBmZWUgYWN0dWFsbHkgY29uc3VtZWQKKiBbYE9GVFJlY2VpcHRgXShjcmF0ZTo6dHlwZXM6Ok9GVFJlY2VpcHQpIOKAlCBgYW1vdW50X3NlbnRfbGRgIChkZWJpdGVkKSBhbmQKYGFtb3VudF9yZWNlaXZlZF9sZGAgKGNyZWRpdGVkIG9uIGRlc3RpbmF0aW9uIGFmdGVyIGR1c3QgcmVtb3ZhbCAvIGZlZXMpAAAAAAAABHNlbmQAAAAEAAAAAAAAAARmcm9tAAAAEwAAAAAAAAAKc2VuZF9wYXJhbQAAAAAH0AAAAAlTZW5kUGFyYW0AAAAAAAAAAAAAA2ZlZQAAAAfQAAAADE1lc3NhZ2luZ0ZlZQAAAAAAAAAOcmVmdW5kX2FkZHJlc3MAAAAAABMAAAABAAAD7QAAAAIAAAfQAAAAEE1lc3NhZ2luZ1JlY2VpcHQAAAfQAAAACk9GVFJlY2VpcHQAAAAAAAAAAAAAAAAADV9fY29uc3RydWN0b3IAAAAAAAAFAAAAAAAAAAV0b2tlbgAAAAAAABMAAAAAAAAAD3NoYXJlZF9kZWNpbWFscwAAAAAEAAAAAAAAAAhvZnRfdHlwZQAAB9AAAAAHT2Z0VHlwZQAAAAAAAAAACGVuZHBvaW50AAAAEwAAAAAAAAAIZGVsZWdhdGUAAAATAAAAAAAAAAAAAAA/UmV0dXJucyB0aGUgT0ZUIHR5cGUgd2l0aCBpdHMgdGFyZ2V0IGFkZHJlc3MgYW5kIGNvbmZpZ3VyYXRpb24uAAAAAAhvZnRfdHlwZQAAAAAAAAABAAAH0AAAAAdPZnRUeXBlAAAAAAAAAACuUmV0cmlldmVzIHRoZSBPQXBwIHZlcnNpb24gaW5mb3JtYXRpb24uCgojIFJldHVybnMKQSB0dXBsZSBjb250YWluaW5nOgotIGBzZW5kZXJfdmVyc2lvbmA6IFRoZSB2ZXJzaW9uIG9mIHRoZSBPQXBwU2VuZGVyCi0gYHJlY2VpdmVyX3ZlcnNpb25gOiBUaGUgdmVyc2lvbiBvZiB0aGUgT0FwcFJlY2VpdmVyAAAAAAAMb2FwcF92ZXJzaW9uAAAAAAAAAAEAAAPtAAAAAgAAAAYAAAAGAAAAAAAAAGxSZXRyaWV2ZXMgdGhlIExheWVyWmVybyBlbmRwb2ludCBhZGRyZXNzIGFzc29jaWF0ZWQgd2l0aCB0aGUgT0FwcC4KCiMgUmV0dXJucwpUaGUgTGF5ZXJaZXJvIGVuZHBvaW50IGFkZHJlc3MAAAAIZW5kcG9pbnQAAAAAAAAAAQAAABMAAAAAAAAAwVJldHJpZXZlcyB0aGUgcGVlciAoT0FwcCkgYXNzb2NpYXRlZCB3aXRoIGEgY29ycmVzcG9uZGluZyBlbmRwb2ludC4KCiMgQXJndW1lbnRzCiogYGVpZGAgLSBUaGUgZW5kcG9pbnQgSUQKCiMgUmV0dXJucwpUaGUgcGVlciBhZGRyZXNzIChPQXBwIGluc3RhbmNlKSBhc3NvY2lhdGVkIHdpdGggdGhlIGNvcnJlc3BvbmRpbmcgZW5kcG9pbnQAAAAAAAAEcGVlcgAAAAEAAAAAAAAAA2VpZAAAAAAEAAAAAQAAA+gAAAPuAAAAIAAAAAAAAAELU2V0cyBvciByZW1vdmVzIHRoZSBwZWVyIGFkZHJlc3MgKE9BcHAgaW5zdGFuY2UpIGZvciBhIGNvcnJlc3BvbmRpbmcgZW5kcG9pbnQuCgojIEFyZ3VtZW50cwoqIGBlaWRgIC0gVGhlIGVuZHBvaW50IElECiogYHBlZXJgIC0gVGhlIGFkZHJlc3Mgb2YgdGhlIHBlZXIgdG8gYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBjb3JyZXNwb25kaW5nIGVuZHBvaW50LCBvciBOb25lIHRvIHJlbW92ZSB0aGUgcGVlcgoqIGBvcGVyYXRvcmAgLSBUaGUgYXV0aG9yaXplciBhZGRyZXNzAAAAAAhzZXRfcGVlcgAAAAMAAAAAAAAAA2VpZAAAAAAEAAAAAAAAAARwZWVyAAAD6AAAA+4AAAAgAAAAAAAAAAhvcGVyYXRvcgAAABMAAAAAAAAAAAAAALRTZXRzIHRoZSBkZWxlZ2F0ZSBhZGRyZXNzIGZvciB0aGUgT0FwcCBDb3JlLgoKIyBBcmd1bWVudHMKKiBgZGVsZWdhdGVgIC0gVGhlIGFkZHJlc3Mgb2YgdGhlIGRlbGVnYXRlIHRvIGJlIHNldCwgb3IgTm9uZSB0byByZW1vdmUgdGhlIGRlbGVnYXRlCiogYG9wZXJhdG9yYCAtIFRoZSBhdXRob3JpemVyIGFkZHJlc3MAAAAMc2V0X2RlbGVnYXRlAAAAAgAAAAAAAAAIZGVsZWdhdGUAAAPoAAAAEwAAAAAAAAAIb3BlcmF0b3IAAAATAAAAAAAAAAAAAAEMR3JhbnRzIGEgcm9sZSB0byBhbiBhY2NvdW50LiBDYWxsZXIgbXVzdCBiZSBvd25lciBvciBoYXZlIHRoZSByb2xlJ3MgYWRtaW4gcm9sZS4KCiMgQXJndW1lbnRzCiogYGFjY291bnRgIC0gVGhlIGFjY291bnQgdG8gZ3JhbnQgdGhlIHJvbGUgdG8uCiogYHJvbGVgIC0gVGhlIHJvbGUgdG8gZ3JhbnQuCiogYGNhbGxlcmAgLSBUaGUgYWNjb3VudCB0aGF0IGlzIGdyYW50aW5nIHRoZSByb2xlLiBNdXN0IGJlIG93bmVyIG9yIGhhdmUgdGhlIHJvbGUncyBhZG1pbiByb2xlLgAAAApncmFudF9yb2xlAAAAAAADAAAAAAAAAAdhY2NvdW50AAAAABMAAAAAAAAABHJvbGUAAAARAAAAAAAAAAZjYWxsZXIAAAAAABMAAAAAAAAAAAAAARNSZXZva2VzIGEgcm9sZSBmcm9tIGFuIGFjY291bnQuIENhbGxlciBtdXN0IGJlIG93bmVyIG9yIGhhdmUgdGhlIHJvbGUncyBhZG1pbiByb2xlLgoKIyBBcmd1bWVudHMKKiBgYWNjb3VudGAgLSBUaGUgYWNjb3VudCB0byByZXZva2UgdGhlIHJvbGUgZnJvbS4KKiBgcm9sZWAgLSBUaGUgcm9sZSB0byByZXZva2UuCiogYGNhbGxlcmAgLSBUaGUgYWNjb3VudCB0aGF0IGlzIHJldm9raW5nIHRoZSByb2xlLiBNdXN0IGJlIG93bmVyIG9yIGhhdmUgdGhlIHJvbGUncyBhZG1pbiByb2xlLgAAAAALcmV2b2tlX3JvbGUAAAAAAwAAAAAAAAAHYWNjb3VudAAAAAATAAAAAAAAAARyb2xlAAAAEQAAAAAAAAAGY2FsbGVyAAAAAAATAAAAAAAAAAAAAADtQWxsb3dzIGFuIGFjY291bnQgdG8gcmVub3VuY2UgYSByb2xlIGFzc2lnbmVkIHRvIGl0c2VsZi4KVXNlcnMgY2FuIG9ubHkgcmVub3VuY2Ugcm9sZXMgZm9yIHRoZWlyIG93biBhY2NvdW50LgoKIyBBcmd1bWVudHMKKiBgcm9sZWAgLSBUaGUgcm9sZSB0byByZW5vdW5jZS4KKiBgY2FsbGVyYCAtIFRoZSBhY2NvdW50IHRoYXQgaXMgcmVub3VuY2luZyB0aGUgcm9sZS4gTXVzdCBiZSB0aGUgYWNjb3VudCBpdHNlbGYuAAAAAAAADXJlbm91bmNlX3JvbGUAAAAAAAACAAAAAAAAAARyb2xlAAAAEQAAAAAAAAAGY2FsbGVyAAAAAAATAAAAAAAAAAAAAAFXU2V0cyBgYWRtaW5fcm9sZWAgYXMgdGhlIGFkbWluIHJvbGUgb2YgYHJvbGVgLiBDYWxsZXIgbXVzdCBiZSB0aGUgYXV0aG9yaXplci4KCiMgQXJndW1lbnRzCiogYHJvbGVgIC0gVGhlIHJvbGUgdG8gc2V0IHRoZSBhZG1pbiBmb3IuCiogYGFkbWluX3JvbGVgIC0gVGhlIGFkbWluIHJvbGUgdG8gc2V0IGZvciB0aGUgcm9sZS4KCiMgTm90ZXMKClRoZSBhZG1pbiByb2xlIGNhbiBiZSBhbnkgYFN5bWJvbGAsIGluY2x1ZGluZyBvbmUgd2l0aCBubyBtZW1iZXJzLiBJZiB0aGUgYWRtaW4Kcm9sZSBoYXMgbm8gbWVtYmVycywgb25seSB0aGUgYXV0aG9yaXplciBjYW4gZ3JhbnQvcmV2b2tlIHRoZSByb2xlLgAAAAAOc2V0X3JvbGVfYWRtaW4AAAAAAAIAAAAAAAAABHJvbGUAAAARAAAAAAAAAAphZG1pbl9yb2xlAAAAAAARAAAAAAAAAAAAAADYUmVtb3ZlcyB0aGUgYWRtaW4gcm9sZSBmb3IgYSBzcGVjaWZpZWQgcm9sZS4gQ2FsbGVyIG11c3QgYmUgdGhlIGF1dGhvcml6ZXIuCgojIEFyZ3VtZW50cwoqIGByb2xlYCAtIFRoZSByb2xlIHRvIHJlbW92ZSB0aGUgYWRtaW4gZm9yLgoKIyBFcnJvcnMKKiBgUmJhY0Vycm9yOjpBZG1pblJvbGVOb3RGb3VuZGAgLSBJZiBubyBhZG1pbiByb2xlIGlzIHNldCBmb3IgdGhlIHJvbGUuAAAAEXJlbW92ZV9yb2xlX2FkbWluAAAAAAAAAQAAAAAAAAAEcm9sZQAAABEAAAAAAAAAAAAAAPZSZXR1cm5zIGBTb21lKGluZGV4KWAgaWYgdGhlIGFjY291bnQgaGFzIHRoZSBzcGVjaWZpZWQgcm9sZSwgd2hlcmUgYGluZGV4YAppcyB0aGUgaW5kZXggb2YgdGhlIGFjY291bnQgaW4gdGhlIHJvbGUuIFJldHVybnMgYE5vbmVgIGlmIG5vdC4KCiMgQXJndW1lbnRzCiogYGFjY291bnRgIC0gVGhlIGFjY291bnQgdG8gY2hlY2sgdGhlIHJvbGUgZm9yLgoqIGByb2xlYCAtIFRoZSByb2xlIHRvIGNoZWNrIHRoZSBhY2NvdW50IGZvci4AAAAAAAhoYXNfcm9sZQAAAAIAAAAAAAAAB2FjY291bnQAAAAAEwAAAAAAAAAEcm9sZQAAABEAAAABAAAD6AAAAAQAAAAAAAAAdlJldHVybnMgdGhlIGFkbWluIHJvbGUgZm9yIGEgc3BlY2lmaWMgcm9sZSwgb3IgTm9uZSBpZiBub3Qgc2V0LgoKIyBBcmd1bWVudHMKKiBgcm9sZWAgLSBUaGUgcm9sZSB0byBnZXQgdGhlIGFkbWluIGZvci4AAAAAAA5nZXRfcm9sZV9hZG1pbgAAAAAAAQAAAAAAAAAEcm9sZQAAABEAAAABAAAD6AAAABEAAAAAAAAAelJldHVybnMgdGhlIG51bWJlciBvZiBhY2NvdW50cyB0aGF0IGhhdmUgdGhlIHNwZWNpZmllZCByb2xlLgoKIyBBcmd1bWVudHMKKiBgcm9sZWAgLSBUaGUgcm9sZSB0byBnZXQgdGhlIG1lbWJlciBjb3VudCBmb3IuAAAAAAAVZ2V0X3JvbGVfbWVtYmVyX2NvdW50AAAAAAAAAQAAAAAAAAAEcm9sZQAAABEAAAABAAAABAAAAAAAAADpUmV0dXJucyB0aGUgYWNjb3VudCBhdCB0aGUgc3BlY2lmaWVkIGluZGV4IGZvciBhIGdpdmVuIHJvbGUuCgojIEFyZ3VtZW50cwoqIGByb2xlYCAtIFRoZSByb2xlIHRvIGdldCB0aGUgbWVtYmVyIGZvci4KKiBgaW5kZXhgIC0gVGhlIGluZGV4IG9mIHRoZSBtZW1iZXIgdG8gZ2V0LgoKIyBFcnJvcnMKKiBgUmJhY0Vycm9yOjpJbmRleE91dE9mQm91bmRzYCBpZiB0aGUgaW5kZXggaXMgb3V0IG9mIGJvdW5kcy4AAAAAAAAPZ2V0X3JvbGVfbWVtYmVyAAAAAAIAAAAAAAAABHJvbGUAAAARAAAAAAAAAAVpbmRleAAAAAAAAAQAAAABAAAAEwAAAAAAAADyUmV0dXJucyBhbGwgcm9sZXMgdGhhdCBjdXJyZW50bHkgaGF2ZSBhdCBsZWFzdCBvbmUgbWVtYmVyLgpEZWZhdWx0cyB0byBlbXB0eSB2ZWN0b3IgaWYgbm8gcm9sZXMgZXhpc3QuCgojIE5vdGVzCgpUaGlzIGZ1bmN0aW9uIHJldHVybnMgYWxsIHJvbGVzIHRoYXQgY3VycmVudGx5IGhhdmUgYXQgbGVhc3Qgb25lIG1lbWJlci4KVGhlIG1heGltdW0gbnVtYmVyIG9mIHJvbGVzIGlzIGxpbWl0ZWQgYnkgW2BNQVhfUk9MRVNgXS4AAAAAABJnZXRfZXhpc3Rpbmdfcm9sZXMAAAAAAAAAAAABAAAD6gAAABEAAAAAAAAAt0NoZWNrcyBpZiBhIG1lc3NhZ2luZyBwYXRoIGNhbiBiZSBpbml0aWFsaXplZCBmb3IgdGhlIGdpdmVuIG9yaWdpbi4KCiMgQXJndW1lbnRzCiogYG9yaWdpbmAgLSBUaGUgb3JpZ2luIG9mIHRoZSBtZXNzYWdlCgojIFJldHVybnMKVHJ1ZSBpZiB0aGUgcGF0aCBjYW4gYmUgaW5pdGlhbGl6ZWQsIGZhbHNlIG90aGVyd2lzZQAAAAAVYWxsb3dfaW5pdGlhbGl6ZV9wYXRoAAAAAAAAAQAAAAAAAAAGb3JpZ2luAAAAAAfQAAAABk9yaWdpbgAAAAAAAQAAAAEAAAAAAAAB+FJldHJpZXZlcyB0aGUgbmV4dCBub25jZSBmb3IgYSBnaXZlbiBzb3VyY2UgZW5kcG9pbnQgYW5kIHNlbmRlciBhZGRyZXNzLgoKVGhlIHBhdGggbm9uY2Ugc3RhcnRzIGZyb20gMS4gSWYgMCBpcyByZXR1cm5lZCBpdCBtZWFucyB0aGF0IHRoZXJlIGlzIE5PIG5vbmNlIG9yZGVyZWQgZW5mb3JjZW1lbnQuClRoaXMgaXMgcmVxdWlyZWQgYnkgdGhlIG9mZi1jaGFpbiBleGVjdXRvciB0byBkZXRlcm1pbmUgaWYgdGhlIE9BcHAgZXhwZWN0cyBtZXNzYWdlIGV4ZWN1dGlvbiB0byBiZSBvcmRlcmVkLgpUaGlzIGlzIGFsc28gZW5mb3JjZWQgYnkgdGhlIE9BcHAuCkJ5IGRlZmF1bHQgdGhpcyBpcyBOT1QgZW5hYmxlZCwgaS5lLiBuZXh0X25vbmNlIGlzIGhhcmRjb2RlZCB0byByZXR1cm4gMC4KCiMgQXJndW1lbnRzCiogYHNyY19laWRgIC0gVGhlIHNvdXJjZSBlbmRwb2ludCBJRAoqIGBzZW5kZXJgIC0gVGhlIHNlbmRlciBPQXBwIGFkZHJlc3MKCiMgUmV0dXJucwpUaGUgbmV4dCBub25jZQAAAApuZXh0X25vbmNlAAAAAAACAAAAAAAAAAdzcmNfZWlkAAAAAAQAAAAAAAAABnNlbmRlcgAAAAAD7gAAACAAAAABAAAABgAAAAAAAAMdRW50cnkgcG9pbnQgZm9yIHJlY2VpdmluZyBtZXNzYWdlcyBvciBwYWNrZXRzIGZyb20gdGhlIExheWVyWmVybyBlbmRwb2ludC4KClRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGNhbGxzIGBjbGVhcl9wYXlsb2FkX2FuZF90cmFuc2ZlcmAgdG8gdmFsaWRhdGUgdGhlIG1lc3NhZ2UKYW5kIGNsZWFyIGl0IGZyb20gdGhlIGVuZHBvaW50LCB0aGVuIGRlbGVnYXRlcyB0byBgX19sel9yZWNlaXZlYCBmb3IgYXBwbGljYXRpb24gbG9naWMuCgojIEFyZ3VtZW50cwoqIGBleGVjdXRvcmAgLSBUaGUgYWRkcmVzcyBvZiB0aGUgZXhlY3V0b3IgZm9yIHRoZSByZWNlaXZlZCBtZXNzYWdlCiogYG9yaWdpbmAgLSBUaGUgb3JpZ2luIGluZm9ybWF0aW9uIGNvbnRhaW5pbmcgdGhlIHNvdXJjZSBlbmRwb2ludCBhbmQgc2VuZGVyIGFkZHJlc3M6Ci0gYHNyY19laWRgOiBUaGUgc291cmNlIGVuZHBvaW50IElECi0gYHNlbmRlcmA6IFRoZSBzZW5kZXIgYWRkcmVzcyBvbiB0aGUgc291cmNlIGNoYWluCi0gYG5vbmNlYDogVGhlIG5vbmNlIG9mIHRoZSBtZXNzYWdlCiogYGd1aWRgIC0gVGhlIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgcmVjZWl2ZWQgTGF5ZXJaZXJvIG1lc3NhZ2UKKiBgbWVzc2FnZWAgLSBUaGUgcGF5bG9hZCBvZiB0aGUgcmVjZWl2ZWQgbWVzc2FnZQoqIGBleHRyYV9kYXRhYCAtIEFkZGl0aW9uYWwgYXJiaXRyYXJ5IGRhdGEgcHJvdmlkZWQgYnkgdGhlIGNvcnJlc3BvbmRpbmcgZXhlY3V0b3IKKiBgdmFsdWVgIC0gVGhlIG5hdGl2ZSB0b2tlbiB2YWx1ZSBzZW50IHdpdGggdGhlIG1lc3NhZ2UAAAAAAAAKbHpfcmVjZWl2ZQAAAAAABgAAAAAAAAAIZXhlY3V0b3IAAAATAAAAAAAAAAZvcmlnaW4AAAAAB9AAAAAGT3JpZ2luAAAAAAAAAAAABGd1aWQAAAPuAAAAIAAAAAAAAAAHbWVzc2FnZQAAAAAOAAAAAAAAAApleHRyYV9kYXRhAAAAAAAOAAAAAAAAAAV2YWx1ZQAAAAAAAAsAAAAAAAAAAAAAAexJbmRpY2F0ZXMgd2hldGhlciBhbiBhZGRyZXNzIGlzIGFuIGFwcHJvdmVkIGNvbXBvc2VNc2cgc2VuZGVyIHRvIHRoZSBFbmRwb2ludC4KCkFwcGxpY2F0aW9ucyBjYW4gb3B0aW9uYWxseSBjaG9vc2UgdG8gaW1wbGVtZW50IHNlcGFyYXRlIGNvbXBvc2VNc2cgc2VuZGVycyB0aGF0IGFyZSBOT1QgdGhlIGJyaWRnaW5nIGxheWVyLgpUaGUgZGVmYXVsdCBzZW5kZXIgSVMgdGhlIE9BcHBSZWNlaXZlciBpbXBsZW1lbnRlci4KCiMgQXJndW1lbnRzCiogYG9yaWdpbmAgLSBUaGUgb3JpZ2luIGluZm9ybWF0aW9uIGNvbnRhaW5pbmcgdGhlIHNvdXJjZSBlbmRwb2ludCBhbmQgc2VuZGVyIGFkZHJlc3MKKiBgbWVzc2FnZWAgLSBUaGUgbHpSZWNlaXZlIHBheWxvYWQKKiBgc2VuZGVyYCAtIFRoZSBzZW5kZXIgYWRkcmVzcyB0byBjaGVjawoKIyBSZXR1cm5zClRydWUgaWYgdGhlIHNlbmRlciBpcyBhIHZhbGlkIGNvbXBvc2VNc2cgc2VuZGVyLCBmYWxzZSBvdGhlcndpc2UAAAAVaXNfY29tcG9zZV9tc2dfc2VuZGVyAAAAAAAAAwAAAAAAAAAGb3JpZ2luAAAAAAfQAAAABk9yaWdpbgAAAAAAAAAAAAdtZXNzYWdlAAAAAA4AAAAAAAAABnNlbmRlcgAAAAAAEwAAAAEAAAABAAAAAAAAANlSZXRyaWV2ZXMgdGhlIGVuZm9yY2VkIG9wdGlvbnMgZm9yIGEgZ2l2ZW4gZW5kcG9pbnQgYW5kIG1lc3NhZ2UgdHlwZS4KCiMgQXJndW1lbnRzCiogYGVpZGAgLSBUaGUgZW5kcG9pbnQgSUQKKiBgbXNnX3R5cGVgIC0gVGhlIE9BcHAgbWVzc2FnZSB0eXBlCgojIFJldHVybnMKVGhlIGVuZm9yY2VkIG9wdGlvbnMgZm9yIHRoZSBnaXZlbiBlbmRwb2ludCBhbmQgbWVzc2FnZSB0eXBlAAAAAAAAEGVuZm9yY2VkX29wdGlvbnMAAAACAAAAAAAAAANlaWQAAAAABAAAAAAAAAAIbXNnX3R5cGUAAAAEAAAAAQAAA+gAAAAOAAAAAAAAAsxTZXRzIG9yIHJlbW92ZXMgdGhlIGVuZm9yY2VkIG9wdGlvbnMgZm9yIHNwZWNpZmljIGVuZHBvaW50IGFuZCBtZXNzYWdlIHR5cGUgY29tYmluYXRpb25zLgoKT25seSB0aGUgYGF1dGhvcml6ZXJgIG9mIHRoZSBPQXBwIGNhbiBjYWxsIHRoaXMgZnVuY3Rpb24uClByb3ZpZGVzIGEgd2F5IGZvciB0aGUgT0FwcCB0byBlbmZvcmNlIHRoaW5ncyBsaWtlIHBheWluZyBmb3IgUHJlQ3JpbWUsIEFORC9PUiBtaW5pbXVtIGRzdCBselJlY2VpdmUgZ2FzIGFtb3VudHMgZXRjLgpUaGVzZSBlbmZvcmNlZCBvcHRpb25zIGNhbiB2YXJ5IGFzIHRoZSBwb3RlbnRpYWwgb3B0aW9ucy9leGVjdXRpb24gb24gdGhlIHJlbW90ZSBtYXkgZGlmZmVyIGFzIHBlciB0aGUgbXNnX3R5cGUuCmUuZy4gQW1vdW50IG9mIGx6UmVjZWl2ZSgpIGdhcyBuZWNlc3NhcnkgdG8gZGVsaXZlciBhIGx6Q29tcG9zZSgpIG1lc3NhZ2UgYWRkcyBvdmVyaGVhZCB5b3UgZG9uJ3Qgd2FudCB0byBwYXkKaWYgeW91IGFyZSBvbmx5IG1ha2luZyBhIHN0YW5kYXJkIExheWVyWmVybyBtZXNzYWdlIGllLiBselJlY2VpdmUoKSBXSVRIT1VUIHNlbmRDb21wb3NlKCkuCgojIEFyZ3VtZW50cwoqIGBvcHRpb25zYCAtIEEgdmVjdG9yIG9mIEVuZm9yY2VkT3B0aW9uUGFyYW0gc3RydWN0dXJlcyBzcGVjaWZ5aW5nIGVuZm9yY2VkIG9wdGlvbnMKKiBgb3BlcmF0b3JgIC0gVGhlIGF1dGhvcml6ZXIgYWRkcmVzcwAAABRzZXRfZW5mb3JjZWRfb3B0aW9ucwAAAAIAAAAAAAAAB29wdGlvbnMAAAAD6gAAB9AAAAATRW5mb3JjZWRPcHRpb25QYXJhbQAAAAAAAAAACG9wZXJhdG9yAAAAEwAAAAAAAAAAAAACekNvbWJpbmVzIG9wdGlvbnMgZm9yIGEgZ2l2ZW4gZW5kcG9pbnQgYW5kIG1lc3NhZ2UgdHlwZS4KCklmIHRoZXJlIGlzIGFuIGVuZm9yY2VkIGx6UmVjZWl2ZSBvcHRpb246Ci0ge2dhc19saW1pdDogMjAwaywgdmFsdWU6IDEgWExNfSBBTkQgYSBjYWxsZXIgc3VwcGxpZXMgYSBselJlY2VpdmUgb3B0aW9uOiB7Z2FzX2xpbWl0OiAxMDBrLCB2YWx1ZTogMC41IFhMTX0KLSBUaGUgcmVzdWx0aW5nIG9wdGlvbnMgd2lsbCBiZSB7Z2FzX2xpbWl0OiAzMDBrLCB2YWx1ZTogMS41IFhMTX0gd2hlbiB0aGUgbWVzc2FnZSBpcyBleGVjdXRlZCBvbiB0aGUgcmVtb3RlIGx6X3JlY2VpdmUoKSBmdW5jdGlvbi4KVGhlIHByZXNlbmNlIG9mIGR1cGxpY2F0ZWQgb3B0aW9ucyBpcyBoYW5kbGVkIG9mZi1jaGFpbiBpbiB0aGUgdmVyaWZpZXIvZXhlY3V0b3IuCgojIEFyZ3VtZW50cwoqIGBlaWRgIC0gVGhlIGVuZHBvaW50IElECiogYG1zZ190eXBlYCAtIFRoZSBPQXBwIG1lc3NhZ2UgdHlwZQoqIGBleHRyYV9vcHRpb25zYCAtIEFkZGl0aW9uYWwgb3B0aW9ucyBwYXNzZWQgYnkgdGhlIGNhbGxlcgoKIyBSZXR1cm5zClRoZSBjb21iaW5hdGlvbiBvZiBjYWxsZXIgc3BlY2lmaWVkIG9wdGlvbnMgQU5EIGVuZm9yY2VkIG9wdGlvbnMAAAAAAA9jb21iaW5lX29wdGlvbnMAAAAAAwAAAAAAAAADZWlkAAAAAAQAAAAAAAAACG1zZ190eXBlAAAABAAAAAAAAAANZXh0cmFfb3B0aW9ucwAAAAAAAA4AAAABAAAADgAAAAAAAAAAAAAACmF1dGhvcml6ZXIAAAAAAAAAAAABAAAD6AAAABMAAAAAAAAAPlJldHVybnMgdGhlIGN1cnJlbnQgb3duZXIgYWRkcmVzcywgb3IgTm9uZSBpZiBubyBvd25lciBpcyBzZXQuAAAAAAAFb3duZXIAAAAAAAAAAAAAAQAAA+gAAAATAAAAAAAAAFlSZXR1cm5zIHRoZSBwZW5kaW5nIG93bmVyIGFkZHJlc3MgZm9yIDItc3RlcCB0cmFuc2Zlciwgb3IgTm9uZSBpZiBubyB0cmFuc2ZlciBpcyBwZW5kaW5nLgAAAAAAAA1wZW5kaW5nX293bmVyAAAAAAAAAAAAAAEAAAPoAAAAEwAAAAAAAAEpVHJhbnNmZXJzIG93bmVyc2hpcCBpbW1lZGlhdGVseSB0byBhIG5ldyBhZGRyZXNzLgoKVXNlIHdpdGggY2F1dGlvbiAtIGlmIHlvdSB0cmFuc2ZlciB0byBhIHdyb25nIGFkZHJlc3MsIG93bmVyc2hpcCBpcyBsb3N0IGZvcmV2ZXIuCkNvbnNpZGVyIHVzaW5nIGBiZWdpbl9vd25lcnNoaXBfdHJhbnNmZXJgIGluc3RlYWQuCgojIFBhbmljcwotIGBPd25lck5vdFNldGAgaWYgbm8gb3duZXIgaXMgY3VycmVudGx5IHNldAotIGBUcmFuc2ZlckluUHJvZ3Jlc3NgIGlmIGEgMi1zdGVwIHRyYW5zZmVyIGlzIGluIHByb2dyZXNzAAAAAAAAEnRyYW5zZmVyX293bmVyc2hpcAAAAAAAAQAAAAAAAAAJbmV3X293bmVyAAAAAAAAEwAAAAAAAAAAAAACWkJlZ2lucyBhbiBvd25lcnNoaXAgdHJhbnNmZXIgdG8gYSBuZXcgYWRkcmVzcy4KClRoZSBuZXcgb3duZXIgbXVzdCBjYWxsIGBhY2NlcHRfb3duZXJzaGlwKClgIHdpdGhpbiBgdHRsYCBsZWRnZXJzCnRvIGNvbXBsZXRlIHRoZSB0cmFuc2Zlci4gVGhlIHBlbmRpbmcgdHJhbnNmZXIgd2lsbCBhdXRvbWF0aWNhbGx5IGV4cGlyZSBhZnRlci4KCiMgQXJndW1lbnRzCi0gYG5ld19vd25lcmAgLSBUaGUgcHJvcG9zZWQgbmV3IG93bmVyCi0gYHR0bGAgLSBOdW1iZXIgb2YgbGVkZ2VycyB0aGUgbmV3IG93bmVyIGhhcyB0byBhY2NlcHQuClVzZSBgMGAgdG8gY2FuY2VsIGEgcGVuZGluZyB0cmFuc2ZlciAobmV3X293bmVyIG11c3QgbWF0Y2ggcGVuZGluZykuCgojIFBhbmljcwotIGBPd25lck5vdFNldGAgaWYgbm8gb3duZXIgaXMgY3VycmVudGx5IHNldAotIGBOb1BlbmRpbmdUcmFuc2ZlcmAgd2hlbiBjYW5jZWxsaW5nIGFuZCBubyBwZW5kaW5nIHRyYW5zZmVyIGV4aXN0cwotIGBJbnZhbGlkVHRsYCBpZiB0dGwgZXhjZWVkcyBtYXggVFRMCi0gYEludmFsaWRQZW5kaW5nT3duZXJgIHdoZW4gY2FuY2VsbGluZyB3aXRoIHdyb25nIG5ld19vd25lciBhZGRyZXNzAAAAAAAYYmVnaW5fb3duZXJzaGlwX3RyYW5zZmVyAAAAAgAAAAAAAAAJbmV3X293bmVyAAAAAAAAEwAAAAAAAAADdHRsAAAAAAQAAAAAAAAAAAAAALlBY2NlcHRzIGEgcGVuZGluZyAyLXN0ZXAgb3duZXJzaGlwIHRyYW5zZmVyLgoKTXVzdCBiZSBjYWxsZWQgYnkgdGhlIHBlbmRpbmcgb3duZXIgYmVmb3JlIHRoZSBUVEwgZXhwaXJlcy4KCiMgUGFuaWNzCi0gYE5vUGVuZGluZ1RyYW5zZmVyYCBpZiB0aGVyZSBpcyBubyBwZW5kaW5nIHRyYW5zZmVyIChvciBpdCBleHBpcmVkKQAAAAAAABBhY2NlcHRfb3duZXJzaGlwAAAAAAAAAAAAAAAAAAAApFBlcm1hbmVudGx5IHJlbm91bmNlcyBvd25lcnNoaXAuCgojIFBhbmljcwotIGBPd25lck5vdFNldGAgaWYgbm8gb3duZXIgaXMgY3VycmVudGx5IHNldAotIGBUcmFuc2ZlckluUHJvZ3Jlc3NgIGlmIGEgMi1zdGVwIHRyYW5zZmVyIGlzIGluIHByb2dyZXNzIChjYW5jZWwgaXQgZmlyc3QpAAAAEnJlbm91bmNlX293bmVyc2hpcAAAAAAAAAAAAAAAAAAAAAAApUV4dGVuZHMgdGhlIGluc3RhbmNlIFRUTC4KCiMgQXJndW1lbnRzCgoqIGB0aHJlc2hvbGRgIC0gVGhlIHRocmVzaG9sZCB0byBleHRlbmQgdGhlIFRUTCAoaWYgY3VycmVudCBUVEwgaXMgYmVsb3cgdGhpcywgZXh0ZW5kKS4KKiBgZXh0ZW5kX3RvYCAtIFRoZSBUVEwgdG8gZXh0ZW5kIHRvLgAAAAAAABNleHRlbmRfaW5zdGFuY2VfdHRsAAAAAAIAAAAAAAAACXRocmVzaG9sZAAAAAAAAAQAAAAAAAAACWV4dGVuZF90bwAAAAAAAAQAAAAAAAAAAAAAAY9TZXRzIFRUTCBjb25maWdzIGZvciBpbnN0YW5jZSBhbmQgcGVyc2lzdGVudCBzdG9yYWdlLgoKLSBgTm9uZWAgdmFsdWVzIHJlbW92ZSB0aGUgY29ycmVzcG9uZGluZyBjb25maWcgKGRpc2FibGVzIGF1dG8tZXh0ZW5zaW9uIGZvciB0aGF0IHR5cGUpCi0gVmFsaWRhdGVzIHRoYXQgYHRocmVzaG9sZCA8PSBleHRlbmRfdG8gPD0gTUFYX1RUTGAKCiMgQXJndW1lbnRzCi0gYGluc3RhbmNlYCAtIFRUTCBjb25maWcgZm9yIGluc3RhbmNlIHN0b3JhZ2UKLSBgcGVyc2lzdGVudGAgLSBUVEwgY29uZmlnIGZvciBwZXJzaXN0ZW50IHN0b3JhZ2UKCiMgUGFuaWNzCi0gYFR0bENvbmZpZ0Zyb3plbmAgaWYgY29uZmlncyBhcmUgZnJvemVuCi0gYEludmFsaWRUdGxDb25maWdgIGlmIHZhbGlkYXRpb24gZmFpbHMAAAAAD3NldF90dGxfY29uZmlncwAAAAACAAAAAAAAAAhpbnN0YW5jZQAAA+gAAAfQAAAACVR0bENvbmZpZwAAAAAAAAAAAAAKcGVyc2lzdGVudAAAAAAD6AAAB9AAAAAJVHRsQ29uZmlnAAAAAAAAAAAAAAAAAABIUmV0dXJucyB0aGUgY3VycmVudCBUVEwgY29uZmlncyBhcyAoaW5zdGFuY2VfY29uZmlnLCBwZXJzaXN0ZW50X2NvbmZpZykuAAAAC3R0bF9jb25maWdzAAAAAAAAAAABAAAD7QAAAAIAAAPoAAAH0AAAAAlUdGxDb25maWcAAAAAAAPoAAAH0AAAAAlUdGxDb25maWcAAAAAAAAAAAAA4VBlcm1hbmVudGx5IGZyZWV6ZXMgVFRMIGNvbmZpZ3MsIHByZXZlbnRpbmcgYW55IGZ1dHVyZSBtb2RpZmljYXRpb25zLgoKVGhpcyBpcyBpcnJldmVyc2libGUgYW5kIHByb3ZpZGVzIGltbXV0YWJpbGl0eSBndWFyYW50ZWVzIHRvIHVzZXJzLgpFbWl0cyBgVHRsQ29uZmlnc0Zyb3plbmAgZXZlbnQuCgojIFBhbmljcwotIGBUdGxDb25maWdBbHJlYWR5RnJvemVuYCBpZiBhbHJlYWR5IGZyb3plbgAAAAAAABJmcmVlemVfdHRsX2NvbmZpZ3MAAAAAAAAAAAAAAAAAAAAAACdSZXR1cm5zIHdoZXRoZXIgVFRMIGNvbmZpZ3MgYXJlIGZyb3plbi4AAAAAFWlzX3R0bF9jb25maWdzX2Zyb3plbgAAAAAAAAAAAAABAAAAAQAAAAUAAAAAAAAAAAAAAApQYWNrZXRTZW50AAAAAAABAAAAC3BhY2tldF9zZW50AAAAAAMAAAAAAAAADmVuY29kZWRfcGFja2V0AAAAAAAOAAAAAAAAAAAAAAAHb3B0aW9ucwAAAAAOAAAAAAAAAAAAAAAMc2VuZF9saWJyYXJ5AAAAEwAAAAAAAAACAAAABQAAAAAAAAAAAAAADlBhY2tldFZlcmlmaWVkAAAAAAABAAAAD3BhY2tldF92ZXJpZmllZAAAAAADAAAAAAAAAAZvcmlnaW4AAAAAB9AAAAAGT3JpZ2luAAAAAAAB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AAAABXZhbHVlAAAAAAAACwAAAAAAAAAAAAAAB21lc3NhZ2UAAAAADgAAAAAAAAAAAAAACmV4dHJhX2RhdGEAAAAAAA4AAAAAAAAAAAAAAAZyZWFzb24AAAAAAA4AAAAAAAAAAgAAAAQAAAAAAAAAAAAAAA1FbmRwb2ludEVycm9yAAAAAAAAGQAAAC9MaWJyYXJ5IGlzIGFscmVhZHkgcmVnaXN0ZXJlZCB3aXRoIHRoZSBlbmRwb2ludAAAAAARQWxyZWFkeVJlZ2lzdGVyZWQAAAAAAAABAAAANkNvbXBvc2UgbWVzc2FnZSBhbHJlYWR5IGV4aXN0cyBmb3IgdGhpcyBHVUlEIGFuZCBpbmRleAAAAAAADUNvbXBvc2VFeGlzdHMAAAAAAAACAAAANkNvbXBvc2UgbWVzc2FnZSBub3QgZm91bmQgZm9yIHRoZSBnaXZlbiBHVUlEIGFuZCBpbmRleAAAAAAAD0NvbXBvc2VOb3RGb3VuZAAAAAADAAAAOkRlZmF1bHQgcmVjZWl2ZSBsaWJyYXJ5IGlzIG5vdCBzZXQgZm9yIHRoZSBzb3VyY2UgZW5kcG9pbnQAAAAAABxEZWZhdWx0UmVjZWl2ZUxpYlVuYXZhaWxhYmxlAAAABAAAADxEZWZhdWx0IHNlbmQgbGlicmFyeSBpcyBub3Qgc2V0IGZvciB0aGUgZGVzdGluYXRpb24gZW5kcG9pbnQAAAAZRGVmYXVsdFNlbmRMaWJVbmF2YWlsYWJsZQAAAAAAAAUAAAAvU3VwcGxpZWQgbmF0aXZlIHRva2VuIGZlZSBpcyBsZXNzIHRoYW4gcmVxdWlyZWQAAAAAFUluc3VmZmljaWVudE5hdGl2ZUZlZQAAAAAAAAYAAAAsU3VwcGxpZWQgWlJPIHRva2VuIGZlZSBpcyBsZXNzIHRoYW4gcmVxdWlyZWQAAAASSW5zdWZmaWNpZW50WnJvRmVlAAAAAAAHAAAAK1RpbWVvdXQgZXhwaXJ5IGlzIGludmFsaWQgKGFscmVhZHkgZXhwaXJlZCkAAAAADUludmFsaWRFeHBpcnkAAAAAAAAIAAAAHEFtb3VudCBpcyBpbnZhbGlkIChuZWdhdGl2ZSkAAAANSW52YWxpZEFtb3VudAAAAAAAAAkAAAArQ29tcG9zZSBpbmRleCBleGNlZWRzIG1heGltdW0gYWxsb3dlZCB2YWx1ZQAAAAAMSW52YWxpZEluZGV4AAAACgAAACxOb25jZSBpcyBpbnZhbGlkIGZvciB0aGUgcmVxdWVzdGVkIG9wZXJhdGlvbgAAAAxJbnZhbGlkTm9uY2UAAAALAAAAMFBheWxvYWQgaGFzaCBpcyBpbnZhbGlkIChlbXB0eSBoYXNoIG5vdCBhbGxvd2VkKQAAABJJbnZhbGlkUGF5bG9hZEhhc2gAAAAAAAwAAABBUmVjZWl2ZSBsaWJyYXJ5IGlzIG5vdCB2YWxpZCBmb3IgdGhlIHJlY2VpdmVyIGFuZCBzb3VyY2UgZW5kcG9pbnQAAAAAAAAVSW52YWxpZFJlY2VpdmVMaWJyYXJ5AAAAAAAADQAAADFPcGVyYXRpb24gcmVxdWlyZXMgYSBub24tZGVmYXVsdCAoY3VzdG9tKSBsaWJyYXJ5AAAAAAAAEU9ubHlOb25EZWZhdWx0TGliAAAAAAAADgAAACdMaWJyYXJ5IG11c3Qgc3VwcG9ydCByZWNlaXZpbmcgbWVzc2FnZXMAAAAADk9ubHlSZWNlaXZlTGliAAAAAAAPAAAALExpYnJhcnkgbXVzdCBiZSByZWdpc3RlcmVkIHdpdGggdGhlIGVuZHBvaW50AAAAEU9ubHlSZWdpc3RlcmVkTGliAAAAAAAAEAAAACVMaWJyYXJ5IG11c3Qgc3VwcG9ydCBzZW5kaW5nIG1lc3NhZ2VzAAAAAAAAC09ubHlTZW5kTGliAAAAABEAAAA5TWVzc2FnaW5nIHBhdGggY2Fubm90IGJlIGluaXRpYWxpemVkIGZvciB0aGUgZ2l2ZW4gb3JpZ2luAAAAAAAAFFBhdGhOb3RJbml0aWFsaXphYmxlAAAAEgAAAC9NZXNzYWdlIGNhbm5vdCBiZSB2ZXJpZmllZCBmb3IgdGhlIGdpdmVuIG9yaWdpbgAAAAARUGF0aE5vdFZlcmlmaWFibGUAAAAAAAATAAAAK1BheWxvYWQgaGFzaCBkb2VzIG5vdCBtYXRjaCB0aGUgc3RvcmVkIGhhc2gAAAAAE1BheWxvYWRIYXNoTm90Rm91bmQAAAAAFAAAACdOZXcgdmFsdWUgaXMgdGhlIHNhbWUgYXMgZXhpc3RpbmcgdmFsdWUAAAAACVNhbWVWYWx1ZQAAAAAAABUAAAAvQ2FsbGVyIGlzIG5vdCBhdXRob3JpemVkIChub3QgT0FwcCBvciBkZWxlZ2F0ZSkAAAAADFVuYXV0aG9yaXplZAAAABYAAAArRW5kcG9pbnQgSUQgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgbGlicmFyeQAAAAAOVW5zdXBwb3J0ZWRFaWQAAAAAABcAAAA5WlJPIGZlZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB6ZXJvIHdoZW4gcGF5X2luX3pybyBpcyB0cnVlAAAAAAAAClplcm9acm9GZWUAAAAAABgAAAAcWlJPIHRva2VuIGFkZHJlc3MgaXMgbm90IHNldAAAAA5acm9VbmF2YWlsYWJsZQAAAAAAGQAAAAEAAAAtUGFyYW1ldGVycyBmb3Igc2VuZGluZyBhIGNyb3NzLWNoYWluIG1lc3NhZ2UuAAAAAAAAAAAAAA9NZXNzYWdpbmdQYXJhbXMAAAAABQAAACtEZXN0aW5hdGlvbiBlbmRwb2ludCBJRCAoY2hhaW4gaWRlbnRpZmllcikuAAAAAAdkc3RfZWlkAAAAAAQAAAAcVGhlIG1lc3NhZ2UgcGF5bG9hZCB0byBzZW5kLgAAAAdtZXNzYWdlAAAAAA4AAAAhRW5jb2RlZCBleGVjdXRvciBhbmQgRFZOIG9wdGlvbnMuAAAAAAAAB29wdGlvbnMAAAAADgAAADlXaGV0aGVyIHRvIHBheSBmZWVzIGluIFpSTyB0b2tlbiBpbnN0ZWFkIG9mIG5hdGl2ZSB0b2tlbi4AAAAAAAAKcGF5X2luX3pybwAAAAAAAQAAADVSZWNlaXZlciBhZGRyZXNzIG9uIHRoZSBkZXN0aW5hdGlvbiBjaGFpbiAoMzIgYnl0ZXMpLgAAAAAAAAhyZWNlaXZlcgAAA+4AAAAgAAAAAQAAAE1Tb3VyY2UgbWVzc2FnZSBpbmZvcm1hdGlvbiBpZGVudGlmeWluZyB3aGVyZSBhIGNyb3NzLWNoYWluIG1lc3NhZ2UgY2FtZSBmcm9tLgAAAAAAAAAAAAAGT3JpZ2luAAAAAAADAAAAF05vbmNlIGZvciB0aGlzIHBhdGh3YXkuAAAAAAVub25jZQAAAAAAAAYAAAAuU2VuZGVyIGFkZHJlc3Mgb24gdGhlIHNvdXJjZSBjaGFpbiAoMzIgYnl0ZXMpLgAAAAAABnNlbmRlcgAAAAAD7gAAACAAAAAmU291cmNlIGVuZHBvaW50IElEIChjaGFpbiBpZGVudGlmaWVyKS4AAAAAAAdzcmNfZWlkAAAAAAQAAAABAAAAKEZlZSBzdHJ1Y3R1cmUgZm9yIGNyb3NzLWNoYWluIG1lc3NhZ2luZy4AAAAAAAAADE1lc3NhZ2luZ0ZlZQAAAAIAAAAfRmVlIHBhaWQgaW4gbmF0aXZlIHRva2VuIChYTE0pLgAAAAAKbmF0aXZlX2ZlZQAAAAAACwAAAChGZWUgcGFpZCBpbiBaUk8gdG9rZW4gKExheWVyWmVybyB0b2tlbikuAAAAB3pyb19mZWUAAAAACwAAAAEAAABCUmVjZWlwdCByZXR1cm5lZCBhZnRlciBzdWNjZXNzZnVsbHkgc2VuZGluZyBhIGNyb3NzLWNoYWluIG1lc3NhZ2UuAAAAAAAAAAAAEE1lc3NhZ2luZ1JlY2VpcHQAAAADAAAAKVRoZSBmZWVzIGNoYXJnZWQgZm9yIHNlbmRpbmcgdGhlIG1lc3NhZ2UuAAAAAAAAA2ZlZQAAAAfQAAAADE1lc3NhZ2luZ0ZlZQAAACtHbG9iYWxseSB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIG1lc3NhZ2UuAAAAAARndWlkAAAD7gAAACAAAAAkVGhlIG91dGJvdW5kIG5vbmNlIGZvciB0aGlzIHBhdGh3YXkuAAAABW5vbmNlAAAAAAAABgAAAAIAAAA4VHlwZSBvZiBtZXNzYWdlIGxpYnJhcnkgaW5kaWNhdGluZyBzdXBwb3J0ZWQgb3BlcmF0aW9ucy4AAAAAAAAADk1lc3NhZ2VMaWJUeXBlAAAAAAADAAAAAAAAAB9TdXBwb3J0cyBvbmx5IHNlbmRpbmcgbWVzc2FnZXMuAAAAAARTZW5kAAAAAAAAACFTdXBwb3J0cyBvbmx5IHJlY2VpdmluZyBtZXNzYWdlcy4AAAAAAAAHUmVjZWl2ZQAAAAAAAAAALVN1cHBvcnRzIGJvdGggc2VuZGluZyBhbmQgcmVjZWl2aW5nIG1lc3NhZ2VzLgAAAAAAAA5TZW5kQW5kUmVjZWl2ZQAAAAAAAQAAALdWZXJzaW9uIGluZm9ybWF0aW9uIGZvciBhIG1lc3NhZ2UgbGlicmFyeS4KCk5vdGU6IGBtaW5vcmAgYW5kIGBlbmRwb2ludF92ZXJzaW9uYCB1c2UgYHUzMmAgaW5zdGVhZCBvZiBgdThgIGJlY2F1c2UgU3RlbGxhciBkb2VzIG5vdApzdXBwb3J0IGB1OGAgdHlwZXMgaW4gY29udHJhY3QgaW50ZXJmYWNlIGZ1bmN0aW9ucy4AAAAAAAAAABFNZXNzYWdlTGliVmVyc2lvbgAAAAAAAAMAAAAzRW5kcG9pbnQgdmVyc2lvbiAoc2hvdWxkIG5vdCBleGNlZWQgdTg6Ok1BWCA9IDI1NSkuAAAAABBlbmRwb2ludF92ZXJzaW9uAAAABAAAABVNYWpvciB2ZXJzaW9uIG51bWJlci4AAAAAAAAFbWFqb3IAAAAAAAAGAAAAN01pbm9yIHZlcnNpb24gbnVtYmVyIChzaG91bGQgbm90IGV4Y2VlZCB1ODo6TUFYID0gMjU1KS4AAAAABW1pbm9yAAAAAAAABAAAAAEAAAA2VGltZW91dCBjb25maWd1cmF0aW9uIGZvciByZWNlaXZlIGxpYnJhcnkgdHJhbnNpdGlvbnMuAAAAAAAAAAAAB1RpbWVvdXQAAAAAAgAAADNVbml4IHRpbWVzdGFtcCBpbiBzZWNvbmRzIHdoZW4gdGhlIHRpbWVvdXQgZXhwaXJlcy4AAAAABmV4cGlyeQAAAAAABgAAAENUaGUgb2xkIGxpYnJhcnkgYWRkcmVzcyB0aGF0IHJlbWFpbnMgdmFsaWQgZHVyaW5nIHRoZSBncmFjZSBwZXJpb2QuAAAAAANsaWIAAAAAEwAAAAEAAAA1UGFyYW1ldGVycyBmb3Igc2V0dGluZyBtZXNzYWdlIGxpYnJhcnkgY29uZmlndXJhdGlvbi4AAAAAAAAAAAAADlNldENvbmZpZ1BhcmFtAAAAAAADAAAAH1hEUi1lbmNvZGVkIGNvbmZpZ3VyYXRpb24gZGF0YS4AAAAABmNvbmZpZwAAAAAADgAAADBUaGUgdHlwZSBvZiBjb25maWd1cmF0aW9uIChlLmcuLCBleGVjdXRvciwgVUxOKS4AAAALY29uZmlnX3R5cGUAAAAABAAAACdUaGUgZW5kcG9pbnQgSUQgdGhpcyBjb25maWcgYXBwbGllcyB0by4AAAAAA2VpZAAAAAAEAAAAAQAAADFSZXNvbHZlZCBsaWJyYXJ5IGluZm9ybWF0aW9uIHdpdGggZGVmYXVsdCBzdGF0dXMuAAAAAAAAAAAAAA9SZXNvbHZlZExpYnJhcnkAAAAAAgAAAERXaGV0aGVyIHRoaXMgaXMgdGhlIGRlZmF1bHQgbGlicmFyeSAodHJ1ZSkgb3IgT0FwcC1zcGVjaWZpYyAoZmFsc2UpLgAAAAppc19kZWZhdWx0AAAAAAABAAAAHVRoZSByZXNvbHZlZCBsaWJyYXJ5IGFkZHJlc3MuAAAAAAAAA2xpYgAAAAATAAAAAQAAAEhPdXRib3VuZCBwYWNrZXQgY29udGFpbmluZyBhbGwgaW5mb3JtYXRpb24gZm9yIGNyb3NzLWNoYWluIHRyYW5zbWlzc2lvbi4AAAAAAAAADk91dGJvdW5kUGFja2V0AAAAAAAHAAAAGERlc3RpbmF0aW9uIGVuZHBvaW50IElELgAAAAdkc3RfZWlkAAAAAAQAAAAsR2xvYmFsbHkgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoaXMgbWVzc2FnZS4AAAAEZ3VpZAAAA+4AAAAgAAAAFFRoZSBtZXNzYWdlIHBheWxvYWQuAAAAB21lc3NhZ2UAAAAADgAAACBPdXRib3VuZCBub25jZSBmb3IgdGhpcyBwYXRod2F5LgAAAAVub25jZQAAAAAAAAYAAAAxUmVjZWl2ZXIgYWRkcmVzcyBvbiBkZXN0aW5hdGlvbiBjaGFpbiAoMzIgYnl0ZXMpLgAAAAAAAAhyZWNlaXZlcgAAA+4AAAAgAAAAH1NlbmRlciBhZGRyZXNzIG9uIHNvdXJjZSBjaGFpbi4AAAAABnNlbmRlcgAAAAAAEwAAABNTb3VyY2UgZW5kcG9pbnQgSUQuAAAAAAdzcmNfZWlkAAAAAAQAAAABAAAAK0EgZmVlIHJlY2lwaWVudCB3aXRoIHRoZSBhbW91bnQgdG8gYmUgcGFpZC4AAAAAAAAAAAxGZWVSZWNpcGllbnQAAAACAAAAFUFtb3VudCBvZiBmZWUgdG8gcGF5LgAAAAAAAAZhbW91bnQAAAAAAAsAAAAfVGhlIGFkZHJlc3MgdG8gc2VuZCB0aGUgZmVlIHRvLgAAAAACdG8AAAAAABMAAAABAAAAPFJlc3VsdCBvZiBzZW5kIG9wZXJhdGlvbiBjb250YWluaW5nIGZlZXMgYW5kIGVuY29kZWQgcGFja2V0LgAAAAAAAAANRmVlc0FuZFBhY2tldAAAAAAAAAMAAAAqVGhlIGVuY29kZWQgcGFja2V0IHJlYWR5IGZvciB0cmFuc21pc3Npb24uAAAAAAAOZW5jb2RlZF9wYWNrZXQAAAAAAA4AAAA/TGlzdCBvZiBuYXRpdmUgdG9rZW4gZmVlIHJlY2lwaWVudHMgKGV4ZWN1dG9yLCBEVk5zLCB0cmVhc3VyeSkuAAAAABVuYXRpdmVfZmVlX3JlY2lwaWVudHMAAAAAAAPqAAAH0AAAAAxGZWVSZWNpcGllbnQAAAAsTGlzdCBvZiBaUk8gdG9rZW4gZmVlIHJlY2lwaWVudHMgKHRyZWFzdXJ5KS4AAAASenJvX2ZlZV9yZWNpcGllbnRzAAAAAAPqAAAH0AAAAAxGZWVSZWNpcGllbnQAAAACAAAAAAAAAAAAAAAPT0FwcENvcmVTdG9yYWdlAAAAAAIAAAAAAAAAAAAAAAhFbmRwb2ludAAAAAEAAAAAAAAABFBlZXIAAAABAAAABAAAAAUAAAAAAAAAAAAAAAdQZWVyU2V0AAAAAAEAAAAIcGVlcl9zZXQAAAACAAAAAAAAAANlaWQAAAAABAAAAAAAAAAAAAAABHBlZXIAAAPoAAAD7gAAACAAAAAAAAAAAgAAAAEAAAAAAAAAAAAAABNFbmZvcmNlZE9wdGlvblBhcmFtAAAAAAMAAAAAAAAAA2VpZAAAAAAEAAAAAAAAAAhtc2dfdHlwZQAAAAQAAAAAAAAAB29wdGlvbnMAAAAD6AAAAA4AAAACAAAAAAAAAAAAAAAXT0FwcE9wdGlvbnNUeXBlM1N0b3JhZ2UAAAAAAQAAAAEAAAAAAAAAD0VuZm9yY2VkT3B0aW9ucwAAAAACAAAABAAAAAQAAAAFAAAAAAAAAAAAAAARRW5mb3JjZWRPcHRpb25TZXQAAAAAAAABAAAAE2VuZm9yY2VkX29wdGlvbl9zZXQAAAAAAQAAAAAAAAAQZW5mb3JjZWRfb3B0aW9ucwAAA+oAAAfQAAAAE0VuZm9yY2VkT3B0aW9uUGFyYW0AAAAAAAAAAAIAAAACAAACqlJlcHJlc2VudHMgYSBmZWUgcGF5ZXIgYWRkcmVzcyB3aXRoIGV4cGxpY2l0IGF1dGhvcml6YXRpb24gc3RhdGUuCgpUaGlzIGVudW0gZm9yY2VzIGNhbGxlcnMgb2YgYF9fbHpfc2VuZGAgdG8gZXhwbGljaXRseSBkZWNsYXJlIHdoZXRoZXIKYHJlcXVpcmVfYXV0aCgpYCBoYXMgYWxyZWFkeSBiZWVuIGNhbGxlZCBmb3IgdGhlIGZlZSBwYXllciBhZGRyZXNzLgpUaGlzIHByZXZlbnRzIHRoZSBjb21tb24gbWlzdGFrZSBvZiBmb3JnZXR0aW5nIHRvIGF1dGhvcml6ZSB0aGUgZmVlIHBheWVyLgoKIyBWYXJpYW50cwotIGBVbnZlcmlmaWVkYCDigJQgU2FmZSBkZWZhdWx0LiBgX19sel9zZW5kYCB3aWxsIGNhbGwgYHJlcXVpcmVfYXV0aCgpYCBvbiB0aGUgYWRkcmVzcy4KVXNlIHRoaXMgd2hlbiB0aGUgY2FsbGVyIGhhcyAqKm5vdCoqIGFscmVhZHkgYXV0aG9yaXplZCB0aGUgZmVlIHBheWVyLgotIGBWZXJpZmllZGAg4oCUIENhbGxlciBhc3NlcnRzIHRoYXQgYHJlcXVpcmVfYXV0aCgpYCBoYXMgYWxyZWFkeSBiZWVuIGNhbGxlZC4KVXNlIHRoaXMgdG8gYXZvaWQgYSBkdXBsaWNhdGUgYHJlcXVpcmVfYXV0aCgpYCBub2RlIGluIHRoZSBTb3JvYmFuIGF1dGggdHJlZQooZS5nLiwgd2hlbiB0aGUgc2FtZSBhZGRyZXNzIHdhcyBhbHJlYWR5IGF1dGhvcml6ZWQgYXMgdGhlIG1lc3NhZ2Ugc2VuZGVyKS4AAAAAAAAAAAAIRmVlUGF5ZXIAAAACAAAAAQAAAKpUaGUgZmVlIHBheWVyIGhhcyAqKm5vdCoqIGJlZW4gYXV0aG9yaXplZCB5ZXQuCmBfX2x6X3NlbmRgIHdpbGwgY2FsbCBgZmVlX3BheWVyLnJlcXVpcmVfYXV0aCgpYCBiZWZvcmUgdHJhbnNmZXJyaW5nIGZlZXMuClRoaXMgaXMgdGhlIHNhZmUgZGVmYXVsdCDigJQgdXNlIHRoaXMgaWYgdW5zdXJlLgAAAAAAClVudmVyaWZpZWQAAAAAAAEAAAATAAAAAQAAAW9UaGUgZmVlIHBheWVyIGhhcyAqKmFscmVhZHkqKiBiZWVuIGF1dGhvcml6ZWQgYnkgdGhlIGNhbGxlciB2aWEgYHJlcXVpcmVfYXV0aCgpYC4KYF9fbHpfc2VuZGAgd2lsbCBza2lwIHRoZSBhdXRoIGNoZWNrIHRvIGF2b2lkIGNyZWF0aW5nIGEgZHVwbGljYXRlIGF1dGggbm9kZQppbiB0aGUgU29yb2JhbiBhdXRob3JpemF0aW9uIHRyZWUuCgojIFNhZmV0eQpPbmx5IHVzZSB0aGlzIHZhcmlhbnQgaWYgeW91IGhhdmUgYWxyZWFkeSBjYWxsZWQgYHJlcXVpcmVfYXV0aCgpYCBvbiB0aGlzIGFkZHJlc3MKaW4gdGhlIGN1cnJlbnQgY29udHJhY3QgaW52b2NhdGlvbi4gTWlzdXNlIG1heSBhbGxvdyB1bmF1dGhvcml6ZWQgZmVlIGRlZHVjdGlvbnMuAAAAAAhWZXJpZmllZAAAAAEAAAATAAAABAAAABRPQXBwRXJyb3I6IDIwMDAtMjA5OQAAAAAAAAAJT0FwcEVycm9yAAAAAAAABAAAAAAAAAAOSW52YWxpZE9wdGlvbnMAAAAAB9AAAAAAAAAABk5vUGVlcgAAAAAH0QAAAAAAAAAIT25seVBlZXIAAAfSAAAAAAAAABNacm9Ub2tlblVuYXZhaWxhYmxlAAAAB9MAAAAFAAAAAAAAAAAAAAAHT0ZUU2VudAAAAAABAAAACG9mdF9zZW50AAAABQAAAAAAAAAEZ3VpZAAAA+4AAAAgAAAAAQAAAAAAAAAHZHN0X2VpZAAAAAAEAAAAAQAAAAAAAAAEZnJvbQAAABMAAAABAAAAAAAAAA5hbW91bnRfc2VudF9sZAAAAAAACwAAAAAAAAAAAAAAEmFtb3VudF9yZWNlaXZlZF9sZAAAAAAACwAAAAAAAAACAAAABQAAAAAAAAAAAAAAC09GVFJlY2VpdmVkAAAAAAEAAAAMb2Z0X3JlY2VpdmVkAAAABAAAAAAAAAAEZ3VpZAAAA+4AAAAgAAAAAQAAAAAAAAAHc3JjX2VpZAAAAAAEAAAAAQAAAAAAAAACdG8AAAAAABMAAAABAAAAAAAAABJhbW91bnRfcmVjZWl2ZWRfbGQAAAAAAAsAAAAAAAAAAgAAAAUAAAAAAAAAAAAAAA9Nc2dJbnNwZWN0b3JTZXQAAAAAAQAAABFtc2dfaW5zcGVjdG9yX3NldAAAAAAAAAEAAAAAAAAACWluc3BlY3RvcgAAAAAAA+gAAAATAAAAAAAAAAIAAAACAAAAAAAAAAAAAAAKT0ZUU3RvcmFnZQAAAAAAAwAAAAAAAAAAAAAADERlY2ltYWxzRGlmZgAAAAAAAAAAAAAABVRva2VuAAAAAAAAAAAAAAAAAAAMTXNnSW5zcGVjdG9yAAAABAAAABNPRlRFcnJvcjogMzAwMC0zMDk5AAAAAAAAAAAIT0ZURXJyb3IAAAAGAAAAAAAAAA5JbnZhbGlkQWRkcmVzcwAAAAALuAAAAAAAAAANSW52YWxpZEFtb3VudAAAAAAAC7kAAAAAAAAAFEludmFsaWRMb2NhbERlY2ltYWxzAAALugAAAAAAAAAOTm90SW5pdGlhbGl6ZWQAAAAAC7sAAAAAAAAACE92ZXJmbG93AAALvAAAAAAAAAAQU2xpcHBhZ2VFeGNlZWRlZAAAC70AAAABAAAALVBhcmFtZXRlcnMgZm9yIHNlbmRpbmcgT0ZUIHRva2VucyBjcm9zcy1jaGFpbgAAAAAAAAAAAAAJU2VuZFBhcmFtAAAAAAAABwAAACRUaGUgYW1vdW50IHRvIHNlbmQgaW4gbG9jYWwgZGVjaW1hbHMAAAAJYW1vdW50X2xkAAAAAAAACwAAADhDb21wb3NlIG1lc3NhZ2UgdG8gZXhlY3V0ZSBvbiB0aGUgZGVzdGluYXRpb24gKE9wdGlvbmFsKQAAAAtjb21wb3NlX21zZwAAAAAOAAAAG1RoZSBkZXN0aW5hdGlvbiBlbmRwb2ludCBJRAAAAAAHZHN0X2VpZAAAAAAEAAAAN0FkZGl0aW9uYWwgb3B0aW9ucyBmb3IgdGhlIExheWVyWmVybyBtZXNzYWdlIChPcHRpb25hbCkAAAAADWV4dHJhX29wdGlvbnMAAAAAAAAOAAAARVRoZSBtaW5pbXVtIGFtb3VudCB0byByZWNlaXZlIGluIGxvY2FsIGRlY2ltYWxzIChzbGlwcGFnZSBwcm90ZWN0aW9uKQAAAAAAAA1taW5fYW1vdW50X2xkAAAAAAAACwAAACpPRlQgY29tbWFuZCBmb3IgY3VzdG9tIGJlaGF2aW9yIChPcHRpb25hbCkAAAAAAAdvZnRfY21kAAAAAA4AAAA5VGhlIHJlY2lwaWVudCBhZGRyZXNzIG9uIHRoZSBkZXN0aW5hdGlvbiBjaGFpbiAoMzIgYnl0ZXMpAAAAAAAAAnRvAAAAAAPuAAAAIAAAAAEAAAAiVHJhbnNmZXIgbGltaXRzIGZvciBPRlQgb3BlcmF0aW9ucwAAAAAAAAAAAAhPRlRMaW1pdAAAAAIAAAAsVGhlIG1heGltdW0gYW1vdW50IHRvIHNlbmQgaW4gbG9jYWwgZGVjaW1hbHMAAAANbWF4X2Ftb3VudF9sZAAAAAAAAAsAAAAsVGhlIG1pbmltdW0gYW1vdW50IHRvIHNlbmQgaW4gbG9jYWwgZGVjaW1hbHMAAAANbWluX2Ftb3VudF9sZAAAAAAAAAsAAAABAAAAP1JlY2VpcHQgY29udGFpbmluZyBhbW91bnRzIHNlbnQgYW5kIHJlY2VpdmVkIGluIGFuIE9GVCB0cmFuc2ZlcgAAAAAAAAAACk9GVFJlY2VpcHQAAAAAAAIAAAAzVGhlIGFtb3VudCByZWNlaXZlZCBpbiBsb2NhbCBkZWNpbWFscyBvbiB0aGUgcmVtb3RlAAAAABJhbW91bnRfcmVjZWl2ZWRfbGQAAAAAAAsAAAAhVGhlIGFtb3VudCBzZW50IGluIGxvY2FsIGRlY2ltYWxzAAAAAAAADmFtb3VudF9zZW50X2xkAAAAAAALAAAAAQAAAC5EZXRhaWxzIGFib3V0IGZlZXMgY2hhcmdlZCBpbiBhbiBPRlQgb3BlcmF0aW9uAAAAAAAAAAAADE9GVEZlZURldGFpbAAAAAIAAAAaVGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBmZWUAAAAAAAtkZXNjcmlwdGlvbgAAAAAOAAAAf1RoZSBhbW91bnQgb2YgdGhlIGZlZSBpbiBsb2NhbCBkZWNpbWFscy4gUG9zaXRpdmUgdmFsdWVzIHJlcHJlc2VudCBmZWVzIGNoYXJnZWQsCndoaWxlIG5lZ2F0aXZlIHZhbHVlcyByZXByZXNlbnQgcmV3YXJkcyBnaXZlbi4AAAAADWZlZV9hbW91bnRfbGQAAAAAAAALAAAABAAAABxCdWZmZXJSZWFkZXJFcnJvcjogMTAwMC0xMDA5AAAAAAAAABFCdWZmZXJSZWFkZXJFcnJvcgAAAAAAAAIAAAAAAAAADUludmFsaWRMZW5ndGgAAAAAAAPoAAAAAAAAABVJbnZhbGlkQWRkcmVzc1BheWxvYWQAAAAAAAPpAAAABAAAABxCdWZmZXJXcml0ZXJFcnJvcjogMTAxMC0xMDE5AAAAAAAAABFCdWZmZXJXcml0ZXJFcnJvcgAAAAAAAAEAAAAAAAAAFUludmFsaWRBZGRyZXNzUGF5bG9hZAAAAAAAA/IAAAAEAAAAH1R0bENvbmZpZ3VyYWJsZUVycm9yOiAxMDIwLTEwMjkAAAAAAAAAABRUdGxDb25maWd1cmFibGVFcnJvcgAAAAMAAAAAAAAAEEludmFsaWRUdGxDb25maWcAAAP8AAAAAAAAAA9UdGxDb25maWdGcm96ZW4AAAAD/QAAAAAAAAAWVHRsQ29uZmlnQWxyZWFkeUZyb3plbgAAAAAD/gAAAAQAAAAXT3duYWJsZUVycm9yOiAxMDMwLTEwMzkAAAAAAAAAAAxPd25hYmxlRXJyb3IAAAAHAAAAAAAAABFJbnZhbGlkQXV0aG9yaXplcgAAAAAABAYAAAAAAAAAE0ludmFsaWRQZW5kaW5nT3duZXIAAAAEBwAAAAAAAAAKSW52YWxpZFR0bAAAAAAECAAAAAAAAAARTm9QZW5kaW5nVHJhbnNmZXIAAAAAAAQJAAAAAAAAAA9Pd25lckFscmVhZHlTZXQAAAAECgAAAAAAAAALT3duZXJOb3RTZXQAAAAECwAAAAAAAAASVHJhbnNmZXJJblByb2dyZXNzAAAAAAQMAAAABAAAABhCeXRlc0V4dEVycm9yOiAxMDQwLTEwNDkAAAAAAAAADUJ5dGVzRXh0RXJyb3IAAAAAAAABAAAAAAAAAA5MZW5ndGhNaXNtYXRjaAAAAAAEEAAAAAQAAAAbVXBncmFkZWFibGVFcnJvcjogMTA1MC0xMDU5AAAAAAAAAAAQVXBncmFkZWFibGVFcnJvcgAAAAIAAAAAAAAAFEludmFsaWRNaWdyYXRpb25EYXRhAAAEGgAAAAAAAAATTWlncmF0aW9uTm90QWxsb3dlZAAAAAQbAAAABAAAABhNdWx0aVNpZ0Vycm9yOiAxMDYwLTEwNjkAAAAAAAAADU11bHRpU2lnRXJyb3IAAAAAAAAJAAAAAAAAABJBbHJlYWR5SW5pdGlhbGl6ZWQAAAAABCQAAAAAAAAAEUludmFsaWRBdXRob3JpemVyAAAAAAAEJQAAAAAAAAANSW52YWxpZFNpZ25lcgAAAAAABCYAAAAAAAAADlNpZ25hdHVyZUVycm9yAAAAAAQnAAAAAAAAABNTaWduZXJBbHJlYWR5RXhpc3RzAAAABCgAAAAAAAAADlNpZ25lck5vdEZvdW5kAAAAAAQpAAAAAAAAAB1Ub3RhbFNpZ25lcnNMZXNzVGhhblRocmVzaG9sZAAAAAAABCoAAAAAAAAAD1Vuc29ydGVkU2lnbmVycwAAAAQrAAAAAAAAAA1aZXJvVGhyZXNob2xkAAAAAAAELAAAAAQAAAAUQXV0aEVycm9yOiAxMDcwLTEwNzkAAAAAAAAACUF1dGhFcnJvcgAAAAAAAAEAAAAAAAAAEkF1dGhvcml6ZXJOb3RGb3VuZAAAAAAELgAAAAQAAAAUUmJhY0Vycm9yOiAxMDgwLTEwODkAAAAAAAAACVJiYWNFcnJvcgAAAAAAAAcAAAAAAAAAEUFkbWluUm9sZU5vdEZvdW5kAAAAAAAEOAAAAAAAAAAQSW5kZXhPdXRPZkJvdW5kcwAABDkAAAAAAAAAEE1heFJvbGVzRXhjZWVkZWQAAAQ6AAAAAAAAAAtSb2xlSXNFbXB0eQAAAAQ7AAAAAAAAAAxSb2xlTm90Rm91bmQAAAQ8AAAAAAAAAAtSb2xlTm90SGVsZAAAAAQ9AAAAAAAAAAxVbmF1dGhvcml6ZWQAAAQ+AAAABQAAADBFdmVudCBlbWl0dGVkIHdoZW4gYSBzaWduZXIgaXMgYWRkZWQgb3IgcmVtb3ZlZC4AAAAAAAAACVNpZ25lclNldAAAAAAAAAEAAAAKc2lnbmVyX3NldAAAAAAAAgAAAAAAAAAGc2lnbmVyAAAAAAPuAAAAFAAAAAEAAAAAAAAABmFjdGl2ZQAAAAAAAQAAAAAAAAACAAAABQAAADZFdmVudCBlbWl0dGVkIHdoZW4gdGhlIHNpZ25hdHVyZSB0aHJlc2hvbGQgaXMgY2hhbmdlZC4AAAAAAAAAAAAMVGhyZXNob2xkU2V0AAAAAQAAAA10aHJlc2hvbGRfc2V0AAAAAAAAAQAAAAAAAAAJdGhyZXNob2xkAAAAAAAABAAAAAAAAAACAAAAAgAAAAAAAAAAAAAAD011bHRpU2lnU3RvcmFnZQAAAAACAAAAAAAAAAAAAAAHU2lnbmVycwAAAAAAAAAAAAAAAAlUaHJlc2hvbGQAAAAAAAAFAAAAV0V2ZW50IGVtaXR0ZWQgd2hlbiBvd25lcnNoaXAgaXMgdHJhbnNmZXJyZWQgKGJvdGggc2luZ2xlLXN0ZXAgYW5kIHR3by1zdGVwIGNvbXBsZXRpb24pLgAAAAAAAAAAFE93bmVyc2hpcFRyYW5zZmVycmVkAAAAAQAAABVvd25lcnNoaXBfdHJhbnNmZXJyZWQAAAAAAAACAAAAAAAAAAlvbGRfb3duZXIAAAAAAAATAAAAAAAAAAAAAAAJbmV3X293bmVyAAAAAAAAEwAAAAAAAAACAAAABQAAADtFdmVudCBlbWl0dGVkIHdoZW4gYSAyLXN0ZXAgb3duZXJzaGlwIHRyYW5zZmVyIGlzIHByb3Bvc2VkLgAAAAAAAAAAFU93bmVyc2hpcFRyYW5zZmVycmluZwAAAAAAAAEAAAAWb3duZXJzaGlwX3RyYW5zZmVycmluZwAAAAAAAwAAAAAAAAAJb2xkX293bmVyAAAAAAAAEwAAAAAAAAAAAAAACW5ld19vd25lcgAAAAAAABMAAAAAAAAAAAAAAAN0dGwAAAAABAAAAAAAAAACAAAABQAAADxFdmVudCBlbWl0dGVkIHdoZW4gYSAyLXN0ZXAgb3duZXJzaGlwIHRyYW5zZmVyIGlzIGNhbmNlbGxlZC4AAAAAAAAAGk93bmVyc2hpcFRyYW5zZmVyQ2FuY2VsbGVkAAAAAAABAAAAHG93bmVyc2hpcF90cmFuc2Zlcl9jYW5jZWxsZWQAAAACAAAAAAAAAAVvd25lcgAAAAAAABMAAAAAAAAAAAAAABdjYW5jZWxsZWRfcGVuZGluZ19vd25lcgAAAAATAAAAAAAAAAIAAAAFAAAAKkV2ZW50IGVtaXR0ZWQgd2hlbiBvd25lcnNoaXAgaXMgcmVub3VuY2VkLgAAAAAAAAAAABJPd25lcnNoaXBSZW5vdW5jZWQAAAAAAAEAAAATb3duZXJzaGlwX3Jlbm91bmNlZAAAAAABAAAAAAAAAAlvbGRfb3duZXIAAAAAAAATAAAAAAAAAAIAAAACAAAAAAAAAAAAAAAOT3duYWJsZVN0b3JhZ2UAAAAAAAIAAAAAAAAAAAAAAAVPd25lcgAAAAAAAAAAAAAAAAAADFBlbmRpbmdPd25lcgAAAAUAAAAlRXZlbnQgZW1pdHRlZCB3aGVuIGEgcm9sZSBpcyBncmFudGVkLgAAAAAAAAAAAAALUm9sZUdyYW50ZWQAAAAAAQAAAAxyb2xlX2dyYW50ZWQAAAADAAAAAAAAAARyb2xlAAAAEQAAAAEAAAAAAAAAB2FjY291bnQAAAAAEwAAAAEAAAAAAAAABmNhbGxlcgAAAAAAEwAAAAAAAAACAAAABQAAACVFdmVudCBlbWl0dGVkIHdoZW4gYSByb2xlIGlzIHJldm9rZWQuAAAAAAAAAAAAAAtSb2xlUmV2b2tlZAAAAAABAAAADHJvbGVfcmV2b2tlZAAAAAMAAAAAAAAABHJvbGUAAAARAAAAAQAAAAAAAAAHYWNjb3VudAAAAAATAAAAAQAAAAAAAAAGY2FsbGVyAAAAAAATAAAAAAAAAAIAAAAFAAAAK0V2ZW50IGVtaXR0ZWQgd2hlbiBhIHJvbGUgYWRtaW4gaXMgY2hhbmdlZC4AAAAAAAAAABBSb2xlQWRtaW5DaGFuZ2VkAAAAAQAAABJyb2xlX2FkbWluX2NoYW5nZWQAAAAAAAMAAAAAAAAABHJvbGUAAAARAAAAAQAAAAAAAAATcHJldmlvdXNfYWRtaW5fcm9sZQAAAAPoAAAAEQAAAAAAAAAAAAAADm5ld19hZG1pbl9yb2xlAAAAAAPoAAAAEQAAAAAAAAACAAAAAgAAAAAAAAAAAAAAC1JiYWNTdG9yYWdlAAAAAAUAAAAAAAAAAAAAAA1FeGlzdGluZ1JvbGVzAAAAAAAAAQAAAAAAAAASUm9sZUluZGV4VG9BY2NvdW50AAAAAAACAAAAEQAAAAQAAAABAAAAAAAAABJSb2xlQWNjb3VudFRvSW5kZXgAAAAAAAIAAAARAAAAEwAAAAEAAAAAAAAAEVJvbGVBY2NvdW50c0NvdW50AAAAAAAAAQAAABEAAAABAAAAAAAAAAlSb2xlQWRtaW4AAAAAAAABAAAAEQAAAAEAAABJVFRMIGNvbmZpZ3VyYXRpb246IHRocmVzaG9sZCAod2hlbiB0byBleHRlbmQpIGFuZCBleHRlbmRfdG8gKHRhcmdldCBUVEwpLgAAAAAAAAAAAAAJVHRsQ29uZmlnAAAAAAAAAgAAAChUYXJnZXQgVFRMIGFmdGVyIGV4dGVuc2lvbiAoaW4gbGVkZ2VycykuAAAACWV4dGVuZF90bwAAAAAAAAQAAAAzVFRMIHRocmVzaG9sZCB0aGF0IHRyaWdnZXJzIGV4dGVuc2lvbiAoaW4gbGVkZ2VycykuAAAAAAl0aHJlc2hvbGQAAAAAAAAEAAAABQAAACdFdmVudCBlbWl0dGVkIHdoZW4gVFRMIGNvbmZpZ3MgYXJlIHNldC4AAAAAAAAAAA1UdGxDb25maWdzU2V0AAAAAAAAAQAAAA90dGxfY29uZmlnc19zZXQAAAAAAgAAAAAAAAAIaW5zdGFuY2UAAAPoAAAH0AAAAAlUdGxDb25maWcAAAAAAAAAAAAAAAAAAApwZXJzaXN0ZW50AAAAAAPoAAAH0AAAAAlUdGxDb25maWcAAAAAAAAAAAAAAgAAAAUAAAAqRXZlbnQgZW1pdHRlZCB3aGVuIFRUTCBjb25maWdzIGFyZSBmcm96ZW4uAAAAAAAAAAAAEFR0bENvbmZpZ3NGcm96ZW4AAAABAAAAEnR0bF9jb25maWdzX2Zyb3plbgAAAAAAAAAAAAIAAAACAAAAAAAAAAAAAAAQVHRsQ29uZmlnU3RvcmFnZQAAAAMAAAAAAAAAAAAAAAZGcm96ZW4AAAAAAAAAAAAAAAAACEluc3RhbmNlAAAAAAAAAAAAAAAKUGVyc2lzdGVudAAAAAAAAgAAAAAAAAAAAAAAElVwZ3JhZGVhYmxlU3RvcmFnZQAAAAAAAQAAAAAAAAAAAAAACU1pZ3JhdGluZwAAAAAeEWNvbnRyYWN0ZW52bWV0YXYwAAAAAAAAABkAAAAAAG8OY29udHJhY3RtZXRhdjAAAAAAAAAABXJzdmVyAAAAAAAABjEuOTAuMAAAAAAAAAAAAAhyc3Nka3ZlcgAAAC8yNS4xLjEjOTRjMmEzYjNhNWRlZDZiOWNmOWNlZjBjMjA3YmY4ODA0ZjNlYjI5NAAAUw5jb250cmFjdG1ldGF2MAAAAAAAAAAGY2xpdmVyAAAAAAAvMjUuMS4wI2EwNDhhNTdhNzU3NjI0NThiNDg3MDUyZTAwMjFlYTcwNGE5MjZiZWUA";
14
+ /**
15
+ * Pre-computed WASM hash (SHA-256)
16
+ * Use this when the WASM is already uploaded on-chain
17
+ */
18
+ export declare const WASM_HASH = "9410ac84392abff5c805df7636e4988a8f40b4f2e403f8f97a7116d3ff0c70f6";
19
+ /**
20
+ * Get the WASM bytecode as a Buffer
21
+ * Use this to upload the WASM to the network
22
+ */
23
+ export declare function getWasmBuffer(): Buffer;
24
+ export type OFTFeeStorage = {
25
+ tag: "DefaultFeeBps";
26
+ values: void;
27
+ } | {
28
+ tag: "FeeBps";
29
+ values: readonly [u32];
30
+ } | {
31
+ tag: "FeeDepositAddress";
32
+ values: void;
33
+ };
34
+ export declare const OFTFeeError: {
35
+ 3100: {
36
+ message: string;
37
+ };
38
+ 3101: {
39
+ message: string;
40
+ };
41
+ 3102: {
42
+ message: string;
43
+ };
44
+ };
45
+ export type OFTPausableStorage = {
46
+ tag: "Paused";
47
+ values: void;
48
+ };
49
+ export declare const OFTPausableError: {
50
+ 3110: {
51
+ message: string;
52
+ };
53
+ 3111: {
54
+ message: string;
55
+ };
56
+ };
57
+ export type Direction = {
58
+ tag: "Inbound";
59
+ values: void;
60
+ } | {
61
+ tag: "Outbound";
62
+ values: void;
63
+ };
64
+ export type Mode = {
65
+ tag: "Net";
66
+ values: void;
67
+ } | {
68
+ tag: "Gross";
69
+ values: void;
70
+ };
71
+ /**
72
+ * Configuration for rate limiting, used as input parameter.
73
+ */
74
+ export interface RateLimitConfig {
75
+ limit: i128;
76
+ mode: Mode;
77
+ window_seconds: u64;
78
+ }
79
+ export declare const RateLimitError: {
80
+ 3120: {
81
+ message: string;
82
+ };
83
+ 3121: {
84
+ message: string;
85
+ };
86
+ 3122: {
87
+ message: string;
88
+ };
89
+ 3123: {
90
+ message: string;
91
+ };
92
+ 3124: {
93
+ message: string;
94
+ };
95
+ };
96
+ /**
97
+ * The OFT operation type.
98
+ */
99
+ export type OftType = {
100
+ tag: "LockUnlock";
101
+ values: void;
102
+ } | {
103
+ tag: "MintBurn";
104
+ values: readonly [string];
105
+ };
106
+ export declare const EndpointError: {
107
+ /**
108
+ * Library is already registered with the endpoint
109
+ */
110
+ 1: {
111
+ message: string;
112
+ };
113
+ /**
114
+ * Compose message already exists for this GUID and index
115
+ */
116
+ 2: {
117
+ message: string;
118
+ };
119
+ /**
120
+ * Compose message not found for the given GUID and index
121
+ */
122
+ 3: {
123
+ message: string;
124
+ };
125
+ /**
126
+ * Default receive library is not set for the source endpoint
127
+ */
128
+ 4: {
129
+ message: string;
130
+ };
131
+ /**
132
+ * Default send library is not set for the destination endpoint
133
+ */
134
+ 5: {
135
+ message: string;
136
+ };
137
+ /**
138
+ * Supplied native token fee is less than required
139
+ */
140
+ 6: {
141
+ message: string;
142
+ };
143
+ /**
144
+ * Supplied ZRO token fee is less than required
145
+ */
146
+ 7: {
147
+ message: string;
148
+ };
149
+ /**
150
+ * Timeout expiry is invalid (already expired)
151
+ */
152
+ 8: {
153
+ message: string;
154
+ };
155
+ /**
156
+ * Amount is invalid (negative)
157
+ */
158
+ 9: {
159
+ message: string;
160
+ };
161
+ /**
162
+ * Compose index exceeds maximum allowed value
163
+ */
164
+ 10: {
165
+ message: string;
166
+ };
167
+ /**
168
+ * Nonce is invalid for the requested operation
169
+ */
170
+ 11: {
171
+ message: string;
172
+ };
173
+ /**
174
+ * Payload hash is invalid (empty hash not allowed)
175
+ */
176
+ 12: {
177
+ message: string;
178
+ };
179
+ /**
180
+ * Receive library is not valid for the receiver and source endpoint
181
+ */
182
+ 13: {
183
+ message: string;
184
+ };
185
+ /**
186
+ * Operation requires a non-default (custom) library
187
+ */
188
+ 14: {
189
+ message: string;
190
+ };
191
+ /**
192
+ * Library must support receiving messages
193
+ */
194
+ 15: {
195
+ message: string;
196
+ };
197
+ /**
198
+ * Library must be registered with the endpoint
199
+ */
200
+ 16: {
201
+ message: string;
202
+ };
203
+ /**
204
+ * Library must support sending messages
205
+ */
206
+ 17: {
207
+ message: string;
208
+ };
209
+ /**
210
+ * Messaging path cannot be initialized for the given origin
211
+ */
212
+ 18: {
213
+ message: string;
214
+ };
215
+ /**
216
+ * Message cannot be verified for the given origin
217
+ */
218
+ 19: {
219
+ message: string;
220
+ };
221
+ /**
222
+ * Payload hash does not match the stored hash
223
+ */
224
+ 20: {
225
+ message: string;
226
+ };
227
+ /**
228
+ * New value is the same as existing value
229
+ */
230
+ 21: {
231
+ message: string;
232
+ };
233
+ /**
234
+ * Caller is not authorized (not OApp or delegate)
235
+ */
236
+ 22: {
237
+ message: string;
238
+ };
239
+ /**
240
+ * Endpoint ID is not supported by the library
241
+ */
242
+ 23: {
243
+ message: string;
244
+ };
245
+ /**
246
+ * ZRO fee must be greater than zero when pay_in_zro is true
247
+ */
248
+ 24: {
249
+ message: string;
250
+ };
251
+ /**
252
+ * ZRO token address is not set
253
+ */
254
+ 25: {
255
+ message: string;
256
+ };
257
+ };
258
+ /**
259
+ * Parameters for sending a cross-chain message.
260
+ */
261
+ export interface MessagingParams {
262
+ /**
263
+ * Destination endpoint ID (chain identifier).
264
+ */
265
+ dst_eid: u32;
266
+ /**
267
+ * The message payload to send.
268
+ */
269
+ message: Buffer;
270
+ /**
271
+ * Encoded executor and DVN options.
272
+ */
273
+ options: Buffer;
274
+ /**
275
+ * Whether to pay fees in ZRO token instead of native token.
276
+ */
277
+ pay_in_zro: boolean;
278
+ /**
279
+ * Receiver address on the destination chain (32 bytes).
280
+ */
281
+ receiver: Buffer;
282
+ }
283
+ /**
284
+ * Source message information identifying where a cross-chain message came from.
285
+ */
286
+ export interface Origin {
287
+ /**
288
+ * Nonce for this pathway.
289
+ */
290
+ nonce: u64;
291
+ /**
292
+ * Sender address on the source chain (32 bytes).
293
+ */
294
+ sender: Buffer;
295
+ /**
296
+ * Source endpoint ID (chain identifier).
297
+ */
298
+ src_eid: u32;
299
+ }
300
+ /**
301
+ * Fee structure for cross-chain messaging.
302
+ */
303
+ export interface MessagingFee {
304
+ /**
305
+ * Fee paid in native token (XLM).
306
+ */
307
+ native_fee: i128;
308
+ /**
309
+ * Fee paid in ZRO token (LayerZero token).
310
+ */
311
+ zro_fee: i128;
312
+ }
313
+ /**
314
+ * Receipt returned after successfully sending a cross-chain message.
315
+ */
316
+ export interface MessagingReceipt {
317
+ /**
318
+ * The fees charged for sending the message.
319
+ */
320
+ fee: MessagingFee;
321
+ /**
322
+ * Globally unique identifier for the message.
323
+ */
324
+ guid: Buffer;
325
+ /**
326
+ * The outbound nonce for this pathway.
327
+ */
328
+ nonce: u64;
329
+ }
330
+ /**
331
+ * Type of message library indicating supported operations.
332
+ */
333
+ export type MessageLibType = {
334
+ tag: "Send";
335
+ values: void;
336
+ } | {
337
+ tag: "Receive";
338
+ values: void;
339
+ } | {
340
+ tag: "SendAndReceive";
341
+ values: void;
342
+ };
343
+ /**
344
+ * Version information for a message library.
345
+ *
346
+ * Note: `minor` and `endpoint_version` use `u32` instead of `u8` because Stellar does not
347
+ * support `u8` types in contract interface functions.
348
+ */
349
+ export interface MessageLibVersion {
350
+ /**
351
+ * Endpoint version (should not exceed u8::MAX = 255).
352
+ */
353
+ endpoint_version: u32;
354
+ /**
355
+ * Major version number.
356
+ */
357
+ major: u64;
358
+ /**
359
+ * Minor version number (should not exceed u8::MAX = 255).
360
+ */
361
+ minor: u32;
362
+ }
363
+ /**
364
+ * Timeout configuration for receive library transitions.
365
+ */
366
+ export interface Timeout {
367
+ /**
368
+ * Unix timestamp in seconds when the timeout expires.
369
+ */
370
+ expiry: u64;
371
+ /**
372
+ * The old library address that remains valid during the grace period.
373
+ */
374
+ lib: string;
375
+ }
376
+ /**
377
+ * Parameters for setting message library configuration.
378
+ */
379
+ export interface SetConfigParam {
380
+ /**
381
+ * XDR-encoded configuration data.
382
+ */
383
+ config: Buffer;
384
+ /**
385
+ * The type of configuration (e.g., executor, ULN).
386
+ */
387
+ config_type: u32;
388
+ /**
389
+ * The endpoint ID this config applies to.
390
+ */
391
+ eid: u32;
392
+ }
393
+ /**
394
+ * Resolved library information with default status.
395
+ */
396
+ export interface ResolvedLibrary {
397
+ /**
398
+ * Whether this is the default library (true) or OApp-specific (false).
399
+ */
400
+ is_default: boolean;
401
+ /**
402
+ * The resolved library address.
403
+ */
404
+ lib: string;
405
+ }
406
+ /**
407
+ * Outbound packet containing all information for cross-chain transmission.
408
+ */
409
+ export interface OutboundPacket {
410
+ /**
411
+ * Destination endpoint ID.
412
+ */
413
+ dst_eid: u32;
414
+ /**
415
+ * Globally unique identifier for this message.
416
+ */
417
+ guid: Buffer;
418
+ /**
419
+ * The message payload.
420
+ */
421
+ message: Buffer;
422
+ /**
423
+ * Outbound nonce for this pathway.
424
+ */
425
+ nonce: u64;
426
+ /**
427
+ * Receiver address on destination chain (32 bytes).
428
+ */
429
+ receiver: Buffer;
430
+ /**
431
+ * Sender address on source chain.
432
+ */
433
+ sender: string;
434
+ /**
435
+ * Source endpoint ID.
436
+ */
437
+ src_eid: u32;
438
+ }
439
+ /**
440
+ * A fee recipient with the amount to be paid.
441
+ */
442
+ export interface FeeRecipient {
443
+ /**
444
+ * Amount of fee to pay.
445
+ */
446
+ amount: i128;
447
+ /**
448
+ * The address to send the fee to.
449
+ */
450
+ to: string;
451
+ }
452
+ /**
453
+ * Result of send operation containing fees and encoded packet.
454
+ */
455
+ export interface FeesAndPacket {
456
+ /**
457
+ * The encoded packet ready for transmission.
458
+ */
459
+ encoded_packet: Buffer;
460
+ /**
461
+ * List of native token fee recipients (executor, DVNs, treasury).
462
+ */
463
+ native_fee_recipients: Array<FeeRecipient>;
464
+ /**
465
+ * List of ZRO token fee recipients (treasury).
466
+ */
467
+ zro_fee_recipients: Array<FeeRecipient>;
468
+ }
469
+ export type OAppCoreStorage = {
470
+ tag: "Endpoint";
471
+ values: void;
472
+ } | {
473
+ tag: "Peer";
474
+ values: readonly [u32];
475
+ };
476
+ export interface EnforcedOptionParam {
477
+ eid: u32;
478
+ msg_type: u32;
479
+ options: Option<Buffer>;
480
+ }
481
+ export type OAppOptionsType3Storage = {
482
+ tag: "EnforcedOptions";
483
+ values: readonly [u32, u32];
484
+ };
485
+ /**
486
+ * Represents a fee payer address with explicit authorization state.
487
+ *
488
+ * This enum forces callers of `__lz_send` to explicitly declare whether
489
+ * `require_auth()` has already been called for the fee payer address.
490
+ * This prevents the common mistake of forgetting to authorize the fee payer.
491
+ *
492
+ * # Variants
493
+ * - `Unverified` — Safe default. `__lz_send` will call `require_auth()` on the address.
494
+ * Use this when the caller has **not** already authorized the fee payer.
495
+ * - `Verified` — Caller asserts that `require_auth()` has already been called.
496
+ * Use this to avoid a duplicate `require_auth()` node in the Soroban auth tree
497
+ * (e.g., when the same address was already authorized as the message sender).
498
+ */
499
+ export type FeePayer = {
500
+ tag: "Unverified";
501
+ values: readonly [string];
502
+ } | {
503
+ tag: "Verified";
504
+ values: readonly [string];
505
+ };
506
+ /**
507
+ * OAppError: 2000-2099
508
+ */
509
+ export declare const OAppError: {
510
+ 2000: {
511
+ message: string;
512
+ };
513
+ 2001: {
514
+ message: string;
515
+ };
516
+ 2002: {
517
+ message: string;
518
+ };
519
+ 2003: {
520
+ message: string;
521
+ };
522
+ };
523
+ export type OFTStorage = {
524
+ tag: "DecimalsDiff";
525
+ values: void;
526
+ } | {
527
+ tag: "Token";
528
+ values: void;
529
+ } | {
530
+ tag: "MsgInspector";
531
+ values: void;
532
+ };
533
+ /**
534
+ * OFTError: 3000-3099
535
+ */
536
+ export declare const OFTError: {
537
+ 3000: {
538
+ message: string;
539
+ };
540
+ 3001: {
541
+ message: string;
542
+ };
543
+ 3002: {
544
+ message: string;
545
+ };
546
+ 3003: {
547
+ message: string;
548
+ };
549
+ 3004: {
550
+ message: string;
551
+ };
552
+ 3005: {
553
+ message: string;
554
+ };
555
+ };
556
+ /**
557
+ * Parameters for sending OFT tokens cross-chain
558
+ */
559
+ export interface SendParam {
560
+ /**
561
+ * The amount to send in local decimals
562
+ */
563
+ amount_ld: i128;
564
+ /**
565
+ * Compose message to execute on the destination (Optional)
566
+ */
567
+ compose_msg: Buffer;
568
+ /**
569
+ * The destination endpoint ID
570
+ */
571
+ dst_eid: u32;
572
+ /**
573
+ * Additional options for the LayerZero message (Optional)
574
+ */
575
+ extra_options: Buffer;
576
+ /**
577
+ * The minimum amount to receive in local decimals (slippage protection)
578
+ */
579
+ min_amount_ld: i128;
580
+ /**
581
+ * OFT command for custom behavior (Optional)
582
+ */
583
+ oft_cmd: Buffer;
584
+ /**
585
+ * The recipient address on the destination chain (32 bytes)
586
+ */
587
+ to: Buffer;
588
+ }
589
+ /**
590
+ * Transfer limits for OFT operations
591
+ */
592
+ export interface OFTLimit {
593
+ /**
594
+ * The maximum amount to send in local decimals
595
+ */
596
+ max_amount_ld: i128;
597
+ /**
598
+ * The minimum amount to send in local decimals
599
+ */
600
+ min_amount_ld: i128;
601
+ }
602
+ /**
603
+ * Receipt containing amounts sent and received in an OFT transfer
604
+ */
605
+ export interface OFTReceipt {
606
+ /**
607
+ * The amount received in local decimals on the remote
608
+ */
609
+ amount_received_ld: i128;
610
+ /**
611
+ * The amount sent in local decimals
612
+ */
613
+ amount_sent_ld: i128;
614
+ }
615
+ /**
616
+ * Details about fees charged in an OFT operation
617
+ */
618
+ export interface OFTFeeDetail {
619
+ /**
620
+ * The description of the fee
621
+ */
622
+ description: Buffer;
623
+ /**
624
+ * The amount of the fee in local decimals. Positive values represent fees charged,
625
+ * while negative values represent rewards given.
626
+ */
627
+ fee_amount_ld: i128;
628
+ }
629
+ /**
630
+ * BufferReaderError: 1000-1009
631
+ */
632
+ export declare const BufferReaderError: {
633
+ 1000: {
634
+ message: string;
635
+ };
636
+ 1001: {
637
+ message: string;
638
+ };
639
+ };
640
+ /**
641
+ * BufferWriterError: 1010-1019
642
+ */
643
+ export declare const BufferWriterError: {
644
+ 1010: {
645
+ message: string;
646
+ };
647
+ };
648
+ /**
649
+ * TtlConfigurableError: 1020-1029
650
+ */
651
+ export declare const TtlConfigurableError: {
652
+ 1020: {
653
+ message: string;
654
+ };
655
+ 1021: {
656
+ message: string;
657
+ };
658
+ 1022: {
659
+ message: string;
660
+ };
661
+ };
662
+ /**
663
+ * OwnableError: 1030-1039
664
+ */
665
+ export declare const OwnableError: {
666
+ 1030: {
667
+ message: string;
668
+ };
669
+ 1031: {
670
+ message: string;
671
+ };
672
+ 1032: {
673
+ message: string;
674
+ };
675
+ 1033: {
676
+ message: string;
677
+ };
678
+ 1034: {
679
+ message: string;
680
+ };
681
+ 1035: {
682
+ message: string;
683
+ };
684
+ 1036: {
685
+ message: string;
686
+ };
687
+ };
688
+ /**
689
+ * BytesExtError: 1040-1049
690
+ */
691
+ export declare const BytesExtError: {
692
+ 1040: {
693
+ message: string;
694
+ };
695
+ };
696
+ /**
697
+ * UpgradeableError: 1050-1059
698
+ */
699
+ export declare const UpgradeableError: {
700
+ 1050: {
701
+ message: string;
702
+ };
703
+ 1051: {
704
+ message: string;
705
+ };
706
+ };
707
+ /**
708
+ * MultiSigError: 1060-1069
709
+ */
710
+ export declare const MultiSigError: {
711
+ 1060: {
712
+ message: string;
713
+ };
714
+ 1061: {
715
+ message: string;
716
+ };
717
+ 1062: {
718
+ message: string;
719
+ };
720
+ 1063: {
721
+ message: string;
722
+ };
723
+ 1064: {
724
+ message: string;
725
+ };
726
+ 1065: {
727
+ message: string;
728
+ };
729
+ 1066: {
730
+ message: string;
731
+ };
732
+ 1067: {
733
+ message: string;
734
+ };
735
+ 1068: {
736
+ message: string;
737
+ };
738
+ };
739
+ /**
740
+ * AuthError: 1070-1079
741
+ */
742
+ export declare const AuthError: {
743
+ 1070: {
744
+ message: string;
745
+ };
746
+ };
747
+ /**
748
+ * RbacError: 1080-1089
749
+ */
750
+ export declare const RbacError: {
751
+ 1080: {
752
+ message: string;
753
+ };
754
+ 1081: {
755
+ message: string;
756
+ };
757
+ 1082: {
758
+ message: string;
759
+ };
760
+ 1083: {
761
+ message: string;
762
+ };
763
+ 1084: {
764
+ message: string;
765
+ };
766
+ 1085: {
767
+ message: string;
768
+ };
769
+ 1086: {
770
+ message: string;
771
+ };
772
+ };
773
+ export type MultiSigStorage = {
774
+ tag: "Signers";
775
+ values: void;
776
+ } | {
777
+ tag: "Threshold";
778
+ values: void;
779
+ };
780
+ export type OwnableStorage = {
781
+ tag: "Owner";
782
+ values: void;
783
+ } | {
784
+ tag: "PendingOwner";
785
+ values: void;
786
+ };
787
+ export type RbacStorage = {
788
+ tag: "ExistingRoles";
789
+ values: void;
790
+ } | {
791
+ tag: "RoleIndexToAccount";
792
+ values: readonly [string, u32];
793
+ } | {
794
+ tag: "RoleAccountToIndex";
795
+ values: readonly [string, string];
796
+ } | {
797
+ tag: "RoleAccountsCount";
798
+ values: readonly [string];
799
+ } | {
800
+ tag: "RoleAdmin";
801
+ values: readonly [string];
802
+ };
803
+ /**
804
+ * TTL configuration: threshold (when to extend) and extend_to (target TTL).
805
+ */
806
+ export interface TtlConfig {
807
+ /**
808
+ * Target TTL after extension (in ledgers).
809
+ */
810
+ extend_to: u32;
811
+ /**
812
+ * TTL threshold that triggers extension (in ledgers).
813
+ */
814
+ threshold: u32;
815
+ }
816
+ export type TtlConfigStorage = {
817
+ tag: "Frozen";
818
+ values: void;
819
+ } | {
820
+ tag: "Instance";
821
+ values: void;
822
+ } | {
823
+ tag: "Persistent";
824
+ values: void;
825
+ };
826
+ export type UpgradeableStorage = {
827
+ tag: "Migrating";
828
+ values: void;
829
+ };
830
+ export interface Client {
831
+ /**
832
+ * Construct and simulate a set_rate_limit transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.
833
+ * Sets or removes a rate limit for a specific direction and endpoint.
834
+ *
835
+ * # Arguments
836
+ * * `direction` - The direction (Inbound or Outbound)
837
+ * * `eid` - The endpoint ID
838
+ * * `config` - The rate limit configuration, or None to remove the rate limit
839
+ * * `operator` - The address that must have RATE_LIMITER_MANAGER_ROLE
840
+ */
841
+ set_rate_limit: ({ direction, eid, config, operator }: {
842
+ direction: Direction;
843
+ eid: u32;
844
+ config: Option<RateLimitConfig>;
845
+ operator: string;
846
+ }, txnOptions?: MethodOptions) => Promise<AssembledTransaction<null>>;
847
+ /**
848
+ * Construct and simulate a rate_limit_config transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.
849
+ * Returns the rate limit configuration for a direction and endpoint.
850
+ * Returns None if no rate limit is configured.
851
+ */
852
+ rate_limit_config: ({ direction, eid }: {
853
+ direction: Direction;
854
+ eid: u32;
855
+ }, txnOptions?: MethodOptions) => Promise<AssembledTransaction<Option<RateLimitConfig>>>;
856
+ /**
857
+ * Construct and simulate a rate_limit_in_flight transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.
858
+ * Returns the current in-flight amount for a direction and endpoint.
859
+ */
860
+ rate_limit_in_flight: ({ direction, eid }: {
861
+ direction: Direction;
862
+ eid: u32;
863
+ }, txnOptions?: MethodOptions) => Promise<AssembledTransaction<i128>>;
864
+ /**
865
+ * Construct and simulate a rate_limit_capacity transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.
866
+ * Returns the available capacity for a direction and endpoint.
867
+ * Returns i128::MAX if no rate limit is configured.
868
+ */
869
+ rate_limit_capacity: ({ direction, eid }: {
870
+ direction: Direction;
871
+ eid: u32;
872
+ }, txnOptions?: MethodOptions) => Promise<AssembledTransaction<i128>>;
873
+ /**
874
+ * Construct and simulate a set_default_fee_bps transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.
875
+ * Sets or removes the default fee rate in basis points.
876
+ *
877
+ * - `Some(n)`: sets the default fee to `n` basis points (must be >0 and <=10,000).
878
+ * - `Some(0)`: rejected — use `None` to remove the default fee instead.
879
+ * - `None`: removes the default fee (effective rate becomes 0).
880
+ * * `operator` - The address that must have FEE_CONFIG_MANAGER_ROLE
881
+ */
882
+ set_default_fee_bps: ({ default_fee_bps, operator }: {
883
+ default_fee_bps: Option<u32>;
884
+ operator: string;
885
+ }, txnOptions?: MethodOptions) => Promise<AssembledTransaction<null>>;
886
+ /**
887
+ * Construct and simulate a set_fee_bps transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.
888
+ * Sets or removes the fee rate for a specific destination endpoint.
889
+ *
890
+ * - `Some(0)`: explicitly sets zero fee for this destination, overriding the default fee.
891
+ * - `None`: removes the per-destination override; falls back to the default fee.
892
+ *
893
+ * # Arguments
894
+ * * `dst_eid` - The destination endpoint ID
895
+ * * `fee_bps` - The fee rate (0-10,000), or None to remove the fee configuration
896
+ * * `operator` - The address that must have FEE_CONFIG_MANAGER_ROLE
897
+ */
898
+ set_fee_bps: ({ dst_eid, fee_bps, operator }: {
899
+ dst_eid: u32;
900
+ fee_bps: Option<u32>;
901
+ operator: string;
902
+ }, txnOptions?: MethodOptions) => Promise<AssembledTransaction<null>>;
903
+ /**
904
+ * Construct and simulate a set_fee_deposit_address transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.
905
+ * Sets or removes the address where collected fees will be deposited.
906
+ *
907
+ * # Arguments
908
+ * * `fee_deposit_address` - The address to deposit fees to, or None to remove the fee deposit address
909
+ * * `operator` - The authorizer address
910
+ */
911
+ set_fee_deposit_address: ({ fee_deposit_address, operator }: {
912
+ fee_deposit_address: Option<string>;
913
+ operator: string;
914
+ }, txnOptions?: MethodOptions) => Promise<AssembledTransaction<null>>;
915
+ /**
916
+ * Construct and simulate a default_fee_bps transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.
917
+ * Returns the default fee rate in basis points, if set.
918
+ */
919
+ default_fee_bps: (options?: MethodOptions) => Promise<AssembledTransaction<Option<u32>>>;
920
+ /**
921
+ * Construct and simulate a fee_bps transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.
922
+ * Returns the fee rate for a specific destination, if set.
923
+ */
924
+ fee_bps: ({ dst_eid }: {
925
+ dst_eid: u32;
926
+ }, txnOptions?: MethodOptions) => Promise<AssembledTransaction<Option<u32>>>;
927
+ /**
928
+ * Construct and simulate a effective_fee_bps transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.
929
+ * Returns the effective fee rate for a destination (destination-specific or default).
930
+ */
931
+ effective_fee_bps: ({ dst_eid }: {
932
+ dst_eid: u32;
933
+ }, txnOptions?: MethodOptions) => Promise<AssembledTransaction<u32>>;
934
+ /**
935
+ * Construct and simulate a has_oft_fee transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.
936
+ * Returns true if the OFT has a fee rate greater than 0 for the specified destination
937
+ */
938
+ has_oft_fee: ({ dst_eid }: {
939
+ dst_eid: u32;
940
+ }, txnOptions?: MethodOptions) => Promise<AssembledTransaction<boolean>>;
941
+ /**
942
+ * Construct and simulate a fee_deposit_address transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.
943
+ * Returns the fee deposit address.
944
+ */
945
+ fee_deposit_address: (options?: MethodOptions) => Promise<AssembledTransaction<Option<string>>>;
946
+ /**
947
+ * Construct and simulate a pause transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.
948
+ * Pauses the OFT. When paused, the OFT will reject new send/receive/quote_send/quote_oft operations.
949
+ *
950
+ * # Arguments
951
+ * * `operator` - The address that must have PAUSER_ROLE
952
+ */
953
+ pause: ({ operator }: {
954
+ operator: string;
955
+ }, txnOptions?: MethodOptions) => Promise<AssembledTransaction<null>>;
956
+ /**
957
+ * Construct and simulate a unpause transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.
958
+ * Unpauses the OFT.
959
+ *
960
+ * # Arguments
961
+ * * `operator` - The address that must have UNPAUSER_ROLE
962
+ */
963
+ unpause: ({ operator }: {
964
+ operator: string;
965
+ }, txnOptions?: MethodOptions) => Promise<AssembledTransaction<null>>;
966
+ /**
967
+ * Construct and simulate a is_paused transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.
968
+ * Returns the paused state of the OFT.
969
+ */
970
+ is_paused: (options?: MethodOptions) => Promise<AssembledTransaction<boolean>>;
971
+ /**
972
+ * Construct and simulate a quote_oft transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.
973
+ */
974
+ quote_oft: ({ from, send_param }: {
975
+ from: string;
976
+ send_param: SendParam;
977
+ }, txnOptions?: MethodOptions) => Promise<AssembledTransaction<readonly [OFTLimit, Array<OFTFeeDetail>, OFTReceipt]>>;
978
+ /**
979
+ * Construct and simulate a token transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.
980
+ * Returns the address of the underlying SEP-41 token managed by this OFT.
981
+ */
982
+ token: (options?: MethodOptions) => Promise<AssembledTransaction<string>>;
983
+ /**
984
+ * Construct and simulate a oft_version transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.
985
+ * Returns the OFT messaging protocol version as `(major, minor)`.
986
+ *
987
+ * The version is used by off-chain tooling and peer contracts to verify wire-format
988
+ * compatibility.
989
+ */
990
+ oft_version: (options?: MethodOptions) => Promise<AssembledTransaction<readonly [u64, u64]>>;
991
+ /**
992
+ * Construct and simulate a shared_decimals transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.
993
+ * Returns the **shared decimals** — the common decimal precision used in cross-chain
994
+ * messages.
995
+ *
996
+ * Token amounts are normalized to this precision before encoding into LayerZero
997
+ * messages, ensuring consistent values regardless of each chain's native token
998
+ * decimals. For example, a token with 18 local decimals and 6 shared decimals has a
999
+ * conversion rate of 10^12.
1000
+ */
1001
+ shared_decimals: (options?: MethodOptions) => Promise<AssembledTransaction<u32>>;
1002
+ /**
1003
+ * Construct and simulate a decimal_conversion_rate transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.
1004
+ * Returns the **decimal conversion rate** (`10 ^ (local_decimals - shared_decimals)`).
1005
+ *
1006
+ * This multiplier converts between local-decimal amounts (used on-chain) and
1007
+ * shared-decimal amounts (used in cross-chain messages). Any sub-conversion-rate
1008
+ * remainder ("dust") is stripped before sending to avoid rounding discrepancies
1009
+ * across chains.
1010
+ */
1011
+ decimal_conversion_rate: (options?: MethodOptions) => Promise<AssembledTransaction<i128>>;
1012
+ /**
1013
+ * Construct and simulate a approval_required transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.
1014
+ * Indicates whether the caller must approve a token allowance before calling [`send`](OFTCore::send).
1015
+ *
1016
+ * - **`false`** (default) — no separate approval step is needed.
1017
+ * - **`true`** — the caller must grant a token allowance to this contract before
1018
+ * sending (e.g., via `token.approve(oft_address, amount, ...)`).
1019
+ *
1020
+ * Wallet and frontend integrators should check this to determine whether an approval
1021
+ * transaction must precede the send.
1022
+ */
1023
+ approval_required: (options?: MethodOptions) => Promise<AssembledTransaction<boolean>>;
1024
+ /**
1025
+ * Construct and simulate a msg_inspector transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.
1026
+ * Returns the current message inspector contract address, or `None` if unset.
1027
+ *
1028
+ * When set, the inspector's `inspect` method is invoked during both
1029
+ * [`quote_send`](OFTCore::quote_send) and [`send`](OFTCore::send) to validate the
1030
+ * outgoing message payload and options before they reach the LayerZero endpoint.
1031
+ */
1032
+ msg_inspector: (options?: MethodOptions) => Promise<AssembledTransaction<Option<string>>>;
1033
+ /**
1034
+ * Construct and simulate a set_msg_inspector transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.
1035
+ * Sets or removes the message inspector contract.
1036
+ *
1037
+ * The message inspector is an **optional** validation hook. When configured, every
1038
+ * outbound message (from both `send` and `quote_send`) is passed to the inspector
1039
+ * contract's `inspect(contract, message, options)` method. The inspector should
1040
+ * **panic** to reject invalid messages, acting as an on-chain policy gate.
1041
+ *
1042
+ * Pass `None` to remove the inspector and disable outbound validation.
1043
+ *
1044
+ * # Authorization
1045
+ * Requires the caller to be the authorizer.
1046
+ *
1047
+ * # Arguments
1048
+ * * `inspector` - Address of the inspector contract, or `None` to remove it
1049
+ * * `operator` - The authorizer address
1050
+ */
1051
+ set_msg_inspector: ({ inspector, operator }: {
1052
+ inspector: Option<string>;
1053
+ operator: string;
1054
+ }, txnOptions?: MethodOptions) => Promise<AssembledTransaction<null>>;
1055
+ /**
1056
+ * Construct and simulate a quote_send transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.
1057
+ * Quotes the **LayerZero messaging fee** required for a cross-chain send.
1058
+ *
1059
+ * Builds the outgoing message and options from `send_param`, then queries the
1060
+ * LayerZero endpoint for the corresponding fee. If a message inspector is set, it
1061
+ * will also validate the message at this stage.
1062
+ *
1063
+ * # Arguments
1064
+ * * `from` - The address that would initiate the transfer
1065
+ * * `send_param` - The proposed transfer parameters
1066
+ * * `pay_in_zro` - `true` to pay the messaging fee in the ZRO token; `false` to pay
1067
+ * in the chain's native token
1068
+ *
1069
+ * # Returns
1070
+ * A [`MessagingFee`](endpoint_v2::MessagingFee) containing the `native_fee` and
1071
+ * `zro_fee` required by the endpoint. Pass this value (or a superset) to
1072
+ * [`send`](OFTCore::send).
1073
+ */
1074
+ quote_send: ({ from, send_param, pay_in_zro }: {
1075
+ from: string;
1076
+ send_param: SendParam;
1077
+ pay_in_zro: boolean;
1078
+ }, txnOptions?: MethodOptions) => Promise<AssembledTransaction<MessagingFee>>;
1079
+ /**
1080
+ * Construct and simulate a send transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.
1081
+ * Executes a cross-chain token transfer via the LayerZero endpoint.
1082
+ *
1083
+ * Builds the OFT message and options, then sends the message through the LayerZero endpoint.
1084
+ *
1085
+ * # Arguments
1086
+ * * `from` - The token sender (must authorize the call)
1087
+ * * `send_param` - Transfer parameters including destination chain (`dst_eid`),
1088
+ * recipient (`to`), amount, slippage floor (`min_amount_ld`), extra options, and
1089
+ * an optional compose message
1090
+ * * `fee` - The messaging fee to pay (obtain from [`quote_send`](OFTCore::quote_send))
1091
+ * * `refund_address` - Address to receive any excess fee refund
1092
+ *
1093
+ * # Returns
1094
+ * * [`MessagingReceipt`](endpoint_v2::MessagingReceipt) — the LayerZero message GUID,
1095
+ * nonce, and fee actually consumed
1096
+ * * [`OFTReceipt`](crate::types::OFTReceipt) — `amount_sent_ld` (debited) and
1097
+ * `amount_received_ld` (credited on destination after dust removal / fees)
1098
+ */
1099
+ send: ({ from, send_param, fee, refund_address }: {
1100
+ from: string;
1101
+ send_param: SendParam;
1102
+ fee: MessagingFee;
1103
+ refund_address: string;
1104
+ }, txnOptions?: MethodOptions) => Promise<AssembledTransaction<readonly [MessagingReceipt, OFTReceipt]>>;
1105
+ /**
1106
+ * Construct and simulate a oft_type transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.
1107
+ * Returns the OFT type with its target address and configuration.
1108
+ */
1109
+ oft_type: (options?: MethodOptions) => Promise<AssembledTransaction<OftType>>;
1110
+ /**
1111
+ * Construct and simulate a oapp_version transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.
1112
+ * Retrieves the OApp version information.
1113
+ *
1114
+ * # Returns
1115
+ * A tuple containing:
1116
+ * - `sender_version`: The version of the OAppSender
1117
+ * - `receiver_version`: The version of the OAppReceiver
1118
+ */
1119
+ oapp_version: (options?: MethodOptions) => Promise<AssembledTransaction<readonly [u64, u64]>>;
1120
+ /**
1121
+ * Construct and simulate a endpoint transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.
1122
+ * Retrieves the LayerZero endpoint address associated with the OApp.
1123
+ *
1124
+ * # Returns
1125
+ * The LayerZero endpoint address
1126
+ */
1127
+ endpoint: (options?: MethodOptions) => Promise<AssembledTransaction<string>>;
1128
+ /**
1129
+ * Construct and simulate a peer transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.
1130
+ * Retrieves the peer (OApp) associated with a corresponding endpoint.
1131
+ *
1132
+ * # Arguments
1133
+ * * `eid` - The endpoint ID
1134
+ *
1135
+ * # Returns
1136
+ * The peer address (OApp instance) associated with the corresponding endpoint
1137
+ */
1138
+ peer: ({ eid }: {
1139
+ eid: u32;
1140
+ }, txnOptions?: MethodOptions) => Promise<AssembledTransaction<Option<Buffer>>>;
1141
+ /**
1142
+ * Construct and simulate a set_peer transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.
1143
+ * Sets or removes the peer address (OApp instance) for a corresponding endpoint.
1144
+ *
1145
+ * # Arguments
1146
+ * * `eid` - The endpoint ID
1147
+ * * `peer` - The address of the peer to be associated with the corresponding endpoint, or None to remove the peer
1148
+ * * `operator` - The authorizer address
1149
+ */
1150
+ set_peer: ({ eid, peer, operator }: {
1151
+ eid: u32;
1152
+ peer: Option<Buffer>;
1153
+ operator: string;
1154
+ }, txnOptions?: MethodOptions) => Promise<AssembledTransaction<null>>;
1155
+ /**
1156
+ * Construct and simulate a set_delegate transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.
1157
+ * Sets the delegate address for the OApp Core.
1158
+ *
1159
+ * # Arguments
1160
+ * * `delegate` - The address of the delegate to be set, or None to remove the delegate
1161
+ * * `operator` - The authorizer address
1162
+ */
1163
+ set_delegate: ({ delegate, operator }: {
1164
+ delegate: Option<string>;
1165
+ operator: string;
1166
+ }, txnOptions?: MethodOptions) => Promise<AssembledTransaction<null>>;
1167
+ /**
1168
+ * Construct and simulate a grant_role transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.
1169
+ * Grants a role to an account. Caller must be owner or have the role's admin role.
1170
+ *
1171
+ * # Arguments
1172
+ * * `account` - The account to grant the role to.
1173
+ * * `role` - The role to grant.
1174
+ * * `caller` - The account that is granting the role. Must be owner or have the role's admin role.
1175
+ */
1176
+ grant_role: ({ account, role, caller }: {
1177
+ account: string;
1178
+ role: string;
1179
+ caller: string;
1180
+ }, txnOptions?: MethodOptions) => Promise<AssembledTransaction<null>>;
1181
+ /**
1182
+ * Construct and simulate a revoke_role transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.
1183
+ * Revokes a role from an account. Caller must be owner or have the role's admin role.
1184
+ *
1185
+ * # Arguments
1186
+ * * `account` - The account to revoke the role from.
1187
+ * * `role` - The role to revoke.
1188
+ * * `caller` - The account that is revoking the role. Must be owner or have the role's admin role.
1189
+ */
1190
+ revoke_role: ({ account, role, caller }: {
1191
+ account: string;
1192
+ role: string;
1193
+ caller: string;
1194
+ }, txnOptions?: MethodOptions) => Promise<AssembledTransaction<null>>;
1195
+ /**
1196
+ * Construct and simulate a renounce_role transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.
1197
+ * Allows an account to renounce a role assigned to itself.
1198
+ * Users can only renounce roles for their own account.
1199
+ *
1200
+ * # Arguments
1201
+ * * `role` - The role to renounce.
1202
+ * * `caller` - The account that is renouncing the role. Must be the account itself.
1203
+ */
1204
+ renounce_role: ({ role, caller }: {
1205
+ role: string;
1206
+ caller: string;
1207
+ }, txnOptions?: MethodOptions) => Promise<AssembledTransaction<null>>;
1208
+ /**
1209
+ * Construct and simulate a set_role_admin transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.
1210
+ * Sets `admin_role` as the admin role of `role`. Caller must be the authorizer.
1211
+ *
1212
+ * # Arguments
1213
+ * * `role` - The role to set the admin for.
1214
+ * * `admin_role` - The admin role to set for the role.
1215
+ *
1216
+ * # Notes
1217
+ *
1218
+ * The admin role can be any `Symbol`, including one with no members. If the admin
1219
+ * role has no members, only the authorizer can grant/revoke the role.
1220
+ */
1221
+ set_role_admin: ({ role, admin_role }: {
1222
+ role: string;
1223
+ admin_role: string;
1224
+ }, txnOptions?: MethodOptions) => Promise<AssembledTransaction<null>>;
1225
+ /**
1226
+ * Construct and simulate a remove_role_admin transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.
1227
+ * Removes the admin role for a specified role. Caller must be the authorizer.
1228
+ *
1229
+ * # Arguments
1230
+ * * `role` - The role to remove the admin for.
1231
+ *
1232
+ * # Errors
1233
+ * * `RbacError::AdminRoleNotFound` - If no admin role is set for the role.
1234
+ */
1235
+ remove_role_admin: ({ role }: {
1236
+ role: string;
1237
+ }, txnOptions?: MethodOptions) => Promise<AssembledTransaction<null>>;
1238
+ /**
1239
+ * Construct and simulate a has_role transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.
1240
+ * Returns `Some(index)` if the account has the specified role, where `index`
1241
+ * is the index of the account in the role. Returns `None` if not.
1242
+ *
1243
+ * # Arguments
1244
+ * * `account` - The account to check the role for.
1245
+ * * `role` - The role to check the account for.
1246
+ */
1247
+ has_role: ({ account, role }: {
1248
+ account: string;
1249
+ role: string;
1250
+ }, txnOptions?: MethodOptions) => Promise<AssembledTransaction<Option<u32>>>;
1251
+ /**
1252
+ * Construct and simulate a get_role_admin transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.
1253
+ * Returns the admin role for a specific role, or None if not set.
1254
+ *
1255
+ * # Arguments
1256
+ * * `role` - The role to get the admin for.
1257
+ */
1258
+ get_role_admin: ({ role }: {
1259
+ role: string;
1260
+ }, txnOptions?: MethodOptions) => Promise<AssembledTransaction<Option<string>>>;
1261
+ /**
1262
+ * Construct and simulate a get_role_member_count transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.
1263
+ * Returns the number of accounts that have the specified role.
1264
+ *
1265
+ * # Arguments
1266
+ * * `role` - The role to get the member count for.
1267
+ */
1268
+ get_role_member_count: ({ role }: {
1269
+ role: string;
1270
+ }, txnOptions?: MethodOptions) => Promise<AssembledTransaction<u32>>;
1271
+ /**
1272
+ * Construct and simulate a get_role_member transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.
1273
+ * Returns the account at the specified index for a given role.
1274
+ *
1275
+ * # Arguments
1276
+ * * `role` - The role to get the member for.
1277
+ * * `index` - The index of the member to get.
1278
+ *
1279
+ * # Errors
1280
+ * * `RbacError::IndexOutOfBounds` if the index is out of bounds.
1281
+ */
1282
+ get_role_member: ({ role, index }: {
1283
+ role: string;
1284
+ index: u32;
1285
+ }, txnOptions?: MethodOptions) => Promise<AssembledTransaction<string>>;
1286
+ /**
1287
+ * Construct and simulate a get_existing_roles transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.
1288
+ * Returns all roles that currently have at least one member.
1289
+ * Defaults to empty vector if no roles exist.
1290
+ *
1291
+ * # Notes
1292
+ *
1293
+ * This function returns all roles that currently have at least one member.
1294
+ * The maximum number of roles is limited by [`MAX_ROLES`].
1295
+ */
1296
+ get_existing_roles: (options?: MethodOptions) => Promise<AssembledTransaction<Array<string>>>;
1297
+ /**
1298
+ * Construct and simulate a allow_initialize_path transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.
1299
+ * Checks if a messaging path can be initialized for the given origin.
1300
+ *
1301
+ * # Arguments
1302
+ * * `origin` - The origin of the message
1303
+ *
1304
+ * # Returns
1305
+ * True if the path can be initialized, false otherwise
1306
+ */
1307
+ allow_initialize_path: ({ origin }: {
1308
+ origin: Origin;
1309
+ }, txnOptions?: MethodOptions) => Promise<AssembledTransaction<boolean>>;
1310
+ /**
1311
+ * Construct and simulate a next_nonce transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.
1312
+ * Retrieves the next nonce for a given source endpoint and sender address.
1313
+ *
1314
+ * The path nonce starts from 1. If 0 is returned it means that there is NO nonce ordered enforcement.
1315
+ * This is required by the off-chain executor to determine if the OApp expects message execution to be ordered.
1316
+ * This is also enforced by the OApp.
1317
+ * By default this is NOT enabled, i.e. next_nonce is hardcoded to return 0.
1318
+ *
1319
+ * # Arguments
1320
+ * * `src_eid` - The source endpoint ID
1321
+ * * `sender` - The sender OApp address
1322
+ *
1323
+ * # Returns
1324
+ * The next nonce
1325
+ */
1326
+ next_nonce: ({ src_eid, sender }: {
1327
+ src_eid: u32;
1328
+ sender: Buffer;
1329
+ }, txnOptions?: MethodOptions) => Promise<AssembledTransaction<u64>>;
1330
+ /**
1331
+ * Construct and simulate a lz_receive transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.
1332
+ * Entry point for receiving messages or packets from the LayerZero endpoint.
1333
+ *
1334
+ * The default implementation calls `clear_payload_and_transfer` to validate the message
1335
+ * and clear it from the endpoint, then delegates to `__lz_receive` for application logic.
1336
+ *
1337
+ * # Arguments
1338
+ * * `executor` - The address of the executor for the received message
1339
+ * * `origin` - The origin information containing the source endpoint and sender address:
1340
+ * - `src_eid`: The source endpoint ID
1341
+ * - `sender`: The sender address on the source chain
1342
+ * - `nonce`: The nonce of the message
1343
+ * * `guid` - The unique identifier for the received LayerZero message
1344
+ * * `message` - The payload of the received message
1345
+ * * `extra_data` - Additional arbitrary data provided by the corresponding executor
1346
+ * * `value` - The native token value sent with the message
1347
+ */
1348
+ lz_receive: ({ executor, origin, guid, message, extra_data, value }: {
1349
+ executor: string;
1350
+ origin: Origin;
1351
+ guid: Buffer;
1352
+ message: Buffer;
1353
+ extra_data: Buffer;
1354
+ value: i128;
1355
+ }, txnOptions?: MethodOptions) => Promise<AssembledTransaction<null>>;
1356
+ /**
1357
+ * Construct and simulate a is_compose_msg_sender transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.
1358
+ * Indicates whether an address is an approved composeMsg sender to the Endpoint.
1359
+ *
1360
+ * Applications can optionally choose to implement separate composeMsg senders that are NOT the bridging layer.
1361
+ * The default sender IS the OAppReceiver implementer.
1362
+ *
1363
+ * # Arguments
1364
+ * * `origin` - The origin information containing the source endpoint and sender address
1365
+ * * `message` - The lzReceive payload
1366
+ * * `sender` - The sender address to check
1367
+ *
1368
+ * # Returns
1369
+ * True if the sender is a valid composeMsg sender, false otherwise
1370
+ */
1371
+ is_compose_msg_sender: ({ origin, message, sender }: {
1372
+ origin: Origin;
1373
+ message: Buffer;
1374
+ sender: string;
1375
+ }, txnOptions?: MethodOptions) => Promise<AssembledTransaction<boolean>>;
1376
+ /**
1377
+ * Construct and simulate a enforced_options transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.
1378
+ * Retrieves the enforced options for a given endpoint and message type.
1379
+ *
1380
+ * # Arguments
1381
+ * * `eid` - The endpoint ID
1382
+ * * `msg_type` - The OApp message type
1383
+ *
1384
+ * # Returns
1385
+ * The enforced options for the given endpoint and message type
1386
+ */
1387
+ enforced_options: ({ eid, msg_type }: {
1388
+ eid: u32;
1389
+ msg_type: u32;
1390
+ }, txnOptions?: MethodOptions) => Promise<AssembledTransaction<Option<Buffer>>>;
1391
+ /**
1392
+ * Construct and simulate a set_enforced_options transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.
1393
+ * Sets or removes the enforced options for specific endpoint and message type combinations.
1394
+ *
1395
+ * Only the `authorizer` of the OApp can call this function.
1396
+ * Provides a way for the OApp to enforce things like paying for PreCrime, AND/OR minimum dst lzReceive gas amounts etc.
1397
+ * These enforced options can vary as the potential options/execution on the remote may differ as per the msg_type.
1398
+ * e.g. Amount of lzReceive() gas necessary to deliver a lzCompose() message adds overhead you don't want to pay
1399
+ * if you are only making a standard LayerZero message ie. lzReceive() WITHOUT sendCompose().
1400
+ *
1401
+ * # Arguments
1402
+ * * `options` - A vector of EnforcedOptionParam structures specifying enforced options
1403
+ * * `operator` - The authorizer address
1404
+ */
1405
+ set_enforced_options: ({ options, operator }: {
1406
+ options: Array<EnforcedOptionParam>;
1407
+ operator: string;
1408
+ }, txnOptions?: MethodOptions) => Promise<AssembledTransaction<null>>;
1409
+ /**
1410
+ * Construct and simulate a combine_options transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.
1411
+ * Combines options for a given endpoint and message type.
1412
+ *
1413
+ * If there is an enforced lzReceive option:
1414
+ * - {gas_limit: 200k, value: 1 XLM} AND a caller supplies a lzReceive option: {gas_limit: 100k, value: 0.5 XLM}
1415
+ * - The resulting options will be {gas_limit: 300k, value: 1.5 XLM} when the message is executed on the remote lz_receive() function.
1416
+ * The presence of duplicated options is handled off-chain in the verifier/executor.
1417
+ *
1418
+ * # Arguments
1419
+ * * `eid` - The endpoint ID
1420
+ * * `msg_type` - The OApp message type
1421
+ * * `extra_options` - Additional options passed by the caller
1422
+ *
1423
+ * # Returns
1424
+ * The combination of caller specified options AND enforced options
1425
+ */
1426
+ combine_options: ({ eid, msg_type, extra_options }: {
1427
+ eid: u32;
1428
+ msg_type: u32;
1429
+ extra_options: Buffer;
1430
+ }, txnOptions?: MethodOptions) => Promise<AssembledTransaction<Buffer>>;
1431
+ /**
1432
+ * Construct and simulate a authorizer transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.
1433
+ */
1434
+ authorizer: (options?: MethodOptions) => Promise<AssembledTransaction<Option<string>>>;
1435
+ /**
1436
+ * Construct and simulate a owner transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.
1437
+ * Returns the current owner address, or None if no owner is set.
1438
+ */
1439
+ owner: (options?: MethodOptions) => Promise<AssembledTransaction<Option<string>>>;
1440
+ /**
1441
+ * Construct and simulate a pending_owner transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.
1442
+ * Returns the pending owner address for 2-step transfer, or None if no transfer is pending.
1443
+ */
1444
+ pending_owner: (options?: MethodOptions) => Promise<AssembledTransaction<Option<string>>>;
1445
+ /**
1446
+ * Construct and simulate a transfer_ownership transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.
1447
+ * Transfers ownership immediately to a new address.
1448
+ *
1449
+ * Use with caution - if you transfer to a wrong address, ownership is lost forever.
1450
+ * Consider using `begin_ownership_transfer` instead.
1451
+ *
1452
+ * # Panics
1453
+ * - `OwnerNotSet` if no owner is currently set
1454
+ * - `TransferInProgress` if a 2-step transfer is in progress
1455
+ */
1456
+ transfer_ownership: ({ new_owner }: {
1457
+ new_owner: string;
1458
+ }, txnOptions?: MethodOptions) => Promise<AssembledTransaction<null>>;
1459
+ /**
1460
+ * Construct and simulate a begin_ownership_transfer transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.
1461
+ * Begins an ownership transfer to a new address.
1462
+ *
1463
+ * The new owner must call `accept_ownership()` within `ttl` ledgers
1464
+ * to complete the transfer. The pending transfer will automatically expire after.
1465
+ *
1466
+ * # Arguments
1467
+ * - `new_owner` - The proposed new owner
1468
+ * - `ttl` - Number of ledgers the new owner has to accept.
1469
+ * Use `0` to cancel a pending transfer (new_owner must match pending).
1470
+ *
1471
+ * # Panics
1472
+ * - `OwnerNotSet` if no owner is currently set
1473
+ * - `NoPendingTransfer` when cancelling and no pending transfer exists
1474
+ * - `InvalidTtl` if ttl exceeds max TTL
1475
+ * - `InvalidPendingOwner` when cancelling with wrong new_owner address
1476
+ */
1477
+ begin_ownership_transfer: ({ new_owner, ttl }: {
1478
+ new_owner: string;
1479
+ ttl: u32;
1480
+ }, txnOptions?: MethodOptions) => Promise<AssembledTransaction<null>>;
1481
+ /**
1482
+ * Construct and simulate a accept_ownership transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.
1483
+ * Accepts a pending 2-step ownership transfer.
1484
+ *
1485
+ * Must be called by the pending owner before the TTL expires.
1486
+ *
1487
+ * # Panics
1488
+ * - `NoPendingTransfer` if there is no pending transfer (or it expired)
1489
+ */
1490
+ accept_ownership: (options?: MethodOptions) => Promise<AssembledTransaction<null>>;
1491
+ /**
1492
+ * Construct and simulate a renounce_ownership transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.
1493
+ * Permanently renounces ownership.
1494
+ *
1495
+ * # Panics
1496
+ * - `OwnerNotSet` if no owner is currently set
1497
+ * - `TransferInProgress` if a 2-step transfer is in progress (cancel it first)
1498
+ */
1499
+ renounce_ownership: (options?: MethodOptions) => Promise<AssembledTransaction<null>>;
1500
+ /**
1501
+ * Construct and simulate a extend_instance_ttl transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.
1502
+ * Extends the instance TTL.
1503
+ *
1504
+ * # Arguments
1505
+ *
1506
+ * * `threshold` - The threshold to extend the TTL (if current TTL is below this, extend).
1507
+ * * `extend_to` - The TTL to extend to.
1508
+ */
1509
+ extend_instance_ttl: ({ threshold, extend_to }: {
1510
+ threshold: u32;
1511
+ extend_to: u32;
1512
+ }, txnOptions?: MethodOptions) => Promise<AssembledTransaction<null>>;
1513
+ /**
1514
+ * Construct and simulate a set_ttl_configs transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.
1515
+ * Sets TTL configs for instance and persistent storage.
1516
+ *
1517
+ * - `None` values remove the corresponding config (disables auto-extension for that type)
1518
+ * - Validates that `threshold <= extend_to <= MAX_TTL`
1519
+ *
1520
+ * # Arguments
1521
+ * - `instance` - TTL config for instance storage
1522
+ * - `persistent` - TTL config for persistent storage
1523
+ *
1524
+ * # Panics
1525
+ * - `TtlConfigFrozen` if configs are frozen
1526
+ * - `InvalidTtlConfig` if validation fails
1527
+ */
1528
+ set_ttl_configs: ({ instance, persistent }: {
1529
+ instance: Option<TtlConfig>;
1530
+ persistent: Option<TtlConfig>;
1531
+ }, txnOptions?: MethodOptions) => Promise<AssembledTransaction<null>>;
1532
+ /**
1533
+ * Construct and simulate a ttl_configs transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.
1534
+ * Returns the current TTL configs as (instance_config, persistent_config).
1535
+ */
1536
+ ttl_configs: (options?: MethodOptions) => Promise<AssembledTransaction<readonly [Option<TtlConfig>, Option<TtlConfig>]>>;
1537
+ /**
1538
+ * Construct and simulate a freeze_ttl_configs transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.
1539
+ * Permanently freezes TTL configs, preventing any future modifications.
1540
+ *
1541
+ * This is irreversible and provides immutability guarantees to users.
1542
+ * Emits `TtlConfigsFrozen` event.
1543
+ *
1544
+ * # Panics
1545
+ * - `TtlConfigAlreadyFrozen` if already frozen
1546
+ */
1547
+ freeze_ttl_configs: (options?: MethodOptions) => Promise<AssembledTransaction<null>>;
1548
+ /**
1549
+ * Construct and simulate a is_ttl_configs_frozen transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.
1550
+ * Returns whether TTL configs are frozen.
1551
+ */
1552
+ is_ttl_configs_frozen: (options?: MethodOptions) => Promise<AssembledTransaction<boolean>>;
1553
+ }
1554
+ export declare class Client extends ContractClient {
1555
+ readonly options: ContractClientOptions;
1556
+ static deploy<T = Client>(
1557
+ /** Constructor/Initialization Args for the contract's `__constructor` method */
1558
+ { token, shared_decimals, oft_type, endpoint, delegate }: {
1559
+ token: string;
1560
+ shared_decimals: u32;
1561
+ oft_type: OftType;
1562
+ endpoint: string;
1563
+ delegate: string;
1564
+ },
1565
+ /** Options for initializing a Client as well as for calling a method, with extras specific to deploying. */
1566
+ options: MethodOptions & Omit<ContractClientOptions, "contractId"> & {
1567
+ /** The hash of the Wasm blob, which must already be installed on-chain. */
1568
+ wasmHash: Buffer | string;
1569
+ /** Salt used to generate the contract's ID. Passed through to {@link Operation.createCustomContract}. Default: random. */
1570
+ salt?: Buffer | Uint8Array;
1571
+ /** The format used to decode `wasmHash`, if it's provided as a string. */
1572
+ format?: "hex" | "base64";
1573
+ }): Promise<AssembledTransaction<T>>;
1574
+ constructor(options: ContractClientOptions);
1575
+ readonly fromJSON: {
1576
+ set_rate_limit: (json: string) => AssembledTransaction<null>;
1577
+ rate_limit_config: (json: string) => AssembledTransaction<Option<RateLimitConfig>>;
1578
+ rate_limit_in_flight: (json: string) => AssembledTransaction<bigint>;
1579
+ rate_limit_capacity: (json: string) => AssembledTransaction<bigint>;
1580
+ set_default_fee_bps: (json: string) => AssembledTransaction<null>;
1581
+ set_fee_bps: (json: string) => AssembledTransaction<null>;
1582
+ set_fee_deposit_address: (json: string) => AssembledTransaction<null>;
1583
+ default_fee_bps: (json: string) => AssembledTransaction<Option<number>>;
1584
+ fee_bps: (json: string) => AssembledTransaction<Option<number>>;
1585
+ effective_fee_bps: (json: string) => AssembledTransaction<number>;
1586
+ has_oft_fee: (json: string) => AssembledTransaction<boolean>;
1587
+ fee_deposit_address: (json: string) => AssembledTransaction<Option<string>>;
1588
+ pause: (json: string) => AssembledTransaction<null>;
1589
+ unpause: (json: string) => AssembledTransaction<null>;
1590
+ is_paused: (json: string) => AssembledTransaction<boolean>;
1591
+ quote_oft: (json: string) => AssembledTransaction<readonly [OFTLimit, OFTFeeDetail[], OFTReceipt]>;
1592
+ token: (json: string) => AssembledTransaction<string>;
1593
+ oft_version: (json: string) => AssembledTransaction<readonly [bigint, bigint]>;
1594
+ shared_decimals: (json: string) => AssembledTransaction<number>;
1595
+ decimal_conversion_rate: (json: string) => AssembledTransaction<bigint>;
1596
+ approval_required: (json: string) => AssembledTransaction<boolean>;
1597
+ msg_inspector: (json: string) => AssembledTransaction<Option<string>>;
1598
+ set_msg_inspector: (json: string) => AssembledTransaction<null>;
1599
+ quote_send: (json: string) => AssembledTransaction<MessagingFee>;
1600
+ send: (json: string) => AssembledTransaction<readonly [MessagingReceipt, OFTReceipt]>;
1601
+ oft_type: (json: string) => AssembledTransaction<OftType>;
1602
+ oapp_version: (json: string) => AssembledTransaction<readonly [bigint, bigint]>;
1603
+ endpoint: (json: string) => AssembledTransaction<string>;
1604
+ peer: (json: string) => AssembledTransaction<Option<Buffer<ArrayBufferLike>>>;
1605
+ set_peer: (json: string) => AssembledTransaction<null>;
1606
+ set_delegate: (json: string) => AssembledTransaction<null>;
1607
+ grant_role: (json: string) => AssembledTransaction<null>;
1608
+ revoke_role: (json: string) => AssembledTransaction<null>;
1609
+ renounce_role: (json: string) => AssembledTransaction<null>;
1610
+ set_role_admin: (json: string) => AssembledTransaction<null>;
1611
+ remove_role_admin: (json: string) => AssembledTransaction<null>;
1612
+ has_role: (json: string) => AssembledTransaction<Option<number>>;
1613
+ get_role_admin: (json: string) => AssembledTransaction<Option<string>>;
1614
+ get_role_member_count: (json: string) => AssembledTransaction<number>;
1615
+ get_role_member: (json: string) => AssembledTransaction<string>;
1616
+ get_existing_roles: (json: string) => AssembledTransaction<string[]>;
1617
+ allow_initialize_path: (json: string) => AssembledTransaction<boolean>;
1618
+ next_nonce: (json: string) => AssembledTransaction<bigint>;
1619
+ lz_receive: (json: string) => AssembledTransaction<null>;
1620
+ is_compose_msg_sender: (json: string) => AssembledTransaction<boolean>;
1621
+ enforced_options: (json: string) => AssembledTransaction<Option<Buffer<ArrayBufferLike>>>;
1622
+ set_enforced_options: (json: string) => AssembledTransaction<null>;
1623
+ combine_options: (json: string) => AssembledTransaction<Buffer<ArrayBufferLike>>;
1624
+ authorizer: (json: string) => AssembledTransaction<Option<string>>;
1625
+ owner: (json: string) => AssembledTransaction<Option<string>>;
1626
+ pending_owner: (json: string) => AssembledTransaction<Option<string>>;
1627
+ transfer_ownership: (json: string) => AssembledTransaction<null>;
1628
+ begin_ownership_transfer: (json: string) => AssembledTransaction<null>;
1629
+ accept_ownership: (json: string) => AssembledTransaction<null>;
1630
+ renounce_ownership: (json: string) => AssembledTransaction<null>;
1631
+ extend_instance_ttl: (json: string) => AssembledTransaction<null>;
1632
+ set_ttl_configs: (json: string) => AssembledTransaction<null>;
1633
+ ttl_configs: (json: string) => AssembledTransaction<readonly [Option<TtlConfig>, Option<TtlConfig>]>;
1634
+ freeze_ttl_configs: (json: string) => AssembledTransaction<null>;
1635
+ is_ttl_configs_frozen: (json: string) => AssembledTransaction<boolean>;
1636
+ };
1637
+ }
1638
+ //# sourceMappingURL=oft.d.ts.map