{
    "_format": "hh-sol-artifact-1",
    "contractName": "KAMI721CUpgradeable",
    "sourceName": "contracts/KAMI721CUpgradeable.sol",
    "abi": [
        {
            "inputs": [],
            "stateMutability": "nonpayable",
            "type": "constructor"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": false,
                    "internalType": "address",
                    "name": "previousAdmin",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "address",
                    "name": "newAdmin",
                    "type": "address"
                }
            ],
            "name": "AdminChanged",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "owner",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "approved",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "uint256",
                    "name": "tokenId",
                    "type": "uint256"
                }
            ],
            "name": "Approval",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "owner",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "operator",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "bool",
                    "name": "approved",
                    "type": "bool"
                }
            ],
            "name": "ApprovalForAll",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "beacon",
                    "type": "address"
                }
            ],
            "name": "BeaconUpgraded",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": false,
                    "internalType": "uint8",
                    "name": "version",
                    "type": "uint8"
                }
            ],
            "name": "Initialized",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "components": [
                        {
                            "internalType": "address",
                            "name": "receiver",
                            "type": "address"
                        },
                        {
                            "internalType": "uint96",
                            "name": "feeNumerator",
                            "type": "uint96"
                        }
                    ],
                    "indexed": false,
                    "internalType": "struct KAMI721CUpgradeable.RoyaltyData[]",
                    "name": "royalties",
                    "type": "tuple[]"
                }
            ],
            "name": "MintRoyaltiesUpdated",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": false,
                    "internalType": "address",
                    "name": "account",
                    "type": "address"
                }
            ],
            "name": "Paused",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "uint256",
                    "name": "tokenId",
                    "type": "uint256"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "platformAddress",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "amount",
                    "type": "uint256"
                }
            ],
            "name": "PlatformCommissionPaid",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": false,
                    "internalType": "uint96",
                    "name": "newPercentage",
                    "type": "uint96"
                },
                {
                    "indexed": false,
                    "internalType": "address",
                    "name": "newPlatformAddress",
                    "type": "address"
                }
            ],
            "name": "PlatformCommissionUpdated",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "uint256",
                    "name": "tokenId",
                    "type": "uint256"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "owner",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "renter",
                    "type": "address"
                }
            ],
            "name": "RentalEnded",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "uint256",
                    "name": "tokenId",
                    "type": "uint256"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "renter",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "newEndTime",
                    "type": "uint256"
                }
            ],
            "name": "RentalExtended",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "bytes32",
                    "name": "role",
                    "type": "bytes32"
                },
                {
                    "indexed": true,
                    "internalType": "bytes32",
                    "name": "previousAdminRole",
                    "type": "bytes32"
                },
                {
                    "indexed": true,
                    "internalType": "bytes32",
                    "name": "newAdminRole",
                    "type": "bytes32"
                }
            ],
            "name": "RoleAdminChanged",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "bytes32",
                    "name": "role",
                    "type": "bytes32"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "account",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "sender",
                    "type": "address"
                }
            ],
            "name": "RoleGranted",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "bytes32",
                    "name": "role",
                    "type": "bytes32"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "account",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "sender",
                    "type": "address"
                }
            ],
            "name": "RoleRevoked",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": false,
                    "internalType": "uint96",
                    "name": "newPercentage",
                    "type": "uint96"
                }
            ],
            "name": "RoyaltyPercentageUpdated",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "uint256",
                    "name": "tokenId",
                    "type": "uint256"
                },
                {
                    "components": [
                        {
                            "internalType": "address",
                            "name": "receiver",
                            "type": "address"
                        },
                        {
                            "internalType": "uint96",
                            "name": "feeNumerator",
                            "type": "uint96"
                        }
                    ],
                    "indexed": false,
                    "internalType": "struct KAMI721CUpgradeable.RoyaltyData[]",
                    "name": "royalties",
                    "type": "tuple[]"
                }
            ],
            "name": "TokenMintRoyaltiesUpdated",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "uint256",
                    "name": "tokenId",
                    "type": "uint256"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "owner",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "renter",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "startTime",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "endTime",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "rentalPrice",
                    "type": "uint256"
                }
            ],
            "name": "TokenRented",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "uint256",
                    "name": "tokenId",
                    "type": "uint256"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "from",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "to",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "salePrice",
                    "type": "uint256"
                }
            ],
            "name": "TokenSold",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "uint256",
                    "name": "tokenId",
                    "type": "uint256"
                },
                {
                    "components": [
                        {
                            "internalType": "address",
                            "name": "receiver",
                            "type": "address"
                        },
                        {
                            "internalType": "uint96",
                            "name": "feeNumerator",
                            "type": "uint96"
                        }
                    ],
                    "indexed": false,
                    "internalType": "struct KAMI721CUpgradeable.RoyaltyData[]",
                    "name": "royalties",
                    "type": "tuple[]"
                }
            ],
            "name": "TokenTransferRoyaltiesUpdated",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "from",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "to",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "uint256",
                    "name": "tokenId",
                    "type": "uint256"
                }
            ],
            "name": "Transfer",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "components": [
                        {
                            "internalType": "address",
                            "name": "receiver",
                            "type": "address"
                        },
                        {
                            "internalType": "uint96",
                            "name": "feeNumerator",
                            "type": "uint96"
                        }
                    ],
                    "indexed": false,
                    "internalType": "struct KAMI721CUpgradeable.RoyaltyData[]",
                    "name": "royalties",
                    "type": "tuple[]"
                }
            ],
            "name": "TransferRoyaltiesUpdated",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "uint256",
                    "name": "tokenId",
                    "type": "uint256"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "receiver",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "amount",
                    "type": "uint256"
                }
            ],
            "name": "TransferRoyaltyDistributed",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": false,
                    "internalType": "address",
                    "name": "account",
                    "type": "address"
                }
            ],
            "name": "Unpaused",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "implementation",
                    "type": "address"
                }
            ],
            "name": "Upgraded",
            "type": "event"
        },
        {
            "inputs": [],
            "name": "DEFAULT_ADMIN_ROLE",
            "outputs": [
                {
                    "internalType": "bytes32",
                    "name": "",
                    "type": "bytes32"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "OWNER_ROLE",
            "outputs": [
                {
                    "internalType": "bytes32",
                    "name": "",
                    "type": "bytes32"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "PLATFORM_ROLE",
            "outputs": [
                {
                    "internalType": "bytes32",
                    "name": "",
                    "type": "bytes32"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "RENTER_ROLE",
            "outputs": [
                {
                    "internalType": "bytes32",
                    "name": "",
                    "type": "bytes32"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "UPGRADER_ROLE",
            "outputs": [
                {
                    "internalType": "bytes32",
                    "name": "",
                    "type": "bytes32"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "to",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "tokenId",
                    "type": "uint256"
                }
            ],
            "name": "approve",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "owner",
                    "type": "address"
                }
            ],
            "name": "balanceOf",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "tokenId",
                    "type": "uint256"
                }
            ],
            "name": "burn",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "tokenId",
                    "type": "uint256"
                }
            ],
            "name": "endRental",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "tokenId",
                    "type": "uint256"
                },
                {
                    "internalType": "uint256",
                    "name": "additionalDuration",
                    "type": "uint256"
                },
                {
                    "internalType": "uint256",
                    "name": "additionalPayment",
                    "type": "uint256"
                }
            ],
            "name": "extendRental",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "tokenId",
                    "type": "uint256"
                }
            ],
            "name": "getApproved",
            "outputs": [
                {
                    "internalType": "address",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "tokenId",
                    "type": "uint256"
                }
            ],
            "name": "getMintRoyaltyReceivers",
            "outputs": [
                {
                    "components": [
                        {
                            "internalType": "address",
                            "name": "receiver",
                            "type": "address"
                        },
                        {
                            "internalType": "uint96",
                            "name": "feeNumerator",
                            "type": "uint96"
                        }
                    ],
                    "internalType": "struct KAMI721CUpgradeable.RoyaltyData[]",
                    "name": "",
                    "type": "tuple[]"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "tokenId",
                    "type": "uint256"
                }
            ],
            "name": "getRentalInfo",
            "outputs": [
                {
                    "internalType": "address",
                    "name": "renter",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "startTime",
                    "type": "uint256"
                },
                {
                    "internalType": "uint256",
                    "name": "endTime",
                    "type": "uint256"
                },
                {
                    "internalType": "uint256",
                    "name": "rentalPrice",
                    "type": "uint256"
                },
                {
                    "internalType": "bool",
                    "name": "active",
                    "type": "bool"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "bytes32",
                    "name": "role",
                    "type": "bytes32"
                }
            ],
            "name": "getRoleAdmin",
            "outputs": [
                {
                    "internalType": "bytes32",
                    "name": "",
                    "type": "bytes32"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "tokenId",
                    "type": "uint256"
                }
            ],
            "name": "getTransferRoyaltyReceivers",
            "outputs": [
                {
                    "components": [
                        {
                            "internalType": "address",
                            "name": "receiver",
                            "type": "address"
                        },
                        {
                            "internalType": "uint96",
                            "name": "feeNumerator",
                            "type": "uint96"
                        }
                    ],
                    "internalType": "struct KAMI721CUpgradeable.RoyaltyData[]",
                    "name": "",
                    "type": "tuple[]"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "bytes32",
                    "name": "role",
                    "type": "bytes32"
                },
                {
                    "internalType": "address",
                    "name": "account",
                    "type": "address"
                }
            ],
            "name": "grantRole",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "user",
                    "type": "address"
                }
            ],
            "name": "hasActiveRentals",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "bytes32",
                    "name": "role",
                    "type": "bytes32"
                },
                {
                    "internalType": "address",
                    "name": "account",
                    "type": "address"
                }
            ],
            "name": "hasRole",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "usdcAddress_",
                    "type": "address"
                },
                {
                    "internalType": "string",
                    "name": "name_",
                    "type": "string"
                },
                {
                    "internalType": "string",
                    "name": "symbol_",
                    "type": "string"
                },
                {
                    "internalType": "string",
                    "name": "baseTokenURI_",
                    "type": "string"
                },
                {
                    "internalType": "uint256",
                    "name": "initialMintPrice_",
                    "type": "uint256"
                },
                {
                    "internalType": "address",
                    "name": "platformAddress_",
                    "type": "address"
                },
                {
                    "internalType": "uint96",
                    "name": "platformCommissionPercentage_",
                    "type": "uint96"
                }
            ],
            "name": "initialize",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "owner",
                    "type": "address"
                },
                {
                    "internalType": "address",
                    "name": "operator",
                    "type": "address"
                }
            ],
            "name": "isApprovedForAll",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "tokenId",
                    "type": "uint256"
                }
            ],
            "name": "isRented",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "mint",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "mintPrice",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "name",
            "outputs": [
                {
                    "internalType": "string",
                    "name": "",
                    "type": "string"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "tokenId",
                    "type": "uint256"
                }
            ],
            "name": "ownerOf",
            "outputs": [
                {
                    "internalType": "address",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "pause",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "paused",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "platformAddress",
            "outputs": [
                {
                    "internalType": "address",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "platformCommissionPercentage",
            "outputs": [
                {
                    "internalType": "uint96",
                    "name": "",
                    "type": "uint96"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "proxiableUUID",
            "outputs": [
                {
                    "internalType": "bytes32",
                    "name": "",
                    "type": "bytes32"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "bytes32",
                    "name": "role",
                    "type": "bytes32"
                },
                {
                    "internalType": "address",
                    "name": "account",
                    "type": "address"
                }
            ],
            "name": "renounceRole",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "tokenId",
                    "type": "uint256"
                },
                {
                    "internalType": "uint256",
                    "name": "duration",
                    "type": "uint256"
                },
                {
                    "internalType": "uint256",
                    "name": "rentalPrice",
                    "type": "uint256"
                }
            ],
            "name": "rentToken",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "bytes32",
                    "name": "role",
                    "type": "bytes32"
                },
                {
                    "internalType": "address",
                    "name": "account",
                    "type": "address"
                }
            ],
            "name": "revokeRole",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "tokenId",
                    "type": "uint256"
                },
                {
                    "internalType": "uint256",
                    "name": "salePrice",
                    "type": "uint256"
                }
            ],
            "name": "royaltyInfo",
            "outputs": [
                {
                    "internalType": "address",
                    "name": "receiver",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "royaltyAmount",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "royaltyPercentage",
            "outputs": [
                {
                    "internalType": "uint96",
                    "name": "",
                    "type": "uint96"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "from",
                    "type": "address"
                },
                {
                    "internalType": "address",
                    "name": "to",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "tokenId",
                    "type": "uint256"
                }
            ],
            "name": "safeTransferFrom",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "from",
                    "type": "address"
                },
                {
                    "internalType": "address",
                    "name": "to",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "tokenId",
                    "type": "uint256"
                },
                {
                    "internalType": "bytes",
                    "name": "data",
                    "type": "bytes"
                }
            ],
            "name": "safeTransferFrom",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "to",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "tokenId",
                    "type": "uint256"
                },
                {
                    "internalType": "uint256",
                    "name": "salePrice",
                    "type": "uint256"
                }
            ],
            "name": "sellToken",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "operator",
                    "type": "address"
                },
                {
                    "internalType": "bool",
                    "name": "approved",
                    "type": "bool"
                }
            ],
            "name": "setApprovalForAll",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "string",
                    "name": "baseURI",
                    "type": "string"
                }
            ],
            "name": "setBaseURI",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "newMintPrice",
                    "type": "uint256"
                }
            ],
            "name": "setMintPrice",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "components": [
                        {
                            "internalType": "address",
                            "name": "receiver",
                            "type": "address"
                        },
                        {
                            "internalType": "uint96",
                            "name": "feeNumerator",
                            "type": "uint96"
                        }
                    ],
                    "internalType": "struct KAMI721CUpgradeable.RoyaltyData[]",
                    "name": "royalties",
                    "type": "tuple[]"
                }
            ],
            "name": "setMintRoyalties",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint96",
                    "name": "newPlatformCommissionPercentage",
                    "type": "uint96"
                },
                {
                    "internalType": "address",
                    "name": "newPlatformAddress",
                    "type": "address"
                }
            ],
            "name": "setPlatformCommission",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint96",
                    "name": "newRoyaltyPercentage",
                    "type": "uint96"
                }
            ],
            "name": "setRoyaltyPercentage",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "tokenId",
                    "type": "uint256"
                },
                {
                    "components": [
                        {
                            "internalType": "address",
                            "name": "receiver",
                            "type": "address"
                        },
                        {
                            "internalType": "uint96",
                            "name": "feeNumerator",
                            "type": "uint96"
                        }
                    ],
                    "internalType": "struct KAMI721CUpgradeable.RoyaltyData[]",
                    "name": "royalties",
                    "type": "tuple[]"
                }
            ],
            "name": "setTokenMintRoyalties",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "tokenId",
                    "type": "uint256"
                },
                {
                    "components": [
                        {
                            "internalType": "address",
                            "name": "receiver",
                            "type": "address"
                        },
                        {
                            "internalType": "uint96",
                            "name": "feeNumerator",
                            "type": "uint96"
                        }
                    ],
                    "internalType": "struct KAMI721CUpgradeable.RoyaltyData[]",
                    "name": "royalties",
                    "type": "tuple[]"
                }
            ],
            "name": "setTokenTransferRoyalties",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "components": [
                        {
                            "internalType": "address",
                            "name": "receiver",
                            "type": "address"
                        },
                        {
                            "internalType": "uint96",
                            "name": "feeNumerator",
                            "type": "uint96"
                        }
                    ],
                    "internalType": "struct KAMI721CUpgradeable.RoyaltyData[]",
                    "name": "royalties",
                    "type": "tuple[]"
                }
            ],
            "name": "setTransferRoyalties",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "bytes4",
                    "name": "interfaceId",
                    "type": "bytes4"
                }
            ],
            "name": "supportsInterface",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "symbol",
            "outputs": [
                {
                    "internalType": "string",
                    "name": "",
                    "type": "string"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "index",
                    "type": "uint256"
                }
            ],
            "name": "tokenByIndex",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "owner",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "index",
                    "type": "uint256"
                }
            ],
            "name": "tokenOfOwnerByIndex",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "tokenId",
                    "type": "uint256"
                }
            ],
            "name": "tokenURI",
            "outputs": [
                {
                    "internalType": "string",
                    "name": "",
                    "type": "string"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "totalSupply",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "from",
                    "type": "address"
                },
                {
                    "internalType": "address",
                    "name": "to",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "tokenId",
                    "type": "uint256"
                }
            ],
            "name": "transferFrom",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "unpause",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "newImplementation",
                    "type": "address"
                }
            ],
            "name": "upgradeTo",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "newImplementation",
                    "type": "address"
                },
                {
                    "internalType": "bytes",
                    "name": "data",
                    "type": "bytes"
                }
            ],
            "name": "upgradeToAndCall",
            "outputs": [],
            "stateMutability": "payable",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "usdcToken",
            "outputs": [
                {
                    "internalType": "contract IERC20",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        }
    ],
    "bytecode": "0x60a08060405234620000e157306080526000549060ff8260081c166200008f575060ff8082160362000053575b604051615c429081620000e782396080518181816120af015281816121bc0152612b360152f35b60ff90811916176000557f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498602060405160ff8152a1386200002c565b62461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b6064820152608490fd5b600080fdfe608080604052600436101561001357600080fd5b60003560e01c90816301ffc9a714613a2c5750806306fdde0314613990578063081812fc14613972578063095ea7b3146137f85780630a0a3515146136d45780630daf4c97146136a757806311eac8551461367d5780631249c58b1461338d57806318160ddd1461336f5780631c2098dc14612fcf57806323b872dd14612fab578063248a9ca314612f7c57806327dc3fbd14612eef5780632a55205a14612eb35780632f2ff15d14612e125780632f745c5914612d6057806336568abe14612cce5780633659cfe614612b115780633e11741f146127f75780633f4ba83a1461274157806342842e0e1461272a57806342966c68146125dc578063463dace0146125bd578063492ae5a3146124015780634f1ef2861461217e5780634f6ccce71461216057806352d1902d1461209c57806355f804b314611f1b5780635c975abb14611ef75780635e27a77514611ecc578063602481b614611c125780636352211e14611be25780636817c76c14611bc357806370824c5c14611b8857806370a0823114611b5d5780638456cb5914611aa85780638a71bb2d14611a8057806391d1485414611a3357806392303e0614611a0b57806395d89b411461194e57806397491d6f1461180a5780639f6d68b014611731578063a217fddf14611715578063a22cb4651461163a578063aa15d40f14611605578063b88d4fde14611591578063b97c9f7714611556578063c87b56dd14611291578063c8a9aabc14611000578063d547741f14610fbf578063dbe55e5614610f9d578063de6fb96c14610797578063e58378bb1461076e578063e5f2e0cc1461050b578063e985e9c5146104b5578063f249fd1614610320578063f4a0a528146102dd5763f72c0d8b1461029d57600080fd5b346102d85760003660031901126102d85760206040517f189ab7a9244df0848122154315af71fe140f3db0fe014031783b0946b8c9d2e38152f35b600080fd5b346102d85760203660031901126102d857336000908152600080516020615b8d83398151915260205260409020546103179060ff16613e07565b6004356101c455005b346102d85760403660031901126102d8577f410d007abb80c65964518a8b4f3007c4b354d36d7cfb908d3e3fa6411506e274604061035c613d79565b610364613b4b565b90600080516020615b4d8339815191526000526020606581528360002033600052815261039760ff856000205416613e07565b6001600160a01b038316916001600160601b03906103b684151561475f565b16926103c66107d08511156147ab565b6101c690815460601c916001600160601b03198260601b16861790558382036103f7575b50508351928352820152a1005b610443917f797343f8d6a29aafeb3aaf0910a8973e0081c60c2f6c1f775cd9f76ea348fc1e9081600052606585528760002081600052855260ff88600020541661044a575b50506148a6565b85806103ea565b81600052606585528760002081600052855260ff8860002054161561043c578160005260658552876000208160005285528760002060ff19815416905533917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b600080a4878061043c565b346102d85760403660031901126102d8576104ce613b35565b6104d6613b4b565b9060018060a01b03809116600052609c60205260406000209116600052602052602060ff604060002054166040519015158152f35b346102d85761051936613b91565b336000908152600080516020615b8d8339815191526020908152604090912054909392906105499060ff16613e07565b60008381526099602052604090205461056c906001600160a01b03161515613e4c565b826000526101cb8085526105836040600020613eb8565b6000906000905b8482106106fc575050612710906105ac826001600160601b03809316146145d0565b831580156105ed575b857fcacd6190ee2ad101cd34b99d8fbaf3cdcda816ef83aaa4759f111ba1c416e62086866105e86040519283928361405b565b0390a2005b6106e6576105fa83613f00565b916106148261060a898701613f53565b1691821115614f2c565b6001600160a01b039283169283156106a1579061069893929160fc7fcacd6190ee2ad101cd34b99d8fbaf3cdcda816ef83aaa4759f111ba1c416e62098996040519561065f87613c8a565b865280860193845260008b815291905260409020935191516001600160a01b039190921616911660a01b6001600160a01b031916179055565b839285806105b5565b60405162461bcd60e51b815260048101899052601b60248201527f455243323938313a20496e76616c696420706172616d657465727300000000006044820152606490fd5b634e487b7160e01b600052603260045260246000fd5b90916001906107469061072b6001600160a01b0361072361071e888b8b613ef0565b613f00565b161515613f14565b6107408961073a878a8a613ef0565b01613f53565b90613f67565b92866000528288526107676040600020610761838989613ef0565b90613fb9565b019061058a565b346102d85760003660031901126102d8576020604051600080516020615b4d8339815191528152f35b346102d85760e03660031901126102d8576107b0613b35565b6024356001600160401b0381116102d8576107cf903690600401613d32565b6044356001600160401b0381116102d8576107ee903690600401613d32565b6064356001600160401b0381116102d85761080d903690600401613d32565b9260a4356001600160a01b03811690036102d85760c435916001600160601b03831683036102d8576000549360ff8560081c161594858096610f90575b8015610f79575b15610f1d5760ff19811660011760005585610f0b575b506001600160a01b03831615610ecf5761088d60a4356001600160a01b0316151561475f565b6108a46107d06001600160601b03861611156147ab565b6108be60ff60005460081c166108b981614ffe565b614ffe565b8051906001600160401b038211610ccb5781906108dc609754613d8f565b601f8111610e5b575b50602090601f8311600114610de357600092610dd8575b50508160011b916000199060031b1c1916176097555b8051906001600160401b038211610ccb578190610930609854613d8f565b601f8111610d64575b50602090601f8311600114610cec57600092610ce1575b50508160011b916000199060031b1c1916176098555b6109af60ff60005460081c1661097b81614ffe565b61098481614ffe565b61098d81614ffe565b61099681614ffe565b61099f81614ffe565b61012d805460ff19169055614ffe565b6101c780546001600160a01b0319166001600160a01b0390921691909117905582516001600160401b038111610ccb576101c5906109ed8254613d8f565b601f8111610c79575b50602094601f8211600114610c0957948192939495600092610bfe575b50508160011b916000199060031b1c19161790555b6084356101c4556001600160601b03801991168160a43560601b16176101c6556103e86101cc918254161790556000805260658060205260406000203360005260205260ff6040600020541615610bbf575b600080516020615b4d833981519152806000528160205260406000203360005260205260ff6040600020541615610b7e575b50610ab860a4356148a6565b7f189ab7a9244df0848122154315af71fe140f3db0fe014031783b0946b8c9d2e390816000528060205260406000203360005260205260ff6040600020541615610b3d575b5050610b0557005b61ff0019600054166000557f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498602060405160018152a1005b816000526020526040600020336000526020526040600020600160ff1982541617905533903390600080516020615b2d833981519152600080a48180610afd565b80600052816020526040600020336000526020526040600020600160ff1982541617905533903390600080516020615b2d833981519152600080a482610aac565b60008052806020526040600020336000526020526040600020600160ff1982541617905533336000600080516020615b2d8339815191528180a4610a7a565b015190508580610a13565b601f1982169583600052600080516020615bcd8339815191529160005b888110610c6157508360019596979810610c48575b505050811b019055610a28565b015160001960f88460031b161c19169055858080610c3b565b91926020600181928685015181550194019201610c26565b82600052600080516020615bcd833981519152601f830160051c81019160208410610cc1575b601f0160051c01905b818110610cb557506109f6565b60008155600101610ca8565b9091508190610c9f565b634e487b7160e01b600052604160045260246000fd5b015190508680610950565b92506098600052600080516020615bed833981519152906000935b601f1984168510610d49576001945083601f19811610610d30575b505050811b01609855610966565b015160001960f88460031b161c19169055868080610d22565b81810151835560209485019460019093019290910190610d07565b9091506098600052601f830160051c600080516020615bed8339815191520160208410610dc3575b908392915b601f820160051c600080516020615bed833981519152018110610db45750610939565b60008155849350600101610d91565b50600080516020615bed833981519152610d8c565b0151905087806108fc565b92506097600052600080516020615b6d833981519152906000935b601f1984168510610e40576001945083601f19811610610e27575b505050811b01609755610912565b015160001960f88460031b161c19169055878080610e19565b81810151835560209485019460019093019290910190610dfe565b9091506097600052601f830160051c600080516020615b6d8339815191520160208410610eba575b908392915b601f820160051c600080516020615b6d833981519152018110610eab57506108e5565b60008155849350600101610e88565b50600080516020615b6d833981519152610e83565b60405162461bcd60e51b8152602060048201526014602482015273496e76616c69642055534443206164647265737360601b6044820152606490fd5b61ffff19166101011760005586610867565b60405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608490fd5b50303b1580156108515750600160ff821614610851565b50600160ff82161061084a565b346102d85760003660031901126102d85760206101c65460601c604051908152f35b346102d85760403660031901126102d857610ffe600435610fde613b4b565b90806000526065602052610ff9600160406000200154614d42565b614efb565b005b346102d85761100e36613bc4565b600083815260996020526040902054919291611034906001600160a01b03161515613e4c565b816000526101cd9060209382855261105660ff6004604060002001541661471d565b80156112395781156111e25761106b84614683565b600085815284875260409020546001600160a01b0391908216330361119d57906110df916101c6916127106110aa6001600160601b0385541688613e8f565b04926110b6848861422b565b93896101c7926110cd8a8686541630903390614823565b8c83611153575b50505050541661486a565b836000528285526110f96002604060002001918254614259565b9055826000528184526111156003604060002001918254614259565b90558160005282527f43ed7a287a535d13f2389230befff1329b7724a3890189bb8727976119e6c6c3600260406000200154926040519384523393a3005b7f2a0edbc96cbdf959b1243e79c51b9bb83b7867279441dc220825d561c2fbb2c6916111888588885416835460601c9061486a565b5460601c93604051908152a38a89818c6110d4565b60405162461bcd60e51b815260048101889052601d60248201527f4f6e6c792072656e7465722063616e20657874656e642072656e74616c0000006044820152606490fd5b60405162461bcd60e51b815260048101869052602960248201527f4164646974696f6e616c207061796d656e74206d75737420626520677265617460448201526806572207468616e20360bc1b6064820152608490fd5b60405162461bcd60e51b815260048101869052602a60248201527f4164646974696f6e616c206475726174696f6e206d75737420626520677265616044820152690746572207468616e20360b41b6064820152608490fd5b346102d8576020806003193601126102d8576004356000818152609960205260409020546112c9906001600160a01b03161515614637565b8160405160006101c5805491836112df84613d8f565b9182825286820193600195886001821691826000146115385750506001146114ec575b5061130f92500384613cf6565b8251156114d157600094807a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000081818110156114c3575b50506d04ee2d6d415b85acef8100000000808310156114b5575b50662386f26fc10000808310156114a6575b506305f5e10080831015611497575b5061271080831015611488575b506064821015611478575b600a8092101561146e575b9260018701938160216113c96113b388613d17565b976113c1604051998a613cf6565b808952613d17565b878a019a90601f1901368c37870101905b611438575b505050509361141e9392916114126114039660405197889551809288880190613aed565b84019151809386840190613aed565b01038084520182613cf6565b905b611434604051928284938452830190613b10565b0390f35b600019019083906f181899199a1a9b1b9c1cb0b131b232b360811b8282061a835304918215611469579190826113da565b6113df565b956001019561139e565b9590606460029104910195611393565b60049197920491019588611388565b6008919792049101958861137b565b6010919792049101958861136c565b86919792049101958861135a565b604098500491508880611340565b50505050506040516114e281613ca5565b6000815290611420565b9150506000528385600080516020615bcd833981519152856000915b85831061151f57505061130f935082010189611302565b80919294505483858a0101520191018690858793611508565b60ff1916875261130f95151560051b85010192508b91506113029050565b346102d85760003660031901126102d85760206040517f3b652633b3026fa70803ad50b58b0ae884cefe3497643f62c67c466f41a6e88d8152f35b346102d85760803660031901126102d8576115aa613b35565b6115b2613b4b565b90606435906044356001600160401b0383116102d857610ffe936115dd611600943690600401613d32565b926115f06115eb8433614945565b614266565b6115fb838383614a0d565b6158be565b614fde565b346102d85760203660031901126102d8576004356000526101cd602052602060ff600460406000200154166040519015158152f35b346102d85760403660031901126102d857611653613b35565b60243590811515908183036102d8576001600160a01b0316913383146116d0576116a29033600052609c60205260406000208460005260205260406000209060ff801983541691151516179055565b6040519081527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3160203392a3005b60405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606490fd5b346102d85760003660031901126102d857602060405160008152f35b346102d85760203660031901126102d8576001600160601b03611752613d79565b336000908152600080516020615b8d833981519152602052604090205461177b9060ff16613e07565b16610bb881116117c55760207f8df4d6c1a5c8e6c4d7a71d760d42122503a5244aeab98f2ff8e3244be07a44e3916101cc816001600160601b0319825416179055604051908152a1005b60405162461bcd60e51b815260206004820152601b60248201527f526f79616c74792070657263656e7461676520746f6f206869676800000000006044820152606490fd5b346102d85760203660031901126102d857600435600081815260996020526040902054611841906001600160a01b03161515613e4c565b806000526101cd8060205261186060ff6004604060002001541661471d565b61186982614683565b6001600160a01b0392908316913383148015611936575b156118e557816000526020526004604060002093845416930160ff1981541690556118aa836140c8565b156118d7575b7fdfd6ab3fc2a0e563c3389917592f1a850824730b5f05f16be9363c4adfc268da600080a4005b6118e083614e4e565b6118b0565b60405162461bcd60e51b815260206004820152602360248201527f4f6e6c79206f776e6572206f722072656e7465722063616e20656e642072656e6044820152621d185b60ea1b6064820152608490fd5b50816000528060205283604060002054163314611880565b346102d85760003660031901126102d85760405160985460008261197183613d8f565b91828252602093600190856001821691826000146119eb5750506001146119a0575b5061142092500383613cf6565b8491506098600052600080516020615bed833981519152906000915b8583106119d3575050611420935082010185611993565b805483890185015287945086939092019181016119bc565b60ff19168582015261142095151560051b85010192508791506119939050565b346102d85760003660031901126102d85760206001600160601b036101c65416604051908152f35b346102d85760403660031901126102d857611a4c613b4b565b600435600052606560205260406000209060018060a01b0316600052602052602060ff604060002054166040519015158152f35b346102d85760003660031901126102d85760206001600160601b036101cc5416604051908152f35b346102d85760003660031901126102d857336000908152600080516020615b8d8339815191526020526040902054611ae29060ff16613e07565b61012d805460ff8116611b255760019060ff19161790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586020604051338152a1005b60405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606490fd5b346102d85760203660031901126102d8576020611b80611b7b613b35565b6146a6565b604051908152f35b346102d85760003660031901126102d85760206040517f797343f8d6a29aafeb3aaf0910a8973e0081c60c2f6c1f775cd9f76ea348fc1e8152f35b346102d85760003660031901126102d85760206101c454604051908152f35b346102d85760203660031901126102d8576020611c00600435614683565b6040516001600160a01b039091168152f35b346102d8576020806003193601126102d8576004356001600160401b0381116102d857611c43903690600401613b61565b90600080516020615b4d833981519152600052606583526040600020336000528352611c7660ff60406000205416613e07565b6101c980546000825580611e89575b506000906000905b848210611db657505061271090611caf826001600160601b03809316146145d0565b83158015611cee575b6040517fbb8446bab3f849e18e51a7f88d964208275772e34ae7283ced4d1850f2a6248b9080611ce988888361405b565b0390a1005b6106e657611cfb83613f00565b611d15611d09878601613f53565b92831693841115614f2c565b6001600160a01b0316918215611d71577fbb8446bab3f849e18e51a7f88d964208275772e34ae7283ced4d1850f2a6248b95604051611d5381613c8a565b848152015260a01b6001600160a01b0319161760fb55838080611cb8565b60405162461bcd60e51b815260048101879052601960248201527f455243323938313a20696e76616c6964207265636569766572000000000000006044820152606490fd5b90916001600160a01b0390611de690611dd78361072361071e888b8b613ef0565b6107408861073a878a8a613ef0565b92611df2818787613ef0565b91835490600160401b821015610ccb57600182018086558210156106e657611e6289600195611e8294886000527fa20b44b81eb5c5fe363282f9a42eaebac35ff0415b44cd916e200df009a3ec7a0193611e4b82613f00565b85546001600160a01b031916911617845501613f53565b81546001600160a01b031660a09190911b6001600160a01b031916179055565b0190611c8d565b816000527fa20b44b81eb5c5fe363282f9a42eaebac35ff0415b44cd916e200df009a3ec7a908101905b818110611ec05750611c85565b60008155600101611eb3565b346102d85760203660031901126102d857611434611eeb600435614539565b60405191829182613c13565b346102d85760003660031901126102d857602060ff61012d54166040519015158152f35b346102d8576020806003193601126102d8576001600160401b03906004358281116102d857611f4e903690600401613d32565b91600080516020615b4d833981519152600052606582526040600020336000528252611f8160ff60406000205416613e07565b8251908111610ccb576101c591611f988354613d8f565b601f811161204b575b5080601f8311600114611fdd5750819293600092611fd2575b5050600019600383901b1c191660019190911b179055005b015190508380611fba565b90601f1983169484600052600080516020615bcd833981519152926000905b87821061203357505083600195961061201a575b505050811b019055005b015160001960f88460031b161c19169055838080612010565b80600185968294968601518155019501930190611ffc565b83600052600080516020615bcd833981519152601f840160051c810191838510612092575b601f0160051c01905b8181106120865750611fa1565b60008155600101612079565b9091508190612070565b346102d85760003660031901126102d8577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031630036120f5576020604051600080516020615bad8339815191528152f35b60405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152608490fd5b346102d85760203660031901126102d8576020611b806004356144c2565b60403660031901126102d857612192613b35565b6024356001600160401b0381116102d8576121b1903690600401613d32565b906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116906121ea3083141561439f565b612207600080516020615bad833981519152928284541614614400565b61220f614b26565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1615612245575050610ffe9150615714565b6040516352d1902d60e01b81526020939291831691908481600481865afa600091816123d2575b506122cd5760405162461bcd60e51b815260048101869052602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608490fd5b0361237b576122db82615714565b7fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2825115801590612373575b61231157005b600080610ffe946040519461232586613cc0565b602786527f416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c81870152660819985a5b195960ca1b604087015281519101845af461236d6157a4565b91615a93565b50600161230b565b60405162461bcd60e51b815260048101849052602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608490fd5b9091508581813d83116123fa575b6123ea8183613cf6565b810103126102d85751908761226c565b503d6123e0565b346102d8576020806003193601126102d8576004356001600160401b0381116102d857612432903690600401613b61565b336000908152600080516020615b8d833981519152602052604090205490919061245e9060ff16613e07565b6101c8928354600085558061257a575b50926000936000905b8482106124d8575050506124c96127107f89bf541e521f4acc4850978648c2c61d31963c71ae31181f246302f902941d70946124c16001600160601b0391826101c6541690613f67565b161115613ffb565b611ce96040519283928361405b565b91949091906001600160a01b039061250b906124fc8361072361071e888b8b613ef0565b6107408461073a878a8a613ef0565b92612517818787613ef0565b91875490600160401b821015610ccb5760018201808a558210156106e657611e6285600195612570948c6000527f8cdee82cb3ac6d59f1f417405a3eecf497b31f3d06d4c506f96deb67789f61e90193611e4b82613f00565b0190949194612477565b846000527f8cdee82cb3ac6d59f1f417405a3eecf497b31f3d06d4c506f96deb67789f61e9908101905b8181106125b1575061246e565b600081556001016125a4565b346102d85760203660031901126102d857611434611eeb600435614487565b346102d8576020806003193601126102d857600435906125fb82614683565b6001600160a01b039033908216036126f357826000526101cd825260ff600460406000200154166126ae579060009161263c8461263781614683565b615154565b609961264785614683565b91858552609b845260408520926001600160601b0360a01b938481541690551692838552609a8152604085208519815401905585855252604083209081541690557fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8280a4005b60405162461bcd60e51b815260048101839052601a60248201527f43616e6e6f74206275726e20612072656e74656420746f6b656e0000000000006044820152606490fd5b60405162461bcd60e51b815260048101839052600f60248201526e2737ba103a37b5b2b71037bbb732b960891b6044820152606490fd5b346102d857610ffe61273b36613bde565b91614461565b346102d85760003660031901126102d857336000908152600080516020615b8d833981519152602052604090205461277b9060ff16613e07565b61012d805460ff8116156127bb5760ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6020604051338152a1005b60405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606490fd5b346102d85760603660031901126102d857612810613b35565b61281b602435614683565b6001600160a01b0381163303612acc576024356000526101cd60205260ff60046040600020015416612a87576127106128626001600160601b036101cc5416604435613e8f565b049161271061287f6001600160601b036101c65416604435613e8f565b0461289561288d8286614259565b60443561422b565b906128b160018060a01b036101c7541660443590853091614823565b84612986575b6128d9929394508061292a575b506101c75484906001600160a01b031661486a565b6128e66024358284614461565b60405160443581526001600160a01b039182169290911690602435907f3d5eb834b5d6cadc063c171c3f25f60bca8ea892ba9db25342278927d0af955690602090a4005b6101c7546101c65461294a91839160601c906001600160a01b031661486a565b6101c65460601c906040519081527f2a0edbc96cbdf959b1243e79c51b9bb83b7867279441dc220825d561c2fbb2c6602060243592a3846128c4565b60243560009081526101cb60205260409020805415612a7b576129a8906142c8565b80516129b5575b506128b7565b9290939160005b8451811015612a6a57806127106129ec6001600160601b0360206129e26001968b614245565b510151168a613e8f565b04806129fa575b50016129bc565b612a2281848060a01b036101c75416858060a01b03612a19868c614245565b5151169061486a565b828060a01b03612a328389614245565b515116906040519081527f5afae38153b1f3a22beefc75f2c88831b35f5359c45067c73310b55352c6c225602060243592a3886129f3565b5091945084939092506128d96129af565b506129a86101c96142c8565b60405162461bcd60e51b815260206004820152601960248201527f546f6b656e2069732063757272656e746c792072656e746564000000000000006044820152606490fd5b60405162461bcd60e51b815260206004820152601960248201527f4f6e6c7920746f6b656e206f776e65722063616e2073656c6c000000000000006044820152606490fd5b346102d8576020806003193601126102d857612b2b613b35565b6001600160a01b03917f00000000000000000000000000000000000000000000000000000000000000008316612b633082141561439f565b612b80600080516020615bad833981519152918583541614614400565b612b88614b26565b60405193612b9585613ca5565b600085527f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1615612bd057505050610ffe9150615714565b83929316906040516352d1902d60e01b81528481600481865afa60009181612c9f575b50612c545760405162461bcd60e51b815260048101869052602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608490fd5b0361237b57612c6282615714565b7fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2825115801590612c975761231157005b50600061230b565b9091508581813d8311612cc7575b612cb78183613cf6565b810103126102d857519087612bf3565b503d612cad565b346102d85760403660031901126102d857612ce7613b4b565b336001600160a01b03821603612d0357610ffe90600435614efb565b60405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608490fd5b346102d85760403660031901126102d857612d79613b35565b60243590612d86816146a6565b821015612db95760018060a01b031660005260c96020526040600020906000526020526020604060002054604051908152f35b60405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608490fd5b346102d85760403660031901126102d857600435612e2e613b4b565b816000526065602052612e48600160406000200154614d42565b81600052606560205260406000209060018060a01b0316908160005260205260ff6040600020541615612e7757005b8160005260656020526040600020816000526020526040600020600160ff198254161790553391600080516020615b2d833981519152600080a4005b346102d85760403660031901126102d857612ed2602435600435614311565b604080516001600160a01b03939093168352602083019190915290f35b346102d85760203660031901126102d8576004356000526101cd60205260a06040600020608060405191612f2283613c6f565b600180851b0381541692838152600182015480602083015260028301549182604082015260ff6004600386015495866060850152015416151594859101526040519485526020850152604084015260608301526080820152f35b346102d85760203660031901126102d85760043560005260656020526020600160406000200154604051908152f35b346102d857610ffe612fbc36613bde565b91612fca6115eb8433614945565b614a0d565b346102d857612fdd36613bc4565b60008381526099602052604090205491929091613004906001600160a01b03161515613e4c565b806000526101cd9160209383855260ff6004604060002001541661332a5780156132d65781156132855761303783614683565b6001600160a01b03808216959091338714613236579160048861312b936130ac61317597966101c690868b8d61271061307a6001600160601b0387541684613e8f565b0490613086828461422b565b9561309b6101c7948686541630903390614823565b89836131ec5750505050541661486a565b6130b68642614259565b604051946130c386613c6f565b338652838601904282526040870192835260608701938b85526080880195600187528d6000525260406000209651166001600160601b0360a01b87541617865551600186015551600285015551600384015551151591019060ff801983541691151516179055565b7f3b652633b3026fa70803ad50b58b0ae884cefe3497643f62c67c466f41a6e88d8060005260658752604060002033600052875260ff60406000205416156131ac575b5042614259565b6040519442865285015260408401527f61619ae64b505b7a930ddc60df40a5c2746b1778b429ddb19ff5236f28ba83b160603394a4005b806000526065875260406000203360005287526040600020600160ff1982541617905533903390600080516020615b2d833981519152600080a48661316e565b7f2a0edbc96cbdf959b1243e79c51b9bb83b7867279441dc220825d561c2fbb2c6916132218588885416835460601c9061486a565b5460601c93604051908152a3388e81896110d4565b60405162461bcd60e51b815260048101899052602160248201527f4f776e65722063616e6e6f742072656e74207468656972206f776e20746f6b656044820152603760f91b6064820152608490fd5b60405162461bcd60e51b815260048101869052602360248201527f52656e74616c207072696365206d75737420626520677265617465722074686160448201526206e20360ec1b6064820152608490fd5b60405162461bcd60e51b815260048101869052602660248201527f52656e74616c206475726174696f6e206d75737420626520677265617465722060448201526507468616e20360d41b6064820152608490fd5b60405162461bcd60e51b815260048101869052601760248201527f546f6b656e20697320616c72656164792072656e7465640000000000000000006044820152606490fd5b346102d85760003660031901126102d857602060cb54604051908152f35b346102d85760003660031901126102d8576101c4546127106001600160601b036101c691806133bf8385541686613e8f565b046133c861417c565b916133d3828761422b565b60018060a01b03926133ef6101c798858a541630903390614823565b80613664575b5060009184516135e8575b5061340d9293945061422b565b92836135ae575b50505050506101c38054906001820190556040519061343282613ca5565b60008252331561356a57600081815260996020526040902054613461906001600160a01b031615155b15615937565b60cb54918160005260209160cc835283604060002055600160401b841015610ccb576099611600936134b9836134a0886001610ffe9a0160cb55613f82565b90919082549060031b91821b91600019901b1916179055565b6134c2336146a6565b3360005260c982526040600020816000528252836040600020558360005260ca825260406000205561350c61345b84600052609960205260018060a01b0360406000205416151590565b33600052609a815260406000206001815401905582600052526040600020336001600160601b0360a01b825416179055803360007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8180a4336157d4565b606460405162461bcd60e51b815260206004820152602060248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152fd5b8251156135d05750612a19816135c695541692614238565b8080808080613414565b91506135e3935416905460601c9061486a565b6135c6565b91929460005b85518110156136535783613612836020613608858b614245565b5101511685613e8f565b0486888b83613628575b505050506001016135ee565b83613649949383612a19886001999d9661364496541693614245565b614259565b949086888b61361c565b50939485945092915061340d613400565b6136779084895416885460601c9061486a565b876133f5565b346102d85760003660031901126102d8576101c7546040516001600160a01b039091168152602090f35b346102d85760203660031901126102d85760206136ca6136c5613b35565b6140c8565b6040519015158152f35b346102d8576136e236613b91565b336000908152600080516020615b8d8339815191526020908152604090912054909392906137129060ff16613e07565b600083815260996020526040902054613735906001600160a01b03161515613e4c565b826000526101ca8060205261374d6040600020613eb8565b6000946000905b8482106137ae5750505061379f6127107faaf4e53c3b98ff4419060c1d6732d9fdaf27c8d404b09e9b4049b6442b71e8b594956124c16001600160601b0391826101c6541690613f67565b6105e86040519283928361405b565b91959091906001906137d3906124fc6001600160a01b0361072361071e888b8b613ef0565b92866000528783526137ee6040600020610761838989613ef0565b0190959195613754565b346102d85760403660031901126102d857613811613b35565b602435906001600160a01b03808061382885614683565b16921691808314613923578033149081156138fe575b5015613893576000838152609b6020526040902080546001600160a01b0319168317905561386b83614683565b167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600080a4005b60405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c0000006064820152608490fd5b9050600052609c60205260406000203360005260205260ff604060002054168461383e565b60405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608490fd5b346102d85760203660031901126102d8576020611c00600435613dc9565b346102d85760003660031901126102d8576040516097546000826139b383613d8f565b91828252602093600190856001821691826000146119eb5750506001146139e1575061142092500383613cf6565b8491506097600052600080516020615b6d833981519152906000915b858310613a14575050611420935082010185611993565b805483890185015287945086939092019181016139fd565b346102d85760203660031901126102d857600435906001600160e01b031982168083036102d85760209263780e9d6360e01b82148015613ab7575b80928115613a90575b50508115613a80575b5015158152f35b613a8a91506147f7565b83613a79565b91925063152a902d60e11b909114908115613aaf575b50908480613a70565b905084613aa6565b506380ac58cd60e01b82148015613add575b80613a675750613ad8816147f7565b613a67565b50635b5e139f60e01b8214613ac9565b60005b838110613b005750506000910152565b8181015183820152602001613af0565b90602091613b2981518092818552858086019101613aed565b601f01601f1916010190565b600435906001600160a01b03821682036102d857565b602435906001600160a01b03821682036102d857565b9181601f840112156102d8578235916001600160401b0383116102d8576020808501948460061b0101116102d857565b9060406003198301126102d85760043591602435906001600160401b0382116102d857613bc091600401613b61565b9091565b60609060031901126102d857600435906024359060443590565b60609060031901126102d8576001600160a01b039060043582811681036102d8579160243590811681036102d8579060443590565b60208082019080835283518092528060408094019401926000905b838210613c3d57505050505090565b845180516001600160a01b031687528301516001600160601b0316868401529485019493820193600190910190613c2e565b60a081019081106001600160401b03821117610ccb57604052565b604081019081106001600160401b03821117610ccb57604052565b602081019081106001600160401b03821117610ccb57604052565b606081019081106001600160401b03821117610ccb57604052565b608081019081106001600160401b03821117610ccb57604052565b90601f801991011681019081106001600160401b03821117610ccb57604052565b6001600160401b038111610ccb57601f01601f191660200190565b81601f820112156102d857803590613d4982613d17565b92613d576040519485613cf6565b828452602083830101116102d857816000926020809301838601378301015290565b600435906001600160601b03821682036102d857565b90600182811c92168015613dbf575b6020831014613da957565b634e487b7160e01b600052602260045260246000fd5b91607f1691613d9e565b600081815260996020526040902054613dec906001600160a01b03161515614637565b6000908152609b60205260409020546001600160a01b031690565b15613e0e57565b60405162461bcd60e51b815260206004820152601660248201527521b0b63632b91034b9903737ba1030b71037bbb732b960511b6044820152606490fd5b15613e5357565b60405162461bcd60e51b8152602060048201526014602482015273151bdad95b88191bd95cc81b9bdd08195e1a5cdd60621b6044820152606490fd5b81810292918115918404141715613ea257565b634e487b7160e01b600052601160045260246000fd5b8054906000906000815582613ecc57505050565b6000526020600020918201915b828110613ee557505050565b818155600101613ed9565b91908110156106e65760061b0190565b356001600160a01b03811681036102d85790565b15613f1b57565b60405162461bcd60e51b815260206004820152601060248201526f24b73b30b634b2103932b1b2b4bb32b960811b6044820152606490fd5b356001600160601b03811681036102d85790565b9190916001600160601b0380809416911601918211613ea257565b60cb548110156106e65760cb6000527fa7ce836d032b2bf62b7e2097a8e0a6d8aeb35405ad15271e96d3b0188a1d06fb0190600090565b908154600160401b811015610ccb57600181018084558110156106e6576020611e6291613ff99460005281600020019260018060a01b03611e4b82613f00565b565b1561400257565b60405162461bcd60e51b815260206004820152602b60248201527f526f79616c74696573202b20706c6174666f726d20636f6d6d697373696f6e2060448201526a657863656564203130302560a81b6064820152608490fd5b602080825280820184905260409182019391906000905b83821061408157505050505090565b9091929394853560018060a01b0381168091036102d857815281860135906001600160601b0382168092036102d85782810191909152830194830193929160010190614072565b60cb549060005b8281106140de57505050600090565b6140e7816144c2565b6000526101cd602052604060002060ff6004820154169081614119575b50614111576001016140cf565b505050600190565b546001600160a01b03848116911614905038614104565b906001600160401b038211610ccb576040519161415360208260051b0184613cf6565b8252565b9060405161416481613c8a565b91546001600160a01b038116835260a01c6020830152565b6101c890815461418b81614130565b60009384529260207f8cdee82cb3ac6d59f1f417405a3eecf497b31f3d06d4c506f96deb67789f61e98186015b8484106141c6575050505050565b60018381926141d485614157565b8152019201930192906141b8565b9081546141ee81614130565b9260208085019160005260206000206000925b84841061420f575050505050565b600183819261421d85614157565b815201920193019290614201565b91908203918211613ea257565b8051156106e65760200190565b80518210156106e65760209160051b010190565b91908201809211613ea257565b1561426d57565b60405162461bcd60e51b815260206004820152602d60248201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560448201526c1c881bdc88185c1c1c9bdd9959609a1b6064820152608490fd5b9081546142d481614130565b9260208085019160005260206000206000925b8484106142f5575050505050565b600183819261430385614157565b8152019201930192906142e7565b91909161271090816143316001600160601b0395866101cc541690613e8f565b04906000526101cb60205260406000208054151560001461439357614355906142c8565b8051614368575050509050600090600090565b9061437561438392614238565b519460208601511690613e8f565b92516001600160a01b0316920490565b506143556101c96142c8565b156143a657565b60405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201526b19195b1959d85d1958d85b1b60a21b6064820152608490fd5b1561440757565b60405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201526b6163746976652070726f787960a01b6064820152608490fd5b613ff992611600926040519261447684613ca5565b600084526115f06115eb8433614945565b806000526101ca908160205260406000205415156000146144b8576000526020526144b560406000206141e2565b90565b50506144b561417c565b60cb548110156144df576144d590613f82565b90549060031b1c90565b60405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608490fd5b60008181526101cb60208181526040832054929391921561456757508252602052604090206144b5906141e2565b9150506101c980549161457983614130565b93602085019281527fa20b44b81eb5c5fe363282f9a42eaebac35ff0415b44cd916e200df009a3ec7a90925b8484106145b457505050505090565b60018381926145c285614157565b8152019201930192906145a5565b156145d757565b60405162461bcd60e51b815260206004820152603260248201527f546f74616c207472616e7366657220726f79616c74792070657263656e7461676044820152716573206d75737420657175616c203130302560701b6064820152608490fd5b1561463e57565b60405162461bcd60e51b815260206004820152601860248201527f4552433732313a20696e76616c696420746f6b656e20494400000000000000006044820152606490fd5b6000908152609960205260409020546001600160a01b03166144b5811515614637565b6001600160a01b031680156146c657600052609a60205260406000205490565b60405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b6064820152608490fd5b1561472457565b60405162461bcd60e51b8152602060048201526013602482015272151bdad95b881a5cc81b9bdd081c995b9d1959606a1b6044820152606490fd5b1561476657565b60405162461bcd60e51b815260206004820152601860248201527f496e76616c696420706c6174666f726d206164647265737300000000000000006044820152606490fd5b156147b257565b60405162461bcd60e51b815260206004820152601c60248201527f506c6174666f726d20636f6d6d697373696f6e20746f6f2068696768000000006044820152606490fd5b63ffffffff60e01b16637965db0b60e01b8114908115614815575090565b6301ffc9a760e01b14919050565b6040516323b872dd60e01b60208201526001600160a01b039283166024820152929091166044830152606480830193909352918152613ff99161486582613c6f565b61505e565b60405163a9059cbb60e01b60208201526001600160a01b03929092166024830152604480830193909352918152613ff991614865606483613cf6565b6001600160a01b031660008181527f8fe9de6e6d7d32292eeb65478fd6c9c8327fc5086caf996e3eecbac0d25b16b360205260408120549091907f797343f8d6a29aafeb3aaf0910a8973e0081c60c2f6c1f775cd9f76ea348fc1e9060ff161561490f57505050565b80835260656020526040832082845260205260408320600160ff19825416179055600080516020615b2d833981519152339380a4565b906001600160a01b03808061495984614683565b1693169183831493841561498c575b508315614976575b50505090565b61498291929350613dc9565b1614388080614970565b909350600052609c60205260406000208260005260205260ff604060002054169238614968565b156149ba57565b60405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b6064820152608490fd5b614a3191614a1a84614683565b6001600160a01b03938484169391851684146149b3565b838216938415614ad557614a4a86614a5a948694615432565b614a5386614683565b16146149b3565b7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6000848152609b602052604081206001600160601b0360a01b90818154169055838252609a6020526040822060001981540190558482526040822060018154019055858252609960205284604083209182541617905580a4565b60405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608490fd5b3360009081527f61c6261e6978331c793eee420d743e773864e0ec05cc862750e423d64f73e9f6602090815260408083205490927f189ab7a9244df0848122154315af71fe140f3db0fe014031783b0946b8c9d2e39160ff1615614b8a5750505050565b614b9333615994565b91845190614ba082613cdb565b60428252848201926060368537825115614d2e576030845382519060019160011015614d2e5790607860218501536041915b818311614cc057505050614c7e576048614c7a938693614c5e93614c4f985198899376020b1b1b2b9b9a1b7b73a3937b61d1030b1b1b7bab73a1604d1b8a860152614c26815180928c603789019101613aed565b8401917001034b99036b4b9b9b4b733903937b6329607d1b603784015251809386840190613aed565b01036028810187520185613cf6565b5192839262461bcd60e51b845260048401526024830190613b10565b0390fd5b60648486519062461bcd60e51b825280600483015260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152fd5b909192600f81166010811015614d1a576f181899199a1a9b1b9c1cb0b131b232b360811b901a614cf08587615983565b5360041c928015614d0657600019019190614bd2565b634e487b7160e01b82526011600452602482fd5b634e487b7160e01b83526032600452602483fd5b634e487b7160e01b81526032600452602490fd5b60009080825260209060658252604092838120338252835260ff848220541615614d6c5750505050565b614d7533615994565b91845190614d8282613cdb565b60428252848201926060368537825115614d2e576030845382519060019160011015614d2e5790607860218501536041915b818311614e0857505050614c7e576048614c7a938693614c5e93614c4f985198899376020b1b1b2b9b9a1b7b73a3937b61d1030b1b1b7bab73a1604d1b8a860152614c26815180928c603789019101613aed565b909192600f81166010811015614d1a576f181899199a1a9b1b9c1cb0b131b232b360811b901a614e388587615983565b5360041c928015614d0657600019019190614db4565b6001600160a01b031660008181527f5b7784634afa4a725e99aef86a1e6452834787b06eb871864223fd156b9d496b60205260408120549091907f3b652633b3026fa70803ad50b58b0ae884cefe3497643f62c67c466f41a6e88d9060ff16614eb657505050565b8083526065602052604083208284526020526040832060ff1981541690557ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b339380a4565b906000918083526065602052604083209160018060a01b03169182845260205260ff604084205416614eb657505050565b15614f3357565b60405162461bcd60e51b815260206004820152602a60248201527f455243323938313a20726f79616c7479206665652077696c6c206578636565646044820152692073616c65507269636560b01b6064820152608490fd5b60809060208152603260208201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b60608201520190565b15614fe557565b60405162461bcd60e51b815280614c7a60048201614f8b565b1561500557565b60405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608490fd5b60018060a01b0316906150b760405161507681613c8a565b6020938482527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564858301526000808587829751910182855af161236d6157a4565b805191821591848315615129575b5050509050156150d25750565b6084906040519062461bcd60e51b82526004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152fd5b9193818094500103126151505782015190811515820361514d5750803880846150c5565b80fd5b5080fd5b6001600160a01b038181169283159290919083156153ab575060cb548260005260cc60205280604060002055600160401b811015610ccb57826134a08260016151a0940160cb55613f82565b60cb546000199190828101908111613ea25760009484865260209360cc85526040926151cf8489205491613f82565b90549060031b1c6151e3816134a084613f82565b885260cc865283882055858752868381205560cb548015615397570161521c61520b82613f82565b8154906000199060031b1b19169055565b60cb55801561538f575b615387578385526101cd9081845260ff600482882001541661524c575b50505050505050565b61525585614683565b96858752828552818720908482541614908161537c575b8115615359575b501561530a57848652818452808620916002830154421015615296575b50615243565b7fdfd6ab3fc2a0e563c3389917592f1a850824730b5f05f16be9363c4adfc268da946152d18585600482970160ff19815416905554166140c8565b156152f1575b868852528520541694169280a43880808080808080615290565b86885281815261530584848a205416614e4e565b6152d7565b5162461bcd60e51b8152600481018490526024808201527f546f6b656e206973206c6f636b656420647572696e672072656e74616c2070656044820152631c9a5bd960e21b6064820152608490fd5b338986161491508161536d575b5038615273565b60029150015442101538615366565b88851615915061526c565b505050505050565b506001615226565b634e487b7160e01b88526031600452602488fd5b6153b4906146a6565b6000198101908111613ea25760009083825260209060ca8252604091828420548281036153fb575b50858452838381205587845260c98152828420918452528120556151a0565b88855260c9825283852083865282528385205489865260c9835284862082875283528085872055855260ca825283852055386153dc565b6001600160a01b038082169390929091841590811561567c575060cb548360005260cc60205280604060002055600160401b811015610ccb57836134a082600161547f940160cb55613f82565b81841691821590811561563b575060cb5460001990818101908111613ea25760009086825260cc6020526154b7604083205491613f82565b90549060031b1c6154cb816134a084613f82565b825260cc602052604082205585815280604081205560cb549081156156275750016154f861520b82613f82565b60cb555b811561561f575b50615619576000928284526101cd60209281845260409060ff6004838920015416615533575b5050505050505050565b61553c86614683565b97868852838652828820908582541614918261560d575b5081156155ea575b501561530a578486528184528086209160028301544210615529577fdfd6ab3fc2a0e563c3389917592f1a850824730b5f05f16be9363c4adfc268da946155b18585600482970160ff19815416905554166140c8565b156155d1575b868852528520541694169280a43880808080808080615529565b8688528181526155e584848a205416614e4e565b6155b7565b33898616149150816155fe575b503861555b565b600291500154421015386155f7565b89861614915038615553565b50505050565b905038615503565b634e487b7160e01b81526031600452602490fd5b868403615649575b506154fc565b615652906146a6565b6040600085815260c9602052818120838252602052868282205586815260ca602052205538615643565b848316860361568c575b5061547f565b615695906146a6565b6000198101908111613ea25760009084825260209060ca8252604091828420548281036156dd575b50868452838381205588845260c981528284209184525281205538615686565b89855260c982528385208386528252838520548a865260c9835284862082875283528085872055855260ca825283852055386156bd565b803b1561574957600080516020615bad83398151915280546001600160a01b0319166001600160a01b03909216919091179055565b60405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608490fd5b3d156157cf573d906157b582613d17565b916157c36040519384613cf6565b82523d6000602084013e565b606090565b909190803b15614111576020604051809281630a85bd0160e11b968782523360048301528161581d60009889938460248501526044840152608060648401526084830190613b10565b03926001600160a01b03165af190829082615875575b5050615867576158416157a4565b805190816158625760405162461bcd60e51b815280614c7a60048201614f8b565b602001fd5b6001600160e01b0319161490565b909192506020813d6020116158b6575b8161589260209383613cf6565b810103126151505751906001600160e01b03198216820361514d5750903880615833565b3d9150615885565b9290803b1561592e5761590e9160209160018060a01b039460405180958194829389630a85bd0160e11b9b8c86523360048701521660248501526044840152608060648401526084830190613b10565b03916000968791165af190829082615875575050615867576158416157a4565b50505050600190565b1561593e57565b60405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606490fd5b9081518110156106e6570160200190565b604051906159a182613cc0565b602a82526020820160403682378251156106e657603090538151600190600110156106e657607860218401536029905b808211615a255750506159e15790565b606460405162461bcd60e51b815260206004820152602060248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152fd5b9091600f81166010811015615a7e576f181899199a1a9b1b9c1cb0b131b232b360811b901a615a548486615983565b5360041c918015615a695760001901906159d1565b60246000634e487b7160e01b81526011600452fd5b60246000634e487b7160e01b81526032600452fd5b91929015615af55750815115615aa7575090565b3b15615ab05790565b60405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606490fd5b825190915015615b085750805190602001fd5b60405162461bcd60e51b815260206004820152908190614c7a906024830190613b1056fe2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0db19546dff01e856fb3f010c267a7b1c60363cf8a4664e21cc89c26224620214e354a83ed9988f79f6038d4c7a7dadbad8af32f4ad6df893e0e5807a1b1944ff96805e25e6cde84a829922028ad0e6c513021b8756e9a2473e007ddc1f0f07afb360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc818f40e4590a6f2c3ec1caee0533b9960911937d8dd67c8f1447b1392a84f2532237a976fa961f5921fd19f2b03c925c725d77b20ce8f790c19709c03de4d814a2646970667358221220308e082a7283df4683e034296224691b77eddcc004dacd7ff6b1fbd610575f8e64736f6c63430008180033",
    "deployedBytecode": "0x608080604052600436101561001357600080fd5b60003560e01c90816301ffc9a714613a2c5750806306fdde0314613990578063081812fc14613972578063095ea7b3146137f85780630a0a3515146136d45780630daf4c97146136a757806311eac8551461367d5780631249c58b1461338d57806318160ddd1461336f5780631c2098dc14612fcf57806323b872dd14612fab578063248a9ca314612f7c57806327dc3fbd14612eef5780632a55205a14612eb35780632f2ff15d14612e125780632f745c5914612d6057806336568abe14612cce5780633659cfe614612b115780633e11741f146127f75780633f4ba83a1461274157806342842e0e1461272a57806342966c68146125dc578063463dace0146125bd578063492ae5a3146124015780634f1ef2861461217e5780634f6ccce71461216057806352d1902d1461209c57806355f804b314611f1b5780635c975abb14611ef75780635e27a77514611ecc578063602481b614611c125780636352211e14611be25780636817c76c14611bc357806370824c5c14611b8857806370a0823114611b5d5780638456cb5914611aa85780638a71bb2d14611a8057806391d1485414611a3357806392303e0614611a0b57806395d89b411461194e57806397491d6f1461180a5780639f6d68b014611731578063a217fddf14611715578063a22cb4651461163a578063aa15d40f14611605578063b88d4fde14611591578063b97c9f7714611556578063c87b56dd14611291578063c8a9aabc14611000578063d547741f14610fbf578063dbe55e5614610f9d578063de6fb96c14610797578063e58378bb1461076e578063e5f2e0cc1461050b578063e985e9c5146104b5578063f249fd1614610320578063f4a0a528146102dd5763f72c0d8b1461029d57600080fd5b346102d85760003660031901126102d85760206040517f189ab7a9244df0848122154315af71fe140f3db0fe014031783b0946b8c9d2e38152f35b600080fd5b346102d85760203660031901126102d857336000908152600080516020615b8d83398151915260205260409020546103179060ff16613e07565b6004356101c455005b346102d85760403660031901126102d8577f410d007abb80c65964518a8b4f3007c4b354d36d7cfb908d3e3fa6411506e274604061035c613d79565b610364613b4b565b90600080516020615b4d8339815191526000526020606581528360002033600052815261039760ff856000205416613e07565b6001600160a01b038316916001600160601b03906103b684151561475f565b16926103c66107d08511156147ab565b6101c690815460601c916001600160601b03198260601b16861790558382036103f7575b50508351928352820152a1005b610443917f797343f8d6a29aafeb3aaf0910a8973e0081c60c2f6c1f775cd9f76ea348fc1e9081600052606585528760002081600052855260ff88600020541661044a575b50506148a6565b85806103ea565b81600052606585528760002081600052855260ff8860002054161561043c578160005260658552876000208160005285528760002060ff19815416905533917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b600080a4878061043c565b346102d85760403660031901126102d8576104ce613b35565b6104d6613b4b565b9060018060a01b03809116600052609c60205260406000209116600052602052602060ff604060002054166040519015158152f35b346102d85761051936613b91565b336000908152600080516020615b8d8339815191526020908152604090912054909392906105499060ff16613e07565b60008381526099602052604090205461056c906001600160a01b03161515613e4c565b826000526101cb8085526105836040600020613eb8565b6000906000905b8482106106fc575050612710906105ac826001600160601b03809316146145d0565b831580156105ed575b857fcacd6190ee2ad101cd34b99d8fbaf3cdcda816ef83aaa4759f111ba1c416e62086866105e86040519283928361405b565b0390a2005b6106e6576105fa83613f00565b916106148261060a898701613f53565b1691821115614f2c565b6001600160a01b039283169283156106a1579061069893929160fc7fcacd6190ee2ad101cd34b99d8fbaf3cdcda816ef83aaa4759f111ba1c416e62098996040519561065f87613c8a565b865280860193845260008b815291905260409020935191516001600160a01b039190921616911660a01b6001600160a01b031916179055565b839285806105b5565b60405162461bcd60e51b815260048101899052601b60248201527f455243323938313a20496e76616c696420706172616d657465727300000000006044820152606490fd5b634e487b7160e01b600052603260045260246000fd5b90916001906107469061072b6001600160a01b0361072361071e888b8b613ef0565b613f00565b161515613f14565b6107408961073a878a8a613ef0565b01613f53565b90613f67565b92866000528288526107676040600020610761838989613ef0565b90613fb9565b019061058a565b346102d85760003660031901126102d8576020604051600080516020615b4d8339815191528152f35b346102d85760e03660031901126102d8576107b0613b35565b6024356001600160401b0381116102d8576107cf903690600401613d32565b6044356001600160401b0381116102d8576107ee903690600401613d32565b6064356001600160401b0381116102d85761080d903690600401613d32565b9260a4356001600160a01b03811690036102d85760c435916001600160601b03831683036102d8576000549360ff8560081c161594858096610f90575b8015610f79575b15610f1d5760ff19811660011760005585610f0b575b506001600160a01b03831615610ecf5761088d60a4356001600160a01b0316151561475f565b6108a46107d06001600160601b03861611156147ab565b6108be60ff60005460081c166108b981614ffe565b614ffe565b8051906001600160401b038211610ccb5781906108dc609754613d8f565b601f8111610e5b575b50602090601f8311600114610de357600092610dd8575b50508160011b916000199060031b1c1916176097555b8051906001600160401b038211610ccb578190610930609854613d8f565b601f8111610d64575b50602090601f8311600114610cec57600092610ce1575b50508160011b916000199060031b1c1916176098555b6109af60ff60005460081c1661097b81614ffe565b61098481614ffe565b61098d81614ffe565b61099681614ffe565b61099f81614ffe565b61012d805460ff19169055614ffe565b6101c780546001600160a01b0319166001600160a01b0390921691909117905582516001600160401b038111610ccb576101c5906109ed8254613d8f565b601f8111610c79575b50602094601f8211600114610c0957948192939495600092610bfe575b50508160011b916000199060031b1c19161790555b6084356101c4556001600160601b03801991168160a43560601b16176101c6556103e86101cc918254161790556000805260658060205260406000203360005260205260ff6040600020541615610bbf575b600080516020615b4d833981519152806000528160205260406000203360005260205260ff6040600020541615610b7e575b50610ab860a4356148a6565b7f189ab7a9244df0848122154315af71fe140f3db0fe014031783b0946b8c9d2e390816000528060205260406000203360005260205260ff6040600020541615610b3d575b5050610b0557005b61ff0019600054166000557f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498602060405160018152a1005b816000526020526040600020336000526020526040600020600160ff1982541617905533903390600080516020615b2d833981519152600080a48180610afd565b80600052816020526040600020336000526020526040600020600160ff1982541617905533903390600080516020615b2d833981519152600080a482610aac565b60008052806020526040600020336000526020526040600020600160ff1982541617905533336000600080516020615b2d8339815191528180a4610a7a565b015190508580610a13565b601f1982169583600052600080516020615bcd8339815191529160005b888110610c6157508360019596979810610c48575b505050811b019055610a28565b015160001960f88460031b161c19169055858080610c3b565b91926020600181928685015181550194019201610c26565b82600052600080516020615bcd833981519152601f830160051c81019160208410610cc1575b601f0160051c01905b818110610cb557506109f6565b60008155600101610ca8565b9091508190610c9f565b634e487b7160e01b600052604160045260246000fd5b015190508680610950565b92506098600052600080516020615bed833981519152906000935b601f1984168510610d49576001945083601f19811610610d30575b505050811b01609855610966565b015160001960f88460031b161c19169055868080610d22565b81810151835560209485019460019093019290910190610d07565b9091506098600052601f830160051c600080516020615bed8339815191520160208410610dc3575b908392915b601f820160051c600080516020615bed833981519152018110610db45750610939565b60008155849350600101610d91565b50600080516020615bed833981519152610d8c565b0151905087806108fc565b92506097600052600080516020615b6d833981519152906000935b601f1984168510610e40576001945083601f19811610610e27575b505050811b01609755610912565b015160001960f88460031b161c19169055878080610e19565b81810151835560209485019460019093019290910190610dfe565b9091506097600052601f830160051c600080516020615b6d8339815191520160208410610eba575b908392915b601f820160051c600080516020615b6d833981519152018110610eab57506108e5565b60008155849350600101610e88565b50600080516020615b6d833981519152610e83565b60405162461bcd60e51b8152602060048201526014602482015273496e76616c69642055534443206164647265737360601b6044820152606490fd5b61ffff19166101011760005586610867565b60405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608490fd5b50303b1580156108515750600160ff821614610851565b50600160ff82161061084a565b346102d85760003660031901126102d85760206101c65460601c604051908152f35b346102d85760403660031901126102d857610ffe600435610fde613b4b565b90806000526065602052610ff9600160406000200154614d42565b614efb565b005b346102d85761100e36613bc4565b600083815260996020526040902054919291611034906001600160a01b03161515613e4c565b816000526101cd9060209382855261105660ff6004604060002001541661471d565b80156112395781156111e25761106b84614683565b600085815284875260409020546001600160a01b0391908216330361119d57906110df916101c6916127106110aa6001600160601b0385541688613e8f565b04926110b6848861422b565b93896101c7926110cd8a8686541630903390614823565b8c83611153575b50505050541661486a565b836000528285526110f96002604060002001918254614259565b9055826000528184526111156003604060002001918254614259565b90558160005282527f43ed7a287a535d13f2389230befff1329b7724a3890189bb8727976119e6c6c3600260406000200154926040519384523393a3005b7f2a0edbc96cbdf959b1243e79c51b9bb83b7867279441dc220825d561c2fbb2c6916111888588885416835460601c9061486a565b5460601c93604051908152a38a89818c6110d4565b60405162461bcd60e51b815260048101889052601d60248201527f4f6e6c792072656e7465722063616e20657874656e642072656e74616c0000006044820152606490fd5b60405162461bcd60e51b815260048101869052602960248201527f4164646974696f6e616c207061796d656e74206d75737420626520677265617460448201526806572207468616e20360bc1b6064820152608490fd5b60405162461bcd60e51b815260048101869052602a60248201527f4164646974696f6e616c206475726174696f6e206d75737420626520677265616044820152690746572207468616e20360b41b6064820152608490fd5b346102d8576020806003193601126102d8576004356000818152609960205260409020546112c9906001600160a01b03161515614637565b8160405160006101c5805491836112df84613d8f565b9182825286820193600195886001821691826000146115385750506001146114ec575b5061130f92500384613cf6565b8251156114d157600094807a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000081818110156114c3575b50506d04ee2d6d415b85acef8100000000808310156114b5575b50662386f26fc10000808310156114a6575b506305f5e10080831015611497575b5061271080831015611488575b506064821015611478575b600a8092101561146e575b9260018701938160216113c96113b388613d17565b976113c1604051998a613cf6565b808952613d17565b878a019a90601f1901368c37870101905b611438575b505050509361141e9392916114126114039660405197889551809288880190613aed565b84019151809386840190613aed565b01038084520182613cf6565b905b611434604051928284938452830190613b10565b0390f35b600019019083906f181899199a1a9b1b9c1cb0b131b232b360811b8282061a835304918215611469579190826113da565b6113df565b956001019561139e565b9590606460029104910195611393565b60049197920491019588611388565b6008919792049101958861137b565b6010919792049101958861136c565b86919792049101958861135a565b604098500491508880611340565b50505050506040516114e281613ca5565b6000815290611420565b9150506000528385600080516020615bcd833981519152856000915b85831061151f57505061130f935082010189611302565b80919294505483858a0101520191018690858793611508565b60ff1916875261130f95151560051b85010192508b91506113029050565b346102d85760003660031901126102d85760206040517f3b652633b3026fa70803ad50b58b0ae884cefe3497643f62c67c466f41a6e88d8152f35b346102d85760803660031901126102d8576115aa613b35565b6115b2613b4b565b90606435906044356001600160401b0383116102d857610ffe936115dd611600943690600401613d32565b926115f06115eb8433614945565b614266565b6115fb838383614a0d565b6158be565b614fde565b346102d85760203660031901126102d8576004356000526101cd602052602060ff600460406000200154166040519015158152f35b346102d85760403660031901126102d857611653613b35565b60243590811515908183036102d8576001600160a01b0316913383146116d0576116a29033600052609c60205260406000208460005260205260406000209060ff801983541691151516179055565b6040519081527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3160203392a3005b60405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606490fd5b346102d85760003660031901126102d857602060405160008152f35b346102d85760203660031901126102d8576001600160601b03611752613d79565b336000908152600080516020615b8d833981519152602052604090205461177b9060ff16613e07565b16610bb881116117c55760207f8df4d6c1a5c8e6c4d7a71d760d42122503a5244aeab98f2ff8e3244be07a44e3916101cc816001600160601b0319825416179055604051908152a1005b60405162461bcd60e51b815260206004820152601b60248201527f526f79616c74792070657263656e7461676520746f6f206869676800000000006044820152606490fd5b346102d85760203660031901126102d857600435600081815260996020526040902054611841906001600160a01b03161515613e4c565b806000526101cd8060205261186060ff6004604060002001541661471d565b61186982614683565b6001600160a01b0392908316913383148015611936575b156118e557816000526020526004604060002093845416930160ff1981541690556118aa836140c8565b156118d7575b7fdfd6ab3fc2a0e563c3389917592f1a850824730b5f05f16be9363c4adfc268da600080a4005b6118e083614e4e565b6118b0565b60405162461bcd60e51b815260206004820152602360248201527f4f6e6c79206f776e6572206f722072656e7465722063616e20656e642072656e6044820152621d185b60ea1b6064820152608490fd5b50816000528060205283604060002054163314611880565b346102d85760003660031901126102d85760405160985460008261197183613d8f565b91828252602093600190856001821691826000146119eb5750506001146119a0575b5061142092500383613cf6565b8491506098600052600080516020615bed833981519152906000915b8583106119d3575050611420935082010185611993565b805483890185015287945086939092019181016119bc565b60ff19168582015261142095151560051b85010192508791506119939050565b346102d85760003660031901126102d85760206001600160601b036101c65416604051908152f35b346102d85760403660031901126102d857611a4c613b4b565b600435600052606560205260406000209060018060a01b0316600052602052602060ff604060002054166040519015158152f35b346102d85760003660031901126102d85760206001600160601b036101cc5416604051908152f35b346102d85760003660031901126102d857336000908152600080516020615b8d8339815191526020526040902054611ae29060ff16613e07565b61012d805460ff8116611b255760019060ff19161790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586020604051338152a1005b60405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606490fd5b346102d85760203660031901126102d8576020611b80611b7b613b35565b6146a6565b604051908152f35b346102d85760003660031901126102d85760206040517f797343f8d6a29aafeb3aaf0910a8973e0081c60c2f6c1f775cd9f76ea348fc1e8152f35b346102d85760003660031901126102d85760206101c454604051908152f35b346102d85760203660031901126102d8576020611c00600435614683565b6040516001600160a01b039091168152f35b346102d8576020806003193601126102d8576004356001600160401b0381116102d857611c43903690600401613b61565b90600080516020615b4d833981519152600052606583526040600020336000528352611c7660ff60406000205416613e07565b6101c980546000825580611e89575b506000906000905b848210611db657505061271090611caf826001600160601b03809316146145d0565b83158015611cee575b6040517fbb8446bab3f849e18e51a7f88d964208275772e34ae7283ced4d1850f2a6248b9080611ce988888361405b565b0390a1005b6106e657611cfb83613f00565b611d15611d09878601613f53565b92831693841115614f2c565b6001600160a01b0316918215611d71577fbb8446bab3f849e18e51a7f88d964208275772e34ae7283ced4d1850f2a6248b95604051611d5381613c8a565b848152015260a01b6001600160a01b0319161760fb55838080611cb8565b60405162461bcd60e51b815260048101879052601960248201527f455243323938313a20696e76616c6964207265636569766572000000000000006044820152606490fd5b90916001600160a01b0390611de690611dd78361072361071e888b8b613ef0565b6107408861073a878a8a613ef0565b92611df2818787613ef0565b91835490600160401b821015610ccb57600182018086558210156106e657611e6289600195611e8294886000527fa20b44b81eb5c5fe363282f9a42eaebac35ff0415b44cd916e200df009a3ec7a0193611e4b82613f00565b85546001600160a01b031916911617845501613f53565b81546001600160a01b031660a09190911b6001600160a01b031916179055565b0190611c8d565b816000527fa20b44b81eb5c5fe363282f9a42eaebac35ff0415b44cd916e200df009a3ec7a908101905b818110611ec05750611c85565b60008155600101611eb3565b346102d85760203660031901126102d857611434611eeb600435614539565b60405191829182613c13565b346102d85760003660031901126102d857602060ff61012d54166040519015158152f35b346102d8576020806003193601126102d8576001600160401b03906004358281116102d857611f4e903690600401613d32565b91600080516020615b4d833981519152600052606582526040600020336000528252611f8160ff60406000205416613e07565b8251908111610ccb576101c591611f988354613d8f565b601f811161204b575b5080601f8311600114611fdd5750819293600092611fd2575b5050600019600383901b1c191660019190911b179055005b015190508380611fba565b90601f1983169484600052600080516020615bcd833981519152926000905b87821061203357505083600195961061201a575b505050811b019055005b015160001960f88460031b161c19169055838080612010565b80600185968294968601518155019501930190611ffc565b83600052600080516020615bcd833981519152601f840160051c810191838510612092575b601f0160051c01905b8181106120865750611fa1565b60008155600101612079565b9091508190612070565b346102d85760003660031901126102d8577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031630036120f5576020604051600080516020615bad8339815191528152f35b60405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152608490fd5b346102d85760203660031901126102d8576020611b806004356144c2565b60403660031901126102d857612192613b35565b6024356001600160401b0381116102d8576121b1903690600401613d32565b906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116906121ea3083141561439f565b612207600080516020615bad833981519152928284541614614400565b61220f614b26565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1615612245575050610ffe9150615714565b6040516352d1902d60e01b81526020939291831691908481600481865afa600091816123d2575b506122cd5760405162461bcd60e51b815260048101869052602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608490fd5b0361237b576122db82615714565b7fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2825115801590612373575b61231157005b600080610ffe946040519461232586613cc0565b602786527f416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c81870152660819985a5b195960ca1b604087015281519101845af461236d6157a4565b91615a93565b50600161230b565b60405162461bcd60e51b815260048101849052602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608490fd5b9091508581813d83116123fa575b6123ea8183613cf6565b810103126102d85751908761226c565b503d6123e0565b346102d8576020806003193601126102d8576004356001600160401b0381116102d857612432903690600401613b61565b336000908152600080516020615b8d833981519152602052604090205490919061245e9060ff16613e07565b6101c8928354600085558061257a575b50926000936000905b8482106124d8575050506124c96127107f89bf541e521f4acc4850978648c2c61d31963c71ae31181f246302f902941d70946124c16001600160601b0391826101c6541690613f67565b161115613ffb565b611ce96040519283928361405b565b91949091906001600160a01b039061250b906124fc8361072361071e888b8b613ef0565b6107408461073a878a8a613ef0565b92612517818787613ef0565b91875490600160401b821015610ccb5760018201808a558210156106e657611e6285600195612570948c6000527f8cdee82cb3ac6d59f1f417405a3eecf497b31f3d06d4c506f96deb67789f61e90193611e4b82613f00565b0190949194612477565b846000527f8cdee82cb3ac6d59f1f417405a3eecf497b31f3d06d4c506f96deb67789f61e9908101905b8181106125b1575061246e565b600081556001016125a4565b346102d85760203660031901126102d857611434611eeb600435614487565b346102d8576020806003193601126102d857600435906125fb82614683565b6001600160a01b039033908216036126f357826000526101cd825260ff600460406000200154166126ae579060009161263c8461263781614683565b615154565b609961264785614683565b91858552609b845260408520926001600160601b0360a01b938481541690551692838552609a8152604085208519815401905585855252604083209081541690557fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8280a4005b60405162461bcd60e51b815260048101839052601a60248201527f43616e6e6f74206275726e20612072656e74656420746f6b656e0000000000006044820152606490fd5b60405162461bcd60e51b815260048101839052600f60248201526e2737ba103a37b5b2b71037bbb732b960891b6044820152606490fd5b346102d857610ffe61273b36613bde565b91614461565b346102d85760003660031901126102d857336000908152600080516020615b8d833981519152602052604090205461277b9060ff16613e07565b61012d805460ff8116156127bb5760ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6020604051338152a1005b60405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606490fd5b346102d85760603660031901126102d857612810613b35565b61281b602435614683565b6001600160a01b0381163303612acc576024356000526101cd60205260ff60046040600020015416612a87576127106128626001600160601b036101cc5416604435613e8f565b049161271061287f6001600160601b036101c65416604435613e8f565b0461289561288d8286614259565b60443561422b565b906128b160018060a01b036101c7541660443590853091614823565b84612986575b6128d9929394508061292a575b506101c75484906001600160a01b031661486a565b6128e66024358284614461565b60405160443581526001600160a01b039182169290911690602435907f3d5eb834b5d6cadc063c171c3f25f60bca8ea892ba9db25342278927d0af955690602090a4005b6101c7546101c65461294a91839160601c906001600160a01b031661486a565b6101c65460601c906040519081527f2a0edbc96cbdf959b1243e79c51b9bb83b7867279441dc220825d561c2fbb2c6602060243592a3846128c4565b60243560009081526101cb60205260409020805415612a7b576129a8906142c8565b80516129b5575b506128b7565b9290939160005b8451811015612a6a57806127106129ec6001600160601b0360206129e26001968b614245565b510151168a613e8f565b04806129fa575b50016129bc565b612a2281848060a01b036101c75416858060a01b03612a19868c614245565b5151169061486a565b828060a01b03612a328389614245565b515116906040519081527f5afae38153b1f3a22beefc75f2c88831b35f5359c45067c73310b55352c6c225602060243592a3886129f3565b5091945084939092506128d96129af565b506129a86101c96142c8565b60405162461bcd60e51b815260206004820152601960248201527f546f6b656e2069732063757272656e746c792072656e746564000000000000006044820152606490fd5b60405162461bcd60e51b815260206004820152601960248201527f4f6e6c7920746f6b656e206f776e65722063616e2073656c6c000000000000006044820152606490fd5b346102d8576020806003193601126102d857612b2b613b35565b6001600160a01b03917f00000000000000000000000000000000000000000000000000000000000000008316612b633082141561439f565b612b80600080516020615bad833981519152918583541614614400565b612b88614b26565b60405193612b9585613ca5565b600085527f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1615612bd057505050610ffe9150615714565b83929316906040516352d1902d60e01b81528481600481865afa60009181612c9f575b50612c545760405162461bcd60e51b815260048101869052602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608490fd5b0361237b57612c6282615714565b7fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2825115801590612c975761231157005b50600061230b565b9091508581813d8311612cc7575b612cb78183613cf6565b810103126102d857519087612bf3565b503d612cad565b346102d85760403660031901126102d857612ce7613b4b565b336001600160a01b03821603612d0357610ffe90600435614efb565b60405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608490fd5b346102d85760403660031901126102d857612d79613b35565b60243590612d86816146a6565b821015612db95760018060a01b031660005260c96020526040600020906000526020526020604060002054604051908152f35b60405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608490fd5b346102d85760403660031901126102d857600435612e2e613b4b565b816000526065602052612e48600160406000200154614d42565b81600052606560205260406000209060018060a01b0316908160005260205260ff6040600020541615612e7757005b8160005260656020526040600020816000526020526040600020600160ff198254161790553391600080516020615b2d833981519152600080a4005b346102d85760403660031901126102d857612ed2602435600435614311565b604080516001600160a01b03939093168352602083019190915290f35b346102d85760203660031901126102d8576004356000526101cd60205260a06040600020608060405191612f2283613c6f565b600180851b0381541692838152600182015480602083015260028301549182604082015260ff6004600386015495866060850152015416151594859101526040519485526020850152604084015260608301526080820152f35b346102d85760203660031901126102d85760043560005260656020526020600160406000200154604051908152f35b346102d857610ffe612fbc36613bde565b91612fca6115eb8433614945565b614a0d565b346102d857612fdd36613bc4565b60008381526099602052604090205491929091613004906001600160a01b03161515613e4c565b806000526101cd9160209383855260ff6004604060002001541661332a5780156132d65781156132855761303783614683565b6001600160a01b03808216959091338714613236579160048861312b936130ac61317597966101c690868b8d61271061307a6001600160601b0387541684613e8f565b0490613086828461422b565b9561309b6101c7948686541630903390614823565b89836131ec5750505050541661486a565b6130b68642614259565b604051946130c386613c6f565b338652838601904282526040870192835260608701938b85526080880195600187528d6000525260406000209651166001600160601b0360a01b87541617865551600186015551600285015551600384015551151591019060ff801983541691151516179055565b7f3b652633b3026fa70803ad50b58b0ae884cefe3497643f62c67c466f41a6e88d8060005260658752604060002033600052875260ff60406000205416156131ac575b5042614259565b6040519442865285015260408401527f61619ae64b505b7a930ddc60df40a5c2746b1778b429ddb19ff5236f28ba83b160603394a4005b806000526065875260406000203360005287526040600020600160ff1982541617905533903390600080516020615b2d833981519152600080a48661316e565b7f2a0edbc96cbdf959b1243e79c51b9bb83b7867279441dc220825d561c2fbb2c6916132218588885416835460601c9061486a565b5460601c93604051908152a3388e81896110d4565b60405162461bcd60e51b815260048101899052602160248201527f4f776e65722063616e6e6f742072656e74207468656972206f776e20746f6b656044820152603760f91b6064820152608490fd5b60405162461bcd60e51b815260048101869052602360248201527f52656e74616c207072696365206d75737420626520677265617465722074686160448201526206e20360ec1b6064820152608490fd5b60405162461bcd60e51b815260048101869052602660248201527f52656e74616c206475726174696f6e206d75737420626520677265617465722060448201526507468616e20360d41b6064820152608490fd5b60405162461bcd60e51b815260048101869052601760248201527f546f6b656e20697320616c72656164792072656e7465640000000000000000006044820152606490fd5b346102d85760003660031901126102d857602060cb54604051908152f35b346102d85760003660031901126102d8576101c4546127106001600160601b036101c691806133bf8385541686613e8f565b046133c861417c565b916133d3828761422b565b60018060a01b03926133ef6101c798858a541630903390614823565b80613664575b5060009184516135e8575b5061340d9293945061422b565b92836135ae575b50505050506101c38054906001820190556040519061343282613ca5565b60008252331561356a57600081815260996020526040902054613461906001600160a01b031615155b15615937565b60cb54918160005260209160cc835283604060002055600160401b841015610ccb576099611600936134b9836134a0886001610ffe9a0160cb55613f82565b90919082549060031b91821b91600019901b1916179055565b6134c2336146a6565b3360005260c982526040600020816000528252836040600020558360005260ca825260406000205561350c61345b84600052609960205260018060a01b0360406000205416151590565b33600052609a815260406000206001815401905582600052526040600020336001600160601b0360a01b825416179055803360007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8180a4336157d4565b606460405162461bcd60e51b815260206004820152602060248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152fd5b8251156135d05750612a19816135c695541692614238565b8080808080613414565b91506135e3935416905460601c9061486a565b6135c6565b91929460005b85518110156136535783613612836020613608858b614245565b5101511685613e8f565b0486888b83613628575b505050506001016135ee565b83613649949383612a19886001999d9661364496541693614245565b614259565b949086888b61361c565b50939485945092915061340d613400565b6136779084895416885460601c9061486a565b876133f5565b346102d85760003660031901126102d8576101c7546040516001600160a01b039091168152602090f35b346102d85760203660031901126102d85760206136ca6136c5613b35565b6140c8565b6040519015158152f35b346102d8576136e236613b91565b336000908152600080516020615b8d8339815191526020908152604090912054909392906137129060ff16613e07565b600083815260996020526040902054613735906001600160a01b03161515613e4c565b826000526101ca8060205261374d6040600020613eb8565b6000946000905b8482106137ae5750505061379f6127107faaf4e53c3b98ff4419060c1d6732d9fdaf27c8d404b09e9b4049b6442b71e8b594956124c16001600160601b0391826101c6541690613f67565b6105e86040519283928361405b565b91959091906001906137d3906124fc6001600160a01b0361072361071e888b8b613ef0565b92866000528783526137ee6040600020610761838989613ef0565b0190959195613754565b346102d85760403660031901126102d857613811613b35565b602435906001600160a01b03808061382885614683565b16921691808314613923578033149081156138fe575b5015613893576000838152609b6020526040902080546001600160a01b0319168317905561386b83614683565b167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600080a4005b60405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c0000006064820152608490fd5b9050600052609c60205260406000203360005260205260ff604060002054168461383e565b60405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608490fd5b346102d85760203660031901126102d8576020611c00600435613dc9565b346102d85760003660031901126102d8576040516097546000826139b383613d8f565b91828252602093600190856001821691826000146119eb5750506001146139e1575061142092500383613cf6565b8491506097600052600080516020615b6d833981519152906000915b858310613a14575050611420935082010185611993565b805483890185015287945086939092019181016139fd565b346102d85760203660031901126102d857600435906001600160e01b031982168083036102d85760209263780e9d6360e01b82148015613ab7575b80928115613a90575b50508115613a80575b5015158152f35b613a8a91506147f7565b83613a79565b91925063152a902d60e11b909114908115613aaf575b50908480613a70565b905084613aa6565b506380ac58cd60e01b82148015613add575b80613a675750613ad8816147f7565b613a67565b50635b5e139f60e01b8214613ac9565b60005b838110613b005750506000910152565b8181015183820152602001613af0565b90602091613b2981518092818552858086019101613aed565b601f01601f1916010190565b600435906001600160a01b03821682036102d857565b602435906001600160a01b03821682036102d857565b9181601f840112156102d8578235916001600160401b0383116102d8576020808501948460061b0101116102d857565b9060406003198301126102d85760043591602435906001600160401b0382116102d857613bc091600401613b61565b9091565b60609060031901126102d857600435906024359060443590565b60609060031901126102d8576001600160a01b039060043582811681036102d8579160243590811681036102d8579060443590565b60208082019080835283518092528060408094019401926000905b838210613c3d57505050505090565b845180516001600160a01b031687528301516001600160601b0316868401529485019493820193600190910190613c2e565b60a081019081106001600160401b03821117610ccb57604052565b604081019081106001600160401b03821117610ccb57604052565b602081019081106001600160401b03821117610ccb57604052565b606081019081106001600160401b03821117610ccb57604052565b608081019081106001600160401b03821117610ccb57604052565b90601f801991011681019081106001600160401b03821117610ccb57604052565b6001600160401b038111610ccb57601f01601f191660200190565b81601f820112156102d857803590613d4982613d17565b92613d576040519485613cf6565b828452602083830101116102d857816000926020809301838601378301015290565b600435906001600160601b03821682036102d857565b90600182811c92168015613dbf575b6020831014613da957565b634e487b7160e01b600052602260045260246000fd5b91607f1691613d9e565b600081815260996020526040902054613dec906001600160a01b03161515614637565b6000908152609b60205260409020546001600160a01b031690565b15613e0e57565b60405162461bcd60e51b815260206004820152601660248201527521b0b63632b91034b9903737ba1030b71037bbb732b960511b6044820152606490fd5b15613e5357565b60405162461bcd60e51b8152602060048201526014602482015273151bdad95b88191bd95cc81b9bdd08195e1a5cdd60621b6044820152606490fd5b81810292918115918404141715613ea257565b634e487b7160e01b600052601160045260246000fd5b8054906000906000815582613ecc57505050565b6000526020600020918201915b828110613ee557505050565b818155600101613ed9565b91908110156106e65760061b0190565b356001600160a01b03811681036102d85790565b15613f1b57565b60405162461bcd60e51b815260206004820152601060248201526f24b73b30b634b2103932b1b2b4bb32b960811b6044820152606490fd5b356001600160601b03811681036102d85790565b9190916001600160601b0380809416911601918211613ea257565b60cb548110156106e65760cb6000527fa7ce836d032b2bf62b7e2097a8e0a6d8aeb35405ad15271e96d3b0188a1d06fb0190600090565b908154600160401b811015610ccb57600181018084558110156106e6576020611e6291613ff99460005281600020019260018060a01b03611e4b82613f00565b565b1561400257565b60405162461bcd60e51b815260206004820152602b60248201527f526f79616c74696573202b20706c6174666f726d20636f6d6d697373696f6e2060448201526a657863656564203130302560a81b6064820152608490fd5b602080825280820184905260409182019391906000905b83821061408157505050505090565b9091929394853560018060a01b0381168091036102d857815281860135906001600160601b0382168092036102d85782810191909152830194830193929160010190614072565b60cb549060005b8281106140de57505050600090565b6140e7816144c2565b6000526101cd602052604060002060ff6004820154169081614119575b50614111576001016140cf565b505050600190565b546001600160a01b03848116911614905038614104565b906001600160401b038211610ccb576040519161415360208260051b0184613cf6565b8252565b9060405161416481613c8a565b91546001600160a01b038116835260a01c6020830152565b6101c890815461418b81614130565b60009384529260207f8cdee82cb3ac6d59f1f417405a3eecf497b31f3d06d4c506f96deb67789f61e98186015b8484106141c6575050505050565b60018381926141d485614157565b8152019201930192906141b8565b9081546141ee81614130565b9260208085019160005260206000206000925b84841061420f575050505050565b600183819261421d85614157565b815201920193019290614201565b91908203918211613ea257565b8051156106e65760200190565b80518210156106e65760209160051b010190565b91908201809211613ea257565b1561426d57565b60405162461bcd60e51b815260206004820152602d60248201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560448201526c1c881bdc88185c1c1c9bdd9959609a1b6064820152608490fd5b9081546142d481614130565b9260208085019160005260206000206000925b8484106142f5575050505050565b600183819261430385614157565b8152019201930192906142e7565b91909161271090816143316001600160601b0395866101cc541690613e8f565b04906000526101cb60205260406000208054151560001461439357614355906142c8565b8051614368575050509050600090600090565b9061437561438392614238565b519460208601511690613e8f565b92516001600160a01b0316920490565b506143556101c96142c8565b156143a657565b60405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201526b19195b1959d85d1958d85b1b60a21b6064820152608490fd5b1561440757565b60405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201526b6163746976652070726f787960a01b6064820152608490fd5b613ff992611600926040519261447684613ca5565b600084526115f06115eb8433614945565b806000526101ca908160205260406000205415156000146144b8576000526020526144b560406000206141e2565b90565b50506144b561417c565b60cb548110156144df576144d590613f82565b90549060031b1c90565b60405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608490fd5b60008181526101cb60208181526040832054929391921561456757508252602052604090206144b5906141e2565b9150506101c980549161457983614130565b93602085019281527fa20b44b81eb5c5fe363282f9a42eaebac35ff0415b44cd916e200df009a3ec7a90925b8484106145b457505050505090565b60018381926145c285614157565b8152019201930192906145a5565b156145d757565b60405162461bcd60e51b815260206004820152603260248201527f546f74616c207472616e7366657220726f79616c74792070657263656e7461676044820152716573206d75737420657175616c203130302560701b6064820152608490fd5b1561463e57565b60405162461bcd60e51b815260206004820152601860248201527f4552433732313a20696e76616c696420746f6b656e20494400000000000000006044820152606490fd5b6000908152609960205260409020546001600160a01b03166144b5811515614637565b6001600160a01b031680156146c657600052609a60205260406000205490565b60405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b6064820152608490fd5b1561472457565b60405162461bcd60e51b8152602060048201526013602482015272151bdad95b881a5cc81b9bdd081c995b9d1959606a1b6044820152606490fd5b1561476657565b60405162461bcd60e51b815260206004820152601860248201527f496e76616c696420706c6174666f726d206164647265737300000000000000006044820152606490fd5b156147b257565b60405162461bcd60e51b815260206004820152601c60248201527f506c6174666f726d20636f6d6d697373696f6e20746f6f2068696768000000006044820152606490fd5b63ffffffff60e01b16637965db0b60e01b8114908115614815575090565b6301ffc9a760e01b14919050565b6040516323b872dd60e01b60208201526001600160a01b039283166024820152929091166044830152606480830193909352918152613ff99161486582613c6f565b61505e565b60405163a9059cbb60e01b60208201526001600160a01b03929092166024830152604480830193909352918152613ff991614865606483613cf6565b6001600160a01b031660008181527f8fe9de6e6d7d32292eeb65478fd6c9c8327fc5086caf996e3eecbac0d25b16b360205260408120549091907f797343f8d6a29aafeb3aaf0910a8973e0081c60c2f6c1f775cd9f76ea348fc1e9060ff161561490f57505050565b80835260656020526040832082845260205260408320600160ff19825416179055600080516020615b2d833981519152339380a4565b906001600160a01b03808061495984614683565b1693169183831493841561498c575b508315614976575b50505090565b61498291929350613dc9565b1614388080614970565b909350600052609c60205260406000208260005260205260ff604060002054169238614968565b156149ba57565b60405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b6064820152608490fd5b614a3191614a1a84614683565b6001600160a01b03938484169391851684146149b3565b838216938415614ad557614a4a86614a5a948694615432565b614a5386614683565b16146149b3565b7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6000848152609b602052604081206001600160601b0360a01b90818154169055838252609a6020526040822060001981540190558482526040822060018154019055858252609960205284604083209182541617905580a4565b60405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608490fd5b3360009081527f61c6261e6978331c793eee420d743e773864e0ec05cc862750e423d64f73e9f6602090815260408083205490927f189ab7a9244df0848122154315af71fe140f3db0fe014031783b0946b8c9d2e39160ff1615614b8a5750505050565b614b9333615994565b91845190614ba082613cdb565b60428252848201926060368537825115614d2e576030845382519060019160011015614d2e5790607860218501536041915b818311614cc057505050614c7e576048614c7a938693614c5e93614c4f985198899376020b1b1b2b9b9a1b7b73a3937b61d1030b1b1b7bab73a1604d1b8a860152614c26815180928c603789019101613aed565b8401917001034b99036b4b9b9b4b733903937b6329607d1b603784015251809386840190613aed565b01036028810187520185613cf6565b5192839262461bcd60e51b845260048401526024830190613b10565b0390fd5b60648486519062461bcd60e51b825280600483015260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152fd5b909192600f81166010811015614d1a576f181899199a1a9b1b9c1cb0b131b232b360811b901a614cf08587615983565b5360041c928015614d0657600019019190614bd2565b634e487b7160e01b82526011600452602482fd5b634e487b7160e01b83526032600452602483fd5b634e487b7160e01b81526032600452602490fd5b60009080825260209060658252604092838120338252835260ff848220541615614d6c5750505050565b614d7533615994565b91845190614d8282613cdb565b60428252848201926060368537825115614d2e576030845382519060019160011015614d2e5790607860218501536041915b818311614e0857505050614c7e576048614c7a938693614c5e93614c4f985198899376020b1b1b2b9b9a1b7b73a3937b61d1030b1b1b7bab73a1604d1b8a860152614c26815180928c603789019101613aed565b909192600f81166010811015614d1a576f181899199a1a9b1b9c1cb0b131b232b360811b901a614e388587615983565b5360041c928015614d0657600019019190614db4565b6001600160a01b031660008181527f5b7784634afa4a725e99aef86a1e6452834787b06eb871864223fd156b9d496b60205260408120549091907f3b652633b3026fa70803ad50b58b0ae884cefe3497643f62c67c466f41a6e88d9060ff16614eb657505050565b8083526065602052604083208284526020526040832060ff1981541690557ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b339380a4565b906000918083526065602052604083209160018060a01b03169182845260205260ff604084205416614eb657505050565b15614f3357565b60405162461bcd60e51b815260206004820152602a60248201527f455243323938313a20726f79616c7479206665652077696c6c206578636565646044820152692073616c65507269636560b01b6064820152608490fd5b60809060208152603260208201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b60608201520190565b15614fe557565b60405162461bcd60e51b815280614c7a60048201614f8b565b1561500557565b60405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608490fd5b60018060a01b0316906150b760405161507681613c8a565b6020938482527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564858301526000808587829751910182855af161236d6157a4565b805191821591848315615129575b5050509050156150d25750565b6084906040519062461bcd60e51b82526004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152fd5b9193818094500103126151505782015190811515820361514d5750803880846150c5565b80fd5b5080fd5b6001600160a01b038181169283159290919083156153ab575060cb548260005260cc60205280604060002055600160401b811015610ccb57826134a08260016151a0940160cb55613f82565b60cb546000199190828101908111613ea25760009484865260209360cc85526040926151cf8489205491613f82565b90549060031b1c6151e3816134a084613f82565b885260cc865283882055858752868381205560cb548015615397570161521c61520b82613f82565b8154906000199060031b1b19169055565b60cb55801561538f575b615387578385526101cd9081845260ff600482882001541661524c575b50505050505050565b61525585614683565b96858752828552818720908482541614908161537c575b8115615359575b501561530a57848652818452808620916002830154421015615296575b50615243565b7fdfd6ab3fc2a0e563c3389917592f1a850824730b5f05f16be9363c4adfc268da946152d18585600482970160ff19815416905554166140c8565b156152f1575b868852528520541694169280a43880808080808080615290565b86885281815261530584848a205416614e4e565b6152d7565b5162461bcd60e51b8152600481018490526024808201527f546f6b656e206973206c6f636b656420647572696e672072656e74616c2070656044820152631c9a5bd960e21b6064820152608490fd5b338986161491508161536d575b5038615273565b60029150015442101538615366565b88851615915061526c565b505050505050565b506001615226565b634e487b7160e01b88526031600452602488fd5b6153b4906146a6565b6000198101908111613ea25760009083825260209060ca8252604091828420548281036153fb575b50858452838381205587845260c98152828420918452528120556151a0565b88855260c9825283852083865282528385205489865260c9835284862082875283528085872055855260ca825283852055386153dc565b6001600160a01b038082169390929091841590811561567c575060cb548360005260cc60205280604060002055600160401b811015610ccb57836134a082600161547f940160cb55613f82565b81841691821590811561563b575060cb5460001990818101908111613ea25760009086825260cc6020526154b7604083205491613f82565b90549060031b1c6154cb816134a084613f82565b825260cc602052604082205585815280604081205560cb549081156156275750016154f861520b82613f82565b60cb555b811561561f575b50615619576000928284526101cd60209281845260409060ff6004838920015416615533575b5050505050505050565b61553c86614683565b97868852838652828820908582541614918261560d575b5081156155ea575b501561530a578486528184528086209160028301544210615529577fdfd6ab3fc2a0e563c3389917592f1a850824730b5f05f16be9363c4adfc268da946155b18585600482970160ff19815416905554166140c8565b156155d1575b868852528520541694169280a43880808080808080615529565b8688528181526155e584848a205416614e4e565b6155b7565b33898616149150816155fe575b503861555b565b600291500154421015386155f7565b89861614915038615553565b50505050565b905038615503565b634e487b7160e01b81526031600452602490fd5b868403615649575b506154fc565b615652906146a6565b6040600085815260c9602052818120838252602052868282205586815260ca602052205538615643565b848316860361568c575b5061547f565b615695906146a6565b6000198101908111613ea25760009084825260209060ca8252604091828420548281036156dd575b50868452838381205588845260c981528284209184525281205538615686565b89855260c982528385208386528252838520548a865260c9835284862082875283528085872055855260ca825283852055386156bd565b803b1561574957600080516020615bad83398151915280546001600160a01b0319166001600160a01b03909216919091179055565b60405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608490fd5b3d156157cf573d906157b582613d17565b916157c36040519384613cf6565b82523d6000602084013e565b606090565b909190803b15614111576020604051809281630a85bd0160e11b968782523360048301528161581d60009889938460248501526044840152608060648401526084830190613b10565b03926001600160a01b03165af190829082615875575b5050615867576158416157a4565b805190816158625760405162461bcd60e51b815280614c7a60048201614f8b565b602001fd5b6001600160e01b0319161490565b909192506020813d6020116158b6575b8161589260209383613cf6565b810103126151505751906001600160e01b03198216820361514d5750903880615833565b3d9150615885565b9290803b1561592e5761590e9160209160018060a01b039460405180958194829389630a85bd0160e11b9b8c86523360048701521660248501526044840152608060648401526084830190613b10565b03916000968791165af190829082615875575050615867576158416157a4565b50505050600190565b1561593e57565b60405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606490fd5b9081518110156106e6570160200190565b604051906159a182613cc0565b602a82526020820160403682378251156106e657603090538151600190600110156106e657607860218401536029905b808211615a255750506159e15790565b606460405162461bcd60e51b815260206004820152602060248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152fd5b9091600f81166010811015615a7e576f181899199a1a9b1b9c1cb0b131b232b360811b901a615a548486615983565b5360041c918015615a695760001901906159d1565b60246000634e487b7160e01b81526011600452fd5b60246000634e487b7160e01b81526032600452fd5b91929015615af55750815115615aa7575090565b3b15615ab05790565b60405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606490fd5b825190915015615b085750805190602001fd5b60405162461bcd60e51b815260206004820152908190614c7a906024830190613b1056fe2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0db19546dff01e856fb3f010c267a7b1c60363cf8a4664e21cc89c26224620214e354a83ed9988f79f6038d4c7a7dadbad8af32f4ad6df893e0e5807a1b1944ff96805e25e6cde84a829922028ad0e6c513021b8756e9a2473e007ddc1f0f07afb360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc818f40e4590a6f2c3ec1caee0533b9960911937d8dd67c8f1447b1392a84f2532237a976fa961f5921fd19f2b03c925c725d77b20ce8f790c19709c03de4d814a2646970667358221220308e082a7283df4683e034296224691b77eddcc004dacd7ff6b1fbd610575f8e64736f6c63430008180033",
    "linkReferences": {},
    "deployedLinkReferences": {}
}
