aiia-vault-sdk 1.1.31 → 1.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -54,7 +54,7 @@ export declare class FairLaunchSDK {
54
54
  attempts: number;
55
55
  };
56
56
  }>;
57
- buildContributeTx(amount: number): Promise<ethers.ContractTransaction>;
57
+ buildContributeTx(amount: number, recipient: string): Promise<ethers.ContractTransaction>;
58
58
  buildEndSaleTx(): Promise<ethers.ContractTransaction>;
59
59
  buildAddLiquidityTx(): Promise<ethers.ContractTransaction>;
60
60
  buildEnableClaimingTx(): Promise<ethers.ContractTransaction>;
@@ -1 +1 @@
1
- "use strict";var t=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.FairLaunchSDK=void 0;const e=require("ethers"),i=t(require("./abis/FairLaunch.json")),a=t(require("./contracts.json")),n=require("./utils");exports.FairLaunchSDK=class{constructor(t,r){this.name="FairLaunch",this.isBootstrapped=!1,this._projectToken=null,this._fundingToken=null,this._projectTokenDecimals=null,this._fundingTokenDecimals=null,this.formatEventArgs=async t=>{await this.bootstrap();const{eventName:e,args:i}=t;switch(e){case"Contributed":return{...t,args:{...i,user:i.user.toLowerCase(),amount:Number(i.amount)/10**this._fundingTokenDecimals}};case"SaleEnded":return{...t,args:{...i,totalRaised:Number(i.totalRaised)/10**this._fundingTokenDecimals,tokenPrice:Number(i.tokenPrice)/10**this._fundingTokenDecimals}};case"InitialClaimed":case"VestedClaimed":return{...t,args:{...i,user:i.user.toLowerCase(),amount:Number(i.amount)/10**this._projectTokenDecimals}};case"TradingVaultPositionCreated":return{...t,args:{...i,user:i.user.toLowerCase(),positionId:Number(i.positionId),amount:Number(i.amount)/10**this._fundingTokenDecimals}};case"LiquidityAdded":return{...t,args:{...i,tokenAmount:Number(i.tokenAmount)/10**this._projectTokenDecimals,fundingTokenAmount:Number(i.fundingTokenAmount)/10**this._fundingTokenDecimals}};default:return t}};const o=Array.isArray(t)?t:[t];this.providers=o.map((t=>new e.ethers.JsonRpcProvider(t)));const s=(0,n.getRandomProvider)(this.providers);this.contractAddress=(0,n.resolveContractAddress)(o[0],this.name,a.default,r),this.contract=new e.ethers.Contract(this.contractAddress,i.default.abi,s)}getRandomProvider(){return(0,n.getRandomProvider)(this.providers)}getContractWithRandomProvider(){return new e.ethers.Contract(this.contractAddress,i.default.abi,this.getRandomProvider())}async bootstrap(){if(this.isBootstrapped)return;const t=await Promise.all(this.providers.map(((t,e)=>(0,n.checkRpcHealth)(t,e))));if(this.providers=this.providers.filter(((e,i)=>t[i])),0===this.providers.length)throw new Error("No active RPC providers available");this._projectToken=await this.contract.projectToken(),this._fundingToken=await this.contract.fundingToken();const[e,i]=await Promise.all([(0,n.getTokenDecimals)(this._projectToken,this.getRandomProvider()),(0,n.getTokenDecimals)(this._fundingToken,this.getRandomProvider())]);this._projectTokenDecimals=e,this._fundingTokenDecimals=i,this.isBootstrapped=!0}async signAndSendTransaction(t,e,i={}){return(0,n.signAndSendTransaction)(t,e,(()=>this.getRandomProvider()),i,this.contract)}async buildContributeTx(t){await this.bootstrap();const i=e.ethers.parseUnits(t.toString(),this._fundingTokenDecimals);return await this.contract.contribute.populateTransaction(i)}async buildEndSaleTx(){return await this.contract.endSale.populateTransaction()}async buildAddLiquidityTx(){return await this.contract.addLiquidity.populateTransaction()}async buildEnableClaimingTx(){return await this.contract.enableClaiming.populateTransaction()}async buildClaimInitialTx(){return await this.contract.claimInitial.populateTransaction()}async buildClaimVestedTx(){return await this.contract.claimVested.populateTransaction()}async buildUpdateLiquidityTokensTx(t){await this.bootstrap();const i=e.ethers.parseUnits(t.toString(),this._projectTokenDecimals);return await this.contract.updateLiquidityTokens.populateTransaction(i)}async buildUpdateLiquidityPercentTx(t){return await this.contract.updateLiquidityPercent.populateTransaction(t)}async buildUpdateInitialClaimPercentTx(t){return await this.contract.updateInitialClaimPercent.populateTransaction(t)}async buildUpdateVestingDurationTx(t){return await this.contract.updateVestingDuration.populateTransaction(t)}async buildUpdateEarlyParticipationWindowTx(t){return await this.contract.updateEarlyParticipationWindow.populateTransaction(t)}async buildWithdrawLPTokensTx(t,e){return await this.contract.withdrawLPTokens.populateTransaction(t,e)}async buildWithdrawERC20Tx(t,i){const a=new e.ethers.Contract(t,["function decimals() view returns (uint8)"],this.getRandomProvider()),n=await a.decimals(),r=e.ethers.parseUnits(i.toString(),n);return await this.contract.withdrawERC20.populateTransaction(t,r)}async buildApproveERC20Tx(t,i,a){const r=new e.ethers.Contract(t,["function decimals() view returns (uint8)"],this.getRandomProvider()),o=await r.decimals(),s=e.ethers.parseUnits(a.toString(),o);return(0,n.buildApproveERC20Tx)(t,i,s,this.getRandomProvider())}async getSaleInfo(){await this.bootstrap();const[t,e,i,a,n,r,o,s]=await Promise.all([this.contract.startTime(),this.contract.endTime(),this.contract.totalTokensForSale(),this.contract.totalRaised(),this.contract.tokenPrice(),this.contract.saleEnded(),this.contract.claimingEnabled(),this.contract.liquidityAdded()]);return{startTime:Number(t),endTime:Number(e),totalTokensForSale:Number(i)/10**this._projectTokenDecimals,totalRaised:Number(a)/10**this._fundingTokenDecimals,tokenPrice:Number(n)/10**this._fundingTokenDecimals,saleEnded:r,claimingEnabled:o,liquidityAdded:s}}async getUserContribution(t){await this.bootstrap();const e=await this.contract.userContributions(t);return{amount:Number(e.amount)/10**this._fundingTokenDecimals,tokenAllocation:Number(e.tokenAllocation)/10**this._projectTokenDecimals,hasClaimedInitial:e.hasClaimedInitial,vestedClaimed:Number(e.vestedClaimed)/10**this._projectTokenDecimals,tradingVaultId:Number(e.tradingVaultId)}}async getContributorsCount(){return Number(await this.contract.getContributorsCount())}async getContributorAt(t){return await this.contract.getContributorAt(t)}async getAllContributors(){const t=await this.getContributorsCount(),e=[];for(let i=0;i<t;i++)e.push(await this.getContributorAt(i));return e}async getProjectToken(){return this._projectToken||(this._projectToken=await this.contract.projectToken()),this._projectToken}async getFundingToken(){return this._fundingToken||(this._fundingToken=await this.contract.fundingToken()),this._fundingToken}async getTradingVault(){return await this.contract.tradingVault()}async getDexRouter(){return await this.contract.dexRouter()}async getLiquidityTokens(){await this.bootstrap();const t=await this.contract.liquidityTokens();return Number(t)/10**this._projectTokenDecimals}async getLiquidityPercent(){return Number(await this.contract.liquidityPercent())}async getInitialClaimPercent(){return Number(await this.contract.initialClaimPercent())}async getVestingDuration(){return Number(await this.contract.vestingDuration())}async getVestingStartTime(){return Number(await this.contract.vestingStartTime())}async getEarlyParticipationWindow(){return Number(await this.contract.earlyParticipationWindow())}async hasOperatorRole(t){const e=await this.contract.OPERATOR_ROLE();return await this.contract.hasRole(e,t)}async hasAdminRole(t){const e=await this.contract.DEFAULT_ADMIN_ROLE();return await this.contract.hasRole(e,t)}async buildGrantOperatorRoleTx(t){const e=await this.contract.OPERATOR_ROLE();return await this.contract.grantRole.populateTransaction(e,t)}async buildGrantAdminRoleTx(t){const e=await this.contract.DEFAULT_ADMIN_ROLE();return await this.contract.grantRole.populateTransaction(e,t)}async getAllowance(t,e,i){const[a,r]=await Promise.all([(0,n.getTokenAllowance)(t,e,i,this.getRandomProvider()),(0,n.getTokenDecimals)(t,this.getRandomProvider())]);return Number(a)/Math.pow(10,r)}getContractAddress(){return this.contractAddress}async getAllEvents(t,e,i){return await this.bootstrap(),(0,n.getAllEvents)(this.contract,(()=>this.getRandomProvider()),(()=>this.getContractWithRandomProvider()),t,e,i)}async streamEvents(t,e,i,a=1e3,r=5e3){const o=["Contributed","SaleEnded","InitialClaimed","VestedClaimed","ClaimingEnabled","LiquidityAdded","TradingVaultPositionCreated"];return await this.bootstrap(),(0,n.streamEvents)({getProvider:()=>this.getRandomProvider(),getAllEvents:(t,e)=>this.getAllEvents(t,e,o),formatEvent:t=>this.formatEventArgs(t),onEvent:e,saveLatestBlock:i,fromBlock:t,batchSize:a,sleepTime:r})}};
1
+ "use strict";var t=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.FairLaunchSDK=void 0;const e=require("ethers"),i=t(require("./abis/FairLaunch.json")),a=t(require("./contracts.json")),n=require("./utils");exports.FairLaunchSDK=class{constructor(t,r){this.name="FairLaunch",this.isBootstrapped=!1,this._projectToken=null,this._fundingToken=null,this._projectTokenDecimals=null,this._fundingTokenDecimals=null,this.formatEventArgs=async t=>{await this.bootstrap();const{eventName:e,args:i}=t;switch(e){case"Contributed":return{...t,args:{...i,user:i.user.toLowerCase(),amount:Number(i.amount)/10**this._fundingTokenDecimals}};case"SaleEnded":return{...t,args:{...i,totalRaised:Number(i.totalRaised)/10**this._fundingTokenDecimals,tokenPrice:Number(i.tokenPrice)/10**this._fundingTokenDecimals}};case"InitialClaimed":case"VestedClaimed":return{...t,args:{...i,user:i.user.toLowerCase(),amount:Number(i.amount)/10**this._projectTokenDecimals}};case"TradingVaultPositionCreated":return{...t,args:{...i,user:i.user.toLowerCase(),positionId:Number(i.positionId),amount:Number(i.amount)/10**this._fundingTokenDecimals}};case"LiquidityAdded":return{...t,args:{...i,tokenAmount:Number(i.tokenAmount)/10**this._projectTokenDecimals,fundingTokenAmount:Number(i.fundingTokenAmount)/10**this._fundingTokenDecimals}};default:return t}};const o=Array.isArray(t)?t:[t];this.providers=o.map((t=>new e.ethers.JsonRpcProvider(t)));const s=(0,n.getRandomProvider)(this.providers);this.contractAddress=(0,n.resolveContractAddress)(o[0],this.name,a.default,r),this.contract=new e.ethers.Contract(this.contractAddress,i.default.abi,s)}getRandomProvider(){return(0,n.getRandomProvider)(this.providers)}getContractWithRandomProvider(){return new e.ethers.Contract(this.contractAddress,i.default.abi,this.getRandomProvider())}async bootstrap(){if(this.isBootstrapped)return;const t=await Promise.all(this.providers.map(((t,e)=>(0,n.checkRpcHealth)(t,e))));if(this.providers=this.providers.filter(((e,i)=>t[i])),0===this.providers.length)throw new Error("No active RPC providers available");this._projectToken=await this.contract.projectToken(),this._fundingToken=await this.contract.fundingToken();const[e,i]=await Promise.all([(0,n.getTokenDecimals)(this._projectToken,this.getRandomProvider()),(0,n.getTokenDecimals)(this._fundingToken,this.getRandomProvider())]);this._projectTokenDecimals=e,this._fundingTokenDecimals=i,this.isBootstrapped=!0}async signAndSendTransaction(t,e,i={}){return(0,n.signAndSendTransaction)(t,e,(()=>this.getRandomProvider()),i,this.contract)}async buildContributeTx(t,i){await this.bootstrap();const a=e.ethers.parseUnits(t.toString(),this._fundingTokenDecimals);return await this.contract.contribute.populateTransaction(a,i)}async buildEndSaleTx(){return await this.contract.endSale.populateTransaction()}async buildAddLiquidityTx(){return await this.contract.addLiquidity.populateTransaction()}async buildEnableClaimingTx(){return await this.contract.enableClaiming.populateTransaction()}async buildClaimInitialTx(){return await this.contract.claimInitial.populateTransaction()}async buildClaimVestedTx(){return await this.contract.claimVested.populateTransaction()}async buildUpdateLiquidityTokensTx(t){await this.bootstrap();const i=e.ethers.parseUnits(t.toString(),this._projectTokenDecimals);return await this.contract.updateLiquidityTokens.populateTransaction(i)}async buildUpdateLiquidityPercentTx(t){return await this.contract.updateLiquidityPercent.populateTransaction(t)}async buildUpdateInitialClaimPercentTx(t){return await this.contract.updateInitialClaimPercent.populateTransaction(t)}async buildUpdateVestingDurationTx(t){return await this.contract.updateVestingDuration.populateTransaction(t)}async buildUpdateEarlyParticipationWindowTx(t){return await this.contract.updateEarlyParticipationWindow.populateTransaction(t)}async buildWithdrawLPTokensTx(t,e){return await this.contract.withdrawLPTokens.populateTransaction(t,e)}async buildWithdrawERC20Tx(t,i){const a=new e.ethers.Contract(t,["function decimals() view returns (uint8)"],this.getRandomProvider()),n=await a.decimals(),r=e.ethers.parseUnits(i.toString(),n);return await this.contract.withdrawERC20.populateTransaction(t,r)}async buildApproveERC20Tx(t,i,a){const r=new e.ethers.Contract(t,["function decimals() view returns (uint8)"],this.getRandomProvider()),o=await r.decimals(),s=e.ethers.parseUnits(a.toString(),o);return(0,n.buildApproveERC20Tx)(t,i,s,this.getRandomProvider())}async getSaleInfo(){await this.bootstrap();const[t,e,i,a,n,r,o,s]=await Promise.all([this.contract.startTime(),this.contract.endTime(),this.contract.totalTokensForSale(),this.contract.totalRaised(),this.contract.tokenPrice(),this.contract.saleEnded(),this.contract.claimingEnabled(),this.contract.liquidityAdded()]);return{startTime:Number(t),endTime:Number(e),totalTokensForSale:Number(i)/10**this._projectTokenDecimals,totalRaised:Number(a)/10**this._fundingTokenDecimals,tokenPrice:Number(n)/10**this._fundingTokenDecimals,saleEnded:r,claimingEnabled:o,liquidityAdded:s}}async getUserContribution(t){await this.bootstrap();const e=await this.contract.userContributions(t);return{amount:Number(e.amount)/10**this._fundingTokenDecimals,tokenAllocation:Number(e.tokenAllocation)/10**this._projectTokenDecimals,hasClaimedInitial:e.hasClaimedInitial,vestedClaimed:Number(e.vestedClaimed)/10**this._projectTokenDecimals,tradingVaultId:Number(e.tradingVaultId)}}async getContributorsCount(){return Number(await this.contract.getContributorsCount())}async getContributorAt(t){return await this.contract.getContributorAt(t)}async getAllContributors(){const t=await this.getContributorsCount(),e=[];for(let i=0;i<t;i++)e.push(await this.getContributorAt(i));return e}async getProjectToken(){return this._projectToken||(this._projectToken=await this.contract.projectToken()),this._projectToken}async getFundingToken(){return this._fundingToken||(this._fundingToken=await this.contract.fundingToken()),this._fundingToken}async getTradingVault(){return await this.contract.tradingVault()}async getDexRouter(){return await this.contract.dexRouter()}async getLiquidityTokens(){await this.bootstrap();const t=await this.contract.liquidityTokens();return Number(t)/10**this._projectTokenDecimals}async getLiquidityPercent(){return Number(await this.contract.liquidityPercent())}async getInitialClaimPercent(){return Number(await this.contract.initialClaimPercent())}async getVestingDuration(){return Number(await this.contract.vestingDuration())}async getVestingStartTime(){return Number(await this.contract.vestingStartTime())}async getEarlyParticipationWindow(){return Number(await this.contract.earlyParticipationWindow())}async hasOperatorRole(t){const e=await this.contract.OPERATOR_ROLE();return await this.contract.hasRole(e,t)}async hasAdminRole(t){const e=await this.contract.DEFAULT_ADMIN_ROLE();return await this.contract.hasRole(e,t)}async buildGrantOperatorRoleTx(t){const e=await this.contract.OPERATOR_ROLE();return await this.contract.grantRole.populateTransaction(e,t)}async buildGrantAdminRoleTx(t){const e=await this.contract.DEFAULT_ADMIN_ROLE();return await this.contract.grantRole.populateTransaction(e,t)}async getAllowance(t,e,i){const[a,r]=await Promise.all([(0,n.getTokenAllowance)(t,e,i,this.getRandomProvider()),(0,n.getTokenDecimals)(t,this.getRandomProvider())]);return Number(a)/Math.pow(10,r)}getContractAddress(){return this.contractAddress}async getAllEvents(t,e,i){return await this.bootstrap(),(0,n.getAllEvents)(this.contract,(()=>this.getRandomProvider()),(()=>this.getContractWithRandomProvider()),t,e,i)}async streamEvents(t,e,i,a=1e3,r=5e3){const o=["Contributed","SaleEnded","InitialClaimed","VestedClaimed","ClaimingEnabled","LiquidityAdded","TradingVaultPositionCreated"];return await this.bootstrap(),(0,n.streamEvents)({getProvider:()=>this.getRandomProvider(),getAllEvents:(t,e)=>this.getAllEvents(t,e,o),formatEvent:t=>this.formatEventArgs(t),onEvent:e,saveLatestBlock:i,fromBlock:t,batchSize:a,sleepTime:r})}};
@@ -0,0 +1,159 @@
1
+ import { ethers } from "ethers";
2
+ import { type SendTransactionMutateAsync } from "@wagmi/core/query";
3
+ import { Config } from "@wagmi/core/dist/types/createConfig";
4
+ import { ParsedMultiLevelReferralNFTEvent, ParsedMultiLevelReferralNFTEventRaw } from "./types";
5
+ export interface ReferralInfo {
6
+ referrer: string;
7
+ referralCode: string;
8
+ }
9
+ export interface NFTMintedEvent {
10
+ owner: string;
11
+ tokenId: number;
12
+ }
13
+ export interface ReferrerSetEvent {
14
+ referrer: string;
15
+ referee: string;
16
+ }
17
+ export interface ReferralPaidEvent {
18
+ receiver: string;
19
+ buyer: string;
20
+ amount: number;
21
+ level: number;
22
+ originalAmount: number;
23
+ }
24
+ /**
25
+ * SDK for interacting with the MultiLevelReferralNFT smart contract
26
+ *
27
+ * @remarks
28
+ * This SDK provides methods to interact with the MultiLevelReferralNFT contract,
29
+ * including minting NFTs, managing referrals, and handling rewards.
30
+ */
31
+ export declare class MultiLevelReferralNFTSDK {
32
+ name: string;
33
+ private contract;
34
+ private providers;
35
+ private contractAddress;
36
+ private isBootstrapped;
37
+ /**
38
+ * Creates a new instance of the MultiLevelReferralNFTSDK
39
+ *
40
+ * @param rpcUrls - Single RPC URL or array of RPC URLs for blockchain connection
41
+ * @param contractAddress - Optional contract address. If not provided, will be resolved from contracts.json
42
+ *
43
+ * @throws Will throw if no valid RPC providers are available
44
+ */
45
+ constructor(rpcUrls: string | string[], contractAddress?: string);
46
+ /**
47
+ * Gets a random provider from the available providers
48
+ *
49
+ * @returns An ethers Provider instance
50
+ * @private
51
+ */
52
+ private getRandomProvider;
53
+ /**
54
+ * Gets a contract instance with a random provider
55
+ *
56
+ * @returns Contract instance
57
+ * @private
58
+ */
59
+ private getContractWithRandomProvider;
60
+ /**
61
+ * Bootstraps the SDK by checking RPC health and removing inactive providers
62
+ *
63
+ * @throws Will throw if no active RPC providers are available
64
+ */
65
+ bootstrap(): Promise<void>;
66
+ /**
67
+ * Signs and sends a transaction to the blockchain
68
+ *
69
+ * @param tx - The transaction to send
70
+ * @param wallet - The wallet or transaction sender
71
+ * @param callbacks - Optional callbacks for transaction lifecycle events
72
+ * @returns Transaction result and status
73
+ */
74
+ signAndSendTransaction(tx: ethers.ContractTransaction, wallet: ethers.Wallet | SendTransactionMutateAsync<Config, any>, callbacks?: {
75
+ onSubmit?: (tx: string) => void | Promise<void>;
76
+ onFinally?: (status: {
77
+ status: boolean | null;
78
+ confirmations: number;
79
+ txHash: string;
80
+ isCompleted: boolean;
81
+ attempts: number;
82
+ }) => void | Promise<void>;
83
+ onError?: (error: Error) => void | Promise<void>;
84
+ }): Promise<{
85
+ transaction: {
86
+ hash: string;
87
+ };
88
+ status: {
89
+ status: boolean | null;
90
+ confirmations: number;
91
+ isCompleted: boolean;
92
+ attempts: number;
93
+ };
94
+ }>;
95
+ /**
96
+ * Gets the current NFT price
97
+ * @returns The current price in ETH
98
+ */
99
+ getPrice(): Promise<number>;
100
+ /**
101
+ * Gets the share percentage for referrals
102
+ * @returns The share percentage (e.g., 20 for 20%)
103
+ */
104
+ getSharePercent(): Promise<number>;
105
+ /**
106
+ * Gets the maximum number of referral levels
107
+ * @returns The maximum number of referral levels
108
+ */
109
+ getMaxReferralLevels(): Promise<number>;
110
+ /**
111
+ * Gets the referrer address for a given user
112
+ * @param user - The user's address
113
+ * @returns The referrer's address
114
+ */
115
+ getReferrer(user: string): Promise<string>;
116
+ /**
117
+ * Gets the user address associated with a referral code
118
+ * @param referralCode - The referral code to look up
119
+ * @returns The associated user's address
120
+ */
121
+ getReferralCodeOwner(referralCode: string): Promise<string>;
122
+ /**
123
+ * Gets the referral code for a given user
124
+ * @param user - The user's address
125
+ * @returns The user's referral code
126
+ */
127
+ getUserReferralCode(user: string): Promise<string>;
128
+ /**
129
+ * Builds a transaction to set the NFT price
130
+ * @param price - The new price in ETH
131
+ * @returns Populated transaction
132
+ */
133
+ buildSetPriceTx(price: number): Promise<ethers.ContractTransaction>;
134
+ /**
135
+ * Builds a transaction to buy an NFT with a referral code
136
+ * @param referralCode - The referral code to use
137
+ * @returns Populated transaction
138
+ */
139
+ buildBuyNFTTx(referralCode: string): Promise<ethers.ContractTransaction>;
140
+ /**
141
+ * Builds a transaction to withdraw contract balance
142
+ * @param amount - Amount to withdraw in ETH
143
+ * @returns Populated transaction
144
+ */
145
+ buildWithdrawTx(amount: number): Promise<ethers.ContractTransaction>;
146
+ /**
147
+ * Gets the contract owner address
148
+ * @returns The owner's address
149
+ */
150
+ getOwner(): Promise<string>;
151
+ /**
152
+ * Gets the contract address
153
+ * @returns The contract address
154
+ */
155
+ getContractAddress(): string;
156
+ getAllEvents(fromBlock: number, toBlock: number, whitelistEvents?: string[]): Promise<ParsedMultiLevelReferralNFTEventRaw[]>;
157
+ streamEvents(fromBlock: number, onEvent: (event: ParsedMultiLevelReferralNFTEvent) => Promise<void>, saveLatestBlock: (blockNumber: number) => Promise<void>, batchSize?: number, sleepTime?: number): Promise<void>;
158
+ formatEventArgs: (event: ParsedMultiLevelReferralNFTEventRaw) => ParsedMultiLevelReferralNFTEvent;
159
+ }
@@ -0,0 +1 @@
1
+ "use strict";var e=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.MultiLevelReferralNFTSDK=void 0;const r=require("ethers"),t=e(require("./abis/MultiLevelReferralNFT.json")),s=e(require("./contracts.json")),a=require("./utils");exports.MultiLevelReferralNFTSDK=class{constructor(e,n){this.name="MultiLevelReferralNFT",this.isBootstrapped=!1,this.formatEventArgs=e=>{const{eventName:t,args:s}=e;switch(t){case"NFTMinted":return{...e,args:{...s,owner:s.owner.toLowerCase(),tokenId:Number(s.tokenId)}};case"ReferrerSet":return{...e,args:{...s,referrer:s.referrer.toLowerCase(),referee:s.referee.toLowerCase()}};case"ReferralPaid":return{...e,args:{...s,receiver:s.receiver.toLowerCase(),buyer:s.buyer.toLowerCase(),amount:Number(r.ethers.formatEther(s.amount)),level:Number(s.level),originalAmount:Number(r.ethers.formatEther(s.originalAmount))}};default:return e}};const o=Array.isArray(e)?e:[e];this.providers=o.map((e=>new r.ethers.JsonRpcProvider(e)));const i=(0,a.getRandomProvider)(this.providers);this.contractAddress=(0,a.resolveContractAddress)(o[0],this.name,s.default,n),this.contract=new r.ethers.Contract(this.contractAddress,t.default.abi,i)}getRandomProvider(){return(0,a.getRandomProvider)(this.providers)}getContractWithRandomProvider(){return new r.ethers.Contract(this.contractAddress,t.default.abi,this.getRandomProvider())}async bootstrap(){if(this.isBootstrapped)return;const e=await Promise.all(this.providers.map(((e,r)=>(0,a.checkRpcHealth)(e,r))));if(this.providers=this.providers.filter(((r,t)=>e[t])),0===this.providers.length)throw new Error("No active RPC providers available");this.isBootstrapped=!0}async signAndSendTransaction(e,r,t={}){return(0,a.signAndSendTransaction)(e,r,(()=>this.getRandomProvider()),t,this.contract)}async getPrice(){const e=await this.contract.price();return Number(r.ethers.formatEther(e))}async getSharePercent(){const e=await this.contract.sharePercent();return Number(e)}async getMaxReferralLevels(){const e=await this.contract.maxReferralLevels();return Number(e)}async getReferrer(e){return await this.contract.referrers(e)}async getReferralCodeOwner(e){return await this.contract.referralCodes(e)}async getUserReferralCode(e){return await this.contract.userReferralCodes(e)}async buildSetPriceTx(e){const t=r.ethers.parseEther(e.toString());return await this.contract.setPrice.populateTransaction(t)}async buildBuyNFTTx(e){const t=await this.getPrice(),s=await this.contract.buy.populateTransaction(e);return s.value=r.ethers.parseEther(t.toString()),s}async buildWithdrawTx(e){const t=r.ethers.parseEther(e.toString());return await this.contract.withdraw.populateTransaction(t)}async getOwner(){return await this.contract.owner()}getContractAddress(){return this.contractAddress}async getAllEvents(e,r,t){return await this.bootstrap(),(0,a.getAllEvents)(this.contract,(()=>this.getRandomProvider()),(()=>this.getContractWithRandomProvider()),e,r,t)}async streamEvents(e,r,t,s=1e3,n=5e3){const o=["NFTMinted","ReferrerSet","ReferralPaid"];return await this.bootstrap(),(0,a.streamEvents)({getProvider:()=>this.getRandomProvider(),getAllEvents:(e,r)=>this.getAllEvents(e,r,o),formatEvent:e=>this.formatEventArgs(e),onEvent:r,saveLatestBlock:t,fromBlock:e,batchSize:s,sleepTime:n})}};
@@ -39,6 +39,11 @@
39
39
  "name": "ClaimingNotEnabled",
40
40
  "type": "error"
41
41
  },
42
+ {
43
+ "inputs": [],
44
+ "name": "ETHTransferFailed",
45
+ "type": "error"
46
+ },
42
47
  {
43
48
  "inputs": [],
44
49
  "name": "InsufficientBalance",
@@ -59,6 +64,11 @@
59
64
  "name": "InvalidInitialization",
60
65
  "type": "error"
61
66
  },
67
+ {
68
+ "inputs": [],
69
+ "name": "InvalidPayment",
70
+ "type": "error"
71
+ },
62
72
  {
63
73
  "inputs": [],
64
74
  "name": "InvalidTimestamp",
@@ -182,6 +192,25 @@
182
192
  "name": "Contributed",
183
193
  "type": "event"
184
194
  },
195
+ {
196
+ "anonymous": false,
197
+ "inputs": [
198
+ {
199
+ "indexed": true,
200
+ "internalType": "address",
201
+ "name": "recipient",
202
+ "type": "address"
203
+ },
204
+ {
205
+ "indexed": false,
206
+ "internalType": "uint256",
207
+ "name": "amount",
208
+ "type": "uint256"
209
+ }
210
+ ],
211
+ "name": "ETHWithdrawn",
212
+ "type": "event"
213
+ },
185
214
  {
186
215
  "anonymous": false,
187
216
  "inputs": [
@@ -390,6 +419,10 @@
390
419
  "name": "VestedClaimed",
391
420
  "type": "event"
392
421
  },
422
+ {
423
+ "stateMutability": "payable",
424
+ "type": "fallback"
425
+ },
393
426
  {
394
427
  "inputs": [],
395
428
  "name": "DEFAULT_ADMIN_ROLE",
@@ -420,7 +453,7 @@
420
453
  "inputs": [],
421
454
  "name": "addLiquidity",
422
455
  "outputs": [],
423
- "stateMutability": "nonpayable",
456
+ "stateMutability": "payable",
424
457
  "type": "function"
425
458
  },
426
459
  {
@@ -456,11 +489,16 @@
456
489
  "internalType": "uint256",
457
490
  "name": "_amount",
458
491
  "type": "uint256"
492
+ },
493
+ {
494
+ "internalType": "address",
495
+ "name": "_recipient",
496
+ "type": "address"
459
497
  }
460
498
  ],
461
499
  "name": "contribute",
462
500
  "outputs": [],
463
- "stateMutability": "nonpayable",
501
+ "stateMutability": "payable",
464
502
  "type": "function"
465
503
  },
466
504
  {
@@ -548,6 +586,19 @@
548
586
  "stateMutability": "view",
549
587
  "type": "function"
550
588
  },
589
+ {
590
+ "inputs": [],
591
+ "name": "fundingTokenPrice",
592
+ "outputs": [
593
+ {
594
+ "internalType": "uint256",
595
+ "name": "",
596
+ "type": "uint256"
597
+ }
598
+ ],
599
+ "stateMutability": "view",
600
+ "type": "function"
601
+ },
551
602
  {
552
603
  "inputs": [
553
604
  {
@@ -812,6 +863,11 @@
812
863
  "internalType": "uint256",
813
864
  "name": "_earlyParticipationWindow",
814
865
  "type": "uint256"
866
+ },
867
+ {
868
+ "internalType": "uint256",
869
+ "name": "_fundingTokenPrice",
870
+ "type": "uint256"
815
871
  }
816
872
  ],
817
873
  "name": "initialize",
@@ -1050,6 +1106,19 @@
1050
1106
  "stateMutability": "nonpayable",
1051
1107
  "type": "function"
1052
1108
  },
1109
+ {
1110
+ "inputs": [
1111
+ {
1112
+ "internalType": "uint256",
1113
+ "name": "_fundingTokenPrice",
1114
+ "type": "uint256"
1115
+ }
1116
+ ],
1117
+ "name": "updateFundingTokenPrice",
1118
+ "outputs": [],
1119
+ "stateMutability": "nonpayable",
1120
+ "type": "function"
1121
+ },
1053
1122
  {
1054
1123
  "inputs": [
1055
1124
  {
@@ -1185,6 +1254,24 @@
1185
1254
  "stateMutability": "nonpayable",
1186
1255
  "type": "function"
1187
1256
  },
1257
+ {
1258
+ "inputs": [
1259
+ {
1260
+ "internalType": "uint256",
1261
+ "name": "_amount",
1262
+ "type": "uint256"
1263
+ },
1264
+ {
1265
+ "internalType": "address payable",
1266
+ "name": "_recipient",
1267
+ "type": "address"
1268
+ }
1269
+ ],
1270
+ "name": "withdrawETH",
1271
+ "outputs": [],
1272
+ "stateMutability": "nonpayable",
1273
+ "type": "function"
1274
+ },
1188
1275
  {
1189
1276
  "inputs": [
1190
1277
  {
@@ -1202,10 +1289,14 @@
1202
1289
  "outputs": [],
1203
1290
  "stateMutability": "nonpayable",
1204
1291
  "type": "function"
1292
+ },
1293
+ {
1294
+ "stateMutability": "payable",
1295
+ "type": "receive"
1205
1296
  }
1206
1297
  ],
1207
- "bytecode": "0x6080806040523460d2577ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460ff8160401c1660c1576002600160401b03196001600160401b03821601605c575b60405161200990816100d88239f35b6001600160401b0319166001600160401b039081177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005581527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a13880604d565b63f92ee8a960e01b60005260046000fd5b600080fdfe608080604052600436101561001357600080fd5b60003560e01c90816301ffc9a7146118d0575080630758d924146118a757806307bb0a22146117f257806309295d09146117c75780630e141a9b146117a15780630f6ca1a814611736578063128b4e981461135e5780631514617e146113405780632081a88c146112e8578063248a9ca3146112c25780632f2ff15d146112915780633197cbb61461127357806336568abe1461122d578063380d831b1461111d5780633845cebf146110db5780633cb5d100146110b257806341cf19ba146110945780634b60ce771461106b5780634b8ce6021461104d57806360219c7b1461102f5780636386c1c714610ebf57806366349e3f14610e42578063684d411e14610e00578063692c931a14610de2578063715018a614610d7857806378065f2714610d4f57806378e9792514610d315780637ff9b59614610d135780638da5cb5b14610cdd57806391d1485414610c83578063928ba37f14610bb95780639b8906ae14610b96578063a1db978214610af5578063a217fddf14610ad9578063a8660a7814610abb578063b068375514610a9d578063c1cbbca71461085c578063c5c4744c1461083e578063d01c44cd146106fc578063d547741f146106c6578063d9443923146106a0578063db83694c14610638578063dd19aa5714610607578063e8078d9414610352578063f1bd27a814610329578063f2fde38b146102fe578063f5b541a6146102c3578063fa09267c1461025d5763feed55611461023a57600080fd5b34610258576000366003190112610258576020601154604051908152f35b600080fd5b3461025857602036600319011261025857600435610279611adc565b60ff600954166102b257801580156102a6575b61029557600d55005b63162908e360e11b60005260046000fd5b5060065481101561028c565b637ce54feb60e11b60005260046000fd5b346102585760003660031901126102585760206040517f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b9298152f35b346102585760203660031901126102585761032761031a611923565b610322611eb4565b611a28565b005b34610258576000366003190112610258576002546040516001600160a01b039091168152602090f35b346102585760003660031901126102585761036b611adc565b60095460ff8116156105f65760ff8160101c166105e557620100009062ff000019161760095560646103a2600754600e5490611980565b60008054600354600d5460405163095ea7b360e01b81526001600160a01b03928316600482015260248101919091529490930493926020928492604492849291165af18015610579576105c8575b5060015460035460405163095ea7b360e01b81526001600160a01b039182166004820152602481018490529160209183916044918391600091165af180156105795761059b575b50600354600d54916062808402926001600160a01b03169190848404148415171561058557606281029080820460621481151715610585576000546001546001600160a01b03908116949116919042610708810190811061058557606461010495816060996000966040519c8d9b8c9a62e8e33760e81b8c5260048c015260248b015260448a0152828901520460848701520460a48501523060c485015260e48401525af180156105795760009160009161051f575b7f38f8a0c92f4c5b0b6877f878cb4c0c8d348a47b76d716c8e78f425043df9515b6040848482519182526020820152a1005b9150506060813d606011610571575b8161053b606093836119b3565b810103126102585780516020909101517f38f8a0c92f4c5b0b6877f878cb4c0c8d348a47b76d716c8e78f425043df9515b6104ed565b3d915061052e565b6040513d6000823e3d90fd5b634e487b7160e01b600052601160045260246000fd5b6105bc9060203d6020116105c1575b6105b481836119b3565b8101906119d5565b610437565b503d6105aa565b6105e09060203d6020116105c1576105b481836119b3565b6103f0565b630fd02b6d60e41b60005260046000fd5b639d98b04b60e01b60005260046000fd5b3461025857602036600319011261025857600435610623611adc565b60ff600954166102b257801561029557600b55005b346102585760003660031901126102585761010060045460ff60055460065460075460085491600954936040519687526020870152604086015260608501526080840152818116151560a0840152818160081c16151560c084015260101c16151560e0820152f35b3461025857600036600319011261025857602060ff60095460101c166040519015158152f35b34610258576040366003190112610258576103276004356106e5611939565b906106f76106f2826119ed565b611ba1565b611e14565b346102585760003660031901126102585760095460ff8160081c161561082d5760ff16156105f6573360005260106020526040600020600181015480156107df57600c5460640390606482116105855760649161075891611980565b0490600a54600b549061076b8282611a1b565b42106107f0575060039190505b0161078581548093611a0e565b9182156107df578261079691611a1b565b90556000546107b190829033906001600160a01b0316611a9e565b6040519081527fc15eb22beb780252072bdeec94b7fce7b15822d73417b8a4f92640577eb6fceb60203392a2005b6312d37ee560e31b60005260046000fd5b9061080d603c806108046108129542611a0e565b04920485611993565b611980565b91808311610824575b50600390610778565b9150600361081b565b6371642c7760e11b60005260046000fd5b34610258576000366003190112610258576020600754604051908152f35b346102585760203660031901126102585760043560045442108015610a92575b610a81578015610a70576001546040516323b872dd60e01b6020820152336024820152306044820152606480820184905281526108cc916001600160a01b03166108c76084836119b3565b611eea565b3360005260106020526040600020805415610a15575b6108ed828254611a1b565b81556108fb82600754611a1b565b60075561090d600454600f5490611a1b565b42111580610a09575b61094a575b506040519081527f62722348256371b5147820d6cad90c40fd2da1ccee18c3ed52c0bca5a61dbbab60203392a2005b60025460405163307ada3960e21b815260048101849052336024820152929190602090849060449082906000906001600160a01b03165af1928315610579576000936109d2575b5091600481929301556040519081528160208201527fdb4445d4f94b7320d1834734c8c6f93a74a25048fc5295cac114fe2734d8e34860403392a28161091b565b6020813d602011610a01575b816109eb602093836119b3565b810103126109fd575192506004610991565b8380fd5b3d91506109de565b50600481015415610916565b60115468010000000000000000811015610a5a57806001610a39920160115561194f565b81546001600160a01b0360039290921b91821b19163390911b1790556108e2565b634e487b7160e01b600052604160045260246000fd5b631f2a200560e01b60005260046000fd5b63b7b2409760e01b60005260046000fd5b50600554421161087c565b34610258576000366003190112610258576020600e54604051908152f35b34610258576000366003190112610258576020600a54604051908152f35b3461025857600036600319011261025857602060405160008152f35b3461025857604036600319011261025857610b0e611923565b60243590610b1a611b4e565b6001600160a01b0316908115610b85578015610a705760ff600954161580610b5d575b610b4c57610327913390611a9e565b63ea8e4eb560e01b60005260046000fd5b506000546001600160a01b0316821480610b3d57506001546001600160a01b03168214610b3d565b63d92e233d60e01b60005260046000fd5b3461025857600036600319011261025857602060ff600954166040519015158152f35b3461025857604036600319011261025857610bd2611923565b610bda611939565b90610be3611b4e565b60ff60095460101c16156105e5576001600160a01b0316908115610b85576001600160a01b03811615610b85576040516370a0823160e01b815230600482015290602082602481865afa91821561057957600092610c4c575b508115610a705761032792611a9e565b90916020823d602011610c7b575b81610c67602093836119b3565b81010312610c785750519083610c3c565b80fd5b3d9150610c5a565b3461025857604036600319011261025857610c9c611939565b600435600052600080516020611f9483398151915260205260406000209060018060a01b0316600052602052602060ff604060002054166040519015158152f35b3461025857600036600319011261025857600080516020611f74833981519152546040516001600160a01b039091168152602090f35b34610258576000366003190112610258576020600854604051908152f35b34610258576000366003190112610258576020600454604051908152f35b34610258576000366003190112610258576001546040516001600160a01b039091168152602090f35b3461025857600036600319011261025857610d91611eb4565b600080516020611f7483398151915280546001600160a01b031981169091556000906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b34610258576000366003190112610258576020600f54604051908152f35b3461025857602036600319011261025857600435610e1c611adc565b60ff600954166102b25780158015610e38575b61029557600e55005b5060648111610e2f565b3461025857602036600319011261025857600435601154811015610e8457610e6b60209161194f565b905460405160039290921b1c6001600160a01b03168152f35b60405162461bcd60e51b8152602060048201526013602482015272496e646578206f7574206f6620626f756e647360681b6044820152606490fd5b3461025857602036600319011261025857610ed8611923565b6000809160018060a01b0316825260106020526040822091825491600184015460ff60028601541694600460038201549101549160ff60095460081c1680611026575b610f4c575b9560e0966040519687526020870152151560408601526060850152608084015260a083015260c0820152f35b9395801561100f575b600c5460640360648111610ffb5796826064610f7360e09a89611980565b048290600a54600b5490610f878282611a1b565b4210610fb457505090505b81811115610fad57610fa49250611a0e565b94909650610f20565b5050610fa4565b804211610fc4575b505050610f92565b610fe3929350603c80610fda61080d9342611a0e565b04920484611993565b90808211610ff3575b8080610fbc565b90508a610fec565b634e487b7160e01b88526011600452602488fd5b9250606461101f600c5486611980565b0492610f55565b50801515610f1b565b34610258576000366003190112610258576020600654604051908152f35b34610258576000366003190112610258576020600d54604051908152f35b34610258576000366003190112610258576000546040516001600160a01b039091168152602090f35b34610258576000366003190112610258576020600c54604051908152f35b346102585760203660031901126102585760043560115481101561025857610e6b60209161194f565b34610258576020366003190112610258576004356110f7611adc565b60ff600954166102b25780158015611113575b61029557600c55005b506064811161110a565b3461025857600036600319011261025857611136611adc565b6005544211156105f65760095460ff81166102b25760ff19166001176009556007541561122357600754670de0b6b3a7640000810290808204670de0b6b3a764000014901517156105855760065461118d91611993565b6008555b60005b6011548110156111e957806111aa60019261194f565b838060a01b0391549060031b1c1660005260106020526040600020826111e06111d7835460065490611980565b60075490611993565b91015501611194565b42600a557fce4010416b0dec196298b584ceebdd43ecf89e6c03007517c3a7f4403db6c212604060075460085482519182526020820152a1005b6000600855611191565b3461025857604036600319011261025857611246611939565b336001600160a01b038216036112625761032790600435611e14565b63334bd91960e11b60005260046000fd5b34610258576000366003190112610258576020600554604051908152f35b34610258576040366003190112610258576103276004356112b0611939565b906112bd6106f2826119ed565b611d6b565b346102585760203660031901126102585760206112e06004356119ed565b604051908152f35b3461025857600036600319011261025857611301611adc565b60095460ff8116156105f65761ff001916610100176009557f25b238f97b16f614c2cc471460ad0d72c33c632bde1300d098e531ed9b5a627a600080a1005b34610258576000366003190112610258576020600b54604051908152f35b346102585761018036600319011261025857611378611923565b611380611939565b6044356001600160a01b03811690819003610258576064356001600160a01b038116908190036102585760843560a43560c4359060e43592610104359461012435966101443598600080516020611fb4833981519152549a60ff8c60401c16159b8c67ffffffffffffffff82168015918261172e575b506001149081611724575b15908161171b575b5061170a5767ffffffffffffffff198116600117600080516020611fb4833981519152558c6116dd575b5061143c611f45565b611444611f45565b61144d33611a28565b611455611f45565b6001600160a01b03169081156116cc576001600160a01b03169081156116cc5782156116bb5783156116aa57428511156116995784861115611699578615610295578715801561168f575b6102955788158015611685575b610295578915801561167b575b610295578a15610295576001600160601b0360a01b60005416176000556001600160601b0360a01b60015416176001556001600160601b0360a01b60025416176002556001600160601b0360a01b6003541617600355600455600555600655600d55600e55600c55600b5561016435600f5561153533611beb565b5061153f33611c9d565b5060025460405163e5a6b10f60e01b81526001600160a01b0390911690602081600481855afa90811561057957600091611634575b5060405163095ea7b360e01b815260048101929092526000196024830152602090829060449082906000906001600160a01b03165af1801561057957611615575b506115bc57005b68ff000000000000000019600080516020611fb48339815191525416600080516020611fb4833981519152557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160018152a1005b61162d9060203d6020116105c1576105b481836119b3565b50816115b5565b6020813d602011611673575b8161164d602093836119b3565b8101031261166f5751906001600160a01b0382168203610c7857506000611574565b5080fd5b3d9150611640565b5060648a116114ba565b50606489116114ad565b50868810156114a0565b63b7d0949760e01b60005260046000fd5b631bf06d4d60e31b60005260046000fd5b632b33b1fb60e21b60005260046000fd5b630f58058360e11b60005260046000fd5b68ffffffffffffffffff19166801000000000000000117600080516020611fb4833981519152558c611433565b63f92ee8a960e01b60005260046000fd5b9050158e611409565b303b159150611401565b91508e6113f6565b34610258576020366003190112610258576001600160a01b03611757611923565b16600052601060205260a0604060002080549060018101549060ff600282015416600460038301549201549260405194855260208501521515604084015260608301526080820152f35b3461025857600036600319011261025857602060ff60095460081c166040519015158152f35b34610258576020366003190112610258576117e0611adc565b60ff600954166102b257600435600f55005b346102585760003660031901126102585760ff60095460081c161561082d57336000526010602052604060002060018101549081156107df5760020180549160ff831661189657606461184a600192600c5490611980565b049260ff1916179055611868813360018060a01b0360005416611a9e565b6040519081527f1db3d897126a63b6e2ce74502c05c2867d4246724fb12e092410859138231dc260203392a2005b630c8d9eab60e31b60005260046000fd5b34610258576000366003190112610258576003546040516001600160a01b039091168152602090f35b34610258576020366003190112610258576004359063ffffffff60e01b821680920361025857602091637965db0b60e01b8114908115611912575b5015158152f35b6301ffc9a760e01b1490508361190b565b600435906001600160a01b038216820361025857565b602435906001600160a01b038216820361025857565b60115481101561196a57601160005260206000200190600090565b634e487b7160e01b600052603260045260246000fd5b8181029291811591840414171561058557565b811561199d570490565b634e487b7160e01b600052601260045260246000fd5b90601f8019910116810190811067ffffffffffffffff821117610a5a57604052565b90816020910312610258575180151581036102585790565b600052600080516020611f9483398151915260205260016040600020015490565b9190820391821161058557565b9190820180921161058557565b6001600160a01b03168015611a8857600080516020611f7483398151915280546001600160a01b0319811683179091556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a3565b631e4fbdf760e01b600052600060045260246000fd5b60405163a9059cbb60e01b60208201526001600160a01b03929092166024830152604480830193909352918152611ada916108c76064836119b3565b565b3360009081527f448256db8f8fb95ee3eaaf89c1051414494e85cebb6057fcf996cc3d0ccfb456602052604090205460ff1615611b1557565b63e2517d3f60e01b600052336004527f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b92960245260446000fd5b3360009081527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d602052604090205460ff1615611b8757565b63e2517d3f60e01b60005233600452600060245260446000fd5b6000818152600080516020611f948339815191526020908152604080832033845290915290205460ff1615611bd35750565b63e2517d3f60e01b6000523360045260245260446000fd5b6001600160a01b03811660009081527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d602052604090205460ff16611c97576001600160a01b031660008181527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d60205260408120805460ff191660011790553391907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d8180a4600190565b50600090565b6001600160a01b03811660009081527f448256db8f8fb95ee3eaaf89c1051414494e85cebb6057fcf996cc3d0ccfb456602052604090205460ff16611c97576001600160a01b031660008181527f448256db8f8fb95ee3eaaf89c1051414494e85cebb6057fcf996cc3d0ccfb45660205260408120805460ff191660011790553391907f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b929907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9080a4600190565b6000818152600080516020611f94833981519152602090815260408083206001600160a01b038616845290915290205460ff16611e0d576000818152600080516020611f94833981519152602090815260408083206001600160a01b0395909516808452949091528120805460ff19166001179055339291907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9080a4600190565b5050600090565b6000818152600080516020611f94833981519152602090815260408083206001600160a01b038616845290915290205460ff1615611e0d576000818152600080516020611f94833981519152602090815260408083206001600160a01b0395909516808452949091528120805460ff19169055339291907ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9080a4600190565b600080516020611f74833981519152546001600160a01b03163303611ed557565b63118cdaa760e01b6000523360045260246000fd5b906000602091828151910182855af115610579576000513d611f3c57506001600160a01b0381163b155b611f1b5750565b635274afe760e01b60009081526001600160a01b0391909116600452602490fd5b60011415611f14565b60ff600080516020611fb48339815191525460401c1615611f6257565b631afcd79f60e31b60005260046000fdfe9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930002dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00a26469706673582212201525e21c01fa85e362480bacb2da0c958a316eb9f1975b179ac74a1b866f425064736f6c634300081c0033",
1208
- "deployedBytecode": "0x608080604052600436101561001357600080fd5b60003560e01c90816301ffc9a7146118d0575080630758d924146118a757806307bb0a22146117f257806309295d09146117c75780630e141a9b146117a15780630f6ca1a814611736578063128b4e981461135e5780631514617e146113405780632081a88c146112e8578063248a9ca3146112c25780632f2ff15d146112915780633197cbb61461127357806336568abe1461122d578063380d831b1461111d5780633845cebf146110db5780633cb5d100146110b257806341cf19ba146110945780634b60ce771461106b5780634b8ce6021461104d57806360219c7b1461102f5780636386c1c714610ebf57806366349e3f14610e42578063684d411e14610e00578063692c931a14610de2578063715018a614610d7857806378065f2714610d4f57806378e9792514610d315780637ff9b59614610d135780638da5cb5b14610cdd57806391d1485414610c83578063928ba37f14610bb95780639b8906ae14610b96578063a1db978214610af5578063a217fddf14610ad9578063a8660a7814610abb578063b068375514610a9d578063c1cbbca71461085c578063c5c4744c1461083e578063d01c44cd146106fc578063d547741f146106c6578063d9443923146106a0578063db83694c14610638578063dd19aa5714610607578063e8078d9414610352578063f1bd27a814610329578063f2fde38b146102fe578063f5b541a6146102c3578063fa09267c1461025d5763feed55611461023a57600080fd5b34610258576000366003190112610258576020601154604051908152f35b600080fd5b3461025857602036600319011261025857600435610279611adc565b60ff600954166102b257801580156102a6575b61029557600d55005b63162908e360e11b60005260046000fd5b5060065481101561028c565b637ce54feb60e11b60005260046000fd5b346102585760003660031901126102585760206040517f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b9298152f35b346102585760203660031901126102585761032761031a611923565b610322611eb4565b611a28565b005b34610258576000366003190112610258576002546040516001600160a01b039091168152602090f35b346102585760003660031901126102585761036b611adc565b60095460ff8116156105f65760ff8160101c166105e557620100009062ff000019161760095560646103a2600754600e5490611980565b60008054600354600d5460405163095ea7b360e01b81526001600160a01b03928316600482015260248101919091529490930493926020928492604492849291165af18015610579576105c8575b5060015460035460405163095ea7b360e01b81526001600160a01b039182166004820152602481018490529160209183916044918391600091165af180156105795761059b575b50600354600d54916062808402926001600160a01b03169190848404148415171561058557606281029080820460621481151715610585576000546001546001600160a01b03908116949116919042610708810190811061058557606461010495816060996000966040519c8d9b8c9a62e8e33760e81b8c5260048c015260248b015260448a0152828901520460848701520460a48501523060c485015260e48401525af180156105795760009160009161051f575b7f38f8a0c92f4c5b0b6877f878cb4c0c8d348a47b76d716c8e78f425043df9515b6040848482519182526020820152a1005b9150506060813d606011610571575b8161053b606093836119b3565b810103126102585780516020909101517f38f8a0c92f4c5b0b6877f878cb4c0c8d348a47b76d716c8e78f425043df9515b6104ed565b3d915061052e565b6040513d6000823e3d90fd5b634e487b7160e01b600052601160045260246000fd5b6105bc9060203d6020116105c1575b6105b481836119b3565b8101906119d5565b610437565b503d6105aa565b6105e09060203d6020116105c1576105b481836119b3565b6103f0565b630fd02b6d60e41b60005260046000fd5b639d98b04b60e01b60005260046000fd5b3461025857602036600319011261025857600435610623611adc565b60ff600954166102b257801561029557600b55005b346102585760003660031901126102585761010060045460ff60055460065460075460085491600954936040519687526020870152604086015260608501526080840152818116151560a0840152818160081c16151560c084015260101c16151560e0820152f35b3461025857600036600319011261025857602060ff60095460101c166040519015158152f35b34610258576040366003190112610258576103276004356106e5611939565b906106f76106f2826119ed565b611ba1565b611e14565b346102585760003660031901126102585760095460ff8160081c161561082d5760ff16156105f6573360005260106020526040600020600181015480156107df57600c5460640390606482116105855760649161075891611980565b0490600a54600b549061076b8282611a1b565b42106107f0575060039190505b0161078581548093611a0e565b9182156107df578261079691611a1b565b90556000546107b190829033906001600160a01b0316611a9e565b6040519081527fc15eb22beb780252072bdeec94b7fce7b15822d73417b8a4f92640577eb6fceb60203392a2005b6312d37ee560e31b60005260046000fd5b9061080d603c806108046108129542611a0e565b04920485611993565b611980565b91808311610824575b50600390610778565b9150600361081b565b6371642c7760e11b60005260046000fd5b34610258576000366003190112610258576020600754604051908152f35b346102585760203660031901126102585760043560045442108015610a92575b610a81578015610a70576001546040516323b872dd60e01b6020820152336024820152306044820152606480820184905281526108cc916001600160a01b03166108c76084836119b3565b611eea565b3360005260106020526040600020805415610a15575b6108ed828254611a1b565b81556108fb82600754611a1b565b60075561090d600454600f5490611a1b565b42111580610a09575b61094a575b506040519081527f62722348256371b5147820d6cad90c40fd2da1ccee18c3ed52c0bca5a61dbbab60203392a2005b60025460405163307ada3960e21b815260048101849052336024820152929190602090849060449082906000906001600160a01b03165af1928315610579576000936109d2575b5091600481929301556040519081528160208201527fdb4445d4f94b7320d1834734c8c6f93a74a25048fc5295cac114fe2734d8e34860403392a28161091b565b6020813d602011610a01575b816109eb602093836119b3565b810103126109fd575192506004610991565b8380fd5b3d91506109de565b50600481015415610916565b60115468010000000000000000811015610a5a57806001610a39920160115561194f565b81546001600160a01b0360039290921b91821b19163390911b1790556108e2565b634e487b7160e01b600052604160045260246000fd5b631f2a200560e01b60005260046000fd5b63b7b2409760e01b60005260046000fd5b50600554421161087c565b34610258576000366003190112610258576020600e54604051908152f35b34610258576000366003190112610258576020600a54604051908152f35b3461025857600036600319011261025857602060405160008152f35b3461025857604036600319011261025857610b0e611923565b60243590610b1a611b4e565b6001600160a01b0316908115610b85578015610a705760ff600954161580610b5d575b610b4c57610327913390611a9e565b63ea8e4eb560e01b60005260046000fd5b506000546001600160a01b0316821480610b3d57506001546001600160a01b03168214610b3d565b63d92e233d60e01b60005260046000fd5b3461025857600036600319011261025857602060ff600954166040519015158152f35b3461025857604036600319011261025857610bd2611923565b610bda611939565b90610be3611b4e565b60ff60095460101c16156105e5576001600160a01b0316908115610b85576001600160a01b03811615610b85576040516370a0823160e01b815230600482015290602082602481865afa91821561057957600092610c4c575b508115610a705761032792611a9e565b90916020823d602011610c7b575b81610c67602093836119b3565b81010312610c785750519083610c3c565b80fd5b3d9150610c5a565b3461025857604036600319011261025857610c9c611939565b600435600052600080516020611f9483398151915260205260406000209060018060a01b0316600052602052602060ff604060002054166040519015158152f35b3461025857600036600319011261025857600080516020611f74833981519152546040516001600160a01b039091168152602090f35b34610258576000366003190112610258576020600854604051908152f35b34610258576000366003190112610258576020600454604051908152f35b34610258576000366003190112610258576001546040516001600160a01b039091168152602090f35b3461025857600036600319011261025857610d91611eb4565b600080516020611f7483398151915280546001600160a01b031981169091556000906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b34610258576000366003190112610258576020600f54604051908152f35b3461025857602036600319011261025857600435610e1c611adc565b60ff600954166102b25780158015610e38575b61029557600e55005b5060648111610e2f565b3461025857602036600319011261025857600435601154811015610e8457610e6b60209161194f565b905460405160039290921b1c6001600160a01b03168152f35b60405162461bcd60e51b8152602060048201526013602482015272496e646578206f7574206f6620626f756e647360681b6044820152606490fd5b3461025857602036600319011261025857610ed8611923565b6000809160018060a01b0316825260106020526040822091825491600184015460ff60028601541694600460038201549101549160ff60095460081c1680611026575b610f4c575b9560e0966040519687526020870152151560408601526060850152608084015260a083015260c0820152f35b9395801561100f575b600c5460640360648111610ffb5796826064610f7360e09a89611980565b048290600a54600b5490610f878282611a1b565b4210610fb457505090505b81811115610fad57610fa49250611a0e565b94909650610f20565b5050610fa4565b804211610fc4575b505050610f92565b610fe3929350603c80610fda61080d9342611a0e565b04920484611993565b90808211610ff3575b8080610fbc565b90508a610fec565b634e487b7160e01b88526011600452602488fd5b9250606461101f600c5486611980565b0492610f55565b50801515610f1b565b34610258576000366003190112610258576020600654604051908152f35b34610258576000366003190112610258576020600d54604051908152f35b34610258576000366003190112610258576000546040516001600160a01b039091168152602090f35b34610258576000366003190112610258576020600c54604051908152f35b346102585760203660031901126102585760043560115481101561025857610e6b60209161194f565b34610258576020366003190112610258576004356110f7611adc565b60ff600954166102b25780158015611113575b61029557600c55005b506064811161110a565b3461025857600036600319011261025857611136611adc565b6005544211156105f65760095460ff81166102b25760ff19166001176009556007541561122357600754670de0b6b3a7640000810290808204670de0b6b3a764000014901517156105855760065461118d91611993565b6008555b60005b6011548110156111e957806111aa60019261194f565b838060a01b0391549060031b1c1660005260106020526040600020826111e06111d7835460065490611980565b60075490611993565b91015501611194565b42600a557fce4010416b0dec196298b584ceebdd43ecf89e6c03007517c3a7f4403db6c212604060075460085482519182526020820152a1005b6000600855611191565b3461025857604036600319011261025857611246611939565b336001600160a01b038216036112625761032790600435611e14565b63334bd91960e11b60005260046000fd5b34610258576000366003190112610258576020600554604051908152f35b34610258576040366003190112610258576103276004356112b0611939565b906112bd6106f2826119ed565b611d6b565b346102585760203660031901126102585760206112e06004356119ed565b604051908152f35b3461025857600036600319011261025857611301611adc565b60095460ff8116156105f65761ff001916610100176009557f25b238f97b16f614c2cc471460ad0d72c33c632bde1300d098e531ed9b5a627a600080a1005b34610258576000366003190112610258576020600b54604051908152f35b346102585761018036600319011261025857611378611923565b611380611939565b6044356001600160a01b03811690819003610258576064356001600160a01b038116908190036102585760843560a43560c4359060e43592610104359461012435966101443598600080516020611fb4833981519152549a60ff8c60401c16159b8c67ffffffffffffffff82168015918261172e575b506001149081611724575b15908161171b575b5061170a5767ffffffffffffffff198116600117600080516020611fb4833981519152558c6116dd575b5061143c611f45565b611444611f45565b61144d33611a28565b611455611f45565b6001600160a01b03169081156116cc576001600160a01b03169081156116cc5782156116bb5783156116aa57428511156116995784861115611699578615610295578715801561168f575b6102955788158015611685575b610295578915801561167b575b610295578a15610295576001600160601b0360a01b60005416176000556001600160601b0360a01b60015416176001556001600160601b0360a01b60025416176002556001600160601b0360a01b6003541617600355600455600555600655600d55600e55600c55600b5561016435600f5561153533611beb565b5061153f33611c9d565b5060025460405163e5a6b10f60e01b81526001600160a01b0390911690602081600481855afa90811561057957600091611634575b5060405163095ea7b360e01b815260048101929092526000196024830152602090829060449082906000906001600160a01b03165af1801561057957611615575b506115bc57005b68ff000000000000000019600080516020611fb48339815191525416600080516020611fb4833981519152557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160018152a1005b61162d9060203d6020116105c1576105b481836119b3565b50816115b5565b6020813d602011611673575b8161164d602093836119b3565b8101031261166f5751906001600160a01b0382168203610c7857506000611574565b5080fd5b3d9150611640565b5060648a116114ba565b50606489116114ad565b50868810156114a0565b63b7d0949760e01b60005260046000fd5b631bf06d4d60e31b60005260046000fd5b632b33b1fb60e21b60005260046000fd5b630f58058360e11b60005260046000fd5b68ffffffffffffffffff19166801000000000000000117600080516020611fb4833981519152558c611433565b63f92ee8a960e01b60005260046000fd5b9050158e611409565b303b159150611401565b91508e6113f6565b34610258576020366003190112610258576001600160a01b03611757611923565b16600052601060205260a0604060002080549060018101549060ff600282015416600460038301549201549260405194855260208501521515604084015260608301526080820152f35b3461025857600036600319011261025857602060ff60095460081c166040519015158152f35b34610258576020366003190112610258576117e0611adc565b60ff600954166102b257600435600f55005b346102585760003660031901126102585760ff60095460081c161561082d57336000526010602052604060002060018101549081156107df5760020180549160ff831661189657606461184a600192600c5490611980565b049260ff1916179055611868813360018060a01b0360005416611a9e565b6040519081527f1db3d897126a63b6e2ce74502c05c2867d4246724fb12e092410859138231dc260203392a2005b630c8d9eab60e31b60005260046000fd5b34610258576000366003190112610258576003546040516001600160a01b039091168152602090f35b34610258576020366003190112610258576004359063ffffffff60e01b821680920361025857602091637965db0b60e01b8114908115611912575b5015158152f35b6301ffc9a760e01b1490508361190b565b600435906001600160a01b038216820361025857565b602435906001600160a01b038216820361025857565b60115481101561196a57601160005260206000200190600090565b634e487b7160e01b600052603260045260246000fd5b8181029291811591840414171561058557565b811561199d570490565b634e487b7160e01b600052601260045260246000fd5b90601f8019910116810190811067ffffffffffffffff821117610a5a57604052565b90816020910312610258575180151581036102585790565b600052600080516020611f9483398151915260205260016040600020015490565b9190820391821161058557565b9190820180921161058557565b6001600160a01b03168015611a8857600080516020611f7483398151915280546001600160a01b0319811683179091556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a3565b631e4fbdf760e01b600052600060045260246000fd5b60405163a9059cbb60e01b60208201526001600160a01b03929092166024830152604480830193909352918152611ada916108c76064836119b3565b565b3360009081527f448256db8f8fb95ee3eaaf89c1051414494e85cebb6057fcf996cc3d0ccfb456602052604090205460ff1615611b1557565b63e2517d3f60e01b600052336004527f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b92960245260446000fd5b3360009081527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d602052604090205460ff1615611b8757565b63e2517d3f60e01b60005233600452600060245260446000fd5b6000818152600080516020611f948339815191526020908152604080832033845290915290205460ff1615611bd35750565b63e2517d3f60e01b6000523360045260245260446000fd5b6001600160a01b03811660009081527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d602052604090205460ff16611c97576001600160a01b031660008181527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d60205260408120805460ff191660011790553391907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d8180a4600190565b50600090565b6001600160a01b03811660009081527f448256db8f8fb95ee3eaaf89c1051414494e85cebb6057fcf996cc3d0ccfb456602052604090205460ff16611c97576001600160a01b031660008181527f448256db8f8fb95ee3eaaf89c1051414494e85cebb6057fcf996cc3d0ccfb45660205260408120805460ff191660011790553391907f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b929907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9080a4600190565b6000818152600080516020611f94833981519152602090815260408083206001600160a01b038616845290915290205460ff16611e0d576000818152600080516020611f94833981519152602090815260408083206001600160a01b0395909516808452949091528120805460ff19166001179055339291907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9080a4600190565b5050600090565b6000818152600080516020611f94833981519152602090815260408083206001600160a01b038616845290915290205460ff1615611e0d576000818152600080516020611f94833981519152602090815260408083206001600160a01b0395909516808452949091528120805460ff19169055339291907ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9080a4600190565b600080516020611f74833981519152546001600160a01b03163303611ed557565b63118cdaa760e01b6000523360045260246000fd5b906000602091828151910182855af115610579576000513d611f3c57506001600160a01b0381163b155b611f1b5750565b635274afe760e01b60009081526001600160a01b0391909116600452602490fd5b60011415611f14565b60ff600080516020611fb48339815191525460401c1615611f6257565b631afcd79f60e31b60005260046000fdfe9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930002dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00a26469706673582212201525e21c01fa85e362480bacb2da0c958a316eb9f1975b179ac74a1b866f425064736f6c634300081c0033",
1298
+ "bytecode": "0x6080806040523460d2577ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460ff8160401c1660c1576002600160401b03196001600160401b03821601605c575b60405161233a90816100d88239f35b6001600160401b0319166001600160401b039081177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005581527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a13880604d565b63f92ee8a960e01b60005260046000fd5b600080fdfe60808060405260043610156100a0575b5036156100275763078d696560e31b60005260046000fd5b6001546000906001600160a01b0316610091573461004157005b303b1561008e5760405163060b0b0f60e41b815260048101829052336024820152818160448134305af180156100835761007757005b8161008191611cea565b005b6040513d84823e3d90fd5b80fd5b63078d696560e31b8152600490fd5b60003560e01c90816301ffc9a714611be6575080630758d92414611bbd57806307bb0a2214611b0857806309295d0914611add5780630e141a9b14611ab75780630f6ca1a814611a4c5780631514617e14611a2e5780632081a88c146119d6578063248a9ca3146119b05780632f2ff15d1461197f5780633197cbb61461196157806336118b521461187657806336568abe14611830578063380d831b146117205780633845cebf146116de5780633cb5d100146116b557806341cf19ba146116975780634b60ce771461166e5780634b8ce6021461165057806360219c7b1461163257806360b0b0f01461138e5780636386c1c71461121e57806366349e3f146111a1578063684d411e1461115f578063692c931a14611141578063715018a6146110d757806378065f27146110ae57806378e97925146110905780637ff9b596146110725780638da5cb5b1461103c57806391d1485414610fe2578063928ba37f14610f1b5780639b23218a14610ef45780639b8906ae14610ed1578063a1db978214610e1f578063a217fddf14610e03578063a8660a7814610de5578063b068375514610dc7578063b6d74568146109eb578063c5c4744c146109cd578063d01c44cd1461088b578063d547741f14610855578063d89031d014610837578063d944392314610811578063db83694c146107a9578063dd19aa5714610778578063e8078d94146103ff578063f1bd27a8146103d6578063f2fde38b146103ad578063f5b541a614610372578063fa09267c1461030c5763feed5561146102e9573861000f565b34610307576000366003190112610307576020601254604051908152f35b600080fd5b3461030757602036600319011261030757600435610328611e0d565b60ff600a54166103615780158015610355575b61034457600e55005b63162908e360e11b60005260046000fd5b5060065481101561033b565b637ce54feb60e11b60005260046000fd5b346103075760003660031901126103075760206040517f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b9298152f35b34610307576020366003190112610307576100816103c9611c39565b6103d16121e5565b611d59565b34610307576000366003190112610307576002546040516001600160a01b039091168152602090f35b600036600319011261030757610413611e0d565b600a5460ff8116156107675760ff8160101c1661075657620100009062ff0000191617600a55606461044a600754600f5490611c96565b60008054600354600e5460405163095ea7b360e01b81526001600160a01b03928316600482015260248101919091529490930493926020928492604492849291165af180156105b957610739575b5060018060a01b0360035416600e546062810290808204606214901517156105c557606490049160628102818104606214821517156105c5576001546064909104906000906001600160a01b0316806105db57505060018060a01b0360005416600e54926107084201948542116105c55760609560c494604051988997889663f305d71960e01b8852600488015260248701526044860152606485015230608485015260a48401525af180156105b9577f38f8a0c92f4c5b0b6877f878cb4c0c8d348a47b76d716c8e78f425043df9515b91604091600091600091610587575b505b82519182526020820152a1005b90506105ab915060603d6060116105b2575b6105a38183611cea565b810190611d3e565b5084610578565b503d610599565b6040513d6000823e3d90fd5b634e487b7160e01b600052601160045260246000fd5b60405163095ea7b360e01b81526001600160a01b0386166004820152602481018590529195949293929190602090829060449082908a905af1801561072e57610701575b5060018060a01b038554169160018060a01b036001541693600e54956107084201928342116106ed57928892610104959260609897956040519a8b998a9862e8e33760e81b8a5260048a0152602489015260448801526064870152608486015260a48501523060c485015260e48401525af190811561008357916040917f38f8a0c92f4c5b0b6877f878cb4c0c8d348a47b76d716c8e78f425043df9515b9382916106cb575b5061057a565b90506106e6915060603d6060116105b2576105a38183611cea565b50846106c5565b634e487b7160e01b89526011600452602489fd5b6107229060203d602011610727575b61071a8183611cea565b810190611d26565b61061f565b503d610710565b6040513d88823e3d90fd5b6107519060203d6020116107275761071a8183611cea565b610498565b630fd02b6d60e41b60005260046000fd5b639d98b04b60e01b60005260046000fd5b3461030757602036600319011261030757600435610794611e0d565b60ff600a541661036157801561034457600c55005b346103075760003660031901126103075761010060045460ff60055460065460075460085491600a54936040519687526020870152604086015260608501526080840152818116151560a0840152818160081c16151560c084015260101c16151560e0820152f35b3461030757600036600319011261030757602060ff600a5460101c166040519015158152f35b34610307576000366003190112610307576020600954604051908152f35b3461030757604036600319011261030757610081600435610874611c4f565b9061088661088182611cc9565b611ed2565b612145565b3461030757600036600319011261030757600a5460ff8160081c16156109bc5760ff16156107675733600052601160205260406000206001810154801561096e57600d5460640390606482116105c5576064916108e791611c96565b0490600b54600c54906108fa8282611d0c565b421061097f575060039190505b0161091481548093611d19565b91821561096e578261092591611d0c565b905560005461094090829033906001600160a01b0316611dcf565b6040519081527fc15eb22beb780252072bdeec94b7fce7b15822d73417b8a4f92640577eb6fceb60203392a2005b6312d37ee560e31b60005260046000fd5b9061099c603c806109936109a19542611d19565b04920485611ca9565b611c96565b918083116109b3575b50600390610907565b915060036109aa565b6371642c7760e11b60005260046000fd5b34610307576000366003190112610307576020600754604051908152f35b34610307576101a036600319011261030757610a05611c39565b610a0d611c4f565b6044356001600160a01b03811690819003610307576064356001600160a01b038116908190036103075760843560a43560c43560e4359161010435936101243595610144359761018435996000805160206122e5833981519152549b60ff8d60401c16159c8d67ffffffffffffffff821680159182610dbf575b506001149081610db5575b159081610dac575b50610d9b5767ffffffffffffffff1981166001176000805160206122e5833981519152558d610d6e575b50610acd612276565b610ad5612276565b610ade33611d59565b610ae6612276565b6001600160a01b03168015610d5d578215610d4c578315610d3b5742851115610d2a5784861115610d2a5786156103445787158015610d20575b6103445788158015610d16575b6103445789158015610d0c575b610344578a15610344578b15610344576001600160601b0360a01b600054161760005560018060a01b03166001600160601b0360a01b60015416176001556001600160601b0360a01b60025416176002556001600160601b0360a01b6003541617600355600455600555600655600e55600f55600d55600c5561016435601055600955610bc633611f1c565b50610bd033611fce565b5060025460405163e5a6b10f60e01b81526001600160a01b0390911690602081600481855afa9081156105b957600091610cc5575b5060405163095ea7b360e01b815260048101929092526000196024830152602090829060449082906000906001600160a01b03165af180156105b957610ca6575b50610c4d57005b68ff0000000000000000196000805160206122e583398151915254166000805160206122e5833981519152557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160018152a1005b610cbe9060203d6020116107275761071a8183611cea565b5081610c46565b6020813d602011610d04575b81610cde60209383611cea565b81010312610d005751906001600160a01b038216820361008e57506000610c05565b5080fd5b3d9150610cd1565b5060648a11610b3a565b5060648911610b2d565b5086881015610b20565b63b7d0949760e01b60005260046000fd5b631bf06d4d60e31b60005260046000fd5b632b33b1fb60e21b60005260046000fd5b630f58058360e11b60005260046000fd5b68ffffffffffffffffff191668010000000000000001176000805160206122e5833981519152558d610ac4565b63f92ee8a960e01b60005260046000fd5b9050158f610a9a565b303b159150610a92565b91508f610a87565b34610307576000366003190112610307576020600f54604051908152f35b34610307576000366003190112610307576020600b54604051908152f35b3461030757600036600319011261030757602060405160008152f35b3461030757604036600319011261030757610e38611c39565b60243590610e44611e7f565b6001600160a01b0316908115610ec0578015610eaf5760ff600a54161580610e87575b610e7657610081913390611dcf565b63ea8e4eb560e01b60005260046000fd5b506000546001600160a01b0316821480610e6757506001546001600160a01b03168214610e67565b631f2a200560e01b60005260046000fd5b63d92e233d60e01b60005260046000fd5b3461030757600036600319011261030757602060ff600a54166040519015158152f35b3461030757602036600319011261030757600435610f10611e0d565b801561034457600955005b3461030757604036600319011261030757610f34611c39565b610f3c611c4f565b90610f45611e7f565b60ff600a5460101c1615610756576001600160a01b0316908115610ec0576001600160a01b03811615610ec0576040516370a0823160e01b815230600482015290602082602481865afa9182156105b957600092610fae575b508115610eaf5761008192611dcf565b90916020823d602011610fda575b81610fc960209383611cea565b8101031261008e5750519083610f9e565b3d9150610fbc565b3461030757604036600319011261030757610ffb611c4f565b6004356000526000805160206122c583398151915260205260406000209060018060a01b0316600052602052602060ff604060002054166040519015158152f35b34610307576000366003190112610307576000805160206122a5833981519152546040516001600160a01b039091168152602090f35b34610307576000366003190112610307576020600854604051908152f35b34610307576000366003190112610307576020600454604051908152f35b34610307576000366003190112610307576001546040516001600160a01b039091168152602090f35b34610307576000366003190112610307576110f06121e5565b6000805160206122a583398151915280546001600160a01b031981169091556000906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b34610307576000366003190112610307576020601054604051908152f35b346103075760203660031901126103075760043561117b611e0d565b60ff600a54166103615780158015611197575b61034457600f55005b506064811161118e565b34610307576020366003190112610307576004356012548110156111e3576111ca602091611c65565b905460405160039290921b1c6001600160a01b03168152f35b60405162461bcd60e51b8152602060048201526013602482015272496e646578206f7574206f6620626f756e647360681b6044820152606490fd5b3461030757602036600319011261030757611237611c39565b6000809160018060a01b0316825260116020526040822091825491600184015460ff60028601541694600460038201549101549160ff600a5460081c1680611385575b6112ab575b9560e0966040519687526020870152151560408601526060850152608084015260a083015260c0820152f35b9395801561136e575b600d546064036064811161135a57968260646112d260e09a89611c96565b048290600b54600c54906112e68282611d0c565b421061131357505090505b8181111561130c576113039250611d19565b9490965061127f565b5050611303565b804211611323575b5050506112f1565b611342929350603c8061133961099c9342611d19565b04920484611ca9565b90808211611352575b808061131b565b90508a61134b565b634e487b7160e01b88526011600452602488fd5b9250606461137e600d5486611c96565b04926112b4565b5080151561127a565b6040366003190112610307576004356113a5611c4f565b60045442108015611627575b611616576001546001600160a01b0316806115c9575034913415610eaf576115b8575b6001600160a01b0316600081815260116020526040902080549192911561155d575b611401828254611d0c565b815561140f82600754611d0c565b60075561142160045460105490611d0c565b42111580611551575b61145d575b5060207f62722348256371b5147820d6cad90c40fd2da1ccee18c3ed52c0bca5a61dbbab91604051908152a2005b600090670de0b6b3a764000061147560095485611c96565b04602060018060a01b036002541660446040518096819363307ada3960e21b83528660048401528a60248401525af19182156105b9578593600093611517575b50604083602095937f62722348256371b5147820d6cad90c40fd2da1ccee18c3ed52c0bca5a61dbbab979560047fdb4445d4f94b7320d1834734c8c6f93a74a25048fc5295cac114fe2734d8e348950155825191825286820152a2915061142f565b919350916020823d602011611549575b8161153460209383611cea565b8101031261008e5750518492909160406114b5565b3d9150611527565b5060048101541561142a565b601254680100000000000000008110156115a2578060016115819201601255611c65565b81546001600160a01b0360039290921b91821b19169085901b1790556113f6565b634e487b7160e01b600052604160045260246000fd5b63078d696560e31b60005260046000fd5b91346115b8578015610eaf57806116119193604051916323b872dd60e01b602084015233602484015230604484015260648301526064825261160c608483611cea565b61221b565b6113d4565b63b7b2409760e01b60005260046000fd5b5060055442116113b1565b34610307576000366003190112610307576020600654604051908152f35b34610307576000366003190112610307576020600e54604051908152f35b34610307576000366003190112610307576000546040516001600160a01b039091168152602090f35b34610307576000366003190112610307576020600d54604051908152f35b3461030757602036600319011261030757600435601254811015610307576111ca602091611c65565b34610307576020366003190112610307576004356116fa611e0d565b60ff600a54166103615780158015611716575b61034457600d55005b506064811161170d565b3461030757600036600319011261030757611739611e0d565b60055442111561076757600a5460ff81166103615760ff1916600117600a556007541561182657600754670de0b6b3a7640000810290808204670de0b6b3a764000014901517156105c55760065461179091611ca9565b6008555b60005b6012548110156117ec57806117ad600192611c65565b838060a01b0391549060031b1c1660005260116020526040600020826117e36117da835460065490611c96565b60075490611ca9565b91015501611797565b42600b557fce4010416b0dec196298b584ceebdd43ecf89e6c03007517c3a7f4403db6c212604060075460085482519182526020820152a1005b6000600855611794565b3461030757604036600319011261030757611849611c4f565b336001600160a01b038216036118655761008190600435612145565b63334bd91960e11b60005260046000fd5b34610307576040366003190112610307576024356001600160a01b0381169060043590829003610307576118a8611e7f565b60ff600a541615610767578015610eaf578115610ec05780471061195057600080808084865af13d1561194b573d67ffffffffffffffff81116115a257604051906118fd601f8201601f191660200183611cea565b8152600060203d92013e5b1561193a5760207f94b2de810873337ed265c5f8cf98c9cffefa06b8607f9a2f1fbaebdfbcfbef1c91604051908152a2005b63b12d13eb60e01b60005260046000fd5b611908565b631e9acf1760e31b60005260046000fd5b34610307576000366003190112610307576020600554604051908152f35b346103075760403660031901126103075761008160043561199e611c4f565b906119ab61088182611cc9565b61209c565b346103075760203660031901126103075760206119ce600435611cc9565b604051908152f35b34610307576000366003190112610307576119ef611e0d565b600a5460ff8116156107675761ff00191661010017600a557f25b238f97b16f614c2cc471460ad0d72c33c632bde1300d098e531ed9b5a627a600080a1005b34610307576000366003190112610307576020600c54604051908152f35b34610307576020366003190112610307576001600160a01b03611a6d611c39565b16600052601160205260a0604060002080549060018101549060ff600282015416600460038301549201549260405194855260208501521515604084015260608301526080820152f35b3461030757600036600319011261030757602060ff600a5460081c166040519015158152f35b3461030757602036600319011261030757611af6611e0d565b60ff600a541661036157600435601055005b346103075760003660031901126103075760ff600a5460081c16156109bc573360005260116020526040600020600181015490811561096e5760020180549160ff8316611bac576064611b60600192600d5490611c96565b049260ff1916179055611b7e813360018060a01b0360005416611dcf565b6040519081527f1db3d897126a63b6e2ce74502c05c2867d4246724fb12e092410859138231dc260203392a2005b630c8d9eab60e31b60005260046000fd5b34610307576000366003190112610307576003546040516001600160a01b039091168152602090f35b34610307576020366003190112610307576004359063ffffffff60e01b821680920361030757602091637965db0b60e01b8114908115611c28575b5015158152f35b6301ffc9a760e01b14905083611c21565b600435906001600160a01b038216820361030757565b602435906001600160a01b038216820361030757565b601254811015611c8057601260005260206000200190600090565b634e487b7160e01b600052603260045260246000fd5b818102929181159184041417156105c557565b8115611cb3570490565b634e487b7160e01b600052601260045260246000fd5b6000526000805160206122c583398151915260205260016040600020015490565b90601f8019910116810190811067ffffffffffffffff8211176115a257604052565b919082018092116105c557565b919082039182116105c557565b90816020910312610307575180151581036103075790565b90816060910312610307578051916040602083015192015190565b6001600160a01b03168015611db9576000805160206122a583398151915280546001600160a01b0319811683179091556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a3565b631e4fbdf760e01b600052600060045260246000fd5b60405163a9059cbb60e01b60208201526001600160a01b03929092166024830152604480830193909352918152611e0b9161160c606483611cea565b565b3360009081527f448256db8f8fb95ee3eaaf89c1051414494e85cebb6057fcf996cc3d0ccfb456602052604090205460ff1615611e4657565b63e2517d3f60e01b600052336004527f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b92960245260446000fd5b3360009081527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d602052604090205460ff1615611eb857565b63e2517d3f60e01b60005233600452600060245260446000fd5b60008181526000805160206122c58339815191526020908152604080832033845290915290205460ff1615611f045750565b63e2517d3f60e01b6000523360045260245260446000fd5b6001600160a01b03811660009081527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d602052604090205460ff16611fc8576001600160a01b031660008181527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d60205260408120805460ff191660011790553391907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d8180a4600190565b50600090565b6001600160a01b03811660009081527f448256db8f8fb95ee3eaaf89c1051414494e85cebb6057fcf996cc3d0ccfb456602052604090205460ff16611fc8576001600160a01b031660008181527f448256db8f8fb95ee3eaaf89c1051414494e85cebb6057fcf996cc3d0ccfb45660205260408120805460ff191660011790553391907f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b929907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9080a4600190565b60008181526000805160206122c5833981519152602090815260408083206001600160a01b038616845290915290205460ff1661213e5760008181526000805160206122c5833981519152602090815260408083206001600160a01b0395909516808452949091528120805460ff19166001179055339291907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9080a4600190565b5050600090565b60008181526000805160206122c5833981519152602090815260408083206001600160a01b038616845290915290205460ff161561213e5760008181526000805160206122c5833981519152602090815260408083206001600160a01b0395909516808452949091528120805460ff19169055339291907ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9080a4600190565b6000805160206122a5833981519152546001600160a01b0316330361220657565b63118cdaa760e01b6000523360045260246000fd5b906000602091828151910182855af1156105b9576000513d61226d57506001600160a01b0381163b155b61224c5750565b635274afe760e01b60009081526001600160a01b0391909116600452602490fd5b60011415612245565b60ff6000805160206122e58339815191525460401c161561229357565b631afcd79f60e31b60005260046000fdfe9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930002dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00a2646970667358221220a03fbbe281a0beea7632c1723ebb610950c03994e76347c93cc1baa899d6b72b64736f6c634300081c0033",
1299
+ "deployedBytecode": "0x60808060405260043610156100a0575b5036156100275763078d696560e31b60005260046000fd5b6001546000906001600160a01b0316610091573461004157005b303b1561008e5760405163060b0b0f60e41b815260048101829052336024820152818160448134305af180156100835761007757005b8161008191611cea565b005b6040513d84823e3d90fd5b80fd5b63078d696560e31b8152600490fd5b60003560e01c90816301ffc9a714611be6575080630758d92414611bbd57806307bb0a2214611b0857806309295d0914611add5780630e141a9b14611ab75780630f6ca1a814611a4c5780631514617e14611a2e5780632081a88c146119d6578063248a9ca3146119b05780632f2ff15d1461197f5780633197cbb61461196157806336118b521461187657806336568abe14611830578063380d831b146117205780633845cebf146116de5780633cb5d100146116b557806341cf19ba146116975780634b60ce771461166e5780634b8ce6021461165057806360219c7b1461163257806360b0b0f01461138e5780636386c1c71461121e57806366349e3f146111a1578063684d411e1461115f578063692c931a14611141578063715018a6146110d757806378065f27146110ae57806378e97925146110905780637ff9b596146110725780638da5cb5b1461103c57806391d1485414610fe2578063928ba37f14610f1b5780639b23218a14610ef45780639b8906ae14610ed1578063a1db978214610e1f578063a217fddf14610e03578063a8660a7814610de5578063b068375514610dc7578063b6d74568146109eb578063c5c4744c146109cd578063d01c44cd1461088b578063d547741f14610855578063d89031d014610837578063d944392314610811578063db83694c146107a9578063dd19aa5714610778578063e8078d94146103ff578063f1bd27a8146103d6578063f2fde38b146103ad578063f5b541a614610372578063fa09267c1461030c5763feed5561146102e9573861000f565b34610307576000366003190112610307576020601254604051908152f35b600080fd5b3461030757602036600319011261030757600435610328611e0d565b60ff600a54166103615780158015610355575b61034457600e55005b63162908e360e11b60005260046000fd5b5060065481101561033b565b637ce54feb60e11b60005260046000fd5b346103075760003660031901126103075760206040517f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b9298152f35b34610307576020366003190112610307576100816103c9611c39565b6103d16121e5565b611d59565b34610307576000366003190112610307576002546040516001600160a01b039091168152602090f35b600036600319011261030757610413611e0d565b600a5460ff8116156107675760ff8160101c1661075657620100009062ff0000191617600a55606461044a600754600f5490611c96565b60008054600354600e5460405163095ea7b360e01b81526001600160a01b03928316600482015260248101919091529490930493926020928492604492849291165af180156105b957610739575b5060018060a01b0360035416600e546062810290808204606214901517156105c557606490049160628102818104606214821517156105c5576001546064909104906000906001600160a01b0316806105db57505060018060a01b0360005416600e54926107084201948542116105c55760609560c494604051988997889663f305d71960e01b8852600488015260248701526044860152606485015230608485015260a48401525af180156105b9577f38f8a0c92f4c5b0b6877f878cb4c0c8d348a47b76d716c8e78f425043df9515b91604091600091600091610587575b505b82519182526020820152a1005b90506105ab915060603d6060116105b2575b6105a38183611cea565b810190611d3e565b5084610578565b503d610599565b6040513d6000823e3d90fd5b634e487b7160e01b600052601160045260246000fd5b60405163095ea7b360e01b81526001600160a01b0386166004820152602481018590529195949293929190602090829060449082908a905af1801561072e57610701575b5060018060a01b038554169160018060a01b036001541693600e54956107084201928342116106ed57928892610104959260609897956040519a8b998a9862e8e33760e81b8a5260048a0152602489015260448801526064870152608486015260a48501523060c485015260e48401525af190811561008357916040917f38f8a0c92f4c5b0b6877f878cb4c0c8d348a47b76d716c8e78f425043df9515b9382916106cb575b5061057a565b90506106e6915060603d6060116105b2576105a38183611cea565b50846106c5565b634e487b7160e01b89526011600452602489fd5b6107229060203d602011610727575b61071a8183611cea565b810190611d26565b61061f565b503d610710565b6040513d88823e3d90fd5b6107519060203d6020116107275761071a8183611cea565b610498565b630fd02b6d60e41b60005260046000fd5b639d98b04b60e01b60005260046000fd5b3461030757602036600319011261030757600435610794611e0d565b60ff600a541661036157801561034457600c55005b346103075760003660031901126103075761010060045460ff60055460065460075460085491600a54936040519687526020870152604086015260608501526080840152818116151560a0840152818160081c16151560c084015260101c16151560e0820152f35b3461030757600036600319011261030757602060ff600a5460101c166040519015158152f35b34610307576000366003190112610307576020600954604051908152f35b3461030757604036600319011261030757610081600435610874611c4f565b9061088661088182611cc9565b611ed2565b612145565b3461030757600036600319011261030757600a5460ff8160081c16156109bc5760ff16156107675733600052601160205260406000206001810154801561096e57600d5460640390606482116105c5576064916108e791611c96565b0490600b54600c54906108fa8282611d0c565b421061097f575060039190505b0161091481548093611d19565b91821561096e578261092591611d0c565b905560005461094090829033906001600160a01b0316611dcf565b6040519081527fc15eb22beb780252072bdeec94b7fce7b15822d73417b8a4f92640577eb6fceb60203392a2005b6312d37ee560e31b60005260046000fd5b9061099c603c806109936109a19542611d19565b04920485611ca9565b611c96565b918083116109b3575b50600390610907565b915060036109aa565b6371642c7760e11b60005260046000fd5b34610307576000366003190112610307576020600754604051908152f35b34610307576101a036600319011261030757610a05611c39565b610a0d611c4f565b6044356001600160a01b03811690819003610307576064356001600160a01b038116908190036103075760843560a43560c43560e4359161010435936101243595610144359761018435996000805160206122e5833981519152549b60ff8d60401c16159c8d67ffffffffffffffff821680159182610dbf575b506001149081610db5575b159081610dac575b50610d9b5767ffffffffffffffff1981166001176000805160206122e5833981519152558d610d6e575b50610acd612276565b610ad5612276565b610ade33611d59565b610ae6612276565b6001600160a01b03168015610d5d578215610d4c578315610d3b5742851115610d2a5784861115610d2a5786156103445787158015610d20575b6103445788158015610d16575b6103445789158015610d0c575b610344578a15610344578b15610344576001600160601b0360a01b600054161760005560018060a01b03166001600160601b0360a01b60015416176001556001600160601b0360a01b60025416176002556001600160601b0360a01b6003541617600355600455600555600655600e55600f55600d55600c5561016435601055600955610bc633611f1c565b50610bd033611fce565b5060025460405163e5a6b10f60e01b81526001600160a01b0390911690602081600481855afa9081156105b957600091610cc5575b5060405163095ea7b360e01b815260048101929092526000196024830152602090829060449082906000906001600160a01b03165af180156105b957610ca6575b50610c4d57005b68ff0000000000000000196000805160206122e583398151915254166000805160206122e5833981519152557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160018152a1005b610cbe9060203d6020116107275761071a8183611cea565b5081610c46565b6020813d602011610d04575b81610cde60209383611cea565b81010312610d005751906001600160a01b038216820361008e57506000610c05565b5080fd5b3d9150610cd1565b5060648a11610b3a565b5060648911610b2d565b5086881015610b20565b63b7d0949760e01b60005260046000fd5b631bf06d4d60e31b60005260046000fd5b632b33b1fb60e21b60005260046000fd5b630f58058360e11b60005260046000fd5b68ffffffffffffffffff191668010000000000000001176000805160206122e5833981519152558d610ac4565b63f92ee8a960e01b60005260046000fd5b9050158f610a9a565b303b159150610a92565b91508f610a87565b34610307576000366003190112610307576020600f54604051908152f35b34610307576000366003190112610307576020600b54604051908152f35b3461030757600036600319011261030757602060405160008152f35b3461030757604036600319011261030757610e38611c39565b60243590610e44611e7f565b6001600160a01b0316908115610ec0578015610eaf5760ff600a54161580610e87575b610e7657610081913390611dcf565b63ea8e4eb560e01b60005260046000fd5b506000546001600160a01b0316821480610e6757506001546001600160a01b03168214610e67565b631f2a200560e01b60005260046000fd5b63d92e233d60e01b60005260046000fd5b3461030757600036600319011261030757602060ff600a54166040519015158152f35b3461030757602036600319011261030757600435610f10611e0d565b801561034457600955005b3461030757604036600319011261030757610f34611c39565b610f3c611c4f565b90610f45611e7f565b60ff600a5460101c1615610756576001600160a01b0316908115610ec0576001600160a01b03811615610ec0576040516370a0823160e01b815230600482015290602082602481865afa9182156105b957600092610fae575b508115610eaf5761008192611dcf565b90916020823d602011610fda575b81610fc960209383611cea565b8101031261008e5750519083610f9e565b3d9150610fbc565b3461030757604036600319011261030757610ffb611c4f565b6004356000526000805160206122c583398151915260205260406000209060018060a01b0316600052602052602060ff604060002054166040519015158152f35b34610307576000366003190112610307576000805160206122a5833981519152546040516001600160a01b039091168152602090f35b34610307576000366003190112610307576020600854604051908152f35b34610307576000366003190112610307576020600454604051908152f35b34610307576000366003190112610307576001546040516001600160a01b039091168152602090f35b34610307576000366003190112610307576110f06121e5565b6000805160206122a583398151915280546001600160a01b031981169091556000906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b34610307576000366003190112610307576020601054604051908152f35b346103075760203660031901126103075760043561117b611e0d565b60ff600a54166103615780158015611197575b61034457600f55005b506064811161118e565b34610307576020366003190112610307576004356012548110156111e3576111ca602091611c65565b905460405160039290921b1c6001600160a01b03168152f35b60405162461bcd60e51b8152602060048201526013602482015272496e646578206f7574206f6620626f756e647360681b6044820152606490fd5b3461030757602036600319011261030757611237611c39565b6000809160018060a01b0316825260116020526040822091825491600184015460ff60028601541694600460038201549101549160ff600a5460081c1680611385575b6112ab575b9560e0966040519687526020870152151560408601526060850152608084015260a083015260c0820152f35b9395801561136e575b600d546064036064811161135a57968260646112d260e09a89611c96565b048290600b54600c54906112e68282611d0c565b421061131357505090505b8181111561130c576113039250611d19565b9490965061127f565b5050611303565b804211611323575b5050506112f1565b611342929350603c8061133961099c9342611d19565b04920484611ca9565b90808211611352575b808061131b565b90508a61134b565b634e487b7160e01b88526011600452602488fd5b9250606461137e600d5486611c96565b04926112b4565b5080151561127a565b6040366003190112610307576004356113a5611c4f565b60045442108015611627575b611616576001546001600160a01b0316806115c9575034913415610eaf576115b8575b6001600160a01b0316600081815260116020526040902080549192911561155d575b611401828254611d0c565b815561140f82600754611d0c565b60075561142160045460105490611d0c565b42111580611551575b61145d575b5060207f62722348256371b5147820d6cad90c40fd2da1ccee18c3ed52c0bca5a61dbbab91604051908152a2005b600090670de0b6b3a764000061147560095485611c96565b04602060018060a01b036002541660446040518096819363307ada3960e21b83528660048401528a60248401525af19182156105b9578593600093611517575b50604083602095937f62722348256371b5147820d6cad90c40fd2da1ccee18c3ed52c0bca5a61dbbab979560047fdb4445d4f94b7320d1834734c8c6f93a74a25048fc5295cac114fe2734d8e348950155825191825286820152a2915061142f565b919350916020823d602011611549575b8161153460209383611cea565b8101031261008e5750518492909160406114b5565b3d9150611527565b5060048101541561142a565b601254680100000000000000008110156115a2578060016115819201601255611c65565b81546001600160a01b0360039290921b91821b19169085901b1790556113f6565b634e487b7160e01b600052604160045260246000fd5b63078d696560e31b60005260046000fd5b91346115b8578015610eaf57806116119193604051916323b872dd60e01b602084015233602484015230604484015260648301526064825261160c608483611cea565b61221b565b6113d4565b63b7b2409760e01b60005260046000fd5b5060055442116113b1565b34610307576000366003190112610307576020600654604051908152f35b34610307576000366003190112610307576020600e54604051908152f35b34610307576000366003190112610307576000546040516001600160a01b039091168152602090f35b34610307576000366003190112610307576020600d54604051908152f35b3461030757602036600319011261030757600435601254811015610307576111ca602091611c65565b34610307576020366003190112610307576004356116fa611e0d565b60ff600a54166103615780158015611716575b61034457600d55005b506064811161170d565b3461030757600036600319011261030757611739611e0d565b60055442111561076757600a5460ff81166103615760ff1916600117600a556007541561182657600754670de0b6b3a7640000810290808204670de0b6b3a764000014901517156105c55760065461179091611ca9565b6008555b60005b6012548110156117ec57806117ad600192611c65565b838060a01b0391549060031b1c1660005260116020526040600020826117e36117da835460065490611c96565b60075490611ca9565b91015501611797565b42600b557fce4010416b0dec196298b584ceebdd43ecf89e6c03007517c3a7f4403db6c212604060075460085482519182526020820152a1005b6000600855611794565b3461030757604036600319011261030757611849611c4f565b336001600160a01b038216036118655761008190600435612145565b63334bd91960e11b60005260046000fd5b34610307576040366003190112610307576024356001600160a01b0381169060043590829003610307576118a8611e7f565b60ff600a541615610767578015610eaf578115610ec05780471061195057600080808084865af13d1561194b573d67ffffffffffffffff81116115a257604051906118fd601f8201601f191660200183611cea565b8152600060203d92013e5b1561193a5760207f94b2de810873337ed265c5f8cf98c9cffefa06b8607f9a2f1fbaebdfbcfbef1c91604051908152a2005b63b12d13eb60e01b60005260046000fd5b611908565b631e9acf1760e31b60005260046000fd5b34610307576000366003190112610307576020600554604051908152f35b346103075760403660031901126103075761008160043561199e611c4f565b906119ab61088182611cc9565b61209c565b346103075760203660031901126103075760206119ce600435611cc9565b604051908152f35b34610307576000366003190112610307576119ef611e0d565b600a5460ff8116156107675761ff00191661010017600a557f25b238f97b16f614c2cc471460ad0d72c33c632bde1300d098e531ed9b5a627a600080a1005b34610307576000366003190112610307576020600c54604051908152f35b34610307576020366003190112610307576001600160a01b03611a6d611c39565b16600052601160205260a0604060002080549060018101549060ff600282015416600460038301549201549260405194855260208501521515604084015260608301526080820152f35b3461030757600036600319011261030757602060ff600a5460081c166040519015158152f35b3461030757602036600319011261030757611af6611e0d565b60ff600a541661036157600435601055005b346103075760003660031901126103075760ff600a5460081c16156109bc573360005260116020526040600020600181015490811561096e5760020180549160ff8316611bac576064611b60600192600d5490611c96565b049260ff1916179055611b7e813360018060a01b0360005416611dcf565b6040519081527f1db3d897126a63b6e2ce74502c05c2867d4246724fb12e092410859138231dc260203392a2005b630c8d9eab60e31b60005260046000fd5b34610307576000366003190112610307576003546040516001600160a01b039091168152602090f35b34610307576020366003190112610307576004359063ffffffff60e01b821680920361030757602091637965db0b60e01b8114908115611c28575b5015158152f35b6301ffc9a760e01b14905083611c21565b600435906001600160a01b038216820361030757565b602435906001600160a01b038216820361030757565b601254811015611c8057601260005260206000200190600090565b634e487b7160e01b600052603260045260246000fd5b818102929181159184041417156105c557565b8115611cb3570490565b634e487b7160e01b600052601260045260246000fd5b6000526000805160206122c583398151915260205260016040600020015490565b90601f8019910116810190811067ffffffffffffffff8211176115a257604052565b919082018092116105c557565b919082039182116105c557565b90816020910312610307575180151581036103075790565b90816060910312610307578051916040602083015192015190565b6001600160a01b03168015611db9576000805160206122a583398151915280546001600160a01b0319811683179091556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a3565b631e4fbdf760e01b600052600060045260246000fd5b60405163a9059cbb60e01b60208201526001600160a01b03929092166024830152604480830193909352918152611e0b9161160c606483611cea565b565b3360009081527f448256db8f8fb95ee3eaaf89c1051414494e85cebb6057fcf996cc3d0ccfb456602052604090205460ff1615611e4657565b63e2517d3f60e01b600052336004527f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b92960245260446000fd5b3360009081527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d602052604090205460ff1615611eb857565b63e2517d3f60e01b60005233600452600060245260446000fd5b60008181526000805160206122c58339815191526020908152604080832033845290915290205460ff1615611f045750565b63e2517d3f60e01b6000523360045260245260446000fd5b6001600160a01b03811660009081527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d602052604090205460ff16611fc8576001600160a01b031660008181527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d60205260408120805460ff191660011790553391907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d8180a4600190565b50600090565b6001600160a01b03811660009081527f448256db8f8fb95ee3eaaf89c1051414494e85cebb6057fcf996cc3d0ccfb456602052604090205460ff16611fc8576001600160a01b031660008181527f448256db8f8fb95ee3eaaf89c1051414494e85cebb6057fcf996cc3d0ccfb45660205260408120805460ff191660011790553391907f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b929907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9080a4600190565b60008181526000805160206122c5833981519152602090815260408083206001600160a01b038616845290915290205460ff1661213e5760008181526000805160206122c5833981519152602090815260408083206001600160a01b0395909516808452949091528120805460ff19166001179055339291907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9080a4600190565b5050600090565b60008181526000805160206122c5833981519152602090815260408083206001600160a01b038616845290915290205460ff161561213e5760008181526000805160206122c5833981519152602090815260408083206001600160a01b0395909516808452949091528120805460ff19169055339291907ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9080a4600190565b6000805160206122a5833981519152546001600160a01b0316330361220657565b63118cdaa760e01b6000523360045260246000fd5b906000602091828151910182855af1156105b9576000513d61226d57506001600160a01b0381163b155b61224c5750565b635274afe760e01b60009081526001600160a01b0391909116600452602490fd5b60011415612245565b60ff6000805160206122e58339815191525460401c161561229357565b631afcd79f60e31b60005260046000fdfe9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930002dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00a2646970667358221220a03fbbe281a0beea7632c1723ebb610950c03994e76347c93cc1baa899d6b72b64736f6c634300081c0033",
1209
1300
  "linkReferences": {},
1210
1301
  "deployedLinkReferences": {}
1211
1302
  }