@fanitrade/fani-solana-tokenlist
Version:
Fanitrade Token Registry
359 lines • 23.3 kB
JavaScript
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.programIds = exports.PROGRAM_IDS = exports.ENABLE_FEES_INPUT = exports.SYSTEM = exports.METAPLEX_ID = exports.AUCTION_ID = exports.VAULT_ID = exports.MEMO_ID = exports.METADATA_PROGRAM_ID = exports.BPF_UPGRADE_LOADER_ID = exports.SPL_ASSOCIATED_TOKEN_ACCOUNT_PROGRAM_ID = exports.TOKEN_PROGRAM_ID = exports.WRAPPED_SOL_MINT = exports.METADATA_SCHEMA = exports.Data = exports.Creator = exports.Edition = exports.EditionMarker = exports.MasterEditionV2 = exports.MasterEditionV1 = exports.Metadata = exports.decodeMetadata = exports.findProgramAddress = exports.EDITION_MARKER_BIT_SIZE = exports.RESERVATION = exports.EDITION = exports.METADATA_PREFIX = exports.extendBorsh = void 0;
const web3_js_1 = require("@solana/web3.js");
const borsh_1 = require("borsh");
const bs58_1 = __importDefault(require("bs58"));
const extendBorsh = () => {
borsh_1.BinaryReader.prototype.readPubkey = function () {
const reader = this;
const array = reader.readFixedArray(32);
return new web3_js_1.PublicKey(array);
};
borsh_1.BinaryWriter.prototype.writePubkey = function (value) {
const writer = this;
writer.writeFixedArray(value.toBuffer());
};
borsh_1.BinaryReader.prototype.readPubkeyAsString = function () {
const reader = this;
const array = reader.readFixedArray(32);
return bs58_1.default.encode(array);
};
borsh_1.BinaryWriter.prototype.writePubkeyAsString = function (value) {
const writer = this;
writer.writeFixedArray(bs58_1.default.decode(value));
};
};
exports.extendBorsh = extendBorsh;
exports.extendBorsh();
const MetadataKey = {
Uninitialized: 0,
MetadataV1: 4,
EditionV1: 1,
MasterEditionV1: 2,
MasterEditionV2: 6,
EditionMarker: 7
};
exports.METADATA_PREFIX = 'metadata';
exports.EDITION = 'edition';
exports.RESERVATION = 'reservation';
exports.EDITION_MARKER_BIT_SIZE = 248;
const findProgramAddress = async (seeds, programId) => {
const key = `pda-${seeds.reduce((agg, item) => agg + item.toString('hex'), '')}${programId.toString()}`;
const cached = localStorage.getItem(key);
if (cached) {
const value = JSON.parse(cached);
return [new web3_js_1.PublicKey(value.key), parseInt(value.nonce)];
}
const result = await web3_js_1.PublicKey.findProgramAddress(seeds, programId);
localStorage.setItem(key, JSON.stringify({
key: result[0].toBase58(),
nonce: result[1]
}));
return result;
};
exports.findProgramAddress = findProgramAddress;
const decodeMetadata = (buffer) => {
let metadata;
try {
metadata = borsh_1.deserializeUnchecked(exports.METADATA_SCHEMA, Metadata, buffer);
}
catch (_a) {
return;
}
return metadata;
};
exports.decodeMetadata = decodeMetadata;
async function getEdition(tokenMint) {
const PROGRAM_IDS = exports.programIds();
return (await exports.findProgramAddress([
Buffer.from(exports.METADATA_PREFIX),
PROGRAM_IDS.metadata.toBuffer(),
tokenMint.toBuffer(),
Buffer.from(exports.EDITION)
], PROGRAM_IDS.metadata))[0];
}
class Metadata {
constructor(args) {
this.key = MetadataKey.MetadataV1;
this.updateAuthority = args.updateAuthority;
this.mint = args.mint;
this.data = args.data;
this.primarySaleHappened = args.primarySaleHappened;
this.isMutable = args.isMutable;
}
async init() {
const edition = await getEdition(this.mint);
this.edition = edition;
this.masterEdition = edition;
}
}
exports.Metadata = Metadata;
class MasterEditionV1 {
constructor(args) {
this.key = MetadataKey.MasterEditionV1;
this.supply = args.supply;
this.maxSupply = args.maxSupply;
this.printingMint = args.printingMint;
this.oneTimePrintingAuthorizationMint =
args.oneTimePrintingAuthorizationMint;
}
}
exports.MasterEditionV1 = MasterEditionV1;
class MasterEditionV2 {
constructor(args) {
this.key = MetadataKey.MasterEditionV2;
this.supply = args.supply;
this.maxSupply = args.maxSupply;
}
}
exports.MasterEditionV2 = MasterEditionV2;
class CreateMetadataArgs {
constructor(args) {
this.data = args.data;
this.isMutable = args.isMutable;
}
}
class UpdateMetadataArgs {
constructor(args) {
this.data = args.data ? args.data : null;
this.updateAuthority = args.updateAuthority
? new web3_js_1.PublicKey(args.updateAuthority)
: null;
this.primarySaleHappened = args.primarySaleHappened;
}
}
class CreateMasterEditionArgs {
constructor(args) {
this.maxSupply = args.maxSupply;
}
}
class MintPrintingTokensArgs {
constructor(args) {
this.supply = args.supply;
}
}
class EditionMarker {
constructor(args) {
this.key = MetadataKey.EditionMarker;
this.ledger = args.ledger;
}
editionTaken(edition) {
const editionOffset = edition % exports.EDITION_MARKER_BIT_SIZE;
const indexOffset = Math.floor(editionOffset / 8);
if (indexOffset > 30) {
throw new Error('bad index for edition');
}
const positionInBitsetFromRight = 7 - (editionOffset % 8);
const mask = Math.pow(2, positionInBitsetFromRight);
const appliedMask = this.ledger[indexOffset] & mask;
return appliedMask !== 0;
}
}
exports.EditionMarker = EditionMarker;
class Edition {
constructor(args) {
this.key = MetadataKey.EditionV1;
this.parent = args.parent;
this.edition = args.edition;
}
}
exports.Edition = Edition;
class Creator {
constructor(args) {
this.address = args.address;
this.verified = args.verified;
this.share = args.share;
}
}
exports.Creator = Creator;
class Data {
constructor(args) {
this.name = args.name;
this.symbol = args.symbol;
this.uri = args.uri;
this.sellerFeeBasisPoints = args.sellerFeeBasisPoints;
this.creators = args.creators;
}
}
exports.Data = Data;
exports.METADATA_SCHEMA = new Map([
[
CreateMetadataArgs,
{
kind: 'struct',
fields: [
['instruction', 'u8'],
['data', Data],
['isMutable', 'u8'] // bool
]
}
],
[
UpdateMetadataArgs,
{
kind: 'struct',
fields: [
['instruction', 'u8'],
['data', { kind: 'option', type: Data }],
['updateAuthority', { kind: 'option', type: 'pubkey' }],
['primarySaleHappened', { kind: 'option', type: 'u8' }]
]
}
],
[
CreateMasterEditionArgs,
{
kind: 'struct',
fields: [
['instruction', 'u8'],
['maxSupply', { kind: 'option', type: 'u64' }]
]
}
],
[
MintPrintingTokensArgs,
{
kind: 'struct',
fields: [
['instruction', 'u8'],
['supply', 'u64']
]
}
],
[
MasterEditionV1,
{
kind: 'struct',
fields: [
['key', 'u8'],
['supply', 'u64'],
['maxSupply', { kind: 'option', type: 'u64' }],
['printingMint', 'pubkey'],
['oneTimePrintingAuthorizationMint', 'pubkey']
]
}
],
[
MasterEditionV2,
{
kind: 'struct',
fields: [
['key', 'u8'],
['supply', 'u64'],
['maxSupply', { kind: 'option', type: 'u64' }]
]
}
],
[
Edition,
{
kind: 'struct',
fields: [
['key', 'u8'],
['parent', 'pubkey'],
['edition', 'u64']
]
}
],
[
Data,
{
kind: 'struct',
fields: [
['name', 'string'],
['symbol', 'string'],
['uri', 'string'],
['sellerFeeBasisPoints', 'u16'],
['creators', { kind: 'option', type: [Creator] }]
]
}
],
[
Creator,
{
kind: 'struct',
fields: [
['address', 'pubkey'],
['verified', 'u8'],
['share', 'u8']
]
}
],
[
Metadata,
{
kind: 'struct',
fields: [
['key', 'u8'],
['updateAuthority', 'pubkey'],
['mint', 'pubkey'],
['data', Data],
['primarySaleHappened', 'u8'],
['isMutable', 'u8'] // bool
]
}
],
[
EditionMarker,
{
kind: 'struct',
fields: [
['key', 'u8'],
['ledger', [31]]
]
}
]
]);
exports.WRAPPED_SOL_MINT = new web3_js_1.PublicKey('So11111111111111111111111111111111111111112');
exports.TOKEN_PROGRAM_ID = new web3_js_1.PublicKey('TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA');
exports.SPL_ASSOCIATED_TOKEN_ACCOUNT_PROGRAM_ID = new web3_js_1.PublicKey('ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL');
exports.BPF_UPGRADE_LOADER_ID = new web3_js_1.PublicKey('BPFLoaderUpgradeab1e11111111111111111111111');
exports.METADATA_PROGRAM_ID = new web3_js_1.PublicKey('metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s'
// 'GCUQ7oWCzgtRKnHnuJGxpr5XVeEkxYUXwTKYcqGtxLv4',
);
exports.MEMO_ID = new web3_js_1.PublicKey('MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr');
exports.VAULT_ID = new web3_js_1.PublicKey('vau1zxA2LbssAUEF7Gpw91zMM1LvXrvpzJtmZ58rPsn'
// '41cCnZ1Z1upJdtsS1tzFGR34cPFgJLzvJFmgYKpCqkz7',
);
exports.AUCTION_ID = new web3_js_1.PublicKey('auctxRXPeJoc4817jDhf4HbjnhEcr1cCXenosMhK5R8'
// '6u5XVthCStUfmNrYhFsST94oKxzwEZfZFHFhiCnB2nR1',
);
exports.METAPLEX_ID = new web3_js_1.PublicKey('p1exdMJcjVao65QdewkaZRUnU6VPSXhus9n2GzWfh98'
// '98jcGaKLKx9vv33H9edLUXAydrSipHhJGDQuPXBVPVGp',
);
exports.SYSTEM = new web3_js_1.PublicKey('11111111111111111111111111111111');
exports.ENABLE_FEES_INPUT = false;
// legacy pools are used to show users contributions in those pools to allow for withdrawals of funds
exports.PROGRAM_IDS = [
{
name: 'mainnet-beta'
},
{
name: 'testnet'
},
{
name: 'devnet'
},
{
name: 'localnet'
}
];
const programIds = () => {
return {
token: exports.TOKEN_PROGRAM_ID,
associatedToken: exports.SPL_ASSOCIATED_TOKEN_ACCOUNT_PROGRAM_ID,
bpf_upgrade_loader: exports.BPF_UPGRADE_LOADER_ID,
system: exports.SYSTEM,
metadata: exports.METADATA_PROGRAM_ID,
memo: exports.MEMO_ID,
vault: exports.VAULT_ID,
auction: exports.AUCTION_ID,
metaplex: exports.METAPLEX_ID
};
};
exports.programIds = programIds;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWV0YWRhdGEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdXRpbHMvTWV0YWRhdGEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsNkNBQTRDO0FBQzVDLGlDQUF5RTtBQUN6RSxnREFBMEI7QUFFbkIsTUFBTSxXQUFXLEdBQUcsR0FBRyxFQUFFO0lBQzdCLG9CQUFZLENBQUMsU0FBaUIsQ0FBQyxVQUFVLEdBQUc7UUFDM0MsTUFBTSxNQUFNLEdBQUksSUFBZ0MsQ0FBQztRQUNqRCxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3hDLE9BQU8sSUFBSSxtQkFBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzlCLENBQUMsQ0FBQztJQUVELG9CQUFZLENBQUMsU0FBaUIsQ0FBQyxXQUFXLEdBQUcsVUFBVSxLQUFnQjtRQUN0RSxNQUFNLE1BQU0sR0FBSSxJQUFnQyxDQUFDO1FBQ2pELE1BQU0sQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDM0MsQ0FBQyxDQUFDO0lBRUQsb0JBQVksQ0FBQyxTQUFpQixDQUFDLGtCQUFrQixHQUFHO1FBQ25ELE1BQU0sTUFBTSxHQUFJLElBQWdDLENBQUM7UUFDakQsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN4QyxPQUFPLGNBQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDOUIsQ0FBQyxDQUFDO0lBRUQsb0JBQVksQ0FBQyxTQUFpQixDQUFDLG1CQUFtQixHQUFHLFVBQ3BELEtBQVU7UUFFVixNQUFNLE1BQU0sR0FBSSxJQUFnQyxDQUFDO1FBQ2pELE1BQU0sQ0FBQyxlQUFlLENBQUMsY0FBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQy9DLENBQUMsQ0FBQztBQUNKLENBQUMsQ0FBQztBQXhCVyxRQUFBLFdBQVcsZUF3QnRCO0FBRUYsbUJBQVcsRUFBRSxDQUFDO0FBRWQsTUFBTSxXQUFXLEdBQUc7SUFDbEIsYUFBYSxFQUFFLENBQUM7SUFDaEIsVUFBVSxFQUFFLENBQUM7SUFDYixTQUFTLEVBQUUsQ0FBQztJQUNaLGVBQWUsRUFBRSxDQUFDO0lBQ2xCLGVBQWUsRUFBRSxDQUFDO0lBQ2xCLGFBQWEsRUFBRSxDQUFDO0NBQ2pCLENBQUM7QUFFVyxRQUFBLGVBQWUsR0FBRyxVQUFVLENBQUM7QUFDN0IsUUFBQSxPQUFPLEdBQUcsU0FBUyxDQUFDO0FBQ3BCLFFBQUEsV0FBVyxHQUFHLGFBQWEsQ0FBQztBQUM1QixRQUFBLHVCQUF1QixHQUFHLEdBQUcsQ0FBQztBQUVwQyxNQUFNLGtCQUFrQixHQUFHLEtBQUssRUFBRSxLQUFVLEVBQUUsU0FBYyxFQUFFLEVBQUU7SUFDckUsTUFBTSxHQUFHLEdBQUcsT0FBTyxLQUFLLENBQUMsTUFBTSxDQUM3QixDQUFDLEdBQVEsRUFBRSxJQUFTLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUNuRCxFQUFFLENBQ0gsR0FBRyxTQUFTLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQztJQUMzQixNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3pDLElBQUksTUFBTSxFQUFFO1FBQ1YsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUVqQyxPQUFPLENBQUMsSUFBSSxtQkFBUyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxRQUFRLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7S0FDMUQ7SUFDRCxNQUFNLE1BQU0sR0FBRyxNQUFNLG1CQUFTLENBQUMsa0JBQWtCLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ3BFLFlBQVksQ0FBQyxPQUFPLENBQ2xCLEdBQUcsRUFDSCxJQUFJLENBQUMsU0FBUyxDQUFDO1FBQ2IsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUU7UUFDekIsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7S0FDakIsQ0FBQyxDQUNILENBQUM7SUFDRixPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDLENBQUM7QUFwQlcsUUFBQSxrQkFBa0Isc0JBb0I3QjtBQUVLLE1BQU0sY0FBYyxHQUFHLENBQUMsTUFBVyxFQUFFLEVBQUU7SUFDNUMsSUFBSSxRQUFRLENBQUM7SUFDYixJQUFJO1FBQ0YsUUFBUSxHQUFHLDRCQUFvQixDQUFDLHVCQUFlLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0tBQ3BFO0lBQUMsV0FBTTtRQUNOLE9BQU87S0FDUjtJQUNELE9BQU8sUUFBUSxDQUFDO0FBQ2xCLENBQUMsQ0FBQztBQVJXLFFBQUEsY0FBYyxrQkFRekI7QUFFRixLQUFLLFVBQVUsVUFBVSxDQUFDLFNBQWM7SUFDdEMsTUFBTSxXQUFXLEdBQUcsa0JBQVUsRUFBRSxDQUFDO0lBRWpDLE9BQU8sQ0FDTCxNQUFNLDBCQUFrQixDQUN0QjtRQUNFLE1BQU0sQ0FBQyxJQUFJLENBQUMsdUJBQWUsQ0FBQztRQUM1QixXQUFXLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRTtRQUMvQixTQUFTLENBQUMsUUFBUSxFQUFFO1FBQ3BCLE1BQU0sQ0FBQyxJQUFJLENBQUMsZUFBTyxDQUFDO0tBQ3JCLEVBQ0QsV0FBVyxDQUFDLFFBQVEsQ0FDckIsQ0FDRixDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQztBQUVELE1BQWEsUUFBUTtJQUVuQixZQUFZLElBQVM7UUFDbkIsSUFBSSxDQUFDLEdBQUcsR0FBRyxXQUFXLENBQUMsVUFBVSxDQUFDO1FBQ2xDLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQztRQUM1QyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDdEIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUM7UUFDcEQsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ2xDLENBQUM7SUFFRCxLQUFLLENBQUMsSUFBSTtRQUNSLE1BQU0sT0FBTyxHQUFHLE1BQU0sVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM1QyxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztRQUN2QixJQUFJLENBQUMsYUFBYSxHQUFHLE9BQU8sQ0FBQztJQUMvQixDQUFDO0NBQ0Y7QUFoQkQsNEJBZ0JDO0FBRUQsTUFBYSxlQUFlO0lBRTFCLFlBQVksSUFBUztRQUNuQixJQUFJLENBQUMsR0FBRyxHQUFHLFdBQVcsQ0FBQyxlQUFlLENBQUM7UUFDdkMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQzFCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztRQUNoQyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7UUFDdEMsSUFBSSxDQUFDLGdDQUFnQztZQUNuQyxJQUFJLENBQUMsZ0NBQWdDLENBQUM7SUFDMUMsQ0FBQztDQUNGO0FBVkQsMENBVUM7QUFFRCxNQUFhLGVBQWU7SUFFMUIsWUFBWSxJQUFTO1FBQ25CLElBQUksQ0FBQyxHQUFHLEdBQUcsV0FBVyxDQUFDLGVBQWUsQ0FBQztRQUN2QyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDMUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ2xDLENBQUM7Q0FDRjtBQVBELDBDQU9DO0FBRUQsTUFBTSxrQkFBa0I7SUFFdEIsWUFBWSxJQUFTO1FBQ25CLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztRQUN0QixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDbEMsQ0FBQztDQUNGO0FBQ0QsTUFBTSxrQkFBa0I7SUFFdEIsWUFBWSxJQUFTO1FBQ25CLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ3pDLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLGVBQWU7WUFDekMsQ0FBQyxDQUFDLElBQUksbUJBQVMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDO1lBQ3JDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDVCxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDO0lBQ3RELENBQUM7Q0FDRjtBQUVELE1BQU0sdUJBQXVCO0lBRTNCLFlBQVksSUFBUztRQUNuQixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDbEMsQ0FBQztDQUNGO0FBRUQsTUFBTSxzQkFBc0I7SUFFMUIsWUFBWSxJQUFTO1FBQ25CLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUM1QixDQUFDO0NBQ0Y7QUFFRCxNQUFhLGFBQWE7SUFFeEIsWUFBWSxJQUFTO1FBQ25CLElBQUksQ0FBQyxHQUFHLEdBQUcsV0FBVyxDQUFDLGFBQWEsQ0FBQztRQUNyQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDNUIsQ0FBQztJQUVELFlBQVksQ0FBQyxPQUFZO1FBQ3ZCLE1BQU0sYUFBYSxHQUFHLE9BQU8sR0FBRywrQkFBdUIsQ0FBQztRQUN4RCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUVsRCxJQUFJLFdBQVcsR0FBRyxFQUFFLEVBQUU7WUFDcEIsTUFBTSxJQUFJLEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1NBQzFDO1FBRUQsTUFBTSx5QkFBeUIsR0FBRyxDQUFDLEdBQUcsQ0FBQyxhQUFhLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFFMUQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUseUJBQXlCLENBQUMsQ0FBQztRQUVwRCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxHQUFHLElBQUksQ0FBQztRQUVwRCxPQUFPLFdBQVcsS0FBSyxDQUFDLENBQUM7SUFDM0IsQ0FBQztDQUNGO0FBdkJELHNDQXVCQztBQUVELE1BQWEsT0FBTztJQUVsQixZQUFZLElBQVM7UUFDbkIsSUFBSSxDQUFDLEdBQUcsR0FBRyxXQUFXLENBQUMsU0FBUyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUMxQixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDOUIsQ0FBQztDQUNGO0FBUEQsMEJBT0M7QUFDRCxNQUFhLE9BQU87SUFFbEIsWUFBWSxJQUFTO1FBQ25CLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztRQUM1QixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7UUFDOUIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQzFCLENBQUM7Q0FDRjtBQVBELDBCQU9DO0FBRUQsTUFBYSxJQUFJO0lBRWYsWUFBWSxJQUFTO1FBQ25CLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztRQUN0QixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDMUIsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO1FBQ3BCLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUM7UUFDdEQsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ2hDLENBQUM7Q0FDRjtBQVRELG9CQVNDO0FBRVksUUFBQSxlQUFlLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDckM7UUFDRSxrQkFBa0I7UUFDbEI7WUFDRSxJQUFJLEVBQUUsUUFBUTtZQUNkLE1BQU0sRUFBRTtnQkFDTixDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUM7Z0JBQ3JCLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQztnQkFDZCxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQyxPQUFPO2FBQzVCO1NBQ0Y7S0FDRjtJQUNEO1FBQ0Usa0JBQWtCO1FBQ2xCO1lBQ0UsSUFBSSxFQUFFLFFBQVE7WUFDZCxNQUFNLEVBQUU7Z0JBQ04sQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDO2dCQUNyQixDQUFDLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDO2dCQUN4QyxDQUFDLGlCQUFpQixFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLENBQUM7Z0JBQ3ZELENBQUMscUJBQXFCLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQzthQUN4RDtTQUNGO0tBQ0Y7SUFFRDtRQUNFLHVCQUF1QjtRQUN2QjtZQUNFLElBQUksRUFBRSxRQUFRO1lBQ2QsTUFBTSxFQUFFO2dCQUNOLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQztnQkFDckIsQ0FBQyxXQUFXLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQzthQUMvQztTQUNGO0tBQ0Y7SUFDRDtRQUNFLHNCQUFzQjtRQUN0QjtZQUNFLElBQUksRUFBRSxRQUFRO1lBQ2QsTUFBTSxFQUFFO2dCQUNOLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQztnQkFDckIsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDO2FBQ2xCO1NBQ0Y7S0FDRjtJQUNEO1FBQ0UsZUFBZTtRQUNmO1lBQ0UsSUFBSSxFQUFFLFFBQVE7WUFDZCxNQUFNLEVBQUU7Z0JBQ04sQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDO2dCQUNiLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQztnQkFDakIsQ0FBQyxXQUFXLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQztnQkFDOUMsQ0FBQyxjQUFjLEVBQUUsUUFBUSxDQUFDO2dCQUMxQixDQUFDLGtDQUFrQyxFQUFFLFFBQVEsQ0FBQzthQUMvQztTQUNGO0tBQ0Y7SUFDRDtRQUNFLGVBQWU7UUFDZjtZQUNFLElBQUksRUFBRSxRQUFRO1lBQ2QsTUFBTSxFQUFFO2dCQUNOLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQztnQkFDYixDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUM7Z0JBQ2pCLENBQUMsV0FBVyxFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUM7YUFDL0M7U0FDRjtLQUNGO0lBQ0Q7UUFDRSxPQUFPO1FBQ1A7WUFDRSxJQUFJLEVBQUUsUUFBUTtZQUNkLE1BQU0sRUFBRTtnQkFDTixDQUFDLEtBQUssRUFBRSxJQUFJLENBQUM7Z0JBQ2IsQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDO2dCQUNwQixDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUM7YUFDbkI7U0FDRjtLQUNGO0lBQ0Q7UUFDRSxJQUFJO1FBQ0o7WUFDRSxJQUFJLEVBQUUsUUFBUTtZQUNkLE1BQU0sRUFBRTtnQkFDTixDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUM7Z0JBQ2xCLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQztnQkFDcEIsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDO2dCQUNqQixDQUFDLHNCQUFzQixFQUFFLEtBQUssQ0FBQztnQkFDL0IsQ0FBQyxVQUFVLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7YUFDbEQ7U0FDRjtLQUNGO0lBQ0Q7UUFDRSxPQUFPO1FBQ1A7WUFDRSxJQUFJLEVBQUUsUUFBUTtZQUNkLE1BQU0sRUFBRTtnQkFDTixDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUM7Z0JBQ3JCLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQztnQkFDbEIsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDO2FBQ2hCO1NBQ0Y7S0FDRjtJQUNEO1FBQ0UsUUFBUTtRQUNSO1lBQ0UsSUFBSSxFQUFFLFFBQVE7WUFDZCxNQUFNLEVBQUU7Z0JBQ04sQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDO2dCQUNiLENBQUMsaUJBQWlCLEVBQUUsUUFBUSxDQUFDO2dCQUM3QixDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUM7Z0JBQ2xCLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQztnQkFDZCxDQUFDLHFCQUFxQixFQUFFLElBQUksQ0FBQztnQkFDN0IsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUMsT0FBTzthQUM1QjtTQUNGO0tBQ0Y7SUFDRDtRQUNFLGFBQWE7UUFDYjtZQUNFLElBQUksRUFBRSxRQUFRO1lBQ2QsTUFBTSxFQUFFO2dCQUNOLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQztnQkFDYixDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2FBQ2pCO1NBQ0Y7S0FDRjtDQUNGLENBQUMsQ0FBQztBQUVVLFFBQUEsZ0JBQWdCLEdBQUcsSUFBSSxtQkFBUyxDQUMzQyw2Q0FBNkMsQ0FDOUMsQ0FBQztBQUNXLFFBQUEsZ0JBQWdCLEdBQUcsSUFBSSxtQkFBUyxDQUMzQyw2Q0FBNkMsQ0FDOUMsQ0FBQztBQUVXLFFBQUEsdUNBQXVDLEdBQUcsSUFBSSxtQkFBUyxDQUNsRSw4Q0FBOEMsQ0FDL0MsQ0FBQztBQUNXLFFBQUEscUJBQXFCLEdBQUcsSUFBSSxtQkFBUyxDQUNoRCw2Q0FBNkMsQ0FDOUMsQ0FBQztBQUVXLFFBQUEsbUJBQW1CLEdBQUcsSUFBSSxtQkFBUyxDQUM5Qyw2Q0FBNkM7QUFDN0Msa0RBQWtEO0NBQ25ELENBQUM7QUFFVyxRQUFBLE9BQU8sR0FBRyxJQUFJLG1CQUFTLENBQ2xDLDZDQUE2QyxDQUM5QyxDQUFDO0FBRVcsUUFBQSxRQUFRLEdBQUcsSUFBSSxtQkFBUyxDQUNuQyw2Q0FBNkM7QUFDN0Msa0RBQWtEO0NBQ25ELENBQUM7QUFFVyxRQUFBLFVBQVUsR0FBRyxJQUFJLG1CQUFTLENBQ3JDLDZDQUE2QztBQUM3QyxrREFBa0Q7Q0FDbkQsQ0FBQztBQUVXLFFBQUEsV0FBVyxHQUFHLElBQUksbUJBQVMsQ0FDdEMsNkNBQTZDO0FBQzdDLGtEQUFrRDtDQUNuRCxDQUFDO0FBRVcsUUFBQSxNQUFNLEdBQUcsSUFBSSxtQkFBUyxDQUFDLGtDQUFrQyxDQUFDLENBQUM7QUFFM0QsUUFBQSxpQkFBaUIsR0FBRyxLQUFLLENBQUM7QUFFdkMscUdBQXFHO0FBQ3hGLFFBQUEsV0FBVyxHQUFHO0lBQ3pCO1FBQ0UsSUFBSSxFQUFFLGNBQWM7S0FDckI7SUFDRDtRQUNFLElBQUksRUFBRSxTQUFTO0tBQ2hCO0lBRUQ7UUFDRSxJQUFJLEVBQUUsUUFBUTtLQUNmO0lBQ0Q7UUFDRSxJQUFJLEVBQUUsVUFBVTtLQUNqQjtDQUNGLENBQUM7QUFFSyxNQUFNLFVBQVUsR0FBRyxHQUFHLEVBQUU7SUFDN0IsT0FBTztRQUNMLEtBQUssRUFBRSx3QkFBZ0I7UUFDdkIsZUFBZSxFQUFFLCtDQUF1QztRQUN4RCxrQkFBa0IsRUFBRSw2QkFBcUI7UUFDekMsTUFBTSxFQUFFLGNBQU07UUFDZCxRQUFRLEVBQUUsMkJBQW1CO1FBQzdCLElBQUksRUFBRSxlQUFPO1FBQ2IsS0FBSyxFQUFFLGdCQUFRO1FBQ2YsT0FBTyxFQUFFLGtCQUFVO1FBQ25CLFFBQVEsRUFBRSxtQkFBVztLQUN0QixDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBWlcsUUFBQSxVQUFVLGNBWXJCIn0=