{
  "_format": "hh-sol-artifact-1",
  "contractName": "LimitOrderModule",
  "sourceName": "contracts/limitOrder.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "internalType": "int24",
          "name": "point",
          "type": "int24"
        },
        {
          "internalType": "uint128",
          "name": "amountX",
          "type": "uint128"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "addLimOrderWithX",
      "outputs": [
        {
          "internalType": "uint128",
          "name": "orderX",
          "type": "uint128"
        },
        {
          "internalType": "uint128",
          "name": "acquireY",
          "type": "uint128"
        },
        {
          "internalType": "uint128",
          "name": "claimSold",
          "type": "uint128"
        },
        {
          "internalType": "uint128",
          "name": "claimEarn",
          "type": "uint128"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "internalType": "int24",
          "name": "point",
          "type": "int24"
        },
        {
          "internalType": "uint128",
          "name": "amountY",
          "type": "uint128"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "addLimOrderWithY",
      "outputs": [
        {
          "internalType": "uint128",
          "name": "orderY",
          "type": "uint128"
        },
        {
          "internalType": "uint128",
          "name": "acquireX",
          "type": "uint128"
        },
        {
          "internalType": "uint128",
          "name": "claimSold",
          "type": "uint128"
        },
        {
          "internalType": "uint128",
          "name": "claimEarn",
          "type": "uint128"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "int24",
          "name": "point",
          "type": "int24"
        },
        {
          "internalType": "uint128",
          "name": "assignX",
          "type": "uint128"
        },
        {
          "internalType": "bool",
          "name": "fromLegacy",
          "type": "bool"
        }
      ],
      "name": "assignLimOrderEarnX",
      "outputs": [
        {
          "internalType": "uint128",
          "name": "actualAssignX",
          "type": "uint128"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "int24",
          "name": "point",
          "type": "int24"
        },
        {
          "internalType": "uint128",
          "name": "assignY",
          "type": "uint128"
        },
        {
          "internalType": "bool",
          "name": "fromLegacy",
          "type": "bool"
        }
      ],
      "name": "assignLimOrderEarnY",
      "outputs": [
        {
          "internalType": "uint128",
          "name": "actualAssignY",
          "type": "uint128"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "internalType": "int24",
          "name": "point",
          "type": "int24"
        },
        {
          "internalType": "uint128",
          "name": "collectDec",
          "type": "uint128"
        },
        {
          "internalType": "uint128",
          "name": "collectEarn",
          "type": "uint128"
        },
        {
          "internalType": "bool",
          "name": "isEarnY",
          "type": "bool"
        }
      ],
      "name": "collectLimOrder",
      "outputs": [
        {
          "internalType": "uint128",
          "name": "actualCollectDec",
          "type": "uint128"
        },
        {
          "internalType": "uint128",
          "name": "actualCollectEarn",
          "type": "uint128"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "int24",
          "name": "point",
          "type": "int24"
        },
        {
          "internalType": "uint128",
          "name": "deltaX",
          "type": "uint128"
        }
      ],
      "name": "decLimOrderWithX",
      "outputs": [
        {
          "internalType": "uint128",
          "name": "actualDeltaX",
          "type": "uint128"
        },
        {
          "internalType": "uint256",
          "name": "legacyAccEarn",
          "type": "uint256"
        },
        {
          "internalType": "uint128",
          "name": "claimSold",
          "type": "uint128"
        },
        {
          "internalType": "uint128",
          "name": "claimEarn",
          "type": "uint128"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "int24",
          "name": "point",
          "type": "int24"
        },
        {
          "internalType": "uint128",
          "name": "deltaY",
          "type": "uint128"
        }
      ],
      "name": "decLimOrderWithY",
      "outputs": [
        {
          "internalType": "uint128",
          "name": "actualDeltaY",
          "type": "uint128"
        },
        {
          "internalType": "uint256",
          "name": "legacyAccEarn",
          "type": "uint256"
        },
        {
          "internalType": "uint128",
          "name": "claimSold",
          "type": "uint128"
        },
        {
          "internalType": "uint128",
          "name": "claimEarn",
          "type": "uint128"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "factory",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "fee",
      "outputs": [
        {
          "internalType": "uint24",
          "name": "",
          "type": "uint24"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "feeChargePercent",
      "outputs": [
        {
          "internalType": "uint24",
          "name": "",
          "type": "uint24"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "feeScaleX_128",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "feeScaleY_128",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "leftMostPt",
      "outputs": [
        {
          "internalType": "int24",
          "name": "",
          "type": "int24"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "int24",
          "name": "",
          "type": "int24"
        }
      ],
      "name": "limitOrderData",
      "outputs": [
        {
          "internalType": "uint128",
          "name": "sellingX",
          "type": "uint128"
        },
        {
          "internalType": "uint128",
          "name": "earnY",
          "type": "uint128"
        },
        {
          "internalType": "uint256",
          "name": "accEarnY",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "legacyAccEarnY",
          "type": "uint256"
        },
        {
          "internalType": "uint128",
          "name": "legacyEarnY",
          "type": "uint128"
        },
        {
          "internalType": "uint128",
          "name": "sellingY",
          "type": "uint128"
        },
        {
          "internalType": "uint128",
          "name": "earnX",
          "type": "uint128"
        },
        {
          "internalType": "uint128",
          "name": "legacyEarnX",
          "type": "uint128"
        },
        {
          "internalType": "uint256",
          "name": "accEarnX",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "legacyAccEarnX",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "liquidities",
      "outputs": [
        {
          "internalType": "uint128",
          "name": "liquidity",
          "type": "uint128"
        },
        {
          "internalType": "uint256",
          "name": "lastFeeScaleX_128",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "lastFeeScaleY_128",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "tokenOwedX",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "tokenOwedY",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "maxLiquidPt",
      "outputs": [
        {
          "internalType": "uint128",
          "name": "",
          "type": "uint128"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "observations",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "timestamp",
          "type": "uint32"
        },
        {
          "internalType": "int56",
          "name": "accPoint",
          "type": "int56"
        },
        {
          "internalType": "bool",
          "name": "init",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "int24",
          "name": "",
          "type": "int24"
        }
      ],
      "name": "orderOrEndpoint",
      "outputs": [
        {
          "internalType": "int24",
          "name": "",
          "type": "int24"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "int16",
          "name": "",
          "type": "int16"
        }
      ],
      "name": "pointBitmap",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "pointDelta",
      "outputs": [
        {
          "internalType": "int24",
          "name": "",
          "type": "int24"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "int24",
          "name": "",
          "type": "int24"
        }
      ],
      "name": "points",
      "outputs": [
        {
          "internalType": "uint128",
          "name": "liquidSum",
          "type": "uint128"
        },
        {
          "internalType": "int128",
          "name": "liquidDelta",
          "type": "int128"
        },
        {
          "internalType": "uint256",
          "name": "accFeeXOut_128",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "accFeeYOut_128",
          "type": "uint256"
        },
        {
          "internalType": "bool",
          "name": "isEndpt",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "rightMostPt",
      "outputs": [
        {
          "internalType": "int24",
          "name": "",
          "type": "int24"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "state",
      "outputs": [
        {
          "internalType": "uint160",
          "name": "sqrtPrice_96",
          "type": "uint160"
        },
        {
          "internalType": "int24",
          "name": "currentPoint",
          "type": "int24"
        },
        {
          "internalType": "uint16",
          "name": "observationCurrentIndex",
          "type": "uint16"
        },
        {
          "internalType": "uint16",
          "name": "observationQueueLen",
          "type": "uint16"
        },
        {
          "internalType": "uint16",
          "name": "observationNextQueueLen",
          "type": "uint16"
        },
        {
          "internalType": "bool",
          "name": "locked",
          "type": "bool"
        },
        {
          "internalType": "uint128",
          "name": "liquidity",
          "type": "uint128"
        },
        {
          "internalType": "uint128",
          "name": "liquidityX",
          "type": "uint128"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "tokenX",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "tokenY",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "totalFeeXCharged",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "totalFeeYCharged",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "userEarnX",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "lastAccEarn",
          "type": "uint256"
        },
        {
          "internalType": "uint128",
          "name": "sellingRemain",
          "type": "uint128"
        },
        {
          "internalType": "uint128",
          "name": "sellingDec",
          "type": "uint128"
        },
        {
          "internalType": "uint128",
          "name": "earn",
          "type": "uint128"
        },
        {
          "internalType": "uint128",
          "name": "legacyEarn",
          "type": "uint128"
        },
        {
          "internalType": "uint128",
          "name": "earnAssign",
          "type": "uint128"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "userEarnY",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "lastAccEarn",
          "type": "uint256"
        },
        {
          "internalType": "uint128",
          "name": "sellingRemain",
          "type": "uint128"
        },
        {
          "internalType": "uint128",
          "name": "sellingDec",
          "type": "uint128"
        },
        {
          "internalType": "uint128",
          "name": "earn",
          "type": "uint128"
        },
        {
          "internalType": "uint128",
          "name": "legacyEarn",
          "type": "uint128"
        },
        {
          "internalType": "uint128",
          "name": "earnAssign",
          "type": "uint128"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": "0x608060405234801561001057600080fd5b50612ef8806100206000396000f3fe608060405234801561001057600080fd5b506004361061015f5760003560e01c80630e1552f0146101645780631621835f146101af57806316dc165b146102415780631aae2e5514610261578063252c09d71461027857806333005cd5146102b25780634cd70e91146102bd578063537c2d8e14610303578063544e705714610323578063588e59ae1461034e57806358c51ce61461035757806362c944ca1461036b57806362ccaafd1461037e5780636ad1718f146103d25780636d01843b1461040557806375c0e0d51461041f57806381794fba146104a25780638790aca3146104ce57806387e7d5fe1461059c57806398a0f72e14610615578063b7d19fc414610635578063c19d93fb14610648578063c45a01551461070c578063d3b168641461071f578063ddca3f4314610733578063e556289f14610749578063edcba3b214610754578063f0163ef414610777578063ff12504e1461078a575b600080fd5b6101776101723660046129fb565b61079d565b604080516001600160801b03958616815293851660208501529184169183019190915290911660608201526080015b60405180910390f35b6102036101bd366004612b1b565b600f60205260009081526040902080546001820154600283015460039093015491926001600160801b0380831693600160801b9384900482169383831693048216911686565b604080519687526001600160801b039586166020880152938516938601939093529083166060850152821660808401521660a082015260c0016101a6565b600254610254906001600160a01b031681565b6040516101a69190612c60565b61026a60045481565b6040519081526020016101a6565b61028b610286366004612b1b565b610d7b565b6040805163ffffffff909416845260069290920b60208401521515908201526060016101a6565b61026a620100105481565b6102d06102cb366004612b6e565b610daf565b604080516001600160801b03958616815260208101949094529184169183019190915290911660608201526080016101a6565b6000546103109060020b81565b60405160029190910b81526020016101a6565b610336610331366004612ba0565b610fab565b6040516001600160801b0390911681526020016101a6565b61026a60055481565b60035461031090600160b81b900460020b81565b6102d0610379366004612b6e565b611104565b61020361038c366004612b1b565b600e60205260009081526040902080546001820154600283015460039093015491926001600160801b0380831693600160801b9384900482169383831693048216911686565b6103e56103e0366004612a97565b6112b7565b604080516001600160801b039384168152929091166020830152016101a6565b60005461033690600160301b90046001600160801b031681565b61046b61042d366004612b54565b600b6020526000908152604090208054600182015460028301546003909301546001600160801b03831693600160801b909304600f0b929060ff1685565b604080516001600160801b039096168652600f9490940b60208601529284019190915260608301521515608082015260a0016101a6565b62010016546104ba90600160a01b900462ffffff1681565b60405162ffffff90911681526020016101a6565b61053b6104dc366004612b54565b600d6020526000908152604090208054600182015460028301546003840154600485015460058601546006909601546001600160801b0380871697600160801b978890048216978583169581900483169480841694919004909216918a565b604080516001600160801b039b8c168152998b1660208b01528901979097526060880195909552928716608087015290861660a0860152851660c085015290931660e0830152610100820192909252610120810191909152610140016101a6565b6105e36105aa366004612b1b565b600960205260009081526040902080546001820154600283015460038401546004909401546001600160801b0390931693919290919085565b604080516001600160801b0390961686526020860194909452928401919091526060830152608082015260a0016101a6565b61026a610623366004612b33565b600a6020526000908152604090205481565b600354610254906001600160a01b031681565b6007546008546106ad916001600160a01b03811691600160a01b820460020b9161ffff600160b81b8204811692600160c81b8304821692600160d81b81049092169160ff600160e81b90910416906001600160801b0380821691600160801b90041688565b604080516001600160a01b03909916895260029790970b602089015261ffff9586169688019690965292841660608701529216608085015290151560a08401526001600160801b0390811660c08401521660e0820152610100016101a6565b600154610254906001600160a01b031681565b600054610310906301000000900460020b81565b6003546104ba90600160a01b900462ffffff1681565b61026a6201000f5481565b610310610762366004612b54565b600c6020526000908152604090205460020b81565b610336610785366004612ba0565b611448565b6101776107983660046129fb565b611457565b6003546000908190819081906107bd90600160b81b900460020b89612e14565b60020b156107e65760405162461bcd60e51b81526004016107dd90612ca9565b60405180910390fd5b600754600160a01b9004600290810b810b9089900b131561082e5760405162461bcd60e51b8152602060048201526002602482015261141360f21b60448201526064016107dd565b600054600290810b810b9089900b121561086f5760405162461bcd60e51b81526020600482015260026024820152614c4f60f01b60448201526064016107dd565b6000876001600160801b0316116108ad5760405162461bcd60e51b8152602060048201526002602482015261059560f41b60448201526064016107dd565b600288810b900b6000908152600d60205260408120889550909350836108d28a611a2a565b6040805160608101825284546001600160801b039081168083526003870154600160801b90049091166020830152600092820192909252919250156109cb576109208a838360000151611e3c565b6001600160801b039091166040830181905290965061093f9088612dba565b965085816000018181516109539190612dba565b6001600160801b03908116909152604083015160018601546109789350911690612d35565b60018401556040810151835461099e9190600160801b90046001600160801b0316612d0a565b81516001600160801b039081169116600160801b026001600160801b03191681178455156109cb57600096505b6001600160801b03871615610a175786816020018181516109ec9190612d0a565b6001600160801b039081169091526020830151600386018054918316600160801b0291909216179055505b6000610a25600e8e8e611eda565b9050806000015484600601541115610a8c5760058401546004850154610a639183918b91908790600160801b90046001600160801b03166000611f2c565b6004870180546001600160801b03948516600160801b0294169390931790925596509450610ad9565b60058401546004850154610ab19183918b919087906001600160801b03166000612098565b6004870180546001600160801b0319166001600160801b039490941693909317909255965094505b6003810154610af29088906001600160801b0316612d0a565b6003820180546001600160801b0319166001600160801b03928316179055825116158015610b2b575060208201516001600160801b0316155b15610bb757600354600090610b4e90600c908f90600160b81b900460020b6120ff565b90506000816001169050610b7f8e600360179054906101000a900460020b83600c61214c909392919063ffffffff16565b8060020b60001415610bb057610bb08e600360179054906101000a900460020b600a6121939092919063ffffffff16565b5050610c4a565b600354600090610bd590600c908f90600160b81b900460020b6120ff565b90508060021660020b60001415610c48576000816002179050610c158e600360179054906101000a900460020b83600c61214c909392919063ffffffff16565b8160020b60001415610c4657610c468e600360179054906101000a900460020b600a6121fc9092919063ffffffff16565b505b505b6000826040015189610c5c9190612d0a565b6001600160801b031611610c825760405162461bcd60e51b81526004016107dd90612cc5565b6000610c8c612264565b9050336001600160a01b0316638400eff6600085604001518c610caf9190612d0a565b8e8e6040518563ffffffff1660e01b8152600401610cd09493929190612c74565b600060405180830381600087803b158015610cea57600080fd5b505af1158015610cfe573d6000803e3d6000fd5b5050505082604001516001600160801b0316896001600160801b031682610d259190612d35565b610d2f9190612d35565b610d37612264565b1015610d6a5760405162461bcd60e51b8152602060048201526002602482015261594560f01b60448201526064016107dd565b505050505095509550955095915050565b60108161ffff8110610d8c57600080fd5b015463ffffffff81169150600160201b810460060b90600160581b900460ff1683565b600354600090819081908190610dcf90600160b81b900460020b87612e14565b60020b15610def5760405162461bcd60e51b81526004016107dd90612ca9565b6000610dfd600f3389611eda565b600288810b900b6000908152600d60205260408120919250610e1e89611a2a565b9050816002015495508260000154861115610e86576001808301546003840154610e5a928692600092909186916001600160801b031690611f2c565b6003850180546001600160801b0319166001600160801b03949094169390931790925595509350610f9f565b6001828101548354610eb09286928c9290918691600160801b90046001600160801b031690612348565b85546001600160801b03938416600160801b029084168181178855949b50919850965089928592600092610eea9286929190911617612dba565b92506101000a8154816001600160801b0302191690836001600160801b031602179055506000876001600160801b0316118015610f2f575081546001600160801b0316155b15610f9f57600354600090610f5290600c908c90600160b81b900460020b6120ff565b6003546001919091169150610f7690600c908c90600160b81b900460020b8461214c565b8060020b60001415610f9d57600354610f9d90600a908c90600160b81b900460020b612193565b505b50505092959194509250565b816000610fba600f3387611eda565b905082156110495760028101546001600160801b03600160801b90910481169083161115610ffa576002810154600160801b90046001600160801b031691505b818160020160108282829054906101000a90046001600160801b03166110209190612dba565b92506101000a8154816001600160801b0302191690836001600160801b031602179055506110b8565b60028101546001600160801b0390811690831611156110735760028101546001600160801b031691505b6002810180548391906000906110939084906001600160801b0316612dba565b92506101000a8154816001600160801b0302191690836001600160801b031602179055505b6003810180548391906000906110d89084906001600160801b0316612d0a565b92506101000a8154816001600160801b0302191690836001600160801b03160217905550509392505050565b60035460009081908190819061112490600160b81b900460020b87612e14565b60020b156111445760405162461bcd60e51b81526004016107dd90612ca9565b6000611152600e3389611eda565b600288810b900b6000908152600d6020526040812091925061117389611a2a565b90508160060154955082600001548611156111dd57600582015460048301546111b4918591600091908590600160801b90046001600160801b031683611f2c565b6004850180546001600160801b03948516600160801b0294169390931790925595509350610f9f565b600582015460048301546112029185918b919085906001600160801b03166000612348565b6004860180546001600160801b0319166001600160801b03948516179055600386018054949b50919850965089929091601091611248918591600160801b900416612dba565b92506101000a8154816001600160801b0302191690836001600160801b031602179055506000876001600160801b0316118015610f2f57506003820154600160801b90046001600160801b0316610f9f57600354600090610f5290600c908c90600160b81b900460020b6120ff565b6000806000836112d2576112cd600e3389611eda565b6112de565b6112de600f3389611eda565b60018101548794509091506001600160801b03600160801b9091048116908416111561131c576001810154600160801b90046001600160801b031692505b600181015461133c908490600160801b90046001600160801b0316612dba565b6001820180546001600160801b03928316600160801b0290831617905560038201548693508116908316111561137d5760038101546001600160801b031691505b60038101546113969083906001600160801b0316612dba565b6003820180546001600160801b0319166001600160801b0392909216919091179055600080856113c75783856113ca565b84845b6001600160801b031691506001600160801b031691506113f1826113ec612400565b61242e565b91506113ff816113ec612264565b9050811561141e5760025461141e906001600160a01b03168b84612448565b801561143b5760035461143b906001600160a01b03168b83612448565b5050509550959350505050565b816000610fba600e3387611eda565b60035460009081908190819061147790600160b81b900460020b89612e14565b60020b156114975760405162461bcd60e51b81526004016107dd90612ca9565b600754600160a01b9004600290810b810b9089900b12156114df5760405162461bcd60e51b8152602060048201526002602482015261504760f01b60448201526064016107dd565b60005463010000009004600290810b810b9089900b13156115275760405162461bcd60e51b8152602060048201526002602482015261484f60f01b60448201526064016107dd565b6000876001600160801b0316116115655760405162461bcd60e51b8152602060048201526002602482015261058560f41b60448201526064016107dd565b600288810b900b6000908152600d602052604081208895509093508361158a8a611a2a565b6040805160608101825284546001600160801b0390811682526003860154600160801b9004166020820181905260009282019290925291925015611699576115d78a838360200151612549565b6001600160801b03909116604083018190529096506115f69088612dba565b9650858160200181815161160a9190612dba565b6001600160801b039081169091526040830151600586015461162f9350911690612d35565b60058401556040810151600484015461165191906001600160801b0316612d0a565b6004840180546001600160801b0319166001600160801b0392831617905560208201516003850180548316600160801b92909316918202929092179091551561169957600096505b6001600160801b038716156116dd5786816000018181516116ba9190612d0a565b6001600160801b03908116909152825185546001600160801b0319169116178455505b60006116eb600f8e8e611eda565b905083600201548160000154101561174f5760018085015460038601546117239284928c92909188916001600160801b031690611f2c565b6003870180546001600160801b0319166001600160801b03949094169390931790925596509450611799565b60018481015485546117799284928c9290918891600160801b90046001600160801b031690612098565b86546001600160801b03938416600160801b029316929092178655965094505b60038101546117b29088906001600160801b0316612d0a565b6003820180546001600160801b0319166001600160801b039283161790558251161580156117eb575060208201516001600160801b0316155b156118775760035460009061180e90600c908f90600160b81b900460020b6120ff565b9050600081600116905061183f8e600360179054906101000a900460020b83600c61214c909392919063ffffffff16565b8060020b60001415611870576118708e600360179054906101000a900460020b600a6121939092919063ffffffff16565b505061190a565b60035460009061189590600c908f90600160b81b900460020b6120ff565b90508060021660020b600014156119085760008160021790506118d58e600360179054906101000a900460020b83600c61214c909392919063ffffffff16565b8160020b60001415611906576119068e600360179054906101000a900460020b600a6121fc9092919063ffffffff16565b505b505b600082604001518961191c9190612d0a565b6001600160801b0316116119425760405162461bcd60e51b81526004016107dd90612cc5565b600061194c612400565b9050336001600160a01b0316638400eff684604001518b61196d9190612d0a565b60008e8e6040518563ffffffff1660e01b81526004016119909493929190612ce2565b600060405180830381600087803b1580156119aa57600080fd5b505af11580156119be573d6000803e3d6000fd5b5050505082604001516001600160801b0316896001600160801b0316826119e59190612d35565b6119ef9190612d35565b6119f7612400565b1015610d6a5760405162461bcd60e51b8152602060048201526002602482015261584560f01b60448201526064016107dd565b60008060008360020b12611a41578260020b611a4e565b8260020b611a4e90612e6b565b9050611a5d620d89e719612e4a565b60020b811115611a935760405162461bcd60e51b81526020600482015260016024820152601560fa1b60448201526064016107dd565b600060018216611aa757600160801b611ab9565b6ffffcb933bd6fad37aa2d162d1a5940015b6001600160881b031690506002821615611aee576080611ae9826ffff97272373d413259a46990580e213a612d9b565b901c90505b6004821615611b18576080611b13826ffff2e50f5f656932ef12357cf3c7fdcc612d9b565b901c90505b6008821615611b42576080611b3d826fffe5caca7e10e4e61c3624eaa0941cd0612d9b565b901c90505b6010821615611b6c576080611b67826fffcb9843d60f6159c9db58835c926644612d9b565b901c90505b6020821615611b96576080611b91826fff973b41fa98c081472e6896dfb254c0612d9b565b901c90505b6040821615611bc0576080611bbb826fff2ea16466c96a3843ec78b326b52861612d9b565b901c90505b6080821615611bea576080611be5826ffe5dee046a99a2a811c461f1969c3053612d9b565b901c90505b610100821615611c15576080611c10826ffcbe86c7900a88aedcffc83b479aa3a4612d9b565b901c90505b610200821615611c40576080611c3b826ff987a7253ac413176f2b074cf7815e54612d9b565b901c90505b610400821615611c6b576080611c66826ff3392b0822b70005940c7a398e4b70f3612d9b565b901c90505b610800821615611c96576080611c91826fe7159475a2c29b7443b29c7fa6e889d9612d9b565b901c90505b611000821615611cc1576080611cbc826fd097f3bdfd2022b8845ad8f792aa5825612d9b565b901c90505b612000821615611cec576080611ce7826fa9f746462d870fdf8a65dc1f90e061e5612d9b565b901c90505b614000821615611d17576080611d12826f70d869a156d2a1b890bb3df62baf32f7612d9b565b901c90505b618000821615611d42576080611d3d826f31be135f97d08fd981231505542fcfa6612d9b565b901c90505b62010000821615611d6e576080611d69826f09aa508b5b7a84e1c677de54f3e99bc9612d9b565b901c90505b62020000821615611d99576080611d94826e5d6af8dedb81196699c329225ee604612d9b565b901c90505b62040000821615611dc3576080611dbe826d2216e584f5fa1ea926041bedfe98612d9b565b901c90505b62080000821615611deb576080611de6826b048a170391f7dc42444e8fa2612d9b565b901c90505b60008460020b1315611e0657611e0381600019612d87565b90505b611e14600160201b82612e36565b15611e20576001611e23565b60005b611e349060ff16602083901c612d35565b949350505050565b6000806000611e62866001600160801b0316600160601b876001600160a01b03166125ee565b9050611e8e611e7f82600160601b886001600160a01b03166125ee565b856001600160801b031661242e565b9150611eb1826001600160801b0316866001600160a01b0316600160601b61269b565b90506000611ecd82876001600160a01b0316600160601b61269b565b9792965091945050505050565b6040805160609390931b6001600160601b03191660208085019190915260029290920b60e81b603484015280516017818503018152603790930181528251928201929092206000908152929052902090565b60018601546000906001600160801b03168180821561204c578415611f90576000611f6e846001600160801b0316896001600160a01b0316600160601b6125ee565b9050611f8881896001600160a01b0316600160601b6125ee565b915050611fd1565b6000611fb3846001600160801b0316600160601b8a6001600160a01b03166125ee565b9050611fcd81600160601b8a6001600160a01b03166125ee565b9150505b856001600160801b0316811115611fee57506001600160801b0385165b60018a0180546001600160801b031916905560028a018054829190601090612027908490600160801b90046001600160801b0316612d0a565b92506101000a8154816001600160801b0302191690836001600160801b031602179055505b878a5590508061205c8187612dba565b93506001600160801b0389161561208b5760018a0180546001600160801b0319166001600160801b038b161790555b5096509650969350505050565b60008060006120aa89888888886126f2565b60018c015492955090935091506120cb9089906001600160801b0316612d0a565b8960010160006101000a8154816001600160801b0302191690836001600160801b0316021790555096509650969350505050565b600061210b8284612e14565b60020b1561211b57506000612145565b8360006121288486612d4d565b600290810b810b8252602082019290925260400160002054900b90505b9392505050565b8084600061215a8587612d4d565b60020b60020b815260200190815260200160002060006101000a81548162ffffff021916908360020b62ffffff16021790555050505050565b61219d8183612e14565b60020b156121aa57600080fd5b60006121b68284612d4d565b9050600281900b60081d60006121ce61010084612e14565b600192830b830b60009081526020979097526040909620805460ff9097169290921b19909516905550505050565b6122068183612e14565b60020b1561221357600080fd5b600061221f8284612d4d565b9050600281900b60081d600061223761010084612e14565b600192830b830b60009081526020979097526040909620805460ff9097169290921b909517905550505050565b600354604051600091829182916001600160a01b0316906370a0823160e01b90612292903090602401612c60565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516122d09190612c27565b600060405180830381855afa9150503d806000811461230b576040519150601f19603f3d011682016040523d82523d6000602084013e612310565b606091505b509150915081801561232457506020815110155b61232d57600080fd5b808060200190518101906123419190612be6565b9250505090565b60008060008061235b8a898989896126f2565b60018d0154929550909350915061237c908a906001600160801b0316612951565b60018b01549094506123989085906001600160801b0316612dba565b60018b0180546001600160801b0319166001600160801b0392831617908190556123cb918691600160801b900416612d0a565b8a60010160106101000a8154816001600160801b0302191690836001600160801b031602179055509650965096509692505050565b600254604051600091829182916001600160a01b0316906370a0823160e01b90612292903090602401612c60565b60008183101561243f575081612442565b50805b92915050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b17905291516000928392908716916124a49190612c27565b6000604051808303816000865af19150503d80600081146124e1576040519150601f19603f3d011682016040523d82523d6000602084013e6124e6565b606091505b50915091508180156125105750805115806125105750808060200190518101906125109190612aff565b6125425760405162461bcd60e51b8152602060048201526003602482015262544e5360e81b60448201526064016107dd565b5050505050565b600080600061256f866001600160801b0316866001600160a01b0316600160601b6125ee565b905061259161258c82876001600160a01b0316600160601b6125ee565b612974565b9150836001600160801b0316826001600160801b031611156125b1578391505b6125d2826001600160801b0316600160601b876001600160a01b031661269b565b90506000611ecd82600160601b886001600160a01b031661269b565b600080806000198587098587029250828110838203039150508060001415612628576000841161261d57600080fd5b508290049050612145565b80841161263457600080fd5b6000848688096001861981018716968790046003810260029081188083028203028083028203028083028203028083028203028083028203029182029003026000889003889004909101858311909403939093029303949094049190911702949350505050565b60006126a88484846125ee565b9050600082806126c857634e487b7160e01b600052601260045260246000fd5b84860911156121455760001981106126df57600080fd5b806126e981612df9565b95945050505050565b6040805160c081018252865480825260018801546001600160801b038082166020850152600160801b91829004811694840194909452600289015480851660608501520483166080830152600388015490921660a082015260009182918291829061275d908a612de2565b9050866001600160801b031681111561277c57506001600160801b0386165b600086156127c057600061279e83600160601b8c6001600160a01b031661269b565b90506127b881600160601b8c6001600160a01b031661269b565b9150506127f8565b60006127da838b6001600160a01b0316600160601b61269b565b90506127f4818b6001600160a01b0316600160601b61269b565b9150505b82602001516001600160801b0316811115612896575060208201516001600160801b0316861561285e57600061283c828b6001600160a01b0316600160601b6125ee565b9050612856818b6001600160a01b0316600160601b6125ee565b925050612896565b600061287882600160601b8c6001600160a01b03166125ee565b905061289281600160601b8c6001600160a01b03166125ee565b9250505b81836060018181516128a89190612d0a565b6001600160801b03169052506020830180518291906128c8908390612dba565b6001600160801b0316905250898b55811561290457606083015160028c0180546001600160801b0319166001600160801b039092169190911790555b801561293157602083015160018c0180546001600160801b0319166001600160801b039092169190911790555b9350915081836129418289612dba565b9550505050955095509592505050565b6000816001600160801b0316836001600160801b0316101561243f575081612442565b806001600160801b03811681146129b65760405162461bcd60e51b81526004016107dd906020808252600490820152630866264760e31b604082015260600190565b919050565b80356001600160a01b03811681146129b657600080fd5b8035600281900b81146129b657600080fd5b80356001600160801b03811681146129b657600080fd5b600080600080600060808688031215612a12578081fd5b612a1b866129bb565b9450612a29602087016129d2565b9350612a37604087016129e4565b925060608601356001600160401b0380821115612a52578283fd5b818801915088601f830112612a65578283fd5b813581811115612a73578384fd5b896020828501011115612a84578384fd5b9699959850939650602001949392505050565b600080600080600060a08688031215612aae578081fd5b612ab7866129bb565b9450612ac5602087016129d2565b9350612ad3604087016129e4565b9250612ae1606087016129e4565b91506080860135612af181612eb1565b809150509295509295909350565b600060208284031215612b10578081fd5b815161214581612eb1565b600060208284031215612b2c578081fd5b5035919050565b600060208284031215612b44578081fd5b81358060010b8114612145578182fd5b600060208284031215612b65578081fd5b612145826129d2565b60008060408385031215612b80578182fd5b612b89836129d2565b9150612b97602084016129e4565b90509250929050565b600080600060608486031215612bb4578283fd5b612bbd846129d2565b9250612bcb602085016129e4565b91506040840135612bdb81612eb1565b809150509250925092565b600060208284031215612bf7578081fd5b5051919050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60008251815b81811015612c475760208186018101518583015201612c2d565b81811115612c555782828501525b509190910192915050565b6001600160a01b0391909116815260200190565b8481526001600160801b0384166020820152606060408201819052600090612c9f9083018486612bfe565b9695505050505050565b602080825260029082015261141160f21b604082015260600190565b6020808252600390820152620703e360ec1b604082015260600190565b60018060801b0385168152836020820152606060408201526000612c9f606083018486612bfe565b60006001600160801b03828116848216808303821115612d2c57612d2c612e85565b01949350505050565b60008219821115612d4857612d48612e85565b500190565b60008160020b8360020b80612d6457612d64612e9b565b627fffff19821460001982141615612d7e57612d7e612e85565b90059392505050565b600082612d9657612d96612e9b565b500490565b6000816000190483118215151615612db557612db5612e85565b500290565b60006001600160801b0383811690831681811015612dda57612dda612e85565b039392505050565b600082821015612df457612df4612e85565b500390565b6000600019821415612e0d57612e0d612e85565b5060010190565b60008260020b80612e2757612e27612e9b565b808360020b0791505092915050565b600082612e4557612e45612e9b565b500690565b60008160020b627fffff19811415612e6457612e64612e85565b9003919050565b6000600160ff1b821415612e8157612e81612e85565b0390565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b8015158114612ebf57600080fd5b5056fea2646970667358221220a1ce8b94779b6c24640e680afe61388cebd704d5f16597b2cfd2ce098bf117fa64736f6c63430008040033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061015f5760003560e01c80630e1552f0146101645780631621835f146101af57806316dc165b146102415780631aae2e5514610261578063252c09d71461027857806333005cd5146102b25780634cd70e91146102bd578063537c2d8e14610303578063544e705714610323578063588e59ae1461034e57806358c51ce61461035757806362c944ca1461036b57806362ccaafd1461037e5780636ad1718f146103d25780636d01843b1461040557806375c0e0d51461041f57806381794fba146104a25780638790aca3146104ce57806387e7d5fe1461059c57806398a0f72e14610615578063b7d19fc414610635578063c19d93fb14610648578063c45a01551461070c578063d3b168641461071f578063ddca3f4314610733578063e556289f14610749578063edcba3b214610754578063f0163ef414610777578063ff12504e1461078a575b600080fd5b6101776101723660046129fb565b61079d565b604080516001600160801b03958616815293851660208501529184169183019190915290911660608201526080015b60405180910390f35b6102036101bd366004612b1b565b600f60205260009081526040902080546001820154600283015460039093015491926001600160801b0380831693600160801b9384900482169383831693048216911686565b604080519687526001600160801b039586166020880152938516938601939093529083166060850152821660808401521660a082015260c0016101a6565b600254610254906001600160a01b031681565b6040516101a69190612c60565b61026a60045481565b6040519081526020016101a6565b61028b610286366004612b1b565b610d7b565b6040805163ffffffff909416845260069290920b60208401521515908201526060016101a6565b61026a620100105481565b6102d06102cb366004612b6e565b610daf565b604080516001600160801b03958616815260208101949094529184169183019190915290911660608201526080016101a6565b6000546103109060020b81565b60405160029190910b81526020016101a6565b610336610331366004612ba0565b610fab565b6040516001600160801b0390911681526020016101a6565b61026a60055481565b60035461031090600160b81b900460020b81565b6102d0610379366004612b6e565b611104565b61020361038c366004612b1b565b600e60205260009081526040902080546001820154600283015460039093015491926001600160801b0380831693600160801b9384900482169383831693048216911686565b6103e56103e0366004612a97565b6112b7565b604080516001600160801b039384168152929091166020830152016101a6565b60005461033690600160301b90046001600160801b031681565b61046b61042d366004612b54565b600b6020526000908152604090208054600182015460028301546003909301546001600160801b03831693600160801b909304600f0b929060ff1685565b604080516001600160801b039096168652600f9490940b60208601529284019190915260608301521515608082015260a0016101a6565b62010016546104ba90600160a01b900462ffffff1681565b60405162ffffff90911681526020016101a6565b61053b6104dc366004612b54565b600d6020526000908152604090208054600182015460028301546003840154600485015460058601546006909601546001600160801b0380871697600160801b978890048216978583169581900483169480841694919004909216918a565b604080516001600160801b039b8c168152998b1660208b01528901979097526060880195909552928716608087015290861660a0860152851660c085015290931660e0830152610100820192909252610120810191909152610140016101a6565b6105e36105aa366004612b1b565b600960205260009081526040902080546001820154600283015460038401546004909401546001600160801b0390931693919290919085565b604080516001600160801b0390961686526020860194909452928401919091526060830152608082015260a0016101a6565b61026a610623366004612b33565b600a6020526000908152604090205481565b600354610254906001600160a01b031681565b6007546008546106ad916001600160a01b03811691600160a01b820460020b9161ffff600160b81b8204811692600160c81b8304821692600160d81b81049092169160ff600160e81b90910416906001600160801b0380821691600160801b90041688565b604080516001600160a01b03909916895260029790970b602089015261ffff9586169688019690965292841660608701529216608085015290151560a08401526001600160801b0390811660c08401521660e0820152610100016101a6565b600154610254906001600160a01b031681565b600054610310906301000000900460020b81565b6003546104ba90600160a01b900462ffffff1681565b61026a6201000f5481565b610310610762366004612b54565b600c6020526000908152604090205460020b81565b610336610785366004612ba0565b611448565b6101776107983660046129fb565b611457565b6003546000908190819081906107bd90600160b81b900460020b89612e14565b60020b156107e65760405162461bcd60e51b81526004016107dd90612ca9565b60405180910390fd5b600754600160a01b9004600290810b810b9089900b131561082e5760405162461bcd60e51b8152602060048201526002602482015261141360f21b60448201526064016107dd565b600054600290810b810b9089900b121561086f5760405162461bcd60e51b81526020600482015260026024820152614c4f60f01b60448201526064016107dd565b6000876001600160801b0316116108ad5760405162461bcd60e51b8152602060048201526002602482015261059560f41b60448201526064016107dd565b600288810b900b6000908152600d60205260408120889550909350836108d28a611a2a565b6040805160608101825284546001600160801b039081168083526003870154600160801b90049091166020830152600092820192909252919250156109cb576109208a838360000151611e3c565b6001600160801b039091166040830181905290965061093f9088612dba565b965085816000018181516109539190612dba565b6001600160801b03908116909152604083015160018601546109789350911690612d35565b60018401556040810151835461099e9190600160801b90046001600160801b0316612d0a565b81516001600160801b039081169116600160801b026001600160801b03191681178455156109cb57600096505b6001600160801b03871615610a175786816020018181516109ec9190612d0a565b6001600160801b039081169091526020830151600386018054918316600160801b0291909216179055505b6000610a25600e8e8e611eda565b9050806000015484600601541115610a8c5760058401546004850154610a639183918b91908790600160801b90046001600160801b03166000611f2c565b6004870180546001600160801b03948516600160801b0294169390931790925596509450610ad9565b60058401546004850154610ab19183918b919087906001600160801b03166000612098565b6004870180546001600160801b0319166001600160801b039490941693909317909255965094505b6003810154610af29088906001600160801b0316612d0a565b6003820180546001600160801b0319166001600160801b03928316179055825116158015610b2b575060208201516001600160801b0316155b15610bb757600354600090610b4e90600c908f90600160b81b900460020b6120ff565b90506000816001169050610b7f8e600360179054906101000a900460020b83600c61214c909392919063ffffffff16565b8060020b60001415610bb057610bb08e600360179054906101000a900460020b600a6121939092919063ffffffff16565b5050610c4a565b600354600090610bd590600c908f90600160b81b900460020b6120ff565b90508060021660020b60001415610c48576000816002179050610c158e600360179054906101000a900460020b83600c61214c909392919063ffffffff16565b8160020b60001415610c4657610c468e600360179054906101000a900460020b600a6121fc9092919063ffffffff16565b505b505b6000826040015189610c5c9190612d0a565b6001600160801b031611610c825760405162461bcd60e51b81526004016107dd90612cc5565b6000610c8c612264565b9050336001600160a01b0316638400eff6600085604001518c610caf9190612d0a565b8e8e6040518563ffffffff1660e01b8152600401610cd09493929190612c74565b600060405180830381600087803b158015610cea57600080fd5b505af1158015610cfe573d6000803e3d6000fd5b5050505082604001516001600160801b0316896001600160801b031682610d259190612d35565b610d2f9190612d35565b610d37612264565b1015610d6a5760405162461bcd60e51b8152602060048201526002602482015261594560f01b60448201526064016107dd565b505050505095509550955095915050565b60108161ffff8110610d8c57600080fd5b015463ffffffff81169150600160201b810460060b90600160581b900460ff1683565b600354600090819081908190610dcf90600160b81b900460020b87612e14565b60020b15610def5760405162461bcd60e51b81526004016107dd90612ca9565b6000610dfd600f3389611eda565b600288810b900b6000908152600d60205260408120919250610e1e89611a2a565b9050816002015495508260000154861115610e86576001808301546003840154610e5a928692600092909186916001600160801b031690611f2c565b6003850180546001600160801b0319166001600160801b03949094169390931790925595509350610f9f565b6001828101548354610eb09286928c9290918691600160801b90046001600160801b031690612348565b85546001600160801b03938416600160801b029084168181178855949b50919850965089928592600092610eea9286929190911617612dba565b92506101000a8154816001600160801b0302191690836001600160801b031602179055506000876001600160801b0316118015610f2f575081546001600160801b0316155b15610f9f57600354600090610f5290600c908c90600160b81b900460020b6120ff565b6003546001919091169150610f7690600c908c90600160b81b900460020b8461214c565b8060020b60001415610f9d57600354610f9d90600a908c90600160b81b900460020b612193565b505b50505092959194509250565b816000610fba600f3387611eda565b905082156110495760028101546001600160801b03600160801b90910481169083161115610ffa576002810154600160801b90046001600160801b031691505b818160020160108282829054906101000a90046001600160801b03166110209190612dba565b92506101000a8154816001600160801b0302191690836001600160801b031602179055506110b8565b60028101546001600160801b0390811690831611156110735760028101546001600160801b031691505b6002810180548391906000906110939084906001600160801b0316612dba565b92506101000a8154816001600160801b0302191690836001600160801b031602179055505b6003810180548391906000906110d89084906001600160801b0316612d0a565b92506101000a8154816001600160801b0302191690836001600160801b03160217905550509392505050565b60035460009081908190819061112490600160b81b900460020b87612e14565b60020b156111445760405162461bcd60e51b81526004016107dd90612ca9565b6000611152600e3389611eda565b600288810b900b6000908152600d6020526040812091925061117389611a2a565b90508160060154955082600001548611156111dd57600582015460048301546111b4918591600091908590600160801b90046001600160801b031683611f2c565b6004850180546001600160801b03948516600160801b0294169390931790925595509350610f9f565b600582015460048301546112029185918b919085906001600160801b03166000612348565b6004860180546001600160801b0319166001600160801b03948516179055600386018054949b50919850965089929091601091611248918591600160801b900416612dba565b92506101000a8154816001600160801b0302191690836001600160801b031602179055506000876001600160801b0316118015610f2f57506003820154600160801b90046001600160801b0316610f9f57600354600090610f5290600c908c90600160b81b900460020b6120ff565b6000806000836112d2576112cd600e3389611eda565b6112de565b6112de600f3389611eda565b60018101548794509091506001600160801b03600160801b9091048116908416111561131c576001810154600160801b90046001600160801b031692505b600181015461133c908490600160801b90046001600160801b0316612dba565b6001820180546001600160801b03928316600160801b0290831617905560038201548693508116908316111561137d5760038101546001600160801b031691505b60038101546113969083906001600160801b0316612dba565b6003820180546001600160801b0319166001600160801b0392909216919091179055600080856113c75783856113ca565b84845b6001600160801b031691506001600160801b031691506113f1826113ec612400565b61242e565b91506113ff816113ec612264565b9050811561141e5760025461141e906001600160a01b03168b84612448565b801561143b5760035461143b906001600160a01b03168b83612448565b5050509550959350505050565b816000610fba600e3387611eda565b60035460009081908190819061147790600160b81b900460020b89612e14565b60020b156114975760405162461bcd60e51b81526004016107dd90612ca9565b600754600160a01b9004600290810b810b9089900b12156114df5760405162461bcd60e51b8152602060048201526002602482015261504760f01b60448201526064016107dd565b60005463010000009004600290810b810b9089900b13156115275760405162461bcd60e51b8152602060048201526002602482015261484f60f01b60448201526064016107dd565b6000876001600160801b0316116115655760405162461bcd60e51b8152602060048201526002602482015261058560f41b60448201526064016107dd565b600288810b900b6000908152600d602052604081208895509093508361158a8a611a2a565b6040805160608101825284546001600160801b0390811682526003860154600160801b9004166020820181905260009282019290925291925015611699576115d78a838360200151612549565b6001600160801b03909116604083018190529096506115f69088612dba565b9650858160200181815161160a9190612dba565b6001600160801b039081169091526040830151600586015461162f9350911690612d35565b60058401556040810151600484015461165191906001600160801b0316612d0a565b6004840180546001600160801b0319166001600160801b0392831617905560208201516003850180548316600160801b92909316918202929092179091551561169957600096505b6001600160801b038716156116dd5786816000018181516116ba9190612d0a565b6001600160801b03908116909152825185546001600160801b0319169116178455505b60006116eb600f8e8e611eda565b905083600201548160000154101561174f5760018085015460038601546117239284928c92909188916001600160801b031690611f2c565b6003870180546001600160801b0319166001600160801b03949094169390931790925596509450611799565b60018481015485546117799284928c9290918891600160801b90046001600160801b031690612098565b86546001600160801b03938416600160801b029316929092178655965094505b60038101546117b29088906001600160801b0316612d0a565b6003820180546001600160801b0319166001600160801b039283161790558251161580156117eb575060208201516001600160801b0316155b156118775760035460009061180e90600c908f90600160b81b900460020b6120ff565b9050600081600116905061183f8e600360179054906101000a900460020b83600c61214c909392919063ffffffff16565b8060020b60001415611870576118708e600360179054906101000a900460020b600a6121939092919063ffffffff16565b505061190a565b60035460009061189590600c908f90600160b81b900460020b6120ff565b90508060021660020b600014156119085760008160021790506118d58e600360179054906101000a900460020b83600c61214c909392919063ffffffff16565b8160020b60001415611906576119068e600360179054906101000a900460020b600a6121fc9092919063ffffffff16565b505b505b600082604001518961191c9190612d0a565b6001600160801b0316116119425760405162461bcd60e51b81526004016107dd90612cc5565b600061194c612400565b9050336001600160a01b0316638400eff684604001518b61196d9190612d0a565b60008e8e6040518563ffffffff1660e01b81526004016119909493929190612ce2565b600060405180830381600087803b1580156119aa57600080fd5b505af11580156119be573d6000803e3d6000fd5b5050505082604001516001600160801b0316896001600160801b0316826119e59190612d35565b6119ef9190612d35565b6119f7612400565b1015610d6a5760405162461bcd60e51b8152602060048201526002602482015261584560f01b60448201526064016107dd565b60008060008360020b12611a41578260020b611a4e565b8260020b611a4e90612e6b565b9050611a5d620d89e719612e4a565b60020b811115611a935760405162461bcd60e51b81526020600482015260016024820152601560fa1b60448201526064016107dd565b600060018216611aa757600160801b611ab9565b6ffffcb933bd6fad37aa2d162d1a5940015b6001600160881b031690506002821615611aee576080611ae9826ffff97272373d413259a46990580e213a612d9b565b901c90505b6004821615611b18576080611b13826ffff2e50f5f656932ef12357cf3c7fdcc612d9b565b901c90505b6008821615611b42576080611b3d826fffe5caca7e10e4e61c3624eaa0941cd0612d9b565b901c90505b6010821615611b6c576080611b67826fffcb9843d60f6159c9db58835c926644612d9b565b901c90505b6020821615611b96576080611b91826fff973b41fa98c081472e6896dfb254c0612d9b565b901c90505b6040821615611bc0576080611bbb826fff2ea16466c96a3843ec78b326b52861612d9b565b901c90505b6080821615611bea576080611be5826ffe5dee046a99a2a811c461f1969c3053612d9b565b901c90505b610100821615611c15576080611c10826ffcbe86c7900a88aedcffc83b479aa3a4612d9b565b901c90505b610200821615611c40576080611c3b826ff987a7253ac413176f2b074cf7815e54612d9b565b901c90505b610400821615611c6b576080611c66826ff3392b0822b70005940c7a398e4b70f3612d9b565b901c90505b610800821615611c96576080611c91826fe7159475a2c29b7443b29c7fa6e889d9612d9b565b901c90505b611000821615611cc1576080611cbc826fd097f3bdfd2022b8845ad8f792aa5825612d9b565b901c90505b612000821615611cec576080611ce7826fa9f746462d870fdf8a65dc1f90e061e5612d9b565b901c90505b614000821615611d17576080611d12826f70d869a156d2a1b890bb3df62baf32f7612d9b565b901c90505b618000821615611d42576080611d3d826f31be135f97d08fd981231505542fcfa6612d9b565b901c90505b62010000821615611d6e576080611d69826f09aa508b5b7a84e1c677de54f3e99bc9612d9b565b901c90505b62020000821615611d99576080611d94826e5d6af8dedb81196699c329225ee604612d9b565b901c90505b62040000821615611dc3576080611dbe826d2216e584f5fa1ea926041bedfe98612d9b565b901c90505b62080000821615611deb576080611de6826b048a170391f7dc42444e8fa2612d9b565b901c90505b60008460020b1315611e0657611e0381600019612d87565b90505b611e14600160201b82612e36565b15611e20576001611e23565b60005b611e349060ff16602083901c612d35565b949350505050565b6000806000611e62866001600160801b0316600160601b876001600160a01b03166125ee565b9050611e8e611e7f82600160601b886001600160a01b03166125ee565b856001600160801b031661242e565b9150611eb1826001600160801b0316866001600160a01b0316600160601b61269b565b90506000611ecd82876001600160a01b0316600160601b61269b565b9792965091945050505050565b6040805160609390931b6001600160601b03191660208085019190915260029290920b60e81b603484015280516017818503018152603790930181528251928201929092206000908152929052902090565b60018601546000906001600160801b03168180821561204c578415611f90576000611f6e846001600160801b0316896001600160a01b0316600160601b6125ee565b9050611f8881896001600160a01b0316600160601b6125ee565b915050611fd1565b6000611fb3846001600160801b0316600160601b8a6001600160a01b03166125ee565b9050611fcd81600160601b8a6001600160a01b03166125ee565b9150505b856001600160801b0316811115611fee57506001600160801b0385165b60018a0180546001600160801b031916905560028a018054829190601090612027908490600160801b90046001600160801b0316612d0a565b92506101000a8154816001600160801b0302191690836001600160801b031602179055505b878a5590508061205c8187612dba565b93506001600160801b0389161561208b5760018a0180546001600160801b0319166001600160801b038b161790555b5096509650969350505050565b60008060006120aa89888888886126f2565b60018c015492955090935091506120cb9089906001600160801b0316612d0a565b8960010160006101000a8154816001600160801b0302191690836001600160801b0316021790555096509650969350505050565b600061210b8284612e14565b60020b1561211b57506000612145565b8360006121288486612d4d565b600290810b810b8252602082019290925260400160002054900b90505b9392505050565b8084600061215a8587612d4d565b60020b60020b815260200190815260200160002060006101000a81548162ffffff021916908360020b62ffffff16021790555050505050565b61219d8183612e14565b60020b156121aa57600080fd5b60006121b68284612d4d565b9050600281900b60081d60006121ce61010084612e14565b600192830b830b60009081526020979097526040909620805460ff9097169290921b19909516905550505050565b6122068183612e14565b60020b1561221357600080fd5b600061221f8284612d4d565b9050600281900b60081d600061223761010084612e14565b600192830b830b60009081526020979097526040909620805460ff9097169290921b909517905550505050565b600354604051600091829182916001600160a01b0316906370a0823160e01b90612292903090602401612c60565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516122d09190612c27565b600060405180830381855afa9150503d806000811461230b576040519150601f19603f3d011682016040523d82523d6000602084013e612310565b606091505b509150915081801561232457506020815110155b61232d57600080fd5b808060200190518101906123419190612be6565b9250505090565b60008060008061235b8a898989896126f2565b60018d0154929550909350915061237c908a906001600160801b0316612951565b60018b01549094506123989085906001600160801b0316612dba565b60018b0180546001600160801b0319166001600160801b0392831617908190556123cb918691600160801b900416612d0a565b8a60010160106101000a8154816001600160801b0302191690836001600160801b031602179055509650965096509692505050565b600254604051600091829182916001600160a01b0316906370a0823160e01b90612292903090602401612c60565b60008183101561243f575081612442565b50805b92915050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b17905291516000928392908716916124a49190612c27565b6000604051808303816000865af19150503d80600081146124e1576040519150601f19603f3d011682016040523d82523d6000602084013e6124e6565b606091505b50915091508180156125105750805115806125105750808060200190518101906125109190612aff565b6125425760405162461bcd60e51b8152602060048201526003602482015262544e5360e81b60448201526064016107dd565b5050505050565b600080600061256f866001600160801b0316866001600160a01b0316600160601b6125ee565b905061259161258c82876001600160a01b0316600160601b6125ee565b612974565b9150836001600160801b0316826001600160801b031611156125b1578391505b6125d2826001600160801b0316600160601b876001600160a01b031661269b565b90506000611ecd82600160601b886001600160a01b031661269b565b600080806000198587098587029250828110838203039150508060001415612628576000841161261d57600080fd5b508290049050612145565b80841161263457600080fd5b6000848688096001861981018716968790046003810260029081188083028203028083028203028083028203028083028203028083028203029182029003026000889003889004909101858311909403939093029303949094049190911702949350505050565b60006126a88484846125ee565b9050600082806126c857634e487b7160e01b600052601260045260246000fd5b84860911156121455760001981106126df57600080fd5b806126e981612df9565b95945050505050565b6040805160c081018252865480825260018801546001600160801b038082166020850152600160801b91829004811694840194909452600289015480851660608501520483166080830152600388015490921660a082015260009182918291829061275d908a612de2565b9050866001600160801b031681111561277c57506001600160801b0386165b600086156127c057600061279e83600160601b8c6001600160a01b031661269b565b90506127b881600160601b8c6001600160a01b031661269b565b9150506127f8565b60006127da838b6001600160a01b0316600160601b61269b565b90506127f4818b6001600160a01b0316600160601b61269b565b9150505b82602001516001600160801b0316811115612896575060208201516001600160801b0316861561285e57600061283c828b6001600160a01b0316600160601b6125ee565b9050612856818b6001600160a01b0316600160601b6125ee565b925050612896565b600061287882600160601b8c6001600160a01b03166125ee565b905061289281600160601b8c6001600160a01b03166125ee565b9250505b81836060018181516128a89190612d0a565b6001600160801b03169052506020830180518291906128c8908390612dba565b6001600160801b0316905250898b55811561290457606083015160028c0180546001600160801b0319166001600160801b039092169190911790555b801561293157602083015160018c0180546001600160801b0319166001600160801b039092169190911790555b9350915081836129418289612dba565b9550505050955095509592505050565b6000816001600160801b0316836001600160801b0316101561243f575081612442565b806001600160801b03811681146129b65760405162461bcd60e51b81526004016107dd906020808252600490820152630866264760e31b604082015260600190565b919050565b80356001600160a01b03811681146129b657600080fd5b8035600281900b81146129b657600080fd5b80356001600160801b03811681146129b657600080fd5b600080600080600060808688031215612a12578081fd5b612a1b866129bb565b9450612a29602087016129d2565b9350612a37604087016129e4565b925060608601356001600160401b0380821115612a52578283fd5b818801915088601f830112612a65578283fd5b813581811115612a73578384fd5b896020828501011115612a84578384fd5b9699959850939650602001949392505050565b600080600080600060a08688031215612aae578081fd5b612ab7866129bb565b9450612ac5602087016129d2565b9350612ad3604087016129e4565b9250612ae1606087016129e4565b91506080860135612af181612eb1565b809150509295509295909350565b600060208284031215612b10578081fd5b815161214581612eb1565b600060208284031215612b2c578081fd5b5035919050565b600060208284031215612b44578081fd5b81358060010b8114612145578182fd5b600060208284031215612b65578081fd5b612145826129d2565b60008060408385031215612b80578182fd5b612b89836129d2565b9150612b97602084016129e4565b90509250929050565b600080600060608486031215612bb4578283fd5b612bbd846129d2565b9250612bcb602085016129e4565b91506040840135612bdb81612eb1565b809150509250925092565b600060208284031215612bf7578081fd5b5051919050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60008251815b81811015612c475760208186018101518583015201612c2d565b81811115612c555782828501525b509190910192915050565b6001600160a01b0391909116815260200190565b8481526001600160801b0384166020820152606060408201819052600090612c9f9083018486612bfe565b9695505050505050565b602080825260029082015261141160f21b604082015260600190565b6020808252600390820152620703e360ec1b604082015260600190565b60018060801b0385168152836020820152606060408201526000612c9f606083018486612bfe565b60006001600160801b03828116848216808303821115612d2c57612d2c612e85565b01949350505050565b60008219821115612d4857612d48612e85565b500190565b60008160020b8360020b80612d6457612d64612e9b565b627fffff19821460001982141615612d7e57612d7e612e85565b90059392505050565b600082612d9657612d96612e9b565b500490565b6000816000190483118215151615612db557612db5612e85565b500290565b60006001600160801b0383811690831681811015612dda57612dda612e85565b039392505050565b600082821015612df457612df4612e85565b500390565b6000600019821415612e0d57612e0d612e85565b5060010190565b60008260020b80612e2757612e27612e9b565b808360020b0791505092915050565b600082612e4557612e45612e9b565b500690565b60008160020b627fffff19811415612e6457612e64612e85565b9003919050565b6000600160ff1b821415612e8157612e81612e85565b0390565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b8015158114612ebf57600080fd5b5056fea2646970667358221220a1ce8b94779b6c24640e680afe61388cebd704d5f16597b2cfd2ce098bf117fa64736f6c63430008040033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
