blocklock-js
Version:
A library for encrypting and decrypting data for the future
713 lines (711 loc) • 212 kB
text/typescript
/* Autogenerated file. Do not edit manually. */
/* tslint:disable */
/* eslint-disable */
import {
Contract,
ContractFactory,
ContractTransactionResponse,
Interface,
} from "ethers";
import type { Signer, ContractDeployTransaction, ContractRunner } from "ethers";
import type { NonPayableOverrides } from "../../common";
import type {
DirectFundingTest,
DirectFundingTestInterface,
} from "../../DirectFunding.t.sol/DirectFundingTest";
const _abi = [
{
type: "function",
name: "ADMIN_ROLE",
inputs: [],
outputs: [
{
name: "",
type: "bytes32",
internalType: "bytes32",
},
],
stateMutability: "view",
},
{
type: "function",
name: "IS_TEST",
inputs: [],
outputs: [
{
name: "",
type: "bool",
internalType: "bool",
},
],
stateMutability: "view",
},
{
type: "function",
name: "excludeArtifacts",
inputs: [],
outputs: [
{
name: "excludedArtifacts_",
type: "string[]",
internalType: "string[]",
},
],
stateMutability: "view",
},
{
type: "function",
name: "excludeContracts",
inputs: [],
outputs: [
{
name: "excludedContracts_",
type: "address[]",
internalType: "address[]",
},
],
stateMutability: "view",
},
{
type: "function",
name: "excludeSelectors",
inputs: [],
outputs: [
{
name: "excludedSelectors_",
type: "tuple[]",
internalType: "struct StdInvariant.FuzzSelector[]",
components: [
{
name: "addr",
type: "address",
internalType: "address",
},
{
name: "selectors",
type: "bytes4[]",
internalType: "bytes4[]",
},
],
},
],
stateMutability: "view",
},
{
type: "function",
name: "excludeSenders",
inputs: [],
outputs: [
{
name: "excludedSenders_",
type: "address[]",
internalType: "address[]",
},
],
stateMutability: "view",
},
{
type: "function",
name: "failed",
inputs: [],
outputs: [
{
name: "",
type: "bool",
internalType: "bool",
},
],
stateMutability: "view",
},
{
type: "function",
name: "setUp",
inputs: [],
outputs: [],
stateMutability: "nonpayable",
},
{
type: "function",
name: "targetArtifactSelectors",
inputs: [],
outputs: [
{
name: "targetedArtifactSelectors_",
type: "tuple[]",
internalType: "struct StdInvariant.FuzzArtifactSelector[]",
components: [
{
name: "artifact",
type: "string",
internalType: "string",
},
{
name: "selectors",
type: "bytes4[]",
internalType: "bytes4[]",
},
],
},
],
stateMutability: "view",
},
{
type: "function",
name: "targetArtifacts",
inputs: [],
outputs: [
{
name: "targetedArtifacts_",
type: "string[]",
internalType: "string[]",
},
],
stateMutability: "view",
},
{
type: "function",
name: "targetContracts",
inputs: [],
outputs: [
{
name: "targetedContracts_",
type: "address[]",
internalType: "address[]",
},
],
stateMutability: "view",
},
{
type: "function",
name: "targetInterfaces",
inputs: [],
outputs: [
{
name: "targetedInterfaces_",
type: "tuple[]",
internalType: "struct StdInvariant.FuzzInterface[]",
components: [
{
name: "addr",
type: "address",
internalType: "address",
},
{
name: "artifacts",
type: "string[]",
internalType: "string[]",
},
],
},
],
stateMutability: "view",
},
{
type: "function",
name: "targetSelectors",
inputs: [],
outputs: [
{
name: "targetedSelectors_",
type: "tuple[]",
internalType: "struct StdInvariant.FuzzSelector[]",
components: [
{
name: "addr",
type: "address",
internalType: "address",
},
{
name: "selectors",
type: "bytes4[]",
internalType: "bytes4[]",
},
],
},
],
stateMutability: "view",
},
{
type: "function",
name: "targetSenders",
inputs: [],
outputs: [
{
name: "targetedSenders_",
type: "address[]",
internalType: "address[]",
},
],
stateMutability: "view",
},
{
type: "function",
name: "test_CallbackShouldNotRevert_IfInterfaceIsNotImplemented",
inputs: [],
outputs: [],
stateMutability: "nonpayable",
},
{
type: "function",
name: "test_CallsToBlocklockSender_ShouldRevert_IfBlocklockSenderAddressIsIncorrect",
inputs: [],
outputs: [],
stateMutability: "nonpayable",
},
{
type: "function",
name: "test_Deployment_Configurations",
inputs: [],
outputs: [],
stateMutability: "view",
},
{
type: "function",
name: "test_EstimatedRequestPrice_Increases_WithCallbackGasLimit",
inputs: [],
outputs: [],
stateMutability: "view",
},
{
type: "function",
name: "test_EstimatedRequestPrice_Increases_WithGasPrice",
inputs: [],
outputs: [],
stateMutability: "view",
},
{
type: "function",
name: "test_FulfillDecryptionRequest_WithDirectFunding_Successfully",
inputs: [],
outputs: [],
stateMutability: "nonpayable",
},
{
type: "function",
name: "test_FulfillDecryptionRequest_WithInvalidRequestId_ShouldRevert",
inputs: [],
outputs: [],
stateMutability: "nonpayable",
},
{
type: "function",
name: "test_FulfillDecryptionRequest_WithInvalidSignature_ShouldRevert",
inputs: [],
outputs: [],
stateMutability: "nonpayable",
},
{
type: "function",
name: "test_FulfillDecryptionRequest_WithLowCallbackGasLimit",
inputs: [],
outputs: [],
stateMutability: "nonpayable",
},
{
type: "function",
name: "test_FulfillDecryptionRequest_WithRevertingReceiver",
inputs: [],
outputs: [],
stateMutability: "nonpayable",
},
{
type: "function",
name: "test_FulfillDecryptionRequest_WithUnauthorisedCaller_ShouldRevert",
inputs: [],
outputs: [],
stateMutability: "nonpayable",
},
{
type: "function",
name: "test_FulfillDecryptionRequest_WithZeroCallbackGasLimit",
inputs: [],
outputs: [],
stateMutability: "nonpayable",
},
{
type: "function",
name: "test_Update_SignatureScheme",
inputs: [],
outputs: [],
stateMutability: "nonpayable",
},
{
type: "event",
name: "BlocklockCallbackFailed",
inputs: [
{
name: "requestId",
type: "uint256",
indexed: true,
internalType: "uint256",
},
],
anonymous: false,
},
{
type: "event",
name: "log",
inputs: [
{
name: "",
type: "string",
indexed: false,
internalType: "string",
},
],
anonymous: false,
},
{
type: "event",
name: "log_address",
inputs: [
{
name: "",
type: "address",
indexed: false,
internalType: "address",
},
],
anonymous: false,
},
{
type: "event",
name: "log_array",
inputs: [
{
name: "val",
type: "uint256[]",
indexed: false,
internalType: "uint256[]",
},
],
anonymous: false,
},
{
type: "event",
name: "log_array",
inputs: [
{
name: "val",
type: "int256[]",
indexed: false,
internalType: "int256[]",
},
],
anonymous: false,
},
{
type: "event",
name: "log_array",
inputs: [
{
name: "val",
type: "address[]",
indexed: false,
internalType: "address[]",
},
],
anonymous: false,
},
{
type: "event",
name: "log_bytes",
inputs: [
{
name: "",
type: "bytes",
indexed: false,
internalType: "bytes",
},
],
anonymous: false,
},
{
type: "event",
name: "log_bytes32",
inputs: [
{
name: "",
type: "bytes32",
indexed: false,
internalType: "bytes32",
},
],
anonymous: false,
},
{
type: "event",
name: "log_int",
inputs: [
{
name: "",
type: "int256",
indexed: false,
internalType: "int256",
},
],
anonymous: false,
},
{
type: "event",
name: "log_named_address",
inputs: [
{
name: "key",
type: "string",
indexed: false,
internalType: "string",
},
{
name: "val",
type: "address",
indexed: false,
internalType: "address",
},
],
anonymous: false,
},
{
type: "event",
name: "log_named_array",
inputs: [
{
name: "key",
type: "string",
indexed: false,
internalType: "string",
},
{
name: "val",
type: "uint256[]",
indexed: false,
internalType: "uint256[]",
},
],
anonymous: false,
},
{
type: "event",
name: "log_named_array",
inputs: [
{
name: "key",
type: "string",
indexed: false,
internalType: "string",
},
{
name: "val",
type: "int256[]",
indexed: false,
internalType: "int256[]",
},
],
anonymous: false,
},
{
type: "event",
name: "log_named_array",
inputs: [
{
name: "key",
type: "string",
indexed: false,
internalType: "string",
},
{
name: "val",
type: "address[]",
indexed: false,
internalType: "address[]",
},
],
anonymous: false,
},
{
type: "event",
name: "log_named_bytes",
inputs: [
{
name: "key",
type: "string",
indexed: false,
internalType: "string",
},
{
name: "val",
type: "bytes",
indexed: false,
internalType: "bytes",
},
],
anonymous: false,
},
{
type: "event",
name: "log_named_bytes32",
inputs: [
{
name: "key",
type: "string",
indexed: false,
internalType: "string",
},
{
name: "val",
type: "bytes32",
indexed: false,
internalType: "bytes32",
},
],
anonymous: false,
},
{
type: "event",
name: "log_named_decimal_int",
inputs: [
{
name: "key",
type: "string",
indexed: false,
internalType: "string",
},
{
name: "val",
type: "int256",
indexed: false,
internalType: "int256",
},
{
name: "decimals",
type: "uint256",
indexed: false,
internalType: "uint256",
},
],
anonymous: false,
},
{
type: "event",
name: "log_named_decimal_uint",
inputs: [
{
name: "key",
type: "string",
indexed: false,
internalType: "string",
},
{
name: "val",
type: "uint256",
indexed: false,
internalType: "uint256",
},
{
name: "decimals",
type: "uint256",
indexed: false,
internalType: "uint256",
},
],
anonymous: false,
},
{
type: "event",
name: "log_named_int",
inputs: [
{
name: "key",
type: "string",
indexed: false,
internalType: "string",
},
{
name: "val",
type: "int256",
indexed: false,
internalType: "int256",
},
],
anonymous: false,
},
{
type: "event",
name: "log_named_string",
inputs: [
{
name: "key",
type: "string",
indexed: false,
internalType: "string",
},
{
name: "val",
type: "string",
indexed: false,
internalType: "string",
},
],
anonymous: false,
},
{
type: "event",
name: "log_named_uint",
inputs: [
{
name: "key",
type: "string",
indexed: false,
internalType: "string",
},
{
name: "val",
type: "uint256",
indexed: false,
internalType: "uint256",
},
],
anonymous: false,
},
{
type: "event",
name: "log_string",
inputs: [
{
name: "",
type: "string",
indexed: false,
internalType: "string",
},
],
anonymous: false,
},
{
type: "event",
name: "log_uint",
inputs: [
{
name: "",
type: "uint256",
indexed: false,
internalType: "uint256",
},
],
anonymous: false,
},
{
type: "event",
name: "logs",
inputs: [
{
name: "",
type: "bytes",
indexed: false,
internalType: "bytes",
},
],
anonymous: false,
},
] as const;
const _bytecode =
"0x600c8054600160ff199182168117909255601f8054909116909117905560c0604052601360809081527f424e3235342d424c532d424c4f434b4c4f434b0000000000000000000000000060a0526023906100599082610234565b50604080516080810182527f2691d39ecc380bfa873911a0b848c77556ee948fb8ab649137d3d3e78153f6ca8183019081527f2863e20a5125b098108a5061b31f405e16a069e9ebff60022f57f4c4fd0237bf6060830152815281518083019092527f193513dbe180d700b189c529754f650b7b7882122c8a1e242a938d23ea9f765c82527f11c939ea560caf31f552c9c4879b15865d38ba1dfb0f7a7d2ac46a4f0cae25ba6020838101919091528101919091528051602490610120908290600261014a565b506020820151610136906002808401919061014a565b505050348015610144575f5ffd5b506102ee565b8260028101928215610178579160200282015b8281111561017857825182559160200191906001019061015d565b50610184929150610188565b5090565b5b80821115610184575f8155600101610189565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806101c457607f821691505b6020821081036101e257634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111561022f57805f5260205f20601f840160051c8101602085101561020d5750805b601f840160051c820191505b8181101561022c575f8155600101610219565b50505b505050565b81516001600160401b0381111561024d5761024d61019c565b6102618161025b84546101b0565b846101e8565b6020601f821160018114610293575f831561027c5750848201515b5f19600385901b1c1916600184901b17845561022c565b5f84815260208120601f198516915b828110156102c257878501518255602094850194600190920191016102a2565b50848210156102df57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b62017d9680620002fd5f395ff3fe608060405234801561000f575f5ffd5b50600436106101a1575f3560e01c80637b805258116100f3578063d8c0b89d11610093578063edf06c381161006e578063edf06c38146102e6578063efe1d371146102ee578063fa7626d4146102f6578063fcf6760e14610303575f5ffd5b8063d8c0b89d146102ce578063da6f5446146102d6578063e20c9f71146102de575f5ffd5b8063b0464fdc116100ce578063b0464fdc1461029e578063b5508aa9146102a6578063ba414fa6146102ae578063d6f207b3146102c6575f5ffd5b80637b8052581461026c57806385226c8114610274578063916a17c614610289575f5ffd5b80633e5e3c231161015e578063658e172611610139578063658e17261461021257806366d9a9a01461021a57806375b238fc1461022f5780637b40749114610264575f5ffd5b80633e5e3c23146101fa5780633f7286f41461020257806353aee9401461020a575f5ffd5b80630a9254e4146101a55780631ed7831c146101af5780632ade3880146101cd5780632bb206fb146101e25780633cb41e7e146101ea5780633d705725146101f2575b5f5ffd5b6101ad61030b565b005b6101b76103aa565b6040516101c49190616fd9565b60405180910390f35b6101d561040a565b6040516101c49190617052565b6101ad610546565b6101ad611413565b6101ad612121565b6101b7612dbd565b6101b7612e1b565b6101ad612e79565b6101ad612f9d565b610222613342565b6040516101c4919061715f565b6102567fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177581565b6040519081526020016101c4565b6101ad6134a6565b6101ad613cc5565b61027c613dd4565b6040516101c491906171dd565b610291613e9f565b6040516101c49190617234565b610291613f80565b61027c614061565b6102b661412c565b60405190151581526020016101c4565b6101ad6141c6565b6101ad6146c8565b6101ad615049565b6101b7615211565b6101ad61526f565b6101ad615904565b601f546102b69060ff1681565b6101ad615d2e565b610313615f1b565b61031b615f23565b602c80546001600160a01b03199081166001600160a01b0393841617909155602b8054821693831693909317909255602a8054831693821693909317909255602980548216938316939093179092556028805490921692169190911790556207a12062061a80620f4240622dc6c0620c3500600a6113886103a187878787878787616631565b50505050505050565b6060601680548060200260200160405190810160405280929190818152602001828054801561040057602002820191905f5260205f20905b81546001600160a01b031681526001909101906020018083116103e2575b5050505050905090565b6060601e805480602002602001604051908101604052809291908181526020015f905b8282101561053d575f84815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b82821015610526578382905f5260205f2001805461049b906172ab565b80601f01602080910402602001604051908101604052809291908181526020018280546104c7906172ab565b80156105125780601f106104e957610100808354040283529160200191610512565b820191905f5260205f20905b8154815290600101906020018083116104f557829003601f168201915b50505050508152602001906001019061047e565b50505050815250508152602001906001019061042d565b50505050905090565b602c5f9054906101000a90046001600160a01b03166001600160a01b03166397a9c2856040518163ffffffff1660e01b8152600401602060405180830381865afa158015610596573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105ba91906172e3565b156105c7576105c76172fa565b602c5f9054906101000a90046001600160a01b03166001600160a01b0316626d6cae6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610616573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061063a91906172e3565b15610647576106476172fa565b602b5460408051632bd4038560e11b815290516106ef926001600160a01b0316916357a8070a9160048083019260209291908290030181865afa158015610690573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106b49190617322565b6040518060400160405280601e81526020017f426c6f636b6c6f636b53656e646572206e6f7420636f6e666967757265640000815250616726565b602b546040805163a608a1e160e01b81529051610797926001600160a01b03169163a608a1e19160048083019260209291908290030181865afa158015610738573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061075c9190617322565b6040518060400160405280601981526020017f426c6f636b6c6f636b53656e6465722069732070617573656400000000000000815250616781565b602b54604051634b16093560e01b81526207a12060048201819052915f916001600160a01b0390911690634b16093590602401602060405180830381865afa1580156107e5573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061080991906172e3565b905061083a5f82116040518060400160405280601581526020015f516020620178985f395f51905f52815250616726565b61087360405180604001604052806017815260200176457374696d61746564207265717565737420707269636560481b815250826167b4565b60205460405163ca669fa760e01b81526001600160a01b0390911660048201525f5160206201763c5f395f51905f529063ca669fa7906024015f604051808303815f87803b1580156108c3575f5ffd5b505af11580156108d5573d5f5f3e3d5ffd5b5050602c546729a2241af62c00005f9081526022602052604051632cb047ed60e11b81528694509092506001600160a01b03909116906359608fda9085906109419086905f516020620178b85f395f51905f52905f516020620176ff5f395f51905f52906004016173e3565b604080518083038185885af115801561095c573d5f5f3e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190610981919061745a565b50602a5460405163c58343ef60e01b8152600481018390529192505f916001600160a01b039091169063c58343ef906024015f60405180830381865afa1580156109cd573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526109f491908101906175cd565b602b5460405163c58343ef60e01b8152600481018590529192505f916001600160a01b039091169063c58343ef906024015f60405180830381865afa158015610a3f573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610a669190810190617801565b9050610a9d8463ffffffff16826040015163ffffffff16146040518060800160405280604881526020016201776260489139616726565b610ac5815f01515f14604051806060016040528060288152602001620179a060289139616726565b610afd5f8260200151118015610ade5750858260200151145b6040518060600160405280602f8152602001620175d8602f9139616726565b610b268382606001511460405180606001604052806040815260200162017cdc60409139616726565b6040516348f50c0f60e01b8152620186a060048201525f5160206201763c5f395f51905f52906348f50c0f906024015f604051808303815f87803b158015610b6c575f5ffd5b505af1158015610b7e573d5f5f3e3d5ffd5b505050505f5a601f5460405163ca669fa760e01b81526101009091046001600160a01b031660048201529091505f5160206201763c5f395f51905f529063ca669fa7906024015f604051808303815f87803b158015610bdb575f5ffd5b505af1158015610bed573d5f5f3e3d5ffd5b5050602a546729a2241af62c00005f526022602052604051621ef9df60eb1b81526001600160a01b03909116925063f7cef8009150610c509087905f51602062017b0d5f395f51905f52905f5160206201765c5f395f51905f529060040161792c565b5f604051808303815f87803b158015610c67575f5ffd5b505af1158015610c79573d5f5f3e3d5ffd5b505050505f5a90505f610c8c8284617974565b9050610cc56040518060400160405280601981526020015f5160206201791b5f395f51905f52815250856040015163ffffffff166167b4565b610cf66040518060400160405280601981526020015f51602062017aed5f395f51905f5281525085602001516167b4565b610d246040518060400160405280600c81526020016b2a3c1023b0b9903ab9b2b21d60a11b815250826167b4565b610d59604051806040016040528060138152602001722a3c1023b0b990383934b1b290143bb2b4949d60691b8152503a6167b4565b6040805180820190915260148152732a3c102a37ba30b61031b7b9ba10143bb2b4949d60611b6020820152610d9790610d923a8461798d565b6167b4565b602a5460405163b094728960e01b815260048101889052610e25916001600160a01b03169063b0947289906024015b602060405180830381865afa158015610de1573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e059190617322565b156040518060800160405280604381526020016201771f60439139616726565b602a5460405163c58343ef60e01b8152600481018890526001600160a01b039091169063c58343ef906024015f60405180830381865afa158015610e6b573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610e9291908101906175cd565b9450610ebb8560c00151604051806080016040528060438152602001620178d860439139616726565b604080518082018252601a81527f706c61696e746578742061667465722064656372797074696f6e000000000000602080830191909152602c5483516397a9c28560e01b81529351610f5b946001600160a01b03909216926397a9c28592600480820193918290030181865afa158015610f37573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d9291906172e3565b6729a2241af62c00005f52602260209081525f51602062017d1c5f395f51905f5254602c54604080516397a9c28560e01b81529051611008946001600160a01b03909316926397a9c28592600480820193918290030181865afa158015610fc4573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fe891906172e3565b146040518060600160405280602a8152602001620176d5602a9139616726565b602c54604080516236b65760e11b81529051611095926001600160a01b031691626d6cae9160048083019260209291908290030181865afa15801561104f573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061107391906172e3565b6001146040518060600160405280602c815260200162017c75602c9139616726565b602b5460405163c58343ef60e01b8152600481018890526001600160a01b039091169063c58343ef906024015f60405180830381865afa1580156110db573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526111029190810190617801565b935061114160405180604001604052806017815260200176111a5c9958dd08199d5b991a5b99c8199959481c185a59604a1b81525085602001516167b4565b61117760405180606001604052806025815260200162017d3c602591396111683a8461798d565b8660200151610d929190617974565b602b54604080516318e3dd2760e01b8152905161120e926001600160a01b0316916318e3dd279160048083019260209291908290030181865afa1580156111c0573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111e491906179a4565b6001600160601b03165f146040518060600160405280603681526020016201767c60369139616726565b602080850151602b5460408051633bc32c7560e01b815290516112a8946001600160a01b0390931692633bc32c7592600480820193918290030181865afa15801561125b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061127f91906179a4565b6001600160601b0316146040518060600160405280604081526020016201796060409139616726565b602b5460408051634cae59b760e11b815290516112f1926001600160a01b03169163995cb36e9160048083019260209291908290030181865afa1580156111c0573d5f5f3e3d5ffd5b601f5460405163ca669fa760e01b81526101009091046001600160a01b031660048201525f5160206201763c5f395f51905f529063ca669fa7906024015f604051808303815f87803b158015611345575f5ffd5b505af1158015611357573d5f5f3e3d5ffd5b5050601f54602b546040516354236fb360e01b81526101009092046001600160a01b03908116600484018190523194501691506354236fb3906024015f604051808303815f87803b1580156113aa575f5ffd5b505af11580156113bc573d5f5f3e3d5ffd5b5050506020860151601f54611407925083916113e7916001600160a01b0361010090910416316179ca565b116040518060600160405280603581526020016201760760359139616726565b50505050505050505050565b60205460405163ca669fa760e01b81526001600160a01b0390911660048201525f5160206201763c5f395f51905f529063ca669fa7906024015f604051808303815f87803b158015611463575f5ffd5b505af1158015611475573d5f5f3e3d5ffd5b5050602b546040515f93506001600160a01b03909116915061149690616f25565b6001600160a01b039091168152602001604051809103905ff0801580156114bf573d5f5f3e3d5ffd5b509050806001600160a01b03166397a9c2856040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114fe573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061152291906172e3565b1561152f5761152f6172fa565b806001600160a01b0316626d6cae6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561156a573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061158e91906172e3565b1561159b5761159b6172fa565b602b5460408051632bd4038560e11b815290516115e4926001600160a01b0316916357a8070a9160048083019260209291908290030181865afa158015610690573d5f5f3e3d5ffd5b602b546040805163a608a1e160e01b8152905161162d926001600160a01b03169163a608a1e19160048083019260209291908290030181865afa158015610738573d5f5f3e3d5ffd5b602b54604051634b16093560e01b8152620186a060048201819052915f916001600160a01b0390911690634b16093590602401602060405180830381865afa15801561167b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061169f91906172e3565b90506116d05f82116040518060400160405280601581526020015f516020620178985f395f51905f52815250616726565b61170960405180604001604052806017815260200176457374696d61746564207265717565737420707269636560481b815250826167b4565b60205460405163ca669fa760e01b81526001600160a01b0390911660048201525f5160206201763c5f395f51905f529063ca669fa7906024015f604051808303815f87803b158015611759575f5ffd5b505af115801561176b573d5f5f3e3d5ffd5b50506729a2241af62c00005f9081526022602052604051632cb047ed60e11b81528593509091506001600160a01b038616906359608fda9085906117d39086905f516020620178b85f395f51905f52905f516020620176ff5f395f51905f52906004016173e3565b604080518083038185885af11580156117ee573d5f5f3e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190611813919061745a565b50602a5460405163c58343ef60e01b8152600481018390529192505f916001600160a01b039091169063c58343ef906024015f60405180830381865afa15801561185f573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261188691908101906175cd565b602b5460405163c58343ef60e01b8152600481018590529192505f916001600160a01b039091169063c58343ef906024015f60405180830381865afa1580156118d1573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526118f89190810190617801565b905061192f8463ffffffff16826040015163ffffffff16146040518060800160405280604881526020016201776260489139616726565b611957815f01515f14604051806060016040528060288152602001620179a060289139616726565b61198e5f8260200151118015610ade5750858260200151146040518060600160405280602f8152602001620175d8602f9139616726565b6119b78382606001511460405180606001604052806040815260200162017cdc60409139616726565b6040516348f50c0f60e01b8152620186a060048201525f5160206201763c5f395f51905f52906348f50c0f906024015f604051808303815f87803b1580156119fd575f5ffd5b505af1158015611a0f573d5f5f3e3d5ffd5b505050505f5a601f5460405163ca669fa760e01b81526101009091046001600160a01b031660048201529091505f5160206201763c5f395f51905f529063ca669fa7906024015f604051808303815f87803b158015611a6c575f5ffd5b505af1158015611a7e573d5f5f3e3d5ffd5b505060405163248e63e160e11b8152600160048201819052602482018190525f604483015260648201525f5160206201763c5f395f51905f52925063491cc7c291506084015f604051808303815f87803b158015611ada575f5ffd5b505af1158015611aec573d5f5f3e3d5ffd5b50506040518692507f15083536507666802cbd84fcc1e37ed89879bad2345aaa38d48d91a5071d0f5d91505f90a2602a546729a2241af62c00005f526022602052604051621ef9df60eb1b81526001600160a01b039091169063f7cef80090611b799087905f51602062017b0d5f395f51905f52905f5160206201765c5f395f51905f529060040161792c565b5f604051808303815f87803b158015611b90575f5ffd5b505af1158015611ba2573d5f5f3e3d5ffd5b505050505f5a90505f611bb58284617974565b9050611bee6040518060400160405280601981526020015f5160206201791b5f395f51905f52815250856040015163ffffffff166167b4565b611c1f6040518060400160405280601981526020015f51602062017aed5f395f51905f5281525085602001516167b4565b611c4d6040518060400160405280600c81526020016b2a3c1023b0b9903ab9b2b21d60a11b815250826167b4565b611c82604051806040016040528060138152602001722a3c1023b0b990383934b1b290143bb2b4949d60691b8152503a6167b4565b6040805180820190915260148152732a3c102a37ba30b61031b7b9ba10143bb2b4949d60611b6020820152611cbb90610d923a8461798d565b602a5460405163b094728960e01b815260048101889052611cee916001600160a01b03169063b094728990602401610dc6565b602a5460405163c58343ef60e01b8152600481018890526001600160a01b039091169063c58343ef906024015f60405180830381865afa158015611d34573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611d5b91908101906175cd565b9450611d848560c00151604051806080016040528060438152602001620178d860439139616726565b6729a2241af62c00005f52602260209081525f51602062017d1c5f395f51905f5254604080516397a9c28560e01b81529051611e2e936001600160a01b038f16926397a9c28592600480830193928290030181865afa158015611de9573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e0d91906172e3565b1415604051806080016040528060418152602001620177aa60419139616726565b611e6c8a6001600160a01b0316626d6cae6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561104f573d5f5f3e3d5ffd5b602b5460405163c58343ef60e01b8152600481018890526001600160a01b039091169063c58343ef906024015f60405180830381865afa158015611eb2573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611ed99190810190617801565b9350611f1860405180604001604052806017815260200176111a5c9958dd08199d5b991a5b99c8199959481c185a59604a1b81525085602001516167b4565b611f3f60405180606001604052806025815260200162017d3c602591396111683a8461798d565b602b54604080516318e3dd2760e01b81529051611f88926001600160a01b0316916318e3dd279160048083019260209291908290030181865afa1580156111c0573d5f5f3e3d5ffd5b602080850151602b5460408051633bc32c7560e01b81529051611fd5946001600160a01b0390931692633bc32c7592600480820193918290030181865afa15801561125b573d5f5f3e3d5ffd5b602b5460408051634cae59b760e11b8152905161201e926001600160a01b03169163995cb36e9160048083019260209291908290030181865afa1580156111c0573d5f5f3e3d5ffd5b601f5460405163ca669fa760e01b81526101009091046001600160a01b031660048201525f5160206201763c5f395f51905f529063ca669fa7906024015f604051808303815f87803b158015612072575f5ffd5b505af1158015612084573d5f5f3e3d5ffd5b5050601f54602b546040516354236fb360e01b81526101009092046001600160a01b03908116600484018190523194501691506354236fb3906024015f604051808303815f87803b1580156120d7575f5ffd5b505af11580156120e9573d5f5f3e3d5ffd5b5050506020860151601f54612114925083916113e7916001600160a01b0361010090910416316179ca565b5050505050505050505050565b602c5f9054906101000a90046001600160a01b03166001600160a01b03166397a9c2856040518163ffffffff1660e01b8152600401602060405180830381865afa158015612171573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061219591906172e3565b156121a2576121a26172fa565b602c5f9054906101000a90046001600160a01b03166001600160a01b0316626d6cae6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156121f1573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061221591906172e3565b15612222576122226172fa565b602b54604051634b16093560e01b8152620186a060048201819052915f916001600160a01b0390911690634b16093590602401602060405180830381865afa158015612270573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061229491906172e3565b90506122c55f82116040518060400160405280601581526020015f516020620178985f395f51905f52815250616726565b60205460405163ca669fa760e01b81526001600160a01b0390911660048201525f5160206201763c5f395f51905f529063ca669fa7906024015f604051808303815f87803b158015612315575f5ffd5b505af1158015612327573d5f5f3e3d5ffd5b5050602c546729a2241af62c00005f9081526022602052604051632cb047ed60e11b81528694509092506001600160a01b03909116906359608fda9085906123939086905f516020620178b85f395f51905f52905f516020620176ff5f395f51905f52906004016173e3565b604080518083038185885af11580156123ae573d5f5f3e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906123d3919061745a565b506040516348f50c0f60e01b8152620186a060048201529091505f5160206201763c5f395f51905f52906348f50c0f906024015f604051808303815f87803b15801561241d575f5ffd5b505af115801561242f573d5f5f3e3d5ffd5b505050505f5a601f5460405163ca669fa760e01b81526101009091046001600160a01b031660048201529091505f5160206201763c5f395f51905f529063ca669fa7906024015f604051808303815f87803b15801561248c575f5ffd5b505af115801561249e573d5f5f3e3d5ffd5b505050505f60405180606001604052806040815260200162017aad6040913960405163f28dceb360e01b815260206004820152601d60248201527f5369676e617475726520766572696669636174696f6e206661696c656400000060448201529091505f5160206201763c5f395f51905f529063f28dceb3906064015f604051808303815f87803b158015612531575f5ffd5b505af1158015612543573d5f5f3e3d5ffd5b5050602a546729a2241af62c00005f526022602052604051621ef9df60eb1b81526001600160a01b03909116925063f7cef80091506125989086905f51602062017b0d5f395f51905f529086906004016179dd565b5f604051808303815f87803b1580156125af575f5ffd5b505af11580156125c1573d5f5f3e3d5ffd5b50505050602c5f9054906101000a90046001600160a01b03166001600160a01b03166397a9c2856040518163ffffffff1660e01b8152600401602060405180830381865afa158015612615573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061263991906172e3565b15612646576126466172fa565b602c5f9054906101000a90046001600160a01b03166001600160a01b0316626d6cae6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612695573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126b991906172e3565b6001146126c8576126c86172fa565b602a5460405163c58343ef60e01b8152600481018590525f916001600160a01b03169063c58343ef906024015f60405180830381865afa15801561270e573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261273591908101906175cd565b602b5460405163c58343ef60e01b8152600481018790529192505f916001600160a01b039091169063c58343ef906024015f60405180830381865afa158015612780573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526127a79190810190617801565b90505f5a90505f6127b88287617974565b90506127f16040518060400160405280601981526020015f5160206201791b5f395f51905f52815250846040015163ffffffff166167b4565b6128226040518060400160405280601981526020015f51602062017aed5f395f51905f5281525084602001516167b4565b6128506040518060400160405280600c81526020016b2a3c1023b0b9903ab9b2b21d60a11b815250826167b4565b612885604051806040016040528060138152602001722a3c1023b0b990383934b1b290143bb2b4949d60691b8152503a6167b4565b6040805180820190915260148152732a3c102a37ba30b61031b7b9ba10143bb2b4949d60611b60208201526128be90610d923a8461798d565b602a5460405163b094728960e01b81526004810189905261294b916001600160a01b03169063b094728990602401602060405180830381865afa158015612907573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061292b9190617322565b156040518060800160405280604881526020016201785060489139616726565b6129738460c00151156040518060600160405280602d815260200162017a80602d9139616726565b6729a2241af62c00005f52602260209081525f51602062017d1c5f395f51905f5254602c54604080516397a9c28560e01b81529051612a21946001600160a01b03909316926397a9c28592600480820193918290030181865afa1580156129dc573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612a0091906172e3565b14156040518060600160405280602a8152602001620176d5602a9139616726565b602c54604080516236b65760e11b81529051612a68926001600160a01b031691626d6cae9160048083019260209291908290030181865afa15801561104f573d5f5f3e3d5ffd5b612a7583602001516167f9565b602b54604080516318e3dd2760e01b81529051612abe926001600160a01b0316916318e3dd279160048083019260209291908290030181865afa1580156111c0573d5f5f3e3d5ffd5b602080840151602b5460408051633bc32c7560e01b81529051612bdf946001600160a01b0390931692633bc32c7592600480820193918290030181865afa158015612b0b573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612b2f91906179a4565b6001600160601b031614158015612bc05750602b5f9054906101000a90046001600160a01b03166001600160a01b0316633bc32c756040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b91573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612bb591906179a4565b6001600160601b0316155b60405180608001604052806044815260200162017c3160449139616726565b602b5460408051634cae59b760e11b81529051612c28926001600160a01b03169163995cb36e9160048083019260209291908290030181865afa1580156111c0573d5f5f3e3d5ffd5b601f5460405163ca669fa760e01b81526101009091046001600160a01b031660048201525f5160206201763c5f395f51905f529063ca669fa7906024015f604051808303815f87803b158015612c7c575f5ffd5b505af1158015612c8e573d5f5f3e3d5ffd5b50506040805160048082526024820183526020820180516001600160e01b0316631e9acf1760e31b179052915163f28dceb360e01b81525f5160206201763c5f395f51905f52945063f28dceb39350612ce79201617a07565b5f604051808303815f87803b158015612cfe575f5ffd5b505af1158015612d10573d5f5f3e3d5ffd5b5050601f54602b546040516354236fb360e01b81526101009092046001600160a01b03908116600484018190523194501691506354236fb3906024015f604051808303815f87803b158015612d63575f5ffd5b505af1158015612d75573d5f5f3e3d5ffd5b5050505061211481601f60019054906101000a90046001600160a01b03166001600160a01b0316311460405180606001604052806038815260200162017bb260389139616726565b6060601880548060200260200160405190810160405280929190818152602001828054801561040057602002820191905f5260205f209081546001600160a01b031681526001909101906020018083116103e2575050505050905090565b6060601780548060200260200160405190810160405280929190818152602001828054801561040057602002820191905f5260205f209081546001600160a01b031681526001909101906020018083116103e2575050505050905090565b602b5460405163192ae22b60e11b8152620186a060048201819052606460248301819052909290915f916001600160a01b031690633255c45690604401602060405180830381865afa158015612ed1573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ef591906172e3565b602b5460405163192ae22b60e11b815263ffffffff8616600482015260c8602482018190529450919250612f98916001600160a01b0390911690633255c45690604401602060405180830381865afa158015612f53573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f7791906172e3565b821060405180608001604052806047815260200162017bea60479139616726565b505050565b602a54601f54604051632474521560e21b81527fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177560048201526101009091046001600160a01b03908116602483015261303f9216906391d1485490604401602060405180830381865afa158015613016573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061303a9190617322565b616841565b6028546001600160a01b0316613057576130576172fa565b6029546001600160a01b031661306f5761306f6172fa565b602a546001600160a01b0316613087576130876172fa565b602b546001600160a01b031661309f5761309f6172fa565b602c546001600160a01b03166130b7576130b76172fa565b602a546040805163e6b3ca7160e01b815290515f926001600160a01b03169163e6b3ca719160048083019260209291908290030181865afa1580156130fe573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906131229190617a19565b6001600160a01b031603613138576131386172fa565b60295460408051632fbe3a9160e11b815290516131ac926001600160a01b031691635f7c7522916004808301925f9291908290030181865afa158015613180573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526131a79190810190617a34565b616897565b60295460408051632fbe3a9160e11b81529051613220926001600160a01b031691635f7c7522916004808301925f9291908290030181865afa1580156131f4573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261321b9190810190617a34565b6168da565b602b546040805163235296f760e01b81529051613268926001600160a01b03169163235296f7916004808301925f9291908290030181865afa1580156131f4573d5f5f3e3d5ffd5b602b5460408051631c613e8960e11b815290516132b0926001600160a01b0316916338c27d12916004808301925f9291908290030181865afa1580156131f4573d5f5f3e3d5ffd5b602b54604080516339a87a2b60e11b815290516132f8926001600160a01b031691637350f456916004808301925f9291908290030181865afa1580156131f4573d5f5f3e3d5ffd5b602b54604080516367b276af60e01b81529051613340926001600160a01b0316916367b276af916004808301925f9291908290030181865afa1580156131f4573d5f5f3e3d5ffd5b565b6060601b805480602002602001604051908101604052809291908181526020015f905b8282101561053d578382905f5260205f2090600202016040518060400160405290815f82018054613395906172ab565b80601f01602080910402602001604051908101604052809291908181526020018280546133c1906172ab565b801561340c5780601f106133e35761010080835404028352916020019161340c565b820191905f5260205f20905b8154815290600101906020018083116133ef57829003601f168201915b505050505081526020016001820180548060200260200160405190810160405280929190818152602001828054801561348e57602002820191905f5260205f20905f905b82829054906101000a900460e01b6001600160e01b031916815260200190600401906020826003010492830192600103820291508084116134505790505b50505050508152505081526020019060010190613365565b602b5460408051632bd4038560e11b815290516134ef926001600160a01b0316916357a8070a9160048083019260209291908290030181865afa158015610690573d5f5f3e3d5ffd5b602b546040805163a608a1e160e01b81529051613538926001600160a01b03169163a608a1e19160048083019260209291908290030181865afa158015610738573d5f5f3e3d5ffd5b602b54604051634b16093560e01b81526207a12060048201819052915f916001600160a01b0390911690634b16093590602401602060405180830381865afa158015613586573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906135aa91906172e3565b60205460405163ca669fa760e01b81526001600160a01b0390911660048201529091505f5160206201763c5f395f51905f529063ca669fa7906024015f604051808303815f87803b1580156135fd575f5ffd5b505af115801561360f573d5f5f3e3d5ffd5b5050602b546729a2241af62c00005f9081526022602052604051637909dc7b60e01b81528694509092506001600160a01b0390911690637909dc7b90859061367b9086905f516020620178b85f395f51905f52905f516020620176ff5f395f51905f52906004016173e3565b60206040518083038185885af1158015613697573d5f5f3e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906136bc91906172e3565b602a5460405163c58343ef60e01b8152600481018390529192505f916001600160a01b039091169063c58343ef906024015f60405180830381865afa158015613707573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261372e91908101906175cd565b602b5460405163c58343ef60e01b8152600481018590529192505f916001600160a01b039091169063c58343ef906024015f60405180830381865afa158015613779573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526137a09190810190617801565b90506137d78463ffffffff16826040015163ffffffff16146040518060800160405280604881526020016201776260489139616726565b6137ff815f01515f14604051806060016040528060288152602001620179a060289139616726565b6138365f8260200151118015610ade5750858260200151146040518060600160405280602f8152602001620175d8602f9139616726565b61385f8382606001511460405180606001604052806040815260200162017cdc60409139616726565b6040516348f50c0f60e01b8152620186a060048201525f5160206201763c5f395f51905f52906348f50c0f906024015f604051808303815f87803b1580156138a5575f5ffd5b505af11580156138b7573d5f5f3e3d5ffd5b505050505f5a601f5460405163ca669fa760e01b81526101009091046001600160a01b031660048201529091505f5160206201763c5f395f51905f529063ca669fa7906024015f604051808303815f87803b158015613914575f5ffd5b505af1158015613926573d5f5f3e3d5ffd5b5050602a546729a2241af62c00005f526022602052604051621ef9df60eb1b81526001600160a01b03909116925063f7cef80091506139899087905f51602062017b0d5f395f51905f52905f5160206201765c5f395f51905f529060040161792c565b5f604051808303815f87803b1580156139a0575f5ffd5b505af11580156139b2573d5f5f3e3d5ffd5b505050505f5a90505f6139c58284617974565b90506139fe6040518060400160405280601981526020015f5160206201791b5f395f51905f52815250856040015163ffffffff166167b4565b613a2f6040518060400160405280601981526020015f51602062017aed5f395f51905f5281525085602001516167b4565b613a5d6040518060400160405280600c81526020016b2a3c1023b0b9903ab9b2b21d60a11b815250826167b4565b613a92604051806040016040528060138152602001722a3c1023b0b990383934b1b290143bb2b4949d60691b8152503a6167b4565b6040805180820190915260148152732a3c102a37ba30b61031b7b9ba10143bb2b4949d60611b6020820152613acb90610d923a8461798d565b602a5460405163b094728960e01b815260048101889052613b58916001600160a01b03169063b094728990602401602060405180830381865afa158015613b14573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613b389190617322565b156040518060a001604052806071815260200162017a0f60719139616726565b602a5460405163c58343ef60e01b8152600481018890526001600160a01b039091169063c58343ef906024015f60405180830381865afa158015613b9e573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052613bc591908101906175cd565b9450613bee8560c00151604051806060016040528060258152602001620177eb60259139616726565b602b5460405163c58343ef60e01b8152600481018890526001600160a01b039091169063c58343ef906024015f60405180830381865afa158015613c34573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052613c5b9190810190617801565b9350613c8860028560e0015151116040518060800160405280604581526020016201759360459139616726565b61114160405180604001604052806017815260200176111a5c9958dd08199d5b991a5b99c8199959481c185a59604a1b81525085602001516167b4565b602b54604051634b16093560e01b8152620186a060048201819052915f916001600160a01b0390911690634b16093590602401602060405180830381865afa158015613d13573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613d3791906172e3565b602b54604051634b16093560e01b815262030d40600482018190529450919250613dd0916001600160a01b0390911690634b16093590602401602060405180830381865afa158015613d8b573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613daf91906172e3565b8210604051806080016040528060478152602001620179c860479139616726565b5050565b6060601a805480602002602001604051908101604052809291908181526020015f905b8282101561053d578382905f5260205f20018054613e14906172ab565b80601f0160208091040260200160405190810160405280929190818152602001828054613e40906172ab565b8015613e8b5780601f10613e6257610100808354040283529160200191613e8b565b820191905f5260205f20905b815481529060010190602001808311613e6e57829003601f168201915b505050505081526020019060010190613df7565b6060601d805480602002602001604051908101604052809291908181526020015f905b8282101561053d575f8481526020908190206040805180820182526002860290920180546001600160a01b03168352600181018054835181870281018701909452808452939491938583019392830182828015613f6857602002820191905f5260205f20905f905b82829054906101000a900460e01b6001600160e01b03191681526020019060040190602082600301049283019260010382029150808411613f2a5790505b50505050508152505081526020019060010190613ec2565b6060601c805480602002602001604051908101604052809291908181526020015f905b8282101561053d575f8481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561404957602002820191905f5260205f20905f905b82829054906101000a900460e01b6001600160e01b0319168152602001906004019060208260030104928301926001038202915080841161400b5790505b50505050508152505081526020019060010190613fa3565b60606019805480602002602001604051908101604052809291908181526020015f905b8282101561053d578382905f5260205f200180546140a1906172ab565b80601f01602080910402602001604051908101604052809291908181526020018280546140cd906172ab565b80156141185780601f106140ef57610100808354040283529160200191614118565b820191905f5260205f20905b8154815290600101906020018083116140fb57829003601f168201915b505050505081526020019060010190614084565b6008545f9060ff1615614143575060085460ff1690565b604051630667f9d760e41b81525f5160206201763c5f395f51905f52600482018190526519985a5b195960d21b60248301525f9163667f9d7090604401602060405180830381865afa15801561419b573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906141bf91906172e3565b1415905090565b602c5f9054906101000a90046001600160a01b03166001600160a01b03166397a9c2856040518163ffffffff1660e01b8152600401602060405180830381865afa158015614216573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061423a91906172e3565b15614247576142476172fa565b602c5f9054906101000a90046001600160a01b03166001600160a01b0316626d6cae6040518163ffffffff1660e01b8152600401602060405180830381865afa158015614296573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906142ba91906172e3565b156142c7576142c76172fa565b602b54604051634b16093560e01b8152620186a060048201819052915f916001600160a01b0390911690634b16093590602401602060405180830381865afa158015614315573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061433991906172e3565b905061436a5f82116040518060400160405280601581526020015f516020620178985f395f51905f52815250616726565b60205460405163ca669fa760e01b81526001600160a01b0390911660048201525f5160206201763c5f395f51905f529063ca669fa7906024015f604051808303815f87803b1580156143ba575f5ffd5b505af11580156143cc573d5f5f3e3d5ffd5b5050602c546729a2241af62c00005f9081526022602052604051632cb047ed60e11b81528694509092506001600160a01b03909116906359608fda9085906144389086905f516020620178b85f395f51905f52905f516020620176ff5f395f51905