ETH Price: $3,297.62 (+1.58%)
Gas: 2 Gwei

Token

Pepe Eggs (pEGGS)
 

Overview

Max Total Supply

69,420 pEGGS

Holders

70

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
115 pEGGS

Value
$0.00
0x92939fa635310fafa8eae27e46a560cf82fde32b
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
PepesEggsV2

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-05-06
*/

/**

                            ██████╗ ███████╗ ██████╗  ██████╗ ███████╗
                            ██╔══██╗██╔════╝██╔════╝ ██╔════╝ ██╔════╝
                            ██████╔╝█████╗  ██║  ███╗██║  ███╗███████╗
                            ██╔═══╝ ██╔══╝  ██║   ██║██║   ██║╚════██║
                            ██║     ███████╗╚██████╔╝╚██████╔╝███████║
                            ╚═╝     ╚══════╝ ╚═════╝  ╚═════╝ ╚══════╝ V2

Rare Pepe Eggs Coming to be forever cracked On-Chain
Come Collect them and MAKE RELAX
* Telegram: https://t.me/pepes_eggs
* Twitter: https://twitter.com/pepes_eggs
* Homepage: https://www.pepeggs.fun/                                       
    ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣤⡶⠶⠛⠛⠛⠛⠛⠛⠶⣶⣤⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
    ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⡶⠛⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠛⢶⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
    ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣤⠞⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠷⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
    ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣶⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠙⣦⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
    ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣾⠟⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠙⣶⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
    ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣴⣿⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠙⣦⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
    ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣿⠉⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⢷⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
    ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣰⣿⠈⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣤⣤⣤⣀⠀⠻⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
    ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣼⠋⠉⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣤⠖⠒⠉⠉⣉⣀⣉⣉⣛⡒⠒⠦⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
    ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣾⠉⠉⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣤⠤⠶⠶⠆⠀⠉⠁⠒⠲⣶⣿⣿⣿⠛⠁⠀⣠⠶⠋⠁⢀⣠⣤⣤⣤⣤⣤⣤⣀⠉⠓⢦⠀⠀⠀⠀⠀⠀⠀⠀⠀
    ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣼⠋⠉⡟⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡴⠋⠀⣀⡤⠒⠋⠉⠁⠀⣀⣀⣀⣀⣈⡉⠻⣬⠛⡟⠉⣤⠖⠋⠉⣩⣿⣿⣿⣿⣿⣿⣷⡄⠀⠈⠙⢿⠀⠀⠀⠀⠀⠀⠀⠀
    ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣰⠋⠉⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡴⠋⠀⣴⠛⠁⠀⢀⡴⢚⣿⣿⣿⣿⣷⣦⡀⠀⠈⠉⠛⣯⠟⠉⠁⠀⠀⢰⣿⣿⣶⣾⡟⠀⠈⣿⣿⡄⠀⠀⢠⠃⠀⠀⠀⠀⠀⠀⠀
    ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡿⠉⠉⡟⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣀⣤⠞⠁⠀⢀⡴⠛⠁⣾⣿⣧⣀⣿⡿⠋⠛⣿⣷⠀⠀⠀⣿⠁⠀⠀⠀⠀⢸⣿⣿⣤⠿⣿⣶⣿⣿⣿⣇⡤⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀
    ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⠉⠉⠉⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⣾⠀⠀⠀⢀⠶⠛⠉⠉⠀⠀⢸⣿⣿⣿⠟⣿⣿⣤⣴⣿⣿⡇⢀⡾⣯⣤⣀⣀⣀⣀⣀⣻⣿⣿⣿⠿⠟⠛⣉⣤⣶⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
    ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢰⠏⠉⠉⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠀⠀⠙⠛⠒⠦⣄⣀⠀⣿⣿⣿⣿⣤⣿⣿⣿⡿⠟⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠁⠀⣠⠶⠛⣆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
    ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⠉⠉⠉⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⣤⣤⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣤⠶⠛⠉⠀⣀⣶⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
    ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢰⡏⠉⠉⠉⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⠀⠀⢀⣀⠀⠀⠉⠉⠛⠛⠒⠒⠶⠶⠶⠶⠶⠶⠶⠒⠒⠛⠛⠉⠉⠀⠀⣀⣤⣶⣿⠋⠁⠀⢹⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
    ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣾⠉⠉⠉⠉⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⢿⡄⠛⣿⣿⣿⣿⣿⣿⣿⣿⣷⣷⣶⣶⣶⣶⣷⣷⣷⣿⣿⣿⣍⠉⠉⠉⠉⠉⠛⣿⡈⢷⡀⠈⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀
    ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⠉⠉⠉⠉⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠛⠿⣦⡈⠙⠻⣿⣿⣿⠟⠛⠉⠛⢿⣍⠉⠉⠉⠉⠉⠉⠙⠉⣿⠁⠀⠀⠀⠀⣼⠋⠀⣿⠀⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀
    ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⠉⠉⠉⠉⠉⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠙⠛⠻⣿⣤⡀⠈⠉⠛⠷⣦⣭⣉⣉⠙⠛⠿⠿⠿⣛⣫⣥⡤⠶⠛⠙⠀⣀⣴⠟⠁⠀⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀
    ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⠉⠉⠉⠉⠉⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠙⠛⠙⠛⠷⣶⣤⣤⣀⣀⡀⠀⠀⠀⣀⣀⣠⣤⣤⣶⠿⠟⠋⠛⠉⠀⠀⠀⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀
    ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⠉⠉⠉⠉⠉⠉⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠉⠉⠙⠛⠛⠛⠛⠛⠛⠉⠉⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀
    ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⠉⠉⠉⠉⠉⠉⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀
    ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢿⠉⠉⠉⠉⠉⠉⠉⣷⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡏⠀⠀⠀⠀⠀⠀⠀⠀⠀
    ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⡏⠉⠉⠉⠉⠉⠉⠉⣧⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣸⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
    ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⠉⠉⠉⠉⠉⠉⠉⠉⣷⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
    ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⣯⠉⠉⠉⠉⠉⠉⠉⠉⣿⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣼⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
    ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠹⡏⠉⠉⠉⠉⠉⠉⠉⠉⠉⣦⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣰⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
    ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢻⡌⠉⠉⠉⠉⠉⠉⠉⠉⠉⣿⣦⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣾⠏⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
    ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠹⣏⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⣿⣶⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣴⣿⣼⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
    ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⣿⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⣿⣶⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣴⣿⠙⠉⣿⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
    ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠻⣮⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⣿⣶⣤⣀⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣠⣴⣶⣿⣿⠉⠉⠉⣼⠟⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
    ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠻⣮⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠉⠉⠉⠉⠉⠉⠉⠉⣼⠟⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
    ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠙⢿⣌⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⣨⡿⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
    ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠻⣮⣌⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⣨⣼⠟⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
    ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠛⠻⢿⣾⣬⣌⣉⡉⠉⠉⠉⠉⠉⠉⣉⣉⣨⣬⣾⠿⠟⠋⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀

 *
 */

// SPDX-License-Identifier: MIT

pragma solidity 0.8.19;

interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint256);

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

    function allPairsLength() external view returns (uint256);

    function getPair(address tokenA, address tokenB) external view returns (address pair);

    function allPairs(uint256) external view returns (address pair);

    function createPair(address tokenA, address tokenB) external returns (address pair);

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint256 value);
    event Transfer(address indexed from, address indexed to, uint256 value);

    function name() external pure returns (string memory);

    function symbol() external pure returns (string memory);

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

    function balanceOf(address owner) external view returns (uint256);

    function allowance(address owner, address spender) external view returns (uint256);

    function approve(address spender, uint256 value) external returns (bool);

    function transfer(address to, uint256 value) external returns (bool);

    function transferFrom(address from, address to, uint256 value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

    function nonces(address owner) external view returns (uint256);

    function permit(
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external;

    event Mint(address indexed sender, uint256 amount0, uint256 amount1);
    event Burn(address indexed sender, uint256 amount0, uint256 amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint256 amount0In,
        uint256 amount1In,
        uint256 amount0Out,
        uint256 amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

    function mint(address to) external returns (uint256 liquidity);

    function burn(address from) external returns (uint256 amount0, uint256 amount1);

    function swap(uint256 amount0Out, uint256 amount1Out, address to, bytes calldata data) external;

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

interface IUniswapV2Router01 {
    function factory() external pure returns (address);

    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountA, uint256 amountB, uint256 liquidity);

    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external payable returns (uint256 amountToken, uint256 amountETH, uint256 liquidity);

    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETH(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountToken, uint256 amountETH);

    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETHWithPermit(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountToken, uint256 amountETH);

    function swapExactTokensForTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapTokensForExactTokens(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactETHForTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function swapTokensForExactETH(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactTokensForETH(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapETHForExactTokens(
        uint256 amountOut,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function quote(uint256 amountA, uint256 reserveA, uint256 reserveB) external pure returns (uint256 amountB);

    function getAmountOut(
        uint256 amountIn,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountOut);

    function getAmountIn(
        uint256 amountOut,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountIn);

    function getAmountsOut(uint256 amountIn, address[] calldata path) external view returns (uint256[] memory amounts);

    function getAmountsIn(uint256 amountOut, address[] calldata path) external view returns (uint256[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountETH);

    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountETH);

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable;

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;
}

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);

    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `from` to `to` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(address from, address to, uint256 amount) external returns (bool);
}

/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);
}

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }
}

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * We have followed general OpenZeppelin Contracts guidelines: functions revert
 * instead returning `false` on failure. This behavior is nonetheless
 * conventional and does not conflict with the expectations of ERC20
 * applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;
    mapping(address => mapping(address => uint256)) private _allowances;

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() external view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev Returns the name of the token.
     */
    function name() external view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5.05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the value {ERC20} uses, unless this function is
     * overridden;
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual override returns (uint8) {
        return 9;
    }

    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() external view virtual override returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address to, uint256 amount) external virtual override returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, amount);
        return true;
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on
     * `transferFrom`. This is semantically equivalent to an infinite approval.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) external virtual override returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * NOTE: Does not update the allowance if the current allowance
     * is the maximum `uint256`.
     *
     * Requirements:
     *
     * - `from` and `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `amount`.
     */
    function transferFrom(address from, address to, uint256 amount) external virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) external virtual returns (bool) {
        address owner = _msgSender();
        uint256 currentAllowance = allowance(owner, spender);
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(owner, spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) external virtual returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, allowance(owner, spender) + addedValue);
        return true;
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _totalSupply += amount;
        unchecked {
            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.
            _balances[account] += amount;
        }
        emit Transfer(address(0), account, amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
            // Overflow not possible: amount <= accountBalance <= totalSupply.
            _totalSupply -= amount;
        }

        emit Transfer(account, address(0), amount);
    }

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(address owner, address spender, uint256 amount) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    /**
     * @dev Updates `owner` s allowance for `spender` based on spent `amount`.
     *
     * Does not update the allowance amount in case of infinite allowance.
     * Revert if not enough allowance is available.
     *
     * Might emit an {Approval} event.
     */
    function _spendAllowance(address owner, address spender, uint256 amount) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: insufficient allowance");
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }

    function _transfer(address from, address to, uint256 amount) internal virtual {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        uint256 fromBalance = _balances[from];
        require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[from] = fromBalance - amount;
            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by
            // decrementing then incrementing.
            _balances[to] += amount;
        }

        emit Transfer(from, to, amount);
    }
}

/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * We have followed general OpenZeppelin Contracts guidelines: functions revert
 * instead returning `false` on failure. This behavior is nonetheless
 * conventional and does not conflict with the expectations of ERC20
 * applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
contract PepesEggsV2 is ERC20, Ownable {
    // TOKENOMICS START ==========================================================>
    string private _name = "Pepe Eggs";
    string private _symbol = "pEGGS";
    uint8 private _decimals = 9;
    uint256 private _supply = 69420;
    uint256 public taxForLiquidity = 10; //sniper protection, to be lowered to 1% after launch
    uint256 public taxForMarketing = 5; //sniper protection, to be lowered to 2% after launch
    uint256 public maxTxAmount = 69 * 10 ** _decimals;
    uint256 public maxWalletAmount = 690 * 10 ** _decimals;
    address public FrenWallet = 0x6994883E8a2254a9CB39833F411B33121EA7e604;
    address public DEAD = 0x000000000000000000000000000000000000dEaD;
    uint256 public _marketingReserves = 0;
    mapping(address => bool) public _isExcludedFromFee;
    mapping(address => bool) public _isNonFren;
    uint256 public numTokensSellToAddToLiquidity = 420 * 10 ** _decimals;
    uint256 public numTokensSellToAddToETH = 420 * 10 ** _decimals;


   

    function postLaunch() external onlyOwner {
        taxForLiquidity = 2;
        taxForMarketing = 2;
        maxTxAmount = 690 * 10 ** _decimals;
        maxWalletAmount = 6900 * 10 ** _decimals;
    }
    event ExcludedFromFeeUpdated(address _address, bool _status);
    event PairUpdated(address _address);




    IUniswapV2Router02 public immutable uniswapV2Router;
    address public uniswapV2Pair;

    bool inSwapAndLiquify;

    event SwapAndLiquify(uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity);

    modifier lockTheSwap() {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor() ERC20(_name, _symbol) {
        _mint(msg.sender, (_supply * 10 ** _decimals));

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); //eth mainnet
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(
            address(this),
            _uniswapV2Router.WETH()
        );

        uniswapV2Router = _uniswapV2Router;

        _isExcludedFromFee[address(uniswapV2Router)] = true;
        _isExcludedFromFee[msg.sender] = true;
        _isExcludedFromFee[FrenWallet] = true;
    }

    function updatePair(address _pair) external onlyOwner {
        require(_pair != DEAD, "LP Pair cannot be the Dead wallet, or 0!");
        require(_pair != address(0), "LP Pair cannot be the Dead wallet, or 0!");
        uniswapV2Pair = _pair;
        emit PairUpdated(_pair);
    }

    /**
     * @dev Moves `amount` of tokens from `from` to `to`.
     *
     * This internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     */
    function _transfer(address from, address to, uint256 amount) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(balanceOf(from) >= amount, "ERC20: transfer amount exceeds balance");
        require( !_isNonFren[from],"No NonFren Allowed");
        if ((from == uniswapV2Pair || to == uniswapV2Pair) && !inSwapAndLiquify) {
            if (from != uniswapV2Pair) {
                uint256 contractLiquidityBalance = balanceOf(address(this)) - _marketingReserves;
                if (contractLiquidityBalance >= numTokensSellToAddToLiquidity) {
                    _swapAndLiquify(numTokensSellToAddToLiquidity);
                }
                if ((_marketingReserves) >= numTokensSellToAddToETH) {
                    _swapTokensForEth(numTokensSellToAddToETH);
                    _marketingReserves -= numTokensSellToAddToETH;
                    bool sent = payable(FrenWallet).send(address(this).balance);
                    require(sent, "Failed to send ETH");
                }
            }

            uint256 transferAmount;
            if (_isExcludedFromFee[from] || _isExcludedFromFee[to] || (from != uniswapV2Pair && to != uniswapV2Pair)) {
                transferAmount = amount;
            } else {
                require(amount <= maxTxAmount, "ERC20: transfer amount exceeds the max transaction amount");
                if (from == uniswapV2Pair) {
                    require(
                        (amount + balanceOf(to)) <= maxWalletAmount,
                        "ERC20: balance amount exceeded max wallet amount limit"
                    );
                }

                uint256 marketingShare = ((amount * taxForMarketing) / 100);
                uint256 liquidityShare = ((amount * taxForLiquidity) / 100);
                transferAmount = amount - (marketingShare + liquidityShare);
                _marketingReserves += marketingShare;

                super._transfer(from, address(this), (marketingShare + liquidityShare));
            }
            super._transfer(from, to, transferAmount);
        } else {
            super._transfer(from, to, amount);
        }
    }

    function excludeFromFee(address _address, bool _status) external onlyOwner {
        _isExcludedFromFee[_address] = _status;
        emit ExcludedFromFeeUpdated(_address, _status);
    }

    function _swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap {
        uint256 half = (contractTokenBalance / 2);
        uint256 otherHalf = (contractTokenBalance - half);

        uint256 initialBalance = address(this).balance;

        _swapTokensForEth(half);

        uint256 newBalance = (address(this).balance - initialBalance);

        _addLiquidity(otherHalf, newBalance);

        emit SwapAndLiquify(half, newBalance, otherHalf);
    }

    function _swapTokensForEth(uint256 tokenAmount) private lockTheSwap {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

        _approve(address(this), address(uniswapV2Router), tokenAmount);

        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

    function _addLiquidity(uint256 tokenAmount, uint256 ethAmount) private lockTheSwap {
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0,
            0,
            FrenWallet,
            block.timestamp
        );
    }

    function changeFrenWallet(address newWallet) public onlyOwner returns (bool) {
        require(newWallet != DEAD, "LP Pair cannot be the Dead wallet, or 0!");
        require(newWallet != address(0), "LP Pair cannot be the Dead wallet, or 0!");
        FrenWallet = newWallet;
        return true;
    }
    function makeFren(address _address, bool _status) public onlyOwner {
        _isNonFren[_address] = _status;
       
    }    
    function changeTaxForLiquidityAndMarketing(
        uint256 _taxForLiquidity,
        uint256 _taxForMarketing
    ) public onlyOwner returns (bool) {
        require((_taxForLiquidity + _taxForMarketing) <= 10, "ERC20: total tax must not be greater than 10%");
        taxForLiquidity = _taxForLiquidity;
        taxForMarketing = _taxForMarketing;

        return true;
    }

    function changeSwapThresholds(
        uint256 _numTokensSellToAddToLiquidity,
        uint256 _numTokensSellToAddToETH
    ) public onlyOwner returns (bool) {
        require(_numTokensSellToAddToLiquidity < _supply / 98, "Cannot liquidate more than 2% of the supply at once!");
        require(_numTokensSellToAddToETH < _supply / 98, "Cannot liquidate more than 2% of the supply at once!");
        numTokensSellToAddToLiquidity = _numTokensSellToAddToLiquidity * 10 ** _decimals;
        numTokensSellToAddToETH = _numTokensSellToAddToETH * 10 ** _decimals;

        return true;
    }

    function changeMaxTxAmount(uint256 _maxTxAmount) public onlyOwner returns (bool) {
        maxTxAmount = _maxTxAmount;

        return true;
    }

    function changeMaxWalletAmount(uint256 _maxWalletAmount) public onlyOwner returns (bool) {
        maxWalletAmount = _maxWalletAmount;

        return true;
    }

    receive() external payable {}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"_status","type":"bool"}],"name":"ExcludedFromFeeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"}],"name":"PairUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DEAD","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FrenWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isNonFren","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingReserves","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"changeFrenWallet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxTxAmount","type":"uint256"}],"name":"changeMaxTxAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxWalletAmount","type":"uint256"}],"name":"changeMaxWalletAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_numTokensSellToAddToLiquidity","type":"uint256"},{"internalType":"uint256","name":"_numTokensSellToAddToETH","type":"uint256"}],"name":"changeSwapThresholds","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_taxForLiquidity","type":"uint256"},{"internalType":"uint256","name":"_taxForMarketing","type":"uint256"}],"name":"changeTaxForLiquidityAndMarketing","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"makeFren","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numTokensSellToAddToETH","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numTokensSellToAddToLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"postLaunch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_pair","type":"address"}],"name":"updatePair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a06040526040518060400160405280600981526020017f5065706520456767730000000000000000000000000000000000000000000000815250600690816200004a919062000b84565b506040518060400160405280600581526020017f70454747530000000000000000000000000000000000000000000000000000008152506007908162000091919062000b84565b506009600860006101000a81548160ff021916908360ff16021790555062010f2c600955600a80556005600b55600860009054906101000a900460ff16600a620000dc919062000dfb565b6045620000ea919062000e4c565b600c55600860009054906101000a900460ff16600a6200010b919062000dfb565b6102b26200011a919062000e4c565b600d55736994883e8a2254a9cb39833f411b33121ea7e604600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061dead600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000601055600860009054906101000a900460ff16600a620001d8919062000dfb565b6101a4620001e7919062000e4c565b601355600860009054906101000a900460ff16600a62000208919062000dfb565b6101a462000217919062000e4c565b6014553480156200022757600080fd5b5060068054620002379062000973565b80601f0160208091040260200160405190810160405280929190818152602001828054620002659062000973565b8015620002b65780601f106200028a57610100808354040283529160200191620002b6565b820191906000526020600020905b8154815290600101906020018083116200029857829003601f168201915b505050505060078054620002ca9062000973565b80601f0160208091040260200160405190810160405280929190818152602001828054620002f89062000973565b8015620003495780601f106200031d5761010080835404028352916020019162000349565b820191906000526020600020905b8154815290600101906020018083116200032b57829003601f168201915b505050505081600390816200035f919062000b84565b50806004908162000371919062000b84565b5050506200039462000388620006f760201b60201c565b620006ff60201b60201c565b620003d233600860009054906101000a900460ff16600a620003b7919062000dfb565b600954620003c6919062000e4c565b620007c560201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000437573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200045d919062000f01565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620004c5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004eb919062000f01565b6040518363ffffffff1660e01b81526004016200050a92919062000f44565b6020604051808303816000875af11580156200052a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000550919062000f01565b601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505060016011600060805173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160116000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550506200105d565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000837576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200082e9062000fd2565b60405180910390fd5b80600260008282546200084b919062000ff4565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620008fe919062001040565b60405180910390a35050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200098c57607f821691505b602082108103620009a257620009a162000944565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000a0c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620009cd565b62000a188683620009cd565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000a6562000a5f62000a598462000a30565b62000a3a565b62000a30565b9050919050565b6000819050919050565b62000a818362000a44565b62000a9962000a908262000a6c565b848454620009da565b825550505050565b600090565b62000ab062000aa1565b62000abd81848462000a76565b505050565b5b8181101562000ae55762000ad960008262000aa6565b60018101905062000ac3565b5050565b601f82111562000b345762000afe81620009a8565b62000b0984620009bd565b8101602085101562000b19578190505b62000b3162000b2885620009bd565b83018262000ac2565b50505b505050565b600082821c905092915050565b600062000b596000198460080262000b39565b1980831691505092915050565b600062000b74838362000b46565b9150826002028217905092915050565b62000b8f826200090a565b67ffffffffffffffff81111562000bab5762000baa62000915565b5b62000bb7825462000973565b62000bc482828562000ae9565b600060209050601f83116001811462000bfc576000841562000be7578287015190505b62000bf3858262000b66565b86555062000c63565b601f19841662000c0c86620009a8565b60005b8281101562000c365784890151825560018201915060208501945060208101905062000c0f565b8683101562000c56578489015162000c52601f89168262000b46565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000cf95780860481111562000cd15762000cd062000c6b565b5b600185161562000ce15780820291505b808102905062000cf18562000c9a565b945062000cb1565b94509492505050565b60008262000d14576001905062000de7565b8162000d24576000905062000de7565b816001811462000d3d576002811462000d485762000d7e565b600191505062000de7565b60ff84111562000d5d5762000d5c62000c6b565b5b8360020a91508482111562000d775762000d7662000c6b565b5b5062000de7565b5060208310610133831016604e8410600b841016171562000db85782820a90508381111562000db25762000db162000c6b565b5b62000de7565b62000dc7848484600162000ca7565b9250905081840481111562000de15762000de062000c6b565b5b81810290505b9392505050565b600060ff82169050919050565b600062000e088262000a30565b915062000e158362000dee565b925062000e447fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000d02565b905092915050565b600062000e598262000a30565b915062000e668362000a30565b925082820262000e768162000a30565b9150828204841483151762000e905762000e8f62000c6b565b5b5092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000ec98262000e9c565b9050919050565b62000edb8162000ebc565b811462000ee757600080fd5b50565b60008151905062000efb8162000ed0565b92915050565b60006020828403121562000f1a5762000f1962000e97565b5b600062000f2a8482850162000eea565b91505092915050565b62000f3e8162000ebc565b82525050565b600060408201905062000f5b600083018562000f33565b62000f6a602083018462000f33565b9392505050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000fba601f8362000f71565b915062000fc78262000f82565b602082019050919050565b6000602082019050818103600083015262000fed8162000fab565b9050919050565b6000620010018262000a30565b91506200100e8362000a30565b925082820190508082111562001029576200102862000c6b565b5b92915050565b6200103a8162000a30565b82525050565b60006020820190506200105760008301846200102f565b92915050565b6080516138676200109c600039600081816109d401528181611fcc015281816120ad015281816120d401528181612406015261242d01526138676000f3fe6080604052600436106102135760003560e01c80638c0b5e2211610118578063af8af690116100a0578063dd62ed3e1161006f578063dd62ed3e14610800578063df8408fe1461083d578063e0ad53a214610866578063f2fde38b146108a3578063f345bd85146108cc5761021a565b8063af8af69014610742578063c0fdea571461077f578063c3465069146107aa578063d12a7688146107d55761021a565b8063a457c2d7116100e7578063a457c2d714610635578063a9059cbb14610672578063a90bb96c146106af578063aa4bde28146106ec578063ad16a0cf146107175761021a565b80638c0b5e221461059d5780638da5cb5b146105c857806395d89b41146105f3578063a3996f7b1461061e5761021a565b8063380b8fd11161019b578063677daa571161016a578063677daa571461049257806370a08231146104cf578063715018a61461050c578063768dc7101461052357806381bfdcca146105605761021a565b8063380b8fd1146103d657806339509351146103ff57806349bd5a5e1461043c578063527ffabd146104675761021a565b806318160ddd116101e257806318160ddd146102dd5780631b56bbf91461030857806323b872dd1461033157806330b63d801461036e578063313ce567146103ab5761021a565b806303fd2a451461021f57806306fdde031461024a578063095ea7b3146102755780631694505e146102b25761021a565b3661021a57005b600080fd5b34801561022b57600080fd5b506102346108f7565b6040516102419190612558565b60405180910390f35b34801561025657600080fd5b5061025f61091d565b60405161026c9190612603565b60405180910390f35b34801561028157600080fd5b5061029c6004803603810190610297919061268c565b6109af565b6040516102a991906126e7565b60405180910390f35b3480156102be57600080fd5b506102c76109d2565b6040516102d49190612761565b60405180910390f35b3480156102e957600080fd5b506102f26109f6565b6040516102ff919061278b565b60405180910390f35b34801561031457600080fd5b5061032f600480360381019061032a91906127a6565b610a00565b005b34801561033d57600080fd5b50610358600480360381019061035391906127d3565b610b82565b60405161036591906126e7565b60405180910390f35b34801561037a57600080fd5b5061039560048036038101906103909190612826565b610bb1565b6040516103a291906126e7565b60405180910390f35b3480156103b757600080fd5b506103c0610cbf565b6040516103cd9190612882565b60405180910390f35b3480156103e257600080fd5b506103fd60048036038101906103f891906128c9565b610cc8565b005b34801561040b57600080fd5b506104266004803603810190610421919061268c565b610d2b565b60405161043391906126e7565b60405180910390f35b34801561044857600080fd5b50610451610d62565b60405161045e9190612558565b60405180910390f35b34801561047357600080fd5b5061047c610d88565b604051610489919061278b565b60405180910390f35b34801561049e57600080fd5b506104b960048036038101906104b49190612909565b610d8e565b6040516104c691906126e7565b60405180910390f35b3480156104db57600080fd5b506104f660048036038101906104f191906127a6565b610da8565b604051610503919061278b565b60405180910390f35b34801561051857600080fd5b50610521610df0565b005b34801561052f57600080fd5b5061054a600480360381019061054591906127a6565b610e04565b60405161055791906126e7565b60405180910390f35b34801561056c57600080fd5b5061058760048036038101906105829190612909565b610e24565b60405161059491906126e7565b60405180910390f35b3480156105a957600080fd5b506105b2610e3e565b6040516105bf919061278b565b60405180910390f35b3480156105d457600080fd5b506105dd610e44565b6040516105ea9190612558565b60405180910390f35b3480156105ff57600080fd5b50610608610e6e565b6040516106159190612603565b60405180910390f35b34801561062a57600080fd5b50610633610f00565b005b34801561064157600080fd5b5061065c6004803603810190610657919061268c565b610f78565b60405161066991906126e7565b60405180910390f35b34801561067e57600080fd5b506106996004803603810190610694919061268c565b610fef565b6040516106a691906126e7565b60405180910390f35b3480156106bb57600080fd5b506106d660048036038101906106d191906127a6565b611012565b6040516106e391906126e7565b60405180910390f35b3480156106f857600080fd5b50610701611032565b60405161070e919061278b565b60405180910390f35b34801561072357600080fd5b5061072c611038565b604051610739919061278b565b60405180910390f35b34801561074e57600080fd5b5061076960048036038101906107649190612826565b61103e565b60405161077691906126e7565b60405180910390f35b34801561078b57600080fd5b506107946110af565b6040516107a1919061278b565b60405180910390f35b3480156107b657600080fd5b506107bf6110b5565b6040516107cc9190612558565b60405180910390f35b3480156107e157600080fd5b506107ea6110db565b6040516107f7919061278b565b60405180910390f35b34801561080c57600080fd5b5061082760048036038101906108229190612936565b6110e1565b604051610834919061278b565b60405180910390f35b34801561084957600080fd5b50610864600480360381019061085f91906128c9565b611168565b005b34801561087257600080fd5b5061088d600480360381019061088891906127a6565b611204565b60405161089a91906126e7565b60405180910390f35b3480156108af57600080fd5b506108ca60048036038101906108c591906127a6565b611357565b005b3480156108d857600080fd5b506108e16113da565b6040516108ee919061278b565b60405180910390f35b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606003805461092c906129a5565b80601f0160208091040260200160405190810160405280929190818152602001828054610958906129a5565b80156109a55780601f1061097a576101008083540402835291602001916109a5565b820191906000526020600020905b81548152906001019060200180831161098857829003601f168201915b5050505050905090565b6000806109ba6113e0565b90506109c78185856113e8565b600191505092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b610a086115b1565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610a98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8f90612a48565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610b07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610afe90612a48565b60405180910390fd5b80601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f1d288f7aba265e8b154b112bbb631ceca5df5fe93a750b2fe042fd1cc826647f81604051610b779190612558565b60405180910390a150565b600080610b8d6113e0565b9050610b9a85828561162f565b610ba58585856116bb565b60019150509392505050565b6000610bbb6115b1565b6062600954610bca9190612ac6565b8310610c0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0290612b69565b60405180910390fd5b6062600954610c1a9190612ac6565b8210610c5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5290612b69565b60405180910390fd5b600860009054906101000a900460ff16600a610c779190612cbc565b83610c829190612d07565b601381905550600860009054906101000a900460ff16600a610ca49190612cbc565b82610caf9190612d07565b6014819055506001905092915050565b60006009905090565b610cd06115b1565b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600080610d366113e0565b9050610d57818585610d4885896110e1565b610d529190612d49565b6113e8565b600191505092915050565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b5481565b6000610d986115b1565b81600c8190555060019050919050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610df86115b1565b610e026000611d8b565b565b60116020528060005260406000206000915054906101000a900460ff1681565b6000610e2e6115b1565b81600d8190555060019050919050565b600c5481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610e7d906129a5565b80601f0160208091040260200160405190810160405280929190818152602001828054610ea9906129a5565b8015610ef65780601f10610ecb57610100808354040283529160200191610ef6565b820191906000526020600020905b815481529060010190602001808311610ed957829003601f168201915b5050505050905090565b610f086115b1565b6002600a819055506002600b81905550600860009054906101000a900460ff16600a610f349190612cbc565b6102b2610f419190612d07565b600c81905550600860009054906101000a900460ff16600a610f639190612cbc565b611af4610f709190612d07565b600d81905550565b600080610f836113e0565b90506000610f9182866110e1565b905083811015610fd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fcd90612def565b60405180910390fd5b610fe382868684036113e8565b60019250505092915050565b600080610ffa6113e0565b90506110078185856116bb565b600191505092915050565b60126020528060005260406000206000915054906101000a900460ff1681565b600d5481565b60145481565b60006110486115b1565b600a82846110569190612d49565b1115611097576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108e90612e81565b60405180910390fd5b82600a8190555081600b819055506001905092915050565b60105481565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60135481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6111706115b1565b80601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f318c131114339c004fff0a22fcdbbc0566bb2a7cd3aa1660e636ec5a66784ff282826040516111f8929190612ea1565b60405180910390a15050565b600061120e6115b1565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361129e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129590612a48565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361130d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130490612a48565b60405180910390fd5b81600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b61135f6115b1565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036113ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c590612f3c565b60405180910390fd5b6113d781611d8b565b50565b600a5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611457576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144e90612fce565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036114c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114bd90613060565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516115a4919061278b565b60405180910390a3505050565b6115b96113e0565b73ffffffffffffffffffffffffffffffffffffffff166115d7610e44565b73ffffffffffffffffffffffffffffffffffffffff161461162d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611624906130cc565b60405180910390fd5b565b600061163b84846110e1565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146116b557818110156116a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169e90613138565b60405180910390fd5b6116b484848484036113e8565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361172a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611721906131ca565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611799576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117909061325c565b60405180910390fd5b806117a384610da8565b10156117e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117db906132ee565b60405180910390fd5b601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611871576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118689061335a565b60405180910390fd5b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148061191a5750601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b80156119335750601560149054906101000a900460ff16155b15611d7a57601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614611a8c57600060105461199b30610da8565b6119a5919061337a565b905060135481106119bc576119bb601354611e51565b5b60145460105410611a8a576119d2601454611f12565b601454601060008282546119e6919061337a565b925050819055506000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050905080611a88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7f906133fa565b60405180910390fd5b505b505b6000601160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611b2f5750601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80611be25750601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614158015611be15750601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b5b15611bef57819050611d69565b600c54821115611c34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2b9061348c565b60405180910390fd5b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611ce257600d54611c9584610da8565b83611ca09190612d49565b1115611ce1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd89061351e565b60405180910390fd5b5b60006064600b5484611cf49190612d07565b611cfe9190612ac6565b905060006064600a5485611d129190612d07565b611d1c9190612ac6565b90508082611d2a9190612d49565b84611d35919061337a565b92508160106000828254611d499190612d49565b92505081905550611d6686308385611d619190612d49565b612185565b50505b611d74848483612185565b50611d86565b611d85838383612185565b5b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6001601560146101000a81548160ff0219169083151502179055506000600282611e7b9190612ac6565b905060008183611e8b919061337a565b90506000479050611e9b83611f12565b60008147611ea9919061337a565b9050611eb583826123e5565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561848285604051611ee89392919061353e565b60405180910390a1505050506000601560146101000a81548160ff02191690831515021790555050565b6001601560146101000a81548160ff0219169083151502179055506000600267ffffffffffffffff811115611f4a57611f49613575565b5b604051908082528060200260200182016040528015611f785781602001602082028036833780820191505090505b5090503081600081518110611f9057611f8f6135a4565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612035573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061205991906135e8565b8160018151811061206d5761206c6135a4565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506120d2307f0000000000000000000000000000000000000000000000000000000000000000846113e8565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161213495949392919061370e565b600060405180830381600087803b15801561214e57600080fd5b505af1158015612162573d6000803e3d6000fd5b50505050506000601560146101000a81548160ff02191690831515021790555050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036121f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121eb906131ca565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612263576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225a9061325c565b60405180910390fd5b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156122e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e0906132ee565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516123d7919061278b565b60405180910390a350505050565b6001601560146101000a81548160ff02191690831515021790555061242b307f0000000000000000000000000000000000000000000000000000000000000000846113e8565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b81526004016124b296959493929190613768565b60606040518083038185885af11580156124d0573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906124f591906137de565b5050506000601560146101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061254282612517565b9050919050565b61255281612537565b82525050565b600060208201905061256d6000830184612549565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156125ad578082015181840152602081019050612592565b60008484015250505050565b6000601f19601f8301169050919050565b60006125d582612573565b6125df818561257e565b93506125ef81856020860161258f565b6125f8816125b9565b840191505092915050565b6000602082019050818103600083015261261d81846125ca565b905092915050565b600080fd5b61263381612537565b811461263e57600080fd5b50565b6000813590506126508161262a565b92915050565b6000819050919050565b61266981612656565b811461267457600080fd5b50565b60008135905061268681612660565b92915050565b600080604083850312156126a3576126a2612625565b5b60006126b185828601612641565b92505060206126c285828601612677565b9150509250929050565b60008115159050919050565b6126e1816126cc565b82525050565b60006020820190506126fc60008301846126d8565b92915050565b6000819050919050565b600061272761272261271d84612517565b612702565b612517565b9050919050565b60006127398261270c565b9050919050565b600061274b8261272e565b9050919050565b61275b81612740565b82525050565b60006020820190506127766000830184612752565b92915050565b61278581612656565b82525050565b60006020820190506127a0600083018461277c565b92915050565b6000602082840312156127bc576127bb612625565b5b60006127ca84828501612641565b91505092915050565b6000806000606084860312156127ec576127eb612625565b5b60006127fa86828701612641565b935050602061280b86828701612641565b925050604061281c86828701612677565b9150509250925092565b6000806040838503121561283d5761283c612625565b5b600061284b85828601612677565b925050602061285c85828601612677565b9150509250929050565b600060ff82169050919050565b61287c81612866565b82525050565b60006020820190506128976000830184612873565b92915050565b6128a6816126cc565b81146128b157600080fd5b50565b6000813590506128c38161289d565b92915050565b600080604083850312156128e0576128df612625565b5b60006128ee85828601612641565b92505060206128ff858286016128b4565b9150509250929050565b60006020828403121561291f5761291e612625565b5b600061292d84828501612677565b91505092915050565b6000806040838503121561294d5761294c612625565b5b600061295b85828601612641565b925050602061296c85828601612641565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806129bd57607f821691505b6020821081036129d0576129cf612976565b5b50919050565b7f4c5020506169722063616e6e6f742062652074686520446561642077616c6c6560008201527f742c206f72203021000000000000000000000000000000000000000000000000602082015250565b6000612a3260288361257e565b9150612a3d826129d6565b604082019050919050565b60006020820190508181036000830152612a6181612a25565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612ad182612656565b9150612adc83612656565b925082612aec57612aeb612a68565b5b828204905092915050565b7f43616e6e6f74206c6971756964617465206d6f7265207468616e203225206f6660008201527f2074686520737570706c79206174206f6e636521000000000000000000000000602082015250565b6000612b5360348361257e565b9150612b5e82612af7565b604082019050919050565b60006020820190508181036000830152612b8281612b46565b9050919050565b60008160011c9050919050565b6000808291508390505b6001851115612be057808604811115612bbc57612bbb612a97565b5b6001851615612bcb5780820291505b8081029050612bd985612b89565b9450612ba0565b94509492505050565b600082612bf95760019050612cb5565b81612c075760009050612cb5565b8160018114612c1d5760028114612c2757612c56565b6001915050612cb5565b60ff841115612c3957612c38612a97565b5b8360020a915084821115612c5057612c4f612a97565b5b50612cb5565b5060208310610133831016604e8410600b8410161715612c8b5782820a905083811115612c8657612c85612a97565b5b612cb5565b612c988484846001612b96565b92509050818404811115612caf57612cae612a97565b5b81810290505b9392505050565b6000612cc782612656565b9150612cd283612866565b9250612cff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484612be9565b905092915050565b6000612d1282612656565b9150612d1d83612656565b9250828202612d2b81612656565b91508282048414831517612d4257612d41612a97565b5b5092915050565b6000612d5482612656565b9150612d5f83612656565b9250828201905080821115612d7757612d76612a97565b5b92915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000612dd960258361257e565b9150612de482612d7d565b604082019050919050565b60006020820190508181036000830152612e0881612dcc565b9050919050565b7f45524332303a20746f74616c20746178206d757374206e6f742062652067726560008201527f61746572207468616e2031302500000000000000000000000000000000000000602082015250565b6000612e6b602d8361257e565b9150612e7682612e0f565b604082019050919050565b60006020820190508181036000830152612e9a81612e5e565b9050919050565b6000604082019050612eb66000830185612549565b612ec360208301846126d8565b9392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612f2660268361257e565b9150612f3182612eca565b604082019050919050565b60006020820190508181036000830152612f5581612f19565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000612fb860248361257e565b9150612fc382612f5c565b604082019050919050565b60006020820190508181036000830152612fe781612fab565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061304a60228361257e565b915061305582612fee565b604082019050919050565b600060208201905081810360008301526130798161303d565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006130b660208361257e565b91506130c182613080565b602082019050919050565b600060208201905081810360008301526130e5816130a9565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000613122601d8361257e565b915061312d826130ec565b602082019050919050565b6000602082019050818103600083015261315181613115565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006131b460258361257e565b91506131bf82613158565b604082019050919050565b600060208201905081810360008301526131e3816131a7565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061324660238361257e565b9150613251826131ea565b604082019050919050565b6000602082019050818103600083015261327581613239565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006132d860268361257e565b91506132e38261327c565b604082019050919050565b60006020820190508181036000830152613307816132cb565b9050919050565b7f4e6f204e6f6e4672656e20416c6c6f7765640000000000000000000000000000600082015250565b600061334460128361257e565b915061334f8261330e565b602082019050919050565b6000602082019050818103600083015261337381613337565b9050919050565b600061338582612656565b915061339083612656565b92508282039050818111156133a8576133a7612a97565b5b92915050565b7f4661696c656420746f2073656e64204554480000000000000000000000000000600082015250565b60006133e460128361257e565b91506133ef826133ae565b602082019050919050565b60006020820190508181036000830152613413816133d7565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473207460008201527f6865206d6178207472616e73616374696f6e20616d6f756e7400000000000000602082015250565b600061347660398361257e565b91506134818261341a565b604082019050919050565b600060208201905081810360008301526134a581613469565b9050919050565b7f45524332303a2062616c616e636520616d6f756e74206578636565646564206d60008201527f61782077616c6c657420616d6f756e74206c696d697400000000000000000000602082015250565b600061350860368361257e565b9150613513826134ac565b604082019050919050565b60006020820190508181036000830152613537816134fb565b9050919050565b6000606082019050613553600083018661277c565b613560602083018561277c565b61356d604083018461277c565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506135e28161262a565b92915050565b6000602082840312156135fe576135fd612625565b5b600061360c848285016135d3565b91505092915050565b6000819050919050565b600061363a61363561363084613615565b612702565b612656565b9050919050565b61364a8161361f565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61368581612537565b82525050565b6000613697838361367c565b60208301905092915050565b6000602082019050919050565b60006136bb82613650565b6136c5818561365b565b93506136d08361366c565b8060005b838110156137015781516136e8888261368b565b97506136f3836136a3565b9250506001810190506136d4565b5085935050505092915050565b600060a082019050613723600083018861277c565b6137306020830187613641565b818103604083015261374281866136b0565b90506137516060830185612549565b61375e608083018461277c565b9695505050505050565b600060c08201905061377d6000830189612549565b61378a602083018861277c565b6137976040830187613641565b6137a46060830186613641565b6137b16080830185612549565b6137be60a083018461277c565b979650505050505050565b6000815190506137d881612660565b92915050565b6000806000606084860312156137f7576137f6612625565b5b6000613805868287016137c9565b9350506020613816868287016137c9565b9250506040613827868287016137c9565b915050925092509256fea2646970667358221220954bb3bb1ba50ddfde99d0a91ac3a99c97eb05f4e52b8ab44f1e87bafea88d6264736f6c63430008130033

Deployed Bytecode

0x6080604052600436106102135760003560e01c80638c0b5e2211610118578063af8af690116100a0578063dd62ed3e1161006f578063dd62ed3e14610800578063df8408fe1461083d578063e0ad53a214610866578063f2fde38b146108a3578063f345bd85146108cc5761021a565b8063af8af69014610742578063c0fdea571461077f578063c3465069146107aa578063d12a7688146107d55761021a565b8063a457c2d7116100e7578063a457c2d714610635578063a9059cbb14610672578063a90bb96c146106af578063aa4bde28146106ec578063ad16a0cf146107175761021a565b80638c0b5e221461059d5780638da5cb5b146105c857806395d89b41146105f3578063a3996f7b1461061e5761021a565b8063380b8fd11161019b578063677daa571161016a578063677daa571461049257806370a08231146104cf578063715018a61461050c578063768dc7101461052357806381bfdcca146105605761021a565b8063380b8fd1146103d657806339509351146103ff57806349bd5a5e1461043c578063527ffabd146104675761021a565b806318160ddd116101e257806318160ddd146102dd5780631b56bbf91461030857806323b872dd1461033157806330b63d801461036e578063313ce567146103ab5761021a565b806303fd2a451461021f57806306fdde031461024a578063095ea7b3146102755780631694505e146102b25761021a565b3661021a57005b600080fd5b34801561022b57600080fd5b506102346108f7565b6040516102419190612558565b60405180910390f35b34801561025657600080fd5b5061025f61091d565b60405161026c9190612603565b60405180910390f35b34801561028157600080fd5b5061029c6004803603810190610297919061268c565b6109af565b6040516102a991906126e7565b60405180910390f35b3480156102be57600080fd5b506102c76109d2565b6040516102d49190612761565b60405180910390f35b3480156102e957600080fd5b506102f26109f6565b6040516102ff919061278b565b60405180910390f35b34801561031457600080fd5b5061032f600480360381019061032a91906127a6565b610a00565b005b34801561033d57600080fd5b50610358600480360381019061035391906127d3565b610b82565b60405161036591906126e7565b60405180910390f35b34801561037a57600080fd5b5061039560048036038101906103909190612826565b610bb1565b6040516103a291906126e7565b60405180910390f35b3480156103b757600080fd5b506103c0610cbf565b6040516103cd9190612882565b60405180910390f35b3480156103e257600080fd5b506103fd60048036038101906103f891906128c9565b610cc8565b005b34801561040b57600080fd5b506104266004803603810190610421919061268c565b610d2b565b60405161043391906126e7565b60405180910390f35b34801561044857600080fd5b50610451610d62565b60405161045e9190612558565b60405180910390f35b34801561047357600080fd5b5061047c610d88565b604051610489919061278b565b60405180910390f35b34801561049e57600080fd5b506104b960048036038101906104b49190612909565b610d8e565b6040516104c691906126e7565b60405180910390f35b3480156104db57600080fd5b506104f660048036038101906104f191906127a6565b610da8565b604051610503919061278b565b60405180910390f35b34801561051857600080fd5b50610521610df0565b005b34801561052f57600080fd5b5061054a600480360381019061054591906127a6565b610e04565b60405161055791906126e7565b60405180910390f35b34801561056c57600080fd5b5061058760048036038101906105829190612909565b610e24565b60405161059491906126e7565b60405180910390f35b3480156105a957600080fd5b506105b2610e3e565b6040516105bf919061278b565b60405180910390f35b3480156105d457600080fd5b506105dd610e44565b6040516105ea9190612558565b60405180910390f35b3480156105ff57600080fd5b50610608610e6e565b6040516106159190612603565b60405180910390f35b34801561062a57600080fd5b50610633610f00565b005b34801561064157600080fd5b5061065c6004803603810190610657919061268c565b610f78565b60405161066991906126e7565b60405180910390f35b34801561067e57600080fd5b506106996004803603810190610694919061268c565b610fef565b6040516106a691906126e7565b60405180910390f35b3480156106bb57600080fd5b506106d660048036038101906106d191906127a6565b611012565b6040516106e391906126e7565b60405180910390f35b3480156106f857600080fd5b50610701611032565b60405161070e919061278b565b60405180910390f35b34801561072357600080fd5b5061072c611038565b604051610739919061278b565b60405180910390f35b34801561074e57600080fd5b5061076960048036038101906107649190612826565b61103e565b60405161077691906126e7565b60405180910390f35b34801561078b57600080fd5b506107946110af565b6040516107a1919061278b565b60405180910390f35b3480156107b657600080fd5b506107bf6110b5565b6040516107cc9190612558565b60405180910390f35b3480156107e157600080fd5b506107ea6110db565b6040516107f7919061278b565b60405180910390f35b34801561080c57600080fd5b5061082760048036038101906108229190612936565b6110e1565b604051610834919061278b565b60405180910390f35b34801561084957600080fd5b50610864600480360381019061085f91906128c9565b611168565b005b34801561087257600080fd5b5061088d600480360381019061088891906127a6565b611204565b60405161089a91906126e7565b60405180910390f35b3480156108af57600080fd5b506108ca60048036038101906108c591906127a6565b611357565b005b3480156108d857600080fd5b506108e16113da565b6040516108ee919061278b565b60405180910390f35b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606003805461092c906129a5565b80601f0160208091040260200160405190810160405280929190818152602001828054610958906129a5565b80156109a55780601f1061097a576101008083540402835291602001916109a5565b820191906000526020600020905b81548152906001019060200180831161098857829003601f168201915b5050505050905090565b6000806109ba6113e0565b90506109c78185856113e8565b600191505092915050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b610a086115b1565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610a98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8f90612a48565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610b07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610afe90612a48565b60405180910390fd5b80601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f1d288f7aba265e8b154b112bbb631ceca5df5fe93a750b2fe042fd1cc826647f81604051610b779190612558565b60405180910390a150565b600080610b8d6113e0565b9050610b9a85828561162f565b610ba58585856116bb565b60019150509392505050565b6000610bbb6115b1565b6062600954610bca9190612ac6565b8310610c0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0290612b69565b60405180910390fd5b6062600954610c1a9190612ac6565b8210610c5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5290612b69565b60405180910390fd5b600860009054906101000a900460ff16600a610c779190612cbc565b83610c829190612d07565b601381905550600860009054906101000a900460ff16600a610ca49190612cbc565b82610caf9190612d07565b6014819055506001905092915050565b60006009905090565b610cd06115b1565b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600080610d366113e0565b9050610d57818585610d4885896110e1565b610d529190612d49565b6113e8565b600191505092915050565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b5481565b6000610d986115b1565b81600c8190555060019050919050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610df86115b1565b610e026000611d8b565b565b60116020528060005260406000206000915054906101000a900460ff1681565b6000610e2e6115b1565b81600d8190555060019050919050565b600c5481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610e7d906129a5565b80601f0160208091040260200160405190810160405280929190818152602001828054610ea9906129a5565b8015610ef65780601f10610ecb57610100808354040283529160200191610ef6565b820191906000526020600020905b815481529060010190602001808311610ed957829003601f168201915b5050505050905090565b610f086115b1565b6002600a819055506002600b81905550600860009054906101000a900460ff16600a610f349190612cbc565b6102b2610f419190612d07565b600c81905550600860009054906101000a900460ff16600a610f639190612cbc565b611af4610f709190612d07565b600d81905550565b600080610f836113e0565b90506000610f9182866110e1565b905083811015610fd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fcd90612def565b60405180910390fd5b610fe382868684036113e8565b60019250505092915050565b600080610ffa6113e0565b90506110078185856116bb565b600191505092915050565b60126020528060005260406000206000915054906101000a900460ff1681565b600d5481565b60145481565b60006110486115b1565b600a82846110569190612d49565b1115611097576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108e90612e81565b60405180910390fd5b82600a8190555081600b819055506001905092915050565b60105481565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60135481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6111706115b1565b80601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f318c131114339c004fff0a22fcdbbc0566bb2a7cd3aa1660e636ec5a66784ff282826040516111f8929190612ea1565b60405180910390a15050565b600061120e6115b1565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361129e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129590612a48565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361130d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130490612a48565b60405180910390fd5b81600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b61135f6115b1565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036113ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c590612f3c565b60405180910390fd5b6113d781611d8b565b50565b600a5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611457576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144e90612fce565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036114c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114bd90613060565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516115a4919061278b565b60405180910390a3505050565b6115b96113e0565b73ffffffffffffffffffffffffffffffffffffffff166115d7610e44565b73ffffffffffffffffffffffffffffffffffffffff161461162d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611624906130cc565b60405180910390fd5b565b600061163b84846110e1565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146116b557818110156116a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169e90613138565b60405180910390fd5b6116b484848484036113e8565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361172a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611721906131ca565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611799576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117909061325c565b60405180910390fd5b806117a384610da8565b10156117e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117db906132ee565b60405180910390fd5b601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611871576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118689061335a565b60405180910390fd5b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148061191a5750601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b80156119335750601560149054906101000a900460ff16155b15611d7a57601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614611a8c57600060105461199b30610da8565b6119a5919061337a565b905060135481106119bc576119bb601354611e51565b5b60145460105410611a8a576119d2601454611f12565b601454601060008282546119e6919061337a565b925050819055506000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050905080611a88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7f906133fa565b60405180910390fd5b505b505b6000601160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611b2f5750601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80611be25750601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614158015611be15750601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b5b15611bef57819050611d69565b600c54821115611c34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2b9061348c565b60405180910390fd5b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611ce257600d54611c9584610da8565b83611ca09190612d49565b1115611ce1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd89061351e565b60405180910390fd5b5b60006064600b5484611cf49190612d07565b611cfe9190612ac6565b905060006064600a5485611d129190612d07565b611d1c9190612ac6565b90508082611d2a9190612d49565b84611d35919061337a565b92508160106000828254611d499190612d49565b92505081905550611d6686308385611d619190612d49565b612185565b50505b611d74848483612185565b50611d86565b611d85838383612185565b5b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6001601560146101000a81548160ff0219169083151502179055506000600282611e7b9190612ac6565b905060008183611e8b919061337a565b90506000479050611e9b83611f12565b60008147611ea9919061337a565b9050611eb583826123e5565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561848285604051611ee89392919061353e565b60405180910390a1505050506000601560146101000a81548160ff02191690831515021790555050565b6001601560146101000a81548160ff0219169083151502179055506000600267ffffffffffffffff811115611f4a57611f49613575565b5b604051908082528060200260200182016040528015611f785781602001602082028036833780820191505090505b5090503081600081518110611f9057611f8f6135a4565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612035573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061205991906135e8565b8160018151811061206d5761206c6135a4565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506120d2307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846113e8565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161213495949392919061370e565b600060405180830381600087803b15801561214e57600080fd5b505af1158015612162573d6000803e3d6000fd5b50505050506000601560146101000a81548160ff02191690831515021790555050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036121f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121eb906131ca565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612263576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225a9061325c565b60405180910390fd5b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156122e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e0906132ee565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516123d7919061278b565b60405180910390a350505050565b6001601560146101000a81548160ff02191690831515021790555061242b307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846113e8565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b81526004016124b296959493929190613768565b60606040518083038185885af11580156124d0573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906124f591906137de565b5050506000601560146101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061254282612517565b9050919050565b61255281612537565b82525050565b600060208201905061256d6000830184612549565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156125ad578082015181840152602081019050612592565b60008484015250505050565b6000601f19601f8301169050919050565b60006125d582612573565b6125df818561257e565b93506125ef81856020860161258f565b6125f8816125b9565b840191505092915050565b6000602082019050818103600083015261261d81846125ca565b905092915050565b600080fd5b61263381612537565b811461263e57600080fd5b50565b6000813590506126508161262a565b92915050565b6000819050919050565b61266981612656565b811461267457600080fd5b50565b60008135905061268681612660565b92915050565b600080604083850312156126a3576126a2612625565b5b60006126b185828601612641565b92505060206126c285828601612677565b9150509250929050565b60008115159050919050565b6126e1816126cc565b82525050565b60006020820190506126fc60008301846126d8565b92915050565b6000819050919050565b600061272761272261271d84612517565b612702565b612517565b9050919050565b60006127398261270c565b9050919050565b600061274b8261272e565b9050919050565b61275b81612740565b82525050565b60006020820190506127766000830184612752565b92915050565b61278581612656565b82525050565b60006020820190506127a0600083018461277c565b92915050565b6000602082840312156127bc576127bb612625565b5b60006127ca84828501612641565b91505092915050565b6000806000606084860312156127ec576127eb612625565b5b60006127fa86828701612641565b935050602061280b86828701612641565b925050604061281c86828701612677565b9150509250925092565b6000806040838503121561283d5761283c612625565b5b600061284b85828601612677565b925050602061285c85828601612677565b9150509250929050565b600060ff82169050919050565b61287c81612866565b82525050565b60006020820190506128976000830184612873565b92915050565b6128a6816126cc565b81146128b157600080fd5b50565b6000813590506128c38161289d565b92915050565b600080604083850312156128e0576128df612625565b5b60006128ee85828601612641565b92505060206128ff858286016128b4565b9150509250929050565b60006020828403121561291f5761291e612625565b5b600061292d84828501612677565b91505092915050565b6000806040838503121561294d5761294c612625565b5b600061295b85828601612641565b925050602061296c85828601612641565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806129bd57607f821691505b6020821081036129d0576129cf612976565b5b50919050565b7f4c5020506169722063616e6e6f742062652074686520446561642077616c6c6560008201527f742c206f72203021000000000000000000000000000000000000000000000000602082015250565b6000612a3260288361257e565b9150612a3d826129d6565b604082019050919050565b60006020820190508181036000830152612a6181612a25565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612ad182612656565b9150612adc83612656565b925082612aec57612aeb612a68565b5b828204905092915050565b7f43616e6e6f74206c6971756964617465206d6f7265207468616e203225206f6660008201527f2074686520737570706c79206174206f6e636521000000000000000000000000602082015250565b6000612b5360348361257e565b9150612b5e82612af7565b604082019050919050565b60006020820190508181036000830152612b8281612b46565b9050919050565b60008160011c9050919050565b6000808291508390505b6001851115612be057808604811115612bbc57612bbb612a97565b5b6001851615612bcb5780820291505b8081029050612bd985612b89565b9450612ba0565b94509492505050565b600082612bf95760019050612cb5565b81612c075760009050612cb5565b8160018114612c1d5760028114612c2757612c56565b6001915050612cb5565b60ff841115612c3957612c38612a97565b5b8360020a915084821115612c5057612c4f612a97565b5b50612cb5565b5060208310610133831016604e8410600b8410161715612c8b5782820a905083811115612c8657612c85612a97565b5b612cb5565b612c988484846001612b96565b92509050818404811115612caf57612cae612a97565b5b81810290505b9392505050565b6000612cc782612656565b9150612cd283612866565b9250612cff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484612be9565b905092915050565b6000612d1282612656565b9150612d1d83612656565b9250828202612d2b81612656565b91508282048414831517612d4257612d41612a97565b5b5092915050565b6000612d5482612656565b9150612d5f83612656565b9250828201905080821115612d7757612d76612a97565b5b92915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000612dd960258361257e565b9150612de482612d7d565b604082019050919050565b60006020820190508181036000830152612e0881612dcc565b9050919050565b7f45524332303a20746f74616c20746178206d757374206e6f742062652067726560008201527f61746572207468616e2031302500000000000000000000000000000000000000602082015250565b6000612e6b602d8361257e565b9150612e7682612e0f565b604082019050919050565b60006020820190508181036000830152612e9a81612e5e565b9050919050565b6000604082019050612eb66000830185612549565b612ec360208301846126d8565b9392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612f2660268361257e565b9150612f3182612eca565b604082019050919050565b60006020820190508181036000830152612f5581612f19565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000612fb860248361257e565b9150612fc382612f5c565b604082019050919050565b60006020820190508181036000830152612fe781612fab565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061304a60228361257e565b915061305582612fee565b604082019050919050565b600060208201905081810360008301526130798161303d565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006130b660208361257e565b91506130c182613080565b602082019050919050565b600060208201905081810360008301526130e5816130a9565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000613122601d8361257e565b915061312d826130ec565b602082019050919050565b6000602082019050818103600083015261315181613115565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006131b460258361257e565b91506131bf82613158565b604082019050919050565b600060208201905081810360008301526131e3816131a7565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061324660238361257e565b9150613251826131ea565b604082019050919050565b6000602082019050818103600083015261327581613239565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006132d860268361257e565b91506132e38261327c565b604082019050919050565b60006020820190508181036000830152613307816132cb565b9050919050565b7f4e6f204e6f6e4672656e20416c6c6f7765640000000000000000000000000000600082015250565b600061334460128361257e565b915061334f8261330e565b602082019050919050565b6000602082019050818103600083015261337381613337565b9050919050565b600061338582612656565b915061339083612656565b92508282039050818111156133a8576133a7612a97565b5b92915050565b7f4661696c656420746f2073656e64204554480000000000000000000000000000600082015250565b60006133e460128361257e565b91506133ef826133ae565b602082019050919050565b60006020820190508181036000830152613413816133d7565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473207460008201527f6865206d6178207472616e73616374696f6e20616d6f756e7400000000000000602082015250565b600061347660398361257e565b91506134818261341a565b604082019050919050565b600060208201905081810360008301526134a581613469565b9050919050565b7f45524332303a2062616c616e636520616d6f756e74206578636565646564206d60008201527f61782077616c6c657420616d6f756e74206c696d697400000000000000000000602082015250565b600061350860368361257e565b9150613513826134ac565b604082019050919050565b60006020820190508181036000830152613537816134fb565b9050919050565b6000606082019050613553600083018661277c565b613560602083018561277c565b61356d604083018461277c565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506135e28161262a565b92915050565b6000602082840312156135fe576135fd612625565b5b600061360c848285016135d3565b91505092915050565b6000819050919050565b600061363a61363561363084613615565b612702565b612656565b9050919050565b61364a8161361f565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61368581612537565b82525050565b6000613697838361367c565b60208301905092915050565b6000602082019050919050565b60006136bb82613650565b6136c5818561365b565b93506136d08361366c565b8060005b838110156137015781516136e8888261368b565b97506136f3836136a3565b9250506001810190506136d4565b5085935050505092915050565b600060a082019050613723600083018861277c565b6137306020830187613641565b818103604083015261374281866136b0565b90506137516060830185612549565b61375e608083018461277c565b9695505050505050565b600060c08201905061377d6000830189612549565b61378a602083018861277c565b6137976040830187613641565b6137a46060830186613641565b6137b16080830185612549565b6137be60a083018461277c565b979650505050505050565b6000815190506137d881612660565b92915050565b6000806000606084860312156137f7576137f6612625565b5b6000613805868287016137c9565b9350506020613816868287016137c9565b9250506040613827868287016137c9565b915050925092509256fea2646970667358221220954bb3bb1ba50ddfde99d0a91ac3a99c97eb05f4e52b8ab44f1e87bafea88d6264736f6c63430008130033

Deployed Bytecode Sourcemap

36877:9080:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37545:64;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27101:102;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29234:203;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38250:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28189:110;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39511:288;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30017:263;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44986:599;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28032:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44457:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31630:240;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38308:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37256:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45593:150;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27266:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24397:103;;;;;;;;;;;;;:::i;:::-;;37660:50;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45751:166;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37351:49;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23749:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26925:106;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37921:206;;;;;;;;;;;;;:::i;:::-;;30783:438;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28719:195;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37717:42;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37407:54;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37841:62;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44592:386;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37616:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37468:70;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37766:68;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28362:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42582:189;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44143:308;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24655:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37160:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37545:64;;;;;;;;;;;;;:::o;27101:102::-;27157:13;27190:5;27183:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27101:102;:::o;29234:203::-;29319:4;29336:13;29352:12;:10;:12::i;:::-;29336:28;;29375:32;29384:5;29391:7;29400:6;29375:8;:32::i;:::-;29425:4;29418:11;;;29234:203;;;;:::o;38250:51::-;;;:::o;28189:110::-;28252:7;28279:12;;28272:19;;28189:110;:::o;39511:288::-;23635:13;:11;:13::i;:::-;39593:4:::1;;;;;;;;;;;39584:13;;:5;:13;;::::0;39576:66:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;39678:1;39661:19;;:5;:19;;::::0;39653:72:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;39752:5;39736:13;;:21;;;;;;;;;;;;;;;;;;39773:18;39785:5;39773:18;;;;;;:::i;:::-;;;;;;;;39511:288:::0;:::o;30017:263::-;30116:4;30133:15;30151:12;:10;:12::i;:::-;30133:30;;30174:38;30190:4;30196:7;30205:6;30174:15;:38::i;:::-;30223:27;30233:4;30239:2;30243:6;30223:9;:27::i;:::-;30268:4;30261:11;;;30017:263;;;;;:::o;44986:599::-;45141:4;23635:13;:11;:13::i;:::-;45209:2:::1;45199:7;;:12;;;;:::i;:::-;45166:30;:45;45158:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;45324:2;45314:7;;:12;;;;:::i;:::-;45287:24;:39;45279:104;;;;;;;;;;;;:::i;:::-;;;;;;;;;45465:9;;;;;;;;;;;45459:2;:15;;;;:::i;:::-;45426:30;:48;;;;:::i;:::-;45394:29;:80;;;;45544:9;;;;;;;;;;;45538:2;:15;;;;:::i;:::-;45511:24;:42;;;;:::i;:::-;45485:23;:68;;;;45573:4;45566:11;;44986:599:::0;;;;:::o;28032:92::-;28090:5;28115:1;28108:8;;28032:92;:::o;44457:125::-;23635:13;:11;:13::i;:::-;44558:7:::1;44535:10;:20;44546:8;44535:20;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;44457:125:::0;;:::o;31630:240::-;31720:4;31737:13;31753:12;:10;:12::i;:::-;31737:28;;31776:64;31785:5;31792:7;31829:10;31801:25;31811:5;31818:7;31801:9;:25::i;:::-;:38;;;;:::i;:::-;31776:8;:64::i;:::-;31858:4;31851:11;;;31630:240;;;;:::o;38308:28::-;;;;;;;;;;;;;:::o;37256:34::-;;;;:::o;45593:150::-;45668:4;23635:13;:11;:13::i;:::-;45699:12:::1;45685:11;:26;;;;45731:4;45724:11;;45593:150:::0;;;:::o;27266:127::-;27340:7;27367:9;:18;27377:7;27367:18;;;;;;;;;;;;;;;;27360:25;;27266:127;;;:::o;24397:103::-;23635:13;:11;:13::i;:::-;24462:30:::1;24489:1;24462:18;:30::i;:::-;24397:103::o:0;37660:50::-;;;;;;;;;;;;;;;;;;;;;;:::o;45751:166::-;45834:4;23635:13;:11;:13::i;:::-;45869:16:::1;45851:15;:34;;;;45905:4;45898:11;;45751:166:::0;;;:::o;37351:49::-;;;;:::o;23749:87::-;23795:7;23822:6;;;;;;;;;;;23815:13;;23749:87;:::o;26925:106::-;26983:13;27016:7;27009:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26925:106;:::o;37921:206::-;23635:13;:11;:13::i;:::-;37991:1:::1;37973:15;:19;;;;38021:1;38003:15;:19;;;;38059:9;;;;;;;;;;;38053:2;:15;;;;:::i;:::-;38047:3;:21;;;;:::i;:::-;38033:11;:35;;;;38110:9;;;;;;;;;;;38104:2;:15;;;;:::i;:::-;38097:4;:22;;;;:::i;:::-;38079:15;:40;;;;37921:206::o:0;30783:438::-;30878:4;30895:13;30911:12;:10;:12::i;:::-;30895:28;;30934:24;30961:25;30971:5;30978:7;30961:9;:25::i;:::-;30934:52;;31025:15;31005:16;:35;;30997:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;31118:60;31127:5;31134:7;31162:15;31143:16;:34;31118:8;:60::i;:::-;31209:4;31202:11;;;;30783:438;;;;:::o;28719:195::-;28800:4;28817:13;28833:12;:10;:12::i;:::-;28817:28;;28856;28866:5;28873:2;28877:6;28856:9;:28::i;:::-;28902:4;28895:11;;;28719:195;;;;:::o;37717:42::-;;;;;;;;;;;;;;;;;;;;;;:::o;37407:54::-;;;;:::o;37841:62::-;;;;:::o;44592:386::-;44738:4;23635:13;:11;:13::i;:::-;44804:2:::1;44783:16;44764;:35;;;;:::i;:::-;44763:43;;44755:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;44885:16;44867:15;:34;;;;44930:16;44912:15;:34;;;;44966:4;44959:11;;44592:386:::0;;;;:::o;37616:37::-;;;;:::o;37468:70::-;;;;;;;;;;;;;:::o;37766:68::-;;;;:::o;28362:151::-;28451:7;28478:11;:18;28490:5;28478:18;;;;;;;;;;;;;;;:27;28497:7;28478:27;;;;;;;;;;;;;;;;28471:34;;28362:151;;;;:::o;42582:189::-;23635:13;:11;:13::i;:::-;42699:7:::1;42668:18;:28;42687:8;42668:28;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;42722:41;42745:8;42755:7;42722:41;;;;;;;:::i;:::-;;;;;;;;42582:189:::0;;:::o;44143:308::-;44214:4;23635:13;:11;:13::i;:::-;44252:4:::1;;;;;;;;;;;44239:17;;:9;:17;;::::0;44231:70:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;44341:1;44320:23;;:9;:23;;::::0;44312:76:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;44412:9;44399:10;;:22;;;;;;;;;;;;;;;;;;44439:4;44432:11;;44143:308:::0;;;:::o;24655:201::-;23635:13;:11;:13::i;:::-;24764:1:::1;24744:22;;:8;:22;;::::0;24736:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;24820:28;24839:8;24820:18;:28::i;:::-;24655:201:::0;:::o;37160:35::-;;;;:::o;22567:98::-;22620:7;22647:10;22640:17;;22567:98;:::o;33905:346::-;34024:1;34007:19;;:5;:19;;;33999:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34105:1;34086:21;;:7;:21;;;34078:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34189:6;34159:11;:18;34171:5;34159:18;;;;;;;;;;;;;;;:27;34178:7;34159:27;;;;;;;;;;;;;;;:36;;;;34227:7;34211:32;;34220:5;34211:32;;;34236:6;34211:32;;;;;;:::i;:::-;;;;;;;;33905:346;;;:::o;23914:132::-;23989:12;:10;:12::i;:::-;23978:23;;:7;:5;:7::i;:::-;:23;;;23970:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23914:132::o;34542:419::-;34643:24;34670:25;34680:5;34687:7;34670:9;:25::i;:::-;34643:52;;34730:17;34710:16;:37;34706:248;;34792:6;34772:16;:26;;34764:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34876:51;34885:5;34892:7;34920:6;34901:16;:25;34876:8;:51::i;:::-;34706:248;34632:329;34542:419;;;:::o;40277:2297::-;40391:1;40375:18;;:4;:18;;;40367:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40468:1;40454:16;;:2;:16;;;40446:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;40548:6;40529:15;40539:4;40529:9;:15::i;:::-;:25;;40521:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;40618:10;:16;40629:4;40618:16;;;;;;;;;;;;;;;;;;;;;;;;;40617:17;40608:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;40680:13;;;;;;;;;;;40672:21;;:4;:21;;;:44;;;;40703:13;;;;;;;;;;;40697:19;;:2;:19;;;40672:44;40671:67;;;;;40722:16;;;;;;;;;;;40721:17;40671:67;40667:1900;;;40767:13;;;;;;;;;;;40759:21;;:4;:21;;;40755:676;;40801:32;40863:18;;40836:24;40854:4;40836:9;:24::i;:::-;:45;;;;:::i;:::-;40801:80;;40932:29;;40904:24;:57;40900:152;;40986:46;41002:29;;40986:15;:46::i;:::-;40900:152;41098:23;;41075:18;;41074:47;41070:346;;41146:42;41164:23;;41146:17;:42::i;:::-;41233:23;;41211:18;;:45;;;;;;;:::i;:::-;;;;;;;;41279:9;41299:10;;;;;;;;;;;41291:24;;:47;41316:21;41291:47;;;;;;;;;;;;;;;;;;;;;;;41279:59;;41369:4;41361:35;;;;;;;;;;;;:::i;:::-;;;;;;;;;41123:293;41070:346;40782:649;40755:676;41447:22;41488:18;:24;41507:4;41488:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;41516:18;:22;41535:2;41516:22;;;;;;;;;;;;;;;;;;;;;;;;;41488:50;:100;;;;41551:13;;;;;;;;;;;41543:21;;:4;:21;;;;:44;;;;;41574:13;;;;;;;;;;;41568:19;;:2;:19;;;;41543:44;41488:100;41484:950;;;41626:6;41609:23;;41484:950;;;41691:11;;41681:6;:21;;41673:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;41795:13;;;;;;;;;;;41787:21;;:4;:21;;;41783:253;;41895:15;;41877:13;41887:2;41877:9;:13::i;:::-;41868:6;:22;;;;:::i;:::-;41867:43;;41833:183;;;;;;;;;;;;:::i;:::-;;;;;;;;;41783:253;42056:22;42111:3;42092:15;;42083:6;:24;;;;:::i;:::-;42082:32;;;;:::i;:::-;42056:59;;42134:22;42189:3;42170:15;;42161:6;:24;;;;:::i;:::-;42160:32;;;;:::i;:::-;42134:59;;42256:14;42239;:31;;;;:::i;:::-;42229:6;:42;;;;:::i;:::-;42212:59;;42312:14;42290:18;;:36;;;;;;;:::i;:::-;;;;;;;;42347:71;42363:4;42377;42402:14;42385;:31;;;;:::i;:::-;42347:15;:71::i;:::-;41654:780;;41484:950;42448:41;42464:4;42470:2;42474:14;42448:15;:41::i;:::-;40740:1761;40667:1900;;;42522:33;42538:4;42544:2;42548:6;42522:15;:33::i;:::-;40667:1900;40277:2297;;;:::o;25016:191::-;25090:16;25109:6;;;;;;;;;;;25090:25;;25135:8;25126:6;;:17;;;;;;;;;;;;;;;;;;25190:8;25159:40;;25180:8;25159:40;;;;;;;;;;;;25079:128;25016:191;:::o;42779:474::-;38529:4;38510:16;;:23;;;;;;;;;;;;;;;;;;42865:12:::1;42904:1;42881:20;:24;;;;:::i;:::-;42865:41;;42917:17;42961:4;42938:20;:27;;;;:::i;:::-;42917:49;;42979:22;43004:21;42979:46;;43038:23;43056:4;43038:17;:23::i;:::-;43074:18;43120:14;43096:21;:38;;;;:::i;:::-;43074:61;;43148:36;43162:9;43173:10;43148:13;:36::i;:::-;43202:43;43217:4;43223:10;43235:9;43202:43;;;;;;;;:::i;:::-;;;;;;;;42854:399;;;;38575:5:::0;38556:16;;:24;;;;;;;;;;;;;;;;;;42779:474;:::o;43261:488::-;38529:4;38510:16;;:23;;;;;;;;;;;;;;;;;;43340:21:::1;43378:1;43364:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43340:40;;43409:4;43391;43396:1;43391:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;43435:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43425:4;43430:1;43425:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;::::0;::::1;43470:62;43487:4;43502:15;43520:11;43470:8;:62::i;:::-;43545:15;:66;;;43626:11;43652:1;43668:4;43695;43715:15;43545:196;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;43329:420;38575:5:::0;38556:16;;:24;;;;;;;;;;;;;;;;;;43261:488;:::o;34969:705::-;35082:1;35066:18;;:4;:18;;;35058:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35159:1;35145:16;;:2;:16;;;35137:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;35214:19;35236:9;:15;35246:4;35236:15;;;;;;;;;;;;;;;;35214:37;;35285:6;35270:11;:21;;35262:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;35402:6;35388:11;:20;35370:9;:15;35380:4;35370:15;;;;;;;;;;;;;;;:38;;;;35605:6;35588:9;:13;35598:2;35588:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;35655:2;35640:26;;35649:4;35640:26;;;35659:6;35640:26;;;;;;:::i;:::-;;;;;;;;35047:627;34969:705;;;:::o;43757:378::-;38529:4;38510:16;;:23;;;;;;;;;;;;;;;;;;43851:62:::1;43868:4;43883:15;43901:11;43851:8;:62::i;:::-;43926:15;:31;;;43965:9;43998:4;44018:11;44044:1;44060::::0;44076:10:::1;;;;;;;;;;;44101:15;43926:201;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;38575:5:::0;38556:16;;:24;;;;;;;;;;;;;;;;;;43757:378;;:::o;7:126:1:-;44:7;84:42;77:5;73:54;62:65;;7:126;;;:::o;139:96::-;176:7;205:24;223:5;205:24;:::i;:::-;194:35;;139:96;;;:::o;241:118::-;328:24;346:5;328:24;:::i;:::-;323:3;316:37;241:118;;:::o;365:222::-;458:4;496:2;485:9;481:18;473:26;;509:71;577:1;566:9;562:17;553:6;509:71;:::i;:::-;365:222;;;;:::o;593:99::-;645:6;679:5;673:12;663:22;;593:99;;;:::o;698:169::-;782:11;816:6;811:3;804:19;856:4;851:3;847:14;832:29;;698:169;;;;:::o;873:246::-;954:1;964:113;978:6;975:1;972:13;964:113;;;1063:1;1058:3;1054:11;1048:18;1044:1;1039:3;1035:11;1028:39;1000:2;997:1;993:10;988:15;;964:113;;;1111:1;1102:6;1097:3;1093:16;1086:27;935:184;873:246;;;:::o;1125:102::-;1166:6;1217:2;1213:7;1208:2;1201:5;1197:14;1193:28;1183:38;;1125:102;;;:::o;1233:377::-;1321:3;1349:39;1382:5;1349:39;:::i;:::-;1404:71;1468:6;1463:3;1404:71;:::i;:::-;1397:78;;1484:65;1542:6;1537:3;1530:4;1523:5;1519:16;1484:65;:::i;:::-;1574:29;1596:6;1574:29;:::i;:::-;1569:3;1565:39;1558:46;;1325:285;1233:377;;;;:::o;1616:313::-;1729:4;1767:2;1756:9;1752:18;1744:26;;1816:9;1810:4;1806:20;1802:1;1791:9;1787:17;1780:47;1844:78;1917:4;1908:6;1844:78;:::i;:::-;1836:86;;1616:313;;;;:::o;2016:117::-;2125:1;2122;2115:12;2262:122;2335:24;2353:5;2335:24;:::i;:::-;2328:5;2325:35;2315:63;;2374:1;2371;2364:12;2315:63;2262:122;:::o;2390:139::-;2436:5;2474:6;2461:20;2452:29;;2490:33;2517:5;2490:33;:::i;:::-;2390:139;;;;:::o;2535:77::-;2572:7;2601:5;2590:16;;2535:77;;;:::o;2618:122::-;2691:24;2709:5;2691:24;:::i;:::-;2684:5;2681:35;2671:63;;2730:1;2727;2720:12;2671:63;2618:122;:::o;2746:139::-;2792:5;2830:6;2817:20;2808:29;;2846:33;2873:5;2846:33;:::i;:::-;2746:139;;;;:::o;2891:474::-;2959:6;2967;3016:2;3004:9;2995:7;2991:23;2987:32;2984:119;;;3022:79;;:::i;:::-;2984:119;3142:1;3167:53;3212:7;3203:6;3192:9;3188:22;3167:53;:::i;:::-;3157:63;;3113:117;3269:2;3295:53;3340:7;3331:6;3320:9;3316:22;3295:53;:::i;:::-;3285:63;;3240:118;2891:474;;;;;:::o;3371:90::-;3405:7;3448:5;3441:13;3434:21;3423:32;;3371:90;;;:::o;3467:109::-;3548:21;3563:5;3548:21;:::i;:::-;3543:3;3536:34;3467:109;;:::o;3582:210::-;3669:4;3707:2;3696:9;3692:18;3684:26;;3720:65;3782:1;3771:9;3767:17;3758:6;3720:65;:::i;:::-;3582:210;;;;:::o;3798:60::-;3826:3;3847:5;3840:12;;3798:60;;;:::o;3864:142::-;3914:9;3947:53;3965:34;3974:24;3992:5;3974:24;:::i;:::-;3965:34;:::i;:::-;3947:53;:::i;:::-;3934:66;;3864:142;;;:::o;4012:126::-;4062:9;4095:37;4126:5;4095:37;:::i;:::-;4082:50;;4012:126;;;:::o;4144:152::-;4220:9;4253:37;4284:5;4253:37;:::i;:::-;4240:50;;4144:152;;;:::o;4302:183::-;4415:63;4472:5;4415:63;:::i;:::-;4410:3;4403:76;4302:183;;:::o;4491:274::-;4610:4;4648:2;4637:9;4633:18;4625:26;;4661:97;4755:1;4744:9;4740:17;4731:6;4661:97;:::i;:::-;4491:274;;;;:::o;4771:118::-;4858:24;4876:5;4858:24;:::i;:::-;4853:3;4846:37;4771:118;;:::o;4895:222::-;4988:4;5026:2;5015:9;5011:18;5003:26;;5039:71;5107:1;5096:9;5092:17;5083:6;5039:71;:::i;:::-;4895:222;;;;:::o;5123:329::-;5182:6;5231:2;5219:9;5210:7;5206:23;5202:32;5199:119;;;5237:79;;:::i;:::-;5199:119;5357:1;5382:53;5427:7;5418:6;5407:9;5403:22;5382:53;:::i;:::-;5372:63;;5328:117;5123:329;;;;:::o;5458:619::-;5535:6;5543;5551;5600:2;5588:9;5579:7;5575:23;5571:32;5568:119;;;5606:79;;:::i;:::-;5568:119;5726:1;5751:53;5796:7;5787:6;5776:9;5772:22;5751:53;:::i;:::-;5741:63;;5697:117;5853:2;5879:53;5924:7;5915:6;5904:9;5900:22;5879:53;:::i;:::-;5869:63;;5824:118;5981:2;6007:53;6052:7;6043:6;6032:9;6028:22;6007:53;:::i;:::-;5997:63;;5952:118;5458:619;;;;;:::o;6083:474::-;6151:6;6159;6208:2;6196:9;6187:7;6183:23;6179:32;6176:119;;;6214:79;;:::i;:::-;6176:119;6334:1;6359:53;6404:7;6395:6;6384:9;6380:22;6359:53;:::i;:::-;6349:63;;6305:117;6461:2;6487:53;6532:7;6523:6;6512:9;6508:22;6487:53;:::i;:::-;6477:63;;6432:118;6083:474;;;;;:::o;6563:86::-;6598:7;6638:4;6631:5;6627:16;6616:27;;6563:86;;;:::o;6655:112::-;6738:22;6754:5;6738:22;:::i;:::-;6733:3;6726:35;6655:112;;:::o;6773:214::-;6862:4;6900:2;6889:9;6885:18;6877:26;;6913:67;6977:1;6966:9;6962:17;6953:6;6913:67;:::i;:::-;6773:214;;;;:::o;6993:116::-;7063:21;7078:5;7063:21;:::i;:::-;7056:5;7053:32;7043:60;;7099:1;7096;7089:12;7043:60;6993:116;:::o;7115:133::-;7158:5;7196:6;7183:20;7174:29;;7212:30;7236:5;7212:30;:::i;:::-;7115:133;;;;:::o;7254:468::-;7319:6;7327;7376:2;7364:9;7355:7;7351:23;7347:32;7344:119;;;7382:79;;:::i;:::-;7344:119;7502:1;7527:53;7572:7;7563:6;7552:9;7548:22;7527:53;:::i;:::-;7517:63;;7473:117;7629:2;7655:50;7697:7;7688:6;7677:9;7673:22;7655:50;:::i;:::-;7645:60;;7600:115;7254:468;;;;;:::o;7728:329::-;7787:6;7836:2;7824:9;7815:7;7811:23;7807:32;7804:119;;;7842:79;;:::i;:::-;7804:119;7962:1;7987:53;8032:7;8023:6;8012:9;8008:22;7987:53;:::i;:::-;7977:63;;7933:117;7728:329;;;;:::o;8063:474::-;8131:6;8139;8188:2;8176:9;8167:7;8163:23;8159:32;8156:119;;;8194:79;;:::i;:::-;8156:119;8314:1;8339:53;8384:7;8375:6;8364:9;8360:22;8339:53;:::i;:::-;8329:63;;8285:117;8441:2;8467:53;8512:7;8503:6;8492:9;8488:22;8467:53;:::i;:::-;8457:63;;8412:118;8063:474;;;;;:::o;8543:180::-;8591:77;8588:1;8581:88;8688:4;8685:1;8678:15;8712:4;8709:1;8702:15;8729:320;8773:6;8810:1;8804:4;8800:12;8790:22;;8857:1;8851:4;8847:12;8878:18;8868:81;;8934:4;8926:6;8922:17;8912:27;;8868:81;8996:2;8988:6;8985:14;8965:18;8962:38;8959:84;;9015:18;;:::i;:::-;8959:84;8780:269;8729:320;;;:::o;9055:227::-;9195:34;9191:1;9183:6;9179:14;9172:58;9264:10;9259:2;9251:6;9247:15;9240:35;9055:227;:::o;9288:366::-;9430:3;9451:67;9515:2;9510:3;9451:67;:::i;:::-;9444:74;;9527:93;9616:3;9527:93;:::i;:::-;9645:2;9640:3;9636:12;9629:19;;9288:366;;;:::o;9660:419::-;9826:4;9864:2;9853:9;9849:18;9841:26;;9913:9;9907:4;9903:20;9899:1;9888:9;9884:17;9877:47;9941:131;10067:4;9941:131;:::i;:::-;9933:139;;9660:419;;;:::o;10085:180::-;10133:77;10130:1;10123:88;10230:4;10227:1;10220:15;10254:4;10251:1;10244:15;10271:180;10319:77;10316:1;10309:88;10416:4;10413:1;10406:15;10440:4;10437:1;10430:15;10457:185;10497:1;10514:20;10532:1;10514:20;:::i;:::-;10509:25;;10548:20;10566:1;10548:20;:::i;:::-;10543:25;;10587:1;10577:35;;10592:18;;:::i;:::-;10577:35;10634:1;10631;10627:9;10622:14;;10457:185;;;;:::o;10648:239::-;10788:34;10784:1;10776:6;10772:14;10765:58;10857:22;10852:2;10844:6;10840:15;10833:47;10648:239;:::o;10893:366::-;11035:3;11056:67;11120:2;11115:3;11056:67;:::i;:::-;11049:74;;11132:93;11221:3;11132:93;:::i;:::-;11250:2;11245:3;11241:12;11234:19;;10893:366;;;:::o;11265:419::-;11431:4;11469:2;11458:9;11454:18;11446:26;;11518:9;11512:4;11508:20;11504:1;11493:9;11489:17;11482:47;11546:131;11672:4;11546:131;:::i;:::-;11538:139;;11265:419;;;:::o;11690:102::-;11732:8;11779:5;11776:1;11772:13;11751:34;;11690:102;;;:::o;11798:848::-;11859:5;11866:4;11890:6;11881:15;;11914:5;11905:14;;11928:712;11949:1;11939:8;11936:15;11928:712;;;12044:4;12039:3;12035:14;12029:4;12026:24;12023:50;;;12053:18;;:::i;:::-;12023:50;12103:1;12093:8;12089:16;12086:451;;;12518:4;12511:5;12507:16;12498:25;;12086:451;12568:4;12562;12558:15;12550:23;;12598:32;12621:8;12598:32;:::i;:::-;12586:44;;11928:712;;;11798:848;;;;;;;:::o;12652:1073::-;12706:5;12897:8;12887:40;;12918:1;12909:10;;12920:5;;12887:40;12946:4;12936:36;;12963:1;12954:10;;12965:5;;12936:36;13032:4;13080:1;13075:27;;;;13116:1;13111:191;;;;13025:277;;13075:27;13093:1;13084:10;;13095:5;;;13111:191;13156:3;13146:8;13143:17;13140:43;;;13163:18;;:::i;:::-;13140:43;13212:8;13209:1;13205:16;13196:25;;13247:3;13240:5;13237:14;13234:40;;;13254:18;;:::i;:::-;13234:40;13287:5;;;13025:277;;13411:2;13401:8;13398:16;13392:3;13386:4;13383:13;13379:36;13361:2;13351:8;13348:16;13343:2;13337:4;13334:12;13330:35;13314:111;13311:246;;;13467:8;13461:4;13457:19;13448:28;;13502:3;13495:5;13492:14;13489:40;;;13509:18;;:::i;:::-;13489:40;13542:5;;13311:246;13582:42;13620:3;13610:8;13604:4;13601:1;13582:42;:::i;:::-;13567:57;;;;13656:4;13651:3;13647:14;13640:5;13637:25;13634:51;;;13665:18;;:::i;:::-;13634:51;13714:4;13707:5;13703:16;13694:25;;12652:1073;;;;;;:::o;13731:281::-;13789:5;13813:23;13831:4;13813:23;:::i;:::-;13805:31;;13857:25;13873:8;13857:25;:::i;:::-;13845:37;;13901:104;13938:66;13928:8;13922:4;13901:104;:::i;:::-;13892:113;;13731:281;;;;:::o;14018:410::-;14058:7;14081:20;14099:1;14081:20;:::i;:::-;14076:25;;14115:20;14133:1;14115:20;:::i;:::-;14110:25;;14170:1;14167;14163:9;14192:30;14210:11;14192:30;:::i;:::-;14181:41;;14371:1;14362:7;14358:15;14355:1;14352:22;14332:1;14325:9;14305:83;14282:139;;14401:18;;:::i;:::-;14282:139;14066:362;14018:410;;;;:::o;14434:191::-;14474:3;14493:20;14511:1;14493:20;:::i;:::-;14488:25;;14527:20;14545:1;14527:20;:::i;:::-;14522:25;;14570:1;14567;14563:9;14556:16;;14591:3;14588:1;14585:10;14582:36;;;14598:18;;:::i;:::-;14582:36;14434:191;;;;:::o;14631:224::-;14771:34;14767:1;14759:6;14755:14;14748:58;14840:7;14835:2;14827:6;14823:15;14816:32;14631:224;:::o;14861:366::-;15003:3;15024:67;15088:2;15083:3;15024:67;:::i;:::-;15017:74;;15100:93;15189:3;15100:93;:::i;:::-;15218:2;15213:3;15209:12;15202:19;;14861:366;;;:::o;15233:419::-;15399:4;15437:2;15426:9;15422:18;15414:26;;15486:9;15480:4;15476:20;15472:1;15461:9;15457:17;15450:47;15514:131;15640:4;15514:131;:::i;:::-;15506:139;;15233:419;;;:::o;15658:232::-;15798:34;15794:1;15786:6;15782:14;15775:58;15867:15;15862:2;15854:6;15850:15;15843:40;15658:232;:::o;15896:366::-;16038:3;16059:67;16123:2;16118:3;16059:67;:::i;:::-;16052:74;;16135:93;16224:3;16135:93;:::i;:::-;16253:2;16248:3;16244:12;16237:19;;15896:366;;;:::o;16268:419::-;16434:4;16472:2;16461:9;16457:18;16449:26;;16521:9;16515:4;16511:20;16507:1;16496:9;16492:17;16485:47;16549:131;16675:4;16549:131;:::i;:::-;16541:139;;16268:419;;;:::o;16693:320::-;16808:4;16846:2;16835:9;16831:18;16823:26;;16859:71;16927:1;16916:9;16912:17;16903:6;16859:71;:::i;:::-;16940:66;17002:2;16991:9;16987:18;16978:6;16940:66;:::i;:::-;16693:320;;;;;:::o;17019:225::-;17159:34;17155:1;17147:6;17143:14;17136:58;17228:8;17223:2;17215:6;17211:15;17204:33;17019:225;:::o;17250:366::-;17392:3;17413:67;17477:2;17472:3;17413:67;:::i;:::-;17406:74;;17489:93;17578:3;17489:93;:::i;:::-;17607:2;17602:3;17598:12;17591:19;;17250:366;;;:::o;17622:419::-;17788:4;17826:2;17815:9;17811:18;17803:26;;17875:9;17869:4;17865:20;17861:1;17850:9;17846:17;17839:47;17903:131;18029:4;17903:131;:::i;:::-;17895:139;;17622:419;;;:::o;18047:223::-;18187:34;18183:1;18175:6;18171:14;18164:58;18256:6;18251:2;18243:6;18239:15;18232:31;18047:223;:::o;18276:366::-;18418:3;18439:67;18503:2;18498:3;18439:67;:::i;:::-;18432:74;;18515:93;18604:3;18515:93;:::i;:::-;18633:2;18628:3;18624:12;18617:19;;18276:366;;;:::o;18648:419::-;18814:4;18852:2;18841:9;18837:18;18829:26;;18901:9;18895:4;18891:20;18887:1;18876:9;18872:17;18865:47;18929:131;19055:4;18929:131;:::i;:::-;18921:139;;18648:419;;;:::o;19073:221::-;19213:34;19209:1;19201:6;19197:14;19190:58;19282:4;19277:2;19269:6;19265:15;19258:29;19073:221;:::o;19300:366::-;19442:3;19463:67;19527:2;19522:3;19463:67;:::i;:::-;19456:74;;19539:93;19628:3;19539:93;:::i;:::-;19657:2;19652:3;19648:12;19641:19;;19300:366;;;:::o;19672:419::-;19838:4;19876:2;19865:9;19861:18;19853:26;;19925:9;19919:4;19915:20;19911:1;19900:9;19896:17;19889:47;19953:131;20079:4;19953:131;:::i;:::-;19945:139;;19672:419;;;:::o;20097:182::-;20237:34;20233:1;20225:6;20221:14;20214:58;20097:182;:::o;20285:366::-;20427:3;20448:67;20512:2;20507:3;20448:67;:::i;:::-;20441:74;;20524:93;20613:3;20524:93;:::i;:::-;20642:2;20637:3;20633:12;20626:19;;20285:366;;;:::o;20657:419::-;20823:4;20861:2;20850:9;20846:18;20838:26;;20910:9;20904:4;20900:20;20896:1;20885:9;20881:17;20874:47;20938:131;21064:4;20938:131;:::i;:::-;20930:139;;20657:419;;;:::o;21082:179::-;21222:31;21218:1;21210:6;21206:14;21199:55;21082:179;:::o;21267:366::-;21409:3;21430:67;21494:2;21489:3;21430:67;:::i;:::-;21423:74;;21506:93;21595:3;21506:93;:::i;:::-;21624:2;21619:3;21615:12;21608:19;;21267:366;;;:::o;21639:419::-;21805:4;21843:2;21832:9;21828:18;21820:26;;21892:9;21886:4;21882:20;21878:1;21867:9;21863:17;21856:47;21920:131;22046:4;21920:131;:::i;:::-;21912:139;;21639:419;;;:::o;22064:224::-;22204:34;22200:1;22192:6;22188:14;22181:58;22273:7;22268:2;22260:6;22256:15;22249:32;22064:224;:::o;22294:366::-;22436:3;22457:67;22521:2;22516:3;22457:67;:::i;:::-;22450:74;;22533:93;22622:3;22533:93;:::i;:::-;22651:2;22646:3;22642:12;22635:19;;22294:366;;;:::o;22666:419::-;22832:4;22870:2;22859:9;22855:18;22847:26;;22919:9;22913:4;22909:20;22905:1;22894:9;22890:17;22883:47;22947:131;23073:4;22947:131;:::i;:::-;22939:139;;22666:419;;;:::o;23091:222::-;23231:34;23227:1;23219:6;23215:14;23208:58;23300:5;23295:2;23287:6;23283:15;23276:30;23091:222;:::o;23319:366::-;23461:3;23482:67;23546:2;23541:3;23482:67;:::i;:::-;23475:74;;23558:93;23647:3;23558:93;:::i;:::-;23676:2;23671:3;23667:12;23660:19;;23319:366;;;:::o;23691:419::-;23857:4;23895:2;23884:9;23880:18;23872:26;;23944:9;23938:4;23934:20;23930:1;23919:9;23915:17;23908:47;23972:131;24098:4;23972:131;:::i;:::-;23964:139;;23691:419;;;:::o;24116:225::-;24256:34;24252:1;24244:6;24240:14;24233:58;24325:8;24320:2;24312:6;24308:15;24301:33;24116:225;:::o;24347:366::-;24489:3;24510:67;24574:2;24569:3;24510:67;:::i;:::-;24503:74;;24586:93;24675:3;24586:93;:::i;:::-;24704:2;24699:3;24695:12;24688:19;;24347:366;;;:::o;24719:419::-;24885:4;24923:2;24912:9;24908:18;24900:26;;24972:9;24966:4;24962:20;24958:1;24947:9;24943:17;24936:47;25000:131;25126:4;25000:131;:::i;:::-;24992:139;;24719:419;;;:::o;25144:168::-;25284:20;25280:1;25272:6;25268:14;25261:44;25144:168;:::o;25318:366::-;25460:3;25481:67;25545:2;25540:3;25481:67;:::i;:::-;25474:74;;25557:93;25646:3;25557:93;:::i;:::-;25675:2;25670:3;25666:12;25659:19;;25318:366;;;:::o;25690:419::-;25856:4;25894:2;25883:9;25879:18;25871:26;;25943:9;25937:4;25933:20;25929:1;25918:9;25914:17;25907:47;25971:131;26097:4;25971:131;:::i;:::-;25963:139;;25690:419;;;:::o;26115:194::-;26155:4;26175:20;26193:1;26175:20;:::i;:::-;26170:25;;26209:20;26227:1;26209:20;:::i;:::-;26204:25;;26253:1;26250;26246:9;26238:17;;26277:1;26271:4;26268:11;26265:37;;;26282:18;;:::i;:::-;26265:37;26115:194;;;;:::o;26315:168::-;26455:20;26451:1;26443:6;26439:14;26432:44;26315:168;:::o;26489:366::-;26631:3;26652:67;26716:2;26711:3;26652:67;:::i;:::-;26645:74;;26728:93;26817:3;26728:93;:::i;:::-;26846:2;26841:3;26837:12;26830:19;;26489:366;;;:::o;26861:419::-;27027:4;27065:2;27054:9;27050:18;27042:26;;27114:9;27108:4;27104:20;27100:1;27089:9;27085:17;27078:47;27142:131;27268:4;27142:131;:::i;:::-;27134:139;;26861:419;;;:::o;27286:244::-;27426:34;27422:1;27414:6;27410:14;27403:58;27495:27;27490:2;27482:6;27478:15;27471:52;27286:244;:::o;27536:366::-;27678:3;27699:67;27763:2;27758:3;27699:67;:::i;:::-;27692:74;;27775:93;27864:3;27775:93;:::i;:::-;27893:2;27888:3;27884:12;27877:19;;27536:366;;;:::o;27908:419::-;28074:4;28112:2;28101:9;28097:18;28089:26;;28161:9;28155:4;28151:20;28147:1;28136:9;28132:17;28125:47;28189:131;28315:4;28189:131;:::i;:::-;28181:139;;27908:419;;;:::o;28333:241::-;28473:34;28469:1;28461:6;28457:14;28450:58;28542:24;28537:2;28529:6;28525:15;28518:49;28333:241;:::o;28580:366::-;28722:3;28743:67;28807:2;28802:3;28743:67;:::i;:::-;28736:74;;28819:93;28908:3;28819:93;:::i;:::-;28937:2;28932:3;28928:12;28921:19;;28580:366;;;:::o;28952:419::-;29118:4;29156:2;29145:9;29141:18;29133:26;;29205:9;29199:4;29195:20;29191:1;29180:9;29176:17;29169:47;29233:131;29359:4;29233:131;:::i;:::-;29225:139;;28952:419;;;:::o;29377:442::-;29526:4;29564:2;29553:9;29549:18;29541:26;;29577:71;29645:1;29634:9;29630:17;29621:6;29577:71;:::i;:::-;29658:72;29726:2;29715:9;29711:18;29702:6;29658:72;:::i;:::-;29740;29808:2;29797:9;29793:18;29784:6;29740:72;:::i;:::-;29377:442;;;;;;:::o;29825:180::-;29873:77;29870:1;29863:88;29970:4;29967:1;29960:15;29994:4;29991:1;29984:15;30011:180;30059:77;30056:1;30049:88;30156:4;30153:1;30146:15;30180:4;30177:1;30170:15;30197:143;30254:5;30285:6;30279:13;30270:22;;30301:33;30328:5;30301:33;:::i;:::-;30197:143;;;;:::o;30346:351::-;30416:6;30465:2;30453:9;30444:7;30440:23;30436:32;30433:119;;;30471:79;;:::i;:::-;30433:119;30591:1;30616:64;30672:7;30663:6;30652:9;30648:22;30616:64;:::i;:::-;30606:74;;30562:128;30346:351;;;;:::o;30703:85::-;30748:7;30777:5;30766:16;;30703:85;;;:::o;30794:158::-;30852:9;30885:61;30903:42;30912:32;30938:5;30912:32;:::i;:::-;30903:42;:::i;:::-;30885:61;:::i;:::-;30872:74;;30794:158;;;:::o;30958:147::-;31053:45;31092:5;31053:45;:::i;:::-;31048:3;31041:58;30958:147;;:::o;31111:114::-;31178:6;31212:5;31206:12;31196:22;;31111:114;;;:::o;31231:184::-;31330:11;31364:6;31359:3;31352:19;31404:4;31399:3;31395:14;31380:29;;31231:184;;;;:::o;31421:132::-;31488:4;31511:3;31503:11;;31541:4;31536:3;31532:14;31524:22;;31421:132;;;:::o;31559:108::-;31636:24;31654:5;31636:24;:::i;:::-;31631:3;31624:37;31559:108;;:::o;31673:179::-;31742:10;31763:46;31805:3;31797:6;31763:46;:::i;:::-;31841:4;31836:3;31832:14;31818:28;;31673:179;;;;:::o;31858:113::-;31928:4;31960;31955:3;31951:14;31943:22;;31858:113;;;:::o;32007:732::-;32126:3;32155:54;32203:5;32155:54;:::i;:::-;32225:86;32304:6;32299:3;32225:86;:::i;:::-;32218:93;;32335:56;32385:5;32335:56;:::i;:::-;32414:7;32445:1;32430:284;32455:6;32452:1;32449:13;32430:284;;;32531:6;32525:13;32558:63;32617:3;32602:13;32558:63;:::i;:::-;32551:70;;32644:60;32697:6;32644:60;:::i;:::-;32634:70;;32490:224;32477:1;32474;32470:9;32465:14;;32430:284;;;32434:14;32730:3;32723:10;;32131:608;;;32007:732;;;;:::o;32745:831::-;33008:4;33046:3;33035:9;33031:19;33023:27;;33060:71;33128:1;33117:9;33113:17;33104:6;33060:71;:::i;:::-;33141:80;33217:2;33206:9;33202:18;33193:6;33141:80;:::i;:::-;33268:9;33262:4;33258:20;33253:2;33242:9;33238:18;33231:48;33296:108;33399:4;33390:6;33296:108;:::i;:::-;33288:116;;33414:72;33482:2;33471:9;33467:18;33458:6;33414:72;:::i;:::-;33496:73;33564:3;33553:9;33549:19;33540:6;33496:73;:::i;:::-;32745:831;;;;;;;;:::o;33582:807::-;33831:4;33869:3;33858:9;33854:19;33846:27;;33883:71;33951:1;33940:9;33936:17;33927:6;33883:71;:::i;:::-;33964:72;34032:2;34021:9;34017:18;34008:6;33964:72;:::i;:::-;34046:80;34122:2;34111:9;34107:18;34098:6;34046:80;:::i;:::-;34136;34212:2;34201:9;34197:18;34188:6;34136:80;:::i;:::-;34226:73;34294:3;34283:9;34279:19;34270:6;34226:73;:::i;:::-;34309;34377:3;34366:9;34362:19;34353:6;34309:73;:::i;:::-;33582:807;;;;;;;;;:::o;34395:143::-;34452:5;34483:6;34477:13;34468:22;;34499:33;34526:5;34499:33;:::i;:::-;34395:143;;;;:::o;34544:663::-;34632:6;34640;34648;34697:2;34685:9;34676:7;34672:23;34668:32;34665:119;;;34703:79;;:::i;:::-;34665:119;34823:1;34848:64;34904:7;34895:6;34884:9;34880:22;34848:64;:::i;:::-;34838:74;;34794:128;34961:2;34987:64;35043:7;35034:6;35023:9;35019:22;34987:64;:::i;:::-;34977:74;;34932:129;35100:2;35126:64;35182:7;35173:6;35162:9;35158:22;35126:64;:::i;:::-;35116:74;;35071:129;34544:663;;;;;:::o

Swarm Source

ipfs://954bb3bb1ba50ddfde99d0a91ac3a99c97eb05f4e52b8ab44f1e87bafea88d62
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.