{
  "_format": "hh-sol-artifact-1",
  "contractName": "ZkOBS",
  "sourceName": "contracts/ZkOBS.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "wETHAddr_",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "verifierAddr_",
          "type": "address"
        },
        {
          "internalType": "bytes32",
          "name": "genesisStateRoot",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "poseidon2Addr",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint32",
          "name": "blockNumber",
          "type": "uint32"
        }
      ],
      "name": "BlockCommitted",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint32",
          "name": "blockNumber",
          "type": "uint32"
        }
      ],
      "name": "BlockExecuted",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint32",
          "name": "blockNumber",
          "type": "uint32"
        }
      ],
      "name": "BlockProved",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint32",
          "name": "accountId",
          "type": "uint32"
        },
        {
          "indexed": false,
          "internalType": "uint16",
          "name": "tokenId",
          "type": "uint16"
        },
        {
          "indexed": false,
          "internalType": "uint128",
          "name": "amount",
          "type": "uint128"
        }
      ],
      "name": "Deposit",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint64",
          "name": "requestId",
          "type": "uint64"
        },
        {
          "indexed": false,
          "internalType": "enum Operations.OpType",
          "name": "opType",
          "type": "uint8"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "pubData",
          "type": "bytes"
        }
      ],
      "name": "NewL1Request",
      "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": "sender",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "ReceivedETH",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint32",
          "name": "accountId",
          "type": "uint32"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "tsPubX",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "tsPubY",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "bytes20",
          "name": "l2Addr",
          "type": "bytes20"
        }
      ],
      "name": "Register",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint16",
          "name": "tokenId",
          "type": "uint16"
        }
      ],
      "name": "TokenWhitelisted",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint32",
          "name": "accountId",
          "type": "uint32"
        },
        {
          "indexed": false,
          "internalType": "uint32",
          "name": "maturityTime",
          "type": "uint32"
        },
        {
          "indexed": false,
          "internalType": "uint16",
          "name": "debtTokenId",
          "type": "uint16"
        },
        {
          "indexed": false,
          "internalType": "uint16",
          "name": "collateralTokenId",
          "type": "uint16"
        },
        {
          "indexed": false,
          "internalType": "uint128",
          "name": "debtAmt",
          "type": "uint128"
        },
        {
          "indexed": false,
          "internalType": "uint128",
          "name": "collateralAmt",
          "type": "uint128"
        }
      ],
      "name": "UpdateLoan",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint32",
          "name": "accountId",
          "type": "uint32"
        },
        {
          "indexed": false,
          "internalType": "uint16",
          "name": "tokenId",
          "type": "uint16"
        },
        {
          "indexed": false,
          "internalType": "uint128",
          "name": "amount",
          "type": "uint128"
        }
      ],
      "name": "Withdraw",
      "type": "event"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "accountIdOf",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "accountNum",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "tokenAddr",
          "type": "address"
        },
        {
          "internalType": "uint8",
          "name": "decimal",
          "type": "uint8"
        }
      ],
      "name": "addToken",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "name": "addressOf",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint32",
              "name": "accountId",
              "type": "uint32"
            },
            {
              "internalType": "uint16",
              "name": "tokenId",
              "type": "uint16"
            },
            {
              "internalType": "uint128",
              "name": "amount",
              "type": "uint128"
            }
          ],
          "internalType": "struct Operations.Deposit",
          "name": "deposit",
          "type": "tuple"
        },
        {
          "internalType": "uint64",
          "name": "requestId",
          "type": "uint64"
        }
      ],
      "name": "checkDepositL1Request",
      "outputs": [
        {
          "internalType": "bool",
          "name": "isExisted",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint32",
              "name": "accountId",
              "type": "uint32"
            },
            {
              "internalType": "uint16",
              "name": "tokenId",
              "type": "uint16"
            },
            {
              "internalType": "uint128",
              "name": "amount",
              "type": "uint128"
            }
          ],
          "internalType": "struct Operations.ForcedWithdraw",
          "name": "forcedWithdraw",
          "type": "tuple"
        },
        {
          "internalType": "uint64",
          "name": "requestId",
          "type": "uint64"
        }
      ],
      "name": "checkForcedWithdrawL1Request",
      "outputs": [
        {
          "internalType": "bool",
          "name": "isExisted",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint32",
              "name": "accountId",
              "type": "uint32"
            },
            {
              "internalType": "bytes20",
              "name": "l2Addr",
              "type": "bytes20"
            }
          ],
          "internalType": "struct Operations.Register",
          "name": "register",
          "type": "tuple"
        },
        {
          "internalType": "uint64",
          "name": "requestId",
          "type": "uint64"
        }
      ],
      "name": "checkRegisterL1Request",
      "outputs": [
        {
          "internalType": "bool",
          "name": "isExisted",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint32",
              "name": "blockNumber",
              "type": "uint32"
            },
            {
              "internalType": "uint64",
              "name": "l1RequestNum",
              "type": "uint64"
            },
            {
              "internalType": "bytes32",
              "name": "pendingRollupTxHash",
              "type": "bytes32"
            },
            {
              "internalType": "bytes32",
              "name": "commitment",
              "type": "bytes32"
            },
            {
              "internalType": "bytes32",
              "name": "stateRoot",
              "type": "bytes32"
            },
            {
              "internalType": "uint256",
              "name": "timestamp",
              "type": "uint256"
            }
          ],
          "internalType": "struct ZkOBS.StoredBlock",
          "name": "lastCommittedBlock",
          "type": "tuple"
        },
        {
          "components": [
            {
              "internalType": "uint32",
              "name": "blockNumber",
              "type": "uint32"
            },
            {
              "internalType": "bytes32",
              "name": "newStateRoot",
              "type": "bytes32"
            },
            {
              "internalType": "bytes32",
              "name": "newTsRoot",
              "type": "bytes32"
            },
            {
              "internalType": "uint256",
              "name": "timestamp",
              "type": "uint256"
            },
            {
              "internalType": "bytes",
              "name": "publicData",
              "type": "bytes"
            },
            {
              "internalType": "uint32[]",
              "name": "publicDataOffsets",
              "type": "uint32[]"
            }
          ],
          "internalType": "struct ZkOBS.CommitBlock[]",
          "name": "newBlocks",
          "type": "tuple[]"
        }
      ],
      "name": "commitBlocks",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "committedBlockNum",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "committedL1RequestNum",
      "outputs": [
        {
          "internalType": "uint64",
          "name": "",
          "type": "uint64"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint16",
          "name": "",
          "type": "uint16"
        }
      ],
      "name": "decimalOf",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "tokenAddr",
          "type": "address"
        },
        {
          "internalType": "uint128",
          "name": "amount",
          "type": "uint128"
        }
      ],
      "name": "depositERC20",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "depositETH",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "components": [
                {
                  "internalType": "uint32",
                  "name": "blockNumber",
                  "type": "uint32"
                },
                {
                  "internalType": "uint64",
                  "name": "l1RequestNum",
                  "type": "uint64"
                },
                {
                  "internalType": "bytes32",
                  "name": "pendingRollupTxHash",
                  "type": "bytes32"
                },
                {
                  "internalType": "bytes32",
                  "name": "commitment",
                  "type": "bytes32"
                },
                {
                  "internalType": "bytes32",
                  "name": "stateRoot",
                  "type": "bytes32"
                },
                {
                  "internalType": "uint256",
                  "name": "timestamp",
                  "type": "uint256"
                }
              ],
              "internalType": "struct ZkOBS.StoredBlock",
              "name": "storedBlock",
              "type": "tuple"
            },
            {
              "internalType": "bytes[]",
              "name": "pendingRollupTxPubdata",
              "type": "bytes[]"
            }
          ],
          "internalType": "struct ZkOBS.ExecuteBlock[]",
          "name": "pendingBlocks",
          "type": "tuple[]"
        }
      ],
      "name": "executeBlocks",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "executedBlockNum",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "firstL1RequestId",
      "outputs": [
        {
          "internalType": "uint64",
          "name": "",
          "type": "uint64"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "accountId",
          "type": "uint32"
        },
        {
          "internalType": "uint32",
          "name": "maturityTime",
          "type": "uint32"
        },
        {
          "internalType": "uint16",
          "name": "debtTokenId",
          "type": "uint16"
        },
        {
          "internalType": "uint16",
          "name": "collateralTokenId",
          "type": "uint16"
        }
      ],
      "name": "getLoanId",
      "outputs": [
        {
          "internalType": "bytes12",
          "name": "",
          "type": "bytes12"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint64",
          "name": "",
          "type": "uint64"
        }
      ],
      "name": "l1RequestQueue",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "hashedPubData",
          "type": "bytes32"
        },
        {
          "internalType": "enum Operations.OpType",
          "name": "opType",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes12",
          "name": "",
          "type": "bytes12"
        }
      ],
      "name": "loanOf",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "accountId",
          "type": "uint32"
        },
        {
          "internalType": "uint32",
          "name": "maturityTime",
          "type": "uint32"
        },
        {
          "internalType": "uint16",
          "name": "debtTokenId",
          "type": "uint16"
        },
        {
          "internalType": "uint16",
          "name": "collateralTokenId",
          "type": "uint16"
        },
        {
          "internalType": "uint128",
          "name": "debtAmt",
          "type": "uint128"
        },
        {
          "internalType": "uint128",
          "name": "collateralAmt",
          "type": "uint128"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes22",
          "name": "",
          "type": "bytes22"
        }
      ],
      "name": "pendingBalances",
      "outputs": [
        {
          "internalType": "uint128",
          "name": "",
          "type": "uint128"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "pendingL1RequestNum",
      "outputs": [
        {
          "internalType": "uint64",
          "name": "",
          "type": "uint64"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint32",
              "name": "blockNumber",
              "type": "uint32"
            },
            {
              "internalType": "uint64",
              "name": "l1RequestNum",
              "type": "uint64"
            },
            {
              "internalType": "bytes32",
              "name": "pendingRollupTxHash",
              "type": "bytes32"
            },
            {
              "internalType": "bytes32",
              "name": "commitment",
              "type": "bytes32"
            },
            {
              "internalType": "bytes32",
              "name": "stateRoot",
              "type": "bytes32"
            },
            {
              "internalType": "uint256",
              "name": "timestamp",
              "type": "uint256"
            }
          ],
          "internalType": "struct ZkOBS.StoredBlock[]",
          "name": "committedBlocks",
          "type": "tuple[]"
        },
        {
          "components": [
            {
              "internalType": "uint256[2]",
              "name": "a",
              "type": "uint256[2]"
            },
            {
              "internalType": "uint256[2][2]",
              "name": "b",
              "type": "uint256[2][2]"
            },
            {
              "internalType": "uint256[2]",
              "name": "c",
              "type": "uint256[2]"
            },
            {
              "internalType": "uint256[1]",
              "name": "commitment",
              "type": "uint256[1]"
            }
          ],
          "internalType": "struct ZkOBS.Proof[]",
          "name": "proof",
          "type": "tuple[]"
        }
      ],
      "name": "proveBlocks",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "provedBlockNum",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tsPubX",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "tsPubY",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "tokenAddr",
          "type": "address"
        },
        {
          "internalType": "uint128",
          "name": "amount",
          "type": "uint128"
        }
      ],
      "name": "registerERC20",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tsPubX",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "tsPubY",
          "type": "uint256"
        }
      ],
      "name": "registerETH",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "name": "storedBlockHashes",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint16",
          "name": "",
          "type": "uint16"
        }
      ],
      "name": "tokenAddrOf",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "tokenIdOf",
      "outputs": [
        {
          "internalType": "uint16",
          "name": "",
          "type": "uint16"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "tokenNum",
      "outputs": [
        {
          "internalType": "uint16",
          "name": "",
          "type": "uint16"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "verifierAddr",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "wETHAddr",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "tokenAddr",
          "type": "address"
        },
        {
          "internalType": "uint128",
          "name": "amount",
          "type": "uint128"
        }
      ],
      "name": "withdrawERC20",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint128",
          "name": "amount",
          "type": "uint128"
        }
      ],
      "name": "withdrawETH",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "stateMutability": "payable",
      "type": "receive"
    }
  ],
  "bytecode": "0x60e0604052600a805463ffffffff191660641790553480156200002157600080fd5b50604051620056533803806200565383398101604081905262000044916200027f565b6200004f3362000212565b6001600160a01b0384811660a090815284821660c09081529183166080908152604080518085018252600080825260208281018281527fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47084860190815260608086018581528689018d8152878b0187815289519687019790975293516001600160401b03169785019790975290519083015293519481019490945291519383019390935251928101929092529060e00160408051601f1981840301815282825280516020918201207f54cdd369e4e8a8515e52ca72ec816c2101831ad1f18bf44102ed171459c9b4f855600a805461ffff60201b191664010000000090811780835560a0516001600160a01b0316600081815260018652868120805461ffff19169385900461ffff9081169490941790558454849004831681526009865295909520805460ff1916601217905591540416835290917f5868dd46d60eea1273438dee175d389eb9c1a6796fc88caef07199b237f213b0910160405180910390a2600a8054600490620001ed90640100000000900461ffff16620002d3565b91906101000a81548161ffff021916908361ffff160217905550505050505062000303565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b03811681146200027a57600080fd5b919050565b600080600080608085870312156200029657600080fd5b620002a18562000262565b9350620002b16020860162000262565b925060408501519150620002c86060860162000262565b905092959194509250565b600061ffff808316818103620002f957634e487b7160e01b600052601160045260246000fd5b6001019392505050565b60805160a05160c0516152ef620003646000396000818161041001526129450152600081816105c4015281816117ec0152818161184801528181611a8701528181611ac801528181611c070152611c480152600061219f01526152ef6000f3fe6080604052600436106102135760003560e01c8063ad732aeb11610118578063cea94a16116100a0578063ef4c4bef1161006f578063ef4c4bef14610855578063f2fde38b14610872578063f6326fb314610892578063ff73e11b1461089a578063fffd6b0c146108ba57600080fd5b8063cea94a161461076d578063d0b2705314610780578063dab92afa146107ef578063e9d4e6a61461083157600080fd5b8063b46dbe1a116100e7578063b46dbe1a146106b3578063bc650ff3146106f8578063bfa87e4614610718578063c488a09c1461073a578063c94c5b7c1461074d57600080fd5b8063ad732aeb14610606578063ad93b0ab14610623578063af38fdfc14610656578063b1b16ff01461068c57600080fd5b8063773c02d41161019b57806397be8fc51161016a57806397be8fc5146105025780639a7014a8146105295780639ba0d14614610577578063a615e171146105b2578063a74ea63f146105e657600080fd5b8063773c02d4146104475780637873db351461048b57806386316f8a146104ab5780638da5cb5b146104e457600080fd5b80633bce090b116101e25780633bce090b1461037f57806355f7edd41461039f578063632a5607146103de578063663ea2e2146103fe578063715018a61461043257600080fd5b8063017146ed1461025457806309fb37fc14610276578063134ea302146102c9578063238306211461034f57600080fd5b3661024f5760405134815233907f4103257eaac983ca79a70d28f90dfc4fa16b619bb0c17ee7cab0d4034c2796249060200160405180910390a2005b600080fd5b34801561026057600080fd5b5061027461026f36600461413a565b6108da565b005b34801561028257600080fd5b506102ac610291366004614194565b6004602052600090815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156102d557600080fd5b5061033d6102e43660046141af565b6008602052600090815260409020805460019091015463ffffffff80831692600160201b81049091169161ffff600160401b8304811692600160501b8104909116916001600160801b03600160601b9092048216911686565b6040516102c0969594939291906141d9565b34801561035b57600080fd5b5061036f61036a366004614365565b610b4a565b60405190151581526020016102c0565b34801561038b57600080fd5b5061027461039a366004614390565b610c58565b3480156103ab57600080fd5b50600a546103c690600160701b90046001600160401b031681565b6040516001600160401b0390911681526020016102c0565b3480156103ea57600080fd5b506102746103f93660046144d1565b610e82565b34801561040a57600080fd5b506102ac7f000000000000000000000000000000000000000000000000000000000000000081565b34801561043e57600080fd5b506102746110fd565b34801561045357600080fd5b50610478610462366004614646565b60016020526000908152604090205461ffff1681565b60405161ffff90911681526020016102c0565b34801561049757600080fd5b506102746104a6366004614817565b611111565b3480156104b757600080fd5b50600b546104cf90600160401b900463ffffffff1681565b60405163ffffffff90911681526020016102c0565b3480156104f057600080fd5b506000546001600160a01b03166102ac565b34801561050e57600080fd5b50600a546103c690600160301b90046001600160401b031681565b34801561053557600080fd5b5061055f6105443660046148d8565b6007602052600090815260409020546001600160801b031681565b6040516001600160801b0390911681526020016102c0565b34801561058357600080fd5b506105a4610592366004614194565b60066020526000908152604090205481565b6040519081526020016102c0565b3480156105be57600080fd5b506102ac7f000000000000000000000000000000000000000000000000000000000000000081565b3480156105f257600080fd5b50610274610601366004614902565b61154e565b34801561061257600080fd5b50600b546104cf9063ffffffff1681565b34801561062f57600080fd5b506104cf61063e366004614646565b60036020526000908152604090205463ffffffff1681565b34801561066257600080fd5b506102ac61067136600461493f565b6002602052600090815260409020546001600160a01b031681565b34801561069857600080fd5b50600a546103c690600160b01b90046001600160401b031681565b3480156106bf57600080fd5b506106ea6106ce36600461495a565b6005602052600090815260409020805460019091015460ff1682565b6040516102c09291906149ad565b34801561070457600080fd5b5061036f6107133660046149c1565b6116ab565b34801561072457600080fd5b50600a5461047890600160201b900461ffff1681565b610274610748366004614a25565b6117ae565b34801561075957600080fd5b50610274610768366004614390565b61193f565b61027461077b366004614a40565b611a1a565b34801561078c57600080fd5b506107d661079b366004614a62565b61ffff811663ffff0000601084901b161767ffffffff00000000602085901b161763ffffffff60401b604086901b161760a01b949350505050565b6040516001600160a01b031990911681526020016102c0565b3480156107fb57600080fd5b5061081f61080a36600461493f565b60096020526000908152604090205460ff1681565b60405160ff90911681526020016102c0565b34801561083d57600080fd5b50600b546104cf90600160201b900463ffffffff1681565b34801561086157600080fd5b50600a546104cf9063ffffffff1681565b34801561087e57600080fd5b5061027461088d366004614646565b611b50565b610274611bc9565b3480156108a657600080fd5b5061036f6108b5366004614365565b611cc9565b3480156108c657600080fd5b506102746108d5366004614b18565b611dd9565b3360009081526003602052604090205463ffffffff16156109425760405162461bcd60e51b815260206004820152601a60248201527f4163636f756e7420616c7265616479207265676973746572656400000000000060448201526064015b60405180910390fd5b6001600160a01b0382166000818152600160205260408082205490516370a0823160e01b815230600482015261ffff909116928592916370a0823190602401602060405180830381865afa15801561099e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109c29190614c67565b6040516323b872dd60e01b81523360048201523060248201526001600160801b03861660448201529091506001600160a01b038316906323b872dd906064016020604051808303816000875af1158015610a20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a449190614c80565b506040516370a0823160e01b81523060048201526000906001600160a01b038416906370a0823190602401602060405180830381865afa158015610a8c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ab09190614c67565b90506000610ac6610ac18484614cb8565b612106565b9050856001600160801b0316816001600160801b031614610b295760405162461bcd60e51b815260206004820152601b60248201527f4465706f73697420616d6f756e7420696e636f6e73697374656e7400000000006044820152606401610939565b610b34338a8a612173565b610b3f338683612383565b505050505050505050565b6001600160401b03811660009081526005602090815260408083208151808301909252805482526001810154849383019060ff166013811115610b8f57610b8f614975565b6013811115610ba057610ba0614975565b9052509050600281602001516013811115610bbd57610bbd614975565b14610bda5760405162461bcd60e51b815260040161093990614ccb565b610be88482600001516124a9565b610c4c5760405162461bcd60e51b815260206004820152602f60248201527f4465706f7369742072657175657374206e6f74206578697374656420696e204c60448201526e31207265717565737420717565756560881b6064820152608401610939565b60019150505b92915050565b3360009081526003602052604081205463ffffffff169003610c8c5760405162461bcd60e51b815260040161093990614cf7565b6001600160a01b0382166000818152600160205260408082205490516370a0823160e01b815230600482015261ffff909116928592916370a0823190602401602060405180830381865afa158015610ce8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d0c9190614c67565b6040516323b872dd60e01b81523360048201523060248201526001600160801b03861660448201529091506001600160a01b038316906323b872dd906064016020604051808303816000875af1158015610d6a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d8e9190614c80565b506040516370a0823160e01b81523060048201526000906001600160a01b038416906370a0823190602401602060405180830381865afa158015610dd6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dfa9190614c67565b90506000610e0b610ac18484614cb8565b9050856001600160801b0316816001600160801b031614610e6e5760405162461bcd60e51b815260206004820152601b60248201527f4465706f73697420616d6f756e7420696e636f6e73697374656e7400000000006044820152606401610939565b610e79338683612383565b50505050505050565b8051600090815b83518163ffffffff161015610f6057610ec1848263ffffffff1681518110610eb357610eb3614d27565b6020026020010151826124c5565b838163ffffffff1681518110610ed957610ed9614d27565b6020026020010151600001516020015183610ef49190614d3d565b9250838163ffffffff1681518110610f0e57610f0e614d27565b6020026020010151600001516000015163ffffffff167f036cca5fc51c8ae4669768ca5966397d55516afb697541fdd4fe7e6b253c075c60405160405180910390a2610f5981614d64565b9050610e89565b5081600a60068282829054906101000a90046001600160401b0316610f859190614d3d565b92506101000a8154816001600160401b0302191690836001600160401b0316021790555081600a60168282829054906101000a90046001600160401b0316610fcd9190614d87565b92506101000a8154816001600160401b0302191690836001600160401b0316021790555081600a600e8282829054906101000a90046001600160401b03166110159190614d87565b92506101000a8154816001600160401b0302191690836001600160401b0316021790555080600b60088282829054906101000a900463ffffffff1661105a9190614da7565b82546101009290920a63ffffffff818102199093169183160217909155600b54600160201b81048216600160401b909104909116111590506110f85760405162461bcd60e51b815260206004820152603160248201527f457865637574656420626c6f636b206e756d626572206578636565647320707260448201527037bb32b210313637b1b590373ab6b132b960791b6064820152608401610939565b505050565b6111056127ae565b61110f6000612808565b565b600b54600160201b900463ffffffff1660005b83518110156114ad5761115c6040518060400160405280600e81526020016d5b70726f766520626c6f636b735d60901b815250612858565b61118a6040518060400160405280600d81526020016c313637b1b590373ab6b132b91d60991b815250612858565b6111b684828151811061119f5761119f614d27565b60200260200101516000015163ffffffff1661289b565b6111e26040518060400160405280600b81526020016a31b7b6b6b4ba36b2b73a1d60a91b815250612858565b6112088482815181106111f7576111f7614d27565b6020026020010151606001516128e0565b6112386040518060400160405280600f81526020016e3618903932b8bab2b9ba10373ab69d60891b815250612858565b61126784828151811061124d5761124d614d27565b6020026020010151602001516001600160401b031661289b565b61129f604051806040016040528060178152602001763832b73234b733903937b6363ab8103a3c103430b9b41d60491b815250612858565b6112c58482815181106112b4576112b4614d27565b6020026020010151604001516128e0565b6112f16040518060400160405280600b81526020016a39ba30ba32903937b7ba1d60a91b815250612858565b61131784828151811061130657611306614d27565b6020026020010151608001516128e0565b6113426040518060400160405280600a8152602001693a34b6b2b9ba30b6b81d60b11b815250612858565b61136884828151811061135757611357614d27565b602002602001015160a0015161289b565b60066000611377846001614da7565b63ffffffff1663ffffffff168152602001908152602001600020548482815181106113a4576113a4614d27565b60200260200101516040516020016113bc9190614dc4565b60405160208183030381529060405280519060200120146114045760405162461bcd60e51b81526020600482015260026024820152616f3160f01b6044820152606401610939565b61144084828151811061141957611419614d27565b602002602001015184838151811061143357611433614d27565b6020026020010151612925565b83818151811061145257611452614d27565b60200260200101516000015163ffffffff167f4641de497fbc15d6b4019eaac30d1a17a2fcc6ed1b08cadfb8c84804330ea49f60405160405180910390a261149982614d64565b9150806114a581614e17565b915050611124565b50600b5463ffffffff90811690821611156115255760405162461bcd60e51b815260206004820152603260248201527f50726f76656420626c6f636b206e756d626572206578636565647320636f6d6d60448201527134ba3a32b210313637b1b590373ab6b132b960711b6064820152608401610939565b600b805463ffffffff909216600160201b0267ffffffff00000000199092169190911790555050565b6115566127ae565b6001600160a01b03821660009081526001602052604090205461ffff16156115c05760405162461bcd60e51b815260206004820152601860248201527f546f6b656e20616c7265616479207265676973746572656400000000000000006044820152606401610939565b600a80546001600160a01b0384166000818152600160209081526040808320805461ffff191661ffff600160201b978890048116919091179091558654869004811684526002835281842080546001600160a01b031916861790558654869004811684526009835292819020805460ff891660ff199091161790559454945193909404168252917f5868dd46d60eea1273438dee175d389eb9c1a6796fc88caef07199b237f213b0910160405180910390a2600a805460049061168d90600160201b900461ffff16614e30565b91906101000a81548161ffff021916908361ffff1602179055505050565b6001600160401b03811660009081526005602090815260408083208151808301909252805482526001810154849383019060ff1660138111156116f0576116f0614975565b601381111561170157611701614975565b905250905060018160200151601381111561171e5761171e614975565b1461173b5760405162461bcd60e51b815260040161093990614ccb565b611749848260000151612a69565b610c4c5760405162461bcd60e51b815260206004820152603060248201527f52656769737465722072657175657374206e6f74206578697374656420696e2060448201526f4c31207265717565737420717565756560801b6064820152608401610939565b3360009081526003602052604081205463ffffffff1690036117e25760405162461bcd60e51b815260040161093990614cf7565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001660009081526001602052604090205461ffff1661182a338284612a75565b604051632e1a7d4d60e01b81526001600160801b03831660048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632e1a7d4d90602401600060405180830381600087803b15801561189457600080fd5b505af11580156118a8573d6000803e3d6000fd5b5050604051600092503391506001600160801b038516908381818185875af1925050503d80600081146118f7576040519150601f19603f3d011682016040523d82523d6000602084013e6118fc565b606091505b50509050806110f85760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b6044820152606401610939565b3360009081526003602052604081205463ffffffff1690036119735760405162461bcd60e51b815260040161093990614cf7565b6001600160a01b03821660009081526001602052604090205461ffff1661199b338284612a75565b60405163a9059cbb60e01b81523360048201526001600160801b03831660248201526001600160a01b0384169063a9059cbb906044016020604051808303816000875af11580156119f0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a149190614c80565b50505050565b3360009081526003602052604090205463ffffffff1615611a7d5760405162461bcd60e51b815260206004820152601a60248201527f4163636f756e7420616c726561647920726567697374657265640000000000006044820152606401610939565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001660009081526001602052604081205461ffff1690611ac434612106565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b158015611b2157600080fd5b505af1158015611b35573d6000803e3d6000fd5b5050505050611b45338585612173565b611a14338383612383565b611b586127ae565b6001600160a01b038116611bbd5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610939565b611bc681612808565b50565b3360009081526003602052604081205463ffffffff169003611bfd5760405162461bcd60e51b815260040161093990614cf7565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001660009081526001602052604081205461ffff1690611c4434612106565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b158015611ca157600080fd5b505af1158015611cb5573d6000803e3d6000fd5b5050505050611cc5338383612383565b5050565b6001600160401b03811660009081526005602090815260408083208151808301909252805482526001810154849383019060ff166013811115611d0e57611d0e614975565b6013811115611d1f57611d1f614975565b9052509050600581602001516013811115611d3c57611d3c614975565b14611d595760405162461bcd60e51b815260040161093990614ccb565b611d67848260000151612bd4565b610c4c5760405162461bcd60e51b815260206004820152603760248201527f466f726365642077697468647261772072657175657374206e6f74206578697360448201527f74656420696e204c3120726571756573742071756575650000000000000000006064820152608401610939565b611e066040518060400160405280600c81526020016b636f6d6d6974426c6f636b7360a01b815250612858565b600b54611e189063ffffffff1661289b565b81604051602001611e299190614dc4565b60408051601f198184030181529181528151602092830120600b5463ffffffff166000908152600690935291205414611ea45760405162461bcd60e51b815260206004820152601c60248201527f436f6d6d6974656420626c6f636b20696e636f6e73697374656e6379000000006044820152606401610939565b60005b81518163ffffffff161015611fa857611edf83838363ffffffff1681518110611ed257611ed2614d27565b6020026020010151612be0565b92508260200151600a60168282829054906101000a90046001600160401b0316611f099190614d3d565b92506101000a8154816001600160401b0302191690836001600160401b0316021790555082604051602001611f3e9190614dc4565b60408051601f198184030181528282528051602091820120865163ffffffff90811660009081526006909352928220558551909116917fdf39762be389bd636a9efb2e4f3b26ac7d22eda4f0840f389209987a09e50fc99190a2611fa181614d64565b9050611ea7565b508051600b8054600090611fc390849063ffffffff16614da7565b825463ffffffff9182166101009390930a928302919092021990911617905550600a546001600160401b03600160701b82048116600160b01b9092041611156120c05760405162461bcd60e51b815260206004820152607f60248201527f546865206e756d626572206f6620746f74616c20636f6d6d697474656420707260448201527f696f72697479207265717565737473206e6565647320746f206265206c65737360648201527f207468616e206f7220657175616c20746f20746865206e756d626572206f662060848201527f746f74616c2070656e64696e67207072696f726974792072657175657374730060a482015260c401610939565b5050600b805463ffffffff811663ffffffff19909116179055600a805467ffffffffffffffff60b01b198116600160b01b918290046001600160401b0316909102179055565b60006001600160801b0382111561216f5760405162461bcd60e51b815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e20316044820152663238206269747360c81b6064820152608401610939565b5090565b6040805180820182528381526020810183905290516314d2f97b60e11b81526000916001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916329a5f2f6916121d291600401614e6a565b602060405180830381865afa1580156121ef573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122139190614c67565b600a805460609290921b925063ffffffff90911690600061223383614d64565b82546101009290920a63ffffffff8181021990931691831602179091556001600160a01b0386166000818152600360209081526040808320805463ffffffff19169587169586179055938252600481529083902080546001600160a01b0319169092179091558151808301909252600e82526d696e205f7265676973746572282960901b908201526122c490612858565b6122d38163ffffffff1661289b565b6122dc82612eba565b6040805180820190915263ffffffff821681526001600160601b031983166020820152600061230a82612f03565b905061231887600183612f5d565b6040805163ffffffff85168152602081018890529081018690526001600160601b0319851660608201526001600160a01b038816907fa39b106e7a0ee88543b31a791d6243d6aa6c2b849483144a11f0209595b764639060800160405180910390a250505050505050565b6001600160a01b03831660009081526003602090815260409182902054825160608101845263ffffffff90911680825261ffff8616828401526001600160801b038516828501528351808501909452600d84526c696e205f6465706f736974282960981b9284019290925290916123f990612858565b6124088263ffffffff1661289b565b6124158461ffff1661289b565b612427836001600160801b031661289b565b600061243282613097565b905061244086600283612f5d565b6040805163ffffffff8516815261ffff871660208201526001600160801b038616918101919091526001600160a01b038716907fc8f60e32fd965b2469b4a5f60858ecd4e08a7ea7fbc470dcb9437fd07e9fbf4c906060015b60405180910390a2505050505050565b6000816124b584613097565b8051906020012014905092915050565b81515163ffffffff16600090815260066020908152604091829020548451925190926124f392909101614dc4565b604051602081830303815290604052805190602001201461253b5760405162461bcd60e51b8152602060048201526002602482015261379960f11b6044820152606401610939565b600b54612556908290600160401b900463ffffffff16614da7565b612561906001614da7565b82515163ffffffff9081169116146125a05760405162461bcd60e51b81526020600482015260026024820152616f3360f01b6044820152606401610939565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060005b8360200151518163ffffffff161015611a1457600084602001518263ffffffff16815181106125f5576125f5614d27565b6020026020010151905060008160008151811061261457612614614d27565b016020015160f81c601381111561262d5761262d614975565b9050600481601381111561264357612643614975565b03612672576000612653836130b7565b905061266c816000015182602001518360400151613194565b50612770565b600581601381111561268657612686614975565b0361270857600061269683613232565b60208082015161ffff16600090815260099091526040812054919250906126ec906126c59060ff16600a614f5c565b6305f5e10084604001516126d99190614f81565b6001600160801b0316610ac19190614fa7565b90506127018260000151836020015183613194565b5050612770565b600c81601381111561271c5761271c614975565b0361273757600061272c83613314565b905061266c81613467565b60405162461bcd60e51b815260206004820152600e60248201526d496e76616c6964206f705479706560901b6044820152606401610939565b8382604051602001612783929190614fe2565b6040516020818303038152906040528051906020012093505050806127a790614d64565b90506125c4565b6000546001600160a01b0316331461110f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610939565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b611bc68160405160240161286c9190615034565b60408051601f198184030181529190526020810180516001600160e01b031663104c13eb60e21b179052613726565b611bc6816040516024016128b191815260200190565b60408051601f198184030181529190526020810180516001600160e01b031663f82c50f160e01b179052613726565b611bc6816040516024016128f691815260200190565b60408051601f198184030181529190526020810180516001600160e01b03166327b7cf8560e01b179052613726565b80516020820151604080840151606085015191516343753b4d60e01b81527f0000000000000000000000000000000000000000000000000000000000000000946001600160a01b038616946343753b4d94612987949293919291600401615047565b602060405180830381865afa1580156129a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129c89190614c80565b612a045760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b210383937b7b360991b6044820152606401610939565b60608381015190830151516001600160fd1b039081169116146110f85760405162461bcd60e51b815260206004820152601860248201527f636f6d6d69746d656e7420696e636f6e73697374656e637900000000000000006044820152606401610939565b6000816124b584612f03565b6001600160a01b0383811660009081526003602090815260408083205463ffffffff16808452600490925282205490921660a085901b61ffff60a01b161760501b6001600160501b031981166000908152600760205260409020549091506001600160801b03908116908416811015612b405760405162461bcd60e51b815260206004820152602760248201527f576974686472617720616d6f756e7420657863656564732070656e64696e672060448201526662616c616e636560c81b6064820152608401610939565b612b4a84826150ee565b6001600160501b0319831660009081526007602090815260409182902080546001600160801b0319166001600160801b03948516179055815163ffffffff8716815261ffff891691810191909152918616908201526001600160a01b038716907f3047f144743f71ba5cf2167e4f9b199d5730846dad5c68c75270d10e65a0a5d590606001612499565b6000816124b584613747565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a08101919091528260a0015182606001511015612cab5760405162461bcd60e51b815260206004820152605260248201527f54696d657374616d70206f6620746865206e657720626c6f636b206e6565647360448201527f20746f2062652067726561746572207468616e206f7220657175616c20746f206064820152717468652070726576696f757320626c6f636b60701b608482015260a401610939565b6000806000612cb985613765565b9250925092506000612ccc878784613c4c565b9050612cfe6040518060400160405280600f81526020016e5b636f6d6d697420626c6f636b735d60881b815250612858565b612d2c6040518060400160405280600d81526020016c313637b1b590373ab6b132b91d60991b815250612858565b8551612d3d9063ffffffff1661289b565b612d696040518060400160405280600b81526020016a31b7b6b6b4ba36b2b73a1d60a91b815250612858565b612d72816128e0565b612da26040518060400160405280600f81526020016e3618903932b8bab2b9ba10373ab69d60891b815250612858565b612db4836001600160401b031661289b565b612dec604051806040016040528060178152602001763832b73234b733903937b6363ab8103a3c103430b9b41d60491b815250612858565b612df5846128e0565b612e216040518060400160405280600b81526020016a39ba30ba32903937b7ba1d60a91b815250612858565b612e2e86602001516128e0565b612e596040518060400160405280600a8152602001693a34b6b2b9ba30b6b81d60b11b815250612858565b612e66866060015161289b565b6040518060c00160405280876000015163ffffffff168152602001846001600160401b0316815260200185815260200182815260200187602001518152602001876060015181525094505050505092915050565b6040516001600160601b031982166024820152611bc69060440160408051601f198184030181529190526020810180516001600160e01b0316635188e3e960e01b179052613726565b8051602080830151604051600160f81b9281019290925260e09290921b6001600160e01b03191660218201526001600160601b031990911660258201526060906039015b6040516020818303038152906040529050919050565b600a54600090612f86906001600160401b03600160701b8204811691600160301b900416614d3d565b90506000828051906020012090506040518060400160405280828152602001856013811115612fb757612fb7614975565b90526001600160401b0383166000908152600560209081526040909120825181559082015160018083018054909160ff1990911690836013811115612ffe57612ffe614975565b021790555050600a8054909150600e9061302790600160701b90046001600160401b031661510e565b91906101000a8154816001600160401b0302191690836001600160401b03160217905550846001600160a01b03167f3d42da54770ec4160e30921f7f1c788d1eda692956fde060912b4eea9adbdb2c8386866040516130889392919061512a565b60405180910390a25050505050565b6060600282516020808501516040808701519051612f4795949301615159565b604080516060810182526000808252602082018190529181019190915260016130e08382613cff565b63ffffffff16835290506130f48382613d22565b61ffff16602084015290506131098382613d3c565b6001600160801b03166040840152905060106002613129600460016151aa565b61313391906151aa565b61313d91906151aa565b60ff16811461318e5760405162461bcd60e51b815260206004820152601b60248201527f526561642077697468647261772070756264617461206572726f7200000000006044820152606401610939565b50919050565b63ffffffff83166000908152600460205260408120546001600160a01b031660a084901b61ffff60a01b161760501b6001600160501b031981166000908152600760205260409020549091506001600160801b03166131f383826151c3565b6001600160501b031992909216600090815260076020526040902080546001600160801b0319166001600160801b039093169290921790915550505050565b6040805160608101825260008082526020820181905291810191909152600161325b8382613cff565b63ffffffff168352905061326f8382613d22565b61ffff16602084015290506132848382613d3c565b6001600160801b031660408401529050601060026132a4600460016151aa565b6132ae91906151aa565b6132b891906151aa565b60ff16811461318e5760405162461bcd60e51b815260206004820152602260248201527f5265616420666f7263656420776974686472617720707562646174612065727260448201526137b960f11b6064820152608401610939565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a081019190915260016133528382613cff565b63ffffffff16835290506133668382613d22565b61ffff166020840152905061337b8382613d3c565b6001600160801b0316604084015290506133958382613d22565b61ffff16606084015290506133aa8382613d3c565b6001600160801b0316608084015290506133c48382613cff565b63ffffffff1660a0840152905060046010600281816133e48560016151aa565b6133ee91906151aa565b6133f891906151aa565b61340291906151aa565b61340c91906151aa565b61341691906151aa565b60ff16811461318e5760405162461bcd60e51b815260206004820152601e60248201527f526561642061756374696f6e20656e642070756264617461206572726f7200006044820152606401610939565b805160a080830151606084015160208086015160009560401b63ffffffff60401b169390911b67ffffffff000000001660109290921b63ffff00001661ffff909116171717901b6001600160a01b031981166000908152600860209081526040808320815160c081018352815463ffffffff8082168352600160201b8204811683870190815261ffff600160401b84048116858801908152600160501b8504821660608088019182526001600160801b03600160601b9097048716608089015260019098015490951660a0808801919091528d5185168752968d01805183169091528c8901518216909452948b0151909116905251909116845260099092529091205491925090613594906135809060ff16600a614f5c565b6305f5e10085608001516126d99190614f81565b816080018181516135a591906151c3565b6001600160801b031690525060208084015161ffff166000908152600990915260409020546135f0906135dc9060ff16600a614f5c565b6305f5e10085604001516126d99190614f81565b8160a00181815161360191906151c3565b6001600160801b039081169091526001600160a01b03198416600090815260086020908152604091829020855181549287015187850151606089015160808a015163ffffffff80861667ffffffffffffffff1990981697909717600160201b97851697909702969096176bffffffff00000000000000001916600160401b61ffff8085169190910261ffff60501b191691909117600160501b91831691909102176fffffffffffffffffffffffffffffffff60601b1916600160601b878a160217855560a08a0151600190950180546001600160801b0319169886169890981790975594517f69b64e7eb82c7fc6abe7147382f19b641ece3aaa510f0f6e9338b0acc5bb0536975061371996929591949193906141d9565b60405180910390a1505050565b80516a636f6e736f6c652e6c6f67602083016000808483855afa5050505050565b606060058251602080850151604051612f4794939260009101615159565b6080810151600a54600091829160609190839061379b906001600160401b03600160b01b8204811691600160301b900416614d3d565b82517fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4709650600095509091506137d390600c906151e3565b156138465760405162461bcd60e51b815260206004820152603a60248201527f5075626c69632064617461206c656e6774682073686f756c642062652065766560448201527f6e6c792064697669646564206279204348554e4b5f42595445530000000000006064820152608401610939565b815161385490600c906151f7565b6001600160401b0381111561386b5761386b61421c565b6040519080825280601f01601f191660200182016040528015613895576020820181803683370190505b50925060005b8660a0015151811015613c425760008760a0015182815181106138c0576138c0614d27565b602002602001015163ffffffff169050835181106139365760405162461bcd60e51b815260206004820152602d60248201527f4f66667365742073686f756c64206265206c657373207468616e207075626c6960448201526c0c640c8c2e8c240d8cadccee8d609b1b6064820152608401610939565b613941600c826151e3565b156139a55760405162461bcd60e51b815260206004820152602e60248201527f4f66667365742073686f756c64206265206576656e6c7920646976696465642060448201526d6279204348554e4b5f425954455360901b6064820152608401610939565b60006139b2600c836151f7565b90508581815181106139c6576139c6614d27565b01602001516001600160f81b03191615613a225760405162461bcd60e51b815260206004820152601f60248201527f4f66667365742073686f756c64206e6f7420626520736574206265666f7265006044820152606401610939565b600160f81b868281518110613a3957613a39614d27565b60200101906001600160f81b031916908160001a9053506000858381518110613a6457613a64614d27565b016020015160f81c6013811115613a7d57613a7d614975565b90506001816013811115613a9357613a93614975565b03613ae3576000613ab38785613aab600c600461520b565b60ff16613d56565b90506000613ac082613e17565b9050613ad0816107138c8a614d3d565b50613ada8a61510e565b99505050613c2c565b6002816013811115613af757613af7614975565b03613b2c576000613b0f8785613aab600c600261520b565b90506000613b1c82613ef7565b9050613ad08161036a8c8a614d3d565b60606004826013811115613b4257613b42614975565b03613b5f57613b588785613aab600c600261520b565b9050613c2a565b6005826013811115613b7357613b73614975565b03613bb857613b898785613aab600c600261520b565b90506000613b9682613232565b9050613ba6816108b58c8a614d3d565b50613bb08a61510e565b995050613c2a565b600c826013811115613bcc57613bcc614975565b03613be257613b588785613aab600c600461520b565b60405162461bcd60e51b815260206004820152601a60248201527f556e737570706f72746564206f7065726174696f6e20747970650000000000006044820152606401610939565b505b5050508080613c3a90614e17565b91505061389b565b5050509193909250565b600080828460800151604051602001613c66929190615227565b6040516020818303038152906040529050600285608001518560200151866040015184604051602001613c9c9493929190615256565b60408051601f1981840301815290829052613cb69161528a565b602060405180830381855afa158015613cd3573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190613cf69190614c67565b95945050505050565b600080613d0d8360046152a6565b9150613d198484613fce565b90509250929050565b600080613d308360026152a6565b9150613d19848461401e565b600080613d4a8360106152a6565b9150613d198484614063565b6060613d6282846152a6565b84511015613d965760405162461bcd60e51b81526020600482015260016024820152602d60f91b6044820152606401610939565b6000826001600160401b03811115613db057613db061421c565b6040519080825280601f01601f191660200182016040528015613dda576020820181803683370190505b5090508215613e0d57602081018381016020860187015b81831015613e09578051835260209283019201613df1565b5050505b90505b9392505050565b60408051808201909152600080825260208201526001613e378382613cff565b63ffffffff1683529050613e4b8382613d22565b509050613e588382613d3c565b509050613e6583826140a8565b6001600160601b03191660208401529050601460106002613e88600460016151aa565b613e9291906151aa565b613e9c91906151aa565b613ea691906151aa565b60ff16811461318e5760405162461bcd60e51b815260206004820152601b60248201527f526561642072656769737465722070756264617461206572726f7200000000006044820152606401610939565b60408051606081018252600080825260208201819052918101919091526001613f208382613cff565b63ffffffff1683529050613f348382613d22565b61ffff1660208401529050613f498382613d3c565b6001600160801b03166040840152905060106002613f69600460016151aa565b613f7391906151aa565b613f7d91906151aa565b60ff16811461318e5760405162461bcd60e51b815260206004820152601a60248201527f52656164206465706f7369742070756264617461206572726f720000000000006044820152606401610939565b600080613fdc8360046152a6565b905080845110156140135760405162461bcd60e51b81526020600482015260016024820152602b60f91b6044820152606401610939565b929092015192915050565b60008061402c8360026152a6565b905080845110156140135760405162461bcd60e51b81526020600482015260016024820152601560fa1b6044820152606401610939565b6000806140718360106152a6565b905080845110156140135760405162461bcd60e51b81526020600482015260016024820152605760f81b6044820152606401610939565b6000806140b68360146152a6565b9150613d19848460006140ca8260146152a6565b835110156140fe5760405162461bcd60e51b81526020600482015260016024820152605360f81b6044820152606401610939565b50016020015190565b80356001600160a01b038116811461411e57600080fd5b919050565b80356001600160801b038116811461411e57600080fd5b6000806000806080858703121561415057600080fd5b843593506020850135925061416760408601614107565b915061417560608601614123565b905092959194509250565b803563ffffffff8116811461411e57600080fd5b6000602082840312156141a657600080fd5b613e1082614180565b6000602082840312156141c157600080fd5b81356001600160a01b031981168114613e1057600080fd5b63ffffffff968716815294909516602085015261ffff9283166040850152911660608301526001600160801b03908116608083015290911660a082015260c00190565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b03811182821017156142545761425461421c565b60405290565b604051608081016001600160401b03811182821017156142545761425461421c565b60405160c081016001600160401b03811182821017156142545761425461421c565b604051601f8201601f191681016001600160401b03811182821017156142c6576142c661421c565b604052919050565b803561ffff8116811461411e57600080fd5b6000606082840312156142f257600080fd5b604051606081018181106001600160401b03821117156143145761431461421c565b60405290508061432383614180565b8152614331602084016142ce565b602082015261434260408401614123565b60408201525092915050565b80356001600160401b038116811461411e57600080fd5b6000806080838503121561437857600080fd5b61438284846142e0565b9150613d196060840161434e565b600080604083850312156143a357600080fd5b6143ac83614107565b9150613d1960208401614123565b60006001600160401b038211156143d3576143d361421c565b5060051b60200190565b600060c082840312156143ef57600080fd5b60405160c081018181106001600160401b03821117156144115761441161421c565b60405290508061442083614180565b815261442e6020840161434e565b602082015260408301356040820152606083013560608201526080830135608082015260a083013560a08201525092915050565b600082601f83011261447357600080fd5b81356001600160401b0381111561448c5761448c61421c565b61449f601f8201601f191660200161429e565b8181528460208386010111156144b457600080fd5b816020850160208301376000918101602001919091529392505050565b6000602082840312156144e357600080fd5b6001600160401b0380833511156144f957600080fd5b8235830184601f82011261450c57600080fd5b61451e61451982356143ba565b61429e565b81358082526020808301929160051b8401018781111561453d57600080fd5b602084015b8181101561463957858135111561455857600080fd5b8035850160e0818b03601f1901121561457057600080fd5b614578614232565b6145858b602084016143dd565b815260e08201358881111561459957600080fd5b8083019250508a603f8301126145ae57600080fd5b60208201356145bf614519826143ba565b81815260059190911b83016040019060208101908d8311156145e057600080fd5b604085015b83811015614619578b813511156145fb57600080fd5b61460b8f60408335890101614462565b8352602092830192016145e5565b508060208501525050508086525050602084019350602081019050614542565b5090979650505050505050565b60006020828403121561465857600080fd5b613e1082614107565b600082601f83011261467257600080fd5b61467a614232565b80604084018581111561468c57600080fd5b845b818110156146a657803584526020938401930161468e565b509095945050505050565b600082601f8301126146c257600080fd5b60405160208082018281106001600160401b03821117156146e5576146e561421c565b60405281848201868111156146f957600080fd5b855b8181101561471257803583529183019183016146fb565b50929695505050505050565b600082601f83011261472f57600080fd5b8135602061473f614519836143ba565b828152610120928302850182019282820191908785111561475f57600080fd5b8387015b858110156146395781818a03121561477b5760008081fd5b61478361425a565b61478d8a83614661565b815260408a605f8401126147a15760008081fd5b6147a9614232565b8060c085018d8111156147bc5760008081fd5b8386015b818110156147df576147d28f82614661565b8452928a019284016147c0565b50818a8601526147ef8e82614661565b84860152505050506148058a61010084016146b1565b60608201528452928401928101614763565b6000806040838503121561482a57600080fd5b82356001600160401b038082111561484157600080fd5b818501915085601f83011261485557600080fd5b81356020614865614519836143ba565b82815260c0928302850182019282820191908a85111561488457600080fd5b958301955b848710156148aa5761489b8b886143dd565b83529586019591830191614889565b50965050860135925050808211156148c157600080fd5b506148ce8582860161471e565b9150509250929050565b6000602082840312156148ea57600080fd5b81356001600160501b031981168114613e1057600080fd5b6000806040838503121561491557600080fd5b61491e83614107565b9150602083013560ff8116811461493457600080fd5b809150509250929050565b60006020828403121561495157600080fd5b613e10826142ce565b60006020828403121561496c57600080fd5b613e108261434e565b634e487b7160e01b600052602160045260246000fd5b601481106149a957634e487b7160e01b600052602160045260246000fd5b9052565b82815260408101613e10602083018461498b565b60008082840360608112156149d557600080fd5b60408112156149e357600080fd5b506149ec614232565b6149f584614180565b815260208401356001600160601b031981168114614a1257600080fd5b60208201529150613d196040840161434e565b600060208284031215614a3757600080fd5b613e1082614123565b60008060408385031215614a5357600080fd5b50508035926020909101359150565b60008060008060808587031215614a7857600080fd5b614a8185614180565b9350614a8f60208601614180565b9250614a9d604086016142ce565b9150614175606086016142ce565b600082601f830112614abc57600080fd5b81356020614acc614519836143ba565b82815260059290921b84018101918181019086841115614aeb57600080fd5b8286015b84811015614b0d57614b0081614180565b8352918301918301614aef565b509695505050505050565b60008060e08385031215614b2b57600080fd5b614b3584846143dd565b915060c08301356001600160401b0380821115614b5157600080fd5b818501915085601f830112614b6557600080fd5b81356020614b75614519836143ba565b82815260059290921b84018101918181019089841115614b9457600080fd5b8286015b84811015614c5657803586811115614baf57600080fd5b870160c0818d03601f19011215614bc557600080fd5b614bcd61427c565b614bd8868301614180565b8152604082013586820152606082013560408201526080820135606082015260a08083013589811115614c0b5760008081fd5b614c198f8983870101614462565b60808401525060c083013589811115614c325760008081fd5b614c408f8983870101614aab565b9183019190915250845250918301918301614b98565b508096505050505050509250929050565b600060208284031215614c7957600080fd5b5051919050565b600060208284031215614c9257600080fd5b81518015158114613e1057600080fd5b634e487b7160e01b600052601160045260246000fd5b81810381811115610c5257610c52614ca2565b60208082526012908201527113dc151e5c19481b9bdd081b585d18da195960721b604082015260600190565b6020808252601690820152751058d8dbdd5b9d081b9bdd081c9959da5cdd195c995960521b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b6001600160401b03818116838216019080821115614d5d57614d5d614ca2565b5092915050565b600063ffffffff808316818103614d7d57614d7d614ca2565b6001019392505050565b6001600160401b03828116828216039080821115614d5d57614d5d614ca2565b63ffffffff818116838216019080821115614d5d57614d5d614ca2565b600060c08201905063ffffffff83511682526001600160401b03602084015116602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015292915050565b600060018201614e2957614e29614ca2565b5060010190565b600061ffff808316818103614d7d57614d7d614ca2565b8060005b6002811015611a14578151845260209384019390910190600101614e4b565b60408101610c528284614e47565b600181815b80851115614eb3578160001904821115614e9957614e99614ca2565b80851615614ea657918102915b93841c9390800290614e7d565b509250929050565b600082614eca57506001610c52565b81614ed757506000610c52565b8160018114614eed5760028114614ef757614f13565b6001915050610c52565b60ff841115614f0857614f08614ca2565b50506001821b610c52565b5060208310610133831016604e8410600b8410161715614f36575081810a610c52565b614f408383614e78565b8060001904821115614f5457614f54614ca2565b029392505050565b6000613e1060ff841683614ebb565b634e487b7160e01b600052601260045260246000fd5b60006001600160801b0380841680614f9b57614f9b614f6b565b92169190910492915050565b8082028115828204841417610c5257610c52614ca2565b60005b83811015614fd9578181015183820152602001614fc1565b50506000910152565b82815260008251614ffa816020850160208701614fbe565b919091016020019392505050565b60008151808452615020816020860160208601614fbe565b601f01601f19169290920160200192915050565b602081526000613e106020830184615008565b61012081016150568287614e47565b60408083018660005b600280821061506e57506150a9565b82518460005b83811015615092578251825260209283019290910190600101615074565b50505092840192506020919091019060010161505f565b505050506150ba60c0830185614e47565b61010082018360005b60018110156150e25781518352602092830192909101906001016150c3565b50505095945050505050565b6001600160801b03828116828216039080821115614d5d57614d5d614ca2565b60006001600160401b03808316818103614d7d57614d7d614ca2565b6001600160401b0384168152615143602082018461498b565b606060408201526000613cf66060830184615008565b60f89490941b6001600160f81b031916845260e09290921b6001600160e01b031916600184015260f01b6001600160f01b031916600583015260801b6001600160801b031916600782015260170190565b60ff8181168382160190811115610c5257610c52614ca2565b6001600160801b03818116838216019080821115614d5d57614d5d614ca2565b6000826151f2576151f2614f6b565b500690565b60008261520657615206614f6b565b500490565b60ff8181168382160290811690818114614d5d57614d5d614ca2565b60008351615239818460208801614fbe565b83519083019061524d818360208801614fbe565b01949350505050565b8481528360208201528260408201526000825161527a816060850160208701614fbe565b9190910160600195945050505050565b6000825161529c818460208701614fbe565b9190910192915050565b80820180821115610c5257610c52614ca256fea2646970667358221220fba1e65b685ab39d3f7513470655978ee23356650fcf871cadee1c154e626bee64736f6c63430008110033",
  "deployedBytecode": "0x6080604052600436106102135760003560e01c8063ad732aeb11610118578063cea94a16116100a0578063ef4c4bef1161006f578063ef4c4bef14610855578063f2fde38b14610872578063f6326fb314610892578063ff73e11b1461089a578063fffd6b0c146108ba57600080fd5b8063cea94a161461076d578063d0b2705314610780578063dab92afa146107ef578063e9d4e6a61461083157600080fd5b8063b46dbe1a116100e7578063b46dbe1a146106b3578063bc650ff3146106f8578063bfa87e4614610718578063c488a09c1461073a578063c94c5b7c1461074d57600080fd5b8063ad732aeb14610606578063ad93b0ab14610623578063af38fdfc14610656578063b1b16ff01461068c57600080fd5b8063773c02d41161019b57806397be8fc51161016a57806397be8fc5146105025780639a7014a8146105295780639ba0d14614610577578063a615e171146105b2578063a74ea63f146105e657600080fd5b8063773c02d4146104475780637873db351461048b57806386316f8a146104ab5780638da5cb5b146104e457600080fd5b80633bce090b116101e25780633bce090b1461037f57806355f7edd41461039f578063632a5607146103de578063663ea2e2146103fe578063715018a61461043257600080fd5b8063017146ed1461025457806309fb37fc14610276578063134ea302146102c9578063238306211461034f57600080fd5b3661024f5760405134815233907f4103257eaac983ca79a70d28f90dfc4fa16b619bb0c17ee7cab0d4034c2796249060200160405180910390a2005b600080fd5b34801561026057600080fd5b5061027461026f36600461413a565b6108da565b005b34801561028257600080fd5b506102ac610291366004614194565b6004602052600090815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156102d557600080fd5b5061033d6102e43660046141af565b6008602052600090815260409020805460019091015463ffffffff80831692600160201b81049091169161ffff600160401b8304811692600160501b8104909116916001600160801b03600160601b9092048216911686565b6040516102c0969594939291906141d9565b34801561035b57600080fd5b5061036f61036a366004614365565b610b4a565b60405190151581526020016102c0565b34801561038b57600080fd5b5061027461039a366004614390565b610c58565b3480156103ab57600080fd5b50600a546103c690600160701b90046001600160401b031681565b6040516001600160401b0390911681526020016102c0565b3480156103ea57600080fd5b506102746103f93660046144d1565b610e82565b34801561040a57600080fd5b506102ac7f000000000000000000000000000000000000000000000000000000000000000081565b34801561043e57600080fd5b506102746110fd565b34801561045357600080fd5b50610478610462366004614646565b60016020526000908152604090205461ffff1681565b60405161ffff90911681526020016102c0565b34801561049757600080fd5b506102746104a6366004614817565b611111565b3480156104b757600080fd5b50600b546104cf90600160401b900463ffffffff1681565b60405163ffffffff90911681526020016102c0565b3480156104f057600080fd5b506000546001600160a01b03166102ac565b34801561050e57600080fd5b50600a546103c690600160301b90046001600160401b031681565b34801561053557600080fd5b5061055f6105443660046148d8565b6007602052600090815260409020546001600160801b031681565b6040516001600160801b0390911681526020016102c0565b34801561058357600080fd5b506105a4610592366004614194565b60066020526000908152604090205481565b6040519081526020016102c0565b3480156105be57600080fd5b506102ac7f000000000000000000000000000000000000000000000000000000000000000081565b3480156105f257600080fd5b50610274610601366004614902565b61154e565b34801561061257600080fd5b50600b546104cf9063ffffffff1681565b34801561062f57600080fd5b506104cf61063e366004614646565b60036020526000908152604090205463ffffffff1681565b34801561066257600080fd5b506102ac61067136600461493f565b6002602052600090815260409020546001600160a01b031681565b34801561069857600080fd5b50600a546103c690600160b01b90046001600160401b031681565b3480156106bf57600080fd5b506106ea6106ce36600461495a565b6005602052600090815260409020805460019091015460ff1682565b6040516102c09291906149ad565b34801561070457600080fd5b5061036f6107133660046149c1565b6116ab565b34801561072457600080fd5b50600a5461047890600160201b900461ffff1681565b610274610748366004614a25565b6117ae565b34801561075957600080fd5b50610274610768366004614390565b61193f565b61027461077b366004614a40565b611a1a565b34801561078c57600080fd5b506107d661079b366004614a62565b61ffff811663ffff0000601084901b161767ffffffff00000000602085901b161763ffffffff60401b604086901b161760a01b949350505050565b6040516001600160a01b031990911681526020016102c0565b3480156107fb57600080fd5b5061081f61080a36600461493f565b60096020526000908152604090205460ff1681565b60405160ff90911681526020016102c0565b34801561083d57600080fd5b50600b546104cf90600160201b900463ffffffff1681565b34801561086157600080fd5b50600a546104cf9063ffffffff1681565b34801561087e57600080fd5b5061027461088d366004614646565b611b50565b610274611bc9565b3480156108a657600080fd5b5061036f6108b5366004614365565b611cc9565b3480156108c657600080fd5b506102746108d5366004614b18565b611dd9565b3360009081526003602052604090205463ffffffff16156109425760405162461bcd60e51b815260206004820152601a60248201527f4163636f756e7420616c7265616479207265676973746572656400000000000060448201526064015b60405180910390fd5b6001600160a01b0382166000818152600160205260408082205490516370a0823160e01b815230600482015261ffff909116928592916370a0823190602401602060405180830381865afa15801561099e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109c29190614c67565b6040516323b872dd60e01b81523360048201523060248201526001600160801b03861660448201529091506001600160a01b038316906323b872dd906064016020604051808303816000875af1158015610a20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a449190614c80565b506040516370a0823160e01b81523060048201526000906001600160a01b038416906370a0823190602401602060405180830381865afa158015610a8c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ab09190614c67565b90506000610ac6610ac18484614cb8565b612106565b9050856001600160801b0316816001600160801b031614610b295760405162461bcd60e51b815260206004820152601b60248201527f4465706f73697420616d6f756e7420696e636f6e73697374656e7400000000006044820152606401610939565b610b34338a8a612173565b610b3f338683612383565b505050505050505050565b6001600160401b03811660009081526005602090815260408083208151808301909252805482526001810154849383019060ff166013811115610b8f57610b8f614975565b6013811115610ba057610ba0614975565b9052509050600281602001516013811115610bbd57610bbd614975565b14610bda5760405162461bcd60e51b815260040161093990614ccb565b610be88482600001516124a9565b610c4c5760405162461bcd60e51b815260206004820152602f60248201527f4465706f7369742072657175657374206e6f74206578697374656420696e204c60448201526e31207265717565737420717565756560881b6064820152608401610939565b60019150505b92915050565b3360009081526003602052604081205463ffffffff169003610c8c5760405162461bcd60e51b815260040161093990614cf7565b6001600160a01b0382166000818152600160205260408082205490516370a0823160e01b815230600482015261ffff909116928592916370a0823190602401602060405180830381865afa158015610ce8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d0c9190614c67565b6040516323b872dd60e01b81523360048201523060248201526001600160801b03861660448201529091506001600160a01b038316906323b872dd906064016020604051808303816000875af1158015610d6a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d8e9190614c80565b506040516370a0823160e01b81523060048201526000906001600160a01b038416906370a0823190602401602060405180830381865afa158015610dd6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dfa9190614c67565b90506000610e0b610ac18484614cb8565b9050856001600160801b0316816001600160801b031614610e6e5760405162461bcd60e51b815260206004820152601b60248201527f4465706f73697420616d6f756e7420696e636f6e73697374656e7400000000006044820152606401610939565b610e79338683612383565b50505050505050565b8051600090815b83518163ffffffff161015610f6057610ec1848263ffffffff1681518110610eb357610eb3614d27565b6020026020010151826124c5565b838163ffffffff1681518110610ed957610ed9614d27565b6020026020010151600001516020015183610ef49190614d3d565b9250838163ffffffff1681518110610f0e57610f0e614d27565b6020026020010151600001516000015163ffffffff167f036cca5fc51c8ae4669768ca5966397d55516afb697541fdd4fe7e6b253c075c60405160405180910390a2610f5981614d64565b9050610e89565b5081600a60068282829054906101000a90046001600160401b0316610f859190614d3d565b92506101000a8154816001600160401b0302191690836001600160401b0316021790555081600a60168282829054906101000a90046001600160401b0316610fcd9190614d87565b92506101000a8154816001600160401b0302191690836001600160401b0316021790555081600a600e8282829054906101000a90046001600160401b03166110159190614d87565b92506101000a8154816001600160401b0302191690836001600160401b0316021790555080600b60088282829054906101000a900463ffffffff1661105a9190614da7565b82546101009290920a63ffffffff818102199093169183160217909155600b54600160201b81048216600160401b909104909116111590506110f85760405162461bcd60e51b815260206004820152603160248201527f457865637574656420626c6f636b206e756d626572206578636565647320707260448201527037bb32b210313637b1b590373ab6b132b960791b6064820152608401610939565b505050565b6111056127ae565b61110f6000612808565b565b600b54600160201b900463ffffffff1660005b83518110156114ad5761115c6040518060400160405280600e81526020016d5b70726f766520626c6f636b735d60901b815250612858565b61118a6040518060400160405280600d81526020016c313637b1b590373ab6b132b91d60991b815250612858565b6111b684828151811061119f5761119f614d27565b60200260200101516000015163ffffffff1661289b565b6111e26040518060400160405280600b81526020016a31b7b6b6b4ba36b2b73a1d60a91b815250612858565b6112088482815181106111f7576111f7614d27565b6020026020010151606001516128e0565b6112386040518060400160405280600f81526020016e3618903932b8bab2b9ba10373ab69d60891b815250612858565b61126784828151811061124d5761124d614d27565b6020026020010151602001516001600160401b031661289b565b61129f604051806040016040528060178152602001763832b73234b733903937b6363ab8103a3c103430b9b41d60491b815250612858565b6112c58482815181106112b4576112b4614d27565b6020026020010151604001516128e0565b6112f16040518060400160405280600b81526020016a39ba30ba32903937b7ba1d60a91b815250612858565b61131784828151811061130657611306614d27565b6020026020010151608001516128e0565b6113426040518060400160405280600a8152602001693a34b6b2b9ba30b6b81d60b11b815250612858565b61136884828151811061135757611357614d27565b602002602001015160a0015161289b565b60066000611377846001614da7565b63ffffffff1663ffffffff168152602001908152602001600020548482815181106113a4576113a4614d27565b60200260200101516040516020016113bc9190614dc4565b60405160208183030381529060405280519060200120146114045760405162461bcd60e51b81526020600482015260026024820152616f3160f01b6044820152606401610939565b61144084828151811061141957611419614d27565b602002602001015184838151811061143357611433614d27565b6020026020010151612925565b83818151811061145257611452614d27565b60200260200101516000015163ffffffff167f4641de497fbc15d6b4019eaac30d1a17a2fcc6ed1b08cadfb8c84804330ea49f60405160405180910390a261149982614d64565b9150806114a581614e17565b915050611124565b50600b5463ffffffff90811690821611156115255760405162461bcd60e51b815260206004820152603260248201527f50726f76656420626c6f636b206e756d626572206578636565647320636f6d6d60448201527134ba3a32b210313637b1b590373ab6b132b960711b6064820152608401610939565b600b805463ffffffff909216600160201b0267ffffffff00000000199092169190911790555050565b6115566127ae565b6001600160a01b03821660009081526001602052604090205461ffff16156115c05760405162461bcd60e51b815260206004820152601860248201527f546f6b656e20616c7265616479207265676973746572656400000000000000006044820152606401610939565b600a80546001600160a01b0384166000818152600160209081526040808320805461ffff191661ffff600160201b978890048116919091179091558654869004811684526002835281842080546001600160a01b031916861790558654869004811684526009835292819020805460ff891660ff199091161790559454945193909404168252917f5868dd46d60eea1273438dee175d389eb9c1a6796fc88caef07199b237f213b0910160405180910390a2600a805460049061168d90600160201b900461ffff16614e30565b91906101000a81548161ffff021916908361ffff1602179055505050565b6001600160401b03811660009081526005602090815260408083208151808301909252805482526001810154849383019060ff1660138111156116f0576116f0614975565b601381111561170157611701614975565b905250905060018160200151601381111561171e5761171e614975565b1461173b5760405162461bcd60e51b815260040161093990614ccb565b611749848260000151612a69565b610c4c5760405162461bcd60e51b815260206004820152603060248201527f52656769737465722072657175657374206e6f74206578697374656420696e2060448201526f4c31207265717565737420717565756560801b6064820152608401610939565b3360009081526003602052604081205463ffffffff1690036117e25760405162461bcd60e51b815260040161093990614cf7565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001660009081526001602052604090205461ffff1661182a338284612a75565b604051632e1a7d4d60e01b81526001600160801b03831660048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632e1a7d4d90602401600060405180830381600087803b15801561189457600080fd5b505af11580156118a8573d6000803e3d6000fd5b5050604051600092503391506001600160801b038516908381818185875af1925050503d80600081146118f7576040519150601f19603f3d011682016040523d82523d6000602084013e6118fc565b606091505b50509050806110f85760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b6044820152606401610939565b3360009081526003602052604081205463ffffffff1690036119735760405162461bcd60e51b815260040161093990614cf7565b6001600160a01b03821660009081526001602052604090205461ffff1661199b338284612a75565b60405163a9059cbb60e01b81523360048201526001600160801b03831660248201526001600160a01b0384169063a9059cbb906044016020604051808303816000875af11580156119f0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a149190614c80565b50505050565b3360009081526003602052604090205463ffffffff1615611a7d5760405162461bcd60e51b815260206004820152601a60248201527f4163636f756e7420616c726561647920726567697374657265640000000000006044820152606401610939565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001660009081526001602052604081205461ffff1690611ac434612106565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b158015611b2157600080fd5b505af1158015611b35573d6000803e3d6000fd5b5050505050611b45338585612173565b611a14338383612383565b611b586127ae565b6001600160a01b038116611bbd5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610939565b611bc681612808565b50565b3360009081526003602052604081205463ffffffff169003611bfd5760405162461bcd60e51b815260040161093990614cf7565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001660009081526001602052604081205461ffff1690611c4434612106565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b158015611ca157600080fd5b505af1158015611cb5573d6000803e3d6000fd5b5050505050611cc5338383612383565b5050565b6001600160401b03811660009081526005602090815260408083208151808301909252805482526001810154849383019060ff166013811115611d0e57611d0e614975565b6013811115611d1f57611d1f614975565b9052509050600581602001516013811115611d3c57611d3c614975565b14611d595760405162461bcd60e51b815260040161093990614ccb565b611d67848260000151612bd4565b610c4c5760405162461bcd60e51b815260206004820152603760248201527f466f726365642077697468647261772072657175657374206e6f74206578697360448201527f74656420696e204c3120726571756573742071756575650000000000000000006064820152608401610939565b611e066040518060400160405280600c81526020016b636f6d6d6974426c6f636b7360a01b815250612858565b600b54611e189063ffffffff1661289b565b81604051602001611e299190614dc4565b60408051601f198184030181529181528151602092830120600b5463ffffffff166000908152600690935291205414611ea45760405162461bcd60e51b815260206004820152601c60248201527f436f6d6d6974656420626c6f636b20696e636f6e73697374656e6379000000006044820152606401610939565b60005b81518163ffffffff161015611fa857611edf83838363ffffffff1681518110611ed257611ed2614d27565b6020026020010151612be0565b92508260200151600a60168282829054906101000a90046001600160401b0316611f099190614d3d565b92506101000a8154816001600160401b0302191690836001600160401b0316021790555082604051602001611f3e9190614dc4565b60408051601f198184030181528282528051602091820120865163ffffffff90811660009081526006909352928220558551909116917fdf39762be389bd636a9efb2e4f3b26ac7d22eda4f0840f389209987a09e50fc99190a2611fa181614d64565b9050611ea7565b508051600b8054600090611fc390849063ffffffff16614da7565b825463ffffffff9182166101009390930a928302919092021990911617905550600a546001600160401b03600160701b82048116600160b01b9092041611156120c05760405162461bcd60e51b815260206004820152607f60248201527f546865206e756d626572206f6620746f74616c20636f6d6d697474656420707260448201527f696f72697479207265717565737473206e6565647320746f206265206c65737360648201527f207468616e206f7220657175616c20746f20746865206e756d626572206f662060848201527f746f74616c2070656e64696e67207072696f726974792072657175657374730060a482015260c401610939565b5050600b805463ffffffff811663ffffffff19909116179055600a805467ffffffffffffffff60b01b198116600160b01b918290046001600160401b0316909102179055565b60006001600160801b0382111561216f5760405162461bcd60e51b815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e20316044820152663238206269747360c81b6064820152608401610939565b5090565b6040805180820182528381526020810183905290516314d2f97b60e11b81526000916001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916329a5f2f6916121d291600401614e6a565b602060405180830381865afa1580156121ef573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122139190614c67565b600a805460609290921b925063ffffffff90911690600061223383614d64565b82546101009290920a63ffffffff8181021990931691831602179091556001600160a01b0386166000818152600360209081526040808320805463ffffffff19169587169586179055938252600481529083902080546001600160a01b0319169092179091558151808301909252600e82526d696e205f7265676973746572282960901b908201526122c490612858565b6122d38163ffffffff1661289b565b6122dc82612eba565b6040805180820190915263ffffffff821681526001600160601b031983166020820152600061230a82612f03565b905061231887600183612f5d565b6040805163ffffffff85168152602081018890529081018690526001600160601b0319851660608201526001600160a01b038816907fa39b106e7a0ee88543b31a791d6243d6aa6c2b849483144a11f0209595b764639060800160405180910390a250505050505050565b6001600160a01b03831660009081526003602090815260409182902054825160608101845263ffffffff90911680825261ffff8616828401526001600160801b038516828501528351808501909452600d84526c696e205f6465706f736974282960981b9284019290925290916123f990612858565b6124088263ffffffff1661289b565b6124158461ffff1661289b565b612427836001600160801b031661289b565b600061243282613097565b905061244086600283612f5d565b6040805163ffffffff8516815261ffff871660208201526001600160801b038616918101919091526001600160a01b038716907fc8f60e32fd965b2469b4a5f60858ecd4e08a7ea7fbc470dcb9437fd07e9fbf4c906060015b60405180910390a2505050505050565b6000816124b584613097565b8051906020012014905092915050565b81515163ffffffff16600090815260066020908152604091829020548451925190926124f392909101614dc4565b604051602081830303815290604052805190602001201461253b5760405162461bcd60e51b8152602060048201526002602482015261379960f11b6044820152606401610939565b600b54612556908290600160401b900463ffffffff16614da7565b612561906001614da7565b82515163ffffffff9081169116146125a05760405162461bcd60e51b81526020600482015260026024820152616f3360f01b6044820152606401610939565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060005b8360200151518163ffffffff161015611a1457600084602001518263ffffffff16815181106125f5576125f5614d27565b6020026020010151905060008160008151811061261457612614614d27565b016020015160f81c601381111561262d5761262d614975565b9050600481601381111561264357612643614975565b03612672576000612653836130b7565b905061266c816000015182602001518360400151613194565b50612770565b600581601381111561268657612686614975565b0361270857600061269683613232565b60208082015161ffff16600090815260099091526040812054919250906126ec906126c59060ff16600a614f5c565b6305f5e10084604001516126d99190614f81565b6001600160801b0316610ac19190614fa7565b90506127018260000151836020015183613194565b5050612770565b600c81601381111561271c5761271c614975565b0361273757600061272c83613314565b905061266c81613467565b60405162461bcd60e51b815260206004820152600e60248201526d496e76616c6964206f705479706560901b6044820152606401610939565b8382604051602001612783929190614fe2565b6040516020818303038152906040528051906020012093505050806127a790614d64565b90506125c4565b6000546001600160a01b0316331461110f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610939565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b611bc68160405160240161286c9190615034565b60408051601f198184030181529190526020810180516001600160e01b031663104c13eb60e21b179052613726565b611bc6816040516024016128b191815260200190565b60408051601f198184030181529190526020810180516001600160e01b031663f82c50f160e01b179052613726565b611bc6816040516024016128f691815260200190565b60408051601f198184030181529190526020810180516001600160e01b03166327b7cf8560e01b179052613726565b80516020820151604080840151606085015191516343753b4d60e01b81527f0000000000000000000000000000000000000000000000000000000000000000946001600160a01b038616946343753b4d94612987949293919291600401615047565b602060405180830381865afa1580156129a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129c89190614c80565b612a045760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b210383937b7b360991b6044820152606401610939565b60608381015190830151516001600160fd1b039081169116146110f85760405162461bcd60e51b815260206004820152601860248201527f636f6d6d69746d656e7420696e636f6e73697374656e637900000000000000006044820152606401610939565b6000816124b584612f03565b6001600160a01b0383811660009081526003602090815260408083205463ffffffff16808452600490925282205490921660a085901b61ffff60a01b161760501b6001600160501b031981166000908152600760205260409020549091506001600160801b03908116908416811015612b405760405162461bcd60e51b815260206004820152602760248201527f576974686472617720616d6f756e7420657863656564732070656e64696e672060448201526662616c616e636560c81b6064820152608401610939565b612b4a84826150ee565b6001600160501b0319831660009081526007602090815260409182902080546001600160801b0319166001600160801b03948516179055815163ffffffff8716815261ffff891691810191909152918616908201526001600160a01b038716907f3047f144743f71ba5cf2167e4f9b199d5730846dad5c68c75270d10e65a0a5d590606001612499565b6000816124b584613747565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a08101919091528260a0015182606001511015612cab5760405162461bcd60e51b815260206004820152605260248201527f54696d657374616d70206f6620746865206e657720626c6f636b206e6565647360448201527f20746f2062652067726561746572207468616e206f7220657175616c20746f206064820152717468652070726576696f757320626c6f636b60701b608482015260a401610939565b6000806000612cb985613765565b9250925092506000612ccc878784613c4c565b9050612cfe6040518060400160405280600f81526020016e5b636f6d6d697420626c6f636b735d60881b815250612858565b612d2c6040518060400160405280600d81526020016c313637b1b590373ab6b132b91d60991b815250612858565b8551612d3d9063ffffffff1661289b565b612d696040518060400160405280600b81526020016a31b7b6b6b4ba36b2b73a1d60a91b815250612858565b612d72816128e0565b612da26040518060400160405280600f81526020016e3618903932b8bab2b9ba10373ab69d60891b815250612858565b612db4836001600160401b031661289b565b612dec604051806040016040528060178152602001763832b73234b733903937b6363ab8103a3c103430b9b41d60491b815250612858565b612df5846128e0565b612e216040518060400160405280600b81526020016a39ba30ba32903937b7ba1d60a91b815250612858565b612e2e86602001516128e0565b612e596040518060400160405280600a8152602001693a34b6b2b9ba30b6b81d60b11b815250612858565b612e66866060015161289b565b6040518060c00160405280876000015163ffffffff168152602001846001600160401b0316815260200185815260200182815260200187602001518152602001876060015181525094505050505092915050565b6040516001600160601b031982166024820152611bc69060440160408051601f198184030181529190526020810180516001600160e01b0316635188e3e960e01b179052613726565b8051602080830151604051600160f81b9281019290925260e09290921b6001600160e01b03191660218201526001600160601b031990911660258201526060906039015b6040516020818303038152906040529050919050565b600a54600090612f86906001600160401b03600160701b8204811691600160301b900416614d3d565b90506000828051906020012090506040518060400160405280828152602001856013811115612fb757612fb7614975565b90526001600160401b0383166000908152600560209081526040909120825181559082015160018083018054909160ff1990911690836013811115612ffe57612ffe614975565b021790555050600a8054909150600e9061302790600160701b90046001600160401b031661510e565b91906101000a8154816001600160401b0302191690836001600160401b03160217905550846001600160a01b03167f3d42da54770ec4160e30921f7f1c788d1eda692956fde060912b4eea9adbdb2c8386866040516130889392919061512a565b60405180910390a25050505050565b6060600282516020808501516040808701519051612f4795949301615159565b604080516060810182526000808252602082018190529181019190915260016130e08382613cff565b63ffffffff16835290506130f48382613d22565b61ffff16602084015290506131098382613d3c565b6001600160801b03166040840152905060106002613129600460016151aa565b61313391906151aa565b61313d91906151aa565b60ff16811461318e5760405162461bcd60e51b815260206004820152601b60248201527f526561642077697468647261772070756264617461206572726f7200000000006044820152606401610939565b50919050565b63ffffffff83166000908152600460205260408120546001600160a01b031660a084901b61ffff60a01b161760501b6001600160501b031981166000908152600760205260409020549091506001600160801b03166131f383826151c3565b6001600160501b031992909216600090815260076020526040902080546001600160801b0319166001600160801b039093169290921790915550505050565b6040805160608101825260008082526020820181905291810191909152600161325b8382613cff565b63ffffffff168352905061326f8382613d22565b61ffff16602084015290506132848382613d3c565b6001600160801b031660408401529050601060026132a4600460016151aa565b6132ae91906151aa565b6132b891906151aa565b60ff16811461318e5760405162461bcd60e51b815260206004820152602260248201527f5265616420666f7263656420776974686472617720707562646174612065727260448201526137b960f11b6064820152608401610939565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a081019190915260016133528382613cff565b63ffffffff16835290506133668382613d22565b61ffff166020840152905061337b8382613d3c565b6001600160801b0316604084015290506133958382613d22565b61ffff16606084015290506133aa8382613d3c565b6001600160801b0316608084015290506133c48382613cff565b63ffffffff1660a0840152905060046010600281816133e48560016151aa565b6133ee91906151aa565b6133f891906151aa565b61340291906151aa565b61340c91906151aa565b61341691906151aa565b60ff16811461318e5760405162461bcd60e51b815260206004820152601e60248201527f526561642061756374696f6e20656e642070756264617461206572726f7200006044820152606401610939565b805160a080830151606084015160208086015160009560401b63ffffffff60401b169390911b67ffffffff000000001660109290921b63ffff00001661ffff909116171717901b6001600160a01b031981166000908152600860209081526040808320815160c081018352815463ffffffff8082168352600160201b8204811683870190815261ffff600160401b84048116858801908152600160501b8504821660608088019182526001600160801b03600160601b9097048716608089015260019098015490951660a0808801919091528d5185168752968d01805183169091528c8901518216909452948b0151909116905251909116845260099092529091205491925090613594906135809060ff16600a614f5c565b6305f5e10085608001516126d99190614f81565b816080018181516135a591906151c3565b6001600160801b031690525060208084015161ffff166000908152600990915260409020546135f0906135dc9060ff16600a614f5c565b6305f5e10085604001516126d99190614f81565b8160a00181815161360191906151c3565b6001600160801b039081169091526001600160a01b03198416600090815260086020908152604091829020855181549287015187850151606089015160808a015163ffffffff80861667ffffffffffffffff1990981697909717600160201b97851697909702969096176bffffffff00000000000000001916600160401b61ffff8085169190910261ffff60501b191691909117600160501b91831691909102176fffffffffffffffffffffffffffffffff60601b1916600160601b878a160217855560a08a0151600190950180546001600160801b0319169886169890981790975594517f69b64e7eb82c7fc6abe7147382f19b641ece3aaa510f0f6e9338b0acc5bb0536975061371996929591949193906141d9565b60405180910390a1505050565b80516a636f6e736f6c652e6c6f67602083016000808483855afa5050505050565b606060058251602080850151604051612f4794939260009101615159565b6080810151600a54600091829160609190839061379b906001600160401b03600160b01b8204811691600160301b900416614d3d565b82517fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4709650600095509091506137d390600c906151e3565b156138465760405162461bcd60e51b815260206004820152603a60248201527f5075626c69632064617461206c656e6774682073686f756c642062652065766560448201527f6e6c792064697669646564206279204348554e4b5f42595445530000000000006064820152608401610939565b815161385490600c906151f7565b6001600160401b0381111561386b5761386b61421c565b6040519080825280601f01601f191660200182016040528015613895576020820181803683370190505b50925060005b8660a0015151811015613c425760008760a0015182815181106138c0576138c0614d27565b602002602001015163ffffffff169050835181106139365760405162461bcd60e51b815260206004820152602d60248201527f4f66667365742073686f756c64206265206c657373207468616e207075626c6960448201526c0c640c8c2e8c240d8cadccee8d609b1b6064820152608401610939565b613941600c826151e3565b156139a55760405162461bcd60e51b815260206004820152602e60248201527f4f66667365742073686f756c64206265206576656e6c7920646976696465642060448201526d6279204348554e4b5f425954455360901b6064820152608401610939565b60006139b2600c836151f7565b90508581815181106139c6576139c6614d27565b01602001516001600160f81b03191615613a225760405162461bcd60e51b815260206004820152601f60248201527f4f66667365742073686f756c64206e6f7420626520736574206265666f7265006044820152606401610939565b600160f81b868281518110613a3957613a39614d27565b60200101906001600160f81b031916908160001a9053506000858381518110613a6457613a64614d27565b016020015160f81c6013811115613a7d57613a7d614975565b90506001816013811115613a9357613a93614975565b03613ae3576000613ab38785613aab600c600461520b565b60ff16613d56565b90506000613ac082613e17565b9050613ad0816107138c8a614d3d565b50613ada8a61510e565b99505050613c2c565b6002816013811115613af757613af7614975565b03613b2c576000613b0f8785613aab600c600261520b565b90506000613b1c82613ef7565b9050613ad08161036a8c8a614d3d565b60606004826013811115613b4257613b42614975565b03613b5f57613b588785613aab600c600261520b565b9050613c2a565b6005826013811115613b7357613b73614975565b03613bb857613b898785613aab600c600261520b565b90506000613b9682613232565b9050613ba6816108b58c8a614d3d565b50613bb08a61510e565b995050613c2a565b600c826013811115613bcc57613bcc614975565b03613be257613b588785613aab600c600461520b565b60405162461bcd60e51b815260206004820152601a60248201527f556e737570706f72746564206f7065726174696f6e20747970650000000000006044820152606401610939565b505b5050508080613c3a90614e17565b91505061389b565b5050509193909250565b600080828460800151604051602001613c66929190615227565b6040516020818303038152906040529050600285608001518560200151866040015184604051602001613c9c9493929190615256565b60408051601f1981840301815290829052613cb69161528a565b602060405180830381855afa158015613cd3573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190613cf69190614c67565b95945050505050565b600080613d0d8360046152a6565b9150613d198484613fce565b90509250929050565b600080613d308360026152a6565b9150613d19848461401e565b600080613d4a8360106152a6565b9150613d198484614063565b6060613d6282846152a6565b84511015613d965760405162461bcd60e51b81526020600482015260016024820152602d60f91b6044820152606401610939565b6000826001600160401b03811115613db057613db061421c565b6040519080825280601f01601f191660200182016040528015613dda576020820181803683370190505b5090508215613e0d57602081018381016020860187015b81831015613e09578051835260209283019201613df1565b5050505b90505b9392505050565b60408051808201909152600080825260208201526001613e378382613cff565b63ffffffff1683529050613e4b8382613d22565b509050613e588382613d3c565b509050613e6583826140a8565b6001600160601b03191660208401529050601460106002613e88600460016151aa565b613e9291906151aa565b613e9c91906151aa565b613ea691906151aa565b60ff16811461318e5760405162461bcd60e51b815260206004820152601b60248201527f526561642072656769737465722070756264617461206572726f7200000000006044820152606401610939565b60408051606081018252600080825260208201819052918101919091526001613f208382613cff565b63ffffffff1683529050613f348382613d22565b61ffff1660208401529050613f498382613d3c565b6001600160801b03166040840152905060106002613f69600460016151aa565b613f7391906151aa565b613f7d91906151aa565b60ff16811461318e5760405162461bcd60e51b815260206004820152601a60248201527f52656164206465706f7369742070756264617461206572726f720000000000006044820152606401610939565b600080613fdc8360046152a6565b905080845110156140135760405162461bcd60e51b81526020600482015260016024820152602b60f91b6044820152606401610939565b929092015192915050565b60008061402c8360026152a6565b905080845110156140135760405162461bcd60e51b81526020600482015260016024820152601560fa1b6044820152606401610939565b6000806140718360106152a6565b905080845110156140135760405162461bcd60e51b81526020600482015260016024820152605760f81b6044820152606401610939565b6000806140b68360146152a6565b9150613d19848460006140ca8260146152a6565b835110156140fe5760405162461bcd60e51b81526020600482015260016024820152605360f81b6044820152606401610939565b50016020015190565b80356001600160a01b038116811461411e57600080fd5b919050565b80356001600160801b038116811461411e57600080fd5b6000806000806080858703121561415057600080fd5b843593506020850135925061416760408601614107565b915061417560608601614123565b905092959194509250565b803563ffffffff8116811461411e57600080fd5b6000602082840312156141a657600080fd5b613e1082614180565b6000602082840312156141c157600080fd5b81356001600160a01b031981168114613e1057600080fd5b63ffffffff968716815294909516602085015261ffff9283166040850152911660608301526001600160801b03908116608083015290911660a082015260c00190565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b03811182821017156142545761425461421c565b60405290565b604051608081016001600160401b03811182821017156142545761425461421c565b60405160c081016001600160401b03811182821017156142545761425461421c565b604051601f8201601f191681016001600160401b03811182821017156142c6576142c661421c565b604052919050565b803561ffff8116811461411e57600080fd5b6000606082840312156142f257600080fd5b604051606081018181106001600160401b03821117156143145761431461421c565b60405290508061432383614180565b8152614331602084016142ce565b602082015261434260408401614123565b60408201525092915050565b80356001600160401b038116811461411e57600080fd5b6000806080838503121561437857600080fd5b61438284846142e0565b9150613d196060840161434e565b600080604083850312156143a357600080fd5b6143ac83614107565b9150613d1960208401614123565b60006001600160401b038211156143d3576143d361421c565b5060051b60200190565b600060c082840312156143ef57600080fd5b60405160c081018181106001600160401b03821117156144115761441161421c565b60405290508061442083614180565b815261442e6020840161434e565b602082015260408301356040820152606083013560608201526080830135608082015260a083013560a08201525092915050565b600082601f83011261447357600080fd5b81356001600160401b0381111561448c5761448c61421c565b61449f601f8201601f191660200161429e565b8181528460208386010111156144b457600080fd5b816020850160208301376000918101602001919091529392505050565b6000602082840312156144e357600080fd5b6001600160401b0380833511156144f957600080fd5b8235830184601f82011261450c57600080fd5b61451e61451982356143ba565b61429e565b81358082526020808301929160051b8401018781111561453d57600080fd5b602084015b8181101561463957858135111561455857600080fd5b8035850160e0818b03601f1901121561457057600080fd5b614578614232565b6145858b602084016143dd565b815260e08201358881111561459957600080fd5b8083019250508a603f8301126145ae57600080fd5b60208201356145bf614519826143ba565b81815260059190911b83016040019060208101908d8311156145e057600080fd5b604085015b83811015614619578b813511156145fb57600080fd5b61460b8f60408335890101614462565b8352602092830192016145e5565b508060208501525050508086525050602084019350602081019050614542565b5090979650505050505050565b60006020828403121561465857600080fd5b613e1082614107565b600082601f83011261467257600080fd5b61467a614232565b80604084018581111561468c57600080fd5b845b818110156146a657803584526020938401930161468e565b509095945050505050565b600082601f8301126146c257600080fd5b60405160208082018281106001600160401b03821117156146e5576146e561421c565b60405281848201868111156146f957600080fd5b855b8181101561471257803583529183019183016146fb565b50929695505050505050565b600082601f83011261472f57600080fd5b8135602061473f614519836143ba565b828152610120928302850182019282820191908785111561475f57600080fd5b8387015b858110156146395781818a03121561477b5760008081fd5b61478361425a565b61478d8a83614661565b815260408a605f8401126147a15760008081fd5b6147a9614232565b8060c085018d8111156147bc5760008081fd5b8386015b818110156147df576147d28f82614661565b8452928a019284016147c0565b50818a8601526147ef8e82614661565b84860152505050506148058a61010084016146b1565b60608201528452928401928101614763565b6000806040838503121561482a57600080fd5b82356001600160401b038082111561484157600080fd5b818501915085601f83011261485557600080fd5b81356020614865614519836143ba565b82815260c0928302850182019282820191908a85111561488457600080fd5b958301955b848710156148aa5761489b8b886143dd565b83529586019591830191614889565b50965050860135925050808211156148c157600080fd5b506148ce8582860161471e565b9150509250929050565b6000602082840312156148ea57600080fd5b81356001600160501b031981168114613e1057600080fd5b6000806040838503121561491557600080fd5b61491e83614107565b9150602083013560ff8116811461493457600080fd5b809150509250929050565b60006020828403121561495157600080fd5b613e10826142ce565b60006020828403121561496c57600080fd5b613e108261434e565b634e487b7160e01b600052602160045260246000fd5b601481106149a957634e487b7160e01b600052602160045260246000fd5b9052565b82815260408101613e10602083018461498b565b60008082840360608112156149d557600080fd5b60408112156149e357600080fd5b506149ec614232565b6149f584614180565b815260208401356001600160601b031981168114614a1257600080fd5b60208201529150613d196040840161434e565b600060208284031215614a3757600080fd5b613e1082614123565b60008060408385031215614a5357600080fd5b50508035926020909101359150565b60008060008060808587031215614a7857600080fd5b614a8185614180565b9350614a8f60208601614180565b9250614a9d604086016142ce565b9150614175606086016142ce565b600082601f830112614abc57600080fd5b81356020614acc614519836143ba565b82815260059290921b84018101918181019086841115614aeb57600080fd5b8286015b84811015614b0d57614b0081614180565b8352918301918301614aef565b509695505050505050565b60008060e08385031215614b2b57600080fd5b614b3584846143dd565b915060c08301356001600160401b0380821115614b5157600080fd5b818501915085601f830112614b6557600080fd5b81356020614b75614519836143ba565b82815260059290921b84018101918181019089841115614b9457600080fd5b8286015b84811015614c5657803586811115614baf57600080fd5b870160c0818d03601f19011215614bc557600080fd5b614bcd61427c565b614bd8868301614180565b8152604082013586820152606082013560408201526080820135606082015260a08083013589811115614c0b5760008081fd5b614c198f8983870101614462565b60808401525060c083013589811115614c325760008081fd5b614c408f8983870101614aab565b9183019190915250845250918301918301614b98565b508096505050505050509250929050565b600060208284031215614c7957600080fd5b5051919050565b600060208284031215614c9257600080fd5b81518015158114613e1057600080fd5b634e487b7160e01b600052601160045260246000fd5b81810381811115610c5257610c52614ca2565b60208082526012908201527113dc151e5c19481b9bdd081b585d18da195960721b604082015260600190565b6020808252601690820152751058d8dbdd5b9d081b9bdd081c9959da5cdd195c995960521b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b6001600160401b03818116838216019080821115614d5d57614d5d614ca2565b5092915050565b600063ffffffff808316818103614d7d57614d7d614ca2565b6001019392505050565b6001600160401b03828116828216039080821115614d5d57614d5d614ca2565b63ffffffff818116838216019080821115614d5d57614d5d614ca2565b600060c08201905063ffffffff83511682526001600160401b03602084015116602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015292915050565b600060018201614e2957614e29614ca2565b5060010190565b600061ffff808316818103614d7d57614d7d614ca2565b8060005b6002811015611a14578151845260209384019390910190600101614e4b565b60408101610c528284614e47565b600181815b80851115614eb3578160001904821115614e9957614e99614ca2565b80851615614ea657918102915b93841c9390800290614e7d565b509250929050565b600082614eca57506001610c52565b81614ed757506000610c52565b8160018114614eed5760028114614ef757614f13565b6001915050610c52565b60ff841115614f0857614f08614ca2565b50506001821b610c52565b5060208310610133831016604e8410600b8410161715614f36575081810a610c52565b614f408383614e78565b8060001904821115614f5457614f54614ca2565b029392505050565b6000613e1060ff841683614ebb565b634e487b7160e01b600052601260045260246000fd5b60006001600160801b0380841680614f9b57614f9b614f6b565b92169190910492915050565b8082028115828204841417610c5257610c52614ca2565b60005b83811015614fd9578181015183820152602001614fc1565b50506000910152565b82815260008251614ffa816020850160208701614fbe565b919091016020019392505050565b60008151808452615020816020860160208601614fbe565b601f01601f19169290920160200192915050565b602081526000613e106020830184615008565b61012081016150568287614e47565b60408083018660005b600280821061506e57506150a9565b82518460005b83811015615092578251825260209283019290910190600101615074565b50505092840192506020919091019060010161505f565b505050506150ba60c0830185614e47565b61010082018360005b60018110156150e25781518352602092830192909101906001016150c3565b50505095945050505050565b6001600160801b03828116828216039080821115614d5d57614d5d614ca2565b60006001600160401b03808316818103614d7d57614d7d614ca2565b6001600160401b0384168152615143602082018461498b565b606060408201526000613cf66060830184615008565b60f89490941b6001600160f81b031916845260e09290921b6001600160e01b031916600184015260f01b6001600160f01b031916600583015260801b6001600160801b031916600782015260170190565b60ff8181168382160190811115610c5257610c52614ca2565b6001600160801b03818116838216019080821115614d5d57614d5d614ca2565b6000826151f2576151f2614f6b565b500690565b60008261520657615206614f6b565b500490565b60ff8181168382160290811690818114614d5d57614d5d614ca2565b60008351615239818460208801614fbe565b83519083019061524d818360208801614fbe565b01949350505050565b8481528360208201528260408201526000825161527a816060850160208701614fbe565b9190910160600195945050505050565b6000825161529c818460208701614fbe565b9190910192915050565b80820180821115610c5257610c52614ca256fea2646970667358221220fba1e65b685ab39d3f7513470655978ee23356650fcf871cadee1c154e626bee64736f6c63430008110033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
