{
  "_format": "hh-sol-artifact-1",
  "contractName": "SwapRouter",
  "sourceName": "contracts/SwapRouter.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_factory",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_WNativeToken",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_poolDeployer",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [],
      "name": "WNativeToken",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "int256",
          "name": "amount0Delta",
          "type": "int256"
        },
        {
          "internalType": "int256",
          "name": "amount1Delta",
          "type": "int256"
        },
        {
          "internalType": "bytes",
          "name": "_data",
          "type": "bytes"
        }
      ],
      "name": "algebraSwapCallback",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "bytes",
              "name": "path",
              "type": "bytes"
            },
            {
              "internalType": "address",
              "name": "recipient",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "deadline",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "amountIn",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "amountOutMinimum",
              "type": "uint256"
            }
          ],
          "internalType": "struct ISwapRouter.ExactInputParams",
          "name": "params",
          "type": "tuple"
        }
      ],
      "name": "exactInput",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "amountOut",
          "type": "uint256"
        }
      ],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "tokenIn",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "tokenOut",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "recipient",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "deadline",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "amountIn",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "amountOutMinimum",
              "type": "uint256"
            },
            {
              "internalType": "uint160",
              "name": "limitSqrtPrice",
              "type": "uint160"
            }
          ],
          "internalType": "struct ISwapRouter.ExactInputSingleParams",
          "name": "params",
          "type": "tuple"
        }
      ],
      "name": "exactInputSingle",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "amountOut",
          "type": "uint256"
        }
      ],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "tokenIn",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "tokenOut",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "recipient",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "deadline",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "amountIn",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "amountOutMinimum",
              "type": "uint256"
            },
            {
              "internalType": "uint160",
              "name": "limitSqrtPrice",
              "type": "uint160"
            }
          ],
          "internalType": "struct ISwapRouter.ExactInputSingleParams",
          "name": "params",
          "type": "tuple"
        }
      ],
      "name": "exactInputSingleSupportingFeeOnTransferTokens",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "amountOut",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "bytes",
              "name": "path",
              "type": "bytes"
            },
            {
              "internalType": "address",
              "name": "recipient",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "deadline",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "amountOut",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "amountInMaximum",
              "type": "uint256"
            }
          ],
          "internalType": "struct ISwapRouter.ExactOutputParams",
          "name": "params",
          "type": "tuple"
        }
      ],
      "name": "exactOutput",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "amountIn",
          "type": "uint256"
        }
      ],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "tokenIn",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "tokenOut",
              "type": "address"
            },
            {
              "internalType": "uint24",
              "name": "fee",
              "type": "uint24"
            },
            {
              "internalType": "address",
              "name": "recipient",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "deadline",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "amountOut",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "amountInMaximum",
              "type": "uint256"
            },
            {
              "internalType": "uint160",
              "name": "limitSqrtPrice",
              "type": "uint160"
            }
          ],
          "internalType": "struct ISwapRouter.ExactOutputSingleParams",
          "name": "params",
          "type": "tuple"
        }
      ],
      "name": "exactOutputSingle",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "amountIn",
          "type": "uint256"
        }
      ],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "factory",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes[]",
          "name": "data",
          "type": "bytes[]"
        }
      ],
      "name": "multicall",
      "outputs": [
        {
          "internalType": "bytes[]",
          "name": "results",
          "type": "bytes[]"
        }
      ],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "poolDeployer",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "refundNativeToken",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "deadline",
          "type": "uint256"
        },
        {
          "internalType": "uint8",
          "name": "v",
          "type": "uint8"
        },
        {
          "internalType": "bytes32",
          "name": "r",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "s",
          "type": "bytes32"
        }
      ],
      "name": "selfPermit",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "nonce",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "expiry",
          "type": "uint256"
        },
        {
          "internalType": "uint8",
          "name": "v",
          "type": "uint8"
        },
        {
          "internalType": "bytes32",
          "name": "r",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "s",
          "type": "bytes32"
        }
      ],
      "name": "selfPermitAllowed",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "nonce",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "expiry",
          "type": "uint256"
        },
        {
          "internalType": "uint8",
          "name": "v",
          "type": "uint8"
        },
        {
          "internalType": "bytes32",
          "name": "r",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "s",
          "type": "bytes32"
        }
      ],
      "name": "selfPermitAllowedIfNecessary",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "deadline",
          "type": "uint256"
        },
        {
          "internalType": "uint8",
          "name": "v",
          "type": "uint8"
        },
        {
          "internalType": "bytes32",
          "name": "r",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "s",
          "type": "bytes32"
        }
      ],
      "name": "selfPermitIfNecessary",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amountMinimum",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        }
      ],
      "name": "sweepToken",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amountMinimum",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "feeBips",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "feeRecipient",
          "type": "address"
        }
      ],
      "name": "sweepTokenWithFee",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "amountMinimum",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        }
      ],
      "name": "unwrapWNativeToken",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "amountMinimum",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "feeBips",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "feeRecipient",
          "type": "address"
        }
      ],
      "name": "unwrapWNativeTokenWithFee",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "stateMutability": "payable",
      "type": "receive"
    }
  ],
  "bytecode": "0x60e06040526000196000553480156200001757600080fd5b50604051620032bf380380620032bf8339810160408190526200003a9162000074565b6001600160a01b03928316608052821660a0521660c052620000be565b80516001600160a01b03811681146200006f57600080fd5b919050565b6000806000606084860312156200008a57600080fd5b620000958462000057565b9250620000a56020850162000057565b9150620000b56040850162000057565b90509250925092565b60805160a05160c05161318b6200013460003960008181610165015281816102b60152818161066301528181610784015281816110e00152818161120101528181611855015281816118b5015261197d01526000818161022a015281816104590152611d9601526000610384015261318b6000f3fe6080604052600436106101485760003560e01c8063bc651188116100c0578063db3e219811610074578063e0e189a011610059578063e0e189a0146103df578063f28c0498146103f2578063f3995c671461040557600080fd5b8063db3e2198146103b9578063df2ab5bb146103cc57600080fd5b8063c2e3140a116100a5578063c2e3140a1461035f578063c45a015514610372578063c60696ec146103a657600080fd5b8063bc65118814610339578063c04b8d591461034c57600080fd5b806369bc35b211610117578063a4a78f0c116100fc578063a4a78f0c146102d8578063ac9650d8146102eb578063b87d25241461030b57600080fd5b806369bc35b2146102915780638af3ac85146102a457600080fd5b80632c8958f6146101f85780633119049a1461021857806341865270146102765780634659a4941461027e57600080fd5b366101f3573373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146101f1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f4e6f7420574e6174697665546f6b656e0000000000000000000000000000000060448201526064015b60405180910390fd5b005b600080fd5b34801561020457600080fd5b506101f16102133660046126e8565b610418565b34801561022457600080fd5b5061024c7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6101f1610565565b6101f161028c36600461278a565b610577565b6101f161029f3660046127ec565b610632565b3480156102b057600080fd5b5061024c7f000000000000000000000000000000000000000000000000000000000000000081565b6101f16102e636600461278a565b610804565b6102fe6102f936600461281c565b6108d6565b60405161026d91906128ff565b34801561031757600080fd5b5061032b61032636600461297f565b610a48565b60405190815260200161026d565b61032b61034736600461297f565b610d83565b61032b61035a366004612ad4565b610ec9565b6101f161036d36600461278a565b610feb565b34801561037e57600080fd5b5061024c7f000000000000000000000000000000000000000000000000000000000000000081565b6101f16103b4366004612b78565b611095565b61032b6103c7366004612bc2565b6112b9565b6101f16103da366004612bd5565b611427565b6101f16103ed366004612c17565b61153b565b61032b610400366004612c76565b6116a1565b6101f161041336600461278a565b611798565b60008413806104275750600083135b61043057600080fd5b600061043e82840184612cb1565b90506000806104508360000151611815565b9150915061047f7f00000000000000000000000000000000000000000000000000000000000000008383611836565b50600080600089136104c0578373ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1610886104f1565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610895b9150915081156105105761050b8486602001513384611853565b61055a565b845161051b90611a2d565b1561054057845161052b90611a50565b855261053a8133600088611a72565b5061055a565b8060008190555082935061055a8486602001513384611853565b505050505050505050565b4715610575576105753347611c3e565b565b6040517f8fcbaf0c00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101869052606481018590526001608482015260ff841660a482015260c4810183905260e4810182905273ffffffffffffffffffffffffffffffffffffffff871690638fcbaf0c90610104015b600060405180830381600087803b15801561061257600080fd5b505af1158015610626573d6000803e3d6000fd5b50505050505050505050565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa1580156106bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106e39190612d4b565b90508281101561074f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f496e73756666696369656e7420574e6174697665546f6b656e0000000000000060448201526064016101e8565b80156107ff576040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690632e1a7d4d90602401600060405180830381600087803b1580156107dd57600080fd5b505af11580156107f1573d6000803e3d6000fd5b505050506107ff8282611c3e565b505050565b6040517fdd62ed3e0000000000000000000000000000000000000000000000000000000081523360048201523060248201527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9073ffffffffffffffffffffffffffffffffffffffff88169063dd62ed3e90604401602060405180830381865afa158015610896573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ba9190612d4b565b10156108ce576108ce868686868686610577565b505050505050565b60608167ffffffffffffffff8111156108f1576108f1612991565b60405190808252806020026020018201604052801561092457816020015b606081526020019060019003908161090f5790505b50905060005b82811015610a41576000803086868581811061094857610948612d64565b905060200281019061095a9190612d93565b604051610968929190612dff565b600060405180830381855af49150503d80600081146109a3576040519150601f19603f3d011682016040523d82523d6000602084013e6109a8565b606091505b509150915081610a0e576044815110156109c157600080fd5b600481019050808060200190518101906109db9190612e0f565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101e89190612e86565b80848481518110610a2157610a21612d64565b602002602001018190525050508080610a3990612ec8565b91505061092a565b5092915050565b60008160600135610a5881611d22565b6040805180820190915260009080610a736020870187612f00565b610a836040880160208901612f00565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606093841b811660208301529190921b16603482015260480160405160208183030381529060405281526020013373ffffffffffffffffffffffffffffffffffffffff16815250905060008073ffffffffffffffffffffffffffffffffffffffff16856040016020810190610b1c9190612f00565b73ffffffffffffffffffffffffffffffffffffffff1614610b4c57610b476060860160408701612f00565b610b4e565b305b90506000610b626040870160208801612f00565b73ffffffffffffffffffffffffffffffffffffffff16610b856020880188612f00565b73ffffffffffffffffffffffffffffffffffffffff16109050600080610bc6610bb160208a018a612f00565b610bc160408b0160208c01612f00565b611d8f565b73ffffffffffffffffffffffffffffffffffffffff166371334694338686610bf18d60800135611dcb565b8d60c0016020810190610c049190612f00565b73ffffffffffffffffffffffffffffffffffffffff1615610c37578d60c0016020810190610c329190612f00565b610c6b565b88610c5b57610c32600173fffd8963efd1fc6a506488495d951d5263988d26612f1d565b610c6b6401000276a36001612f4a565b8b604051602001610c7c9190612f77565b6040516020818303038152906040526040518763ffffffff1660e01b8152600401610cac96959493929190612fbf565b60408051808303816000875af1158015610cca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cee919061301a565b9150915082610cfd5781610cff565b805b610d089061303e565b96508760a00135871015610d78576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f546f6f206c6974746c652072656365697665640000000000000000000000000060448201526064016101e8565b505050505050919050565b60008160600135610d9381611d22565b610e536080840135610dab6060860160408701612f00565b610dbb60e0870160c08801612f00565b6040805180820190915280610dd360208a018a612f00565b610de360408b0160208c01612f00565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606093841b811660208301529190921b16603482015260480160405160208183030381529060405281526020013373ffffffffffffffffffffffffffffffffffffffff16815250611ddf565b91508260a00135821015610ec3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f546f6f206c6974746c652072656365697665640000000000000000000000000060448201526064016101e8565b50919050565b60008160400151610ed981611d22565b335b6000610eea8560000151611a2d565b9050610f43856060015182610f03578660200151610f05565b305b60006040518060400160405280610f1f8b60000151611f69565b81526020018773ffffffffffffffffffffffffffffffffffffffff16815250611ddf565b60608601528015610f63578451309250610f5c90611a50565b8552610f70565b8460600151935050610f76565b50610edb565b8360800151831015610fe4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f546f6f206c6974746c652072656365697665640000000000000000000000000060448201526064016101e8565b5050919050565b6040517fdd62ed3e000000000000000000000000000000000000000000000000000000008152336004820152306024820152859073ffffffffffffffffffffffffffffffffffffffff88169063dd62ed3e90604401602060405180830381865afa15801561105d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110819190612d4b565b10156108ce576108ce868686868686611798565b6000821180156110a6575060648211155b6110af57600080fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa15801561113c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111609190612d4b565b9050848110156111cc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f496e73756666696369656e7420574e6174697665546f6b656e0000000000000060448201526064016101e8565b80156112b2576040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690632e1a7d4d90602401600060405180830381600087803b15801561125a57600080fd5b505af115801561126e573d6000803e3d6000fd5b50505050600061271084836112839190613076565b61128d919061308d565b9050801561129f5761129f8382611c3e565b6108ce856112ad83856130c8565b611c3e565b5050505050565b600081608001356112c981611d22565b61138d60a08401356112e16080860160608701612f00565b6112f2610100870160e08801612f00565b60405180604001604052808860200160208101906113109190612f00565b61131d60208b018b612f00565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606093841b811660208301529190921b16603482015260480160405160208183030381529060405281526020013373ffffffffffffffffffffffffffffffffffffffff16815250611a72565b91508260c001358211156113fd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f546f6f206d75636820726571756573746564000000000000000000000000000060448201526064016101e8565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600055919050565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8516906370a0823190602401602060405180830381865afa158015611494573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114b89190612d4b565b905082811015611524576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f496e73756666696369656e7420746f6b656e000000000000000000000000000060448201526064016101e8565b801561153557611535848383611f7b565b50505050565b60008211801561154c575060648211155b61155557600080fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8716906370a0823190602401602060405180830381865afa1580156115c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115e69190612d4b565b905084811015611652576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f496e73756666696369656e7420746f6b656e000000000000000000000000000060448201526064016101e8565b80156108ce5760006127106116678584613076565b611671919061308d565b9050801561168457611684878483611f7b565b611698878661169384866130c8565b611f7b565b50505050505050565b600081604001356116b181611d22565b61172460608401356116c96040860160208701612f00565b60408051808201909152600090806116e18980612d93565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050509082525033602090910152611a72565b50600054915082608001358211156113fd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f546f6f206d75636820726571756573746564000000000000000000000000000060448201526064016101e8565b6040517fd505accf000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018690526064810185905260ff8416608482015260a4810183905260c4810182905273ffffffffffffffffffffffffffffffffffffffff87169063d505accf9060e4016105f8565b60008061182283826120e4565b915061182f8360146120e4565b9050915091565b600061184b846118468585612174565b6121ef565b949350505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480156118ae5750804710155b156119f4577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561191b57600080fd5b505af115801561192f573d6000803e3d6000fd5b50506040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018690527f000000000000000000000000000000000000000000000000000000000000000016935063a9059cbb925060440190506020604051808303816000875af11580156119ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119ee91906130db565b50611535565b3073ffffffffffffffffffffffffffffffffffffffff841603611a2157611a1c848383611f7b565b611535565b6115358484848461221f565b60006014611a3b81806130fd565b611a4591906130fd565b825110159050919050565b6060611a6c6014808451611a6491906130c8565b849190612390565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff8416611a93573093505b600080611aa38460000151611815565b909250905073ffffffffffffffffffffffffffffffffffffffff80831690821610600080611ad18486611d8f565b73ffffffffffffffffffffffffffffffffffffffff1663128acb088a85611af78e611dcb565b611b009061303e565b73ffffffffffffffffffffffffffffffffffffffff8d1615611b22578c611b5b565b87611b4b57611b46600173fffd8963efd1fc6a506488495d951d5263988d26612f1d565b611b5b565b611b5b6401000276a36001612f4a565b8c604051602001611b6c9190612f77565b6040516020818303038152906040526040518663ffffffff1660e01b8152600401611b9b959493929190613110565b60408051808303816000875af1158015611bb9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bdd919061301a565b91509150600083611bf75781611bf28461303e565b611c01565b82611c018361303e565b909750905073ffffffffffffffffffffffffffffffffffffffff8916600003611c30578a8114611c3057600080fd5b505050505050949350505050565b6040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff8416908390604051611c759190613162565b60006040518083038185875af1925050503d8060008114611cb2576040519150601f19603f3d011682016040523d82523d6000602084013e611cb7565b606091505b50509050806107ff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600360248201527f535445000000000000000000000000000000000000000000000000000000000060448201526064016101e8565b80421115611d8c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f5472616e73616374696f6e20746f6f206f6c640000000000000000000000000060448201526064016101e8565b50565b6000611dc47f0000000000000000000000000000000000000000000000000000000000000000611dbf8585612174565b61250a565b9392505050565b806000811215611dda57600080fd5b919050565b600073ffffffffffffffffffffffffffffffffffffffff8416611e00573093505b600080611e108460000151611815565b909250905073ffffffffffffffffffffffffffffffffffffffff80821690831610600080611e3e8585611d8f565b73ffffffffffffffffffffffffffffffffffffffff1663128acb088a85611e648e611dcb565b73ffffffffffffffffffffffffffffffffffffffff8d1615611e86578c611ebf565b87611eaf57611eaa600173fffd8963efd1fc6a506488495d951d5263988d26612f1d565b611ebf565b611ebf6401000276a36001612f4a565b8c604051602001611ed09190612f77565b6040516020818303038152906040526040518663ffffffff1660e01b8152600401611eff959493929190613110565b60408051808303816000875af1158015611f1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f41919061301a565b9150915082611f505781611f52565b805b611f5b9061303e565b9a9950505050505050505050565b6060611a6c6000611a646014806130fd565b6040805173ffffffffffffffffffffffffffffffffffffffff8481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905291516000928392908716916120129190613162565b6000604051808303816000865af19150503d806000811461204f576040519150601f19603f3d011682016040523d82523d6000602084013e612054565b606091505b509150915081801561207e57508051158061207e57508080602001905181019061207e91906130db565b6112b2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600260248201527f535400000000000000000000000000000000000000000000000000000000000060448201526064016101e8565b60006120f18260146130fd565b8351101561215b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f746f416464726573735f6f75744f66426f756e6473000000000000000000000060448201526064016101e8565b5001602001516c01000000000000000000000000900490565b60408051808201909152600080825260208201528173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1611156121c0579091905b506040805180820190915273ffffffffffffffffffffffffffffffffffffffff92831681529116602082015290565b60006121fb838361250a565b90503373ffffffffffffffffffffffffffffffffffffffff821614611a6c57600080fd5b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905291516000928392908816916122be9190613162565b6000604051808303816000865af19150503d80600081146122fb576040519150601f19603f3d011682016040523d82523d6000602084013e612300565b606091505b509150915081801561232a57508051158061232a57508080602001905181019061232a91906130db565b6108ce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600360248201527f535446000000000000000000000000000000000000000000000000000000000060448201526064016101e8565b60608161239e81601f6130fd565b1015612406576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f7700000000000000000000000000000000000060448201526064016101e8565b61241082846130fd565b8451101561247a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e647300000000000000000000000000000060448201526064016101e8565b6060821580156124995760405191506000825260208201604052612501565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156124d25780518352602092830192016124ba565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b6000816020015173ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff16106125a9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f496e76616c6964206f72646572206f6620746f6b656e7300000000000000000060448201526064016101e8565b82826000015183602001516040516020016125e792919073ffffffffffffffffffffffffffffffffffffffff92831681529116602082015260400190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905280516020918201206126ab939290917fa360004fb86ddf4cd7fe9aa67d0c6a7f7812d9069142659003dc503e1d7d241f91017fff00000000000000000000000000000000000000000000000000000000000000815260609390931b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660018401526015830191909152603582015260550190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209392505050565b600080600080606085870312156126fe57600080fd5b8435935060208501359250604085013567ffffffffffffffff8082111561272457600080fd5b818701915087601f83011261273857600080fd5b81358181111561274757600080fd5b88602082850101111561275957600080fd5b95989497505060200194505050565b73ffffffffffffffffffffffffffffffffffffffff81168114611d8c57600080fd5b60008060008060008060c087890312156127a357600080fd5b86356127ae81612768565b95506020870135945060408701359350606087013560ff811681146127d257600080fd5b9598949750929560808101359460a0909101359350915050565b600080604083850312156127ff57600080fd5b82359150602083013561281181612768565b809150509250929050565b6000806020838503121561282f57600080fd5b823567ffffffffffffffff8082111561284757600080fd5b818501915085601f83011261285b57600080fd5b81358181111561286a57600080fd5b8660208260051b850101111561287f57600080fd5b60209290920196919550909350505050565b60005b838110156128ac578181015183820152602001612894565b50506000910152565b600081518084526128cd816020860160208601612891565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b82811015612972577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08886030184526129608583516128b5565b94509285019290850190600101612926565b5092979650505050505050565b600060e08284031215610ec357600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160a0810167ffffffffffffffff811182821017156129e3576129e3612991565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715612a3057612a30612991565b604052919050565b600067ffffffffffffffff821115612a5257612a52612991565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f830112612a8f57600080fd5b8135612aa2612a9d82612a38565b6129e9565b818152846020838601011115612ab757600080fd5b816020850160208301376000918101602001919091529392505050565b600060208284031215612ae657600080fd5b813567ffffffffffffffff80821115612afe57600080fd5b9083019060a08286031215612b1257600080fd5b612b1a6129c0565b823582811115612b2957600080fd5b612b3587828601612a7e565b82525060208301359150612b4882612768565b81602082015260408301356040820152606083013560608201526080830135608082015280935050505092915050565b60008060008060808587031215612b8e57600080fd5b843593506020850135612ba081612768565b9250604085013591506060850135612bb781612768565b939692955090935050565b60006101008284031215610ec357600080fd5b600080600060608486031215612bea57600080fd5b8335612bf581612768565b9250602084013591506040840135612c0c81612768565b809150509250925092565b600080600080600060a08688031215612c2f57600080fd5b8535612c3a81612768565b9450602086013593506040860135612c5181612768565b9250606086013591506080860135612c6881612768565b809150509295509295909350565b600060208284031215612c8857600080fd5b813567ffffffffffffffff811115612c9f57600080fd5b820160a08185031215611dc457600080fd5b600060208284031215612cc357600080fd5b813567ffffffffffffffff80821115612cdb57600080fd5b9083019060408286031215612cef57600080fd5b604051604081018181108382111715612d0a57612d0a612991565b604052823582811115612d1c57600080fd5b612d2887828601612a7e565b82525060208301359250612d3b83612768565b6020810192909252509392505050565b600060208284031215612d5d57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112612dc857600080fd5b83018035915067ffffffffffffffff821115612de357600080fd5b602001915036819003821315612df857600080fd5b9250929050565b8183823760009101908152919050565b600060208284031215612e2157600080fd5b815167ffffffffffffffff811115612e3857600080fd5b8201601f81018413612e4957600080fd5b8051612e57612a9d82612a38565b818152856020838501011115612e6c57600080fd5b612e7d826020830160208601612891565b95945050505050565b602081526000611dc460208301846128b5565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612ef957612ef9612e99565b5060010190565b600060208284031215612f1257600080fd5b8135611dc481612768565b73ffffffffffffffffffffffffffffffffffffffff828116828216039080821115610a4157610a41612e99565b73ffffffffffffffffffffffffffffffffffffffff818116838216019080821115610a4157610a41612e99565b602081526000825160406020840152612f9360608401826128b5565b905073ffffffffffffffffffffffffffffffffffffffff60208501511660408401528091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff80891683528088166020840152861515604084015285606084015280851660808401525060c060a083015261300e60c08301846128b5565b98975050505050505050565b6000806040838503121561302d57600080fd5b505080516020909101519092909150565b60007f8000000000000000000000000000000000000000000000000000000000000000820361306f5761306f612e99565b5060000390565b8082028115828204841417611a6c57611a6c612e99565b6000826130c3577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b81810381811115611a6c57611a6c612e99565b6000602082840312156130ed57600080fd5b81518015158114611dc457600080fd5b80820180821115611a6c57611a6c612e99565b600073ffffffffffffffffffffffffffffffffffffffff8088168352861515602084015285604084015280851660608401525060a0608083015261315760a08301846128b5565b979650505050505050565b60008251613174818460208701612891565b919091019291505056fea164736f6c6343000811000a",
  "deployedBytecode": "0x6080604052600436106101485760003560e01c8063bc651188116100c0578063db3e219811610074578063e0e189a011610059578063e0e189a0146103df578063f28c0498146103f2578063f3995c671461040557600080fd5b8063db3e2198146103b9578063df2ab5bb146103cc57600080fd5b8063c2e3140a116100a5578063c2e3140a1461035f578063c45a015514610372578063c60696ec146103a657600080fd5b8063bc65118814610339578063c04b8d591461034c57600080fd5b806369bc35b211610117578063a4a78f0c116100fc578063a4a78f0c146102d8578063ac9650d8146102eb578063b87d25241461030b57600080fd5b806369bc35b2146102915780638af3ac85146102a457600080fd5b80632c8958f6146101f85780633119049a1461021857806341865270146102765780634659a4941461027e57600080fd5b366101f3573373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146101f1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f4e6f7420574e6174697665546f6b656e0000000000000000000000000000000060448201526064015b60405180910390fd5b005b600080fd5b34801561020457600080fd5b506101f16102133660046126e8565b610418565b34801561022457600080fd5b5061024c7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6101f1610565565b6101f161028c36600461278a565b610577565b6101f161029f3660046127ec565b610632565b3480156102b057600080fd5b5061024c7f000000000000000000000000000000000000000000000000000000000000000081565b6101f16102e636600461278a565b610804565b6102fe6102f936600461281c565b6108d6565b60405161026d91906128ff565b34801561031757600080fd5b5061032b61032636600461297f565b610a48565b60405190815260200161026d565b61032b61034736600461297f565b610d83565b61032b61035a366004612ad4565b610ec9565b6101f161036d36600461278a565b610feb565b34801561037e57600080fd5b5061024c7f000000000000000000000000000000000000000000000000000000000000000081565b6101f16103b4366004612b78565b611095565b61032b6103c7366004612bc2565b6112b9565b6101f16103da366004612bd5565b611427565b6101f16103ed366004612c17565b61153b565b61032b610400366004612c76565b6116a1565b6101f161041336600461278a565b611798565b60008413806104275750600083135b61043057600080fd5b600061043e82840184612cb1565b90506000806104508360000151611815565b9150915061047f7f00000000000000000000000000000000000000000000000000000000000000008383611836565b50600080600089136104c0578373ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1610886104f1565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610895b9150915081156105105761050b8486602001513384611853565b61055a565b845161051b90611a2d565b1561054057845161052b90611a50565b855261053a8133600088611a72565b5061055a565b8060008190555082935061055a8486602001513384611853565b505050505050505050565b4715610575576105753347611c3e565b565b6040517f8fcbaf0c00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101869052606481018590526001608482015260ff841660a482015260c4810183905260e4810182905273ffffffffffffffffffffffffffffffffffffffff871690638fcbaf0c90610104015b600060405180830381600087803b15801561061257600080fd5b505af1158015610626573d6000803e3d6000fd5b50505050505050505050565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa1580156106bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106e39190612d4b565b90508281101561074f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f496e73756666696369656e7420574e6174697665546f6b656e0000000000000060448201526064016101e8565b80156107ff576040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690632e1a7d4d90602401600060405180830381600087803b1580156107dd57600080fd5b505af11580156107f1573d6000803e3d6000fd5b505050506107ff8282611c3e565b505050565b6040517fdd62ed3e0000000000000000000000000000000000000000000000000000000081523360048201523060248201527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9073ffffffffffffffffffffffffffffffffffffffff88169063dd62ed3e90604401602060405180830381865afa158015610896573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ba9190612d4b565b10156108ce576108ce868686868686610577565b505050505050565b60608167ffffffffffffffff8111156108f1576108f1612991565b60405190808252806020026020018201604052801561092457816020015b606081526020019060019003908161090f5790505b50905060005b82811015610a41576000803086868581811061094857610948612d64565b905060200281019061095a9190612d93565b604051610968929190612dff565b600060405180830381855af49150503d80600081146109a3576040519150601f19603f3d011682016040523d82523d6000602084013e6109a8565b606091505b509150915081610a0e576044815110156109c157600080fd5b600481019050808060200190518101906109db9190612e0f565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101e89190612e86565b80848481518110610a2157610a21612d64565b602002602001018190525050508080610a3990612ec8565b91505061092a565b5092915050565b60008160600135610a5881611d22565b6040805180820190915260009080610a736020870187612f00565b610a836040880160208901612f00565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606093841b811660208301529190921b16603482015260480160405160208183030381529060405281526020013373ffffffffffffffffffffffffffffffffffffffff16815250905060008073ffffffffffffffffffffffffffffffffffffffff16856040016020810190610b1c9190612f00565b73ffffffffffffffffffffffffffffffffffffffff1614610b4c57610b476060860160408701612f00565b610b4e565b305b90506000610b626040870160208801612f00565b73ffffffffffffffffffffffffffffffffffffffff16610b856020880188612f00565b73ffffffffffffffffffffffffffffffffffffffff16109050600080610bc6610bb160208a018a612f00565b610bc160408b0160208c01612f00565b611d8f565b73ffffffffffffffffffffffffffffffffffffffff166371334694338686610bf18d60800135611dcb565b8d60c0016020810190610c049190612f00565b73ffffffffffffffffffffffffffffffffffffffff1615610c37578d60c0016020810190610c329190612f00565b610c6b565b88610c5b57610c32600173fffd8963efd1fc6a506488495d951d5263988d26612f1d565b610c6b6401000276a36001612f4a565b8b604051602001610c7c9190612f77565b6040516020818303038152906040526040518763ffffffff1660e01b8152600401610cac96959493929190612fbf565b60408051808303816000875af1158015610cca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cee919061301a565b9150915082610cfd5781610cff565b805b610d089061303e565b96508760a00135871015610d78576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f546f6f206c6974746c652072656365697665640000000000000000000000000060448201526064016101e8565b505050505050919050565b60008160600135610d9381611d22565b610e536080840135610dab6060860160408701612f00565b610dbb60e0870160c08801612f00565b6040805180820190915280610dd360208a018a612f00565b610de360408b0160208c01612f00565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606093841b811660208301529190921b16603482015260480160405160208183030381529060405281526020013373ffffffffffffffffffffffffffffffffffffffff16815250611ddf565b91508260a00135821015610ec3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f546f6f206c6974746c652072656365697665640000000000000000000000000060448201526064016101e8565b50919050565b60008160400151610ed981611d22565b335b6000610eea8560000151611a2d565b9050610f43856060015182610f03578660200151610f05565b305b60006040518060400160405280610f1f8b60000151611f69565b81526020018773ffffffffffffffffffffffffffffffffffffffff16815250611ddf565b60608601528015610f63578451309250610f5c90611a50565b8552610f70565b8460600151935050610f76565b50610edb565b8360800151831015610fe4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f546f6f206c6974746c652072656365697665640000000000000000000000000060448201526064016101e8565b5050919050565b6040517fdd62ed3e000000000000000000000000000000000000000000000000000000008152336004820152306024820152859073ffffffffffffffffffffffffffffffffffffffff88169063dd62ed3e90604401602060405180830381865afa15801561105d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110819190612d4b565b10156108ce576108ce868686868686611798565b6000821180156110a6575060648211155b6110af57600080fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa15801561113c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111609190612d4b565b9050848110156111cc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f496e73756666696369656e7420574e6174697665546f6b656e0000000000000060448201526064016101e8565b80156112b2576040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690632e1a7d4d90602401600060405180830381600087803b15801561125a57600080fd5b505af115801561126e573d6000803e3d6000fd5b50505050600061271084836112839190613076565b61128d919061308d565b9050801561129f5761129f8382611c3e565b6108ce856112ad83856130c8565b611c3e565b5050505050565b600081608001356112c981611d22565b61138d60a08401356112e16080860160608701612f00565b6112f2610100870160e08801612f00565b60405180604001604052808860200160208101906113109190612f00565b61131d60208b018b612f00565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606093841b811660208301529190921b16603482015260480160405160208183030381529060405281526020013373ffffffffffffffffffffffffffffffffffffffff16815250611a72565b91508260c001358211156113fd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f546f6f206d75636820726571756573746564000000000000000000000000000060448201526064016101e8565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600055919050565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8516906370a0823190602401602060405180830381865afa158015611494573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114b89190612d4b565b905082811015611524576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f496e73756666696369656e7420746f6b656e000000000000000000000000000060448201526064016101e8565b801561153557611535848383611f7b565b50505050565b60008211801561154c575060648211155b61155557600080fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8716906370a0823190602401602060405180830381865afa1580156115c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115e69190612d4b565b905084811015611652576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f496e73756666696369656e7420746f6b656e000000000000000000000000000060448201526064016101e8565b80156108ce5760006127106116678584613076565b611671919061308d565b9050801561168457611684878483611f7b565b611698878661169384866130c8565b611f7b565b50505050505050565b600081604001356116b181611d22565b61172460608401356116c96040860160208701612f00565b60408051808201909152600090806116e18980612d93565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050509082525033602090910152611a72565b50600054915082608001358211156113fd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f546f6f206d75636820726571756573746564000000000000000000000000000060448201526064016101e8565b6040517fd505accf000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018690526064810185905260ff8416608482015260a4810183905260c4810182905273ffffffffffffffffffffffffffffffffffffffff87169063d505accf9060e4016105f8565b60008061182283826120e4565b915061182f8360146120e4565b9050915091565b600061184b846118468585612174565b6121ef565b949350505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480156118ae5750804710155b156119f4577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561191b57600080fd5b505af115801561192f573d6000803e3d6000fd5b50506040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018690527f000000000000000000000000000000000000000000000000000000000000000016935063a9059cbb925060440190506020604051808303816000875af11580156119ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119ee91906130db565b50611535565b3073ffffffffffffffffffffffffffffffffffffffff841603611a2157611a1c848383611f7b565b611535565b6115358484848461221f565b60006014611a3b81806130fd565b611a4591906130fd565b825110159050919050565b6060611a6c6014808451611a6491906130c8565b849190612390565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff8416611a93573093505b600080611aa38460000151611815565b909250905073ffffffffffffffffffffffffffffffffffffffff80831690821610600080611ad18486611d8f565b73ffffffffffffffffffffffffffffffffffffffff1663128acb088a85611af78e611dcb565b611b009061303e565b73ffffffffffffffffffffffffffffffffffffffff8d1615611b22578c611b5b565b87611b4b57611b46600173fffd8963efd1fc6a506488495d951d5263988d26612f1d565b611b5b565b611b5b6401000276a36001612f4a565b8c604051602001611b6c9190612f77565b6040516020818303038152906040526040518663ffffffff1660e01b8152600401611b9b959493929190613110565b60408051808303816000875af1158015611bb9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bdd919061301a565b91509150600083611bf75781611bf28461303e565b611c01565b82611c018361303e565b909750905073ffffffffffffffffffffffffffffffffffffffff8916600003611c30578a8114611c3057600080fd5b505050505050949350505050565b6040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff8416908390604051611c759190613162565b60006040518083038185875af1925050503d8060008114611cb2576040519150601f19603f3d011682016040523d82523d6000602084013e611cb7565b606091505b50509050806107ff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600360248201527f535445000000000000000000000000000000000000000000000000000000000060448201526064016101e8565b80421115611d8c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f5472616e73616374696f6e20746f6f206f6c640000000000000000000000000060448201526064016101e8565b50565b6000611dc47f0000000000000000000000000000000000000000000000000000000000000000611dbf8585612174565b61250a565b9392505050565b806000811215611dda57600080fd5b919050565b600073ffffffffffffffffffffffffffffffffffffffff8416611e00573093505b600080611e108460000151611815565b909250905073ffffffffffffffffffffffffffffffffffffffff80821690831610600080611e3e8585611d8f565b73ffffffffffffffffffffffffffffffffffffffff1663128acb088a85611e648e611dcb565b73ffffffffffffffffffffffffffffffffffffffff8d1615611e86578c611ebf565b87611eaf57611eaa600173fffd8963efd1fc6a506488495d951d5263988d26612f1d565b611ebf565b611ebf6401000276a36001612f4a565b8c604051602001611ed09190612f77565b6040516020818303038152906040526040518663ffffffff1660e01b8152600401611eff959493929190613110565b60408051808303816000875af1158015611f1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f41919061301a565b9150915082611f505781611f52565b805b611f5b9061303e565b9a9950505050505050505050565b6060611a6c6000611a646014806130fd565b6040805173ffffffffffffffffffffffffffffffffffffffff8481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905291516000928392908716916120129190613162565b6000604051808303816000865af19150503d806000811461204f576040519150601f19603f3d011682016040523d82523d6000602084013e612054565b606091505b509150915081801561207e57508051158061207e57508080602001905181019061207e91906130db565b6112b2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600260248201527f535400000000000000000000000000000000000000000000000000000000000060448201526064016101e8565b60006120f18260146130fd565b8351101561215b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f746f416464726573735f6f75744f66426f756e6473000000000000000000000060448201526064016101e8565b5001602001516c01000000000000000000000000900490565b60408051808201909152600080825260208201528173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1611156121c0579091905b506040805180820190915273ffffffffffffffffffffffffffffffffffffffff92831681529116602082015290565b60006121fb838361250a565b90503373ffffffffffffffffffffffffffffffffffffffff821614611a6c57600080fd5b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905291516000928392908816916122be9190613162565b6000604051808303816000865af19150503d80600081146122fb576040519150601f19603f3d011682016040523d82523d6000602084013e612300565b606091505b509150915081801561232a57508051158061232a57508080602001905181019061232a91906130db565b6108ce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600360248201527f535446000000000000000000000000000000000000000000000000000000000060448201526064016101e8565b60608161239e81601f6130fd565b1015612406576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f7700000000000000000000000000000000000060448201526064016101e8565b61241082846130fd565b8451101561247a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e647300000000000000000000000000000060448201526064016101e8565b6060821580156124995760405191506000825260208201604052612501565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156124d25780518352602092830192016124ba565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b6000816020015173ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff16106125a9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f496e76616c6964206f72646572206f6620746f6b656e7300000000000000000060448201526064016101e8565b82826000015183602001516040516020016125e792919073ffffffffffffffffffffffffffffffffffffffff92831681529116602082015260400190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905280516020918201206126ab939290917fa360004fb86ddf4cd7fe9aa67d0c6a7f7812d9069142659003dc503e1d7d241f91017fff00000000000000000000000000000000000000000000000000000000000000815260609390931b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660018401526015830191909152603582015260550190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209392505050565b600080600080606085870312156126fe57600080fd5b8435935060208501359250604085013567ffffffffffffffff8082111561272457600080fd5b818701915087601f83011261273857600080fd5b81358181111561274757600080fd5b88602082850101111561275957600080fd5b95989497505060200194505050565b73ffffffffffffffffffffffffffffffffffffffff81168114611d8c57600080fd5b60008060008060008060c087890312156127a357600080fd5b86356127ae81612768565b95506020870135945060408701359350606087013560ff811681146127d257600080fd5b9598949750929560808101359460a0909101359350915050565b600080604083850312156127ff57600080fd5b82359150602083013561281181612768565b809150509250929050565b6000806020838503121561282f57600080fd5b823567ffffffffffffffff8082111561284757600080fd5b818501915085601f83011261285b57600080fd5b81358181111561286a57600080fd5b8660208260051b850101111561287f57600080fd5b60209290920196919550909350505050565b60005b838110156128ac578181015183820152602001612894565b50506000910152565b600081518084526128cd816020860160208601612891565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b82811015612972577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08886030184526129608583516128b5565b94509285019290850190600101612926565b5092979650505050505050565b600060e08284031215610ec357600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160a0810167ffffffffffffffff811182821017156129e3576129e3612991565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715612a3057612a30612991565b604052919050565b600067ffffffffffffffff821115612a5257612a52612991565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f830112612a8f57600080fd5b8135612aa2612a9d82612a38565b6129e9565b818152846020838601011115612ab757600080fd5b816020850160208301376000918101602001919091529392505050565b600060208284031215612ae657600080fd5b813567ffffffffffffffff80821115612afe57600080fd5b9083019060a08286031215612b1257600080fd5b612b1a6129c0565b823582811115612b2957600080fd5b612b3587828601612a7e565b82525060208301359150612b4882612768565b81602082015260408301356040820152606083013560608201526080830135608082015280935050505092915050565b60008060008060808587031215612b8e57600080fd5b843593506020850135612ba081612768565b9250604085013591506060850135612bb781612768565b939692955090935050565b60006101008284031215610ec357600080fd5b600080600060608486031215612bea57600080fd5b8335612bf581612768565b9250602084013591506040840135612c0c81612768565b809150509250925092565b600080600080600060a08688031215612c2f57600080fd5b8535612c3a81612768565b9450602086013593506040860135612c5181612768565b9250606086013591506080860135612c6881612768565b809150509295509295909350565b600060208284031215612c8857600080fd5b813567ffffffffffffffff811115612c9f57600080fd5b820160a08185031215611dc457600080fd5b600060208284031215612cc357600080fd5b813567ffffffffffffffff80821115612cdb57600080fd5b9083019060408286031215612cef57600080fd5b604051604081018181108382111715612d0a57612d0a612991565b604052823582811115612d1c57600080fd5b612d2887828601612a7e565b82525060208301359250612d3b83612768565b6020810192909252509392505050565b600060208284031215612d5d57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112612dc857600080fd5b83018035915067ffffffffffffffff821115612de357600080fd5b602001915036819003821315612df857600080fd5b9250929050565b8183823760009101908152919050565b600060208284031215612e2157600080fd5b815167ffffffffffffffff811115612e3857600080fd5b8201601f81018413612e4957600080fd5b8051612e57612a9d82612a38565b818152856020838501011115612e6c57600080fd5b612e7d826020830160208601612891565b95945050505050565b602081526000611dc460208301846128b5565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612ef957612ef9612e99565b5060010190565b600060208284031215612f1257600080fd5b8135611dc481612768565b73ffffffffffffffffffffffffffffffffffffffff828116828216039080821115610a4157610a41612e99565b73ffffffffffffffffffffffffffffffffffffffff818116838216019080821115610a4157610a41612e99565b602081526000825160406020840152612f9360608401826128b5565b905073ffffffffffffffffffffffffffffffffffffffff60208501511660408401528091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff80891683528088166020840152861515604084015285606084015280851660808401525060c060a083015261300e60c08301846128b5565b98975050505050505050565b6000806040838503121561302d57600080fd5b505080516020909101519092909150565b60007f8000000000000000000000000000000000000000000000000000000000000000820361306f5761306f612e99565b5060000390565b8082028115828204841417611a6c57611a6c612e99565b6000826130c3577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b81810381811115611a6c57611a6c612e99565b6000602082840312156130ed57600080fd5b81518015158114611dc457600080fd5b80820180821115611a6c57611a6c612e99565b600073ffffffffffffffffffffffffffffffffffffffff8088168352861515602084015285604084015280851660608401525060a0608083015261315760a08301846128b5565b979650505050505050565b60008251613174818460208701612891565b919091019291505056fea164736f6c6343000811000a",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
