From 33fd1b1c7804859ed10b81a365e28c1fc3163669 Mon Sep 17 00:00:00 2001 From: Jaco Greeff Date: Wed, 27 Nov 2019 19:24:44 +0100 Subject: [PATCH] Support Metadata V9 (#1600) * Metadata v9 definitions * Update stay V5 in V9 * WIP... * Small adjustments * toV9 looks sane ... may work * v9 tests passes * v8 tests pass... will get to overall... not checked * Cleanup type * Spread storage * Missing semi * Cleanup testUtil * Cater for prefix map key generation * Remove DoubleMap wrapper * Remove DoubleMap wrapper * WIP result types not yet operational * Output formatting * Add missing name prop * Move v9 -> v10, v9 only as storage changes (next up) * Support v9 & v10 * Fixup linked maps --- packages/api/src/base/Decorate.ts | 32 +- .../fromMetadata/createFunction.spec.ts | 12 +- .../storage/fromMetadata/createFunction.ts | 145 +- .../Decorated/storage/fromMetadata/index.ts | 4 +- .../storage/fromMetadata/storage.spec.ts | 2 +- .../Decorated/storage/fromMetadata/storage.ts | 4 +- .../storage/fromMetadata/substrate.spec.ts | 14 +- .../storage/fromMetadata/substrate.ts | 6 +- .../src/Metadata/MetadataVersioned.ts | 210 +- .../metadata/src/Metadata/util/testUtil.ts | 4 +- .../src/Metadata/v10/Metadata.spec.ts | 19 + .../src/Metadata/v10/static-substrate.json | 4587 ++++++++++++++++ packages/metadata/src/Metadata/v10/static.ts | 7 + packages/metadata/src/Metadata/v8/toV9.ts | 15 + .../metadata/src/Metadata/v9/Metadata.spec.ts | 19 + .../src/Metadata/v9/static-substrate.json | 4594 +++++++++++++++++ packages/metadata/src/Metadata/v9/static.ts | 7 + packages/metadata/src/Metadata/v9/toV10.ts | 52 + packages/rpc-core/src/formatting.spec.ts | 10 +- .../types/src/codec/create/getTypeClass.ts | 3 - .../types/src/codec/create/getTypeDef.spec.ts | 12 +- packages/types/src/codec/create/getTypeDef.ts | 1 - packages/types/src/codec/create/sanitize.ts | 2 +- packages/types/src/codec/create/types.ts | 1 - packages/types/src/codec/utils/encodeTypes.ts | 1 - packages/types/src/interfaceRegistry.ts | 92 +- .../src/interfaces/metadata/definitions.ts | 101 +- .../types/src/interfaces/metadata/types.ts | 236 +- packages/types/src/primitive/StorageKey.ts | 62 +- .../types/src/scripts/generateTypes/tsDef.ts | 1 - 30 files changed, 9916 insertions(+), 339 deletions(-) create mode 100644 packages/metadata/src/Metadata/v10/Metadata.spec.ts create mode 100644 packages/metadata/src/Metadata/v10/static-substrate.json create mode 100644 packages/metadata/src/Metadata/v10/static.ts create mode 100644 packages/metadata/src/Metadata/v8/toV9.ts create mode 100644 packages/metadata/src/Metadata/v9/Metadata.spec.ts create mode 100644 packages/metadata/src/Metadata/v9/static-substrate.json create mode 100644 packages/metadata/src/Metadata/v9/static.ts create mode 100644 packages/metadata/src/Metadata/v9/toV10.ts diff --git a/packages/api/src/base/Decorate.ts b/packages/api/src/base/Decorate.ts index 5ba8f104d3..3714a5d618 100644 --- a/packages/api/src/base/Decorate.ts +++ b/packages/api/src/base/Decorate.ts @@ -20,7 +20,7 @@ import { map, switchMap } from 'rxjs/operators'; import decorateDerive, { ExactDerive } from '@polkadot/api-derive'; import RpcCore from '@polkadot/rpc-core'; import { WsProvider } from '@polkadot/rpc-provider'; -import { Metadata, Null, u64, TypeRegistry } from '@polkadot/types'; +import { Metadata, Null, TypeRegistry, u64, Vec } from '@polkadot/types'; import Linkage, { LinkageResult } from '@polkadot/types/codec/Linkage'; import { DEFAULT_VERSION as EXTRINSIC_DEFAULT_VERSION } from '@polkadot/types/primitive/Extrinsic/constants'; import { StorageEntry } from '@polkadot/types/primitive/StorageKey'; @@ -255,8 +255,10 @@ export default abstract class Decorate extends Events : [creator, ...args]; // FIXME We probably want to be able to query the full list with non-subs as well - const decorated = this.hasSubscriptions && creator.headKey - ? this.decorateStorageEntryLinked(creator, decorateMethod) + const decorated = this.hasSubscriptions && creator.iterKey + ? creator.meta.type.asMap.kind.isLinkedMap + ? this.decorateStorageLinked(creator, decorateMethod) + : this.decorateStoragePrefixed(creator, decorateMethod) : decorateMethod((...args: any[]): Observable => ( this.hasSubscriptions ? this._rpcCore.state @@ -292,7 +294,7 @@ export default abstract class Decorate extends Events return this.decorateFunctionMeta(creator, decorated) as unknown as QueryableStorageEntry; } - private decorateStorageEntryLinked (creator: StorageEntry, decorateMethod: DecorateMethod): ReturnType> { + private decorateStorageLinked (creator: StorageEntry, decorateMethod: DecorateMethod): ReturnType> { const result: Map]> = new Map(); let subject: BehaviorSubject; let head: Codec | null = null; @@ -355,11 +357,31 @@ export default abstract class Decorate extends Events .subscribeStorage<[[Codec, Linkage]]>([[creator, ...args]]) .pipe(map(([data]): [Codec, Linkage] => data)) : this._rpcCore.state - .subscribeStorage<[LinkageResult]>([creator.headKey]) + .subscribeStorage<[LinkageResult]>([creator.iterKey]) .pipe(switchMap(([key]): Observable => getNext(head = key))) ); } + private decorateStoragePrefixed (creator: StorageEntry, decorateMethod: DecorateMethod): ReturnType> { + const outputType = creator.meta.type.asMap.value.toString(); + + return decorateMethod((...args: any[]): Observable => + args.length + ? this._rpcCore.state + .subscribeStorage<[Codec]>([[creator, ...args]]) + .pipe(map(([data]): Codec => data)) + : this._rpcCore.state + // FIXME This should really be some sort of subscription, so we can get stuff as + // it changes (as of now it is a one-shot query). Not sure how to do this though... + .getKeys(creator.iterKey) + .pipe(switchMap((keys): Observable> => + this._rpcCore.state.subscribeStorage( + keys.map((key) => key.setOutputType(outputType)) + ) + )) + ); + } + protected decorateDeriveRx (decorateMethod: DecorateMethod): DeriveAllSections<'rxjs', ExactDerive> { // Pull in derive from api-derive const derive = decorateDerive(this._rx as ApiInterfaceRx, this._options.derives); diff --git a/packages/metadata/src/Decorated/storage/fromMetadata/createFunction.spec.ts b/packages/metadata/src/Decorated/storage/fromMetadata/createFunction.spec.ts index cc6871c776..28e630548a 100644 --- a/packages/metadata/src/Decorated/storage/fromMetadata/createFunction.spec.ts +++ b/packages/metadata/src/Decorated/storage/fromMetadata/createFunction.spec.ts @@ -18,7 +18,7 @@ describe('createFunction', (): void => { section: 'timestamp', method: 'Now', meta: { type: {} } as any - })() + }, { metaVersion: 8 })() ).toEqual( Uint8Array.from([64, 14, 73, 68, 207, 217, 141, 111, 76, 195, 116, 209, 111, 90, 78, 63, 156]) // Length-prefixed ); @@ -36,7 +36,8 @@ describe('createFunction', (): void => { }, { key: ':auth:len', - skipHashing: true + skipHashing: true, + metaVersion: 8 } ).method ).toEqual('authorityCount'); @@ -56,7 +57,8 @@ describe('createFunction', (): void => { }, { key, - skipHashing: true + skipHashing: true, + metaVersion: 8 } )() ).toEqual( @@ -88,7 +90,7 @@ describe('createFunction', (): void => { } } } as any - }); + }, { metaVersion: 8 }); }); it('should return correct key', (): void => { @@ -120,7 +122,7 @@ describe('createFunction', (): void => { } } } as any - }); + }, { metaVersion: 8 }); // the value of the Null type key does not effect the result expect(u8aToHex(storageFn(['any', [1, 2, 3]]))).toEqual(u8aToHex(storageFn([[1, 2, 3], [1, 2, 3]]))); diff --git a/packages/metadata/src/Decorated/storage/fromMetadata/createFunction.ts b/packages/metadata/src/Decorated/storage/fromMetadata/createFunction.ts index c73f1553a1..670662f4bf 100644 --- a/packages/metadata/src/Decorated/storage/fromMetadata/createFunction.ts +++ b/packages/metadata/src/Decorated/storage/fromMetadata/createFunction.ts @@ -7,13 +7,15 @@ import { Codec, Registry } from '@polkadot/types/types'; import BN from 'bn.js'; import { Compact, U8a, createType, createTypeUnsafe } from '@polkadot/types/codec'; -import { StorageEntry } from '@polkadot/types/primitive/StorageKey'; +import StorageKey, { StorageEntry } from '@polkadot/types/primitive/StorageKey'; import { assert, isNull, isUndefined, stringLowerFirst, stringToU8a, u8aConcat } from '@polkadot/util'; +import { xxhashAsU8a } from '@polkadot/util-crypto'; import getHasher, { HasherFunction } from './getHasher'; export interface CreateItemOptions { key?: string; + metaVersion: number; skipHashing?: boolean; // We don't hash the keys defined in ./substrate.ts } @@ -24,20 +26,21 @@ export interface CreateItemFn { section: string; } +interface IterFn { + (): U8a; + meta: StorageEntryMetadataLatest; +} + type CreateArgType = boolean | string | number | null | BN | Uint8Array | Codec; +const EMPTY_U8A = new Uint8Array([]); const NULL_HASHER = (value: Uint8Array): Uint8Array => value; // with the prefix, method & options, create both the string & raw keys -function createKeys ({ method, prefix }: CreateItemFn, options: CreateItemOptions): [string, Uint8Array] { - const stringKey = options.key +function expandKey ({ method, prefix }: CreateItemFn, options: CreateItemOptions): string { + return options.key ? options.key : `${prefix} ${method}`; - - return [ - stringKey, - stringToU8a(stringKey) - ]; } // get the hashers, the base (and in the case of DoubleMap), the second key @@ -55,45 +58,74 @@ function getHashers ({ meta: { type } }: CreateItemFn): [HasherFunction, HasherF return [getHasher()]; } +// create a base prefixed key +function createPrefixedKey ({ method, prefix }: CreateItemFn): Uint8Array { + return u8aConcat(xxhashAsU8a(prefix, 128), xxhashAsU8a(method, 128)); +} + // create a key for a DoubleMap type -function createKeyDoubleMap (registry: Registry, { meta: { name, type } }: CreateItemFn, rawKey: Uint8Array, args: [CreateArgType, CreateArgType], [hasher, key2Hasher]: [HasherFunction, HasherFunction?]): Uint8Array { +function createKeyDoubleMap (registry: Registry, itemFn: CreateItemFn, stringKey: string, args: [CreateArgType, CreateArgType], [hasher1, hasher2]: [HasherFunction, HasherFunction?], metaVersion: number): Uint8Array { + const { meta: { name, type } } = itemFn; + // since we are passing an almost-unknown through, trust, but verify assert( Array.isArray(args) && !isUndefined(args[0]) && !isNull(args[0]) && !isUndefined(args[1]) && !isNull(args[1]), `${name} is a DoubleMap and requires two arguments` ); - const [key1, key2] = args; - const type1 = type.asDoubleMap.key1.toString(); - const type2 = type.asDoubleMap.key2.toString(); - const param1Encoded = u8aConcat(rawKey, createTypeUnsafe(registry, type1, [key1]).toU8a(true)); - const param1Hashed = hasher(param1Encoded); + // if this fails, we have bigger issues + assert(!isUndefined(hasher2), '2 hashing functions should be defined for DoubleMaps'); - // If this fails it means the getHashers function failed - and we have much bigger issues - const param2Hashed = (key2Hasher as HasherFunction)(createTypeUnsafe(registry, type2, [key2]).toU8a(true)); + const [key1, key2] = args; + const map = type.asDoubleMap; + const val1 = createTypeUnsafe(registry, map.key1.toString(), [key1]).toU8a(true); + const val2 = createTypeUnsafe(registry, map.key2.toString(), [key2]).toU8a(true); // as per createKey, always add the length prefix (underlying it is Bytes) - return Compact.addLengthPrefix(u8aConcat(param1Hashed, param2Hashed)); + return Compact.addLengthPrefix( + metaVersion <= 8 + ? u8aConcat( + hasher1(u8aConcat(stringToU8a(stringKey), val1)), + hasher2(val2) + ) + : u8aConcat( + createPrefixedKey(itemFn), + hasher1(val1), + hasher2(val2) + ) + ); } // create a key for either a map or a plain value -function createKey (registry: Registry, { meta: { name, type } }: CreateItemFn, rawKey: Uint8Array, arg: CreateArgType, hasher: (value: Uint8Array) => Uint8Array): Uint8Array { - let key = rawKey; +function createKey (registry: Registry, itemFn: CreateItemFn, stringKey: string, arg: CreateArgType, hasher: (value: Uint8Array) => Uint8Array, metaVersion: number): Uint8Array { + const { meta: { name, type } } = itemFn; + let key: Uint8Array | undefined; + let param: Uint8Array = EMPTY_U8A; if (type.isMap) { + const map = type.asMap; + assert(!isUndefined(arg) && !isNull(arg), `${name} is a Map and requires one argument`); - const mapType = type.asMap.key.toString(); - const param = createTypeUnsafe(registry, mapType, [arg]).toU8a(); + param = createTypeUnsafe(registry, map.key.toString(), [arg]).toU8a(); - key = u8aConcat(key, param); + // prefix maps are using prefixes to optimize the trie, so the key generation are + // done differently where the prefix/method are hashed separately with only the + // parameter for the key being attached via the hasher + if (map.kind.isPrefixedMap) { + key = u8aConcat(createPrefixedKey(itemFn), hasher(param)); + } } // StorageKey is a Bytes, so is length-prefixed - return Compact.addLengthPrefix(hasher(key)); + return Compact.addLengthPrefix(key || ( + metaVersion <= 8 + ? hasher(u8aConcat(stringToU8a(stringKey), param)) + : u8aConcat(createPrefixedKey(itemFn), param.length ? hasher(param) : EMPTY_U8A) + )); } -// attach the metadata to expsnd to a StorageFunction +// attach the metadata to expand to a StorageFunction function expandWithMeta ({ meta, method, prefix, section }: CreateItemFn, storageFn: StorageEntry): StorageEntry { storageFn.meta = meta; storageFn.method = stringLowerFirst(method); @@ -110,28 +142,41 @@ function expandWithMeta ({ meta, method, prefix, section }: CreateItemFn, storag return storageFn; } -// attch the head key hashing for linked maps -function extendLinkedMap (registry: Registry, { meta: { documentation, name, type } }: CreateItemFn, storageFn: StorageEntry, stringKey: string, hasher: HasherFunction): StorageEntry { - const headHash = new U8a(registry, hasher(`head of ${stringKey}`)); - const headFn: any = (): U8a => - headHash; +function extendHeadMeta (registry: Registry, { meta: { documentation, name, type }, section }: CreateItemFn, { method }: StorageEntry, iterFn: () => U8a): StorageKey { + const map = type.asMap; + const outputType = map.key.toString(); // metadata with a fallback value using the type of the key, the normal // meta fallback only applies to actual entry values, create one for head - headFn.meta = createType(registry, 'StorageEntryMetadataLatest', { + (iterFn as IterFn).meta = createType(registry, 'StorageEntryMetadataLatest', { name, modifier: createType(registry, 'StorageEntryModifierLatest', 1), // required - type: createType(registry, 'StorageEntryTypeLatest', createType(registry, 'PlainTypeLatest', type.asMap.key), 0), - fallback: createType(registry, 'Bytes', createTypeUnsafe(registry, type.asMap.key.toString()).toHex()), + type: createType(registry, 'StorageEntryTypeLatest', createType(registry, 'PlainTypeLatest', map.key), 0), + fallback: createType(registry, 'Bytes', createTypeUnsafe(registry, outputType).toHex()), documentation }); - // here we pass the section/method through as well - these are not on - // the function itself, so specify these explicitly to the constructor - storageFn.headKey = createType(registry, 'StorageKey', headFn, { - method: storageFn.method, - section: `head of ${storageFn.section}` - }); + return createType(registry, 'StorageKey', iterFn, { method, section }); +} + +// attach the head key hashing for linked maps +function extendLinkedMap (registry: Registry, itemFn: CreateItemFn, storageFn: StorageEntry, stringKey: string, hasher: HasherFunction, metaVersion: number): StorageEntry { + const key = metaVersion <= 8 + ? hasher(`head of ${stringKey}`) + : u8aConcat(xxhashAsU8a(itemFn.prefix, 128), xxhashAsU8a(`HeadOf${itemFn.method}`, 128)); + + storageFn.iterKey = extendHeadMeta(registry, itemFn, storageFn, (): U8a => + new U8a(registry, key) + ); + + return storageFn; +} + +// attach the full list hashing for prefixed maps +function extendPrefixedMap (registry: Registry, itemFn: CreateItemFn, storageFn: StorageEntry): StorageEntry { + storageFn.iterKey = extendHeadMeta(registry, itemFn, storageFn, (): U8a => + new U8a(registry, createPrefixedKey(itemFn)) + ); return storageFn; } @@ -146,10 +191,10 @@ function extendLinkedMap (registry: Registry, { meta: { documentation, name, typ * are not known at runtime (from state_getMetadata), they need to be supplied * by us manually at compile time. */ -export default function createFunction (registry: Registry, item: CreateItemFn, options: CreateItemOptions = {}): StorageEntry { - const { meta: { type } } = item; - const [stringKey, rawKey] = createKeys(item, options); - const [hasher, key2Hasher] = getHashers(item); +export default function createFunction (registry: Registry, itemFn: CreateItemFn, options: CreateItemOptions): StorageEntry { + const { meta: { type } } = itemFn; + const stringKey = expandKey(itemFn, options); + const [hasher, key2Hasher] = getHashers(itemFn); // Can only have zero or one argument: // - storage.balances.freeBalance(address) @@ -157,13 +202,19 @@ export default function createFunction (registry: Registry, item: CreateItemFn, // For doublemap queries the params is passed in as an tuple, [key1, key2] const _storageFn = (arg?: CreateArgType | [CreateArgType?, CreateArgType?]): Uint8Array => type.isDoubleMap - ? createKeyDoubleMap(registry, item, rawKey, arg as [CreateArgType, CreateArgType], [hasher, key2Hasher]) - : createKey(registry, item, rawKey, arg as CreateArgType, options.skipHashing ? NULL_HASHER : hasher); + ? createKeyDoubleMap(registry, itemFn, stringKey, arg as [CreateArgType, CreateArgType], [hasher, key2Hasher], options.metaVersion) + : createKey(registry, itemFn, stringKey, arg as CreateArgType, options.skipHashing ? NULL_HASHER : hasher, options.metaVersion); - const storageFn = expandWithMeta(item, _storageFn as StorageEntry); + const storageFn = expandWithMeta(itemFn, _storageFn as StorageEntry); - if (type.isMap && type.asMap.linked.isTrue) { - extendLinkedMap(registry, item, storageFn, stringKey, hasher); + if (type.isMap) { + const map = type.asMap; + + if (map.kind.isLinkedMap) { + extendLinkedMap(registry, itemFn, storageFn, stringKey, hasher, options.metaVersion); + } else if (map.kind.isPrefixedMap) { + extendPrefixedMap(registry, itemFn, storageFn); + } } return storageFn; diff --git a/packages/metadata/src/Decorated/storage/fromMetadata/index.ts b/packages/metadata/src/Decorated/storage/fromMetadata/index.ts index fddf8e20d5..ff5292a60f 100644 --- a/packages/metadata/src/Decorated/storage/fromMetadata/index.ts +++ b/packages/metadata/src/Decorated/storage/fromMetadata/index.ts @@ -36,11 +36,11 @@ export default function fromMetadata (registry: Registry, metadata: Metadata): S method, prefix, section - }); + }, { metaVersion: metadata.version }); return newModule; }, {} as unknown as ModuleStorage); return result; - }, { ...getStorage(registry) }); + }, { ...getStorage(registry, metadata.version) }); } diff --git a/packages/metadata/src/Decorated/storage/fromMetadata/storage.spec.ts b/packages/metadata/src/Decorated/storage/fromMetadata/storage.spec.ts index 3b6bfca1bb..cfd589f05d 100644 --- a/packages/metadata/src/Decorated/storage/fromMetadata/storage.spec.ts +++ b/packages/metadata/src/Decorated/storage/fromMetadata/storage.spec.ts @@ -8,7 +8,7 @@ import getStorage from './storage'; describe('storage', (): void => { const registry = new TypeRegistry(); - const storage = getStorage(registry); + const storage = getStorage(registry, 8); it('should return well known keys', (): void => { expect(typeof storage.substrate).toBe('object'); diff --git a/packages/metadata/src/Decorated/storage/fromMetadata/storage.ts b/packages/metadata/src/Decorated/storage/fromMetadata/storage.ts index 59807b9449..e8b4ad9d04 100644 --- a/packages/metadata/src/Decorated/storage/fromMetadata/storage.ts +++ b/packages/metadata/src/Decorated/storage/fromMetadata/storage.ts @@ -8,12 +8,12 @@ import { Storage } from '../../types'; import * as substrate from './substrate'; -export default function getStorage (registry: Registry): Storage { +export default function getStorage (registry: Registry, metaVersion: number): Storage { return { substrate: Object .entries(substrate) .reduce((storage: Record, [key, fn]): Record => { - (storage as any)[key] = fn(registry); + (storage as any)[key] = fn(registry, metaVersion); return storage; }, {}) diff --git a/packages/metadata/src/Decorated/storage/fromMetadata/substrate.spec.ts b/packages/metadata/src/Decorated/storage/fromMetadata/substrate.spec.ts index c76bc5741d..bffa10ccf0 100644 --- a/packages/metadata/src/Decorated/storage/fromMetadata/substrate.spec.ts +++ b/packages/metadata/src/Decorated/storage/fromMetadata/substrate.spec.ts @@ -12,32 +12,32 @@ describe('substrate', (): void => { // @deprecated: The ':auth:' (authorityPrefix) and ':auth:len' (authorityCount) storage keys // have been removed in https://github.com/paritytech/substrate/pull/2802 it('authorityCount should return the correct storage key', (): void => { - expect(authorityCount(registry)()).toEqual(Uint8Array.from([36, 58, 97, 117, 116, 104, 58, 108, 101, 110])); // Length-prefixed + expect(authorityCount(registry, 8)()).toEqual(Uint8Array.from([36, 58, 97, 117, 116, 104, 58, 108, 101, 110])); // Length-prefixed }); it('authorityPrefix should return the correct storage key', (): void => { - expect(authorityPrefix(registry)()).toEqual(Uint8Array.from([24, 58, 97, 117, 116, 104, 58])); // Length-prefixed + expect(authorityPrefix(registry, 8)()).toEqual(Uint8Array.from([24, 58, 97, 117, 116, 104, 58])); // Length-prefixed }); it('changesTrieConfig should return the correct storage key', (): void => { - expect(changesTrieConfig(registry)()).toEqual(Uint8Array.from([52, 58, 99, 104, 97, 110, 103, 101, 115, 95, 116, 114, 105, 101])); // Length-prefixed + expect(changesTrieConfig(registry, 8)()).toEqual(Uint8Array.from([52, 58, 99, 104, 97, 110, 103, 101, 115, 95, 116, 114, 105, 101])); // Length-prefixed }); it('childStorageKeyPrefix should return the correct storage key', (): void => { - expect(childStorageKeyPrefix(registry)()).toEqual(Uint8Array.from([60, 58, 99, 104, 105, 108, 100, 95, 115, 116, 111, 114, 97, 103, 101, 58])); // Length-prefixed + expect(childStorageKeyPrefix(registry, 8)()).toEqual(Uint8Array.from([60, 58, 99, 104, 105, 108, 100, 95, 115, 116, 111, 114, 97, 103, 101, 58])); // Length-prefixed }); it('code should return the correct storage key', (): void => { - expect(code(registry)()).toEqual(Uint8Array.from([20, 58, 99, 111, 100, 101])); // Length-prefixed + expect(code(registry, 8)()).toEqual(Uint8Array.from([20, 58, 99, 111, 100, 101])); // Length-prefixed }); it('extrinsicIndex should return the correct storage key', (): void => { - expect(extrinsicIndex(registry)()).toEqual( + expect(extrinsicIndex(registry, 8)()).toEqual( Uint8Array.from([64, 58, 101, 120, 116, 114, 105, 110, 115, 105, 99, 95, 105, 110, 100, 101, 120]) // Length-prefixed ); }); it('heapPages should return the correct storage key', (): void => { - expect(heapPages(registry)()).toEqual(Uint8Array.from([40, 58, 104, 101, 97, 112, 112, 97, 103, 101, 115])); // Length-prefixed + expect(heapPages(registry, 8)()).toEqual(Uint8Array.from([40, 58, 104, 101, 97, 112, 112, 97, 103, 101, 115])); // Length-prefixed }); }); diff --git a/packages/metadata/src/Decorated/storage/fromMetadata/substrate.ts b/packages/metadata/src/Decorated/storage/fromMetadata/substrate.ts index 0de2d88bff..cd262c2561 100644 --- a/packages/metadata/src/Decorated/storage/fromMetadata/substrate.ts +++ b/packages/metadata/src/Decorated/storage/fromMetadata/substrate.ts @@ -16,8 +16,8 @@ interface SubstrateMetadata { } // Small helper function to factorize code on this page. -function createRuntimeFunction (method: string, key: string, { documentation, type }: SubstrateMetadata): (registry: Registry) => StorageEntry { - return (registry: Registry): StorageEntry => +function createRuntimeFunction (method: string, key: string, { documentation, type }: SubstrateMetadata): (registry: Registry, metaVersion: number) => StorageEntry { + return (registry: Registry, metaVersion: number): StorageEntry => createFunction(registry, { meta: { documentation: createType(registry, 'Vec', [documentation]), @@ -28,7 +28,7 @@ function createRuntimeFunction (method: string, key: string, { documentation, ty method, prefix: 'Substrate', section: 'substrate' - }, { key, skipHashing: true }); + }, { key, metaVersion, skipHashing: true }); } // @deprecated: The ':auth:' (authorityPrefix) and ':auth:len' (authorityCount) storage keys diff --git a/packages/metadata/src/Metadata/MetadataVersioned.ts b/packages/metadata/src/Metadata/MetadataVersioned.ts index aa2b3cddd7..b217909897 100644 --- a/packages/metadata/src/Metadata/MetadataVersioned.ts +++ b/packages/metadata/src/Metadata/MetadataVersioned.ts @@ -2,13 +2,12 @@ // This software may be modified and distributed under the terms // of the Apache-2.0 license. See the LICENSE file for details. -import { MetadataLatest, MetadataV0, MetadataV1, MetadataV2, MetadataV3, MetadataV4, MetadataV5, MetadataV6, MetadataV7, MetadataV8 } from '@polkadot/types/interfaces/metadata'; +import { MetadataAll, MetadataLatest, MetadataV0, MetadataV1, MetadataV2, MetadataV3, MetadataV4, MetadataV5, MetadataV6, MetadataV7, MetadataV8, MetadataV9, MetadataV10 } from '@polkadot/types/interfaces/metadata'; import { Registry } from '@polkadot/types/types'; -import { assert } from '@polkadot/util'; - -import Enum from '@polkadot/types/codec/Enum'; +import { createType } from '@polkadot/types/codec/create/createType'; import Struct from '@polkadot/types/codec/Struct'; +import { assert } from '@polkadot/util'; import MagicNumber from './MagicNumber'; import v0ToV1 from './v0/toV1'; @@ -19,178 +18,13 @@ import v4ToV5 from './v4/toV5'; import v5ToV6 from './v5/toV6'; import v6ToV7 from './v6/toV7'; import v7ToV8 from './v7/toV8'; +import v8ToV9 from './v8/toV9'; +import v9ToV10 from './v9/toV10'; import { getUniqTypes, toCallsOnly } from './util'; -type MetaMapped = MetadataV0 | MetadataV1 | MetadataV2 | MetadataV3 | MetadataV4 | MetadataV5 | MetadataV6 | MetadataV7; -type MetaVersions = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8; -type MetaAsX = 'asV0' | 'asV1' | 'asV2' | 'asV3' | 'asV4' | 'asV5' | 'asV6' | 'asV7'; - -class MetadataEnum extends Enum { - constructor (registry: Registry, value?: any, index?: number) { - super(registry, { - V0: 'MetadataV0', // once rolled-out, can replace this with MetadataDeprecated - V1: 'MetadataV1', // once rolled-out, can replace this with MetadataDeprecated - V2: 'MetadataV2', // once rolled-out, can replace this with MetadataDeprecated - V3: 'MetadataV3', // once rolled-out, can replace this with MetadataDeprecated - V4: 'MetadataV4', // once rolled-out, can replace this with MetadataDeprecated - V5: 'MetadataV5', // once rolled-out, can replace this with MetadataDeprecated - V6: 'MetadataV6', // once rolled-out, can replace this with MetadataDeprecated - V7: 'MetadataV7', // once rolled-out, can replace this with MetadataDeprecated - V8: 'MetadataV8' - }, value, index); - } - - /** - * @description Returns the wrapped values as a V0 object - */ - public get asV0 (): MetadataV0 { - assert(this.isV0, `Cannot convert '${this.type}' via asV0`); - - return this.value as MetadataV0; - } - - /** - * @description Returns the wrapped values as a V1 object - */ - public get asV1 (): MetadataV1 { - assert(this.isV1, `Cannot convert '${this.type}' via asV1`); - - return this.value as MetadataV1; - } - - /** - * @description Returns the wrapped values as a V2 object - */ - public get asV2 (): MetadataV2 { - assert(this.isV2, `Cannot convert '${this.type}' via asV2`); - - return this.value as MetadataV2; - } - - /** - * @description Returns the wrapped values as a V3 object - */ - public get asV3 (): MetadataV3 { - assert(this.isV3, `Cannot convert '${this.type}' via asV3`); - - return this.value as MetadataV3; - } - - /** - * @description Returns the wrapped values as a V4 object - */ - public get asV4 (): MetadataV4 { - assert(this.isV4, `Cannot convert '${this.type}' via asV4`); - - return this.value as MetadataV4; - } - - /** - * @description Returns the wrapped values as a V5 object - */ - public get asV5 (): MetadataV5 { - assert(this.isV5, `Cannot convert '${this.type}' via asV5`); - - return this.value as MetadataV5; - } - - /** - * @description Returns the wrapped values as a V6 object - */ - public get asV6 (): MetadataV6 { - assert(this.isV6, `Cannot convert '${this.type}' via asV6`); - - return this.value as MetadataV6; - } - - /** - * @description Returns the wrapped values as a V7 object - */ - public get asV7 (): MetadataV7 { - assert(this.isV7, `Cannot convert '${this.type}' via asV7`); - - return this.value as MetadataV7; - } - - /** - * @description Returns the wrapped values as a V8 object - */ - public get asV8 (): MetadataV8 { - assert(this.isV8, `Cannot convert '${this.type}' via asV8`); - - return this.value as MetadataV8; - } - - /** - * @description `true` if Deprecated - */ - public get isDeprecated (): boolean { - return this.type === 'MetadataDeprectated'; - } - - /** - * @description `true` if V0 - */ - public get isV0 (): boolean { - return this.type === 'V0'; - } - - /** - * @description `true` if V1 - */ - public get isV1 (): boolean { - return this.type === 'V1'; - } - - /** - * @description `true` if V2 - */ - public get isV2 (): boolean { - return this.type === 'V2'; - } - - /** - * @description `true` if V3 - */ - public get isV3 (): boolean { - return this.type === 'V3'; - } - - /** - * @description `true` if V4 - */ - public get isV4 (): boolean { - return this.type === 'V4'; - } - - /** - * @description `true` if V5 - */ - public get isV5 (): boolean { - return this.type === 'V5'; - } - - /** - * @description `true` if V6 - */ - public get isV6 (): boolean { - return this.type === 'V6'; - } - - /** - * @description `true` if V7 - */ - public get isV7 (): boolean { - return this.type === 'V7'; - } - - /** - * @description `true` if V8 - */ - public get isV8 (): boolean { - return this.type === 'V8'; - } -} +type MetaMapped = MetadataV0 | MetadataV1 | MetadataV2 | MetadataV3 | MetadataV4 | MetadataV5 | MetadataV6 | MetadataV7 | MetadataV8 | MetadataV9 | MetadataV10; +type MetaVersions = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10; +type MetaAsX = 'asV0' | 'asV1' | 'asV2' | 'asV3' | 'asV4' | 'asV5' | 'asV6' | 'asV7' | 'asV8' | 'asV9' | 'asV10'; /** * @name MetadataVersioned @@ -203,7 +37,7 @@ export default class MetadataVersioned extends Struct { constructor (registry: Registry, value?: any) { super(registry, { magicNumber: MagicNumber, - metadata: MetadataEnum + metadata: 'MetadataAll' }, value); registry.setMetadata(this); @@ -216,8 +50,8 @@ export default class MetadataVersioned extends Struct { } private getVersion (version: MetaVersions, fromPrev: (registry: Registry, input: F) => T): T { - const asCurr: MetaAsX = `asV${version}` as any; - const asPrev: MetaAsX = `asV${version - 1}` as any; + const asCurr = `asV${version}` as MetaAsX; + const asPrev = `asV${version - 1}` as MetaAsX; if (this.assertVersion(version)) { return this.metadata[asCurr] as T; @@ -236,7 +70,7 @@ export default class MetadataVersioned extends Struct { public get asCallsOnly (): MetadataVersioned { return new MetadataVersioned(this.registry, { magicNumber: this.magicNumber, - metadata: new MetadataEnum(this.registry, toCallsOnly(this.registry, this.asLatest), this.version) + metadata: createType(this.registry, 'MetadataAll', toCallsOnly(this.registry, this.asLatest), this.version) }); } @@ -305,11 +139,25 @@ export default class MetadataVersioned extends Struct { return this.getVersion(8, v7ToV8); } + /** + * @description Returns the wrapped values as a V9 object + */ + public get asV9 (): MetadataV9 { + return this.getVersion(9, v8ToV9); + } + + /** + * @description Returns the wrapped values as a V10 object + */ + public get asV10 (): MetadataV10 { + return this.getVersion(10, v9ToV10); + } + /** * @description Returns the wrapped values as a latest version object */ public get asLatest (): MetadataLatest { - return this.asV8; + return this.asV10; } /** @@ -322,8 +170,8 @@ export default class MetadataVersioned extends Struct { /** * @description the metadata wrapped */ - private get metadata (): MetadataEnum { - return this.get('metadata') as MetadataEnum; + private get metadata (): MetadataAll { + return this.get('metadata') as MetadataAll; } /** diff --git a/packages/metadata/src/Metadata/util/testUtil.ts b/packages/metadata/src/Metadata/util/testUtil.ts index 62f81ef9e8..5db7d04c68 100644 --- a/packages/metadata/src/Metadata/util/testUtil.ts +++ b/packages/metadata/src/Metadata/util/testUtil.ts @@ -36,7 +36,7 @@ export function decodeLatestSubstrate (registry: Registry * unique types. */ export function toLatest (registry: Registry, version: number, rpcData: string): void { - it(`converts v${version} to v8`, (): void => { + it(`converts v${version} to latest`, (): void => { const metadata = new Metadata(registry, rpcData)[`asV${version}` as keyof Metadata]; const metadataLatest = new Metadata(registry, rpcData).asLatest; @@ -60,7 +60,7 @@ export function defaultValues (registry: Registry, rpcData: string): void { .forEach((mod): void => { mod.storage.unwrap().items.forEach(({ fallback, name, type }): void => { const inner = unwrapStorageType(type); - const location = `${mod.name}.${name}: type ${inner}`; + const location = `${mod.name}.${name}: ${inner}`; it(`creates default types for ${location}`, (): void => { expect( diff --git a/packages/metadata/src/Metadata/v10/Metadata.spec.ts b/packages/metadata/src/Metadata/v10/Metadata.spec.ts new file mode 100644 index 0000000000..6a342a6df7 --- /dev/null +++ b/packages/metadata/src/Metadata/v10/Metadata.spec.ts @@ -0,0 +1,19 @@ +// Copyright 2017-2019 @polkadot/metadata authors & contributors +// This software may be modified and distributed under the terms +// of the Apache-2.0 license. See the LICENSE file for details. + +import { TypeRegistry } from '@polkadot/types'; + +import substrateJson from './static-substrate.json'; +import substrateData from './static'; +import { decodeLatestSubstrate, defaultValues, toLatest } from '../util/testUtil'; + +describe('MetadataV10 (substrate)', (): void => { + const registry = new TypeRegistry(); + + decodeLatestSubstrate(registry, 10, substrateData, substrateJson); + + toLatest(registry, 10, substrateData); + + defaultValues(registry, substrateData); +}); diff --git a/packages/metadata/src/Metadata/v10/static-substrate.json b/packages/metadata/src/Metadata/v10/static-substrate.json new file mode 100644 index 0000000000..a6f6b60dc8 --- /dev/null +++ b/packages/metadata/src/Metadata/v10/static-substrate.json @@ -0,0 +1,4587 @@ +{ + "magicNumber": 1635018093, + "metadata": { + "V10": { + "modules": [ + { + "name": "System", + "storage": { + "prefix": "System", + "items": [ + { + "name": "AccountNonce", + "modifier": 1, + "type": { + "Map": { + "hasher": "Blake2_256", + "key": "AccountId", + "value": "Index", + "kind": 0 + } + }, + "fallback": "0x00000000", + "documentation": [ + " Extrinsics nonce for accounts." + ] + }, + { + "name": "ExtrinsicCount", + "modifier": 0, + "type": { + "Plain": "u32" + }, + "fallback": "0x00", + "documentation": [ + " Total extrinsics count for the current block." + ] + }, + { + "name": "AllExtrinsicsWeight", + "modifier": 0, + "type": { + "Plain": "Weight" + }, + "fallback": "0x00", + "documentation": [ + " Total weight for all extrinsics put together, for the current block." + ] + }, + { + "name": "AllExtrinsicsLen", + "modifier": 0, + "type": { + "Plain": "u32" + }, + "fallback": "0x00", + "documentation": [ + " Total length (in bytes) for all extrinsics put together, for the current block." + ] + }, + { + "name": "BlockHash", + "modifier": 1, + "type": { + "Map": { + "hasher": "Blake2_256", + "key": "BlockNumber", + "value": "Hash", + "kind": 0 + } + }, + "fallback": "0x0000000000000000000000000000000000000000000000000000000000000000", + "documentation": [ + " Map of block numbers to block hashes." + ] + }, + { + "name": "ExtrinsicData", + "modifier": 1, + "type": { + "Map": { + "hasher": "Blake2_256", + "key": "u32", + "value": "Bytes", + "kind": 0 + } + }, + "fallback": "0x00", + "documentation": [ + " Extrinsics data for the current block (maps an extrinsic's index to its data)." + ] + }, + { + "name": "Number", + "modifier": 1, + "type": { + "Plain": "BlockNumber" + }, + "fallback": "0x00000000", + "documentation": [ + " The current block number being processed. Set by `execute_block`." + ] + }, + { + "name": "ParentHash", + "modifier": 1, + "type": { + "Plain": "Hash" + }, + "fallback": "0x0000000000000000000000000000000000000000000000000000000000000000", + "documentation": [ + " Hash of the previous block." + ] + }, + { + "name": "ExtrinsicsRoot", + "modifier": 1, + "type": { + "Plain": "Hash" + }, + "fallback": "0x0000000000000000000000000000000000000000000000000000000000000000", + "documentation": [ + " Extrinsics root of the current block, also part of the block header." + ] + }, + { + "name": "Digest", + "modifier": 1, + "type": { + "Plain": "DigestOf" + }, + "fallback": "0x00", + "documentation": [ + " Digest of the current block, also part of the block header." + ] + }, + { + "name": "Events", + "modifier": 1, + "type": { + "Plain": "Vec" + }, + "fallback": "0x00", + "documentation": [ + " Events deposited for the current block." + ] + }, + { + "name": "EventCount", + "modifier": 1, + "type": { + "Plain": "EventIndex" + }, + "fallback": "0x00000000", + "documentation": [ + " The number of events in the `Events` list." + ] + }, + { + "name": "EventTopics", + "modifier": 1, + "type": { + "DoubleMap": { + "hasher": "Blake2_256", + "key1": "Null", + "key2": "Hash", + "value": "Vec<(BlockNumber,EventIndex)>", + "key2Hasher": "Blake2_256" + } + }, + "fallback": "0x00", + "documentation": [ + " Mapping between a topic (represented by T::Hash) and a vector of indexes", + " of events in the `>` list.", + "", + " The first key serves no purpose. This field is declared as double_map just", + " for convenience of using `remove_prefix`.", + "", + " All topic vectors have deterministic storage locations depending on the topic. This", + " allows light-clients to leverage the changes trie storage tracking mechanism and", + " in case of changes fetch the list of events of interest.", + "", + " The value has the type `(T::BlockNumber, EventIndex)` because if we used only just", + " the `EventIndex` then in case if the topic has the same contents on the next block", + " no notification will be triggered thus the event might be lost." + ] + } + ] + }, + "calls": [ + { + "name": "fill_block", + "args": [], + "documentation": [ + " A big dispatch that will disallow any other transaction to be included." + ] + }, + { + "name": "remark", + "args": [ + { + "name": "_remark", + "type": "Bytes" + } + ], + "documentation": [ + " Make some on-chain remark." + ] + }, + { + "name": "set_heap_pages", + "args": [ + { + "name": "pages", + "type": "u64" + } + ], + "documentation": [ + " Set the number of pages in the WebAssembly environment's heap." + ] + }, + { + "name": "set_code", + "args": [ + { + "name": "new", + "type": "Bytes" + } + ], + "documentation": [ + " Set the new code." + ] + }, + { + "name": "set_storage", + "args": [ + { + "name": "items", + "type": "Vec" + } + ], + "documentation": [ + " Set some items of storage." + ] + }, + { + "name": "kill_storage", + "args": [ + { + "name": "keys", + "type": "Vec" + } + ], + "documentation": [ + " Kill some items from storage." + ] + }, + { + "name": "kill_prefix", + "args": [ + { + "name": "prefix", + "type": "Key" + } + ], + "documentation": [ + " Kill all storage items with a key that starts with the given prefix." + ] + } + ], + "events": [ + { + "name": "ExtrinsicSuccess", + "args": [], + "documentation": [ + " An extrinsic completed successfully." + ] + }, + { + "name": "ExtrinsicFailed", + "args": [ + "DispatchError" + ], + "documentation": [ + " An extrinsic failed." + ] + } + ], + "constants": [], + "errors": [ + { + "name": "BadSignature", + "documentation": [] + }, + { + "name": "BlockFull", + "documentation": [] + }, + { + "name": "RequireSignedOrigin", + "documentation": [] + }, + { + "name": "RequireRootOrigin", + "documentation": [] + }, + { + "name": "RequireNoOrigin", + "documentation": [] + } + ] + }, + { + "name": "Utility", + "storage": null, + "calls": [ + { + "name": "batch", + "args": [ + { + "name": "calls", + "type": "Vec" + } + ], + "documentation": [ + " Send a batch of dispatch calls (only root)." + ] + } + ], + "events": [ + { + "name": "BatchExecuted", + "args": [ + "Vec>" + ], + "documentation": [] + } + ], + "constants": [], + "errors": [] + }, + { + "name": "Babe", + "storage": { + "prefix": "Babe", + "items": [ + { + "name": "EpochIndex", + "modifier": 1, + "type": { + "Plain": "u64" + }, + "fallback": "0x0000000000000000", + "documentation": [ + " Current epoch index." + ] + }, + { + "name": "Authorities", + "modifier": 1, + "type": { + "Plain": "Vec<(AuthorityId,BabeAuthorityWeight)>" + }, + "fallback": "0x00", + "documentation": [ + " Current epoch authorities." + ] + }, + { + "name": "GenesisSlot", + "modifier": 1, + "type": { + "Plain": "u64" + }, + "fallback": "0x0000000000000000", + "documentation": [ + " The slot at which the first epoch actually started. This is 0", + " until the first block of the chain." + ] + }, + { + "name": "CurrentSlot", + "modifier": 1, + "type": { + "Plain": "u64" + }, + "fallback": "0x0000000000000000", + "documentation": [ + " Current slot number." + ] + }, + { + "name": "Randomness", + "modifier": 1, + "type": { + "Plain": "[u8;32]" + }, + "fallback": "0x0000000000000000000000000000000000000000000000000000000000000000", + "documentation": [ + " The epoch randomness for the *current* epoch.", + "", + " # Security", + "", + " This MUST NOT be used for gambling, as it can be influenced by a", + " malicious validator in the short term. It MAY be used in many", + " cryptographic protocols, however, so long as one remembers that this", + " (like everything else on-chain) it is public. For example, it can be", + " used where a number is needed that cannot have been chosen by an", + " adversary, for purposes such as public-coin zero-knowledge proofs." + ] + }, + { + "name": "NextRandomness", + "modifier": 1, + "type": { + "Plain": "[u8;32]" + }, + "fallback": "0x0000000000000000000000000000000000000000000000000000000000000000", + "documentation": [ + " Next epoch randomness." + ] + }, + { + "name": "SegmentIndex", + "modifier": 1, + "type": { + "Plain": "u32" + }, + "fallback": "0x00000000", + "documentation": [ + " Randomness under construction.", + "", + " We make a tradeoff between storage accesses and list length.", + " We store the under-construction randomness in segments of up to", + " `UNDER_CONSTRUCTION_SEGMENT_LENGTH`.", + "", + " Once a segment reaches this length, we begin the next one.", + " We reset all segments and return to `0` at the beginning of every", + " epoch." + ] + }, + { + "name": "UnderConstruction", + "modifier": 1, + "type": { + "Map": { + "hasher": "Blake2_256", + "key": "u32", + "value": "Vec<[u8;32]>", + "kind": 0 + } + }, + "fallback": "0x00", + "documentation": [] + }, + { + "name": "Initialized", + "modifier": 0, + "type": { + "Plain": "MaybeVrf" + }, + "fallback": "0x00", + "documentation": [ + " Temporary value (cleared at block finalization) which is `Some`", + " if per-block initialization has already been called for current block." + ] + } + ] + }, + "calls": [], + "events": null, + "constants": [ + { + "name": "EpochDuration", + "type": "u64", + "value": "0xc800000000000000", + "documentation": [ + " The number of **slots** that an epoch takes. We couple sessions to", + " epochs, i.e. we start a new session once the new epoch begins." + ] + }, + { + "name": "ExpectedBlockTime", + "type": "Moment", + "value": "0xb80b000000000000", + "documentation": [ + " The expected average block time at which BABE should be creating", + " blocks. Since BABE is probabilistic it is not trivial to figure out", + " what the expected average block time should be based on the slot", + " duration and the security parameter `c` (where `1 - c` represents", + " the probability of a slot being empty)." + ] + } + ], + "errors": [] + }, + { + "name": "Timestamp", + "storage": { + "prefix": "Timestamp", + "items": [ + { + "name": "Now", + "modifier": 1, + "type": { + "Plain": "Moment" + }, + "fallback": "0x0000000000000000", + "documentation": [ + " Current time for the current block." + ] + }, + { + "name": "DidUpdate", + "modifier": 1, + "type": { + "Plain": "bool" + }, + "fallback": "0x00", + "documentation": [ + " Did the timestamp get updated in this block?" + ] + } + ] + }, + "calls": [ + { + "name": "set", + "args": [ + { + "name": "now", + "type": "Compact" + } + ], + "documentation": [ + " Set the current time.", + "", + " This call should be invoked exactly once per block. It will panic at the finalization", + " phase, if this call hasn't been invoked by that time.", + "", + " The timestamp should be greater than the previous one by the amount specified by", + " `MinimumPeriod`.", + "", + " The dispatch origin for this call must be `Inherent`." + ] + } + ], + "events": null, + "constants": [ + { + "name": "MinimumPeriod", + "type": "Moment", + "value": "0xdc05000000000000", + "documentation": [ + " The minimum period between blocks. Beware that this is different to the *expected* period", + " that the block production apparatus provides. Your chosen consensus system will generally", + " work with this to determine a sensible block time. e.g. For Aura, it will be double this", + " period on default settings." + ] + } + ], + "errors": [] + }, + { + "name": "Authorship", + "storage": { + "prefix": "Authorship", + "items": [ + { + "name": "Uncles", + "modifier": 1, + "type": { + "Plain": "Vec" + }, + "fallback": "0x00", + "documentation": [ + " Uncles" + ] + }, + { + "name": "Author", + "modifier": 0, + "type": { + "Plain": "AccountId" + }, + "fallback": "0x00", + "documentation": [ + " Author of current block." + ] + }, + { + "name": "DidSetUncles", + "modifier": 1, + "type": { + "Plain": "bool" + }, + "fallback": "0x00", + "documentation": [ + " Whether uncles were already set in this block." + ] + } + ] + }, + "calls": [ + { + "name": "set_uncles", + "args": [ + { + "name": "new_uncles", + "type": "Vec
" + } + ], + "documentation": [ + " Provide a set of uncles." + ] + } + ], + "events": null, + "constants": [], + "errors": [] + }, + { + "name": "Indices", + "storage": { + "prefix": "Indices", + "items": [ + { + "name": "NextEnumSet", + "modifier": 1, + "type": { + "Plain": "AccountIndex" + }, + "fallback": "0x00000000", + "documentation": [ + " The next free enumeration set." + ] + }, + { + "name": "EnumSet", + "modifier": 1, + "type": { + "Map": { + "hasher": "Blake2_256", + "key": "AccountIndex", + "value": "Vec", + "kind": 0 + } + }, + "fallback": "0x00", + "documentation": [ + " The enumeration sets." + ] + } + ] + }, + "calls": [], + "events": [ + { + "name": "NewAccountIndex", + "args": [ + "AccountId", + "AccountIndex" + ], + "documentation": [ + " A new account index was assigned.", + "", + " This event is not triggered when an existing index is reassigned", + " to another `AccountId`." + ] + } + ], + "constants": [], + "errors": [] + }, + { + "name": "Balances", + "storage": { + "prefix": "Balances", + "items": [ + { + "name": "TotalIssuance", + "modifier": 1, + "type": { + "Plain": "Balance" + }, + "fallback": "0x00000000000000000000000000000000", + "documentation": [ + " The total units issued in the system." + ] + }, + { + "name": "Vesting", + "modifier": 0, + "type": { + "Map": { + "hasher": "Blake2_256", + "key": "AccountId", + "value": "VestingSchedule", + "kind": 0 + } + }, + "fallback": "0x00", + "documentation": [ + " Information regarding the vesting of a given account." + ] + }, + { + "name": "FreeBalance", + "modifier": 1, + "type": { + "Map": { + "hasher": "Blake2_256", + "key": "AccountId", + "value": "Balance", + "kind": 0 + } + }, + "fallback": "0x00000000000000000000000000000000", + "documentation": [ + " The 'free' balance of a given account.", + "", + " This is the only balance that matters in terms of most operations on tokens. It", + " alone is used to determine the balance when in the contract execution environment. When this", + " balance falls below the value of `ExistentialDeposit`, then the 'current account' is", + " deleted: specifically `FreeBalance`. Further, the `OnFreeBalanceZero` callback", + " is invoked, giving a chance to external modules to clean up data associated with", + " the deleted account.", + "", + " `system::AccountNonce` is also deleted if `ReservedBalance` is also zero (it also gets", + " collapsed to zero if it ever becomes less than `ExistentialDeposit`." + ] + }, + { + "name": "ReservedBalance", + "modifier": 1, + "type": { + "Map": { + "hasher": "Blake2_256", + "key": "AccountId", + "value": "Balance", + "kind": 0 + } + }, + "fallback": "0x00000000000000000000000000000000", + "documentation": [ + " The amount of the balance of a given account that is externally reserved; this can still get", + " slashed, but gets slashed last of all.", + "", + " This balance is a 'reserve' balance that other subsystems use in order to set aside tokens", + " that are still 'owned' by the account holder, but which are suspendable.", + "", + " When this balance falls below the value of `ExistentialDeposit`, then this 'reserve account'", + " is deleted: specifically, `ReservedBalance`.", + "", + " `system::AccountNonce` is also deleted if `FreeBalance` is also zero (it also gets", + " collapsed to zero if it ever becomes less than `ExistentialDeposit`.)" + ] + }, + { + "name": "Locks", + "modifier": 1, + "type": { + "Map": { + "hasher": "Blake2_256", + "key": "AccountId", + "value": "Vec", + "kind": 0 + } + }, + "fallback": "0x00", + "documentation": [ + " Any liquidity locks on some account balances." + ] + } + ] + }, + "calls": [ + { + "name": "transfer", + "args": [ + { + "name": "dest", + "type": "Address" + }, + { + "name": "value", + "type": "Compact" + } + ], + "documentation": [ + " Transfer some liquid free balance to another account.", + "", + " `transfer` will set the `FreeBalance` of the sender and receiver.", + " It will decrease the total issuance of the system by the `TransferFee`.", + " If the sender's account is below the existential deposit as a result", + " of the transfer, the account will be reaped.", + "", + " The dispatch origin for this call must be `Signed` by the transactor.", + "", + " # ", + " - Dependent on arguments but not critical, given proper implementations for", + " input config types. See related functions below.", + " - It contains a limited number of reads and writes internally and no complex computation.", + "", + " Related functions:", + "", + " - `ensure_can_withdraw` is always called internally but has a bounded complexity.", + " - Transferring balances to accounts that did not exist before will cause", + " `T::OnNewAccount::on_new_account` to be called.", + " - Removing enough funds from an account will trigger", + " `T::DustRemoval::on_unbalanced` and `T::OnFreeBalanceZero::on_free_balance_zero`.", + " - `transfer_keep_alive` works the same way as `transfer`, but has an additional", + " check that the transfer will not kill the origin account.", + "", + " # " + ] + }, + { + "name": "set_balance", + "args": [ + { + "name": "who", + "type": "Address" + }, + { + "name": "new_free", + "type": "Compact" + }, + { + "name": "new_reserved", + "type": "Compact" + } + ], + "documentation": [ + " Set the balances of a given account.", + "", + " This will alter `FreeBalance` and `ReservedBalance` in storage. it will", + " also decrease the total issuance of the system (`TotalIssuance`).", + " If the new free or reserved balance is below the existential deposit,", + " it will reset the account nonce (`system::AccountNonce`).", + "", + " The dispatch origin for this call is `root`.", + "", + " # ", + " - Independent of the arguments.", + " - Contains a limited number of reads and writes.", + " # " + ] + }, + { + "name": "force_transfer", + "args": [ + { + "name": "source", + "type": "Address" + }, + { + "name": "dest", + "type": "Address" + }, + { + "name": "value", + "type": "Compact" + } + ], + "documentation": [ + " Exactly as `transfer`, except the origin must be root and the source account may be", + " specified." + ] + }, + { + "name": "transfer_keep_alive", + "args": [ + { + "name": "dest", + "type": "Address" + }, + { + "name": "value", + "type": "Compact" + } + ], + "documentation": [ + " Same as the [`transfer`] call, but with a check that the transfer will not kill the", + " origin account.", + "", + " 99% of the time you want [`transfer`] instead.", + "", + " [`transfer`]: struct.Module.html#method.transfer" + ] + } + ], + "events": [ + { + "name": "NewAccount", + "args": [ + "AccountId", + "Balance" + ], + "documentation": [ + " A new account was created." + ] + }, + { + "name": "ReapedAccount", + "args": [ + "AccountId" + ], + "documentation": [ + " An account was reaped." + ] + }, + { + "name": "Transfer", + "args": [ + "AccountId", + "AccountId", + "Balance", + "Balance" + ], + "documentation": [ + " Transfer succeeded (from, to, value, fees)." + ] + } + ], + "constants": [ + { + "name": "ExistentialDeposit", + "type": "Balance", + "value": "0x00407a10f35a00000000000000000000", + "documentation": [ + " The minimum amount required to keep an account open." + ] + }, + { + "name": "TransferFee", + "type": "Balance", + "value": "0x0010a5d4e80000000000000000000000", + "documentation": [ + " The fee required to make a transfer." + ] + }, + { + "name": "CreationFee", + "type": "Balance", + "value": "0x0010a5d4e80000000000000000000000", + "documentation": [ + " The fee required to create an account." + ] + } + ], + "errors": [] + }, + { + "name": "TransactionPayment", + "storage": { + "prefix": "Balances", + "items": [ + { + "name": "NextFeeMultiplier", + "modifier": 1, + "type": { + "Plain": "Multiplier" + }, + "fallback": "0x0000000000000000", + "documentation": [] + } + ] + }, + "calls": null, + "events": null, + "constants": [ + { + "name": "TransactionBaseFee", + "type": "BalanceOf", + "value": "0x0010a5d4e80000000000000000000000", + "documentation": [ + " The fee to be paid for making a transaction; the base." + ] + }, + { + "name": "TransactionByteFee", + "type": "BalanceOf", + "value": "0x00e40b54020000000000000000000000", + "documentation": [ + " The fee to be paid for making a transaction; the per-byte portion." + ] + } + ], + "errors": [] + }, + { + "name": "Staking", + "storage": { + "prefix": "Staking", + "items": [ + { + "name": "ValidatorCount", + "modifier": 1, + "type": { + "Plain": "u32" + }, + "fallback": "0x00000000", + "documentation": [ + " The ideal number of staking participants." + ] + }, + { + "name": "MinimumValidatorCount", + "modifier": 1, + "type": { + "Plain": "u32" + }, + "fallback": "0x04000000", + "documentation": [ + " Minimum number of staking participants before emergency conditions are imposed." + ] + }, + { + "name": "Invulnerables", + "modifier": 1, + "type": { + "Plain": "Vec" + }, + "fallback": "0x00", + "documentation": [ + " Any validators that may never be slashed or forcibly kicked. It's a Vec since they're", + " easy to initialize and the performance hit is minimal (we expect no more than four", + " invulnerables) and restricted to testnets." + ] + }, + { + "name": "Bonded", + "modifier": 0, + "type": { + "Map": { + "hasher": "Blake2_256", + "key": "AccountId", + "value": "AccountId", + "kind": 0 + } + }, + "fallback": "0x00", + "documentation": [ + " Map from all locked \"stash\" accounts to the controller account." + ] + }, + { + "name": "Ledger", + "modifier": 0, + "type": { + "Map": { + "hasher": "Blake2_256", + "key": "AccountId", + "value": "StakingLedger", + "kind": 0 + } + }, + "fallback": "0x00", + "documentation": [ + " Map from all (unlocked) \"controller\" accounts to the info regarding the staking." + ] + }, + { + "name": "Payee", + "modifier": 1, + "type": { + "Map": { + "hasher": "Blake2_256", + "key": "AccountId", + "value": "RewardDestination", + "kind": 0 + } + }, + "fallback": "0x00", + "documentation": [ + " Where the reward payment should be made. Keyed by stash." + ] + }, + { + "name": "Validators", + "modifier": 1, + "type": { + "Map": { + "hasher": "Blake2_256", + "key": "AccountId", + "value": "ValidatorPrefs", + "kind": 1 + } + }, + "fallback": "0x00", + "documentation": [ + " The map from (wannabe) validator stash key to the preferences of that validator." + ] + }, + { + "name": "Nominators", + "modifier": 1, + "type": { + "Map": { + "hasher": "Blake2_256", + "key": "AccountId", + "value": "Vec", + "kind": 1 + } + }, + "fallback": "0x00", + "documentation": [ + " The map from nominator stash key to the set of stash keys of all validators to nominate." + ] + }, + { + "name": "Stakers", + "modifier": 1, + "type": { + "Map": { + "hasher": "Blake2_256", + "key": "AccountId", + "value": "Exposure", + "kind": 0 + } + }, + "fallback": "0x000000", + "documentation": [ + " Nominators for a particular account that is in action right now. You can't iterate", + " through validators here, but you can find them in the Session module.", + "", + " This is keyed by the stash account." + ] + }, + { + "name": "CurrentElected", + "modifier": 1, + "type": { + "Plain": "Vec" + }, + "fallback": "0x00", + "documentation": [ + " The currently elected validator set keyed by stash account ID." + ] + }, + { + "name": "CurrentEra", + "modifier": 1, + "type": { + "Plain": "EraIndex" + }, + "fallback": "0x00000000", + "documentation": [ + " The current era index." + ] + }, + { + "name": "CurrentEraStart", + "modifier": 1, + "type": { + "Plain": "MomentOf" + }, + "fallback": "0x0000000000000000", + "documentation": [ + " The start of the current era." + ] + }, + { + "name": "CurrentEraStartSessionIndex", + "modifier": 1, + "type": { + "Plain": "SessionIndex" + }, + "fallback": "0x00000000", + "documentation": [ + " The session index at which the current era started." + ] + }, + { + "name": "CurrentEraPointsEarned", + "modifier": 1, + "type": { + "Plain": "EraPoints" + }, + "fallback": "0x0000000000", + "documentation": [ + " Rewards for the current era. Using indices of current elected set." + ] + }, + { + "name": "SlotStake", + "modifier": 1, + "type": { + "Plain": "BalanceOf" + }, + "fallback": "0x00000000000000000000000000000000", + "documentation": [ + " The amount of balance actively at stake for each validator slot, currently.", + "", + " This is used to derive rewards and punishments." + ] + }, + { + "name": "ForceEra", + "modifier": 1, + "type": { + "Plain": "Forcing" + }, + "fallback": "0x00", + "documentation": [ + " True if the next session change will be a new era regardless of index." + ] + }, + { + "name": "SlashRewardFraction", + "modifier": 1, + "type": { + "Plain": "Perbill" + }, + "fallback": "0x00000000", + "documentation": [ + " The percentage of the slash that is distributed to reporters.", + "", + " The rest of the slashed value is handled by the `Slash`." + ] + }, + { + "name": "BondedEras", + "modifier": 1, + "type": { + "Plain": "Vec<(EraIndex,SessionIndex)>" + }, + "fallback": "0x00", + "documentation": [ + " A mapping from still-bonded eras to the first session index of that era." + ] + }, + { + "name": "EraSlashJournal", + "modifier": 1, + "type": { + "Map": { + "hasher": "Blake2_256", + "key": "EraIndex", + "value": "Vec", + "kind": 0 + } + }, + "fallback": "0x00", + "documentation": [ + " All slashes that have occurred in a given era." + ] + } + ] + }, + "calls": [ + { + "name": "bond", + "args": [ + { + "name": "controller", + "type": "Address" + }, + { + "name": "value", + "type": "Compact" + }, + { + "name": "payee", + "type": "RewardDestination" + } + ], + "documentation": [ + " Take the origin account as a stash and lock up `value` of its balance. `controller` will", + " be the account that controls it.", + "", + " `value` must be more than the `minimum_balance` specified by `T::Currency`.", + "", + " The dispatch origin for this call must be _Signed_ by the stash account.", + "", + " # ", + " - Independent of the arguments. Moderate complexity.", + " - O(1).", + " - Three extra DB entries.", + "", + " NOTE: Two of the storage writes (`Self::bonded`, `Self::payee`) are _never_ cleaned unless", + " the `origin` falls below _existential deposit_ and gets removed as dust.", + " # " + ] + }, + { + "name": "bond_extra", + "args": [ + { + "name": "max_additional", + "type": "Compact" + } + ], + "documentation": [ + " Add some extra amount that have appeared in the stash `free_balance` into the balance up", + " for staking.", + "", + " Use this if there are additional funds in your stash account that you wish to bond.", + " Unlike [`bond`] or [`unbond`] this function does not impose any limitation on the amount", + " that can be added.", + "", + " The dispatch origin for this call must be _Signed_ by the stash, not the controller.", + "", + " # ", + " - Independent of the arguments. Insignificant complexity.", + " - O(1).", + " - One DB entry.", + " # " + ] + }, + { + "name": "unbond", + "args": [ + { + "name": "value", + "type": "Compact" + } + ], + "documentation": [ + " Schedule a portion of the stash to be unlocked ready for transfer out after the bond", + " period ends. If this leaves an amount actively bonded less than", + " T::Currency::minimum_balance(), then it is increased to the full amount.", + "", + " Once the unlock period is done, you can call `withdraw_unbonded` to actually move", + " the funds out of management ready for transfer.", + "", + " No more than a limited number of unlocking chunks (see `MAX_UNLOCKING_CHUNKS`)", + " can co-exists at the same time. In that case, [`Call::withdraw_unbonded`] need", + " to be called first to remove some of the chunks (if possible).", + "", + " The dispatch origin for this call must be _Signed_ by the controller, not the stash.", + "", + " See also [`Call::withdraw_unbonded`].", + "", + " # ", + " - Independent of the arguments. Limited but potentially exploitable complexity.", + " - Contains a limited number of reads.", + " - Each call (requires the remainder of the bonded balance to be above `minimum_balance`)", + " will cause a new entry to be inserted into a vector (`Ledger.unlocking`) kept in storage.", + " The only way to clean the aforementioned storage item is also user-controlled via `withdraw_unbonded`.", + " - One DB entry.", + " " + ] + }, + { + "name": "withdraw_unbonded", + "args": [], + "documentation": [ + " Remove any unlocked chunks from the `unlocking` queue from our management.", + "", + " This essentially frees up that balance to be used by the stash account to do", + " whatever it wants.", + "", + " The dispatch origin for this call must be _Signed_ by the controller, not the stash.", + "", + " See also [`Call::unbond`].", + "", + " # ", + " - Could be dependent on the `origin` argument and how much `unlocking` chunks exist.", + " It implies `consolidate_unlocked` which loops over `Ledger.unlocking`, which is", + " indirectly user-controlled. See [`unbond`] for more detail.", + " - Contains a limited number of reads, yet the size of which could be large based on `ledger`.", + " - Writes are limited to the `origin` account key.", + " # " + ] + }, + { + "name": "validate", + "args": [ + { + "name": "prefs", + "type": "ValidatorPrefs" + } + ], + "documentation": [ + " Declare the desire to validate for the origin controller.", + "", + " Effects will be felt at the beginning of the next era.", + "", + " The dispatch origin for this call must be _Signed_ by the controller, not the stash.", + "", + " # ", + " - Independent of the arguments. Insignificant complexity.", + " - Contains a limited number of reads.", + " - Writes are limited to the `origin` account key.", + " # " + ] + }, + { + "name": "nominate", + "args": [ + { + "name": "targets", + "type": "Vec
" + } + ], + "documentation": [ + " Declare the desire to nominate `targets` for the origin controller.", + "", + " Effects will be felt at the beginning of the next era.", + "", + " The dispatch origin for this call must be _Signed_ by the controller, not the stash.", + "", + " # ", + " - The transaction's complexity is proportional to the size of `targets`,", + " which is capped at `MAX_NOMINATIONS`.", + " - Both the reads and writes follow a similar pattern.", + " # " + ] + }, + { + "name": "chill", + "args": [], + "documentation": [ + " Declare no desire to either validate or nominate.", + "", + " Effects will be felt at the beginning of the next era.", + "", + " The dispatch origin for this call must be _Signed_ by the controller, not the stash.", + "", + " # ", + " - Independent of the arguments. Insignificant complexity.", + " - Contains one read.", + " - Writes are limited to the `origin` account key.", + " # " + ] + }, + { + "name": "set_payee", + "args": [ + { + "name": "payee", + "type": "RewardDestination" + } + ], + "documentation": [ + " (Re-)set the payment target for a controller.", + "", + " Effects will be felt at the beginning of the next era.", + "", + " The dispatch origin for this call must be _Signed_ by the controller, not the stash.", + "", + " # ", + " - Independent of the arguments. Insignificant complexity.", + " - Contains a limited number of reads.", + " - Writes are limited to the `origin` account key.", + " # " + ] + }, + { + "name": "set_controller", + "args": [ + { + "name": "controller", + "type": "Address" + } + ], + "documentation": [ + " (Re-)set the controller of a stash.", + "", + " Effects will be felt at the beginning of the next era.", + "", + " The dispatch origin for this call must be _Signed_ by the stash, not the controller.", + "", + " # ", + " - Independent of the arguments. Insignificant complexity.", + " - Contains a limited number of reads.", + " - Writes are limited to the `origin` account key.", + " # " + ] + }, + { + "name": "set_validator_count", + "args": [ + { + "name": "new", + "type": "Compact" + } + ], + "documentation": [ + " The ideal number of validators." + ] + }, + { + "name": "force_no_eras", + "args": [], + "documentation": [ + " Force there to be no new eras indefinitely.", + "", + " # ", + " - No arguments.", + " # " + ] + }, + { + "name": "force_new_era", + "args": [], + "documentation": [ + " Force there to be a new era at the end of the next session. After this, it will be", + " reset to normal (non-forced) behaviour.", + "", + " # ", + " - No arguments.", + " # " + ] + }, + { + "name": "set_invulnerables", + "args": [ + { + "name": "validators", + "type": "Vec" + } + ], + "documentation": [ + " Set the validators who cannot be slashed (if any)." + ] + }, + { + "name": "force_unstake", + "args": [ + { + "name": "stash", + "type": "AccountId" + } + ], + "documentation": [ + " Force a current staker to become completely unstaked, immediately." + ] + }, + { + "name": "force_new_era_always", + "args": [], + "documentation": [ + " Force there to be a new era at the end of sessions indefinitely.", + "", + " # ", + " - One storage write", + " # " + ] + } + ], + "events": [ + { + "name": "Reward", + "args": [ + "Balance", + "Balance" + ], + "documentation": [ + " All validators have been rewarded by the first balance; the second is the remainder", + " from the maximum amount of reward." + ] + }, + { + "name": "Slash", + "args": [ + "AccountId", + "Balance" + ], + "documentation": [ + " One validator (and its nominators) has been slashed by the given amount." + ] + }, + { + "name": "OldSlashingReportDiscarded", + "args": [ + "SessionIndex" + ], + "documentation": [ + " An old slashing report from a prior era was discarded because it could", + " not be processed." + ] + } + ], + "constants": [ + { + "name": "SessionsPerEra", + "type": "SessionIndex", + "value": "0x06000000", + "documentation": [ + " Number of sessions per era." + ] + }, + { + "name": "BondingDuration", + "type": "EraIndex", + "value": "0xa0020000", + "documentation": [ + " Number of eras that staked funds must remain bonded for." + ] + } + ], + "errors": [] + }, + { + "name": "Session", + "storage": { + "prefix": "Session", + "items": [ + { + "name": "Validators", + "modifier": 1, + "type": { + "Plain": "Vec" + }, + "fallback": "0x00", + "documentation": [ + " The current set of validators." + ] + }, + { + "name": "CurrentIndex", + "modifier": 1, + "type": { + "Plain": "SessionIndex" + }, + "fallback": "0x00000000", + "documentation": [ + " Current index of the session." + ] + }, + { + "name": "QueuedChanged", + "modifier": 1, + "type": { + "Plain": "bool" + }, + "fallback": "0x00", + "documentation": [ + " True if the underlying economic identities or weighting behind the validators", + " has changed in the queued validator set." + ] + }, + { + "name": "QueuedKeys", + "modifier": 1, + "type": { + "Plain": "Vec<(ValidatorId,Keys)>" + }, + "fallback": "0x00", + "documentation": [ + " The queued keys for the next session. When the next session begins, these keys", + " will be used to determine the validator's session keys." + ] + }, + { + "name": "DisabledValidators", + "modifier": 1, + "type": { + "Plain": "Vec" + }, + "fallback": "0x00", + "documentation": [ + " Indices of disabled validators.", + "", + " The set is cleared when `on_session_ending` returns a new set of identities." + ] + }, + { + "name": "NextKeys", + "modifier": 0, + "type": { + "DoubleMap": { + "hasher": "Twox64Concat", + "key1": "Bytes", + "key2": "ValidatorId", + "value": "Keys", + "key2Hasher": "Blake2_256" + } + }, + "fallback": "0x00", + "documentation": [ + " The next session keys for a validator.", + "", + " The first key is always `DEDUP_KEY_PREFIX` to have all the data in the same branch of", + " the trie. Having all data in the same branch should prevent slowing down other queries." + ] + }, + { + "name": "KeyOwner", + "modifier": 0, + "type": { + "DoubleMap": { + "hasher": "Twox64Concat", + "key1": "Bytes", + "key2": "(KeyTypeId,Bytes)", + "value": "ValidatorId", + "key2Hasher": "Blake2_256" + } + }, + "fallback": "0x00", + "documentation": [ + " The owner of a key. The second key is the `KeyTypeId` + the encoded key.", + "", + " The first key is always `DEDUP_KEY_PREFIX` to have all the data in the same branch of", + " the trie. Having all data in the same branch should prevent slowing down other queries." + ] + } + ] + }, + "calls": [ + { + "name": "set_keys", + "args": [ + { + "name": "keys", + "type": "Keys" + }, + { + "name": "proof", + "type": "Bytes" + } + ], + "documentation": [ + " Sets the session key(s) of the function caller to `key`.", + " Allows an account to set its session key prior to becoming a validator.", + " This doesn't take effect until the next session.", + "", + " The dispatch origin of this function must be signed.", + "", + " # ", + " - O(log n) in number of accounts.", + " - One extra DB entry.", + " # " + ] + } + ], + "events": [ + { + "name": "NewSession", + "args": [ + "SessionIndex" + ], + "documentation": [ + " New session has happened. Note that the argument is the session index, not the block", + " number as the type might suggest." + ] + } + ], + "constants": [ + { + "name": "DEDUP_KEY_PREFIX", + "type": "Bytes", + "value": "0x343a73657373696f6e3a6b657973", + "documentation": [ + " Used as first key for `NextKeys` and `KeyOwner` to put all the data into the same branch", + " of the trie." + ] + } + ], + "errors": [] + }, + { + "name": "Democracy", + "storage": { + "prefix": "Democracy", + "items": [ + { + "name": "PublicPropCount", + "modifier": 1, + "type": { + "Plain": "PropIndex" + }, + "fallback": "0x00000000", + "documentation": [ + " The number of (public) proposals that have been made so far." + ] + }, + { + "name": "PublicProps", + "modifier": 1, + "type": { + "Plain": "Vec<(PropIndex,Proposal,AccountId)>" + }, + "fallback": "0x00", + "documentation": [ + " The public proposals. Unsorted." + ] + }, + { + "name": "DepositOf", + "modifier": 0, + "type": { + "Map": { + "hasher": "Blake2_256", + "key": "PropIndex", + "value": "(BalanceOf,Vec)", + "kind": 0 + } + }, + "fallback": "0x00", + "documentation": [ + " Those who have locked a deposit." + ] + }, + { + "name": "ReferendumCount", + "modifier": 1, + "type": { + "Plain": "ReferendumIndex" + }, + "fallback": "0x00000000", + "documentation": [ + " The next free referendum index, aka the number of referenda started so far." + ] + }, + { + "name": "NextTally", + "modifier": 1, + "type": { + "Plain": "ReferendumIndex" + }, + "fallback": "0x00000000", + "documentation": [ + " The next referendum index that should be tallied." + ] + }, + { + "name": "ReferendumInfoOf", + "modifier": 0, + "type": { + "Map": { + "hasher": "Blake2_256", + "key": "ReferendumIndex", + "value": "ReferendumInfo", + "kind": 0 + } + }, + "fallback": "0x00", + "documentation": [ + " Information concerning any given referendum." + ] + }, + { + "name": "DispatchQueue", + "modifier": 1, + "type": { + "Map": { + "hasher": "Blake2_256", + "key": "BlockNumber", + "value": "Vec>", + "kind": 0 + } + }, + "fallback": "0x00", + "documentation": [ + " Queue of successful referenda to be dispatched." + ] + }, + { + "name": "VotersFor", + "modifier": 1, + "type": { + "Map": { + "hasher": "Blake2_256", + "key": "ReferendumIndex", + "value": "Vec", + "kind": 0 + } + }, + "fallback": "0x00", + "documentation": [ + " Get the voters for the current proposal." + ] + }, + { + "name": "VoteOf", + "modifier": 1, + "type": { + "Map": { + "hasher": "Blake2_256", + "key": "(ReferendumIndex,AccountId)", + "value": "Vote", + "kind": 0 + } + }, + "fallback": "0x00", + "documentation": [ + " Get the vote in a given referendum of a particular voter. The result is meaningful only", + " if `voters_for` includes the voter when called with the referendum (you'll get the", + " default `Vote` value otherwise). If you don't want to check `voters_for`, then you can", + " also check for simple existence with `VoteOf::exists` first." + ] + }, + { + "name": "Proxy", + "modifier": 0, + "type": { + "Map": { + "hasher": "Blake2_256", + "key": "AccountId", + "value": "AccountId", + "kind": 0 + } + }, + "fallback": "0x00", + "documentation": [ + " Who is able to vote for whom. Value is the fund-holding account, key is the", + " vote-transaction-sending account." + ] + }, + { + "name": "Delegations", + "modifier": 1, + "type": { + "Map": { + "hasher": "Blake2_256", + "key": "AccountId", + "value": "(AccountId,Conviction)", + "kind": 1 + } + }, + "fallback": "0x000000000000000000000000000000000000000000000000000000000000000000", + "documentation": [ + " Get the account (and lock periods) to which another account is delegating vote." + ] + }, + { + "name": "LastTabledWasExternal", + "modifier": 1, + "type": { + "Plain": "bool" + }, + "fallback": "0x00", + "documentation": [ + " True if the last referendum tabled was submitted externally. False if it was a public", + " proposal." + ] + }, + { + "name": "NextExternal", + "modifier": 0, + "type": { + "Plain": "(Proposal,VoteThreshold)" + }, + "fallback": "0x00", + "documentation": [ + " The referendum to be tabled whenever it would be valid to table an external proposal.", + " This happens when a referendum needs to be tabled and one of two conditions are met:", + " - `LastTabledWasExternal` is `false`; or", + " - `PublicProps` is empty." + ] + }, + { + "name": "Blacklist", + "modifier": 0, + "type": { + "Map": { + "hasher": "Blake2_256", + "key": "Hash", + "value": "(BlockNumber,Vec)", + "kind": 0 + } + }, + "fallback": "0x00", + "documentation": [ + " A record of who vetoed what. Maps proposal hash to a possible existent block number", + " (until when it may not be resubmitted) and who vetoed it." + ] + }, + { + "name": "Cancellations", + "modifier": 1, + "type": { + "Map": { + "hasher": "Blake2_256", + "key": "Hash", + "value": "bool", + "kind": 0 + } + }, + "fallback": "0x00", + "documentation": [ + " Record of all proposals that have been subject to emergency cancellation." + ] + } + ] + }, + "calls": [ + { + "name": "propose", + "args": [ + { + "name": "proposal", + "type": "Proposal" + }, + { + "name": "value", + "type": "Compact" + } + ], + "documentation": [ + " Propose a sensitive action to be taken.", + "", + " # ", + " - O(1).", + " - Two DB changes, one DB entry.", + " # " + ] + }, + { + "name": "second", + "args": [ + { + "name": "proposal", + "type": "Compact" + } + ], + "documentation": [ + " Propose a sensitive action to be taken.", + "", + " # ", + " - O(1).", + " - One DB entry.", + " # " + ] + }, + { + "name": "vote", + "args": [ + { + "name": "ref_index", + "type": "Compact" + }, + { + "name": "vote", + "type": "Vote" + } + ], + "documentation": [ + " Vote in a referendum. If `vote.is_aye()`, the vote is to enact the proposal;", + " otherwise it is a vote to keep the status quo.", + "", + " # ", + " - O(1).", + " - One DB change, one DB entry.", + " # " + ] + }, + { + "name": "proxy_vote", + "args": [ + { + "name": "ref_index", + "type": "Compact" + }, + { + "name": "vote", + "type": "Vote" + } + ], + "documentation": [ + " Vote in a referendum on behalf of a stash. If `vote.is_aye()`, the vote is to enact", + " the proposal; otherwise it is a vote to keep the status quo.", + "", + " # ", + " - O(1).", + " - One DB change, one DB entry.", + " # " + ] + }, + { + "name": "emergency_cancel", + "args": [ + { + "name": "ref_index", + "type": "ReferendumIndex" + } + ], + "documentation": [ + " Schedule an emergency cancellation of a referendum. Cannot happen twice to the same", + " referendum." + ] + }, + { + "name": "external_propose", + "args": [ + { + "name": "proposal", + "type": "Proposal" + } + ], + "documentation": [ + " Schedule a referendum to be tabled once it is legal to schedule an external", + " referendum." + ] + }, + { + "name": "external_propose_majority", + "args": [ + { + "name": "proposal", + "type": "Proposal" + } + ], + "documentation": [ + " Schedule a majority-carries referendum to be tabled next once it is legal to schedule", + " an external referendum.", + "", + " Unlike `external_propose`, blacklisting has no effect on this and it may replace a", + " pre-scheduled `external_propose` call." + ] + }, + { + "name": "external_propose_default", + "args": [ + { + "name": "proposal", + "type": "Proposal" + } + ], + "documentation": [ + " Schedule a negative-turnout-bias referendum to be tabled next once it is legal to", + " schedule an external referendum.", + "", + " Unlike `external_propose`, blacklisting has no effect on this and it may replace a", + " pre-scheduled `external_propose` call." + ] + }, + { + "name": "fast_track", + "args": [ + { + "name": "proposal_hash", + "type": "Hash" + }, + { + "name": "voting_period", + "type": "BlockNumber" + }, + { + "name": "delay", + "type": "BlockNumber" + } + ], + "documentation": [ + " Schedule the currently externally-proposed majority-carries referendum to be tabled", + " immediately. If there is no externally-proposed referendum currently, or if there is one", + " but it is not a majority-carries referendum then it fails.", + "", + " - `proposal_hash`: The hash of the current external proposal.", + " - `voting_period`: The period that is allowed for voting on this proposal. Increased to", + " `EmergencyVotingPeriod` if too low.", + " - `delay`: The number of block after voting has ended in approval and this should be", + " enacted. This doesn't have a minimum amount." + ] + }, + { + "name": "veto_external", + "args": [ + { + "name": "proposal_hash", + "type": "Hash" + } + ], + "documentation": [ + " Veto and blacklist the external proposal hash." + ] + }, + { + "name": "cancel_referendum", + "args": [ + { + "name": "ref_index", + "type": "Compact" + } + ], + "documentation": [ + " Remove a referendum." + ] + }, + { + "name": "cancel_queued", + "args": [ + { + "name": "when", + "type": "Compact" + }, + { + "name": "which", + "type": "Compact" + }, + { + "name": "what", + "type": "Compact" + } + ], + "documentation": [ + " Cancel a proposal queued for enactment." + ] + }, + { + "name": "set_proxy", + "args": [ + { + "name": "proxy", + "type": "AccountId" + } + ], + "documentation": [ + " Specify a proxy. Called by the stash.", + "", + " # ", + " - One extra DB entry.", + " # " + ] + }, + { + "name": "resign_proxy", + "args": [], + "documentation": [ + " Clear the proxy. Called by the proxy.", + "", + " # ", + " - One DB clear.", + " # " + ] + }, + { + "name": "remove_proxy", + "args": [ + { + "name": "proxy", + "type": "AccountId" + } + ], + "documentation": [ + " Clear the proxy. Called by the stash.", + "", + " # ", + " - One DB clear.", + " # " + ] + }, + { + "name": "delegate", + "args": [ + { + "name": "to", + "type": "AccountId" + }, + { + "name": "conviction", + "type": "Conviction" + } + ], + "documentation": [ + " Delegate vote.", + "", + " # ", + " - One extra DB entry.", + " # " + ] + }, + { + "name": "undelegate", + "args": [], + "documentation": [ + " Undelegate vote.", + "", + " # ", + " - O(1).", + " # " + ] + } + ], + "events": [ + { + "name": "Proposed", + "args": [ + "PropIndex", + "Balance" + ], + "documentation": [] + }, + { + "name": "Tabled", + "args": [ + "PropIndex", + "Balance", + "Vec" + ], + "documentation": [] + }, + { + "name": "ExternalTabled", + "args": [], + "documentation": [] + }, + { + "name": "Started", + "args": [ + "ReferendumIndex", + "VoteThreshold" + ], + "documentation": [] + }, + { + "name": "Passed", + "args": [ + "ReferendumIndex" + ], + "documentation": [] + }, + { + "name": "NotPassed", + "args": [ + "ReferendumIndex" + ], + "documentation": [] + }, + { + "name": "Cancelled", + "args": [ + "ReferendumIndex" + ], + "documentation": [] + }, + { + "name": "Executed", + "args": [ + "ReferendumIndex", + "bool" + ], + "documentation": [] + }, + { + "name": "Delegated", + "args": [ + "AccountId", + "AccountId" + ], + "documentation": [] + }, + { + "name": "Undelegated", + "args": [ + "AccountId" + ], + "documentation": [] + }, + { + "name": "Vetoed", + "args": [ + "AccountId", + "Hash", + "BlockNumber" + ], + "documentation": [] + } + ], + "constants": [ + { + "name": "EnactmentPeriod", + "type": "BlockNumber", + "value": "0x002f0d00", + "documentation": [ + " The minimum period of locking and the period between a proposal being approved and enacted.", + "", + " It should generally be a little more than the unstake period to ensure that", + " voting stakers have an opportunity to remove themselves from the system in the case where", + " they are on the losing side of a vote." + ] + }, + { + "name": "LaunchPeriod", + "type": "BlockNumber", + "value": "0x004e0c00", + "documentation": [ + " How often (in blocks) new public referenda are launched." + ] + }, + { + "name": "VotingPeriod", + "type": "BlockNumber", + "value": "0x004e0c00", + "documentation": [ + " How often (in blocks) to check for new votes." + ] + }, + { + "name": "MinimumDeposit", + "type": "BalanceOf", + "value": "0x0000c16ff28623000000000000000000", + "documentation": [ + " The minimum amount to be used as a deposit for a public referendum proposal." + ] + }, + { + "name": "EmergencyVotingPeriod", + "type": "BlockNumber", + "value": "0x80510100", + "documentation": [ + " Minimum voting period allowed for an emergency referendum." + ] + }, + { + "name": "CooloffPeriod", + "type": "BlockNumber", + "value": "0x004e0c00", + "documentation": [ + " Period in blocks where an external proposal may not be re-submitted after being vetoed." + ] + } + ], + "errors": [] + }, + { + "name": "Council", + "storage": { + "prefix": "Instance1Collective", + "items": [ + { + "name": "Proposals", + "modifier": 1, + "type": { + "Plain": "Vec" + }, + "fallback": "0x00", + "documentation": [ + " The hashes of the active proposals." + ] + }, + { + "name": "ProposalOf", + "modifier": 0, + "type": { + "Map": { + "hasher": "Blake2_256", + "key": "Hash", + "value": "Proposal", + "kind": 0 + } + }, + "fallback": "0x00", + "documentation": [ + " Actual proposal for a given hash, if it's current." + ] + }, + { + "name": "Voting", + "modifier": 0, + "type": { + "Map": { + "hasher": "Blake2_256", + "key": "Hash", + "value": "Votes", + "kind": 0 + } + }, + "fallback": "0x00", + "documentation": [ + " Votes on a given proposal, if it is ongoing." + ] + }, + { + "name": "ProposalCount", + "modifier": 1, + "type": { + "Plain": "u32" + }, + "fallback": "0x00000000", + "documentation": [ + " Proposals so far." + ] + }, + { + "name": "Members", + "modifier": 1, + "type": { + "Plain": "Vec" + }, + "fallback": "0x00", + "documentation": [ + " The current members of the collective. This is stored sorted (just by value)." + ] + } + ] + }, + "calls": [ + { + "name": "set_members", + "args": [ + { + "name": "new_members", + "type": "Vec" + } + ], + "documentation": [ + " Set the collective's membership manually to `new_members`. Be nice to the chain and", + " provide it pre-sorted.", + "", + " Requires root origin." + ] + }, + { + "name": "execute", + "args": [ + { + "name": "proposal", + "type": "Proposal" + } + ], + "documentation": [ + " Dispatch a proposal from a member using the `Member` origin.", + "", + " Origin must be a member of the collective." + ] + }, + { + "name": "propose", + "args": [ + { + "name": "threshold", + "type": "Compact" + }, + { + "name": "proposal", + "type": "Proposal" + } + ], + "documentation": [ + " # ", + " - Bounded storage reads and writes.", + " - Argument `threshold` has bearing on weight.", + " # " + ] + }, + { + "name": "vote", + "args": [ + { + "name": "proposal", + "type": "Hash" + }, + { + "name": "index", + "type": "Compact" + }, + { + "name": "approve", + "type": "bool" + } + ], + "documentation": [ + " # ", + " - Bounded storage read and writes.", + " - Will be slightly heavier if the proposal is approved / disapproved after the vote.", + " # " + ] + } + ], + "events": [ + { + "name": "Proposed", + "args": [ + "AccountId", + "ProposalIndex", + "Hash", + "MemberCount" + ], + "documentation": [ + " A motion (given hash) has been proposed (by given account) with a threshold (given", + " `MemberCount`)." + ] + }, + { + "name": "Voted", + "args": [ + "AccountId", + "Hash", + "bool", + "MemberCount", + "MemberCount" + ], + "documentation": [ + " A motion (given hash) has been voted on by given account, leaving", + " a tally (yes votes and no votes given respectively as `MemberCount`)." + ] + }, + { + "name": "Approved", + "args": [ + "Hash" + ], + "documentation": [ + " A motion was approved by the required threshold." + ] + }, + { + "name": "Disapproved", + "args": [ + "Hash" + ], + "documentation": [ + " A motion was not approved by the required threshold." + ] + }, + { + "name": "Executed", + "args": [ + "Hash", + "bool" + ], + "documentation": [ + " A motion was executed; `bool` is true if returned without error." + ] + }, + { + "name": "MemberExecuted", + "args": [ + "Hash", + "bool" + ], + "documentation": [ + " A single member did some action; `bool` is true if returned without error." + ] + } + ], + "constants": [], + "errors": [] + }, + { + "name": "TechnicalCommittee", + "storage": { + "prefix": "Instance2Collective", + "items": [ + { + "name": "Proposals", + "modifier": 1, + "type": { + "Plain": "Vec" + }, + "fallback": "0x00", + "documentation": [ + " The hashes of the active proposals." + ] + }, + { + "name": "ProposalOf", + "modifier": 0, + "type": { + "Map": { + "hasher": "Blake2_256", + "key": "Hash", + "value": "Proposal", + "kind": 0 + } + }, + "fallback": "0x00", + "documentation": [ + " Actual proposal for a given hash, if it's current." + ] + }, + { + "name": "Voting", + "modifier": 0, + "type": { + "Map": { + "hasher": "Blake2_256", + "key": "Hash", + "value": "Votes", + "kind": 0 + } + }, + "fallback": "0x00", + "documentation": [ + " Votes on a given proposal, if it is ongoing." + ] + }, + { + "name": "ProposalCount", + "modifier": 1, + "type": { + "Plain": "u32" + }, + "fallback": "0x00000000", + "documentation": [ + " Proposals so far." + ] + }, + { + "name": "Members", + "modifier": 1, + "type": { + "Plain": "Vec" + }, + "fallback": "0x00", + "documentation": [ + " The current members of the collective. This is stored sorted (just by value)." + ] + } + ] + }, + "calls": [ + { + "name": "set_members", + "args": [ + { + "name": "new_members", + "type": "Vec" + } + ], + "documentation": [ + " Set the collective's membership manually to `new_members`. Be nice to the chain and", + " provide it pre-sorted.", + "", + " Requires root origin." + ] + }, + { + "name": "execute", + "args": [ + { + "name": "proposal", + "type": "Proposal" + } + ], + "documentation": [ + " Dispatch a proposal from a member using the `Member` origin.", + "", + " Origin must be a member of the collective." + ] + }, + { + "name": "propose", + "args": [ + { + "name": "threshold", + "type": "Compact" + }, + { + "name": "proposal", + "type": "Proposal" + } + ], + "documentation": [ + " # ", + " - Bounded storage reads and writes.", + " - Argument `threshold` has bearing on weight.", + " # " + ] + }, + { + "name": "vote", + "args": [ + { + "name": "proposal", + "type": "Hash" + }, + { + "name": "index", + "type": "Compact" + }, + { + "name": "approve", + "type": "bool" + } + ], + "documentation": [ + " # ", + " - Bounded storage read and writes.", + " - Will be slightly heavier if the proposal is approved / disapproved after the vote.", + " # " + ] + } + ], + "events": [ + { + "name": "Proposed", + "args": [ + "AccountId", + "ProposalIndex", + "Hash", + "MemberCount" + ], + "documentation": [ + " A motion (given hash) has been proposed (by given account) with a threshold (given", + " `MemberCount`)." + ] + }, + { + "name": "Voted", + "args": [ + "AccountId", + "Hash", + "bool", + "MemberCount", + "MemberCount" + ], + "documentation": [ + " A motion (given hash) has been voted on by given account, leaving", + " a tally (yes votes and no votes given respectively as `MemberCount`)." + ] + }, + { + "name": "Approved", + "args": [ + "Hash" + ], + "documentation": [ + " A motion was approved by the required threshold." + ] + }, + { + "name": "Disapproved", + "args": [ + "Hash" + ], + "documentation": [ + " A motion was not approved by the required threshold." + ] + }, + { + "name": "Executed", + "args": [ + "Hash", + "bool" + ], + "documentation": [ + " A motion was executed; `bool` is true if returned without error." + ] + }, + { + "name": "MemberExecuted", + "args": [ + "Hash", + "bool" + ], + "documentation": [ + " A single member did some action; `bool` is true if returned without error." + ] + } + ], + "constants": [], + "errors": [] + }, + { + "name": "Elections", + "storage": { + "prefix": "PhragmenElection", + "items": [ + { + "name": "Members", + "modifier": 1, + "type": { + "Plain": "Vec<(AccountId,BalanceOf)>" + }, + "fallback": "0x00", + "documentation": [ + " The current elected membership. Sorted based on account id." + ] + }, + { + "name": "RunnersUp", + "modifier": 1, + "type": { + "Plain": "Vec<(AccountId,BalanceOf)>" + }, + "fallback": "0x00", + "documentation": [ + " The current runners_up. Sorted based on low to high merit (worse to best runner)." + ] + }, + { + "name": "ElectionRounds", + "modifier": 1, + "type": { + "Plain": "u32" + }, + "fallback": "0x00000000", + "documentation": [ + " The total number of vote rounds that have happened, excluding the upcoming one." + ] + }, + { + "name": "VotesOf", + "modifier": 1, + "type": { + "Map": { + "hasher": "Blake2_256", + "key": "AccountId", + "value": "Vec", + "kind": 1 + } + }, + "fallback": "0x00", + "documentation": [ + " Votes of a particular voter, with the round index of the votes." + ] + }, + { + "name": "StakeOf", + "modifier": 1, + "type": { + "Map": { + "hasher": "Blake2_256", + "key": "AccountId", + "value": "BalanceOf", + "kind": 0 + } + }, + "fallback": "0x00000000000000000000000000000000", + "documentation": [ + " Locked stake of a voter." + ] + }, + { + "name": "Candidates", + "modifier": 1, + "type": { + "Plain": "Vec" + }, + "fallback": "0x00", + "documentation": [ + " The present candidate list. Sorted based on account id. A current member can never enter", + " this vector and is always implicitly assumed to be a candidate." + ] + }, + { + "name": "DidMigrate", + "modifier": 1, + "type": { + "Plain": "bool" + }, + "fallback": "0x00", + "documentation": [ + " Has the storage format been updated?", + " NOTE: Only use and set to false if you have used an early version of this module. Should", + " be set to true otherwise." + ] + } + ] + }, + "calls": [ + { + "name": "vote", + "args": [ + { + "name": "votes", + "type": "Vec" + }, + { + "name": "value", + "type": "Compact" + } + ], + "documentation": [ + " Vote for a set of candidates for the upcoming round of election.", + "", + " The `votes` should:", + " - not be empty.", + " - be less than the number of candidates.", + "", + " Upon voting, `value` units of `who`'s balance is locked and a bond amount is reserved.", + " It is the responsibility of the caller to not place all of their balance into the lock", + " and keep some for further transactions.", + "", + " # ", + " #### State", + " Reads: O(1)", + " Writes: O(V) given `V` votes. V is bounded by 16.", + " # " + ] + }, + { + "name": "remove_voter", + "args": [], + "documentation": [ + " Remove `origin` as a voter. This removes the lock and returns the bond.", + "", + " # ", + " #### State", + " Reads: O(1)", + " Writes: O(1)", + " # " + ] + }, + { + "name": "report_defunct_voter", + "args": [ + { + "name": "target", + "type": "Address" + } + ], + "documentation": [ + " Report `target` for being an defunct voter. In case of a valid report, the reporter is", + " rewarded by the bond amount of `target`. Otherwise, the reporter itself is removed and", + " their bond is slashed.", + "", + " A defunct voter is defined to be:", + " - a voter whose current submitted votes are all invalid. i.e. all of them are no", + " longer a candidate nor an active member.", + "", + " # ", + " #### State", + " Reads: O(NLogM) given M current candidates and N votes for `target`.", + " Writes: O(1)", + " # " + ] + }, + { + "name": "submit_candidacy", + "args": [], + "documentation": [ + " Submit oneself for candidacy.", + "", + " A candidate will either:", + " - Lose at the end of the term and forfeit their deposit.", + " - Win and become a member. Members will eventually get their stash back.", + " - Become a runner-up. Runners-ups are reserved members in case one gets forcefully", + " removed.", + "", + " # ", + " #### State", + " Reads: O(LogN) Given N candidates.", + " Writes: O(1)", + " # " + ] + }, + { + "name": "remove_member", + "args": [ + { + "name": "who", + "type": "Address" + } + ], + "documentation": [ + " Remove a particular member from the set. This is effective immediately.", + "", + " If a runner-up is available, then the best runner-up will be removed and replaces the", + " outgoing member. Otherwise, a new phragmen round is started.", + "", + " Note that this does not affect the designated block number of the next election.", + "", + " # ", + " #### State", + " Reads: O(do_phragmen)", + " Writes: O(do_phragmen)", + " # " + ] + } + ], + "events": [ + { + "name": "NewTerm", + "args": [ + "Vec<(AccountId,Balance)>" + ], + "documentation": [ + " A new term with new members. This indicates that enough candidates existed, not that", + " enough have has been elected. The inner value must be examined for this purpose." + ] + }, + { + "name": "EmptyTerm", + "args": [], + "documentation": [ + " No (or not enough) candidates existed for this round." + ] + }, + { + "name": "MemberKicked", + "args": [ + "AccountId" + ], + "documentation": [ + " A member has been removed. This should always be followed by either `NewTerm` ot", + " `EmptyTerm`." + ] + }, + { + "name": "VoterReported", + "args": [ + "AccountId", + "AccountId", + "bool" + ], + "documentation": [ + " A voter (first element) was reported (byt the second element) with the the report being", + " successful or not (third element)." + ] + } + ], + "constants": [ + { + "name": "CandidacyBond", + "type": "BalanceOf", + "value": "0x0080c6a47e8d03000000000000000000", + "documentation": [] + }, + { + "name": "VotingBond", + "type": "BalanceOf", + "value": "0x00407a10f35a00000000000000000000", + "documentation": [] + }, + { + "name": "DesiredMembers", + "type": "u32", + "value": "0x0d000000", + "documentation": [] + }, + { + "name": "DesiredRunnersUp", + "type": "u32", + "value": "0x07000000", + "documentation": [] + }, + { + "name": "TermDuration", + "type": "BlockNumber", + "value": "0x80130300", + "documentation": [] + } + ], + "errors": [] + }, + { + "name": "TechnicalMembership", + "storage": { + "prefix": "Instance1Membership", + "items": [ + { + "name": "Members", + "modifier": 1, + "type": { + "Plain": "Vec" + }, + "fallback": "0x00", + "documentation": [ + " The current membership, stored as an ordered Vec." + ] + } + ] + }, + "calls": [ + { + "name": "add_member", + "args": [ + { + "name": "who", + "type": "AccountId" + } + ], + "documentation": [ + " Add a member `who` to the set.", + "", + " May only be called from `AddOrigin` or root." + ] + }, + { + "name": "remove_member", + "args": [ + { + "name": "who", + "type": "AccountId" + } + ], + "documentation": [ + " Remove a member `who` from the set.", + "", + " May only be called from `RemoveOrigin` or root." + ] + }, + { + "name": "swap_member", + "args": [ + { + "name": "remove", + "type": "AccountId" + }, + { + "name": "add", + "type": "AccountId" + } + ], + "documentation": [ + " Swap out one member `remove` for another `add`.", + "", + " May only be called from `SwapOrigin` or root." + ] + }, + { + "name": "reset_members", + "args": [ + { + "name": "members", + "type": "Vec" + } + ], + "documentation": [ + " Change the membership to a new set, disregarding the existing membership. Be nice and", + " pass `members` pre-sorted.", + "", + " May only be called from `ResetOrigin` or root." + ] + } + ], + "events": [ + { + "name": "MemberAdded", + "args": [], + "documentation": [ + " The given member was added; see the transaction for who." + ] + }, + { + "name": "MemberRemoved", + "args": [], + "documentation": [ + " The given member was removed; see the transaction for who." + ] + }, + { + "name": "MembersSwapped", + "args": [], + "documentation": [ + " Two members were swapped; see the transaction for who." + ] + }, + { + "name": "MembersReset", + "args": [], + "documentation": [ + " The membership was reset; see the transaction for who the new set is." + ] + }, + { + "name": "Dummy", + "args": [ + "PhantomData" + ], + "documentation": [ + " Phantom member, never used." + ] + } + ], + "constants": [], + "errors": [] + }, + { + "name": "FinalityTracker", + "storage": null, + "calls": [ + { + "name": "final_hint", + "args": [ + { + "name": "hint", + "type": "Compact" + } + ], + "documentation": [ + " Hint that the author of this block thinks the best finalized", + " block is the given number." + ] + } + ], + "events": null, + "constants": [ + { + "name": "WindowSize", + "type": "BlockNumber", + "value": "0x65000000", + "documentation": [ + " The number of recent samples to keep from this chain. Default is 101." + ] + }, + { + "name": "ReportLatency", + "type": "BlockNumber", + "value": "0xe8030000", + "documentation": [ + " The delay after which point things become suspicious. Default is 1000." + ] + } + ], + "errors": [] + }, + { + "name": "Grandpa", + "storage": { + "prefix": "GrandpaFinality", + "items": [ + { + "name": "Authorities", + "modifier": 1, + "type": { + "Plain": "AuthorityList" + }, + "fallback": "0x00", + "documentation": [ + " DEPRECATED", + "", + " This used to store the current authority set, which has been migrated to the well-known", + " GRANDPA_AUTHORITES_KEY unhashed key." + ] + }, + { + "name": "State", + "modifier": 1, + "type": { + "Plain": "StoredState" + }, + "fallback": "0x00", + "documentation": [ + " State of the current authority set." + ] + }, + { + "name": "PendingChange", + "modifier": 0, + "type": { + "Plain": "StoredPendingChange" + }, + "fallback": "0x00", + "documentation": [ + " Pending change: (signaled at, scheduled change)." + ] + }, + { + "name": "NextForced", + "modifier": 0, + "type": { + "Plain": "BlockNumber" + }, + "fallback": "0x00", + "documentation": [ + " next block number where we can force a change." + ] + }, + { + "name": "Stalled", + "modifier": 0, + "type": { + "Plain": "(BlockNumber,BlockNumber)" + }, + "fallback": "0x00", + "documentation": [ + " `true` if we are currently stalled." + ] + }, + { + "name": "CurrentSetId", + "modifier": 1, + "type": { + "Plain": "SetId" + }, + "fallback": "0x0000000000000000", + "documentation": [ + " The number of changes (both in terms of keys and underlying economic responsibilities)", + " in the \"set\" of Grandpa validators from genesis." + ] + }, + { + "name": "SetIdSession", + "modifier": 0, + "type": { + "Map": { + "hasher": "Blake2_256", + "key": "SetId", + "value": "SessionIndex", + "kind": 0 + } + }, + "fallback": "0x00", + "documentation": [ + " A mapping from grandpa set ID to the index of the *most recent* session for which its members were responsible." + ] + } + ] + }, + "calls": [ + { + "name": "report_misbehavior", + "args": [ + { + "name": "_report", + "type": "Bytes" + } + ], + "documentation": [ + " Report some misbehavior." + ] + } + ], + "events": [ + { + "name": "NewAuthorities", + "args": [ + "AuthorityList" + ], + "documentation": [ + " New authority set has been applied." + ] + }, + { + "name": "Paused", + "args": [], + "documentation": [ + " Current authority set has been paused." + ] + }, + { + "name": "Resumed", + "args": [], + "documentation": [ + " Current authority set has been resumed." + ] + } + ], + "constants": [], + "errors": [] + }, + { + "name": "Treasury", + "storage": { + "prefix": "Treasury", + "items": [ + { + "name": "ProposalCount", + "modifier": 1, + "type": { + "Plain": "ProposalIndex" + }, + "fallback": "0x00000000", + "documentation": [ + " Number of proposals that have been made." + ] + }, + { + "name": "Proposals", + "modifier": 0, + "type": { + "Map": { + "hasher": "Blake2_256", + "key": "ProposalIndex", + "value": "TreasuryProposal", + "kind": 0 + } + }, + "fallback": "0x00", + "documentation": [ + " Proposals that have been made." + ] + }, + { + "name": "Approvals", + "modifier": 1, + "type": { + "Plain": "Vec" + }, + "fallback": "0x00", + "documentation": [ + " Proposal indices that have been approved but not yet awarded." + ] + } + ] + }, + "calls": [ + { + "name": "propose_spend", + "args": [ + { + "name": "value", + "type": "Compact" + }, + { + "name": "beneficiary", + "type": "Address" + } + ], + "documentation": [ + " Put forward a suggestion for spending. A deposit proportional to the value", + " is reserved and slashed if the proposal is rejected. It is returned once the", + " proposal is awarded.", + "", + " # ", + " - O(1).", + " - Limited storage reads.", + " - One DB change, one extra DB entry.", + " # " + ] + }, + { + "name": "reject_proposal", + "args": [ + { + "name": "proposal_id", + "type": "Compact" + } + ], + "documentation": [ + " Reject a proposed spend. The original deposit will be slashed.", + "", + " # ", + " - O(1).", + " - Limited storage reads.", + " - One DB clear.", + " # " + ] + }, + { + "name": "approve_proposal", + "args": [ + { + "name": "proposal_id", + "type": "Compact" + } + ], + "documentation": [ + " Approve a proposal. At a later time, the proposal will be allocated to the beneficiary", + " and the original deposit will be returned.", + "", + " # ", + " - O(1).", + " - Limited storage reads.", + " - One DB change.", + " # " + ] + } + ], + "events": [ + { + "name": "Proposed", + "args": [ + "ProposalIndex" + ], + "documentation": [ + " New proposal." + ] + }, + { + "name": "Spending", + "args": [ + "Balance" + ], + "documentation": [ + " We have ended a spend period and will now allocate funds." + ] + }, + { + "name": "Awarded", + "args": [ + "ProposalIndex", + "Balance", + "AccountId" + ], + "documentation": [ + " Some funds have been allocated." + ] + }, + { + "name": "Burnt", + "args": [ + "Balance" + ], + "documentation": [ + " Some of our funds have been burnt." + ] + }, + { + "name": "Rollover", + "args": [ + "Balance" + ], + "documentation": [ + " Spending has finished; this is the amount that rolls over until next spend." + ] + }, + { + "name": "Deposit", + "args": [ + "Balance" + ], + "documentation": [ + " Some funds have been deposited." + ] + } + ], + "constants": [ + { + "name": "ProposalBond", + "type": "Permill", + "value": "0x50c30000", + "documentation": [ + " Fraction of a proposal's value that should be bonded in order to place the proposal.", + " An accepted proposal gets these back. A rejected proposal does not." + ] + }, + { + "name": "ProposalBondMinimum", + "type": "BalanceOf", + "value": "0x00407a10f35a00000000000000000000", + "documentation": [ + " Minimum amount of funds that should be placed in a deposit for making a proposal." + ] + }, + { + "name": "SpendPeriod", + "type": "BlockNumber", + "value": "0x80700000", + "documentation": [ + " Period between successive spends." + ] + }, + { + "name": "Burn", + "type": "Permill", + "value": "0x20a10700", + "documentation": [ + " Percentage of spare funds (if any) that are burnt per spend period." + ] + } + ], + "errors": [] + }, + { + "name": "Contracts", + "storage": { + "prefix": "Contract", + "items": [ + { + "name": "GasSpent", + "modifier": 1, + "type": { + "Plain": "Gas" + }, + "fallback": "0x0000000000000000", + "documentation": [ + " Gas spent so far in this block." + ] + }, + { + "name": "CurrentSchedule", + "modifier": 1, + "type": { + "Plain": "Schedule" + }, + "fallback": "0x0000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000008700000000000000af0000000000000001000000000000000100000000000000040000000000010010000000004000000020000000", + "documentation": [ + " Current cost schedule for contracts." + ] + }, + { + "name": "PristineCode", + "modifier": 0, + "type": { + "Map": { + "hasher": "Blake2_256", + "key": "CodeHash", + "value": "Bytes", + "kind": 0 + } + }, + "fallback": "0x00", + "documentation": [ + " A mapping from an original code hash to the original code, untouched by instrumentation." + ] + }, + { + "name": "CodeStorage", + "modifier": 0, + "type": { + "Map": { + "hasher": "Blake2_256", + "key": "CodeHash", + "value": "PrefabWasmModule", + "kind": 0 + } + }, + "fallback": "0x00", + "documentation": [ + " A mapping between an original code hash and instrumented wasm code, ready for execution." + ] + }, + { + "name": "AccountCounter", + "modifier": 1, + "type": { + "Plain": "u64" + }, + "fallback": "0x0000000000000000", + "documentation": [ + " The subtrie counter." + ] + }, + { + "name": "ContractInfoOf", + "modifier": 0, + "type": { + "Map": { + "hasher": "Blake2_256", + "key": "AccountId", + "value": "ContractInfo", + "kind": 0 + } + }, + "fallback": "0x00", + "documentation": [ + " The code associated with a given account." + ] + }, + { + "name": "GasPrice", + "modifier": 1, + "type": { + "Plain": "BalanceOf" + }, + "fallback": "0x01000000000000000000000000000000", + "documentation": [ + " The price of one unit of gas." + ] + } + ] + }, + "calls": [ + { + "name": "update_schedule", + "args": [ + { + "name": "schedule", + "type": "Schedule" + } + ], + "documentation": [ + " Updates the schedule for metering contracts.", + "", + " The schedule must have a greater version than the stored schedule." + ] + }, + { + "name": "put_code", + "args": [ + { + "name": "gas_limit", + "type": "Compact" + }, + { + "name": "code", + "type": "Bytes" + } + ], + "documentation": [ + " Stores the given binary Wasm code into the chain's storage and returns its `codehash`.", + " You can instantiate contracts only with stored code." + ] + }, + { + "name": "call", + "args": [ + { + "name": "dest", + "type": "Address" + }, + { + "name": "value", + "type": "Compact" + }, + { + "name": "gas_limit", + "type": "Compact" + }, + { + "name": "data", + "type": "Bytes" + } + ], + "documentation": [ + " Makes a call to an account, optionally transferring some balance.", + "", + " * If the account is a smart-contract account, the associated code will be", + " executed and any value will be transferred.", + " * If the account is a regular account, any value will be transferred.", + " * If no account exists and the call value is not less than `existential_deposit`,", + " a regular account will be created and any value will be transferred." + ] + }, + { + "name": "instantiate", + "args": [ + { + "name": "endowment", + "type": "Compact" + }, + { + "name": "gas_limit", + "type": "Compact" + }, + { + "name": "code_hash", + "type": "CodeHash" + }, + { + "name": "data", + "type": "Bytes" + } + ], + "documentation": [ + " Instantiates a new contract from the `codehash` generated by `put_code`, optionally transferring some balance.", + "", + " Instantiation is executed as follows:", + "", + " - The destination address is computed based on the sender and hash of the code.", + " - The smart-contract account is created at the computed address.", + " - The `ctor_code` is executed in the context of the newly-created account. Buffer returned", + " after the execution is saved as the `code` of the account. That code will be invoked", + " upon any call received by this account.", + " - The contract is initialized." + ] + }, + { + "name": "claim_surcharge", + "args": [ + { + "name": "dest", + "type": "AccountId" + }, + { + "name": "aux_sender", + "type": "Option" + } + ], + "documentation": [ + " Allows block producers to claim a small reward for evicting a contract. If a block producer", + " fails to do so, a regular users will be allowed to claim the reward.", + "", + " If contract is not evicted as a result of this call, no actions are taken and", + " the sender is not eligible for the reward." + ] + } + ], + "events": [ + { + "name": "Transfer", + "args": [ + "AccountId", + "AccountId", + "Balance" + ], + "documentation": [ + " Transfer happened `from` to `to` with given `value` as part of a `call` or `instantiate`." + ] + }, + { + "name": "Instantiated", + "args": [ + "AccountId", + "AccountId" + ], + "documentation": [ + " Contract deployed by address at the specified address." + ] + }, + { + "name": "CodeStored", + "args": [ + "Hash" + ], + "documentation": [ + " Code with the specified hash has been stored." + ] + }, + { + "name": "ScheduleUpdated", + "args": [ + "u32" + ], + "documentation": [ + " Triggered when the current schedule is updated." + ] + }, + { + "name": "Dispatched", + "args": [ + "AccountId", + "bool" + ], + "documentation": [ + " A call was dispatched from the given account. The bool signals whether it was", + " successful execution or not." + ] + }, + { + "name": "Contract", + "args": [ + "AccountId", + "Bytes" + ], + "documentation": [ + " An event from contract of account." + ] + } + ], + "constants": [ + { + "name": "SignedClaimHandicap", + "type": "BlockNumber", + "value": "0x02000000", + "documentation": [ + " Number of block delay an extrinsic claim surcharge has.", + "", + " When claim surcharge is called by an extrinsic the rent is checked", + " for current_block - delay" + ] + }, + { + "name": "TombstoneDeposit", + "type": "BalanceOf", + "value": "0x00407a10f35a00000000000000000000", + "documentation": [ + " The minimum amount required to generate a tombstone." + ] + }, + { + "name": "StorageSizeOffset", + "type": "u32", + "value": "0x08000000", + "documentation": [ + " Size of a contract at the time of instantiaion. This is a simple way to ensure that", + " empty contracts eventually gets deleted." + ] + }, + { + "name": "RentByteFee", + "type": "BalanceOf", + "value": "0x00407a10f35a00000000000000000000", + "documentation": [ + " Price of a byte of storage per one block interval. Should be greater than 0." + ] + }, + { + "name": "RentDepositOffset", + "type": "BalanceOf", + "value": "0x00008a5d784563010000000000000000", + "documentation": [ + " The amount of funds a contract should deposit in order to offset", + " the cost of one byte.", + "", + " Let's suppose the deposit is 1,000 BU (balance units)/byte and the rent is 1 BU/byte/day,", + " then a contract with 1,000,000 BU that uses 1,000 bytes of storage would pay no rent.", + " But if the balance reduced to 500,000 BU and the storage stayed the same at 1,000,", + " then it would pay 500 BU/day." + ] + }, + { + "name": "SurchargeReward", + "type": "BalanceOf", + "value": "0x0080a1a76b4a35000000000000000000", + "documentation": [ + " Reward that is received by the party whose touch has led", + " to removal of a contract." + ] + }, + { + "name": "TransferFee", + "type": "BalanceOf", + "value": "0x0010a5d4e80000000000000000000000", + "documentation": [ + " The fee required to make a transfer." + ] + }, + { + "name": "CreationFee", + "type": "BalanceOf", + "value": "0x0010a5d4e80000000000000000000000", + "documentation": [ + " The fee required to create an account." + ] + }, + { + "name": "TransactionBaseFee", + "type": "BalanceOf", + "value": "0x0010a5d4e80000000000000000000000", + "documentation": [ + " The fee to be paid for making a transaction; the base." + ] + }, + { + "name": "TransactionByteFee", + "type": "BalanceOf", + "value": "0x00e40b54020000000000000000000000", + "documentation": [ + " The fee to be paid for making a transaction; the per-byte portion." + ] + }, + { + "name": "ContractFee", + "type": "BalanceOf", + "value": "0x0010a5d4e80000000000000000000000", + "documentation": [ + " The fee required to instantiate a contract instance. A reasonable default value", + " is 21." + ] + }, + { + "name": "CallBaseFee", + "type": "Gas", + "value": "0xe803000000000000", + "documentation": [ + " The base fee charged for calling into a contract. A reasonable default", + " value is 135." + ] + }, + { + "name": "InstantiateBaseFee", + "type": "Gas", + "value": "0xe803000000000000", + "documentation": [ + " The base fee charged for instantiating a contract. A reasonable default value", + " is 175." + ] + }, + { + "name": "MaxDepth", + "type": "u32", + "value": "0x20000000", + "documentation": [ + " The maximum nesting level of a call/instantiate stack. A reasonable default", + " value is 100." + ] + }, + { + "name": "MaxValueSize", + "type": "u32", + "value": "0x00400000", + "documentation": [ + " The maximum size of a storage value in bytes. A reasonable default is 16 KiB." + ] + }, + { + "name": "BlockGasLimit", + "type": "Gas", + "value": "0x8096980000000000", + "documentation": [ + " The maximum amount of gas that could be expended per block. A reasonable", + " default value is 10_000_000." + ] + } + ], + "errors": [] + }, + { + "name": "Sudo", + "storage": { + "prefix": "Sudo", + "items": [ + { + "name": "Key", + "modifier": 1, + "type": { + "Plain": "AccountId" + }, + "fallback": "0x0000000000000000000000000000000000000000000000000000000000000000", + "documentation": [ + " The `AccountId` of the sudo key." + ] + } + ] + }, + "calls": [ + { + "name": "sudo", + "args": [ + { + "name": "proposal", + "type": "Proposal" + } + ], + "documentation": [ + " Authenticates the sudo key and dispatches a function call with `Root` origin.", + "", + " The dispatch origin for this call must be _Signed_.", + "", + " # ", + " - O(1).", + " - Limited storage reads.", + " - One DB write (event).", + " - Unknown weight of derivative `proposal` execution.", + " # " + ] + }, + { + "name": "set_key", + "args": [ + { + "name": "new", + "type": "Address" + } + ], + "documentation": [ + " Authenticates the current sudo key and sets the given AccountId (`new`) as the new sudo key.", + "", + " The dispatch origin for this call must be _Signed_.", + "", + " # ", + " - O(1).", + " - Limited storage reads.", + " - One DB change.", + " # " + ] + }, + { + "name": "sudo_as", + "args": [ + { + "name": "who", + "type": "Address" + }, + { + "name": "proposal", + "type": "Proposal" + } + ], + "documentation": [ + " Authenticates the sudo key and dispatches a function call with `Signed` origin from", + " a given account.", + "", + " The dispatch origin for this call must be _Signed_.", + "", + " # ", + " - O(1).", + " - Limited storage reads.", + " - One DB write (event).", + " - Unknown weight of derivative `proposal` execution.", + " # " + ] + } + ], + "events": [ + { + "name": "Sudid", + "args": [ + "bool" + ], + "documentation": [ + " A sudo just took place." + ] + }, + { + "name": "KeyChanged", + "args": [ + "AccountId" + ], + "documentation": [ + " The sudoer just switched identity; the old key is supplied." + ] + }, + { + "name": "SudoAsDone", + "args": [ + "bool" + ], + "documentation": [ + " A sudo just took place." + ] + } + ], + "constants": [], + "errors": [] + }, + { + "name": "ImOnline", + "storage": { + "prefix": "ImOnline", + "items": [ + { + "name": "GossipAt", + "modifier": 1, + "type": { + "Plain": "BlockNumber" + }, + "fallback": "0x00000000", + "documentation": [ + " The block number when we should gossip." + ] + }, + { + "name": "Keys", + "modifier": 1, + "type": { + "Plain": "Vec" + }, + "fallback": "0x00", + "documentation": [ + " The current set of keys that may issue a heartbeat." + ] + }, + { + "name": "ReceivedHeartbeats", + "modifier": 0, + "type": { + "DoubleMap": { + "hasher": "Blake2_256", + "key1": "SessionIndex", + "key2": "AuthIndex", + "value": "Bytes", + "key2Hasher": "Blake2_256" + } + }, + "fallback": "0x00", + "documentation": [ + " For each session index, we keep a mapping of `AuthIndex`", + " to `offchain::OpaqueNetworkState`." + ] + }, + { + "name": "AuthoredBlocks", + "modifier": 1, + "type": { + "DoubleMap": { + "hasher": "Blake2_256", + "key1": "SessionIndex", + "key2": "ValidatorId", + "value": "u32", + "key2Hasher": "Blake2_256" + } + }, + "fallback": "0x00000000", + "documentation": [ + " For each session index, we keep a mapping of `T::ValidatorId` to the", + " number of blocks authored by the given authority." + ] + } + ] + }, + "calls": [ + { + "name": "heartbeat", + "args": [ + { + "name": "heartbeat", + "type": "Heartbeat" + }, + { + "name": "_signature", + "type": "Signature" + } + ], + "documentation": [] + } + ], + "events": [ + { + "name": "HeartbeatReceived", + "args": [ + "AuthorityId" + ], + "documentation": [ + " A new heartbeat was received from `AuthorityId`" + ] + }, + { + "name": "AllGood", + "args": [], + "documentation": [ + " At the end of the session, no offence was committed." + ] + }, + { + "name": "SomeOffline", + "args": [ + "Vec" + ], + "documentation": [ + " At the end of the session, at least once validator was found to be offline." + ] + } + ], + "constants": [], + "errors": [] + }, + { + "name": "AuthorityDiscovery", + "storage": null, + "calls": [], + "events": null, + "constants": [], + "errors": [] + }, + { + "name": "Offences", + "storage": { + "prefix": "Offences", + "items": [ + { + "name": "Reports", + "modifier": 0, + "type": { + "Map": { + "hasher": "Blake2_256", + "key": "ReportIdOf", + "value": "OffenceDetails", + "kind": 0 + } + }, + "fallback": "0x00", + "documentation": [ + " The primary structure that holds all offence records keyed by report identifiers." + ] + }, + { + "name": "ConcurrentReportsIndex", + "modifier": 1, + "type": { + "DoubleMap": { + "hasher": "Blake2_256", + "key1": "Kind", + "key2": "OpaqueTimeSlot", + "value": "Vec", + "key2Hasher": "Blake2_256" + } + }, + "fallback": "0x00", + "documentation": [ + " A vector of reports of the same kind that happened at the same time slot." + ] + }, + { + "name": "ReportsByKindIndex", + "modifier": 1, + "type": { + "Map": { + "hasher": "Blake2_256", + "key": "Kind", + "value": "Bytes", + "kind": 0 + } + }, + "fallback": "0x00", + "documentation": [ + " Enumerates all reports of a kind along with the time they happened.", + "", + " All reports are sorted by the time of offence.", + "", + " Note that the actual type of this mapping is `Vec`, this is because values of", + " different types are not supported at the moment so we are doing the manual serialization." + ] + } + ] + }, + "calls": [], + "events": [ + { + "name": "Offence", + "args": [ + "Kind", + "OpaqueTimeSlot" + ], + "documentation": [ + " There is an offence reported of the given `kind` happened at the `session_index` and", + " (kind-specific) time slot. This event is not deposited for duplicate slashes." + ] + } + ], + "constants": [], + "errors": [] + }, + { + "name": "RandomnessCollectiveFlip", + "storage": { + "prefix": "RandomnessCollectiveFlip", + "items": [ + { + "name": "RandomMaterial", + "modifier": 1, + "type": { + "Plain": "Vec" + }, + "fallback": "0x00", + "documentation": [ + " Series of block headers from the last 81 blocks that acts as random seed material. This", + " is arranged as a ring buffer with `block_number % 81` being the index into the `Vec` of", + " the oldest hash." + ] + } + ] + }, + "calls": [], + "events": null, + "constants": [], + "errors": [] + }, + { + "name": "Nicks", + "storage": { + "prefix": "Sudo", + "items": [ + { + "name": "NameOf", + "modifier": 0, + "type": { + "Map": { + "hasher": "Blake2_256", + "key": "AccountId", + "value": "(Bytes,BalanceOf)", + "kind": 0 + } + }, + "fallback": "0x00", + "documentation": [ + " The lookup table for names." + ] + } + ] + }, + "calls": [ + { + "name": "set_name", + "args": [ + { + "name": "name", + "type": "Bytes" + } + ], + "documentation": [ + " Set an account's name. The name should be a UTF-8-encoded string by convention, though", + " we don't check it.", + "", + " The name may not be more than `T::MaxLength` bytes, nor less than `T::MinLength` bytes.", + "", + " If the account doesn't already have a name, then a fee of `ReservationFee` is reserved", + " in the account.", + "", + " The dispatch origin for this call must be _Signed_.", + "", + " # ", + " - O(1).", + " - At most one balance operation.", + " - One storage read/write.", + " - One event.", + " # " + ] + }, + { + "name": "clear_name", + "args": [], + "documentation": [ + " Clear an account's name and return the deposit. Fails if the account was not named.", + "", + " The dispatch origin for this call must be _Signed_.", + "", + " # ", + " - O(1).", + " - One balance operation.", + " - One storage read/write.", + " - One event.", + " # " + ] + }, + { + "name": "kill_name", + "args": [ + { + "name": "target", + "type": "Address" + } + ], + "documentation": [ + " Remove an account's name and take charge of the deposit.", + "", + " Fails if `who` has not been named. The deposit is dealt with through `T::Slashed`", + " imbalance handler.", + "", + " The dispatch origin for this call must be _Root_ or match `T::ForceOrigin`.", + "", + " # ", + " - O(1).", + " - One unbalanced handler (probably a balance transfer)", + " - One storage read/write.", + " - One event.", + " # " + ] + }, + { + "name": "force_name", + "args": [ + { + "name": "target", + "type": "Address" + }, + { + "name": "name", + "type": "Bytes" + } + ], + "documentation": [ + " Set a third-party account's name with no deposit.", + "", + " No length checking is done on the name.", + "", + " The dispatch origin for this call must be _Root_ or match `T::ForceOrigin`.", + "", + " # ", + " - O(1).", + " - At most one balance operation.", + " - One storage read/write.", + " - One event.", + " # " + ] + } + ], + "events": [ + { + "name": "NameSet", + "args": [ + "AccountId" + ], + "documentation": [ + " A name was set." + ] + }, + { + "name": "NameForced", + "args": [ + "AccountId" + ], + "documentation": [ + " A name was forcibly set." + ] + }, + { + "name": "NameChanged", + "args": [ + "AccountId" + ], + "documentation": [ + " A name was changed." + ] + }, + { + "name": "NameCleared", + "args": [ + "AccountId", + "Balance" + ], + "documentation": [ + " A name was cleared, and the given balance returned." + ] + }, + { + "name": "NameKilled", + "args": [ + "AccountId", + "Balance" + ], + "documentation": [ + " A name was removed and the given balance slashed." + ] + } + ], + "constants": [ + { + "name": "ReservationFee", + "type": "BalanceOf", + "value": "0x00407a10f35a00000000000000000000", + "documentation": [ + " Reservation fee." + ] + }, + { + "name": "MinLength", + "type": "u32", + "value": "0x03000000", + "documentation": [ + " The minimum length a name may be." + ] + }, + { + "name": "MaxLength", + "type": "u32", + "value": "0x10000000", + "documentation": [ + " The maximum length a name may be." + ] + } + ], + "errors": [] + } + ] + } + } +} diff --git a/packages/metadata/src/Metadata/v10/static.ts b/packages/metadata/src/Metadata/v10/static.ts new file mode 100644 index 0000000000..75e5cbc48c --- /dev/null +++ b/packages/metadata/src/Metadata/v10/static.ts @@ -0,0 +1,7 @@ +// Copyright 2017-2019 @polkadot/metadata authors & contributors +// This software may be modified and distributed under the terms +// of the Apache-2.0 license. See the LICENSE file for details. + +const meta = '0x6d6574610a641853797374656d011853797374656d34304163636f756e744e6f6e636501010130543a3a4163636f756e74496420543a3a496e646578001000000000047c2045787472696e73696373206e6f6e636520666f72206163636f756e74732e3845787472696e736963436f756e7400000c753332040004b820546f74616c2065787472696e7369637320636f756e7420666f72207468652063757272656e7420626c6f636b2e4c416c6c45787472696e73696373576569676874000018576569676874040004150120546f74616c2077656967687420666f7220616c6c2065787472696e736963732070757420746f6765746865722c20666f72207468652063757272656e7420626c6f636b2e40416c6c45787472696e736963734c656e00000c753332040004410120546f74616c206c656e6774682028696e2062797465732920666f7220616c6c2065787472696e736963732070757420746f6765746865722c20666f72207468652063757272656e7420626c6f636b2e24426c6f636b4861736801010138543a3a426c6f636b4e756d6265721c543a3a48617368008000000000000000000000000000000000000000000000000000000000000000000498204d6170206f6620626c6f636b206e756d6265727320746f20626c6f636b206861736865732e3445787472696e736963446174610101010c7533321c5665633c75383e000400043d012045787472696e73696373206461746120666f72207468652063757272656e7420626c6f636b20286d61707320616e2065787472696e736963277320696e64657820746f206974732064617461292e184e756d626572010038543a3a426c6f636b4e756d6265721000000000040901205468652063757272656e7420626c6f636b206e756d626572206265696e672070726f6365737365642e205365742062792060657865637574655f626c6f636b602e28506172656e744861736801001c543a3a4861736880000000000000000000000000000000000000000000000000000000000000000004702048617368206f66207468652070726576696f757320626c6f636b2e3845787472696e73696373526f6f7401001c543a3a486173688000000000000000000000000000000000000000000000000000000000000000000415012045787472696e7369637320726f6f74206f66207468652063757272656e7420626c6f636b2c20616c736f2070617274206f662074686520626c6f636b206865616465722e1844696765737401002c4469676573744f663c543e040004f020446967657374206f66207468652063757272656e7420626c6f636b2c20616c736f2070617274206f662074686520626c6f636b206865616465722e184576656e747301008c5665633c4576656e745265636f72643c543a3a4576656e742c20543a3a486173683e3e040004a0204576656e7473206465706f736974656420666f72207468652063757272656e7420626c6f636b2e284576656e74436f756e740100284576656e74496e646578100000000004b820546865206e756d626572206f66206576656e747320696e2074686520604576656e74733c543e60206c6973742e2c4576656e74546f706963730102010828291c543a3a48617368845665633c28543a3a426c6f636b4e756d6265722c204576656e74496e646578293e010400342501204d617070696e67206265747765656e206120746f7069632028726570726573656e74656420627920543a3a486173682920616e64206120766563746f72206f6620696e646578657394206f66206576656e747320696e2074686520603c4576656e74733c543e3e60206c6973742e002d0120546865206669727374206b657920736572766573206e6f20707572706f73652e2054686973206669656c64206973206465636c6172656420617320646f75626c655f6d6170206a757374a820666f7220636f6e76656e69656e6365206f66207573696e67206072656d6f76655f707265666978602e00510120416c6c20746f70696320766563746f727320686176652064657465726d696e69737469632073746f72616765206c6f636174696f6e7320646570656e64696e67206f6e2074686520746f7069632e2054686973450120616c6c6f7773206c696768742d636c69656e747320746f206c6576657261676520746865206368616e67657320747269652073746f7261676520747261636b696e67206d656368616e69736d20616e64e420696e2063617365206f66206368616e67657320666574636820746865206c697374206f66206576656e7473206f6620696e7465726573742e004d01205468652076616c756520686173207468652074797065206028543a3a426c6f636b4e756d6265722c204576656e74496e646578296020626563617573652069662077652075736564206f6e6c79206a7573744d012074686520604576656e74496e64657860207468656e20696e20636173652069662074686520746f70696320686173207468652073616d6520636f6e74656e7473206f6e20746865206e65787420626c6f636b0101206e6f206e6f74696669636174696f6e2077696c6c20626520747269676765726564207468757320746865206576656e74206d69676874206265206c6f73742e011c2866696c6c5f626c6f636b0004210120412062696720646973706174636820746861742077696c6c20646973616c6c6f7720616e79206f74686572207472616e73616374696f6e20746f20626520696e636c756465642e1872656d61726b041c5f72656d61726b1c5665633c75383e046c204d616b6520736f6d65206f6e2d636861696e2072656d61726b2e387365745f686561705f7061676573041470616765730c75363404fc2053657420746865206e756d626572206f6620706167657320696e2074686520576562417373656d626c7920656e7669726f6e6d656e74277320686561702e207365745f636f6465040c6e65771c5665633c75383e04482053657420746865206e657720636f64652e2c7365745f73746f7261676504146974656d73345665633c4b657956616c75653e046c2053657420736f6d65206974656d73206f662073746f726167652e306b696c6c5f73746f7261676504106b657973205665633c4b65793e0478204b696c6c20736f6d65206974656d732066726f6d2073746f726167652e2c6b696c6c5f70726566697804187072656669780c4b6579041501204b696c6c20616c6c2073746f72616765206974656d7320776974682061206b657920746861742073746172747320776974682074686520676976656e207072656669782e01084045787472696e7369635375636365737300049420416e2065787472696e73696320636f6d706c65746564207375636365737366756c6c792e3c45787472696e7369634661696c6564043444697370617463684572726f72045420416e2065787472696e736963206661696c65642e0014304261645369676e61747572650024426c6f636b46756c6c004c526571756972655369676e65644f726967696e004452657175697265526f6f744f726967696e003c526571756972654e6f4f726967696e001c5574696c697479000104146261746368041463616c6c735c5665633c3c542061732054726169743e3a3a43616c6c3e04b02053656e642061206261746368206f662064697370617463682063616c6c7320286f6e6c7920726f6f74292e0104344261746368457865637574656404785665633c526573756c743c28292c2044697370617463684572726f723e3e0000001042616265011042616265242845706f6368496e64657801000c75363420000000000000000004542043757272656e742065706f636820696e6465782e2c417574686f72697469657301009c5665633c28417574686f7269747949642c2042616265417574686f72697479576569676874293e0400046c2043757272656e742065706f636820617574686f7269746965732e2c47656e65736973536c6f7401000c75363420000000000000000008f82054686520736c6f74206174207768696368207468652066697273742065706f63682061637475616c6c7920737461727465642e205468697320697320309020756e74696c2074686520666972737420626c6f636b206f662074686520636861696e2e2c43757272656e74536c6f7401000c75363420000000000000000004542043757272656e7420736c6f74206e756d6265722e2852616e646f6d6e6573730100205b75383b2033325d80000000000000000000000000000000000000000000000000000000000000000028b8205468652065706f63682072616e646f6d6e65737320666f7220746865202a63757272656e742a2065706f63682e002c20232053656375726974790005012054686973204d555354204e4f54206265207573656420666f722067616d626c696e672c2061732069742063616e20626520696e666c75656e6365642062792061f8206d616c6963696f75732076616c696461746f7220696e207468652073686f7274207465726d2e204974204d4159206265207573656420696e206d616e7915012063727970746f677261706869632070726f746f636f6c732c20686f77657665722c20736f206c6f6e67206173206f6e652072656d656d6265727320746861742074686973150120286c696b652065766572797468696e6720656c7365206f6e2d636861696e29206974206973207075626c69632e20466f72206578616d706c652c2069742063616e206265050120757365642077686572652061206e756d626572206973206e656564656420746861742063616e6e6f742068617665206265656e2063686f73656e20627920616e0d01206164766572736172792c20666f7220707572706f7365732073756368206173207075626c69632d636f696e207a65726f2d6b6e6f776c656467652070726f6f66732e384e65787452616e646f6d6e6573730100205b75383b2033325d800000000000000000000000000000000000000000000000000000000000000000045c204e6578742065706f63682072616e646f6d6e6573732e305365676d656e74496e64657801000c7533321000000000247c2052616e646f6d6e65737320756e64657220636f6e737472756374696f6e2e00f4205765206d616b6520612074726164656f6666206265747765656e2073746f7261676520616363657373657320616e64206c697374206c656e6774682e01012057652073746f72652074686520756e6465722d636f6e737472756374696f6e2072616e646f6d6e65737320696e207365676d656e7473206f6620757020746f942060554e4445525f434f4e535452554354494f4e5f5345474d454e545f4c454e475448602e00ec204f6e63652061207365676d656e7420726561636865732074686973206c656e6774682c20776520626567696e20746865206e657874206f6e652e090120576520726573657420616c6c207365676d656e747320616e642072657475726e20746f206030602061742074686520626567696e6e696e67206f662065766572791c2065706f63682e44556e646572436f6e737472756374696f6e0101010c753332345665633c5b75383b2033325d3e000400002c496e697469616c697a65640000204d6179626556726604000801012054656d706f726172792076616c75652028636c656172656420617420626c6f636b2066696e616c697a6174696f6e292077686963682069732060536f6d65601d01206966207065722d626c6f636b20696e697469616c697a6174696f6e2068617320616c7265616479206265656e2063616c6c656420666f722063757272656e7420626c6f636b2e010000083445706f63684475726174696f6e0c75363420c800000000000000080d0120546865206e756d626572206f66202a2a736c6f74732a2a207468617420616e2065706f63682074616b65732e20576520636f75706c652073657373696f6e7320746ffc2065706f6368732c20692e652e2077652073746172742061206e65772073657373696f6e206f6e636520746865206e65772065706f636820626567696e732e444578706563746564426c6f636b54696d6524543a3a4d6f6d656e7420b80b00000000000014050120546865206578706563746564206176657261676520626c6f636b2074696d6520617420776869636820424142452073686f756c64206265206372656174696e67110120626c6f636b732e2053696e636520424142452069732070726f626162696c6973746963206974206973206e6f74207472697669616c20746f20666967757265206f75740501207768617420746865206578706563746564206176657261676520626c6f636b2074696d652073686f756c64206265206261736564206f6e2074686520736c6f740901206475726174696f6e20616e642074686520736563757269747920706172616d657465722060636020287768657265206031202d20636020726570726573656e7473a0207468652070726f626162696c697479206f66206120736c6f74206265696e6720656d707479292e002454696d657374616d70012454696d657374616d70080c4e6f77010024543a3a4d6f6d656e7420000000000000000004902043757272656e742074696d6520666f72207468652063757272656e7420626c6f636b2e24446964557064617465010010626f6f6c040004b420446964207468652074696d657374616d7020676574207570646174656420696e207468697320626c6f636b3f01040c736574040c6e6f7748436f6d706163743c543a3a4d6f6d656e743e245820536574207468652063757272656e742074696d652e00590120546869732063616c6c2073686f756c6420626520696e766f6b65642065786163746c79206f6e63652070657220626c6f636b2e2049742077696c6c2070616e6963206174207468652066696e616c697a6174696f6ed82070686173652c20696620746869732063616c6c206861736e2774206265656e20696e766f6b656420627920746861742074696d652e004501205468652074696d657374616d702073686f756c642062652067726561746572207468616e207468652070726576696f7573206f6e652062792074686520616d6f756e74207370656369666965642062794420604d696e696d756d506572696f64602e00d820546865206469737061746368206f726967696e20666f7220746869732063616c6c206d7573742062652060496e686572656e74602e0004344d696e696d756d506572696f6424543a3a4d6f6d656e7420dc0500000000000010690120546865206d696e696d756d20706572696f64206265747765656e20626c6f636b732e204265776172652074686174207468697320697320646966666572656e7420746f20746865202a65787065637465642a20706572696f64690120746861742074686520626c6f636b2070726f64756374696f6e206170706172617475732070726f76696465732e20596f75722063686f73656e20636f6e73656e7375732073797374656d2077696c6c2067656e6572616c6c79650120776f726b2077697468207468697320746f2064657465726d696e6520612073656e7369626c6520626c6f636b2074696d652e20652e672e20466f7220417572612c2069742077696c6c20626520646f75626c6520746869737020706572696f64206f6e2064656661756c742073657474696e67732e0028417574686f72736869700128417574686f72736869700c18556e636c65730100e85665633c556e636c65456e7472794974656d3c543a3a426c6f636b4e756d6265722c20543a3a486173682c20543a3a4163636f756e7449643e3e0400041c20556e636c657318417574686f72000030543a3a4163636f756e7449640400046420417574686f72206f662063757272656e7420626c6f636b2e30446964536574556e636c6573010010626f6f6c040004bc205768657468657220756e636c6573207765726520616c72656164792073657420696e207468697320626c6f636b2e0104287365745f756e636c657304286e65775f756e636c6573385665633c543a3a4865616465723e04642050726f76696465206120736574206f6620756e636c65732e0000001c496e6469636573011c496e6469636573082c4e657874456e756d53657401003c543a3a4163636f756e74496e6465781000000000047c20546865206e657874206672656520656e756d65726174696f6e207365742e1c456e756d5365740101013c543a3a4163636f756e74496e646578445665633c543a3a4163636f756e7449643e00040004582054686520656e756d65726174696f6e20736574732e010001043c4e65774163636f756e74496e64657808244163636f756e744964304163636f756e74496e64657810882041206e6577206163636f756e7420696e646578207761732061737369676e65642e0005012054686973206576656e74206973206e6f7420747269676765726564207768656e20616e206578697374696e6720696e64657820697320726561737369676e65646020746f20616e6f7468657220604163636f756e744964602e00002042616c616e636573012042616c616e6365731434546f74616c49737375616e6365010028543a3a42616c616e6365400000000000000000000000000000000004982054686520746f74616c20756e6974732069737375656420696e207468652073797374656d2e1c56657374696e6700010130543a3a4163636f756e744964ac56657374696e675363686564756c653c543a3a42616c616e63652c20543a3a426c6f636b4e756d6265723e00040004d820496e666f726d6174696f6e20726567617264696e67207468652076657374696e67206f66206120676976656e206163636f756e742e2c4672656542616c616e636501010130543a3a4163636f756e74496428543a3a42616c616e63650040000000000000000000000000000000002c9c20546865202766726565272062616c616e6365206f66206120676976656e206163636f756e742e004101205468697320697320746865206f6e6c792062616c616e63652074686174206d61747465727320696e207465726d73206f66206d6f7374206f7065726174696f6e73206f6e20746f6b656e732e204974750120616c6f6e65206973207573656420746f2064657465726d696e65207468652062616c616e6365207768656e20696e2074686520636f6e747261637420657865637574696f6e20656e7669726f6e6d656e742e205768656e207468697355012062616c616e63652066616c6c732062656c6f77207468652076616c7565206f6620604578697374656e7469616c4465706f736974602c207468656e20746865202763757272656e74206163636f756e74272069733d012064656c657465643a207370656369666963616c6c7920604672656542616c616e6365602e20467572746865722c2074686520604f6e4672656542616c616e63655a65726f602063616c6c6261636b450120697320696e766f6b65642c20676976696e672061206368616e636520746f2065787465726e616c206d6f64756c657320746f20636c65616e2075702064617461206173736f636961746564207769746854207468652064656c65746564206163636f756e742e005d01206073797374656d3a3a4163636f756e744e6f6e63656020697320616c736f2064656c657465642069662060526573657276656442616c616e63656020697320616c736f207a65726f2028697420616c736f2067657473150120636f6c6c617073656420746f207a65726f2069662069742065766572206265636f6d6573206c657373207468616e20604578697374656e7469616c4465706f736974602e3c526573657276656442616c616e636501010130543a3a4163636f756e74496428543a3a42616c616e63650040000000000000000000000000000000002c75012054686520616d6f756e74206f66207468652062616c616e6365206f66206120676976656e206163636f756e7420746861742069732065787465726e616c6c792072657365727665643b20746869732063616e207374696c6c206765749c20736c61736865642c20627574206765747320736c6173686564206c617374206f6620616c6c2e006d0120546869732062616c616e63652069732061202772657365727665272062616c616e63652074686174206f746865722073756273797374656d732075736520696e206f7264657220746f2073657420617369646520746f6b656e732501207468617420617265207374696c6c20276f776e65642720627920746865206163636f756e7420686f6c6465722c20627574207768696368206172652073757370656e6461626c652e007501205768656e20746869732062616c616e63652066616c6c732062656c6f77207468652076616c7565206f6620604578697374656e7469616c4465706f736974602c207468656e2074686973202772657365727665206163636f756e7427b42069732064656c657465643a207370656369666963616c6c792c2060526573657276656442616c616e6365602e004d01206073797374656d3a3a4163636f756e744e6f6e63656020697320616c736f2064656c6574656420696620604672656542616c616e63656020697320616c736f207a65726f2028697420616c736f2067657473190120636f6c6c617073656420746f207a65726f2069662069742065766572206265636f6d6573206c657373207468616e20604578697374656e7469616c4465706f736974602e29144c6f636b7301010130543a3a4163636f756e744964b05665633c42616c616e63654c6f636b3c543a3a42616c616e63652c20543a3a426c6f636b4e756d6265723e3e00040004b820416e79206c6971756964697479206c6f636b73206f6e20736f6d65206163636f756e742062616c616e6365732e0110207472616e736665720810646573748c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f757263651476616c75654c436f6d706163743c543a3a42616c616e63653e64d8205472616e7366657220736f6d65206c697175696420667265652062616c616e636520746f20616e6f74686572206163636f756e742e00090120607472616e73666572602077696c6c207365742074686520604672656542616c616e636560206f66207468652073656e64657220616e642072656365697665722e21012049742077696c6c2064656372656173652074686520746f74616c2069737375616e6365206f66207468652073797374656d2062792074686520605472616e73666572466565602e1501204966207468652073656e6465722773206163636f756e742069732062656c6f7720746865206578697374656e7469616c206465706f736974206173206120726573756c74b4206f6620746865207472616e736665722c20746865206163636f756e742077696c6c206265207265617065642e00190120546865206469737061746368206f726967696e20666f7220746869732063616c6c206d75737420626520605369676e65646020627920746865207472616e736163746f722e002c2023203c7765696768743e3101202d20446570656e64656e74206f6e20617267756d656e747320627574206e6f7420637269746963616c2c20676976656e2070726f70657220696d706c656d656e746174696f6e7320666f72cc202020696e70757420636f6e6669672074797065732e205365652072656c617465642066756e6374696f6e732062656c6f772e6901202d20497420636f6e7461696e732061206c696d69746564206e756d626572206f6620726561647320616e642077726974657320696e7465726e616c6c7920616e64206e6f20636f6d706c657820636f6d7075746174696f6e2e004c2052656c617465642066756e6374696f6e733a0051012020202d2060656e737572655f63616e5f77697468647261776020697320616c776179732063616c6c656420696e7465726e616c6c792062757420686173206120626f756e64656420636f6d706c65786974792e2d012020202d205472616e7366657272696e672062616c616e63657320746f206163636f756e7473207468617420646964206e6f74206578697374206265666f72652077696c6c206361757365d420202020202060543a3a4f6e4e65774163636f756e743a3a6f6e5f6e65775f6163636f756e746020746f2062652063616c6c65642edc2020202d2052656d6f76696e6720656e6f7567682066756e64732066726f6d20616e206163636f756e742077696c6c20747269676765725901202020202060543a3a4475737452656d6f76616c3a3a6f6e5f756e62616c616e6365646020616e642060543a3a4f6e4672656542616c616e63655a65726f3a3a6f6e5f667265655f62616c616e63655f7a65726f602e49012020202d20607472616e736665725f6b6565705f616c6976656020776f726b73207468652073616d652077617920617320607472616e73666572602c206275742068617320616e206164646974696f6e616cf82020202020636865636b207468617420746865207472616e736665722077696c6c206e6f74206b696c6c20746865206f726967696e206163636f756e742e00302023203c2f7765696768743e2c7365745f62616c616e63650c0c77686f8c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f75726365206e65775f667265654c436f6d706163743c543a3a42616c616e63653e306e65775f72657365727665644c436f6d706163743c543a3a42616c616e63653e349420536574207468652062616c616e636573206f66206120676976656e206163636f756e742e00210120546869732077696c6c20616c74657220604672656542616c616e63656020616e642060526573657276656442616c616e63656020696e2073746f726167652e2069742077696c6c090120616c736f2064656372656173652074686520746f74616c2069737375616e6365206f66207468652073797374656d202860546f74616c49737375616e636560292e190120496620746865206e65772066726565206f722072657365727665642062616c616e63652069732062656c6f7720746865206578697374656e7469616c206465706f7369742ce82069742077696c6c20726573657420746865206163636f756e74206e6f6e636520286073797374656d3a3a4163636f756e744e6f6e636560292e00b420546865206469737061746368206f726967696e20666f7220746869732063616c6c2069732060726f6f74602e002c2023203c7765696768743e80202d20496e646570656e64656e74206f662074686520617267756d656e74732ec4202d20436f6e7461696e732061206c696d69746564206e756d626572206f6620726561647320616e64207772697465732e302023203c2f7765696768743e38666f7263655f7472616e736665720c18736f757263658c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f7572636510646573748c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f757263651476616c75654c436f6d706163743c543a3a42616c616e63653e0851012045786163746c7920617320607472616e73666572602c2065786365707420746865206f726967696e206d75737420626520726f6f7420616e642074686520736f75726365206163636f756e74206d61792062652c207370656369666965642e4c7472616e736665725f6b6565705f616c6976650810646573748c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f757263651476616c75654c436f6d706163743c543a3a42616c616e63653e1851012053616d6520617320746865205b607472616e73666572605d2063616c6c2c206275742077697468206120636865636b207468617420746865207472616e736665722077696c6c206e6f74206b696c6c2074686540206f726967696e206163636f756e742e00bc20393925206f66207468652074696d6520796f752077616e74205b607472616e73666572605d20696e73746561642e00c4205b607472616e73666572605d3a207374727563742e4d6f64756c652e68746d6c236d6574686f642e7472616e73666572010c284e65774163636f756e7408244163636f756e7449641c42616c616e6365046c2041206e6577206163636f756e742077617320637265617465642e345265617065644163636f756e7404244163636f756e744964045c20416e206163636f756e7420776173207265617065642e205472616e7366657210244163636f756e744964244163636f756e7449641c42616c616e63651c42616c616e636504b0205472616e7366657220737563636565646564202866726f6d2c20746f2c2076616c75652c2066656573292e0c484578697374656e7469616c4465706f73697428543a3a42616c616e63654000407a10f35a0000000000000000000004d420546865206d696e696d756d20616d6f756e7420726571756972656420746f206b65657020616e206163636f756e74206f70656e2e2c5472616e7366657246656528543a3a42616c616e6365400010a5d4e800000000000000000000000494205468652066656520726571756972656420746f206d616b652061207472616e736665722e2c4372656174696f6e46656528543a3a42616c616e6365400010a5d4e80000000000000000000000049c205468652066656520726571756972656420746f2063726561746520616e206163636f756e742e00485472616e73616374696f6e5061796d656e74012042616c616e63657304444e6578744665654d756c7469706c6965720100284d756c7469706c69657220000000000000000000000008485472616e73616374696f6e426173654665653042616c616e63654f663c543e400010a5d4e8000000000000000000000004dc205468652066656520746f206265207061696420666f72206d616b696e672061207472616e73616374696f6e3b2074686520626173652e485472616e73616374696f6e427974654665653042616c616e63654f663c543e4000e40b54020000000000000000000000040d01205468652066656520746f206265207061696420666f72206d616b696e672061207472616e73616374696f6e3b20746865207065722d6279746520706f7274696f6e2e001c5374616b696e67011c5374616b696e674c3856616c696461746f72436f756e7401000c753332100000000004a82054686520696465616c206e756d626572206f66207374616b696e67207061727469636970616e74732e544d696e696d756d56616c696461746f72436f756e7401000c7533321004000000044101204d696e696d756d206e756d626572206f66207374616b696e67207061727469636970616e7473206265666f726520656d657267656e637920636f6e646974696f6e732061726520696d706f7365642e34496e76756c6e657261626c65730100445665633c543a3a4163636f756e7449643e04000c590120416e792076616c696461746f72732074686174206d6179206e6576657220626520736c6173686564206f7220666f726369626c79206b69636b65642e20497427732061205665632073696e636520746865792772654d01206561737920746f20696e697469616c697a6520616e642074686520706572666f726d616e636520686974206973206d696e696d616c2028776520657870656374206e6f206d6f7265207468616e20666f7572ac20696e76756c6e657261626c65732920616e64207265737472696374656420746f20746573746e6574732e18426f6e64656400010130543a3a4163636f756e74496430543a3a4163636f756e744964000400040101204d61702066726f6d20616c6c206c6f636b65642022737461736822206163636f756e747320746f2074686520636f6e74726f6c6c6572206163636f756e742e184c656467657200010130543a3a4163636f756e744964a45374616b696e674c65646765723c543a3a4163636f756e7449642c2042616c616e63654f663c543e3e000400044501204d61702066726f6d20616c6c2028756e6c6f636b6564292022636f6e74726f6c6c657222206163636f756e747320746f2074686520696e666f20726567617264696e6720746865207374616b696e672e14506179656501010130543a3a4163636f756e7449644452657761726444657374696e6174696f6e00040004e42057686572652074686520726577617264207061796d656e742073686f756c64206265206d6164652e204b657965642062792073746173682e2856616c696461746f727301010130543a3a4163636f756e7449647056616c696461746f7250726566733c42616c616e63654f663c543e3e01040004450120546865206d61702066726f6d202877616e6e616265292076616c696461746f72207374617368206b657920746f2074686520707265666572656e636573206f6620746861742076616c696461746f722e284e6f6d696e61746f727301010130543a3a4163636f756e744964445665633c543a3a4163636f756e7449643e01040004650120546865206d61702066726f6d206e6f6d696e61746f72207374617368206b657920746f2074686520736574206f66207374617368206b657973206f6620616c6c2076616c696461746f727320746f206e6f6d696e6174652e1c5374616b65727301010130543a3a4163636f756e744964904578706f737572653c543a3a4163636f756e7449642c2042616c616e63654f663c543e3e000c000000104d01204e6f6d696e61746f727320666f72206120706172746963756c6172206163636f756e74207468617420697320696e20616374696f6e207269676874206e6f772e20596f752063616e277420697465726174651901207468726f7567682076616c696461746f727320686572652c2062757420796f752063616e2066696e64207468656d20696e207468652053657373696f6e206d6f64756c652e00902054686973206973206b6579656420627920746865207374617368206163636f756e742e3843757272656e74456c65637465640100445665633c543a3a4163636f756e7449643e040004fc205468652063757272656e746c7920656c65637465642076616c696461746f7220736574206b65796564206279207374617368206163636f756e742049442e2843757272656e74457261010020457261496e6465781000000000045c205468652063757272656e742065726120696e6465782e3c43757272656e74457261537461727401002c4d6f6d656e744f663c543e200000000000000000047820546865207374617274206f66207468652063757272656e74206572612e6c43757272656e74457261537461727453657373696f6e496e64657801003053657373696f6e496e646578100000000004d0205468652073657373696f6e20696e646578206174207768696368207468652063757272656e742065726120737461727465642e5843757272656e74457261506f696e74734561726e6564010024457261506f696e7473140000000000040d01205265776172647320666f72207468652063757272656e74206572612e205573696e6720696e6469636573206f662063757272656e7420656c6563746564207365742e24536c6f745374616b6501003042616c616e63654f663c543e40000000000000000000000000000000000c31012054686520616d6f756e74206f662062616c616e6365206163746976656c79206174207374616b6520666f7220656163682076616c696461746f7220736c6f742c2063757272656e746c792e00c02054686973206973207573656420746f20646572697665207265776172647320616e642070756e6973686d656e74732e20466f72636545726101001c466f7263696e670400041d01205472756520696620746865206e6578742073657373696f6e206368616e67652077696c6c2062652061206e657720657261207265676172646c657373206f6620696e6465782e4c536c6173685265776172644672616374696f6e01001c50657262696c6c10000000000cf8205468652070657263656e74616765206f662074686520736c617368207468617420697320646973747269627574656420746f207265706f72746572732e00e4205468652072657374206f662074686520736c61736865642076616c75652069732068616e646c6564206279207468652060536c617368602e28426f6e646564457261730100745665633c28457261496e6465782c2053657373696f6e496e646578293e04000425012041206d617070696e672066726f6d207374696c6c2d626f6e646564206572617320746f207468652066697273742073657373696f6e20696e646578206f662074686174206572612e3c457261536c6173684a6f75726e616c01010120457261496e646578c85665633c536c6173684a6f75726e616c456e7472793c543a3a4163636f756e7449642c2042616c616e63654f663c543e3e3e00040004bc20416c6c20736c617368657320746861742068617665206f6363757272656420696e206120676976656e206572612e013c10626f6e640c28636f6e74726f6c6c65728c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f757263651476616c756554436f6d706163743c42616c616e63654f663c543e3e1470617965654452657761726444657374696e6174696f6e3c65012054616b6520746865206f726967696e206163636f756e74206173206120737461736820616e64206c6f636b207570206076616c756560206f66206974732062616c616e63652e2060636f6e74726f6c6c6572602077696c6c8420626520746865206163636f756e74207468617420636f6e74726f6c732069742e003101206076616c756560206d757374206265206d6f7265207468616e2074686520606d696e696d756d5f62616c616e636560207370656369666965642062792060543a3a43757272656e6379602e00250120546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20627920746865207374617368206163636f756e742e002c2023203c7765696768743ed4202d20496e646570656e64656e74206f662074686520617267756d656e74732e204d6f64657261746520636f6d706c65786974792e20202d204f2831292e68202d20546872656520657874726120444220656e74726965732e006d01204e4f54453a2054776f206f66207468652073746f726167652077726974657320286053656c663a3a626f6e646564602c206053656c663a3a7061796565602920617265205f6e657665725f20636c65616e656420756e6c65737325012074686520606f726967696e602066616c6c732062656c6f77205f6578697374656e7469616c206465706f7369745f20616e6420676574732072656d6f76656420617320647573742e302023203c2f7765696768743e28626f6e645f657874726104386d61785f6164646974696f6e616c54436f6d706163743c42616c616e63654f663c543e3e3865012041646420736f6d6520657874726120616d6f756e742074686174206861766520617070656172656420696e207468652073746173682060667265655f62616c616e63656020696e746f207468652062616c616e63652075703420666f72207374616b696e672e00510120557365207468697320696620746865726520617265206164646974696f6e616c2066756e647320696e20796f7572207374617368206163636f756e74207468617420796f75207769736820746f20626f6e642e650120556e6c696b65205b60626f6e64605d206f72205b60756e626f6e64605d20746869732066756e6374696f6e20646f6573206e6f7420696d706f736520616e79206c696d69746174696f6e206f6e2074686520616d6f756e744c20746861742063616e2062652061646465642e00550120546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f206279207468652073746173682c206e6f742074686520636f6e74726f6c6c65722e002c2023203c7765696768743ee8202d20496e646570656e64656e74206f662074686520617267756d656e74732e20496e7369676e69666963616e7420636f6d706c65786974792e20202d204f2831292e40202d204f6e6520444220656e7472792e302023203c2f7765696768743e18756e626f6e64041476616c756554436f6d706163743c42616c616e63654f663c543e3e5c5501205363686564756c65206120706f7274696f6e206f662074686520737461736820746f20626520756e6c6f636b656420726561647920666f72207472616e73666572206f75742061667465722074686520626f6e64010120706572696f6420656e64732e2049662074686973206c656176657320616e20616d6f756e74206163746976656c7920626f6e646564206c657373207468616e250120543a3a43757272656e63793a3a6d696e696d756d5f62616c616e636528292c207468656e20697420697320696e6372656173656420746f207468652066756c6c20616d6f756e742e004901204f6e63652074686520756e6c6f636b20706572696f6420697320646f6e652c20796f752063616e2063616c6c206077697468647261775f756e626f6e6465646020746f2061637475616c6c79206d6f7665c0207468652066756e6473206f7574206f66206d616e6167656d656e7420726561647920666f72207472616e736665722e003d01204e6f206d6f7265207468616e2061206c696d69746564206e756d626572206f6620756e6c6f636b696e67206368756e6b73202873656520604d41585f554e4c4f434b494e475f4348554e4b5360293d012063616e20636f2d657869737473206174207468652073616d652074696d652e20496e207468617420636173652c205b6043616c6c3a3a77697468647261775f756e626f6e646564605d206e656564fc20746f2062652063616c6c656420666972737420746f2072656d6f766520736f6d65206f6620746865206368756e6b732028696620706f737369626c65292e00550120546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2062792074686520636f6e74726f6c6c65722c206e6f74207468652073746173682e00982053656520616c736f205b6043616c6c3a3a77697468647261775f756e626f6e646564605d2e002c2023203c7765696768743e4101202d20496e646570656e64656e74206f662074686520617267756d656e74732e204c696d697465642062757420706f74656e7469616c6c79206578706c6f697461626c6520636f6d706c65786974792e98202d20436f6e7461696e732061206c696d69746564206e756d626572206f662072656164732e6501202d20456163682063616c6c20287265717569726573207468652072656d61696e646572206f662074686520626f6e6465642062616c616e636520746f2062652061626f766520606d696e696d756d5f62616c616e63656029710120202077696c6c2063617573652061206e657720656e74727920746f20626520696e73657274656420696e746f206120766563746f722028604c65646765722e756e6c6f636b696e676029206b65707420696e2073746f726167652ea501202020546865206f6e6c792077617920746f20636c65616e207468652061666f72656d656e74696f6e65642073746f72616765206974656d20697320616c736f20757365722d636f6e74726f6c6c656420766961206077697468647261775f756e626f6e646564602e40202d204f6e6520444220656e7472792e28203c2f7765696768743e4477697468647261775f756e626f6e64656400402d012052656d6f766520616e7920756e6c6f636b6564206368756e6b732066726f6d207468652060756e6c6f636b696e67602071756575652066726f6d206f7572206d616e6167656d656e742e003501205468697320657373656e7469616c6c7920667265657320757020746861742062616c616e636520746f206265207573656420627920746865207374617368206163636f756e7420746f20646f4c2077686174657665722069742077616e74732e00550120546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2062792074686520636f6e74726f6c6c65722c206e6f74207468652073746173682e006c2053656520616c736f205b6043616c6c3a3a756e626f6e64605d2e002c2023203c7765696768743e5501202d20436f756c6420626520646570656e64656e74206f6e2074686520606f726967696e6020617267756d656e7420616e6420686f77206d7563682060756e6c6f636b696e6760206368756e6b732065786973742e45012020497420696d706c6965732060636f6e736f6c69646174655f756e6c6f636b656460207768696368206c6f6f7073206f76657220604c65646765722e756e6c6f636b696e67602c207768696368206973f42020696e6469726563746c7920757365722d636f6e74726f6c6c65642e20536565205b60756e626f6e64605d20666f72206d6f72652064657461696c2e7901202d20436f6e7461696e732061206c696d69746564206e756d626572206f662072656164732c20796574207468652073697a65206f6620776869636820636f756c64206265206c61726765206261736564206f6e20606c6564676572602ec8202d2057726974657320617265206c696d6974656420746f2074686520606f726967696e60206163636f756e74206b65792e302023203c2f7765696768743e2076616c6964617465041470726566737056616c696461746f7250726566733c42616c616e63654f663c543e3e2ce8204465636c617265207468652064657369726520746f2076616c696461746520666f7220746865206f726967696e20636f6e74726f6c6c65722e00dc20456666656374732077696c6c2062652066656c742061742074686520626567696e6e696e67206f6620746865206e657874206572612e00550120546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2062792074686520636f6e74726f6c6c65722c206e6f74207468652073746173682e002c2023203c7765696768743ee8202d20496e646570656e64656e74206f662074686520617267756d656e74732e20496e7369676e69666963616e7420636f6d706c65786974792e98202d20436f6e7461696e732061206c696d69746564206e756d626572206f662072656164732ec8202d2057726974657320617265206c696d6974656420746f2074686520606f726967696e60206163636f756e74206b65792e302023203c2f7765696768743e206e6f6d696e617465041c74617267657473a05665633c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f757263653e2c1101204465636c617265207468652064657369726520746f206e6f6d696e6174652060746172676574736020666f7220746865206f726967696e20636f6e74726f6c6c65722e00dc20456666656374732077696c6c2062652066656c742061742074686520626567696e6e696e67206f6620746865206e657874206572612e00550120546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2062792074686520636f6e74726f6c6c65722c206e6f74207468652073746173682e002c2023203c7765696768743e2501202d20546865207472616e73616374696f6e277320636f6d706c65786974792069732070726f706f7274696f6e616c20746f207468652073697a65206f66206074617267657473602c982077686963682069732063617070656420617420604d41585f4e4f4d494e4154494f4e53602ed8202d20426f74682074686520726561647320616e642077726974657320666f6c6c6f7720612073696d696c6172207061747465726e2e302023203c2f7765696768743e146368696c6c002cc8204465636c617265206e6f2064657369726520746f206569746865722076616c6964617465206f72206e6f6d696e6174652e00dc20456666656374732077696c6c2062652066656c742061742074686520626567696e6e696e67206f6620746865206e657874206572612e00550120546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2062792074686520636f6e74726f6c6c65722c206e6f74207468652073746173682e002c2023203c7765696768743ee8202d20496e646570656e64656e74206f662074686520617267756d656e74732e20496e7369676e69666963616e7420636f6d706c65786974792e54202d20436f6e7461696e73206f6e6520726561642ec8202d2057726974657320617265206c696d6974656420746f2074686520606f726967696e60206163636f756e74206b65792e302023203c2f7765696768743e247365745f7061796565041470617965654452657761726444657374696e6174696f6e2cb8202852652d2973657420746865207061796d656e742074617267657420666f72206120636f6e74726f6c6c65722e00dc20456666656374732077696c6c2062652066656c742061742074686520626567696e6e696e67206f6620746865206e657874206572612e00550120546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2062792074686520636f6e74726f6c6c65722c206e6f74207468652073746173682e002c2023203c7765696768743ee8202d20496e646570656e64656e74206f662074686520617267756d656e74732e20496e7369676e69666963616e7420636f6d706c65786974792e98202d20436f6e7461696e732061206c696d69746564206e756d626572206f662072656164732ec8202d2057726974657320617265206c696d6974656420746f2074686520606f726967696e60206163636f756e74206b65792e302023203c2f7765696768743e387365745f636f6e74726f6c6c65720428636f6e74726f6c6c65728c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f757263652c90202852652d297365742074686520636f6e74726f6c6c6572206f6620612073746173682e00dc20456666656374732077696c6c2062652066656c742061742074686520626567696e6e696e67206f6620746865206e657874206572612e00550120546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f206279207468652073746173682c206e6f742074686520636f6e74726f6c6c65722e002c2023203c7765696768743ee8202d20496e646570656e64656e74206f662074686520617267756d656e74732e20496e7369676e69666963616e7420636f6d706c65786974792e98202d20436f6e7461696e732061206c696d69746564206e756d626572206f662072656164732ec8202d2057726974657320617265206c696d6974656420746f2074686520606f726967696e60206163636f756e74206b65792e302023203c2f7765696768743e4c7365745f76616c696461746f725f636f756e74040c6e657730436f6d706163743c7533323e04802054686520696465616c206e756d626572206f662076616c696461746f72732e34666f7263655f6e6f5f657261730014b020466f72636520746865726520746f206265206e6f206e6577206572617320696e646566696e6974656c792e002c2023203c7765696768743e40202d204e6f20617267756d656e74732e302023203c2f7765696768743e34666f7263655f6e65775f65726100184d0120466f72636520746865726520746f2062652061206e6577206572612061742074686520656e64206f6620746865206e6578742073657373696f6e2e20416674657220746869732c2069742077696c6c206265a020726573657420746f206e6f726d616c20286e6f6e2d666f7263656429206265686176696f75722e002c2023203c7765696768743e40202d204e6f20617267756d656e74732e302023203c2f7765696768743e447365745f696e76756c6e657261626c6573042876616c696461746f7273445665633c543a3a4163636f756e7449643e04cc20536574207468652076616c696461746f72732077686f2063616e6e6f7420626520736c61736865642028696620616e79292e34666f7263655f756e7374616b650414737461736830543a3a4163636f756e744964040d0120466f72636520612063757272656e74207374616b657220746f206265636f6d6520636f6d706c6574656c7920756e7374616b65642c20696d6d6564696174656c792e50666f7263655f6e65775f6572615f616c776179730014050120466f72636520746865726520746f2062652061206e6577206572612061742074686520656e64206f662073657373696f6e7320696e646566696e6974656c792e002c2023203c7765696768743e50202d204f6e652073746f72616765207772697465302023203c2f7765696768743e010c18526577617264081c42616c616e63651c42616c616e636508510120416c6c2076616c696461746f72732068617665206265656e207265776172646564206279207468652066697273742062616c616e63653b20746865207365636f6e64206973207468652072656d61696e6465728c2066726f6d20746865206d6178696d756d20616d6f756e74206f66207265776172642e14536c61736808244163636f756e7449641c42616c616e6365042501204f6e652076616c696461746f722028616e6420697473206e6f6d696e61746f72732920686173206265656e20736c61736865642062792074686520676976656e20616d6f756e742e684f6c64536c617368696e675265706f7274446973636172646564043053657373696f6e496e646578081d0120416e206f6c6420736c617368696e67207265706f72742066726f6d2061207072696f72206572612077617320646973636172646564206265636175736520697420636f756c6448206e6f742062652070726f6365737365642e083853657373696f6e735065724572613053657373696f6e496e64657810060000000470204e756d626572206f662073657373696f6e7320706572206572612e3c426f6e64696e674475726174696f6e20457261496e64657810a002000004e4204e756d626572206f6620657261732074686174207374616b65642066756e6473206d7573742072656d61696e20626f6e64656420666f722e001c53657373696f6e011c53657373696f6e1c2856616c696461746f727301004c5665633c543a3a56616c696461746f7249643e0400047c205468652063757272656e7420736574206f662076616c696461746f72732e3043757272656e74496e64657801003053657373696f6e496e646578100000000004782043757272656e7420696e646578206f66207468652073657373696f6e2e345175657565644368616e676564010010626f6f6c040008390120547275652069662074686520756e6465726c79696e672065636f6e6f6d6963206964656e746974696573206f7220776569676874696e6720626568696e64207468652076616c696461746f7273a420686173206368616e67656420696e20746865207175657565642076616c696461746f72207365742e285175657565644b6579730100785665633c28543a3a56616c696461746f7249642c20543a3a4b657973293e0400083d012054686520717565756564206b65797320666f7220746865206e6578742073657373696f6e2e205768656e20746865206e6578742073657373696f6e20626567696e732c207468657365206b657973e02077696c6c206265207573656420746f2064657465726d696e65207468652076616c696461746f7227732073657373696f6e206b6579732e4844697361626c656456616c696461746f72730100205665633c7533323e04000c8020496e6469636573206f662064697361626c65642076616c696461746f72732e003501205468652073657420697320636c6561726564207768656e20606f6e5f73657373696f6e5f656e64696e67602072657475726e732061206e657720736574206f66206964656e7469746965732e204e6578744b6579730002041c5665633c75383e38543a3a56616c696461746f7249641c543a3a4b657973010400109c20546865206e6578742073657373696f6e206b65797320666f7220612076616c696461746f722e00590120546865206669727374206b657920697320616c77617973206044454455505f4b45595f5052454649586020746f206861766520616c6c20746865206461746120696e207468652073616d65206272616e6368206f6661012074686520747269652e20486176696e6720616c6c206461746120696e207468652073616d65206272616e63682073686f756c642070726576656e7420736c6f77696e6720646f776e206f7468657220717565726965732e204b65794f776e65720002041c5665633c75383e50284b65795479706549642c205665633c75383e2938543a3a56616c696461746f72496401040010250120546865206f776e6572206f662061206b65792e20546865207365636f6e64206b65792069732074686520604b657954797065496460202b2074686520656e636f646564206b65792e00590120546865206669727374206b657920697320616c77617973206044454455505f4b45595f5052454649586020746f206861766520616c6c20746865206461746120696e207468652073616d65206272616e6368206f6661012074686520747269652e20486176696e6720616c6c206461746120696e207468652073616d65206272616e63682073686f756c642070726576656e7420736c6f77696e6720646f776e206f7468657220717565726965732e0104207365745f6b65797308106b6579731c543a3a4b6579731470726f6f661c5665633c75383e28e42053657473207468652073657373696f6e206b6579287329206f66207468652066756e6374696f6e2063616c6c657220746f20606b6579602e210120416c6c6f777320616e206163636f756e7420746f20736574206974732073657373696f6e206b6579207072696f7220746f206265636f6d696e6720612076616c696461746f722ec4205468697320646f65736e27742074616b652065666665637420756e74696c20746865206e6578742073657373696f6e2e00d420546865206469737061746368206f726967696e206f6620746869732066756e6374696f6e206d757374206265207369676e65642e002c2023203c7765696768743e88202d204f286c6f67206e2920696e206e756d626572206f66206163636f756e74732e58202d204f6e6520657874726120444220656e7472792e302023203c2f7765696768743e0104284e657753657373696f6e043053657373696f6e496e646578085501204e65772073657373696f6e206861732068617070656e65642e204e6f746520746861742074686520617267756d656e74206973207468652073657373696f6e20696e6465782c206e6f742074686520626c6f636b88206e756d626572206173207468652074797065206d6967687420737567676573742e044044454455505f4b45595f50524546495814265b75385d38343a73657373696f6e3a6b6579730865012055736564206173206669727374206b657920666f7220604e6578744b6579736020616e6420604b65794f776e65726020746f2070757420616c6c20746865206461746120696e746f207468652073616d65206272616e636834206f662074686520747269652e002444656d6f6372616379012444656d6f63726163793c3c5075626c696350726f70436f756e7401002450726f70496e646578100000000004f420546865206e756d626572206f6620287075626c6963292070726f706f73616c7320746861742068617665206265656e206d61646520736f206661722e2c5075626c696350726f70730100ac5665633c2850726f70496e6465782c20543a3a50726f706f73616c2c20543a3a4163636f756e744964293e0400048020546865207075626c69632070726f706f73616c732e20556e736f727465642e244465706f7369744f660001012450726f70496e646578842842616c616e63654f663c543e2c205665633c543a3a4163636f756e7449643e2900040004842054686f73652077686f2068617665206c6f636b65642061206465706f7369742e3c5265666572656e64756d436f756e7401003c5265666572656e64756d496e646578100000000004310120546865206e6578742066726565207265666572656e64756d20696e6465782c20616b6120746865206e756d626572206f66207265666572656e6461207374617274656420736f206661722e244e65787454616c6c7901003c5265666572656e64756d496e646578100000000004c820546865206e657874207265666572656e64756d20696e64657820746861742073686f756c642062652074616c6c6965642e405265666572656e64756d496e666f4f660001013c5265666572656e64756d496e646578b4285265666572656e64756d496e666f3c543a3a426c6f636b4e756d6265722c20543a3a50726f706f73616c3e2900040004b420496e666f726d6174696f6e20636f6e6365726e696e6720616e7920676976656e207265666572656e64756d2e344469737061746368517565756501010138543a3a426c6f636b4e756d626572ac5665633c4f7074696f6e3c28543a3a50726f706f73616c2c205265666572656e64756d496e646578293e3e00040004c0205175657565206f66207375636365737366756c207265666572656e646120746f20626520646973706174636865642e24566f74657273466f720101013c5265666572656e64756d496e646578445665633c543a3a4163636f756e7449643e00040004a4204765742074686520766f7465727320666f72207468652063757272656e742070726f706f73616c2e18566f74654f660101017c285265666572656e64756d496e6465782c20543a3a4163636f756e7449642910566f7465000400106101204765742074686520766f746520696e206120676976656e207265666572656e64756d206f66206120706172746963756c617220766f7465722e2054686520726573756c74206973206d65616e696e6766756c206f6e6c794d012069662060766f746572735f666f726020696e636c756465732074686520766f746572207768656e2063616c6c6564207769746820746865207265666572656e64756d2028796f75276c6c20676574207468655d012064656661756c742060566f7465602076616c7565206f7468657277697365292e20496620796f7520646f6e27742077616e7420746f20636865636b2060766f746572735f666f72602c207468656e20796f752063616ef420616c736f20636865636b20666f722073696d706c65206578697374656e636520776974682060566f74654f663a3a657869737473602066697273742e1450726f787900010130543a3a4163636f756e74496430543a3a4163636f756e7449640004000831012057686f2069732061626c6520746f20766f746520666f722077686f6d2e2056616c7565206973207468652066756e642d686f6c64696e67206163636f756e742c206b6579206973207468658820766f74652d7472616e73616374696f6e2d73656e64696e67206163636f756e742e2c44656c65676174696f6e7301010130543a3a4163636f756e7449646828543a3a4163636f756e7449642c20436f6e76696374696f6e2901840000000000000000000000000000000000000000000000000000000000000000000441012047657420746865206163636f756e742028616e64206c6f636b20706572696f64732920746f20776869636820616e6f74686572206163636f756e742069732064656c65676174696e6720766f74652e544c6173745461626c656457617345787465726e616c010010626f6f6c0400085901205472756520696620746865206c617374207265666572656e64756d207461626c656420776173207375626d69747465642065787465726e616c6c792e2046616c7365206966206974207761732061207075626c6963282070726f706f73616c2e304e65787445787465726e616c00007028543a3a50726f706f73616c2c20566f74655468726573686f6c6429040010590120546865207265666572656e64756d20746f206265207461626c6564207768656e6576657220697420776f756c642062652076616c696420746f207461626c6520616e2065787465726e616c2070726f706f73616c2e550120546869732068617070656e73207768656e2061207265666572656e64756d206e6565647320746f206265207461626c656420616e64206f6e65206f662074776f20636f6e646974696f6e7320617265206d65743aa4202d20604c6173745461626c656457617345787465726e616c60206973206066616c7365603b206f7268202d20605075626c696350726f70736020697320656d7074792e24426c61636b6c6973740001011c543a3a486173688c28543a3a426c6f636b4e756d6265722c205665633c543a3a4163636f756e7449643e290004000851012041207265636f7264206f662077686f207665746f656420776861742e204d6170732070726f706f73616c206861736820746f206120706f737369626c65206578697374656e7420626c6f636b206e756d626572e82028756e74696c207768656e206974206d6179206e6f742062652072657375626d69747465642920616e642077686f207665746f65642069742e3443616e63656c6c6174696f6e730101011c543a3a4861736810626f6f6c000400042901205265636f7264206f6620616c6c2070726f706f73616c7320746861742068617665206265656e207375626a65637420746f20656d657267656e63792063616e63656c6c6174696f6e2e01441c70726f706f7365082070726f706f73616c40426f783c543a3a50726f706f73616c3e1476616c756554436f6d706163743c42616c616e63654f663c543e3e18a02050726f706f736520612073656e73697469766520616374696f6e20746f2062652074616b656e2e002c2023203c7765696768743e20202d204f2831292e80202d2054776f204442206368616e6765732c206f6e6520444220656e7472792e302023203c2f7765696768743e187365636f6e64042070726f706f73616c48436f6d706163743c50726f70496e6465783e18a02050726f706f736520612073656e73697469766520616374696f6e20746f2062652074616b656e2e002c2023203c7765696768743e20202d204f2831292e40202d204f6e6520444220656e7472792e302023203c2f7765696768743e10766f746508247265665f696e64657860436f6d706163743c5265666572656e64756d496e6465783e10766f746510566f74651c350120566f746520696e2061207265666572656e64756d2e2049662060766f74652e69735f6179652829602c2074686520766f746520697320746f20656e616374207468652070726f706f73616c3bbc206f7468657277697365206974206973206120766f746520746f206b65657020746865207374617475732071756f2e002c2023203c7765696768743e20202d204f2831292e7c202d204f6e65204442206368616e67652c206f6e6520444220656e7472792e302023203c2f7765696768743e2870726f78795f766f746508247265665f696e64657860436f6d706163743c5265666572656e64756d496e6465783e10766f746510566f74651c510120566f746520696e2061207265666572656e64756d206f6e20626568616c66206f6620612073746173682e2049662060766f74652e69735f6179652829602c2074686520766f746520697320746f20656e616374f8207468652070726f706f73616c3b20206f7468657277697365206974206973206120766f746520746f206b65657020746865207374617475732071756f2e002c2023203c7765696768743e20202d204f2831292e7c202d204f6e65204442206368616e67652c206f6e6520444220656e7472792e302023203c2f7765696768743e40656d657267656e63795f63616e63656c04247265665f696e6465783c5265666572656e64756d496e646578085101205363686564756c6520616e20656d657267656e63792063616e63656c6c6174696f6e206f662061207265666572656e64756d2e2043616e6e6f742068617070656e20747769636520746f207468652073616d6530207265666572656e64756d2e4065787465726e616c5f70726f706f7365042070726f706f73616c40426f783c543a3a50726f706f73616c3e083101205363686564756c652061207265666572656e64756d20746f206265207461626c6564206f6e6365206974206973206c6567616c20746f207363686564756c6520616e2065787465726e616c30207265666572656e64756d2e6465787465726e616c5f70726f706f73655f6d616a6f72697479042070726f706f73616c40426f783c543a3a50726f706f73616c3e145901205363686564756c652061206d616a6f726974792d63617272696573207265666572656e64756d20746f206265207461626c6564206e657874206f6e6365206974206973206c6567616c20746f207363686564756c656020616e2065787465726e616c207265666572656e64756d2e004d0120556e6c696b65206065787465726e616c5f70726f706f7365602c20626c61636b6c697374696e6720686173206e6f20656666656374206f6e207468697320616e64206974206d6179207265706c61636520619c207072652d7363686564756c6564206065787465726e616c5f70726f706f7365602063616c6c2e6065787465726e616c5f70726f706f73655f64656661756c74042070726f706f73616c40426f783c543a3a50726f706f73616c3e144901205363686564756c652061206e656761746976652d7475726e6f75742d62696173207265666572656e64756d20746f206265207461626c6564206e657874206f6e6365206974206973206c6567616c20746f84207363686564756c6520616e2065787465726e616c207265666572656e64756d2e004d0120556e6c696b65206065787465726e616c5f70726f706f7365602c20626c61636b6c697374696e6720686173206e6f20656666656374206f6e207468697320616e64206974206d6179207265706c61636520619c207072652d7363686564756c6564206065787465726e616c5f70726f706f7365602063616c6c2e28666173745f747261636b0c3470726f706f73616c5f686173681c543a3a4861736834766f74696e675f706572696f6438543a3a426c6f636b4e756d6265721464656c617938543a3a426c6f636b4e756d626572245101205363686564756c65207468652063757272656e746c792065787465726e616c6c792d70726f706f736564206d616a6f726974792d63617272696573207265666572656e64756d20746f206265207461626c6564650120696d6d6564696174656c792e204966207468657265206973206e6f2065787465726e616c6c792d70726f706f736564207265666572656e64756d2063757272656e746c792c206f72206966207468657265206973206f6e65ec20627574206974206973206e6f742061206d616a6f726974792d63617272696573207265666572656e64756d207468656e206974206661696c732e00f8202d206070726f706f73616c5f68617368603a205468652068617368206f66207468652063757272656e742065787465726e616c2070726f706f73616c2e6101202d2060766f74696e675f706572696f64603a2054686520706572696f64207468617420697320616c6c6f77656420666f7220766f74696e67206f6e20746869732070726f706f73616c2e20496e6372656173656420746f9820202060456d657267656e6379566f74696e67506572696f646020696620746f6f206c6f772e5501202d206064656c6179603a20546865206e756d626572206f6620626c6f636b20616674657220766f74696e672068617320656e64656420696e20617070726f76616c20616e6420746869732073686f756c64206265bc202020656e61637465642e205468697320646f65736e277420686176652061206d696e696d756d20616d6f756e742e347665746f5f65787465726e616c043470726f706f73616c5f686173681c543a3a4861736804bc205665746f20616e6420626c61636b6c697374207468652065787465726e616c2070726f706f73616c20686173682e4463616e63656c5f7265666572656e64756d04247265665f696e64657860436f6d706163743c5265666572656e64756d496e6465783e04542052656d6f76652061207265666572656e64756d2e3463616e63656c5f7175657565640c107768656e5c436f6d706163743c543a3a426c6f636b4e756d6265723e14776869636830436f6d706163743c7533323e107768617460436f6d706163743c5265666572656e64756d496e6465783e04a02043616e63656c20612070726f706f73616c2071756575656420666f7220656e6163746d656e742e247365745f70726f7879041470726f787930543a3a4163636f756e7449641498205370656369667920612070726f78792e2043616c6c6564206279207468652073746173682e002c2023203c7765696768743e58202d204f6e6520657874726120444220656e7472792e302023203c2f7765696768743e3072657369676e5f70726f787900149820436c656172207468652070726f78792e2043616c6c6564206279207468652070726f78792e002c2023203c7765696768743e40202d204f6e6520444220636c6561722e302023203c2f7765696768743e3072656d6f76655f70726f7879041470726f787930543a3a4163636f756e744964149820436c656172207468652070726f78792e2043616c6c6564206279207468652073746173682e002c2023203c7765696768743e40202d204f6e6520444220636c6561722e302023203c2f7765696768743e2064656c65676174650808746f30543a3a4163636f756e74496428636f6e76696374696f6e28436f6e76696374696f6e143c2044656c656761746520766f74652e002c2023203c7765696768743e58202d204f6e6520657874726120444220656e7472792e302023203c2f7765696768743e28756e64656c656761746500144420556e64656c656761746520766f74652e002c2023203c7765696768743e20202d204f2831292e302023203c2f7765696768743e012c2050726f706f736564082450726f70496e6465781c42616c616e636500185461626c65640c2450726f70496e6465781c42616c616e6365385665633c4163636f756e7449643e003845787465726e616c5461626c656400001c53746172746564083c5265666572656e64756d496e64657834566f74655468726573686f6c640018506173736564043c5265666572656e64756d496e64657800244e6f74506173736564043c5265666572656e64756d496e646578002443616e63656c6c6564043c5265666572656e64756d496e64657800204578656375746564083c5265666572656e64756d496e64657810626f6f6c002444656c65676174656408244163636f756e744964244163636f756e744964002c556e64656c65676174656404244163636f756e74496400185665746f65640c244163636f756e74496410486173682c426c6f636b4e756d62657200183c456e6163746d656e74506572696f6438543a3a426c6f636b4e756d62657210002f0d0014710120546865206d696e696d756d20706572696f64206f66206c6f636b696e6720616e642074686520706572696f64206265747765656e20612070726f706f73616c206265696e6720617070726f76656420616e6420656e61637465642e0031012049742073686f756c642067656e6572616c6c792062652061206c6974746c65206d6f7265207468616e2074686520756e7374616b6520706572696f6420746f20656e737572652074686174690120766f74696e67207374616b657273206861766520616e206f70706f7274756e69747920746f2072656d6f7665207468656d73656c7665732066726f6d207468652073797374656d20696e2074686520636173652077686572659c207468657920617265206f6e20746865206c6f73696e672073696465206f66206120766f74652e304c61756e6368506572696f6438543a3a426c6f636b4e756d62657210004e0c0004e420486f77206f6674656e2028696e20626c6f636b7329206e6577207075626c6963207265666572656e646120617265206c61756e636865642e30566f74696e67506572696f6438543a3a426c6f636b4e756d62657210004e0c0004b820486f77206f6674656e2028696e20626c6f636b732920746f20636865636b20666f72206e657720766f7465732e384d696e696d756d4465706f7369743042616c616e63654f663c543e400000c16ff2862300000000000000000004350120546865206d696e696d756d20616d6f756e7420746f20626520757365642061732061206465706f73697420666f722061207075626c6963207265666572656e64756d2070726f706f73616c2e54456d657267656e6379566f74696e67506572696f6438543a3a426c6f636b4e756d626572108051010004ec204d696e696d756d20766f74696e6720706572696f6420616c6c6f77656420666f7220616e20656d657267656e6379207265666572656e64756d2e34436f6f6c6f6666506572696f6438543a3a426c6f636b4e756d62657210004e0c0004610120506572696f6420696e20626c6f636b7320776865726520616e2065787465726e616c2070726f706f73616c206d6179206e6f742062652072652d7375626d6974746564206166746572206265696e67207665746f65642e001c436f756e63696c014c496e7374616e636531436f6c6c656374697665142450726f706f73616c730100305665633c543a3a486173683e040004902054686520686173686573206f6620746865206163746976652070726f706f73616c732e2850726f706f73616c4f660001011c543a3a48617368643c542061732054726169743c493e3e3a3a50726f706f73616c00040004cc2041637475616c2070726f706f73616c20666f72206120676976656e20686173682c20696620697427732063757272656e742e18566f74696e670001011c543a3a486173684c566f7465733c543a3a4163636f756e7449643e00040004b420566f746573206f6e206120676976656e2070726f706f73616c2c206966206974206973206f6e676f696e672e3450726f706f73616c436f756e7401000c753332100000000004482050726f706f73616c7320736f206661722e1c4d656d626572730100445665633c543a3a4163636f756e7449643e0400043901205468652063757272656e74206d656d62657273206f662074686520636f6c6c6563746976652e20546869732069732073746f72656420736f7274656420286a7573742062792076616c7565292e01102c7365745f6d656d62657273042c6e65775f6d656d62657273445665633c543a3a4163636f756e7449643e105101205365742074686520636f6c6c6563746976652773206d656d62657273686970206d616e75616c6c7920746f20606e65775f6d656d62657273602e204265206e69636520746f2074686520636861696e20616e645c2070726f76696465206974207072652d736f727465642e005820526571756972657320726f6f74206f726967696e2e1c65786563757465042070726f706f73616c78426f783c3c542061732054726169743c493e3e3a3a50726f706f73616c3e0cf420446973706174636820612070726f706f73616c2066726f6d2061206d656d626572207573696e672074686520604d656d62657260206f726967696e2e00ac204f726967696e206d7573742062652061206d656d626572206f662074686520636f6c6c6563746976652e1c70726f706f736508247468726573686f6c6450436f6d706163743c4d656d626572436f756e743e2070726f706f73616c78426f783c3c542061732054726169743c493e3e3a3a50726f706f73616c3e102c2023203c7765696768743e90202d20426f756e6465642073746f7261676520726561647320616e64207772697465732eb8202d20417267756d656e7420607468726573686f6c6460206861732062656172696e67206f6e207765696768742e302023203c2f7765696768743e10766f74650c2070726f706f73616c1c543a3a4861736814696e64657858436f6d706163743c50726f706f73616c496e6465783e1c617070726f766510626f6f6c102c2023203c7765696768743e8c202d20426f756e6465642073746f72616765207265616420616e64207772697465732e5501202d2057696c6c20626520736c696768746c792068656176696572206966207468652070726f706f73616c20697320617070726f766564202f20646973617070726f7665642061667465722074686520766f74652e302023203c2f7765696768743e01182050726f706f73656410244163636f756e7449643450726f706f73616c496e64657810486173682c4d656d626572436f756e74084d012041206d6f74696f6e2028676976656e20686173682920686173206265656e2070726f706f7365642028627920676976656e206163636f756e742920776974682061207468726573686f6c642028676976656e4020604d656d626572436f756e7460292e14566f74656414244163636f756e744964104861736810626f6f6c2c4d656d626572436f756e742c4d656d626572436f756e740809012041206d6f74696f6e2028676976656e20686173682920686173206265656e20766f746564206f6e20627920676976656e206163636f756e742c206c656176696e67190120612074616c6c79202879657320766f74657320616e64206e6f20766f74657320676976656e20726573706563746976656c7920617320604d656d626572436f756e7460292e20417070726f76656404104861736804c42041206d6f74696f6e2077617320617070726f76656420627920746865207265717569726564207468726573686f6c642e2c446973617070726f76656404104861736804d42041206d6f74696f6e20776173206e6f7420617070726f76656420627920746865207265717569726564207468726573686f6c642e20457865637574656408104861736810626f6f6c0405012041206d6f74696f6e207761732065786563757465643b2060626f6f6c6020697320747275652069662072657475726e656420776974686f7574206572726f722e384d656d626572457865637574656408104861736810626f6f6c042d0120412073696e676c65206d656d6265722064696420736f6d6520616374696f6e3b2060626f6f6c6020697320747275652069662072657475726e656420776974686f7574206572726f722e000048546563686e6963616c436f6d6d6974746565014c496e7374616e636532436f6c6c656374697665142450726f706f73616c730100305665633c543a3a486173683e040004902054686520686173686573206f6620746865206163746976652070726f706f73616c732e2850726f706f73616c4f660001011c543a3a48617368643c542061732054726169743c493e3e3a3a50726f706f73616c00040004cc2041637475616c2070726f706f73616c20666f72206120676976656e20686173682c20696620697427732063757272656e742e18566f74696e670001011c543a3a486173684c566f7465733c543a3a4163636f756e7449643e00040004b420566f746573206f6e206120676976656e2070726f706f73616c2c206966206974206973206f6e676f696e672e3450726f706f73616c436f756e7401000c753332100000000004482050726f706f73616c7320736f206661722e1c4d656d626572730100445665633c543a3a4163636f756e7449643e0400043901205468652063757272656e74206d656d62657273206f662074686520636f6c6c6563746976652e20546869732069732073746f72656420736f7274656420286a7573742062792076616c7565292e01102c7365745f6d656d62657273042c6e65775f6d656d62657273445665633c543a3a4163636f756e7449643e105101205365742074686520636f6c6c6563746976652773206d656d62657273686970206d616e75616c6c7920746f20606e65775f6d656d62657273602e204265206e69636520746f2074686520636861696e20616e645c2070726f76696465206974207072652d736f727465642e005820526571756972657320726f6f74206f726967696e2e1c65786563757465042070726f706f73616c78426f783c3c542061732054726169743c493e3e3a3a50726f706f73616c3e0cf420446973706174636820612070726f706f73616c2066726f6d2061206d656d626572207573696e672074686520604d656d62657260206f726967696e2e00ac204f726967696e206d7573742062652061206d656d626572206f662074686520636f6c6c6563746976652e1c70726f706f736508247468726573686f6c6450436f6d706163743c4d656d626572436f756e743e2070726f706f73616c78426f783c3c542061732054726169743c493e3e3a3a50726f706f73616c3e102c2023203c7765696768743e90202d20426f756e6465642073746f7261676520726561647320616e64207772697465732eb8202d20417267756d656e7420607468726573686f6c6460206861732062656172696e67206f6e207765696768742e302023203c2f7765696768743e10766f74650c2070726f706f73616c1c543a3a4861736814696e64657858436f6d706163743c50726f706f73616c496e6465783e1c617070726f766510626f6f6c102c2023203c7765696768743e8c202d20426f756e6465642073746f72616765207265616420616e64207772697465732e5501202d2057696c6c20626520736c696768746c792068656176696572206966207468652070726f706f73616c20697320617070726f766564202f20646973617070726f7665642061667465722074686520766f74652e302023203c2f7765696768743e01182050726f706f73656410244163636f756e7449643450726f706f73616c496e64657810486173682c4d656d626572436f756e74084d012041206d6f74696f6e2028676976656e20686173682920686173206265656e2070726f706f7365642028627920676976656e206163636f756e742920776974682061207468726573686f6c642028676976656e4020604d656d626572436f756e7460292e14566f74656414244163636f756e744964104861736810626f6f6c2c4d656d626572436f756e742c4d656d626572436f756e740809012041206d6f74696f6e2028676976656e20686173682920686173206265656e20766f746564206f6e20627920676976656e206163636f756e742c206c656176696e67190120612074616c6c79202879657320766f74657320616e64206e6f20766f74657320676976656e20726573706563746976656c7920617320604d656d626572436f756e7460292e20417070726f76656404104861736804c42041206d6f74696f6e2077617320617070726f76656420627920746865207265717569726564207468726573686f6c642e2c446973617070726f76656404104861736804d42041206d6f74696f6e20776173206e6f7420617070726f76656420627920746865207265717569726564207468726573686f6c642e20457865637574656408104861736810626f6f6c0405012041206d6f74696f6e207761732065786563757465643b2060626f6f6c6020697320747275652069662072657475726e656420776974686f7574206572726f722e384d656d626572457865637574656408104861736810626f6f6c042d0120412073696e676c65206d656d6265722064696420736f6d6520616374696f6e3b2060626f6f6c6020697320747275652069662072657475726e656420776974686f7574206572726f722e000024456c656374696f6e73014050687261676d656e456c656374696f6e1c1c4d656d626572730100845665633c28543a3a4163636f756e7449642c2042616c616e63654f663c543e293e040004f0205468652063757272656e7420656c6563746564206d656d626572736869702e20536f72746564206261736564206f6e206163636f756e742069642e2452756e6e65727355700100845665633c28543a3a4163636f756e7449642c2042616c616e63654f663c543e293e0400044901205468652063757272656e742072756e6e6572735f75702e20536f72746564206261736564206f6e206c6f7720746f2068696768206d657269742028776f72736520746f20626573742072756e6e6572292e38456c656374696f6e526f756e647301000c75333210000000000441012054686520746f74616c206e756d626572206f6620766f746520726f756e6473207468617420686176652068617070656e65642c206578636c7564696e6720746865207570636f6d696e67206f6e652e1c566f7465734f6601010130543a3a4163636f756e744964445665633c543a3a4163636f756e7449643e01040004010120566f746573206f66206120706172746963756c617220766f7465722c20776974682074686520726f756e6420696e646578206f662074686520766f7465732e1c5374616b654f6601010130543a3a4163636f756e7449643042616c616e63654f663c543e0040000000000000000000000000000000000464204c6f636b6564207374616b65206f66206120766f7465722e2843616e646964617465730100445665633c543a3a4163636f756e7449643e0400086501205468652070726573656e742063616e646964617465206c6973742e20536f72746564206261736564206f6e206163636f756e742069642e20412063757272656e74206d656d6265722063616e206e6576657220656e7465720101207468697320766563746f7220616e6420697320616c7761797320696d706c696369746c7920617373756d656420746f20626520612063616e6469646174652e284469644d696772617465010010626f6f6c04000c9420486173207468652073746f7261676520666f726d6174206265656e20757064617465643f6501204e4f54453a204f6e6c792075736520616e642073657420746f2066616c736520696620796f752068617665207573656420616e206561726c792076657273696f6e206f662074686973206d6f64756c652e2053686f756c64682062652073657420746f2074727565206f74686572776973652e011410766f74650814766f746573445665633c543a3a4163636f756e7449643e1476616c756554436f6d706163743c42616c616e63654f663c543e3e3c050120566f746520666f72206120736574206f662063616e6469646174657320666f7220746865207570636f6d696e6720726f756e64206f6620656c656374696f6e2e0050205468652060766f746573602073686f756c643a482020202d206e6f7420626520656d7074792eac2020202d206265206c657373207468616e20746865206e756d626572206f662063616e646964617465732e005d012055706f6e20766f74696e672c206076616c75656020756e697473206f66206077686f6027732062616c616e6365206973206c6f636b656420616e64206120626f6e6420616d6f756e742069732072657365727665642e5d012049742069732074686520726573706f6e736962696c697479206f66207468652063616c6c657220746f206e6f7420706c61636520616c6c206f662074686569722062616c616e636520696e746f20746865206c6f636ba020616e64206b65657020736f6d6520666f722066757274686572207472616e73616374696f6e732e002c2023203c7765696768743e2c2023232323205374617465302052656164733a204f283129c8205772697465733a204f28562920676976656e2060566020766f7465732e205620697320626f756e6465642062792031362e302023203c2f7765696768743e3072656d6f76655f766f746572001c21012052656d6f766520606f726967696e60206173206120766f7465722e20546869732072656d6f76657320746865206c6f636b20616e642072657475726e732074686520626f6e642e002c2023203c7765696768743e2c2023232323205374617465302052656164733a204f28312934205772697465733a204f283129302023203c2f7765696768743e507265706f72745f646566756e63745f766f74657204187461726765748c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f75726365345d01205265706f727420607461726765746020666f72206265696e6720616e20646566756e637420766f7465722e20496e2063617365206f6620612076616c6964207265706f72742c20746865207265706f727465722069735d012072657761726465642062792074686520626f6e6420616d6f756e74206f662060746172676574602e204f74686572776973652c20746865207265706f7274657220697473656c662069732072656d6f76656420616e645c20746865697220626f6e6420697320736c61736865642e0088204120646566756e637420766f74657220697320646566696e656420746f2062653a4d012020202d206120766f7465722077686f73652063757272656e74207375626d697474656420766f7465732061726520616c6c20696e76616c69642e20692e652e20616c6c206f66207468656d20617265206e6fb420202020206c6f6e67657220612063616e646964617465206e6f7220616e20616374697665206d656d6265722e002c2023203c7765696768743e2c202323232320537461746515012052656164733a204f284e4c6f674d2920676976656e204d2063757272656e742063616e6469646174657320616e64204e20766f74657320666f722060746172676574602e34205772697465733a204f283129302023203c2f7765696768743e407375626d69745f63616e646964616379003478205375626d6974206f6e6573656c6620666f722063616e6469646163792e006420412063616e6469646174652077696c6c206569746865723aec2020202d204c6f73652061742074686520656e64206f6620746865207465726d20616e6420666f7266656974207468656972206465706f7369742e2d012020202d2057696e20616e64206265636f6d652061206d656d6265722e204d656d626572732077696c6c206576656e7475616c6c7920676574207468656972207374617368206261636b2e55012020202d204265636f6d6520612072756e6e65722d75702e2052756e6e6572732d75707320617265207265736572766564206d656d6265727320696e2063617365206f6e65206765747320666f72636566756c6c7934202020202072656d6f7665642e002c2023203c7765696768743e2c20232323232053746174658c2052656164733a204f284c6f674e2920476976656e204e2063616e646964617465732e34205772697465733a204f283129302023203c2f7765696768743e3472656d6f76655f6d656d626572040c77686f8c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f757263653021012052656d6f7665206120706172746963756c6172206d656d6265722066726f6d20746865207365742e20546869732069732065666665637469766520696d6d6564696174656c792e00590120496620612072756e6e65722d757020697320617661696c61626c652c207468656e2074686520626573742072756e6e65722d75702077696c6c2062652072656d6f76656420616e64207265706c6163657320746865f4206f7574676f696e67206d656d6265722e204f74686572776973652c2061206e65772070687261676d656e20726f756e6420697320737461727465642e004501204e6f74652074686174207468697320646f6573206e6f7420616666656374207468652064657369676e6174656420626c6f636b206e756d626572206f6620746865206e65787420656c656374696f6e2e002c2023203c7765696768743e2c2023232323205374617465582052656164733a204f28646f5f70687261676d656e295c205772697465733a204f28646f5f70687261676d656e29302023203c2f7765696768743e01101c4e65775465726d04645665633c284163636f756e7449642c2042616c616e6365293e0855012041206e6577207465726d2077697468206e6577206d656d626572732e205468697320696e64696361746573207468617420656e6f7567682063616e6469646174657320657869737465642c206e6f742074686174450120656e6f756768206861766520686173206265656e20656c65637465642e2054686520696e6e65722076616c7565206d757374206265206578616d696e656420666f72207468697320707572706f73652e24456d7074795465726d0004d8204e6f20286f72206e6f7420656e6f756768292063616e64696461746573206578697374656420666f72207468697320726f756e642e304d656d6265724b69636b656404244163636f756e7449640845012041206d656d62657220686173206265656e2072656d6f7665642e20546869732073686f756c6420616c7761797320626520666f6c6c6f7765642062792065697468657220604e65775465726d60206f74342060456d7074795465726d602e34566f7465725265706f727465640c244163636f756e744964244163636f756e74496410626f6f6c086101204120766f7465722028666972737420656c656d656e742920776173207265706f72746564202862797420746865207365636f6e6420656c656d656e742920776974682074686520746865207265706f7274206265696e678c207375636365737366756c206f72206e6f742028746869726420656c656d656e74292e143443616e646964616379426f6e643042616c616e63654f663c543e400080c6a47e8d030000000000000000000028566f74696e67426f6e643042616c616e63654f663c543e4000407a10f35a000000000000000000000038446573697265644d656d626572730c753332100d00000000404465736972656452756e6e65727355700c753332100700000000305465726d4475726174696f6e38543a3a426c6f636b4e756d626572108013030000004c546563686e6963616c4d656d62657273686970014c496e7374616e6365314d656d62657273686970041c4d656d626572730100445665633c543a3a4163636f756e7449643e040004c8205468652063757272656e74206d656d626572736869702c2073746f72656420617320616e206f726465726564205665632e0110286164645f6d656d626572040c77686f30543a3a4163636f756e7449640c7c204164642061206d656d626572206077686f6020746f20746865207365742e00b4204d6179206f6e6c792062652063616c6c65642066726f6d20604164644f726967696e60206f7220726f6f742e3472656d6f76655f6d656d626572040c77686f30543a3a4163636f756e7449640c902052656d6f76652061206d656d626572206077686f602066726f6d20746865207365742e00c0204d6179206f6e6c792062652063616c6c65642066726f6d206052656d6f76654f726967696e60206f7220726f6f742e2c737761705f6d656d626572081872656d6f766530543a3a4163636f756e7449640c61646430543a3a4163636f756e7449640cc02053776170206f7574206f6e65206d656d626572206072656d6f76656020666f7220616e6f746865722060616464602e00b8204d6179206f6e6c792062652063616c6c65642066726f6d2060537761704f726967696e60206f7220726f6f742e3472657365745f6d656d62657273041c6d656d62657273445665633c543a3a4163636f756e7449643e105901204368616e676520746865206d656d6265727368697020746f2061206e6577207365742c20646973726567617264696e6720746865206578697374696e67206d656d626572736869702e204265206e69636520616e646c207061737320606d656d6265727360207072652d736f727465642e00bc204d6179206f6e6c792062652063616c6c65642066726f6d206052657365744f726967696e60206f7220726f6f742e01142c4d656d62657241646465640004e42054686520676976656e206d656d626572207761732061646465643b2073656520746865207472616e73616374696f6e20666f722077686f2e344d656d62657252656d6f7665640004ec2054686520676976656e206d656d626572207761732072656d6f7665643b2073656520746865207472616e73616374696f6e20666f722077686f2e384d656d62657273537761707065640004dc2054776f206d656d62657273207765726520737761707065643b2073656520746865207472616e73616374696f6e20666f722077686f2e304d656d6265727352657365740004190120546865206d656d62657273686970207761732072657365743b2073656520746865207472616e73616374696f6e20666f722077686f20746865206e6577207365742069732e1444756d6d7904b4727374643a3a6d61726b65723a3a5068616e746f6d446174613c284163636f756e7449642c204576656e74293e0470205068616e746f6d206d656d6265722c206e6576657220757365642e00003c46696e616c697479547261636b65720001042866696e616c5f68696e74041068696e745c436f6d706163743c543a3a426c6f636b4e756d6265723e08f42048696e7420746861742074686520617574686f72206f66207468697320626c6f636b207468696e6b732074686520626573742066696e616c697a65646c20626c6f636b2069732074686520676976656e206e756d6265722e00082857696e646f7753697a6538543a3a426c6f636b4e756d626572106500000004190120546865206e756d626572206f6620726563656e742073616d706c657320746f206b6565702066726f6d207468697320636861696e2e2044656661756c74206973203130312e345265706f72744c6174656e637938543a3a426c6f636b4e756d62657210e8030000041d01205468652064656c617920616674657220776869636820706f696e74207468696e6773206265636f6d6520737573706963696f75732e2044656661756c7420697320313030302e001c4772616e647061013c4772616e64706146696e616c6974791c2c417574686f726974696573010034417574686f726974794c6973740400102c20444550524543415445440061012054686973207573656420746f2073746f7265207468652063757272656e7420617574686f72697479207365742c20776869636820686173206265656e206d6967726174656420746f207468652077656c6c2d6b6e6f776e94204752414e4450415f415554484f52495445535f4b455920756e686173686564206b65792e14537461746501006c53746f72656453746174653c543a3a426c6f636b4e756d6265723e04000490205374617465206f66207468652063757272656e7420617574686f72697479207365742e3450656e64696e674368616e676500008c53746f72656450656e64696e674368616e67653c543a3a426c6f636b4e756d6265723e040004c42050656e64696e67206368616e67653a20287369676e616c65642061742c207363686564756c6564206368616e6765292e284e657874466f72636564000038543a3a426c6f636b4e756d626572040004bc206e65787420626c6f636b206e756d6265722077686572652077652063616e20666f7263652061206368616e67652e1c5374616c6c656400008028543a3a426c6f636b4e756d6265722c20543a3a426c6f636b4e756d626572290400049020607472756560206966207765206172652063757272656e746c79207374616c6c65642e3043757272656e7453657449640100145365744964200000000000000000085d0120546865206e756d626572206f66206368616e6765732028626f746820696e207465726d73206f66206b65797320616e6420756e6465726c79696e672065636f6e6f6d696320726573706f6e736962696c697469657329c420696e20746865202273657422206f66204772616e6470612076616c696461746f72732066726f6d2067656e657369732e30536574496453657373696f6e0001011453657449643053657373696f6e496e64657800040004c1012041206d617070696e672066726f6d206772616e6470612073657420494420746f2074686520696e646578206f6620746865202a6d6f737420726563656e742a2073657373696f6e20666f7220776869636820697473206d656d62657273207765726520726573706f6e7369626c652e0104487265706f72745f6d69736265686176696f72041c5f7265706f72741c5665633c75383e0464205265706f727420736f6d65206d69736265686176696f722e010c384e6577417574686f7269746965730434417574686f726974794c6973740490204e657720617574686f726974792073657420686173206265656e206170706c6965642e1850617573656400049c2043757272656e7420617574686f726974792073657420686173206265656e207061757365642e1c526573756d65640004a02043757272656e7420617574686f726974792073657420686173206265656e20726573756d65642e0000205472656173757279012054726561737572790c3450726f706f73616c436f756e7401003450726f706f73616c496e646578100000000004a4204e756d626572206f662070726f706f73616c7320746861742068617665206265656e206d6164652e2450726f706f73616c730001013450726f706f73616c496e6465789050726f706f73616c3c543a3a4163636f756e7449642c2042616c616e63654f663c543e3e000400047c2050726f706f73616c7320746861742068617665206265656e206d6164652e24417070726f76616c730100485665633c50726f706f73616c496e6465783e040004f82050726f706f73616c20696e646963657320746861742068617665206265656e20617070726f76656420627574206e6f742079657420617761726465642e010c3470726f706f73655f7370656e64081476616c756554436f6d706163743c42616c616e63654f663c543e3e2c62656e65666963696172798c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f75726365242d012050757420666f727761726420612073756767657374696f6e20666f72207370656e64696e672e2041206465706f7369742070726f706f7274696f6e616c20746f207468652076616c7565350120697320726573657276656420616e6420736c6173686564206966207468652070726f706f73616c2069732072656a65637465642e2049742069732072657475726e6564206f6e636520746865542070726f706f73616c20697320617761726465642e002c2023203c7765696768743e20202d204f2831292e64202d204c696d697465642073746f726167652072656164732e94202d204f6e65204442206368616e67652c206f6e6520657874726120444220656e7472792e302023203c2f7765696768743e3c72656a6563745f70726f706f73616c042c70726f706f73616c5f696458436f6d706163743c50726f706f73616c496e6465783e1cfc2052656a65637420612070726f706f736564207370656e642e20546865206f726967696e616c206465706f7369742077696c6c20626520736c61736865642e002c2023203c7765696768743e20202d204f2831292e64202d204c696d697465642073746f726167652072656164732e40202d204f6e6520444220636c6561722e302023203c2f7765696768743e40617070726f76655f70726f706f73616c042c70726f706f73616c5f696458436f6d706163743c50726f706f73616c496e6465783e205d0120417070726f766520612070726f706f73616c2e2041742061206c617465722074696d652c207468652070726f706f73616c2077696c6c20626520616c6c6f636174656420746f207468652062656e6566696369617279ac20616e6420746865206f726967696e616c206465706f7369742077696c6c2062652072657475726e65642e002c2023203c7765696768743e20202d204f2831292e64202d204c696d697465642073746f726167652072656164732e44202d204f6e65204442206368616e67652e302023203c2f7765696768743e01182050726f706f736564043450726f706f73616c496e6465780438204e65772070726f706f73616c2e205370656e64696e67041c42616c616e636504e8205765206861766520656e6465642061207370656e6420706572696f6420616e642077696c6c206e6f7720616c6c6f636174652066756e64732e1c417761726465640c3450726f706f73616c496e6465781c42616c616e6365244163636f756e744964048020536f6d652066756e64732068617665206265656e20616c6c6f63617465642e144275726e74041c42616c616e6365048c20536f6d65206f66206f75722066756e64732068617665206265656e206275726e742e20526f6c6c6f766572041c42616c616e6365043101205370656e64696e67206861732066696e69736865643b20746869732069732074686520616d6f756e74207468617420726f6c6c73206f76657220756e74696c206e657874207370656e642e1c4465706f736974041c42616c616e6365048020536f6d652066756e64732068617665206265656e206465706f73697465642e103050726f706f73616c426f6e641c5065726d696c6c1050c30000085501204672616374696f6e206f6620612070726f706f73616c27732076616c756520746861742073686f756c6420626520626f6e64656420696e206f7264657220746f20706c616365207468652070726f706f73616c2e110120416e2061636365707465642070726f706f73616c2067657473207468657365206261636b2e20412072656a65637465642070726f706f73616c20646f6573206e6f742e4c50726f706f73616c426f6e644d696e696d756d3042616c616e63654f663c543e4000407a10f35a00000000000000000000044901204d696e696d756d20616d6f756e74206f662066756e647320746861742073686f756c6420626520706c6163656420696e2061206465706f73697420666f72206d616b696e6720612070726f706f73616c2e2c5370656e64506572696f6438543a3a426c6f636b4e756d6265721080700000048820506572696f64206265747765656e2073756363657373697665207370656e64732e104275726e1c5065726d696c6c1020a107000411012050657263656e74616765206f662073706172652066756e64732028696620616e7929207468617420617265206275726e7420706572207370656e6420706572696f642e0024436f6e7472616374730120436f6e74726163741c204761735370656e7401000c476173200000000000000000048020476173207370656e7420736f2066617220696e207468697320626c6f636b2e3c43757272656e745363686564756c650100205363686564756c65c5010000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000008700000000000000af000000000000000100000000000000010000000000000004000000000001001000000000400000002000000004942043757272656e7420636f7374207363686564756c6520666f7220636f6e7472616374732e305072697374696e65436f64650001012c436f6465486173683c543e1c5665633c75383e0004000465012041206d617070696e672066726f6d20616e206f726967696e616c20636f6465206861736820746f20746865206f726967696e616c20636f64652c20756e746f756368656420627920696e737472756d656e746174696f6e2e2c436f646553746f726167650001012c436f6465486173683c543e587761736d3a3a5072656661625761736d4d6f64756c650004000465012041206d617070696e67206265747765656e20616e206f726967696e616c20636f6465206861736820616e6420696e737472756d656e746564207761736d20636f64652c20726561647920666f7220657865637574696f6e2e384163636f756e74436f756e74657201000c753634200000000000000000045420546865207375627472696520636f756e7465722e38436f6e7472616374496e666f4f6600010130543a3a4163636f756e7449643c436f6e7472616374496e666f3c543e00040004a82054686520636f6465206173736f6369617465642077697468206120676976656e206163636f756e742e20476173507269636501003042616c616e63654f663c543e4001000000000000000000000000000000047820546865207072696365206f66206f6e6520756e6974206f66206761732e01143c7570646174655f7363686564756c6504207363686564756c65205363686564756c650cb4205570646174657320746865207363686564756c6520666f72206d65746572696e6720636f6e7472616374732e000d0120546865207363686564756c65206d7573742068617665206120677265617465722076657273696f6e207468616e207468652073746f726564207363686564756c652e207075745f636f646508246761735f6c696d697430436f6d706163743c4761733e10636f64651c5665633c75383e085d012053746f7265732074686520676976656e2062696e617279205761736d20636f646520696e746f2074686520636861696e27732073746f7261676520616e642072657475726e73206974732060636f646568617368602ed420596f752063616e20696e7374616e746961746520636f6e747261637473206f6e6c7920776974682073746f72656420636f64652e1063616c6c1010646573748c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f757263651476616c756554436f6d706163743c42616c616e63654f663c543e3e246761735f6c696d697430436f6d706163743c4761733e10646174611c5665633c75383e1c0901204d616b657320612063616c6c20746f20616e206163636f756e742c206f7074696f6e616c6c79207472616e7366657272696e6720736f6d652062616c616e63652e002901202a20496620746865206163636f756e74206973206120736d6172742d636f6e7472616374206163636f756e742c20746865206173736f63696174656420636f64652077696c6c206265b020657865637574656420616e6420616e792076616c75652077696c6c206265207472616e736665727265642e1901202a20496620746865206163636f756e74206973206120726567756c6172206163636f756e742c20616e792076616c75652077696c6c206265207472616e736665727265642e4901202a204966206e6f206163636f756e742065786973747320616e64207468652063616c6c2076616c7565206973206e6f74206c657373207468616e20606578697374656e7469616c5f6465706f736974602c1501206120726567756c6172206163636f756e742077696c6c206265206372656174656420616e6420616e792076616c75652077696c6c206265207472616e736665727265642e2c696e7374616e74696174651024656e646f776d656e7454436f6d706163743c42616c616e63654f663c543e3e246761735f6c696d697430436f6d706163743c4761733e24636f64655f686173682c436f6465486173683c543e10646174611c5665633c75383e28bd0120496e7374616e7469617465732061206e657720636f6e74726163742066726f6d207468652060636f646568617368602067656e65726174656420627920607075745f636f6465602c206f7074696f6e616c6c79207472616e7366657272696e6720736f6d652062616c616e63652e009820496e7374616e74696174696f6e20697320657865637574656420617320666f6c6c6f77733a004101202d205468652064657374696e6174696f6e206164647265737320697320636f6d7075746564206261736564206f6e207468652073656e64657220616e642068617368206f662074686520636f64652e0501202d2054686520736d6172742d636f6e7472616374206163636f756e7420697320637265617465642061742074686520636f6d707574656420616464726573732e6d01202d20546865206063746f725f636f64656020697320657865637574656420696e2074686520636f6e74657874206f6620746865206e65776c792d63726561746564206163636f756e742e204275666665722072657475726e65645d0120202061667465722074686520657865637574696f6e206973207361766564206173207468652060636f646560206f6620746865206163636f756e742e205468617420636f64652077696c6c20626520696e766f6b6564a820202075706f6e20616e792063616c6c2072656365697665642062792074686973206163636f756e742e7c202d2054686520636f6e747261637420697320696e697469616c697a65642e3c636c61696d5f73757263686172676508106465737430543a3a4163636f756e744964286175785f73656e646572504f7074696f6e3c543a3a4163636f756e7449643e14710120416c6c6f777320626c6f636b2070726f64756365727320746f20636c61696d206120736d616c6c2072657761726420666f72206576696374696e67206120636f6e74726163742e204966206120626c6f636b2070726f64756365721501206661696c7320746f20646f20736f2c206120726567756c61722075736572732077696c6c20626520616c6c6f77656420746f20636c61696d20746865207265776172642e00390120496620636f6e7472616374206973206e6f742065766963746564206173206120726573756c74206f6620746869732063616c6c2c206e6f20616374696f6e73206172652074616b656e20616e64ac207468652073656e646572206973206e6f7420656c696769626c6520666f7220746865207265776172642e0118205472616e736665720c244163636f756e744964244163636f756e7449641c42616c616e6365046901205472616e736665722068617070656e6564206066726f6d6020746f2060746f60207769746820676976656e206076616c7565602061732070617274206f662061206063616c6c60206f722060696e7374616e7469617465602e30496e7374616e74696174656408244163636f756e744964244163636f756e74496404dc20436f6e7472616374206465706c6f7965642062792061646472657373206174207468652073706563696669656420616464726573732e28436f646553746f72656404104861736804b820436f646520776974682074686520737065636966696564206861736820686173206265656e2073746f7265642e3c5363686564756c6555706461746564040c75333204c020547269676765726564207768656e207468652063757272656e74207363686564756c6520697320757064617465642e284469737061746368656408244163636f756e74496410626f6f6c08390120412063616c6c2077617320646973706174636865642066726f6d2074686520676976656e206163636f756e742e2054686520626f6f6c207369676e616c7320776865746865722069742077617374207375636365737366756c20657865637574696f6e206f72206e6f742e20436f6e747261637408244163636f756e7449641c5665633c75383e048c20416e206576656e742066726f6d20636f6e7472616374206f66206163636f756e742e404c5369676e6564436c61696d48616e646963617038543a3a426c6f636b4e756d626572100200000010e0204e756d626572206f6620626c6f636b2064656c617920616e2065787472696e73696320636c61696d20737572636861726765206861732e000d01205768656e20636c61696d207375726368617267652069732063616c6c656420627920616e2065787472696e736963207468652072656e7420697320636865636b65646820666f722063757272656e745f626c6f636b202d2064656c617940546f6d6273746f6e654465706f7369743042616c616e63654f663c543e4000407a10f35a0000000000000000000004d420546865206d696e696d756d20616d6f756e7420726571756972656420746f2067656e6572617465206120746f6d6273746f6e652e4453746f7261676553697a654f66667365740c75333210080000000851012053697a65206f66206120636f6e7472616374206174207468652074696d65206f6620696e7374616e746961696f6e2e205468697320697320612073696d706c652077617920746f20656e737572652074686174a420656d70747920636f6e747261637473206576656e7475616c6c7920676574732064656c657465642e2c52656e74427974654665653042616c616e63654f663c543e4000407a10f35a00000000000000000000043501205072696365206f6620612062797465206f662073746f7261676520706572206f6e6520626c6f636b20696e74657276616c2e2053686f756c642062652067726561746572207468616e20302e4452656e744465706f7369744f66667365743042616c616e63654f663c543e4000008a5d7845630100000000000000001c05012054686520616d6f756e74206f662066756e6473206120636f6e74726163742073686f756c64206465706f73697420696e206f7264657220746f206f6666736574582074686520636f7374206f66206f6e6520627974652e006901204c6574277320737570706f736520746865206465706f73697420697320312c303030204255202862616c616e636520756e697473292f6279746520616e64207468652072656e7420697320312042552f627974652f6461792c5901207468656e206120636f6e7472616374207769746820312c3030302c3030302042552074686174207573657320312c303030206279746573206f662073746f7261676520776f756c6420706179206e6f2072656e742e4d0120427574206966207468652062616c616e6365207265647563656420746f203530302c30303020425520616e64207468652073746f7261676520737461796564207468652073616d6520617420312c3030302c78207468656e20697420776f756c6420706179203530302042552f6461792e3c5375726368617267655265776172643042616c616e63654f663c543e400080a1a76b4a3500000000000000000008e4205265776172642074686174206973207265636569766564206279207468652070617274792077686f736520746f75636820686173206c65646820746f2072656d6f76616c206f66206120636f6e74726163742e2c5472616e736665724665653042616c616e63654f663c543e400010a5d4e800000000000000000000000494205468652066656520726571756972656420746f206d616b652061207472616e736665722e2c4372656174696f6e4665653042616c616e63654f663c543e400010a5d4e80000000000000000000000049c205468652066656520726571756972656420746f2063726561746520616e206163636f756e742e485472616e73616374696f6e426173654665653042616c616e63654f663c543e400010a5d4e8000000000000000000000004dc205468652066656520746f206265207061696420666f72206d616b696e672061207472616e73616374696f6e3b2074686520626173652e485472616e73616374696f6e427974654665653042616c616e63654f663c543e4000e40b54020000000000000000000000040d01205468652066656520746f206265207061696420666f72206d616b696e672061207472616e73616374696f6e3b20746865207065722d6279746520706f7274696f6e2e2c436f6e74726163744665653042616c616e63654f663c543e400010a5d4e80000000000000000000000084101205468652066656520726571756972656420746f20696e7374616e7469617465206120636f6e747261637420696e7374616e63652e204120726561736f6e61626c652064656661756c742076616c75651c2069732032312e2c43616c6c426173654665650c47617320e803000000000000081d0120546865206261736520666565206368617267656420666f722063616c6c696e6720696e746f206120636f6e74726163742e204120726561736f6e61626c652064656661756c74382076616c7565206973203133352e48496e7374616e7469617465426173654665650c47617320e80300000000000008390120546865206261736520666565206368617267656420666f7220696e7374616e74696174696e67206120636f6e74726163742e204120726561736f6e61626c652064656661756c742076616c756520206973203137352e204d617844657074680c753332102000000008310120546865206d6178696d756d206e657374696e67206c6576656c206f6620612063616c6c2f696e7374616e746961746520737461636b2e204120726561736f6e61626c652064656661756c74382076616c7565206973203130302e304d617856616c756553697a650c753332100040000004390120546865206d6178696d756d2073697a65206f6620612073746f726167652076616c756520696e2062797465732e204120726561736f6e61626c652064656661756c74206973203136204b69422e34426c6f636b4761734c696d69740c47617320809698000000000008250120546865206d6178696d756d20616d6f756e74206f6620676173207468617420636f756c6420626520657870656e6465642070657220626c6f636b2e204120726561736f6e61626c65742064656661756c742076616c75652069732031305f3030305f3030302e00105375646f01105375646f040c4b6579010030543a3a4163636f756e74496480000000000000000000000000000000000000000000000000000000000000000004842054686520604163636f756e74496460206f6620746865207375646f206b65792e010c107375646f042070726f706f73616c40426f783c543a3a50726f706f73616c3e2839012041757468656e7469636174657320746865207375646f206b657920616e64206469737061746368657320612066756e6374696f6e2063616c6c20776974682060526f6f7460206f726967696e2e00d020546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002c2023203c7765696768743e20202d204f2831292e64202d204c696d697465642073746f726167652072656164732e60202d204f6e6520444220777269746520286576656e74292ed4202d20556e6b6e6f776e20776569676874206f662064657269766174697665206070726f706f73616c6020657865637574696f6e2e302023203c2f7765696768743e1c7365745f6b6579040c6e65778c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f757263652475012041757468656e74696361746573207468652063757272656e74207375646f206b657920616e6420736574732074686520676976656e204163636f756e7449642028606e6577602920617320746865206e6577207375646f206b65792e00d020546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002c2023203c7765696768743e20202d204f2831292e64202d204c696d697465642073746f726167652072656164732e44202d204f6e65204442206368616e67652e302023203c2f7765696768743e1c7375646f5f6173080c77686f8c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f757263652070726f706f73616c40426f783c543a3a50726f706f73616c3e2c51012041757468656e7469636174657320746865207375646f206b657920616e64206469737061746368657320612066756e6374696f6e2063616c6c207769746820605369676e656460206f726967696e2066726f6d44206120676976656e206163636f756e742e00d020546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002c2023203c7765696768743e20202d204f2831292e64202d204c696d697465642073746f726167652072656164732e60202d204f6e6520444220777269746520286576656e74292ed4202d20556e6b6e6f776e20776569676874206f662064657269766174697665206070726f706f73616c6020657865637574696f6e2e302023203c2f7765696768743e010c1453756469640410626f6f6c04602041207375646f206a75737420746f6f6b20706c6163652e284b65794368616e67656404244163636f756e74496404f020546865207375646f6572206a757374207377697463686564206964656e746974793b20746865206f6c64206b657920697320737570706c6965642e285375646f4173446f6e650410626f6f6c04602041207375646f206a75737420746f6f6b20706c6163652e000020496d4f6e6c696e650120496d4f6e6c696e651020476f737369704174010038543a3a426c6f636b4e756d626572100000000004a02054686520626c6f636b206e756d626572207768656e2077652073686f756c6420676f737369702e104b65797301004c5665633c543a3a417574686f7269747949643e040004d0205468652063757272656e7420736574206f66206b6579732074686174206d61792069737375652061206865617274626561742e485265636569766564486561727462656174730002013053657373696f6e496e6465782441757468496e6465781c5665633c75383e01040008e420466f7220656163682073657373696f6e20696e6465782c207765206b6565702061206d617070696e67206f66206041757468496e646578608c20746f20606f6666636861696e3a3a4f70617175654e6574776f726b5374617465602e38417574686f726564426c6f636b730102013053657373696f6e496e64657838543a3a56616c696461746f7249640c75333201100000000008150120466f7220656163682073657373696f6e20696e6465782c207765206b6565702061206d617070696e67206f662060543a3a56616c696461746f7249646020746f20746865c8206e756d626572206f6620626c6f636b7320617574686f7265642062792074686520676976656e20617574686f726974792e0104246865617274626561740824686561727462656174644865617274626561743c543a3a426c6f636b4e756d6265723e285f7369676e6174757265bc3c543a3a417574686f7269747949642061732052756e74696d654170705075626c69633e3a3a5369676e617475726500010c444865617274626561745265636569766564042c417574686f72697479496404c02041206e657720686561727462656174207761732072656365697665642066726f6d2060417574686f726974794964601c416c6c476f6f640004d42041742074686520656e64206f66207468652073657373696f6e2c206e6f206f6666656e63652077617320636f6d6d69747465642e2c536f6d654f66666c696e6504605665633c4964656e74696669636174696f6e5475706c653e0431012041742074686520656e64206f66207468652073657373696f6e2c206174206c65617374206f6e63652076616c696461746f722077617320666f756e6420746f206265206f66666c696e652e000048417574686f72697479446973636f76657279000100000000204f6666656e63657301204f6666656e6365730c1c5265706f727473000101345265706f727449644f663c543ed04f6666656e636544657461696c733c543a3a4163636f756e7449642c20543a3a4964656e74696669636174696f6e5475706c653e00040004490120546865207072696d61727920737472756374757265207468617420686f6c647320616c6c206f6666656e6365207265636f726473206b65796564206279207265706f7274206964656e746966696572732e58436f6e63757272656e745265706f727473496e646578010201104b696e64384f706171756554696d65536c6f74485665633c5265706f727449644f663c543e3e010400042901204120766563746f72206f66207265706f727473206f66207468652073616d65206b696e6420746861742068617070656e6564206174207468652073616d652074696d6520736c6f742e485265706f72747342794b696e64496e646578010101104b696e641c5665633c75383e00040018110120456e756d65726174657320616c6c207265706f727473206f662061206b696e6420616c6f6e672077697468207468652074696d6520746865792068617070656e65642e00bc20416c6c207265706f7274732061726520736f72746564206279207468652074696d65206f66206f6666656e63652e004901204e6f74652074686174207468652061637475616c2074797065206f662074686973206d617070696e6720697320605665633c75383e602c207468697320697320626563617573652076616c756573206f66690120646966666572656e7420747970657320617265206e6f7420737570706f7274656420617420746865206d6f6d656e7420736f2077652061726520646f696e6720746865206d616e75616c2073657269616c697a6174696f6e2e010001041c4f6666656e636508104b696e64384f706171756554696d65536c6f7408550120546865726520697320616e206f6666656e6365207265706f72746564206f662074686520676976656e20606b696e64602068617070656e656420617420746865206073657373696f6e5f696e6465786020616e64390120286b696e642d7370656369666963292074696d6520736c6f742e2054686973206576656e74206973206e6f74206465706f736974656420666f72206475706c696361746520736c61736865732e00006052616e646f6d6e657373436f6c6c656374697665466c6970016052616e646f6d6e657373436f6c6c656374697665466c6970043852616e646f6d4d6174657269616c0100305665633c543a3a486173683e04000c610120536572696573206f6620626c6f636b20686561646572732066726f6d20746865206c61737420383120626c6f636b73207468617420616374732061732072616e646f6d2073656564206d6174657269616c2e2054686973610120697320617272616e67656420617320612072696e672062756666657220776974682060626c6f636b5f6e756d626572202520383160206265696e672074686520696e64657820696e746f20746865206056656360206f664420746865206f6c6465737420686173682e0100000000144e69636b7301105375646f04184e616d654f6600010130543a3a4163636f756e7449645c285665633c75383e2c2042616c616e63654f663c543e29000400047020546865206c6f6f6b7570207461626c6520666f72206e616d65732e0110207365745f6e616d6504106e616d651c5665633c75383e405d012053657420616e206163636f756e742773206e616d652e20546865206e616d652073686f756c642062652061205554462d382d656e636f64656420737472696e6720627920636f6e76656e74696f6e2c2074686f7567684c20776520646f6e277420636865636b2069742e00610120546865206e616d65206d6179206e6f74206265206d6f7265207468616e2060543a3a4d61784c656e677468602062797465732c206e6f72206c657373207468616e2060543a3a4d696e4c656e677468602062797465732e005d0120496620746865206163636f756e7420646f65736e277420616c726561647920686176652061206e616d652c207468656e206120666565206f6620605265736572766174696f6e466565602069732072657365727665644020696e20746865206163636f756e742e00d020546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002c2023203c7765696768743e20202d204f2831292e84202d204174206d6f7374206f6e652062616c616e6365206f7065726174696f6e2e68202d204f6e652073746f7261676520726561642f77726974652e34202d204f6e65206576656e742e302023203c2f7765696768743e28636c6561725f6e616d650028510120436c65617220616e206163636f756e742773206e616d6520616e642072657475726e20746865206465706f7369742e204661696c7320696620746865206163636f756e7420776173206e6f74206e616d65642e00d020546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002c2023203c7765696768743e20202d204f2831292e64202d204f6e652062616c616e6365206f7065726174696f6e2e68202d204f6e652073746f7261676520726561642f77726974652e34202d204f6e65206576656e742e302023203c2f7765696768743e246b696c6c5f6e616d6504187461726765748c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f7572636534e42052656d6f766520616e206163636f756e742773206e616d6520616e642074616b6520636861726765206f6620746865206465706f7369742e004901204661696c73206966206077686f6020686173206e6f74206265656e206e616d65642e20546865206465706f736974206973206465616c742077697468207468726f7567682060543a3a536c6173686564604c20696d62616c616e63652068616e646c65722e00310120546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f526f6f745f206f72206d617463682060543a3a466f7263654f726967696e602e002c2023203c7765696768743e20202d204f2831292edc202d204f6e6520756e62616c616e6365642068616e646c6572202870726f6261626c7920612062616c616e6365207472616e736665722968202d204f6e652073746f7261676520726561642f77726974652e34202d204f6e65206576656e742e302023203c2f7765696768743e28666f7263655f6e616d6508187461726765748c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f75726365106e616d651c5665633c75383e30c82053657420612074686972642d7061727479206163636f756e742773206e616d652077697468206e6f206465706f7369742e00a0204e6f206c656e67746820636865636b696e6720697320646f6e65206f6e20746865206e616d652e00310120546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f526f6f745f206f72206d617463682060543a3a466f7263654f726967696e602e002c2023203c7765696768743e20202d204f2831292e84202d204174206d6f7374206f6e652062616c616e6365206f7065726174696f6e2e68202d204f6e652073746f7261676520726561642f77726974652e34202d204f6e65206576656e742e302023203c2f7765696768743e01141c4e616d6553657404244163636f756e74496404402041206e616d6520776173207365742e284e616d65466f7263656404244163636f756e74496404642041206e616d652077617320666f726369626c79207365742e2c4e616d654368616e67656404244163636f756e74496404502041206e616d6520776173206368616e6765642e2c4e616d65436c656172656408244163636f756e7449641c42616c616e636504d02041206e616d652077617320636c65617265642c20616e642074686520676976656e2062616c616e63652072657475726e65642e284e616d654b696c6c656408244163636f756e7449641c42616c616e636504c82041206e616d65207761732072656d6f76656420616e642074686520676976656e2062616c616e636520736c61736865642e0c385265736572766174696f6e4665653042616c616e63654f663c543e4000407a10f35a000000000000000000000444205265736572766174696f6e206665652e244d696e4c656e6774680c7533321003000000048820546865206d696e696d756d206c656e6774682061206e616d65206d61792062652e244d61784c656e6774680c7533321010000000048820546865206d6178696d756d206c656e6774682061206e616d65206d61792062652e00'; + +export default meta; diff --git a/packages/metadata/src/Metadata/v8/toV9.ts b/packages/metadata/src/Metadata/v8/toV9.ts new file mode 100644 index 0000000000..70c17c54ec --- /dev/null +++ b/packages/metadata/src/Metadata/v8/toV9.ts @@ -0,0 +1,15 @@ +// Copyright 2017-2019 @polkadot/metadata authors & contributors +// This software may be modified and distributed under the terms +// of the Apache-2.0 license. See the LICENSE file for details. + +import { MetadataV8, MetadataV9 } from '@polkadot/types/interfaces/metadata'; +import { Registry } from '@polkadot/types/types'; + +import { createType } from '@polkadot/types'; + +/** + * Convert from MetadataV8 to MetadataV9 + */ +export default function toV9 (registry: Registry, { modules }: MetadataV8): MetadataV9 { + return createType(registry, 'MetadataV9', { modules }); +} diff --git a/packages/metadata/src/Metadata/v9/Metadata.spec.ts b/packages/metadata/src/Metadata/v9/Metadata.spec.ts new file mode 100644 index 0000000000..a9ffcec507 --- /dev/null +++ b/packages/metadata/src/Metadata/v9/Metadata.spec.ts @@ -0,0 +1,19 @@ +// Copyright 2017-2019 @polkadot/metadata authors & contributors +// This software may be modified and distributed under the terms +// of the Apache-2.0 license. See the LICENSE file for details. + +import { TypeRegistry } from '@polkadot/types'; + +import substrateJson from './static-substrate.json'; +import substrateData from './static'; +import { decodeLatestSubstrate, defaultValues, toLatest } from '../util/testUtil'; + +describe('MetadataV9 (substrate)', (): void => { + const registry = new TypeRegistry(); + + decodeLatestSubstrate(registry, 9, substrateData, substrateJson); + + toLatest(registry, 9, substrateData); + + defaultValues(registry, substrateData); +}); diff --git a/packages/metadata/src/Metadata/v9/static-substrate.json b/packages/metadata/src/Metadata/v9/static-substrate.json new file mode 100644 index 0000000000..67d8774b7f --- /dev/null +++ b/packages/metadata/src/Metadata/v9/static-substrate.json @@ -0,0 +1,4594 @@ +{ + "magicNumber": 1635018093, + "metadata": { + "V9": { + "modules": [ + { + "name": "System", + "storage": { + "prefix": "System", + "items": [ + { + "name": "AccountNonce", + "modifier": 1, + "type": { + "Map": { + "hasher": "Blake2_256", + "key": "AccountId", + "value": "Index", + "linked": false + } + }, + "fallback": "0x00000000", + "documentation": [ + " Extrinsics nonce for accounts." + ] + }, + { + "name": "ExtrinsicCount", + "modifier": 0, + "type": { + "Plain": "u32" + }, + "fallback": "0x00", + "documentation": [ + " Total extrinsics count for the current block." + ] + }, + { + "name": "AllExtrinsicsWeight", + "modifier": 0, + "type": { + "Plain": "Weight" + }, + "fallback": "0x00", + "documentation": [ + " Total weight for all extrinsics put together, for the current block." + ] + }, + { + "name": "AllExtrinsicsLen", + "modifier": 0, + "type": { + "Plain": "u32" + }, + "fallback": "0x00", + "documentation": [ + " Total length (in bytes) for all extrinsics put together, for the current block." + ] + }, + { + "name": "BlockHash", + "modifier": 1, + "type": { + "Map": { + "hasher": "Blake2_256", + "key": "BlockNumber", + "value": "Hash", + "linked": false + } + }, + "fallback": "0x0000000000000000000000000000000000000000000000000000000000000000", + "documentation": [ + " Map of block numbers to block hashes." + ] + }, + { + "name": "ExtrinsicData", + "modifier": 1, + "type": { + "Map": { + "hasher": "Blake2_256", + "key": "u32", + "value": "Bytes", + "linked": false + } + }, + "fallback": "0x00", + "documentation": [ + " Extrinsics data for the current block (maps an extrinsic's index to its data)." + ] + }, + { + "name": "Number", + "modifier": 1, + "type": { + "Plain": "BlockNumber" + }, + "fallback": "0x00000000", + "documentation": [ + " The current block number being processed. Set by `execute_block`." + ] + }, + { + "name": "ParentHash", + "modifier": 1, + "type": { + "Plain": "Hash" + }, + "fallback": "0x0000000000000000000000000000000000000000000000000000000000000000", + "documentation": [ + " Hash of the previous block." + ] + }, + { + "name": "ExtrinsicsRoot", + "modifier": 1, + "type": { + "Plain": "Hash" + }, + "fallback": "0x0000000000000000000000000000000000000000000000000000000000000000", + "documentation": [ + " Extrinsics root of the current block, also part of the block header." + ] + }, + { + "name": "Digest", + "modifier": 1, + "type": { + "Plain": "DigestOf" + }, + "fallback": "0x00", + "documentation": [ + " Digest of the current block, also part of the block header." + ] + }, + { + "name": "Events", + "modifier": 1, + "type": { + "Plain": "Vec" + }, + "fallback": "0x00", + "documentation": [ + " Events deposited for the current block." + ] + }, + { + "name": "EventCount", + "modifier": 1, + "type": { + "Plain": "EventIndex" + }, + "fallback": "0x00000000", + "documentation": [ + " The number of events in the `Events` list." + ] + }, + { + "name": "EventTopics", + "modifier": 1, + "type": { + "DoubleMap": { + "hasher": "Blake2_256", + "key1": "Null", + "key2": "Hash", + "value": "Vec<(BlockNumber,EventIndex)>", + "key2Hasher": "Blake2_256" + } + }, + "fallback": "0x00", + "documentation": [ + " Mapping between a topic (represented by T::Hash) and a vector of indexes", + " of events in the `>` list.", + "", + " The first key serves no purpose. This field is declared as double_map just", + " for convenience of using `remove_prefix`.", + "", + " All topic vectors have deterministic storage locations depending on the topic. This", + " allows light-clients to leverage the changes trie storage tracking mechanism and", + " in case of changes fetch the list of events of interest.", + "", + " The value has the type `(T::BlockNumber, EventIndex)` because if we used only just", + " the `EventIndex` then in case if the topic has the same contents on the next block", + " no notification will be triggered thus the event might be lost." + ] + } + ] + }, + "calls": [ + { + "name": "fill_block", + "args": [], + "documentation": [ + " A big dispatch that will disallow any other transaction to be included." + ] + }, + { + "name": "remark", + "args": [ + { + "name": "_remark", + "type": "Bytes" + } + ], + "documentation": [ + " Make some on-chain remark." + ] + }, + { + "name": "set_heap_pages", + "args": [ + { + "name": "pages", + "type": "u64" + } + ], + "documentation": [ + " Set the number of pages in the WebAssembly environment's heap." + ] + }, + { + "name": "set_code", + "args": [ + { + "name": "new", + "type": "Bytes" + } + ], + "documentation": [ + " Set the new code." + ] + }, + { + "name": "set_storage", + "args": [ + { + "name": "items", + "type": "Vec" + } + ], + "documentation": [ + " Set some items of storage." + ] + }, + { + "name": "kill_storage", + "args": [ + { + "name": "keys", + "type": "Vec" + } + ], + "documentation": [ + " Kill some items from storage." + ] + }, + { + "name": "kill_prefix", + "args": [ + { + "name": "prefix", + "type": "Key" + } + ], + "documentation": [ + " Kill all storage items with a key that starts with the given prefix." + ] + } + ], + "events": [ + { + "name": "ExtrinsicSuccess", + "args": [ + "DispatchInfo" + ], + "documentation": [ + " An extrinsic completed successfully." + ] + }, + { + "name": "ExtrinsicFailed", + "args": [ + "DispatchError", + "DispatchInfo" + ], + "documentation": [ + " An extrinsic failed." + ] + } + ], + "constants": [], + "errors": [ + { + "name": "RequireSignedOrigin", + "documentation": [] + }, + { + "name": "RequireRootOrigin", + "documentation": [] + }, + { + "name": "RequireNoOrigin", + "documentation": [] + } + ] + }, + { + "name": "Utility", + "storage": null, + "calls": [ + { + "name": "batch", + "args": [ + { + "name": "calls", + "type": "Vec" + } + ], + "documentation": [ + " Send a batch of dispatch calls (only root)." + ] + } + ], + "events": [ + { + "name": "BatchExecuted", + "args": [ + "Vec>" + ], + "documentation": [] + } + ], + "constants": [], + "errors": [] + }, + { + "name": "Babe", + "storage": { + "prefix": "Babe", + "items": [ + { + "name": "EpochIndex", + "modifier": 1, + "type": { + "Plain": "u64" + }, + "fallback": "0x0000000000000000", + "documentation": [ + " Current epoch index." + ] + }, + { + "name": "Authorities", + "modifier": 1, + "type": { + "Plain": "Vec<(AuthorityId,BabeAuthorityWeight)>" + }, + "fallback": "0x00", + "documentation": [ + " Current epoch authorities." + ] + }, + { + "name": "GenesisSlot", + "modifier": 1, + "type": { + "Plain": "u64" + }, + "fallback": "0x0000000000000000", + "documentation": [ + " The slot at which the first epoch actually started. This is 0", + " until the first block of the chain." + ] + }, + { + "name": "CurrentSlot", + "modifier": 1, + "type": { + "Plain": "u64" + }, + "fallback": "0x0000000000000000", + "documentation": [ + " Current slot number." + ] + }, + { + "name": "Randomness", + "modifier": 1, + "type": { + "Plain": "[u8;32]" + }, + "fallback": "0x0000000000000000000000000000000000000000000000000000000000000000", + "documentation": [ + " The epoch randomness for the *current* epoch.", + "", + " # Security", + "", + " This MUST NOT be used for gambling, as it can be influenced by a", + " malicious validator in the short term. It MAY be used in many", + " cryptographic protocols, however, so long as one remembers that this", + " (like everything else on-chain) it is public. For example, it can be", + " used where a number is needed that cannot have been chosen by an", + " adversary, for purposes such as public-coin zero-knowledge proofs." + ] + }, + { + "name": "NextRandomness", + "modifier": 1, + "type": { + "Plain": "[u8;32]" + }, + "fallback": "0x0000000000000000000000000000000000000000000000000000000000000000", + "documentation": [ + " Next epoch randomness." + ] + }, + { + "name": "SegmentIndex", + "modifier": 1, + "type": { + "Plain": "u32" + }, + "fallback": "0x00000000", + "documentation": [ + " Randomness under construction.", + "", + " We make a tradeoff between storage accesses and list length.", + " We store the under-construction randomness in segments of up to", + " `UNDER_CONSTRUCTION_SEGMENT_LENGTH`.", + "", + " Once a segment reaches this length, we begin the next one.", + " We reset all segments and return to `0` at the beginning of every", + " epoch." + ] + }, + { + "name": "UnderConstruction", + "modifier": 1, + "type": { + "Map": { + "hasher": "Blake2_256", + "key": "u32", + "value": "Vec<[u8;32]>", + "linked": false + } + }, + "fallback": "0x00", + "documentation": [] + }, + { + "name": "Initialized", + "modifier": 0, + "type": { + "Plain": "MaybeVrf" + }, + "fallback": "0x00", + "documentation": [ + " Temporary value (cleared at block finalization) which is `Some`", + " if per-block initialization has already been called for current block." + ] + } + ] + }, + "calls": [], + "events": null, + "constants": [ + { + "name": "EpochDuration", + "type": "u64", + "value": "0xc800000000000000", + "documentation": [ + " The number of **slots** that an epoch takes. We couple sessions to", + " epochs, i.e. we start a new session once the new epoch begins." + ] + }, + { + "name": "ExpectedBlockTime", + "type": "Moment", + "value": "0xb80b000000000000", + "documentation": [ + " The expected average block time at which BABE should be creating", + " blocks. Since BABE is probabilistic it is not trivial to figure out", + " what the expected average block time should be based on the slot", + " duration and the security parameter `c` (where `1 - c` represents", + " the probability of a slot being empty)." + ] + } + ], + "errors": [] + }, + { + "name": "Timestamp", + "storage": { + "prefix": "Timestamp", + "items": [ + { + "name": "Now", + "modifier": 1, + "type": { + "Plain": "Moment" + }, + "fallback": "0x0000000000000000", + "documentation": [ + " Current time for the current block." + ] + }, + { + "name": "DidUpdate", + "modifier": 1, + "type": { + "Plain": "bool" + }, + "fallback": "0x00", + "documentation": [ + " Did the timestamp get updated in this block?" + ] + } + ] + }, + "calls": [ + { + "name": "set", + "args": [ + { + "name": "now", + "type": "Compact" + } + ], + "documentation": [ + " Set the current time.", + "", + " This call should be invoked exactly once per block. It will panic at the finalization", + " phase, if this call hasn't been invoked by that time.", + "", + " The timestamp should be greater than the previous one by the amount specified by", + " `MinimumPeriod`.", + "", + " The dispatch origin for this call must be `Inherent`." + ] + } + ], + "events": null, + "constants": [ + { + "name": "MinimumPeriod", + "type": "Moment", + "value": "0xdc05000000000000", + "documentation": [ + " The minimum period between blocks. Beware that this is different to the *expected* period", + " that the block production apparatus provides. Your chosen consensus system will generally", + " work with this to determine a sensible block time. e.g. For Aura, it will be double this", + " period on default settings." + ] + } + ], + "errors": [] + }, + { + "name": "Authorship", + "storage": { + "prefix": "Authorship", + "items": [ + { + "name": "Uncles", + "modifier": 1, + "type": { + "Plain": "Vec" + }, + "fallback": "0x00", + "documentation": [ + " Uncles" + ] + }, + { + "name": "Author", + "modifier": 0, + "type": { + "Plain": "AccountId" + }, + "fallback": "0x00", + "documentation": [ + " Author of current block." + ] + }, + { + "name": "DidSetUncles", + "modifier": 1, + "type": { + "Plain": "bool" + }, + "fallback": "0x00", + "documentation": [ + " Whether uncles were already set in this block." + ] + } + ] + }, + "calls": [ + { + "name": "set_uncles", + "args": [ + { + "name": "new_uncles", + "type": "Vec
" + } + ], + "documentation": [ + " Provide a set of uncles." + ] + } + ], + "events": null, + "constants": [], + "errors": [] + }, + { + "name": "Indices", + "storage": { + "prefix": "Indices", + "items": [ + { + "name": "NextEnumSet", + "modifier": 1, + "type": { + "Plain": "AccountIndex" + }, + "fallback": "0x00000000", + "documentation": [ + " The next free enumeration set." + ] + }, + { + "name": "EnumSet", + "modifier": 1, + "type": { + "Map": { + "hasher": "Blake2_256", + "key": "AccountIndex", + "value": "Vec", + "linked": false + } + }, + "fallback": "0x00", + "documentation": [ + " The enumeration sets." + ] + } + ] + }, + "calls": [], + "events": [ + { + "name": "NewAccountIndex", + "args": [ + "AccountId", + "AccountIndex" + ], + "documentation": [ + " A new account index was assigned.", + "", + " This event is not triggered when an existing index is reassigned", + " to another `AccountId`." + ] + } + ], + "constants": [], + "errors": [] + }, + { + "name": "Balances", + "storage": { + "prefix": "Balances", + "items": [ + { + "name": "TotalIssuance", + "modifier": 1, + "type": { + "Plain": "Balance" + }, + "fallback": "0x00000000000000000000000000000000", + "documentation": [ + " The total units issued in the system." + ] + }, + { + "name": "Vesting", + "modifier": 0, + "type": { + "Map": { + "hasher": "Blake2_256", + "key": "AccountId", + "value": "VestingSchedule", + "linked": false + } + }, + "fallback": "0x00", + "documentation": [ + " Information regarding the vesting of a given account." + ] + }, + { + "name": "FreeBalance", + "modifier": 1, + "type": { + "Map": { + "hasher": "Blake2_256", + "key": "AccountId", + "value": "Balance", + "linked": false + } + }, + "fallback": "0x00000000000000000000000000000000", + "documentation": [ + " The 'free' balance of a given account.", + "", + " This is the only balance that matters in terms of most operations on tokens. It", + " alone is used to determine the balance when in the contract execution environment. When this", + " balance falls below the value of `ExistentialDeposit`, then the 'current account' is", + " deleted: specifically `FreeBalance`. Further, the `OnFreeBalanceZero` callback", + " is invoked, giving a chance to external modules to clean up data associated with", + " the deleted account.", + "", + " `system::AccountNonce` is also deleted if `ReservedBalance` is also zero (it also gets", + " collapsed to zero if it ever becomes less than `ExistentialDeposit`." + ] + }, + { + "name": "ReservedBalance", + "modifier": 1, + "type": { + "Map": { + "hasher": "Blake2_256", + "key": "AccountId", + "value": "Balance", + "linked": false + } + }, + "fallback": "0x00000000000000000000000000000000", + "documentation": [ + " The amount of the balance of a given account that is externally reserved; this can still get", + " slashed, but gets slashed last of all.", + "", + " This balance is a 'reserve' balance that other subsystems use in order to set aside tokens", + " that are still 'owned' by the account holder, but which are suspendable.", + "", + " When this balance falls below the value of `ExistentialDeposit`, then this 'reserve account'", + " is deleted: specifically, `ReservedBalance`.", + "", + " `system::AccountNonce` is also deleted if `FreeBalance` is also zero (it also gets", + " collapsed to zero if it ever becomes less than `ExistentialDeposit`.)" + ] + }, + { + "name": "Locks", + "modifier": 1, + "type": { + "Map": { + "hasher": "Blake2_256", + "key": "AccountId", + "value": "Vec", + "linked": false + } + }, + "fallback": "0x00", + "documentation": [ + " Any liquidity locks on some account balances." + ] + } + ] + }, + "calls": [ + { + "name": "transfer", + "args": [ + { + "name": "dest", + "type": "Address" + }, + { + "name": "value", + "type": "Compact" + } + ], + "documentation": [ + " Transfer some liquid free balance to another account.", + "", + " `transfer` will set the `FreeBalance` of the sender and receiver.", + " It will decrease the total issuance of the system by the `TransferFee`.", + " If the sender's account is below the existential deposit as a result", + " of the transfer, the account will be reaped.", + "", + " The dispatch origin for this call must be `Signed` by the transactor.", + "", + " # ", + " - Dependent on arguments but not critical, given proper implementations for", + " input config types. See related functions below.", + " - It contains a limited number of reads and writes internally and no complex computation.", + "", + " Related functions:", + "", + " - `ensure_can_withdraw` is always called internally but has a bounded complexity.", + " - Transferring balances to accounts that did not exist before will cause", + " `T::OnNewAccount::on_new_account` to be called.", + " - Removing enough funds from an account will trigger", + " `T::DustRemoval::on_unbalanced` and `T::OnFreeBalanceZero::on_free_balance_zero`.", + " - `transfer_keep_alive` works the same way as `transfer`, but has an additional", + " check that the transfer will not kill the origin account.", + "", + " # " + ] + }, + { + "name": "set_balance", + "args": [ + { + "name": "who", + "type": "Address" + }, + { + "name": "new_free", + "type": "Compact" + }, + { + "name": "new_reserved", + "type": "Compact" + } + ], + "documentation": [ + " Set the balances of a given account.", + "", + " This will alter `FreeBalance` and `ReservedBalance` in storage. it will", + " also decrease the total issuance of the system (`TotalIssuance`).", + " If the new free or reserved balance is below the existential deposit,", + " it will reset the account nonce (`system::AccountNonce`).", + "", + " The dispatch origin for this call is `root`.", + "", + " # ", + " - Independent of the arguments.", + " - Contains a limited number of reads and writes.", + " # " + ] + }, + { + "name": "force_transfer", + "args": [ + { + "name": "source", + "type": "Address" + }, + { + "name": "dest", + "type": "Address" + }, + { + "name": "value", + "type": "Compact" + } + ], + "documentation": [ + " Exactly as `transfer`, except the origin must be root and the source account may be", + " specified." + ] + }, + { + "name": "transfer_keep_alive", + "args": [ + { + "name": "dest", + "type": "Address" + }, + { + "name": "value", + "type": "Compact" + } + ], + "documentation": [ + " Same as the [`transfer`] call, but with a check that the transfer will not kill the", + " origin account.", + "", + " 99% of the time you want [`transfer`] instead.", + "", + " [`transfer`]: struct.Module.html#method.transfer" + ] + } + ], + "events": [ + { + "name": "NewAccount", + "args": [ + "AccountId", + "Balance" + ], + "documentation": [ + " A new account was created." + ] + }, + { + "name": "ReapedAccount", + "args": [ + "AccountId" + ], + "documentation": [ + " An account was reaped." + ] + }, + { + "name": "Transfer", + "args": [ + "AccountId", + "AccountId", + "Balance", + "Balance" + ], + "documentation": [ + " Transfer succeeded (from, to, value, fees)." + ] + } + ], + "constants": [ + { + "name": "ExistentialDeposit", + "type": "Balance", + "value": "0x00407a10f35a00000000000000000000", + "documentation": [ + " The minimum amount required to keep an account open." + ] + }, + { + "name": "TransferFee", + "type": "Balance", + "value": "0x0010a5d4e80000000000000000000000", + "documentation": [ + " The fee required to make a transfer." + ] + }, + { + "name": "CreationFee", + "type": "Balance", + "value": "0x0010a5d4e80000000000000000000000", + "documentation": [ + " The fee required to create an account." + ] + } + ], + "errors": [] + }, + { + "name": "TransactionPayment", + "storage": { + "prefix": "Balances", + "items": [ + { + "name": "NextFeeMultiplier", + "modifier": 1, + "type": { + "Plain": "Multiplier" + }, + "fallback": "0x0000000000000000", + "documentation": [] + } + ] + }, + "calls": null, + "events": null, + "constants": [ + { + "name": "TransactionBaseFee", + "type": "BalanceOf", + "value": "0x0010a5d4e80000000000000000000000", + "documentation": [ + " The fee to be paid for making a transaction; the base." + ] + }, + { + "name": "TransactionByteFee", + "type": "BalanceOf", + "value": "0x00e40b54020000000000000000000000", + "documentation": [ + " The fee to be paid for making a transaction; the per-byte portion." + ] + } + ], + "errors": [] + }, + { + "name": "Staking", + "storage": { + "prefix": "Staking", + "items": [ + { + "name": "ValidatorCount", + "modifier": 1, + "type": { + "Plain": "u32" + }, + "fallback": "0x00000000", + "documentation": [ + " The ideal number of staking participants." + ] + }, + { + "name": "MinimumValidatorCount", + "modifier": 1, + "type": { + "Plain": "u32" + }, + "fallback": "0x04000000", + "documentation": [ + " Minimum number of staking participants before emergency conditions are imposed." + ] + }, + { + "name": "Invulnerables", + "modifier": 1, + "type": { + "Plain": "Vec" + }, + "fallback": "0x00", + "documentation": [ + " Any validators that may never be slashed or forcibly kicked. It's a Vec since they're", + " easy to initialize and the performance hit is minimal (we expect no more than four", + " invulnerables) and restricted to testnets." + ] + }, + { + "name": "Bonded", + "modifier": 0, + "type": { + "Map": { + "hasher": "Blake2_256", + "key": "AccountId", + "value": "AccountId", + "linked": false + } + }, + "fallback": "0x00", + "documentation": [ + " Map from all locked \"stash\" accounts to the controller account." + ] + }, + { + "name": "Ledger", + "modifier": 0, + "type": { + "Map": { + "hasher": "Blake2_256", + "key": "AccountId", + "value": "StakingLedger", + "linked": false + } + }, + "fallback": "0x00", + "documentation": [ + " Map from all (unlocked) \"controller\" accounts to the info regarding the staking." + ] + }, + { + "name": "Payee", + "modifier": 1, + "type": { + "Map": { + "hasher": "Blake2_256", + "key": "AccountId", + "value": "RewardDestination", + "linked": false + } + }, + "fallback": "0x00", + "documentation": [ + " Where the reward payment should be made. Keyed by stash." + ] + }, + { + "name": "Validators", + "modifier": 1, + "type": { + "Map": { + "hasher": "Blake2_256", + "key": "AccountId", + "value": "ValidatorPrefs", + "linked": true + } + }, + "fallback": "0x00", + "documentation": [ + " The map from (wannabe) validator stash key to the preferences of that validator." + ] + }, + { + "name": "Nominators", + "modifier": 1, + "type": { + "Map": { + "hasher": "Blake2_256", + "key": "AccountId", + "value": "Vec", + "linked": true + } + }, + "fallback": "0x00", + "documentation": [ + " The map from nominator stash key to the set of stash keys of all validators to nominate." + ] + }, + { + "name": "Stakers", + "modifier": 1, + "type": { + "Map": { + "hasher": "Blake2_256", + "key": "AccountId", + "value": "Exposure", + "linked": false + } + }, + "fallback": "0x000000", + "documentation": [ + " Nominators for a particular account that is in action right now. You can't iterate", + " through validators here, but you can find them in the Session module.", + "", + " This is keyed by the stash account." + ] + }, + { + "name": "CurrentElected", + "modifier": 1, + "type": { + "Plain": "Vec" + }, + "fallback": "0x00", + "documentation": [ + " The currently elected validator set keyed by stash account ID." + ] + }, + { + "name": "CurrentEra", + "modifier": 1, + "type": { + "Plain": "EraIndex" + }, + "fallback": "0x00000000", + "documentation": [ + " The current era index." + ] + }, + { + "name": "CurrentEraStart", + "modifier": 1, + "type": { + "Plain": "MomentOf" + }, + "fallback": "0x0000000000000000", + "documentation": [ + " The start of the current era." + ] + }, + { + "name": "CurrentEraStartSessionIndex", + "modifier": 1, + "type": { + "Plain": "SessionIndex" + }, + "fallback": "0x00000000", + "documentation": [ + " The session index at which the current era started." + ] + }, + { + "name": "CurrentEraPointsEarned", + "modifier": 1, + "type": { + "Plain": "EraPoints" + }, + "fallback": "0x0000000000", + "documentation": [ + " Rewards for the current era. Using indices of current elected set." + ] + }, + { + "name": "SlotStake", + "modifier": 1, + "type": { + "Plain": "BalanceOf" + }, + "fallback": "0x00000000000000000000000000000000", + "documentation": [ + " The amount of balance actively at stake for each validator slot, currently.", + "", + " This is used to derive rewards and punishments." + ] + }, + { + "name": "ForceEra", + "modifier": 1, + "type": { + "Plain": "Forcing" + }, + "fallback": "0x00", + "documentation": [ + " True if the next session change will be a new era regardless of index." + ] + }, + { + "name": "SlashRewardFraction", + "modifier": 1, + "type": { + "Plain": "Perbill" + }, + "fallback": "0x00000000", + "documentation": [ + " The percentage of the slash that is distributed to reporters.", + "", + " The rest of the slashed value is handled by the `Slash`." + ] + }, + { + "name": "BondedEras", + "modifier": 1, + "type": { + "Plain": "Vec<(EraIndex,SessionIndex)>" + }, + "fallback": "0x00", + "documentation": [ + " A mapping from still-bonded eras to the first session index of that era." + ] + }, + { + "name": "EraSlashJournal", + "modifier": 1, + "type": { + "Map": { + "hasher": "Blake2_256", + "key": "EraIndex", + "value": "Vec", + "linked": false + } + }, + "fallback": "0x00", + "documentation": [ + " All slashes that have occurred in a given era." + ] + } + ] + }, + "calls": [ + { + "name": "bond", + "args": [ + { + "name": "controller", + "type": "Address" + }, + { + "name": "value", + "type": "Compact" + }, + { + "name": "payee", + "type": "RewardDestination" + } + ], + "documentation": [ + " Take the origin account as a stash and lock up `value` of its balance. `controller` will", + " be the account that controls it.", + "", + " `value` must be more than the `minimum_balance` specified by `T::Currency`.", + "", + " The dispatch origin for this call must be _Signed_ by the stash account.", + "", + " # ", + " - Independent of the arguments. Moderate complexity.", + " - O(1).", + " - Three extra DB entries.", + "", + " NOTE: Two of the storage writes (`Self::bonded`, `Self::payee`) are _never_ cleaned unless", + " the `origin` falls below _existential deposit_ and gets removed as dust.", + " # " + ] + }, + { + "name": "bond_extra", + "args": [ + { + "name": "max_additional", + "type": "Compact" + } + ], + "documentation": [ + " Add some extra amount that have appeared in the stash `free_balance` into the balance up", + " for staking.", + "", + " Use this if there are additional funds in your stash account that you wish to bond.", + " Unlike [`bond`] or [`unbond`] this function does not impose any limitation on the amount", + " that can be added.", + "", + " The dispatch origin for this call must be _Signed_ by the stash, not the controller.", + "", + " # ", + " - Independent of the arguments. Insignificant complexity.", + " - O(1).", + " - One DB entry.", + " # " + ] + }, + { + "name": "unbond", + "args": [ + { + "name": "value", + "type": "Compact" + } + ], + "documentation": [ + " Schedule a portion of the stash to be unlocked ready for transfer out after the bond", + " period ends. If this leaves an amount actively bonded less than", + " T::Currency::minimum_balance(), then it is increased to the full amount.", + "", + " Once the unlock period is done, you can call `withdraw_unbonded` to actually move", + " the funds out of management ready for transfer.", + "", + " No more than a limited number of unlocking chunks (see `MAX_UNLOCKING_CHUNKS`)", + " can co-exists at the same time. In that case, [`Call::withdraw_unbonded`] need", + " to be called first to remove some of the chunks (if possible).", + "", + " The dispatch origin for this call must be _Signed_ by the controller, not the stash.", + "", + " See also [`Call::withdraw_unbonded`].", + "", + " # ", + " - Independent of the arguments. Limited but potentially exploitable complexity.", + " - Contains a limited number of reads.", + " - Each call (requires the remainder of the bonded balance to be above `minimum_balance`)", + " will cause a new entry to be inserted into a vector (`Ledger.unlocking`) kept in storage.", + " The only way to clean the aforementioned storage item is also user-controlled via `withdraw_unbonded`.", + " - One DB entry.", + " " + ] + }, + { + "name": "withdraw_unbonded", + "args": [], + "documentation": [ + " Remove any unlocked chunks from the `unlocking` queue from our management.", + "", + " This essentially frees up that balance to be used by the stash account to do", + " whatever it wants.", + "", + " The dispatch origin for this call must be _Signed_ by the controller, not the stash.", + "", + " See also [`Call::unbond`].", + "", + " # ", + " - Could be dependent on the `origin` argument and how much `unlocking` chunks exist.", + " It implies `consolidate_unlocked` which loops over `Ledger.unlocking`, which is", + " indirectly user-controlled. See [`unbond`] for more detail.", + " - Contains a limited number of reads, yet the size of which could be large based on `ledger`.", + " - Writes are limited to the `origin` account key.", + " # " + ] + }, + { + "name": "validate", + "args": [ + { + "name": "prefs", + "type": "ValidatorPrefs" + } + ], + "documentation": [ + " Declare the desire to validate for the origin controller.", + "", + " Effects will be felt at the beginning of the next era.", + "", + " The dispatch origin for this call must be _Signed_ by the controller, not the stash.", + "", + " # ", + " - Independent of the arguments. Insignificant complexity.", + " - Contains a limited number of reads.", + " - Writes are limited to the `origin` account key.", + " # " + ] + }, + { + "name": "nominate", + "args": [ + { + "name": "targets", + "type": "Vec
" + } + ], + "documentation": [ + " Declare the desire to nominate `targets` for the origin controller.", + "", + " Effects will be felt at the beginning of the next era.", + "", + " The dispatch origin for this call must be _Signed_ by the controller, not the stash.", + "", + " # ", + " - The transaction's complexity is proportional to the size of `targets`,", + " which is capped at `MAX_NOMINATIONS`.", + " - Both the reads and writes follow a similar pattern.", + " # " + ] + }, + { + "name": "chill", + "args": [], + "documentation": [ + " Declare no desire to either validate or nominate.", + "", + " Effects will be felt at the beginning of the next era.", + "", + " The dispatch origin for this call must be _Signed_ by the controller, not the stash.", + "", + " # ", + " - Independent of the arguments. Insignificant complexity.", + " - Contains one read.", + " - Writes are limited to the `origin` account key.", + " # " + ] + }, + { + "name": "set_payee", + "args": [ + { + "name": "payee", + "type": "RewardDestination" + } + ], + "documentation": [ + " (Re-)set the payment target for a controller.", + "", + " Effects will be felt at the beginning of the next era.", + "", + " The dispatch origin for this call must be _Signed_ by the controller, not the stash.", + "", + " # ", + " - Independent of the arguments. Insignificant complexity.", + " - Contains a limited number of reads.", + " - Writes are limited to the `origin` account key.", + " # " + ] + }, + { + "name": "set_controller", + "args": [ + { + "name": "controller", + "type": "Address" + } + ], + "documentation": [ + " (Re-)set the controller of a stash.", + "", + " Effects will be felt at the beginning of the next era.", + "", + " The dispatch origin for this call must be _Signed_ by the stash, not the controller.", + "", + " # ", + " - Independent of the arguments. Insignificant complexity.", + " - Contains a limited number of reads.", + " - Writes are limited to the `origin` account key.", + " # " + ] + }, + { + "name": "set_validator_count", + "args": [ + { + "name": "new", + "type": "Compact" + } + ], + "documentation": [ + " The ideal number of validators." + ] + }, + { + "name": "force_no_eras", + "args": [], + "documentation": [ + " Force there to be no new eras indefinitely.", + "", + " # ", + " - No arguments.", + " # " + ] + }, + { + "name": "force_new_era", + "args": [], + "documentation": [ + " Force there to be a new era at the end of the next session. After this, it will be", + " reset to normal (non-forced) behaviour.", + "", + " # ", + " - No arguments.", + " # " + ] + }, + { + "name": "set_invulnerables", + "args": [ + { + "name": "validators", + "type": "Vec" + } + ], + "documentation": [ + " Set the validators who cannot be slashed (if any)." + ] + }, + { + "name": "force_unstake", + "args": [ + { + "name": "stash", + "type": "AccountId" + } + ], + "documentation": [ + " Force a current staker to become completely unstaked, immediately." + ] + }, + { + "name": "force_new_era_always", + "args": [], + "documentation": [ + " Force there to be a new era at the end of sessions indefinitely.", + "", + " # ", + " - One storage write", + " # " + ] + } + ], + "events": [ + { + "name": "Reward", + "args": [ + "Balance", + "Balance" + ], + "documentation": [ + " All validators have been rewarded by the first balance; the second is the remainder", + " from the maximum amount of reward." + ] + }, + { + "name": "Slash", + "args": [ + "AccountId", + "Balance" + ], + "documentation": [ + " One validator (and its nominators) has been slashed by the given amount." + ] + }, + { + "name": "OldSlashingReportDiscarded", + "args": [ + "SessionIndex" + ], + "documentation": [ + " An old slashing report from a prior era was discarded because it could", + " not be processed." + ] + } + ], + "constants": [ + { + "name": "SessionsPerEra", + "type": "SessionIndex", + "value": "0x06000000", + "documentation": [ + " Number of sessions per era." + ] + }, + { + "name": "BondingDuration", + "type": "EraIndex", + "value": "0xa0020000", + "documentation": [ + " Number of eras that staked funds must remain bonded for." + ] + } + ], + "errors": [] + }, + { + "name": "Session", + "storage": { + "prefix": "Session", + "items": [ + { + "name": "Validators", + "modifier": 1, + "type": { + "Plain": "Vec" + }, + "fallback": "0x00", + "documentation": [ + " The current set of validators." + ] + }, + { + "name": "CurrentIndex", + "modifier": 1, + "type": { + "Plain": "SessionIndex" + }, + "fallback": "0x00000000", + "documentation": [ + " Current index of the session." + ] + }, + { + "name": "QueuedChanged", + "modifier": 1, + "type": { + "Plain": "bool" + }, + "fallback": "0x00", + "documentation": [ + " True if the underlying economic identities or weighting behind the validators", + " has changed in the queued validator set." + ] + }, + { + "name": "QueuedKeys", + "modifier": 1, + "type": { + "Plain": "Vec<(ValidatorId,Keys)>" + }, + "fallback": "0x00", + "documentation": [ + " The queued keys for the next session. When the next session begins, these keys", + " will be used to determine the validator's session keys." + ] + }, + { + "name": "DisabledValidators", + "modifier": 1, + "type": { + "Plain": "Vec" + }, + "fallback": "0x00", + "documentation": [ + " Indices of disabled validators.", + "", + " The set is cleared when `on_session_ending` returns a new set of identities." + ] + }, + { + "name": "NextKeys", + "modifier": 0, + "type": { + "DoubleMap": { + "hasher": "Twox64Concat", + "key1": "Bytes", + "key2": "ValidatorId", + "value": "Keys", + "key2Hasher": "Blake2_256" + } + }, + "fallback": "0x00", + "documentation": [ + " The next session keys for a validator.", + "", + " The first key is always `DEDUP_KEY_PREFIX` to have all the data in the same branch of", + " the trie. Having all data in the same branch should prevent slowing down other queries." + ] + }, + { + "name": "KeyOwner", + "modifier": 0, + "type": { + "DoubleMap": { + "hasher": "Twox64Concat", + "key1": "Bytes", + "key2": "(KeyTypeId,Bytes)", + "value": "ValidatorId", + "key2Hasher": "Blake2_256" + } + }, + "fallback": "0x00", + "documentation": [ + " The owner of a key. The second key is the `KeyTypeId` + the encoded key.", + "", + " The first key is always `DEDUP_KEY_PREFIX` to have all the data in the same branch of", + " the trie. Having all data in the same branch should prevent slowing down other queries." + ] + } + ] + }, + "calls": [ + { + "name": "set_keys", + "args": [ + { + "name": "keys", + "type": "Keys" + }, + { + "name": "proof", + "type": "Bytes" + } + ], + "documentation": [ + " Sets the session key(s) of the function caller to `key`.", + " Allows an account to set its session key prior to becoming a validator.", + " This doesn't take effect until the next session.", + "", + " The dispatch origin of this function must be signed.", + "", + " # ", + " - O(log n) in number of accounts.", + " - One extra DB entry.", + " # " + ] + } + ], + "events": [ + { + "name": "NewSession", + "args": [ + "SessionIndex" + ], + "documentation": [ + " New session has happened. Note that the argument is the session index, not the block", + " number as the type might suggest." + ] + } + ], + "constants": [ + { + "name": "DEDUP_KEY_PREFIX", + "type": "Bytes", + "value": "0x343a73657373696f6e3a6b657973", + "documentation": [ + " Used as first key for `NextKeys` and `KeyOwner` to put all the data into the same branch", + " of the trie." + ] + } + ], + "errors": [] + }, + { + "name": "Democracy", + "storage": { + "prefix": "Democracy", + "items": [ + { + "name": "PublicPropCount", + "modifier": 1, + "type": { + "Plain": "PropIndex" + }, + "fallback": "0x00000000", + "documentation": [ + " The number of (public) proposals that have been made so far." + ] + }, + { + "name": "PublicProps", + "modifier": 1, + "type": { + "Plain": "Vec<(PropIndex,Proposal,AccountId)>" + }, + "fallback": "0x00", + "documentation": [ + " The public proposals. Unsorted." + ] + }, + { + "name": "DepositOf", + "modifier": 0, + "type": { + "Map": { + "hasher": "Blake2_256", + "key": "PropIndex", + "value": "(BalanceOf,Vec)", + "linked": false + } + }, + "fallback": "0x00", + "documentation": [ + " Those who have locked a deposit." + ] + }, + { + "name": "ReferendumCount", + "modifier": 1, + "type": { + "Plain": "ReferendumIndex" + }, + "fallback": "0x00000000", + "documentation": [ + " The next free referendum index, aka the number of referenda started so far." + ] + }, + { + "name": "NextTally", + "modifier": 1, + "type": { + "Plain": "ReferendumIndex" + }, + "fallback": "0x00000000", + "documentation": [ + " The next referendum index that should be tallied." + ] + }, + { + "name": "ReferendumInfoOf", + "modifier": 0, + "type": { + "Map": { + "hasher": "Blake2_256", + "key": "ReferendumIndex", + "value": "ReferendumInfo", + "linked": false + } + }, + "fallback": "0x00", + "documentation": [ + " Information concerning any given referendum." + ] + }, + { + "name": "DispatchQueue", + "modifier": 1, + "type": { + "Map": { + "hasher": "Blake2_256", + "key": "BlockNumber", + "value": "Vec>", + "linked": false + } + }, + "fallback": "0x00", + "documentation": [ + " Queue of successful referenda to be dispatched." + ] + }, + { + "name": "VotersFor", + "modifier": 1, + "type": { + "Map": { + "hasher": "Blake2_256", + "key": "ReferendumIndex", + "value": "Vec", + "linked": false + } + }, + "fallback": "0x00", + "documentation": [ + " Get the voters for the current proposal." + ] + }, + { + "name": "VoteOf", + "modifier": 1, + "type": { + "Map": { + "hasher": "Blake2_256", + "key": "(ReferendumIndex,AccountId)", + "value": "Vote", + "linked": false + } + }, + "fallback": "0x00", + "documentation": [ + " Get the vote in a given referendum of a particular voter. The result is meaningful only", + " if `voters_for` includes the voter when called with the referendum (you'll get the", + " default `Vote` value otherwise). If you don't want to check `voters_for`, then you can", + " also check for simple existence with `VoteOf::exists` first." + ] + }, + { + "name": "Proxy", + "modifier": 0, + "type": { + "Map": { + "hasher": "Blake2_256", + "key": "AccountId", + "value": "AccountId", + "linked": false + } + }, + "fallback": "0x00", + "documentation": [ + " Who is able to vote for whom. Value is the fund-holding account, key is the", + " vote-transaction-sending account." + ] + }, + { + "name": "Delegations", + "modifier": 1, + "type": { + "Map": { + "hasher": "Blake2_256", + "key": "AccountId", + "value": "(AccountId,Conviction)", + "linked": true + } + }, + "fallback": "0x000000000000000000000000000000000000000000000000000000000000000000", + "documentation": [ + " Get the account (and lock periods) to which another account is delegating vote." + ] + }, + { + "name": "LastTabledWasExternal", + "modifier": 1, + "type": { + "Plain": "bool" + }, + "fallback": "0x00", + "documentation": [ + " True if the last referendum tabled was submitted externally. False if it was a public", + " proposal." + ] + }, + { + "name": "NextExternal", + "modifier": 0, + "type": { + "Plain": "(Proposal,VoteThreshold)" + }, + "fallback": "0x00", + "documentation": [ + " The referendum to be tabled whenever it would be valid to table an external proposal.", + " This happens when a referendum needs to be tabled and one of two conditions are met:", + " - `LastTabledWasExternal` is `false`; or", + " - `PublicProps` is empty." + ] + }, + { + "name": "Blacklist", + "modifier": 0, + "type": { + "Map": { + "hasher": "Blake2_256", + "key": "Hash", + "value": "(BlockNumber,Vec)", + "linked": false + } + }, + "fallback": "0x00", + "documentation": [ + " A record of who vetoed what. Maps proposal hash to a possible existent block number", + " (until when it may not be resubmitted) and who vetoed it." + ] + }, + { + "name": "Cancellations", + "modifier": 1, + "type": { + "Map": { + "hasher": "Blake2_256", + "key": "Hash", + "value": "bool", + "linked": false + } + }, + "fallback": "0x00", + "documentation": [ + " Record of all proposals that have been subject to emergency cancellation." + ] + } + ] + }, + "calls": [ + { + "name": "propose", + "args": [ + { + "name": "proposal", + "type": "Proposal" + }, + { + "name": "value", + "type": "Compact" + } + ], + "documentation": [ + " Propose a sensitive action to be taken.", + "", + " # ", + " - O(1).", + " - Two DB changes, one DB entry.", + " # " + ] + }, + { + "name": "second", + "args": [ + { + "name": "proposal", + "type": "Compact" + } + ], + "documentation": [ + " Propose a sensitive action to be taken.", + "", + " # ", + " - O(1).", + " - One DB entry.", + " # " + ] + }, + { + "name": "vote", + "args": [ + { + "name": "ref_index", + "type": "Compact" + }, + { + "name": "vote", + "type": "Vote" + } + ], + "documentation": [ + " Vote in a referendum. If `vote.is_aye()`, the vote is to enact the proposal;", + " otherwise it is a vote to keep the status quo.", + "", + " # ", + " - O(1).", + " - One DB change, one DB entry.", + " # " + ] + }, + { + "name": "proxy_vote", + "args": [ + { + "name": "ref_index", + "type": "Compact" + }, + { + "name": "vote", + "type": "Vote" + } + ], + "documentation": [ + " Vote in a referendum on behalf of a stash. If `vote.is_aye()`, the vote is to enact", + " the proposal; otherwise it is a vote to keep the status quo.", + "", + " # ", + " - O(1).", + " - One DB change, one DB entry.", + " # " + ] + }, + { + "name": "emergency_cancel", + "args": [ + { + "name": "ref_index", + "type": "ReferendumIndex" + } + ], + "documentation": [ + " Schedule an emergency cancellation of a referendum. Cannot happen twice to the same", + " referendum." + ] + }, + { + "name": "external_propose", + "args": [ + { + "name": "proposal", + "type": "Proposal" + } + ], + "documentation": [ + " Schedule a referendum to be tabled once it is legal to schedule an external", + " referendum." + ] + }, + { + "name": "external_propose_majority", + "args": [ + { + "name": "proposal", + "type": "Proposal" + } + ], + "documentation": [ + " Schedule a majority-carries referendum to be tabled next once it is legal to schedule", + " an external referendum.", + "", + " Unlike `external_propose`, blacklisting has no effect on this and it may replace a", + " pre-scheduled `external_propose` call." + ] + }, + { + "name": "external_propose_default", + "args": [ + { + "name": "proposal", + "type": "Proposal" + } + ], + "documentation": [ + " Schedule a negative-turnout-bias referendum to be tabled next once it is legal to", + " schedule an external referendum.", + "", + " Unlike `external_propose`, blacklisting has no effect on this and it may replace a", + " pre-scheduled `external_propose` call." + ] + }, + { + "name": "fast_track", + "args": [ + { + "name": "proposal_hash", + "type": "Hash" + }, + { + "name": "voting_period", + "type": "BlockNumber" + }, + { + "name": "delay", + "type": "BlockNumber" + } + ], + "documentation": [ + " Schedule the currently externally-proposed majority-carries referendum to be tabled", + " immediately. If there is no externally-proposed referendum currently, or if there is one", + " but it is not a majority-carries referendum then it fails.", + "", + " - `proposal_hash`: The hash of the current external proposal.", + " - `voting_period`: The period that is allowed for voting on this proposal. Increased to", + " `EmergencyVotingPeriod` if too low.", + " - `delay`: The number of block after voting has ended in approval and this should be", + " enacted. This doesn't have a minimum amount." + ] + }, + { + "name": "veto_external", + "args": [ + { + "name": "proposal_hash", + "type": "Hash" + } + ], + "documentation": [ + " Veto and blacklist the external proposal hash." + ] + }, + { + "name": "cancel_referendum", + "args": [ + { + "name": "ref_index", + "type": "Compact" + } + ], + "documentation": [ + " Remove a referendum." + ] + }, + { + "name": "cancel_queued", + "args": [ + { + "name": "when", + "type": "Compact" + }, + { + "name": "which", + "type": "Compact" + }, + { + "name": "what", + "type": "Compact" + } + ], + "documentation": [ + " Cancel a proposal queued for enactment." + ] + }, + { + "name": "set_proxy", + "args": [ + { + "name": "proxy", + "type": "AccountId" + } + ], + "documentation": [ + " Specify a proxy. Called by the stash.", + "", + " # ", + " - One extra DB entry.", + " # " + ] + }, + { + "name": "resign_proxy", + "args": [], + "documentation": [ + " Clear the proxy. Called by the proxy.", + "", + " # ", + " - One DB clear.", + " # " + ] + }, + { + "name": "remove_proxy", + "args": [ + { + "name": "proxy", + "type": "AccountId" + } + ], + "documentation": [ + " Clear the proxy. Called by the stash.", + "", + " # ", + " - One DB clear.", + " # " + ] + }, + { + "name": "delegate", + "args": [ + { + "name": "to", + "type": "AccountId" + }, + { + "name": "conviction", + "type": "Conviction" + } + ], + "documentation": [ + " Delegate vote.", + "", + " # ", + " - One extra DB entry.", + " # " + ] + }, + { + "name": "undelegate", + "args": [], + "documentation": [ + " Undelegate vote.", + "", + " # ", + " - O(1).", + " # " + ] + } + ], + "events": [ + { + "name": "Proposed", + "args": [ + "PropIndex", + "Balance" + ], + "documentation": [] + }, + { + "name": "Tabled", + "args": [ + "PropIndex", + "Balance", + "Vec" + ], + "documentation": [] + }, + { + "name": "ExternalTabled", + "args": [], + "documentation": [] + }, + { + "name": "Started", + "args": [ + "ReferendumIndex", + "VoteThreshold" + ], + "documentation": [] + }, + { + "name": "Passed", + "args": [ + "ReferendumIndex" + ], + "documentation": [] + }, + { + "name": "NotPassed", + "args": [ + "ReferendumIndex" + ], + "documentation": [] + }, + { + "name": "Cancelled", + "args": [ + "ReferendumIndex" + ], + "documentation": [] + }, + { + "name": "Executed", + "args": [ + "ReferendumIndex", + "bool" + ], + "documentation": [] + }, + { + "name": "Delegated", + "args": [ + "AccountId", + "AccountId" + ], + "documentation": [] + }, + { + "name": "Undelegated", + "args": [ + "AccountId" + ], + "documentation": [] + }, + { + "name": "Vetoed", + "args": [ + "AccountId", + "Hash", + "BlockNumber" + ], + "documentation": [] + } + ], + "constants": [ + { + "name": "EnactmentPeriod", + "type": "BlockNumber", + "value": "0x002f0d00", + "documentation": [ + " The minimum period of locking and the period between a proposal being approved and enacted.", + "", + " It should generally be a little more than the unstake period to ensure that", + " voting stakers have an opportunity to remove themselves from the system in the case where", + " they are on the losing side of a vote." + ] + }, + { + "name": "LaunchPeriod", + "type": "BlockNumber", + "value": "0x004e0c00", + "documentation": [ + " How often (in blocks) new public referenda are launched." + ] + }, + { + "name": "VotingPeriod", + "type": "BlockNumber", + "value": "0x004e0c00", + "documentation": [ + " How often (in blocks) to check for new votes." + ] + }, + { + "name": "MinimumDeposit", + "type": "BalanceOf", + "value": "0x0000c16ff28623000000000000000000", + "documentation": [ + " The minimum amount to be used as a deposit for a public referendum proposal." + ] + }, + { + "name": "EmergencyVotingPeriod", + "type": "BlockNumber", + "value": "0x80510100", + "documentation": [ + " Minimum voting period allowed for an emergency referendum." + ] + }, + { + "name": "CooloffPeriod", + "type": "BlockNumber", + "value": "0x004e0c00", + "documentation": [ + " Period in blocks where an external proposal may not be re-submitted after being vetoed." + ] + } + ], + "errors": [] + }, + { + "name": "Council", + "storage": { + "prefix": "Instance1Collective", + "items": [ + { + "name": "Proposals", + "modifier": 1, + "type": { + "Plain": "Vec" + }, + "fallback": "0x00", + "documentation": [ + " The hashes of the active proposals." + ] + }, + { + "name": "ProposalOf", + "modifier": 0, + "type": { + "Map": { + "hasher": "Blake2_256", + "key": "Hash", + "value": "Proposal", + "linked": false + } + }, + "fallback": "0x00", + "documentation": [ + " Actual proposal for a given hash, if it's current." + ] + }, + { + "name": "Voting", + "modifier": 0, + "type": { + "Map": { + "hasher": "Blake2_256", + "key": "Hash", + "value": "Votes", + "linked": false + } + }, + "fallback": "0x00", + "documentation": [ + " Votes on a given proposal, if it is ongoing." + ] + }, + { + "name": "ProposalCount", + "modifier": 1, + "type": { + "Plain": "u32" + }, + "fallback": "0x00000000", + "documentation": [ + " Proposals so far." + ] + }, + { + "name": "Members", + "modifier": 1, + "type": { + "Plain": "Vec" + }, + "fallback": "0x00", + "documentation": [ + " The current members of the collective. This is stored sorted (just by value)." + ] + } + ] + }, + "calls": [ + { + "name": "set_members", + "args": [ + { + "name": "new_members", + "type": "Vec" + } + ], + "documentation": [ + " Set the collective's membership manually to `new_members`. Be nice to the chain and", + " provide it pre-sorted.", + "", + " Requires root origin." + ] + }, + { + "name": "execute", + "args": [ + { + "name": "proposal", + "type": "Proposal" + } + ], + "documentation": [ + " Dispatch a proposal from a member using the `Member` origin.", + "", + " Origin must be a member of the collective." + ] + }, + { + "name": "propose", + "args": [ + { + "name": "threshold", + "type": "Compact" + }, + { + "name": "proposal", + "type": "Proposal" + } + ], + "documentation": [ + " # ", + " - Bounded storage reads and writes.", + " - Argument `threshold` has bearing on weight.", + " # " + ] + }, + { + "name": "vote", + "args": [ + { + "name": "proposal", + "type": "Hash" + }, + { + "name": "index", + "type": "Compact" + }, + { + "name": "approve", + "type": "bool" + } + ], + "documentation": [ + " # ", + " - Bounded storage read and writes.", + " - Will be slightly heavier if the proposal is approved / disapproved after the vote.", + " # " + ] + } + ], + "events": [ + { + "name": "Proposed", + "args": [ + "AccountId", + "ProposalIndex", + "Hash", + "MemberCount" + ], + "documentation": [ + " A motion (given hash) has been proposed (by given account) with a threshold (given", + " `MemberCount`)." + ] + }, + { + "name": "Voted", + "args": [ + "AccountId", + "Hash", + "bool", + "MemberCount", + "MemberCount" + ], + "documentation": [ + " A motion (given hash) has been voted on by given account, leaving", + " a tally (yes votes and no votes given respectively as `MemberCount`)." + ] + }, + { + "name": "Approved", + "args": [ + "Hash" + ], + "documentation": [ + " A motion was approved by the required threshold." + ] + }, + { + "name": "Disapproved", + "args": [ + "Hash" + ], + "documentation": [ + " A motion was not approved by the required threshold." + ] + }, + { + "name": "Executed", + "args": [ + "Hash", + "bool" + ], + "documentation": [ + " A motion was executed; `bool` is true if returned without error." + ] + }, + { + "name": "MemberExecuted", + "args": [ + "Hash", + "bool" + ], + "documentation": [ + " A single member did some action; `bool` is true if returned without error." + ] + } + ], + "constants": [], + "errors": [] + }, + { + "name": "TechnicalCommittee", + "storage": { + "prefix": "Instance2Collective", + "items": [ + { + "name": "Proposals", + "modifier": 1, + "type": { + "Plain": "Vec" + }, + "fallback": "0x00", + "documentation": [ + " The hashes of the active proposals." + ] + }, + { + "name": "ProposalOf", + "modifier": 0, + "type": { + "Map": { + "hasher": "Blake2_256", + "key": "Hash", + "value": "Proposal", + "linked": false + } + }, + "fallback": "0x00", + "documentation": [ + " Actual proposal for a given hash, if it's current." + ] + }, + { + "name": "Voting", + "modifier": 0, + "type": { + "Map": { + "hasher": "Blake2_256", + "key": "Hash", + "value": "Votes", + "linked": false + } + }, + "fallback": "0x00", + "documentation": [ + " Votes on a given proposal, if it is ongoing." + ] + }, + { + "name": "ProposalCount", + "modifier": 1, + "type": { + "Plain": "u32" + }, + "fallback": "0x00000000", + "documentation": [ + " Proposals so far." + ] + }, + { + "name": "Members", + "modifier": 1, + "type": { + "Plain": "Vec" + }, + "fallback": "0x00", + "documentation": [ + " The current members of the collective. This is stored sorted (just by value)." + ] + } + ] + }, + "calls": [ + { + "name": "set_members", + "args": [ + { + "name": "new_members", + "type": "Vec" + } + ], + "documentation": [ + " Set the collective's membership manually to `new_members`. Be nice to the chain and", + " provide it pre-sorted.", + "", + " Requires root origin." + ] + }, + { + "name": "execute", + "args": [ + { + "name": "proposal", + "type": "Proposal" + } + ], + "documentation": [ + " Dispatch a proposal from a member using the `Member` origin.", + "", + " Origin must be a member of the collective." + ] + }, + { + "name": "propose", + "args": [ + { + "name": "threshold", + "type": "Compact" + }, + { + "name": "proposal", + "type": "Proposal" + } + ], + "documentation": [ + " # ", + " - Bounded storage reads and writes.", + " - Argument `threshold` has bearing on weight.", + " # " + ] + }, + { + "name": "vote", + "args": [ + { + "name": "proposal", + "type": "Hash" + }, + { + "name": "index", + "type": "Compact" + }, + { + "name": "approve", + "type": "bool" + } + ], + "documentation": [ + " # ", + " - Bounded storage read and writes.", + " - Will be slightly heavier if the proposal is approved / disapproved after the vote.", + " # " + ] + } + ], + "events": [ + { + "name": "Proposed", + "args": [ + "AccountId", + "ProposalIndex", + "Hash", + "MemberCount" + ], + "documentation": [ + " A motion (given hash) has been proposed (by given account) with a threshold (given", + " `MemberCount`)." + ] + }, + { + "name": "Voted", + "args": [ + "AccountId", + "Hash", + "bool", + "MemberCount", + "MemberCount" + ], + "documentation": [ + " A motion (given hash) has been voted on by given account, leaving", + " a tally (yes votes and no votes given respectively as `MemberCount`)." + ] + }, + { + "name": "Approved", + "args": [ + "Hash" + ], + "documentation": [ + " A motion was approved by the required threshold." + ] + }, + { + "name": "Disapproved", + "args": [ + "Hash" + ], + "documentation": [ + " A motion was not approved by the required threshold." + ] + }, + { + "name": "Executed", + "args": [ + "Hash", + "bool" + ], + "documentation": [ + " A motion was executed; `bool` is true if returned without error." + ] + }, + { + "name": "MemberExecuted", + "args": [ + "Hash", + "bool" + ], + "documentation": [ + " A single member did some action; `bool` is true if returned without error." + ] + } + ], + "constants": [], + "errors": [] + }, + { + "name": "Elections", + "storage": { + "prefix": "PhragmenElection", + "items": [ + { + "name": "Members", + "modifier": 1, + "type": { + "Plain": "Vec<(AccountId,BalanceOf)>" + }, + "fallback": "0x00", + "documentation": [ + " The current elected membership. Sorted based on account id." + ] + }, + { + "name": "RunnersUp", + "modifier": 1, + "type": { + "Plain": "Vec<(AccountId,BalanceOf)>" + }, + "fallback": "0x00", + "documentation": [ + " The current runners_up. Sorted based on low to high merit (worse to best runner)." + ] + }, + { + "name": "ElectionRounds", + "modifier": 1, + "type": { + "Plain": "u32" + }, + "fallback": "0x00000000", + "documentation": [ + " The total number of vote rounds that have happened, excluding the upcoming one." + ] + }, + { + "name": "VotesOf", + "modifier": 1, + "type": { + "Map": { + "hasher": "Blake2_256", + "key": "AccountId", + "value": "Vec", + "linked": true + } + }, + "fallback": "0x00", + "documentation": [ + " Votes of a particular voter, with the round index of the votes." + ] + }, + { + "name": "StakeOf", + "modifier": 1, + "type": { + "Map": { + "hasher": "Blake2_256", + "key": "AccountId", + "value": "BalanceOf", + "linked": false + } + }, + "fallback": "0x00000000000000000000000000000000", + "documentation": [ + " Locked stake of a voter." + ] + }, + { + "name": "Candidates", + "modifier": 1, + "type": { + "Plain": "Vec" + }, + "fallback": "0x00", + "documentation": [ + " The present candidate list. Sorted based on account id. A current member can never enter", + " this vector and is always implicitly assumed to be a candidate." + ] + } + ] + }, + "calls": [ + { + "name": "vote", + "args": [ + { + "name": "votes", + "type": "Vec" + }, + { + "name": "value", + "type": "Compact" + } + ], + "documentation": [ + " Vote for a set of candidates for the upcoming round of election.", + "", + " The `votes` should:", + " - not be empty.", + " - be less than the number of candidates.", + "", + " Upon voting, `value` units of `who`'s balance is locked and a bond amount is reserved.", + " It is the responsibility of the caller to not place all of their balance into the lock", + " and keep some for further transactions.", + "", + " # ", + " #### State", + " Reads: O(1)", + " Writes: O(V) given `V` votes. V is bounded by 16.", + " # " + ] + }, + { + "name": "remove_voter", + "args": [], + "documentation": [ + " Remove `origin` as a voter. This removes the lock and returns the bond.", + "", + " # ", + " #### State", + " Reads: O(1)", + " Writes: O(1)", + " # " + ] + }, + { + "name": "report_defunct_voter", + "args": [ + { + "name": "target", + "type": "Address" + } + ], + "documentation": [ + " Report `target` for being an defunct voter. In case of a valid report, the reporter is", + " rewarded by the bond amount of `target`. Otherwise, the reporter itself is removed and", + " their bond is slashed.", + "", + " A defunct voter is defined to be:", + " - a voter whose current submitted votes are all invalid. i.e. all of them are no", + " longer a candidate nor an active member.", + "", + " # ", + " #### State", + " Reads: O(NLogM) given M current candidates and N votes for `target`.", + " Writes: O(1)", + " # " + ] + }, + { + "name": "submit_candidacy", + "args": [], + "documentation": [ + " Submit oneself for candidacy.", + "", + " A candidate will either:", + " - Lose at the end of the term and forfeit their deposit.", + " - Win and become a member. Members will eventually get their stash back.", + " - Become a runner-up. Runners-ups are reserved members in case one gets forcefully", + " removed.", + "", + " # ", + " #### State", + " Reads: O(LogN) Given N candidates.", + " Writes: O(1)", + " # " + ] + }, + { + "name": "renounce_candidacy", + "args": [], + "documentation": [ + " Renounce one's intention to be a candidate for the next election round. 3 potential", + " outcomes exist:", + " - `origin` is a candidate and not elected in any set. In this case, the bond is", + " unreserved, returned and origin is removed as a candidate.", + " - `origin` is a current runner up. In this case, the bond is unreserved, returned and", + " origin is removed as a runner.", + " - `origin` is a current member. In this case, the bond is unreserved and origin is", + " removed as a member, consequently not being a candidate for the next round anymore.", + " Similar to [`remove_voter`], if replacement runners exists, they are immediately used." + ] + }, + { + "name": "remove_member", + "args": [ + { + "name": "who", + "type": "Address" + } + ], + "documentation": [ + " Remove a particular member from the set. This is effective immediately and the bond of", + " the outgoing member is slashed.", + "", + " If a runner-up is available, then the best runner-up will be removed and replaces the", + " outgoing member. Otherwise, a new phragmen round is started.", + "", + " Note that this does not affect the designated block number of the next election.", + "", + " # ", + " #### State", + " Reads: O(do_phragmen)", + " Writes: O(do_phragmen)", + " # " + ] + } + ], + "events": [ + { + "name": "NewTerm", + "args": [ + "Vec<(AccountId,Balance)>" + ], + "documentation": [ + " A new term with new members. This indicates that enough candidates existed, not that", + " enough have has been elected. The inner value must be examined for this purpose." + ] + }, + { + "name": "EmptyTerm", + "args": [], + "documentation": [ + " No (or not enough) candidates existed for this round." + ] + }, + { + "name": "MemberKicked", + "args": [ + "AccountId" + ], + "documentation": [ + " A member has been removed. This should always be followed by either `NewTerm` ot", + " `EmptyTerm`." + ] + }, + { + "name": "MemberRenounced", + "args": [ + "AccountId" + ], + "documentation": [ + " A member has renounced their candidacy." + ] + }, + { + "name": "VoterReported", + "args": [ + "AccountId", + "AccountId", + "bool" + ], + "documentation": [ + " A voter (first element) was reported (byt the second element) with the the report being", + " successful or not (third element)." + ] + } + ], + "constants": [ + { + "name": "CandidacyBond", + "type": "BalanceOf", + "value": "0x0080c6a47e8d03000000000000000000", + "documentation": [] + }, + { + "name": "VotingBond", + "type": "BalanceOf", + "value": "0x00407a10f35a00000000000000000000", + "documentation": [] + }, + { + "name": "DesiredMembers", + "type": "u32", + "value": "0x0d000000", + "documentation": [] + }, + { + "name": "DesiredRunnersUp", + "type": "u32", + "value": "0x07000000", + "documentation": [] + }, + { + "name": "TermDuration", + "type": "BlockNumber", + "value": "0x80130300", + "documentation": [] + } + ], + "errors": [] + }, + { + "name": "TechnicalMembership", + "storage": { + "prefix": "Instance1Membership", + "items": [ + { + "name": "Members", + "modifier": 1, + "type": { + "Plain": "Vec" + }, + "fallback": "0x00", + "documentation": [ + " The current membership, stored as an ordered Vec." + ] + } + ] + }, + "calls": [ + { + "name": "add_member", + "args": [ + { + "name": "who", + "type": "AccountId" + } + ], + "documentation": [ + " Add a member `who` to the set.", + "", + " May only be called from `AddOrigin` or root." + ] + }, + { + "name": "remove_member", + "args": [ + { + "name": "who", + "type": "AccountId" + } + ], + "documentation": [ + " Remove a member `who` from the set.", + "", + " May only be called from `RemoveOrigin` or root." + ] + }, + { + "name": "swap_member", + "args": [ + { + "name": "remove", + "type": "AccountId" + }, + { + "name": "add", + "type": "AccountId" + } + ], + "documentation": [ + " Swap out one member `remove` for another `add`.", + "", + " May only be called from `SwapOrigin` or root." + ] + }, + { + "name": "reset_members", + "args": [ + { + "name": "members", + "type": "Vec" + } + ], + "documentation": [ + " Change the membership to a new set, disregarding the existing membership. Be nice and", + " pass `members` pre-sorted.", + "", + " May only be called from `ResetOrigin` or root." + ] + } + ], + "events": [ + { + "name": "MemberAdded", + "args": [], + "documentation": [ + " The given member was added; see the transaction for who." + ] + }, + { + "name": "MemberRemoved", + "args": [], + "documentation": [ + " The given member was removed; see the transaction for who." + ] + }, + { + "name": "MembersSwapped", + "args": [], + "documentation": [ + " Two members were swapped; see the transaction for who." + ] + }, + { + "name": "MembersReset", + "args": [], + "documentation": [ + " The membership was reset; see the transaction for who the new set is." + ] + }, + { + "name": "Dummy", + "args": [ + "PhantomData" + ], + "documentation": [ + " Phantom member, never used." + ] + } + ], + "constants": [], + "errors": [] + }, + { + "name": "FinalityTracker", + "storage": null, + "calls": [ + { + "name": "final_hint", + "args": [ + { + "name": "hint", + "type": "Compact" + } + ], + "documentation": [ + " Hint that the author of this block thinks the best finalized", + " block is the given number." + ] + } + ], + "events": null, + "constants": [ + { + "name": "WindowSize", + "type": "BlockNumber", + "value": "0x65000000", + "documentation": [ + " The number of recent samples to keep from this chain. Default is 101." + ] + }, + { + "name": "ReportLatency", + "type": "BlockNumber", + "value": "0xe8030000", + "documentation": [ + " The delay after which point things become suspicious. Default is 1000." + ] + } + ], + "errors": [] + }, + { + "name": "Grandpa", + "storage": { + "prefix": "GrandpaFinality", + "items": [ + { + "name": "Authorities", + "modifier": 1, + "type": { + "Plain": "AuthorityList" + }, + "fallback": "0x00", + "documentation": [ + " DEPRECATED", + "", + " This used to store the current authority set, which has been migrated to the well-known", + " GRANDPA_AUTHORITES_KEY unhashed key." + ] + }, + { + "name": "State", + "modifier": 1, + "type": { + "Plain": "StoredState" + }, + "fallback": "0x00", + "documentation": [ + " State of the current authority set." + ] + }, + { + "name": "PendingChange", + "modifier": 0, + "type": { + "Plain": "StoredPendingChange" + }, + "fallback": "0x00", + "documentation": [ + " Pending change: (signaled at, scheduled change)." + ] + }, + { + "name": "NextForced", + "modifier": 0, + "type": { + "Plain": "BlockNumber" + }, + "fallback": "0x00", + "documentation": [ + " next block number where we can force a change." + ] + }, + { + "name": "Stalled", + "modifier": 0, + "type": { + "Plain": "(BlockNumber,BlockNumber)" + }, + "fallback": "0x00", + "documentation": [ + " `true` if we are currently stalled." + ] + }, + { + "name": "CurrentSetId", + "modifier": 1, + "type": { + "Plain": "SetId" + }, + "fallback": "0x0000000000000000", + "documentation": [ + " The number of changes (both in terms of keys and underlying economic responsibilities)", + " in the \"set\" of Grandpa validators from genesis." + ] + }, + { + "name": "SetIdSession", + "modifier": 0, + "type": { + "Map": { + "hasher": "Blake2_256", + "key": "SetId", + "value": "SessionIndex", + "linked": false + } + }, + "fallback": "0x00", + "documentation": [ + " A mapping from grandpa set ID to the index of the *most recent* session for which its members were responsible." + ] + } + ] + }, + "calls": [ + { + "name": "report_misbehavior", + "args": [ + { + "name": "_report", + "type": "Bytes" + } + ], + "documentation": [ + " Report some misbehavior." + ] + } + ], + "events": [ + { + "name": "NewAuthorities", + "args": [ + "AuthorityList" + ], + "documentation": [ + " New authority set has been applied." + ] + }, + { + "name": "Paused", + "args": [], + "documentation": [ + " Current authority set has been paused." + ] + }, + { + "name": "Resumed", + "args": [], + "documentation": [ + " Current authority set has been resumed." + ] + } + ], + "constants": [], + "errors": [] + }, + { + "name": "Treasury", + "storage": { + "prefix": "Treasury", + "items": [ + { + "name": "ProposalCount", + "modifier": 1, + "type": { + "Plain": "ProposalIndex" + }, + "fallback": "0x00000000", + "documentation": [ + " Number of proposals that have been made." + ] + }, + { + "name": "Proposals", + "modifier": 0, + "type": { + "Map": { + "hasher": "Blake2_256", + "key": "ProposalIndex", + "value": "TreasuryProposal", + "linked": false + } + }, + "fallback": "0x00", + "documentation": [ + " Proposals that have been made." + ] + }, + { + "name": "Approvals", + "modifier": 1, + "type": { + "Plain": "Vec" + }, + "fallback": "0x00", + "documentation": [ + " Proposal indices that have been approved but not yet awarded." + ] + } + ] + }, + "calls": [ + { + "name": "propose_spend", + "args": [ + { + "name": "value", + "type": "Compact" + }, + { + "name": "beneficiary", + "type": "Address" + } + ], + "documentation": [ + " Put forward a suggestion for spending. A deposit proportional to the value", + " is reserved and slashed if the proposal is rejected. It is returned once the", + " proposal is awarded.", + "", + " # ", + " - O(1).", + " - Limited storage reads.", + " - One DB change, one extra DB entry.", + " # " + ] + }, + { + "name": "reject_proposal", + "args": [ + { + "name": "proposal_id", + "type": "Compact" + } + ], + "documentation": [ + " Reject a proposed spend. The original deposit will be slashed.", + "", + " # ", + " - O(1).", + " - Limited storage reads.", + " - One DB clear.", + " # " + ] + }, + { + "name": "approve_proposal", + "args": [ + { + "name": "proposal_id", + "type": "Compact" + } + ], + "documentation": [ + " Approve a proposal. At a later time, the proposal will be allocated to the beneficiary", + " and the original deposit will be returned.", + "", + " # ", + " - O(1).", + " - Limited storage reads.", + " - One DB change.", + " # " + ] + } + ], + "events": [ + { + "name": "Proposed", + "args": [ + "ProposalIndex" + ], + "documentation": [ + " New proposal." + ] + }, + { + "name": "Spending", + "args": [ + "Balance" + ], + "documentation": [ + " We have ended a spend period and will now allocate funds." + ] + }, + { + "name": "Awarded", + "args": [ + "ProposalIndex", + "Balance", + "AccountId" + ], + "documentation": [ + " Some funds have been allocated." + ] + }, + { + "name": "Burnt", + "args": [ + "Balance" + ], + "documentation": [ + " Some of our funds have been burnt." + ] + }, + { + "name": "Rollover", + "args": [ + "Balance" + ], + "documentation": [ + " Spending has finished; this is the amount that rolls over until next spend." + ] + }, + { + "name": "Deposit", + "args": [ + "Balance" + ], + "documentation": [ + " Some funds have been deposited." + ] + } + ], + "constants": [ + { + "name": "ProposalBond", + "type": "Permill", + "value": "0x50c30000", + "documentation": [ + " Fraction of a proposal's value that should be bonded in order to place the proposal.", + " An accepted proposal gets these back. A rejected proposal does not." + ] + }, + { + "name": "ProposalBondMinimum", + "type": "BalanceOf", + "value": "0x00407a10f35a00000000000000000000", + "documentation": [ + " Minimum amount of funds that should be placed in a deposit for making a proposal." + ] + }, + { + "name": "SpendPeriod", + "type": "BlockNumber", + "value": "0x80700000", + "documentation": [ + " Period between successive spends." + ] + }, + { + "name": "Burn", + "type": "Permill", + "value": "0x20a10700", + "documentation": [ + " Percentage of spare funds (if any) that are burnt per spend period." + ] + } + ], + "errors": [] + }, + { + "name": "Contracts", + "storage": { + "prefix": "Contract", + "items": [ + { + "name": "GasSpent", + "modifier": 1, + "type": { + "Plain": "Gas" + }, + "fallback": "0x0000000000000000", + "documentation": [ + " Gas spent so far in this block." + ] + }, + { + "name": "CurrentSchedule", + "modifier": 1, + "type": { + "Plain": "Schedule" + }, + "fallback": "0x0000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000008700000000000000af0000000000000001000000000000000100000000000000040000000000010010000000004000000020000000", + "documentation": [ + " Current cost schedule for contracts." + ] + }, + { + "name": "PristineCode", + "modifier": 0, + "type": { + "Map": { + "hasher": "Blake2_256", + "key": "CodeHash", + "value": "Bytes", + "linked": false + } + }, + "fallback": "0x00", + "documentation": [ + " A mapping from an original code hash to the original code, untouched by instrumentation." + ] + }, + { + "name": "CodeStorage", + "modifier": 0, + "type": { + "Map": { + "hasher": "Blake2_256", + "key": "CodeHash", + "value": "PrefabWasmModule", + "linked": false + } + }, + "fallback": "0x00", + "documentation": [ + " A mapping between an original code hash and instrumented wasm code, ready for execution." + ] + }, + { + "name": "AccountCounter", + "modifier": 1, + "type": { + "Plain": "u64" + }, + "fallback": "0x0000000000000000", + "documentation": [ + " The subtrie counter." + ] + }, + { + "name": "ContractInfoOf", + "modifier": 0, + "type": { + "Map": { + "hasher": "Blake2_256", + "key": "AccountId", + "value": "ContractInfo", + "linked": false + } + }, + "fallback": "0x00", + "documentation": [ + " The code associated with a given account." + ] + }, + { + "name": "GasPrice", + "modifier": 1, + "type": { + "Plain": "BalanceOf" + }, + "fallback": "0x01000000000000000000000000000000", + "documentation": [ + " The price of one unit of gas." + ] + } + ] + }, + "calls": [ + { + "name": "update_schedule", + "args": [ + { + "name": "schedule", + "type": "Schedule" + } + ], + "documentation": [ + " Updates the schedule for metering contracts.", + "", + " The schedule must have a greater version than the stored schedule." + ] + }, + { + "name": "put_code", + "args": [ + { + "name": "gas_limit", + "type": "Compact" + }, + { + "name": "code", + "type": "Bytes" + } + ], + "documentation": [ + " Stores the given binary Wasm code into the chain's storage and returns its `codehash`.", + " You can instantiate contracts only with stored code." + ] + }, + { + "name": "call", + "args": [ + { + "name": "dest", + "type": "Address" + }, + { + "name": "value", + "type": "Compact" + }, + { + "name": "gas_limit", + "type": "Compact" + }, + { + "name": "data", + "type": "Bytes" + } + ], + "documentation": [ + " Makes a call to an account, optionally transferring some balance.", + "", + " * If the account is a smart-contract account, the associated code will be", + " executed and any value will be transferred.", + " * If the account is a regular account, any value will be transferred.", + " * If no account exists and the call value is not less than `existential_deposit`,", + " a regular account will be created and any value will be transferred." + ] + }, + { + "name": "instantiate", + "args": [ + { + "name": "endowment", + "type": "Compact" + }, + { + "name": "gas_limit", + "type": "Compact" + }, + { + "name": "code_hash", + "type": "CodeHash" + }, + { + "name": "data", + "type": "Bytes" + } + ], + "documentation": [ + " Instantiates a new contract from the `codehash` generated by `put_code`, optionally transferring some balance.", + "", + " Instantiation is executed as follows:", + "", + " - The destination address is computed based on the sender and hash of the code.", + " - The smart-contract account is created at the computed address.", + " - The `ctor_code` is executed in the context of the newly-created account. Buffer returned", + " after the execution is saved as the `code` of the account. That code will be invoked", + " upon any call received by this account.", + " - The contract is initialized." + ] + }, + { + "name": "claim_surcharge", + "args": [ + { + "name": "dest", + "type": "AccountId" + }, + { + "name": "aux_sender", + "type": "Option" + } + ], + "documentation": [ + " Allows block producers to claim a small reward for evicting a contract. If a block producer", + " fails to do so, a regular users will be allowed to claim the reward.", + "", + " If contract is not evicted as a result of this call, no actions are taken and", + " the sender is not eligible for the reward." + ] + } + ], + "events": [ + { + "name": "Transfer", + "args": [ + "AccountId", + "AccountId", + "Balance" + ], + "documentation": [ + " Transfer happened `from` to `to` with given `value` as part of a `call` or `instantiate`." + ] + }, + { + "name": "Instantiated", + "args": [ + "AccountId", + "AccountId" + ], + "documentation": [ + " Contract deployed by address at the specified address." + ] + }, + { + "name": "CodeStored", + "args": [ + "Hash" + ], + "documentation": [ + " Code with the specified hash has been stored." + ] + }, + { + "name": "ScheduleUpdated", + "args": [ + "u32" + ], + "documentation": [ + " Triggered when the current schedule is updated." + ] + }, + { + "name": "Dispatched", + "args": [ + "AccountId", + "bool" + ], + "documentation": [ + " A call was dispatched from the given account. The bool signals whether it was", + " successful execution or not." + ] + }, + { + "name": "Contract", + "args": [ + "AccountId", + "Bytes" + ], + "documentation": [ + " An event from contract of account." + ] + } + ], + "constants": [ + { + "name": "SignedClaimHandicap", + "type": "BlockNumber", + "value": "0x02000000", + "documentation": [ + " Number of block delay an extrinsic claim surcharge has.", + "", + " When claim surcharge is called by an extrinsic the rent is checked", + " for current_block - delay" + ] + }, + { + "name": "TombstoneDeposit", + "type": "BalanceOf", + "value": "0x00407a10f35a00000000000000000000", + "documentation": [ + " The minimum amount required to generate a tombstone." + ] + }, + { + "name": "StorageSizeOffset", + "type": "u32", + "value": "0x08000000", + "documentation": [ + " Size of a contract at the time of instantiaion. This is a simple way to ensure that", + " empty contracts eventually gets deleted." + ] + }, + { + "name": "RentByteFee", + "type": "BalanceOf", + "value": "0x00407a10f35a00000000000000000000", + "documentation": [ + " Price of a byte of storage per one block interval. Should be greater than 0." + ] + }, + { + "name": "RentDepositOffset", + "type": "BalanceOf", + "value": "0x00008a5d784563010000000000000000", + "documentation": [ + " The amount of funds a contract should deposit in order to offset", + " the cost of one byte.", + "", + " Let's suppose the deposit is 1,000 BU (balance units)/byte and the rent is 1 BU/byte/day,", + " then a contract with 1,000,000 BU that uses 1,000 bytes of storage would pay no rent.", + " But if the balance reduced to 500,000 BU and the storage stayed the same at 1,000,", + " then it would pay 500 BU/day." + ] + }, + { + "name": "SurchargeReward", + "type": "BalanceOf", + "value": "0x0080a1a76b4a35000000000000000000", + "documentation": [ + " Reward that is received by the party whose touch has led", + " to removal of a contract." + ] + }, + { + "name": "TransferFee", + "type": "BalanceOf", + "value": "0x0010a5d4e80000000000000000000000", + "documentation": [ + " The fee required to make a transfer." + ] + }, + { + "name": "CreationFee", + "type": "BalanceOf", + "value": "0x0010a5d4e80000000000000000000000", + "documentation": [ + " The fee required to create an account." + ] + }, + { + "name": "TransactionBaseFee", + "type": "BalanceOf", + "value": "0x0010a5d4e80000000000000000000000", + "documentation": [ + " The fee to be paid for making a transaction; the base." + ] + }, + { + "name": "TransactionByteFee", + "type": "BalanceOf", + "value": "0x00e40b54020000000000000000000000", + "documentation": [ + " The fee to be paid for making a transaction; the per-byte portion." + ] + }, + { + "name": "ContractFee", + "type": "BalanceOf", + "value": "0x0010a5d4e80000000000000000000000", + "documentation": [ + " The fee required to instantiate a contract instance. A reasonable default value", + " is 21." + ] + }, + { + "name": "CallBaseFee", + "type": "Gas", + "value": "0xe803000000000000", + "documentation": [ + " The base fee charged for calling into a contract. A reasonable default", + " value is 135." + ] + }, + { + "name": "InstantiateBaseFee", + "type": "Gas", + "value": "0xe803000000000000", + "documentation": [ + " The base fee charged for instantiating a contract. A reasonable default value", + " is 175." + ] + }, + { + "name": "MaxDepth", + "type": "u32", + "value": "0x20000000", + "documentation": [ + " The maximum nesting level of a call/instantiate stack. A reasonable default", + " value is 100." + ] + }, + { + "name": "MaxValueSize", + "type": "u32", + "value": "0x00400000", + "documentation": [ + " The maximum size of a storage value in bytes. A reasonable default is 16 KiB." + ] + }, + { + "name": "BlockGasLimit", + "type": "Gas", + "value": "0x8096980000000000", + "documentation": [ + " The maximum amount of gas that could be expended per block. A reasonable", + " default value is 10_000_000." + ] + } + ], + "errors": [] + }, + { + "name": "Sudo", + "storage": { + "prefix": "Sudo", + "items": [ + { + "name": "Key", + "modifier": 1, + "type": { + "Plain": "AccountId" + }, + "fallback": "0x0000000000000000000000000000000000000000000000000000000000000000", + "documentation": [ + " The `AccountId` of the sudo key." + ] + } + ] + }, + "calls": [ + { + "name": "sudo", + "args": [ + { + "name": "proposal", + "type": "Proposal" + } + ], + "documentation": [ + " Authenticates the sudo key and dispatches a function call with `Root` origin.", + "", + " The dispatch origin for this call must be _Signed_.", + "", + " # ", + " - O(1).", + " - Limited storage reads.", + " - One DB write (event).", + " - Unknown weight of derivative `proposal` execution.", + " # " + ] + }, + { + "name": "set_key", + "args": [ + { + "name": "new", + "type": "Address" + } + ], + "documentation": [ + " Authenticates the current sudo key and sets the given AccountId (`new`) as the new sudo key.", + "", + " The dispatch origin for this call must be _Signed_.", + "", + " # ", + " - O(1).", + " - Limited storage reads.", + " - One DB change.", + " # " + ] + }, + { + "name": "sudo_as", + "args": [ + { + "name": "who", + "type": "Address" + }, + { + "name": "proposal", + "type": "Proposal" + } + ], + "documentation": [ + " Authenticates the sudo key and dispatches a function call with `Signed` origin from", + " a given account.", + "", + " The dispatch origin for this call must be _Signed_.", + "", + " # ", + " - O(1).", + " - Limited storage reads.", + " - One DB write (event).", + " - Unknown weight of derivative `proposal` execution.", + " # " + ] + } + ], + "events": [ + { + "name": "Sudid", + "args": [ + "bool" + ], + "documentation": [ + " A sudo just took place." + ] + }, + { + "name": "KeyChanged", + "args": [ + "AccountId" + ], + "documentation": [ + " The sudoer just switched identity; the old key is supplied." + ] + }, + { + "name": "SudoAsDone", + "args": [ + "bool" + ], + "documentation": [ + " A sudo just took place." + ] + } + ], + "constants": [], + "errors": [] + }, + { + "name": "ImOnline", + "storage": { + "prefix": "ImOnline", + "items": [ + { + "name": "GossipAt", + "modifier": 1, + "type": { + "Plain": "BlockNumber" + }, + "fallback": "0x00000000", + "documentation": [ + " The block number when we should gossip." + ] + }, + { + "name": "Keys", + "modifier": 1, + "type": { + "Plain": "Vec" + }, + "fallback": "0x00", + "documentation": [ + " The current set of keys that may issue a heartbeat." + ] + }, + { + "name": "ReceivedHeartbeats", + "modifier": 0, + "type": { + "DoubleMap": { + "hasher": "Blake2_256", + "key1": "SessionIndex", + "key2": "AuthIndex", + "value": "Bytes", + "key2Hasher": "Blake2_256" + } + }, + "fallback": "0x00", + "documentation": [ + " For each session index, we keep a mapping of `AuthIndex`", + " to `offchain::OpaqueNetworkState`." + ] + }, + { + "name": "AuthoredBlocks", + "modifier": 1, + "type": { + "DoubleMap": { + "hasher": "Blake2_256", + "key1": "SessionIndex", + "key2": "ValidatorId", + "value": "u32", + "key2Hasher": "Blake2_256" + } + }, + "fallback": "0x00000000", + "documentation": [ + " For each session index, we keep a mapping of `T::ValidatorId` to the", + " number of blocks authored by the given authority." + ] + } + ] + }, + "calls": [ + { + "name": "heartbeat", + "args": [ + { + "name": "heartbeat", + "type": "Heartbeat" + }, + { + "name": "_signature", + "type": "Signature" + } + ], + "documentation": [] + } + ], + "events": [ + { + "name": "HeartbeatReceived", + "args": [ + "AuthorityId" + ], + "documentation": [ + " A new heartbeat was received from `AuthorityId`" + ] + }, + { + "name": "AllGood", + "args": [], + "documentation": [ + " At the end of the session, no offence was committed." + ] + }, + { + "name": "SomeOffline", + "args": [ + "Vec" + ], + "documentation": [ + " At the end of the session, at least once validator was found to be offline." + ] + } + ], + "constants": [], + "errors": [] + }, + { + "name": "AuthorityDiscovery", + "storage": null, + "calls": [], + "events": null, + "constants": [], + "errors": [] + }, + { + "name": "Offences", + "storage": { + "prefix": "Offences", + "items": [ + { + "name": "Reports", + "modifier": 0, + "type": { + "Map": { + "hasher": "Blake2_256", + "key": "ReportIdOf", + "value": "OffenceDetails", + "linked": false + } + }, + "fallback": "0x00", + "documentation": [ + " The primary structure that holds all offence records keyed by report identifiers." + ] + }, + { + "name": "ConcurrentReportsIndex", + "modifier": 1, + "type": { + "DoubleMap": { + "hasher": "Blake2_256", + "key1": "Kind", + "key2": "OpaqueTimeSlot", + "value": "Vec", + "key2Hasher": "Blake2_256" + } + }, + "fallback": "0x00", + "documentation": [ + " A vector of reports of the same kind that happened at the same time slot." + ] + }, + { + "name": "ReportsByKindIndex", + "modifier": 1, + "type": { + "Map": { + "hasher": "Blake2_256", + "key": "Kind", + "value": "Bytes", + "linked": false + } + }, + "fallback": "0x00", + "documentation": [ + " Enumerates all reports of a kind along with the time they happened.", + "", + " All reports are sorted by the time of offence.", + "", + " Note that the actual type of this mapping is `Vec`, this is because values of", + " different types are not supported at the moment so we are doing the manual serialization." + ] + } + ] + }, + "calls": [], + "events": [ + { + "name": "Offence", + "args": [ + "Kind", + "OpaqueTimeSlot" + ], + "documentation": [ + " There is an offence reported of the given `kind` happened at the `session_index` and", + " (kind-specific) time slot. This event is not deposited for duplicate slashes." + ] + } + ], + "constants": [], + "errors": [] + }, + { + "name": "RandomnessCollectiveFlip", + "storage": { + "prefix": "RandomnessCollectiveFlip", + "items": [ + { + "name": "RandomMaterial", + "modifier": 1, + "type": { + "Plain": "Vec" + }, + "fallback": "0x00", + "documentation": [ + " Series of block headers from the last 81 blocks that acts as random seed material. This", + " is arranged as a ring buffer with `block_number % 81` being the index into the `Vec` of", + " the oldest hash." + ] + } + ] + }, + "calls": [], + "events": null, + "constants": [], + "errors": [] + }, + { + "name": "Nicks", + "storage": { + "prefix": "Sudo", + "items": [ + { + "name": "NameOf", + "modifier": 0, + "type": { + "Map": { + "hasher": "Blake2_256", + "key": "AccountId", + "value": "(Bytes,BalanceOf)", + "linked": false + } + }, + "fallback": "0x00", + "documentation": [ + " The lookup table for names." + ] + } + ] + }, + "calls": [ + { + "name": "set_name", + "args": [ + { + "name": "name", + "type": "Bytes" + } + ], + "documentation": [ + " Set an account's name. The name should be a UTF-8-encoded string by convention, though", + " we don't check it.", + "", + " The name may not be more than `T::MaxLength` bytes, nor less than `T::MinLength` bytes.", + "", + " If the account doesn't already have a name, then a fee of `ReservationFee` is reserved", + " in the account.", + "", + " The dispatch origin for this call must be _Signed_.", + "", + " # ", + " - O(1).", + " - At most one balance operation.", + " - One storage read/write.", + " - One event.", + " # " + ] + }, + { + "name": "clear_name", + "args": [], + "documentation": [ + " Clear an account's name and return the deposit. Fails if the account was not named.", + "", + " The dispatch origin for this call must be _Signed_.", + "", + " # ", + " - O(1).", + " - One balance operation.", + " - One storage read/write.", + " - One event.", + " # " + ] + }, + { + "name": "kill_name", + "args": [ + { + "name": "target", + "type": "Address" + } + ], + "documentation": [ + " Remove an account's name and take charge of the deposit.", + "", + " Fails if `who` has not been named. The deposit is dealt with through `T::Slashed`", + " imbalance handler.", + "", + " The dispatch origin for this call must be _Root_ or match `T::ForceOrigin`.", + "", + " # ", + " - O(1).", + " - One unbalanced handler (probably a balance transfer)", + " - One storage read/write.", + " - One event.", + " # " + ] + }, + { + "name": "force_name", + "args": [ + { + "name": "target", + "type": "Address" + }, + { + "name": "name", + "type": "Bytes" + } + ], + "documentation": [ + " Set a third-party account's name with no deposit.", + "", + " No length checking is done on the name.", + "", + " The dispatch origin for this call must be _Root_ or match `T::ForceOrigin`.", + "", + " # ", + " - O(1).", + " - At most one balance operation.", + " - One storage read/write.", + " - One event.", + " # " + ] + } + ], + "events": [ + { + "name": "NameSet", + "args": [ + "AccountId" + ], + "documentation": [ + " A name was set." + ] + }, + { + "name": "NameForced", + "args": [ + "AccountId" + ], + "documentation": [ + " A name was forcibly set." + ] + }, + { + "name": "NameChanged", + "args": [ + "AccountId" + ], + "documentation": [ + " A name was changed." + ] + }, + { + "name": "NameCleared", + "args": [ + "AccountId", + "Balance" + ], + "documentation": [ + " A name was cleared, and the given balance returned." + ] + }, + { + "name": "NameKilled", + "args": [ + "AccountId", + "Balance" + ], + "documentation": [ + " A name was removed and the given balance slashed." + ] + } + ], + "constants": [ + { + "name": "ReservationFee", + "type": "BalanceOf", + "value": "0x00407a10f35a00000000000000000000", + "documentation": [ + " Reservation fee." + ] + }, + { + "name": "MinLength", + "type": "u32", + "value": "0x03000000", + "documentation": [ + " The minimum length a name may be." + ] + }, + { + "name": "MaxLength", + "type": "u32", + "value": "0x10000000", + "documentation": [ + " The maximum length a name may be." + ] + } + ], + "errors": [] + } + ] + } + } +} diff --git a/packages/metadata/src/Metadata/v9/static.ts b/packages/metadata/src/Metadata/v9/static.ts new file mode 100644 index 0000000000..70f6e250cb --- /dev/null +++ b/packages/metadata/src/Metadata/v9/static.ts @@ -0,0 +1,7 @@ +// Copyright 2017-2019 @polkadot/metadata authors & contributors +// This software may be modified and distributed under the terms +// of the Apache-2.0 license. See the LICENSE file for details. + +const meta = '0x6d65746109641853797374656d011853797374656d34304163636f756e744e6f6e636501010130543a3a4163636f756e74496420543a3a496e646578001000000000047c2045787472696e73696373206e6f6e636520666f72206163636f756e74732e3845787472696e736963436f756e7400000c753332040004b820546f74616c2065787472696e7369637320636f756e7420666f72207468652063757272656e7420626c6f636b2e4c416c6c45787472696e73696373576569676874000018576569676874040004150120546f74616c2077656967687420666f7220616c6c2065787472696e736963732070757420746f6765746865722c20666f72207468652063757272656e7420626c6f636b2e40416c6c45787472696e736963734c656e00000c753332040004410120546f74616c206c656e6774682028696e2062797465732920666f7220616c6c2065787472696e736963732070757420746f6765746865722c20666f72207468652063757272656e7420626c6f636b2e24426c6f636b4861736801010138543a3a426c6f636b4e756d6265721c543a3a48617368008000000000000000000000000000000000000000000000000000000000000000000498204d6170206f6620626c6f636b206e756d6265727320746f20626c6f636b206861736865732e3445787472696e736963446174610101010c7533321c5665633c75383e000400043d012045787472696e73696373206461746120666f72207468652063757272656e7420626c6f636b20286d61707320616e2065787472696e736963277320696e64657820746f206974732064617461292e184e756d626572010038543a3a426c6f636b4e756d6265721000000000040901205468652063757272656e7420626c6f636b206e756d626572206265696e672070726f6365737365642e205365742062792060657865637574655f626c6f636b602e28506172656e744861736801001c543a3a4861736880000000000000000000000000000000000000000000000000000000000000000004702048617368206f66207468652070726576696f757320626c6f636b2e3845787472696e73696373526f6f7401001c543a3a486173688000000000000000000000000000000000000000000000000000000000000000000415012045787472696e7369637320726f6f74206f66207468652063757272656e7420626c6f636b2c20616c736f2070617274206f662074686520626c6f636b206865616465722e1844696765737401002c4469676573744f663c543e040004f020446967657374206f66207468652063757272656e7420626c6f636b2c20616c736f2070617274206f662074686520626c6f636b206865616465722e184576656e747301008c5665633c4576656e745265636f72643c543a3a4576656e742c20543a3a486173683e3e040004a0204576656e7473206465706f736974656420666f72207468652063757272656e7420626c6f636b2e284576656e74436f756e740100284576656e74496e646578100000000004b820546865206e756d626572206f66206576656e747320696e2074686520604576656e74733c543e60206c6973742e2c4576656e74546f706963730102010828291c543a3a48617368845665633c28543a3a426c6f636b4e756d6265722c204576656e74496e646578293e010400342501204d617070696e67206265747765656e206120746f7069632028726570726573656e74656420627920543a3a486173682920616e64206120766563746f72206f6620696e646578657394206f66206576656e747320696e2074686520603c4576656e74733c543e3e60206c6973742e002d0120546865206669727374206b657920736572766573206e6f20707572706f73652e2054686973206669656c64206973206465636c6172656420617320646f75626c655f6d6170206a757374a820666f7220636f6e76656e69656e6365206f66207573696e67206072656d6f76655f707265666978602e00510120416c6c20746f70696320766563746f727320686176652064657465726d696e69737469632073746f72616765206c6f636174696f6e7320646570656e64696e67206f6e2074686520746f7069632e2054686973450120616c6c6f7773206c696768742d636c69656e747320746f206c6576657261676520746865206368616e67657320747269652073746f7261676520747261636b696e67206d656368616e69736d20616e64e420696e2063617365206f66206368616e67657320666574636820746865206c697374206f66206576656e7473206f6620696e7465726573742e004d01205468652076616c756520686173207468652074797065206028543a3a426c6f636b4e756d6265722c204576656e74496e646578296020626563617573652069662077652075736564206f6e6c79206a7573744d012074686520604576656e74496e64657860207468656e20696e20636173652069662074686520746f70696320686173207468652073616d6520636f6e74656e7473206f6e20746865206e65787420626c6f636b0101206e6f206e6f74696669636174696f6e2077696c6c20626520747269676765726564207468757320746865206576656e74206d69676874206265206c6f73742e011c2866696c6c5f626c6f636b0004210120412062696720646973706174636820746861742077696c6c20646973616c6c6f7720616e79206f74686572207472616e73616374696f6e20746f20626520696e636c756465642e1872656d61726b041c5f72656d61726b1c5665633c75383e046c204d616b6520736f6d65206f6e2d636861696e2072656d61726b2e387365745f686561705f7061676573041470616765730c75363404fc2053657420746865206e756d626572206f6620706167657320696e2074686520576562417373656d626c7920656e7669726f6e6d656e74277320686561702e207365745f636f6465040c6e65771c5665633c75383e04482053657420746865206e657720636f64652e2c7365745f73746f7261676504146974656d73345665633c4b657956616c75653e046c2053657420736f6d65206974656d73206f662073746f726167652e306b696c6c5f73746f7261676504106b657973205665633c4b65793e0478204b696c6c20736f6d65206974656d732066726f6d2073746f726167652e2c6b696c6c5f70726566697804187072656669780c4b6579041501204b696c6c20616c6c2073746f72616765206974656d7320776974682061206b657920746861742073746172747320776974682074686520676976656e207072656669782e01084045787472696e7369635375636365737304304469737061746368496e666f049420416e2065787472696e73696320636f6d706c65746564207375636365737366756c6c792e3c45787472696e7369634661696c6564083444697370617463684572726f72304469737061746368496e666f045420416e2065787472696e736963206661696c65642e000c4c526571756972655369676e65644f726967696e004452657175697265526f6f744f726967696e003c526571756972654e6f4f726967696e001c5574696c697479000104146261746368041463616c6c735c5665633c3c542061732054726169743e3a3a43616c6c3e04b02053656e642061206261746368206f662064697370617463682063616c6c7320286f6e6c7920726f6f74292e0104344261746368457865637574656404785665633c526573756c743c28292c2044697370617463684572726f723e3e0000001042616265011042616265242845706f6368496e64657801000c75363420000000000000000004542043757272656e742065706f636820696e6465782e2c417574686f72697469657301009c5665633c28417574686f7269747949642c2042616265417574686f72697479576569676874293e0400046c2043757272656e742065706f636820617574686f7269746965732e2c47656e65736973536c6f7401000c75363420000000000000000008f82054686520736c6f74206174207768696368207468652066697273742065706f63682061637475616c6c7920737461727465642e205468697320697320309020756e74696c2074686520666972737420626c6f636b206f662074686520636861696e2e2c43757272656e74536c6f7401000c75363420000000000000000004542043757272656e7420736c6f74206e756d6265722e2852616e646f6d6e6573730100205b75383b2033325d80000000000000000000000000000000000000000000000000000000000000000028b8205468652065706f63682072616e646f6d6e65737320666f7220746865202a63757272656e742a2065706f63682e002c20232053656375726974790005012054686973204d555354204e4f54206265207573656420666f722067616d626c696e672c2061732069742063616e20626520696e666c75656e6365642062792061f8206d616c6963696f75732076616c696461746f7220696e207468652073686f7274207465726d2e204974204d4159206265207573656420696e206d616e7915012063727970746f677261706869632070726f746f636f6c732c20686f77657665722c20736f206c6f6e67206173206f6e652072656d656d6265727320746861742074686973150120286c696b652065766572797468696e6720656c7365206f6e2d636861696e29206974206973207075626c69632e20466f72206578616d706c652c2069742063616e206265050120757365642077686572652061206e756d626572206973206e656564656420746861742063616e6e6f742068617665206265656e2063686f73656e20627920616e0d01206164766572736172792c20666f7220707572706f7365732073756368206173207075626c69632d636f696e207a65726f2d6b6e6f776c656467652070726f6f66732e384e65787452616e646f6d6e6573730100205b75383b2033325d800000000000000000000000000000000000000000000000000000000000000000045c204e6578742065706f63682072616e646f6d6e6573732e305365676d656e74496e64657801000c7533321000000000247c2052616e646f6d6e65737320756e64657220636f6e737472756374696f6e2e00f4205765206d616b6520612074726164656f6666206265747765656e2073746f7261676520616363657373657320616e64206c697374206c656e6774682e01012057652073746f72652074686520756e6465722d636f6e737472756374696f6e2072616e646f6d6e65737320696e207365676d656e7473206f6620757020746f942060554e4445525f434f4e535452554354494f4e5f5345474d454e545f4c454e475448602e00ec204f6e63652061207365676d656e7420726561636865732074686973206c656e6774682c20776520626567696e20746865206e657874206f6e652e090120576520726573657420616c6c207365676d656e747320616e642072657475726e20746f206030602061742074686520626567696e6e696e67206f662065766572791c2065706f63682e44556e646572436f6e737472756374696f6e0101010c753332345665633c5b75383b2033325d3e000400002c496e697469616c697a65640000204d6179626556726604000801012054656d706f726172792076616c75652028636c656172656420617420626c6f636b2066696e616c697a6174696f6e292077686963682069732060536f6d65601d01206966207065722d626c6f636b20696e697469616c697a6174696f6e2068617320616c7265616479206265656e2063616c6c656420666f722063757272656e7420626c6f636b2e010000083445706f63684475726174696f6e0c75363420c800000000000000080d0120546865206e756d626572206f66202a2a736c6f74732a2a207468617420616e2065706f63682074616b65732e20576520636f75706c652073657373696f6e7320746ffc2065706f6368732c20692e652e2077652073746172742061206e65772073657373696f6e206f6e636520746865206e65772065706f636820626567696e732e444578706563746564426c6f636b54696d6524543a3a4d6f6d656e7420b80b00000000000014050120546865206578706563746564206176657261676520626c6f636b2074696d6520617420776869636820424142452073686f756c64206265206372656174696e67110120626c6f636b732e2053696e636520424142452069732070726f626162696c6973746963206974206973206e6f74207472697669616c20746f20666967757265206f75740501207768617420746865206578706563746564206176657261676520626c6f636b2074696d652073686f756c64206265206261736564206f6e2074686520736c6f740901206475726174696f6e20616e642074686520736563757269747920706172616d657465722060636020287768657265206031202d20636020726570726573656e7473a0207468652070726f626162696c697479206f66206120736c6f74206265696e6720656d707479292e002454696d657374616d70012454696d657374616d70080c4e6f77010024543a3a4d6f6d656e7420000000000000000004902043757272656e742074696d6520666f72207468652063757272656e7420626c6f636b2e24446964557064617465010010626f6f6c040004b420446964207468652074696d657374616d7020676574207570646174656420696e207468697320626c6f636b3f01040c736574040c6e6f7748436f6d706163743c543a3a4d6f6d656e743e245820536574207468652063757272656e742074696d652e00590120546869732063616c6c2073686f756c6420626520696e766f6b65642065786163746c79206f6e63652070657220626c6f636b2e2049742077696c6c2070616e6963206174207468652066696e616c697a6174696f6ed82070686173652c20696620746869732063616c6c206861736e2774206265656e20696e766f6b656420627920746861742074696d652e004501205468652074696d657374616d702073686f756c642062652067726561746572207468616e207468652070726576696f7573206f6e652062792074686520616d6f756e74207370656369666965642062794420604d696e696d756d506572696f64602e00d820546865206469737061746368206f726967696e20666f7220746869732063616c6c206d7573742062652060496e686572656e74602e0004344d696e696d756d506572696f6424543a3a4d6f6d656e7420dc0500000000000010690120546865206d696e696d756d20706572696f64206265747765656e20626c6f636b732e204265776172652074686174207468697320697320646966666572656e7420746f20746865202a65787065637465642a20706572696f64690120746861742074686520626c6f636b2070726f64756374696f6e206170706172617475732070726f76696465732e20596f75722063686f73656e20636f6e73656e7375732073797374656d2077696c6c2067656e6572616c6c79650120776f726b2077697468207468697320746f2064657465726d696e6520612073656e7369626c6520626c6f636b2074696d652e20652e672e20466f7220417572612c2069742077696c6c20626520646f75626c6520746869737020706572696f64206f6e2064656661756c742073657474696e67732e0028417574686f72736869700128417574686f72736869700c18556e636c65730100e85665633c556e636c65456e7472794974656d3c543a3a426c6f636b4e756d6265722c20543a3a486173682c20543a3a4163636f756e7449643e3e0400041c20556e636c657318417574686f72000030543a3a4163636f756e7449640400046420417574686f72206f662063757272656e7420626c6f636b2e30446964536574556e636c6573010010626f6f6c040004bc205768657468657220756e636c6573207765726520616c72656164792073657420696e207468697320626c6f636b2e0104287365745f756e636c657304286e65775f756e636c6573385665633c543a3a4865616465723e04642050726f76696465206120736574206f6620756e636c65732e0000001c496e6469636573011c496e6469636573082c4e657874456e756d53657401003c543a3a4163636f756e74496e6465781000000000047c20546865206e657874206672656520656e756d65726174696f6e207365742e1c456e756d5365740101013c543a3a4163636f756e74496e646578445665633c543a3a4163636f756e7449643e00040004582054686520656e756d65726174696f6e20736574732e010001043c4e65774163636f756e74496e64657808244163636f756e744964304163636f756e74496e64657810882041206e6577206163636f756e7420696e646578207761732061737369676e65642e0005012054686973206576656e74206973206e6f7420747269676765726564207768656e20616e206578697374696e6720696e64657820697320726561737369676e65646020746f20616e6f7468657220604163636f756e744964602e00002042616c616e636573012042616c616e6365731434546f74616c49737375616e6365010028543a3a42616c616e6365400000000000000000000000000000000004982054686520746f74616c20756e6974732069737375656420696e207468652073797374656d2e1c56657374696e6700010130543a3a4163636f756e744964ac56657374696e675363686564756c653c543a3a42616c616e63652c20543a3a426c6f636b4e756d6265723e00040004d820496e666f726d6174696f6e20726567617264696e67207468652076657374696e67206f66206120676976656e206163636f756e742e2c4672656542616c616e636501010130543a3a4163636f756e74496428543a3a42616c616e63650040000000000000000000000000000000002c9c20546865202766726565272062616c616e6365206f66206120676976656e206163636f756e742e004101205468697320697320746865206f6e6c792062616c616e63652074686174206d61747465727320696e207465726d73206f66206d6f7374206f7065726174696f6e73206f6e20746f6b656e732e204974750120616c6f6e65206973207573656420746f2064657465726d696e65207468652062616c616e6365207768656e20696e2074686520636f6e747261637420657865637574696f6e20656e7669726f6e6d656e742e205768656e207468697355012062616c616e63652066616c6c732062656c6f77207468652076616c7565206f6620604578697374656e7469616c4465706f736974602c207468656e20746865202763757272656e74206163636f756e74272069733d012064656c657465643a207370656369666963616c6c7920604672656542616c616e6365602e20467572746865722c2074686520604f6e4672656542616c616e63655a65726f602063616c6c6261636b450120697320696e766f6b65642c20676976696e672061206368616e636520746f2065787465726e616c206d6f64756c657320746f20636c65616e2075702064617461206173736f636961746564207769746854207468652064656c65746564206163636f756e742e005d01206073797374656d3a3a4163636f756e744e6f6e63656020697320616c736f2064656c657465642069662060526573657276656442616c616e63656020697320616c736f207a65726f2028697420616c736f2067657473150120636f6c6c617073656420746f207a65726f2069662069742065766572206265636f6d6573206c657373207468616e20604578697374656e7469616c4465706f736974602e3c526573657276656442616c616e636501010130543a3a4163636f756e74496428543a3a42616c616e63650040000000000000000000000000000000002c75012054686520616d6f756e74206f66207468652062616c616e6365206f66206120676976656e206163636f756e7420746861742069732065787465726e616c6c792072657365727665643b20746869732063616e207374696c6c206765749c20736c61736865642c20627574206765747320736c6173686564206c617374206f6620616c6c2e006d0120546869732062616c616e63652069732061202772657365727665272062616c616e63652074686174206f746865722073756273797374656d732075736520696e206f7264657220746f2073657420617369646520746f6b656e732501207468617420617265207374696c6c20276f776e65642720627920746865206163636f756e7420686f6c6465722c20627574207768696368206172652073757370656e6461626c652e007501205768656e20746869732062616c616e63652066616c6c732062656c6f77207468652076616c7565206f6620604578697374656e7469616c4465706f736974602c207468656e2074686973202772657365727665206163636f756e7427b42069732064656c657465643a207370656369666963616c6c792c2060526573657276656442616c616e6365602e004d01206073797374656d3a3a4163636f756e744e6f6e63656020697320616c736f2064656c6574656420696620604672656542616c616e63656020697320616c736f207a65726f2028697420616c736f2067657473190120636f6c6c617073656420746f207a65726f2069662069742065766572206265636f6d6573206c657373207468616e20604578697374656e7469616c4465706f736974602e29144c6f636b7301010130543a3a4163636f756e744964b05665633c42616c616e63654c6f636b3c543a3a42616c616e63652c20543a3a426c6f636b4e756d6265723e3e00040004b820416e79206c6971756964697479206c6f636b73206f6e20736f6d65206163636f756e742062616c616e6365732e0110207472616e736665720810646573748c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f757263651476616c75654c436f6d706163743c543a3a42616c616e63653e64d8205472616e7366657220736f6d65206c697175696420667265652062616c616e636520746f20616e6f74686572206163636f756e742e00090120607472616e73666572602077696c6c207365742074686520604672656542616c616e636560206f66207468652073656e64657220616e642072656365697665722e21012049742077696c6c2064656372656173652074686520746f74616c2069737375616e6365206f66207468652073797374656d2062792074686520605472616e73666572466565602e1501204966207468652073656e6465722773206163636f756e742069732062656c6f7720746865206578697374656e7469616c206465706f736974206173206120726573756c74b4206f6620746865207472616e736665722c20746865206163636f756e742077696c6c206265207265617065642e00190120546865206469737061746368206f726967696e20666f7220746869732063616c6c206d75737420626520605369676e65646020627920746865207472616e736163746f722e002c2023203c7765696768743e3101202d20446570656e64656e74206f6e20617267756d656e747320627574206e6f7420637269746963616c2c20676976656e2070726f70657220696d706c656d656e746174696f6e7320666f72cc202020696e70757420636f6e6669672074797065732e205365652072656c617465642066756e6374696f6e732062656c6f772e6901202d20497420636f6e7461696e732061206c696d69746564206e756d626572206f6620726561647320616e642077726974657320696e7465726e616c6c7920616e64206e6f20636f6d706c657820636f6d7075746174696f6e2e004c2052656c617465642066756e6374696f6e733a0051012020202d2060656e737572655f63616e5f77697468647261776020697320616c776179732063616c6c656420696e7465726e616c6c792062757420686173206120626f756e64656420636f6d706c65786974792e2d012020202d205472616e7366657272696e672062616c616e63657320746f206163636f756e7473207468617420646964206e6f74206578697374206265666f72652077696c6c206361757365d420202020202060543a3a4f6e4e65774163636f756e743a3a6f6e5f6e65775f6163636f756e746020746f2062652063616c6c65642edc2020202d2052656d6f76696e6720656e6f7567682066756e64732066726f6d20616e206163636f756e742077696c6c20747269676765725901202020202060543a3a4475737452656d6f76616c3a3a6f6e5f756e62616c616e6365646020616e642060543a3a4f6e4672656542616c616e63655a65726f3a3a6f6e5f667265655f62616c616e63655f7a65726f602e49012020202d20607472616e736665725f6b6565705f616c6976656020776f726b73207468652073616d652077617920617320607472616e73666572602c206275742068617320616e206164646974696f6e616cf82020202020636865636b207468617420746865207472616e736665722077696c6c206e6f74206b696c6c20746865206f726967696e206163636f756e742e00302023203c2f7765696768743e2c7365745f62616c616e63650c0c77686f8c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f75726365206e65775f667265654c436f6d706163743c543a3a42616c616e63653e306e65775f72657365727665644c436f6d706163743c543a3a42616c616e63653e349420536574207468652062616c616e636573206f66206120676976656e206163636f756e742e00210120546869732077696c6c20616c74657220604672656542616c616e63656020616e642060526573657276656442616c616e63656020696e2073746f726167652e2069742077696c6c090120616c736f2064656372656173652074686520746f74616c2069737375616e6365206f66207468652073797374656d202860546f74616c49737375616e636560292e190120496620746865206e65772066726565206f722072657365727665642062616c616e63652069732062656c6f7720746865206578697374656e7469616c206465706f7369742ce82069742077696c6c20726573657420746865206163636f756e74206e6f6e636520286073797374656d3a3a4163636f756e744e6f6e636560292e00b420546865206469737061746368206f726967696e20666f7220746869732063616c6c2069732060726f6f74602e002c2023203c7765696768743e80202d20496e646570656e64656e74206f662074686520617267756d656e74732ec4202d20436f6e7461696e732061206c696d69746564206e756d626572206f6620726561647320616e64207772697465732e302023203c2f7765696768743e38666f7263655f7472616e736665720c18736f757263658c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f7572636510646573748c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f757263651476616c75654c436f6d706163743c543a3a42616c616e63653e0851012045786163746c7920617320607472616e73666572602c2065786365707420746865206f726967696e206d75737420626520726f6f7420616e642074686520736f75726365206163636f756e74206d61792062652c207370656369666965642e4c7472616e736665725f6b6565705f616c6976650810646573748c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f757263651476616c75654c436f6d706163743c543a3a42616c616e63653e1851012053616d6520617320746865205b607472616e73666572605d2063616c6c2c206275742077697468206120636865636b207468617420746865207472616e736665722077696c6c206e6f74206b696c6c2074686540206f726967696e206163636f756e742e00bc20393925206f66207468652074696d6520796f752077616e74205b607472616e73666572605d20696e73746561642e00c4205b607472616e73666572605d3a207374727563742e4d6f64756c652e68746d6c236d6574686f642e7472616e73666572010c284e65774163636f756e7408244163636f756e7449641c42616c616e6365046c2041206e6577206163636f756e742077617320637265617465642e345265617065644163636f756e7404244163636f756e744964045c20416e206163636f756e7420776173207265617065642e205472616e7366657210244163636f756e744964244163636f756e7449641c42616c616e63651c42616c616e636504b0205472616e7366657220737563636565646564202866726f6d2c20746f2c2076616c75652c2066656573292e0c484578697374656e7469616c4465706f73697428543a3a42616c616e63654000407a10f35a0000000000000000000004d420546865206d696e696d756d20616d6f756e7420726571756972656420746f206b65657020616e206163636f756e74206f70656e2e2c5472616e7366657246656528543a3a42616c616e6365400010a5d4e800000000000000000000000494205468652066656520726571756972656420746f206d616b652061207472616e736665722e2c4372656174696f6e46656528543a3a42616c616e6365400010a5d4e80000000000000000000000049c205468652066656520726571756972656420746f2063726561746520616e206163636f756e742e00485472616e73616374696f6e5061796d656e74012042616c616e63657304444e6578744665654d756c7469706c6965720100284d756c7469706c69657220000000000000000000000008485472616e73616374696f6e426173654665653042616c616e63654f663c543e400010a5d4e8000000000000000000000004dc205468652066656520746f206265207061696420666f72206d616b696e672061207472616e73616374696f6e3b2074686520626173652e485472616e73616374696f6e427974654665653042616c616e63654f663c543e4000e40b54020000000000000000000000040d01205468652066656520746f206265207061696420666f72206d616b696e672061207472616e73616374696f6e3b20746865207065722d6279746520706f7274696f6e2e001c5374616b696e67011c5374616b696e674c3856616c696461746f72436f756e7401000c753332100000000004a82054686520696465616c206e756d626572206f66207374616b696e67207061727469636970616e74732e544d696e696d756d56616c696461746f72436f756e7401000c7533321004000000044101204d696e696d756d206e756d626572206f66207374616b696e67207061727469636970616e7473206265666f726520656d657267656e637920636f6e646974696f6e732061726520696d706f7365642e34496e76756c6e657261626c65730100445665633c543a3a4163636f756e7449643e04000c590120416e792076616c696461746f72732074686174206d6179206e6576657220626520736c6173686564206f7220666f726369626c79206b69636b65642e20497427732061205665632073696e636520746865792772654d01206561737920746f20696e697469616c697a6520616e642074686520706572666f726d616e636520686974206973206d696e696d616c2028776520657870656374206e6f206d6f7265207468616e20666f7572ac20696e76756c6e657261626c65732920616e64207265737472696374656420746f20746573746e6574732e18426f6e64656400010130543a3a4163636f756e74496430543a3a4163636f756e744964000400040101204d61702066726f6d20616c6c206c6f636b65642022737461736822206163636f756e747320746f2074686520636f6e74726f6c6c6572206163636f756e742e184c656467657200010130543a3a4163636f756e744964a45374616b696e674c65646765723c543a3a4163636f756e7449642c2042616c616e63654f663c543e3e000400044501204d61702066726f6d20616c6c2028756e6c6f636b6564292022636f6e74726f6c6c657222206163636f756e747320746f2074686520696e666f20726567617264696e6720746865207374616b696e672e14506179656501010130543a3a4163636f756e7449644452657761726444657374696e6174696f6e00040004e42057686572652074686520726577617264207061796d656e742073686f756c64206265206d6164652e204b657965642062792073746173682e2856616c696461746f727301010130543a3a4163636f756e7449647056616c696461746f7250726566733c42616c616e63654f663c543e3e01040004450120546865206d61702066726f6d202877616e6e616265292076616c696461746f72207374617368206b657920746f2074686520707265666572656e636573206f6620746861742076616c696461746f722e284e6f6d696e61746f727301010130543a3a4163636f756e744964445665633c543a3a4163636f756e7449643e01040004650120546865206d61702066726f6d206e6f6d696e61746f72207374617368206b657920746f2074686520736574206f66207374617368206b657973206f6620616c6c2076616c696461746f727320746f206e6f6d696e6174652e1c5374616b65727301010130543a3a4163636f756e744964904578706f737572653c543a3a4163636f756e7449642c2042616c616e63654f663c543e3e000c000000104d01204e6f6d696e61746f727320666f72206120706172746963756c6172206163636f756e74207468617420697320696e20616374696f6e207269676874206e6f772e20596f752063616e277420697465726174651901207468726f7567682076616c696461746f727320686572652c2062757420796f752063616e2066696e64207468656d20696e207468652053657373696f6e206d6f64756c652e00902054686973206973206b6579656420627920746865207374617368206163636f756e742e3843757272656e74456c65637465640100445665633c543a3a4163636f756e7449643e040004fc205468652063757272656e746c7920656c65637465642076616c696461746f7220736574206b65796564206279207374617368206163636f756e742049442e2843757272656e74457261010020457261496e6465781000000000045c205468652063757272656e742065726120696e6465782e3c43757272656e74457261537461727401002c4d6f6d656e744f663c543e200000000000000000047820546865207374617274206f66207468652063757272656e74206572612e6c43757272656e74457261537461727453657373696f6e496e64657801003053657373696f6e496e646578100000000004d0205468652073657373696f6e20696e646578206174207768696368207468652063757272656e742065726120737461727465642e5843757272656e74457261506f696e74734561726e6564010024457261506f696e7473140000000000040d01205265776172647320666f72207468652063757272656e74206572612e205573696e6720696e6469636573206f662063757272656e7420656c6563746564207365742e24536c6f745374616b6501003042616c616e63654f663c543e40000000000000000000000000000000000c31012054686520616d6f756e74206f662062616c616e6365206163746976656c79206174207374616b6520666f7220656163682076616c696461746f7220736c6f742c2063757272656e746c792e00c02054686973206973207573656420746f20646572697665207265776172647320616e642070756e6973686d656e74732e20466f72636545726101001c466f7263696e670400041d01205472756520696620746865206e6578742073657373696f6e206368616e67652077696c6c2062652061206e657720657261207265676172646c657373206f6620696e6465782e4c536c6173685265776172644672616374696f6e01001c50657262696c6c10000000000cf8205468652070657263656e74616765206f662074686520736c617368207468617420697320646973747269627574656420746f207265706f72746572732e00e4205468652072657374206f662074686520736c61736865642076616c75652069732068616e646c6564206279207468652060536c617368602e28426f6e646564457261730100745665633c28457261496e6465782c2053657373696f6e496e646578293e04000425012041206d617070696e672066726f6d207374696c6c2d626f6e646564206572617320746f207468652066697273742073657373696f6e20696e646578206f662074686174206572612e3c457261536c6173684a6f75726e616c01010120457261496e646578c85665633c536c6173684a6f75726e616c456e7472793c543a3a4163636f756e7449642c2042616c616e63654f663c543e3e3e00040004bc20416c6c20736c617368657320746861742068617665206f6363757272656420696e206120676976656e206572612e013c10626f6e640c28636f6e74726f6c6c65728c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f757263651476616c756554436f6d706163743c42616c616e63654f663c543e3e1470617965654452657761726444657374696e6174696f6e3c65012054616b6520746865206f726967696e206163636f756e74206173206120737461736820616e64206c6f636b207570206076616c756560206f66206974732062616c616e63652e2060636f6e74726f6c6c6572602077696c6c8420626520746865206163636f756e74207468617420636f6e74726f6c732069742e003101206076616c756560206d757374206265206d6f7265207468616e2074686520606d696e696d756d5f62616c616e636560207370656369666965642062792060543a3a43757272656e6379602e00250120546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20627920746865207374617368206163636f756e742e002c2023203c7765696768743ed4202d20496e646570656e64656e74206f662074686520617267756d656e74732e204d6f64657261746520636f6d706c65786974792e20202d204f2831292e68202d20546872656520657874726120444220656e74726965732e006d01204e4f54453a2054776f206f66207468652073746f726167652077726974657320286053656c663a3a626f6e646564602c206053656c663a3a7061796565602920617265205f6e657665725f20636c65616e656420756e6c65737325012074686520606f726967696e602066616c6c732062656c6f77205f6578697374656e7469616c206465706f7369745f20616e6420676574732072656d6f76656420617320647573742e302023203c2f7765696768743e28626f6e645f657874726104386d61785f6164646974696f6e616c54436f6d706163743c42616c616e63654f663c543e3e3865012041646420736f6d6520657874726120616d6f756e742074686174206861766520617070656172656420696e207468652073746173682060667265655f62616c616e63656020696e746f207468652062616c616e63652075703420666f72207374616b696e672e00510120557365207468697320696620746865726520617265206164646974696f6e616c2066756e647320696e20796f7572207374617368206163636f756e74207468617420796f75207769736820746f20626f6e642e650120556e6c696b65205b60626f6e64605d206f72205b60756e626f6e64605d20746869732066756e6374696f6e20646f6573206e6f7420696d706f736520616e79206c696d69746174696f6e206f6e2074686520616d6f756e744c20746861742063616e2062652061646465642e00550120546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f206279207468652073746173682c206e6f742074686520636f6e74726f6c6c65722e002c2023203c7765696768743ee8202d20496e646570656e64656e74206f662074686520617267756d656e74732e20496e7369676e69666963616e7420636f6d706c65786974792e20202d204f2831292e40202d204f6e6520444220656e7472792e302023203c2f7765696768743e18756e626f6e64041476616c756554436f6d706163743c42616c616e63654f663c543e3e5c5501205363686564756c65206120706f7274696f6e206f662074686520737461736820746f20626520756e6c6f636b656420726561647920666f72207472616e73666572206f75742061667465722074686520626f6e64010120706572696f6420656e64732e2049662074686973206c656176657320616e20616d6f756e74206163746976656c7920626f6e646564206c657373207468616e250120543a3a43757272656e63793a3a6d696e696d756d5f62616c616e636528292c207468656e20697420697320696e6372656173656420746f207468652066756c6c20616d6f756e742e004901204f6e63652074686520756e6c6f636b20706572696f6420697320646f6e652c20796f752063616e2063616c6c206077697468647261775f756e626f6e6465646020746f2061637475616c6c79206d6f7665c0207468652066756e6473206f7574206f66206d616e6167656d656e7420726561647920666f72207472616e736665722e003d01204e6f206d6f7265207468616e2061206c696d69746564206e756d626572206f6620756e6c6f636b696e67206368756e6b73202873656520604d41585f554e4c4f434b494e475f4348554e4b5360293d012063616e20636f2d657869737473206174207468652073616d652074696d652e20496e207468617420636173652c205b6043616c6c3a3a77697468647261775f756e626f6e646564605d206e656564fc20746f2062652063616c6c656420666972737420746f2072656d6f766520736f6d65206f6620746865206368756e6b732028696620706f737369626c65292e00550120546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2062792074686520636f6e74726f6c6c65722c206e6f74207468652073746173682e00982053656520616c736f205b6043616c6c3a3a77697468647261775f756e626f6e646564605d2e002c2023203c7765696768743e4101202d20496e646570656e64656e74206f662074686520617267756d656e74732e204c696d697465642062757420706f74656e7469616c6c79206578706c6f697461626c6520636f6d706c65786974792e98202d20436f6e7461696e732061206c696d69746564206e756d626572206f662072656164732e6501202d20456163682063616c6c20287265717569726573207468652072656d61696e646572206f662074686520626f6e6465642062616c616e636520746f2062652061626f766520606d696e696d756d5f62616c616e63656029710120202077696c6c2063617573652061206e657720656e74727920746f20626520696e73657274656420696e746f206120766563746f722028604c65646765722e756e6c6f636b696e676029206b65707420696e2073746f726167652ea501202020546865206f6e6c792077617920746f20636c65616e207468652061666f72656d656e74696f6e65642073746f72616765206974656d20697320616c736f20757365722d636f6e74726f6c6c656420766961206077697468647261775f756e626f6e646564602e40202d204f6e6520444220656e7472792e28203c2f7765696768743e4477697468647261775f756e626f6e64656400402d012052656d6f766520616e7920756e6c6f636b6564206368756e6b732066726f6d207468652060756e6c6f636b696e67602071756575652066726f6d206f7572206d616e6167656d656e742e003501205468697320657373656e7469616c6c7920667265657320757020746861742062616c616e636520746f206265207573656420627920746865207374617368206163636f756e7420746f20646f4c2077686174657665722069742077616e74732e00550120546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2062792074686520636f6e74726f6c6c65722c206e6f74207468652073746173682e006c2053656520616c736f205b6043616c6c3a3a756e626f6e64605d2e002c2023203c7765696768743e5501202d20436f756c6420626520646570656e64656e74206f6e2074686520606f726967696e6020617267756d656e7420616e6420686f77206d7563682060756e6c6f636b696e6760206368756e6b732065786973742e45012020497420696d706c6965732060636f6e736f6c69646174655f756e6c6f636b656460207768696368206c6f6f7073206f76657220604c65646765722e756e6c6f636b696e67602c207768696368206973f42020696e6469726563746c7920757365722d636f6e74726f6c6c65642e20536565205b60756e626f6e64605d20666f72206d6f72652064657461696c2e7901202d20436f6e7461696e732061206c696d69746564206e756d626572206f662072656164732c20796574207468652073697a65206f6620776869636820636f756c64206265206c61726765206261736564206f6e20606c6564676572602ec8202d2057726974657320617265206c696d6974656420746f2074686520606f726967696e60206163636f756e74206b65792e302023203c2f7765696768743e2076616c6964617465041470726566737056616c696461746f7250726566733c42616c616e63654f663c543e3e2ce8204465636c617265207468652064657369726520746f2076616c696461746520666f7220746865206f726967696e20636f6e74726f6c6c65722e00dc20456666656374732077696c6c2062652066656c742061742074686520626567696e6e696e67206f6620746865206e657874206572612e00550120546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2062792074686520636f6e74726f6c6c65722c206e6f74207468652073746173682e002c2023203c7765696768743ee8202d20496e646570656e64656e74206f662074686520617267756d656e74732e20496e7369676e69666963616e7420636f6d706c65786974792e98202d20436f6e7461696e732061206c696d69746564206e756d626572206f662072656164732ec8202d2057726974657320617265206c696d6974656420746f2074686520606f726967696e60206163636f756e74206b65792e302023203c2f7765696768743e206e6f6d696e617465041c74617267657473a05665633c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f757263653e2c1101204465636c617265207468652064657369726520746f206e6f6d696e6174652060746172676574736020666f7220746865206f726967696e20636f6e74726f6c6c65722e00dc20456666656374732077696c6c2062652066656c742061742074686520626567696e6e696e67206f6620746865206e657874206572612e00550120546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2062792074686520636f6e74726f6c6c65722c206e6f74207468652073746173682e002c2023203c7765696768743e2501202d20546865207472616e73616374696f6e277320636f6d706c65786974792069732070726f706f7274696f6e616c20746f207468652073697a65206f66206074617267657473602c982077686963682069732063617070656420617420604d41585f4e4f4d494e4154494f4e53602ed8202d20426f74682074686520726561647320616e642077726974657320666f6c6c6f7720612073696d696c6172207061747465726e2e302023203c2f7765696768743e146368696c6c002cc8204465636c617265206e6f2064657369726520746f206569746865722076616c6964617465206f72206e6f6d696e6174652e00dc20456666656374732077696c6c2062652066656c742061742074686520626567696e6e696e67206f6620746865206e657874206572612e00550120546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2062792074686520636f6e74726f6c6c65722c206e6f74207468652073746173682e002c2023203c7765696768743ee8202d20496e646570656e64656e74206f662074686520617267756d656e74732e20496e7369676e69666963616e7420636f6d706c65786974792e54202d20436f6e7461696e73206f6e6520726561642ec8202d2057726974657320617265206c696d6974656420746f2074686520606f726967696e60206163636f756e74206b65792e302023203c2f7765696768743e247365745f7061796565041470617965654452657761726444657374696e6174696f6e2cb8202852652d2973657420746865207061796d656e742074617267657420666f72206120636f6e74726f6c6c65722e00dc20456666656374732077696c6c2062652066656c742061742074686520626567696e6e696e67206f6620746865206e657874206572612e00550120546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2062792074686520636f6e74726f6c6c65722c206e6f74207468652073746173682e002c2023203c7765696768743ee8202d20496e646570656e64656e74206f662074686520617267756d656e74732e20496e7369676e69666963616e7420636f6d706c65786974792e98202d20436f6e7461696e732061206c696d69746564206e756d626572206f662072656164732ec8202d2057726974657320617265206c696d6974656420746f2074686520606f726967696e60206163636f756e74206b65792e302023203c2f7765696768743e387365745f636f6e74726f6c6c65720428636f6e74726f6c6c65728c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f757263652c90202852652d297365742074686520636f6e74726f6c6c6572206f6620612073746173682e00dc20456666656374732077696c6c2062652066656c742061742074686520626567696e6e696e67206f6620746865206e657874206572612e00550120546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f206279207468652073746173682c206e6f742074686520636f6e74726f6c6c65722e002c2023203c7765696768743ee8202d20496e646570656e64656e74206f662074686520617267756d656e74732e20496e7369676e69666963616e7420636f6d706c65786974792e98202d20436f6e7461696e732061206c696d69746564206e756d626572206f662072656164732ec8202d2057726974657320617265206c696d6974656420746f2074686520606f726967696e60206163636f756e74206b65792e302023203c2f7765696768743e4c7365745f76616c696461746f725f636f756e74040c6e657730436f6d706163743c7533323e04802054686520696465616c206e756d626572206f662076616c696461746f72732e34666f7263655f6e6f5f657261730014b020466f72636520746865726520746f206265206e6f206e6577206572617320696e646566696e6974656c792e002c2023203c7765696768743e40202d204e6f20617267756d656e74732e302023203c2f7765696768743e34666f7263655f6e65775f65726100184d0120466f72636520746865726520746f2062652061206e6577206572612061742074686520656e64206f6620746865206e6578742073657373696f6e2e20416674657220746869732c2069742077696c6c206265a020726573657420746f206e6f726d616c20286e6f6e2d666f7263656429206265686176696f75722e002c2023203c7765696768743e40202d204e6f20617267756d656e74732e302023203c2f7765696768743e447365745f696e76756c6e657261626c6573042876616c696461746f7273445665633c543a3a4163636f756e7449643e04cc20536574207468652076616c696461746f72732077686f2063616e6e6f7420626520736c61736865642028696620616e79292e34666f7263655f756e7374616b650414737461736830543a3a4163636f756e744964040d0120466f72636520612063757272656e74207374616b657220746f206265636f6d6520636f6d706c6574656c7920756e7374616b65642c20696d6d6564696174656c792e50666f7263655f6e65775f6572615f616c776179730014050120466f72636520746865726520746f2062652061206e6577206572612061742074686520656e64206f662073657373696f6e7320696e646566696e6974656c792e002c2023203c7765696768743e50202d204f6e652073746f72616765207772697465302023203c2f7765696768743e010c18526577617264081c42616c616e63651c42616c616e636508510120416c6c2076616c696461746f72732068617665206265656e207265776172646564206279207468652066697273742062616c616e63653b20746865207365636f6e64206973207468652072656d61696e6465728c2066726f6d20746865206d6178696d756d20616d6f756e74206f66207265776172642e14536c61736808244163636f756e7449641c42616c616e6365042501204f6e652076616c696461746f722028616e6420697473206e6f6d696e61746f72732920686173206265656e20736c61736865642062792074686520676976656e20616d6f756e742e684f6c64536c617368696e675265706f7274446973636172646564043053657373696f6e496e646578081d0120416e206f6c6420736c617368696e67207265706f72742066726f6d2061207072696f72206572612077617320646973636172646564206265636175736520697420636f756c6448206e6f742062652070726f6365737365642e083853657373696f6e735065724572613053657373696f6e496e64657810060000000470204e756d626572206f662073657373696f6e7320706572206572612e3c426f6e64696e674475726174696f6e20457261496e64657810a002000004e4204e756d626572206f6620657261732074686174207374616b65642066756e6473206d7573742072656d61696e20626f6e64656420666f722e001c53657373696f6e011c53657373696f6e1c2856616c696461746f727301004c5665633c543a3a56616c696461746f7249643e0400047c205468652063757272656e7420736574206f662076616c696461746f72732e3043757272656e74496e64657801003053657373696f6e496e646578100000000004782043757272656e7420696e646578206f66207468652073657373696f6e2e345175657565644368616e676564010010626f6f6c040008390120547275652069662074686520756e6465726c79696e672065636f6e6f6d6963206964656e746974696573206f7220776569676874696e6720626568696e64207468652076616c696461746f7273a420686173206368616e67656420696e20746865207175657565642076616c696461746f72207365742e285175657565644b6579730100785665633c28543a3a56616c696461746f7249642c20543a3a4b657973293e0400083d012054686520717565756564206b65797320666f7220746865206e6578742073657373696f6e2e205768656e20746865206e6578742073657373696f6e20626567696e732c207468657365206b657973e02077696c6c206265207573656420746f2064657465726d696e65207468652076616c696461746f7227732073657373696f6e206b6579732e4844697361626c656456616c696461746f72730100205665633c7533323e04000c8020496e6469636573206f662064697361626c65642076616c696461746f72732e003501205468652073657420697320636c6561726564207768656e20606f6e5f73657373696f6e5f656e64696e67602072657475726e732061206e657720736574206f66206964656e7469746965732e204e6578744b6579730002041c5665633c75383e38543a3a56616c696461746f7249641c543a3a4b657973010400109c20546865206e6578742073657373696f6e206b65797320666f7220612076616c696461746f722e00590120546865206669727374206b657920697320616c77617973206044454455505f4b45595f5052454649586020746f206861766520616c6c20746865206461746120696e207468652073616d65206272616e6368206f6661012074686520747269652e20486176696e6720616c6c206461746120696e207468652073616d65206272616e63682073686f756c642070726576656e7420736c6f77696e6720646f776e206f7468657220717565726965732e204b65794f776e65720002041c5665633c75383e50284b65795479706549642c205665633c75383e2938543a3a56616c696461746f72496401040010250120546865206f776e6572206f662061206b65792e20546865207365636f6e64206b65792069732074686520604b657954797065496460202b2074686520656e636f646564206b65792e00590120546865206669727374206b657920697320616c77617973206044454455505f4b45595f5052454649586020746f206861766520616c6c20746865206461746120696e207468652073616d65206272616e6368206f6661012074686520747269652e20486176696e6720616c6c206461746120696e207468652073616d65206272616e63682073686f756c642070726576656e7420736c6f77696e6720646f776e206f7468657220717565726965732e0104207365745f6b65797308106b6579731c543a3a4b6579731470726f6f661c5665633c75383e28e42053657473207468652073657373696f6e206b6579287329206f66207468652066756e6374696f6e2063616c6c657220746f20606b6579602e210120416c6c6f777320616e206163636f756e7420746f20736574206974732073657373696f6e206b6579207072696f7220746f206265636f6d696e6720612076616c696461746f722ec4205468697320646f65736e27742074616b652065666665637420756e74696c20746865206e6578742073657373696f6e2e00d420546865206469737061746368206f726967696e206f6620746869732066756e6374696f6e206d757374206265207369676e65642e002c2023203c7765696768743e88202d204f286c6f67206e2920696e206e756d626572206f66206163636f756e74732e58202d204f6e6520657874726120444220656e7472792e302023203c2f7765696768743e0104284e657753657373696f6e043053657373696f6e496e646578085501204e65772073657373696f6e206861732068617070656e65642e204e6f746520746861742074686520617267756d656e74206973207468652073657373696f6e20696e6465782c206e6f742074686520626c6f636b88206e756d626572206173207468652074797065206d6967687420737567676573742e044044454455505f4b45595f50524546495814265b75385d38343a73657373696f6e3a6b6579730865012055736564206173206669727374206b657920666f7220604e6578744b6579736020616e6420604b65794f776e65726020746f2070757420616c6c20746865206461746120696e746f207468652073616d65206272616e636834206f662074686520747269652e002444656d6f6372616379012444656d6f63726163793c3c5075626c696350726f70436f756e7401002450726f70496e646578100000000004f420546865206e756d626572206f6620287075626c6963292070726f706f73616c7320746861742068617665206265656e206d61646520736f206661722e2c5075626c696350726f70730100ac5665633c2850726f70496e6465782c20543a3a50726f706f73616c2c20543a3a4163636f756e744964293e0400048020546865207075626c69632070726f706f73616c732e20556e736f727465642e244465706f7369744f660001012450726f70496e646578842842616c616e63654f663c543e2c205665633c543a3a4163636f756e7449643e2900040004842054686f73652077686f2068617665206c6f636b65642061206465706f7369742e3c5265666572656e64756d436f756e7401003c5265666572656e64756d496e646578100000000004310120546865206e6578742066726565207265666572656e64756d20696e6465782c20616b6120746865206e756d626572206f66207265666572656e6461207374617274656420736f206661722e244e65787454616c6c7901003c5265666572656e64756d496e646578100000000004c820546865206e657874207265666572656e64756d20696e64657820746861742073686f756c642062652074616c6c6965642e405265666572656e64756d496e666f4f660001013c5265666572656e64756d496e646578b4285265666572656e64756d496e666f3c543a3a426c6f636b4e756d6265722c20543a3a50726f706f73616c3e2900040004b420496e666f726d6174696f6e20636f6e6365726e696e6720616e7920676976656e207265666572656e64756d2e344469737061746368517565756501010138543a3a426c6f636b4e756d626572ac5665633c4f7074696f6e3c28543a3a50726f706f73616c2c205265666572656e64756d496e646578293e3e00040004c0205175657565206f66207375636365737366756c207265666572656e646120746f20626520646973706174636865642e24566f74657273466f720101013c5265666572656e64756d496e646578445665633c543a3a4163636f756e7449643e00040004a4204765742074686520766f7465727320666f72207468652063757272656e742070726f706f73616c2e18566f74654f660101017c285265666572656e64756d496e6465782c20543a3a4163636f756e7449642910566f7465000400106101204765742074686520766f746520696e206120676976656e207265666572656e64756d206f66206120706172746963756c617220766f7465722e2054686520726573756c74206973206d65616e696e6766756c206f6e6c794d012069662060766f746572735f666f726020696e636c756465732074686520766f746572207768656e2063616c6c6564207769746820746865207265666572656e64756d2028796f75276c6c20676574207468655d012064656661756c742060566f7465602076616c7565206f7468657277697365292e20496620796f7520646f6e27742077616e7420746f20636865636b2060766f746572735f666f72602c207468656e20796f752063616ef420616c736f20636865636b20666f722073696d706c65206578697374656e636520776974682060566f74654f663a3a657869737473602066697273742e1450726f787900010130543a3a4163636f756e74496430543a3a4163636f756e7449640004000831012057686f2069732061626c6520746f20766f746520666f722077686f6d2e2056616c7565206973207468652066756e642d686f6c64696e67206163636f756e742c206b6579206973207468658820766f74652d7472616e73616374696f6e2d73656e64696e67206163636f756e742e2c44656c65676174696f6e7301010130543a3a4163636f756e7449646828543a3a4163636f756e7449642c20436f6e76696374696f6e2901840000000000000000000000000000000000000000000000000000000000000000000441012047657420746865206163636f756e742028616e64206c6f636b20706572696f64732920746f20776869636820616e6f74686572206163636f756e742069732064656c65676174696e6720766f74652e544c6173745461626c656457617345787465726e616c010010626f6f6c0400085901205472756520696620746865206c617374207265666572656e64756d207461626c656420776173207375626d69747465642065787465726e616c6c792e2046616c7365206966206974207761732061207075626c6963282070726f706f73616c2e304e65787445787465726e616c00007028543a3a50726f706f73616c2c20566f74655468726573686f6c6429040010590120546865207265666572656e64756d20746f206265207461626c6564207768656e6576657220697420776f756c642062652076616c696420746f207461626c6520616e2065787465726e616c2070726f706f73616c2e550120546869732068617070656e73207768656e2061207265666572656e64756d206e6565647320746f206265207461626c656420616e64206f6e65206f662074776f20636f6e646974696f6e7320617265206d65743aa4202d20604c6173745461626c656457617345787465726e616c60206973206066616c7365603b206f7268202d20605075626c696350726f70736020697320656d7074792e24426c61636b6c6973740001011c543a3a486173688c28543a3a426c6f636b4e756d6265722c205665633c543a3a4163636f756e7449643e290004000851012041207265636f7264206f662077686f207665746f656420776861742e204d6170732070726f706f73616c206861736820746f206120706f737369626c65206578697374656e7420626c6f636b206e756d626572e82028756e74696c207768656e206974206d6179206e6f742062652072657375626d69747465642920616e642077686f207665746f65642069742e3443616e63656c6c6174696f6e730101011c543a3a4861736810626f6f6c000400042901205265636f7264206f6620616c6c2070726f706f73616c7320746861742068617665206265656e207375626a65637420746f20656d657267656e63792063616e63656c6c6174696f6e2e01441c70726f706f7365082070726f706f73616c40426f783c543a3a50726f706f73616c3e1476616c756554436f6d706163743c42616c616e63654f663c543e3e18a02050726f706f736520612073656e73697469766520616374696f6e20746f2062652074616b656e2e002c2023203c7765696768743e20202d204f2831292e80202d2054776f204442206368616e6765732c206f6e6520444220656e7472792e302023203c2f7765696768743e187365636f6e64042070726f706f73616c48436f6d706163743c50726f70496e6465783e18a02050726f706f736520612073656e73697469766520616374696f6e20746f2062652074616b656e2e002c2023203c7765696768743e20202d204f2831292e40202d204f6e6520444220656e7472792e302023203c2f7765696768743e10766f746508247265665f696e64657860436f6d706163743c5265666572656e64756d496e6465783e10766f746510566f74651c350120566f746520696e2061207265666572656e64756d2e2049662060766f74652e69735f6179652829602c2074686520766f746520697320746f20656e616374207468652070726f706f73616c3bbc206f7468657277697365206974206973206120766f746520746f206b65657020746865207374617475732071756f2e002c2023203c7765696768743e20202d204f2831292e7c202d204f6e65204442206368616e67652c206f6e6520444220656e7472792e302023203c2f7765696768743e2870726f78795f766f746508247265665f696e64657860436f6d706163743c5265666572656e64756d496e6465783e10766f746510566f74651c510120566f746520696e2061207265666572656e64756d206f6e20626568616c66206f6620612073746173682e2049662060766f74652e69735f6179652829602c2074686520766f746520697320746f20656e616374f8207468652070726f706f73616c3b20206f7468657277697365206974206973206120766f746520746f206b65657020746865207374617475732071756f2e002c2023203c7765696768743e20202d204f2831292e7c202d204f6e65204442206368616e67652c206f6e6520444220656e7472792e302023203c2f7765696768743e40656d657267656e63795f63616e63656c04247265665f696e6465783c5265666572656e64756d496e646578085101205363686564756c6520616e20656d657267656e63792063616e63656c6c6174696f6e206f662061207265666572656e64756d2e2043616e6e6f742068617070656e20747769636520746f207468652073616d6530207265666572656e64756d2e4065787465726e616c5f70726f706f7365042070726f706f73616c40426f783c543a3a50726f706f73616c3e083101205363686564756c652061207265666572656e64756d20746f206265207461626c6564206f6e6365206974206973206c6567616c20746f207363686564756c6520616e2065787465726e616c30207265666572656e64756d2e6465787465726e616c5f70726f706f73655f6d616a6f72697479042070726f706f73616c40426f783c543a3a50726f706f73616c3e145901205363686564756c652061206d616a6f726974792d63617272696573207265666572656e64756d20746f206265207461626c6564206e657874206f6e6365206974206973206c6567616c20746f207363686564756c656020616e2065787465726e616c207265666572656e64756d2e004d0120556e6c696b65206065787465726e616c5f70726f706f7365602c20626c61636b6c697374696e6720686173206e6f20656666656374206f6e207468697320616e64206974206d6179207265706c61636520619c207072652d7363686564756c6564206065787465726e616c5f70726f706f7365602063616c6c2e6065787465726e616c5f70726f706f73655f64656661756c74042070726f706f73616c40426f783c543a3a50726f706f73616c3e144901205363686564756c652061206e656761746976652d7475726e6f75742d62696173207265666572656e64756d20746f206265207461626c6564206e657874206f6e6365206974206973206c6567616c20746f84207363686564756c6520616e2065787465726e616c207265666572656e64756d2e004d0120556e6c696b65206065787465726e616c5f70726f706f7365602c20626c61636b6c697374696e6720686173206e6f20656666656374206f6e207468697320616e64206974206d6179207265706c61636520619c207072652d7363686564756c6564206065787465726e616c5f70726f706f7365602063616c6c2e28666173745f747261636b0c3470726f706f73616c5f686173681c543a3a4861736834766f74696e675f706572696f6438543a3a426c6f636b4e756d6265721464656c617938543a3a426c6f636b4e756d626572245101205363686564756c65207468652063757272656e746c792065787465726e616c6c792d70726f706f736564206d616a6f726974792d63617272696573207265666572656e64756d20746f206265207461626c6564650120696d6d6564696174656c792e204966207468657265206973206e6f2065787465726e616c6c792d70726f706f736564207265666572656e64756d2063757272656e746c792c206f72206966207468657265206973206f6e65ec20627574206974206973206e6f742061206d616a6f726974792d63617272696573207265666572656e64756d207468656e206974206661696c732e00f8202d206070726f706f73616c5f68617368603a205468652068617368206f66207468652063757272656e742065787465726e616c2070726f706f73616c2e6101202d2060766f74696e675f706572696f64603a2054686520706572696f64207468617420697320616c6c6f77656420666f7220766f74696e67206f6e20746869732070726f706f73616c2e20496e6372656173656420746f9820202060456d657267656e6379566f74696e67506572696f646020696620746f6f206c6f772e5501202d206064656c6179603a20546865206e756d626572206f6620626c6f636b20616674657220766f74696e672068617320656e64656420696e20617070726f76616c20616e6420746869732073686f756c64206265bc202020656e61637465642e205468697320646f65736e277420686176652061206d696e696d756d20616d6f756e742e347665746f5f65787465726e616c043470726f706f73616c5f686173681c543a3a4861736804bc205665746f20616e6420626c61636b6c697374207468652065787465726e616c2070726f706f73616c20686173682e4463616e63656c5f7265666572656e64756d04247265665f696e64657860436f6d706163743c5265666572656e64756d496e6465783e04542052656d6f76652061207265666572656e64756d2e3463616e63656c5f7175657565640c107768656e5c436f6d706163743c543a3a426c6f636b4e756d6265723e14776869636830436f6d706163743c7533323e107768617460436f6d706163743c5265666572656e64756d496e6465783e04a02043616e63656c20612070726f706f73616c2071756575656420666f7220656e6163746d656e742e247365745f70726f7879041470726f787930543a3a4163636f756e7449641498205370656369667920612070726f78792e2043616c6c6564206279207468652073746173682e002c2023203c7765696768743e58202d204f6e6520657874726120444220656e7472792e302023203c2f7765696768743e3072657369676e5f70726f787900149820436c656172207468652070726f78792e2043616c6c6564206279207468652070726f78792e002c2023203c7765696768743e40202d204f6e6520444220636c6561722e302023203c2f7765696768743e3072656d6f76655f70726f7879041470726f787930543a3a4163636f756e744964149820436c656172207468652070726f78792e2043616c6c6564206279207468652073746173682e002c2023203c7765696768743e40202d204f6e6520444220636c6561722e302023203c2f7765696768743e2064656c65676174650808746f30543a3a4163636f756e74496428636f6e76696374696f6e28436f6e76696374696f6e143c2044656c656761746520766f74652e002c2023203c7765696768743e58202d204f6e6520657874726120444220656e7472792e302023203c2f7765696768743e28756e64656c656761746500144420556e64656c656761746520766f74652e002c2023203c7765696768743e20202d204f2831292e302023203c2f7765696768743e012c2050726f706f736564082450726f70496e6465781c42616c616e636500185461626c65640c2450726f70496e6465781c42616c616e6365385665633c4163636f756e7449643e003845787465726e616c5461626c656400001c53746172746564083c5265666572656e64756d496e64657834566f74655468726573686f6c640018506173736564043c5265666572656e64756d496e64657800244e6f74506173736564043c5265666572656e64756d496e646578002443616e63656c6c6564043c5265666572656e64756d496e64657800204578656375746564083c5265666572656e64756d496e64657810626f6f6c002444656c65676174656408244163636f756e744964244163636f756e744964002c556e64656c65676174656404244163636f756e74496400185665746f65640c244163636f756e74496410486173682c426c6f636b4e756d62657200183c456e6163746d656e74506572696f6438543a3a426c6f636b4e756d62657210002f0d0014710120546865206d696e696d756d20706572696f64206f66206c6f636b696e6720616e642074686520706572696f64206265747765656e20612070726f706f73616c206265696e6720617070726f76656420616e6420656e61637465642e0031012049742073686f756c642067656e6572616c6c792062652061206c6974746c65206d6f7265207468616e2074686520756e7374616b6520706572696f6420746f20656e737572652074686174690120766f74696e67207374616b657273206861766520616e206f70706f7274756e69747920746f2072656d6f7665207468656d73656c7665732066726f6d207468652073797374656d20696e2074686520636173652077686572659c207468657920617265206f6e20746865206c6f73696e672073696465206f66206120766f74652e304c61756e6368506572696f6438543a3a426c6f636b4e756d62657210004e0c0004e420486f77206f6674656e2028696e20626c6f636b7329206e6577207075626c6963207265666572656e646120617265206c61756e636865642e30566f74696e67506572696f6438543a3a426c6f636b4e756d62657210004e0c0004b820486f77206f6674656e2028696e20626c6f636b732920746f20636865636b20666f72206e657720766f7465732e384d696e696d756d4465706f7369743042616c616e63654f663c543e400000c16ff2862300000000000000000004350120546865206d696e696d756d20616d6f756e7420746f20626520757365642061732061206465706f73697420666f722061207075626c6963207265666572656e64756d2070726f706f73616c2e54456d657267656e6379566f74696e67506572696f6438543a3a426c6f636b4e756d626572108051010004ec204d696e696d756d20766f74696e6720706572696f6420616c6c6f77656420666f7220616e20656d657267656e6379207265666572656e64756d2e34436f6f6c6f6666506572696f6438543a3a426c6f636b4e756d62657210004e0c0004610120506572696f6420696e20626c6f636b7320776865726520616e2065787465726e616c2070726f706f73616c206d6179206e6f742062652072652d7375626d6974746564206166746572206265696e67207665746f65642e001c436f756e63696c014c496e7374616e636531436f6c6c656374697665142450726f706f73616c730100305665633c543a3a486173683e040004902054686520686173686573206f6620746865206163746976652070726f706f73616c732e2850726f706f73616c4f660001011c543a3a48617368643c542061732054726169743c493e3e3a3a50726f706f73616c00040004cc2041637475616c2070726f706f73616c20666f72206120676976656e20686173682c20696620697427732063757272656e742e18566f74696e670001011c543a3a486173684c566f7465733c543a3a4163636f756e7449643e00040004b420566f746573206f6e206120676976656e2070726f706f73616c2c206966206974206973206f6e676f696e672e3450726f706f73616c436f756e7401000c753332100000000004482050726f706f73616c7320736f206661722e1c4d656d626572730100445665633c543a3a4163636f756e7449643e0400043901205468652063757272656e74206d656d62657273206f662074686520636f6c6c6563746976652e20546869732069732073746f72656420736f7274656420286a7573742062792076616c7565292e01102c7365745f6d656d62657273042c6e65775f6d656d62657273445665633c543a3a4163636f756e7449643e105101205365742074686520636f6c6c6563746976652773206d656d62657273686970206d616e75616c6c7920746f20606e65775f6d656d62657273602e204265206e69636520746f2074686520636861696e20616e645c2070726f76696465206974207072652d736f727465642e005820526571756972657320726f6f74206f726967696e2e1c65786563757465042070726f706f73616c78426f783c3c542061732054726169743c493e3e3a3a50726f706f73616c3e0cf420446973706174636820612070726f706f73616c2066726f6d2061206d656d626572207573696e672074686520604d656d62657260206f726967696e2e00ac204f726967696e206d7573742062652061206d656d626572206f662074686520636f6c6c6563746976652e1c70726f706f736508247468726573686f6c6450436f6d706163743c4d656d626572436f756e743e2070726f706f73616c78426f783c3c542061732054726169743c493e3e3a3a50726f706f73616c3e102c2023203c7765696768743e90202d20426f756e6465642073746f7261676520726561647320616e64207772697465732eb8202d20417267756d656e7420607468726573686f6c6460206861732062656172696e67206f6e207765696768742e302023203c2f7765696768743e10766f74650c2070726f706f73616c1c543a3a4861736814696e64657858436f6d706163743c50726f706f73616c496e6465783e1c617070726f766510626f6f6c102c2023203c7765696768743e8c202d20426f756e6465642073746f72616765207265616420616e64207772697465732e5501202d2057696c6c20626520736c696768746c792068656176696572206966207468652070726f706f73616c20697320617070726f766564202f20646973617070726f7665642061667465722074686520766f74652e302023203c2f7765696768743e01182050726f706f73656410244163636f756e7449643450726f706f73616c496e64657810486173682c4d656d626572436f756e74084d012041206d6f74696f6e2028676976656e20686173682920686173206265656e2070726f706f7365642028627920676976656e206163636f756e742920776974682061207468726573686f6c642028676976656e4020604d656d626572436f756e7460292e14566f74656414244163636f756e744964104861736810626f6f6c2c4d656d626572436f756e742c4d656d626572436f756e740809012041206d6f74696f6e2028676976656e20686173682920686173206265656e20766f746564206f6e20627920676976656e206163636f756e742c206c656176696e67190120612074616c6c79202879657320766f74657320616e64206e6f20766f74657320676976656e20726573706563746976656c7920617320604d656d626572436f756e7460292e20417070726f76656404104861736804c42041206d6f74696f6e2077617320617070726f76656420627920746865207265717569726564207468726573686f6c642e2c446973617070726f76656404104861736804d42041206d6f74696f6e20776173206e6f7420617070726f76656420627920746865207265717569726564207468726573686f6c642e20457865637574656408104861736810626f6f6c0405012041206d6f74696f6e207761732065786563757465643b2060626f6f6c6020697320747275652069662072657475726e656420776974686f7574206572726f722e384d656d626572457865637574656408104861736810626f6f6c042d0120412073696e676c65206d656d6265722064696420736f6d6520616374696f6e3b2060626f6f6c6020697320747275652069662072657475726e656420776974686f7574206572726f722e000048546563686e6963616c436f6d6d6974746565014c496e7374616e636532436f6c6c656374697665142450726f706f73616c730100305665633c543a3a486173683e040004902054686520686173686573206f6620746865206163746976652070726f706f73616c732e2850726f706f73616c4f660001011c543a3a48617368643c542061732054726169743c493e3e3a3a50726f706f73616c00040004cc2041637475616c2070726f706f73616c20666f72206120676976656e20686173682c20696620697427732063757272656e742e18566f74696e670001011c543a3a486173684c566f7465733c543a3a4163636f756e7449643e00040004b420566f746573206f6e206120676976656e2070726f706f73616c2c206966206974206973206f6e676f696e672e3450726f706f73616c436f756e7401000c753332100000000004482050726f706f73616c7320736f206661722e1c4d656d626572730100445665633c543a3a4163636f756e7449643e0400043901205468652063757272656e74206d656d62657273206f662074686520636f6c6c6563746976652e20546869732069732073746f72656420736f7274656420286a7573742062792076616c7565292e01102c7365745f6d656d62657273042c6e65775f6d656d62657273445665633c543a3a4163636f756e7449643e105101205365742074686520636f6c6c6563746976652773206d656d62657273686970206d616e75616c6c7920746f20606e65775f6d656d62657273602e204265206e69636520746f2074686520636861696e20616e645c2070726f76696465206974207072652d736f727465642e005820526571756972657320726f6f74206f726967696e2e1c65786563757465042070726f706f73616c78426f783c3c542061732054726169743c493e3e3a3a50726f706f73616c3e0cf420446973706174636820612070726f706f73616c2066726f6d2061206d656d626572207573696e672074686520604d656d62657260206f726967696e2e00ac204f726967696e206d7573742062652061206d656d626572206f662074686520636f6c6c6563746976652e1c70726f706f736508247468726573686f6c6450436f6d706163743c4d656d626572436f756e743e2070726f706f73616c78426f783c3c542061732054726169743c493e3e3a3a50726f706f73616c3e102c2023203c7765696768743e90202d20426f756e6465642073746f7261676520726561647320616e64207772697465732eb8202d20417267756d656e7420607468726573686f6c6460206861732062656172696e67206f6e207765696768742e302023203c2f7765696768743e10766f74650c2070726f706f73616c1c543a3a4861736814696e64657858436f6d706163743c50726f706f73616c496e6465783e1c617070726f766510626f6f6c102c2023203c7765696768743e8c202d20426f756e6465642073746f72616765207265616420616e64207772697465732e5501202d2057696c6c20626520736c696768746c792068656176696572206966207468652070726f706f73616c20697320617070726f766564202f20646973617070726f7665642061667465722074686520766f74652e302023203c2f7765696768743e01182050726f706f73656410244163636f756e7449643450726f706f73616c496e64657810486173682c4d656d626572436f756e74084d012041206d6f74696f6e2028676976656e20686173682920686173206265656e2070726f706f7365642028627920676976656e206163636f756e742920776974682061207468726573686f6c642028676976656e4020604d656d626572436f756e7460292e14566f74656414244163636f756e744964104861736810626f6f6c2c4d656d626572436f756e742c4d656d626572436f756e740809012041206d6f74696f6e2028676976656e20686173682920686173206265656e20766f746564206f6e20627920676976656e206163636f756e742c206c656176696e67190120612074616c6c79202879657320766f74657320616e64206e6f20766f74657320676976656e20726573706563746976656c7920617320604d656d626572436f756e7460292e20417070726f76656404104861736804c42041206d6f74696f6e2077617320617070726f76656420627920746865207265717569726564207468726573686f6c642e2c446973617070726f76656404104861736804d42041206d6f74696f6e20776173206e6f7420617070726f76656420627920746865207265717569726564207468726573686f6c642e20457865637574656408104861736810626f6f6c0405012041206d6f74696f6e207761732065786563757465643b2060626f6f6c6020697320747275652069662072657475726e656420776974686f7574206572726f722e384d656d626572457865637574656408104861736810626f6f6c042d0120412073696e676c65206d656d6265722064696420736f6d6520616374696f6e3b2060626f6f6c6020697320747275652069662072657475726e656420776974686f7574206572726f722e000024456c656374696f6e73014050687261676d656e456c656374696f6e181c4d656d626572730100845665633c28543a3a4163636f756e7449642c2042616c616e63654f663c543e293e040004f0205468652063757272656e7420656c6563746564206d656d626572736869702e20536f72746564206261736564206f6e206163636f756e742069642e2452756e6e65727355700100845665633c28543a3a4163636f756e7449642c2042616c616e63654f663c543e293e0400044901205468652063757272656e742072756e6e6572735f75702e20536f72746564206261736564206f6e206c6f7720746f2068696768206d657269742028776f72736520746f20626573742072756e6e6572292e38456c656374696f6e526f756e647301000c75333210000000000441012054686520746f74616c206e756d626572206f6620766f746520726f756e6473207468617420686176652068617070656e65642c206578636c7564696e6720746865207570636f6d696e67206f6e652e1c566f7465734f6601010130543a3a4163636f756e744964445665633c543a3a4163636f756e7449643e01040004010120566f746573206f66206120706172746963756c617220766f7465722c20776974682074686520726f756e6420696e646578206f662074686520766f7465732e1c5374616b654f6601010130543a3a4163636f756e7449643042616c616e63654f663c543e0040000000000000000000000000000000000464204c6f636b6564207374616b65206f66206120766f7465722e2843616e646964617465730100445665633c543a3a4163636f756e7449643e0400086501205468652070726573656e742063616e646964617465206c6973742e20536f72746564206261736564206f6e206163636f756e742069642e20412063757272656e74206d656d6265722063616e206e6576657220656e7465720101207468697320766563746f7220616e6420697320616c7761797320696d706c696369746c7920617373756d656420746f20626520612063616e6469646174652e011810766f74650814766f746573445665633c543a3a4163636f756e7449643e1476616c756554436f6d706163743c42616c616e63654f663c543e3e3c050120566f746520666f72206120736574206f662063616e6469646174657320666f7220746865207570636f6d696e6720726f756e64206f6620656c656374696f6e2e0050205468652060766f746573602073686f756c643a482020202d206e6f7420626520656d7074792eac2020202d206265206c657373207468616e20746865206e756d626572206f662063616e646964617465732e005d012055706f6e20766f74696e672c206076616c75656020756e697473206f66206077686f6027732062616c616e6365206973206c6f636b656420616e64206120626f6e6420616d6f756e742069732072657365727665642e5d012049742069732074686520726573706f6e736962696c697479206f66207468652063616c6c657220746f206e6f7420706c61636520616c6c206f662074686569722062616c616e636520696e746f20746865206c6f636ba020616e64206b65657020736f6d6520666f722066757274686572207472616e73616374696f6e732e002c2023203c7765696768743e2c2023232323205374617465302052656164733a204f283129c8205772697465733a204f28562920676976656e2060566020766f7465732e205620697320626f756e6465642062792031362e302023203c2f7765696768743e3072656d6f76655f766f746572001c21012052656d6f766520606f726967696e60206173206120766f7465722e20546869732072656d6f76657320746865206c6f636b20616e642072657475726e732074686520626f6e642e002c2023203c7765696768743e2c2023232323205374617465302052656164733a204f28312934205772697465733a204f283129302023203c2f7765696768743e507265706f72745f646566756e63745f766f74657204187461726765748c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f75726365345d01205265706f727420607461726765746020666f72206265696e6720616e20646566756e637420766f7465722e20496e2063617365206f6620612076616c6964207265706f72742c20746865207265706f727465722069735d012072657761726465642062792074686520626f6e6420616d6f756e74206f662060746172676574602e204f74686572776973652c20746865207265706f7274657220697473656c662069732072656d6f76656420616e645c20746865697220626f6e6420697320736c61736865642e0088204120646566756e637420766f74657220697320646566696e656420746f2062653a4d012020202d206120766f7465722077686f73652063757272656e74207375626d697474656420766f7465732061726520616c6c20696e76616c69642e20692e652e20616c6c206f66207468656d20617265206e6fb420202020206c6f6e67657220612063616e646964617465206e6f7220616e20616374697665206d656d6265722e002c2023203c7765696768743e2c202323232320537461746515012052656164733a204f284e4c6f674d2920676976656e204d2063757272656e742063616e6469646174657320616e64204e20766f74657320666f722060746172676574602e34205772697465733a204f283129302023203c2f7765696768743e407375626d69745f63616e646964616379003478205375626d6974206f6e6573656c6620666f722063616e6469646163792e006420412063616e6469646174652077696c6c206569746865723aec2020202d204c6f73652061742074686520656e64206f6620746865207465726d20616e6420666f7266656974207468656972206465706f7369742e2d012020202d2057696e20616e64206265636f6d652061206d656d6265722e204d656d626572732077696c6c206576656e7475616c6c7920676574207468656972207374617368206261636b2e55012020202d204265636f6d6520612072756e6e65722d75702e2052756e6e6572732d75707320617265207265736572766564206d656d6265727320696e2063617365206f6e65206765747320666f72636566756c6c7934202020202072656d6f7665642e002c2023203c7765696768743e2c20232323232053746174658c2052656164733a204f284c6f674e2920476976656e204e2063616e646964617465732e34205772697465733a204f283129302023203c2f7765696768743e4872656e6f756e63655f63616e646964616379002451012052656e6f756e6365206f6e65277320696e74656e74696f6e20746f20626520612063616e64696461746520666f7220746865206e65787420656c656374696f6e20726f756e642e203320706f74656e7469616c40206f7574636f6d65732065786973743a4101202d20606f726967696e6020697320612063616e64696461746520616e64206e6f7420656c656374656420696e20616e79207365742e20496e207468697320636173652c2074686520626f6e64206973f4202020756e72657365727665642c2072657475726e656420616e64206f726967696e2069732072656d6f76656420617320612063616e6469646174652e5901202d20606f726967696e6020697320612063757272656e742072756e6e65722075702e20496e207468697320636173652c2074686520626f6e6420697320756e72657365727665642c2072657475726e656420616e64842020206f726967696e2069732072656d6f76656420617320612072756e6e65722e4d01202d20606f726967696e6020697320612063757272656e74206d656d6265722e20496e207468697320636173652c2074686520626f6e6420697320756e726573657276656420616e64206f726967696e206973590120202072656d6f7665642061732061206d656d6265722c20636f6e73657175656e746c79206e6f74206265696e6720612063616e64696461746520666f7220746865206e65787420726f756e6420616e796d6f72652e650120202053696d696c617220746f205b6072656d6f76655f766f746572605d2c206966207265706c6163656d656e742072756e6e657273206578697374732c20746865792061726520696d6d6564696174656c7920757365642e3472656d6f76655f6d656d626572040c77686f8c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f75726365345d012052656d6f7665206120706172746963756c6172206d656d6265722066726f6d20746865207365742e20546869732069732065666665637469766520696d6d6564696174656c7920616e642074686520626f6e64206f668020746865206f7574676f696e67206d656d62657220697320736c61736865642e00590120496620612072756e6e65722d757020697320617661696c61626c652c207468656e2074686520626573742072756e6e65722d75702077696c6c2062652072656d6f76656420616e64207265706c6163657320746865f4206f7574676f696e67206d656d6265722e204f74686572776973652c2061206e65772070687261676d656e20726f756e6420697320737461727465642e004501204e6f74652074686174207468697320646f6573206e6f7420616666656374207468652064657369676e6174656420626c6f636b206e756d626572206f6620746865206e65787420656c656374696f6e2e002c2023203c7765696768743e2c2023232323205374617465582052656164733a204f28646f5f70687261676d656e295c205772697465733a204f28646f5f70687261676d656e29302023203c2f7765696768743e01141c4e65775465726d04645665633c284163636f756e7449642c2042616c616e6365293e0855012041206e6577207465726d2077697468206e6577206d656d626572732e205468697320696e64696361746573207468617420656e6f7567682063616e6469646174657320657869737465642c206e6f742074686174450120656e6f756768206861766520686173206265656e20656c65637465642e2054686520696e6e65722076616c7565206d757374206265206578616d696e656420666f72207468697320707572706f73652e24456d7074795465726d0004d8204e6f20286f72206e6f7420656e6f756768292063616e64696461746573206578697374656420666f72207468697320726f756e642e304d656d6265724b69636b656404244163636f756e7449640845012041206d656d62657220686173206265656e2072656d6f7665642e20546869732073686f756c6420616c7761797320626520666f6c6c6f7765642062792065697468657220604e65775465726d60206f74342060456d7074795465726d602e3c4d656d62657252656e6f756e63656404244163636f756e74496404a02041206d656d626572206861732072656e6f756e6365642074686569722063616e6469646163792e34566f7465725265706f727465640c244163636f756e744964244163636f756e74496410626f6f6c086101204120766f7465722028666972737420656c656d656e742920776173207265706f72746564202862797420746865207365636f6e6420656c656d656e742920776974682074686520746865207265706f7274206265696e678c207375636365737366756c206f72206e6f742028746869726420656c656d656e74292e143443616e646964616379426f6e643042616c616e63654f663c543e400080c6a47e8d030000000000000000000028566f74696e67426f6e643042616c616e63654f663c543e4000407a10f35a000000000000000000000038446573697265644d656d626572730c753332100d00000000404465736972656452756e6e65727355700c753332100700000000305465726d4475726174696f6e38543a3a426c6f636b4e756d626572108013030000004c546563686e6963616c4d656d62657273686970014c496e7374616e6365314d656d62657273686970041c4d656d626572730100445665633c543a3a4163636f756e7449643e040004c8205468652063757272656e74206d656d626572736869702c2073746f72656420617320616e206f726465726564205665632e0110286164645f6d656d626572040c77686f30543a3a4163636f756e7449640c7c204164642061206d656d626572206077686f6020746f20746865207365742e00b4204d6179206f6e6c792062652063616c6c65642066726f6d20604164644f726967696e60206f7220726f6f742e3472656d6f76655f6d656d626572040c77686f30543a3a4163636f756e7449640c902052656d6f76652061206d656d626572206077686f602066726f6d20746865207365742e00c0204d6179206f6e6c792062652063616c6c65642066726f6d206052656d6f76654f726967696e60206f7220726f6f742e2c737761705f6d656d626572081872656d6f766530543a3a4163636f756e7449640c61646430543a3a4163636f756e7449640cc02053776170206f7574206f6e65206d656d626572206072656d6f76656020666f7220616e6f746865722060616464602e00b8204d6179206f6e6c792062652063616c6c65642066726f6d2060537761704f726967696e60206f7220726f6f742e3472657365745f6d656d62657273041c6d656d62657273445665633c543a3a4163636f756e7449643e105901204368616e676520746865206d656d6265727368697020746f2061206e6577207365742c20646973726567617264696e6720746865206578697374696e67206d656d626572736869702e204265206e69636520616e646c207061737320606d656d6265727360207072652d736f727465642e00bc204d6179206f6e6c792062652063616c6c65642066726f6d206052657365744f726967696e60206f7220726f6f742e01142c4d656d62657241646465640004e42054686520676976656e206d656d626572207761732061646465643b2073656520746865207472616e73616374696f6e20666f722077686f2e344d656d62657252656d6f7665640004ec2054686520676976656e206d656d626572207761732072656d6f7665643b2073656520746865207472616e73616374696f6e20666f722077686f2e384d656d62657273537761707065640004dc2054776f206d656d62657273207765726520737761707065643b2073656520746865207472616e73616374696f6e20666f722077686f2e304d656d6265727352657365740004190120546865206d656d62657273686970207761732072657365743b2073656520746865207472616e73616374696f6e20666f722077686f20746865206e6577207365742069732e1444756d6d7904b4727374643a3a6d61726b65723a3a5068616e746f6d446174613c284163636f756e7449642c204576656e74293e0470205068616e746f6d206d656d6265722c206e6576657220757365642e00003c46696e616c697479547261636b65720001042866696e616c5f68696e74041068696e745c436f6d706163743c543a3a426c6f636b4e756d6265723e08f42048696e7420746861742074686520617574686f72206f66207468697320626c6f636b207468696e6b732074686520626573742066696e616c697a65646c20626c6f636b2069732074686520676976656e206e756d6265722e00082857696e646f7753697a6538543a3a426c6f636b4e756d626572106500000004190120546865206e756d626572206f6620726563656e742073616d706c657320746f206b6565702066726f6d207468697320636861696e2e2044656661756c74206973203130312e345265706f72744c6174656e637938543a3a426c6f636b4e756d62657210e8030000041d01205468652064656c617920616674657220776869636820706f696e74207468696e6773206265636f6d6520737573706963696f75732e2044656661756c7420697320313030302e001c4772616e647061013c4772616e64706146696e616c6974791c2c417574686f726974696573010034417574686f726974794c6973740400102c20444550524543415445440061012054686973207573656420746f2073746f7265207468652063757272656e7420617574686f72697479207365742c20776869636820686173206265656e206d6967726174656420746f207468652077656c6c2d6b6e6f776e94204752414e4450415f415554484f52495445535f4b455920756e686173686564206b65792e14537461746501006c53746f72656453746174653c543a3a426c6f636b4e756d6265723e04000490205374617465206f66207468652063757272656e7420617574686f72697479207365742e3450656e64696e674368616e676500008c53746f72656450656e64696e674368616e67653c543a3a426c6f636b4e756d6265723e040004c42050656e64696e67206368616e67653a20287369676e616c65642061742c207363686564756c6564206368616e6765292e284e657874466f72636564000038543a3a426c6f636b4e756d626572040004bc206e65787420626c6f636b206e756d6265722077686572652077652063616e20666f7263652061206368616e67652e1c5374616c6c656400008028543a3a426c6f636b4e756d6265722c20543a3a426c6f636b4e756d626572290400049020607472756560206966207765206172652063757272656e746c79207374616c6c65642e3043757272656e7453657449640100145365744964200000000000000000085d0120546865206e756d626572206f66206368616e6765732028626f746820696e207465726d73206f66206b65797320616e6420756e6465726c79696e672065636f6e6f6d696320726573706f6e736962696c697469657329c420696e20746865202273657422206f66204772616e6470612076616c696461746f72732066726f6d2067656e657369732e30536574496453657373696f6e0001011453657449643053657373696f6e496e64657800040004c1012041206d617070696e672066726f6d206772616e6470612073657420494420746f2074686520696e646578206f6620746865202a6d6f737420726563656e742a2073657373696f6e20666f7220776869636820697473206d656d62657273207765726520726573706f6e7369626c652e0104487265706f72745f6d69736265686176696f72041c5f7265706f72741c5665633c75383e0464205265706f727420736f6d65206d69736265686176696f722e010c384e6577417574686f7269746965730434417574686f726974794c6973740490204e657720617574686f726974792073657420686173206265656e206170706c6965642e1850617573656400049c2043757272656e7420617574686f726974792073657420686173206265656e207061757365642e1c526573756d65640004a02043757272656e7420617574686f726974792073657420686173206265656e20726573756d65642e0000205472656173757279012054726561737572790c3450726f706f73616c436f756e7401003450726f706f73616c496e646578100000000004a4204e756d626572206f662070726f706f73616c7320746861742068617665206265656e206d6164652e2450726f706f73616c730001013450726f706f73616c496e6465789050726f706f73616c3c543a3a4163636f756e7449642c2042616c616e63654f663c543e3e000400047c2050726f706f73616c7320746861742068617665206265656e206d6164652e24417070726f76616c730100485665633c50726f706f73616c496e6465783e040004f82050726f706f73616c20696e646963657320746861742068617665206265656e20617070726f76656420627574206e6f742079657420617761726465642e010c3470726f706f73655f7370656e64081476616c756554436f6d706163743c42616c616e63654f663c543e3e2c62656e65666963696172798c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f75726365242d012050757420666f727761726420612073756767657374696f6e20666f72207370656e64696e672e2041206465706f7369742070726f706f7274696f6e616c20746f207468652076616c7565350120697320726573657276656420616e6420736c6173686564206966207468652070726f706f73616c2069732072656a65637465642e2049742069732072657475726e6564206f6e636520746865542070726f706f73616c20697320617761726465642e002c2023203c7765696768743e20202d204f2831292e64202d204c696d697465642073746f726167652072656164732e94202d204f6e65204442206368616e67652c206f6e6520657874726120444220656e7472792e302023203c2f7765696768743e3c72656a6563745f70726f706f73616c042c70726f706f73616c5f696458436f6d706163743c50726f706f73616c496e6465783e1cfc2052656a65637420612070726f706f736564207370656e642e20546865206f726967696e616c206465706f7369742077696c6c20626520736c61736865642e002c2023203c7765696768743e20202d204f2831292e64202d204c696d697465642073746f726167652072656164732e40202d204f6e6520444220636c6561722e302023203c2f7765696768743e40617070726f76655f70726f706f73616c042c70726f706f73616c5f696458436f6d706163743c50726f706f73616c496e6465783e205d0120417070726f766520612070726f706f73616c2e2041742061206c617465722074696d652c207468652070726f706f73616c2077696c6c20626520616c6c6f636174656420746f207468652062656e6566696369617279ac20616e6420746865206f726967696e616c206465706f7369742077696c6c2062652072657475726e65642e002c2023203c7765696768743e20202d204f2831292e64202d204c696d697465642073746f726167652072656164732e44202d204f6e65204442206368616e67652e302023203c2f7765696768743e01182050726f706f736564043450726f706f73616c496e6465780438204e65772070726f706f73616c2e205370656e64696e67041c42616c616e636504e8205765206861766520656e6465642061207370656e6420706572696f6420616e642077696c6c206e6f7720616c6c6f636174652066756e64732e1c417761726465640c3450726f706f73616c496e6465781c42616c616e6365244163636f756e744964048020536f6d652066756e64732068617665206265656e20616c6c6f63617465642e144275726e74041c42616c616e6365048c20536f6d65206f66206f75722066756e64732068617665206265656e206275726e742e20526f6c6c6f766572041c42616c616e6365043101205370656e64696e67206861732066696e69736865643b20746869732069732074686520616d6f756e74207468617420726f6c6c73206f76657220756e74696c206e657874207370656e642e1c4465706f736974041c42616c616e6365048020536f6d652066756e64732068617665206265656e206465706f73697465642e103050726f706f73616c426f6e641c5065726d696c6c1050c30000085501204672616374696f6e206f6620612070726f706f73616c27732076616c756520746861742073686f756c6420626520626f6e64656420696e206f7264657220746f20706c616365207468652070726f706f73616c2e110120416e2061636365707465642070726f706f73616c2067657473207468657365206261636b2e20412072656a65637465642070726f706f73616c20646f6573206e6f742e4c50726f706f73616c426f6e644d696e696d756d3042616c616e63654f663c543e4000407a10f35a00000000000000000000044901204d696e696d756d20616d6f756e74206f662066756e647320746861742073686f756c6420626520706c6163656420696e2061206465706f73697420666f72206d616b696e6720612070726f706f73616c2e2c5370656e64506572696f6438543a3a426c6f636b4e756d6265721080700000048820506572696f64206265747765656e2073756363657373697665207370656e64732e104275726e1c5065726d696c6c1020a107000411012050657263656e74616765206f662073706172652066756e64732028696620616e7929207468617420617265206275726e7420706572207370656e6420706572696f642e0024436f6e7472616374730120436f6e74726163741c204761735370656e7401000c476173200000000000000000048020476173207370656e7420736f2066617220696e207468697320626c6f636b2e3c43757272656e745363686564756c650100205363686564756c65c5010000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000008700000000000000af000000000000000100000000000000010000000000000004000000000001001000000000400000002000000004942043757272656e7420636f7374207363686564756c6520666f7220636f6e7472616374732e305072697374696e65436f64650001012c436f6465486173683c543e1c5665633c75383e0004000465012041206d617070696e672066726f6d20616e206f726967696e616c20636f6465206861736820746f20746865206f726967696e616c20636f64652c20756e746f756368656420627920696e737472756d656e746174696f6e2e2c436f646553746f726167650001012c436f6465486173683c543e587761736d3a3a5072656661625761736d4d6f64756c650004000465012041206d617070696e67206265747765656e20616e206f726967696e616c20636f6465206861736820616e6420696e737472756d656e746564207761736d20636f64652c20726561647920666f7220657865637574696f6e2e384163636f756e74436f756e74657201000c753634200000000000000000045420546865207375627472696520636f756e7465722e38436f6e7472616374496e666f4f6600010130543a3a4163636f756e7449643c436f6e7472616374496e666f3c543e00040004a82054686520636f6465206173736f6369617465642077697468206120676976656e206163636f756e742e20476173507269636501003042616c616e63654f663c543e4001000000000000000000000000000000047820546865207072696365206f66206f6e6520756e6974206f66206761732e01143c7570646174655f7363686564756c6504207363686564756c65205363686564756c650cb4205570646174657320746865207363686564756c6520666f72206d65746572696e6720636f6e7472616374732e000d0120546865207363686564756c65206d7573742068617665206120677265617465722076657273696f6e207468616e207468652073746f726564207363686564756c652e207075745f636f646508246761735f6c696d697430436f6d706163743c4761733e10636f64651c5665633c75383e085d012053746f7265732074686520676976656e2062696e617279205761736d20636f646520696e746f2074686520636861696e27732073746f7261676520616e642072657475726e73206974732060636f646568617368602ed420596f752063616e20696e7374616e746961746520636f6e747261637473206f6e6c7920776974682073746f72656420636f64652e1063616c6c1010646573748c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f757263651476616c756554436f6d706163743c42616c616e63654f663c543e3e246761735f6c696d697430436f6d706163743c4761733e10646174611c5665633c75383e1c0901204d616b657320612063616c6c20746f20616e206163636f756e742c206f7074696f6e616c6c79207472616e7366657272696e6720736f6d652062616c616e63652e002901202a20496620746865206163636f756e74206973206120736d6172742d636f6e7472616374206163636f756e742c20746865206173736f63696174656420636f64652077696c6c206265b020657865637574656420616e6420616e792076616c75652077696c6c206265207472616e736665727265642e1901202a20496620746865206163636f756e74206973206120726567756c6172206163636f756e742c20616e792076616c75652077696c6c206265207472616e736665727265642e4901202a204966206e6f206163636f756e742065786973747320616e64207468652063616c6c2076616c7565206973206e6f74206c657373207468616e20606578697374656e7469616c5f6465706f736974602c1501206120726567756c6172206163636f756e742077696c6c206265206372656174656420616e6420616e792076616c75652077696c6c206265207472616e736665727265642e2c696e7374616e74696174651024656e646f776d656e7454436f6d706163743c42616c616e63654f663c543e3e246761735f6c696d697430436f6d706163743c4761733e24636f64655f686173682c436f6465486173683c543e10646174611c5665633c75383e28bd0120496e7374616e7469617465732061206e657720636f6e74726163742066726f6d207468652060636f646568617368602067656e65726174656420627920607075745f636f6465602c206f7074696f6e616c6c79207472616e7366657272696e6720736f6d652062616c616e63652e009820496e7374616e74696174696f6e20697320657865637574656420617320666f6c6c6f77733a004101202d205468652064657374696e6174696f6e206164647265737320697320636f6d7075746564206261736564206f6e207468652073656e64657220616e642068617368206f662074686520636f64652e0501202d2054686520736d6172742d636f6e7472616374206163636f756e7420697320637265617465642061742074686520636f6d707574656420616464726573732e6d01202d20546865206063746f725f636f64656020697320657865637574656420696e2074686520636f6e74657874206f6620746865206e65776c792d63726561746564206163636f756e742e204275666665722072657475726e65645d0120202061667465722074686520657865637574696f6e206973207361766564206173207468652060636f646560206f6620746865206163636f756e742e205468617420636f64652077696c6c20626520696e766f6b6564a820202075706f6e20616e792063616c6c2072656365697665642062792074686973206163636f756e742e7c202d2054686520636f6e747261637420697320696e697469616c697a65642e3c636c61696d5f73757263686172676508106465737430543a3a4163636f756e744964286175785f73656e646572504f7074696f6e3c543a3a4163636f756e7449643e14710120416c6c6f777320626c6f636b2070726f64756365727320746f20636c61696d206120736d616c6c2072657761726420666f72206576696374696e67206120636f6e74726163742e204966206120626c6f636b2070726f64756365721501206661696c7320746f20646f20736f2c206120726567756c61722075736572732077696c6c20626520616c6c6f77656420746f20636c61696d20746865207265776172642e00390120496620636f6e7472616374206973206e6f742065766963746564206173206120726573756c74206f6620746869732063616c6c2c206e6f20616374696f6e73206172652074616b656e20616e64ac207468652073656e646572206973206e6f7420656c696769626c6520666f7220746865207265776172642e0118205472616e736665720c244163636f756e744964244163636f756e7449641c42616c616e6365046901205472616e736665722068617070656e6564206066726f6d6020746f2060746f60207769746820676976656e206076616c7565602061732070617274206f662061206063616c6c60206f722060696e7374616e7469617465602e30496e7374616e74696174656408244163636f756e744964244163636f756e74496404dc20436f6e7472616374206465706c6f7965642062792061646472657373206174207468652073706563696669656420616464726573732e28436f646553746f72656404104861736804b820436f646520776974682074686520737065636966696564206861736820686173206265656e2073746f7265642e3c5363686564756c6555706461746564040c75333204c020547269676765726564207768656e207468652063757272656e74207363686564756c6520697320757064617465642e284469737061746368656408244163636f756e74496410626f6f6c08390120412063616c6c2077617320646973706174636865642066726f6d2074686520676976656e206163636f756e742e2054686520626f6f6c207369676e616c7320776865746865722069742077617374207375636365737366756c20657865637574696f6e206f72206e6f742e20436f6e747261637408244163636f756e7449641c5665633c75383e048c20416e206576656e742066726f6d20636f6e7472616374206f66206163636f756e742e404c5369676e6564436c61696d48616e646963617038543a3a426c6f636b4e756d626572100200000010e0204e756d626572206f6620626c6f636b2064656c617920616e2065787472696e73696320636c61696d20737572636861726765206861732e000d01205768656e20636c61696d207375726368617267652069732063616c6c656420627920616e2065787472696e736963207468652072656e7420697320636865636b65646820666f722063757272656e745f626c6f636b202d2064656c617940546f6d6273746f6e654465706f7369743042616c616e63654f663c543e4000407a10f35a0000000000000000000004d420546865206d696e696d756d20616d6f756e7420726571756972656420746f2067656e6572617465206120746f6d6273746f6e652e4453746f7261676553697a654f66667365740c75333210080000000851012053697a65206f66206120636f6e7472616374206174207468652074696d65206f6620696e7374616e746961696f6e2e205468697320697320612073696d706c652077617920746f20656e737572652074686174a420656d70747920636f6e747261637473206576656e7475616c6c7920676574732064656c657465642e2c52656e74427974654665653042616c616e63654f663c543e4000407a10f35a00000000000000000000043501205072696365206f6620612062797465206f662073746f7261676520706572206f6e6520626c6f636b20696e74657276616c2e2053686f756c642062652067726561746572207468616e20302e4452656e744465706f7369744f66667365743042616c616e63654f663c543e4000008a5d7845630100000000000000001c05012054686520616d6f756e74206f662066756e6473206120636f6e74726163742073686f756c64206465706f73697420696e206f7264657220746f206f6666736574582074686520636f7374206f66206f6e6520627974652e006901204c6574277320737570706f736520746865206465706f73697420697320312c303030204255202862616c616e636520756e697473292f6279746520616e64207468652072656e7420697320312042552f627974652f6461792c5901207468656e206120636f6e7472616374207769746820312c3030302c3030302042552074686174207573657320312c303030206279746573206f662073746f7261676520776f756c6420706179206e6f2072656e742e4d0120427574206966207468652062616c616e6365207265647563656420746f203530302c30303020425520616e64207468652073746f7261676520737461796564207468652073616d6520617420312c3030302c78207468656e20697420776f756c6420706179203530302042552f6461792e3c5375726368617267655265776172643042616c616e63654f663c543e400080a1a76b4a3500000000000000000008e4205265776172642074686174206973207265636569766564206279207468652070617274792077686f736520746f75636820686173206c65646820746f2072656d6f76616c206f66206120636f6e74726163742e2c5472616e736665724665653042616c616e63654f663c543e400010a5d4e800000000000000000000000494205468652066656520726571756972656420746f206d616b652061207472616e736665722e2c4372656174696f6e4665653042616c616e63654f663c543e400010a5d4e80000000000000000000000049c205468652066656520726571756972656420746f2063726561746520616e206163636f756e742e485472616e73616374696f6e426173654665653042616c616e63654f663c543e400010a5d4e8000000000000000000000004dc205468652066656520746f206265207061696420666f72206d616b696e672061207472616e73616374696f6e3b2074686520626173652e485472616e73616374696f6e427974654665653042616c616e63654f663c543e4000e40b54020000000000000000000000040d01205468652066656520746f206265207061696420666f72206d616b696e672061207472616e73616374696f6e3b20746865207065722d6279746520706f7274696f6e2e2c436f6e74726163744665653042616c616e63654f663c543e400010a5d4e80000000000000000000000084101205468652066656520726571756972656420746f20696e7374616e7469617465206120636f6e747261637420696e7374616e63652e204120726561736f6e61626c652064656661756c742076616c75651c2069732032312e2c43616c6c426173654665650c47617320e803000000000000081d0120546865206261736520666565206368617267656420666f722063616c6c696e6720696e746f206120636f6e74726163742e204120726561736f6e61626c652064656661756c74382076616c7565206973203133352e48496e7374616e7469617465426173654665650c47617320e80300000000000008390120546865206261736520666565206368617267656420666f7220696e7374616e74696174696e67206120636f6e74726163742e204120726561736f6e61626c652064656661756c742076616c756520206973203137352e204d617844657074680c753332102000000008310120546865206d6178696d756d206e657374696e67206c6576656c206f6620612063616c6c2f696e7374616e746961746520737461636b2e204120726561736f6e61626c652064656661756c74382076616c7565206973203130302e304d617856616c756553697a650c753332100040000004390120546865206d6178696d756d2073697a65206f6620612073746f726167652076616c756520696e2062797465732e204120726561736f6e61626c652064656661756c74206973203136204b69422e34426c6f636b4761734c696d69740c47617320809698000000000008250120546865206d6178696d756d20616d6f756e74206f6620676173207468617420636f756c6420626520657870656e6465642070657220626c6f636b2e204120726561736f6e61626c65742064656661756c742076616c75652069732031305f3030305f3030302e00105375646f01105375646f040c4b6579010030543a3a4163636f756e74496480000000000000000000000000000000000000000000000000000000000000000004842054686520604163636f756e74496460206f6620746865207375646f206b65792e010c107375646f042070726f706f73616c40426f783c543a3a50726f706f73616c3e2839012041757468656e7469636174657320746865207375646f206b657920616e64206469737061746368657320612066756e6374696f6e2063616c6c20776974682060526f6f7460206f726967696e2e00d020546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002c2023203c7765696768743e20202d204f2831292e64202d204c696d697465642073746f726167652072656164732e60202d204f6e6520444220777269746520286576656e74292ed4202d20556e6b6e6f776e20776569676874206f662064657269766174697665206070726f706f73616c6020657865637574696f6e2e302023203c2f7765696768743e1c7365745f6b6579040c6e65778c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f757263652475012041757468656e74696361746573207468652063757272656e74207375646f206b657920616e6420736574732074686520676976656e204163636f756e7449642028606e6577602920617320746865206e6577207375646f206b65792e00d020546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002c2023203c7765696768743e20202d204f2831292e64202d204c696d697465642073746f726167652072656164732e44202d204f6e65204442206368616e67652e302023203c2f7765696768743e1c7375646f5f6173080c77686f8c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f757263652070726f706f73616c40426f783c543a3a50726f706f73616c3e2c51012041757468656e7469636174657320746865207375646f206b657920616e64206469737061746368657320612066756e6374696f6e2063616c6c207769746820605369676e656460206f726967696e2066726f6d44206120676976656e206163636f756e742e00d020546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002c2023203c7765696768743e20202d204f2831292e64202d204c696d697465642073746f726167652072656164732e60202d204f6e6520444220777269746520286576656e74292ed4202d20556e6b6e6f776e20776569676874206f662064657269766174697665206070726f706f73616c6020657865637574696f6e2e302023203c2f7765696768743e010c1453756469640410626f6f6c04602041207375646f206a75737420746f6f6b20706c6163652e284b65794368616e67656404244163636f756e74496404f020546865207375646f6572206a757374207377697463686564206964656e746974793b20746865206f6c64206b657920697320737570706c6965642e285375646f4173446f6e650410626f6f6c04602041207375646f206a75737420746f6f6b20706c6163652e000020496d4f6e6c696e650120496d4f6e6c696e651020476f737369704174010038543a3a426c6f636b4e756d626572100000000004a02054686520626c6f636b206e756d626572207768656e2077652073686f756c6420676f737369702e104b65797301004c5665633c543a3a417574686f7269747949643e040004d0205468652063757272656e7420736574206f66206b6579732074686174206d61792069737375652061206865617274626561742e485265636569766564486561727462656174730002013053657373696f6e496e6465782441757468496e6465781c5665633c75383e01040008e420466f7220656163682073657373696f6e20696e6465782c207765206b6565702061206d617070696e67206f66206041757468496e646578608c20746f20606f6666636861696e3a3a4f70617175654e6574776f726b5374617465602e38417574686f726564426c6f636b730102013053657373696f6e496e64657838543a3a56616c696461746f7249640c75333201100000000008150120466f7220656163682073657373696f6e20696e6465782c207765206b6565702061206d617070696e67206f662060543a3a56616c696461746f7249646020746f20746865c8206e756d626572206f6620626c6f636b7320617574686f7265642062792074686520676976656e20617574686f726974792e0104246865617274626561740824686561727462656174644865617274626561743c543a3a426c6f636b4e756d6265723e285f7369676e6174757265bc3c543a3a417574686f7269747949642061732052756e74696d654170705075626c69633e3a3a5369676e617475726500010c444865617274626561745265636569766564042c417574686f72697479496404c02041206e657720686561727462656174207761732072656365697665642066726f6d2060417574686f726974794964601c416c6c476f6f640004d42041742074686520656e64206f66207468652073657373696f6e2c206e6f206f6666656e63652077617320636f6d6d69747465642e2c536f6d654f66666c696e6504605665633c4964656e74696669636174696f6e5475706c653e0431012041742074686520656e64206f66207468652073657373696f6e2c206174206c65617374206f6e63652076616c696461746f722077617320666f756e6420746f206265206f66666c696e652e000048417574686f72697479446973636f76657279000100000000204f6666656e63657301204f6666656e6365730c1c5265706f727473000101345265706f727449644f663c543ed04f6666656e636544657461696c733c543a3a4163636f756e7449642c20543a3a4964656e74696669636174696f6e5475706c653e00040004490120546865207072696d61727920737472756374757265207468617420686f6c647320616c6c206f6666656e6365207265636f726473206b65796564206279207265706f7274206964656e746966696572732e58436f6e63757272656e745265706f727473496e646578010201104b696e64384f706171756554696d65536c6f74485665633c5265706f727449644f663c543e3e010400042901204120766563746f72206f66207265706f727473206f66207468652073616d65206b696e6420746861742068617070656e6564206174207468652073616d652074696d6520736c6f742e485265706f72747342794b696e64496e646578010101104b696e641c5665633c75383e00040018110120456e756d65726174657320616c6c207265706f727473206f662061206b696e6420616c6f6e672077697468207468652074696d6520746865792068617070656e65642e00bc20416c6c207265706f7274732061726520736f72746564206279207468652074696d65206f66206f6666656e63652e004901204e6f74652074686174207468652061637475616c2074797065206f662074686973206d617070696e6720697320605665633c75383e602c207468697320697320626563617573652076616c756573206f66690120646966666572656e7420747970657320617265206e6f7420737570706f7274656420617420746865206d6f6d656e7420736f2077652061726520646f696e6720746865206d616e75616c2073657269616c697a6174696f6e2e010001041c4f6666656e636508104b696e64384f706171756554696d65536c6f7408550120546865726520697320616e206f6666656e6365207265706f72746564206f662074686520676976656e20606b696e64602068617070656e656420617420746865206073657373696f6e5f696e6465786020616e64390120286b696e642d7370656369666963292074696d6520736c6f742e2054686973206576656e74206973206e6f74206465706f736974656420666f72206475706c696361746520736c61736865732e00006052616e646f6d6e657373436f6c6c656374697665466c6970016052616e646f6d6e657373436f6c6c656374697665466c6970043852616e646f6d4d6174657269616c0100305665633c543a3a486173683e04000c610120536572696573206f6620626c6f636b20686561646572732066726f6d20746865206c61737420383120626c6f636b73207468617420616374732061732072616e646f6d2073656564206d6174657269616c2e2054686973610120697320617272616e67656420617320612072696e672062756666657220776974682060626c6f636b5f6e756d626572202520383160206265696e672074686520696e64657820696e746f20746865206056656360206f664420746865206f6c6465737420686173682e0100000000144e69636b7301105375646f04184e616d654f6600010130543a3a4163636f756e7449645c285665633c75383e2c2042616c616e63654f663c543e29000400047020546865206c6f6f6b7570207461626c6520666f72206e616d65732e0110207365745f6e616d6504106e616d651c5665633c75383e405d012053657420616e206163636f756e742773206e616d652e20546865206e616d652073686f756c642062652061205554462d382d656e636f64656420737472696e6720627920636f6e76656e74696f6e2c2074686f7567684c20776520646f6e277420636865636b2069742e00610120546865206e616d65206d6179206e6f74206265206d6f7265207468616e2060543a3a4d61784c656e677468602062797465732c206e6f72206c657373207468616e2060543a3a4d696e4c656e677468602062797465732e005d0120496620746865206163636f756e7420646f65736e277420616c726561647920686176652061206e616d652c207468656e206120666565206f6620605265736572766174696f6e466565602069732072657365727665644020696e20746865206163636f756e742e00d020546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002c2023203c7765696768743e20202d204f2831292e84202d204174206d6f7374206f6e652062616c616e6365206f7065726174696f6e2e68202d204f6e652073746f7261676520726561642f77726974652e34202d204f6e65206576656e742e302023203c2f7765696768743e28636c6561725f6e616d650028510120436c65617220616e206163636f756e742773206e616d6520616e642072657475726e20746865206465706f7369742e204661696c7320696620746865206163636f756e7420776173206e6f74206e616d65642e00d020546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002c2023203c7765696768743e20202d204f2831292e64202d204f6e652062616c616e6365206f7065726174696f6e2e68202d204f6e652073746f7261676520726561642f77726974652e34202d204f6e65206576656e742e302023203c2f7765696768743e246b696c6c5f6e616d6504187461726765748c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f7572636534e42052656d6f766520616e206163636f756e742773206e616d6520616e642074616b6520636861726765206f6620746865206465706f7369742e004901204661696c73206966206077686f6020686173206e6f74206265656e206e616d65642e20546865206465706f736974206973206465616c742077697468207468726f7567682060543a3a536c6173686564604c20696d62616c616e63652068616e646c65722e00310120546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f526f6f745f206f72206d617463682060543a3a466f7263654f726967696e602e002c2023203c7765696768743e20202d204f2831292edc202d204f6e6520756e62616c616e6365642068616e646c6572202870726f6261626c7920612062616c616e6365207472616e736665722968202d204f6e652073746f7261676520726561642f77726974652e34202d204f6e65206576656e742e302023203c2f7765696768743e28666f7263655f6e616d6508187461726765748c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f75726365106e616d651c5665633c75383e30c82053657420612074686972642d7061727479206163636f756e742773206e616d652077697468206e6f206465706f7369742e00a0204e6f206c656e67746820636865636b696e6720697320646f6e65206f6e20746865206e616d652e00310120546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f526f6f745f206f72206d617463682060543a3a466f7263654f726967696e602e002c2023203c7765696768743e20202d204f2831292e84202d204174206d6f7374206f6e652062616c616e6365206f7065726174696f6e2e68202d204f6e652073746f7261676520726561642f77726974652e34202d204f6e65206576656e742e302023203c2f7765696768743e01141c4e616d6553657404244163636f756e74496404402041206e616d6520776173207365742e284e616d65466f7263656404244163636f756e74496404642041206e616d652077617320666f726369626c79207365742e2c4e616d654368616e67656404244163636f756e74496404502041206e616d6520776173206368616e6765642e2c4e616d65436c656172656408244163636f756e7449641c42616c616e636504d02041206e616d652077617320636c65617265642c20616e642074686520676976656e2062616c616e63652072657475726e65642e284e616d654b696c6c656408244163636f756e7449641c42616c616e636504c82041206e616d65207761732072656d6f76656420616e642074686520676976656e2062616c616e636520736c61736865642e0c385265736572766174696f6e4665653042616c616e63654f663c543e4000407a10f35a000000000000000000000444205265736572766174696f6e206665652e244d696e4c656e6774680c7533321003000000048820546865206d696e696d756d206c656e6774682061206e616d65206d61792062652e244d61784c656e6774680c7533321010000000048820546865206d6178696d756d206c656e6774682061206e616d65206d61792062652e00'; + +export default meta; diff --git a/packages/metadata/src/Metadata/v9/toV10.ts b/packages/metadata/src/Metadata/v9/toV10.ts new file mode 100644 index 0000000000..ccbab6f566 --- /dev/null +++ b/packages/metadata/src/Metadata/v9/toV10.ts @@ -0,0 +1,52 @@ +// Copyright 2017-2019 @polkadot/metadata authors & contributors +// This software may be modified and distributed under the terms +// of the Apache-2.0 license. See the LICENSE file for details. + +import { MetadataV9, MetadataV10, ModuleMetadataV9, ModuleMetadataV10, StorageEntryTypeV9 } from '@polkadot/types/interfaces/metadata'; +import { Registry } from '@polkadot/types/types'; + +import { createType } from '@polkadot/types'; + +// migrate a storage entry type - only map types are different (with a kind enum) +// all return the actual value for the enum, followed by the numeric index +function createStorageType (registry: Registry, entryType: StorageEntryTypeV9): [any, number] { + if (entryType.isPlain) { + return [entryType.asPlain, 0]; + } else if (entryType.isDoubleMap) { + return [entryType.asDoubleMap, 2]; + } + + const map = entryType.asMap; + + // map needs a migration, removing linked and adding an explicit kind + return [{ + ...map, + kind: createType(registry, 'MapKindV10', null, map.linked.isTrue ? 1 : 0) + }, 1]; +} + +function convertModule (registry: Registry, mod: ModuleMetadataV9): ModuleMetadataV10 { + const storage = mod.storage.unwrapOr(null); + + return createType(registry, 'ModuleMetadataV10', { + ...mod, + storage: storage + ? { + ...storage, + items: storage.items.map((item): any => ({ + ...item, + type: createType(registry, 'StorageEntryTypeV10', ...createStorageType(registry, item.type)) + })) + } + : null + }); +} + +/** + * Convert from MetadataV9 to MetadataV10 + */ +export default function toV10 (registry: Registry, { modules }: MetadataV9): MetadataV10 { + return createType(registry, 'MetadataV10', { + modules: modules.map((mod): ModuleMetadataV10 => convertModule(registry, mod)) + }); +} diff --git a/packages/rpc-core/src/formatting.spec.ts b/packages/rpc-core/src/formatting.spec.ts index eef2023108..618a9a88d4 100644 --- a/packages/rpc-core/src/formatting.spec.ts +++ b/packages/rpc-core/src/formatting.spec.ts @@ -145,15 +145,15 @@ function formattingTests (version: string, decorated: Metadata, encodedValues: [ }); it('handles fallbacks for linked heads (new metadata only)', (done): void => { - const headKey = decorated.query.staking.validators && decorated.query.staking.validators.headKey; + const iterKey = decorated.query.staking.validators && decorated.query.staking.validators.iterKey; // skip for old - if (!headKey) { + if (!iterKey) { return done(); } api.state - .subscribeStorage([headKey]) + .subscribeStorage([iterKey]) .subscribe((value: Codec[]): void => { expect(value).toHaveLength(1); // console.error('head fallback', value); @@ -163,10 +163,10 @@ function formattingTests (version: string, decorated: Metadata, encodedValues: [ }); it('handles fallbacks for linked maps (new metadata only)', (done): void => { - const headKey = decorated.query.staking.validators && decorated.query.staking.validators.headKey; + const iterKey = decorated.query.staking.validators && decorated.query.staking.validators.iterKey; // skip for old - if (!headKey) { + if (!iterKey) { return done(); } diff --git a/packages/types/src/codec/create/getTypeClass.ts b/packages/types/src/codec/create/getTypeClass.ts index 0057966667..13ea783b50 100644 --- a/packages/types/src/codec/create/getTypeClass.ts +++ b/packages/types/src/codec/create/getTypeClass.ts @@ -65,9 +65,6 @@ const infoMapping: Record C [TypeDefInfo.Compact]: (registry: Registry, value: TypeDef): Constructor => Compact.with(getSubType(value)), - // eslint-disable-next-line @typescript-eslint/no-use-before-define - [TypeDefInfo.DoubleMap]: (registry: Registry, value: TypeDef): Constructor => getTypeClass(registry, getSubDef(value)), - [TypeDefInfo.Enum]: (registry: Registry, value: TypeDef): Constructor => Enum.with(getTypeClassMap(value)), [TypeDefInfo.Linkage]: (registry: Registry, value: TypeDef): Constructor => Linkage.withKey(getSubType(value)), diff --git a/packages/types/src/codec/create/getTypeDef.spec.ts b/packages/types/src/codec/create/getTypeDef.spec.ts index d3954f7314..ae23530d3a 100644 --- a/packages/types/src/codec/create/getTypeDef.spec.ts +++ b/packages/types/src/codec/create/getTypeDef.spec.ts @@ -97,10 +97,10 @@ describe('getTypeDef', (): void => { it('returns a type structure', (): void => { expect( - getTypeDef('(u32, Compact, Vec, Option, DoubleMap, (Text,Vec<(Bool,u128)>))') + getTypeDef('(u32, Compact, Vec, Option, (Text,Vec<(Bool,u128)>))') ).toEqual({ info: TypeDefInfo.Tuple, - type: '(u32,Compact,Vec,Option,DoubleMap,(Text,Vec<(Bool,u128)>))', + type: '(u32,Compact,Vec,Option,(Text,Vec<(Bool,u128)>))', sub: [ { info: TypeDefInfo.Plain, @@ -130,14 +130,6 @@ describe('getTypeDef', (): void => { type: 'u128' } }, - { - info: TypeDefInfo.DoubleMap, - type: 'DoubleMap', - sub: { - info: TypeDefInfo.Plain, - type: 'u128' - } - }, { info: TypeDefInfo.Tuple, type: '(Text,Vec<(Bool,u128)>)', diff --git a/packages/types/src/codec/create/getTypeDef.ts b/packages/types/src/codec/create/getTypeDef.ts index da4ef0fb4f..ce96f1c96c 100644 --- a/packages/types/src/codec/create/getTypeDef.ts +++ b/packages/types/src/codec/create/getTypeDef.ts @@ -109,7 +109,6 @@ const nestedExtraction: [string, string, TypeDefInfo, (value: TypeDef, type: str const wrappedExtraction: [string, string, TypeDefInfo][] = [ ['Compact<', '>', TypeDefInfo.Compact], - ['DoubleMap<', '>', TypeDefInfo.DoubleMap], ['Linkage<', '>', TypeDefInfo.Linkage], ['Option<', '>', TypeDefInfo.Option], ['Vec<', '>', TypeDefInfo.Vec] diff --git a/packages/types/src/codec/create/sanitize.ts b/packages/types/src/codec/create/sanitize.ts index 0f3aafa16d..6f6479a08c 100644 --- a/packages/types/src/codec/create/sanitize.ts +++ b/packages/types/src/codec/create/sanitize.ts @@ -5,7 +5,7 @@ type Mapper = (value: string) => string; -const ALLOWED_BOXES = ['BTreeMap', 'Compact', 'DoubleMap', 'Linkage', 'Result', 'Option', 'Vec']; +const ALLOWED_BOXES = ['BTreeMap', 'Compact', 'Linkage', 'Result', 'Option', 'Vec']; const mappings: Mapper[] = [ // alias ::Inherent -> InherentOfflineReport diff --git a/packages/types/src/codec/create/types.ts b/packages/types/src/codec/create/types.ts index 594f853281..94c14dacdf 100644 --- a/packages/types/src/codec/create/types.ts +++ b/packages/types/src/codec/create/types.ts @@ -14,7 +14,6 @@ export type FromReg = K extends InterfaceType export enum TypeDefInfo { BTreeMap, Compact, - DoubleMap, Enum, Linkage, Option, diff --git a/packages/types/src/codec/utils/encodeTypes.ts b/packages/types/src/codec/utils/encodeTypes.ts index 591f2bd945..9fccc9c285 100644 --- a/packages/types/src/codec/utils/encodeTypes.ts +++ b/packages/types/src/codec/utils/encodeTypes.ts @@ -109,7 +109,6 @@ function encodeVecFixed (typeDef: Pick): string { const encoders: Record string> = { [TypeDefInfo.BTreeMap]: (typeDef: TypeDef): string => encodeWithParams(typeDef, 'BTreeMap'), [TypeDefInfo.Compact]: (typeDef: TypeDef): string => encodeWithParams(typeDef, 'Compact'), - [TypeDefInfo.DoubleMap]: (typeDef: TypeDef): string => encodeWithParams(typeDef, 'DoubleMap'), [TypeDefInfo.Enum]: (typeDef: TypeDef): string => encodeEnum(typeDef), [TypeDefInfo.Linkage]: (typeDef: TypeDef): string => encodeWithParams(typeDef, 'Linkage'), // eslint-disable-next-line @typescript-eslint/no-unused-vars diff --git a/packages/types/src/interfaceRegistry.ts b/packages/types/src/interfaceRegistry.ts index 649630e0e7..966e8b473c 100644 --- a/packages/types/src/interfaceRegistry.ts +++ b/packages/types/src/interfaceRegistry.ts @@ -27,7 +27,7 @@ import { DispatchResult, DispatchResultOf } from '@polkadot/types/interfaces/uti import { BlockAttestations, IncludedBlocks, MoreAttestations } from '@polkadot/types/interfaces/attestations'; import { EthereumAddress } from '@polkadot/types/interfaces/claims'; import { AttestedCandidate, AuctionIndex, BalanceUpload, Bidder, CandidateReceipt, CollatorId, CollatorSignature, EgressQueueRoot, HeadData, IncomingParachain, IncomingParachainDeploy, IncomingParachainFixed, LeasePeriod, LeasePeriodOf, NewBidder, ParaId, ParaIdOf, ParaInfo, ParaScheduling, ParachainDispatchOrigin, Retriable, SlotRange, SubId, UpwardMessage, ValidatorIndex, ValidityAttestation, ValidityVote, WinningData, WinningDataEntry } from '@polkadot/types/interfaces/parachains'; -import { CallMetadataV0, DoubleMapTypeV3, DoubleMapTypeV4, DoubleMapTypeV5, DoubleMapTypeV6, DoubleMapTypeV7, DoubleMapTypeV8, ErrorMetadataV8, EventMetadataLatest, EventMetadataV0, EventMetadataV1, EventMetadataV2, EventMetadataV3, EventMetadataV4, EventMetadataV5, EventMetadataV6, EventMetadataV7, EventMetadataV8, FunctionArgumentMetadataLatest, FunctionArgumentMetadataV0, FunctionArgumentMetadataV1, FunctionArgumentMetadataV2, FunctionArgumentMetadataV3, FunctionArgumentMetadataV4, FunctionArgumentMetadataV5, FunctionArgumentMetadataV6, FunctionArgumentMetadataV7, FunctionArgumentMetadataV8, FunctionMetadataLatest, FunctionMetadataV0, FunctionMetadataV1, FunctionMetadataV2, FunctionMetadataV3, FunctionMetadataV4, FunctionMetadataV5, FunctionMetadataV6, FunctionMetadataV7, FunctionMetadataV8, MapTypeV0, MapTypeV2, MapTypeV3, MapTypeV4, MapTypeV5, MapTypeV6, MapTypeV7, MapTypeV8, MetadataLatest, MetadataV0, MetadataV1, MetadataV2, MetadataV3, MetadataV4, MetadataV5, MetadataV6, MetadataV7, MetadataV8, ModuleConstantMetadataLatest, ModuleConstantMetadataV6, ModuleConstantMetadataV7, ModuleConstantMetadataV8, ModuleMetadataLatest, ModuleMetadataV0, ModuleMetadataV1, ModuleMetadataV2, ModuleMetadataV3, ModuleMetadataV4, ModuleMetadataV5, ModuleMetadataV6, ModuleMetadataV7, ModuleMetadataV8, OuterDispatchCallV0, OuterDispatchMetadataV0, OuterEventEventMetadataEventsV0, OuterEventEventMetadataV0, OuterEventMetadataV0, PlainTypeLatest, PlainTypeV0, PlainTypeV2, PlainTypeV3, PlainTypeV4, PlainTypeV5, PlainTypeV6, PlainTypeV7, PlainTypeV8, RuntimeModuleMetadataV0, StorageEntryMetadataLatest, StorageEntryMetadataV6, StorageEntryMetadataV7, StorageEntryMetadataV8, StorageEntryModifierLatest, StorageEntryModifierV6, StorageEntryModifierV7, StorageEntryModifierV8, StorageEntryTypeLatest, StorageEntryTypeV6, StorageEntryTypeV7, StorageEntryTypeV8, StorageFunctionMetadataV0, StorageFunctionMetadataV1, StorageFunctionMetadataV2, StorageFunctionMetadataV3, StorageFunctionMetadataV4, StorageFunctionMetadataV5, StorageFunctionModifierV0, StorageFunctionModifierV1, StorageFunctionModifierV2, StorageFunctionModifierV3, StorageFunctionModifierV4, StorageFunctionModifierV5, StorageFunctionTypeV0, StorageFunctionTypeV1, StorageFunctionTypeV2, StorageFunctionTypeV3, StorageFunctionTypeV4, StorageFunctionTypeV5, StorageMetadataV0, StorageMetadataV7, StorageMetadataV8 } from '@polkadot/types/interfaces/metadata'; +import { CallMetadataV0, DoubleMapTypeV10, DoubleMapTypeV3, DoubleMapTypeV4, DoubleMapTypeV5, DoubleMapTypeV6, DoubleMapTypeV7, DoubleMapTypeV8, DoubleMapTypeV9, ErrorMetadataV10, ErrorMetadataV8, ErrorMetadataV9, EventMetadataLatest, EventMetadataV0, EventMetadataV1, EventMetadataV10, EventMetadataV2, EventMetadataV3, EventMetadataV4, EventMetadataV5, EventMetadataV6, EventMetadataV7, EventMetadataV8, EventMetadataV9, FunctionArgumentMetadataLatest, FunctionArgumentMetadataV0, FunctionArgumentMetadataV1, FunctionArgumentMetadataV10, FunctionArgumentMetadataV2, FunctionArgumentMetadataV3, FunctionArgumentMetadataV4, FunctionArgumentMetadataV5, FunctionArgumentMetadataV6, FunctionArgumentMetadataV7, FunctionArgumentMetadataV8, FunctionArgumentMetadataV9, FunctionMetadataLatest, FunctionMetadataV0, FunctionMetadataV1, FunctionMetadataV10, FunctionMetadataV2, FunctionMetadataV3, FunctionMetadataV4, FunctionMetadataV5, FunctionMetadataV6, FunctionMetadataV7, FunctionMetadataV8, FunctionMetadataV9, MapKindV10, MapTypeV0, MapTypeV10, MapTypeV2, MapTypeV3, MapTypeV4, MapTypeV5, MapTypeV6, MapTypeV7, MapTypeV8, MapTypeV9, MetadataAll, MetadataLatest, MetadataV0, MetadataV1, MetadataV10, MetadataV2, MetadataV3, MetadataV4, MetadataV5, MetadataV6, MetadataV7, MetadataV8, MetadataV9, ModuleConstantMetadataLatest, ModuleConstantMetadataV10, ModuleConstantMetadataV6, ModuleConstantMetadataV7, ModuleConstantMetadataV8, ModuleConstantMetadataV9, ModuleMetadataLatest, ModuleMetadataV0, ModuleMetadataV1, ModuleMetadataV10, ModuleMetadataV2, ModuleMetadataV3, ModuleMetadataV4, ModuleMetadataV5, ModuleMetadataV6, ModuleMetadataV7, ModuleMetadataV8, ModuleMetadataV9, OuterDispatchCallV0, OuterDispatchMetadataV0, OuterEventEventMetadataEventsV0, OuterEventEventMetadataV0, OuterEventMetadataV0, PlainTypeLatest, PlainTypeV0, PlainTypeV10, PlainTypeV2, PlainTypeV3, PlainTypeV4, PlainTypeV5, PlainTypeV6, PlainTypeV7, PlainTypeV8, PlainTypeV9, RuntimeModuleMetadataV0, StorageEntryMetadataLatest, StorageEntryMetadataV10, StorageEntryMetadataV6, StorageEntryMetadataV7, StorageEntryMetadataV8, StorageEntryMetadataV9, StorageEntryModifierLatest, StorageEntryModifierV10, StorageEntryModifierV6, StorageEntryModifierV7, StorageEntryModifierV8, StorageEntryModifierV9, StorageEntryTypeLatest, StorageEntryTypeV10, StorageEntryTypeV6, StorageEntryTypeV7, StorageEntryTypeV8, StorageEntryTypeV9, StorageFunctionMetadataV0, StorageFunctionMetadataV1, StorageFunctionMetadataV2, StorageFunctionMetadataV3, StorageFunctionMetadataV4, StorageFunctionMetadataV5, StorageFunctionModifierV0, StorageFunctionModifierV1, StorageFunctionModifierV2, StorageFunctionModifierV3, StorageFunctionModifierV4, StorageFunctionModifierV5, StorageFunctionTypeV0, StorageFunctionTypeV1, StorageFunctionTypeV2, StorageFunctionTypeV3, StorageFunctionTypeV4, StorageFunctionTypeV5, StorageMetadataV0, StorageMetadataV10, StorageMetadataV7, StorageMetadataV8, StorageMetadataV9 } from '@polkadot/types/interfaces/metadata'; import { ApiId, BlockHash, ChainProperties, ExtrinsicOrHash, ExtrinsicStatus, Health, KeyValueOption, NetworkState, PeerInfo, RpcMethods, RuntimeDispatchInfo, RuntimeVersion, RuntimeVersionApi, StorageChangeSet } from '@polkadot/types/interfaces/rpc'; export interface InterfaceRegistry { @@ -1129,6 +1129,93 @@ export interface InterfaceRegistry { StorageMetadataV8: StorageMetadataV8; 'Option': Option; 'Vec': Vec; + DoubleMapTypeV9: DoubleMapTypeV9; + 'Option': Option; + 'Vec': Vec; + ErrorMetadataV9: ErrorMetadataV9; + 'Option': Option; + 'Vec': Vec; + EventMetadataV9: EventMetadataV9; + 'Option': Option; + 'Vec': Vec; + FunctionArgumentMetadataV9: FunctionArgumentMetadataV9; + 'Option': Option; + 'Vec': Vec; + FunctionMetadataV9: FunctionMetadataV9; + 'Option': Option; + 'Vec': Vec; + MapTypeV9: MapTypeV9; + 'Option': Option; + 'Vec': Vec; + MetadataV9: MetadataV9; + 'Option': Option; + 'Vec': Vec; + ModuleConstantMetadataV9: ModuleConstantMetadataV9; + 'Option': Option; + 'Vec': Vec; + ModuleMetadataV9: ModuleMetadataV9; + 'Option': Option; + 'Vec': Vec; + PlainTypeV9: PlainTypeV9; + 'Option': Option; + 'Vec': Vec; + StorageEntryModifierV9: StorageEntryModifierV9; + 'Option': Option; + 'Vec': Vec; + StorageEntryMetadataV9: StorageEntryMetadataV9; + 'Option': Option; + 'Vec': Vec; + StorageEntryTypeV9: StorageEntryTypeV9; + 'Option': Option; + 'Vec': Vec; + StorageMetadataV9: StorageMetadataV9; + 'Option': Option; + 'Vec': Vec; + DoubleMapTypeV10: DoubleMapTypeV10; + 'Option': Option; + 'Vec': Vec; + ErrorMetadataV10: ErrorMetadataV10; + 'Option': Option; + 'Vec': Vec; + EventMetadataV10: EventMetadataV10; + 'Option': Option; + 'Vec': Vec; + FunctionArgumentMetadataV10: FunctionArgumentMetadataV10; + 'Option': Option; + 'Vec': Vec; + FunctionMetadataV10: FunctionMetadataV10; + 'Option': Option; + 'Vec': Vec; + MapKindV10: MapKindV10; + 'Option': Option; + 'Vec': Vec; + MapTypeV10: MapTypeV10; + 'Option': Option; + 'Vec': Vec; + MetadataV10: MetadataV10; + 'Option': Option; + 'Vec': Vec; + ModuleConstantMetadataV10: ModuleConstantMetadataV10; + 'Option': Option; + 'Vec': Vec; + ModuleMetadataV10: ModuleMetadataV10; + 'Option': Option; + 'Vec': Vec; + PlainTypeV10: PlainTypeV10; + 'Option': Option; + 'Vec': Vec; + StorageEntryModifierV10: StorageEntryModifierV10; + 'Option': Option; + 'Vec': Vec; + StorageEntryMetadataV10: StorageEntryMetadataV10; + 'Option': Option; + 'Vec': Vec; + StorageEntryTypeV10: StorageEntryTypeV10; + 'Option': Option; + 'Vec': Vec; + StorageMetadataV10: StorageMetadataV10; + 'Option': Option; + 'Vec': Vec; EventMetadataLatest: EventMetadataLatest; 'Option': Option; 'Vec': Vec; @@ -1159,6 +1246,9 @@ export interface InterfaceRegistry { StorageEntryTypeLatest: StorageEntryTypeLatest; 'Option': Option; 'Vec': Vec; + MetadataAll: MetadataAll; + 'Option': Option; + 'Vec': Vec; ApiId: ApiId; 'Option': Option; 'Vec': Vec; diff --git a/packages/types/src/interfaces/metadata/definitions.ts b/packages/types/src/interfaces/metadata/definitions.ts index 366a8e7ec4..5b42700e72 100644 --- a/packages/types/src/interfaces/metadata/definitions.ts +++ b/packages/types/src/interfaces/metadata/definitions.ts @@ -339,16 +339,97 @@ export default { StorageEntryTypeV8: 'StorageEntryTypeV7', StorageMetadataV8: 'StorageMetadataV7', + // v9 + DoubleMapTypeV9: 'DoubleMapTypeV8', + ErrorMetadataV9: 'ErrorMetadataV8', + EventMetadataV9: 'EventMetadataV8', + FunctionArgumentMetadataV9: 'FunctionArgumentMetadataV8', + FunctionMetadataV9: 'FunctionMetadataV8', + MapTypeV9: 'MapTypeV8', + MetadataV9: 'MetadataV8', + ModuleConstantMetadataV9: 'ModuleConstantMetadataV8', + ModuleMetadataV9: 'ModuleMetadataV8', + PlainTypeV9: 'Type', + StorageEntryModifierV9: 'StorageEntryModifierV8', + StorageEntryMetadataV9: 'StorageEntryMetadataV8', + StorageEntryTypeV9: 'StorageEntryTypeV8', + StorageMetadataV9: 'StorageMetadataV8', + + // v10 + DoubleMapTypeV10: 'DoubleMapTypeV9', + ErrorMetadataV10: 'ErrorMetadataV9', + EventMetadataV10: 'EventMetadataV9', + FunctionArgumentMetadataV10: 'FunctionArgumentMetadataV9', + FunctionMetadataV10: 'FunctionMetadataV9', + MapKindV10: { + _enum: ['Map', 'LinkedMap', 'PrefixedMap'] + }, + MapTypeV10: { + hasher: 'StorageHasher', + key: 'Type', + value: 'Type', + kind: 'MapKindV10' + }, + MetadataV10: { + modules: 'Vec' + }, + ModuleConstantMetadataV10: 'ModuleConstantMetadataV9', + ModuleMetadataV10: { + name: 'Text', + storage: 'Option', + calls: 'Option>', + events: 'Option>', + constants: 'Vec', + errors: 'Vec' + }, + PlainTypeV10: 'Type', + StorageEntryModifierV10: 'StorageEntryModifierV9', + StorageEntryMetadataV10: { + name: 'Text', + modifier: 'StorageEntryModifierV10', + type: 'StorageEntryTypeV10', + fallback: 'Bytes', + documentation: 'Vec' + }, + StorageEntryTypeV10: { + _enum: { + Plain: 'PlainTypeV10', + Map: 'MapTypeV10', + DoubleMap: 'DoubleMapTypeV10' + } + }, + StorageMetadataV10: { + prefix: 'Text', + items: 'Vec' + }, + // This always maps to the latest - EventMetadataLatest: 'EventMetadataV8', - FunctionArgumentMetadataLatest: 'FunctionArgumentMetadataV8', - FunctionMetadataLatest: 'FunctionMetadataV8', - MetadataLatest: 'MetadataV8', - ModuleConstantMetadataLatest: 'ModuleConstantMetadataV8', - ModuleMetadataLatest: 'ModuleMetadataV8', - PlainTypeLatest: 'PlainTypeV8', - StorageEntryMetadataLatest: 'StorageEntryMetadataV8', - StorageEntryModifierLatest: 'StorageEntryModifierV8', - StorageEntryTypeLatest: 'StorageEntryTypeV8' + EventMetadataLatest: 'EventMetadataV10', + FunctionArgumentMetadataLatest: 'FunctionArgumentMetadataV10', + FunctionMetadataLatest: 'FunctionMetadataV10', + MetadataLatest: 'MetadataV10', + ModuleConstantMetadataLatest: 'ModuleConstantMetadataV10', + ModuleMetadataLatest: 'ModuleMetadataV10', + PlainTypeLatest: 'PlainTypeV10', + StorageEntryMetadataLatest: 'StorageEntryMetadataV10', + StorageEntryModifierLatest: 'StorageEntryModifierV10', + StorageEntryTypeLatest: 'StorageEntryTypeV10', + + // the enum containing all the mappings + MetadataAll: { + _enum: { + V0: 'MetadataV0', + V1: 'MetadataV1', + V2: 'MetadataV2', + V3: 'MetadataV3', + V4: 'MetadataV4', + V5: 'MetadataV5', + V6: 'MetadataV6', + V7: 'MetadataV7', + V8: 'MetadataV8', + V9: 'MetadataV9', + V10: 'MetadataV10' + } + } } }; diff --git a/packages/types/src/interfaces/metadata/types.ts b/packages/types/src/interfaces/metadata/types.ts index 39eb8fb6ba..9936517334 100644 --- a/packages/types/src/interfaces/metadata/types.ts +++ b/packages/types/src/interfaces/metadata/types.ts @@ -13,6 +13,9 @@ export interface CallMetadataV0 extends Struct { readonly functions: Vec; } +/** DoubleMapTypeV9 */ +export interface DoubleMapTypeV10 extends DoubleMapTypeV9 {} + /** Struct */ export interface DoubleMapTypeV3 extends Struct { /** Type */ @@ -62,6 +65,12 @@ export interface DoubleMapTypeV7 extends DoubleMapTypeV6 {} /** DoubleMapTypeV7 */ export interface DoubleMapTypeV8 extends DoubleMapTypeV7 {} +/** DoubleMapTypeV8 */ +export interface DoubleMapTypeV9 extends DoubleMapTypeV8 {} + +/** ErrorMetadataV9 */ +export interface ErrorMetadataV10 extends ErrorMetadataV9 {} + /** Struct */ export interface ErrorMetadataV8 extends Struct { /** Text */ @@ -70,8 +79,11 @@ export interface ErrorMetadataV8 extends Struct { readonly documentation: Vec; } -/** EventMetadataV8 */ -export interface EventMetadataLatest extends EventMetadataV8 {} +/** ErrorMetadataV8 */ +export interface ErrorMetadataV9 extends ErrorMetadataV8 {} + +/** EventMetadataV10 */ +export interface EventMetadataLatest extends EventMetadataV10 {} /** Struct */ export interface EventMetadataV0 extends Struct { @@ -86,6 +98,9 @@ export interface EventMetadataV0 extends Struct { /** EventMetadataV0 */ export interface EventMetadataV1 extends EventMetadataV0 {} +/** EventMetadataV9 */ +export interface EventMetadataV10 extends EventMetadataV9 {} + /** EventMetadataV1 */ export interface EventMetadataV2 extends EventMetadataV1 {} @@ -107,8 +122,11 @@ export interface EventMetadataV7 extends EventMetadataV6 {} /** EventMetadataV7 */ export interface EventMetadataV8 extends EventMetadataV7 {} -/** FunctionArgumentMetadataV8 */ -export interface FunctionArgumentMetadataLatest extends FunctionArgumentMetadataV8 {} +/** EventMetadataV8 */ +export interface EventMetadataV9 extends EventMetadataV8 {} + +/** FunctionArgumentMetadataV10 */ +export interface FunctionArgumentMetadataLatest extends FunctionArgumentMetadataV10 {} /** Struct */ export interface FunctionArgumentMetadataV0 extends Struct { @@ -121,6 +139,9 @@ export interface FunctionArgumentMetadataV0 extends Struct { /** FunctionArgumentMetadataV0 */ export interface FunctionArgumentMetadataV1 extends FunctionArgumentMetadataV0 {} +/** FunctionArgumentMetadataV9 */ +export interface FunctionArgumentMetadataV10 extends FunctionArgumentMetadataV9 {} + /** FunctionArgumentMetadataV1 */ export interface FunctionArgumentMetadataV2 extends FunctionArgumentMetadataV1 {} @@ -142,8 +163,11 @@ export interface FunctionArgumentMetadataV7 extends FunctionArgumentMetadataV6 { /** FunctionArgumentMetadataV7 */ export interface FunctionArgumentMetadataV8 extends FunctionArgumentMetadataV7 {} -/** FunctionMetadataV8 */ -export interface FunctionMetadataLatest extends FunctionMetadataV8 {} +/** FunctionArgumentMetadataV8 */ +export interface FunctionArgumentMetadataV9 extends FunctionArgumentMetadataV8 {} + +/** FunctionMetadataV10 */ +export interface FunctionMetadataLatest extends FunctionMetadataV10 {} /** Struct */ export interface FunctionMetadataV0 extends Struct { @@ -167,6 +191,9 @@ export interface FunctionMetadataV1 extends Struct { readonly documentation: Vec; } +/** FunctionMetadataV9 */ +export interface FunctionMetadataV10 extends FunctionMetadataV9 {} + /** FunctionMetadataV1 */ export interface FunctionMetadataV2 extends FunctionMetadataV1 {} @@ -188,6 +215,19 @@ export interface FunctionMetadataV7 extends FunctionMetadataV6 {} /** FunctionMetadataV7 */ export interface FunctionMetadataV8 extends FunctionMetadataV7 {} +/** FunctionMetadataV8 */ +export interface FunctionMetadataV9 extends FunctionMetadataV8 {} + +/** Enum */ +export interface MapKindV10 extends Enum { + /** 0:: Map */ + readonly isMap: boolean; + /** 1:: LinkedMap */ + readonly isLinkedMap: boolean; + /** 2:: PrefixedMap */ + readonly isPrefixedMap: boolean; +} + /** Struct */ export interface MapTypeV0 extends Struct { /** Type */ @@ -196,6 +236,18 @@ export interface MapTypeV0 extends Struct { readonly value: Type; } +/** Struct */ +export interface MapTypeV10 extends Struct { + /** StorageHasher */ + readonly hasher: StorageHasher; + /** Type */ + readonly key: Type; + /** Type */ + readonly value: Type; + /** MapKindV10 */ + readonly kind: MapKindV10; +} + /** Struct */ export interface MapTypeV2 extends Struct { /** Type */ @@ -233,8 +285,59 @@ export interface MapTypeV7 extends MapTypeV6 {} /** MapTypeV7 */ export interface MapTypeV8 extends MapTypeV7 {} -/** MetadataV8 */ -export interface MetadataLatest extends MetadataV8 {} +/** MapTypeV8 */ +export interface MapTypeV9 extends MapTypeV8 {} + +/** Enum */ +export interface MetadataAll extends Enum { + /** 0:: V0(MetadataV0) */ + readonly isV0: boolean; + /** MetadataV0 */ + readonly asV0: MetadataV0; + /** 1:: V1(MetadataV1) */ + readonly isV1: boolean; + /** MetadataV1 */ + readonly asV1: MetadataV1; + /** 2:: V2(MetadataV2) */ + readonly isV2: boolean; + /** MetadataV2 */ + readonly asV2: MetadataV2; + /** 3:: V3(MetadataV3) */ + readonly isV3: boolean; + /** MetadataV3 */ + readonly asV3: MetadataV3; + /** 4:: V4(MetadataV4) */ + readonly isV4: boolean; + /** MetadataV4 */ + readonly asV4: MetadataV4; + /** 5:: V5(MetadataV5) */ + readonly isV5: boolean; + /** MetadataV5 */ + readonly asV5: MetadataV5; + /** 6:: V6(MetadataV6) */ + readonly isV6: boolean; + /** MetadataV6 */ + readonly asV6: MetadataV6; + /** 7:: V7(MetadataV7) */ + readonly isV7: boolean; + /** MetadataV7 */ + readonly asV7: MetadataV7; + /** 8:: V8(MetadataV8) */ + readonly isV8: boolean; + /** MetadataV8 */ + readonly asV8: MetadataV8; + /** 9:: V9(MetadataV9) */ + readonly isV9: boolean; + /** MetadataV9 */ + readonly asV9: MetadataV9; + /** 10:: V10(MetadataV10) */ + readonly isV10: boolean; + /** MetadataV10 */ + readonly asV10: MetadataV10; +} + +/** MetadataV10 */ +export interface MetadataLatest extends MetadataV10 {} /** Struct */ export interface MetadataV0 extends Struct { @@ -252,6 +355,12 @@ export interface MetadataV1 extends Struct { readonly modules: Vec; } +/** Struct */ +export interface MetadataV10 extends Struct { + /** Vec */ + readonly modules: Vec; +} + /** Struct */ export interface MetadataV2 extends Struct { /** Vec */ @@ -294,8 +403,14 @@ export interface MetadataV8 extends Struct { readonly modules: Vec; } -/** ModuleConstantMetadataV8 */ -export interface ModuleConstantMetadataLatest extends ModuleConstantMetadataV8 {} +/** MetadataV8 */ +export interface MetadataV9 extends MetadataV8 {} + +/** ModuleConstantMetadataV10 */ +export interface ModuleConstantMetadataLatest extends ModuleConstantMetadataV10 {} + +/** ModuleConstantMetadataV9 */ +export interface ModuleConstantMetadataV10 extends ModuleConstantMetadataV9 {} /** Struct */ export interface ModuleConstantMetadataV6 extends Struct { @@ -315,8 +430,11 @@ export interface ModuleConstantMetadataV7 extends ModuleConstantMetadataV6 {} /** ModuleConstantMetadataV7 */ export interface ModuleConstantMetadataV8 extends ModuleConstantMetadataV7 {} -/** ModuleMetadataV8 */ -export interface ModuleMetadataLatest extends ModuleMetadataV8 {} +/** ModuleConstantMetadataV8 */ +export interface ModuleConstantMetadataV9 extends ModuleConstantMetadataV8 {} + +/** ModuleMetadataV10 */ +export interface ModuleMetadataLatest extends ModuleMetadataV10 {} /** Struct */ export interface ModuleMetadataV0 extends Struct { @@ -340,6 +458,22 @@ export interface ModuleMetadataV1 extends Struct { readonly events: Option>; } +/** Struct */ +export interface ModuleMetadataV10 extends Struct { + /** Text */ + readonly name: Text; + /** Option */ + readonly storage: Option; + /** Option> */ + readonly calls: Option>; + /** Option> */ + readonly events: Option>; + /** Vec */ + readonly constants: Vec; + /** Vec */ + readonly errors: Vec; +} + /** Struct */ export interface ModuleMetadataV2 extends Struct { /** Text */ @@ -442,6 +576,9 @@ export interface ModuleMetadataV8 extends Struct { readonly errors: Vec; } +/** ModuleMetadataV8 */ +export interface ModuleMetadataV9 extends ModuleMetadataV8 {} + /** Struct */ export interface OuterDispatchCallV0 extends Struct { /** Text */ @@ -474,12 +611,15 @@ export interface OuterEventMetadataV0 extends Struct { readonly events: Vec; } -/** PlainTypeV8 */ -export interface PlainTypeLatest extends PlainTypeV8 {} +/** PlainTypeV10 */ +export interface PlainTypeLatest extends PlainTypeV10 {} /** Type */ export interface PlainTypeV0 extends Type {} +/** Type */ +export interface PlainTypeV10 extends Type {} + /** Type */ export interface PlainTypeV2 extends Type {} @@ -501,6 +641,9 @@ export interface PlainTypeV7 extends Type {} /** Type */ export interface PlainTypeV8 extends Type {} +/** Type */ +export interface PlainTypeV9 extends Type {} + /** Struct */ export interface RuntimeModuleMetadataV0 extends Struct { /** Text */ @@ -511,8 +654,22 @@ export interface RuntimeModuleMetadataV0 extends Struct { readonly storage: Option; } -/** StorageEntryMetadataV8 */ -export interface StorageEntryMetadataLatest extends StorageEntryMetadataV8 {} +/** StorageEntryMetadataV10 */ +export interface StorageEntryMetadataLatest extends StorageEntryMetadataV10 {} + +/** Struct */ +export interface StorageEntryMetadataV10 extends Struct { + /** Text */ + readonly name: Text; + /** StorageEntryModifierV10 */ + readonly modifier: StorageEntryModifierV10; + /** StorageEntryTypeV10 */ + readonly type: StorageEntryTypeV10; + /** Bytes */ + readonly fallback: Bytes; + /** Vec */ + readonly documentation: Vec; +} /** StorageFunctionMetadataV5 */ export interface StorageEntryMetadataV6 extends StorageFunctionMetadataV5 {} @@ -523,8 +680,14 @@ export interface StorageEntryMetadataV7 extends StorageEntryMetadataV6 {} /** StorageEntryMetadataV7 */ export interface StorageEntryMetadataV8 extends StorageEntryMetadataV7 {} -/** StorageEntryModifierV8 */ -export interface StorageEntryModifierLatest extends StorageEntryModifierV8 {} +/** StorageEntryMetadataV8 */ +export interface StorageEntryMetadataV9 extends StorageEntryMetadataV8 {} + +/** StorageEntryModifierV10 */ +export interface StorageEntryModifierLatest extends StorageEntryModifierV10 {} + +/** StorageEntryModifierV9 */ +export interface StorageEntryModifierV10 extends StorageEntryModifierV9 {} /** StorageFunctionModifierV5 */ export interface StorageEntryModifierV6 extends StorageFunctionModifierV5 {} @@ -535,8 +698,27 @@ export interface StorageEntryModifierV7 extends StorageEntryModifierV6 {} /** StorageEntryModifierV7 */ export interface StorageEntryModifierV8 extends StorageEntryModifierV7 {} -/** StorageEntryTypeV8 */ -export interface StorageEntryTypeLatest extends StorageEntryTypeV8 {} +/** StorageEntryModifierV8 */ +export interface StorageEntryModifierV9 extends StorageEntryModifierV8 {} + +/** StorageEntryTypeV10 */ +export interface StorageEntryTypeLatest extends StorageEntryTypeV10 {} + +/** Enum */ +export interface StorageEntryTypeV10 extends Enum { + /** 0:: Plain(PlainTypeV10) */ + readonly isPlain: boolean; + /** PlainTypeV10 */ + readonly asPlain: PlainTypeV10; + /** 1:: Map(MapTypeV10) */ + readonly isMap: boolean; + /** MapTypeV10 */ + readonly asMap: MapTypeV10; + /** 2:: DoubleMap(DoubleMapTypeV10) */ + readonly isDoubleMap: boolean; + /** DoubleMapTypeV10 */ + readonly asDoubleMap: DoubleMapTypeV10; +} /** StorageFunctionTypeV5 */ export interface StorageEntryTypeV6 extends StorageFunctionTypeV5 {} @@ -547,6 +729,9 @@ export interface StorageEntryTypeV7 extends StorageEntryTypeV6 {} /** StorageEntryTypeV7 */ export interface StorageEntryTypeV8 extends StorageEntryTypeV7 {} +/** StorageEntryTypeV8 */ +export interface StorageEntryTypeV9 extends StorageEntryTypeV8 {} + /** Struct */ export interface StorageFunctionMetadataV0 extends Struct { /** Text */ @@ -728,6 +913,14 @@ export interface StorageMetadataV0 extends Struct { readonly functions: Vec; } +/** Struct */ +export interface StorageMetadataV10 extends Struct { + /** Text */ + readonly prefix: Text; + /** Vec */ + readonly items: Vec; +} + /** Struct */ export interface StorageMetadataV7 extends Struct { /** Text */ @@ -738,3 +931,6 @@ export interface StorageMetadataV7 extends Struct { /** StorageMetadataV7 */ export interface StorageMetadataV8 extends StorageMetadataV7 {} + +/** StorageMetadataV8 */ +export interface StorageMetadataV9 extends StorageMetadataV8 {} diff --git a/packages/types/src/primitive/StorageKey.ts b/packages/types/src/primitive/StorageKey.ts index f25519657b..a31143f53d 100644 --- a/packages/types/src/primitive/StorageKey.ts +++ b/packages/types/src/primitive/StorageKey.ts @@ -2,8 +2,8 @@ // This software may be modified and distributed under the terms // of the Apache-2.0 license. See the LICENSE file for details. -import { StorageEntryMetadataLatest } from '../interfaces/metadata'; -import { AnyU8a, Codec, Registry } from '../types'; +import { StorageEntryMetadataLatest, StorageEntryTypeLatest } from '../interfaces/metadata'; +import { AnyU8a, Registry } from '../types'; import { assert, isFunction, isString, isU8a } from '@polkadot/util'; @@ -11,7 +11,7 @@ import Bytes from './Bytes'; export interface StorageEntry { (arg?: any): Uint8Array; - headKey?: Uint8Array; + iterKey?: Uint8Array; meta: StorageEntryMetadataLatest; method: string; prefix: string; @@ -30,39 +30,23 @@ interface StorageKeyExtra { section: string; } -// eslint-disable-next-line @typescript-eslint/ban-types -type Text = String & Codec; - -interface StorageType { - asDoubleMap: { - value: Text; - }; - asMap: { - linked: { isTrue: boolean }; - key: Text; - value: Text; - }; - asPlain: Text; - isDoubleMap: boolean; - isMap: boolean; - isPlain: boolean; -} - // we unwrap the type here, turning into an output usable for createType -export function unwrapStorageType (type: StorageType): string { - if (type.isDoubleMap) { - return `DoubleMap<${type.asDoubleMap.value.toString()}>`; +export function unwrapStorageType (type: StorageEntryTypeLatest): string { + if (type.isPlain) { + return type.asPlain.toString(); + } else if (type.isDoubleMap) { + return type.asDoubleMap.value.toString(); } - if (type.isMap) { - if (type.asMap.linked.isTrue) { - return `(${type.asMap.value.toString()}, Linkage<${type.asMap.key.toString()}>)`; - } + const map = type.asMap; - return type.asMap.value.toString(); + if (map.kind.isLinkedMap) { + return `(${map.value.toString()}, Linkage<${map.key.toString()}>)`; + } else if (map.kind.isPrefixedMap) { + // We are not 100% sure here yet if we are doing something specific or not } - return type.asPlain.toString(); + return map.value.toString(); } /** @@ -177,4 +161,22 @@ export default class StorageKey extends Bytes { public get section (): string | undefined { return this._section; } + + /** + * @description Sets the meta for this key + */ + public setMeta (meta?: StorageEntryMetadataLatest): this { + this._meta = meta; + + return this; + } + + /** + * @description Sets the output type for this storage key + */ + public setOutputType (outputType?: string): this { + this._outputType = outputType; + + return this; + } } diff --git a/packages/types/src/scripts/generateTypes/tsDef.ts b/packages/types/src/scripts/generateTypes/tsDef.ts index 0a783a2f81..49b14fa78a 100644 --- a/packages/types/src/scripts/generateTypes/tsDef.ts +++ b/packages/types/src/scripts/generateTypes/tsDef.ts @@ -228,7 +228,6 @@ function generateInterfaces ({ types }: { types: Record }, imports: const generators = { [TypeDefInfo.BTreeMap]: tsBTreeMap, [TypeDefInfo.Compact]: tsCompact, - [TypeDefInfo.DoubleMap]: errorUnhandled, [TypeDefInfo.Enum]: tsEnum, [TypeDefInfo.Linkage]: errorUnhandled, [TypeDefInfo.Null]: errorUnhandled,