@excubiae/contracts
Version:
851 lines • 153 kB
JSON
{
"_format": "hh-sol-artifact-1",
"contractName": "AdvancedPolicy",
"sourceName": "contracts/test/examples/Advanced.t.sol",
"abi": [
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "subject",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "guarded",
"type": "address"
},
{
"indexed": false,
"internalType": "bytes",
"name": "evidence",
"type": "bytes"
},
{
"indexed": false,
"internalType": "enum Check",
"name": "checkType",
"type": "uint8"
}
],
"name": "Enforced",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "guarded",
"type": "address"
}
],
"name": "TargetSet",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "string",
"name": "",
"type": "string"
}
],
"name": "log",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "address",
"name": "",
"type": "address"
}
],
"name": "log_address",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint256[]",
"name": "val",
"type": "uint256[]"
}
],
"name": "log_array",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "int256[]",
"name": "val",
"type": "int256[]"
}
],
"name": "log_array",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "address[]",
"name": "val",
"type": "address[]"
}
],
"name": "log_array",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "bytes",
"name": "",
"type": "bytes"
}
],
"name": "log_bytes",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"name": "log_bytes32",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "int256",
"name": "",
"type": "int256"
}
],
"name": "log_int",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "string",
"name": "key",
"type": "string"
},
{
"indexed": false,
"internalType": "address",
"name": "val",
"type": "address"
}
],
"name": "log_named_address",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "string",
"name": "key",
"type": "string"
},
{
"indexed": false,
"internalType": "uint256[]",
"name": "val",
"type": "uint256[]"
}
],
"name": "log_named_array",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "string",
"name": "key",
"type": "string"
},
{
"indexed": false,
"internalType": "int256[]",
"name": "val",
"type": "int256[]"
}
],
"name": "log_named_array",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "string",
"name": "key",
"type": "string"
},
{
"indexed": false,
"internalType": "address[]",
"name": "val",
"type": "address[]"
}
],
"name": "log_named_array",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "string",
"name": "key",
"type": "string"
},
{
"indexed": false,
"internalType": "bytes",
"name": "val",
"type": "bytes"
}
],
"name": "log_named_bytes",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "string",
"name": "key",
"type": "string"
},
{
"indexed": false,
"internalType": "bytes32",
"name": "val",
"type": "bytes32"
}
],
"name": "log_named_bytes32",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "string",
"name": "key",
"type": "string"
},
{
"indexed": false,
"internalType": "int256",
"name": "val",
"type": "int256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "decimals",
"type": "uint256"
}
],
"name": "log_named_decimal_int",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "string",
"name": "key",
"type": "string"
},
{
"indexed": false,
"internalType": "uint256",
"name": "val",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "decimals",
"type": "uint256"
}
],
"name": "log_named_decimal_uint",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "string",
"name": "key",
"type": "string"
},
{
"indexed": false,
"internalType": "int256",
"name": "val",
"type": "int256"
}
],
"name": "log_named_int",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "string",
"name": "key",
"type": "string"
},
{
"indexed": false,
"internalType": "string",
"name": "val",
"type": "string"
}
],
"name": "log_named_string",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "string",
"name": "key",
"type": "string"
},
{
"indexed": false,
"internalType": "uint256",
"name": "val",
"type": "uint256"
}
],
"name": "log_named_uint",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "string",
"name": "",
"type": "string"
}
],
"name": "log_string",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"name": "log_uint",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "bytes",
"name": "",
"type": "bytes"
}
],
"name": "logs",
"type": "event"
},
{
"inputs": [],
"name": "IS_TEST",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "deployer",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "evidence",
"outputs": [
{
"internalType": "bytes",
"name": "",
"type": "bytes"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "excludeArtifacts",
"outputs": [
{
"internalType": "string[]",
"name": "excludedArtifacts_",
"type": "string[]"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "excludeContracts",
"outputs": [
{
"internalType": "address[]",
"name": "excludedContracts_",
"type": "address[]"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "excludeSelectors",
"outputs": [
{
"components": [
{
"internalType": "address",
"name": "addr",
"type": "address"
},
{
"internalType": "bytes4[]",
"name": "selectors",
"type": "bytes4[]"
}
],
"internalType": "struct StdInvariant.FuzzSelector[]",
"name": "excludedSelectors_",
"type": "tuple[]"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "excludeSenders",
"outputs": [
{
"internalType": "address[]",
"name": "excludedSenders_",
"type": "address[]"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "failed",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "guarded",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "notOwner",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "setUp",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "subject",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "targetArtifactSelectors",
"outputs": [
{
"components": [
{
"internalType": "string",
"name": "artifact",
"type": "string"
},
{
"internalType": "bytes4[]",
"name": "selectors",
"type": "bytes4[]"
}
],
"internalType": "struct StdInvariant.FuzzArtifactSelector[]",
"name": "targetedArtifactSelectors_",
"type": "tuple[]"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "targetArtifacts",
"outputs": [
{
"internalType": "string[]",
"name": "targetedArtifacts_",
"type": "string[]"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "targetContracts",
"outputs": [
{
"internalType": "address[]",
"name": "targetedContracts_",
"type": "address[]"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "targetInterfaces",
"outputs": [
{
"components": [
{
"internalType": "address",
"name": "addr",
"type": "address"
},
{
"internalType": "string[]",
"name": "artifacts",
"type": "string[]"
}
],
"internalType": "struct StdInvariant.FuzzInterface[]",
"name": "targetedInterfaces_",
"type": "tuple[]"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "targetSelectors",
"outputs": [
{
"components": [
{
"internalType": "address",
"name": "addr",
"type": "address"
},
{
"internalType": "bytes4[]",
"name": "selectors",
"type": "bytes4[]"
}
],
"internalType": "struct StdInvariant.FuzzSelector[]",
"name": "targetedSelectors_",
"type": "tuple[]"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "targetSenders",
"outputs": [
{
"internalType": "address[]",
"name": "targetedSenders_",
"type": "address[]"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "test_factory_deployAndInitialize",
"outputs": [],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "test_policy_enforceMain_whenCallerNotTarget_reverts",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "test_policy_enforceMain_whenCheckFails_reverts",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "test_policy_enforceMain_whenMultipleValid_succeeds",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "test_policy_enforceMain_whenValid_succeeds",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "test_policy_enforcePost_whenCallerNotTarget_reverts",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "test_policy_enforcePost_whenCheckFails_reverts",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "test_policy_enforcePost_whenChecksSkipped_reverts",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "test_policy_enforcePost_whenValid_succeeds",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "test_policy_enforcePre_whenCallerNotTarget_reverts",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "test_policy_enforcePre_whenCheckFails_reverts",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "test_policy_enforcePre_whenChecksSkipped_reverts",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "test_policy_enforcePre_whenTokenDoesNotExist_reverts",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "test_policy_enforcePre_whenValid_succeeds",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "test_policy_getAppendedBytes",
"outputs": [],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "test_policy_setTarget_whenAlreadySet_reverts",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "test_policy_setTarget_whenCallerNotOwner_reverts",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "test_policy_setTarget_whenValid_succeeds",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "test_policy_setTarget_whenZeroAddress_reverts",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "test_policy_trait_returnsCorrectValue",
"outputs": [],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "test_policy_whenAlreadyInitialized_reverts",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "wrongEvidence",
"outputs": [
{
"internalType": "bytes",
"name": "",
"type": "bytes"
}
],
"stateMutability": "view",
"type": "function"
}
],
"bytecode": "0x60806040819052600c8054600160ff199182168117909255601f8054909116821790556001625e79b760e01b0319909152608452737109709ecfa91a80626ff3989d68f67f5b1dd12d63ffa1864960a4602060405180830381865afa15801561006c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061009091906102da565b602880546001600160a01b0319166001600160a01b03929092169190911790556040516001625e79b760e01b0319815260026004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ffa1864990602401602060405180830381865afa158015610103573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061012791906102da565b602980546001600160a01b0319166001600160a01b03929092169190911790556040516001625e79b760e01b0319815260036004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ffa1864990602401602060405180830381865afa15801561019a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101be91906102da565b602a80546001600160a01b0319166001600160a01b03929092169190911790556040516001625e79b760e01b03198152600480820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ffa1864990602401602060405180830381865afa158015610230573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061025491906102da565b602b80546001600160a01b0319166001600160a01b0392909216919091179055604080516000602082015201604051602081830303815290604052602c908161029d91906103a9565b50604080516001602082015201604051602081830303815290604052602d90816102c791906103a9565b503480156102d457600080fd5b50610467565b6000602082840312156102ec57600080fd5b81516001600160a01b038116811461030357600080fd5b9392505050565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061033457607f821691505b60208210810361035457634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156103a457806000526020600020601f840160051c810160208510156103815750805b601f840160051c820191505b818110156103a1576000815560010161038d565b50505b505050565b81516001600160401b038111156103c2576103c261030a565b6103d6816103d08454610320565b8461035a565b6020601f82116001811461040a57600083156103f25750848201515b600019600385901b1c1916600184901b1784556103a1565b600084815260208120601f198516915b8281101561043a578785015182556020948501946001909201910161041a565b50848210156104585786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b61812e806104766000396000f3fe608060405234801561001057600080fd5b50600436106102485760003560e01c806389d8bda91161013b578063c7e76f91116100b8578063e20c9f711161007c578063e20c9f711461040e578063e29e121614610416578063e5f05d701461041e578063eb5579d614610426578063fa7626d41461042e57600080fd5b8063c7e76f91146103db578063cc0d3246146103e3578063d25a8bd7146103eb578063d5f39488146103f3578063db5b7a511461040657600080fd5b8063a77e0987116100ff578063a77e0987146103a3578063b0464fdc146103ab578063b5508aa9146103b3578063b7546376146103bb578063ba414fa6146103c357600080fd5b806389d8bda91461036e5780638bc2ff3c146103765780638c43b05e1461037e578063916a17c61461038657806396c02bf91461039b57600080fd5b806349c4090c116101c95780636bcc0ca31161018d5780636bcc0ca31461032e57806372f7a0301461033657806385226c8114610349578063861735b81461035e57806386d982a31461036657600080fd5b806349c4090c146102ec5780634a7f21b0146102f45780634e693a63146103095780634ffcf9631461031157806366d9a9a01461031957600080fd5b80631ed7831c116102105780631ed7831c1461029f578063251c9d63146102b45780632ade3880146102c75780633e5e3c23146102dc5780633f7286f4146102e457600080fd5b80630a59a98c1461024d5780630a9254e41461027d5780630d10103514610287578063124f19fd1461028f5780631494b15f14610297575b600080fd5b602a54610260906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b61028561043b565b005b610285610d46565b6102856110cc565b61028561138f565b6102a761178d565b60405161027491906148c6565b602b54610260906001600160a01b031681565b6102cf6117ef565b6040516102749190614962565b6102a7611931565b6102a7611991565b6102856119f1565b6102fc611cb4565b6040516102749190614a2e565b610285611d42565b610285611e65565b6103216123ab565b6040516102749190614a8e565b610285612518565b602954610260906001600160a01b031681565b610351612873565b6040516102749190614b0e565b610285612943565b610285612a8e565b610285612c7e565b610285612d1f565b61028561307a565b61038e6133aa565b6040516102749190614b67565b610285613490565b6102fc613858565b61038e613865565b61035161394b565b610285613a1b565b6103cb613c8c565b6040519015158152602001610274565b610285613d2a565b610285613e6f565b61028561405f565b602854610260906001600160a01b031681565b6102856141c5565b6102a76142e6565b610285614346565b610285614536565b6102856146fc565b601f546103cb9060ff1681565b6028546040516303223eab60e11b81526001600160a01b0390911660048201526000805160206180b9833981519152906306447d5690602401600060405180830381600087803b15801561048e57600080fd5b505af11580156104a2573d6000803e3d6000fd5b505050506040516104b290614892565b604051809103906000f0801580156104ce573d6000803e3d6000fd5b50601f60016101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405161050190614892565b604051809103906000f08015801561051d573d6000803e3d6000fd5b50602080546001600160a01b0319166001600160a01b039290921691909117905560405161054a9061489f565b604051809103906000f080158015610566573d6000803e3d6000fd5b50602280546001600160a01b0319166001600160a01b0392909216919091179055604051610593906148ac565b604051809103906000f0801580156105af573d6000803e3d6000fd5b50602460006101000a8154816001600160a01b0302191690836001600160a01b031602179055506000805160206180d983398151915260001c6001600160a01b03166341af2f526040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561062257600080fd5b505af1158015610636573d6000803e3d6000fd5b5050602254601f54604051634c96a38960e01b81526001600160a01b036101009092048216600482015291169250634c96a3899150602401600060405180830381600087803b15801561068857600080fd5b505af115801561069c573d6000803e3d6000fd5b5050505060006000805160206180d983398151915260001c6001600160a01b031663191553a46040518163ffffffff1660e01b81526004016000604051808303816000875af11580156106f3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261071b9190810190614d03565b905060008160008151811061073257610732614e94565b60200260200101516000015160018151811061075057610750614e94565b6020908102919091010151602180546001600160a01b0319166001600160a01b038316179055604080516320d797a960e11b815290519192506000805160206180b9833981519152916341af2f529160048082019260009290919082900301818387803b1580156107c057600080fd5b505af11580156107d4573d6000803e3d6000fd5b505060248054601f54602054602154604051635bbaa00160e11b81526001600160a01b03610100909404841660048201529183169482019490945292811660448401526001606484015260006084840152600a60a484015216925063b7754002915060c401600060405180830381600087803b15801561085357600080fd5b505af1158015610867573d6000803e3d6000fd5b505050506000805160206180d983398151915260001c6001600160a01b031663191553a46040518163ffffffff1660e01b81526004016000604051808303816000875af11580156108bc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526108e49190810190614d03565b91506000826000815181106108fb576108fb614e94565b60200260200101516000015160018151811061091957610919614e94565b6020908102919091010151602380546001600160a01b0319166001600160a01b03831617905560405190915061094e906148b9565b604051809103906000f08015801561096a573d6000803e3d6000fd5b50602760006101000a8154816001600160a01b0302191690836001600160a01b031602179055506000805160206180d983398151915260001c6001600160a01b03166341af2f526040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156109dd57600080fd5b505af11580156109f1573d6000803e3d6000fd5b5050602754602354604051634cb6643d60e01b81526001600160a01b039182166004820152600060248201819052604482015291169250634cb6643d9150606401600060405180830381600087803b158015610a4c57600080fd5b505af1158015610a60573d6000803e3d6000fd5b505050506000805160206180d983398151915260001c6001600160a01b031663191553a46040518163ffffffff1660e01b81526004016000604051808303816000875af1158015610ab5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610add9190810190614d03565b9250600083600081518110610af457610af4614e94565b602002602001015160000151600181518110610b1257610b12614e94565b6020908102919091010151602580546001600160a01b0319166001600160a01b038316179055604080516320d797a960e11b815290519192506000805160206180b9833981519152916341af2f529160048082019260009290919082900301818387803b158015610b8257600080fd5b505af1158015610b96573d6000803e3d6000fd5b5050602754602354604051634cb6643d60e01b81526001600160a01b039182166004820152600160248201819052604482015291169250634cb6643d9150606401600060405180830381600087803b158015610bf157600080fd5b505af1158015610c05573d6000803e3d6000fd5b505050506000805160206180d983398151915260001c6001600160a01b031663191553a46040518163ffffffff1660e01b81526004016000604051808303816000875af1158015610c5a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610c829190810190614d03565b9350600084600081518110610c9957610c99614e94565b602002602001015160000151600181518110610cb757610cb7614e94565b6020908102919091010151602680546001600160a01b0319166001600160a01b038316179055604080516390c5013b60e01b815290519192506000805160206180b9833981519152916390c5013b9160048082019260009290919082900301818387803b158015610d2757600080fd5b505af1158015610d3b573d6000803e3d6000fd5b505050505050505050565b6028546040516303223eab60e11b81526001600160a01b0390911660048201526000805160206180b9833981519152906306447d5690602401600060405180830381600087803b158015610d9957600080fd5b505af1158015610dad573d6000803e3d6000fd5b505060255460295460405163776d1a0160e01b81526001600160a01b0391821660048201529116925063776d1a019150602401600060405180830381600087803b158015610dfa57600080fd5b505af1158015610e0e573d6000803e3d6000fd5b5050601f54602a546040516335313c2160e11b81526001600160a01b039182166004820152610100909204169250636a6278429150602401600060405180830381600087803b158015610e6057600080fd5b505af1158015610e74573d6000803e3d6000fd5b505050506000805160206180d983398151915260001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610ec457600080fd5b505af1158015610ed8573d6000803e3d6000fd5b50506029546040516303223eab60e11b81526001600160a01b0390911660048201526000805160206180b983398151915292506306447d569150602401600060405180830381600087803b158015610f2f57600080fd5b505af1158015610f43573d6000803e3d6000fd5b505060405163248e63e160e11b8152600160048201819052602482018190526044820181905260648201526000805160206180b9833981519152925063491cc7c29150608401600060405180830381600087803b158015610fa357600080fd5b505af1158015610fb7573d6000803e3d6000fd5b5050602954602a546040516001600160a01b0392831694509116915060008051602061809983398151915290610ff290602c90600090614fa9565b60405180910390a3602554602a54604051630a211fef60e11b81526001600160a01b03928316926314423fde9261103492911690602c90600090600401614fcb565b600060405180830381600087803b15801561104e57600080fd5b505af1158015611062573d6000803e3d6000fd5b505050506000805160206180d983398151915260001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156110b257600080fd5b505af11580156110c6573d6000803e3d6000fd5b50505050565b6028546040516303223eab60e11b81526001600160a01b0390911660048201526000805160206180b9833981519152906306447d5690602401600060405180830381600087803b15801561111f57600080fd5b505af1158015611133573d6000803e3d6000fd5b505060255460295460405163776d1a0160e01b81526001600160a01b0391821660048201529116925063776d1a019150602401600060405180830381600087803b15801561118057600080fd5b505af1158015611194573d6000803e3d6000fd5b5050601f54602a546040516335313c2160e11b81526001600160a01b039182166004820152610100909204169250636a6278429150602401600060405180830381600087803b1580156111e657600080fd5b505af11580156111fa573d6000803e3d6000fd5b505050506000805160206180d983398151915260001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561124a57600080fd5b505af115801561125e573d6000803e3d6000fd5b50506029546040516303223eab60e11b81526001600160a01b0390911660048201526000805160206180b983398151915292506306447d569150602401600060405180830381600087803b1580156112b557600080fd5b505af11580156112c9573d6000803e3d6000fd5b50506040805160048082526024820183526020820180516001600160e01b0316634715494560e01b179052915163f28dceb360e01b81526000805160206180b9833981519152945063f28dceb393506113229201614a2e565b600060405180830381600087803b15801561133c57600080fd5b505af1158015611350573d6000803e3d6000fd5b5050602554602b54604051630a211fef60e11b81526001600160a01b0392831694506314423fde93506110349290911690602c90600090600401614fcb565b6028546040516303223eab60e11b81526001600160a01b0390911660048201526000805160206180b9833981519152906306447d5690602401600060405180830381600087803b1580156113e257600080fd5b505af11580156113f6573d6000803e3d6000fd5b505060255460295460405163776d1a0160e01b81526001600160a01b0391821660048201529116925063776d1a019150602401600060405180830381600087803b15801561144357600080fd5b505af1158015611457573d6000803e3d6000fd5b5050601f54602a546040516335313c2160e11b81526001600160a01b039182166004820152610100909204169250636a6278429150602401600060405180830381600087803b1580156114a957600080fd5b505af11580156114bd573d6000803e3d6000fd5b505050506000805160206180d983398151915260001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561150d57600080fd5b505af1158015611521573d6000803e3d6000fd5b50506029546040516303223eab60e11b81526001600160a01b0390911660048201526000805160206180b983398151915292506306447d569150602401600060405180830381600087803b15801561157857600080fd5b505af115801561158c573d6000803e3d6000fd5b5050602554602a54604051630a211fef60e11b81526001600160a01b0392831694506314423fde93506115cb9290911690602c90600090600401614fcb565b600060405180830381600087803b1580156115e557600080fd5b505af11580156115f9573d6000803e3d6000fd5b5050602554602a54604051630a211fef60e11b81526001600160a01b0392831694506314423fde93506116389290911690602c90600190600401614fcb565b600060405180830381600087803b15801561165257600080fd5b505af1158015611666573d6000803e3d6000fd5b5050602054602a546040516335313c2160e11b81526001600160a01b03918216600482015291169250636a6278429150602401600060405180830381600087803b1580156116b357600080fd5b505af11580156116c7573d6000803e3d6000fd5b50506040805160048082526024820183526020820180516001600160e01b0316634715494560e01b179052915163f28dceb360e01b81526000805160206180b9833981519152945063f28dceb393506117209201614a2e565b600060405180830381600087803b15801561173a57600080fd5b505af115801561174e573d6000803e3d6000fd5b5050602554602a54604051630a211fef60e11b81526001600160a01b0392831694506314423fde93506110349290911690602c90600290600401614fcb565b606060168054806020026020016040519081016040528092919081815260200182805480156117e557602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116117c7575b5050505050905090565b6060601e805480602002602001604051908101604052809291908181526020016000905b8282101561192857600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b8282101561191157838290600052602060002001805461188490614eaa565b80601f01602080910402602001604051908101604052809291908181526020018280546118b090614eaa565b80156118fd5780601f106118d2576101008083540402835291602001916118fd565b820191906000526020600020905b8154815290600101906020018083116118e057829003601f168201915b505050505081526020019060010190611865565b505050508152505081526020019060010190611813565b50505050905090565b606060188054806020026020016040519081016040528092919081815260200182805480156117e5576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116117c7575050505050905090565b606060178054806020026020016040519081016040528092919081815260200182805480156117e5576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116117c7575050505050905090565b6028546040516303223eab60e11b81526001600160a01b0390911660048201526000805160206180b9833981519152906306447d5690602401600060405180830381600087803b158015611a4457600080fd5b505af1158015611a58573d6000803e3d6000fd5b505060265460295460405163776d1a0160e01b81526001600160a01b0391821660048201529116925063776d1a019150602401600060405180830381600087803b158015611aa557600080fd5b505af1158015611ab9573d6000803e3d6000fd5b5050601f54602a546040516335313c2160e11b81526001600160a01b039182166004820152610100909204169250636a6278429150602401600060405180830381600087803b158015611b0b57600080fd5b505af1158015611b1f573d6000803e3d6000fd5b505050506000805160206180d983398151915260001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611b6f57600080fd5b505af1158015611b83573d6000803e3d6000fd5b50506029546040516303223eab60e11b81526001600160a01b0390911660048201526000805160206180b983398151915292506306447d569150602401600060405180830381600087803b158015611bda57600080fd5b505af1158015611bee573d6000803e3d6000fd5b50506040805160048082526024820183526020820180516001600160e01b0316632d1fd52160e21b179052915163f28dceb360e01b81526000805160206180b9833981519152945063f28dceb39350611c479201614a2e565b600060405180830381600087803b158015611c6157600080fd5b505af1158015611c75573d6000803e3d6000fd5b5050602654602a54604051630a211fef60e11b81526001600160a01b0392831694506314423fde93506110349290911690602c90600090600401614fcb565b602d8054611cc190614eaa565b80601f0160208091040260200160405190810160405280929190818152602001828054611ced90614eaa565b8015611d3a5780601f10611d0f57610100808354040283529160200191611d3a565b820191906000526020600020905b815481529060010190602001808311611d1d57829003601f168201915b505050505081565b6028546040516303223eab60e11b81526001600160a01b0390911660048201526000805160206180b9833981519152906306447d5690602401600060405180830381600087803b158015611d9557600080fd5b505af1158015611da9573d6000803e3d6000fd5b50506040805160048082526024820183526020820180516001600160e01b031663d92e233d60e01b179052915163f28dceb360e01b81526000805160206180b9833981519152945063f28dceb39350611e029201614a2e565b600060405180830381600087803b158015611e1c57600080fd5b505af1158015611e30573d6000803e3d6000fd5b505060255460405163776d1a0160e01b8152600060048201526001600160a01b03909116925063776d1a019150602401611034565b6028546040516303223eab60e11b81526001600160a01b0390911660048201526000805160206180b9833981519152906306447d5690602401600060405180830381600087803b158015611eb857600080fd5b505af1158015611ecc573d6000803e3d6000fd5b505060255460295460405163776d1a0160e01b81526001600160a01b0391821660048201529116925063776d1a019150602401600060405180830381600087803b158015611f1957600080fd5b505af1158015611f2d573d6000803e3d6000fd5b5050601f54602a546040516335313c2160e11b81526001600160a01b039182166004820152610100909204169250636a6278429150602401600060405180830381600087803b158015611f7f57600080fd5b505af1158015611f93573d6000803e3d6000fd5b505050506000805160206180d983398151915260001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611fe357600080fd5b505af1158015611ff7573d6000803e3d6000fd5b50506029546040516303223eab60e11b81526001600160a01b0390911660048201526000805160206180b983398151915292506306447d569150602401600060405180830381600087803b15801561204e57600080fd5b505af1158015612062573d6000803e3d6000fd5b5050602554602a54604051630a211fef60e11b81526001600160a01b0392831694506314423fde93506120a19290911690602c90600090600401614fcb565b600060405180830381600087803b1580156120bb57600080fd5b505af11580156120cf573d6000803e3d6000fd5b505050506000805160206180d983398151915260001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561211f57600080fd5b505af1158015612133573d6000803e3d6000fd5b5050602a546040516303223eab60e11b81526001600160a01b0390911660048201526000805160206180b983398151915292506306447d569150602401600060405180830381600087803b15801561218a57600080fd5b505af115801561219e573d6000803e3d6000fd5b5050601f54602a546029546040516323b872dd60e01b81526001600160a01b0392831660048201529082166024820152600060448201526101009092041692506323b872dd9150606401600060405180830381600087803b15801561220257600080fd5b505af1158015612216573d6000803e3d6000fd5b505050506000805160206180d983398151915260001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561226657600080fd5b505af115801561227a573d6000803e3d6000fd5b50506029546040516303223eab60e11b81526001600160a01b0390911660048201526000805160206180b983398151915292506306447d569150602401600060405180830381600087803b1580156122d157600080fd5b505af11580156122e5573d6000803e3d6000fd5b50506040805160048082526024820183526020820180516001600160e01b0316634715494560e01b179052915163f28dceb360e01b81526000805160206180b9833981519152945063f28dceb3935061233e9201614a2e565b600060405180830381600087803b15801561235857600080fd5b505af115801561236c573d6000803e3d6000fd5b5050602554602a54604051630a211fef60e11b81526001600160a01b0392831694506314423fde93506110349290911690602c90600190600401614fcb565b6060601b805480602002602001604051908101604052809291908181526020016000905b82821015611928578382906000526020600020906002020160405180604001604052908160008201805461240290614eaa565b80601f016020809104026020016040519081016040528092919081815260200182805461242e90614eaa565b801561247b5780601f106124505761010080835404028352916020019161247b565b820191906000526020600020905b81548152906001019060200180831161245e57829003601f168201915b505050505081526020016001820180548060200260200160405190810160405280929190818152602001828054801561250057602002820191906000526020600020906000905b82829054906101000a900460e01b6001600160e01b031916815260200190600401906020826003010492830192600103820291508084116124c25790505b505050505081525050815260200190600101906123cf565b6028546040516303223eab60e11b81526001600160a01b0390911660048201526000805160206180b9833981519152906306447d5690602401600060405180830381600087803b15801561256b57600080fd5b505af115801561257f573d6000803e3d6000fd5b505060255460295460405163776d1a0160e01b81526001600160a01b0391821660048201529116925063776d1a019150602401600060405180830381600087803b1580156125cc57600080fd5b505af11580156125e0573d6000803e3d6000fd5b5050601f54602a546040516335313c2160e11b81526001600160a01b039182166004820152610100909204169250636a6278429150602401600060405180830381600087803b15801561263257600080fd5b505af1158015612646573d6000803e3d6000fd5b505050506000805160206180d983398151915260001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561269657600080fd5b505af11580156126aa573d6000803e3d6000fd5b50506029546040516303223eab60e11b81526001600160a01b0390911660048201526000805160206180b983398151915292506306447d569150602401600060405180830381600087803b15801561270157600080fd5b505af1158015612715573d6000803e3d6000fd5b5050602554602a54604051630a211fef60e11b81526001600160a01b0392831694506314423fde93506127549290911690602c90600090600401614fcb565b600060405180830381600087803b15801561276e57600080fd5b505af1158015612782573d6000803e3d6000fd5b505060405163248e63e160e11b8152600160048201819052602482018190526044820181905260648201526000805160206180b9833981519152925063491cc7c29150608401600060405180830381600087803b1580156127e257600080fd5b505af11580156127f6573d6000803e3d6000fd5b5050602954602a546040516001600160a01b039283169450911691506000805160206180998339815191529061283190602c90600190614fa9565b60405180910390a3602554602a54604051630a211fef60e11b81526001600160a01b03928316926314423fde9261103492911690602c90600190600401614fcb565b6060601a805480602002602001604051908101604052809291908181526020016000905b828210156119285783829060005260206000200180546128b690614eaa565b80601f01602080910402602001604051908101604052809291908181526020018280546128e290614eaa565b801561292f5780601f106129045761010080835404028352916020019161292f565b820191906000526020600020905b81548152906001019060200180831161291257829003601f168201915b505050505081526020019060010190612897565b6028546040516303223eab60e11b81526001600160a01b0390911660048201526000805160206180b9833981519152906306447d5690602401600060405180830381600087803b15801561299657600080fd5b505af11580156129aa573d6000803e3d6000fd5b505060405163248e63e160e11b8152600160048201819052602482018190526044820181905260648201526000805160206180b9833981519152925063491cc7c29150608401600060405180830381600087803b158015612a0a57600080fd5b505af1158015612a1e573d6000803e3d6000fd5b50506029546040516001600160a01b0390911692507f3bfb4bbf112628248058745a3c57e35b13369386e474b8e56c552f3063a4a1969150600090a260255460295460405163776d1a0160e01b81526001600160a01b03918216600482015291169063776d1a0190602401611034565b6028546040516303223eab60e11b81526001600160a01b0390911660048201526000805160206180b9833981519152906306447d5690602401600060405180830381600087803b158015612ae157600080fd5b505af1158015612af5573d6000803e3d6000fd5b505060255460295460405163776d1a0160e01b81526001600160a01b0391821660048201529116925063776d1a019150602401600060405180830381600087803b158015612b4257600080fd5b505af1158015612b56573d6000803e3d6000fd5b505050506000805160206180d983398151915260001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612ba657600080fd5b505af1158015612bba573d6000803e3d6000fd5b5050602a546040516303223eab60e11b81526001600160a01b0390911660048201526000805160206180b983398151915292506306447d569150602401600060405180830381600087803b158015612c1157600080fd5b505af1158015612c25573d6000803e3d6000fd5b50506040805160048082526024820183526020820180516001600160e01b0316631f492dbf60e21b179052915163f28dceb360e01b81526000805160206180b9833981519152945063f28dceb393506117209201614a2e565b6025546040805163ce343deb60e01b81529051612d1d926001600160a01b03169163ce343deb9160048083019260009291908290030181865afa158015612cc9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612cf19190810190615006565b6040518060400160405280600e81526020016d416476616e63656445524337323160901b8152506147bd565b565b6028546040516303223eab60e11b81526001600160a01b0390911660048201526000805160206180b9833981519152906306447d5690602401600060405180830381600087803b158015612d7257600080fd5b505af1158015612d86573d6000803e3d6000fd5b505060255460295460405163776d1a0160e01b81526001600160a01b0391821660048201529116925063776d1a019150602401600060405180830381600087803b158015612dd357600080fd5b505af1158015612de7573d6000803e3d6000fd5b5050601f54602a546040516335313c2160e11b81526001600160a01b039182166004820152610100909204169250636a6278429150602401600060405180830381600087803b158015612e3957600080fd5b505af1158015612e4d573d6000803e3d6000fd5b505050506000805160206180d983398151915260001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612e9d57600080fd5b505af1158015612eb1573d6000803e3d6000fd5b50506029546040516303223eab60e11b81526001600160a01b0390911660048201526000805160206180b983398151915292506306447d569150602401600060405180830381600087803b158015612f0857600080fd5b505af1158015612f1c573d6000803e3d6000fd5b5050602554602a54604051630a211fef60e11b81526001600160a01b0392831694506314423fde9350612f5b9290911690602c90600090600401614fcb565b600060405180830381600087803b158015612f7557600080fd5b505af1158015612f89573d6000803e3d6000fd5b505060405163248e63e160e11b8152600160048201819052602482018190526044820181905260648201526000805160206180b9833981519152925063491cc7c29150608401600060405180830381600087803b158015612fe957600080fd5b505af1158015612ffd573d6000803e3d6000fd5b5050602954602a546040516001600160a01b039283169450911691506000805160206180998339815191529061303890602c90600190614fa9565b60405180910390a3602554602a54604051630a211fef60e11b81526001600160a01b03928316926314423fde9261275492911690602c90600190600401614fcb565b6028546040516303223eab60e11b81526001600160a01b0390911660048201526000805160206180b9833981519152906306447d5690602401600060405180830381600087803b1580156130cd57600080fd5b505af11580156130e1573d6000803e3d6000fd5b505060265460295460405163776d1a0160e01b81526001600160a01b0391821660048201529116925063776d1a019150602401600060405180830381600087803b15801561312e57600080fd5b505af1158015613142573d6000803e3d6000fd5b5050601f54602a546040516335313c2160e11b81526001600160a01b039182166004820152610100909204169250636a6278429150602401600060405180830381600087803b15801561319457600080fd5b505af11580156131a8573d6000803e3d6000fd5b505050506000805160206180d983398151915260001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156131f857600080fd5b505af115801561320c573d6000803e3d6000fd5b50506029546040516303223eab60e11b81526001600160a01b0390911660048201526000805160206180b983398151915292506306447d569150602401600060405180830381600087803b15801561326357600080fd5b505af1158015613277573d6000803e3d6000fd5b5050602654602a54604051630a211fef60e11b81526001600160a01b0392831694506314423fde93506132b69290911690602c90600190600401614fcb565b600060405180830381600087803b1580156132d057600080fd5b505af11580156132e4573d6000803e3d6000fd5b50506040805160048082526024820183526020820180516001600160e01b031663b0ee30f360e01b179052915163f28dceb360e01b81526000805160206180b9833981519152945063f28dceb3935061333d9201614a2e565b600060405180830381600087803b15801561335757600080fd5b505af115801561336b573d6000803e3d6000fd5b5050602654602a54604051630a211fef60e11b81526001600160a01b0392831694506314423fde93506110349290911690602c90600290600401614fcb565b6060601d805480602002602001604051908101604052809291908181526020016000905b828210156119285760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561347857602002820191906000526020600020906000905b82829054906101000a900460e01b6001600160e01b0319168152602001906004019060208260030104928301926001038202915080841161343a5790505b505050505081525050815260200190600101906133ce565b6028546040516303223eab60e11b81526001600160a01b0390911660048201526000805160206180b9833981519152906306447d5690602401600060405180830381600087803b1580156134e357600080fd5b505af11580156134f7573d6000803e3d6000fd5b505060255460295460405163776d1a0160e01b81526001600160a01b0391821660048201529116925063776d1a019150602401600060405180830381600087803b15801561354457600080fd5b505af1158015613558573d6000803e3d6000fd5b5050601f54602a546040516335313c2160e11b81526001600160a01b039182166004820152610100909204169250636a6278429150602401600060405180830381600087803b1580156135aa57600080fd5b505af11580156135be573d6000803e3d6000fd5b505050506000805160206180d983398151915260001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561360e57600080fd5b505af1158015613622573d6000803e3d6000fd5b50506029546040516303223eab60e11b81526001600160a01b0390911660048201526000805160206180b983398151915292506306447d569150602401600060405180830381600087803b15801561367957600080fd5b505af115801561368d573d6000803e3d6000fd5b5050602554602a54604051630a211fef60e11b81526001600160a01b0392831694506314423fde93506136cc9290911690602c90600090600401614fcb565b600060405180830381600087803b1580156136e657600080fd5b505af11580156136fa573d6000803e3d6000fd5b5050602554602a54604051630a211fef60e11b81526001600160a01b0392831694506314423fde93506137399290911690602c90600190600401614fcb565b600060405180830381600087803b15801561375357600080fd5b505af1158015613767573d6000803e3d6000fd5b505060405163248e63e160e11b8152600160048201819052602482018190526044820181905260648201526000805160206180b9833981519152925063491cc7c29150608401600060405180830381600087803b1580156137c757600080fd5b505af11580156137db573d6000803e3d6000fd5b5050602954602a546040516001600160a01b039283169450911691506000805160206180998339815191529061381690602c90600290614fa9565b60405180910390a3602554602a54604051630a211fef60e11b81526001600160a01b03928316926314423fde9261103492911690602c90600290600401614fcb565b602c8054611cc190614eaa565b6060601c805480602002602001604051908101604052809291908181526020016000905b828210156119285760008481526020908190206040805180820182526002860290920180546001600160a01b031683526001810180548351818702810187019094528084529394919385830193928301828280156139335760200282019190600052602