0 txs
0 calls
constructor
constructor(address _LinearAlgorithm, address _ExponentialAlgorithm, address _CPAlgorithm, address _feeRecipient)
functions
checkInitParams
purefunction checkInitParams(uint128 _multiplier, uint128 _startPrice, address _recipient, uint128 _fee, address _Algorithm, uint8 _poolType) pure
getFactoryInfo
viewfunction getFactoryInfo() view returns (uint128, uint128, address)
isMSAlgorithm
viewfunction isMSAlgorithm(address) view returns (bool)
isMSRouter
viewfunction isMSRouter(address) view returns (bool)
MAX_FEE_PERCENTAGE
viewfunction MAX_FEE_PERCENTAGE() view returns (uint128)
owner
viewfunction owner() view returns (address)
poolEnumTemplate
viewfunction poolEnumTemplate() view returns (address)
poolNotEnumTemplate
viewfunction poolNotEnumTemplate() view returns (address)
PROTOCOL_FEE_RECIPIENT
viewfunction PROTOCOL_FEE_RECIPIENT() view returns (address)
PROTOCOL_FEE
viewfunction PROTOCOL_FEE() view returns (uint128)
createPool
payablefunction createPool(address _nft, uint256[] _nftIds, uint128 _multiplier, uint128 _startPrice, address _recipient, uint128 _fee, address _Algorithm, uint8 _poolType) payable returns (address pool)
onERC721Received
nonpayablefunction onERC721Received(address, address, uint256 id, bytes) returns (bytes4)
renounceOwnership
nonpayablefunction renounceOwnership()
setAlgorithmApproval
nonpayablefunction setAlgorithmApproval(address _algorithm, bool _approval)
setProtocolFee
nonpayablefunction setProtocolFee(uint128 _newProtocolFee)
setProtocolFeeRecipient
nonpayablefunction setProtocolFeeRecipient(address _newRecipient)
setRouterApproval
nonpayablefunction setRouterApproval(address _router, bool _approval)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
withdrawETH
nonpayablefunction withdrawETH()
withdrawNFTs
nonpayablefunction withdrawNFTs(address _nft, uint256[] _nftIds)
events
AlgorithmApproval
event AlgorithmApproval(address indexed algorithm, bool approval)
NewFeeRecipient
event NewFeeRecipient(address newRecipient)
NewPool
event NewPool(address pool, address indexed owner)
NewProtocolFee
event NewProtocolFee(uint128 newFee)
NFTDeposit
event NFTDeposit(address indexed collectionNFT, uint256 tokenID)
NFTWithdrawal
event NFTWithdrawal(address indexed owner, uint256 AmountOfNFTs)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
RouterApproval
event RouterApproval(address indexed router, bool approval)
TokenDeposit
event TokenDeposit(uint256 amount)
TokenWithdrawal
event TokenWithdrawal(address indexed owner, uint256 withdrawAmount)
errors
No errors.
creation bytecode
0x60806040526608e1bc9bf04000600160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055503480156200005157600080fd5b506040516200d2ff3803806200d2ff833981810160405281019062000077919062000414565b620000976200008b620002c260201b60201c565b620002ca60201b60201c565b6001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550604051620001ee906200038e565b604051809103906000f0801580156200020b573d6000803e3d6000fd5b50600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040516200025a906200039c565b604051809103906000f08015801562000277573d6000803e3d6000fd5b50600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505062000486565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b614ed68062002f4b83390190565b6154de8062007e2183390190565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620003dc82620003af565b9050919050565b620003ee81620003cf565b8114620003fa57600080fd5b50565b6000815190506200040e81620003e3565b92915050565b60008060008060808587031215620004315762000430620003aa565b5b60006200044187828801620003fd565b94505060206200045487828801620003fd565b93505060406200046787828801620003fd565b92505060606200047a87828801620003fd565b91505092959194509250565b612ab580620004966000396000f3fe6080604052600436106101235760003560e01c8063782be8dd116100a0578063d4cd8b0111610064578063d4cd8b01146103e6578063e086e5ec14610423578063e521cb921461043a578063f2fde38b14610463578063f4e6bf261461048c57610161565b8063782be8dd146103115780637bffb7811461033e5780638da5cb5b14610369578063ac587bc714610394578063c1eaaf55146103bd57610161565b8063558e44d3116100e7578063558e44d31461024957806360c6467f146102745780636ad5e42a1461029f578063715018a6146102cf578063730143c6146102e657610161565b80630b4501fd14610166578063150b7a0214610191578063201e7e9e146101ce578063341ffda0146101f757806347c1a9be1461022057610161565b36610161577ff1b3be8dace0fecfbdb6fb0fa1cc014c612bcb1b46db027c1ece5fc11fff09d63460405161015791906118b1565b60405180910390a1005b600080fd5b34801561017257600080fd5b5061017b6104c9565b60405161018891906118f7565b60405180910390f35b34801561019d57600080fd5b506101b860048036038101906101b39190611a15565b6104eb565b6040516101c59190611ad8565b60405180910390f35b3480156101da57600080fd5b506101f560048036038101906101f09190611b82565b61054e565b005b34801561020357600080fd5b5061021e60048036038101906102199190611c0f565b610826565b005b34801561022c57600080fd5b5061024760048036038101906102429190611c74565b610993565b005b34801561025557600080fd5b5061025e610ad6565b60405161026b91906118f7565b60405180910390f35b34801561028057600080fd5b50610289610ae2565b6040516102969190611d13565b60405180910390f35b6102b960048036038101906102b49190611d84565b610b08565b6040516102c69190611e7b565b60405180910390f35b3480156102db57600080fd5b506102e4610e5c565b005b3480156102f257600080fd5b506102fb610e70565b6040516103089190611ea5565b60405180910390f35b34801561031d57600080fd5b50610326610e96565b60405161033593929190611ec0565b60405180910390f35b34801561034a57600080fd5b50610353610ef1565b6040516103609190611f18565b60405180910390f35b34801561037557600080fd5b5061037e610f17565b60405161038b9190611ea5565b60405180910390f35b3480156103a057600080fd5b506103bb60048036038101906103b69190611c74565b610f40565b005b3480156103c957600080fd5b506103e460048036038101906103df9190612082565b611083565b005b3480156103f257600080fd5b5061040d600480360381019061040891906120de565b611195565b60405161041a919061211a565b60405180910390f35b34801561042f57600080fd5b506104386111b5565b005b34801561044657600080fd5b50610461600480360381019061045c91906120de565b611311565b005b34801561046f57600080fd5b5061048a600480360381019061048591906120de565b611424565b005b34801561049857600080fd5b506104b360048036038101906104ae91906120de565b6114a7565b6040516104c0919061211a565b60405180910390f35b600160009054906101000a90046fffffffffffffffffffffffffffffffff1681565b60003373ffffffffffffffffffffffffffffffffffffffff167f8d41742ac3564b1eb1e8470ae8b62d1dbe59ead009fd546a27c6bfedaa5d9c5e8560405161053391906118b1565b60405180910390a263150b7a0260e01b905095945050505050565b6000600281111561056257610561612135565b5b81600281111561057557610574612135565b5b14806105a55750600160028111156105905761058f612135565b5b8160028111156105a3576105a2612135565b5b145b15610604576000836fffffffffffffffffffffffffffffffff16146105ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105f6906121e7565b60405180910390fd5b6106e3565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614610673576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161066a90612279565b60405180910390fd5b670c7d713b49da00006fffffffffffffffffffffffffffffffff16836fffffffffffffffffffffffffffffffff1611156106e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106d9906122e5565b60405180910390fd5b5b8173ffffffffffffffffffffffffffffffffffffffff1663f0147a83866040518263ffffffff1660e01b815260040161071c9190612336565b602060405180830381865afa158015610739573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061075d9190612366565b80156107df57508173ffffffffffffffffffffffffffffffffffffffff1663806e7225876040518263ffffffff1660e01b815260040161079d9190612336565b602060405180830381865afa1580156107ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107de9190612366565b5b61081e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161081590612405565b60405180910390fd5b505050505050565b61082e6114c7565b670c7d713b49da00006fffffffffffffffffffffffffffffffff16816fffffffffffffffffffffffffffffffff161061089c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161089390612471565b60405180910390fd5b806fffffffffffffffffffffffffffffffff16600160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1603610920576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161091790612503565b60405180910390fd5b80600160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055507fcbbd64ac6ecce7d47cd60b1167905f395b2f4d35409011020953f37a12c4cd738160405161098891906118f7565b60405180910390a150565b61099b6114c7565b801515600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503610a2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2490612595565b60405180910390fd5b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167fc0f798d210b2499788857cf350af0f270c83bf310e9f48c4c37a92d6ad025d7a82604051610aca919061211a565b60405180910390a25050565b670c7d713b49da000081565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610b96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8d90612601565b60405180910390fd5b610ba487878787878761054e565b610bad8a611545565b90508073ffffffffffffffffffffffffffffffffffffffff16636d31181b888888338f8a8a8a6040518963ffffffff1660e01b8152600401610bf698979695949392919061269c565b600060405180830381600087803b158015610c1057600080fd5b505af1158015610c24573d6000803e3d6000fd5b50505050600280811115610c3b57610c3a612135565b5b826002811115610c4e57610c4d612135565b5b1480610c7e575060006002811115610c6957610c68612135565b5b826002811115610c7c57610c7b612135565b5b145b15610cfb5760008173ffffffffffffffffffffffffffffffffffffffff1634604051610ca99061274b565b60006040518083038185875af1925050503d8060008114610ce6576040519150601f19603f3d011682016040523d82523d6000602084013e610ceb565b606091505b5050905080610cf957600080fd5b505b600280811115610d0e57610d0d612135565b5b826002811115610d2157610d20612135565b5b1480610d51575060016002811115610d3c57610d3b612135565b5b826002811115610d4f57610d4e612135565b5b145b15610e015760005b89899050811015610dff578a73ffffffffffffffffffffffffffffffffffffffff166342842e0e33848d8d86818110610d9557610d94612760565b5b905060200201356040518463ffffffff1660e01b8152600401610dba9392919061278f565b600060405180830381600087803b158015610dd457600080fd5b505af1158015610de8573d6000803e3d6000fd5b505050508080610df7906127f5565b915050610d59565b505b3373ffffffffffffffffffffffffffffffffffffffff167f77948cb83ef3caff9ac13dfab1ea1f8a6875c98370287ce587f5dbc74cc5b6b082604051610e479190611ea5565b60405180910390a29998505050505050505050565b610e646114c7565b610e6e6000611712565b565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806000670c7d713b49da0000600160009054906101000a90046fffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16925092509250909192565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610f486114c7565b801515600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503610fda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd190612595565b60405180910390fd5b80600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167fa9f2ddb1280739a792ad2857ddccd608260fef1d09642dc99525e6149e34dcd282604051611077919061211a565b60405180910390a25050565b61108b6114c7565b60005b815181101561113a578273ffffffffffffffffffffffffffffffffffffffff166342842e0e306110bc610f17565b8585815181106110cf576110ce612760565b5b60200260200101516040518463ffffffff1660e01b81526004016110f59392919061278f565b600060405180830381600087803b15801561110f57600080fd5b505af1158015611123573d6000803e3d6000fd5b505050508080611132906127f5565b91505061108e565b50611143610f17565b73ffffffffffffffffffffffffffffffffffffffff167f0fad010bb612e87452fce7176925c641e9b8d06a8c98013c3e5f33838c619d77825160405161118991906118b1565b60405180910390a25050565b60056020528060005260406000206000915054906101000a900460ff1681565b6111bd6114c7565b600047905060008111611205576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111fc90612889565b60405180910390fd5b600061120f610f17565b73ffffffffffffffffffffffffffffffffffffffff16826040516112329061274b565b60006040518083038185875af1925050503d806000811461126f576040519150601f19603f3d011682016040523d82523d6000602084013e611274565b606091505b50509050806112b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112af906128f5565b60405180910390fd5b6112c0610f17565b73ffffffffffffffffffffffffffffffffffffffff167feddb53e10e60b3a2396b4222b3db092137bdbf7a6fecceaf2b0b438ff0ddc66e8360405161130591906118b1565b60405180910390a25050565b6113196114c7565b8073ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036113a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a090612503565b60405180910390fd5b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f412871529f3cedd6ca6f10784258f4965a5d6e254127593fe354e7a62f6d0a23816040516114199190611ea5565b60405180910390a150565b61142c6114c7565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361149b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149290612987565b60405180910390fd5b6114a481611712565b50565b60066020528060005260406000206000915054906101000a900460ff1681565b6114cf6117d6565b73ffffffffffffffffffffffffffffffffffffffff166114ed610f17565b73ffffffffffffffffffffffffffffffffffffffff1614611543576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153a906129f3565b60405180910390fd5b565b6000808273ffffffffffffffffffffffffffffffffffffffff166301ffc9a77f780e9d63000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b81526004016115a19190611ad8565b602060405180830381865afa1580156115be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115e29190612366565b905060008373ffffffffffffffffffffffffffffffffffffffff166301ffc9a77f80ac58cd000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b815260040161163f9190611ad8565b602060405180830381865afa15801561165c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116809190612366565b9050818061168b5750805b61169457600080fd5b6000826116c357600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166116e7565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff165b90506117088173ffffffffffffffffffffffffffffffffffffffff166117de565b9350505050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600033905090565b6000763d602d80600a3d3981f3363d3d373d3d3d363d730000008260601b60e81c176000526e5af43d82803e903d91602b57fd5bf38260781b17602052603760096000f09050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611893576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188a90612a5f565b60405180910390fd5b919050565b6000819050919050565b6118ab81611898565b82525050565b60006020820190506118c660008301846118a2565b92915050565b60006fffffffffffffffffffffffffffffffff82169050919050565b6118f1816118cc565b82525050565b600060208201905061190c60008301846118e8565b92915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061195182611926565b9050919050565b61196181611946565b811461196c57600080fd5b50565b60008135905061197e81611958565b92915050565b61198d81611898565b811461199857600080fd5b50565b6000813590506119aa81611984565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126119d5576119d46119b0565b5b8235905067ffffffffffffffff8111156119f2576119f16119b5565b5b602083019150836001820283011115611a0e57611a0d6119ba565b5b9250929050565b600080600080600060808688031215611a3157611a3061191c565b5b6000611a3f8882890161196f565b9550506020611a508882890161196f565b9450506040611a618882890161199b565b935050606086013567ffffffffffffffff811115611a8257611a81611921565b5b611a8e888289016119bf565b92509250509295509295909350565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b611ad281611a9d565b82525050565b6000602082019050611aed6000830184611ac9565b92915050565b611afc816118cc565b8114611b0757600080fd5b50565b600081359050611b1981611af3565b92915050565b6000611b2a82611946565b9050919050565b611b3a81611b1f565b8114611b4557600080fd5b50565b600081359050611b5781611b31565b92915050565b60038110611b6a57600080fd5b50565b600081359050611b7c81611b5d565b92915050565b60008060008060008060c08789031215611b9f57611b9e61191c565b5b6000611bad89828a01611b0a565b9650506020611bbe89828a01611b0a565b9550506040611bcf89828a0161196f565b9450506060611be089828a01611b0a565b9350506080611bf189828a01611b48565b92505060a0611c0289828a01611b6d565b9150509295509295509295565b600060208284031215611c2557611c2461191c565b5b6000611c3384828501611b0a565b91505092915050565b60008115159050919050565b611c5181611c3c565b8114611c5c57600080fd5b50565b600081359050611c6e81611c48565b92915050565b60008060408385031215611c8b57611c8a61191c565b5b6000611c998582860161196f565b9250506020611caa85828601611c5f565b9150509250929050565b6000819050919050565b6000611cd9611cd4611ccf84611926565b611cb4565b611926565b9050919050565b6000611ceb82611cbe565b9050919050565b6000611cfd82611ce0565b9050919050565b611d0d81611cf2565b82525050565b6000602082019050611d286000830184611d04565b92915050565b60008083601f840112611d4457611d436119b0565b5b8235905067ffffffffffffffff811115611d6157611d606119b5565b5b602083019150836020820283011115611d7d57611d7c6119ba565b5b9250929050565b60008060008060008060008060006101008a8c031215611da757611da661191c565b5b6000611db58c828d0161196f565b99505060208a013567ffffffffffffffff811115611dd657611dd5611921565b5b611de28c828d01611d2e565b98509850506040611df58c828d01611b0a565b9650506060611e068c828d01611b0a565b9550506080611e178c828d0161196f565b94505060a0611e288c828d01611b0a565b93505060c0611e398c828d01611b48565b92505060e0611e4a8c828d01611b6d565b9150509295985092959850929598565b6000611e6582611ce0565b9050919050565b611e7581611e5a565b82525050565b6000602082019050611e906000830184611e6c565b92915050565b611e9f81611946565b82525050565b6000602082019050611eba6000830184611e96565b92915050565b6000606082019050611ed560008301866118e8565b611ee260208301856118e8565b611eef6040830184611e96565b949350505050565b6000611f0282611ce0565b9050919050565b611f1281611ef7565b82525050565b6000602082019050611f2d6000830184611f09565b92915050565b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611f7c82611f33565b810181811067ffffffffffffffff82111715611f9b57611f9a611f44565b5b80604052505050565b6000611fae611912565b9050611fba8282611f73565b919050565b600067ffffffffffffffff821115611fda57611fd9611f44565b5b602082029050602081019050919050565b6000611ffe611ff984611fbf565b611fa4565b90508083825260208201905060208402830185811115612021576120206119ba565b5b835b8181101561204a5780612036888261199b565b845260208401935050602081019050612023565b5050509392505050565b600082601f830112612069576120686119b0565b5b8135612079848260208601611feb565b91505092915050565b600080604083850312156120995761209861191c565b5b60006120a78582860161196f565b925050602083013567ffffffffffffffff8111156120c8576120c7611921565b5b6120d485828601612054565b9150509250929050565b6000602082840312156120f4576120f361191c565b5b60006121028482850161196f565b91505092915050565b61211481611c3c565b82525050565b600060208201905061212f600083018461210b565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600082825260208201905092915050565b7f46656520617661696c61626c65206f6e6c79206f6e20747261646520706f6f6c60008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006121d1602183612164565b91506121dc82612175565b604082019050919050565b60006020820190508181036000830152612200816121c4565b9050919050565b7f526563697069656e74206e6f7420617661696c61626c65206f6e20747261646560008201527f20706f6f6c000000000000000000000000000000000000000000000000000000602082015250565b6000612263602583612164565b915061226e82612207565b604082019050919050565b6000602082019050818103600083015261229281612256565b9050919050565b7f506f6f6c20466565206578636565647320746865206d6178696d756d00000000600082015250565b60006122cf601c83612164565b91506122da82612299565b602082019050919050565b600060208201905081810360008301526122fe816122c2565b9050919050565b600061232061231b612316846118cc565b611cb4565b611898565b9050919050565b61233081612305565b82525050565b600060208201905061234b6000830184612327565b92915050565b60008151905061236081611c48565b92915050565b60006020828403121561237c5761237b61191c565b5b600061238a84828501612351565b91505092915050565b7f496e76616c6964206d756c7469706c696572206f72207374617274207072696360008201527f6500000000000000000000000000000000000000000000000000000000000000602082015250565b60006123ef602183612164565b91506123fa82612393565b604082019050919050565b6000602082019050818103600083015261241e816123e2565b9050919050565b7f6e6577204665652065786365656473206c696d69740000000000000000000000600082015250565b600061245b601583612164565b915061246682612425565b602082019050919050565b6000602082019050818103600083015261248a8161244e565b9050919050565b7f6e6577206665652063616e6e6f74206265207468652073616d6520617320746860008201527f652070726576696f7573206f6e65000000000000000000000000000000000000602082015250565b60006124ed602e83612164565b91506124f882612491565b604082019050919050565b6000602082019050818103600083015261251c816124e0565b9050919050565b7f417070726f76616c206973207468652073616d65207468616e2070726576696f60008201527f7573000000000000000000000000000000000000000000000000000000000000602082015250565b600061257f602283612164565b915061258a82612523565b604082019050919050565b600060208201905081810360008301526125ae81612572565b9050919050565b7f416c676f726974686d206973206e6f7420417070726f76656400000000000000600082015250565b60006125eb601983612164565b91506125f6826125b5565b602082019050919050565b6000602082019050818103600083015261261a816125de565b9050919050565b600061262c82611cbe565b9050919050565b600061263e82612621565b9050919050565b61264e81612633565b82525050565b6003811061266557612664612135565b5b50565b600081905061267682612654565b919050565b600061268682612668565b9050919050565b6126968161267b565b82525050565b6000610100820190506126b2600083018b6118e8565b6126bf602083018a6118e8565b6126cc6040830189611e96565b6126d96060830188611e96565b6126e66080830187611e96565b6126f360a08301866118e8565b61270060c0830185612645565b61270d60e083018461268d565b9998505050505050505050565b600081905092915050565b50565b600061273560008361271a565b915061274082612725565b600082019050919050565b600061275682612728565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006060820190506127a46000830186611e96565b6127b16020830185611e96565b6127be60408301846118a2565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061280082611898565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612832576128316127c6565b5b600182019050919050565b7f696e73756666696369656e742062616c616e6365000000000000000000000000600082015250565b6000612873601483612164565b915061287e8261283d565b602082019050919050565b600060208201905081810360008301526128a281612866565b9050919050565b7f7472616e73616374696f6e206e6f742073656e64656400000000000000000000600082015250565b60006128df601683612164565b91506128ea826128a9565b602082019050919050565b6000602082019050818103600083015261290e816128d2565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612971602683612164565b915061297c82612915565b604082019050919050565b600060208201905081810360008301526129a081612964565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006129dd602083612164565b91506129e8826129a7565b602082019050919050565b60006020820190508181036000830152612a0c816129d0565b9050919050565b7f455243313136373a20637265617465206661696c656400000000000000000000600082015250565b6000612a49601683612164565b9150612a5482612a13565b602082019050919050565b60006020820190508181036000830152612a7881612a3c565b905091905056fea26469706673582212208f93e4557f6142caf93c77866e0e896d35b830de6440f2f3770eaa2ffc5d8e5e64736f6c6343000811003360806040523480156200001157600080fd5b5060016000819055506200003a6200002e6200004060201b60201c565b6200004860201b60201c565b6200010e565b600033905090565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b614db8806200011e6000396000f3fe6080604052600436106101c65760003560e01c806378afd6db116100f7578063bba95d0711610095578063d9e1e25c11610064578063d9e1e25c1461065f578063f1a9af891461068a578063f2fde38b146106b5578063fea72227146106de57610204565b8063bba95d071461058d578063c1eaaf55146105ca578063c45a0155146105f3578063d8711d041461061e57610204565b80638d8f2adb116100d15780638d8f2adb146104df5780638da5cb5b146104f65780639cdd0de014610521578063b0a7d9341461056257610204565b806378afd6db1461045b5780637a0ace6d146104845780637c0b8de2146104b457610204565b80634d272a311161016457806367b8c52c1161013e57806367b8c52c146103cf5780636d31181b146103f85780636e13b58014610414578063715018a61461044457610204565b80634d272a311461034957806360246c881461037257806366d003ac146103a457610204565b80631b3ed722116101a05780631b3ed7221461029c57806324bcdfbd146102c757806335824b86146102f25780633ceafece1461031e57610204565b80630a2e0f84146102095780630a87f14814610234578063150b7a021461025f57610204565b36610204577ff1b3be8dace0fecfbdb6fb0fa1cc014c612bcb1b46db027c1ece5fc11fff09d6346040516101fa9190613331565b60405180910390a1005b600080fd5b34801561021557600080fd5b5061021e610707565b60405161022b919061340a565b60405180910390f35b34801561024057600080fd5b506102496108eb565b6040516102569190613457565b60405180910390f35b34801561026b57600080fd5b5061028660048036038101906102819190613575565b6108f7565b6040516102939190613638565b60405180910390f35b3480156102a857600080fd5b506102b1610945565b6040516102be9190613457565b60405180910390f35b3480156102d357600080fd5b506102dc610967565b6040516102e99190613457565b60405180910390f35b3480156102fe57600080fd5b50610307610989565b604051610315929190613742565b60405180910390f35b34801561032a57600080fd5b50610333610a4e565b6040516103409190613781565b60405180910390f35b34801561035557600080fd5b50610370600480360381019061036b91906137c8565b610ad6565b005b34801561037e57600080fd5b50610387610cb0565b60405161039b98979695949392919061386c565b60405180910390f35b3480156103b057600080fd5b506103b9610d7c565b6040516103c69190613781565b60405180910390f35b3480156103db57600080fd5b506103f660048036038101906103f191906137c8565b610da2565b005b610412600480360381019061040d919061395b565b610f16565b005b61042e60048036038101906104299190613a11565b611218565b60405161043b9190613331565b60405180910390f35b34801561045057600080fd5b506104596114fc565b005b34801561046757600080fd5b50610482600480360381019061047d9190613a64565b611510565b005b61049e60048036038101906104999190613bcf565b611698565b6040516104ab9190613331565b60405180910390f35b3480156104c057600080fd5b506104c9611980565b6040516104d69190613781565b60405180910390f35b3480156104eb57600080fd5b506104f46119a6565b005b34801561050257600080fd5b5061050b611b02565b6040516105189190613781565b60405180910390f35b34801561052d57600080fd5b5061054860048036038101906105439190613c3e565b611b2c565b604051610559959493929190613c86565b60405180910390f35b34801561056e57600080fd5b50610577611cdf565b6040516105849190613cd9565b60405180910390f35b34801561059957600080fd5b506105b460048036038101906105af9190613bcf565b611cf2565b6040516105c19190613331565b60405180910390f35b3480156105d657600080fd5b506105f160048036038101906105ec9190613d32565b611e8a565b005b3480156105ff57600080fd5b50610608611f9c565b6040516106159190613daf565b60405180910390f35b34801561062a57600080fd5b5061064560048036038101906106409190613c3e565b611fc2565b604051610656959493929190613c86565b60405180910390f35b34801561066b57600080fd5b50610674612175565b6040516106819190613dca565b60405180910390f35b34801561069657600080fd5b5061069f61219b565b6040516106ac9190613457565b60405180910390f35b3480156106c157600080fd5b506106dc60048036038101906106d79190613a64565b6121bd565b005b3480156106ea57600080fd5b50610705600480360381019061070091906137c8565b612240565b005b60606000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161076b9190613781565b602060405180830381865afa158015610788573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107ac9190613dfa565b9050600081036107bd5750506108e8565b60006001826107cc9190613e56565b905060006001826107dd9190613e8a565b67ffffffffffffffff8111156107f6576107f5613a91565b5b6040519080825280602002602001820160405280156108245781602001602082028036833780820191505090505b50905060005b8281116108df578473ffffffffffffffffffffffffffffffffffffffff16632f745c5930836040518363ffffffff1660e01b815260040161086c929190613ebe565b602060405180830381865afa158015610889573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ad9190613dfa565b8282815181106108c0576108bf613ee7565b5b60200260200101818152505080806108d790613f16565b91505061082a565b50809450505050505b90565b670c7d713b49da000081565b60007f8d41742ac3564b1eb1e8470ae8b62d1dbe59ead009fd546a27c6bfedaa5d9c5e338560405161092a929190613ebe565b60405180910390a163150b7a0260e01b905095945050505050565b600260009054906101000a90046fffffffffffffffffffffffffffffffff1681565b600360009054906101000a90046fffffffffffffffffffffffffffffffff1681565b60006060600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169150600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015610a1f573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190610a489190614004565b90509091565b60008073ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603610aad57309050610ad3565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505b90565b610ade61241a565b806fffffffffffffffffffffffffffffffff16600260109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1603610b62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5990614099565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f0147a83826040518263ffffffff1660e01b8152600401610bbd91906140ea565b602060405180830381865afa158015610bda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bfe9190614131565b610c3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c34906141aa565b60405180910390fd5b80600260106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055507f44b74ff1342b2d873c1e31fad9132996b29727c3ee8b08f3159481ce8e3467d681604051610ca59190613457565b60405180910390a150565b6000806000806060600060606000600260009054906101000a90046fffffffffffffffffffffffffffffffff169750600260109054906101000a90046fffffffffffffffffffffffffffffffff169650600360009054906101000a90046fffffffffffffffffffffffffffffffff169550600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169450610d4e610707565b9350610d58610989565b8093508194505050600660149054906101000a900460ff1690509091929394959697565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610daa61241a565b600280811115610dbd57610dbc6137f5565b5b600660149054906101000a900460ff166002811115610ddf57610dde6137f5565b5b14610e1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e169061423c565b60405180910390fd5b806fffffffffffffffffffffffffffffffff16600360009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1603610ea3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9a906142a8565b60405180910390fd5b80600360006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055507fd23551c2af1a097e196af72b4e757c4de46eaa35d565b2a362770c769bb8b16f81604051610f0b91906140ea565b60405180910390a150565b600073ffffffffffffffffffffffffffffffffffffffff16610f36611b02565b73ffffffffffffffffffffffffffffffffffffffff1614610f8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8390614314565b60405180910390fd5b610f9585612498565b8573ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461102c5785600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b826fffffffffffffffffffffffffffffffff16600360009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16146110af5782600360006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055505b81600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555087600260006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555086600260106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555083600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600660146101000a81548160ff021916908360028111156111c8576111c76137f5565b5b021790555033600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505050505050565b600061122261255e565b60016002811115611236576112356137f5565b5b600660149054906101000a900460ff166002811115611258576112576137f5565b5b14806112965750600280811115611272576112716137f5565b5b600660149054906101000a900460ff166002811115611294576112936137f5565b5b145b6112d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112cc90614380565b60405180910390fd5b83600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016113319190613781565b602060405180830381865afa15801561134e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113729190613dfa565b10156113b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113aa906143ec565b60405180910390fd5b60006113bf85856125ad565b80925081935050506113d18282612958565b6113db8386612bdb565b8134111561149c5760008373ffffffffffffffffffffffffffffffffffffffff1683346114089190613e56565b6040516114149061443d565b60006040518083038185875af1925050503d8060008114611451576040519150601f19603f3d011682016040523d82523d6000602084013e611456565b606091505b505090508061149a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114919061449e565b60405180910390fd5b505b8273ffffffffffffffffffffffffffffffffffffffff167f06b1dfbaca5074fbd53d1b5ffb48d2749c4f5943e10f2975598e48f6e7000d1483876040516114e49291906144be565b60405180910390a2506114f5612cbc565b9392505050565b61150461241a565b61150e6000612498565b565b61151861241a565b60028081111561152b5761152a6137f5565b5b600660149054906101000a900460ff16600281111561154d5761154c6137f5565b5b0361158d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158490614559565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361161d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611614906145eb565b60405180910390fd5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f37069114dc4447a7abc5cb9d8896d53638294236089c935044628dda808c9f068160405161168d9190613781565b60405180910390a150565b60006116a261255e565b600160028111156116b6576116b56137f5565b5b600660149054906101000a900460ff1660028111156116d8576116d76137f5565b5b148061171657506002808111156116f2576116f16137f5565b5b600660149054906101000a900460ff166002811115611714576117136137f5565b5b145b611755576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174c90614380565b60405180910390fd5b8351600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016117b29190613781565b602060405180830381865afa1580156117cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117f39190613dfa565b1015611834576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182b906143ec565b60405180910390fd5b60006118418551856125ad565b80925081935050506118538282612958565b61185e308487612cc6565b8134111561191f5760008373ffffffffffffffffffffffffffffffffffffffff16833461188b9190613e56565b6040516118979061443d565b60006040518083038185875af1925050503d80600081146118d4576040519150601f19603f3d011682016040523d82523d6000602084013e6118d9565b606091505b505090508061191d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119149061449e565b60405180910390fd5b505b8273ffffffffffffffffffffffffffffffffffffffff167f06b1dfbaca5074fbd53d1b5ffb48d2749c4f5943e10f2975598e48f6e7000d148387516040516119689291906144be565b60405180910390a250611979612cbc565b9392505050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6119ae61241a565b6000479050600081116119f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ed90614657565b60405180910390fd5b6000611a00611b02565b73ffffffffffffffffffffffffffffffffffffffff1682604051611a239061443d565b60006040518083038185875af1925050503d8060008114611a60576040519150601f19603f3d011682016040523d82523d6000602084013e611a65565b606091505b5050905080611aa9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa0906146c3565b60405180910390fd5b611ab1611b02565b73ffffffffffffffffffffffffffffffffffffffff167feddb53e10e60b3a2396b4222b3db092137bdbf7a6fecceaf2b0b438ff0ddc66e83604051611af69190613331565b60405180910390a25050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000806000806000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663737142aa600260009054906101000a90046fffffffffffffffffffffffffffffffff16600260109054906101000a90046fffffffffffffffffffffffffffffffff1689600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630b4501fd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c1e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c4291906146f8565b600360009054906101000a90046fffffffffffffffffffffffffffffffff166040518663ffffffff1660e01b8152600401611c81959493929190614725565b60a060405180830381865afa158015611c9e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cc29190614778565b809550819650829750839850849950505050505091939590929450565b600660149054906101000a900460ff1681565b6000611cfc61255e565b60006002811115611d1057611d0f6137f5565b5b600660149054906101000a900460ff166002811115611d3257611d316137f5565b5b1480611d705750600280811115611d4c57611d4b6137f5565b5b600660149054906101000a900460ff166002811115611d6e57611d6d6137f5565b5b145b611daf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da69061483f565b60405180910390fd5b82471015611df2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de9906148ab565b60405180910390fd5b6000611dff855185612d9c565b80925081935050506000611e11610a4e565b9050611e1e848288612cc6565b611e29828486613147565b8373ffffffffffffffffffffffffffffffffffffffff167ecf6f77b65ea0ac901747b80e8becba7db1c3a04b9bda970ef1b4dc53c54a32875185604051611e719291906144be565b60405180910390a25050611e83612cbc565b9392505050565b611e9261241a565b60005b8151811015611f41578273ffffffffffffffffffffffffffffffffffffffff166342842e0e30611ec3611b02565b858581518110611ed657611ed5613ee7565b5b60200260200101516040518463ffffffff1660e01b8152600401611efc939291906148cb565b600060405180830381600087803b158015611f1657600080fd5b505af1158015611f2a573d6000803e3d6000fd5b505050508080611f3990613f16565b915050611e95565b50611f4a611b02565b73ffffffffffffffffffffffffffffffffffffffff167f0fad010bb612e87452fce7176925c641e9b8d06a8c98013c3e5f33838c619d778251604051611f909190613331565b60405180910390a25050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806000806000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e6649054600260009054906101000a90046fffffffffffffffffffffffffffffffff16600260109054906101000a90046fffffffffffffffffffffffffffffffff1689600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630b4501fd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156120b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120d891906146f8565b600360009054906101000a90046fffffffffffffffffffffffffffffffff166040518663ffffffff1660e01b8152600401612117959493929190614725565b60a060405180830381865afa158015612134573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121589190614778565b809550819650829750839850849950505050505091939590929450565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600260109054906101000a90046fffffffffffffffffffffffffffffffff1681565b6121c561241a565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612234576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222b90614974565b60405180910390fd5b61223d81612498565b50565b61224861241a565b806fffffffffffffffffffffffffffffffff16600260009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16036122cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c3906149e0565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663806e7225826040518263ffffffff1660e01b815260040161232791906140ea565b602060405180830381865afa158015612344573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123689190614131565b6123a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239e90614a4c565b60405180910390fd5b80600260006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055507fc75ea82b4452774a557ab43d8f84b03688cdde824aeaef6a639d686bd53144018160405161240f9190613457565b60405180910390a150565b612422613310565b73ffffffffffffffffffffffffffffffffffffffff16612440611b02565b73ffffffffffffffffffffffffffffffffffffffff1614612496576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161248d90614ab8565b60405180910390fd5b565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6002600054036125a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161259a90614b24565b60405180910390fd5b6002600081905550565b6000806000806000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e6649054600260009054906101000a90046fffffffffffffffffffffffffffffffff16600260109054906101000a90046fffffffffffffffffffffffffffffffff168a600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630b4501fd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561269f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126c391906146f8565b600360009054906101000a90046fffffffffffffffffffffffffffffffff166040518663ffffffff1660e01b8152600401612702959493929190614725565b60a060405180830381865afa15801561271f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127439190614778565b809850819950829550839650849750505050505082612797576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161278e90614b90565b60405180910390fd5b858511156127da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127d190614c22565b60405180910390fd5b816fffffffffffffffffffffffffffffffff16600260109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16146128945781600260106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055507f44b74ff1342b2d873c1e31fad9132996b29727c3ee8b08f3159481ce8e3467d68260405161288b9190613457565b60405180910390a15b806fffffffffffffffffffffffffffffffff16600260009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff161461294e5780600260006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055507fc75ea82b4452774a557ab43d8f84b03688cdde824aeaef6a639d686bd5314401816040516129459190613457565b60405180910390a15b5050509250929050565b8134101561299b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161299290614c8e565b60405180910390fd5b60006129a5610a4e565b90503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614612a935760008173ffffffffffffffffffffffffffffffffffffffff1683856129ff9190613e56565b604051612a0b9061443d565b60006040518083038185875af1925050503d8060008114612a48576040519150601f19603f3d011682016040523d82523d6000602084013e612a4d565b606091505b5050905080612a91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a889061449e565b60405180910390fd5b505b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663730143c66040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b269190614cc3565b905060008173ffffffffffffffffffffffffffffffffffffffff1684604051612b4e9061443d565b60006040518083038185875af1925050503d8060008114612b8b576040519150601f19603f3d011682016040523d82523d6000602084013e612b90565b606091505b5050905080612bd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bcb9061449e565b60405180910390fd5b5050505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000612c0c610707565b905060005b83811015612cb5578273ffffffffffffffffffffffffffffffffffffffff166342842e0e3087858581518110612c4a57612c49613ee7565b5b60200260200101516040518463ffffffff1660e01b8152600401612c70939291906148cb565b600060405180830381600087803b158015612c8a57600080fd5b505af1158015612c9e573d6000803e3d6000fd5b505050508080612cad90613f16565b915050612c11565b5050505050565b6001600081905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060005b8251811015612d95578173ffffffffffffffffffffffffffffffffffffffff166342842e0e8686868581518110612d2a57612d29613ee7565b5b60200260200101516040518463ffffffff1660e01b8152600401612d50939291906148cb565b600060405180830381600087803b158015612d6a57600080fd5b505af1158015612d7e573d6000803e3d6000fd5b505050508080612d8d90613f16565b915050612cf0565b5050505050565b6000806000806000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663737142aa600260009054906101000a90046fffffffffffffffffffffffffffffffff16600260109054906101000a90046fffffffffffffffffffffffffffffffff168a600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630b4501fd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e8e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612eb291906146f8565b600360009054906101000a90046fffffffffffffffffffffffffffffffff166040518663ffffffff1660e01b8152600401612ef1959493929190614725565b60a060405180830381865afa158015612f0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f329190614778565b809850819950829550839650849750505050505082612f86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f7d90614b90565b60405180910390fd5b85851015612fc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fc090614d62565b60405180910390fd5b816fffffffffffffffffffffffffffffffff16600260109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16146130835781600260106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055507f44b74ff1342b2d873c1e31fad9132996b29727c3ee8b08f3159481ce8e3467d68260405161307a9190613457565b60405180910390a15b806fffffffffffffffffffffffffffffffff16600260009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff161461313d5780600260006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055507fc75ea82b4452774a557ab43d8f84b03688cdde824aeaef6a639d686bd5314401816040516131349190613457565b60405180910390a15b5050509250929050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663730143c66040518163ffffffff1660e01b8152600401602060405180830381865afa1580156131b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131da9190614cc3565b905060008173ffffffffffffffffffffffffffffffffffffffff16856040516132029061443d565b60006040518083038185875af1925050503d806000811461323f576040519150601f19603f3d011682016040523d82523d6000602084013e613244565b606091505b5050905060008373ffffffffffffffffffffffffffffffffffffffff16868661326d9190613e56565b6040516132799061443d565b60006040518083038185875af1925050503d80600081146132b6576040519150601f19603f3d011682016040523d82523d6000602084013e6132bb565b606091505b505090508080156132c95750815b613308576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132ff9061449e565b60405180910390fd5b505050505050565b600033905090565b6000819050919050565b61332b81613318565b82525050565b60006020820190506133466000830184613322565b92915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61338181613318565b82525050565b60006133938383613378565b60208301905092915050565b6000602082019050919050565b60006133b78261334c565b6133c18185613357565b93506133cc83613368565b8060005b838110156133fd5781516133e48882613387565b97506133ef8361339f565b9250506001810190506133d0565b5085935050505092915050565b6000602082019050818103600083015261342481846133ac565b905092915050565b60006fffffffffffffffffffffffffffffffff82169050919050565b6134518161342c565b82525050565b600060208201905061346c6000830184613448565b92915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006134b182613486565b9050919050565b6134c1816134a6565b81146134cc57600080fd5b50565b6000813590506134de816134b8565b92915050565b6134ed81613318565b81146134f857600080fd5b50565b60008135905061350a816134e4565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261353557613534613510565b5b8235905067ffffffffffffffff81111561355257613551613515565b5b60208301915083600182028301111561356e5761356d61351a565b5b9250929050565b6000806000806000608086880312156135915761359061347c565b5b600061359f888289016134cf565b95505060206135b0888289016134cf565b94505060406135c1888289016134fb565b935050606086013567ffffffffffffffff8111156135e2576135e1613481565b5b6135ee8882890161351f565b92509250509295509295909350565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b613632816135fd565b82525050565b600060208201905061364d6000830184613629565b92915050565b6000819050919050565b600061367861367361366e84613486565b613653565b613486565b9050919050565b600061368a8261365d565b9050919050565b600061369c8261367f565b9050919050565b6136ac81613691565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b838110156136ec5780820151818401526020810190506136d1565b60008484015250505050565b6000601f19601f8301169050919050565b6000613714826136b2565b61371e81856136bd565b935061372e8185602086016136ce565b613737816136f8565b840191505092915050565b600060408201905061375760008301856136a3565b81810360208301526137698184613709565b90509392505050565b61377b816134a6565b82525050565b60006020820190506137966000830184613772565b92915050565b6137a58161342c565b81146137b057600080fd5b50565b6000813590506137c28161379c565b92915050565b6000602082840312156137de576137dd61347c565b5b60006137ec848285016137b3565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60038110613835576138346137f5565b5b50565b600081905061384682613824565b919050565b600061385682613838565b9050919050565b6138668161384b565b82525050565b600061010082019050613882600083018b613448565b61388f602083018a613448565b61389c6040830189613448565b6138a96060830188613772565b81810360808301526138bb81876133ac565b90506138ca60a08301866136a3565b81810360c08301526138dc8185613709565b90506138eb60e083018461385d565b9998505050505050505050565b6000613903826134a6565b9050919050565b613913816138f8565b811461391e57600080fd5b50565b6000813590506139308161390a565b92915050565b6003811061394357600080fd5b50565b60008135905061395581613936565b92915050565b600080600080600080600080610100898b03121561397c5761397b61347c565b5b600061398a8b828c016137b3565b985050602061399b8b828c016137b3565b97505060406139ac8b828c016134cf565b96505060606139bd8b828c016134cf565b95505060806139ce8b828c016134cf565b94505060a06139df8b828c016137b3565b93505060c06139f08b828c01613921565b92505060e0613a018b828c01613946565b9150509295985092959890939650565b600080600060608486031215613a2a57613a2961347c565b5b6000613a38868287016134fb565b9350506020613a49868287016134fb565b9250506040613a5a868287016134cf565b9150509250925092565b600060208284031215613a7a57613a7961347c565b5b6000613a88848285016134cf565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613ac9826136f8565b810181811067ffffffffffffffff82111715613ae857613ae7613a91565b5b80604052505050565b6000613afb613472565b9050613b078282613ac0565b919050565b600067ffffffffffffffff821115613b2757613b26613a91565b5b602082029050602081019050919050565b6000613b4b613b4684613b0c565b613af1565b90508083825260208201905060208402830185811115613b6e57613b6d61351a565b5b835b81811015613b975780613b8388826134fb565b845260208401935050602081019050613b70565b5050509392505050565b600082601f830112613bb657613bb5613510565b5b8135613bc6848260208601613b38565b91505092915050565b600080600060608486031215613be857613be761347c565b5b600084013567ffffffffffffffff811115613c0657613c05613481565b5b613c1286828701613ba1565b9350506020613c23868287016134fb565b9250506040613c34868287016134cf565b9150509250925092565b600060208284031215613c5457613c5361347c565b5b6000613c62848285016134fb565b91505092915050565b60008115159050919050565b613c8081613c6b565b82525050565b600060a082019050613c9b6000830188613c77565b613ca86020830187613448565b613cb56040830186613448565b613cc26060830185613322565b613ccf6080830184613322565b9695505050505050565b6000602082019050613cee600083018461385d565b92915050565b6000613cff826134a6565b9050919050565b613d0f81613cf4565b8114613d1a57600080fd5b50565b600081359050613d2c81613d06565b92915050565b60008060408385031215613d4957613d4861347c565b5b6000613d5785828601613d1d565b925050602083013567ffffffffffffffff811115613d7857613d77613481565b5b613d8485828601613ba1565b9150509250929050565b6000613d998261367f565b9050919050565b613da981613d8e565b82525050565b6000602082019050613dc46000830184613da0565b92915050565b6000602082019050613ddf60008301846136a3565b92915050565b600081519050613df4816134e4565b92915050565b600060208284031215613e1057613e0f61347c565b5b6000613e1e84828501613de5565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613e6182613318565b9150613e6c83613318565b9250828203905081811115613e8457613e83613e27565b5b92915050565b6000613e9582613318565b9150613ea083613318565b9250828201905080821115613eb857613eb7613e27565b5b92915050565b6000604082019050613ed36000830185613772565b613ee06020830184613322565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000613f2182613318565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613f5357613f52613e27565b5b600182019050919050565b600080fd5b600067ffffffffffffffff821115613f7e57613f7d613a91565b5b613f87826136f8565b9050602081019050919050565b6000613fa7613fa284613f63565b613af1565b905082815260208101848484011115613fc357613fc2613f5e565b5b613fce8482856136ce565b509392505050565b600082601f830112613feb57613fea613510565b5b8151613ffb848260208601613f94565b91505092915050565b60006020828403121561401a5761401961347c565b5b600082015167ffffffffffffffff81111561403857614037613481565b5b61404484828501613fd6565b91505092915050565b7f6e657720707269636520697320657175616c207468616e2063757272656e7400600082015250565b6000614083601f836136bd565b915061408e8261404d565b602082019050919050565b600060208201905081810360008301526140b281614076565b9050919050565b60006140d46140cf6140ca8461342c565b613653565b613318565b9050919050565b6140e4816140b9565b82525050565b60006020820190506140ff60008301846140db565b92915050565b61410e81613c6b565b811461411957600080fd5b50565b60008151905061412b81614105565b92915050565b6000602082840312156141475761414661347c565b5b60006141558482850161411c565b91505092915050565b7f696e76616c696420537461727420507269636500000000000000000000000000600082015250565b60006141946013836136bd565b915061419f8261415e565b602082019050919050565b600060208201905081810360008301526141c381614187565b9050919050565b7f66656520617661696c61626c65206f6e6c79206f6e20747261646520706f6f6c60008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006142266021836136bd565b9150614231826141ca565b604082019050919050565b6000602082019050818103600083015261425581614219565b9050919050565b7f4e65772066656520697320657175616c207468616e2063757272656e74000000600082015250565b6000614292601d836136bd565b915061429d8261425c565b602082019050919050565b600060208201905081810360008301526142c181614285565b9050919050565b7f506f6f6c206974277320616c726561647920696e697469616c697a6564000000600082015250565b60006142fe601d836136bd565b9150614309826142c8565b602082019050919050565b6000602082019050818103600083015261432d816142f1565b9050919050565b7f43616e6e6f742073656c6c206f6e2073656c6c2d7479706520706f6f6c000000600082015250565b600061436a601d836136bd565b915061437582614334565b602082019050919050565b600060208201905081810360008301526143998161435d565b9050919050565b7f496e73756666696369656e74204e46542062616c616e63650000000000000000600082015250565b60006143d66018836136bd565b91506143e1826143a0565b602082019050919050565b60006020820190508181036000830152614405816143c9565b9050919050565b600081905092915050565b50565b600061442760008361440c565b915061443282614417565b600082019050919050565b60006144488261441a565b9150819050919050565b7f7478206572726f72000000000000000000000000000000000000000000000000600082015250565b60006144886008836136bd565b915061449382614452565b602082019050919050565b600060208201905081810360008301526144b78161447b565b9050919050565b60006040820190506144d36000830185613322565b6144e06020830184613322565b9392505050565b7f526563697069656e74206e6f7420737570706f7274656420696e20747261646560008201527f20706f6f6c730000000000000000000000000000000000000000000000000000602082015250565b60006145436026836136bd565b915061454e826144e7565b604082019050919050565b6000602082019050818103600083015261457281614536565b9050919050565b7f4e657720726563697069656e7420697320657175616c207468616e206375727260008201527f656e740000000000000000000000000000000000000000000000000000000000602082015250565b60006145d56023836136bd565b91506145e082614579565b604082019050919050565b60006020820190508181036000830152614604816145c8565b9050919050565b7f696e73756666696369656e742062616c616e6365000000000000000000000000600082015250565b60006146416014836136bd565b915061464c8261460b565b602082019050919050565b6000602082019050818103600083015261467081614634565b9050919050565b7f616d6f756e74206e6f742073656e646564000000000000000000000000000000600082015250565b60006146ad6011836136bd565b91506146b882614677565b602082019050919050565b600060208201905081810360008301526146dc816146a0565b9050919050565b6000815190506146f28161379c565b92915050565b60006020828403121561470e5761470d61347c565b5b600061471c848285016146e3565b91505092915050565b600060a08201905061473a6000830188613448565b6147476020830187613448565b6147546040830186613322565b6147616060830185613448565b61476e6080830184613448565b9695505050505050565b600080600080600060a086880312156147945761479361347c565b5b60006147a28882890161411c565b95505060206147b3888289016146e3565b94505060406147c4888289016146e3565b93505060606147d588828901613de5565b92505060806147e688828901613de5565b9150509295509295909350565b7f43616e6e6f742073656c6c206f6e206275792d7479706520706f6f6c00000000600082015250565b6000614829601c836136bd565b9150614834826147f3565b602082019050919050565b600060208201905081810360008301526148588161481c565b9050919050565b7f696e73756666696369656e7420746f6b656e2062616c616e6365000000000000600082015250565b6000614895601a836136bd565b91506148a08261485f565b602082019050919050565b600060208201905081810360008301526148c481614888565b9050919050565b60006060820190506148e06000830186613772565b6148ed6020830185613772565b6148fa6040830184613322565b949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061495e6026836136bd565b915061496982614902565b604082019050919050565b6000602082019050818103600083015261498d81614951565b9050919050565b7f6d756c7469706c69657220697320657175616c207468616e2063757272656e74600082015250565b60006149ca6020836136bd565b91506149d582614994565b602082019050919050565b600060208201905081810360008301526149f9816149bd565b9050919050565b7f696e76616c6964206d756c7469706c6965720000000000000000000000000000600082015250565b6000614a366012836136bd565b9150614a4182614a00565b602082019050919050565b60006020820190508181036000830152614a6581614a29565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614aa26020836136bd565b9150614aad82614a6c565b602082019050919050565b60006020820190508181036000830152614ad181614a95565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000614b0e601f836136bd565b9150614b1982614ad8565b602082019050919050565b60006020820190508181036000830152614b3d81614b01565b9050919050565b7f416c676f726974686d204572726f720000000000000000000000000000000000600082015250565b6000614b7a600f836136bd565b9150614b8582614b44565b602082019050919050565b60006020820190508181036000830152614ba981614b6d565b9050919050565b7f696e70757420616d6f756e742069732067726561746572207468616e206d617860008201527f2065787065637465640000000000000000000000000000000000000000000000602082015250565b6000614c0c6029836136bd565b9150614c1782614bb0565b604082019050919050565b60006020820190508181036000830152614c3b81614bff565b9050919050565b7f696e73756666696369656e7420616d6f756e74206f6620455448000000000000600082015250565b6000614c78601a836136bd565b9150614c8382614c42565b602082019050919050565b60006020820190508181036000830152614ca781614c6b565b9050919050565b600081519050614cbd816134b8565b92915050565b600060208284031215614cd957614cd861347c565b5b6000614ce784828501614cae565b91505092915050565b7f6f757470757420616d6f756e74206973206c6573207468616e206d696e20657860008201527f7065637465640000000000000000000000000000000000000000000000000000602082015250565b6000614d4c6026836136bd565b9150614d5782614cf0565b604082019050919050565b60006020820190508181036000830152614d7b81614d3f565b905091905056fea2646970667358221220f41c7ae228f4b435aacc3995d2c56c3fc53fdf024542b20112b6a224ad5355b764736f6c6343000811003360806040523480156200001157600080fd5b5060016000819055506200003a6200002e6200004060201b60201c565b6200004860201b60201c565b6200010e565b600033905090565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6153c0806200011e6000396000f3fe6080604052600436106101c65760003560e01c806378afd6db116100f7578063bba95d0711610095578063d9e1e25c11610064578063d9e1e25c1461065f578063f1a9af891461068a578063f2fde38b146106b5578063fea72227146106de57610204565b8063bba95d071461058d578063c1eaaf55146105ca578063c45a0155146105f3578063d8711d041461061e57610204565b80638d8f2adb116100d15780638d8f2adb146104df5780638da5cb5b146104f65780639cdd0de014610521578063b0a7d9341461056257610204565b806378afd6db1461045b5780637a0ace6d146104845780637c0b8de2146104b457610204565b80634d272a311161016457806367b8c52c1161013e57806367b8c52c146103cf5780636d31181b146103f85780636e13b58014610414578063715018a61461044457610204565b80634d272a311461034957806360246c881461037257806366d003ac146103a457610204565b80631b3ed722116101a05780631b3ed7221461029c57806324bcdfbd146102c757806335824b86146102f25780633ceafece1461031e57610204565b80630a2e0f84146102095780630a87f14814610234578063150b7a021461025f57610204565b36610204577ff1b3be8dace0fecfbdb6fb0fa1cc014c612bcb1b46db027c1ece5fc11fff09d6346040516101fa91906137fa565b60405180910390a1005b600080fd5b34801561021557600080fd5b5061021e610707565b60405161022b91906138d3565b60405180910390f35b34801561024057600080fd5b5061024961075f565b6040516102569190613920565b60405180910390f35b34801561026b57600080fd5b5061028660048036038101906102819190613a3e565b61076b565b6040516102939190613b01565b60405180910390f35b3480156102a857600080fd5b506102b1610838565b6040516102be9190613920565b60405180910390f35b3480156102d357600080fd5b506102dc61085a565b6040516102e99190613920565b60405180910390f35b3480156102fe57600080fd5b5061030761087c565b604051610315929190613c0b565b60405180910390f35b34801561032a57600080fd5b50610333610941565b6040516103409190613c4a565b60405180910390f35b34801561035557600080fd5b50610370600480360381019061036b9190613c91565b6109c9565b005b34801561037e57600080fd5b50610387610ba3565b60405161039b989796959493929190613d35565b60405180910390f35b3480156103b057600080fd5b506103b9610c6f565b6040516103c69190613c4a565b60405180910390f35b3480156103db57600080fd5b506103f660048036038101906103f19190613c91565b610c95565b005b610412600480360381019061040d9190613e24565b610e09565b005b61042e60048036038101906104299190613eda565b61110b565b60405161043b91906137fa565b60405180910390f35b34801561045057600080fd5b506104596113ef565b005b34801561046757600080fd5b50610482600480360381019061047d9190613f2d565b611403565b005b61049e60048036038101906104999190614098565b61158b565b6040516104ab91906137fa565b60405180910390f35b3480156104c057600080fd5b506104c9611873565b6040516104d69190613c4a565b60405180910390f35b3480156104eb57600080fd5b506104f4611899565b005b34801561050257600080fd5b5061050b6119f5565b6040516105189190613c4a565b60405180910390f35b34801561052d57600080fd5b5061054860048036038101906105439190614107565b611a1f565b60405161055995949392919061414f565b60405180910390f35b34801561056e57600080fd5b50610577611bd2565b60405161058491906141a2565b60405180910390f35b34801561059957600080fd5b506105b460048036038101906105af9190614098565b611be5565b6040516105c191906137fa565b60405180910390f35b3480156105d657600080fd5b506105f160048036038101906105ec91906141fb565b611d7d565b005b3480156105ff57600080fd5b5061060861206f565b6040516106159190614278565b60405180910390f35b34801561062a57600080fd5b5061064560048036038101906106409190614107565b612095565b60405161065695949392919061414f565b60405180910390f35b34801561066b57600080fd5b50610674612248565b6040516106819190614293565b60405180910390f35b34801561069657600080fd5b5061069f61226e565b6040516106ac9190613920565b60405180910390f35b3480156106c157600080fd5b506106dc60048036038101906106d79190613f2d565b612290565b005b3480156106ea57600080fd5b5061070560048036038101906107009190613c91565b612313565b005b6060600880548060200260200160405190810160405280929190818152602001828054801561075557602002820191906000526020600020905b815481526020019060010190808311610741575b5050505050905090565b670c7d713b49da000081565b60003373ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036107ec5760088490806001815401808255809150506001900390600052602060002001600090919091909150555b7f8d41742ac3564b1eb1e8470ae8b62d1dbe59ead009fd546a27c6bfedaa5d9c5e338560405161081d9291906142ae565b60405180910390a163150b7a0260e01b905095945050505050565b600260009054906101000a90046fffffffffffffffffffffffffffffffff1681565b600360009054906101000a90046fffffffffffffffffffffffffffffffff1681565b60006060600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169150600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015610912573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525081019061093b919061437d565b90509091565b60008073ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036109a0573090506109c6565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505b90565b6109d16124ed565b806fffffffffffffffffffffffffffffffff16600260109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1603610a55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4c90614412565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f0147a83826040518263ffffffff1660e01b8152600401610ab09190614463565b602060405180830381865afa158015610acd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af191906144aa565b610b30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2790614523565b60405180910390fd5b80600260106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055507f44b74ff1342b2d873c1e31fad9132996b29727c3ee8b08f3159481ce8e3467d681604051610b989190613920565b60405180910390a150565b6000806000806060600060606000600260009054906101000a90046fffffffffffffffffffffffffffffffff169750600260109054906101000a90046fffffffffffffffffffffffffffffffff169650600360009054906101000a90046fffffffffffffffffffffffffffffffff169550600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169450610c41610707565b9350610c4b61087c565b8093508194505050600660149054906101000a900460ff1690509091929394959697565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610c9d6124ed565b600280811115610cb057610caf613cbe565b5b600660149054906101000a900460ff166002811115610cd257610cd1613cbe565b5b14610d12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d09906145b5565b60405180910390fd5b806fffffffffffffffffffffffffffffffff16600360009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1603610d96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8d90614621565b60405180910390fd5b80600360006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055507fd23551c2af1a097e196af72b4e757c4de46eaa35d565b2a362770c769bb8b16f81604051610dfe9190614463565b60405180910390a150565b600073ffffffffffffffffffffffffffffffffffffffff16610e296119f5565b73ffffffffffffffffffffffffffffffffffffffff1614610e7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e769061468d565b60405180910390fd5b610e888561256b565b8573ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f1f5785600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b826fffffffffffffffffffffffffffffffff16600360009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1614610fa25782600360006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055505b81600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555087600260006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555086600260106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555083600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600660146101000a81548160ff021916908360028111156110bb576110ba613cbe565b5b021790555033600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505050505050565b6000611115612631565b6001600281111561112957611128613cbe565b5b600660149054906101000a900460ff16600281111561114b5761114a613cbe565b5b1480611189575060028081111561116557611164613cbe565b5b600660149054906101000a900460ff16600281111561118757611186613cbe565b5b145b6111c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111bf906146f9565b60405180910390fd5b83600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016112249190613c4a565b602060405180830381865afa158015611241573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611265919061472e565b10156112a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129d906147a7565b60405180910390fd5b60006112b28585612680565b80925081935050506112c48282612a2b565b6112ce8386612cae565b8134111561138f5760008373ffffffffffffffffffffffffffffffffffffffff1683346112fb91906147f6565b6040516113079061485b565b60006040518083038185875af1925050503d8060008114611344576040519150601f19603f3d011682016040523d82523d6000602084013e611349565b606091505b505090508061138d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611384906148bc565b60405180910390fd5b505b8273ffffffffffffffffffffffffffffffffffffffff167f06b1dfbaca5074fbd53d1b5ffb48d2749c4f5943e10f2975598e48f6e7000d1483876040516113d79291906148dc565b60405180910390a2506113e8612e64565b9392505050565b6113f76124ed565b611401600061256b565b565b61140b6124ed565b60028081111561141e5761141d613cbe565b5b600660149054906101000a900460ff1660028111156114405761143f613cbe565b5b03611480576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147790614977565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611510576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150790614a09565b60405180910390fd5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f37069114dc4447a7abc5cb9d8896d53638294236089c935044628dda808c9f06816040516115809190613c4a565b60405180910390a150565b6000611595612631565b600160028111156115a9576115a8613cbe565b5b600660149054906101000a900460ff1660028111156115cb576115ca613cbe565b5b148061160957506002808111156115e5576115e4613cbe565b5b600660149054906101000a900460ff16600281111561160757611606613cbe565b5b145b611648576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163f906146f9565b60405180910390fd5b8351600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016116a59190613c4a565b602060405180830381865afa1580156116c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116e6919061472e565b1015611727576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171e906147a7565b60405180910390fd5b6000611734855185612680565b80925081935050506117468282612a2b565b611751308487612e6e565b813411156118125760008373ffffffffffffffffffffffffffffffffffffffff16833461177e91906147f6565b60405161178a9061485b565b60006040518083038185875af1925050503d80600081146117c7576040519150601f19603f3d011682016040523d82523d6000602084013e6117cc565b606091505b5050905080611810576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611807906148bc565b60405180910390fd5b505b8273ffffffffffffffffffffffffffffffffffffffff167f06b1dfbaca5074fbd53d1b5ffb48d2749c4f5943e10f2975598e48f6e7000d1483875160405161185b9291906148dc565b60405180910390a25061186c612e64565b9392505050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6118a16124ed565b6000479050600081116118e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e090614a75565b60405180910390fd5b60006118f36119f5565b73ffffffffffffffffffffffffffffffffffffffff16826040516119169061485b565b60006040518083038185875af1925050503d8060008114611953576040519150601f19603f3d011682016040523d82523d6000602084013e611958565b606091505b505090508061199c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199390614ae1565b60405180910390fd5b6119a46119f5565b73ffffffffffffffffffffffffffffffffffffffff167feddb53e10e60b3a2396b4222b3db092137bdbf7a6fecceaf2b0b438ff0ddc66e836040516119e991906137fa565b60405180910390a25050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000806000806000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663737142aa600260009054906101000a90046fffffffffffffffffffffffffffffffff16600260109054906101000a90046fffffffffffffffffffffffffffffffff1689600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630b4501fd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b11573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b359190614b16565b600360009054906101000a90046fffffffffffffffffffffffffffffffff166040518663ffffffff1660e01b8152600401611b74959493929190614b43565b60a060405180830381865afa158015611b91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bb59190614b96565b809550819650829750839850849950505050505091939590929450565b600660149054906101000a900460ff1681565b6000611bef612631565b60006002811115611c0357611c02613cbe565b5b600660149054906101000a900460ff166002811115611c2557611c24613cbe565b5b1480611c635750600280811115611c3f57611c3e613cbe565b5b600660149054906101000a900460ff166002811115611c6157611c60613cbe565b5b145b611ca2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9990614c5d565b60405180910390fd5b82471015611ce5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cdc90614cc9565b60405180910390fd5b6000611cf28551856130d3565b80925081935050506000611d04610941565b9050611d11848288612e6e565b611d1c82848661347e565b8373ffffffffffffffffffffffffffffffffffffffff167ecf6f77b65ea0ac901747b80e8becba7db1c3a04b9bda970ef1b4dc53c54a32875185604051611d649291906148dc565b60405180910390a25050611d76612e64565b9392505050565b611d856124ed565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611f635760005b8251811015611f5d578173ffffffffffffffffffffffffffffffffffffffff166342842e0e30611e106119f5565b868581518110611e2357611e22614ce9565b5b60200260200101516040518463ffffffff1660e01b8152600401611e4993929190614d18565b600060405180830381600087803b158015611e6357600080fd5b505af1158015611e77573d6000803e3d6000fd5b50505050611f0b611efb848381518110611e9457611e93614ce9565b5b60200260200101516008805480602002602001604051908101604052809291908181526020018280548015611ee857602002820191906000526020600020905b815481526020019060010190808311611ed4575b505050505061364790919063ffffffff16565b60086136de90919063ffffffff16565b611f4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4190614d9b565b60405180910390fd5b8080611f5590614dbb565b915050611de2565b50612014565b60005b8251811015612012578373ffffffffffffffffffffffffffffffffffffffff166342842e0e30611f946119f5565b868581518110611fa757611fa6614ce9565b5b60200260200101516040518463ffffffff1660e01b8152600401611fcd93929190614d18565b600060405180830381600087803b158015611fe757600080fd5b505af1158015611ffb573d6000803e3d6000fd5b50505050808061200a90614dbb565b915050611f66565b505b61201c6119f5565b73ffffffffffffffffffffffffffffffffffffffff167f0fad010bb612e87452fce7176925c641e9b8d06a8c98013c3e5f33838c619d77835160405161206291906137fa565b60405180910390a2505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806000806000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e6649054600260009054906101000a90046fffffffffffffffffffffffffffffffff16600260109054906101000a90046fffffffffffffffffffffffffffffffff1689600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630b4501fd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612187573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121ab9190614b16565b600360009054906101000a90046fffffffffffffffffffffffffffffffff166040518663ffffffff1660e01b81526004016121ea959493929190614b43565b60a060405180830381865afa158015612207573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061222b9190614b96565b809550819650829750839850849950505050505091939590929450565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600260109054906101000a90046fffffffffffffffffffffffffffffffff1681565b6122986124ed565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612307576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122fe90614e75565b60405180910390fd5b6123108161256b565b50565b61231b6124ed565b806fffffffffffffffffffffffffffffffff16600260009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff160361239f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239690614ee1565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663806e7225826040518263ffffffff1660e01b81526004016123fa9190614463565b602060405180830381865afa158015612417573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061243b91906144aa565b61247a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247190614f4d565b60405180910390fd5b80600260006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055507fc75ea82b4452774a557ab43d8f84b03688cdde824aeaef6a639d686bd5314401816040516124e29190613920565b60405180910390a150565b6124f5613782565b73ffffffffffffffffffffffffffffffffffffffff166125136119f5565b73ffffffffffffffffffffffffffffffffffffffff1614612569576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256090614fb9565b60405180910390fd5b565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600260005403612676576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266d90615025565b60405180910390fd5b6002600081905550565b6000806000806000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e6649054600260009054906101000a90046fffffffffffffffffffffffffffffffff16600260109054906101000a90046fffffffffffffffffffffffffffffffff168a600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630b4501fd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612772573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127969190614b16565b600360009054906101000a90046fffffffffffffffffffffffffffffffff166040518663ffffffff1660e01b81526004016127d5959493929190614b43565b60a060405180830381865afa1580156127f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128169190614b96565b80985081995082955083965084975050505050508261286a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161286190615091565b60405180910390fd5b858511156128ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128a490615123565b60405180910390fd5b816fffffffffffffffffffffffffffffffff16600260109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16146129675781600260106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055507f44b74ff1342b2d873c1e31fad9132996b29727c3ee8b08f3159481ce8e3467d68260405161295e9190613920565b60405180910390a15b806fffffffffffffffffffffffffffffffff16600260009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1614612a215780600260006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055507fc75ea82b4452774a557ab43d8f84b03688cdde824aeaef6a639d686bd531440181604051612a189190613920565b60405180910390a15b5050509250929050565b81341015612a6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a659061518f565b60405180910390fd5b6000612a78610941565b90503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614612b665760008173ffffffffffffffffffffffffffffffffffffffff168385612ad291906147f6565b604051612ade9061485b565b60006040518083038185875af1925050503d8060008114612b1b576040519150601f19603f3d011682016040523d82523d6000602084013e612b20565b606091505b5050905080612b64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b5b906148bc565b60405180910390fd5b505b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663730143c66040518163ffffffff1660e01b8152600401602060405180830381865afa158015612bd5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bf991906151c4565b905060008173ffffffffffffffffffffffffffffffffffffffff1684604051612c219061485b565b60006040518083038185875af1925050503d8060008114612c5e576040519150601f19603f3d011682016040523d82523d6000602084013e612c63565b606091505b5050905080612ca7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c9e906148bc565b60405180910390fd5b5050505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000612cdf610707565b905060005b83811015612e5d578273ffffffffffffffffffffffffffffffffffffffff166342842e0e3087858581518110612d1d57612d1c614ce9565b5b60200260200101516040518463ffffffff1660e01b8152600401612d4393929190614d18565b600060405180830381600087803b158015612d5d57600080fd5b505af1158015612d71573d6000803e3d6000fd5b505050506000612df4838381518110612d8d57612d8c614ce9565b5b60200260200101516008805480602002602001604051908101604052809291908181526020018280548015612de157602002820191906000526020600020905b815481526020019060010190808311612dcd575b505050505061364790919063ffffffff16565b9050612e0a8160086136de90919063ffffffff16565b612e49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e4090614d9b565b60405180910390fd5b508080612e5590614dbb565b915050612ce4565b5050505050565b6001600081905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060005b82518110156130cc578173ffffffffffffffffffffffffffffffffffffffff166342842e0e8686868581518110612ed257612ed1614ce9565b5b60200260200101516040518463ffffffff1660e01b8152600401612ef893929190614d18565b600060405180830381600087803b158015612f1257600080fd5b505af1158015612f26573d6000803e3d6000fd5b505050503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148015612fde5750612fdd838281518110612f7657612f75614ce9565b5b60200260200101516008805480602002602001604051908101604052809291908181526020018280548015612fca57602002820191906000526020600020905b815481526020019060010190808311612fb6575b505050505061378a90919063ffffffff16565b5b156130b9576000613062848381518110612ffb57612ffa614ce9565b5b6020026020010151600880548060200260200160405190810160405280929190818152602001828054801561304f57602002820191906000526020600020905b81548152602001906001019080831161303b575b505050505061364790919063ffffffff16565b90506130788160086136de90919063ffffffff16565b6130b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130ae9061523d565b60405180910390fd5b505b80806130c490614dbb565b915050612e98565b5050505050565b6000806000806000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663737142aa600260009054906101000a90046fffffffffffffffffffffffffffffffff16600260109054906101000a90046fffffffffffffffffffffffffffffffff168a600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630b4501fd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156131c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131e99190614b16565b600360009054906101000a90046fffffffffffffffffffffffffffffffff166040518663ffffffff1660e01b8152600401613228959493929190614b43565b60a060405180830381865afa158015613245573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132699190614b96565b8098508199508295508396508497505050505050826132bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132b490615091565b60405180910390fd5b85851015613300576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132f7906152cf565b60405180910390fd5b816fffffffffffffffffffffffffffffffff16600260109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16146133ba5781600260106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055507f44b74ff1342b2d873c1e31fad9132996b29727c3ee8b08f3159481ce8e3467d6826040516133b19190613920565b60405180910390a15b806fffffffffffffffffffffffffffffffff16600260009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16146134745780600260006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055507fc75ea82b4452774a557ab43d8f84b03688cdde824aeaef6a639d686bd53144018160405161346b9190613920565b60405180910390a15b5050509250929050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663730143c66040518163ffffffff1660e01b8152600401602060405180830381865afa1580156134ed573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061351191906151c4565b905060008173ffffffffffffffffffffffffffffffffffffffff16856040516135399061485b565b60006040518083038185875af1925050503d8060008114613576576040519150601f19603f3d011682016040523d82523d6000602084013e61357b565b606091505b5050905060008373ffffffffffffffffffffffffffffffffffffffff1686866135a491906147f6565b6040516135b09061485b565b60006040518083038185875af1925050503d80600081146135ed576040519150601f19603f3d011682016040523d82523d6000602084013e6135f2565b606091505b505090508080156136005750815b61363f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613636906148bc565b60405180910390fd5b505050505050565b600080600090505b8351811015613695578284828151811061366c5761366b614ce9565b5b60200260200101510361368257809150506136d8565b808061368d90614dbb565b91505061364f565b5060016136d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136ce9061533b565b60405180910390fd5b5b92915050565b6000600183805490506136f191906147f6565b821115613701576000905061377c565b826001848054905061371391906147f6565b8154811061372457613723614ce9565b5b906000526020600020015483838154811061374257613741614ce9565b5b9060005260206000200181905550828054806137615761376061535b565b5b60019003818190600052602060002001600090559055600190505b92915050565b600033905090565b600080600090505b83518110156137d957828482815181106137af576137ae614ce9565b5b6020026020010151036137c65760019150506137db565b80806137d190614dbb565b915050613792565b505b92915050565b6000819050919050565b6137f4816137e1565b82525050565b600060208201905061380f60008301846137eb565b92915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61384a816137e1565b82525050565b600061385c8383613841565b60208301905092915050565b6000602082019050919050565b600061388082613815565b61388a8185613820565b935061389583613831565b8060005b838110156138c65781516138ad8882613850565b97506138b883613868565b925050600181019050613899565b5085935050505092915050565b600060208201905081810360008301526138ed8184613875565b905092915050565b60006fffffffffffffffffffffffffffffffff82169050919050565b61391a816138f5565b82525050565b60006020820190506139356000830184613911565b92915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061397a8261394f565b9050919050565b61398a8161396f565b811461399557600080fd5b50565b6000813590506139a781613981565b92915050565b6139b6816137e1565b81146139c157600080fd5b50565b6000813590506139d3816139ad565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126139fe576139fd6139d9565b5b8235905067ffffffffffffffff811115613a1b57613a1a6139de565b5b602083019150836001820283011115613a3757613a366139e3565b5b9250929050565b600080600080600060808688031215613a5a57613a59613945565b5b6000613a6888828901613998565b9550506020613a7988828901613998565b9450506040613a8a888289016139c4565b935050606086013567ffffffffffffffff811115613aab57613aaa61394a565b5b613ab7888289016139e8565b92509250509295509295909350565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b613afb81613ac6565b82525050565b6000602082019050613b166000830184613af2565b92915050565b6000819050919050565b6000613b41613b3c613b378461394f565b613b1c565b61394f565b9050919050565b6000613b5382613b26565b9050919050565b6000613b6582613b48565b9050919050565b613b7581613b5a565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613bb5578082015181840152602081019050613b9a565b60008484015250505050565b6000601f19601f8301169050919050565b6000613bdd82613b7b565b613be78185613b86565b9350613bf7818560208601613b97565b613c0081613bc1565b840191505092915050565b6000604082019050613c206000830185613b6c565b8181036020830152613c328184613bd2565b90509392505050565b613c448161396f565b82525050565b6000602082019050613c5f6000830184613c3b565b92915050565b613c6e816138f5565b8114613c7957600080fd5b50565b600081359050613c8b81613c65565b92915050565b600060208284031215613ca757613ca6613945565b5b6000613cb584828501613c7c565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60038110613cfe57613cfd613cbe565b5b50565b6000819050613d0f82613ced565b919050565b6000613d1f82613d01565b9050919050565b613d2f81613d14565b82525050565b600061010082019050613d4b600083018b613911565b613d58602083018a613911565b613d656040830189613911565b613d726060830188613c3b565b8181036080830152613d848187613875565b9050613d9360a0830186613b6c565b81810360c0830152613da58185613bd2565b9050613db460e0830184613d26565b9998505050505050505050565b6000613dcc8261396f565b9050919050565b613ddc81613dc1565b8114613de757600080fd5b50565b600081359050613df981613dd3565b92915050565b60038110613e0c57600080fd5b50565b600081359050613e1e81613dff565b92915050565b600080600080600080600080610100898b031215613e4557613e44613945565b5b6000613e538b828c01613c7c565b9850506020613e648b828c01613c7c565b9750506040613e758b828c01613998565b9650506060613e868b828c01613998565b9550506080613e978b828c01613998565b94505060a0613ea88b828c01613c7c565b93505060c0613eb98b828c01613dea565b92505060e0613eca8b828c01613e0f565b9150509295985092959890939650565b600080600060608486031215613ef357613ef2613945565b5b6000613f01868287016139c4565b9350506020613f12868287016139c4565b9250506040613f2386828701613998565b9150509250925092565b600060208284031215613f4357613f42613945565b5b6000613f5184828501613998565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613f9282613bc1565b810181811067ffffffffffffffff82111715613fb157613fb0613f5a565b5b80604052505050565b6000613fc461393b565b9050613fd08282613f89565b919050565b600067ffffffffffffffff821115613ff057613fef613f5a565b5b602082029050602081019050919050565b600061401461400f84613fd5565b613fba565b90508083825260208201905060208402830185811115614037576140366139e3565b5b835b81811015614060578061404c88826139c4565b845260208401935050602081019050614039565b5050509392505050565b600082601f83011261407f5761407e6139d9565b5b813561408f848260208601614001565b91505092915050565b6000806000606084860312156140b1576140b0613945565b5b600084013567ffffffffffffffff8111156140cf576140ce61394a565b5b6140db8682870161406a565b93505060206140ec868287016139c4565b92505060406140fd86828701613998565b9150509250925092565b60006020828403121561411d5761411c613945565b5b600061412b848285016139c4565b91505092915050565b60008115159050919050565b61414981614134565b82525050565b600060a0820190506141646000830188614140565b6141716020830187613911565b61417e6040830186613911565b61418b60608301856137eb565b61419860808301846137eb565b9695505050505050565b60006020820190506141b76000830184613d26565b92915050565b60006141c88261396f565b9050919050565b6141d8816141bd565b81146141e357600080fd5b50565b6000813590506141f5816141cf565b92915050565b6000806040838503121561421257614211613945565b5b6000614220858286016141e6565b925050602083013567ffffffffffffffff8111156142415761424061394a565b5b61424d8582860161406a565b9150509250929050565b600061426282613b48565b9050919050565b61427281614257565b82525050565b600060208201905061428d6000830184614269565b92915050565b60006020820190506142a86000830184613b6c565b92915050565b60006040820190506142c36000830185613c3b565b6142d060208301846137eb565b9392505050565b600080fd5b600067ffffffffffffffff8211156142f7576142f6613f5a565b5b61430082613bc1565b9050602081019050919050565b600061432061431b846142dc565b613fba565b90508281526020810184848401111561433c5761433b6142d7565b5b614347848285613b97565b509392505050565b600082601f830112614364576143636139d9565b5b815161437484826020860161430d565b91505092915050565b60006020828403121561439357614392613945565b5b600082015167ffffffffffffffff8111156143b1576143b061394a565b5b6143bd8482850161434f565b91505092915050565b7f6e657720707269636520697320657175616c207468616e2063757272656e7400600082015250565b60006143fc601f83613b86565b9150614407826143c6565b602082019050919050565b6000602082019050818103600083015261442b816143ef565b9050919050565b600061444d614448614443846138f5565b613b1c565b6137e1565b9050919050565b61445d81614432565b82525050565b60006020820190506144786000830184614454565b92915050565b61448781614134565b811461449257600080fd5b50565b6000815190506144a48161447e565b92915050565b6000602082840312156144c0576144bf613945565b5b60006144ce84828501614495565b91505092915050565b7f696e76616c696420537461727420507269636500000000000000000000000000600082015250565b600061450d601383613b86565b9150614518826144d7565b602082019050919050565b6000602082019050818103600083015261453c81614500565b9050919050565b7f66656520617661696c61626c65206f6e6c79206f6e20747261646520706f6f6c60008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600061459f602183613b86565b91506145aa82614543565b604082019050919050565b600060208201905081810360008301526145ce81614592565b9050919050565b7f4e65772066656520697320657175616c207468616e2063757272656e74000000600082015250565b600061460b601d83613b86565b9150614616826145d5565b602082019050919050565b6000602082019050818103600083015261463a816145fe565b9050919050565b7f506f6f6c206974277320616c726561647920696e697469616c697a6564000000600082015250565b6000614677601d83613b86565b915061468282614641565b602082019050919050565b600060208201905081810360008301526146a68161466a565b9050919050565b7f43616e6e6f742073656c6c206f6e2073656c6c2d7479706520706f6f6c000000600082015250565b60006146e3601d83613b86565b91506146ee826146ad565b602082019050919050565b60006020820190508181036000830152614712816146d6565b9050919050565b600081519050614728816139ad565b92915050565b60006020828403121561474457614743613945565b5b600061475284828501614719565b91505092915050565b7f496e73756666696369656e74204e46542062616c616e63650000000000000000600082015250565b6000614791601883613b86565b915061479c8261475b565b602082019050919050565b600060208201905081810360008301526147c081614784565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614801826137e1565b915061480c836137e1565b9250828203905081811115614824576148236147c7565b5b92915050565b600081905092915050565b50565b600061484560008361482a565b915061485082614835565b600082019050919050565b600061486682614838565b9150819050919050565b7f7478206572726f72000000000000000000000000000000000000000000000000600082015250565b60006148a6600883613b86565b91506148b182614870565b602082019050919050565b600060208201905081810360008301526148d581614899565b9050919050565b60006040820190506148f160008301856137eb565b6148fe60208301846137eb565b9392505050565b7f526563697069656e74206e6f7420737570706f7274656420696e20747261646560008201527f20706f6f6c730000000000000000000000000000000000000000000000000000602082015250565b6000614961602683613b86565b915061496c82614905565b604082019050919050565b6000602082019050818103600083015261499081614954565b9050919050565b7f4e657720726563697069656e7420697320657175616c207468616e206375727260008201527f656e740000000000000000000000000000000000000000000000000000000000602082015250565b60006149f3602383613b86565b91506149fe82614997565b604082019050919050565b60006020820190508181036000830152614a22816149e6565b9050919050565b7f696e73756666696369656e742062616c616e6365000000000000000000000000600082015250565b6000614a5f601483613b86565b9150614a6a82614a29565b602082019050919050565b60006020820190508181036000830152614a8e81614a52565b9050919050565b7f616d6f756e74206e6f742073656e646564000000000000000000000000000000600082015250565b6000614acb601183613b86565b9150614ad682614a95565b602082019050919050565b60006020820190508181036000830152614afa81614abe565b9050919050565b600081519050614b1081613c65565b92915050565b600060208284031215614b2c57614b2b613945565b5b6000614b3a84828501614b01565b91505092915050565b600060a082019050614b586000830188613911565b614b656020830187613911565b614b7260408301866137eb565b614b7f6060830185613911565b614b8c6080830184613911565b9695505050505050565b600080600080600060a08688031215614bb257614bb1613945565b5b6000614bc088828901614495565b9550506020614bd188828901614b01565b9450506040614be288828901614b01565b9350506060614bf388828901614719565b9250506080614c0488828901614719565b9150509295509295909350565b7f43616e6e6f742073656c6c206f6e206275792d7479706520706f6f6c00000000600082015250565b6000614c47601c83613b86565b9150614c5282614c11565b602082019050919050565b60006020820190508181036000830152614c7681614c3a565b9050919050565b7f696e73756666696369656e7420746f6b656e2062616c616e6365000000000000600082015250565b6000614cb3601a83613b86565b9150614cbe82614c7d565b602082019050919050565b60006020820190508181036000830152614ce281614ca6565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000606082019050614d2d6000830186613c3b565b614d3a6020830185613c3b565b614d4760408301846137eb565b949350505050565b7f4e4654207472616e73666572206572726f720000000000000000000000000000600082015250565b6000614d85601283613b86565b9150614d9082614d4f565b602082019050919050565b60006020820190508181036000830152614db481614d78565b9050919050565b6000614dc6826137e1565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614df857614df76147c7565b5b600182019050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614e5f602683613b86565b9150614e6a82614e03565b604082019050919050565b60006020820190508181036000830152614e8e81614e52565b9050919050565b7f6d756c7469706c69657220697320657175616c207468616e2063757272656e74600082015250565b6000614ecb602083613b86565b9150614ed682614e95565b602082019050919050565b60006020820190508181036000830152614efa81614ebe565b9050919050565b7f696e76616c6964206d756c7469706c6965720000000000000000000000000000600082015250565b6000614f37601283613b86565b9150614f4282614f01565b602082019050919050565b60006020820190508181036000830152614f6681614f2a565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614fa3602083613b86565b9150614fae82614f6d565b602082019050919050565b60006020820190508181036000830152614fd281614f96565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b600061500f601f83613b86565b915061501a82614fd9565b602082019050919050565b6000602082019050818103600083015261503e81615002565b9050919050565b7f416c676f726974686d204572726f720000000000000000000000000000000000600082015250565b600061507b600f83613b86565b915061508682615045565b602082019050919050565b600060208201905081810360008301526150aa8161506e565b9050919050565b7f696e70757420616d6f756e742069732067726561746572207468616e206d617860008201527f2065787065637465640000000000000000000000000000000000000000000000602082015250565b600061510d602983613b86565b9150615118826150b1565b604082019050919050565b6000602082019050818103600083015261513c81615100565b9050919050565b7f696e73756666696369656e7420616d6f756e74206f6620455448000000000000600082015250565b6000615179601a83613b86565b915061518482615143565b602082019050919050565b600060208201905081810360008301526151a88161516c565b9050919050565b6000815190506151be81613981565b92915050565b6000602082840312156151da576151d9613945565b5b60006151e8848285016151af565b91505092915050565b7f556e6b6e6f776e20746f6b656e49440000000000000000000000000000000000600082015250565b6000615227600f83613b86565b9150615232826151f1565b602082019050919050565b600060208201905081810360008301526152568161521a565b9050919050565b7f6f757470757420616d6f756e74206973206c6573207468616e206d696e20657860008201527f7065637465640000000000000000000000000000000000000000000000000000602082015250565b60006152b9602683613b86565b91506152c48261525d565b604082019050919050565b600060208201905081810360008301526152e8816152ac565b9050919050565b7f54686520656c656d656e7420646f65736e277420657869737400000000000000600082015250565b6000615325601983613b86565b9150615330826152ef565b602082019050919050565b6000602082019050818103600083015261535481615318565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea2646970667358221220ccdfe0fd0843cc07f00e554389760f137115419f2daec10cb0edb080a62a9b8f64736f6c6343000811003300000000000000000000000026c44a6f8664b6cb7e4dac2b3ea47538b4d28b71000000000000000000000000eb353c17c9899f28dbfefbd943cdd553c3cc32af000000000000000000000000b2e93fbd399f74b4b73ae5bd466c08ebaecbf726000000000000000000000000ed41c898a7b7837afd421cf081f6a558decbce5f