[ { "inputs": [ { "internalType": "uint8", "name": "__decimals", "type": "uint8" }, { "internalType": "address", "name": "_mailbox", "type": "address" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "spender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint8", "name": "version", "type": "uint8" } ], "name": "Initialized", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "previousOwner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnershipTransferred", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint32", "name": "origin", "type": "uint32" }, { "indexed": true, "internalType": "bytes32", "name": "recipient", "type": "bytes32" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "ReceivedTransferRemote", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint32", "name": "destination", "type": "uint32" }, { "indexed": true, "internalType": "bytes32", "name": "recipient", "type": "bytes32" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "SentTransferRemote", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" } ], "name": "allowance", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "approve", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_account", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "subtractedValue", "type": "uint256" } ], "name": "decreaseAllowance", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint32", "name": "", "type": "uint32" } ], "name": "destinationGas", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "domains", "outputs": [ { "internalType": "uint32[]", "name": "", "type": "uint32[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint32", "name": "_domain", "type": "uint32" }, { "internalType": "bytes32", "name": "_router", "type": "bytes32" } ], "name": "enrollRemoteRouter", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint32[]", "name": "_domains", "type": "uint32[]" }, { "internalType": "bytes32[]", "name": "_addresses", "type": "bytes32[]" } ], "name": "enrollRemoteRouters", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint32", "name": "_origin", "type": "uint32" }, { "internalType": "bytes32", "name": "_sender", "type": "bytes32" }, { "internalType": "bytes", "name": "_message", "type": "bytes" } ], "name": "handle", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [], "name": "hook", "outputs": [ { "internalType": "contract IPostDispatchHook", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "addedValue", "type": "uint256" } ], "name": "increaseAllowance", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_totalSupply", "type": "uint256" }, { "internalType": "string", "name": "_name", "type": "string" }, { "internalType": "string", "name": "_symbol", "type": "string" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "interchainSecurityModule", "outputs": [ { "internalType": "contract IInterchainSecurityModule", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "localDomain", "outputs": [ { "internalType": "uint32", "name": "", "type": "uint32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "mailbox", "outputs": [ { "internalType": "contract IMailbox", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint32", "name": "_destinationDomain", "type": "uint32" } ], "name": "quoteGasPayment", "outputs": [ { "internalType": "uint256", "name": "_gasPayment", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint32", "name": "_domain", "type": "uint32" } ], "name": "routers", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint32", "name": "domain", "type": "uint32" }, { "internalType": "uint256", "name": "gas", "type": "uint256" } ], "name": "setDestinationGas", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "uint32", "name": "domain", "type": "uint32" }, { "internalType": "uint256", "name": "gas", "type": "uint256" } ], "internalType": "struct GasRouter.GasRouterConfig[]", "name": "gasConfigs", "type": "tuple[]" } ], "name": "setDestinationGas", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_hook", "type": "address" } ], "name": "setHook", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_module", "type": "address" } ], "name": "setInterchainSecurityModule", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transfer", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transferFrom", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint32", "name": "_destination", "type": "uint32" }, { "internalType": "bytes32", "name": "_recipient", "type": "bytes32" }, { "internalType": "uint256", "name": "_amountOrId", "type": "uint256" } ], "name": "transferRemote", "outputs": [ { "internalType": "bytes32", "name": "messageId", "type": "bytes32" } ], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "uint32", "name": "_domain", "type": "uint32" } ], "name": "unenrollRemoteRouter", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint32[]", "name": "_domains", "type": "uint32[]" } ], "name": "unenrollRemoteRouters", "outputs": [], "stateMutability": "nonpayable", "type": "function" } ]
60e06040523480156200001157600080fd5b506040516200325b3803806200325b833981016040819052620000349162000181565b80808080806001600160a01b0381163b620000955760405162461bcd60e51b815260206004820152601e60248201527f4d61696c626f78436c69656e743a20696e76616c6964206d61696c626f780000604482015260640160405180910390fd5b6001600160a01b03821660808190526040805163234d8e3d60e21b81529051638d3638f4916004808201926020929091908290030181865afa158015620000e0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001069190620001d0565b63ffffffff1660a0526200011a336200012f565b50505060ff90931660c05250620001ff915050565b606580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600080604083850312156200019557600080fd5b825160ff81168114620001a757600080fd5b60208401519092506001600160a01b0381168114620001c557600080fd5b809150509250929050565b600060208284031215620001e357600080fd5b815163ffffffff81168114620001f857600080fd5b9392505050565b60805160a05160c0516130176200024460003960006102f3015260006104ab0152600081816105b401528181610ab101528181611e72015261221701526130176000f3fe6080604052600436106101fe5760003560e01c80637f5a7c7b1161011d578063b49c53a7116100b0578063e9198bf91161007f578063efae508a11610064578063efae508a14610696578063f2ed8c53146106b6578063f2fde38b146106d657600080fd5b8063e9198bf914610656578063eedfca5f1461067657600080fd5b8063b49c53a714610582578063d5438eae146105a2578063dd62ed3e146105d6578063de523cf31461062957600080fd5b806395d89b41116100ec57806395d89b411461050d578063a457c2d714610522578063a9059cbb14610542578063b1bd64361461056257600080fd5b80637f5a7c7b1461043457806381b4e8b4146104865780638d3638f4146104995780638da5cb5b146104e257600080fd5b80633dfd38731161019557806370a082311161016457806370a08231146103b2578063715018a6146103d257806371a15b38146103e7578063775313a11461040757600080fd5b80633dfd38731461033d578063440df4f41461035d57806349d462ef1461037f57806356d5d4751461039f57600080fd5b806323b872dd116101d157806323b872dd1461029f5780632ead72f6146102bf578063313ce567146102df578063395093511461031d57600080fd5b806306fdde0314610203578063095ea7b31461022e5780630e72cc061461025e57806318160ddd14610280575b600080fd5b34801561020f57600080fd5b506102186106f6565b604051610225919061267f565b60405180910390f35b34801561023a57600080fd5b5061024e6102493660046126bb565b610788565b6040519015158152602001610225565b34801561026a57600080fd5b5061027e6102793660046126e5565b6107a2565b005b34801561028c57600080fd5b506035545b604051908152602001610225565b3480156102ab57600080fd5b5061024e6102ba366004612700565b6108bd565b3480156102cb57600080fd5b506102916102da366004612750565b6108e1565b3480156102eb57600080fd5b5060405160ff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610225565b34801561032957600080fd5b5061024e6103383660046126bb565b610900565b34801561034957600080fd5b5061027e6103583660046126e5565b61094c565b34801561036957600080fd5b50610372610a62565b604051610225919061276b565b34801561038b57600080fd5b5061027e61039a3660046127b5565b610a73565b61027e6103ad3660046127d1565b610a99565b3480156103be57600080fd5b506102916103cd3660046126e5565b610c0d565b3480156103de57600080fd5b5061027e610c38565b3480156103f357600080fd5b5061027e61040236600461289d565b610c4c565b34801561041357600080fd5b50610291610422366004612750565b60fc6020526000908152604090205481565b34801561044057600080fd5b506097546104619073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610225565b6102916104943660046128df565b610ca7565b3480156104a557600080fd5b506104cd7f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff9091168152602001610225565b3480156104ee57600080fd5b5060655473ffffffffffffffffffffffffffffffffffffffff16610461565b34801561051957600080fd5b50610218610cb5565b34801561052e57600080fd5b5061024e61053d3660046126bb565b610cc4565b34801561054e57600080fd5b5061024e61055d3660046126bb565b610d95565b34801561056e57600080fd5b5061027e61057d366004612912565b610da3565b34801561058e57600080fd5b5061027e61059d3660046127b5565b610e2d565b3480156105ae57600080fd5b506104617f000000000000000000000000000000000000000000000000000000000000000081565b3480156105e257600080fd5b506102916105f1366004612987565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260346020908152604080832093909416825291909152205490565b34801561063557600080fd5b506098546104619073ffffffffffffffffffffffffffffffffffffffff1681565b34801561066257600080fd5b5061027e6106713660046129ba565b610e3f565b34801561068257600080fd5b5061027e610691366004612b00565b610f1e565b3480156106a257600080fd5b5061027e6106b1366004612750565b6110be565b3480156106c257600080fd5b506102916106d1366004612750565b6110d2565b3480156106e257600080fd5b5061027e6106f13660046126e5565b6110ed565b60606036805461070590612b6d565b80601f016020809104026020016040519081016040528092919081815260200182805461073190612b6d565b801561077e5780601f106107535761010080835404028352916020019161077e565b820191906000526020600020905b81548152906001019060200180831161076157829003601f168201915b5050505050905090565b6000336107968185856111a1565b60019150505b92915050565b8073ffffffffffffffffffffffffffffffffffffffff81163b1515806107dc575073ffffffffffffffffffffffffffffffffffffffff8116155b61086d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4d61696c626f78436c69656e743a20696e76616c696420636f6e74726163742060448201527f73657474696e670000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b610875611354565b50609880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6000336108cb8582856113d5565b6108d68585856114a6565b506001949350505050565b6000806108f860c963ffffffff8086169061171c16565b949350505050565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091906107969082908690610947908790612bef565b6111a1565b8073ffffffffffffffffffffffffffffffffffffffff81163b151580610986575073ffffffffffffffffffffffffffffffffffffffff8116155b610a12576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4d61696c626f78436c69656e743a20696e76616c696420636f6e74726163742060448201527f73657474696e67000000000000000000000000000000000000000000000000006064820152608401610864565b610a1a611354565b50609780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6060610a6e60c9611735565b905090565b610a7b611354565b63ffffffff91909116600090815260fc6020526040902055565b5050565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610b5e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4d61696c626f78436c69656e743a2073656e646572206e6f74206d61696c626f60448201527f78000000000000000000000000000000000000000000000000000000000000006064820152608401610864565b6000610b69856117f0565b9050838114610bfa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f456e726f6c6c656420726f7574657220646f6573206e6f74206d61746368207360448201527f656e6465720000000000000000000000000000000000000000000000000000006064820152608401610864565b610c0685858585611856565b5050505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526033602052604081205461079c565b610c40611354565b610c4a60006118e0565b565b610c54611354565b8060005b81811015610ca157610c8f848483818110610c7557610c75612c02565b9050602002016020810190610c8a9190612750565b611957565b610c9a600182612bef565b9050610c58565b50505050565b60006108f8848484346119ac565b60606037805461070590612b6d565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919083811015610d88576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610864565b6108d682868684036111a1565b6000336107968185856114a6565b610dab611354565b60005b81811015610e2857610e16838383818110610dcb57610dcb612c02565b610de19260206040909202019081019150612750565b848484818110610df357610df3612c02565b9050604002016020013563ffffffff909116600090815260fc6020526040902055565b610e21600182612bef565b9050610dae565b505050565b610e35611354565b610a958282611a1b565b610e47611354565b828114610eb0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600760248201527f216c656e677468000000000000000000000000000000000000000000000000006044820152606401610864565b8260005b81811015610f1657610f04868683818110610ed157610ed1612c02565b9050602002016020810190610ee69190612750565b858584818110610ef857610ef8612c02565b90506020020135611a1b565b610f0f600182612bef565b9050610eb4565b505050505050565b600054610100900460ff1615808015610f3e5750600054600160ff909116105b80610f585750303b158015610f58575060005460ff166001145b610fe4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610864565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561104257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b61104c8383611a31565b6110563385611ad2565b8015610ca157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150505050565b6110c6611354565b6110cf81611957565b50565b600061079c8260405180602001604052806000815250611bc7565b6110f5611354565b73ffffffffffffffffffffffffffffffffffffffff8116611198576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610864565b6110cf816118e0565b73ffffffffffffffffffffffffffffffffffffffff8316611243576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610864565b73ffffffffffffffffffffffffffffffffffffffff82166112e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610864565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60655473ffffffffffffffffffffffffffffffffffffffff163314610c4a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610864565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152603460209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610ca15781811015611499576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610864565b610ca184848484036111a1565b73ffffffffffffffffffffffffffffffffffffffff8316611549576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610864565b73ffffffffffffffffffffffffffffffffffffffff82166115ec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610864565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260336020526040902054818110156116a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610864565b73ffffffffffffffffffffffffffffffffffffffff80851660008181526033602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061170f9086815260200190565b60405180910390a3610ca1565b6000806117298484611be0565b915091505b9250929050565b6060600061174283611c1a565b9050805167ffffffffffffffff81111561175e5761175e612a26565b604051908082528060200260200182016040528015611787578160200160208202803683370190505b50915060005b81518110156117e9578181815181106117a8576117a8612c02565b60200260200101518382815181106117c2576117c2612c02565b63ffffffff90921660209283029190910190910152806117e181612c31565b91505061178d565b5050919050565b6000808061180860c963ffffffff8087169061171c16565b915091508161181685611cb5565b9061184e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610864919061267f565b509392505050565b60006118628383611cec565b905060006118708484611d0b565b905036600061187f8686611d1b565b9150915061189561188d8590565b848484611d2b565b838863ffffffff167fba20947a325f450d232530e5f5fce293e7963499d5309a07cee84a269f2f15a6856040516118ce91815260200190565b60405180910390a35050505050505050565b6065805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b61196b60c963ffffffff80841690611d3516565b61197482611cb5565b90610a95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610864919061267f565b6000806119b884611d41565b90506119cf86846119ca888886611d61565b611d90565b9150848663ffffffff167fd229aacb94204188fe8042965fa6b269c62dc5818b21238779ab64bdd17efeec86604051611a0a91815260200190565b60405180910390a350949350505050565b610a9560c963ffffffff808516908490611db316565b600054610100900460ff16611ac8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610864565b610a958282611dbe565b73ffffffffffffffffffffffffffffffffffffffff8216611b4f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610864565b8060356000828254611b619190612bef565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000818152603360209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b600080611bd3846117f0565b90506108f8848285611e6e565b6000818152600283016020526040812054819080611c0f57611c028585611f4f565b92506000915061172e9050565b60019250905061172e565b60606000611c2783611f5b565b90508067ffffffffffffffff811115611c4257611c42612a26565b604051908082528060200260200182016040528015611c6b578160200160208202803683370190505b50915060005b818110156117e957611c838482611f66565b60001c838281518110611c9857611c98612c02565b602090810291909101015280611cad81612c31565b915050611c71565b6060611cc68263ffffffff16611f72565b604051602001611cd69190612c69565b6040516020818303038152906040529050919050565b6000611cfb6020828486612cae565b611d0491612cd8565b9392505050565b6000611cfb604060208486612cae565b3660006117298360408187612cae565b610ca18484611ad2565b6000611d048383612030565b6060611d4d338361204d565b505060408051602081019091526000815290565b6060838383604051602001611d7893929190612d14565b60405160208183030381529060405290509392505050565b600080611d9c856117f0565b9050611daa85828686612213565b95945050505050565b610ca18383836122f7565b600054610100900460ff16611e55576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610864565b6036611e618382612d87565b506037610e288282612d87565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166381d2ea95858585611eb889612314565b6097546040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b168152611f0e959493929173ffffffffffffffffffffffffffffffffffffffff1690600401612ea1565b602060405180830381865afa158015611f2b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108f89190612f01565b6000611d048383612336565b600061079c8261234e565b6000611d048383612358565b60606000611f7f83612382565b600101905060008167ffffffffffffffff811115611f9f57611f9f612a26565b6040519080825280601f01601f191660200182016040528015611fc9576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084611fd357509392505050565b60008181526002830160205260408120819055611d048383612464565b73ffffffffffffffffffffffffffffffffffffffff82166120f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610864565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260336020526040902054818110156121a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610864565b73ffffffffffffffffffffffffffffffffffffffff831660008181526033602090815260408083208686039055603580548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166310b83dc08487878661225e8b612314565b6097546040517fffffffff0000000000000000000000000000000000000000000000000000000060e089901b1681526122b4959493929173ffffffffffffffffffffffffffffffffffffffff1690600401612ea1565b60206040518083038185885af11580156122d2573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611daa9190612f01565b600082815260028401602052604081208290556108f88484612470565b63ffffffff8116600090815260fc602052604090205460609061079c9061247c565b60008181526001830160205260408120541515611d04565b600061079c825490565b600082600001828154811061236f5761236f612c02565b9060005260206000200154905092915050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106123cb577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef810000000083106123f7576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061241557662386f26fc10000830492506010015b6305f5e100831061242d576305f5e100830492506008015b612710831061244157612710830492506004015b60648310612453576064830492506002015b600a831061079c5760010192915050565b6000611d04838361249a565b6000611d04838361258d565b606061079c60008333604051806020016040528060008152506125dc565b600081815260018301602052604081205480156125835760006124be600183612f1a565b85549091506000906124d290600190612f1a565b90508181146125375760008660000182815481106124f2576124f2612c02565b906000526020600020015490508087600001848154811061251557612515612c02565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061254857612548612f2d565b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505061079c565b600091505061079c565b60008181526001830160205260408120546125d45750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561079c565b50600061079c565b60606001858585856040516020016125f8959493929190612f5c565b6040516020818303038152906040529050949350505050565b60005b8381101561262c578181015183820152602001612614565b50506000910152565b6000815180845261264d816020860160208601612611565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611d046020830184612635565b803573ffffffffffffffffffffffffffffffffffffffff811681146126b657600080fd5b919050565b600080604083850312156126ce57600080fd5b6126d783612692565b946020939093013593505050565b6000602082840312156126f757600080fd5b611d0482612692565b60008060006060848603121561271557600080fd5b61271e84612692565b925061272c60208501612692565b9150604084013590509250925092565b803563ffffffff811681146126b657600080fd5b60006020828403121561276257600080fd5b611d048261273c565b6020808252825182820181905260009190848201906040850190845b818110156127a957835163ffffffff1683529284019291840191600101612787565b50909695505050505050565b600080604083850312156127c857600080fd5b6126d78361273c565b600080600080606085870312156127e757600080fd5b6127f08561273c565b935060208501359250604085013567ffffffffffffffff8082111561281457600080fd5b818701915087601f83011261282857600080fd5b81358181111561283757600080fd5b88602082850101111561284957600080fd5b95989497505060200194505050565b60008083601f84011261286a57600080fd5b50813567ffffffffffffffff81111561288257600080fd5b6020830191508360208260051b850101111561172e57600080fd5b600080602083850312156128b057600080fd5b823567ffffffffffffffff8111156128c757600080fd5b6128d385828601612858565b90969095509350505050565b6000806000606084860312156128f457600080fd5b6128fd8461273c565b95602085013595506040909401359392505050565b6000806020838503121561292557600080fd5b823567ffffffffffffffff8082111561293d57600080fd5b818501915085601f83011261295157600080fd5b81358181111561296057600080fd5b8660208260061b850101111561297557600080fd5b60209290920196919550909350505050565b6000806040838503121561299a57600080fd5b6129a383612692565b91506129b160208401612692565b90509250929050565b600080600080604085870312156129d057600080fd5b843567ffffffffffffffff808211156129e857600080fd5b6129f488838901612858565b90965094506020870135915080821115612a0d57600080fd5b50612a1a87828801612858565b95989497509550505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f830112612a6657600080fd5b813567ffffffffffffffff80821115612a8157612a81612a26565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715612ac757612ac7612a26565b81604052838152866020858801011115612ae057600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600060608486031215612b1557600080fd5b83359250602084013567ffffffffffffffff80821115612b3457600080fd5b612b4087838801612a55565b93506040860135915080821115612b5657600080fd5b50612b6386828701612a55565b9150509250925092565b600181811c90821680612b8157607f821691505b602082108103612bba577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8082018082111561079c5761079c612bc0565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612c6257612c62612bc0565b5060010190565b7f4e6f20726f7574657220656e726f6c6c656420666f7220646f6d61696e3a2000815260008251612ca181601f850160208701612611565b91909101601f0192915050565b60008085851115612cbe57600080fd5b83861115612ccb57600080fd5b5050820193919092039150565b8035602083101561079c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b1692915050565b83815282602082015260008251612d32816040850160208701612611565b91909101604001949350505050565b601f821115610e2857600081815260208120601f850160051c81016020861015612d685750805b601f850160051c820191505b81811015610f1657828155600101612d74565b815167ffffffffffffffff811115612da157612da1612a26565b612db581612daf8454612b6d565b84612d41565b602080601f831160018114612e085760008415612dd25750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555610f16565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b82811015612e5557888601518255948401946001909101908401612e36565b5085821015612e9157878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b63ffffffff8616815284602082015260a060408201526000612ec660a0830186612635565b8281036060840152612ed88186612635565b91505073ffffffffffffffffffffffffffffffffffffffff831660808301529695505050505050565b600060208284031215612f1357600080fd5b5051919050565b8181038181111561079c5761079c612bc0565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7fffff0000000000000000000000000000000000000000000000000000000000008660f01b1681528460028201528360228201527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008360601b16604282015260008251612fd0816056850160208701612611565b91909101605601969550505050505056fea2646970667358221220b6c057dafd6dedda28ebf1f31a7faa44b94a2e451b3e198c03056745d3a60b2b64736f6c634300081300330000000000000000000000000000000000000000000000000000000000000006000000000000000000000000ffaef09b3cd11d9b20d1a19becca54eec2884766