{
  "_format": "hh-sol-artifact-1",
  "contractName": "MainModuleGasEstimation",
  "sourceName": "contracts/modules/MainModuleGasEstimation.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_space",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_provided",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_current",
          "type": "uint256"
        }
      ],
      "name": "BadNonce",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "_code",
          "type": "bytes"
        }
      ],
      "name": "CreateFailed",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "EmptySignature",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "_signature",
          "type": "bytes4"
        }
      ],
      "name": "HookAlreadyExists",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "_signature",
          "type": "bytes4"
        }
      ],
      "name": "HookDoesNotExist",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ImageHashIsZero",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_implementation",
          "type": "address"
        }
      ],
      "name": "InvalidImplementation",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_hash",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "_addr",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "_signature",
          "type": "bytes"
        }
      ],
      "name": "InvalidNestedSignature",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "_signature",
          "type": "bytes"
        },
        {
          "internalType": "bytes32",
          "name": "_s",
          "type": "bytes32"
        }
      ],
      "name": "InvalidSValue",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_hash",
          "type": "bytes32"
        },
        {
          "internalType": "bytes",
          "name": "_signature",
          "type": "bytes"
        }
      ],
      "name": "InvalidSignature",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_flag",
          "type": "uint256"
        }
      ],
      "name": "InvalidSignatureFlag",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "_signature",
          "type": "bytes"
        }
      ],
      "name": "InvalidSignatureLength",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "bytes1",
          "name": "_type",
          "type": "bytes1"
        }
      ],
      "name": "InvalidSignatureType",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "_signature",
          "type": "bytes"
        },
        {
          "internalType": "uint256",
          "name": "_v",
          "type": "uint256"
        }
      ],
      "name": "InvalidVValue",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "_signature",
          "type": "bytes"
        },
        {
          "internalType": "uint256",
          "name": "threshold",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_weight",
          "type": "uint256"
        }
      ],
      "name": "LowWeightChainedSignature",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_index",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_requested",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_available",
          "type": "uint256"
        }
      ],
      "name": "NotEnoughGas",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "OnlyDelegatecall",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_sender",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_self",
          "type": "address"
        }
      ],
      "name": "OnlySelfAuth",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "_signature",
          "type": "bytes"
        }
      ],
      "name": "SignerIsAddress0",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "_signature",
          "type": "bytes"
        },
        {
          "internalType": "uint256",
          "name": "_type",
          "type": "uint256"
        },
        {
          "internalType": "bool",
          "name": "_recoverMode",
          "type": "bool"
        }
      ],
      "name": "UnsupportedSignatureType",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_current",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_prev",
          "type": "uint256"
        }
      ],
      "name": "WrongChainedCheckpointOrder",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "_contract",
          "type": "address"
        }
      ],
      "name": "CreatedContract",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "bytes4",
          "name": "_signature",
          "type": "bytes4"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "_implementation",
          "type": "address"
        }
      ],
      "name": "DefinedHook",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "newImageHash",
          "type": "bytes32"
        }
      ],
      "name": "ImageHashUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "newImplementation",
          "type": "address"
        }
      ],
      "name": "ImplementationUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_space",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_newNonce",
          "type": "uint256"
        }
      ],
      "name": "NonceChange",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "_tx",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_index",
          "type": "uint256"
        }
      ],
      "name": "TxExecuted",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "_tx",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_index",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "_reason",
          "type": "bytes"
        }
      ],
      "name": "TxFailed",
      "type": "event"
    },
    {
      "stateMutability": "payable",
      "type": "fallback"
    },
    {
      "inputs": [],
      "name": "SET_IMAGE_HASH_TYPE_HASH",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "_signature",
          "type": "bytes4"
        },
        {
          "internalType": "address",
          "name": "_implementation",
          "type": "address"
        }
      ],
      "name": "addHook",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "_code",
          "type": "bytes"
        }
      ],
      "name": "createContract",
      "outputs": [
        {
          "internalType": "address",
          "name": "addr",
          "type": "address"
        }
      ],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "bool",
              "name": "delegateCall",
              "type": "bool"
            },
            {
              "internalType": "bool",
              "name": "revertOnError",
              "type": "bool"
            },
            {
              "internalType": "uint256",
              "name": "gasLimit",
              "type": "uint256"
            },
            {
              "internalType": "address",
              "name": "target",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "value",
              "type": "uint256"
            },
            {
              "internalType": "bytes",
              "name": "data",
              "type": "bytes"
            }
          ],
          "internalType": "struct IModuleCalls.Transaction[]",
          "name": "_txs",
          "type": "tuple[]"
        },
        {
          "internalType": "uint256",
          "name": "_nonce",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "_signature",
          "type": "bytes"
        }
      ],
      "name": "execute",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "imageHash",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_hash",
          "type": "bytes32"
        },
        {
          "internalType": "bytes",
          "name": "_signatures",
          "type": "bytes"
        }
      ],
      "name": "isValidSignature",
      "outputs": [
        {
          "internalType": "bytes4",
          "name": "",
          "type": "bytes4"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "_data",
          "type": "bytes"
        },
        {
          "internalType": "bytes",
          "name": "_signatures",
          "type": "bytes"
        }
      ],
      "name": "isValidSignature",
      "outputs": [
        {
          "internalType": "bytes4",
          "name": "",
          "type": "bytes4"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "nonce",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "uint256[]",
          "name": "",
          "type": "uint256[]"
        },
        {
          "internalType": "uint256[]",
          "name": "",
          "type": "uint256[]"
        },
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "name": "onERC1155BatchReceived",
      "outputs": [
        {
          "internalType": "bytes4",
          "name": "",
          "type": "bytes4"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "name": "onERC1155Received",
      "outputs": [
        {
          "internalType": "bytes4",
          "name": "",
          "type": "bytes4"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "name": "onERC721Received",
      "outputs": [
        {
          "internalType": "bytes4",
          "name": "",
          "type": "bytes4"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "_signature",
          "type": "bytes4"
        }
      ],
      "name": "readHook",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_space",
          "type": "uint256"
        }
      ],
      "name": "readNonce",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "_signature",
          "type": "bytes4"
        }
      ],
      "name": "removeHook",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "bool",
              "name": "delegateCall",
              "type": "bool"
            },
            {
              "internalType": "bool",
              "name": "revertOnError",
              "type": "bool"
            },
            {
              "internalType": "uint256",
              "name": "gasLimit",
              "type": "uint256"
            },
            {
              "internalType": "address",
              "name": "target",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "value",
              "type": "uint256"
            },
            {
              "internalType": "bytes",
              "name": "data",
              "type": "bytes"
            }
          ],
          "internalType": "struct IModuleCalls.Transaction[]",
          "name": "_txs",
          "type": "tuple[]"
        }
      ],
      "name": "selfExecute",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_digest",
          "type": "bytes32"
        },
        {
          "internalType": "bytes",
          "name": "_signature",
          "type": "bytes"
        }
      ],
      "name": "signatureRecovery",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "threshold",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "weight",
          "type": "uint256"
        },
        {
          "internalType": "bytes32",
          "name": "imageHash",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "subdigest",
          "type": "bytes32"
        },
        {
          "internalType": "uint256",
          "name": "checkpoint",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "bool",
              "name": "delegateCall",
              "type": "bool"
            },
            {
              "internalType": "bool",
              "name": "revertOnError",
              "type": "bool"
            },
            {
              "internalType": "uint256",
              "name": "gasLimit",
              "type": "uint256"
            },
            {
              "internalType": "address",
              "name": "target",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "value",
              "type": "uint256"
            },
            {
              "internalType": "bytes",
              "name": "data",
              "type": "bytes"
            }
          ],
          "internalType": "struct IModuleCalls.Transaction[]",
          "name": "_txs",
          "type": "tuple[]"
        }
      ],
      "name": "simulateExecute",
      "outputs": [
        {
          "components": [
            {
              "internalType": "bool",
              "name": "executed",
              "type": "bool"
            },
            {
              "internalType": "bool",
              "name": "succeeded",
              "type": "bool"
            },
            {
              "internalType": "bytes",
              "name": "result",
              "type": "bytes"
            },
            {
              "internalType": "uint256",
              "name": "gasUsed",
              "type": "uint256"
            }
          ],
          "internalType": "struct MainModuleGasEstimation.SimulateResult[]",
          "name": "",
          "type": "tuple[]"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "_interfaceID",
          "type": "bytes4"
        }
      ],
      "name": "supportsInterface",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_imageHash",
          "type": "bytes32"
        }
      ],
      "name": "updateImageHash",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_implementation",
          "type": "address"
        }
      ],
      "name": "updateImplementation",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "stateMutability": "payable",
      "type": "receive"
    }
  ],
  "bytecode": "0x60a060405234801561001057600080fd5b5030608052608051613416610030600039600061092601526134166000f3fe6080604052600436106101635760003560e01c806361c2926c116100c057806390042baf11610074578063b93ea7ad11610059578063b93ea7ad1461052c578063bc197c811461054c578063f23a6e61146105945761016a565b806390042baf14610504578063affed0e0146105175761016a565b806384dc463c116100a557806384dc463c1461046f578063853c50681461049c5780638c3f5563146104e45761016a565b806361c2926c1461042f5780637a9a16281461044f5761016a565b806320c13b0b116101175780634fcf3eca116100fc5780634fcf3eca146103b857806351605d80146103d857806357c56d6b146103fb5761016a565b806320c13b0b1461037857806329561426146103985761016a565b8063150b7a0211610148578063150b7a021461029d5780631626ba7e146103135780631a9b2337146103335761016a565b806301ffc9a714610248578063025b22bc1461027d5761016a565b3661016a57005b600436106102465760006101a16000357fffffffff00000000000000000000000000000000000000000000000000000000166105da565b905073ffffffffffffffffffffffffffffffffffffffff811615610244576000808273ffffffffffffffffffffffffffffffffffffffff166000366040516101ea92919061287c565b600060405180830381855af49150503d8060008114610225576040519150601f19603f3d011682016040523d82523d6000602084013e61022a565b606091505b50915091508161023c57805160208201fd5b805160208201f35b505b005b34801561025457600080fd5b506102686102633660046128ba565b61062e565b60405190151581526020015b60405180910390f35b34801561028957600080fd5b50610246610298366004612900565b610639565b3480156102a957600080fd5b506102e26102b8366004612964565b7f150b7a020000000000000000000000000000000000000000000000000000000095945050505050565b6040517fffffffff000000000000000000000000000000000000000000000000000000009091168152602001610274565b34801561031f57600080fd5b506102e261032e3660046129d3565b61068b565b34801561033f57600080fd5b5061035361034e3660046128ba565b6106d8565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610274565b34801561038457600080fd5b506102e2610393366004612a1f565b6106e3565b3480156103a457600080fd5b506102466103b3366004612a8b565b610748565b3480156103c457600080fd5b506102466103d33660046128ba565b610792565b3480156103e457600080fd5b506103ed61085a565b604051908152602001610274565b34801561040757600080fd5b506103ed7f8713a7c4465f6fbee2b6e9d6646d1d9f83fec929edfc4baf661f3c865bdd04d181565b34801561043b57600080fd5b5061024661044a366004612ae9565b610889565b34801561045b57600080fd5b5061024661046a366004612b2b565b61090f565b34801561047b57600080fd5b5061048f61048a366004612ae9565b610a14565b6040516102749190612bf8565b3480156104a857600080fd5b506104bc6104b73660046129d3565b610e62565b604080519586526020860194909452928401919091526060830152608082015260a001610274565b3480156104f057600080fd5b506103ed6104ff366004612a8b565b61102a565b610353610512366004612cd5565b611056565b34801561052357600080fd5b506103ed611140565b34801561053857600080fd5b50610246610547366004612da4565b61114c565b34801561055857600080fd5b506102e2610567366004612dd9565b7fbc197c810000000000000000000000000000000000000000000000000000000098975050505050505050565b3480156105a057600080fd5b506102e26105af366004612e94565b7ff23a6e61000000000000000000000000000000000000000000000000000000009695505050505050565b60006106287fbe27a319efc8734e89e26ba4bc95f5c788584163b959f03fa04e2d7ab4b9a1207fffffffff000000000000000000000000000000000000000000000000000000008416611217565b92915050565b600061062882611275565b33301461067f576040517fe12588940000000000000000000000000000000000000000000000000000000081523360048201523060248201526044015b60405180910390fd5b610688816112d1565b50565b60008061069985858561138c565b50905080156106cb57507f1626ba7e0000000000000000000000000000000000000000000000000000000090506106d1565b50600090505b9392505050565b6000610628826105da565b60008061070886866040516106f992919061287c565b6040518091039020858561138c565b509050801561073a57507f20c13b0b000000000000000000000000000000000000000000000000000000009050610740565b50600090505b949350505050565b333014610789576040517fe1258894000000000000000000000000000000000000000000000000000000008152336004820152306024820152604401610676565b610688816113ca565b3330146107d3576040517fe1258894000000000000000000000000000000000000000000000000000000008152336004820152306024820152604401610676565b60006107de826105da565b73ffffffffffffffffffffffffffffffffffffffff160361084f576040517f1c3812cc0000000000000000000000000000000000000000000000000000000081527fffffffff0000000000000000000000000000000000000000000000000000000082166004820152602401610676565b61068881600061145a565b60006108847fea7157fa25e3aa17d0ae2d5280fa4e24d421c61842aa85e45194e1145aa72bf85490565b905090565b3330146108ca576040517fe1258894000000000000000000000000000000000000000000000000000000008152336004820152306024820152604401610676565b60006108fd83836040516020016108e29291906130b4565b6040516020818303038152906040528051906020012061151a565b905061090a81848461159f565b505050565b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016300361097e576040517f0a57d61d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61098783611727565b6000806109bf8588886040516020016109a2939291906130fc565b60405160208183030381529060405280519060200120858561138c565b9150915081610a00578084846040517f8f4a234f0000000000000000000000000000000000000000000000000000000081526004016106769392919061311f565b610a0b81888861159f565b50505050505050565b606060008267ffffffffffffffff811115610a3157610a31612ca6565b604051908082528060200260200182016040528015610a9157816020015b610a7e604051806080016040528060001515815260200160001515815260200160608152602001600081525090565b815260200190600190039081610a4f5790505b5090508260005b81811015610e585736868683818110610ab357610ab3613139565b9050602002810190610ac59190613168565b90506000816040013590506001858481518110610ae457610ae4613139565b60209081029190910101519015159052805a1015610be6576000858481518110610b1057610b10613139565b6020908102919091018101519115159101527f2bb3e3ba0000000000000000000000000000000000000000000000000000000083825a604051602481019390935260448301919091526064820152608401604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050858481518110610bd057610bd0613139565b6020026020010151604001819052505050610e58565b610bf360208301836131a6565b15610d005760005a9050610c0d6080840160608501612900565b73ffffffffffffffffffffffffffffffffffffffff168215610c2f5782610c31565b5a5b610c3e60a08601866131c1565b604051610c4c92919061287c565b6000604051808303818686f4925050503d8060008114610c88576040519150601f19603f3d011682016040523d82523d6000602084013e610c8d565b606091505b50878681518110610ca057610ca0613139565b6020026020010151602001888781518110610cbd57610cbd613139565b6020026020010151604001829052821515151581525050505a8103868581518110610cea57610cea613139565b6020026020010151606001818152505050610e0c565b60005a9050610d156080840160608501612900565b73ffffffffffffffffffffffffffffffffffffffff1660808401358315610d3c5783610d3e565b5a5b90610d4c60a08701876131c1565b604051610d5a92919061287c565b600060405180830381858888f193505050503d8060008114610d98576040519150601f19603f3d011682016040523d82523d6000602084013e610d9d565b606091505b50878681518110610db057610db0613139565b6020026020010151602001888781518110610dcd57610dcd613139565b6020026020010151604001829052821515151581525050505a8103868581518110610dfa57610dfa613139565b60200260200101516060018181525050505b848381518110610e1e57610e1e613139565b602002602001015160200151158015610e425750610e4260408301602084016131a6565b15610e4e575050610e58565b5050600101610a98565b5090949350505050565b60008060008060008087876000818110610e7e57610e7e613139565b909101357fff00000000000000000000000000000000000000000000000000000000000000169150819050610ed457610eb68961151a565b9250610ec3838989611830565b9298509096509450915061101f9050565b7fff0000000000000000000000000000000000000000000000000000000000000081811601610f1357610f068961151a565b9250610ec3838989611881565b7ffe000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000821601610f6557610f06896118ad565b7ffd000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000821601610fc957610fb989898961191a565b955095509550955095505061101f565b6040517f6085cd820000000000000000000000000000000000000000000000000000000081527fff0000000000000000000000000000000000000000000000000000000000000082166004820152602401610676565b939792965093509350565b60006106287f8d0bf1fd623d628c741362c1289948e57b3e2905218c676d3e69abee36d6ae2e83611217565b6000333014611099576040517fe1258894000000000000000000000000000000000000000000000000000000008152336004820152306024820152604401610676565b81516020830134f0905073ffffffffffffffffffffffffffffffffffffffff81166110f257816040517f0d2571910000000000000000000000000000000000000000000000000000000081526004016106769190613226565b60405173ffffffffffffffffffffffffffffffffffffffff821681527fa506ad4e7f05eceba62a023c3219e5bd98a615f4fa87e2afb08a2da5cf62bf0c9060200160405180910390a1919050565b6000610884600061102a565b33301461118d576040517fe1258894000000000000000000000000000000000000000000000000000000008152336004820152306024820152604401610676565b6000611198836105da565b73ffffffffffffffffffffffffffffffffffffffff1614611209576040517f5b4d6d6a0000000000000000000000000000000000000000000000000000000081527fffffffff0000000000000000000000000000000000000000000000000000000083166004820152602401610676565b611213828261145a565b5050565b6000808383604051602001611236929190918252602082015260400190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052805160209091012054949350505050565b60007f6ffbd451000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316016112c857506001919050565b61062882611a97565b73ffffffffffffffffffffffffffffffffffffffff81163b611337576040517f0c76093700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602401610676565b61133f813055565b60405173ffffffffffffffffffffffffffffffffffffffff821681527f310ba5f1d2ed074b51e2eccd052a47ae9ab7c6b800d1fca3db3999d6a592ca03906020015b60405180910390a150565b600080600080600061139f888888610e62565b509650919450925090508282108015906113bd57506113bd81611bd8565b9450505050935093915050565b80611401576040517f4294d12700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61142a7fea7157fa25e3aa17d0ae2d5280fa4e24d421c61842aa85e45194e1145aa72bf8829055565b6040518181527f307ed6bd941ee9fc80f369c94af5fa11e25bab5102a6140191756c5474a30bfa90602001611381565b604080517fbe27a319efc8734e89e26ba4bc95f5c788584163b959f03fa04e2d7ab4b9a1206020808301919091527fffffffff000000000000000000000000000000000000000000000000000000008516828401819052835180840385018152606084018086528151919093012073ffffffffffffffffffffffffffffffffffffffff8616908190559152608082015290517f0d7fc113eaf016db4681a1ba86d083ce3e0961f321062a75ac2b0aeb33deeed19181900360a00190a15050565b6040517f190100000000000000000000000000000000000000000000000000000000000060208201524660228201527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003060601b166042820152605681018290526000906076015b604051602081830303815290604052805190602001209050919050565b8060005b8181101561172057368484838181106115be576115be613139565b90506020028101906115d09190613168565b90506040810135805a10156116255782815a6040517f2bb3e3ba000000000000000000000000000000000000000000000000000000008152600481019390935260248301919091526044820152606401610676565b600061163460208401846131a6565b156116735761166c61164c6080850160608601612900565b8315611658578361165a565b5a5b61166760a08701876131c1565b611be3565b90506116ae565b6116ab6116866080850160608601612900565b608085013584156116975784611699565b5a5b6116a660a08801886131c1565b611bfe565b90505b80156116f357877f5c4eeb02dabf8976016ab414d617f9a162936dcace3cdef8c69ef6e262ad5ae7856040516116e691815260200190565b60405180910390a2611715565b61171561170660408501602086016131a6565b8986611710611c1b565b611c3a565b5050506001016115a3565b5050505050565b606081901c6bffffffffffffffffffffffff821660006117468361102a565b9050818114158015611756575060005b1561179e576040517f9b6514f4000000000000000000000000000000000000000000000000000000008152600481018490526024810183905260448101829052606401610676565b604080517f8d0bf1fd623d628c741362c1289948e57b3e2905218c676d3e69abee36d6ae2e60208083019190915281830186905282518083038401815260609092019092528051910120600183019081905560408051858152602081018390527f1f180c27086c7a39ea2a7b25239d1ab92348f07ca7bb59d1438fcf527568f881910160405180910390a15050505050565b600080808061184b87611846876006818b613239565b611c88565b6000908152873560f01c6020818152604080842084526002909a013560e01c908190529890912090999198509695509350505050565b600080808061189c87611897876001818b613239565b611830565b935093509350935093509350935093565b6040517f190100000000000000000000000000000000000000000000000000000000000060208201526000602282018190527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003060601b1660428301526056820183905290607601611582565b6000808080806004600188013560e81c826119358383613292565b90506119478b6104b783868d8f613239565b939b509199509750955093508787101561199f5761196781848b8d613239565b89896040517fb006aba000000000000000000000000000000000000000000000000000000000815260040161067694939291906132a5565b8092505b88831015611a895760038301928a013560e81c91506119c28383613292565b905060006119e46119d28861211e565b8c8c879086926104b793929190613239565b939c50919a5098509091505088881015611a3c57611a0482858c8e613239565b8a8a6040517fb006aba000000000000000000000000000000000000000000000000000000000815260040161067694939291906132a5565b848110611a7f576040517f37daf62b0000000000000000000000000000000000000000000000000000000081526004810182905260248101869052604401610676565b93509150816119a3565b505050939792965093509350565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167fec6aba50000000000000000000000000000000000000000000000000000000001480611b2a57507fffffffff0000000000000000000000000000000000000000000000000000000082167f4e2312e000000000000000000000000000000000000000000000000000000000145b80611b7657507fffffffff0000000000000000000000000000000000000000000000000000000082167f150b7a0200000000000000000000000000000000000000000000000000000000145b80611bc257507fffffffff0000000000000000000000000000000000000000000000000000000082167fc0ee0b8a00000000000000000000000000000000000000000000000000000000145b15611bcf57506001919050565b61062882612152565b6000610628826121ae565b60006040518284823760008084838989f49695505050505050565b6000604051828482376000808483898b8af1979650505050505050565b60603d604051915060208201818101604052818352816000823e505090565b8315611c4857805160208201fd5b827fab46c69f7f32e1bf09b0725853da82a211e5402a0600296ab499a2fb5ea3b4198383604051611c7a9291906132cc565b60405180910390a250505050565b60008060005b8381101561211557600181019085013560f81c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101611d2f57601582019186013560f881901c9060581c73ffffffffffffffffffffffffffffffffffffffff81169074ff000000000000000000000000000000000000000016811785611d155780611d24565b60008681526020829052604090205b955050505050611c8e565b80611dc55760018201918681013560f81c906043016000611d5b8a611d5684888c8e613239565b6121c7565b60ff841697909701969194508491905060a083901b74ff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff82161786611daa5780611db9565b60008781526020829052604090205b96505050505050611c8e565b60028103611eed576000808784013560f881901c9060581c73ffffffffffffffffffffffffffffffffffffffff16601586019550909250905060008885013560e81c600386018162ffffff169150809650819250505060008186019050611e3e8b848c8c8a908692611e3993929190613239565b61248a565b611e86578a83611e5083898d8f613239565b6040517f9a94623200000000000000000000000000000000000000000000000000000000815260040161067694939291906132e5565b60ff8416979097019694508460a084901b74ff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161787611ed15780611ee0565b60008881526020829052604090205b9750505050505050611c8e565b60038103611f2057602082019186013583611f085780611f17565b60008481526020829052604090205b93505050611c8e565b60048103611f6c576003808301928781013560e81c9190820101600080611f4d8b61184685898d8f613239565b60009889526020526040909720969097019650909350611c8e92505050565b600681036120745760008287013560f81c60018401935060ff16905060008784013560f01c60028501945061ffff16905060008885013560e81c600386018162ffffff169150809650819250505060008186019050600080611fda8d8d8d8b90879261184693929190613239565b93985088939092509050848210611ff057988501985b604080517f53657175656e6365206e657374656420636f6e6669673a0a0000000000000000602080830191909152603882018490526058820188905260788083018a90528351808403909101815260989092019092528051910120896120565780612065565b60008a81526020829052604090205b99505050505050505050611c8e565b600581036120e05760208201918601358781036120af577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff94505b60006120ba82612671565b9050846120c757806120d6565b60008581526020829052604090205b9450505050611c8e565b6040517fb2505f7c00000000000000000000000000000000000000000000000000000000815260048101829052602401610676565b50935093915050565b7f8713a7c4465f6fbee2b6e9d6646d1d9f83fec929edfc4baf661f3c865bdd04d16000908152602082905260408120610628565b60007ffda4dd44000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316016121a557506001919050565b610628826126ac565b60006121b982612708565b806106285750600192915050565b6000604282146122075782826040517f2ee17a3d000000000000000000000000000000000000000000000000000000008152600401610676929190613325565b6000612220612217600185613339565b85013560f81c90565b60ff169050604084013560f81c843560208601357f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0811115612294578686826040517fad4aac760000000000000000000000000000000000000000000000000000000081526004016106769392919061334c565b8260ff16601b141580156122ac57508260ff16601c14155b156122e9578686846040517fe578897e00000000000000000000000000000000000000000000000000000000815260040161067693929190613370565b60018403612356576040805160008152602081018083528a905260ff851691810191909152606081018390526080810182905260019060a0015b6020604051602081039080840390855afa158015612345573d6000803e3d6000fd5b50505060206040510351945061242e565b600284036123f3576040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101899052600190605c01604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600084529083018083525260ff861690820152606081018490526080810183905260a001612323565b86868560016040517f9dfba8520000000000000000000000000000000000000000000000000000000081526004016106769493929190613397565b73ffffffffffffffffffffffffffffffffffffffff851661247f5786866040517f6c1719d2000000000000000000000000000000000000000000000000000000008152600401610676929190613325565b505050509392505050565b60008181036124c5576040517fac241e1100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600083836124d4600182613339565b8181106124e3576124e3613139565b919091013560f81c91505060018114806124fd5750600281145b15612542578473ffffffffffffffffffffffffffffffffffffffff166125248786866121c7565b73ffffffffffffffffffffffffffffffffffffffff16149150612668565b6003810361262d5773ffffffffffffffffffffffffffffffffffffffff8516631626ba7e8786600087612576600182613339565b9261258393929190613239565b6040518463ffffffff1660e01b81526004016125a19392919061311f565b602060405180830381865afa1580156125be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125e291906133c3565b7fffffffff00000000000000000000000000000000000000000000000000000000167f1626ba7e00000000000000000000000000000000000000000000000000000000149150612668565b83838260006040517f9dfba8520000000000000000000000000000000000000000000000000000000081526004016106769493929190613397565b50949350505050565b6040517f53657175656e636520737461746963206469676573743a0a0000000000000000602082015260388101829052600090605801611582565b60007fe4a77bbc000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316016126ff57506001919050565b6106288261273b565b600081158015906106285750507fea7157fa25e3aa17d0ae2d5280fa4e24d421c61842aa85e45194e1145aa72bf8541490565b60007fae9fa280000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000083160161278e57506001919050565b6106288260007fffffffff0000000000000000000000000000000000000000000000000000000082167fac6a444e00000000000000000000000000000000000000000000000000000000148061282557507fffffffff0000000000000000000000000000000000000000000000000000000082167f36e7817500000000000000000000000000000000000000000000000000000000145b1561283257506001919050565b7f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614610628565b8183823760009101908152919050565b7fffffffff000000000000000000000000000000000000000000000000000000008116811461068857600080fd5b6000602082840312156128cc57600080fd5b81356106d18161288c565b803573ffffffffffffffffffffffffffffffffffffffff811681146128fb57600080fd5b919050565b60006020828403121561291257600080fd5b6106d1826128d7565b60008083601f84011261292d57600080fd5b50813567ffffffffffffffff81111561294557600080fd5b60208301915083602082850101111561295d57600080fd5b9250929050565b60008060008060006080868803121561297c57600080fd5b612985866128d7565b9450612993602087016128d7565b935060408601359250606086013567ffffffffffffffff8111156129b657600080fd5b6129c28882890161291b565b969995985093965092949392505050565b6000806000604084860312156129e857600080fd5b83359250602084013567ffffffffffffffff811115612a0657600080fd5b612a128682870161291b565b9497909650939450505050565b60008060008060408587031215612a3557600080fd5b843567ffffffffffffffff80821115612a4d57600080fd5b612a598883890161291b565b90965094506020870135915080821115612a7257600080fd5b50612a7f8782880161291b565b95989497509550505050565b600060208284031215612a9d57600080fd5b5035919050565b60008083601f840112612ab657600080fd5b50813567ffffffffffffffff811115612ace57600080fd5b6020830191508360208260051b850101111561295d57600080fd5b60008060208385031215612afc57600080fd5b823567ffffffffffffffff811115612b1357600080fd5b612b1f85828601612aa4565b90969095509350505050565b600080600080600060608688031215612b4357600080fd5b853567ffffffffffffffff80821115612b5b57600080fd5b612b6789838a01612aa4565b9097509550602088013594506040880135915080821115612b8757600080fd5b506129c28882890161291b565b6000815180845260005b81811015612bba57602081850181015186830182015201612b9e565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b83811015612c98577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08984030185528151608081511515855288820151151589860152878201518189870152612c7782870182612b94565b60609384015196909301959095525094870194925090860190600101612c1f565b509098975050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060208284031215612ce757600080fd5b813567ffffffffffffffff80821115612cff57600080fd5b818401915084601f830112612d1357600080fd5b813581811115612d2557612d25612ca6565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715612d6b57612d6b612ca6565b81604052828152876020848701011115612d8457600080fd5b826020860160208301376000928101602001929092525095945050505050565b60008060408385031215612db757600080fd5b8235612dc28161288c565b9150612dd0602084016128d7565b90509250929050565b60008060008060008060008060a0898b031215612df557600080fd5b612dfe896128d7565b9750612e0c60208a016128d7565b9650604089013567ffffffffffffffff80821115612e2957600080fd5b612e358c838d01612aa4565b909850965060608b0135915080821115612e4e57600080fd5b612e5a8c838d01612aa4565b909650945060808b0135915080821115612e7357600080fd5b50612e808b828c0161291b565b999c989b5096995094979396929594505050565b60008060008060008060a08789031215612ead57600080fd5b612eb6876128d7565b9550612ec4602088016128d7565b94506040870135935060608701359250608087013567ffffffffffffffff811115612eee57600080fd5b612efa89828a0161291b565b979a9699509497509295939492505050565b803580151581146128fb57600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b81835260006020808501808196508560051b810191508460005b878110156130a757828403895281357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41883603018112612fbe57600080fd5b870160c0612fcb82612f0c565b15158652612fda878301612f0c565b15158688015260408281013590870152606073ffffffffffffffffffffffffffffffffffffffff61300c8285016128d7565b16908701526080828101359087015260a080830135368490037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe101811261305257600080fd5b90920187810192903567ffffffffffffffff81111561307057600080fd5b80360384131561307f57600080fd5b82828901526130918389018286612f1c565b9c89019c97505050928601925050600101612f7f565b5091979650505050505050565b60408152600560408201527f73656c663a0000000000000000000000000000000000000000000000000000006060820152608060208201526000610740608083018486612f65565b838152604060208201526000613116604083018486612f65565b95945050505050565b838152604060208201526000613116604083018486612f1c565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4183360301811261319c57600080fd5b9190910192915050565b6000602082840312156131b857600080fd5b6106d182612f0c565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126131f657600080fd5b83018035915067ffffffffffffffff82111561321157600080fd5b60200191503681900382131561295d57600080fd5b6020815260006106d16020830184612b94565b6000808585111561324957600080fd5b8386111561325657600080fd5b5050820193919092039150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8082018082111561062857610628613263565b6060815260006132b9606083018688612f1c565b6020830194909452506040015292915050565b8281526040602082015260006107406040830184612b94565b84815273ffffffffffffffffffffffffffffffffffffffff8416602082015260606040820152600061331b606083018486612f1c565b9695505050505050565b602081526000610740602083018486612f1c565b8181038181111561062857610628613263565b604081526000613360604083018587612f1c565b9050826020830152949350505050565b604081526000613384604083018587612f1c565b905060ff83166020830152949350505050565b6060815260006133ab606083018688612f1c565b60208301949094525090151560409091015292915050565b6000602082840312156133d557600080fd5b81516106d18161288c56fea26469706673582212205a5985db752c6fc288b19f644f9ec27c46082e16499e99894dd4bf89106b3c7264736f6c63430008120033",
  "deployedBytecode": "0x6080604052600436106101635760003560e01c806361c2926c116100c057806390042baf11610074578063b93ea7ad11610059578063b93ea7ad1461052c578063bc197c811461054c578063f23a6e61146105945761016a565b806390042baf14610504578063affed0e0146105175761016a565b806384dc463c116100a557806384dc463c1461046f578063853c50681461049c5780638c3f5563146104e45761016a565b806361c2926c1461042f5780637a9a16281461044f5761016a565b806320c13b0b116101175780634fcf3eca116100fc5780634fcf3eca146103b857806351605d80146103d857806357c56d6b146103fb5761016a565b806320c13b0b1461037857806329561426146103985761016a565b8063150b7a0211610148578063150b7a021461029d5780631626ba7e146103135780631a9b2337146103335761016a565b806301ffc9a714610248578063025b22bc1461027d5761016a565b3661016a57005b600436106102465760006101a16000357fffffffff00000000000000000000000000000000000000000000000000000000166105da565b905073ffffffffffffffffffffffffffffffffffffffff811615610244576000808273ffffffffffffffffffffffffffffffffffffffff166000366040516101ea92919061287c565b600060405180830381855af49150503d8060008114610225576040519150601f19603f3d011682016040523d82523d6000602084013e61022a565b606091505b50915091508161023c57805160208201fd5b805160208201f35b505b005b34801561025457600080fd5b506102686102633660046128ba565b61062e565b60405190151581526020015b60405180910390f35b34801561028957600080fd5b50610246610298366004612900565b610639565b3480156102a957600080fd5b506102e26102b8366004612964565b7f150b7a020000000000000000000000000000000000000000000000000000000095945050505050565b6040517fffffffff000000000000000000000000000000000000000000000000000000009091168152602001610274565b34801561031f57600080fd5b506102e261032e3660046129d3565b61068b565b34801561033f57600080fd5b5061035361034e3660046128ba565b6106d8565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610274565b34801561038457600080fd5b506102e2610393366004612a1f565b6106e3565b3480156103a457600080fd5b506102466103b3366004612a8b565b610748565b3480156103c457600080fd5b506102466103d33660046128ba565b610792565b3480156103e457600080fd5b506103ed61085a565b604051908152602001610274565b34801561040757600080fd5b506103ed7f8713a7c4465f6fbee2b6e9d6646d1d9f83fec929edfc4baf661f3c865bdd04d181565b34801561043b57600080fd5b5061024661044a366004612ae9565b610889565b34801561045b57600080fd5b5061024661046a366004612b2b565b61090f565b34801561047b57600080fd5b5061048f61048a366004612ae9565b610a14565b6040516102749190612bf8565b3480156104a857600080fd5b506104bc6104b73660046129d3565b610e62565b604080519586526020860194909452928401919091526060830152608082015260a001610274565b3480156104f057600080fd5b506103ed6104ff366004612a8b565b61102a565b610353610512366004612cd5565b611056565b34801561052357600080fd5b506103ed611140565b34801561053857600080fd5b50610246610547366004612da4565b61114c565b34801561055857600080fd5b506102e2610567366004612dd9565b7fbc197c810000000000000000000000000000000000000000000000000000000098975050505050505050565b3480156105a057600080fd5b506102e26105af366004612e94565b7ff23a6e61000000000000000000000000000000000000000000000000000000009695505050505050565b60006106287fbe27a319efc8734e89e26ba4bc95f5c788584163b959f03fa04e2d7ab4b9a1207fffffffff000000000000000000000000000000000000000000000000000000008416611217565b92915050565b600061062882611275565b33301461067f576040517fe12588940000000000000000000000000000000000000000000000000000000081523360048201523060248201526044015b60405180910390fd5b610688816112d1565b50565b60008061069985858561138c565b50905080156106cb57507f1626ba7e0000000000000000000000000000000000000000000000000000000090506106d1565b50600090505b9392505050565b6000610628826105da565b60008061070886866040516106f992919061287c565b6040518091039020858561138c565b509050801561073a57507f20c13b0b000000000000000000000000000000000000000000000000000000009050610740565b50600090505b949350505050565b333014610789576040517fe1258894000000000000000000000000000000000000000000000000000000008152336004820152306024820152604401610676565b610688816113ca565b3330146107d3576040517fe1258894000000000000000000000000000000000000000000000000000000008152336004820152306024820152604401610676565b60006107de826105da565b73ffffffffffffffffffffffffffffffffffffffff160361084f576040517f1c3812cc0000000000000000000000000000000000000000000000000000000081527fffffffff0000000000000000000000000000000000000000000000000000000082166004820152602401610676565b61068881600061145a565b60006108847fea7157fa25e3aa17d0ae2d5280fa4e24d421c61842aa85e45194e1145aa72bf85490565b905090565b3330146108ca576040517fe1258894000000000000000000000000000000000000000000000000000000008152336004820152306024820152604401610676565b60006108fd83836040516020016108e29291906130b4565b6040516020818303038152906040528051906020012061151a565b905061090a81848461159f565b505050565b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016300361097e576040517f0a57d61d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61098783611727565b6000806109bf8588886040516020016109a2939291906130fc565b60405160208183030381529060405280519060200120858561138c565b9150915081610a00578084846040517f8f4a234f0000000000000000000000000000000000000000000000000000000081526004016106769392919061311f565b610a0b81888861159f565b50505050505050565b606060008267ffffffffffffffff811115610a3157610a31612ca6565b604051908082528060200260200182016040528015610a9157816020015b610a7e604051806080016040528060001515815260200160001515815260200160608152602001600081525090565b815260200190600190039081610a4f5790505b5090508260005b81811015610e585736868683818110610ab357610ab3613139565b9050602002810190610ac59190613168565b90506000816040013590506001858481518110610ae457610ae4613139565b60209081029190910101519015159052805a1015610be6576000858481518110610b1057610b10613139565b6020908102919091018101519115159101527f2bb3e3ba0000000000000000000000000000000000000000000000000000000083825a604051602481019390935260448301919091526064820152608401604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050858481518110610bd057610bd0613139565b6020026020010151604001819052505050610e58565b610bf360208301836131a6565b15610d005760005a9050610c0d6080840160608501612900565b73ffffffffffffffffffffffffffffffffffffffff168215610c2f5782610c31565b5a5b610c3e60a08601866131c1565b604051610c4c92919061287c565b6000604051808303818686f4925050503d8060008114610c88576040519150601f19603f3d011682016040523d82523d6000602084013e610c8d565b606091505b50878681518110610ca057610ca0613139565b6020026020010151602001888781518110610cbd57610cbd613139565b6020026020010151604001829052821515151581525050505a8103868581518110610cea57610cea613139565b6020026020010151606001818152505050610e0c565b60005a9050610d156080840160608501612900565b73ffffffffffffffffffffffffffffffffffffffff1660808401358315610d3c5783610d3e565b5a5b90610d4c60a08701876131c1565b604051610d5a92919061287c565b600060405180830381858888f193505050503d8060008114610d98576040519150601f19603f3d011682016040523d82523d6000602084013e610d9d565b606091505b50878681518110610db057610db0613139565b6020026020010151602001888781518110610dcd57610dcd613139565b6020026020010151604001829052821515151581525050505a8103868581518110610dfa57610dfa613139565b60200260200101516060018181525050505b848381518110610e1e57610e1e613139565b602002602001015160200151158015610e425750610e4260408301602084016131a6565b15610e4e575050610e58565b5050600101610a98565b5090949350505050565b60008060008060008087876000818110610e7e57610e7e613139565b909101357fff00000000000000000000000000000000000000000000000000000000000000169150819050610ed457610eb68961151a565b9250610ec3838989611830565b9298509096509450915061101f9050565b7fff0000000000000000000000000000000000000000000000000000000000000081811601610f1357610f068961151a565b9250610ec3838989611881565b7ffe000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000821601610f6557610f06896118ad565b7ffd000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000821601610fc957610fb989898961191a565b955095509550955095505061101f565b6040517f6085cd820000000000000000000000000000000000000000000000000000000081527fff0000000000000000000000000000000000000000000000000000000000000082166004820152602401610676565b939792965093509350565b60006106287f8d0bf1fd623d628c741362c1289948e57b3e2905218c676d3e69abee36d6ae2e83611217565b6000333014611099576040517fe1258894000000000000000000000000000000000000000000000000000000008152336004820152306024820152604401610676565b81516020830134f0905073ffffffffffffffffffffffffffffffffffffffff81166110f257816040517f0d2571910000000000000000000000000000000000000000000000000000000081526004016106769190613226565b60405173ffffffffffffffffffffffffffffffffffffffff821681527fa506ad4e7f05eceba62a023c3219e5bd98a615f4fa87e2afb08a2da5cf62bf0c9060200160405180910390a1919050565b6000610884600061102a565b33301461118d576040517fe1258894000000000000000000000000000000000000000000000000000000008152336004820152306024820152604401610676565b6000611198836105da565b73ffffffffffffffffffffffffffffffffffffffff1614611209576040517f5b4d6d6a0000000000000000000000000000000000000000000000000000000081527fffffffff0000000000000000000000000000000000000000000000000000000083166004820152602401610676565b611213828261145a565b5050565b6000808383604051602001611236929190918252602082015260400190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052805160209091012054949350505050565b60007f6ffbd451000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316016112c857506001919050565b61062882611a97565b73ffffffffffffffffffffffffffffffffffffffff81163b611337576040517f0c76093700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602401610676565b61133f813055565b60405173ffffffffffffffffffffffffffffffffffffffff821681527f310ba5f1d2ed074b51e2eccd052a47ae9ab7c6b800d1fca3db3999d6a592ca03906020015b60405180910390a150565b600080600080600061139f888888610e62565b509650919450925090508282108015906113bd57506113bd81611bd8565b9450505050935093915050565b80611401576040517f4294d12700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61142a7fea7157fa25e3aa17d0ae2d5280fa4e24d421c61842aa85e45194e1145aa72bf8829055565b6040518181527f307ed6bd941ee9fc80f369c94af5fa11e25bab5102a6140191756c5474a30bfa90602001611381565b604080517fbe27a319efc8734e89e26ba4bc95f5c788584163b959f03fa04e2d7ab4b9a1206020808301919091527fffffffff000000000000000000000000000000000000000000000000000000008516828401819052835180840385018152606084018086528151919093012073ffffffffffffffffffffffffffffffffffffffff8616908190559152608082015290517f0d7fc113eaf016db4681a1ba86d083ce3e0961f321062a75ac2b0aeb33deeed19181900360a00190a15050565b6040517f190100000000000000000000000000000000000000000000000000000000000060208201524660228201527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003060601b166042820152605681018290526000906076015b604051602081830303815290604052805190602001209050919050565b8060005b8181101561172057368484838181106115be576115be613139565b90506020028101906115d09190613168565b90506040810135805a10156116255782815a6040517f2bb3e3ba000000000000000000000000000000000000000000000000000000008152600481019390935260248301919091526044820152606401610676565b600061163460208401846131a6565b156116735761166c61164c6080850160608601612900565b8315611658578361165a565b5a5b61166760a08701876131c1565b611be3565b90506116ae565b6116ab6116866080850160608601612900565b608085013584156116975784611699565b5a5b6116a660a08801886131c1565b611bfe565b90505b80156116f357877f5c4eeb02dabf8976016ab414d617f9a162936dcace3cdef8c69ef6e262ad5ae7856040516116e691815260200190565b60405180910390a2611715565b61171561170660408501602086016131a6565b8986611710611c1b565b611c3a565b5050506001016115a3565b5050505050565b606081901c6bffffffffffffffffffffffff821660006117468361102a565b9050818114158015611756575060005b1561179e576040517f9b6514f4000000000000000000000000000000000000000000000000000000008152600481018490526024810183905260448101829052606401610676565b604080517f8d0bf1fd623d628c741362c1289948e57b3e2905218c676d3e69abee36d6ae2e60208083019190915281830186905282518083038401815260609092019092528051910120600183019081905560408051858152602081018390527f1f180c27086c7a39ea2a7b25239d1ab92348f07ca7bb59d1438fcf527568f881910160405180910390a15050505050565b600080808061184b87611846876006818b613239565b611c88565b6000908152873560f01c6020818152604080842084526002909a013560e01c908190529890912090999198509695509350505050565b600080808061189c87611897876001818b613239565b611830565b935093509350935093509350935093565b6040517f190100000000000000000000000000000000000000000000000000000000000060208201526000602282018190527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003060601b1660428301526056820183905290607601611582565b6000808080806004600188013560e81c826119358383613292565b90506119478b6104b783868d8f613239565b939b509199509750955093508787101561199f5761196781848b8d613239565b89896040517fb006aba000000000000000000000000000000000000000000000000000000000815260040161067694939291906132a5565b8092505b88831015611a895760038301928a013560e81c91506119c28383613292565b905060006119e46119d28861211e565b8c8c879086926104b793929190613239565b939c50919a5098509091505088881015611a3c57611a0482858c8e613239565b8a8a6040517fb006aba000000000000000000000000000000000000000000000000000000000815260040161067694939291906132a5565b848110611a7f576040517f37daf62b0000000000000000000000000000000000000000000000000000000081526004810182905260248101869052604401610676565b93509150816119a3565b505050939792965093509350565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167fec6aba50000000000000000000000000000000000000000000000000000000001480611b2a57507fffffffff0000000000000000000000000000000000000000000000000000000082167f4e2312e000000000000000000000000000000000000000000000000000000000145b80611b7657507fffffffff0000000000000000000000000000000000000000000000000000000082167f150b7a0200000000000000000000000000000000000000000000000000000000145b80611bc257507fffffffff0000000000000000000000000000000000000000000000000000000082167fc0ee0b8a00000000000000000000000000000000000000000000000000000000145b15611bcf57506001919050565b61062882612152565b6000610628826121ae565b60006040518284823760008084838989f49695505050505050565b6000604051828482376000808483898b8af1979650505050505050565b60603d604051915060208201818101604052818352816000823e505090565b8315611c4857805160208201fd5b827fab46c69f7f32e1bf09b0725853da82a211e5402a0600296ab499a2fb5ea3b4198383604051611c7a9291906132cc565b60405180910390a250505050565b60008060005b8381101561211557600181019085013560f81c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101611d2f57601582019186013560f881901c9060581c73ffffffffffffffffffffffffffffffffffffffff81169074ff000000000000000000000000000000000000000016811785611d155780611d24565b60008681526020829052604090205b955050505050611c8e565b80611dc55760018201918681013560f81c906043016000611d5b8a611d5684888c8e613239565b6121c7565b60ff841697909701969194508491905060a083901b74ff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff82161786611daa5780611db9565b60008781526020829052604090205b96505050505050611c8e565b60028103611eed576000808784013560f881901c9060581c73ffffffffffffffffffffffffffffffffffffffff16601586019550909250905060008885013560e81c600386018162ffffff169150809650819250505060008186019050611e3e8b848c8c8a908692611e3993929190613239565b61248a565b611e86578a83611e5083898d8f613239565b6040517f9a94623200000000000000000000000000000000000000000000000000000000815260040161067694939291906132e5565b60ff8416979097019694508460a084901b74ff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161787611ed15780611ee0565b60008881526020829052604090205b9750505050505050611c8e565b60038103611f2057602082019186013583611f085780611f17565b60008481526020829052604090205b93505050611c8e565b60048103611f6c576003808301928781013560e81c9190820101600080611f4d8b61184685898d8f613239565b60009889526020526040909720969097019650909350611c8e92505050565b600681036120745760008287013560f81c60018401935060ff16905060008784013560f01c60028501945061ffff16905060008885013560e81c600386018162ffffff169150809650819250505060008186019050600080611fda8d8d8d8b90879261184693929190613239565b93985088939092509050848210611ff057988501985b604080517f53657175656e6365206e657374656420636f6e6669673a0a0000000000000000602080830191909152603882018490526058820188905260788083018a90528351808403909101815260989092019092528051910120896120565780612065565b60008a81526020829052604090205b99505050505050505050611c8e565b600581036120e05760208201918601358781036120af577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff94505b60006120ba82612671565b9050846120c757806120d6565b60008581526020829052604090205b9450505050611c8e565b6040517fb2505f7c00000000000000000000000000000000000000000000000000000000815260048101829052602401610676565b50935093915050565b7f8713a7c4465f6fbee2b6e9d6646d1d9f83fec929edfc4baf661f3c865bdd04d16000908152602082905260408120610628565b60007ffda4dd44000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316016121a557506001919050565b610628826126ac565b60006121b982612708565b806106285750600192915050565b6000604282146122075782826040517f2ee17a3d000000000000000000000000000000000000000000000000000000008152600401610676929190613325565b6000612220612217600185613339565b85013560f81c90565b60ff169050604084013560f81c843560208601357f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0811115612294578686826040517fad4aac760000000000000000000000000000000000000000000000000000000081526004016106769392919061334c565b8260ff16601b141580156122ac57508260ff16601c14155b156122e9578686846040517fe578897e00000000000000000000000000000000000000000000000000000000815260040161067693929190613370565b60018403612356576040805160008152602081018083528a905260ff851691810191909152606081018390526080810182905260019060a0015b6020604051602081039080840390855afa158015612345573d6000803e3d6000fd5b50505060206040510351945061242e565b600284036123f3576040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101899052600190605c01604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600084529083018083525260ff861690820152606081018490526080810183905260a001612323565b86868560016040517f9dfba8520000000000000000000000000000000000000000000000000000000081526004016106769493929190613397565b73ffffffffffffffffffffffffffffffffffffffff851661247f5786866040517f6c1719d2000000000000000000000000000000000000000000000000000000008152600401610676929190613325565b505050509392505050565b60008181036124c5576040517fac241e1100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600083836124d4600182613339565b8181106124e3576124e3613139565b919091013560f81c91505060018114806124fd5750600281145b15612542578473ffffffffffffffffffffffffffffffffffffffff166125248786866121c7565b73ffffffffffffffffffffffffffffffffffffffff16149150612668565b6003810361262d5773ffffffffffffffffffffffffffffffffffffffff8516631626ba7e8786600087612576600182613339565b9261258393929190613239565b6040518463ffffffff1660e01b81526004016125a19392919061311f565b602060405180830381865afa1580156125be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125e291906133c3565b7fffffffff00000000000000000000000000000000000000000000000000000000167f1626ba7e00000000000000000000000000000000000000000000000000000000149150612668565b83838260006040517f9dfba8520000000000000000000000000000000000000000000000000000000081526004016106769493929190613397565b50949350505050565b6040517f53657175656e636520737461746963206469676573743a0a0000000000000000602082015260388101829052600090605801611582565b60007fe4a77bbc000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316016126ff57506001919050565b6106288261273b565b600081158015906106285750507fea7157fa25e3aa17d0ae2d5280fa4e24d421c61842aa85e45194e1145aa72bf8541490565b60007fae9fa280000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000083160161278e57506001919050565b6106288260007fffffffff0000000000000000000000000000000000000000000000000000000082167fac6a444e00000000000000000000000000000000000000000000000000000000148061282557507fffffffff0000000000000000000000000000000000000000000000000000000082167f36e7817500000000000000000000000000000000000000000000000000000000145b1561283257506001919050565b7f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614610628565b8183823760009101908152919050565b7fffffffff000000000000000000000000000000000000000000000000000000008116811461068857600080fd5b6000602082840312156128cc57600080fd5b81356106d18161288c565b803573ffffffffffffffffffffffffffffffffffffffff811681146128fb57600080fd5b919050565b60006020828403121561291257600080fd5b6106d1826128d7565b60008083601f84011261292d57600080fd5b50813567ffffffffffffffff81111561294557600080fd5b60208301915083602082850101111561295d57600080fd5b9250929050565b60008060008060006080868803121561297c57600080fd5b612985866128d7565b9450612993602087016128d7565b935060408601359250606086013567ffffffffffffffff8111156129b657600080fd5b6129c28882890161291b565b969995985093965092949392505050565b6000806000604084860312156129e857600080fd5b83359250602084013567ffffffffffffffff811115612a0657600080fd5b612a128682870161291b565b9497909650939450505050565b60008060008060408587031215612a3557600080fd5b843567ffffffffffffffff80821115612a4d57600080fd5b612a598883890161291b565b90965094506020870135915080821115612a7257600080fd5b50612a7f8782880161291b565b95989497509550505050565b600060208284031215612a9d57600080fd5b5035919050565b60008083601f840112612ab657600080fd5b50813567ffffffffffffffff811115612ace57600080fd5b6020830191508360208260051b850101111561295d57600080fd5b60008060208385031215612afc57600080fd5b823567ffffffffffffffff811115612b1357600080fd5b612b1f85828601612aa4565b90969095509350505050565b600080600080600060608688031215612b4357600080fd5b853567ffffffffffffffff80821115612b5b57600080fd5b612b6789838a01612aa4565b9097509550602088013594506040880135915080821115612b8757600080fd5b506129c28882890161291b565b6000815180845260005b81811015612bba57602081850181015186830182015201612b9e565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b83811015612c98577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08984030185528151608081511515855288820151151589860152878201518189870152612c7782870182612b94565b60609384015196909301959095525094870194925090860190600101612c1f565b509098975050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060208284031215612ce757600080fd5b813567ffffffffffffffff80821115612cff57600080fd5b818401915084601f830112612d1357600080fd5b813581811115612d2557612d25612ca6565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715612d6b57612d6b612ca6565b81604052828152876020848701011115612d8457600080fd5b826020860160208301376000928101602001929092525095945050505050565b60008060408385031215612db757600080fd5b8235612dc28161288c565b9150612dd0602084016128d7565b90509250929050565b60008060008060008060008060a0898b031215612df557600080fd5b612dfe896128d7565b9750612e0c60208a016128d7565b9650604089013567ffffffffffffffff80821115612e2957600080fd5b612e358c838d01612aa4565b909850965060608b0135915080821115612e4e57600080fd5b612e5a8c838d01612aa4565b909650945060808b0135915080821115612e7357600080fd5b50612e808b828c0161291b565b999c989b5096995094979396929594505050565b60008060008060008060a08789031215612ead57600080fd5b612eb6876128d7565b9550612ec4602088016128d7565b94506040870135935060608701359250608087013567ffffffffffffffff811115612eee57600080fd5b612efa89828a0161291b565b979a9699509497509295939492505050565b803580151581146128fb57600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b81835260006020808501808196508560051b810191508460005b878110156130a757828403895281357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41883603018112612fbe57600080fd5b870160c0612fcb82612f0c565b15158652612fda878301612f0c565b15158688015260408281013590870152606073ffffffffffffffffffffffffffffffffffffffff61300c8285016128d7565b16908701526080828101359087015260a080830135368490037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe101811261305257600080fd5b90920187810192903567ffffffffffffffff81111561307057600080fd5b80360384131561307f57600080fd5b82828901526130918389018286612f1c565b9c89019c97505050928601925050600101612f7f565b5091979650505050505050565b60408152600560408201527f73656c663a0000000000000000000000000000000000000000000000000000006060820152608060208201526000610740608083018486612f65565b838152604060208201526000613116604083018486612f65565b95945050505050565b838152604060208201526000613116604083018486612f1c565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4183360301811261319c57600080fd5b9190910192915050565b6000602082840312156131b857600080fd5b6106d182612f0c565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126131f657600080fd5b83018035915067ffffffffffffffff82111561321157600080fd5b60200191503681900382131561295d57600080fd5b6020815260006106d16020830184612b94565b6000808585111561324957600080fd5b8386111561325657600080fd5b5050820193919092039150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8082018082111561062857610628613263565b6060815260006132b9606083018688612f1c565b6020830194909452506040015292915050565b8281526040602082015260006107406040830184612b94565b84815273ffffffffffffffffffffffffffffffffffffffff8416602082015260606040820152600061331b606083018486612f1c565b9695505050505050565b602081526000610740602083018486612f1c565b8181038181111561062857610628613263565b604081526000613360604083018587612f1c565b9050826020830152949350505050565b604081526000613384604083018587612f1c565b905060ff83166020830152949350505050565b6060815260006133ab606083018688612f1c565b60208301949094525090151560409091015292915050565b6000602082840312156133d557600080fd5b81516106d18161288c56fea26469706673582212205a5985db752c6fc288b19f644f9ec27c46082e16499e99894dd4bf89106b3c7264736f6c63430008120033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
