{
  "_format": "hh-sol-artifact-1",
  "contractName": "TokenBridge",
  "sourceName": "contracts/bridge/TokenBridge.sol",
  "abi": [
    {
      "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": "beacon",
          "type": "address"
        }
      ],
      "name": "BeaconUpgraded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "chainId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "blockNumber",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "blockHash",
          "type": "bytes32"
        }
      ],
      "name": "BlockVerified",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "targetChainId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "withRelay",
          "type": "bool"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "timestamp",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "id",
          "type": "uint256"
        }
      ],
      "name": "BridgeRequest",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "relayer",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "fee",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "sourceChainId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "sourceBlockNumber",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "id",
          "type": "uint256"
        }
      ],
      "name": "ExecutedTransfer",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "version",
          "type": "uint8"
        }
      ],
      "name": "Initialized",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "implementation",
          "type": "address"
        }
      ],
      "name": "Upgraded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address[]",
          "name": "validators",
          "type": "address[]"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "cycleEnd",
          "type": "uint256"
        }
      ],
      "name": "ValidatorsSet",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "BRIDGE_TOPIC",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "accountsDailyLimit",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "lastTransferReset",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "bridged24Hours",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "bridgeDailyLimit",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "lastTransferReset",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "bridged24Hours",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "bridgeFees",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "minFee",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "maxFee",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "fee",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "bridgeLimits",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "dailyLimit",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "txLimit",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "accountDailyLimit",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "minAmount",
          "type": "uint256"
        },
        {
          "internalType": "bool",
          "name": "onlyWhitelisted",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "target",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "targetChainId",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "bridgeTo",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "target",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "targetChainId",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "bridgeToWithoutRelay",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "bridgedToken",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "canBridge",
      "outputs": [
        {
          "internalType": "bool",
          "name": "isWithinLimit",
          "type": "bool"
        },
        {
          "internalType": "string",
          "name": "error",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "chainIdToStats",
      "outputs": [
        {
          "internalType": "uint128",
          "name": "totalBridged",
          "type": "uint128"
        },
        {
          "internalType": "uint128",
          "name": "totalRelayFees",
          "type": "uint128"
        },
        {
          "internalType": "uint128",
          "name": "totalBridgeFees",
          "type": "uint128"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "chainStartBlock",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "bridgeStartBlock",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "chainVerifiedBlocks",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        }
      ],
      "name": "closeBridge",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "consensusRatio",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "currentId",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "currentValidators",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "chainId",
          "type": "uint256"
        },
        {
          "components": [
            {
              "components": [
                {
                  "internalType": "bytes32",
                  "name": "expectedRoot",
                  "type": "bytes32"
                },
                {
                  "internalType": "bytes",
                  "name": "key",
                  "type": "bytes"
                },
                {
                  "internalType": "bytes[]",
                  "name": "proof",
                  "type": "bytes[]"
                },
                {
                  "internalType": "uint256",
                  "name": "keyIndex",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "proofIndex",
                  "type": "uint256"
                },
                {
                  "internalType": "bytes",
                  "name": "expectedValue",
                  "type": "bytes"
                }
              ],
              "internalType": "struct MPT.MerkleProof[]",
              "name": "receiptProofs",
              "type": "tuple[]"
            },
            {
              "internalType": "bytes",
              "name": "blockHeaderRlp",
              "type": "bytes"
            },
            {
              "internalType": "uint256",
              "name": "blockNumber",
              "type": "uint256"
            }
          ],
          "internalType": "struct BridgeCore.BlockReceiptProofs[]",
          "name": "blocks",
          "type": "tuple[]"
        }
      ],
      "name": "executeReceipts",
      "outputs": [
        {
          "internalType": "string[][]",
          "name": "results",
          "type": "string[][]"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "executedRequests",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "faucet",
      "outputs": [
        {
          "internalType": "contract IFaucet",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "_validators",
          "type": "address[]"
        },
        {
          "internalType": "uint256",
          "name": "_cycleEnd",
          "type": "uint256"
        },
        {
          "internalType": "address[]",
          "name": "_requiredValidators",
          "type": "address[]"
        },
        {
          "internalType": "uint32",
          "name": "_consensusRatio",
          "type": "uint32"
        },
        {
          "internalType": "address",
          "name": "_bridgedToken",
          "type": "address"
        },
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "minFee",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "maxFee",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "fee",
              "type": "uint256"
            }
          ],
          "internalType": "struct TokenBridge.BridgeFees",
          "name": "_fees",
          "type": "tuple"
        },
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "dailyLimit",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "txLimit",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "accountDailyLimit",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "minAmount",
              "type": "uint256"
            },
            {
              "internalType": "bool",
              "name": "onlyWhitelisted",
              "type": "bool"
            }
          ],
          "internalType": "struct TokenBridge.BridgeLimits",
          "name": "_limits",
          "type": "tuple"
        },
        {
          "internalType": "contract IFaucet",
          "name": "_faucet",
          "type": "address"
        },
        {
          "internalType": "contract INameService",
          "name": "_nameService",
          "type": "address"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "isClosed",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "signers",
          "type": "address[]"
        }
      ],
      "name": "isValidConsensus",
      "outputs": [
        {
          "internalType": "bool",
          "name": "isValid",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "nameService",
      "outputs": [
        {
          "internalType": "contract INameService",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "normalizeFrom18ToTokenDecimals",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "normalized",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "normalizeFromTokenTo18Decimals",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "normalized",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "numRequiredValidators",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "numValidators",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "onTokenTransfer",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "proxiableUUID",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "requiredValidators",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "requiredValidatorsSet",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "minFee",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "maxFee",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "fee",
              "type": "uint256"
            }
          ],
          "internalType": "struct TokenBridge.BridgeFees",
          "name": "_fees",
          "type": "tuple"
        }
      ],
      "name": "setBridgeFees",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "dailyLimit",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "txLimit",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "accountDailyLimit",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "minAmount",
              "type": "uint256"
            },
            {
              "internalType": "bool",
              "name": "onlyWhitelisted",
              "type": "bool"
            }
          ],
          "internalType": "struct TokenBridge.BridgeLimits",
          "name": "_limits",
          "type": "tuple"
        }
      ],
      "name": "setBridgeLimits",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "_consensusRatio",
          "type": "uint32"
        }
      ],
      "name": "setConsensusRatio",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IFaucet",
          "name": "_faucet",
          "type": "address"
        }
      ],
      "name": "setFaucet",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "validators",
          "type": "address[]"
        }
      ],
      "name": "setRequiredValidators",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "bridges",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "blockstart",
          "type": "uint256[]"
        }
      ],
      "name": "setSourceBridges",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "sourceBridgeToBlockstart",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "chainId",
              "type": "uint256"
            },
            {
              "internalType": "bytes",
              "name": "rlpHeader",
              "type": "bytes"
            },
            {
              "internalType": "bytes[]",
              "name": "signatures",
              "type": "bytes[]"
            },
            {
              "internalType": "uint256",
              "name": "cycleEnd",
              "type": "uint256"
            },
            {
              "internalType": "address[]",
              "name": "validators",
              "type": "address[]"
            }
          ],
          "internalType": "struct BridgeCore.SignedBlock[]",
          "name": "signedBlocks",
          "type": "tuple[]"
        }
      ],
      "name": "submitBlocks",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "chainId",
              "type": "uint256"
            },
            {
              "internalType": "bytes",
              "name": "rlpHeader",
              "type": "bytes"
            },
            {
              "internalType": "bytes[]",
              "name": "signatures",
              "type": "bytes[]"
            },
            {
              "internalType": "uint256",
              "name": "cycleEnd",
              "type": "uint256"
            },
            {
              "internalType": "address[]",
              "name": "validators",
              "type": "address[]"
            }
          ],
          "internalType": "struct BridgeCore.SignedBlock",
          "name": "blockData",
          "type": "tuple"
        },
        {
          "internalType": "uint256",
          "name": "signedBlockNumber",
          "type": "uint256"
        },
        {
          "internalType": "bytes[]",
          "name": "parentRlpHeaders",
          "type": "bytes[]"
        },
        {
          "components": [
            {
              "components": [
                {
                  "internalType": "bytes32",
                  "name": "expectedRoot",
                  "type": "bytes32"
                },
                {
                  "internalType": "bytes",
                  "name": "key",
                  "type": "bytes"
                },
                {
                  "internalType": "bytes[]",
                  "name": "proof",
                  "type": "bytes[]"
                },
                {
                  "internalType": "uint256",
                  "name": "keyIndex",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "proofIndex",
                  "type": "uint256"
                },
                {
                  "internalType": "bytes",
                  "name": "expectedValue",
                  "type": "bytes"
                }
              ],
              "internalType": "struct MPT.MerkleProof[]",
              "name": "receiptProofs",
              "type": "tuple[]"
            },
            {
              "internalType": "bytes",
              "name": "blockHeaderRlp",
              "type": "bytes"
            },
            {
              "internalType": "uint256",
              "name": "blockNumber",
              "type": "uint256"
            }
          ],
          "internalType": "struct BridgeCore.BlockReceiptProofs[]",
          "name": "txs",
          "type": "tuple[]"
        }
      ],
      "name": "submitChainBlockParentsAndTxs",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "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": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "usedReceipts",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "validatorsCycleEnd",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "chainId",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "childBlockNumber",
          "type": "uint256"
        },
        {
          "internalType": "bytes[]",
          "name": "parentRlpHeaders",
          "type": "bytes[]"
        },
        {
          "internalType": "bytes",
          "name": "childRlpHeader",
          "type": "bytes"
        }
      ],
      "name": "verifyParentBlocks",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "withdraw",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x60a06040523060805234801561001457600080fd5b50608051615bdf6200004d60003960008181610fac01528181610fec01528181611583015281816115c3015261163f0152615bdf6000f3fe60806040526004361061022e5760003560e01c8063183d4c8f146102335780632784b2381461025557806329b70872146102885780633095634a146102a85780633659cfe6146102d6578063370a4250146102f65780633811da501461030c5780633886d21e146103395780633cca046d1461036b5780633e6326fc14610398578063425cfb53146103c65780634406acdd146104065780634c83f9e4146104335780634f1ef2861461045757806352d1902d1461046a5780635c8430601461047f5780635d593f8d1461049f578063715018a6146104b55780637b0240c0146104ca57806382dc737d146104f85780638da5cb5b14610518578063930af3541461052d57806394cb97991461054d578063a4c0ed361461056d578063a8b8be181461058d578063a976acf3146105ad578063a9c4b87e146105cd578063af17773c146105ee578063b1228a6314610663578063b2f7667f14610683578063be58d44d146106b3578063c2b6b58c146106e3578063c3e6978f146106fd578063c4a6ee1e14610732578063c562887d14610752578063c6dd812f14610772578063c8edb049146107c6578063ce2b2cf0146107f3578063d422794714610813578063d8b31c7714610848578063dd99014b14610868578063de55abc31461087e578063de5f72fd1461089e578063e00dd161146108bf578063e39b32e8146108d6578063ee383937146108f6578063f2fde38b14610916578063f39e17d514610936578063f3fef3a314610958575b600080fd5b34801561023f57600080fd5b5061025361024e366004614afd565b610978565b005b34801561026157600080fd5b50610275610270366004614bd6565b610b29565b6040519081526020015b60405180910390f35b34801561029457600080fd5b506102536102a3366004614bef565b610c1d565b3480156102b457600080fd5b506102c86102c3366004614c0b565b610c59565b60405161027f929190614c8f565b3480156102e257600080fd5b506102536102f1366004614caa565b610fa1565b34801561030257600080fd5b5061027560de5481565b34801561031857600080fd5b50610275610327366004614caa565b60df6020526000908152604090205481565b34801561034557600080fd5b5060e0546103569063ffffffff1681565b60405163ffffffff909116815260200161027f565b34801561037757600080fd5b5061038b610386366004614d0b565b61106a565b60405161027f9190614d56565b3480156103a457600080fd5b50610102546103b9906001600160a01b031681565b60405161027f9190614dfb565b3480156103d257600080fd5b506103f66103e1366004614bd6565b60f26020526000908152604090205460ff1681565b604051901515815260200161027f565b34801561041257600080fd5b50610275610421366004614caa565b60016020526000908152604090205481565b34801561043f57600080fd5b5060e05461035690600160201b900463ffffffff1681565b610253610465366004614e7e565b611578565b34801561047657600080fd5b50610275611632565b34801561048b57600080fd5b5061025361049a366004614ff3565b6116e0565b3480156104ab57600080fd5b5061027560035481565b3480156104c157600080fd5b506102536119a9565b3480156104d657600080fd5b5060f65460f75460f8546104e992919083565b60405161027f939291906150a3565b34801561050457600080fd5b506102536105133660046150b9565b6119bd565b34801561052457600080fd5b506103b96119db565b34801561053957600080fd5b506102536105483660046150d5565b6119ea565b34801561055957600080fd5b50610253610568366004614caa565b6119fb565b34801561057957600080fd5b506103f661058836600461514a565b611b06565b34801561059957600080fd5b506103f66105a83660046150d5565b611b83565b3480156105b957600080fd5b506102536105c83660046151a5565b611d58565b3480156105d957600080fd5b506102756105e8366004614bd6565b50600190565b3480156105fa57600080fd5b50610639610609366004614bd6565b60f160205260009081526040902080546001909101546001600160801b0380831692600160801b90048116911683565b604080516001600160801b039485168152928416602084015292169181019190915260600161027f565b34801561066f57600080fd5b5061025361067e366004615204565b611de2565b34801561068f57600080fd5b5060fe5460ff5461069e919082565b6040805192835260208301919091520161027f565b3480156106bf57600080fd5b506103f66106ce366004614bd6565b60026020526000908152604090205460ff1681565b3480156106ef57600080fd5b5060f5546103f69060ff1681565b34801561070957600080fd5b5061027561071836600461521f565b600060208181529281526040808220909352908152205481565b34801561073e57600080fd5b5061027561074d366004614bd6565b611e10565b34801561075e57600080fd5b5061025361076d366004615241565b611ebe565b34801561077e57600080fd5b5060f95460fa5460fb5460fc5460fd5461079c949392919060ff1685565b6040805195865260208601949094529284019190915260608301521515608082015260a00161027f565b3480156107d257600080fd5b506102756107e1366004614caa565b60f46020526000908152604090205481565b3480156107ff57600080fd5b5061025361080e366004615276565b611ed2565b34801561081f57600080fd5b5061069e61082e366004614caa565b610100602052600090815260409020805460019091015482565b34801561085457600080fd5b50610253610863366004614caa565b612188565b34801561087457600080fd5b5061027560045481565b34801561088a57600080fd5b506102536108993660046152f8565b6121b3565b3480156108aa57600080fd5b50610101546103b9906001600160a01b031681565b3480156108cb57600080fd5b506102756101035481565b3480156108e257600080fd5b506102536108f1366004615241565b61228a565b34801561090257600080fd5b5060f3546103b9906001600160a01b031681565b34801561092257600080fd5b50610253610931366004614caa565b61229a565b34801561094257600080fd5b50610275600080516020615b6a83398151915281565b34801561096457600080fd5b50610253610973366004614c0b565b612310565b601554610100900460ff16158080156109985750601554600160ff909116105b806109b957506109a73061241a565b1580156109b9575060155460ff166001145b610a215760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6015805460ff191660011790558015610a44576015805461ff0019166101001790555b610a508a8a8a8a612429565b60f380546001600160a01b03199081166001600160a01b0389811691909117909255865160f65560208088015160f75560408089015160f855875160f9559087015160fa5586015160fb55606086015160fc55608086015160fd805460ff19169115159190911790556101018054821686841617905561010280549091169184169190911790558015610b1d576015805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050505050565b60008060f360009054906101000a90046001600160a01b03166001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b7f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ba3919061538b565b905060128160ff161015610be0576000610bbe8260126153c4565b60ff169050610bce81600a6154cb565b610bd890856154d7565b925050610c17565b60128160ff161115610c13576000610bf96012836153c4565b60ff169050610c0981600a6154cb565b610bd8908561550c565b8291505b50919050565b610c2561246d565b805160f955602081015160fa55604081015160fb55606081015160fc556080015160fd805460ff1916911515919091179055565b60f55460009060609060ff1615610c9157505060408051808201909152600681526518db1bdcd95960d21b6020820152600090610f9a565b60fc54831015610cc55750506040805180820190915260098152681b5a5b905b5bdd5b9d60ba1b6020820152600090610f9a565b60fa54831115610cf75750506040805180820190915260078152661d1e131a5b5a5d60ca1b6020820152600090610f9a565b60fd5460ff168015610d145750610102546001600160a01b031615155b15610e55576101025460405163bf40fac160e01b81526020600482015260086024820152674944454e5449545960c01b60448201526000916001600160a01b03169063bf40fac190606401602060405180830381865afa158015610d7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610da09190615520565b90506001600160a01b03811615610e5357604051633af32abf60e01b81526001600160a01b03821690633af32abf90610ddd908890600401614dfb565b602060405180830381865afa158015610dfa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e1e919061553d565b610e5357505060408051808201909152600f81526e1b9bdd081dda1a5d195b1a5cdd1959608a1b602082015260009150610f9a565b505b6001600160a01b03841660009081526101006020526040902060010154610e7f620151804261555a565b6001600160a01b038616600090815261010060205260409020541015610ea6575082610eb3565b610eb08482615571565b90505b60fb54811115610ef05750506040805180820190915260118152701858d8dbdd5b9d11185a5b1e531a5b5a5d607a1b602082015260009150610f9a565b610efd620151804261555a565b60fe541015610f415760f954841115610f3c57505060408051808201909152600a81526919185a5b1e531a5b5a5d60b21b602082015260009150610f9a565b610f84565b60f95460ff54610f52908690615571565b1115610f8457505060408051808201909152600a81526919185a5b1e531a5b5a5d60b21b602082015260009150610f9a565b5050604080516020810190915260008152600191505b9250929050565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161415610fea5760405162461bcd60e51b8152600401610a1890615589565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661101c6124cc565b6001600160a01b0316146110425760405162461bcd60e51b8152600401610a18906155c3565b61104b816124e8565b60408051600080825260208201909252611067918391906124f0565b50565b6060816001600160401b03811115611084576110846148dc565b6040519080825280602002602001820160405280156110b757816020015b60608152602001906001900390816110a25790505b50905060005b828110156115705760008484838181106110d9576110d96155fd565b90506020028101906110eb9190615613565b6110f490615633565b6000878152602081815260408083208185015184528252909120548183015180519201919091209192509081146111625760405162461bcd60e51b81526020600482015260126024820152710d2dcecc2d8d2c840c4d8dec6d640d0c2e6d60731b6044820152606401610a18565b600061117288846020015161265b565b8351519091506001600160401b0381111561118f5761118f6148dc565b6040519080825280602002602001820160405280156111c257816020015b60608152602001906001900390816111ad5790505b508585815181106111d5576111d56155fd565b602002602001018190525060005b835151811015611559576000898486600001518481518110611207576112076155fd565b602002602001015160a00151604051602001611225939291906157c2565b60408051601f1981840301815291815281516020928301206000818152600290935291205490915060ff161515600114156112c357604051806040016040528060148152602001731c9958d95a5c1d08185b1c9958591e481d5cd95960621b815250878781518110611299576112996155fd565b602002602001015183815181106112b2576112b26155fd565b602002602001018190525050611547565b6000818152600260205260409020805460ff1916600117905584518051839081106112f0576112f06155fd565b602002602001015160600151600014801561132a5750845180518390811061131a5761131a6155fd565b6020026020010151608001516000145b6113685760405162461bcd60e51b815260206004820152600f60248201526e0dcdee840e6e8c2e4e840d2dcc8caf608b1b6044820152606401610a18565b828560000151838151811061137f5761137f6155fd565b602002602001015160000151146113cf5760405162461bcd60e51b81526020600482015260146024820152730e4cac6cad2e0e8a4dedee840dad2e6dac2e8c6d60631b6044820152606401610a18565b6113f5856000015183815181106113e8576113e86155fd565b60200260200101516126df565b6114385760405162461bcd60e51b815260206004820152601460248201527372656365697074206e6f7420696e20626c6f636b60601b6044820152606401610a18565b60408501516001111561147f5760405162461bcd60e51b815260206004820152600f60248201526e1c9958d95a5c1d081d1bdbc81bdb19608a1b6044820152606401610a18565b60006114b98b87604001516114b4896000015187815181106114a3576114a36155fd565b602002602001015160a00151612896565b612a6b565b9050806114ec576040518060400160405280600e81526020016d195e1958dd5d194819985a5b195960921b81525061150e565b60405180604001604052806008815260200167195e1958dd5d195960c21b8152505b888881518110611520576115206155fd565b60200260200101518481518110611539576115396155fd565b602002602001018190525050505b80611551816157e1565b9150506111e3565b505050508080611568906157e1565b9150506110bd565b509392505050565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156115c15760405162461bcd60e51b8152600401610a1890615589565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166115f36124cc565b6001600160a01b0316146116195760405162461bcd60e51b8152600401610a18906155c3565b611622826124e8565b61162e828260016124f0565b5050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146116cd5760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c6044820152771b1959081d1a1c9bdd59da0819195b1959d85d1958d85b1b60421b6064820152608401610a18565b50600080516020615b2383398151915290565b60005b815181101561162e576000828281518110611700576117006155fd565b602090810291909101810151808201518051908301208151608083015160608401516040519496509294607a83149460009461174294889490939092016157fc565b60405160208183030381529060405280519060200120905060008460400151516001600160401b03811115611779576117796148dc565b6040519080825280602002602001820160405280156117a2578160200160208202803683370190505b50905060005b85604001515181101561189457600080876040015183815181106117ce576117ce6155fd565b60200260200101518060200190518101906117e9919061584b565b9150915061184d611846866040517b0ca2ba3432b932bab69029b4b3b732b21026b2b9b9b0b3b29d05199960211b6020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b8383612c1c565b84848151811061185f5761185f6155fd565b60200260200101906001600160a01b031690816001600160a01b0316815250505050808061188c906157e1565b9150506117a8565b5061189e81611b83565b6118dc5760405162461bcd60e51b815260206004820152600f60248201526e696e76616c6964207369676e65727360881b6044820152606401610a18565b60006118f086600001518760200151612c39565b905060018110156119135760405162461bcd60e51b8152600401610a189061586f565b8551600090815260208181526040808320848452909152902085905583801561194157506000866080015151115b801561194f57506004548110155b156119665761196686608001518760600151612cbb565b8551604051600080516020615b8a8339815191529161198891849089906150a3565b60405180910390a150505050505080806119a1906157e1565b9150506116e3565b6119b161246d565b6119bb6000612d66565b565b6119c561246d565b805160f655602081015160f7556040015160f855565b60ac546001600160a01b031690565b6119f261246d565b61106781612db8565b611a0361246d565b6040516370a0823160e01b81526001600160a01b0382169063a9059cbb90339083906370a0823190611a39903090600401614dfb565b602060405180830381865afa158015611a56573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a7a9190615896565b6040518363ffffffff1660e01b8152600401611a979291906158af565b6020604051808303816000875af1158015611ab6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ada919061553d565b611af65760405162461bcd60e51b8152600401610a18906158c8565b5060f5805460ff19166001179055565b60f3546000906001600160a01b03163314611b4f5760405162461bcd60e51b81526020600482015260096024820152683737ba103a37b5b2b760b91b6044820152606401610a18565b60008080611b5f858701876158ea565b925092509250611b758883858a85156001612e4e565b506001979650505050505050565b60008080805b8451811015611d4d576000611b9f60018361592c565b90505b60008112611c3d57858181518110611bbc57611bbc6155fd565b60200260200101516001600160a01b0316868381518110611bdf57611bdf6155fd565b60200260200101516001600160a01b03161415611c2b5760405162461bcd60e51b815260206004820152600a602482015269323ab81039b4b3b732b960b11b6044820152606401610a18565b80611c358161596b565b915050611ba2565b5060045460016000878481518110611c5757611c576155fd565b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020541415611c945782611c90816157e1565b9350505b60de5460df6000878481518110611cad57611cad6155fd565b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020541415611cea5781611ce6816157e1565b9250505b60e05463ffffffff1682148015611d2b575060e054600354606491611d1d91600160201b90910463ffffffff16906154d7565b611d27919061550c565b8310155b15611d3b57506001949350505050565b80611d45816157e1565b915050611b89565b506000949350505050565b611d6061246d565b60005b83811015611ddb57828282818110611d7d57611d7d6155fd565b9050602002013560f46000878785818110611d9a57611d9a6155fd565b9050602002016020810190611daf9190614caa565b6001600160a01b0316815260208101919091526040016000205580611dd3816157e1565b915050611d63565b5050505050565b611dea61246d565b60e0805463ffffffff909216600160201b0263ffffffff60201b19909216919091179055565b60008060f360009054906101000a90046001600160a01b03166001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e8a919061538b565b905060128160ff161015611ea5576000610bf98260126153c4565b60128160ff161115610c13576000610bbe6012836153c4565b611ecd33848484600080612e4e565b505050565b60008681526020818152604080832088845290915290819020549051611efb9084908490615989565b60405180910390208114611f4b5760405162461bcd60e51b815260206004820152601760248201527634b73b30b634b21031b434b632103936382432b0b232b960491b6044820152606401610a18565b6000611f8d8885858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612ff992505050565b91505060005b8581101561217d576000878783818110611faf57611faf6155fd565b9050602002810190611fc19190615999565b604051611fcf929190615989565b604051809103902090508083146120155760405162461bcd60e51b815260206004820152600a6024820152691b9bdd081c185c995b9d60b21b6044820152606401610a18565b60008061207a8c8b8b8781811061202e5761202e6155fd565b90506020028101906120409190615999565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612ff992505050565b91509150612086600190565b8210156120a55760405162461bcd60e51b8152600401610a189061586f565b60008c81526020818152604080832085845290915290205415806120df575060008c81526020818152604080832085845290915290205483145b61211e5760405162461bcd60e51b815260206004820152601060248201526f185b1c9958591e481d995c9a599a595960821b6044820152606401610a18565b60008c81526020818152604080832085845290915290819020849055519094508490600080516020615b8a8339815191529061215f908e90859087906150a3565b60405180910390a15050508080612175906157e1565b915050611f93565b505050505050505050565b61219061246d565b61010180546001600160a01b0319166001600160a01b0392909216919091179055565b60006121c260408801886159df565b9050111561225a57604080516001808252818301909252600091816020015b6122136040518060a0016040528060008152602001606081526020016060815260200160008152602001606081525090565b8152602001906001900390816121e157905050905061223187615a28565b81600081518110612244576122446155fd565b6020026020010181905250612258816116e0565b505b821561227557612275863586868661080e60208c018c615999565b6122818635838361106a565b50505050505050565b611ecd3384848460016000612e4e565b6122a261246d565b6001600160a01b0381166123075760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a18565b61106781612d66565b61231861246d565b8061238d576040516370a0823160e01b81526001600160a01b038316906370a0823190612349903090600401614dfb565b602060405180830381865afa158015612366573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061238a9190615896565b90505b60405163a9059cbb60e01b81526001600160a01b0383169063a9059cbb906123bb90339085906004016158af565b6020604051808303816000875af11580156123da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123fe919061553d565b61162e5760405162461bcd60e51b8152600401610a18906158c8565b6001600160a01b03163b151590565b61243161302e565b61243b8484612cbb565b61244482612db8565b60e0805463ffffffff909216600160201b0263ffffffff60201b19909216919091179055505050565b336124766119db565b6001600160a01b0316146119bb5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a18565b600080516020615b23833981519152546001600160a01b031690565b61106761246d565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff161561252357611ecd836130a2565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561257d575060408051601f3d908101601f1916820190925261257a91810190615896565b60015b6125e05760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610a18565b600080516020615b23833981519152811461264f5760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610a18565b50611ecd83838361313c565b60008061266f61266a84613167565b61318d565b905061267a816131de565b50612684816131de565b5061268e816131de565b50612698816131de565b508361a4ec1415806126b65750600a6126b4826000015161322f565b115b156126c6576126c4816131de565b505b6126d76126d2826131de565b6132b2565b949350505050565b60008082604001518360800151815181106126fc576126fc6155fd565b60200260200101519050600061271461266a83613167565b905083606001516000141561278d57835182516020840120146127885760405162461bcd60e51b815260206004820152602660248201527f7665726966795472696550726f6f6620726f6f74206e6f6465206861736820696044820152651b9d985b1a5960d21b6064820152608401610a18565b612842565b6020825110156127f55760006127a56126d2836131de565b855190915081146127ef5760405162461bcd60e51b81526020600482015260146024820152733b32b934b33caa3934b2a83937b7b3101e10199960611b6044820152606401610a18565b50612842565b835182516020840120146128425760405162461bcd60e51b81526020600482015260146024820152737665726966795472696550726f6f6620656c736560601b6044820152606401610a18565b6000612851826000015161322f565b9050806011141561286e57612865856132ff565b95945050505050565b8060021415612881576128658286613437565b60a085015151611d4d57506001949350505050565b6128c46040518060800160405280600060ff1681526020016000815260200160608152602001606081525090565b8151600090607f60f81b90849083906128df576128df6155fd565b01602001516001600160f81b031916116128f7575060015b600061290b61290685846136f0565b613730565b905061293081600081518110612923576129236155fd565b60200260200101516132b2565b60ff168352805161294e9082906001908110612923576129236155fd565b60208401528051612979908290600290811061296c5761296c6155fd565b6020026020010151613839565b836040018190525060006129a682600381518110612999576129996155fd565b6020026020010151613730565b905080516001600160401b038111156129c1576129c16148dc565b6040519080825280602002602001820160405280156129fa57816020015b6129e7614878565b8152602001906001900390816129df5790505b50606085015260005b8151811015612a6257612a2e828281518110612a2157612a216155fd565b60200260200101516138b6565b85606001518281518110612a4457612a446155fd565b60200260200101819052508080612a5a906157e1565b915050612a03565b50505050919050565b6000816000015160ff16600114612a8457506000612c15565b6000805b836060015151811015612c1157600084606001518281518110612aad57612aad6155fd565b602002602001015190508560f4600083600001516001600160a01b03166001600160a01b03168152602001908152602001600020541115612aee5750612bff565b80516001600160a01b0316600090815260f460205260409020541580612b405750600080516020615b6a8339815191528160200151600081518110612b3557612b356155fd565b602002602001015114155b15612b4b5750612bff565b60008060008360400151806020019051810190612b689190615a34565b925092509250612b754690565b8314612b845750505050612bff565b60019550612bfa8460200151600181518110612ba257612ba26155fd565b602002602001015160001c8560200151600281518110612bc457612bc46155fd565b602002602001015160001c848d8d868a60200151600381518110612bea57612bea6155fd565b602002602001015160001c6139e0565b505050505b80612c09816157e1565b915050612a88565b5090505b9392505050565b6000806000612c2c868686613c11565b91509150612c1181613c4a565b600080612c4861266a84613167565b9050612c53816131de565b50612c5d816131de565b50612c67816131de565b50612c71816131de565b50612c7b816131de565b50612c85816131de565b508361a4ec141580612ca35750600a612ca1826000015161322f565b115b156126c657612cb1816131de565b506126c4816131de565b60005b8251811015612d1d578160016000858481518110612cde57612cde6155fd565b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020819055508080612d15906157e1565b915050612cbe565b50600481905581516003556040517f27330b21e104b5b4f17c1f89b946c154b973ab51773ac9debf76b53bb57a194790612d5a9084908490615a62565b60405180910390a15050565b60ac80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60de8054906000612dc8836157e1565b919050555060005b8151811015612e315760de5460df6000848481518110612df257612df26155fd565b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020819055508080612e29906157e1565b915050612dd0565b505160e0805463ffffffff191663ffffffff909216919091179055565b612e5a86868587613d93565b80612f175760f3546040516323b872dd60e01b81526001600160a01b03888116600483015230602483015260448201869052909116906323b872dd906064016020604051808303816000875af1158015612eb8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612edc919061553d565b612f175760405162461bcd60e51b815260206004820152600c60248201526b7472616e7366657246726f6d60a01b6044820152606401610a18565b6000612f2284610b29565b9050868646878430426101036000815480929190612f3f906157e1565b90915550604080516001600160a01b03998a166020820152978916908801526060870195909552608086019390935260a085019190915290931660c083015260e08201929092526101008101919091526101200160408051601f19818403018152828252805160209182012088845290830184905285151591830191909152426060830152906001600160a01b0380891691908a1690600080516020615b6a8339815191529060800160405180910390a450505050505050565b600080600061300a61266a85613167565b90506130186126d2826131de565b91506130248585612c39565b9250509250929050565b601554610100900460ff166130995760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610a18565b6119bb33612d66565b6130ab8161241a565b61310d5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610a18565b600080516020615b2383398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b61314583613f15565b6000825111806131525750805b15611ecd576131618383613f55565b50505050565b61316f6148a2565b50604080518082019091528151815260209182019181019190915290565b6131956148bc565b61319e8261403e565b6131a757600080fd5b60006131b68360200151614077565b83602001516131c59190615571565b6040805180820190915293845260208401525090919050565b6131e66148a2565b6131ef826140f2565b6131f857600080fd5b6020820151600061320882614116565b90506132148183615571565b60209485015260408051808201909152908152928301525090565b805160009061324057506000919050565b6000806132508460200151614077565b846020015161325f9190615571565b90506000846000015185602001516132779190615571565b90505b808210156132a95761328b82614116565b6132959083615571565b9150826132a1816157e1565b93505061327a565b50909392505050565b8051600090158015906132c757508151602110155b6132d057600080fd5b6000806132dc846141bf565b8151919350915060208210156126d75760208290036101000a9004949350505050565b600080826040015183608001518151811061331c5761331c6155fd565b6020026020010151905082602001515183606001511061338557600061335961334761290684613167565b60108151811061296c5761296c6155fd565b90508360a00151805190602001208180519060200120141561337f575060019392505050565b5061341b565b600083602001518460600151815181106133a1576133a16155fd565b016020015160f81c905060006133cd6133bc61290685613167565b838151811061296c5761296c6155fd565b905080516000146134185760208101518552606085018051600191906133f4908390615571565b9052506080850180516001919061340c908390615571565b905250612865856126df565b50505b60a08301515161342e5750600192915050565b50600092915050565b60008061344b613446856131de565b613839565b9050600061345b613446866131de565b602083015190915060fc1c600281141561351f5760006001845161347f919061555a565b90506000613491856001846000614206565b905060006134aa88602001518960600151856000614206565b905084805190602001208860a00151805190602001201415613517578080519060200120828051906020012014156134eb57600196505050505050506136ea565b805160208201206134fb836142ea565b80519060200120141561351757600196505050505050506136ea565b5050506136cc565b80600314156135d557600061353984600086516001614206565b60208701516060880151815192935060009261356392919061355c90829061555a565b6000614206565b905083805190602001208760a001518051906020012014156135ce578080519060200120828051906020012014156135a3576001955050505050506136ea565b805160208201206135b383614419565b8051906020012014156135ce576001955050505050506136ea565b50506136cc565b8015806135e25750806001145b1561369457825160006135f88582846001614206565b9050600061361188602001518960600151856000614206565b905080805190602001208280519060200120148061364357508051602082012061363a836142ea565b80519060200120145b156135175760208501518852606088018051849190613663908390615571565b9052506080880180516001919061367b908390615571565b905250613687886126df565b96505050505050506136ea565b60405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b210383937b7b360991b6044820152606401610a18565b60a0850151516136e257600193505050506136ea565b600093505050505b92915050565b6136f86148a2565b602083016137068382615571565b90506040518060400160405280848651613720919061555a565b8152602001919091529392505050565b606061373b8261403e565b61374457600080fd5b600061374f8361322f565b90506000816001600160401b0381111561376b5761376b6148dc565b6040519080825280602002602001820160405280156137a457816020015b6137916148a2565b8152602001906001900390816137895790505b50905060006137b68560200151614077565b85602001516137c59190615571565b90506000805b8481101561382e576137dc83614116565b9150604051806040016040528083815260200184815250848281518110613805576138056155fd565b602090810291909101015261381a8284615571565b925080613826816157e1565b9150506137cb565b509195945050505050565b805160609061384757600080fd5b600080613853846141bf565b915091506000816001600160401b03811115613871576138716148dc565b6040519080825280601f01601f19166020018201604052801561389b576020820181803683370190505b509050602081016138ad84828561457a565b50949350505050565b6138be614878565b60006138c983613730565b90506138ee816000815181106138e1576138e16155fd565b60200260200101516145f9565b6001600160a01b0316825280516000906139159083906001908110612999576129996155fd565b905080516001600160401b03811115613930576139306148dc565b604051908082528060200260200182016040528015613959578160200160208202803683370190505b50602084015260005b81518110156139bc576000613982838381518110612923576129236155fd565b60001b9050808560200151838151811061399e5761399e6155fd565b602090810291909101015250806139b4816157e1565b915050613962565b506139d38260028151811061296c5761296c6155fd565b6040840152509092915050565b60006139eb86611e10565b9050600080613a2483868015613a0a5750336001600160a01b038c1614155b8015613a1f5750336001600160a01b038d1614155b614613565b90925090506000613a358284615571565b600086815260f260205260409020805460ff191660011790559050613a598a61468e565b60f3546001600160a01b031663a9059cbb8b613a75848861555a565b6040518363ffffffff1660e01b8152600401613a929291906158af565b6020604051808303816000875af1158015613ab1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ad5919061553d565b613af15760405162461bcd60e51b8152600401610a18906158c8565b8115613ba35760f35460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb90613b2990339086906004016158af565b6020604051808303816000875af1158015613b48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b6c919061553d565b613ba35760405162461bcd60e51b815260206004820152600860248201526772656c617946656560c01b6044820152606401610a18565b6040805133815260208101869052908101829052606081018990526080810188905285906001600160a01b03808d1691908e16907f8f5fb725904dff7292d34df72f578088cca0aa71767d7d82fc40b1b786ef96a79060a00160405180910390a45050505050505050505050565b6000806001600160ff1b03831681613c2e60ff86901c601b615571565b9050613c3c87828885614780565b935093505050935093915050565b6000816004811115613c5e57613c5e615ab3565b1415613c675750565b6001816004811115613c7b57613c7b615ab3565b1415613cc45760405162461bcd60e51b815260206004820152601860248201527745434453413a20696e76616c6964207369676e617475726560401b6044820152606401610a18565b6002816004811115613cd857613cd8615ab3565b1415613d265760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610a18565b6003816004811115613d3a57613d3a615ab3565b14156110675760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610a18565b6001600160a01b038316613dda5760405162461bcd60e51b815260206004820152600e60248201526d1a5b9d985b1a59081d185c99d95d60921b6044820152606401610a18565b60008111613e225760405162461bcd60e51b81526020600482015260156024820152741a5b9d985b1a59081d185c99d95d10da185a5b9259605a1b6044820152606401610a18565b613e2f620151804261555a565b60fe541015613e42574260fe55600060ff555b613e4f620151804261555a565b6001600160a01b038516600090815261010060205260409020541015613e90576001600160a01b038416600090815261010060205260408120428155600101555b600080613e9d8685610c59565b91509150818190613ec15760405162461bcd60e51b8152600401610a189190615ac9565b508360fe6001016000828254613ed79190615571565b90915550506001600160a01b0386166000908152610100602052604081206001018054869290613f08908490615571565b9091555050505050505050565b613f1e816130a2565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060613f608361241a565b613fbb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610a18565b600080846001600160a01b031684604051613fd69190615adc565b600060405180830381855af49150503d8060008114614011576040519150601f19603f3d011682016040523d82523d6000602084013e614016565b606091505b50915091506128658282604051806060016040528060278152602001615b436027913961483a565b805160009061404f57506000919050565b6020820151805160001a9060c082101561406d575060009392505050565b5060019392505050565b8051600090811a60808110156140905750600092915050565b60b88110806140ab575060c081108015906140ab575060f881105b156140b95750600192915050565b60c08110156140e6576140ce600160b86153c4565b6140db9060ff168261555a565b612c15906001615571565b6140ce600160f86153c4565b8051805160208201516000929161410891615571565b836020015110915050919050565b80516000908190811a608081101561413157600191506141b8565b60b88110156141575761414560808261555a565b614150906001615571565b91506141b8565b60c08110156141845760b78103600185019450806020036101000a855104600182018101935050506141b8565b60f88110156141985761414560c08261555a565b60f78103600185019450806020036101000a855104600182018101935050505b5092915050565b60008060006141d18460200151614077565b905060008185602001516141e59190615571565b905060008286600001516141f9919061555a565b9196919550909350505050565b6060600061421560208561550c565b90506000614224602086615aee565b61422f9060086154d7565b61423b9061010061555a565b9050602060008080886001600160401b0381111561425b5761425b6148dc565b6040519080825280601f01601f191660200182016040528015614285576020820181803683370190505b5090508a8a01915087156142af57818401516001600160fc1b031681850152602090930192600192505b825b868110156142cf5782850151828601526020909401936001016142b1565b5083820151851c851b84820152505050505050949350505050565b60606000825160026142fc91906154d7565b90506000816001600160401b03811115614318576143186148dc565b6040519080825280601f01601f191660200182016040528015614342576020820181803683370190505b50905060005b84518110156115705760008061438c878481518110614369576143696155fd565b01602001516001600160f81b031916600481901c916001600160fc1b0390911690565b9092509050818461439e8560026154d7565b815181106143ae576143ae6155fd565b60200101906001600160f81b031916908160001a90535080846143d28560026154d7565b6143dd906001615571565b815181106143ed576143ed6155fd565b60200101906001600160f81b031916908160001a90535050508080614411906157e1565b915050614348565b6060600060018351600261442d91906154d7565b614437919061555a565b90506000816001600160401b03811115614453576144536148dc565b6040519080825280601f01601f19166020018201604052801561447d576020820181803683370190505b50905083600081518110614493576144936155fd565b602001015160f81c60f81b816000815181106144b1576144b16155fd565b60200101906001600160f81b031916908160001a90535060015b8451811015611570576000806144ec878481518110614369576143696155fd565b9092509050818460016145008660026154d7565b61450a919061555a565b8151811061451a5761451a6155fd565b60200101906001600160f81b031916908160001a905350808461453e8560026154d7565b8151811061454e5761454e6155fd565b60200101906001600160f81b031916908160001a90535050508080614572906157e1565b9150506144cb565b8061458457505050565b602081106145bc578251825261459b602084615571565b92506145a8602083615571565b91506145b560208261555a565b9050614584565b8015611ecd57600060016145d183602061555a565b6145dd906101006154cb565b6145e7919061555a565b84518451821691191617835250505050565b805160009060151461460a57600080fd5b6136ea826132b2565b600080600061271060f6600201548661462c91906154d7565b614636919061550c565b60f65490915081101561464b5760f65461464d565b805b60f7549091508111156146625760f754614664565b805b905061467160028261550c565b90508084614680576000614682565b815b92509250509250929050565b610101546001600160a01b0316158015906147185750610101546040516374bf77e960e11b81526001600160a01b039091169063e97eefd2906146d5908490600401614dfb565b6020604051808303816000875af11580156146f4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614718919061553d565b1561106757610101546040516306ee3b9f60e31b81526001600160a01b0390911690633771dcf89061474e908490600401614dfb565b600060405180830381600087803b15801561476857600080fd5b505af1925050508015614779575060015b6110675750565b6000806fa2a8918ca85bafe22016d0b997e4df60600160ff1b038311156147ad5750600090506003614831565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015614801573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661482a57600060019250925050614831565b9150600090505b94509492505050565b60608315614849575081612c15565b612c15838381511561485e5781518083602001fd5b8060405162461bcd60e51b8152600401610a189190615ac9565b604051806060016040528060006001600160a01b0316815260200160608152602001606081525090565b604051806040016040528060008152602001600081525090565b60405180604001604052806148cf6148a2565b8152602001600081525090565b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b0381118282101715614914576149146148dc565b60405290565b60405160a081016001600160401b0381118282101715614914576149146148dc565b60405160c081016001600160401b0381118282101715614914576149146148dc565b604051601f8201601f191681016001600160401b0381118282101715614986576149866148dc565b604052919050565b60006001600160401b038211156149a7576149a76148dc565b5060051b60200190565b6001600160a01b038116811461106757600080fd5b600082601f8301126149d757600080fd5b813560206149ec6149e78361498e565b61495e565b82815260059290921b84018101918181019086841115614a0b57600080fd5b8286015b84811015614a2f578035614a22816149b1565b8352918301918301614a0f565b509695505050505050565b803563ffffffff81168114614a4e57600080fd5b919050565b600060608284031215614a6557600080fd5b614a6d6148f2565b905081358152602082013560208201526040820135604082015292915050565b801515811461106757600080fd5b600060a08284031215614aad57600080fd5b614ab561491a565b9050813581526020820135602082015260408201356040820152606082013560608201526080820135614ae781614a8d565b608082015292915050565b8035614a4e816149b1565b60008060008060008060008060006101e08a8c031215614b1c57600080fd5b89356001600160401b0380821115614b3357600080fd5b614b3f8d838e016149c6565b9a5060208c0135995060408c0135915080821115614b5c57600080fd5b50614b698c828d016149c6565b975050614b7860608b01614a3a565b955060808a0135614b88816149b1565b9450614b978b60a08c01614a53565b9350614ba78b6101008c01614a9b565b92506101a08a0135614bb8816149b1565b9150614bc76101c08b01614af2565b90509295985092959850929598565b600060208284031215614be857600080fd5b5035919050565b600060a08284031215614c0157600080fd5b612c158383614a9b565b60008060408385031215614c1e57600080fd5b8235614c29816149b1565b946020939093013593505050565b60005b83811015614c52578181015183820152602001614c3a565b838111156131615750506000910152565b60008151808452614c7b816020860160208601614c37565b601f01601f19169290920160200192915050565b82151581526040602082015260006126d76040830184614c63565b600060208284031215614cbc57600080fd5b8135612c15816149b1565b60008083601f840112614cd957600080fd5b5081356001600160401b03811115614cf057600080fd5b6020830191508360208260051b8501011115610f9a57600080fd5b600080600060408486031215614d2057600080fd5b8335925060208401356001600160401b03811115614d3d57600080fd5b614d4986828701614cc7565b9497909650939450505050565b6000602080830181845280855180835260408601915060059250604081841b8701018488016000805b84811015614dec57898403603f19018652825180518086529089019089860190808a1b87018b01855b82811015614dd657601f19898303018452614dc4828651614c63565b948d0194938d01939150600101614da8565b50988b0198965050509288019250600101614d7f565b50919998505050505050505050565b6001600160a01b0391909116815260200190565b600082601f830112614e2057600080fd5b81356001600160401b03811115614e3957614e396148dc565b614e4c601f8201601f191660200161495e565b818152846020838601011115614e6157600080fd5b816020850160208301376000918101602001919091529392505050565b60008060408385031215614e9157600080fd5b8235614e9c816149b1565b915060208301356001600160401b03811115614eb757600080fd5b614ec385828601614e0f565b9150509250929050565b600082601f830112614ede57600080fd5b81356020614eee6149e78361498e565b82815260059290921b84018101918181019086841115614f0d57600080fd5b8286015b84811015614a2f5780356001600160401b03811115614f305760008081fd5b614f3e8986838b0101614e0f565b845250918301918301614f11565b600060a08284031215614f5e57600080fd5b614f6661491a565b82358152905060208201356001600160401b0380821115614f8657600080fd5b614f9285838601614e0f565b60208401526040840135915080821115614fab57600080fd5b614fb785838601614ecd565b6040840152606084013560608401526080840135915080821115614fda57600080fd5b50614fe7848285016149c6565b60808301525092915050565b6000602080838503121561500657600080fd5b82356001600160401b038082111561501d57600080fd5b818501915085601f83011261503157600080fd5b813561503f6149e78261498e565b81815260059190911b8301840190848101908883111561505e57600080fd5b8585015b838110156150965780358581111561507a5760008081fd5b6150888b89838a0101614f4c565b845250918601918601615062565b5098975050505050505050565b9283526020830191909152604082015260600190565b6000606082840312156150cb57600080fd5b612c158383614a53565b6000602082840312156150e757600080fd5b81356001600160401b038111156150fd57600080fd5b6126d7848285016149c6565b60008083601f84011261511b57600080fd5b5081356001600160401b0381111561513257600080fd5b602083019150836020828501011115610f9a57600080fd5b6000806000806060858703121561516057600080fd5b843561516b816149b1565b93506020850135925060408501356001600160401b0381111561518d57600080fd5b61519987828801615109565b95989497509550505050565b600080600080604085870312156151bb57600080fd5b84356001600160401b03808211156151d257600080fd5b6151de88838901614cc7565b909650945060208701359150808211156151f757600080fd5b5061519987828801614cc7565b60006020828403121561521657600080fd5b612c1582614a3a565b6000806040838503121561523257600080fd5b50508035926020909101359150565b60008060006060848603121561525657600080fd5b8335615261816149b1565b95602085013595506040909401359392505050565b6000806000806000806080878903121561528f57600080fd5b863595506020870135945060408701356001600160401b03808211156152b457600080fd5b6152c08a838b01614cc7565b909650945060608901359150808211156152d957600080fd5b506152e689828a01615109565b979a9699509497509295939492505050565b6000806000806000806080878903121561531157600080fd5b86356001600160401b038082111561532857600080fd5b9088019060a0828b03121561533c57600080fd5b909650602088013595506040880135908082111561535957600080fd5b6153658a838b01614cc7565b9096509450606089013591508082111561537e57600080fd5b506152e689828a01614cc7565b60006020828403121561539d57600080fd5b815160ff81168114612c1557600080fd5b634e487b7160e01b600052601160045260246000fd5b600060ff821660ff8416808210156153de576153de6153ae565b90039392505050565b600181815b80851115615422578160001904821115615408576154086153ae565b8085161561541557918102915b93841c93908002906153ec565b509250929050565b600082615439575060016136ea565b81615446575060006136ea565b816001811461545c576002811461546657615482565b60019150506136ea565b60ff841115615477576154776153ae565b50506001821b6136ea565b5060208310610133831016604e8410600b84101617156154a5575081810a6136ea565b6154af83836153e7565b80600019048211156154c3576154c36153ae565b029392505050565b6000612c15838361542a565b60008160001904831182151516156154f1576154f16153ae565b500290565b634e487b7160e01b600052601260045260246000fd5b60008261551b5761551b6154f6565b500490565b60006020828403121561553257600080fd5b8151612c15816149b1565b60006020828403121561554f57600080fd5b8151612c1581614a8d565b60008282101561556c5761556c6153ae565b500390565b60008219821115615584576155846153ae565b500190565b6020808252602c90820152600080516020615b0383398151915260408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c90820152600080516020615b0383398151915260408201526b6163746976652070726f787960a01b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b60008235605e1983360301811261562957600080fd5b9190910192915050565b6000606080833603121561564657600080fd5b61564e6148f2565b83356001600160401b038082111561566557600080fd5b9085019036601f83011261567857600080fd5b813560206156886149e78361498e565b82815260059290921b840181019181810190368411156156a757600080fd5b8286015b84811015615783578035868111156156c35760008081fd5b870160c036829003601f19018113156156dc5760008081fd5b6156e461493c565b8683013581526040808401358a8111156156fe5760008081fd5b61570c368a83880101614e0f565b89840152508c8401358a8111156157235760008081fd5b615731368a83880101614ecd565b8284015250506080808401358d83015260a080850135828401528385013593508a84111561576157600091508182fd5b61576f368a86880101614e0f565b9083015250855250509183019183016156ab565b508652508781013595508286111561579a57600080fd5b6157a636878a01614e0f565b8186015250505050604084013560408201528092505050919050565b8381528260208201526060604082015260006128656060830184614c63565b60006000198214156157f5576157f56153ae565b5060010190565b84815260006020858184015260408301855182870160005b828110156158395781516001600160a01b031684529284019290840190600101615814565b50505093845290920195945050505050565b6000806040838503121561585e57600080fd5b505080516020909101519092909150565b6020808252600d908201526c189b1bd8dac81d1bdbc81bdb19609a1b604082015260600190565b6000602082840312156158a857600080fd5b5051919050565b6001600160a01b03929092168252602082015260400190565b6020808252600890820152673a3930b739b332b960c11b604082015260600190565b6000806000606084860312156158ff57600080fd5b833592506020840135615911816149b1565b9150604084013561592181614a8d565b809150509250925092565b60008083128015600160ff1b85018412161561594a5761594a6153ae565b6001600160ff1b0384018313811615615965576159656153ae565b50500390565b6000600160ff1b821415615981576159816153ae565b506000190190565b8183823760009101908152919050565b6000808335601e198436030181126159b057600080fd5b8301803591506001600160401b038211156159ca57600080fd5b602001915036819003821315610f9a57600080fd5b6000808335601e198436030181126159f657600080fd5b8301803591506001600160401b03821115615a1057600080fd5b6020019150600581901b3603821315610f9a57600080fd5b60006136ea3683614f4c565b600080600060608486031215615a4957600080fd5b8351925060208401519150604084015161592181614a8d565b604080825283519082018190526000906020906060840190828701845b82811015615aa45781516001600160a01b031684529284019290840190600101615a7f565b50505092019290925292915050565b634e487b7160e01b600052602160045260246000fd5b602081526000612c156020830184614c63565b60008251615629818460208701614c37565b600082615afd57615afd6154f6565b50069056fe46756e6374696f6e206d7573742062652063616c6c6564207468726f75676820360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c65644246d22454f5bd543c70e6ffcca20eed2dcf09d3beef6d39e415385538b02d0a7f7083e3a64a44d5c6f241eebc1447aa155764f7f6eb1508b4ef82dd555e9d68a26469706673582212203e8a490ecc22561ac915c0d6414d943c7323ae2eec09255b92f854e43bb1223664736f6c634300080a0033",
  "deployedBytecode": "0x60806040526004361061022e5760003560e01c8063183d4c8f146102335780632784b2381461025557806329b70872146102885780633095634a146102a85780633659cfe6146102d6578063370a4250146102f65780633811da501461030c5780633886d21e146103395780633cca046d1461036b5780633e6326fc14610398578063425cfb53146103c65780634406acdd146104065780634c83f9e4146104335780634f1ef2861461045757806352d1902d1461046a5780635c8430601461047f5780635d593f8d1461049f578063715018a6146104b55780637b0240c0146104ca57806382dc737d146104f85780638da5cb5b14610518578063930af3541461052d57806394cb97991461054d578063a4c0ed361461056d578063a8b8be181461058d578063a976acf3146105ad578063a9c4b87e146105cd578063af17773c146105ee578063b1228a6314610663578063b2f7667f14610683578063be58d44d146106b3578063c2b6b58c146106e3578063c3e6978f146106fd578063c4a6ee1e14610732578063c562887d14610752578063c6dd812f14610772578063c8edb049146107c6578063ce2b2cf0146107f3578063d422794714610813578063d8b31c7714610848578063dd99014b14610868578063de55abc31461087e578063de5f72fd1461089e578063e00dd161146108bf578063e39b32e8146108d6578063ee383937146108f6578063f2fde38b14610916578063f39e17d514610936578063f3fef3a314610958575b600080fd5b34801561023f57600080fd5b5061025361024e366004614afd565b610978565b005b34801561026157600080fd5b50610275610270366004614bd6565b610b29565b6040519081526020015b60405180910390f35b34801561029457600080fd5b506102536102a3366004614bef565b610c1d565b3480156102b457600080fd5b506102c86102c3366004614c0b565b610c59565b60405161027f929190614c8f565b3480156102e257600080fd5b506102536102f1366004614caa565b610fa1565b34801561030257600080fd5b5061027560de5481565b34801561031857600080fd5b50610275610327366004614caa565b60df6020526000908152604090205481565b34801561034557600080fd5b5060e0546103569063ffffffff1681565b60405163ffffffff909116815260200161027f565b34801561037757600080fd5b5061038b610386366004614d0b565b61106a565b60405161027f9190614d56565b3480156103a457600080fd5b50610102546103b9906001600160a01b031681565b60405161027f9190614dfb565b3480156103d257600080fd5b506103f66103e1366004614bd6565b60f26020526000908152604090205460ff1681565b604051901515815260200161027f565b34801561041257600080fd5b50610275610421366004614caa565b60016020526000908152604090205481565b34801561043f57600080fd5b5060e05461035690600160201b900463ffffffff1681565b610253610465366004614e7e565b611578565b34801561047657600080fd5b50610275611632565b34801561048b57600080fd5b5061025361049a366004614ff3565b6116e0565b3480156104ab57600080fd5b5061027560035481565b3480156104c157600080fd5b506102536119a9565b3480156104d657600080fd5b5060f65460f75460f8546104e992919083565b60405161027f939291906150a3565b34801561050457600080fd5b506102536105133660046150b9565b6119bd565b34801561052457600080fd5b506103b96119db565b34801561053957600080fd5b506102536105483660046150d5565b6119ea565b34801561055957600080fd5b50610253610568366004614caa565b6119fb565b34801561057957600080fd5b506103f661058836600461514a565b611b06565b34801561059957600080fd5b506103f66105a83660046150d5565b611b83565b3480156105b957600080fd5b506102536105c83660046151a5565b611d58565b3480156105d957600080fd5b506102756105e8366004614bd6565b50600190565b3480156105fa57600080fd5b50610639610609366004614bd6565b60f160205260009081526040902080546001909101546001600160801b0380831692600160801b90048116911683565b604080516001600160801b039485168152928416602084015292169181019190915260600161027f565b34801561066f57600080fd5b5061025361067e366004615204565b611de2565b34801561068f57600080fd5b5060fe5460ff5461069e919082565b6040805192835260208301919091520161027f565b3480156106bf57600080fd5b506103f66106ce366004614bd6565b60026020526000908152604090205460ff1681565b3480156106ef57600080fd5b5060f5546103f69060ff1681565b34801561070957600080fd5b5061027561071836600461521f565b600060208181529281526040808220909352908152205481565b34801561073e57600080fd5b5061027561074d366004614bd6565b611e10565b34801561075e57600080fd5b5061025361076d366004615241565b611ebe565b34801561077e57600080fd5b5060f95460fa5460fb5460fc5460fd5461079c949392919060ff1685565b6040805195865260208601949094529284019190915260608301521515608082015260a00161027f565b3480156107d257600080fd5b506102756107e1366004614caa565b60f46020526000908152604090205481565b3480156107ff57600080fd5b5061025361080e366004615276565b611ed2565b34801561081f57600080fd5b5061069e61082e366004614caa565b610100602052600090815260409020805460019091015482565b34801561085457600080fd5b50610253610863366004614caa565b612188565b34801561087457600080fd5b5061027560045481565b34801561088a57600080fd5b506102536108993660046152f8565b6121b3565b3480156108aa57600080fd5b50610101546103b9906001600160a01b031681565b3480156108cb57600080fd5b506102756101035481565b3480156108e257600080fd5b506102536108f1366004615241565b61228a565b34801561090257600080fd5b5060f3546103b9906001600160a01b031681565b34801561092257600080fd5b50610253610931366004614caa565b61229a565b34801561094257600080fd5b50610275600080516020615b6a83398151915281565b34801561096457600080fd5b50610253610973366004614c0b565b612310565b601554610100900460ff16158080156109985750601554600160ff909116105b806109b957506109a73061241a565b1580156109b9575060155460ff166001145b610a215760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6015805460ff191660011790558015610a44576015805461ff0019166101001790555b610a508a8a8a8a612429565b60f380546001600160a01b03199081166001600160a01b0389811691909117909255865160f65560208088015160f75560408089015160f855875160f9559087015160fa5586015160fb55606086015160fc55608086015160fd805460ff19169115159190911790556101018054821686841617905561010280549091169184169190911790558015610b1d576015805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050505050565b60008060f360009054906101000a90046001600160a01b03166001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b7f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ba3919061538b565b905060128160ff161015610be0576000610bbe8260126153c4565b60ff169050610bce81600a6154cb565b610bd890856154d7565b925050610c17565b60128160ff161115610c13576000610bf96012836153c4565b60ff169050610c0981600a6154cb565b610bd8908561550c565b8291505b50919050565b610c2561246d565b805160f955602081015160fa55604081015160fb55606081015160fc556080015160fd805460ff1916911515919091179055565b60f55460009060609060ff1615610c9157505060408051808201909152600681526518db1bdcd95960d21b6020820152600090610f9a565b60fc54831015610cc55750506040805180820190915260098152681b5a5b905b5bdd5b9d60ba1b6020820152600090610f9a565b60fa54831115610cf75750506040805180820190915260078152661d1e131a5b5a5d60ca1b6020820152600090610f9a565b60fd5460ff168015610d145750610102546001600160a01b031615155b15610e55576101025460405163bf40fac160e01b81526020600482015260086024820152674944454e5449545960c01b60448201526000916001600160a01b03169063bf40fac190606401602060405180830381865afa158015610d7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610da09190615520565b90506001600160a01b03811615610e5357604051633af32abf60e01b81526001600160a01b03821690633af32abf90610ddd908890600401614dfb565b602060405180830381865afa158015610dfa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e1e919061553d565b610e5357505060408051808201909152600f81526e1b9bdd081dda1a5d195b1a5cdd1959608a1b602082015260009150610f9a565b505b6001600160a01b03841660009081526101006020526040902060010154610e7f620151804261555a565b6001600160a01b038616600090815261010060205260409020541015610ea6575082610eb3565b610eb08482615571565b90505b60fb54811115610ef05750506040805180820190915260118152701858d8dbdd5b9d11185a5b1e531a5b5a5d607a1b602082015260009150610f9a565b610efd620151804261555a565b60fe541015610f415760f954841115610f3c57505060408051808201909152600a81526919185a5b1e531a5b5a5d60b21b602082015260009150610f9a565b610f84565b60f95460ff54610f52908690615571565b1115610f8457505060408051808201909152600a81526919185a5b1e531a5b5a5d60b21b602082015260009150610f9a565b5050604080516020810190915260008152600191505b9250929050565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161415610fea5760405162461bcd60e51b8152600401610a1890615589565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661101c6124cc565b6001600160a01b0316146110425760405162461bcd60e51b8152600401610a18906155c3565b61104b816124e8565b60408051600080825260208201909252611067918391906124f0565b50565b6060816001600160401b03811115611084576110846148dc565b6040519080825280602002602001820160405280156110b757816020015b60608152602001906001900390816110a25790505b50905060005b828110156115705760008484838181106110d9576110d96155fd565b90506020028101906110eb9190615613565b6110f490615633565b6000878152602081815260408083208185015184528252909120548183015180519201919091209192509081146111625760405162461bcd60e51b81526020600482015260126024820152710d2dcecc2d8d2c840c4d8dec6d640d0c2e6d60731b6044820152606401610a18565b600061117288846020015161265b565b8351519091506001600160401b0381111561118f5761118f6148dc565b6040519080825280602002602001820160405280156111c257816020015b60608152602001906001900390816111ad5790505b508585815181106111d5576111d56155fd565b602002602001018190525060005b835151811015611559576000898486600001518481518110611207576112076155fd565b602002602001015160a00151604051602001611225939291906157c2565b60408051601f1981840301815291815281516020928301206000818152600290935291205490915060ff161515600114156112c357604051806040016040528060148152602001731c9958d95a5c1d08185b1c9958591e481d5cd95960621b815250878781518110611299576112996155fd565b602002602001015183815181106112b2576112b26155fd565b602002602001018190525050611547565b6000818152600260205260409020805460ff1916600117905584518051839081106112f0576112f06155fd565b602002602001015160600151600014801561132a5750845180518390811061131a5761131a6155fd565b6020026020010151608001516000145b6113685760405162461bcd60e51b815260206004820152600f60248201526e0dcdee840e6e8c2e4e840d2dcc8caf608b1b6044820152606401610a18565b828560000151838151811061137f5761137f6155fd565b602002602001015160000151146113cf5760405162461bcd60e51b81526020600482015260146024820152730e4cac6cad2e0e8a4dedee840dad2e6dac2e8c6d60631b6044820152606401610a18565b6113f5856000015183815181106113e8576113e86155fd565b60200260200101516126df565b6114385760405162461bcd60e51b815260206004820152601460248201527372656365697074206e6f7420696e20626c6f636b60601b6044820152606401610a18565b60408501516001111561147f5760405162461bcd60e51b815260206004820152600f60248201526e1c9958d95a5c1d081d1bdbc81bdb19608a1b6044820152606401610a18565b60006114b98b87604001516114b4896000015187815181106114a3576114a36155fd565b602002602001015160a00151612896565b612a6b565b9050806114ec576040518060400160405280600e81526020016d195e1958dd5d194819985a5b195960921b81525061150e565b60405180604001604052806008815260200167195e1958dd5d195960c21b8152505b888881518110611520576115206155fd565b60200260200101518481518110611539576115396155fd565b602002602001018190525050505b80611551816157e1565b9150506111e3565b505050508080611568906157e1565b9150506110bd565b509392505050565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156115c15760405162461bcd60e51b8152600401610a1890615589565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166115f36124cc565b6001600160a01b0316146116195760405162461bcd60e51b8152600401610a18906155c3565b611622826124e8565b61162e828260016124f0565b5050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146116cd5760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c6044820152771b1959081d1a1c9bdd59da0819195b1959d85d1958d85b1b60421b6064820152608401610a18565b50600080516020615b2383398151915290565b60005b815181101561162e576000828281518110611700576117006155fd565b602090810291909101810151808201518051908301208151608083015160608401516040519496509294607a83149460009461174294889490939092016157fc565b60405160208183030381529060405280519060200120905060008460400151516001600160401b03811115611779576117796148dc565b6040519080825280602002602001820160405280156117a2578160200160208202803683370190505b50905060005b85604001515181101561189457600080876040015183815181106117ce576117ce6155fd565b60200260200101518060200190518101906117e9919061584b565b9150915061184d611846866040517b0ca2ba3432b932bab69029b4b3b732b21026b2b9b9b0b3b29d05199960211b6020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b8383612c1c565b84848151811061185f5761185f6155fd565b60200260200101906001600160a01b031690816001600160a01b0316815250505050808061188c906157e1565b9150506117a8565b5061189e81611b83565b6118dc5760405162461bcd60e51b815260206004820152600f60248201526e696e76616c6964207369676e65727360881b6044820152606401610a18565b60006118f086600001518760200151612c39565b905060018110156119135760405162461bcd60e51b8152600401610a189061586f565b8551600090815260208181526040808320848452909152902085905583801561194157506000866080015151115b801561194f57506004548110155b156119665761196686608001518760600151612cbb565b8551604051600080516020615b8a8339815191529161198891849089906150a3565b60405180910390a150505050505080806119a1906157e1565b9150506116e3565b6119b161246d565b6119bb6000612d66565b565b6119c561246d565b805160f655602081015160f7556040015160f855565b60ac546001600160a01b031690565b6119f261246d565b61106781612db8565b611a0361246d565b6040516370a0823160e01b81526001600160a01b0382169063a9059cbb90339083906370a0823190611a39903090600401614dfb565b602060405180830381865afa158015611a56573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a7a9190615896565b6040518363ffffffff1660e01b8152600401611a979291906158af565b6020604051808303816000875af1158015611ab6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ada919061553d565b611af65760405162461bcd60e51b8152600401610a18906158c8565b5060f5805460ff19166001179055565b60f3546000906001600160a01b03163314611b4f5760405162461bcd60e51b81526020600482015260096024820152683737ba103a37b5b2b760b91b6044820152606401610a18565b60008080611b5f858701876158ea565b925092509250611b758883858a85156001612e4e565b506001979650505050505050565b60008080805b8451811015611d4d576000611b9f60018361592c565b90505b60008112611c3d57858181518110611bbc57611bbc6155fd565b60200260200101516001600160a01b0316868381518110611bdf57611bdf6155fd565b60200260200101516001600160a01b03161415611c2b5760405162461bcd60e51b815260206004820152600a602482015269323ab81039b4b3b732b960b11b6044820152606401610a18565b80611c358161596b565b915050611ba2565b5060045460016000878481518110611c5757611c576155fd565b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020541415611c945782611c90816157e1565b9350505b60de5460df6000878481518110611cad57611cad6155fd565b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020541415611cea5781611ce6816157e1565b9250505b60e05463ffffffff1682148015611d2b575060e054600354606491611d1d91600160201b90910463ffffffff16906154d7565b611d27919061550c565b8310155b15611d3b57506001949350505050565b80611d45816157e1565b915050611b89565b506000949350505050565b611d6061246d565b60005b83811015611ddb57828282818110611d7d57611d7d6155fd565b9050602002013560f46000878785818110611d9a57611d9a6155fd565b9050602002016020810190611daf9190614caa565b6001600160a01b0316815260208101919091526040016000205580611dd3816157e1565b915050611d63565b5050505050565b611dea61246d565b60e0805463ffffffff909216600160201b0263ffffffff60201b19909216919091179055565b60008060f360009054906101000a90046001600160a01b03166001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e8a919061538b565b905060128160ff161015611ea5576000610bf98260126153c4565b60128160ff161115610c13576000610bbe6012836153c4565b611ecd33848484600080612e4e565b505050565b60008681526020818152604080832088845290915290819020549051611efb9084908490615989565b60405180910390208114611f4b5760405162461bcd60e51b815260206004820152601760248201527634b73b30b634b21031b434b632103936382432b0b232b960491b6044820152606401610a18565b6000611f8d8885858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612ff992505050565b91505060005b8581101561217d576000878783818110611faf57611faf6155fd565b9050602002810190611fc19190615999565b604051611fcf929190615989565b604051809103902090508083146120155760405162461bcd60e51b815260206004820152600a6024820152691b9bdd081c185c995b9d60b21b6044820152606401610a18565b60008061207a8c8b8b8781811061202e5761202e6155fd565b90506020028101906120409190615999565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612ff992505050565b91509150612086600190565b8210156120a55760405162461bcd60e51b8152600401610a189061586f565b60008c81526020818152604080832085845290915290205415806120df575060008c81526020818152604080832085845290915290205483145b61211e5760405162461bcd60e51b815260206004820152601060248201526f185b1c9958591e481d995c9a599a595960821b6044820152606401610a18565b60008c81526020818152604080832085845290915290819020849055519094508490600080516020615b8a8339815191529061215f908e90859087906150a3565b60405180910390a15050508080612175906157e1565b915050611f93565b505050505050505050565b61219061246d565b61010180546001600160a01b0319166001600160a01b0392909216919091179055565b60006121c260408801886159df565b9050111561225a57604080516001808252818301909252600091816020015b6122136040518060a0016040528060008152602001606081526020016060815260200160008152602001606081525090565b8152602001906001900390816121e157905050905061223187615a28565b81600081518110612244576122446155fd565b6020026020010181905250612258816116e0565b505b821561227557612275863586868661080e60208c018c615999565b6122818635838361106a565b50505050505050565b611ecd3384848460016000612e4e565b6122a261246d565b6001600160a01b0381166123075760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a18565b61106781612d66565b61231861246d565b8061238d576040516370a0823160e01b81526001600160a01b038316906370a0823190612349903090600401614dfb565b602060405180830381865afa158015612366573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061238a9190615896565b90505b60405163a9059cbb60e01b81526001600160a01b0383169063a9059cbb906123bb90339085906004016158af565b6020604051808303816000875af11580156123da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123fe919061553d565b61162e5760405162461bcd60e51b8152600401610a18906158c8565b6001600160a01b03163b151590565b61243161302e565b61243b8484612cbb565b61244482612db8565b60e0805463ffffffff909216600160201b0263ffffffff60201b19909216919091179055505050565b336124766119db565b6001600160a01b0316146119bb5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a18565b600080516020615b23833981519152546001600160a01b031690565b61106761246d565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff161561252357611ecd836130a2565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561257d575060408051601f3d908101601f1916820190925261257a91810190615896565b60015b6125e05760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610a18565b600080516020615b23833981519152811461264f5760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610a18565b50611ecd83838361313c565b60008061266f61266a84613167565b61318d565b905061267a816131de565b50612684816131de565b5061268e816131de565b50612698816131de565b508361a4ec1415806126b65750600a6126b4826000015161322f565b115b156126c6576126c4816131de565b505b6126d76126d2826131de565b6132b2565b949350505050565b60008082604001518360800151815181106126fc576126fc6155fd565b60200260200101519050600061271461266a83613167565b905083606001516000141561278d57835182516020840120146127885760405162461bcd60e51b815260206004820152602660248201527f7665726966795472696550726f6f6620726f6f74206e6f6465206861736820696044820152651b9d985b1a5960d21b6064820152608401610a18565b612842565b6020825110156127f55760006127a56126d2836131de565b855190915081146127ef5760405162461bcd60e51b81526020600482015260146024820152733b32b934b33caa3934b2a83937b7b3101e10199960611b6044820152606401610a18565b50612842565b835182516020840120146128425760405162461bcd60e51b81526020600482015260146024820152737665726966795472696550726f6f6620656c736560601b6044820152606401610a18565b6000612851826000015161322f565b9050806011141561286e57612865856132ff565b95945050505050565b8060021415612881576128658286613437565b60a085015151611d4d57506001949350505050565b6128c46040518060800160405280600060ff1681526020016000815260200160608152602001606081525090565b8151600090607f60f81b90849083906128df576128df6155fd565b01602001516001600160f81b031916116128f7575060015b600061290b61290685846136f0565b613730565b905061293081600081518110612923576129236155fd565b60200260200101516132b2565b60ff168352805161294e9082906001908110612923576129236155fd565b60208401528051612979908290600290811061296c5761296c6155fd565b6020026020010151613839565b836040018190525060006129a682600381518110612999576129996155fd565b6020026020010151613730565b905080516001600160401b038111156129c1576129c16148dc565b6040519080825280602002602001820160405280156129fa57816020015b6129e7614878565b8152602001906001900390816129df5790505b50606085015260005b8151811015612a6257612a2e828281518110612a2157612a216155fd565b60200260200101516138b6565b85606001518281518110612a4457612a446155fd565b60200260200101819052508080612a5a906157e1565b915050612a03565b50505050919050565b6000816000015160ff16600114612a8457506000612c15565b6000805b836060015151811015612c1157600084606001518281518110612aad57612aad6155fd565b602002602001015190508560f4600083600001516001600160a01b03166001600160a01b03168152602001908152602001600020541115612aee5750612bff565b80516001600160a01b0316600090815260f460205260409020541580612b405750600080516020615b6a8339815191528160200151600081518110612b3557612b356155fd565b602002602001015114155b15612b4b5750612bff565b60008060008360400151806020019051810190612b689190615a34565b925092509250612b754690565b8314612b845750505050612bff565b60019550612bfa8460200151600181518110612ba257612ba26155fd565b602002602001015160001c8560200151600281518110612bc457612bc46155fd565b602002602001015160001c848d8d868a60200151600381518110612bea57612bea6155fd565b602002602001015160001c6139e0565b505050505b80612c09816157e1565b915050612a88565b5090505b9392505050565b6000806000612c2c868686613c11565b91509150612c1181613c4a565b600080612c4861266a84613167565b9050612c53816131de565b50612c5d816131de565b50612c67816131de565b50612c71816131de565b50612c7b816131de565b50612c85816131de565b508361a4ec141580612ca35750600a612ca1826000015161322f565b115b156126c657612cb1816131de565b506126c4816131de565b60005b8251811015612d1d578160016000858481518110612cde57612cde6155fd565b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020819055508080612d15906157e1565b915050612cbe565b50600481905581516003556040517f27330b21e104b5b4f17c1f89b946c154b973ab51773ac9debf76b53bb57a194790612d5a9084908490615a62565b60405180910390a15050565b60ac80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60de8054906000612dc8836157e1565b919050555060005b8151811015612e315760de5460df6000848481518110612df257612df26155fd565b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020819055508080612e29906157e1565b915050612dd0565b505160e0805463ffffffff191663ffffffff909216919091179055565b612e5a86868587613d93565b80612f175760f3546040516323b872dd60e01b81526001600160a01b03888116600483015230602483015260448201869052909116906323b872dd906064016020604051808303816000875af1158015612eb8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612edc919061553d565b612f175760405162461bcd60e51b815260206004820152600c60248201526b7472616e7366657246726f6d60a01b6044820152606401610a18565b6000612f2284610b29565b9050868646878430426101036000815480929190612f3f906157e1565b90915550604080516001600160a01b03998a166020820152978916908801526060870195909552608086019390935260a085019190915290931660c083015260e08201929092526101008101919091526101200160408051601f19818403018152828252805160209182012088845290830184905285151591830191909152426060830152906001600160a01b0380891691908a1690600080516020615b6a8339815191529060800160405180910390a450505050505050565b600080600061300a61266a85613167565b90506130186126d2826131de565b91506130248585612c39565b9250509250929050565b601554610100900460ff166130995760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610a18565b6119bb33612d66565b6130ab8161241a565b61310d5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610a18565b600080516020615b2383398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b61314583613f15565b6000825111806131525750805b15611ecd576131618383613f55565b50505050565b61316f6148a2565b50604080518082019091528151815260209182019181019190915290565b6131956148bc565b61319e8261403e565b6131a757600080fd5b60006131b68360200151614077565b83602001516131c59190615571565b6040805180820190915293845260208401525090919050565b6131e66148a2565b6131ef826140f2565b6131f857600080fd5b6020820151600061320882614116565b90506132148183615571565b60209485015260408051808201909152908152928301525090565b805160009061324057506000919050565b6000806132508460200151614077565b846020015161325f9190615571565b90506000846000015185602001516132779190615571565b90505b808210156132a95761328b82614116565b6132959083615571565b9150826132a1816157e1565b93505061327a565b50909392505050565b8051600090158015906132c757508151602110155b6132d057600080fd5b6000806132dc846141bf565b8151919350915060208210156126d75760208290036101000a9004949350505050565b600080826040015183608001518151811061331c5761331c6155fd565b6020026020010151905082602001515183606001511061338557600061335961334761290684613167565b60108151811061296c5761296c6155fd565b90508360a00151805190602001208180519060200120141561337f575060019392505050565b5061341b565b600083602001518460600151815181106133a1576133a16155fd565b016020015160f81c905060006133cd6133bc61290685613167565b838151811061296c5761296c6155fd565b905080516000146134185760208101518552606085018051600191906133f4908390615571565b9052506080850180516001919061340c908390615571565b905250612865856126df565b50505b60a08301515161342e5750600192915050565b50600092915050565b60008061344b613446856131de565b613839565b9050600061345b613446866131de565b602083015190915060fc1c600281141561351f5760006001845161347f919061555a565b90506000613491856001846000614206565b905060006134aa88602001518960600151856000614206565b905084805190602001208860a00151805190602001201415613517578080519060200120828051906020012014156134eb57600196505050505050506136ea565b805160208201206134fb836142ea565b80519060200120141561351757600196505050505050506136ea565b5050506136cc565b80600314156135d557600061353984600086516001614206565b60208701516060880151815192935060009261356392919061355c90829061555a565b6000614206565b905083805190602001208760a001518051906020012014156135ce578080519060200120828051906020012014156135a3576001955050505050506136ea565b805160208201206135b383614419565b8051906020012014156135ce576001955050505050506136ea565b50506136cc565b8015806135e25750806001145b1561369457825160006135f88582846001614206565b9050600061361188602001518960600151856000614206565b905080805190602001208280519060200120148061364357508051602082012061363a836142ea565b80519060200120145b156135175760208501518852606088018051849190613663908390615571565b9052506080880180516001919061367b908390615571565b905250613687886126df565b96505050505050506136ea565b60405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b210383937b7b360991b6044820152606401610a18565b60a0850151516136e257600193505050506136ea565b600093505050505b92915050565b6136f86148a2565b602083016137068382615571565b90506040518060400160405280848651613720919061555a565b8152602001919091529392505050565b606061373b8261403e565b61374457600080fd5b600061374f8361322f565b90506000816001600160401b0381111561376b5761376b6148dc565b6040519080825280602002602001820160405280156137a457816020015b6137916148a2565b8152602001906001900390816137895790505b50905060006137b68560200151614077565b85602001516137c59190615571565b90506000805b8481101561382e576137dc83614116565b9150604051806040016040528083815260200184815250848281518110613805576138056155fd565b602090810291909101015261381a8284615571565b925080613826816157e1565b9150506137cb565b509195945050505050565b805160609061384757600080fd5b600080613853846141bf565b915091506000816001600160401b03811115613871576138716148dc565b6040519080825280601f01601f19166020018201604052801561389b576020820181803683370190505b509050602081016138ad84828561457a565b50949350505050565b6138be614878565b60006138c983613730565b90506138ee816000815181106138e1576138e16155fd565b60200260200101516145f9565b6001600160a01b0316825280516000906139159083906001908110612999576129996155fd565b905080516001600160401b03811115613930576139306148dc565b604051908082528060200260200182016040528015613959578160200160208202803683370190505b50602084015260005b81518110156139bc576000613982838381518110612923576129236155fd565b60001b9050808560200151838151811061399e5761399e6155fd565b602090810291909101015250806139b4816157e1565b915050613962565b506139d38260028151811061296c5761296c6155fd565b6040840152509092915050565b60006139eb86611e10565b9050600080613a2483868015613a0a5750336001600160a01b038c1614155b8015613a1f5750336001600160a01b038d1614155b614613565b90925090506000613a358284615571565b600086815260f260205260409020805460ff191660011790559050613a598a61468e565b60f3546001600160a01b031663a9059cbb8b613a75848861555a565b6040518363ffffffff1660e01b8152600401613a929291906158af565b6020604051808303816000875af1158015613ab1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ad5919061553d565b613af15760405162461bcd60e51b8152600401610a18906158c8565b8115613ba35760f35460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb90613b2990339086906004016158af565b6020604051808303816000875af1158015613b48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b6c919061553d565b613ba35760405162461bcd60e51b815260206004820152600860248201526772656c617946656560c01b6044820152606401610a18565b6040805133815260208101869052908101829052606081018990526080810188905285906001600160a01b03808d1691908e16907f8f5fb725904dff7292d34df72f578088cca0aa71767d7d82fc40b1b786ef96a79060a00160405180910390a45050505050505050505050565b6000806001600160ff1b03831681613c2e60ff86901c601b615571565b9050613c3c87828885614780565b935093505050935093915050565b6000816004811115613c5e57613c5e615ab3565b1415613c675750565b6001816004811115613c7b57613c7b615ab3565b1415613cc45760405162461bcd60e51b815260206004820152601860248201527745434453413a20696e76616c6964207369676e617475726560401b6044820152606401610a18565b6002816004811115613cd857613cd8615ab3565b1415613d265760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610a18565b6003816004811115613d3a57613d3a615ab3565b14156110675760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610a18565b6001600160a01b038316613dda5760405162461bcd60e51b815260206004820152600e60248201526d1a5b9d985b1a59081d185c99d95d60921b6044820152606401610a18565b60008111613e225760405162461bcd60e51b81526020600482015260156024820152741a5b9d985b1a59081d185c99d95d10da185a5b9259605a1b6044820152606401610a18565b613e2f620151804261555a565b60fe541015613e42574260fe55600060ff555b613e4f620151804261555a565b6001600160a01b038516600090815261010060205260409020541015613e90576001600160a01b038416600090815261010060205260408120428155600101555b600080613e9d8685610c59565b91509150818190613ec15760405162461bcd60e51b8152600401610a189190615ac9565b508360fe6001016000828254613ed79190615571565b90915550506001600160a01b0386166000908152610100602052604081206001018054869290613f08908490615571565b9091555050505050505050565b613f1e816130a2565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060613f608361241a565b613fbb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610a18565b600080846001600160a01b031684604051613fd69190615adc565b600060405180830381855af49150503d8060008114614011576040519150601f19603f3d011682016040523d82523d6000602084013e614016565b606091505b50915091506128658282604051806060016040528060278152602001615b436027913961483a565b805160009061404f57506000919050565b6020820151805160001a9060c082101561406d575060009392505050565b5060019392505050565b8051600090811a60808110156140905750600092915050565b60b88110806140ab575060c081108015906140ab575060f881105b156140b95750600192915050565b60c08110156140e6576140ce600160b86153c4565b6140db9060ff168261555a565b612c15906001615571565b6140ce600160f86153c4565b8051805160208201516000929161410891615571565b836020015110915050919050565b80516000908190811a608081101561413157600191506141b8565b60b88110156141575761414560808261555a565b614150906001615571565b91506141b8565b60c08110156141845760b78103600185019450806020036101000a855104600182018101935050506141b8565b60f88110156141985761414560c08261555a565b60f78103600185019450806020036101000a855104600182018101935050505b5092915050565b60008060006141d18460200151614077565b905060008185602001516141e59190615571565b905060008286600001516141f9919061555a565b9196919550909350505050565b6060600061421560208561550c565b90506000614224602086615aee565b61422f9060086154d7565b61423b9061010061555a565b9050602060008080886001600160401b0381111561425b5761425b6148dc565b6040519080825280601f01601f191660200182016040528015614285576020820181803683370190505b5090508a8a01915087156142af57818401516001600160fc1b031681850152602090930192600192505b825b868110156142cf5782850151828601526020909401936001016142b1565b5083820151851c851b84820152505050505050949350505050565b60606000825160026142fc91906154d7565b90506000816001600160401b03811115614318576143186148dc565b6040519080825280601f01601f191660200182016040528015614342576020820181803683370190505b50905060005b84518110156115705760008061438c878481518110614369576143696155fd565b01602001516001600160f81b031916600481901c916001600160fc1b0390911690565b9092509050818461439e8560026154d7565b815181106143ae576143ae6155fd565b60200101906001600160f81b031916908160001a90535080846143d28560026154d7565b6143dd906001615571565b815181106143ed576143ed6155fd565b60200101906001600160f81b031916908160001a90535050508080614411906157e1565b915050614348565b6060600060018351600261442d91906154d7565b614437919061555a565b90506000816001600160401b03811115614453576144536148dc565b6040519080825280601f01601f19166020018201604052801561447d576020820181803683370190505b50905083600081518110614493576144936155fd565b602001015160f81c60f81b816000815181106144b1576144b16155fd565b60200101906001600160f81b031916908160001a90535060015b8451811015611570576000806144ec878481518110614369576143696155fd565b9092509050818460016145008660026154d7565b61450a919061555a565b8151811061451a5761451a6155fd565b60200101906001600160f81b031916908160001a905350808461453e8560026154d7565b8151811061454e5761454e6155fd565b60200101906001600160f81b031916908160001a90535050508080614572906157e1565b9150506144cb565b8061458457505050565b602081106145bc578251825261459b602084615571565b92506145a8602083615571565b91506145b560208261555a565b9050614584565b8015611ecd57600060016145d183602061555a565b6145dd906101006154cb565b6145e7919061555a565b84518451821691191617835250505050565b805160009060151461460a57600080fd5b6136ea826132b2565b600080600061271060f6600201548661462c91906154d7565b614636919061550c565b60f65490915081101561464b5760f65461464d565b805b60f7549091508111156146625760f754614664565b805b905061467160028261550c565b90508084614680576000614682565b815b92509250509250929050565b610101546001600160a01b0316158015906147185750610101546040516374bf77e960e11b81526001600160a01b039091169063e97eefd2906146d5908490600401614dfb565b6020604051808303816000875af11580156146f4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614718919061553d565b1561106757610101546040516306ee3b9f60e31b81526001600160a01b0390911690633771dcf89061474e908490600401614dfb565b600060405180830381600087803b15801561476857600080fd5b505af1925050508015614779575060015b6110675750565b6000806fa2a8918ca85bafe22016d0b997e4df60600160ff1b038311156147ad5750600090506003614831565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015614801573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661482a57600060019250925050614831565b9150600090505b94509492505050565b60608315614849575081612c15565b612c15838381511561485e5781518083602001fd5b8060405162461bcd60e51b8152600401610a189190615ac9565b604051806060016040528060006001600160a01b0316815260200160608152602001606081525090565b604051806040016040528060008152602001600081525090565b60405180604001604052806148cf6148a2565b8152602001600081525090565b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b0381118282101715614914576149146148dc565b60405290565b60405160a081016001600160401b0381118282101715614914576149146148dc565b60405160c081016001600160401b0381118282101715614914576149146148dc565b604051601f8201601f191681016001600160401b0381118282101715614986576149866148dc565b604052919050565b60006001600160401b038211156149a7576149a76148dc565b5060051b60200190565b6001600160a01b038116811461106757600080fd5b600082601f8301126149d757600080fd5b813560206149ec6149e78361498e565b61495e565b82815260059290921b84018101918181019086841115614a0b57600080fd5b8286015b84811015614a2f578035614a22816149b1565b8352918301918301614a0f565b509695505050505050565b803563ffffffff81168114614a4e57600080fd5b919050565b600060608284031215614a6557600080fd5b614a6d6148f2565b905081358152602082013560208201526040820135604082015292915050565b801515811461106757600080fd5b600060a08284031215614aad57600080fd5b614ab561491a565b9050813581526020820135602082015260408201356040820152606082013560608201526080820135614ae781614a8d565b608082015292915050565b8035614a4e816149b1565b60008060008060008060008060006101e08a8c031215614b1c57600080fd5b89356001600160401b0380821115614b3357600080fd5b614b3f8d838e016149c6565b9a5060208c0135995060408c0135915080821115614b5c57600080fd5b50614b698c828d016149c6565b975050614b7860608b01614a3a565b955060808a0135614b88816149b1565b9450614b978b60a08c01614a53565b9350614ba78b6101008c01614a9b565b92506101a08a0135614bb8816149b1565b9150614bc76101c08b01614af2565b90509295985092959850929598565b600060208284031215614be857600080fd5b5035919050565b600060a08284031215614c0157600080fd5b612c158383614a9b565b60008060408385031215614c1e57600080fd5b8235614c29816149b1565b946020939093013593505050565b60005b83811015614c52578181015183820152602001614c3a565b838111156131615750506000910152565b60008151808452614c7b816020860160208601614c37565b601f01601f19169290920160200192915050565b82151581526040602082015260006126d76040830184614c63565b600060208284031215614cbc57600080fd5b8135612c15816149b1565b60008083601f840112614cd957600080fd5b5081356001600160401b03811115614cf057600080fd5b6020830191508360208260051b8501011115610f9a57600080fd5b600080600060408486031215614d2057600080fd5b8335925060208401356001600160401b03811115614d3d57600080fd5b614d4986828701614cc7565b9497909650939450505050565b6000602080830181845280855180835260408601915060059250604081841b8701018488016000805b84811015614dec57898403603f19018652825180518086529089019089860190808a1b87018b01855b82811015614dd657601f19898303018452614dc4828651614c63565b948d0194938d01939150600101614da8565b50988b0198965050509288019250600101614d7f565b50919998505050505050505050565b6001600160a01b0391909116815260200190565b600082601f830112614e2057600080fd5b81356001600160401b03811115614e3957614e396148dc565b614e4c601f8201601f191660200161495e565b818152846020838601011115614e6157600080fd5b816020850160208301376000918101602001919091529392505050565b60008060408385031215614e9157600080fd5b8235614e9c816149b1565b915060208301356001600160401b03811115614eb757600080fd5b614ec385828601614e0f565b9150509250929050565b600082601f830112614ede57600080fd5b81356020614eee6149e78361498e565b82815260059290921b84018101918181019086841115614f0d57600080fd5b8286015b84811015614a2f5780356001600160401b03811115614f305760008081fd5b614f3e8986838b0101614e0f565b845250918301918301614f11565b600060a08284031215614f5e57600080fd5b614f6661491a565b82358152905060208201356001600160401b0380821115614f8657600080fd5b614f9285838601614e0f565b60208401526040840135915080821115614fab57600080fd5b614fb785838601614ecd565b6040840152606084013560608401526080840135915080821115614fda57600080fd5b50614fe7848285016149c6565b60808301525092915050565b6000602080838503121561500657600080fd5b82356001600160401b038082111561501d57600080fd5b818501915085601f83011261503157600080fd5b813561503f6149e78261498e565b81815260059190911b8301840190848101908883111561505e57600080fd5b8585015b838110156150965780358581111561507a5760008081fd5b6150888b89838a0101614f4c565b845250918601918601615062565b5098975050505050505050565b9283526020830191909152604082015260600190565b6000606082840312156150cb57600080fd5b612c158383614a53565b6000602082840312156150e757600080fd5b81356001600160401b038111156150fd57600080fd5b6126d7848285016149c6565b60008083601f84011261511b57600080fd5b5081356001600160401b0381111561513257600080fd5b602083019150836020828501011115610f9a57600080fd5b6000806000806060858703121561516057600080fd5b843561516b816149b1565b93506020850135925060408501356001600160401b0381111561518d57600080fd5b61519987828801615109565b95989497509550505050565b600080600080604085870312156151bb57600080fd5b84356001600160401b03808211156151d257600080fd5b6151de88838901614cc7565b909650945060208701359150808211156151f757600080fd5b5061519987828801614cc7565b60006020828403121561521657600080fd5b612c1582614a3a565b6000806040838503121561523257600080fd5b50508035926020909101359150565b60008060006060848603121561525657600080fd5b8335615261816149b1565b95602085013595506040909401359392505050565b6000806000806000806080878903121561528f57600080fd5b863595506020870135945060408701356001600160401b03808211156152b457600080fd5b6152c08a838b01614cc7565b909650945060608901359150808211156152d957600080fd5b506152e689828a01615109565b979a9699509497509295939492505050565b6000806000806000806080878903121561531157600080fd5b86356001600160401b038082111561532857600080fd5b9088019060a0828b03121561533c57600080fd5b909650602088013595506040880135908082111561535957600080fd5b6153658a838b01614cc7565b9096509450606089013591508082111561537e57600080fd5b506152e689828a01614cc7565b60006020828403121561539d57600080fd5b815160ff81168114612c1557600080fd5b634e487b7160e01b600052601160045260246000fd5b600060ff821660ff8416808210156153de576153de6153ae565b90039392505050565b600181815b80851115615422578160001904821115615408576154086153ae565b8085161561541557918102915b93841c93908002906153ec565b509250929050565b600082615439575060016136ea565b81615446575060006136ea565b816001811461545c576002811461546657615482565b60019150506136ea565b60ff841115615477576154776153ae565b50506001821b6136ea565b5060208310610133831016604e8410600b84101617156154a5575081810a6136ea565b6154af83836153e7565b80600019048211156154c3576154c36153ae565b029392505050565b6000612c15838361542a565b60008160001904831182151516156154f1576154f16153ae565b500290565b634e487b7160e01b600052601260045260246000fd5b60008261551b5761551b6154f6565b500490565b60006020828403121561553257600080fd5b8151612c15816149b1565b60006020828403121561554f57600080fd5b8151612c1581614a8d565b60008282101561556c5761556c6153ae565b500390565b60008219821115615584576155846153ae565b500190565b6020808252602c90820152600080516020615b0383398151915260408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c90820152600080516020615b0383398151915260408201526b6163746976652070726f787960a01b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b60008235605e1983360301811261562957600080fd5b9190910192915050565b6000606080833603121561564657600080fd5b61564e6148f2565b83356001600160401b038082111561566557600080fd5b9085019036601f83011261567857600080fd5b813560206156886149e78361498e565b82815260059290921b840181019181810190368411156156a757600080fd5b8286015b84811015615783578035868111156156c35760008081fd5b870160c036829003601f19018113156156dc5760008081fd5b6156e461493c565b8683013581526040808401358a8111156156fe5760008081fd5b61570c368a83880101614e0f565b89840152508c8401358a8111156157235760008081fd5b615731368a83880101614ecd565b8284015250506080808401358d83015260a080850135828401528385013593508a84111561576157600091508182fd5b61576f368a86880101614e0f565b9083015250855250509183019183016156ab565b508652508781013595508286111561579a57600080fd5b6157a636878a01614e0f565b8186015250505050604084013560408201528092505050919050565b8381528260208201526060604082015260006128656060830184614c63565b60006000198214156157f5576157f56153ae565b5060010190565b84815260006020858184015260408301855182870160005b828110156158395781516001600160a01b031684529284019290840190600101615814565b50505093845290920195945050505050565b6000806040838503121561585e57600080fd5b505080516020909101519092909150565b6020808252600d908201526c189b1bd8dac81d1bdbc81bdb19609a1b604082015260600190565b6000602082840312156158a857600080fd5b5051919050565b6001600160a01b03929092168252602082015260400190565b6020808252600890820152673a3930b739b332b960c11b604082015260600190565b6000806000606084860312156158ff57600080fd5b833592506020840135615911816149b1565b9150604084013561592181614a8d565b809150509250925092565b60008083128015600160ff1b85018412161561594a5761594a6153ae565b6001600160ff1b0384018313811615615965576159656153ae565b50500390565b6000600160ff1b821415615981576159816153ae565b506000190190565b8183823760009101908152919050565b6000808335601e198436030181126159b057600080fd5b8301803591506001600160401b038211156159ca57600080fd5b602001915036819003821315610f9a57600080fd5b6000808335601e198436030181126159f657600080fd5b8301803591506001600160401b03821115615a1057600080fd5b6020019150600581901b3603821315610f9a57600080fd5b60006136ea3683614f4c565b600080600060608486031215615a4957600080fd5b8351925060208401519150604084015161592181614a8d565b604080825283519082018190526000906020906060840190828701845b82811015615aa45781516001600160a01b031684529284019290840190600101615a7f565b50505092019290925292915050565b634e487b7160e01b600052602160045260246000fd5b602081526000612c156020830184614c63565b60008251615629818460208701614c37565b600082615afd57615afd6154f6565b50069056fe46756e6374696f6e206d7573742062652063616c6c6564207468726f75676820360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c65644246d22454f5bd543c70e6ffcca20eed2dcf09d3beef6d39e415385538b02d0a7f7083e3a64a44d5c6f241eebc1447aa155764f7f6eb1508b4ef82dd555e9d68a26469706673582212203e8a490ecc22561ac915c0d6414d943c7323ae2eec09255b92f854e43bb1223664736f6c634300080a0033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
