diff --git a/packages/extension-chains/src/alexander.ts b/packages/extension-chains/src/alexander.ts index 47c6cecc..def2542a 100644 --- a/packages/extension-chains/src/alexander.ts +++ b/packages/extension-chains/src/alexander.ts @@ -7,8 +7,10 @@ export default { chain: 'Alexander', genesisHash: '0xdcd1346701ca8396496e52aa2785b1748deb6db09551b72159dcb3e08991025b', + specVersion: 112, ss58Format: 42, tokenDecimals: 15, tokenSymbol: 'DOT', + types: {}, metaCalls: 'bWV0YQNEGHN5c3RlbQAAAAAQYXVyYQAAAAAkdGltZXN0YW1wAAABBAxzZXQEDG5vdzxDb21wYWN0PE1vbWVudD4gWCBTZXQgdGhlIGN1cnJlbnQgdGltZS4AdQEgVGhpcyBjYWxsIHNob3VsZCBiZSBpbnZva2VkIGV4YWN0bHkgb25jZSBwZXIgYmxvY2suIEl0IHdpbGwgcGFuaWMgYXQgdGhlIGZpbmFsaXphdGlvbiBwaGFzZSy8IGlmIHRoaXMgY2FsbCBoYXNuJ3QgYmVlbiBpbnZva2VkIGJ5IHRoYXQgdGltZS4AjQEgVGhlIHRpbWVzdGFtcCBzaG91bGQgYmUgZ3JlYXRlciB0aGFuIHRoZSBwcmV2aW91cyBvbmUgYnkgdGhlIGFtb3VudCBzcGVjaWZpZWQgYnkgYG1pbmltdW1fcGVyaW9kYC4EINggVGhlIGRpc3BhdGNoIG9yaWdpbiBmb3IgdGhpcyBjYWxsIG11c3QgYmUgYEluaGVyZW50YC4AJGNvbnNlbnN1cwAAARxIcmVwb3J0X21pc2JlaGF2aW9yBBxfcmVwb3J0FEJ5dGVzBGQgUmVwb3J0IHNvbWUgbWlzYmVoYXZpb3IuMG5vdGVfb2ZmbGluZQQcb2ZmbGluZVRJbmhlcmVudE9mZmxpbmVSZXBvcnQEUQEgTm90ZSB0aGF0IHRoZSBwcmV2aW91cyBibG9jaydzIHZhbGlkYXRvciBtaXNzZWQgaXRzIG9wcG9ydHVuaXR5IHRvIHByb3Bvc2UgYSBibG9jay4YcmVtYXJrBBxfcmVtYXJrFEJ5dGVzBGwgTWFrZSBzb21lIG9uLWNoYWluIHJlbWFyay44c2V0X2hlYXBfcGFnZXMEFHBhZ2VzDHU2NAT8IFNldCB0aGUgbnVtYmVyIG9mIHBhZ2VzIGluIHRoZSBXZWJBc3NlbWJseSBlbnZpcm9ubWVudCdzIGhlYXAuIHNldF9jb2RlBAxuZXcUQnl0ZXMESCBTZXQgdGhlIG5ldyBjb2RlLixzZXRfc3RvcmFnZQQUaXRlbXM0VmVjPEtleVZhbHVlPgRsIFNldCBzb21lIGl0ZW1zIG9mIHN0b3JhZ2UuMGtpbGxfc3RvcmFnZQQQa2V5cyBWZWM8S2V5PgR4IEtpbGwgc29tZSBpdGVtcyBmcm9tIHN0b3JhZ2UuABxpbmRpY2VzAAABAAAgYmFsYW5jZXMAAAEIIHRyYW5zZmVyCBBkZXN0HEFkZHJlc3MUdmFsdWVAQ29tcGFjdDxCYWxhbmNlPiDYIFRyYW5zZmVyIHNvbWUgbGlxdWlkIGZyZWUgYmFsYW5jZSB0byBhbm90aGVyIGFjY291bnQuAAkBIGB0cmFuc2ZlcmAgd2lsbCBzZXQgdGhlIGBGcmVlQmFsYW5jZWAgb2YgdGhlIHNlbmRlciBhbmQgcmVjZWl2ZXIuIQEgSXQgd2lsbCBkZWNyZWFzZSB0aGUgdG90YWwgaXNzdWFuY2Ugb2YgdGhlIHN5c3RlbSBieSB0aGUgYFRyYW5zZmVyRmVlYC4VASBJZiB0aGUgc2VuZGVyJ3MgYWNjb3VudCBpcyBiZWxvdyB0aGUgZXhpc3RlbnRpYWwgZGVwb3NpdCBhcyBhIHJlc3VsdLQgb2YgdGhlIHRyYW5zZmVyLCB0aGUgYWNjb3VudCB3aWxsIGJlIHJlYXBlZC4AGQEgVGhlIGRpc3BhdGNoIG9yaWdpbiBmb3IgdGhpcyBjYWxsIG11c3QgYmUgYFNpZ25lZGAgYnkgdGhlIHRyYW5zYWN0b3IuLHNldF9iYWxhbmNlDAx3aG8cQWRkcmVzcxBmcmVlQENvbXBhY3Q8QmFsYW5jZT4gcmVzZXJ2ZWRAQ29tcGFjdDxCYWxhbmNlPiCUIFNldCB0aGUgYmFsYW5jZXMgb2YgYSBnaXZlbiBhY2NvdW50LgABASBUaGlzIHdpbGwgYWx0ZXIgYEZyZWVCYWxhbmNlYCBhbmQgYFJlc2VydmVkQmFsYW5jZWAgaW4gc3RvcmFnZS4ZASBJZiB0aGUgbmV3IGZyZWUgb3IgcmVzZXJ2ZWQgYmFsYW5jZSBpcyBiZWxvdyB0aGUgZXhpc3RlbnRpYWwgZGVwb3NpdCwlASBpdCB3aWxsIGFsc28gZGVjcmVhc2UgdGhlIHRvdGFsIGlzc3VhbmNlIG9mIHRoZSBzeXN0ZW0gKGBUb3RhbElzc3VhbmNlYCnYIGFuZCByZXNldCB0aGUgYWNjb3VudCBub25jZSAoYHN5c3RlbTo6QWNjb3VudE5vbmNlYCkuALQgVGhlIGRpc3BhdGNoIG9yaWdpbiBmb3IgdGhpcyBjYWxsIGlzIGByb290YC4AHHNlc3Npb24AAAEMHHNldF9rZXkEDGtleShTZXNzaW9uS2V5CGEBIFNldHMgdGhlIHNlc3Npb24ga2V5IG9mIGBfdmFsaWRhdG9yYCB0byBgX2tleWAuIFRoaXMgZG9lc24ndCB0YWtlIGVmZmVjdCB1bnRpbCB0aGUgbmV4dCQgc2Vzc2lvbi4oc2V0X2xlbmd0aAQMbmV3UENvbXBhY3Q8QmxvY2tOdW1iZXI+BG0BIFNldCBhIG5ldyBzZXNzaW9uIGxlbmd0aC4gV29uJ3Qga2ljayBpbiB1bnRpbCB0aGUgbmV4dCBzZXNzaW9uIGNoYW5nZSAoYXQgY3VycmVudCBsZW5ndGgpLkRmb3JjZV9uZXdfc2Vzc2lvbgQ0YXBwbHlfcmV3YXJkcxBib29sBFggRm9yY2VzIGEgbmV3IHNlc3Npb24uABxzdGFraW5nAAABPBBib25kDChjb250cm9sbGVyHEFkZHJlc3MUdmFsdWVIQ29tcGFjdDxCYWxhbmNlT2Y+FHBheWVlRFJld2FyZERlc3RpbmF0aW9uEIEBIFRha2UgdGhlIG9yaWdpbiBhY2NvdW50IGFzIGEgc3Rhc2ggYW5kIGxvY2sgdXAgYHZhbHVlYCBvZiBpdHMgYmFsYW5jZS4gYGNvbnRyb2xsZXJgIHdpbGwgYmUgdGhlaCBhY2NvdW50IHRoYXQgY29udHJvbHMgaXQuACUBIFRoZSBkaXNwYXRjaCBvcmlnaW4gZm9yIHRoaXMgY2FsbCBtdXN0IGJlIF9TaWduZWRfIGJ5IHRoZSBzdGFzaCBhY2NvdW50Lihib25kX2V4dHJhBDhtYXhfYWRkaXRpb25hbEhDb21wYWN0PEJhbGFuY2VPZj4YdQEgQWRkIHNvbWUgZXh0cmEgYW1vdW50IHRoYXQgaGF2ZSBhcHBlYXJlZCBpbiB0aGUgc3Rhc2ggYGZyZWVfYmFsYW5jZWAgaW50byB0aGUgYmFsYW5jZSB1cCBmb3IkIHN0YWtpbmcuAFEBIFVzZSB0aGlzIGlmIHRoZXJlIGFyZSBhZGRpdGlvbmFsIGZ1bmRzIGluIHlvdXIgc3Rhc2ggYWNjb3VudCB0aGF0IHlvdSB3aXNoIHRvIGJvbmQuAFUBIFRoZSBkaXNwYXRjaCBvcmlnaW4gZm9yIHRoaXMgY2FsbCBtdXN0IGJlIF9TaWduZWRfIGJ5IHRoZSBzdGFzaCwgbm90IHRoZSBjb250cm9sbGVyLhh1bmJvbmQEFHZhbHVlSENvbXBhY3Q8QmFsYW5jZU9mPihVASBTY2hlZHVsZSBhIHBvcnRpb24gb2YgdGhlIHN0YXNoIHRvIGJlIHVubG9ja2VkIHJlYWR5IGZvciB0cmFuc2ZlciBvdXQgYWZ0ZXIgdGhlIGJvbmQBASBwZXJpb2QgZW5kcy4gSWYgdGhpcyBsZWF2ZXMgYW4gYW1vdW50IGFjdGl2ZWx5IGJvbmRlZCBsZXNzIHRoYW41ASBUOjpDdXJyZW5jeTo6ZXhpc3RlbnRpYWxfZGVwb3NpdCgpLCB0aGVuIGl0IGlzIGluY3JlYXNlZCB0byB0aGUgZnVsbCBhbW91bnQuAEkBIE9uY2UgdGhlIHVubG9jayBwZXJpb2QgaXMgZG9uZSwgeW91IGNhbiBjYWxsIGB3aXRoZHJhd191bmJvbmRlZGAgdG8gYWN0dWFsbHkgbW92ZcAgdGhlIGZ1bmRzIG91dCBvZiBtYW5hZ2VtZW50IHJlYWR5IGZvciB0cmFuc2Zlci4AVQEgVGhlIGRpc3BhdGNoIG9yaWdpbiBmb3IgdGhpcyBjYWxsIG11c3QgYmUgX1NpZ25lZF8gYnkgdGhlIGNvbnRyb2xsZXIsIG5vdCB0aGUgc3Rhc2guAJggU2VlIGFsc28gW2BDYWxsOjp3aXRoZHJhd191bmJvbmRlZGBdLkR3aXRoZHJhd191bmJvbmRlZAAgLQEgUmVtb3ZlIGFueSB1bmxvY2tlZCBjaHVua3MgZnJvbSB0aGUgYHVubG9ja2luZ2AgcXVldWUgZnJvbSBvdXIgbWFuYWdlbWVudC4ANQEgVGhpcyBlc3NlbnRpYWxseSBmcmVlcyB1cCB0aGF0IGJhbGFuY2UgdG8gYmUgdXNlZCBieSB0aGUgc3Rhc2ggYWNjb3VudCB0byBkb0wgd2hhdGV2ZXIgaXQgd2FudHMuAFUBIFRoZSBkaXNwYXRjaCBvcmlnaW4gZm9yIHRoaXMgY2FsbCBtdXN0IGJlIF9TaWduZWRfIGJ5IHRoZSBjb250cm9sbGVyLCBub3QgdGhlIHN0YXNoLgBsIFNlZSBhbHNvIFtgQ2FsbDo6dW5ib25kYF0uIHZhbGlkYXRlBBRwcmVmczhWYWxpZGF0b3JQcmVmcxToIERlY2xhcmUgdGhlIGRlc2lyZSB0byB2YWxpZGF0ZSBmb3IgdGhlIG9yaWdpbiBjb250cm9sbGVyLgDcIEVmZmVjdHMgd2lsbCBiZSBmZWx0IGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIG5leHQgZXJhLgBVASBUaGUgZGlzcGF0Y2ggb3JpZ2luIGZvciB0aGlzIGNhbGwgbXVzdCBiZSBfU2lnbmVkXyBieSB0aGUgY29udHJvbGxlciwgbm90IHRoZSBzdGFzaC4gbm9taW5hdGUEHHRhcmdldHMwVmVjPEFkZHJlc3M+FBEBIERlY2xhcmUgdGhlIGRlc2lyZSB0byBub21pbmF0ZSBgdGFyZ2V0c2AgZm9yIHRoZSBvcmlnaW4gY29udHJvbGxlci4A3CBFZmZlY3RzIHdpbGwgYmUgZmVsdCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBuZXh0IGVyYS4AVQEgVGhlIGRpc3BhdGNoIG9yaWdpbiBmb3IgdGhpcyBjYWxsIG11c3QgYmUgX1NpZ25lZF8gYnkgdGhlIGNvbnRyb2xsZXIsIG5vdCB0aGUgc3Rhc2guFGNoaWxsABTIIERlY2xhcmUgbm8gZGVzaXJlIHRvIGVpdGhlciB2YWxpZGF0ZSBvciBub21pbmF0ZS4A3CBFZmZlY3RzIHdpbGwgYmUgZmVsdCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBuZXh0IGVyYS4AVQEgVGhlIGRpc3BhdGNoIG9yaWdpbiBmb3IgdGhpcyBjYWxsIG11c3QgYmUgX1NpZ25lZF8gYnkgdGhlIGNvbnRyb2xsZXIsIG5vdCB0aGUgc3Rhc2guJHNldF9wYXllZQQUcGF5ZWVEUmV3YXJkRGVzdGluYXRpb24UuCAoUmUtKXNldCB0aGUgcGF5bWVudCB0YXJnZXQgZm9yIGEgY29udHJvbGxlci4A3CBFZmZlY3RzIHdpbGwgYmUgZmVsdCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBuZXh0IGVyYS4AVQEgVGhlIGRpc3BhdGNoIG9yaWdpbiBmb3IgdGhpcyBjYWxsIG11c3QgYmUgX1NpZ25lZF8gYnkgdGhlIGNvbnRyb2xsZXIsIG5vdCB0aGUgc3Rhc2guOHNldF9jb250cm9sbGVyBChjb250cm9sbGVyHEFkZHJlc3MUuCAoUmUtKXNldCB0aGUgcGF5bWVudCB0YXJnZXQgZm9yIGEgY29udHJvbGxlci4A3CBFZmZlY3RzIHdpbGwgYmUgZmVsdCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBuZXh0IGVyYS4AVQEgVGhlIGRpc3BhdGNoIG9yaWdpbiBmb3IgdGhpcyBjYWxsIG11c3QgYmUgX1NpZ25lZF8gYnkgdGhlIHN0YXNoLCBub3QgdGhlIGNvbnRyb2xsZXIuUHNldF9zZXNzaW9uc19wZXJfZXJhBAxuZXdQQ29tcGFjdDxCbG9ja051bWJlcj4EmCBTZXQgdGhlIG51bWJlciBvZiBzZXNzaW9ucyBpbiBhbiBlcmEuUHNldF9ib25kaW5nX2R1cmF0aW9uBAxuZXdQQ29tcGFjdDxCbG9ja051bWJlcj4EsCBUaGUgbGVuZ3RoIG9mIHRoZSBib25kaW5nIGR1cmF0aW9uIGluIGVyYXMuTHNldF92YWxpZGF0b3JfY291bnQEDG5ldzBDb21wYWN0PHUzMj4EgCBUaGUgaWRlYWwgbnVtYmVyIG9mIHZhbGlkYXRvcnMuNGZvcmNlX25ld19lcmEENGFwcGx5X3Jld2FyZHMQYm9vbAg9ASBGb3JjZSB0aGVyZSB0byBiZSBhIG5ldyBlcmEuIFRoaXMgYWxzbyBmb3JjZXMgYSBuZXcgc2Vzc2lvbiBpbW1lZGlhdGVseSBhZnRlci4lASBgYXBwbHlfcmV3YXJkc2Agc2hvdWxkIGJlIHRydWUgZm9yIHZhbGlkYXRvcnMgdG8gZ2V0IHRoZSBzZXNzaW9uIHJld2FyZC5cc2V0X29mZmxpbmVfc2xhc2hfZ3JhY2UEDG5ldzBDb21wYWN0PHUzMj4EkCBTZXQgdGhlIG9mZmxpbmUgc2xhc2ggZ3JhY2UgcGVyaW9kLkRzZXRfaW52dWxuZXJhYmxlcwQodmFsaWRhdG9yczhWZWM8QWNjb3VudElkPgTMIFNldCB0aGUgdmFsaWRhdG9ycyB3aG8gY2Fubm90IGJlIHNsYXNoZWQgKGlmIGFueSkuACRkZW1vY3JhY3kAAAEwHHByb3Bvc2UIIHByb3Bvc2FsIFByb3Bvc2FsFHZhbHVlSENvbXBhY3Q8QmFsYW5jZU9mPgSgIFByb3Bvc2UgYSBzZW5zaXRpdmUgYWN0aW9uIHRvIGJlIHRha2VuLhhzZWNvbmQEIHByb3Bvc2FsSENvbXBhY3Q8UHJvcEluZGV4PgSgIFByb3Bvc2UgYSBzZW5zaXRpdmUgYWN0aW9uIHRvIGJlIHRha2VuLhB2b3RlCCRyZWZfaW5kZXhgQ29tcGFjdDxSZWZlcmVuZHVtSW5kZXg+EHZvdGUQVm90ZQg1ASBWb3RlIGluIGEgcmVmZXJlbmR1bS4gSWYgYHZvdGUuaXNfYXllKClgLCB0aGUgdm90ZSBpcyB0byBlbmFjdCB0aGUgcHJvcG9zYWw7vCBvdGhlcndpc2UgaXQgaXMgYSB2b3RlIHRvIGtlZXAgdGhlIHN0YXR1cyBxdW8uKHByb3h5X3ZvdGUIJHJlZl9pbmRleGBDb21wYWN0PFJlZmVyZW5kdW1JbmRleD4Qdm90ZRBWb3RlCIkBIFZvdGUgaW4gYSByZWZlcmVuZHVtIG9uIGJlaGFsZiBvZiBhIHN0YXNoLiBJZiBgdm90ZS5pc19heWUoKWAsIHRoZSB2b3RlIGlzIHRvIGVuYWN0IHRoZSBwcm9wb3NhbDu8IG90aGVyd2lzZSBpdCBpcyBhIHZvdGUgdG8ga2VlcCB0aGUgc3RhdHVzIHF1by5Ac3RhcnRfcmVmZXJlbmR1bQwgcHJvcG9zYWwgUHJvcG9zYWwkdGhyZXNob2xkNFZvdGVUaHJlc2hvbGQUZGVsYXksQmxvY2tOdW1iZXIEUCBTdGFydCBhIHJlZmVyZW5kdW0uRGNhbmNlbF9yZWZlcmVuZHVtBCRyZWZfaW5kZXhgQ29tcGFjdDxSZWZlcmVuZHVtSW5kZXg+BFQgUmVtb3ZlIGEgcmVmZXJlbmR1bS40Y2FuY2VsX3F1ZXVlZAgQd2hlblBDb21wYWN0PEJsb2NrTnVtYmVyPhR3aGljaDBDb21wYWN0PHUzMj4EoCBDYW5jZWwgYSBwcm9wb3NhbCBxdWV1ZWQgZm9yIGVuYWN0bWVudC4kc2V0X3Byb3h5BBRwcm94eSRBY2NvdW50SWQEmCBTcGVjaWZ5IGEgcHJveHkuIENhbGxlZCBieSB0aGUgc3Rhc2guMHJlc2lnbl9wcm94eQAEmCBDbGVhciB0aGUgcHJveHkuIENhbGxlZCBieSB0aGUgcHJveHkuMHJlbW92ZV9wcm94eQQUcHJveHkkQWNjb3VudElkBJggQ2xlYXIgdGhlIHByb3h5LiBDYWxsZWQgYnkgdGhlIHN0YXNoLiBkZWxlZ2F0ZQgIdG8kQWNjb3VudElkMGxvY2tfcGVyaW9kcyxMb2NrUGVyaW9kcwQ8IERlbGVnYXRlIHZvdGUuKHVuZGVsZWdhdGUABEQgVW5kZWxlZ2F0ZSB2b3RlLgAcZ3JhbmRwYQAAAQRIcmVwb3J0X21pc2JlaGF2aW9yBBxfcmVwb3J0FEJ5dGVzBGQgUmVwb3J0IHNvbWUgbWlzYmVoYXZpb3IuADxjdXJhdGVkX2dyYW5kcGEAAAEEKHNldF92b3RlcnMEGHZvdGVyc1RWZWM8KFNlc3Npb25LZXksdTY0KT4EfCBDaGFuZ2VzIHRoZSBHUkFORFBBIHZvdGVyIHNldC4AHGNvdW5jaWwAAAEoNHNldF9hcHByb3ZhbHMIFHZvdGVzJFZlYzxib29sPhRpbmRleEhDb21wYWN0PFZvdGVJbmRleD4IYQEgU2V0IGNhbmRpZGF0ZSBhcHByb3ZhbHMuIEFwcHJvdmFsIHNsb3RzIHN0YXkgdmFsaWQgYXMgbG9uZyBhcyBjYW5kaWRhdGVzIGluIHRob3NlIHNsb3RzQCBhcmUgcmVnaXN0ZXJlZC5McHJveHlfc2V0X2FwcHJvdmFscwgUdm90ZXMkVmVjPGJvb2w+FGluZGV4SENvbXBhY3Q8Vm90ZUluZGV4PgiVASBTZXQgY2FuZGlkYXRlIGFwcHJvdmFscyBmcm9tIGEgcHJveHkuIEFwcHJvdmFsIHNsb3RzIHN0YXkgdmFsaWQgYXMgbG9uZyBhcyBjYW5kaWRhdGVzIGluIHRob3NlIHNsb3RzQCBhcmUgcmVnaXN0ZXJlZC5McmVhcF9pbmFjdGl2ZV92b3RlchA4cmVwb3J0ZXJfaW5kZXgwQ29tcGFjdDx1MzI+DHdobxxBZGRyZXNzJHdob19pbmRleDBDb21wYWN0PHUzMj5IYXNzdW1lZF92b3RlX2luZGV4SENvbXBhY3Q8Vm90ZUluZGV4PhRhASBSZW1vdmUgYSB2b3Rlci4gRm9yIGl0IG5vdCB0byBiZSBhIGJvbmQtY29uc3VtaW5nIG5vLW9wLCBhbGwgYXBwcm92ZWQgY2FuZGlkYXRlIGluZGljZXNxASBtdXN0IG5vdyBiZSBlaXRoZXIgdW5yZWdpc3RlcmVkIG9yIHJlZ2lzdGVyZWQgdG8gYSBjYW5kaWRhdGUgdGhhdCByZWdpc3RlcmVkIHRoZSBzbG90IGFmdGVyoCB0aGUgdm90ZXIgZ2F2ZSB0aGVpciBsYXN0IGFwcHJvdmFsIHNldC4AAQEgTWF5IGJlIGNhbGxlZCBieSBhbnlvbmUuIFJldHVybnMgdGhlIHZvdGVyIGRlcG9zaXQgdG8gYHNpZ25lZGAuNHJldHJhY3Rfdm90ZXIEFGluZGV4MENvbXBhY3Q8dTMyPgQtASBSZW1vdmUgYSB2b3Rlci4gQWxsIHZvdGVzIGFyZSBjYW5jZWxsZWQgYW5kIHRoZSB2b3RlciBkZXBvc2l0IGlzIHJldHVybmVkLkBzdWJtaXRfY2FuZGlkYWN5BBBzbG90MENvbXBhY3Q8dTMyPgx4IFN1Ym1pdCBvbmVzZWxmIGZvciBjYW5kaWRhY3kuABEBIEFjY291bnQgbXVzdCBoYXZlIGVub3VnaCB0cmFuc2ZlcnJhYmxlIGZ1bmRzIGluIGl0IHRvIHBheSB0aGUgYm9uZC44cHJlc2VudF93aW5uZXIMJGNhbmRpZGF0ZRxBZGRyZXNzFHRvdGFsSENvbXBhY3Q8QmFsYW5jZU9mPhRpbmRleEhDb21wYWN0PFZvdGVJbmRleD4MZQEgQ2xhaW0gdGhhdCBgc2lnbmVkYCBpcyBvbmUgb2YgdGhlIHRvcCBTZWxmOjpjYXJyeV9jb3VudCgpICsgY3VycmVudF92b3RlKCkuMSBjYW5kaWRhdGVzLqUBIE9ubHkgd29ya3MgaWYgdGhlIGBibG9ja19udW1iZXIgPj0gY3VycmVudF92b3RlKCkuMGAgYW5kIGA8IGN1cnJlbnRfdm90ZSgpLjAgKyBwcmVzZW50YXRpb25fZHVyYXRpb24oKWBgeCBgc2lnbmVkYCBzaG91bGQgaGF2ZSBhdCBsZWFzdERzZXRfZGVzaXJlZF9zZWF0cwQUY291bnQwQ29tcGFjdDx1MzI+DGUBIFNldCB0aGUgZGVzaXJlZCBtZW1iZXIgY291bnQ7IGlmIGxvd2VyIHRoYW4gdGhlIGN1cnJlbnQgY291bnQsIHRoZW4gc2VhdHMgd2lsbCBub3QgYmUgdXBpASBlbGVjdGlvbiB3aGVuIHRoZXkgZXhwaXJlLiBJZiBtb3JlLCB0aGVuIGEgbmV3IHZvdGUgd2lsbCBiZSBzdGFydGVkIGlmIG9uZSBpcyBub3QgYWxyZWFkeTQgaW4gcHJvZ3Jlc3MuNHJlbW92ZV9tZW1iZXIEDHdobxxBZGRyZXNzDHEBIFJlbW92ZSBhIHBhcnRpY3VsYXIgbWVtYmVyLiBBIHRhbGx5IHdpbGwgaGFwcGVuIGluc3RhbnRseSAoaWYgbm90IGFscmVhZHkgaW4gYSBwcmVzZW50YXRpb25BASBwZXJpb2QpIHRvIGZpbGwgdGhlIHNlYXQgaWYgcmVtb3ZhbCBtZWFucyB0aGF0IHRoZSBkZXNpcmVkIG1lbWJlcnMgYXJlIG5vdCBtZXQufCBUaGlzIGlzIGVmZmVjdGl2ZSBpbW1lZGlhdGVseS5kc2V0X3ByZXNlbnRhdGlvbl9kdXJhdGlvbgQUY291bnRQQ29tcGFjdDxCbG9ja051bWJlcj4IWQEgU2V0IHRoZSBwcmVzZW50YXRpb24gZHVyYXRpb24uIElmIHRoZXJlIGlzIGN1cnJlbnRseSBhIHZvdGUgYmVpbmcgcHJlc2VudGVkIGZvciwgd2lsbGAgaW52b2tlIGBmaW5hbGl6ZV92b3RlYC5Ec2V0X3Rlcm1fZHVyYXRpb24EFGNvdW50UENvbXBhY3Q8QmxvY2tOdW1iZXI+CFEBIFNldCB0aGUgcHJlc2VudGF0aW9uIGR1cmF0aW9uLiBJZiB0aGVyZSBpcyBjdXJyZW50IGEgdm90ZSBiZWluZyBwcmVzZW50ZWQgZm9yLCB3aWxsYCBpbnZva2UgYGZpbmFsaXplX3ZvdGVgLgA4Y291bmNpbF92b3RpbmcAAAEUHHByb3Bvc2UEIHByb3Bvc2FsIFByb3Bvc2FsABB2b3RlCCBwcm9wb3NhbBBIYXNoHGFwcHJvdmUQYm9vbAAQdmV0bwQ0cHJvcG9zYWxfaGFzaBBIYXNoAEhzZXRfY29vbG9mZl9wZXJpb2QEGGJsb2Nrc1BDb21wYWN0PEJsb2NrTnVtYmVyPgBEc2V0X3ZvdGluZ19wZXJpb2QEGGJsb2Nrc1BDb21wYWN0PEJsb2NrTnVtYmVyPgAAPGNvdW5jaWxfbW90aW9ucwAAAQgccHJvcG9zZQgkdGhyZXNob2xkMENvbXBhY3Q8dTMyPiBwcm9wb3NhbCBQcm9wb3NhbAAQdm90ZQwgcHJvcG9zYWwQSGFzaBRpbmRleFhDb21wYWN0PFByb3Bvc2FsSW5kZXg+HGFwcHJvdmUQYm9vbAAAIHRyZWFzdXJ5AAABFDRwcm9wb3NlX3NwZW5kCBR2YWx1ZUhDb21wYWN0PEJhbGFuY2VPZj4sYmVuZWZpY2lhcnkcQWRkcmVzcwwtASBQdXQgZm9yd2FyZCBhIHN1Z2dlc3Rpb24gZm9yIHNwZW5kaW5nLiBBIGRlcG9zaXQgcHJvcG9ydGlvbmFsIHRvIHRoZSB2YWx1ZTUBIGlzIHJlc2VydmVkIGFuZCBzbGFzaGVkIGlmIHRoZSBwcm9wb3NhbCBpcyByZWplY3RlZC4gSXQgaXMgcmV0dXJuZWQgb25jZSB0aGVUIHByb3Bvc2FsIGlzIGF3YXJkZWQuHHNldF9wb3QEHG5ld19wb3RIQ29tcGFjdDxCYWxhbmNlT2Y+BLQgU2V0IHRoZSBiYWxhbmNlIG9mIGZ1bmRzIGF2YWlsYWJsZSB0byBzcGVuZC4kY29uZmlndXJlEDRwcm9wb3NhbF9ib25kQENvbXBhY3Q8UGVybWlsbD5UcHJvcG9zYWxfYm9uZF9taW5pbXVtSENvbXBhY3Q8QmFsYW5jZU9mPjBzcGVuZF9wZXJpb2RQQ29tcGFjdDxCbG9ja051bWJlcj4QYnVybkBDb21wYWN0PFBlcm1pbGw+BHAgKFJlLSljb25maWd1cmUgdGhpcyBtb2R1bGUuPHJlamVjdF9wcm9wb3NhbAQscHJvcG9zYWxfaWRYQ29tcGFjdDxQcm9wb3NhbEluZGV4PgT8IFJlamVjdCBhIHByb3Bvc2VkIHNwZW5kLiBUaGUgb3JpZ2luYWwgZGVwb3NpdCB3aWxsIGJlIHNsYXNoZWQuQGFwcHJvdmVfcHJvcG9zYWwELHByb3Bvc2FsX2lkWENvbXBhY3Q8UHJvcG9zYWxJbmRleD4IXQEgQXBwcm92ZSBhIHByb3Bvc2FsLiBBdCBhIGxhdGVyIHRpbWUsIHRoZSBwcm9wb3NhbCB3aWxsIGJlIGFsbG9jYXRlZCB0byB0aGUgYmVuZWZpY2lhcnmsIGFuZCB0aGUgb3JpZ2luYWwgZGVwb3NpdCB3aWxsIGJlIHJldHVybmVkLgAocGFyYWNoYWlucwAAAQwkc2V0X2hlYWRzBBRoZWFkc1hWZWM8QXR0ZXN0ZWRDYW5kaWRhdGU+BBUBIFByb3ZpZGUgY2FuZGlkYXRlIHJlY2VpcHRzIGZvciBwYXJhY2hhaW5zLCBpbiBhc2NlbmRpbmcgb3JkZXIgYnkgaWQuSHJlZ2lzdGVyX3BhcmFjaGFpbgwIaWQYUGFyYUlkEGNvZGUUQnl0ZXNEaW5pdGlhbF9oZWFkX2RhdGEUQnl0ZXMImCBSZWdpc3RlciBhIHBhcmFjaGFpbiB3aXRoIGdpdmVuIGNvZGUujCBGYWlscyBpZiBnaXZlbiBJRCBpcyBhbHJlYWR5IHVzZWQuUGRlcmVnaXN0ZXJfcGFyYWNoYWluBAhpZBhQYXJhSWQElCBEZXJlZ2lzdGVyIGEgcGFyYWNoYWluIHdpdGggZ2l2ZW4gaWQAEHN1ZG8AAAEIEHN1ZG8EIHByb3Bvc2FsIFByb3Bvc2FsDDkBIEF1dGhlbnRpY2F0ZXMgdGhlIHN1ZG8ga2V5IGFuZCBkaXNwYXRjaGVzIGEgZnVuY3Rpb24gY2FsbCB3aXRoIGBSb290YCBvcmlnaW4uANAgVGhlIGRpc3BhdGNoIG9yaWdpbiBmb3IgdGhpcyBjYWxsIG11c3QgYmUgX1NpZ25lZF8uHHNldF9rZXkEDG5ldxxBZGRyZXNzDHUBIEF1dGhlbnRpY2F0ZXMgdGhlIGN1cnJlbnQgc3VkbyBrZXkgYW5kIHNldHMgdGhlIGdpdmVuIEFjY291bnRJZCAoYG5ld2ApIGFzIHRoZSBuZXcgc3VkbyBrZXkuANAgVGhlIGRpc3BhdGNoIG9yaWdpbiBmb3IgdGhpcyBjYWxsIG11c3QgYmUgX1NpZ25lZF8uAA==' }; diff --git a/packages/extension-chains/src/index.ts b/packages/extension-chains/src/index.ts index 9ea90e20..1e569215 100644 --- a/packages/extension-chains/src/index.ts +++ b/packages/extension-chains/src/index.ts @@ -8,11 +8,11 @@ import { Chain } from './types'; // imports chain details, generally metadata. For the generation of these, // inside the api, run `yarn chain:info [--ws ]` import alexander from './alexander'; -import kusama from './kusama'; +import kusamaCC1 from './kusama-cc1'; const chains: Map = new Map( - [alexander, kusama].map( - ({ chain, genesisHash, metaCalls, ss58Format, tokenDecimals, tokenSymbol }): [string, Chain] => [ + [alexander, kusamaCC1].map( + ({ chain, genesisHash, metaCalls, specVersion, ss58Format, tokenDecimals, tokenSymbol, types }): [string, Chain] => [ genesisHash, { genesisHash, @@ -20,9 +20,11 @@ const chains: Map = new Map( ? new Metadata(Buffer.from(metaCalls, 'base64')) : undefined, name: chain, + specVersion, ss58Format, tokenDecimals, - tokenSymbol + tokenSymbol, + types: types || {} } ] ) @@ -30,9 +32,11 @@ const chains: Map = new Map( const UNKNOWN_CHAIN: Chain = { name: 'Any', + specVersion: 0, ss58Format: 42, tokenDecimals: 0, - tokenSymbol: 'UNIT' + tokenSymbol: 'UNIT', + types: {} }; export default function findChain (genesisHash?: string | null): Chain { diff --git a/packages/extension-chains/src/kusama.ts b/packages/extension-chains/src/kusama-cc1.ts similarity index 99% rename from packages/extension-chains/src/kusama.ts rename to packages/extension-chains/src/kusama-cc1.ts index 32dac374..6bef1b82 100644 --- a/packages/extension-chains/src/kusama.ts +++ b/packages/extension-chains/src/kusama-cc1.ts @@ -7,8 +7,12 @@ export default { chain: 'Kusama CC1', genesisHash: '0x3fd7b9eb6a00376e5be61f01abb429ffb0b104be05eaff4d458da48fcd425baf', + specVersion: 1001, ss58Format: 2, tokenDecimals: 12, tokenSymbol: 'KSM', + types: { + Keys: 'SessionKeysPolkadot' + }, metaCalls: 'bWV0YQdcGFN5c3RlbQABGChmaWxsX2Jsb2NrAAQhASBBIGJpZyBkaXNwYXRjaCB0aGF0IHdpbGwgZGlzYWxsb3cgYW55IG90aGVyIHRyYW5zYWN0aW9uIHRvIGJlIGluY2x1ZGVkLhhyZW1hcmsEHF9yZW1hcmsUQnl0ZXMEbCBNYWtlIHNvbWUgb24tY2hhaW4gcmVtYXJrLjhzZXRfaGVhcF9wYWdlcwQUcGFnZXMMdTY0BPwgU2V0IHRoZSBudW1iZXIgb2YgcGFnZXMgaW4gdGhlIFdlYkFzc2VtYmx5IGVudmlyb25tZW50J3MgaGVhcC4gc2V0X2NvZGUEDG5ldxRCeXRlcwRIIFNldCB0aGUgbmV3IGNvZGUuLHNldF9zdG9yYWdlBBRpdGVtczRWZWM8S2V5VmFsdWU+BGwgU2V0IHNvbWUgaXRlbXMgb2Ygc3RvcmFnZS4wa2lsbF9zdG9yYWdlBBBrZXlzIFZlYzxLZXk+BHggS2lsbCBzb21lIGl0ZW1zIGZyb20gc3RvcmFnZS4AABBCYWJlAAEEiHNldF9wZW5kaW5nX3NlY29uZGFyeV9zbG90c19jaGFuZ2UEGGNoYW5nZTBPcHRpb248Ym9vbD4MFQEgU2V0cyBhIHBlbmRpbmcgY2hhbmdlIHRvIGVuYWJsZSAvIGRpc2FibGUgc2Vjb25kYXJ5IHNsb3QgYXNzaWdubWVudC4NASBUaGUgcGVuZGluZyBjaGFuZ2Ugd2lsbCBiZSBzZXQgYXQgdGhlIGVuZCBvZiB0aGUgY3VycmVudCBlcG9jaCBhbmSgIHdpbGwgYmUgZW5hY3RlZCBhdCBgY3VycmVudF9lcG9jaCArIDJgLgAAJFRpbWVzdGFtcAABBAxzZXQEDG5vdzxDb21wYWN0PE1vbWVudD4kWCBTZXQgdGhlIGN1cnJlbnQgdGltZS4AWQEgVGhpcyBjYWxsIHNob3VsZCBiZSBpbnZva2VkIGV4YWN0bHkgb25jZSBwZXIgYmxvY2suIEl0IHdpbGwgcGFuaWMgYXQgdGhlIGZpbmFsaXphdGlvbtggcGhhc2UsIGlmIHRoaXMgY2FsbCBoYXNuJ3QgYmVlbiBpbnZva2VkIGJ5IHRoYXQgdGltZS4ARQEgVGhlIHRpbWVzdGFtcCBzaG91bGQgYmUgZ3JlYXRlciB0aGFuIHRoZSBwcmV2aW91cyBvbmUgYnkgdGhlIGFtb3VudCBzcGVjaWZpZWQgYnlEIGBNaW5pbXVtUGVyaW9kYC4A2CBUaGUgZGlzcGF0Y2ggb3JpZ2luIGZvciB0aGlzIGNhbGwgbXVzdCBiZSBgSW5oZXJlbnRgLgAAHEluZGljZXMAAQAAACBCYWxhbmNlcwABDCB0cmFuc2ZlcggQZGVzdBxBZGRyZXNzFHZhbHVlQENvbXBhY3Q8QmFsYW5jZT5c2CBUcmFuc2ZlciBzb21lIGxpcXVpZCBmcmVlIGJhbGFuY2UgdG8gYW5vdGhlciBhY2NvdW50LgAJASBgdHJhbnNmZXJgIHdpbGwgc2V0IHRoZSBgRnJlZUJhbGFuY2VgIG9mIHRoZSBzZW5kZXIgYW5kIHJlY2VpdmVyLiEBIEl0IHdpbGwgZGVjcmVhc2UgdGhlIHRvdGFsIGlzc3VhbmNlIG9mIHRoZSBzeXN0ZW0gYnkgdGhlIGBUcmFuc2ZlckZlZWAuFQEgSWYgdGhlIHNlbmRlcidzIGFjY291bnQgaXMgYmVsb3cgdGhlIGV4aXN0ZW50aWFsIGRlcG9zaXQgYXMgYSByZXN1bHS0IG9mIHRoZSB0cmFuc2ZlciwgdGhlIGFjY291bnQgd2lsbCBiZSByZWFwZWQuABkBIFRoZSBkaXNwYXRjaCBvcmlnaW4gZm9yIHRoaXMgY2FsbCBtdXN0IGJlIGBTaWduZWRgIGJ5IHRoZSB0cmFuc2FjdG9yLgAsICMgPHdlaWdodD4xASAtIERlcGVuZGVudCBvbiBhcmd1bWVudHMgYnV0IG5vdCBjcml0aWNhbCwgZ2l2ZW4gcHJvcGVyIGltcGxlbWVudGF0aW9ucyBmb3LMICAgaW5wdXQgY29uZmlnIHR5cGVzLiBTZWUgcmVsYXRlZCBmdW5jdGlvbnMgYmVsb3cuaQEgLSBJdCBjb250YWlucyBhIGxpbWl0ZWQgbnVtYmVyIG9mIHJlYWRzIGFuZCB3cml0ZXMgaW50ZXJuYWxseSBhbmQgbm8gY29tcGxleCBjb21wdXRhdGlvbi4ATCBSZWxhdGVkIGZ1bmN0aW9uczoAUQEgICAtIGBlbnN1cmVfY2FuX3dpdGhkcmF3YCBpcyBhbHdheXMgY2FsbGVkIGludGVybmFsbHkgYnV0IGhhcyBhIGJvdW5kZWQgY29tcGxleGl0eS4tASAgIC0gVHJhbnNmZXJyaW5nIGJhbGFuY2VzIHRvIGFjY291bnRzIHRoYXQgZGlkIG5vdCBleGlzdCBiZWZvcmUgd2lsbCBjYXVzZdQgICAgICBgVDo6T25OZXdBY2NvdW50Ojpvbl9uZXdfYWNjb3VudGAgdG8gYmUgY2FsbGVkLtwgICAtIFJlbW92aW5nIGVub3VnaCBmdW5kcyBmcm9tIGFuIGFjY291bnQgd2lsbCB0cmlnZ2VyWQEgICAgIGBUOjpEdXN0UmVtb3ZhbDo6b25fdW5iYWxhbmNlZGAgYW5kIGBUOjpPbkZyZWVCYWxhbmNlWmVybzo6b25fZnJlZV9iYWxhbmNlX3plcm9gLgAwICMgPC93ZWlnaHQ+LHNldF9iYWxhbmNlDAx3aG8cQWRkcmVzcyBuZXdfZnJlZUBDb21wYWN0PEJhbGFuY2U+MG5ld19yZXNlcnZlZEBDb21wYWN0PEJhbGFuY2U+NJQgU2V0IHRoZSBiYWxhbmNlcyBvZiBhIGdpdmVuIGFjY291bnQuACEBIFRoaXMgd2lsbCBhbHRlciBgRnJlZUJhbGFuY2VgIGFuZCBgUmVzZXJ2ZWRCYWxhbmNlYCBpbiBzdG9yYWdlLiBpdCB3aWxsCQEgYWxzbyBkZWNyZWFzZSB0aGUgdG90YWwgaXNzdWFuY2Ugb2YgdGhlIHN5c3RlbSAoYFRvdGFsSXNzdWFuY2VgKS4ZASBJZiB0aGUgbmV3IGZyZWUgb3IgcmVzZXJ2ZWQgYmFsYW5jZSBpcyBiZWxvdyB0aGUgZXhpc3RlbnRpYWwgZGVwb3NpdCzoIGl0IHdpbGwgcmVzZXQgdGhlIGFjY291bnQgbm9uY2UgKGBzeXN0ZW06OkFjY291bnROb25jZWApLgC0IFRoZSBkaXNwYXRjaCBvcmlnaW4gZm9yIHRoaXMgY2FsbCBpcyBgcm9vdGAuACwgIyA8d2VpZ2h0PoAgLSBJbmRlcGVuZGVudCBvZiB0aGUgYXJndW1lbnRzLsQgLSBDb250YWlucyBhIGxpbWl0ZWQgbnVtYmVyIG9mIHJlYWRzIGFuZCB3cml0ZXMuMCAjIDwvd2VpZ2h0Pjhmb3JjZV90cmFuc2ZlcgwYc291cmNlHEFkZHJlc3MQZGVzdBxBZGRyZXNzFHZhbHVlQENvbXBhY3Q8QmFsYW5jZT4IUQEgRXhhY3RseSBhcyBgdHJhbnNmZXJgLCBleGNlcHQgdGhlIG9yaWdpbiBtdXN0IGJlIHJvb3QgYW5kIHRoZSBzb3VyY2UgYWNjb3VudCBtYXkgYmUsIHNwZWNpZmllZC4AAChBdXRob3JzaGlwAAEEKHNldF91bmNsZXMEKG5ld191bmNsZXMsVmVjPEhlYWRlcj4EZCBQcm92aWRlIGEgc2V0IG9mIHVuY2xlcy4AABxTdGFraW5nAAE0EGJvbmQMKGNvbnRyb2xsZXIcQWRkcmVzcxR2YWx1ZUhDb21wYWN0PEJhbGFuY2VPZj4UcGF5ZWVEUmV3YXJkRGVzdGluYXRpb248ZQEgVGFrZSB0aGUgb3JpZ2luIGFjY291bnQgYXMgYSBzdGFzaCBhbmQgbG9jayB1cCBgdmFsdWVgIG9mIGl0cyBiYWxhbmNlLiBgY29udHJvbGxlcmAgd2lsbIQgYmUgdGhlIGFjY291bnQgdGhhdCBjb250cm9scyBpdC4AUQEgYHZhbHVlYCBtdXN0IGJlIG1vcmUgdGhhbiB0aGUgYGV4aXN0ZW50aWFsX2RlcG9zaXRgIGRlZmluZWQgaW4gdGhlIEJhbGFuY2VzIG1vZHVsZS4AJQEgVGhlIGRpc3BhdGNoIG9yaWdpbiBmb3IgdGhpcyBjYWxsIG11c3QgYmUgX1NpZ25lZF8gYnkgdGhlIHN0YXNoIGFjY291bnQuACwgIyA8d2VpZ2h0PtQgLSBJbmRlcGVuZGVudCBvZiB0aGUgYXJndW1lbnRzLiBNb2RlcmF0ZSBjb21wbGV4aXR5LiAgLSBPKDEpLmggLSBUaHJlZSBleHRyYSBEQiBlbnRyaWVzLgBtASBOT1RFOiBUd28gb2YgdGhlIHN0b3JhZ2Ugd3JpdGVzIChgU2VsZjo6Ym9uZGVkYCwgYFNlbGY6OnBheWVlYCkgYXJlIF9uZXZlcl8gY2xlYW5lZCB1bmxlc3MlASB0aGUgYG9yaWdpbmAgZmFsbHMgYmVsb3cgX2V4aXN0ZW50aWFsIGRlcG9zaXRfIGFuZCBnZXRzIHJlbW92ZWQgYXMgZHVzdC4wICMgPC93ZWlnaHQ+KGJvbmRfZXh0cmEEOG1heF9hZGRpdGlvbmFsSENvbXBhY3Q8QmFsYW5jZU9mPjhlASBBZGQgc29tZSBleHRyYSBhbW91bnQgdGhhdCBoYXZlIGFwcGVhcmVkIGluIHRoZSBzdGFzaCBgZnJlZV9iYWxhbmNlYCBpbnRvIHRoZSBiYWxhbmNlIHVwNCBmb3Igc3Rha2luZy4AUQEgVXNlIHRoaXMgaWYgdGhlcmUgYXJlIGFkZGl0aW9uYWwgZnVuZHMgaW4geW91ciBzdGFzaCBhY2NvdW50IHRoYXQgeW91IHdpc2ggdG8gYm9uZC5lASBVbmxpa2UgW2Bib25kYF0gb3IgW2B1bmJvbmRgXSB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90IGltcG9zZSBhbnkgbGltaXRhdGlvbiBvbiB0aGUgYW1vdW50TCB0aGF0IGNhbiBiZSBhZGRlZC4AVQEgVGhlIGRpc3BhdGNoIG9yaWdpbiBmb3IgdGhpcyBjYWxsIG11c3QgYmUgX1NpZ25lZF8gYnkgdGhlIHN0YXNoLCBub3QgdGhlIGNvbnRyb2xsZXIuACwgIyA8d2VpZ2h0PuggLSBJbmRlcGVuZGVudCBvZiB0aGUgYXJndW1lbnRzLiBJbnNpZ25pZmljYW50IGNvbXBsZXhpdHkuICAtIE8oMSkuQCAtIE9uZSBEQiBlbnRyeS4wICMgPC93ZWlnaHQ+GHVuYm9uZAQUdmFsdWVIQ29tcGFjdDxCYWxhbmNlT2Y+XFUBIFNjaGVkdWxlIGEgcG9ydGlvbiBvZiB0aGUgc3Rhc2ggdG8gYmUgdW5sb2NrZWQgcmVhZHkgZm9yIHRyYW5zZmVyIG91dCBhZnRlciB0aGUgYm9uZAEBIHBlcmlvZCBlbmRzLiBJZiB0aGlzIGxlYXZlcyBhbiBhbW91bnQgYWN0aXZlbHkgYm9uZGVkIGxlc3MgdGhhbjUBIFQ6OkN1cnJlbmN5OjpleGlzdGVudGlhbF9kZXBvc2l0KCksIHRoZW4gaXQgaXMgaW5jcmVhc2VkIHRvIHRoZSBmdWxsIGFtb3VudC4ASQEgT25jZSB0aGUgdW5sb2NrIHBlcmlvZCBpcyBkb25lLCB5b3UgY2FuIGNhbGwgYHdpdGhkcmF3X3VuYm9uZGVkYCB0byBhY3R1YWxseSBtb3ZlwCB0aGUgZnVuZHMgb3V0IG9mIG1hbmFnZW1lbnQgcmVhZHkgZm9yIHRyYW5zZmVyLgA9ASBObyBtb3JlIHRoYW4gYSBsaW1pdGVkIG51bWJlciBvZiB1bmxvY2tpbmcgY2h1bmtzIChzZWUgYE1BWF9VTkxPQ0tJTkdfQ0hVTktTYCk9ASBjYW4gY28tZXhpc3RzIGF0IHRoZSBzYW1lIHRpbWUuIEluIHRoYXQgY2FzZSwgW2BDYWxsOjp3aXRoZHJhd191bmJvbmRlZGBdIG5lZWT8IHRvIGJlIGNhbGxlZCBmaXJzdCB0byByZW1vdmUgc29tZSBvZiB0aGUgY2h1bmtzIChpZiBwb3NzaWJsZSkuAFUBIFRoZSBkaXNwYXRjaCBvcmlnaW4gZm9yIHRoaXMgY2FsbCBtdXN0IGJlIF9TaWduZWRfIGJ5IHRoZSBjb250cm9sbGVyLCBub3QgdGhlIHN0YXNoLgCYIFNlZSBhbHNvIFtgQ2FsbDo6d2l0aGRyYXdfdW5ib25kZWRgXS4ALCAjIDx3ZWlnaHQ+QQEgLSBJbmRlcGVuZGVudCBvZiB0aGUgYXJndW1lbnRzLiBMaW1pdGVkIGJ1dCBwb3RlbnRpYWxseSBleHBsb2l0YWJsZSBjb21wbGV4aXR5LpggLSBDb250YWlucyBhIGxpbWl0ZWQgbnVtYmVyIG9mIHJlYWRzLmUBIC0gRWFjaCBjYWxsIChyZXF1aXJlcyB0aGUgcmVtYWluZGVyIG9mIHRoZSBib25kZWQgYmFsYW5jZSB0byBiZSBhYm92ZSBgbWluaW11bV9iYWxhbmNlYClxASAgIHdpbGwgY2F1c2UgYSBuZXcgZW50cnkgdG8gYmUgaW5zZXJ0ZWQgaW50byBhIHZlY3RvciAoYExlZGdlci51bmxvY2tpbmdgKSBrZXB0IGluIHN0b3JhZ2UupQEgICBUaGUgb25seSB3YXkgdG8gY2xlYW4gdGhlIGFmb3JlbWVudGlvbmVkIHN0b3JhZ2UgaXRlbSBpcyBhbHNvIHVzZXItY29udHJvbGxlZCB2aWEgYHdpdGhkcmF3X3VuYm9uZGVkYC5AIC0gT25lIERCIGVudHJ5LiggPC93ZWlnaHQ+RHdpdGhkcmF3X3VuYm9uZGVkAEAtASBSZW1vdmUgYW55IHVubG9ja2VkIGNodW5rcyBmcm9tIHRoZSBgdW5sb2NraW5nYCBxdWV1ZSBmcm9tIG91ciBtYW5hZ2VtZW50LgA1ASBUaGlzIGVzc2VudGlhbGx5IGZyZWVzIHVwIHRoYXQgYmFsYW5jZSB0byBiZSB1c2VkIGJ5IHRoZSBzdGFzaCBhY2NvdW50IHRvIGRvTCB3aGF0ZXZlciBpdCB3YW50cy4AVQEgVGhlIGRpc3BhdGNoIG9yaWdpbiBmb3IgdGhpcyBjYWxsIG11c3QgYmUgX1NpZ25lZF8gYnkgdGhlIGNvbnRyb2xsZXIsIG5vdCB0aGUgc3Rhc2guAGwgU2VlIGFsc28gW2BDYWxsOjp1bmJvbmRgXS4ALCAjIDx3ZWlnaHQ+VQEgLSBDb3VsZCBiZSBkZXBlbmRlbnQgb24gdGhlIGBvcmlnaW5gIGFyZ3VtZW50IGFuZCBob3cgbXVjaCBgdW5sb2NraW5nYCBjaHVua3MgZXhpc3QuRQEgIEl0IGltcGxpZXMgYGNvbnNvbGlkYXRlX3VubG9ja2VkYCB3aGljaCBsb29wcyBvdmVyIGBMZWRnZXIudW5sb2NraW5nYCwgd2hpY2ggaXP0ICBpbmRpcmVjdGx5IHVzZXItY29udHJvbGxlZC4gU2VlIFtgdW5ib25kYF0gZm9yIG1vcmUgZGV0YWlsLnkBIC0gQ29udGFpbnMgYSBsaW1pdGVkIG51bWJlciBvZiByZWFkcywgeWV0IHRoZSBzaXplIG9mIHdoaWNoIGNvdWxkIGJlIGxhcmdlIGJhc2VkIG9uIGBsZWRnZXJgLsggLSBXcml0ZXMgYXJlIGxpbWl0ZWQgdG8gdGhlIGBvcmlnaW5gIGFjY291bnQga2V5LjAgIyA8L3dlaWdodD4gdmFsaWRhdGUEFHByZWZzOFZhbGlkYXRvclByZWZzLOggRGVjbGFyZSB0aGUgZGVzaXJlIHRvIHZhbGlkYXRlIGZvciB0aGUgb3JpZ2luIGNvbnRyb2xsZXIuANwgRWZmZWN0cyB3aWxsIGJlIGZlbHQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgbmV4dCBlcmEuAFUBIFRoZSBkaXNwYXRjaCBvcmlnaW4gZm9yIHRoaXMgY2FsbCBtdXN0IGJlIF9TaWduZWRfIGJ5IHRoZSBjb250cm9sbGVyLCBub3QgdGhlIHN0YXNoLgAsICMgPHdlaWdodD7oIC0gSW5kZXBlbmRlbnQgb2YgdGhlIGFyZ3VtZW50cy4gSW5zaWduaWZpY2FudCBjb21wbGV4aXR5LpggLSBDb250YWlucyBhIGxpbWl0ZWQgbnVtYmVyIG9mIHJlYWRzLsggLSBXcml0ZXMgYXJlIGxpbWl0ZWQgdG8gdGhlIGBvcmlnaW5gIGFjY291bnQga2V5LjAgIyA8L3dlaWdodD4gbm9taW5hdGUEHHRhcmdldHMwVmVjPEFkZHJlc3M+LBEBIERlY2xhcmUgdGhlIGRlc2lyZSB0byBub21pbmF0ZSBgdGFyZ2V0c2AgZm9yIHRoZSBvcmlnaW4gY29udHJvbGxlci4A3CBFZmZlY3RzIHdpbGwgYmUgZmVsdCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBuZXh0IGVyYS4AVQEgVGhlIGRpc3BhdGNoIG9yaWdpbiBmb3IgdGhpcyBjYWxsIG11c3QgYmUgX1NpZ25lZF8gYnkgdGhlIGNvbnRyb2xsZXIsIG5vdCB0aGUgc3Rhc2guACwgIyA8d2VpZ2h0PiUBIC0gVGhlIHRyYW5zYWN0aW9uJ3MgY29tcGxleGl0eSBpcyBwcm9wb3J0aW9uYWwgdG8gdGhlIHNpemUgb2YgYHRhcmdldHNgLJggd2hpY2ggaXMgY2FwcGVkIGF0IGBNQVhfTk9NSU5BVElPTlNgLtggLSBCb3RoIHRoZSByZWFkcyBhbmQgd3JpdGVzIGZvbGxvdyBhIHNpbWlsYXIgcGF0dGVybi4wICMgPC93ZWlnaHQ+FGNoaWxsACzIIERlY2xhcmUgbm8gZGVzaXJlIHRvIGVpdGhlciB2YWxpZGF0ZSBvciBub21pbmF0ZS4A3CBFZmZlY3RzIHdpbGwgYmUgZmVsdCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBuZXh0IGVyYS4AVQEgVGhlIGRpc3BhdGNoIG9yaWdpbiBmb3IgdGhpcyBjYWxsIG11c3QgYmUgX1NpZ25lZF8gYnkgdGhlIGNvbnRyb2xsZXIsIG5vdCB0aGUgc3Rhc2guACwgIyA8d2VpZ2h0PuggLSBJbmRlcGVuZGVudCBvZiB0aGUgYXJndW1lbnRzLiBJbnNpZ25pZmljYW50IGNvbXBsZXhpdHkuVCAtIENvbnRhaW5zIG9uZSByZWFkLsggLSBXcml0ZXMgYXJlIGxpbWl0ZWQgdG8gdGhlIGBvcmlnaW5gIGFjY291bnQga2V5LjAgIyA8L3dlaWdodD4kc2V0X3BheWVlBBRwYXllZURSZXdhcmREZXN0aW5hdGlvbiy4IChSZS0pc2V0IHRoZSBwYXltZW50IHRhcmdldCBmb3IgYSBjb250cm9sbGVyLgDcIEVmZmVjdHMgd2lsbCBiZSBmZWx0IGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIG5leHQgZXJhLgBVASBUaGUgZGlzcGF0Y2ggb3JpZ2luIGZvciB0aGlzIGNhbGwgbXVzdCBiZSBfU2lnbmVkXyBieSB0aGUgY29udHJvbGxlciwgbm90IHRoZSBzdGFzaC4ALCAjIDx3ZWlnaHQ+6CAtIEluZGVwZW5kZW50IG9mIHRoZSBhcmd1bWVudHMuIEluc2lnbmlmaWNhbnQgY29tcGxleGl0eS6YIC0gQ29udGFpbnMgYSBsaW1pdGVkIG51bWJlciBvZiByZWFkcy7IIC0gV3JpdGVzIGFyZSBsaW1pdGVkIHRvIHRoZSBgb3JpZ2luYCBhY2NvdW50IGtleS4wICMgPC93ZWlnaHQ+OHNldF9jb250cm9sbGVyBChjb250cm9sbGVyHEFkZHJlc3MskCAoUmUtKXNldCB0aGUgY29udHJvbGxlciBvZiBhIHN0YXNoLgDcIEVmZmVjdHMgd2lsbCBiZSBmZWx0IGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIG5leHQgZXJhLgBVASBUaGUgZGlzcGF0Y2ggb3JpZ2luIGZvciB0aGlzIGNhbGwgbXVzdCBiZSBfU2lnbmVkXyBieSB0aGUgc3Rhc2gsIG5vdCB0aGUgY29udHJvbGxlci4ALCAjIDx3ZWlnaHQ+6CAtIEluZGVwZW5kZW50IG9mIHRoZSBhcmd1bWVudHMuIEluc2lnbmlmaWNhbnQgY29tcGxleGl0eS6YIC0gQ29udGFpbnMgYSBsaW1pdGVkIG51bWJlciBvZiByZWFkcy7IIC0gV3JpdGVzIGFyZSBsaW1pdGVkIHRvIHRoZSBgb3JpZ2luYCBhY2NvdW50IGtleS4wICMgPC93ZWlnaHQ+THNldF92YWxpZGF0b3JfY291bnQEDG5ldzBDb21wYWN0PHUzMj4EgCBUaGUgaWRlYWwgbnVtYmVyIG9mIHZhbGlkYXRvcnMuNGZvcmNlX25vX2VyYXMAFLAgRm9yY2UgdGhlcmUgdG8gYmUgbm8gbmV3IGVyYXMgaW5kZWZpbml0ZWx5LgAsICMgPHdlaWdodD5AIC0gTm8gYXJndW1lbnRzLjAgIyA8L3dlaWdodD40Zm9yY2VfbmV3X2VyYQAYTQEgRm9yY2UgdGhlcmUgdG8gYmUgYSBuZXcgZXJhIGF0IHRoZSBlbmQgb2YgdGhlIG5leHQgc2Vzc2lvbi4gQWZ0ZXIgdGhpcywgaXQgd2lsbCBiZaAgcmVzZXQgdG8gbm9ybWFsIChub24tZm9yY2VkKSBiZWhhdmlvdXIuACwgIyA8d2VpZ2h0PkAgLSBObyBhcmd1bWVudHMuMCAjIDwvd2VpZ2h0PkRzZXRfaW52dWxuZXJhYmxlcwQodmFsaWRhdG9yczhWZWM8QWNjb3VudElkPgTMIFNldCB0aGUgdmFsaWRhdG9ycyB3aG8gY2Fubm90IGJlIHNsYXNoZWQgKGlmIGFueSkuAAAgT2ZmZW5jZXMAAQAAABxTZXNzaW9uAAEEIHNldF9rZXlzCBBrZXlzEEtleXMUcHJvb2YUQnl0ZXMo5CBTZXRzIHRoZSBzZXNzaW9uIGtleShzKSBvZiB0aGUgZnVuY3Rpb24gY2FsbGVyIHRvIGBrZXlgLiEBIEFsbG93cyBhbiBhY2NvdW50IHRvIHNldCBpdHMgc2Vzc2lvbiBrZXkgcHJpb3IgdG8gYmVjb21pbmcgYSB2YWxpZGF0b3IuxCBUaGlzIGRvZXNuJ3QgdGFrZSBlZmZlY3QgdW50aWwgdGhlIG5leHQgc2Vzc2lvbi4A1CBUaGUgZGlzcGF0Y2ggb3JpZ2luIG9mIHRoaXMgZnVuY3Rpb24gbXVzdCBiZSBzaWduZWQuACwgIyA8d2VpZ2h0PoggLSBPKGxvZyBuKSBpbiBudW1iZXIgb2YgYWNjb3VudHMuWCAtIE9uZSBleHRyYSBEQiBlbnRyeS4wICMgPC93ZWlnaHQ+AAA8RmluYWxpdHlUcmFja2VyAAEEKGZpbmFsX2hpbnQEEGhpbnRQQ29tcGFjdDxCbG9ja051bWJlcj4I9CBIaW50IHRoYXQgdGhlIGF1dGhvciBvZiB0aGlzIGJsb2NrIHRoaW5rcyB0aGUgYmVzdCBmaW5hbGl6ZWRsIGJsb2NrIGlzIHRoZSBnaXZlbiBudW1iZXIuAAAcR3JhbmRwYQABBEhyZXBvcnRfbWlzYmVoYXZpb3IEHF9yZXBvcnQUQnl0ZXMEZCBSZXBvcnQgc29tZSBtaXNiZWhhdmlvci4AACBJbU9ubGluZQABBCRoZWFydGJlYXQIJGhlYXJ0YmVhdCRIZWFydGJlYXQkc2lnbmF0dXJlSEF1dGhvcml0eVNpZ25hdHVyZQAAACREZW1vY3JhY3kAAUQccHJvcG9zZQggcHJvcG9zYWwgUHJvcG9zYWwUdmFsdWVIQ29tcGFjdDxCYWxhbmNlT2Y+GKAgUHJvcG9zZSBhIHNlbnNpdGl2ZSBhY3Rpb24gdG8gYmUgdGFrZW4uACwgIyA8d2VpZ2h0PiAgLSBPKDEpLoAgLSBUd28gREIgY2hhbmdlcywgb25lIERCIGVudHJ5LjAgIyA8L3dlaWdodD4Yc2Vjb25kBCBwcm9wb3NhbEhDb21wYWN0PFByb3BJbmRleD4YoCBQcm9wb3NlIGEgc2Vuc2l0aXZlIGFjdGlvbiB0byBiZSB0YWtlbi4ALCAjIDx3ZWlnaHQ+ICAtIE8oMSkuQCAtIE9uZSBEQiBlbnRyeS4wICMgPC93ZWlnaHQ+EHZvdGUIJHJlZl9pbmRleGBDb21wYWN0PFJlZmVyZW5kdW1JbmRleD4Qdm90ZRBWb3RlHDUBIFZvdGUgaW4gYSByZWZlcmVuZHVtLiBJZiBgdm90ZS5pc19heWUoKWAsIHRoZSB2b3RlIGlzIHRvIGVuYWN0IHRoZSBwcm9wb3NhbDu8IG90aGVyd2lzZSBpdCBpcyBhIHZvdGUgdG8ga2VlcCB0aGUgc3RhdHVzIHF1by4ALCAjIDx3ZWlnaHQ+ICAtIE8oMSkufCAtIE9uZSBEQiBjaGFuZ2UsIG9uZSBEQiBlbnRyeS4wICMgPC93ZWlnaHQ+KHByb3h5X3ZvdGUIJHJlZl9pbmRleGBDb21wYWN0PFJlZmVyZW5kdW1JbmRleD4Qdm90ZRBWb3RlHFEBIFZvdGUgaW4gYSByZWZlcmVuZHVtIG9uIGJlaGFsZiBvZiBhIHN0YXNoLiBJZiBgdm90ZS5pc19heWUoKWAsIHRoZSB2b3RlIGlzIHRvIGVuYWN0+CB0aGUgcHJvcG9zYWw7ICBvdGhlcndpc2UgaXQgaXMgYSB2b3RlIHRvIGtlZXAgdGhlIHN0YXR1cyBxdW8uACwgIyA8d2VpZ2h0PiAgLSBPKDEpLnwgLSBPbmUgREIgY2hhbmdlLCBvbmUgREIgZW50cnkuMCAjIDwvd2VpZ2h0PkBlbWVyZ2VuY3lfY2FuY2VsBCRyZWZfaW5kZXg8UmVmZXJlbmR1bUluZGV4CFEBIFNjaGVkdWxlIGFuIGVtZXJnZW5jeSBjYW5jZWxsYXRpb24gb2YgYSByZWZlcmVuZHVtLiBDYW5ub3QgaGFwcGVuIHR3aWNlIHRvIHRoZSBzYW1lMCByZWZlcmVuZHVtLkBleHRlcm5hbF9wcm9wb3NlBCBwcm9wb3NhbCBQcm9wb3NhbAgxASBTY2hlZHVsZSBhIHJlZmVyZW5kdW0gdG8gYmUgdGFibGVkIG9uY2UgaXQgaXMgbGVnYWwgdG8gc2NoZWR1bGUgYW4gZXh0ZXJuYWwwIHJlZmVyZW5kdW0uZGV4dGVybmFsX3Byb3Bvc2VfbWFqb3JpdHkEIHByb3Bvc2FsIFByb3Bvc2FsFFkBIFNjaGVkdWxlIGEgbWFqb3JpdHktY2FycmllcyByZWZlcmVuZHVtIHRvIGJlIHRhYmxlZCBuZXh0IG9uY2UgaXQgaXMgbGVnYWwgdG8gc2NoZWR1bGVgIGFuIGV4dGVybmFsIHJlZmVyZW5kdW0uAE0BIFVubGlrZSBgZXh0ZXJuYWxfcHJvcG9zZWAsIGJsYWNrbGlzdGluZyBoYXMgbm8gZWZmZWN0IG9uIHRoaXMgYW5kIGl0IG1heSByZXBsYWNlIGGcIHByZS1zY2hlZHVsZWQgYGV4dGVybmFsX3Byb3Bvc2VgIGNhbGwuYGV4dGVybmFsX3Byb3Bvc2VfZGVmYXVsdAQgcHJvcG9zYWwgUHJvcG9zYWwUSQEgU2NoZWR1bGUgYSBuZWdhdGl2ZS10dXJub3V0LWJpYXMgcmVmZXJlbmR1bSB0byBiZSB0YWJsZWQgbmV4dCBvbmNlIGl0IGlzIGxlZ2FsIHRvhCBzY2hlZHVsZSBhbiBleHRlcm5hbCByZWZlcmVuZHVtLgBNASBVbmxpa2UgYGV4dGVybmFsX3Byb3Bvc2VgLCBibGFja2xpc3RpbmcgaGFzIG5vIGVmZmVjdCBvbiB0aGlzIGFuZCBpdCBtYXkgcmVwbGFjZSBhnCBwcmUtc2NoZWR1bGVkIGBleHRlcm5hbF9wcm9wb3NlYCBjYWxsLihmYXN0X3RyYWNrDDRwcm9wb3NhbF9oYXNoEEhhc2g0dm90aW5nX3BlcmlvZCxCbG9ja051bWJlchRkZWxheSxCbG9ja051bWJlciBRASBTY2hlZHVsZSB0aGUgY3VycmVudGx5IGV4dGVybmFsbHktcHJvcG9zZWQgbWFqb3JpdHktY2FycmllcyByZWZlcmVuZHVtIHRvIGJlIHRhYmxlZGUBIGltbWVkaWF0ZWx5LiBJZiB0aGVyZSBpcyBubyBleHRlcm5hbGx5LXByb3Bvc2VkIHJlZmVyZW5kdW0gY3VycmVudGx5LCBvciBpZiB0aGVyZSBpcyBvbmXsIGJ1dCBpdCBpcyBub3QgYSBtYWpvcml0eS1jYXJyaWVzIHJlZmVyZW5kdW0gdGhlbiBpdCBmYWlscy4A+CAtIGBwcm9wb3NhbF9oYXNoYDogVGhlIGhhc2ggb2YgdGhlIGN1cnJlbnQgZXh0ZXJuYWwgcHJvcG9zYWwuLQEgLSBgdm90aW5nX3BlcmlvZGA6IFRoZSBwZXJpb2QgdGhhdCBpcyBhbGxvd2VkIGZvciB2b3Rpbmcgb24gdGhpcyBwcm9wb3NhbC5VASAtIGBkZWxheWA6IFRoZSBudW1iZXIgb2YgYmxvY2sgYWZ0ZXIgdm90aW5nIGhhcyBlbmRlZCBpbiBhcHByb3ZhbCBhbmQgdGhpcyBzaG91bGQgYmXwICAgZW5hY3RlZC4gSW5jcmVhc2VkIHRvIGBFbWVyZ2VuY3lWb3RpbmdQZXJpb2RgIGlmIHRvbyBsb3cuNHZldG9fZXh0ZXJuYWwENHByb3Bvc2FsX2hhc2gQSGFzaAS8IFZldG8gYW5kIGJsYWNrbGlzdCB0aGUgZXh0ZXJuYWwgcHJvcG9zYWwgaGFzaC5EY2FuY2VsX3JlZmVyZW5kdW0EJHJlZl9pbmRleGBDb21wYWN0PFJlZmVyZW5kdW1JbmRleD4EVCBSZW1vdmUgYSByZWZlcmVuZHVtLjRjYW5jZWxfcXVldWVkDBB3aGVuUENvbXBhY3Q8QmxvY2tOdW1iZXI+FHdoaWNoMENvbXBhY3Q8dTMyPhB3aGF0YENvbXBhY3Q8UmVmZXJlbmR1bUluZGV4PgSgIENhbmNlbCBhIHByb3Bvc2FsIHF1ZXVlZCBmb3IgZW5hY3RtZW50LiRzZXRfcHJveHkEFHByb3h5JEFjY291bnRJZBSYIFNwZWNpZnkgYSBwcm94eS4gQ2FsbGVkIGJ5IHRoZSBzdGFzaC4ALCAjIDx3ZWlnaHQ+WCAtIE9uZSBleHRyYSBEQiBlbnRyeS4wICMgPC93ZWlnaHQ+MHJlc2lnbl9wcm94eQAUmCBDbGVhciB0aGUgcHJveHkuIENhbGxlZCBieSB0aGUgcHJveHkuACwgIyA8d2VpZ2h0PkAgLSBPbmUgREIgY2xlYXIuMCAjIDwvd2VpZ2h0PjByZW1vdmVfcHJveHkEFHByb3h5JEFjY291bnRJZBSYIENsZWFyIHRoZSBwcm94eS4gQ2FsbGVkIGJ5IHRoZSBzdGFzaC4ALCAjIDx3ZWlnaHQ+QCAtIE9uZSBEQiBjbGVhci4wICMgPC93ZWlnaHQ+IGRlbGVnYXRlCAh0byRBY2NvdW50SWQoY29udmljdGlvbihDb252aWN0aW9uFDwgRGVsZWdhdGUgdm90ZS4ALCAjIDx3ZWlnaHQ+WCAtIE9uZSBleHRyYSBEQiBlbnRyeS4wICMgPC93ZWlnaHQ+KHVuZGVsZWdhdGUAFEQgVW5kZWxlZ2F0ZSB2b3RlLgAsICMgPHdlaWdodD4gIC0gTygxKS4wICMgPC93ZWlnaHQ+AAAcQ291bmNpbAABECxzZXRfbWVtYmVycwQsbmV3X21lbWJlcnM4VmVjPEFjY291bnRJZD4QUQEgU2V0IHRoZSBjb2xsZWN0aXZlJ3MgbWVtYmVyc2hpcCBtYW51YWxseSB0byBgbmV3X21lbWJlcnNgLiBCZSBuaWNlIHRvIHRoZSBjaGFpbiBhbmRcIHByb3ZpZGUgaXQgcHJlLXNvcnRlZC4AWCBSZXF1aXJlcyByb290IG9yaWdpbi4cZXhlY3V0ZQQgcHJvcG9zYWwgUHJvcG9zYWwM9CBEaXNwYXRjaCBhIHByb3Bvc2FsIGZyb20gYSBtZW1iZXIgdXNpbmcgdGhlIGBNZW1iZXJgIG9yaWdpbi4ArCBPcmlnaW4gbXVzdCBiZSBhIG1lbWJlciBvZiB0aGUgY29sbGVjdGl2ZS4ccHJvcG9zZQgkdGhyZXNob2xkUENvbXBhY3Q8TWVtYmVyQ291bnQ+IHByb3Bvc2FsIFByb3Bvc2FsECwgIyA8d2VpZ2h0PpAgLSBCb3VuZGVkIHN0b3JhZ2UgcmVhZHMgYW5kIHdyaXRlcy64IC0gQXJndW1lbnQgYHRocmVzaG9sZGAgaGFzIGJlYXJpbmcgb24gd2VpZ2h0LjAgIyA8L3dlaWdodD4Qdm90ZQwgcHJvcG9zYWwQSGFzaBRpbmRleFhDb21wYWN0PFByb3Bvc2FsSW5kZXg+HGFwcHJvdmUQYm9vbBAsICMgPHdlaWdodD6MIC0gQm91bmRlZCBzdG9yYWdlIHJlYWQgYW5kIHdyaXRlcy5VASAtIFdpbGwgYmUgc2xpZ2h0bHkgaGVhdmllciBpZiB0aGUgcHJvcG9zYWwgaXMgYXBwcm92ZWQgLyBkaXNhcHByb3ZlZCBhZnRlciB0aGUgdm90ZS4wICMgPC93ZWlnaHQ+AABIVGVjaG5pY2FsQ29tbWl0dGVlAAEQLHNldF9tZW1iZXJzBCxuZXdfbWVtYmVyczhWZWM8QWNjb3VudElkPhBRASBTZXQgdGhlIGNvbGxlY3RpdmUncyBtZW1iZXJzaGlwIG1hbnVhbGx5IHRvIGBuZXdfbWVtYmVyc2AuIEJlIG5pY2UgdG8gdGhlIGNoYWluIGFuZFwgcHJvdmlkZSBpdCBwcmUtc29ydGVkLgBYIFJlcXVpcmVzIHJvb3Qgb3JpZ2luLhxleGVjdXRlBCBwcm9wb3NhbCBQcm9wb3NhbAz0IERpc3BhdGNoIGEgcHJvcG9zYWwgZnJvbSBhIG1lbWJlciB1c2luZyB0aGUgYE1lbWJlcmAgb3JpZ2luLgCsIE9yaWdpbiBtdXN0IGJlIGEgbWVtYmVyIG9mIHRoZSBjb2xsZWN0aXZlLhxwcm9wb3NlCCR0aHJlc2hvbGRQQ29tcGFjdDxNZW1iZXJDb3VudD4gcHJvcG9zYWwgUHJvcG9zYWwQLCAjIDx3ZWlnaHQ+kCAtIEJvdW5kZWQgc3RvcmFnZSByZWFkcyBhbmQgd3JpdGVzLrggLSBBcmd1bWVudCBgdGhyZXNob2xkYCBoYXMgYmVhcmluZyBvbiB3ZWlnaHQuMCAjIDwvd2VpZ2h0PhB2b3RlDCBwcm9wb3NhbBBIYXNoFGluZGV4WENvbXBhY3Q8UHJvcG9zYWxJbmRleD4cYXBwcm92ZRBib29sECwgIyA8d2VpZ2h0PowgLSBCb3VuZGVkIHN0b3JhZ2UgcmVhZCBhbmQgd3JpdGVzLlUBIC0gV2lsbCBiZSBzbGlnaHRseSBoZWF2aWVyIGlmIHRoZSBwcm9wb3NhbCBpcyBhcHByb3ZlZCAvIGRpc2FwcHJvdmVkIGFmdGVyIHRoZSB2b3RlLjAgIyA8L3dlaWdodD4AACRFbGVjdGlvbnMAASg0c2V0X2FwcHJvdmFscwwUdm90ZXMkVmVjPGJvb2w+FGluZGV4SENvbXBhY3Q8Vm90ZUluZGV4PhBoaW50IFNldEluZGV4YGEBIFNldCBjYW5kaWRhdGUgYXBwcm92YWxzLiBBcHByb3ZhbCBzbG90cyBzdGF5IHZhbGlkIGFzIGxvbmcgYXMgY2FuZGlkYXRlcyBpbiB0aG9zZSBzbG90c0AgYXJlIHJlZ2lzdGVyZWQuAMAgTG9ja3MgdGhlIHRvdGFsIGJhbGFuY2Ugb2YgY2FsbGVyIGluZGVmaW5pdGVseS4pASBPbmx5IFtgcmV0cmFjdF92b3RlcmBdIG9yIFtgcmVhcF9pbmFjdGl2ZV92b3RlcmBdIGNhbiB1bmxvY2sgdGhlIGJhbGFuY2UuANQgYGhpbnRgIGFyZ3VtZW50IGlzIGludGVycHJldGVkIGRpZmZlcmVudGx5IGJhc2VkIG9uOkUBIC0gaWYgYG9yaWdpbmAgaXMgc2V0dGluZyBhcHByb3ZhbHMgZm9yIHRoZSBmaXJzdCB0aW1lOiBUaGUgaW5kZXggd2lsbCBiZSBjaGVja2VksCBmb3IgYmVpbmcgYSB2YWxpZCBfaG9sZV8gaW4gdGhlIHZvdGVyIGxpc3QuTQEgICAtIGlmIHRoZSBoaW50IGlzIGNvcnJlY3RseSBwb2ludGluZyB0byBhIGhvbGUsIG5vIGZlZSBpcyBkZWR1Y3RlZCBmcm9tIGBvcmlnaW5gLokBICAgLSBPdGhlcndpc2UsIHRoZSBjYWxsIHdpbGwgc3VjY2VlZCBidXQgdGhlIGluZGV4IGlzIGlnbm9yZWQgYW5kIHNpbXBseSBhIHB1c2ggdG8gdGhlIGxhc3QgY2h1bmuBASAgIHdpdGggZnJlZSBzcGFjZSBoYXBwZW5zLiBJZiB0aGUgbmV3IHB1c2ggY2F1c2VzIGEgbmV3IGNodW5rIHRvIGJlIGNyZWF0ZWQsIGEgZmVlIGluZGljYXRlZCBieXQgICBbYFZvdGluZ0ZlZWBdIGlzIGRlZHVjdGVkLl0BIC0gaWYgYG9yaWdpbmAgaXMgYWxyZWFkeSBhIHZvdGVyOiB0aGUgaW5kZXggX19tdXN0X18gYmUgdmFsaWQgYW5kIHBvaW50IHRvIHRoZSBjb3JyZWN01CBwb3NpdGlvbiBvZiB0aGUgYG9yaWdpbmAgaW4gdGhlIGN1cnJlbnQgdm90ZXJzIGxpc3QuAK0BIE5vdGUgdGhhdCBhbnkgdHJhaWxpbmcgYGZhbHNlYCB2b3RlcyBpbiBgdm90ZXNgIGlzIGlnbm9yZWQ7IEluIGFwcHJvdmFsIHZvdGluZywgbm90IHZvdGluZyBmb3IgYSBjYW5kaWRhdGV0IGFuZCB2b3RpbmcgZmFsc2UsIGFyZSBlcXVhbC4ALCAjIDx3ZWlnaHQ+ICAtIE8oMSkunCAtIFR3byBleHRyYSBEQiBlbnRyaWVzLCBvbmUgREIgY2hhbmdlLgUBIC0gQXJndW1lbnQgYHZvdGVzYCBpcyBsaW1pdGVkIGluIGxlbmd0aCB0byBudW1iZXIgb2YgY2FuZGlkYXRlcy4wICMgPC93ZWlnaHQ+THByb3h5X3NldF9hcHByb3ZhbHMMFHZvdGVzJFZlYzxib29sPhRpbmRleEhDb21wYWN0PFZvdGVJbmRleD4QaGludCBTZXRJbmRleBiVASBTZXQgY2FuZGlkYXRlIGFwcHJvdmFscyBmcm9tIGEgcHJveHkuIEFwcHJvdmFsIHNsb3RzIHN0YXkgdmFsaWQgYXMgbG9uZyBhcyBjYW5kaWRhdGVzIGluIHRob3NlIHNsb3RzQCBhcmUgcmVnaXN0ZXJlZC4ALCAjIDx3ZWlnaHQ+8CAtIFNhbWUgYXMgYHNldF9hcHByb3ZhbHNgIHdpdGggb25lIGFkZGl0aW9uYWwgc3RvcmFnZSByZWFkLjAgIyA8L3dlaWdodD5McmVhcF9pbmFjdGl2ZV92b3RlchA4cmVwb3J0ZXJfaW5kZXgwQ29tcGFjdDx1MzI+DHdobxxBZGRyZXNzJHdob19pbmRleDBDb21wYWN0PHUzMj5IYXNzdW1lZF92b3RlX2luZGV4SENvbXBhY3Q8Vm90ZUluZGV4PjBhASBSZW1vdmUgYSB2b3Rlci4gRm9yIGl0IG5vdCB0byBiZSBhIGJvbmQtY29uc3VtaW5nIG5vLW9wLCBhbGwgYXBwcm92ZWQgY2FuZGlkYXRlIGluZGljZXNxASBtdXN0IG5vdyBiZSBlaXRoZXIgdW5yZWdpc3RlcmVkIG9yIHJlZ2lzdGVyZWQgdG8gYSBjYW5kaWRhdGUgdGhhdCByZWdpc3RlcmVkIHRoZSBzbG90IGFmdGVyoCB0aGUgdm90ZXIgZ2F2ZSB0aGVpciBsYXN0IGFwcHJvdmFsIHNldC4AFQEgQm90aCBpbmRpY2VzIG11c3QgYmUgcHJvdmlkZWQgYXMgZXhwbGFpbmVkIGluIFtgdm90ZXJfYXRgXSBmdW5jdGlvbi4AAQEgTWF5IGJlIGNhbGxlZCBieSBhbnlvbmUuIFJldHVybnMgdGhlIHZvdGVyIGRlcG9zaXQgdG8gYHNpZ25lZGAuACwgIyA8d2VpZ2h0PiAgLSBPKDEpLpwgLSBUd28gZmV3ZXIgREIgZW50cmllcywgb25lIERCIGNoYW5nZS4wICMgPC93ZWlnaHQ+NHJldHJhY3Rfdm90ZXIEFGluZGV4MENvbXBhY3Q8dTMyPigtASBSZW1vdmUgYSB2b3Rlci4gQWxsIHZvdGVzIGFyZSBjYW5jZWxsZWQgYW5kIHRoZSB2b3RlciBkZXBvc2l0IGlzIHJldHVybmVkLgAJASBUaGUgaW5kZXggbXVzdCBiZSBwcm92aWRlZCBhcyBleHBsYWluZWQgaW4gW2B2b3Rlcl9hdGBdIGZ1bmN0aW9uLgA9ASBBbHNvIHJlbW92ZXMgdGhlIGxvY2sgb24gdGhlIGJhbGFuY2Ugb2YgdGhlIHZvdGVyLiBTZWUgW2Bkb19zZXRfYXBwcm92YWxzKClgXS4ALCAjIDx3ZWlnaHQ+ICAtIE8oMSkunCAtIFR3byBmZXdlciBEQiBlbnRyaWVzLCBvbmUgREIgY2hhbmdlLjAgIyA8L3dlaWdodD5Ac3VibWl0X2NhbmRpZGFjeQQQc2xvdDBDb21wYWN0PHUzMj40eCBTdWJtaXQgb25lc2VsZiBmb3IgY2FuZGlkYWN5LgARASBBY2NvdW50IG11c3QgaGF2ZSBlbm91Z2ggdHJhbnNmZXJyYWJsZSBmdW5kcyBpbiBpdCB0byBwYXkgdGhlIGJvbmQuACEBIE5PVEU6IGlmIGBvcmlnaW5gIGhhcyBhbHJlYWR5IGFzc2lnbmVkIGFwcHJvdmFscyB2aWEgW2BzZXRfYXBwcm92YWxzYF0sRQEgaXQgd2lsbCBOT1QgaGF2ZSBhbnkgdXNhYmxlIGZ1bmRzIHRvIHBhc3MgY2FuZGlkYWN5IGJvbmQgYW5kIG11c3QgZmlyc3QgcmV0cmFjdC4xASBOb3RlIHRoYXQgc2V0dGluZyBhcHByb3ZhbHMgd2lsbCBsb2NrIHRoZSBlbnRpcmUgYmFsYW5jZSBvZiB0aGUgdm90ZXIgdW50aWx4IHJldHJhY3Rpb24gb3IgYmVpbmcgcmVwb3J0ZWQuACwgIyA8d2VpZ2h0PmAgLSBJbmRlcGVuZGVudCBvZiBpbnB1dC5QIC0gVGhyZWUgREIgY2hhbmdlcy4wICMgPC93ZWlnaHQ+OHByZXNlbnRfd2lubmVyDCRjYW5kaWRhdGUcQWRkcmVzcxR0b3RhbEhDb21wYWN0PEJhbGFuY2VPZj4UaW5kZXhIQ29tcGFjdDxWb3RlSW5kZXg+IGUBIENsYWltIHRoYXQgYHNpZ25lZGAgaXMgb25lIG9mIHRoZSB0b3AgU2VsZjo6Y2FycnlfY291bnQoKSArIGN1cnJlbnRfdm90ZSgpLjEgY2FuZGlkYXRlcy6hASBPbmx5IHdvcmtzIGlmIHRoZSBgYmxvY2tfbnVtYmVyID49IGN1cnJlbnRfdm90ZSgpLjBgIGFuZCBgPCBjdXJyZW50X3ZvdGUoKS4wICsgcHJlc2VudGF0aW9uX2R1cmF0aW9uKClgeCBgc2lnbmVkYCBzaG91bGQgaGF2ZSBhdCBsZWFzdAAsICMgPHdlaWdodD5UIC0gTyh2b3RlcnMpIGNvbXB1dGUuRCAtIE9uZSBEQiBjaGFuZ2UuMCAjIDwvd2VpZ2h0PkRzZXRfZGVzaXJlZF9zZWF0cwQUY291bnQwQ29tcGFjdDx1MzI+DGUBIFNldCB0aGUgZGVzaXJlZCBtZW1iZXIgY291bnQ7IGlmIGxvd2VyIHRoYW4gdGhlIGN1cnJlbnQgY291bnQsIHRoZW4gc2VhdHMgd2lsbCBub3QgYmUgdXBJASBlbGVjdGlvbiB3aGVuIHRoZXkgZXhwaXJlLiBJZiBtb3JlLCB0aGVuIGEgbmV3IHZvdGUgd2lsbCBiZSBzdGFydGVkIGlmIG9uZSBpcyBub3RUIGFscmVhZHkgaW4gcHJvZ3Jlc3MuNHJlbW92ZV9tZW1iZXIEDHdobxxBZGRyZXNzECEBIFJlbW92ZSBhIHBhcnRpY3VsYXIgbWVtYmVyIGZyb20gdGhlIHNldC4gVGhpcyBpcyBlZmZlY3RpdmUgaW1tZWRpYXRlbHkuACEBIE5vdGU6IEEgdGFsbHkgc2hvdWxkIGhhcHBlbiBpbnN0YW50bHkgKGlmIG5vdCBhbHJlYWR5IGluIGEgcHJlc2VudGF0aW9uQQEgcGVyaW9kKSB0byBmaWxsIHRoZSBzZWF0IGlmIHJlbW92YWwgbWVhbnMgdGhhdCB0aGUgZGVzaXJlZCBtZW1iZXJzIGFyZSBub3QgbWV0LmRzZXRfcHJlc2VudGF0aW9uX2R1cmF0aW9uBBRjb3VudFBDb21wYWN0PEJsb2NrTnVtYmVyPghZASBTZXQgdGhlIHByZXNlbnRhdGlvbiBkdXJhdGlvbi4gSWYgdGhlcmUgaXMgY3VycmVudGx5IGEgdm90ZSBiZWluZyBwcmVzZW50ZWQgZm9yLCB3aWxsYCBpbnZva2UgYGZpbmFsaXplX3ZvdGVgLkRzZXRfdGVybV9kdXJhdGlvbgQUY291bnRQQ29tcGFjdDxCbG9ja051bWJlcj4IUQEgU2V0IHRoZSBwcmVzZW50YXRpb24gZHVyYXRpb24uIElmIHRoZXJlIGlzIGN1cnJlbnQgYSB2b3RlIGJlaW5nIHByZXNlbnRlZCBmb3IsIHdpbGxgIGludm9rZSBgZmluYWxpemVfdm90ZWAuAABMVGVjaG5pY2FsTWVtYmVyc2hpcAABEChhZGRfbWVtYmVyBAx3aG8kQWNjb3VudElkDHwgQWRkIGEgbWVtYmVyIGB3aG9gIHRvIHRoZSBzZXQuALQgTWF5IG9ubHkgYmUgY2FsbGVkIGZyb20gYEFkZE9yaWdpbmAgb3Igcm9vdC40cmVtb3ZlX21lbWJlcgQMd2hvJEFjY291bnRJZAyQIFJlbW92ZSBhIG1lbWJlciBgd2hvYCBmcm9tIHRoZSBzZXQuAMAgTWF5IG9ubHkgYmUgY2FsbGVkIGZyb20gYFJlbW92ZU9yaWdpbmAgb3Igcm9vdC4sc3dhcF9tZW1iZXIIGHJlbW92ZSRBY2NvdW50SWQMYWRkJEFjY291bnRJZAzAIFN3YXAgb3V0IG9uZSBtZW1iZXIgYHJlbW92ZWAgZm9yIGFub3RoZXIgYGFkZGAuALggTWF5IG9ubHkgYmUgY2FsbGVkIGZyb20gYFN3YXBPcmlnaW5gIG9yIHJvb3QuNHJlc2V0X21lbWJlcnMEHG1lbWJlcnM4VmVjPEFjY291bnRJZD4QWQEgQ2hhbmdlIHRoZSBtZW1iZXJzaGlwIHRvIGEgbmV3IHNldCwgZGlzcmVnYXJkaW5nIHRoZSBleGlzdGluZyBtZW1iZXJzaGlwLiBCZSBuaWNlIGFuZGwgcGFzcyBgbWVtYmVyc2AgcHJlLXNvcnRlZC4AvCBNYXkgb25seSBiZSBjYWxsZWQgZnJvbSBgUmVzZXRPcmlnaW5gIG9yIHJvb3QuAAAgVHJlYXN1cnkAAQw0cHJvcG9zZV9zcGVuZAgUdmFsdWVIQ29tcGFjdDxCYWxhbmNlT2Y+LGJlbmVmaWNpYXJ5HEFkZHJlc3MkLQEgUHV0IGZvcndhcmQgYSBzdWdnZXN0aW9uIGZvciBzcGVuZGluZy4gQSBkZXBvc2l0IHByb3BvcnRpb25hbCB0byB0aGUgdmFsdWU1ASBpcyByZXNlcnZlZCBhbmQgc2xhc2hlZCBpZiB0aGUgcHJvcG9zYWwgaXMgcmVqZWN0ZWQuIEl0IGlzIHJldHVybmVkIG9uY2UgdGhlVCBwcm9wb3NhbCBpcyBhd2FyZGVkLgAsICMgPHdlaWdodD4gIC0gTygxKS5kIC0gTGltaXRlZCBzdG9yYWdlIHJlYWRzLpQgLSBPbmUgREIgY2hhbmdlLCBvbmUgZXh0cmEgREIgZW50cnkuMCAjIDwvd2VpZ2h0PjxyZWplY3RfcHJvcG9zYWwELHByb3Bvc2FsX2lkWENvbXBhY3Q8UHJvcG9zYWxJbmRleD4c/CBSZWplY3QgYSBwcm9wb3NlZCBzcGVuZC4gVGhlIG9yaWdpbmFsIGRlcG9zaXQgd2lsbCBiZSBzbGFzaGVkLgAsICMgPHdlaWdodD4gIC0gTygxKS5kIC0gTGltaXRlZCBzdG9yYWdlIHJlYWRzLkAgLSBPbmUgREIgY2xlYXIuMCAjIDwvd2VpZ2h0PkBhcHByb3ZlX3Byb3Bvc2FsBCxwcm9wb3NhbF9pZFhDb21wYWN0PFByb3Bvc2FsSW5kZXg+IF0BIEFwcHJvdmUgYSBwcm9wb3NhbC4gQXQgYSBsYXRlciB0aW1lLCB0aGUgcHJvcG9zYWwgd2lsbCBiZSBhbGxvY2F0ZWQgdG8gdGhlIGJlbmVmaWNpYXJ5rCBhbmQgdGhlIG9yaWdpbmFsIGRlcG9zaXQgd2lsbCBiZSByZXR1cm5lZC4ALCAjIDx3ZWlnaHQ+ICAtIE8oMSkuZCAtIExpbWl0ZWQgc3RvcmFnZSByZWFkcy5EIC0gT25lIERCIGNoYW5nZS4wICMgPC93ZWlnaHQ+AAAYQ2xhaW1zAAEEFGNsYWltCBBkZXN0JEFjY291bnRJZEhldGhlcmV1bV9zaWduYXR1cmU4RWNkc2FTaWduYXR1cmUEOCBNYWtlIGEgY2xhaW0uAAAoUGFyYWNoYWlucwABDCRzZXRfaGVhZHMEFGhlYWRzWFZlYzxBdHRlc3RlZENhbmRpZGF0ZT4EFQEgUHJvdmlkZSBjYW5kaWRhdGUgcmVjZWlwdHMgZm9yIHBhcmFjaGFpbnMsIGluIGFzY2VuZGluZyBvcmRlciBieSBpZC5IcmVnaXN0ZXJfcGFyYWNoYWluDAhpZBhQYXJhSWQQY29kZRRCeXRlc0Rpbml0aWFsX2hlYWRfZGF0YRRCeXRlcwiYIFJlZ2lzdGVyIGEgcGFyYWNoYWluIHdpdGggZ2l2ZW4gY29kZS6MIEZhaWxzIGlmIGdpdmVuIElEIGlzIGFscmVhZHkgdXNlZC5QZGVyZWdpc3Rlcl9wYXJhY2hhaW4ECGlkGFBhcmFJZASUIERlcmVnaXN0ZXIgYSBwYXJhY2hhaW4gd2l0aCBnaXZlbiBpZAAAMEF0dGVzdGF0aW9ucwABBERtb3JlX2F0dGVzdGF0aW9ucwQUX21vcmVATW9yZUF0dGVzdGF0aW9ucwQVASBQcm92aWRlIGNhbmRpZGF0ZSByZWNlaXB0cyBmb3IgcGFyYWNoYWlucywgaW4gYXNjZW5kaW5nIG9yZGVyIGJ5IGlkLgAAFFNsb3RzAAEYLG5ld19hdWN0aW9uCCBkdXJhdGlvblBDb21wYWN0PEJsb2NrTnVtYmVyPkhsZWFzZV9wZXJpb2RfaW5kZXhYQ29tcGFjdDxMZWFzZVBlcmlvZE9mPhRYIENyZWF0ZSBhIG5ldyBhdWN0aW9uLgBVASBUaGlzIGNhbiBvbmx5IGhhcHBlbiB3aGVuIHRoZXJlIGlzbid0IGFscmVhZHkgYW4gYXVjdGlvbiBpbiBwcm9ncmVzcyBhbmQgbWF5IG9ubHkgYmUpASBjYWxsZWQgYnkgdGhlIHJvb3Qgb3JpZ2luLiBBY2NlcHRzIHRoZSBgZHVyYXRpb25gIG9mIHRoaXMgYXVjdGlvbiBhbmQgdGhlXQEgYGxlYXNlX3BlcmlvZF9pbmRleGAgb2YgdGhlIGluaXRpYWwgbGVhc2UgcGVyaW9kIG9mIHRoZSBmb3VyIHRoYXQgYXJlIHRvIGJlIGF1Y3Rpb25lZC4MYmlkFAxzdWI4Q29tcGFjdDxTdWJJZD40YXVjdGlvbl9pbmRleFRDb21wYWN0PEF1Y3Rpb25JbmRleD4oZmlyc3Rfc2xvdFhDb21wYWN0PExlYXNlUGVyaW9kT2Y+JGxhc3Rfc2xvdFhDb21wYWN0PExlYXNlUGVyaW9kT2Y+GGFtb3VudEhDb21wYWN0PEJhbGFuY2VPZj5ATQEgTWFrZSBhIG5ldyBiaWQgZnJvbSBhbiBhY2NvdW50IChpbmNsdWRpbmcgYSBwYXJhY2hhaW4gYWNjb3VudCkgZm9yIGRlcGxveWluZyBhIG5ldywgcGFyYWNoYWluLgBdASBNdWx0aXBsZSBzaW11bHRhbmVvdXMgYmlkcyBmcm9tIHRoZSBzYW1lIGJpZGRlciBhcmUgYWxsb3dlZCBvbmx5IGFzIGxvbmcgYXMgYWxsIGFjdGl2ZUEBIGJpZHMgb3ZlcmxhcCBlYWNoIG90aGVyIChpLmUuIGFyZSBtdXR1YWxseSBleGNsdXNpdmUpLiBCaWRzIGNhbm5vdCBiZSByZWRhY3RlZC4AWQEgLSBgc3ViYCBpcyB0aGUgc3ViLWJpZGRlciBJRCwgYWxsb3dpbmcgZm9yIG11bHRpcGxlIGNvbXBldGluZyBiaWRzIHRvIGJlIG1hZGUgYnkgKGFuZHQgZnVuZGVkIGJ5KSB0aGUgc2FtZSBhY2NvdW50LlEBIC0gYGF1Y3Rpb25faW5kZXhgIGlzIHRoZSBpbmRleCBvZiB0aGUgYXVjdGlvbiB0byBiaWQgb24uIFNob3VsZCBqdXN0IGJlIHRoZSBwcmVzZW50bCB2YWx1ZSBvZiBgQXVjdGlvbkNvdW50ZXJgLk0BIC0gYGZpcnN0X3Nsb3RgIGlzIHRoZSBmaXJzdCBsZWFzZSBwZXJpb2QgaW5kZXggb2YgdGhlIHJhbmdlIHRvIGJpZCBvbi4gVGhpcyBpcyB0aGUNASBhYnNvbHV0ZSBsZWFzZSBwZXJpb2QgaW5kZXggdmFsdWUsIG5vdCBhbiBhdWN0aW9uLXNwZWNpZmljIG9mZnNldC5FASAtIGBsYXN0X3Nsb3RgIGlzIHRoZSBsYXN0IGxlYXNlIHBlcmlvZCBpbmRleCBvZiB0aGUgcmFuZ2UgdG8gYmlkIG9uLiBUaGlzIGlzIHRoZQ0BIGFic29sdXRlIGxlYXNlIHBlcmlvZCBpbmRleCB2YWx1ZSwgbm90IGFuIGF1Y3Rpb24tc3BlY2lmaWMgb2Zmc2V0Lk0BIC0gYGFtb3VudGAgaXMgdGhlIGFtb3VudCB0byBiaWQgdG8gYmUgaGVsZCBhcyBkZXBvc2l0IGZvciB0aGUgcGFyYWNoYWluIHNob3VsZCB0aGXMIGJpZCB3aW4uIFRoaXMgYW1vdW50IGlzIGhlbGQgdGhyb3VnaG91dCB0aGUgcmFuZ2UuJGJpZF9yZW5ldxA0YXVjdGlvbl9pbmRleFRDb21wYWN0PEF1Y3Rpb25JbmRleD4oZmlyc3Rfc2xvdFhDb21wYWN0PExlYXNlUGVyaW9kT2Y+JGxhc3Rfc2xvdFhDb21wYWN0PExlYXNlUGVyaW9kT2Y+GGFtb3VudEhDb21wYWN0PEJhbGFuY2VPZj48UQEgTWFrZSBhIG5ldyBiaWQgZnJvbSBhIHBhcmFjaGFpbiBhY2NvdW50IGZvciByZW5ld2luZyB0aGF0IChwcmUtZXhpc3RpbmcpIHBhcmFjaGFpbi4AqCBUaGUgb3JpZ2luICptdXN0KiBiZSBhIHBhcmFjaGFpbiBhY2NvdW50LgBdASBNdWx0aXBsZSBzaW11bHRhbmVvdXMgYmlkcyBmcm9tIHRoZSBzYW1lIGJpZGRlciBhcmUgYWxsb3dlZCBvbmx5IGFzIGxvbmcgYXMgYWxsIGFjdGl2ZUEBIGJpZHMgb3ZlcmxhcCBlYWNoIG90aGVyIChpLmUuIGFyZSBtdXR1YWxseSBleGNsdXNpdmUpLiBCaWRzIGNhbm5vdCBiZSByZWRhY3RlZC4AUQEgLSBgYXVjdGlvbl9pbmRleGAgaXMgdGhlIGluZGV4IG9mIHRoZSBhdWN0aW9uIHRvIGJpZCBvbi4gU2hvdWxkIGp1c3QgYmUgdGhlIHByZXNlbnRsIHZhbHVlIG9mIGBBdWN0aW9uQ291bnRlcmAuTQEgLSBgZmlyc3Rfc2xvdGAgaXMgdGhlIGZpcnN0IGxlYXNlIHBlcmlvZCBpbmRleCBvZiB0aGUgcmFuZ2UgdG8gYmlkIG9uLiBUaGlzIGlzIHRoZQ0BIGFic29sdXRlIGxlYXNlIHBlcmlvZCBpbmRleCB2YWx1ZSwgbm90IGFuIGF1Y3Rpb24tc3BlY2lmaWMgb2Zmc2V0LkUBIC0gYGxhc3Rfc2xvdGAgaXMgdGhlIGxhc3QgbGVhc2UgcGVyaW9kIGluZGV4IG9mIHRoZSByYW5nZSB0byBiaWQgb24uIFRoaXMgaXMgdGhlDQEgYWJzb2x1dGUgbGVhc2UgcGVyaW9kIGluZGV4IHZhbHVlLCBub3QgYW4gYXVjdGlvbi1zcGVjaWZpYyBvZmZzZXQuTQEgLSBgYW1vdW50YCBpcyB0aGUgYW1vdW50IHRvIGJpZCB0byBiZSBoZWxkIGFzIGRlcG9zaXQgZm9yIHRoZSBwYXJhY2hhaW4gc2hvdWxkIHRoZcwgYmlkIHdpbi4gVGhpcyBhbW91bnQgaXMgaGVsZCB0aHJvdWdob3V0IHRoZSByYW5nZS48c2V0X29mZmJvYXJkaW5nBBBkZXN0HEFkZHJlc3MUyCBTZXQgdGhlIG9mZi1ib2FyZGluZyBpbmZvcm1hdGlvbiBmb3IgYSBwYXJhY2hhaW4uAKggVGhlIG9yaWdpbiAqbXVzdCogYmUgYSBwYXJhY2hhaW4gYWNjb3VudC4AIQEgLSBgZGVzdGAgaXMgdGhlIGRlc3RpbmF0aW9uIGFjY291bnQgdG8gcmVjZWl2ZSB0aGUgcGFyYWNoYWluJ3MgZGVwb3NpdC48Zml4X2RlcGxveV9kYXRhEAxzdWI4Q29tcGFjdDxTdWJJZD4ccGFyYV9pZERDb21wYWN0PFBhcmFJZE9mPiRjb2RlX2hhc2gQSGFzaERpbml0aWFsX2hlYWRfZGF0YRRCeXRlcxwtASBTZXQgdGhlIGRlcGxveSBpbmZvcm1hdGlvbiBmb3IgYSBzdWNjZXNzZnVsIGJpZCB0byBkZXBsb3kgYSBuZXcgcGFyYWNoYWluLgDIIC0gYG9yaWdpbmAgbXVzdCBiZSB0aGUgc3VjY2Vzc2Z1bCBiaWRkZXIgYWNjb3VudC6wIC0gYHN1YmAgaXMgdGhlIHN1Yi1iaWRkZXIgSUQgb2YgdGhlIGJpZGRlci4BASAtIGBwYXJhX2lkYCBpcyB0aGUgcGFyYWNoYWluIElEIGFsbG90dGVkIHRvIHRoZSB3aW5uaW5nIGJpZGRlci4dASAtIGBjb2RlX2hhc2hgIGlzIHRoZSBoYXNoIG9mIHRoZSBwYXJhY2hhaW4ncyBXYXNtIHZhbGlkYXRpb24gZnVuY3Rpb24u8CAtIGBpbml0aWFsX2hlYWRfZGF0YWAgaXMgdGhlIHBhcmFjaGFpbidzIGluaXRpYWwgaGVhZCBkYXRhLlRlbGFib3JhdGVfZGVwbG95X2RhdGEIHHBhcmFfaWREQ29tcGFjdDxQYXJhSWRPZj4QY29kZRRCeXRlczB0IE5vdGUgYSBuZXcgcGFyYWNoYWluJ3MgY29kZS4ATQEgVGhpcyBtdXN0IGJlIGNhbGxlZCBhZnRlciBgZml4X2RlcGxveV9kYXRhYCBhbmQgYGNvZGVgIG11c3QgYmUgdGhlIHByZWltYWdlIG9mIHRoZcQgYGNvZGVfaGFzaGAgcGFzc2VkIHRoZXJlIGZvciB0aGUgc2FtZSBgcGFyYV9pZGAuAGEBIFRoaXMgbWF5IGJlIGNhbGxlZCBiZWZvcmUgb3IgYWZ0ZXIgdGhlIGJlZ2lubmluZyBvZiB0aGUgcGFyYWNoYWluJ3MgZmlyc3QgbGVhc2UgcGVyaW9kLkUBIElmIGNhbGxlZCBiZWZvcmUgdGhlbiB0aGUgcGFyYWNoYWluIHdpbGwgYmVjb21lIGFjdGl2ZSBhdCB0aGUgZmlyc3QgYmxvY2sgb2YgaXRzZQEgc3RhcnRpbmcgbGVhc2UgcGVyaW9kLiBJZiBhZnRlciwgdGhlbiBpdCB3aWxsIGJlY29tZSBhY3RpdmUgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhpcyBjYWxsLgBsIC0gYF9vcmlnaW5gIGlzIGlycmVsZXZhbnQu/CAtIGBwYXJhX2lkYCBpcyB0aGUgcGFyYWNoYWluIElEIHdob3NlIGNvZGUgd2lsbCBiZSBlbGFib3JhdGVkLhUBIC0gYGNvZGVgIGlzIHRoZSBwcmVpbWFnZSBvZiB0aGUgcmVnaXN0ZXJlZCBgY29kZV9oYXNoYCBvZiBgcGFyYV9pZGAuAAAQU3VkbwABCBBzdWRvBCBwcm9wb3NhbCBQcm9wb3NhbCQ5ASBBdXRoZW50aWNhdGVzIHRoZSBzdWRvIGtleSBhbmQgZGlzcGF0Y2hlcyBhIGZ1bmN0aW9uIGNhbGwgd2l0aCBgUm9vdGAgb3JpZ2luLgDQIFRoZSBkaXNwYXRjaCBvcmlnaW4gZm9yIHRoaXMgY2FsbCBtdXN0IGJlIF9TaWduZWRfLgAsICMgPHdlaWdodD4gIC0gTygxKS5kIC0gTGltaXRlZCBzdG9yYWdlIHJlYWRzLkAgLSBObyBEQiB3cml0ZXMuMCAjIDwvd2VpZ2h0PhxzZXRfa2V5BAxuZXccQWRkcmVzcyR1ASBBdXRoZW50aWNhdGVzIHRoZSBjdXJyZW50IHN1ZG8ga2V5IGFuZCBzZXRzIHRoZSBnaXZlbiBBY2NvdW50SWQgKGBuZXdgKSBhcyB0aGUgbmV3IHN1ZG8ga2V5LgDQIFRoZSBkaXNwYXRjaCBvcmlnaW4gZm9yIHRoaXMgY2FsbCBtdXN0IGJlIF9TaWduZWRfLgAsICMgPHdlaWdodD4gIC0gTygxKS5kIC0gTGltaXRlZCBzdG9yYWdlIHJlYWRzLkQgLSBPbmUgREIgY2hhbmdlLjAgIyA8L3dlaWdodD4AAA==' }; diff --git a/packages/extension-chains/src/types.ts b/packages/extension-chains/src/types.ts index a994d4f6..96be1a0c 100644 --- a/packages/extension-chains/src/types.ts +++ b/packages/extension-chains/src/types.ts @@ -8,7 +8,10 @@ export interface Chain { name: string; genesisHash?: string; meta?: Metadata; + specVersion: number; ss58Format: number; tokenDecimals: number; tokenSymbol: string; + // eslint-disable-next-line @typescript-eslint/no-explicit-any + types: Record; } diff --git a/packages/extension-ui/src/Popup/Signing/Details.tsx b/packages/extension-ui/src/Popup/Signing/Details.tsx index 52203349..154fd609 100644 --- a/packages/extension-ui/src/Popup/Signing/Details.tsx +++ b/packages/extension-ui/src/Popup/Signing/Details.tsx @@ -2,6 +2,7 @@ // This software may be modified and distributed under the terms // of the Apache-2.0 license. See the LICENSE file for details. +import { Chain } from '@polkadot/extension-chains/types'; import { BlockNumber, ExtrinsicEra, ExtrinsicPayload } from '@polkadot/types/interfaces'; import { SignerPayloadJSON } from '@polkadot/types/types'; @@ -9,7 +10,7 @@ import React from 'react'; import styled from 'styled-components'; import fromMetadata from '@polkadot/api-metadata/extrinsics/fromMetadata'; import findChain from '@polkadot/extension-chains'; -import { createType, GenericCall, Metadata } from '@polkadot/types'; +import { createType, GenericCall, getTypeRegistry } from '@polkadot/types'; import { formatNumber } from '@polkadot/util'; interface MethodJson { @@ -25,10 +26,7 @@ interface Props { url: string; } -function renderMethod (data: string, meta?: Metadata | null): React.ReactNode { - let json: MethodJson; - let method: GenericCall; - +function renderMethod (data: string, isDecoded: boolean, chain?: Chain): React.ReactNode { const base = ( method data @@ -36,12 +34,16 @@ function renderMethod (data: string, meta?: Metadata | null): React.ReactNode { ); - if (!meta) { + if (!isDecoded || !chain || !chain.meta) { return base; } + let json: MethodJson; + let method: GenericCall; + try { - GenericCall.injectMethods(fromMetadata(meta)); + getTypeRegistry().register(chain.types); + GenericCall.injectMethods(fromMetadata(chain.meta)); method = new GenericCall(data); json = method.toJSON() as unknown as MethodJson; @@ -110,7 +112,7 @@ function Details ({ className, isDecoded, payload, request, url }: Props): React {formatNumber(tip)} )} - {renderMethod(method, isDecoded ? chain.meta : null)} + {renderMethod(method, isDecoded, chain)} lifetime {renderMortality(era, blockNumber)}