{
  "_format": "hh-sol-artifact-1",
  "contractName": "OrderBook",
  "sourceName": "contracts/OrderBook.sol",
  "abi": [
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "clearingHouse",
          "type": "address"
        }
      ],
      "name": "ClearingHouseChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "exchange",
          "type": "address"
        }
      ],
      "name": "ExchangeChanged",
      "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"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "trader",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "baseToken",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "base",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "quote",
              "type": "uint256"
            },
            {
              "internalType": "int24",
              "name": "lowerTick",
              "type": "int24"
            },
            {
              "internalType": "int24",
              "name": "upperTick",
              "type": "int24"
            },
            {
              "components": [
                {
                  "internalType": "int256",
                  "name": "twPremiumX96",
                  "type": "int256"
                },
                {
                  "internalType": "int256",
                  "name": "twPremiumDivBySqrtPriceX96",
                  "type": "int256"
                }
              ],
              "internalType": "struct Funding.Growth",
              "name": "fundingGrowthGlobal",
              "type": "tuple"
            }
          ],
          "internalType": "struct IOrderBook.AddLiquidityParams",
          "name": "params",
          "type": "tuple"
        }
      ],
      "name": "addLiquidity",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "base",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "quote",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "fee",
              "type": "uint256"
            },
            {
              "internalType": "uint128",
              "name": "liquidity",
              "type": "uint128"
            }
          ],
          "internalType": "struct IOrderBook.AddLiquidityResponse",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "candidate",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getClearingHouse",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getExchange",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "trader",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "baseToken",
          "type": "address"
        },
        {
          "components": [
            {
              "internalType": "int256",
              "name": "twPremiumX96",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "twPremiumDivBySqrtPriceX96",
              "type": "int256"
            }
          ],
          "internalType": "struct Funding.Growth",
          "name": "fundingGrowthGlobal",
          "type": "tuple"
        }
      ],
      "name": "getLiquidityCoefficientInFundingPayment",
      "outputs": [
        {
          "internalType": "int256",
          "name": "liquidityCoefficientInFundingPayment",
          "type": "int256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getMarketRegistry",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "trader",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "baseToken",
          "type": "address"
        },
        {
          "internalType": "int24",
          "name": "lowerTick",
          "type": "int24"
        },
        {
          "internalType": "int24",
          "name": "upperTick",
          "type": "int24"
        }
      ],
      "name": "getOpenOrder",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint128",
              "name": "liquidity",
              "type": "uint128"
            },
            {
              "internalType": "int24",
              "name": "lowerTick",
              "type": "int24"
            },
            {
              "internalType": "int24",
              "name": "upperTick",
              "type": "int24"
            },
            {
              "internalType": "uint256",
              "name": "lastFeeGrowthInsideX128",
              "type": "uint256"
            },
            {
              "internalType": "int256",
              "name": "lastTwPremiumGrowthInsideX96",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "lastTwPremiumGrowthBelowX96",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "lastTwPremiumDivBySqrtPriceGrowthInsideX96",
              "type": "int256"
            },
            {
              "internalType": "uint256",
              "name": "baseDebt",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "quoteDebt",
              "type": "uint256"
            }
          ],
          "internalType": "struct OpenOrder.Info",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "orderId",
          "type": "bytes32"
        }
      ],
      "name": "getOpenOrderById",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint128",
              "name": "liquidity",
              "type": "uint128"
            },
            {
              "internalType": "int24",
              "name": "lowerTick",
              "type": "int24"
            },
            {
              "internalType": "int24",
              "name": "upperTick",
              "type": "int24"
            },
            {
              "internalType": "uint256",
              "name": "lastFeeGrowthInsideX128",
              "type": "uint256"
            },
            {
              "internalType": "int256",
              "name": "lastTwPremiumGrowthInsideX96",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "lastTwPremiumGrowthBelowX96",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "lastTwPremiumDivBySqrtPriceGrowthInsideX96",
              "type": "int256"
            },
            {
              "internalType": "uint256",
              "name": "baseDebt",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "quoteDebt",
              "type": "uint256"
            }
          ],
          "internalType": "struct OpenOrder.Info",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "trader",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "baseToken",
          "type": "address"
        }
      ],
      "name": "getOpenOrderIds",
      "outputs": [
        {
          "internalType": "bytes32[]",
          "name": "",
          "type": "bytes32[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "trader",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "baseToken",
          "type": "address"
        },
        {
          "internalType": "int24",
          "name": "lowerTick",
          "type": "int24"
        },
        {
          "internalType": "int24",
          "name": "upperTick",
          "type": "int24"
        }
      ],
      "name": "getPendingFee",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "trader",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "baseToken",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "fetchBase",
          "type": "bool"
        }
      ],
      "name": "getTotalOrderDebt",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "trader",
          "type": "address"
        },
        {
          "internalType": "address[]",
          "name": "baseTokens",
          "type": "address[]"
        }
      ],
      "name": "getTotalQuoteBalanceAndPendingFee",
      "outputs": [
        {
          "internalType": "int256",
          "name": "totalQuoteAmountInPools",
          "type": "int256"
        },
        {
          "internalType": "uint256",
          "name": "totalPendingFee",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "trader",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "baseToken",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "fetchBase",
          "type": "bool"
        }
      ],
      "name": "getTotalTokenAmountInPoolAndPendingFee",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "tokenAmount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "pendingFee",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "trader",
          "type": "address"
        },
        {
          "internalType": "address[]",
          "name": "tokens",
          "type": "address[]"
        }
      ],
      "name": "hasOrder",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "marketRegistryArg",
          "type": "address"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "maker",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "baseToken",
              "type": "address"
            },
            {
              "internalType": "int24",
              "name": "lowerTick",
              "type": "int24"
            },
            {
              "internalType": "int24",
              "name": "upperTick",
              "type": "int24"
            },
            {
              "internalType": "uint128",
              "name": "liquidity",
              "type": "uint128"
            }
          ],
          "internalType": "struct IOrderBook.RemoveLiquidityParams",
          "name": "params",
          "type": "tuple"
        }
      ],
      "name": "removeLiquidity",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "base",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "quote",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "fee",
              "type": "uint256"
            },
            {
              "internalType": "int256",
              "name": "takerBase",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "takerQuote",
              "type": "int256"
            }
          ],
          "internalType": "struct IOrderBook.RemoveLiquidityResponse",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "baseToken",
              "type": "address"
            },
            {
              "internalType": "bool",
              "name": "isBaseToQuote",
              "type": "bool"
            },
            {
              "internalType": "bool",
              "name": "shouldUpdateState",
              "type": "bool"
            },
            {
              "internalType": "int256",
              "name": "amount",
              "type": "int256"
            },
            {
              "internalType": "uint160",
              "name": "sqrtPriceLimitX96",
              "type": "uint160"
            },
            {
              "internalType": "uint24",
              "name": "exchangeFeeRatio",
              "type": "uint24"
            },
            {
              "internalType": "uint24",
              "name": "uniswapFeeRatio",
              "type": "uint24"
            },
            {
              "components": [
                {
                  "internalType": "int256",
                  "name": "twPremiumX96",
                  "type": "int256"
                },
                {
                  "internalType": "int256",
                  "name": "twPremiumDivBySqrtPriceX96",
                  "type": "int256"
                }
              ],
              "internalType": "struct Funding.Growth",
              "name": "globalFundingGrowth",
              "type": "tuple"
            },
            {
              "internalType": "address",
              "name": "pool",
              "type": "address"
            },
            {
              "internalType": "uint24",
              "name": "insuranceFundFeeRatio",
              "type": "uint24"
            }
          ],
          "internalType": "struct IOrderBook.ReplaySwapParams",
          "name": "params",
          "type": "tuple"
        }
      ],
      "name": "replaySwap",
      "outputs": [
        {
          "components": [
            {
              "internalType": "int24",
              "name": "tick",
              "type": "int24"
            },
            {
              "internalType": "uint256",
              "name": "fee",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "insuranceFundFee",
              "type": "uint256"
            }
          ],
          "internalType": "struct IOrderBook.ReplaySwapResponse",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "clearingHouseArg",
          "type": "address"
        }
      ],
      "name": "setClearingHouse",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "exchangeArg",
          "type": "address"
        }
      ],
      "name": "setExchange",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "setOwner",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "amount0Owed",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amount1Owed",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "uniswapV3MintCallback",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "trader",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "baseToken",
          "type": "address"
        },
        {
          "components": [
            {
              "internalType": "int256",
              "name": "twPremiumX96",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "twPremiumDivBySqrtPriceX96",
              "type": "int256"
            }
          ],
          "internalType": "struct Funding.Growth",
          "name": "fundingGrowthGlobal",
          "type": "tuple"
        }
      ],
      "name": "updateFundingGrowthAndLiquidityCoefficientInFundingPayment",
      "outputs": [
        {
          "internalType": "int256",
          "name": "liquidityCoefficientInFundingPayment",
          "type": "int256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "orderId",
          "type": "bytes32"
        },
        {
          "internalType": "int256",
          "name": "base",
          "type": "int256"
        },
        {
          "internalType": "int256",
          "name": "quote",
          "type": "int256"
        }
      ],
      "name": "updateOrderDebt",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "updateOwner",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x608060405234801561001057600080fd5b50615bbe80620000216000396000f3fe608060405234801561001057600080fd5b506004361061016e5760003560e01c80638da5cb5b116100ce578063c66b8ed211610087578063c66b8ed214610319578063d0581a9314610321578063d348799714610334578063e8ab2fb314610347578063eaad235414610367578063f807cd221461037a578063fb112d6c146103825761016e565b80638da5cb5b146102bb578063acf71827146102c3578063b0c04174146102e3578063bc5920ba146102f6578063c4d66de8146102fe578063c575ff79146103115761016e565b80635d8a541d1161012b5780635d8a541d1461022457806367267e8a1461024557806367b1f5df146102655780636c8381f814610278578063715018a61461028d5780637c2b7c53146102955780637fc26736146102a85761016e565b806313af403514610173578063436933ea14610188578063449323d8146101b157806347b52fb7146101c45780634dffaee5146101e45780635b778b9d14610204575b600080fd5b61018661018136600461507b565b610395565b005b61019b6101963660046150b3565b6104f0565b6040516101a89190615729565b60405180910390f35b6101866101bf36600461507b565b61056a565b6101d76101d2366004615190565b610611565b6040516101a891906157ba565b6101f76101f23660046151d7565b610832565b6040516101a8919061576d565b610217610212366004615307565b6108b5565b6040516101a89190615958565b6102376102323660046150eb565b610a5f565b6040516101a89291906157c3565b610258610253366004615318565b610a79565b6040516101a89190615992565b61018661027336600461507b565b610f44565b610280610feb565b6040516101a89190615652565b610186610ffa565b6101d76102a33660046150eb565b61109b565b6101d76102b6366004615190565b61120d565b610280611471565b6102d66102d1366004615259565b611480565b6040516101a891906158be565b6101866102f1366004615271565b61151b565b61018661157b565b61018661030c36600461507b565b611667565b61028061171b565b61028061172a565b61023761032f3660046151d7565b611739565b6101866103423660046155b6565b6117b0565b61035a6103553660046152d4565b611959565b6040516101a8919061588a565b6102d6610375366004615135565b611d26565b610280611ddb565b6101d7610390366004615135565b611dea565b61039d611ea3565b6001600160a01b03166103ae611471565b6001600160a01b0316146103f2576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6001600160a01b038116610436576040805162461bcd60e51b81526020600482015260066024820152650534f5f4e57360d41b604482015290519081900360640190fd5b6033546001600160a01b0382811691161415610482576040805162461bcd60e51b8152602060048201526006602482015265534f5f53414f60d01b604482015290519081900360640190fd5b6034546001600160a01b03828116911614156104ce576040805162461bcd60e51b8152602060048201526006602482015265534f5f53414360d01b604482015290519081900360640190fd5b603480546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03808316600090815260ce6020908152604080832093851683529281529082902080548351818402810184019094528084526060939283018282801561055c57602002820191906000526020600020905b815481526020019060010190808311610548575b505050505090505b92915050565b610572611ea3565b6001600160a01b0316610583611471565b6001600160a01b0316146105c7576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b606780546001600160a01b0319166001600160a01b0383169081179091556040517fd0654f5900f9e7e4e605a19334306e6a2786bbf960ac0484a4c12feb6428fe2f90600090a250565b6001600160a01b03808416600090815260ce602090815260408083209386168352928152828220805484518184028101840190955280855292938493909283018282801561067e57602002820191906000526020600020905b81548152602001906001019080831161066a575b5050506001600160a01b03808816600090815260d06020526040808220609a54915163bbe4f6db60e01b815296975095919450909116915063bbe4f6db906106ca908990600401615652565b60206040518083038186803b1580156106e257600080fd5b505afa1580156106f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061071a9190615097565b9050600061072782611ea7565b505050505091505060005b845181101561082557600060cf600087848151811061074d57fe5b6020908102919091018101518252818101929092526040908101600090812082516101208101845281546001600160801b0381168252600160801b8104600290810b810b810b838801819052600160981b909204810b810b810b958301869052600184015460608401528301546080830152600383015460a0830152600483015460c0830152600583015460e08301526006909201546101008201528c51948d01519095509193610803938a9390918991611f3a565b9050610819610812838361201e565b899061210a565b97505050600101610732565b50505050505b9392505050565b6000805b828110156108aa576001600160a01b038516600090815260ce602052604081208186868581811061086357fe5b9050602002016020810190610878919061507b565b6001600160a01b0316815260208101919091526040016000205411156108a257600191505061082b565b600101610836565b506000949350505050565b6108bd614e2e565b6108c561216f565b609a546000906001600160a01b031663bbe4f6db6108e9604086016020870161507b565b6040518263ffffffff1660e01b81526004016109059190615652565b60206040518083038186803b15801561091d57600080fd5b505afa158015610931573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109559190615097565b9050600061099e610969602086018661507b565b610979604087016020880161507b565b610989606088016040890161529c565b6109996080890160608a0161529c565b6121ab565b6040805160e08101909152909150610a5590806109be602088018861507b565b6001600160a01b031681526020018660200160208101906109df919061507b565b6001600160a01b03168152602001846001600160a01b03168152602001838152602001866040016020810190610a15919061529c565b60020b8152602001610a2d608088016060890161529c565b60020b8152602001610a4560a08801608089016153dd565b6001600160801b0316905261220c565b925050505b919050565b600080610a6d85858561238e565b90969095509350505050565b610a81614e5d565b610a8961266a565b606082015161010083015183516001600160a01b0316600090815260d1602052604081205481841393919283928392610ac39291906126a4565b905085608001516001600160a01b0316600014610ae4578560800151610b0e565b8560200151610b075773fffd8963efd1fc6a506488495d951d5263988d25610b0e565b6401000276a45b6001600160a01b03166080870152610100860151600090610b2e9061277a565b90505b604082015115801590610b5e575086608001516001600160a01b031682602001516001600160a01b031614155b15610ef557610b6b614e81565b6020808401516001600160a01b031682526101008901518451918a0151610b94929085906127ed565b15156040830152600290810b810b60208301819052620d89e719910b1215610bc557620d89e7196020820152610be4565b6020810151620d89e860029190910b1315610be457620d89e860208201525b610bf1816020015161290f565b6001600160a01b0316606082015260208084015190890151610c8e9190610c345789608001516001600160a01b031683606001516001600160a01b031611610c52565b89608001516001600160a01b031683606001516001600160a01b0316105b610c60578260600151610c66565b89608001515b856080015186604001518c60200151610c83578c60a00151610c89565b8c60c001515b612c37565b60c085015260a084015260808301526001600160a01b031660208401528515610cec57610ce2610cd7610cd28360c001518460800151612e2990919063ffffffff16565b612e83565b604085015190612ecf565b6040840152610d0d565b610d07610cfc8260a00151612e83565b60408501519061210a565b60408401525b60808301516001600160801b031615610db457876020015115610d4b57610d458160a001518960a0015162ffffff16620f4240612f34565b60c08201525b60c081015161012089015195810195600091610d6f9162ffffff16620f4240612f34565b60c083015195810195909150600090610d889083612f6e565b9050610da681600160801b87608001516001600160801b0316612fcb565b606086018051909101905250505b80606001516001600160a01b031683602001516001600160a01b03161415610eb757806040015115610e8d57876040015115610e3f5787516001600160a01b0316600090815260d0602090815260409182902083820151835160608082018652880151815260e08d018051518286015251909301519383019390935291610e3d9183919061307a565b505b6000610e5489610100015183602001516130b9565b9050886020015115610e6f57610e6c81600f0b613148565b90505b610e7d84608001518261317b565b6001600160801b03166080850152505b8760200151610ea0578060200151610ea9565b60018160200151035b600290810b900b8352610eef565b80600001516001600160a01b031683602001516001600160a01b031614610eef57610ee58360200151613231565b600290810b900b83525b50610b31565b866040015115610f1f57606082015187516001600160a01b0316600090815260d160205260409020555b5060408051606081018252915160020b82526020820193909352918201529392505050565b610f4c611ea3565b6001600160a01b0316610f5d611471565b6001600160a01b031614610fa1576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b60cd80546001600160a01b0319166001600160a01b0383169081179091556040517f39870277935708b88965de17b0c29d3c1ad93a200dce569fc56702229432973e90600090a250565b6034546001600160a01b031690565b611002611ea3565b6001600160a01b0316611013611471565b6001600160a01b031614611057576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6033546040516000916001600160a01b031690600080516020615af6833981519152908390a3603380546001600160a01b0319908116909155603480549091169055565b6001600160a01b03808416600090815260ce602090815260408083209386168352928152828220805484518184028101840190955280855292938493849391929183018282801561110b57602002820191906000526020600020905b8154815260200190600101908083116110f7575b505083519394506000925050505b8181101561120157600060cf600085848151811061113357fe5b6020908102919091018101518252818101929092526040908101600090812082516101208101845281546001600160801b0381168252600160801b8104600290810b810b810b96830196909652600160981b9004850b850b850b9381019390935260018101546060840152928301546080830152600383015460a0830152600483015460c0830152600583015460e08301526006909201546101008201529150876111e3578161010001516111e9565b8160e001515b90506111f58682612e29565b95505050600101611119565b50919695505050505050565b600061121761266a565b6001600160a01b03808516600090815260ce6020908152604080832093871683529281528282208054845181840281018401909552808552929392909183018282801561128357602002820191906000526020600020905b81548152602001906001019080831161126f575b5050506001600160a01b03808816600090815260d06020526040808220609a54915163bbe4f6db60e01b815296975095919450909116915063bbe4f6db906112cf908990600401615652565b60206040518083038186803b1580156112e757600080fd5b505afa1580156112fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061131f9190615097565b8351909150600061132f83611ea7565b505050505091505060005b8281101561146457600060cf600088848151811061135457fe5b602090810291909101810151825281810192909252604001600090812080548c51938d015191945091926113a3928a92600160801b8204600290810b93600160981b909304900b918991611f3a565b604080516101208101825284546001600160801b0381168252600160801b8104600290810b810b810b6020840152600160981b909104810b810b810b9282019290925260018501546060820152908401546080820152600384015460a0820152600484015460c0820152600584015460e0820152600684015461010082015290915061143a90611433908361201e565b8a9061210a565b8151600284015560208201516003840155604090910151600490920191909155965060010161133a565b5050505050509392505050565b6033546001600160a01b031690565b611488614ebd565b50600090815260cf602090815260409182902082516101208101845281546001600160801b0381168252600160801b8104600290810b810b810b94830194909452600160981b9004830b830b830b9381019390935260018101546060840152908101546080830152600381015460a0830152600481015460c0830152600581015460e08301526006015461010082015290565b61152361216f565b600083815260cf6020526040902060058101546115549061154f90859061154990612e83565b9061210a565b613530565b816005018190555061157061154f836115498460060154612e83565b600690910155505050565b6034546001600160a01b03166115c0576040805162461bcd60e51b81526020600482015260056024820152640534f5f43360dc1b604482015290519081900360640190fd5b6115c8611ea3565b6034546001600160a01b03908116911614611613576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4360d01b604482015290519081900360640190fd5b6034546033546040516001600160a01b039283169290911690600080516020615af683398151915290600090a360348054603380546001600160a01b03199081166001600160a01b03841617909155169055565b600054610100900460ff16806116805750611680613587565b8061168e575060005460ff16155b6116c95760405162461bcd60e51b815260040180806020018281038252602e815260200180615aa7602e913960400191505060405180910390fd5b600054610100900460ff161580156116f4576000805460ff1961ff0019909116610100171660011790555b6116fc613598565b61170582613642565b8015611717576000805461ff00191690555b5050565b6067546001600160a01b031690565b609a546001600160a01b031690565b60008060005b838110156117a757600085858381811061175557fe5b905060200201602081019061176a919061507b565b905060008061177b89846000613707565b909250905061178a868361210a565b95506117968582612e29565b9450506001909201915061173f9050565b50935093915050565b60006117ba611ea3565b90506000816001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b1580156117f757600080fd5b505afa15801561180b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061182f9190615097565b609a5460405163bbe4f6db60e01b81529192506001600160a01b03169063bbe4f6db90611860908490600401615652565b60206040518083038186803b15801561187857600080fd5b505afa15801561188c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118b09190615097565b6001600160a01b0316826001600160a01b0316146118e95760405162461bcd60e51b81526004016118e090615812565b60405180910390fd5b60675460405163d348799760e01b81526001600160a01b039091169063d34879979061191f9089908990899089906004016159b6565b600060405180830381600087803b15801561193957600080fd5b505af115801561194d573d6000803e3d6000fd5b50505050505050505050565b611961614f18565b61196961216f565b609a546000906001600160a01b031663bbe4f6db61198d604086016020870161507b565b6040518263ffffffff1660e01b81526004016119a99190615652565b60206040518083038186803b1580156119c157600080fd5b505afa1580156119d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119f99190615097565b9050600060d181611a10604087016020880161507b565b6001600160a01b03166001600160a01b03168152602001908152602001600020549050600060d06000866020016020810190611a4c919061507b565b6001600160a01b03166001600160a01b031681526020019081526020016000209050611a76614f49565b6000611a9185611a8c60a08a0160808b0161529c565b61374e565b90506000611aa986611a8c60c08b0160a08c0161529c565b9050611b6f6040518060c00160405280886001600160a01b031681526020018a6080016020810190611adb919061529c565b60020b8152602001611af360c08c0160a08d0161529c565b60020b81526020018a6040013581526020018a60600135815260200160405180604001604052808c6000016020810190611b2d919061507b565b6001600160a01b031681526020018a6001600160a01b0316815250604051602001611b589190615935565b6040516020818303038152906040528152506137dc565b92506000611b7c87611ea7565b505050505091505082158015611ba15750611ba187611a8c60a08c0160808d0161529c565b15611be657611be6611bb960a08b0160808c0161529c565b6040805160608101825289815260c08d0135602082015260e08d01359181019190915287919084906138f6565b81158015611c035750611c0387611a8c60c08c0160a08d0161529c565b15611c1b57611c1b611bb960c08b0160a08c0161529c565b505060408051610140810190915260009150611cea9080611c3f60208b018b61507b565b6001600160a01b03168152602001896020016020810190611c60919061507b565b6001600160a01b03908116825288166020820152604001611c8760a08b0160808c0161529c565b60020b8152602001611c9f60c08b0160a08c0161529c565b60020b815260208082018890526040868101516001600160801b03169083015285516060830152850151608082015260a001611ce3368b90038b0160c08c016152ec565b9052613935565b6040805160808101825284518152602080860151908201528082019290925292909201516001600160801b031660608301525095945050505050565b611d2e614ebd565b60cf6000611d3e878787876121ab565b8152602080820192909252604090810160002081516101208101835281546001600160801b0381168252600160801b8104600290810b810b810b95830195909552600160981b9004840b840b840b9281019290925260018101546060830152918201546080820152600382015460a0820152600482015460c0820152600582015460e082015260069091015461010082015290505b949350505050565b60cd546001600160a01b031690565b600080611e988560cf6000611e018a8a8a8a6121ab565b8152602080820192909252604090810160002081516101208101835281546001600160801b0381168252600160801b8104600290810b810b810b95830195909552600160981b9004840b840b840b9281019290925260018101546060830152918201546080820152600382015460a0820152600482015460c0820152600582015460e0820152600690910154610100820152613c3b565b509695505050505050565b3390565b6000806000806000806000876001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b158015611eeb57600080fd5b505afa158015611eff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f2391906154ed565b959e949d50929b5090995097509550909350915050565b611f42614f73565b600286810b810b60009081526020899052604080822088840b90930b8252902060018083015490820154611f74614f73565b8a60020b8960020b1215611f8a57828803611f8c565b825b6020820152600060028b810b908b900b12611fa957828903611fab565b825b905060008660020154905060008660020154905060008e60020b8d60020b1215611fd757828b03611fd9565b825b905060008e60020b8e60020b12611ff257828c03611ff4565b825b6020870151909d03949094038552909903999099036040830152509b9a5050505050505050505050565b60008061202e846040015161290f565b9050600061204b612042866020015161290f565b86518490613cea565b9050600061207c61206d8760a001518760200151612ecf90919063ffffffff16565b61207684612e83565b90613d53565b905060006120e56120d16120b86120a48a608001518a60000151612ecf90919063ffffffff16565b600160601b886001600160a01b0316613dfc565b60c08a015160408a01516120cb91612ecf565b90612ecf565b8851612076906001600160801b0316612e83565b90506120ff600160601b6120f9848461210a565b90613ea0565b979650505050505050565b600082820181831280159061211f5750838112155b80612134575060008312801561213457508381125b61082b5760405162461bcd60e51b8152600401808060200182810382526021815260200180615a866021913960400191505060405180910390fd5b6067546001600160a01b0316612183611ea3565b6001600160a01b0316146121a95760405162461bcd60e51b81526004016118e0906157d1565b565b604080516bffffffffffffffffffffffff19606096871b81166020808401919091529590961b9095166034860152600292830b60e890811b60488701529190920b901b604b8401528051602e818503018152604e9093019052815191012090565b612214614e2e565b600061228b6040518060a0016040528085604001516001600160a01b03168152602001606760009054906101000a90046001600160a01b03166001600160a01b03168152602001856080015160020b81526020018560a0015160020b81526020018560c001516001600160801b0316815250613f58565b9050600080600061229b866140ae565b92509250925060006122ba6122af84612e83565b86516120cb90612e83565b905060006122d76122ca84612e83565b6120cb8860200151612e83565b90506122eb8860400151896080015161374e565b61231a5760808801516020808a01516001600160a01b0316600090815260d09091526040902061231a91614277565b61232c88604001518960a0015161374e565b61235b5760a08801516020808a01516001600160a01b0316600090815260d09091526040902061235b91614277565b6040805160a081018252875181526020978801519781019790975286019490945260608501525050608082015292915050565b6001600160a01b03808416600090815260ce60209081526040808320938616835292815282822080548451818402810184019095528085529293849384939192918301828280156123fe57602002820191906000526020600020905b8154815260200190600101908083116123ea575b5050609a5460405163bbe4f6db60e01b815294955060009461249294506001600160a01b03909116925063bbe4f6db915061243d908a90600401615652565b60206040518083038186803b15801561245557600080fd5b505afa158015612469573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061248d9190615097565b611ea7565b50508651949550600093505050505b8181101561265e57600060cf60008684815181106124bb57fe5b6020908102919091018101518252818101929092526040908101600090812082516101208101845281546001600160801b0381168252600160801b8104600290810b810b810b968301879052600160981b909104810b810b810b9482019490945260018201546060820152928101546080840152600381015460a0840152600481015460c0840152600581015460e0840152600601546101008301529092509081906125669061290f565b90506000612577846040015161290f565b90508a80156125975750806001600160a01b0316876001600160a01b0316105b156125d0576125c9826001600160a01b0316886001600160a01b0316116125be57826125c0565b875b85518390613cea565b9250612623565b8a1580156125ef5750816001600160a01b0316876001600160a01b0316115b156126235761262082826001600160a01b0316896001600160a01b0316106126175782612619565b885b865161429b565b92505b5061263090508882612e29565b9750886126545760006126438b84613c3b565b5090506126508882612e29565b9750505b50506001016124a1565b50505050935093915050565b60cd546001600160a01b031661267e611ea3565b6001600160a01b0316146121a95760405162461bcd60e51b81526004016118e0906157f2565b6126ac614f94565b6000806126b886611ea7565b5050505050915091506000866001600160a01b0316631a6865026040518163ffffffff1660e01b815260040160206040518083038186803b1580156126fc57600080fd5b505afa158015612710573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061273491906153f9565b6040805160a08101825260029490940b84526001600160a01b0390941660208401529282019590955260608101939093526001600160801b031660808301525092915050565b6000816001600160a01b031663d0c93a7c6040518163ffffffff1660e01b815260040160206040518083038186803b1580156127b557600080fd5b505afa1580156127c9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061056491906152b8565b60008060008460020b8660020b8161280157fe5b05905060008660020b12801561282857508460020b8660020b8161282157fe5b0760020b15155b1561283257600019015b831561289b57600080612844836142de565b9092509050600160ff82161b8001600019016000816128638c866142f0565b16801515965090508561287d57888360ff16860302612890565b886128878261436f565b840360ff168603025b965050505050612905565b6000806128aa836001016142de565b9092509050600019600160ff83161b01196000816128c88c866142f0565b1680151596509050856128e857888360ff0360ff168660010101026128fe565b88836128f38361440a565b0360ff168660010101025b9650505050505b5094509492505050565b60008060008360020b12612926578260020b61292e565b8260020b6000035b9050620d89e881111561296c576040805162461bcd60e51b81526020600482015260016024820152601560fa1b604482015290519081900360640190fd5b60006001821661298057600160801b612992565b6ffffcb933bd6fad37aa2d162d1a5940015b6001600160881b0316905060028216156129bc576ffff97272373d413259a46990580e213a0260801c5b60048216156129db576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b60088216156129fa576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b6010821615612a19576fffcb9843d60f6159c9db58835c9266440260801c5b6020821615612a38576fff973b41fa98c081472e6896dfb254c00260801c5b6040821615612a57576fff2ea16466c96a3843ec78b326b528610260801c5b6080821615612a76576ffe5dee046a99a2a811c461f1969c30530260801c5b610100821615612a96576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b610200821615612ab6576ff987a7253ac413176f2b074cf7815e540260801c5b610400821615612ad6576ff3392b0822b70005940c7a398e4b70f30260801c5b610800821615612af6576fe7159475a2c29b7443b29c7fa6e889d90260801c5b611000821615612b16576fd097f3bdfd2022b8845ad8f792aa58250260801c5b612000821615612b36576fa9f746462d870fdf8a65dc1f90e061e50260801c5b614000821615612b56576f70d869a156d2a1b890bb3df62baf32f70260801c5b618000821615612b76576f31be135f97d08fd981231505542fcfa60260801c5b62010000821615612b97576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b62020000821615612bb7576e5d6af8dedb81196699c329225ee6040260801c5b62040000821615612bd6576d2216e584f5fa1ea926041bedfe980260801c5b62080000821615612bf3576b048a170391f7dc42444e8fa20260801c5b60008460020b1315612c0e578060001981612c0a57fe5b0490505b640100000000810615612c22576001612c25565b60005b60ff16602082901c0192505050919050565b60008080806001600160a01b03808916908a161015818712801590612cbc576000612c708989620f42400362ffffff16620f4240612fcb565b905082612c8957612c848c8c8c60016144f4565b612c96565b612c968b8d8c600161456d565b9550858110612ca7578a9650612cb6565b612cb38c8b838661460d565b96505b50612d06565b81612cd357612cce8b8b8b600061456d565b612ce0565b612ce08a8c8b60006144f4565b9350838860000310612cf457899550612d06565b612d038b8a8a60000385614659565b95505b6001600160a01b038a8116908716148215612d6957808015612d255750815b612d3b57612d36878d8c600161456d565b612d3d565b855b9550808015612d4a575081155b612d6057612d5b878d8c60006144f4565b612d62565b845b9450612db3565b808015612d735750815b612d8957612d848c888c60016144f4565b612d8b565b855b9550808015612d98575081155b612dae57612da98c888c600061456d565b612db0565b845b94505b81158015612dc357508860000385115b15612dcf578860000394505b818015612dee57508a6001600160a01b0316876001600160a01b031614155b15612dfd578589039350612e1a565b612e17868962ffffff168a620f42400362ffffff16612f34565b93505b50505095509550955095915050565b60008282018381101561082b576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60006001600160ff1b03821115612ecb5760405162461bcd60e51b8152600401808060200182810382526028815260200180615b3d6028913960400191505060405180910390fd5b5090565b6000818303818312801590612ee45750838113155b80612ef95750600083128015612ef957508381135b61082b5760405162461bcd60e51b8152600401808060200182810382526024815260200180615b656024913960400191505060405180910390fd5b6000612f41848484612fcb565b905060008280612f4d57fe5b848609111561082b576000198110612f6457600080fd5b6001019392505050565b600082821115612fc5576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b60008080600019858709868602925082811090839003039050806130015760008411612ff657600080fd5b50829004905061082b565b80841161300d57600080fd5b6000848688096000868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b600291820b820b600090815260209384526040908190208054835103815560018101805495840151959095039094559290910180549190920151039055565b60405163f30dba9360e01b81526000906001600160a01b0384169063f30dba93906130e8908590600401615786565b6101006040518083038186803b15801561310157600080fd5b505afa158015613115573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131399190615415565b50949998505050505050505050565b600060016001607f1b031982600f0b136131745760405162461bcd60e51b81526004016118e090615833565b5060000390565b60008082600f0b12156131e057826001600160801b03168260000384039150816001600160801b0316106131db576040805162461bcd60e51b81526020600482015260026024820152614c5360f01b604482015290519081900360640190fd5b610564565b826001600160801b03168284019150816001600160801b03161015610564576040805162461bcd60e51b81526020600482015260026024820152614c4160f01b604482015290519081900360640190fd5b60006401000276a36001600160a01b0383161080159061326d575073fffd8963efd1fc6a506488495d951d5263988d266001600160a01b038316105b6132a2576040805162461bcd60e51b81526020600482015260016024820152602960f91b604482015290519081900360640190fd5b640100000000600160c01b03602083901b166001600160801b03811160071b81811c67ffffffffffffffff811160061b90811c63ffffffff811160051b90811c61ffff811160041b90811c60ff8111600390811b91821c600f811160021b90811c918211600190811b92831c9790881196179094179092171790911717176080811061333657607f810383901c9150613340565b80607f0383901b91505b908002607f81811c60ff83811c9190911c800280831c81831c1c800280841c81841c1c800280851c81851c1c800280861c81861c1c800280871c81871c1c800280881c81881c1c800280891c81891c1c8002808a1c818a1c1c8002808b1c818b1c1c8002808c1c818c1c1c8002808d1c818d1c1c8002808e1c9c81901c9c909c1c80029c8d901c9e9d607f198f0160401b60c09190911c6001603f1b161760c19b909b1c6001603e1b169a909a1760c29990991c6001603d1b169890981760c39790971c6001603c1b169690961760c49590951c6001603b1b169490941760c59390931c6001603a1b169290921760c69190911c600160391b161760c79190911c600160381b161760c89190911c6680000000000000161760c99190911c6640000000000000161760ca9190911c6620000000000000161760cb9190911c6610000000000000161760cc9190911c6608000000000000161760cd9190911c66040000000000001617693627a301d71055774c8581026f028f6481ab7f045a5af012a19d003aa9198101608090811d906fdb2df09e81959a81455e260799a0632f8301901d600281810b9083900b1461352157886001600160a01b03166135058261290f565b6001600160a01b0316111561351a578161351c565b805b613523565b815b9998505050505050505050565b600080821215612ecb576040805162461bcd60e51b815260206004820181905260248201527f53616665436173743a2076616c7565206d75737420626520706f736974697665604482015290519081900360640190fd5b6000613592306146a5565b15905090565b600054610100900460ff16806135b157506135b1613587565b806135bf575060005460ff16155b6135fa5760405162461bcd60e51b815260040180806020018281038252602e815260200180615aa7602e913960400191505060405180910390fd5b600054610100900460ff16158015613625576000805460ff1961ff0019909116610100171660011790555b61362d6146ab565b801561363f576000805461ff00191690555b50565b600054610100900460ff168061365b575061365b613587565b80613669575060005460ff16155b6136a45760405162461bcd60e51b815260040180806020018281038252602e815260200180615aa7602e913960400191505060405180910390fd5b600054610100900460ff161580156136cf576000805460ff1961ff0019909116610100171660011790555b6136d761479a565b609a80546001600160a01b0319166001600160a01b0384161790558015611717576000805461ff00191690555050565b60008060008061371887878761238e565b91509150600061372988888861109b565b905061374061373782612e83565b6120cb85612e83565b989197509095505050505050565b60405163f30dba9360e01b81526000906001600160a01b0384169063f30dba939061377d908590600401615786565b6101006040518083038186803b15801561379657600080fd5b505afa1580156137aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137ce9190615415565b9a9950505050505050505050565b6137e4614f49565b60006137f38360000151611ea7565b5050505050509050600061382a8261380e866020015161290f565b61381b876040015161290f565b8760600151886080015161482f565b8451602086015160408088015160a08901519151633c8a7d8d60e01b815294955060009485946001600160a01b031693633c8a7d8d9361387293309390918a91600401615666565b6040805180830381600087803b15801561388b57600080fd5b505af115801561389f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138c39190615593565b915091506040518060600160405280838152602001828152602001846001600160801b0316815250945050505050919050565b8160020b8360020b1361392f57600283810b810b6000908152602086815260409182902084518155908401516001820155908301519101555b50505050565b60008061395483600001518460200151856060015186608001516121ab565b600081815260cf602052604090208054919250906001600160801b0316613b1b5783516001600160a01b03908116600090815260ce602090815260408083208289015185168452825291829020609a548351633b38243160e21b815293519194169263ece090c4926004808301939192829003018186803b1580156139d857600080fd5b505afa1580156139ec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a109190615631565b60ff16818054905010613a355760405162461bcd60e51b81526004016118e09061586a565b8054600181018255600082815260208120909101849055606086015183546080880151600290810b62ffffff908116600160981b0262ffffff60981b199490920b16600160801b0262ffffff60801b1990921691909117919091161783556040860151613aa190611ea7565b5050506020808b01516001600160a01b0316600090815260d082526040812089546101208e015180519401519698509096509094613afc9450869350600160801b8204600290810b93600160981b909304900b918891611f3a565b8051600287015560208101516003870155604001516004860155505050505b602080850151604080516101208101825284546001600160801b0381168252600160801b8104600290810b810b810b95830195909552600160981b9004840b840b840b9181019190915260018401546060820152918301546080830152600383015460a0830152600483015460c0830152600583015460e083015260068301546101008301526000918291613baf91613c3b565b60c08801518554929450909250613bdb91613bd6916001600160801b039182169116612e29565b6148f1565b83546001600160801b0319166001600160801b03919091161783556001830181905560e08601516005840154613c1091612e29565b60058401556101008601516006840154613c2991612e29565b60069093019290925592505050919050565b609a5460405163bbe4f6db60e01b815260009182918291613c76916001600160a01b039091169063bbe4f6db9061243d908990600401615652565b505050506001600160a01b038816600090815260d0602090815260408083208a8301518b83015160d19094529190932054949650919450613cbb938593508690614939565b9250613cdf8560600151840386600001516001600160801b0316600160801b612fcb565b935050509250929050565b6000826001600160a01b0316846001600160a01b03161115613d0a579192915b836001600160a01b0316613d43606060ff16846001600160801b0316901b8686036001600160a01b0316866001600160a01b0316612fcb565b81613d4a57fe5b04949350505050565b600082613d6257506000610564565b82600019148015613d765750600160ff1b82145b15613db25760405162461bcd60e51b8152600401808060200182810382526027815260200180615b166027913960400191505060405180910390fd5b82820282848281613dbf57fe5b051461082b5760405162461bcd60e51b8152600401808060200182810382526027815260200180615b166027913960400191505060405180910390fd5b60008060008512613e0d5784613e16565b613e16856149a1565b90506000808512613e275784613e30565b613e30856149a1565b905060008087128015613e435750600086135b80613e595750600087138015613e595750600086125b613e64576000613e67565b60015b90506000613e76848488612fcb565b905081613e8b57613e8681612e83565b613e94565b613e94816149c6565b98975050505050505050565b600081613ef4576040805162461bcd60e51b815260206004820181905260248201527f5369676e6564536166654d6174683a206469766973696f6e206279207a65726f604482015290519081900360640190fd5b81600019148015613f085750600160ff1b83145b15613f445760405162461bcd60e51b8152600401808060200182810382526021815260200180615ad56021913960400191505060405180910390fd5b6000828481613f4f57fe5b05949350505050565b613f60614fc2565b60008083600001516001600160a01b031663a34123a78560400151866060015187608001516040518463ffffffff1660e01b8152600401613fa393929190615794565b6040805180830381600087803b158015613fbc57600080fd5b505af1158015613fd0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ff49190615593565b9150915083600001516001600160a01b0316634f1eb3d88560200151866040015187606001516001600160801b03806040518663ffffffff1660e01b81526004016140439594939291906156ec565b6040805180830381600087803b15801561405c57600080fd5b505af1158015614070573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061409491906154bf565b505060408051808201909152918252602082015292915050565b606080820151600090815260cf602090815260408083208286015182516101208101845282546001600160801b0381168252600160801b8104600290810b810b810b96830196909652600160981b9004850b850b850b93810193909352600182015495830195909552918201546080820152600382015460a0820152600482015460c0820152600582015460e0820152600682015461010082015291928392839291839161415c9190613c3b565b60c088015191965091506001600160801b03161561423b576005820154156141b957600582015460c087015183546141a192916001600160801b039081169116612fcb565b60058301549094506141b39085612f6e565b60058301555b6006820154156141fe57600682015460c087015183546141e692916001600160801b039081169116612fcb565b60068301549093506141f89084612f6e565b60068301555b60c0860151825461421f91613bd6916001600160801b039081169116612f6e565b82546001600160801b0319166001600160801b03919091161782555b81546001600160801b0316614266576142618660000151876020015188606001516149da565b61426e565b600182018190555b50509193909250565b600290810b810b600090815260209290925260408220828155600181018390550155565b6000826001600160a01b0316846001600160a01b031611156142bb579192915b611dd3826001600160801b03168585036001600160a01b0316600160601b612fcb565b60020b600881901d9161010090910790565b60405163299ce14b60e11b81526000906001600160a01b03841690635339c2969061431f908590600401615778565b60206040518083038186803b15801561433757600080fd5b505afa15801561434b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061082b919061557b565b600080821161437d57600080fd5b600160801b821061439057608091821c91015b600160401b82106143a357604091821c91015b64010000000082106143b757602091821c91015b6201000082106143c957601091821c91015b61010082106143da57600891821c91015b601082106143ea57600491821c91015b600482106143fa57600291821c91015b60028210610a5a57600101919050565b600080821161441857600080fd5b5060ff6001600160801b0382161561443357607f190161443b565b608082901c91505b67ffffffffffffffff82161561445457603f190161445c565b604082901c91505b63ffffffff82161561447157601f1901614479565b602082901c91505b61ffff82161561448c57600f1901614494565b601082901c91505b60ff8216156144a657600719016144ae565b600882901c91505b600f8216156144c057600319016144c8565b600482901c91505b60038216156144da57600119016144e2565b600282901c91505b6001821615610a5a5760001901919050565b6000836001600160a01b0316856001600160a01b03161115614514579293925b816145415761453c836001600160801b03168686036001600160a01b0316600160601b612fcb565b614564565b614564836001600160801b03168686036001600160a01b0316600160601b612f34565b95945050505050565b6000836001600160a01b0316856001600160a01b0316111561458d579293925b600160601b600160e01b03606084901b166001600160a01b0386860381169087166145b757600080fd5b836145e757866001600160a01b03166145da8383896001600160a01b0316612fcb565b816145e157fe5b046120ff565b6120ff6145fe8383896001600160a01b0316612f34565b886001600160a01b0316614ae3565b600080856001600160a01b03161161462457600080fd5b6000846001600160801b03161161463a57600080fd5b8161464c5761453c8585856001614aee565b6145648585856001614bcf565b600080856001600160a01b03161161467057600080fd5b6000846001600160801b03161161468657600080fd5b816146985761453c8585856000614bcf565b6145648585856000614aee565b3b151590565b600054610100900460ff16806146c457506146c4613587565b806146d2575060005460ff16155b61470d5760405162461bcd60e51b815260040180806020018281038252602e815260200180615aa7602e913960400191505060405180910390fd5b600054610100900460ff16158015614738576000805460ff1961ff0019909116610100171660011790555b61474061479a565b600061474a611ea3565b603380546001600160a01b0319166001600160a01b03831690811790915560405191925090600090600080516020615af6833981519152908290a350801561363f576000805461ff001916905550565b600054610100900460ff16806147b357506147b3613587565b806147c1575060005460ff16155b6147fc5760405162461bcd60e51b815260040180806020018281038252602e815260200180615aa7602e913960400191505060405180910390fd5b600054610100900460ff16158015614827576000805460ff1961ff0019909116610100171660011790555b61362d614cb2565b6000836001600160a01b0316856001600160a01b0316111561484f579293925b846001600160a01b0316866001600160a01b03161161487a57614873858585614d52565b9050614564565b836001600160a01b0316866001600160a01b031610156148dc5760006148a1878686614d52565b905060006148b0878986614db5565b9050806001600160801b0316826001600160801b0316106148d157806148d3565b815b92505050614564565b6148e7858584614db5565b9695505050505050565b806001600160801b0381168114610a5a5760405162461bcd60e51b8152600401808060200182810382526027815260200180615a5f6027913960400191505060405180910390fd5b600284810b80820b6000908152602088905260408082205487850b850b83529082205491939092849187900b121561497357828503614975565b825b905060008760020b8760020b1261498e57828603614990565b825b919095030398975050505050505050565b6000600160ff1b82136131745760405162461bcd60e51b81526004016118e090615833565b60006149d182612e83565b60000392915050565b6001600160a01b03808416600090815260ce602090815260408083209386168352929052908120805490915b81811015614adb5783838281548110614a1b57fe5b90600052602060002001541415614ad357600182038114614a6957826001830381548110614a4557fe5b9060005260206000200154838281548110614a5c57fe5b6000918252602090912001555b82805480614a7357fe5b60008281526020808220830160001990810183905590920190925585825260cf90526040812080546001600160b01b0319168155600181018290556002810182905560038101829055600481018290556005810182905560060155614adb565b600101614a06565b505050505050565b808204910615150190565b60008115614b615760006001600160a01b03841115614b2457614b1f84600160601b876001600160801b0316612fcb565b614b3c565b6001600160801b038516606085901b81614b3a57fe5b045b9050614b59614b546001600160a01b03881683614df2565b614e02565b915050611dd3565b60006001600160a01b03841115614b8f57614b8a84600160601b876001600160801b0316612f34565b614ba6565b614ba6606085901b6001600160801b038716614ae3565b905080866001600160a01b031611614bbd57600080fd5b6001600160a01b038616039050611dd3565b600082614bdd575083611dd3565b600160601b600160e01b03606085901b168215614c6b576001600160a01b03861684810290858281614c0b57fe5b041415614c3c57818101828110614c3a57614c3083896001600160a01b031683612f34565b9350505050611dd3565b505b614c6282614c5d878a6001600160a01b03168681614c5657fe5b0490614df2565b614ae3565b92505050611dd3565b6001600160a01b03861684810290858281614c8257fe5b04148015614c8f57508082115b614c9857600080fd5b808203614c30614b54846001600160a01b038b1684612f34565b600054610100900460ff1680614ccb5750614ccb613587565b80614cd9575060005460ff16155b614d145760405162461bcd60e51b815260040180806020018281038252602e815260200180615aa7602e913960400191505060405180910390fd5b600054610100900460ff1615801561362d576000805460ff1961ff001990911661010017166001179055801561363f576000805461ff001916905550565b6000826001600160a01b0316846001600160a01b03161115614d72579192915b6000614d95856001600160a01b0316856001600160a01b0316600160601b612fcb565b9050614564614db084838888036001600160a01b0316612fcb565b614e18565b6000826001600160a01b0316846001600160a01b03161115614dd5579192915b611dd3614db083600160601b8787036001600160a01b0316612fcb565b8082018281101561056457600080fd5b806001600160a01b0381168114610a5a57600080fd5b806001600160801b0381168114610a5a57600080fd5b6040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b6040518060600160405280600060020b815260200160008152602001600081525090565b6040805160e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c081019190915290565b60405180610120016040528060006001600160801b03168152602001600060020b8152602001600060020b81526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b604051806080016040528060008152602001600081526020016000815260200160006001600160801b031681525090565b6040518060600160405280600081526020016000815260200160006001600160801b031681525090565b60405180606001604052806000815260200160008152602001600081525090565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915290565b604051806040016040528060008152602001600081525090565b8035610a5a81615a17565b8035610a5a81615a2c565b8051610a5a81615a2c565b60006040828403121561500e578081fd5b6040516040810181811067ffffffffffffffff8211171561502b57fe5b604052823581526020928301359281019290925250919050565b805161ffff81168114610a5a57600080fd5b803562ffffff81168114610a5a57600080fd5b805160ff81168114610a5a57600080fd5b60006020828403121561508c578081fd5b813561082b81615a17565b6000602082840312156150a8578081fd5b815161082b81615a17565b600080604083850312156150c5578081fd5b82356150d081615a17565b915060208301356150e081615a17565b809150509250929050565b6000806000606084860312156150ff578081fd5b833561510a81615a17565b9250602084013561511a81615a17565b9150604084013561512a81615a2c565b809150509250925092565b6000806000806080858703121561514a578182fd5b843561515581615a17565b9350602085013561516581615a17565b9250604085013561517581615a3a565b9150606085013561518581615a3a565b939692955090935050565b6000806000608084860312156151a4578081fd5b83356151af81615a17565b925060208401356151bf81615a17565b91506151ce8560408601614ffd565b90509250925092565b6000806000604084860312156151eb578081fd5b83356151f681615a17565b9250602084013567ffffffffffffffff80821115615212578283fd5b818601915086601f830112615225578283fd5b813581811115615233578384fd5b8760208083028501011115615246578384fd5b6020830194508093505050509250925092565b60006020828403121561526a578081fd5b5035919050565b600080600060608486031215615285578081fd5b505081359360208301359350604090920135919050565b6000602082840312156152ad578081fd5b813561082b81615a3a565b6000602082840312156152c9578081fd5b815161082b81615a3a565b600061010082840312156152e6578081fd5b50919050565b6000604082840312156152fd578081fd5b61082b8383614ffd565b600060a082840312156152e6578081fd5b6000610160828403121561532a578081fd5b610140615336816159f3565b61533f84614fdc565b815261534d60208501614fe7565b602082015261535e60408501614fe7565b60408201526060840135606082015261537960808501614fdc565b608082015261538a60a08501615057565b60a082015261539b60c08501615057565b60c08201526153ad8560e08601614ffd565b60e08201526101206153c0818601614fdc565b6101008301526153d1838601615057565b90820152949350505050565b6000602082840312156153ee578081fd5b813561082b81615a49565b60006020828403121561540a578081fd5b815161082b81615a49565b600080600080600080600080610100898b031215615431578586fd5b885161543c81615a49565b80985050602089015180600f0b8114615453578687fd5b80975050604089015195506060890151945060808901518060060b8114615478578485fd5b60a08a015190945061548981615a17565b60c08a015190935063ffffffff811681146154a2578283fd5b91506154b060e08a01614ff2565b90509295985092959890939650565b600080604083850312156154d1578182fd5b82516154dc81615a49565b60208401519092506150e081615a49565b600080600080600080600060e0888a031215615507578081fd5b875161551281615a17565b602089015190975061552381615a3a565b955061553160408901615045565b945061553f60608901615045565b935061554d60808901615045565b925061555b60a0890161506a565b915060c088015161556b81615a2c565b8091505092959891949750929550565b60006020828403121561558c578081fd5b5051919050565b600080604083850312156155a5578182fd5b505080516020909101519092909150565b600080600080606085870312156155cb578182fd5b8435935060208501359250604085013567ffffffffffffffff808211156155f0578384fd5b818701915087601f830112615603578384fd5b813581811115615611578485fd5b886020828501011115615622578485fd5b95989497505060200194505050565b600060208284031215615642578081fd5b61082b8261506a565b60020b9052565b6001600160a01b0391909116815260200190565b600060018060a01b038716825260208660020b818401528560020b604084015260018060801b038516606084015260a0608084015283518060a0850152825b818110156156c15785810183015185820160c0015282016156a5565b818111156156d2578360c083870101525b50601f01601f19169290920160c001979650505050505050565b6001600160a01b03959095168552600293840b60208601529190920b60408401526001600160801b03918216606084015216608082015260a00190565b6020808252825182820181905260009190848201906040850190845b8181101561576157835183529284019291840191600101615745565b50909695505050505050565b901515815260200190565b60019190910b815260200190565b60029190910b815260200190565b600293840b81529190920b60208201526001600160801b03909116604082015260600190565b90815260200190565b918252602082015260400190565b6020808252600790820152660869088be9e86960cb1b604082015260600190565b60208082526006908201526509e84be9e8ab60d31b604082015260600190565b6020808252600790820152662aa1a12fa321ab60c91b604082015260600190565b6020808252601c908201527f506572704d6174683a20696e76657273696f6e206f766572666c6f7700000000604082015260600190565b6020808252600690820152654f425f4f4e4560d01b604082015260600190565b8151815260208083015190820152604080830151908201526060918201516001600160801b03169181019190915260800190565b81516001600160801b0316815260208083015160020b908201526040808301516101208301916158f09084018261564b565b50606083015160608301526080830151608083015260a083015160a083015260c083015160c083015260e083015160e083015261010080840151818401525092915050565b81516001600160a01b039081168252602092830151169181019190915260400190565b600060a082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015292915050565b815160020b8152602080830151908201526040918201519181019190915260600190565b60008582528460208301526060604083015282606083015282846080840137818301608090810191909152601f909201601f191601019392505050565b60405181810167ffffffffffffffff81118282101715615a0f57fe5b604052919050565b6001600160a01b038116811461363f57600080fd5b801515811461363f57600080fd5b8060020b811461363f57600080fd5b6001600160801b038116811461363f57600080fdfe53616665436173743a2076616c756520646f65736e27742066697420696e2031323820626974735369676e6564536166654d6174683a206164646974696f6e206f766572666c6f77496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a65645369676e6564536166654d6174683a206469766973696f6e206f766572666c6f778be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05369676e6564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7753616665436173743a2076616c756520646f65736e27742066697420696e20616e20696e743235365369676e6564536166654d6174683a207375627472616374696f6e206f766572666c6f77a264697066735822122033b0fa9509dac45b5550d5a0ee00185e401246a2fd08ebd27c460a4aea030b2464736f6c63430007060033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061016e5760003560e01c80638da5cb5b116100ce578063c66b8ed211610087578063c66b8ed214610319578063d0581a9314610321578063d348799714610334578063e8ab2fb314610347578063eaad235414610367578063f807cd221461037a578063fb112d6c146103825761016e565b80638da5cb5b146102bb578063acf71827146102c3578063b0c04174146102e3578063bc5920ba146102f6578063c4d66de8146102fe578063c575ff79146103115761016e565b80635d8a541d1161012b5780635d8a541d1461022457806367267e8a1461024557806367b1f5df146102655780636c8381f814610278578063715018a61461028d5780637c2b7c53146102955780637fc26736146102a85761016e565b806313af403514610173578063436933ea14610188578063449323d8146101b157806347b52fb7146101c45780634dffaee5146101e45780635b778b9d14610204575b600080fd5b61018661018136600461507b565b610395565b005b61019b6101963660046150b3565b6104f0565b6040516101a89190615729565b60405180910390f35b6101866101bf36600461507b565b61056a565b6101d76101d2366004615190565b610611565b6040516101a891906157ba565b6101f76101f23660046151d7565b610832565b6040516101a8919061576d565b610217610212366004615307565b6108b5565b6040516101a89190615958565b6102376102323660046150eb565b610a5f565b6040516101a89291906157c3565b610258610253366004615318565b610a79565b6040516101a89190615992565b61018661027336600461507b565b610f44565b610280610feb565b6040516101a89190615652565b610186610ffa565b6101d76102a33660046150eb565b61109b565b6101d76102b6366004615190565b61120d565b610280611471565b6102d66102d1366004615259565b611480565b6040516101a891906158be565b6101866102f1366004615271565b61151b565b61018661157b565b61018661030c36600461507b565b611667565b61028061171b565b61028061172a565b61023761032f3660046151d7565b611739565b6101866103423660046155b6565b6117b0565b61035a6103553660046152d4565b611959565b6040516101a8919061588a565b6102d6610375366004615135565b611d26565b610280611ddb565b6101d7610390366004615135565b611dea565b61039d611ea3565b6001600160a01b03166103ae611471565b6001600160a01b0316146103f2576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6001600160a01b038116610436576040805162461bcd60e51b81526020600482015260066024820152650534f5f4e57360d41b604482015290519081900360640190fd5b6033546001600160a01b0382811691161415610482576040805162461bcd60e51b8152602060048201526006602482015265534f5f53414f60d01b604482015290519081900360640190fd5b6034546001600160a01b03828116911614156104ce576040805162461bcd60e51b8152602060048201526006602482015265534f5f53414360d01b604482015290519081900360640190fd5b603480546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03808316600090815260ce6020908152604080832093851683529281529082902080548351818402810184019094528084526060939283018282801561055c57602002820191906000526020600020905b815481526020019060010190808311610548575b505050505090505b92915050565b610572611ea3565b6001600160a01b0316610583611471565b6001600160a01b0316146105c7576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b606780546001600160a01b0319166001600160a01b0383169081179091556040517fd0654f5900f9e7e4e605a19334306e6a2786bbf960ac0484a4c12feb6428fe2f90600090a250565b6001600160a01b03808416600090815260ce602090815260408083209386168352928152828220805484518184028101840190955280855292938493909283018282801561067e57602002820191906000526020600020905b81548152602001906001019080831161066a575b5050506001600160a01b03808816600090815260d06020526040808220609a54915163bbe4f6db60e01b815296975095919450909116915063bbe4f6db906106ca908990600401615652565b60206040518083038186803b1580156106e257600080fd5b505afa1580156106f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061071a9190615097565b9050600061072782611ea7565b505050505091505060005b845181101561082557600060cf600087848151811061074d57fe5b6020908102919091018101518252818101929092526040908101600090812082516101208101845281546001600160801b0381168252600160801b8104600290810b810b810b838801819052600160981b909204810b810b810b958301869052600184015460608401528301546080830152600383015460a0830152600483015460c0830152600583015460e08301526006909201546101008201528c51948d01519095509193610803938a9390918991611f3a565b9050610819610812838361201e565b899061210a565b97505050600101610732565b50505050505b9392505050565b6000805b828110156108aa576001600160a01b038516600090815260ce602052604081208186868581811061086357fe5b9050602002016020810190610878919061507b565b6001600160a01b0316815260208101919091526040016000205411156108a257600191505061082b565b600101610836565b506000949350505050565b6108bd614e2e565b6108c561216f565b609a546000906001600160a01b031663bbe4f6db6108e9604086016020870161507b565b6040518263ffffffff1660e01b81526004016109059190615652565b60206040518083038186803b15801561091d57600080fd5b505afa158015610931573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109559190615097565b9050600061099e610969602086018661507b565b610979604087016020880161507b565b610989606088016040890161529c565b6109996080890160608a0161529c565b6121ab565b6040805160e08101909152909150610a5590806109be602088018861507b565b6001600160a01b031681526020018660200160208101906109df919061507b565b6001600160a01b03168152602001846001600160a01b03168152602001838152602001866040016020810190610a15919061529c565b60020b8152602001610a2d608088016060890161529c565b60020b8152602001610a4560a08801608089016153dd565b6001600160801b0316905261220c565b925050505b919050565b600080610a6d85858561238e565b90969095509350505050565b610a81614e5d565b610a8961266a565b606082015161010083015183516001600160a01b0316600090815260d1602052604081205481841393919283928392610ac39291906126a4565b905085608001516001600160a01b0316600014610ae4578560800151610b0e565b8560200151610b075773fffd8963efd1fc6a506488495d951d5263988d25610b0e565b6401000276a45b6001600160a01b03166080870152610100860151600090610b2e9061277a565b90505b604082015115801590610b5e575086608001516001600160a01b031682602001516001600160a01b031614155b15610ef557610b6b614e81565b6020808401516001600160a01b031682526101008901518451918a0151610b94929085906127ed565b15156040830152600290810b810b60208301819052620d89e719910b1215610bc557620d89e7196020820152610be4565b6020810151620d89e860029190910b1315610be457620d89e860208201525b610bf1816020015161290f565b6001600160a01b0316606082015260208084015190890151610c8e9190610c345789608001516001600160a01b031683606001516001600160a01b031611610c52565b89608001516001600160a01b031683606001516001600160a01b0316105b610c60578260600151610c66565b89608001515b856080015186604001518c60200151610c83578c60a00151610c89565b8c60c001515b612c37565b60c085015260a084015260808301526001600160a01b031660208401528515610cec57610ce2610cd7610cd28360c001518460800151612e2990919063ffffffff16565b612e83565b604085015190612ecf565b6040840152610d0d565b610d07610cfc8260a00151612e83565b60408501519061210a565b60408401525b60808301516001600160801b031615610db457876020015115610d4b57610d458160a001518960a0015162ffffff16620f4240612f34565b60c08201525b60c081015161012089015195810195600091610d6f9162ffffff16620f4240612f34565b60c083015195810195909150600090610d889083612f6e565b9050610da681600160801b87608001516001600160801b0316612fcb565b606086018051909101905250505b80606001516001600160a01b031683602001516001600160a01b03161415610eb757806040015115610e8d57876040015115610e3f5787516001600160a01b0316600090815260d0602090815260409182902083820151835160608082018652880151815260e08d018051518286015251909301519383019390935291610e3d9183919061307a565b505b6000610e5489610100015183602001516130b9565b9050886020015115610e6f57610e6c81600f0b613148565b90505b610e7d84608001518261317b565b6001600160801b03166080850152505b8760200151610ea0578060200151610ea9565b60018160200151035b600290810b900b8352610eef565b80600001516001600160a01b031683602001516001600160a01b031614610eef57610ee58360200151613231565b600290810b900b83525b50610b31565b866040015115610f1f57606082015187516001600160a01b0316600090815260d160205260409020555b5060408051606081018252915160020b82526020820193909352918201529392505050565b610f4c611ea3565b6001600160a01b0316610f5d611471565b6001600160a01b031614610fa1576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b60cd80546001600160a01b0319166001600160a01b0383169081179091556040517f39870277935708b88965de17b0c29d3c1ad93a200dce569fc56702229432973e90600090a250565b6034546001600160a01b031690565b611002611ea3565b6001600160a01b0316611013611471565b6001600160a01b031614611057576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6033546040516000916001600160a01b031690600080516020615af6833981519152908390a3603380546001600160a01b0319908116909155603480549091169055565b6001600160a01b03808416600090815260ce602090815260408083209386168352928152828220805484518184028101840190955280855292938493849391929183018282801561110b57602002820191906000526020600020905b8154815260200190600101908083116110f7575b505083519394506000925050505b8181101561120157600060cf600085848151811061113357fe5b6020908102919091018101518252818101929092526040908101600090812082516101208101845281546001600160801b0381168252600160801b8104600290810b810b810b96830196909652600160981b9004850b850b850b9381019390935260018101546060840152928301546080830152600383015460a0830152600483015460c0830152600583015460e08301526006909201546101008201529150876111e3578161010001516111e9565b8160e001515b90506111f58682612e29565b95505050600101611119565b50919695505050505050565b600061121761266a565b6001600160a01b03808516600090815260ce6020908152604080832093871683529281528282208054845181840281018401909552808552929392909183018282801561128357602002820191906000526020600020905b81548152602001906001019080831161126f575b5050506001600160a01b03808816600090815260d06020526040808220609a54915163bbe4f6db60e01b815296975095919450909116915063bbe4f6db906112cf908990600401615652565b60206040518083038186803b1580156112e757600080fd5b505afa1580156112fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061131f9190615097565b8351909150600061132f83611ea7565b505050505091505060005b8281101561146457600060cf600088848151811061135457fe5b602090810291909101810151825281810192909252604001600090812080548c51938d015191945091926113a3928a92600160801b8204600290810b93600160981b909304900b918991611f3a565b604080516101208101825284546001600160801b0381168252600160801b8104600290810b810b810b6020840152600160981b909104810b810b810b9282019290925260018501546060820152908401546080820152600384015460a0820152600484015460c0820152600584015460e0820152600684015461010082015290915061143a90611433908361201e565b8a9061210a565b8151600284015560208201516003840155604090910151600490920191909155965060010161133a565b5050505050509392505050565b6033546001600160a01b031690565b611488614ebd565b50600090815260cf602090815260409182902082516101208101845281546001600160801b0381168252600160801b8104600290810b810b810b94830194909452600160981b9004830b830b830b9381019390935260018101546060840152908101546080830152600381015460a0830152600481015460c0830152600581015460e08301526006015461010082015290565b61152361216f565b600083815260cf6020526040902060058101546115549061154f90859061154990612e83565b9061210a565b613530565b816005018190555061157061154f836115498460060154612e83565b600690910155505050565b6034546001600160a01b03166115c0576040805162461bcd60e51b81526020600482015260056024820152640534f5f43360dc1b604482015290519081900360640190fd5b6115c8611ea3565b6034546001600160a01b03908116911614611613576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4360d01b604482015290519081900360640190fd5b6034546033546040516001600160a01b039283169290911690600080516020615af683398151915290600090a360348054603380546001600160a01b03199081166001600160a01b03841617909155169055565b600054610100900460ff16806116805750611680613587565b8061168e575060005460ff16155b6116c95760405162461bcd60e51b815260040180806020018281038252602e815260200180615aa7602e913960400191505060405180910390fd5b600054610100900460ff161580156116f4576000805460ff1961ff0019909116610100171660011790555b6116fc613598565b61170582613642565b8015611717576000805461ff00191690555b5050565b6067546001600160a01b031690565b609a546001600160a01b031690565b60008060005b838110156117a757600085858381811061175557fe5b905060200201602081019061176a919061507b565b905060008061177b89846000613707565b909250905061178a868361210a565b95506117968582612e29565b9450506001909201915061173f9050565b50935093915050565b60006117ba611ea3565b90506000816001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b1580156117f757600080fd5b505afa15801561180b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061182f9190615097565b609a5460405163bbe4f6db60e01b81529192506001600160a01b03169063bbe4f6db90611860908490600401615652565b60206040518083038186803b15801561187857600080fd5b505afa15801561188c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118b09190615097565b6001600160a01b0316826001600160a01b0316146118e95760405162461bcd60e51b81526004016118e090615812565b60405180910390fd5b60675460405163d348799760e01b81526001600160a01b039091169063d34879979061191f9089908990899089906004016159b6565b600060405180830381600087803b15801561193957600080fd5b505af115801561194d573d6000803e3d6000fd5b50505050505050505050565b611961614f18565b61196961216f565b609a546000906001600160a01b031663bbe4f6db61198d604086016020870161507b565b6040518263ffffffff1660e01b81526004016119a99190615652565b60206040518083038186803b1580156119c157600080fd5b505afa1580156119d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119f99190615097565b9050600060d181611a10604087016020880161507b565b6001600160a01b03166001600160a01b03168152602001908152602001600020549050600060d06000866020016020810190611a4c919061507b565b6001600160a01b03166001600160a01b031681526020019081526020016000209050611a76614f49565b6000611a9185611a8c60a08a0160808b0161529c565b61374e565b90506000611aa986611a8c60c08b0160a08c0161529c565b9050611b6f6040518060c00160405280886001600160a01b031681526020018a6080016020810190611adb919061529c565b60020b8152602001611af360c08c0160a08d0161529c565b60020b81526020018a6040013581526020018a60600135815260200160405180604001604052808c6000016020810190611b2d919061507b565b6001600160a01b031681526020018a6001600160a01b0316815250604051602001611b589190615935565b6040516020818303038152906040528152506137dc565b92506000611b7c87611ea7565b505050505091505082158015611ba15750611ba187611a8c60a08c0160808d0161529c565b15611be657611be6611bb960a08b0160808c0161529c565b6040805160608101825289815260c08d0135602082015260e08d01359181019190915287919084906138f6565b81158015611c035750611c0387611a8c60c08c0160a08d0161529c565b15611c1b57611c1b611bb960c08b0160a08c0161529c565b505060408051610140810190915260009150611cea9080611c3f60208b018b61507b565b6001600160a01b03168152602001896020016020810190611c60919061507b565b6001600160a01b03908116825288166020820152604001611c8760a08b0160808c0161529c565b60020b8152602001611c9f60c08b0160a08c0161529c565b60020b815260208082018890526040868101516001600160801b03169083015285516060830152850151608082015260a001611ce3368b90038b0160c08c016152ec565b9052613935565b6040805160808101825284518152602080860151908201528082019290925292909201516001600160801b031660608301525095945050505050565b611d2e614ebd565b60cf6000611d3e878787876121ab565b8152602080820192909252604090810160002081516101208101835281546001600160801b0381168252600160801b8104600290810b810b810b95830195909552600160981b9004840b840b840b9281019290925260018101546060830152918201546080820152600382015460a0820152600482015460c0820152600582015460e082015260069091015461010082015290505b949350505050565b60cd546001600160a01b031690565b600080611e988560cf6000611e018a8a8a8a6121ab565b8152602080820192909252604090810160002081516101208101835281546001600160801b0381168252600160801b8104600290810b810b810b95830195909552600160981b9004840b840b840b9281019290925260018101546060830152918201546080820152600382015460a0820152600482015460c0820152600582015460e0820152600690910154610100820152613c3b565b509695505050505050565b3390565b6000806000806000806000876001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b158015611eeb57600080fd5b505afa158015611eff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f2391906154ed565b959e949d50929b5090995097509550909350915050565b611f42614f73565b600286810b810b60009081526020899052604080822088840b90930b8252902060018083015490820154611f74614f73565b8a60020b8960020b1215611f8a57828803611f8c565b825b6020820152600060028b810b908b900b12611fa957828903611fab565b825b905060008660020154905060008660020154905060008e60020b8d60020b1215611fd757828b03611fd9565b825b905060008e60020b8e60020b12611ff257828c03611ff4565b825b6020870151909d03949094038552909903999099036040830152509b9a5050505050505050505050565b60008061202e846040015161290f565b9050600061204b612042866020015161290f565b86518490613cea565b9050600061207c61206d8760a001518760200151612ecf90919063ffffffff16565b61207684612e83565b90613d53565b905060006120e56120d16120b86120a48a608001518a60000151612ecf90919063ffffffff16565b600160601b886001600160a01b0316613dfc565b60c08a015160408a01516120cb91612ecf565b90612ecf565b8851612076906001600160801b0316612e83565b90506120ff600160601b6120f9848461210a565b90613ea0565b979650505050505050565b600082820181831280159061211f5750838112155b80612134575060008312801561213457508381125b61082b5760405162461bcd60e51b8152600401808060200182810382526021815260200180615a866021913960400191505060405180910390fd5b6067546001600160a01b0316612183611ea3565b6001600160a01b0316146121a95760405162461bcd60e51b81526004016118e0906157d1565b565b604080516bffffffffffffffffffffffff19606096871b81166020808401919091529590961b9095166034860152600292830b60e890811b60488701529190920b901b604b8401528051602e818503018152604e9093019052815191012090565b612214614e2e565b600061228b6040518060a0016040528085604001516001600160a01b03168152602001606760009054906101000a90046001600160a01b03166001600160a01b03168152602001856080015160020b81526020018560a0015160020b81526020018560c001516001600160801b0316815250613f58565b9050600080600061229b866140ae565b92509250925060006122ba6122af84612e83565b86516120cb90612e83565b905060006122d76122ca84612e83565b6120cb8860200151612e83565b90506122eb8860400151896080015161374e565b61231a5760808801516020808a01516001600160a01b0316600090815260d09091526040902061231a91614277565b61232c88604001518960a0015161374e565b61235b5760a08801516020808a01516001600160a01b0316600090815260d09091526040902061235b91614277565b6040805160a081018252875181526020978801519781019790975286019490945260608501525050608082015292915050565b6001600160a01b03808416600090815260ce60209081526040808320938616835292815282822080548451818402810184019095528085529293849384939192918301828280156123fe57602002820191906000526020600020905b8154815260200190600101908083116123ea575b5050609a5460405163bbe4f6db60e01b815294955060009461249294506001600160a01b03909116925063bbe4f6db915061243d908a90600401615652565b60206040518083038186803b15801561245557600080fd5b505afa158015612469573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061248d9190615097565b611ea7565b50508651949550600093505050505b8181101561265e57600060cf60008684815181106124bb57fe5b6020908102919091018101518252818101929092526040908101600090812082516101208101845281546001600160801b0381168252600160801b8104600290810b810b810b968301879052600160981b909104810b810b810b9482019490945260018201546060820152928101546080840152600381015460a0840152600481015460c0840152600581015460e0840152600601546101008301529092509081906125669061290f565b90506000612577846040015161290f565b90508a80156125975750806001600160a01b0316876001600160a01b0316105b156125d0576125c9826001600160a01b0316886001600160a01b0316116125be57826125c0565b875b85518390613cea565b9250612623565b8a1580156125ef5750816001600160a01b0316876001600160a01b0316115b156126235761262082826001600160a01b0316896001600160a01b0316106126175782612619565b885b865161429b565b92505b5061263090508882612e29565b9750886126545760006126438b84613c3b565b5090506126508882612e29565b9750505b50506001016124a1565b50505050935093915050565b60cd546001600160a01b031661267e611ea3565b6001600160a01b0316146121a95760405162461bcd60e51b81526004016118e0906157f2565b6126ac614f94565b6000806126b886611ea7565b5050505050915091506000866001600160a01b0316631a6865026040518163ffffffff1660e01b815260040160206040518083038186803b1580156126fc57600080fd5b505afa158015612710573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061273491906153f9565b6040805160a08101825260029490940b84526001600160a01b0390941660208401529282019590955260608101939093526001600160801b031660808301525092915050565b6000816001600160a01b031663d0c93a7c6040518163ffffffff1660e01b815260040160206040518083038186803b1580156127b557600080fd5b505afa1580156127c9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061056491906152b8565b60008060008460020b8660020b8161280157fe5b05905060008660020b12801561282857508460020b8660020b8161282157fe5b0760020b15155b1561283257600019015b831561289b57600080612844836142de565b9092509050600160ff82161b8001600019016000816128638c866142f0565b16801515965090508561287d57888360ff16860302612890565b886128878261436f565b840360ff168603025b965050505050612905565b6000806128aa836001016142de565b9092509050600019600160ff83161b01196000816128c88c866142f0565b1680151596509050856128e857888360ff0360ff168660010101026128fe565b88836128f38361440a565b0360ff168660010101025b9650505050505b5094509492505050565b60008060008360020b12612926578260020b61292e565b8260020b6000035b9050620d89e881111561296c576040805162461bcd60e51b81526020600482015260016024820152601560fa1b604482015290519081900360640190fd5b60006001821661298057600160801b612992565b6ffffcb933bd6fad37aa2d162d1a5940015b6001600160881b0316905060028216156129bc576ffff97272373d413259a46990580e213a0260801c5b60048216156129db576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b60088216156129fa576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b6010821615612a19576fffcb9843d60f6159c9db58835c9266440260801c5b6020821615612a38576fff973b41fa98c081472e6896dfb254c00260801c5b6040821615612a57576fff2ea16466c96a3843ec78b326b528610260801c5b6080821615612a76576ffe5dee046a99a2a811c461f1969c30530260801c5b610100821615612a96576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b610200821615612ab6576ff987a7253ac413176f2b074cf7815e540260801c5b610400821615612ad6576ff3392b0822b70005940c7a398e4b70f30260801c5b610800821615612af6576fe7159475a2c29b7443b29c7fa6e889d90260801c5b611000821615612b16576fd097f3bdfd2022b8845ad8f792aa58250260801c5b612000821615612b36576fa9f746462d870fdf8a65dc1f90e061e50260801c5b614000821615612b56576f70d869a156d2a1b890bb3df62baf32f70260801c5b618000821615612b76576f31be135f97d08fd981231505542fcfa60260801c5b62010000821615612b97576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b62020000821615612bb7576e5d6af8dedb81196699c329225ee6040260801c5b62040000821615612bd6576d2216e584f5fa1ea926041bedfe980260801c5b62080000821615612bf3576b048a170391f7dc42444e8fa20260801c5b60008460020b1315612c0e578060001981612c0a57fe5b0490505b640100000000810615612c22576001612c25565b60005b60ff16602082901c0192505050919050565b60008080806001600160a01b03808916908a161015818712801590612cbc576000612c708989620f42400362ffffff16620f4240612fcb565b905082612c8957612c848c8c8c60016144f4565b612c96565b612c968b8d8c600161456d565b9550858110612ca7578a9650612cb6565b612cb38c8b838661460d565b96505b50612d06565b81612cd357612cce8b8b8b600061456d565b612ce0565b612ce08a8c8b60006144f4565b9350838860000310612cf457899550612d06565b612d038b8a8a60000385614659565b95505b6001600160a01b038a8116908716148215612d6957808015612d255750815b612d3b57612d36878d8c600161456d565b612d3d565b855b9550808015612d4a575081155b612d6057612d5b878d8c60006144f4565b612d62565b845b9450612db3565b808015612d735750815b612d8957612d848c888c60016144f4565b612d8b565b855b9550808015612d98575081155b612dae57612da98c888c600061456d565b612db0565b845b94505b81158015612dc357508860000385115b15612dcf578860000394505b818015612dee57508a6001600160a01b0316876001600160a01b031614155b15612dfd578589039350612e1a565b612e17868962ffffff168a620f42400362ffffff16612f34565b93505b50505095509550955095915050565b60008282018381101561082b576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60006001600160ff1b03821115612ecb5760405162461bcd60e51b8152600401808060200182810382526028815260200180615b3d6028913960400191505060405180910390fd5b5090565b6000818303818312801590612ee45750838113155b80612ef95750600083128015612ef957508381135b61082b5760405162461bcd60e51b8152600401808060200182810382526024815260200180615b656024913960400191505060405180910390fd5b6000612f41848484612fcb565b905060008280612f4d57fe5b848609111561082b576000198110612f6457600080fd5b6001019392505050565b600082821115612fc5576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b60008080600019858709868602925082811090839003039050806130015760008411612ff657600080fd5b50829004905061082b565b80841161300d57600080fd5b6000848688096000868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b600291820b820b600090815260209384526040908190208054835103815560018101805495840151959095039094559290910180549190920151039055565b60405163f30dba9360e01b81526000906001600160a01b0384169063f30dba93906130e8908590600401615786565b6101006040518083038186803b15801561310157600080fd5b505afa158015613115573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131399190615415565b50949998505050505050505050565b600060016001607f1b031982600f0b136131745760405162461bcd60e51b81526004016118e090615833565b5060000390565b60008082600f0b12156131e057826001600160801b03168260000384039150816001600160801b0316106131db576040805162461bcd60e51b81526020600482015260026024820152614c5360f01b604482015290519081900360640190fd5b610564565b826001600160801b03168284019150816001600160801b03161015610564576040805162461bcd60e51b81526020600482015260026024820152614c4160f01b604482015290519081900360640190fd5b60006401000276a36001600160a01b0383161080159061326d575073fffd8963efd1fc6a506488495d951d5263988d266001600160a01b038316105b6132a2576040805162461bcd60e51b81526020600482015260016024820152602960f91b604482015290519081900360640190fd5b640100000000600160c01b03602083901b166001600160801b03811160071b81811c67ffffffffffffffff811160061b90811c63ffffffff811160051b90811c61ffff811160041b90811c60ff8111600390811b91821c600f811160021b90811c918211600190811b92831c9790881196179094179092171790911717176080811061333657607f810383901c9150613340565b80607f0383901b91505b908002607f81811c60ff83811c9190911c800280831c81831c1c800280841c81841c1c800280851c81851c1c800280861c81861c1c800280871c81871c1c800280881c81881c1c800280891c81891c1c8002808a1c818a1c1c8002808b1c818b1c1c8002808c1c818c1c1c8002808d1c818d1c1c8002808e1c9c81901c9c909c1c80029c8d901c9e9d607f198f0160401b60c09190911c6001603f1b161760c19b909b1c6001603e1b169a909a1760c29990991c6001603d1b169890981760c39790971c6001603c1b169690961760c49590951c6001603b1b169490941760c59390931c6001603a1b169290921760c69190911c600160391b161760c79190911c600160381b161760c89190911c6680000000000000161760c99190911c6640000000000000161760ca9190911c6620000000000000161760cb9190911c6610000000000000161760cc9190911c6608000000000000161760cd9190911c66040000000000001617693627a301d71055774c8581026f028f6481ab7f045a5af012a19d003aa9198101608090811d906fdb2df09e81959a81455e260799a0632f8301901d600281810b9083900b1461352157886001600160a01b03166135058261290f565b6001600160a01b0316111561351a578161351c565b805b613523565b815b9998505050505050505050565b600080821215612ecb576040805162461bcd60e51b815260206004820181905260248201527f53616665436173743a2076616c7565206d75737420626520706f736974697665604482015290519081900360640190fd5b6000613592306146a5565b15905090565b600054610100900460ff16806135b157506135b1613587565b806135bf575060005460ff16155b6135fa5760405162461bcd60e51b815260040180806020018281038252602e815260200180615aa7602e913960400191505060405180910390fd5b600054610100900460ff16158015613625576000805460ff1961ff0019909116610100171660011790555b61362d6146ab565b801561363f576000805461ff00191690555b50565b600054610100900460ff168061365b575061365b613587565b80613669575060005460ff16155b6136a45760405162461bcd60e51b815260040180806020018281038252602e815260200180615aa7602e913960400191505060405180910390fd5b600054610100900460ff161580156136cf576000805460ff1961ff0019909116610100171660011790555b6136d761479a565b609a80546001600160a01b0319166001600160a01b0384161790558015611717576000805461ff00191690555050565b60008060008061371887878761238e565b91509150600061372988888861109b565b905061374061373782612e83565b6120cb85612e83565b989197509095505050505050565b60405163f30dba9360e01b81526000906001600160a01b0384169063f30dba939061377d908590600401615786565b6101006040518083038186803b15801561379657600080fd5b505afa1580156137aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137ce9190615415565b9a9950505050505050505050565b6137e4614f49565b60006137f38360000151611ea7565b5050505050509050600061382a8261380e866020015161290f565b61381b876040015161290f565b8760600151886080015161482f565b8451602086015160408088015160a08901519151633c8a7d8d60e01b815294955060009485946001600160a01b031693633c8a7d8d9361387293309390918a91600401615666565b6040805180830381600087803b15801561388b57600080fd5b505af115801561389f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138c39190615593565b915091506040518060600160405280838152602001828152602001846001600160801b0316815250945050505050919050565b8160020b8360020b1361392f57600283810b810b6000908152602086815260409182902084518155908401516001820155908301519101555b50505050565b60008061395483600001518460200151856060015186608001516121ab565b600081815260cf602052604090208054919250906001600160801b0316613b1b5783516001600160a01b03908116600090815260ce602090815260408083208289015185168452825291829020609a548351633b38243160e21b815293519194169263ece090c4926004808301939192829003018186803b1580156139d857600080fd5b505afa1580156139ec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a109190615631565b60ff16818054905010613a355760405162461bcd60e51b81526004016118e09061586a565b8054600181018255600082815260208120909101849055606086015183546080880151600290810b62ffffff908116600160981b0262ffffff60981b199490920b16600160801b0262ffffff60801b1990921691909117919091161783556040860151613aa190611ea7565b5050506020808b01516001600160a01b0316600090815260d082526040812089546101208e015180519401519698509096509094613afc9450869350600160801b8204600290810b93600160981b909304900b918891611f3a565b8051600287015560208101516003870155604001516004860155505050505b602080850151604080516101208101825284546001600160801b0381168252600160801b8104600290810b810b810b95830195909552600160981b9004840b840b840b9181019190915260018401546060820152918301546080830152600383015460a0830152600483015460c0830152600583015460e083015260068301546101008301526000918291613baf91613c3b565b60c08801518554929450909250613bdb91613bd6916001600160801b039182169116612e29565b6148f1565b83546001600160801b0319166001600160801b03919091161783556001830181905560e08601516005840154613c1091612e29565b60058401556101008601516006840154613c2991612e29565b60069093019290925592505050919050565b609a5460405163bbe4f6db60e01b815260009182918291613c76916001600160a01b039091169063bbe4f6db9061243d908990600401615652565b505050506001600160a01b038816600090815260d0602090815260408083208a8301518b83015160d19094529190932054949650919450613cbb938593508690614939565b9250613cdf8560600151840386600001516001600160801b0316600160801b612fcb565b935050509250929050565b6000826001600160a01b0316846001600160a01b03161115613d0a579192915b836001600160a01b0316613d43606060ff16846001600160801b0316901b8686036001600160a01b0316866001600160a01b0316612fcb565b81613d4a57fe5b04949350505050565b600082613d6257506000610564565b82600019148015613d765750600160ff1b82145b15613db25760405162461bcd60e51b8152600401808060200182810382526027815260200180615b166027913960400191505060405180910390fd5b82820282848281613dbf57fe5b051461082b5760405162461bcd60e51b8152600401808060200182810382526027815260200180615b166027913960400191505060405180910390fd5b60008060008512613e0d5784613e16565b613e16856149a1565b90506000808512613e275784613e30565b613e30856149a1565b905060008087128015613e435750600086135b80613e595750600087138015613e595750600086125b613e64576000613e67565b60015b90506000613e76848488612fcb565b905081613e8b57613e8681612e83565b613e94565b613e94816149c6565b98975050505050505050565b600081613ef4576040805162461bcd60e51b815260206004820181905260248201527f5369676e6564536166654d6174683a206469766973696f6e206279207a65726f604482015290519081900360640190fd5b81600019148015613f085750600160ff1b83145b15613f445760405162461bcd60e51b8152600401808060200182810382526021815260200180615ad56021913960400191505060405180910390fd5b6000828481613f4f57fe5b05949350505050565b613f60614fc2565b60008083600001516001600160a01b031663a34123a78560400151866060015187608001516040518463ffffffff1660e01b8152600401613fa393929190615794565b6040805180830381600087803b158015613fbc57600080fd5b505af1158015613fd0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ff49190615593565b9150915083600001516001600160a01b0316634f1eb3d88560200151866040015187606001516001600160801b03806040518663ffffffff1660e01b81526004016140439594939291906156ec565b6040805180830381600087803b15801561405c57600080fd5b505af1158015614070573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061409491906154bf565b505060408051808201909152918252602082015292915050565b606080820151600090815260cf602090815260408083208286015182516101208101845282546001600160801b0381168252600160801b8104600290810b810b810b96830196909652600160981b9004850b850b850b93810193909352600182015495830195909552918201546080820152600382015460a0820152600482015460c0820152600582015460e0820152600682015461010082015291928392839291839161415c9190613c3b565b60c088015191965091506001600160801b03161561423b576005820154156141b957600582015460c087015183546141a192916001600160801b039081169116612fcb565b60058301549094506141b39085612f6e565b60058301555b6006820154156141fe57600682015460c087015183546141e692916001600160801b039081169116612fcb565b60068301549093506141f89084612f6e565b60068301555b60c0860151825461421f91613bd6916001600160801b039081169116612f6e565b82546001600160801b0319166001600160801b03919091161782555b81546001600160801b0316614266576142618660000151876020015188606001516149da565b61426e565b600182018190555b50509193909250565b600290810b810b600090815260209290925260408220828155600181018390550155565b6000826001600160a01b0316846001600160a01b031611156142bb579192915b611dd3826001600160801b03168585036001600160a01b0316600160601b612fcb565b60020b600881901d9161010090910790565b60405163299ce14b60e11b81526000906001600160a01b03841690635339c2969061431f908590600401615778565b60206040518083038186803b15801561433757600080fd5b505afa15801561434b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061082b919061557b565b600080821161437d57600080fd5b600160801b821061439057608091821c91015b600160401b82106143a357604091821c91015b64010000000082106143b757602091821c91015b6201000082106143c957601091821c91015b61010082106143da57600891821c91015b601082106143ea57600491821c91015b600482106143fa57600291821c91015b60028210610a5a57600101919050565b600080821161441857600080fd5b5060ff6001600160801b0382161561443357607f190161443b565b608082901c91505b67ffffffffffffffff82161561445457603f190161445c565b604082901c91505b63ffffffff82161561447157601f1901614479565b602082901c91505b61ffff82161561448c57600f1901614494565b601082901c91505b60ff8216156144a657600719016144ae565b600882901c91505b600f8216156144c057600319016144c8565b600482901c91505b60038216156144da57600119016144e2565b600282901c91505b6001821615610a5a5760001901919050565b6000836001600160a01b0316856001600160a01b03161115614514579293925b816145415761453c836001600160801b03168686036001600160a01b0316600160601b612fcb565b614564565b614564836001600160801b03168686036001600160a01b0316600160601b612f34565b95945050505050565b6000836001600160a01b0316856001600160a01b0316111561458d579293925b600160601b600160e01b03606084901b166001600160a01b0386860381169087166145b757600080fd5b836145e757866001600160a01b03166145da8383896001600160a01b0316612fcb565b816145e157fe5b046120ff565b6120ff6145fe8383896001600160a01b0316612f34565b886001600160a01b0316614ae3565b600080856001600160a01b03161161462457600080fd5b6000846001600160801b03161161463a57600080fd5b8161464c5761453c8585856001614aee565b6145648585856001614bcf565b600080856001600160a01b03161161467057600080fd5b6000846001600160801b03161161468657600080fd5b816146985761453c8585856000614bcf565b6145648585856000614aee565b3b151590565b600054610100900460ff16806146c457506146c4613587565b806146d2575060005460ff16155b61470d5760405162461bcd60e51b815260040180806020018281038252602e815260200180615aa7602e913960400191505060405180910390fd5b600054610100900460ff16158015614738576000805460ff1961ff0019909116610100171660011790555b61474061479a565b600061474a611ea3565b603380546001600160a01b0319166001600160a01b03831690811790915560405191925090600090600080516020615af6833981519152908290a350801561363f576000805461ff001916905550565b600054610100900460ff16806147b357506147b3613587565b806147c1575060005460ff16155b6147fc5760405162461bcd60e51b815260040180806020018281038252602e815260200180615aa7602e913960400191505060405180910390fd5b600054610100900460ff16158015614827576000805460ff1961ff0019909116610100171660011790555b61362d614cb2565b6000836001600160a01b0316856001600160a01b0316111561484f579293925b846001600160a01b0316866001600160a01b03161161487a57614873858585614d52565b9050614564565b836001600160a01b0316866001600160a01b031610156148dc5760006148a1878686614d52565b905060006148b0878986614db5565b9050806001600160801b0316826001600160801b0316106148d157806148d3565b815b92505050614564565b6148e7858584614db5565b9695505050505050565b806001600160801b0381168114610a5a5760405162461bcd60e51b8152600401808060200182810382526027815260200180615a5f6027913960400191505060405180910390fd5b600284810b80820b6000908152602088905260408082205487850b850b83529082205491939092849187900b121561497357828503614975565b825b905060008760020b8760020b1261498e57828603614990565b825b919095030398975050505050505050565b6000600160ff1b82136131745760405162461bcd60e51b81526004016118e090615833565b60006149d182612e83565b60000392915050565b6001600160a01b03808416600090815260ce602090815260408083209386168352929052908120805490915b81811015614adb5783838281548110614a1b57fe5b90600052602060002001541415614ad357600182038114614a6957826001830381548110614a4557fe5b9060005260206000200154838281548110614a5c57fe5b6000918252602090912001555b82805480614a7357fe5b60008281526020808220830160001990810183905590920190925585825260cf90526040812080546001600160b01b0319168155600181018290556002810182905560038101829055600481018290556005810182905560060155614adb565b600101614a06565b505050505050565b808204910615150190565b60008115614b615760006001600160a01b03841115614b2457614b1f84600160601b876001600160801b0316612fcb565b614b3c565b6001600160801b038516606085901b81614b3a57fe5b045b9050614b59614b546001600160a01b03881683614df2565b614e02565b915050611dd3565b60006001600160a01b03841115614b8f57614b8a84600160601b876001600160801b0316612f34565b614ba6565b614ba6606085901b6001600160801b038716614ae3565b905080866001600160a01b031611614bbd57600080fd5b6001600160a01b038616039050611dd3565b600082614bdd575083611dd3565b600160601b600160e01b03606085901b168215614c6b576001600160a01b03861684810290858281614c0b57fe5b041415614c3c57818101828110614c3a57614c3083896001600160a01b031683612f34565b9350505050611dd3565b505b614c6282614c5d878a6001600160a01b03168681614c5657fe5b0490614df2565b614ae3565b92505050611dd3565b6001600160a01b03861684810290858281614c8257fe5b04148015614c8f57508082115b614c9857600080fd5b808203614c30614b54846001600160a01b038b1684612f34565b600054610100900460ff1680614ccb5750614ccb613587565b80614cd9575060005460ff16155b614d145760405162461bcd60e51b815260040180806020018281038252602e815260200180615aa7602e913960400191505060405180910390fd5b600054610100900460ff1615801561362d576000805460ff1961ff001990911661010017166001179055801561363f576000805461ff001916905550565b6000826001600160a01b0316846001600160a01b03161115614d72579192915b6000614d95856001600160a01b0316856001600160a01b0316600160601b612fcb565b9050614564614db084838888036001600160a01b0316612fcb565b614e18565b6000826001600160a01b0316846001600160a01b03161115614dd5579192915b611dd3614db083600160601b8787036001600160a01b0316612fcb565b8082018281101561056457600080fd5b806001600160a01b0381168114610a5a57600080fd5b806001600160801b0381168114610a5a57600080fd5b6040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b6040518060600160405280600060020b815260200160008152602001600081525090565b6040805160e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c081019190915290565b60405180610120016040528060006001600160801b03168152602001600060020b8152602001600060020b81526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b604051806080016040528060008152602001600081526020016000815260200160006001600160801b031681525090565b6040518060600160405280600081526020016000815260200160006001600160801b031681525090565b60405180606001604052806000815260200160008152602001600081525090565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915290565b604051806040016040528060008152602001600081525090565b8035610a5a81615a17565b8035610a5a81615a2c565b8051610a5a81615a2c565b60006040828403121561500e578081fd5b6040516040810181811067ffffffffffffffff8211171561502b57fe5b604052823581526020928301359281019290925250919050565b805161ffff81168114610a5a57600080fd5b803562ffffff81168114610a5a57600080fd5b805160ff81168114610a5a57600080fd5b60006020828403121561508c578081fd5b813561082b81615a17565b6000602082840312156150a8578081fd5b815161082b81615a17565b600080604083850312156150c5578081fd5b82356150d081615a17565b915060208301356150e081615a17565b809150509250929050565b6000806000606084860312156150ff578081fd5b833561510a81615a17565b9250602084013561511a81615a17565b9150604084013561512a81615a2c565b809150509250925092565b6000806000806080858703121561514a578182fd5b843561515581615a17565b9350602085013561516581615a17565b9250604085013561517581615a3a565b9150606085013561518581615a3a565b939692955090935050565b6000806000608084860312156151a4578081fd5b83356151af81615a17565b925060208401356151bf81615a17565b91506151ce8560408601614ffd565b90509250925092565b6000806000604084860312156151eb578081fd5b83356151f681615a17565b9250602084013567ffffffffffffffff80821115615212578283fd5b818601915086601f830112615225578283fd5b813581811115615233578384fd5b8760208083028501011115615246578384fd5b6020830194508093505050509250925092565b60006020828403121561526a578081fd5b5035919050565b600080600060608486031215615285578081fd5b505081359360208301359350604090920135919050565b6000602082840312156152ad578081fd5b813561082b81615a3a565b6000602082840312156152c9578081fd5b815161082b81615a3a565b600061010082840312156152e6578081fd5b50919050565b6000604082840312156152fd578081fd5b61082b8383614ffd565b600060a082840312156152e6578081fd5b6000610160828403121561532a578081fd5b610140615336816159f3565b61533f84614fdc565b815261534d60208501614fe7565b602082015261535e60408501614fe7565b60408201526060840135606082015261537960808501614fdc565b608082015261538a60a08501615057565b60a082015261539b60c08501615057565b60c08201526153ad8560e08601614ffd565b60e08201526101206153c0818601614fdc565b6101008301526153d1838601615057565b90820152949350505050565b6000602082840312156153ee578081fd5b813561082b81615a49565b60006020828403121561540a578081fd5b815161082b81615a49565b600080600080600080600080610100898b031215615431578586fd5b885161543c81615a49565b80985050602089015180600f0b8114615453578687fd5b80975050604089015195506060890151945060808901518060060b8114615478578485fd5b60a08a015190945061548981615a17565b60c08a015190935063ffffffff811681146154a2578283fd5b91506154b060e08a01614ff2565b90509295985092959890939650565b600080604083850312156154d1578182fd5b82516154dc81615a49565b60208401519092506150e081615a49565b600080600080600080600060e0888a031215615507578081fd5b875161551281615a17565b602089015190975061552381615a3a565b955061553160408901615045565b945061553f60608901615045565b935061554d60808901615045565b925061555b60a0890161506a565b915060c088015161556b81615a2c565b8091505092959891949750929550565b60006020828403121561558c578081fd5b5051919050565b600080604083850312156155a5578182fd5b505080516020909101519092909150565b600080600080606085870312156155cb578182fd5b8435935060208501359250604085013567ffffffffffffffff808211156155f0578384fd5b818701915087601f830112615603578384fd5b813581811115615611578485fd5b886020828501011115615622578485fd5b95989497505060200194505050565b600060208284031215615642578081fd5b61082b8261506a565b60020b9052565b6001600160a01b0391909116815260200190565b600060018060a01b038716825260208660020b818401528560020b604084015260018060801b038516606084015260a0608084015283518060a0850152825b818110156156c15785810183015185820160c0015282016156a5565b818111156156d2578360c083870101525b50601f01601f19169290920160c001979650505050505050565b6001600160a01b03959095168552600293840b60208601529190920b60408401526001600160801b03918216606084015216608082015260a00190565b6020808252825182820181905260009190848201906040850190845b8181101561576157835183529284019291840191600101615745565b50909695505050505050565b901515815260200190565b60019190910b815260200190565b60029190910b815260200190565b600293840b81529190920b60208201526001600160801b03909116604082015260600190565b90815260200190565b918252602082015260400190565b6020808252600790820152660869088be9e86960cb1b604082015260600190565b60208082526006908201526509e84be9e8ab60d31b604082015260600190565b6020808252600790820152662aa1a12fa321ab60c91b604082015260600190565b6020808252601c908201527f506572704d6174683a20696e76657273696f6e206f766572666c6f7700000000604082015260600190565b6020808252600690820152654f425f4f4e4560d01b604082015260600190565b8151815260208083015190820152604080830151908201526060918201516001600160801b03169181019190915260800190565b81516001600160801b0316815260208083015160020b908201526040808301516101208301916158f09084018261564b565b50606083015160608301526080830151608083015260a083015160a083015260c083015160c083015260e083015160e083015261010080840151818401525092915050565b81516001600160a01b039081168252602092830151169181019190915260400190565b600060a082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015292915050565b815160020b8152602080830151908201526040918201519181019190915260600190565b60008582528460208301526060604083015282606083015282846080840137818301608090810191909152601f909201601f191601019392505050565b60405181810167ffffffffffffffff81118282101715615a0f57fe5b604052919050565b6001600160a01b038116811461363f57600080fd5b801515811461363f57600080fd5b8060020b811461363f57600080fd5b6001600160801b038116811461363f57600080fdfe53616665436173743a2076616c756520646f65736e27742066697420696e2031323820626974735369676e6564536166654d6174683a206164646974696f6e206f766572666c6f77496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a65645369676e6564536166654d6174683a206469766973696f6e206f766572666c6f778be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05369676e6564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7753616665436173743a2076616c756520646f65736e27742066697420696e20616e20696e743235365369676e6564536166654d6174683a207375627472616374696f6e206f766572666c6f77a264697066735822122033b0fa9509dac45b5550d5a0ee00185e401246a2fd08ebd27c460a4aea030b2464736f6c63430007060033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
