diff --git a/client/src/App.jsx b/client/src/App.jsx index 9809b68..e1f2289 100644 --- a/client/src/App.jsx +++ b/client/src/App.jsx @@ -81,22 +81,30 @@ function App() { setTotalReputation(await DAORef.current.methods.totalSupply().call()); }, [DAORef, account]); - const fetchPost = useCallback(async (postIndex) => { - const p = await DAORef.current.methods.posts(postIndex).call(); - p.id = Number(p.id); - dispatchPost({ type: 'update', item: p }); + const fetchPost = useCallback(async (postId) => { + const p = await DAORef.current.methods.posts(postId).call(); + dispatchPost({ type: 'updateById', item: p }); return p; }, [DAORef, dispatchPost]); + const fetchPostId = useCallback(async (postIndex) => { + const postId = await DAORef.current.methods.postIds(postIndex).call(); + return postId; + }, [DAORef]); + const fetchPosts = useCallback(async () => { const count = await DAORef.current.methods.postCount().call(); - const promises = []; + let promises = []; dispatchPost({ type: 'refresh' }); for (let i = 0; i < count; i += 1) { - promises.push(fetchPost(i)); + promises.push(fetchPostId(i)); } - await Promise.all(promises); - }, [DAORef, dispatchPost, fetchPost]); + const postIds = await Promise.all(promises); + promises = []; + postIds.forEach((postId) => { + promises.push(fetchPost(postId)); + }); + }, [DAORef, dispatchPost, fetchPost, fetchPostId]); const fetchValidationPool = useCallback(async (poolIndex) => { const getPoolStatus = (pool) => { @@ -193,7 +201,7 @@ function App() { DAOContract.events.PostAdded({ fromBlock: 'latest' }).on('data', (event) => { console.log('event: post added'); - fetchPost(event.returnValues.postIndex); + fetchPost(event.returnValues.id); }); DAOContract.events.ValidationPoolInitiated({ fromBlock: 'latest' }).on('data', (event) => { @@ -263,10 +271,10 @@ function App() { }); }, [provider, chainId]); - const initiateValidationPool = useCallback(async (postIndex, poolDuration) => { + const initiateValidationPool = useCallback(async (postId, poolDuration) => { const web3 = new Web3(provider); await DAO.methods.initiateValidationPool( - postIndex, + postId, poolDuration ?? 3600, [1, 3], [1, 2], @@ -307,8 +315,8 @@ function App() { const handleShowAddPost = () => setShowAddPost(true); - const handleShowViewPost = useCallback(async ({ contentId }) => { - const post = await Post.read(contentId); + const handleShowViewPost = useCallback(async ({ id }) => { + const post = await Post.read(id); setViewPost(post); setShowViewPost(true); }, [setViewPost, setShowViewPost]); @@ -476,7 +484,7 @@ function App() { {validationPools.filter((x) => !!x).map((pool) => ( {pool.id.toString()} - {pool.postIndex.toString()} + {pool.postId} {getAddressName(chainId, pool.sender)} {pool.fee.toString()} diff --git a/client/src/assets/DAO.json b/client/src/assets/DAO.json index 9932119..485190f 100644 --- a/client/src/assets/DAO.json +++ b/client/src/assets/DAO.json @@ -119,9 +119,9 @@ "inputs": [ { "indexed": false, - "internalType": "uint256", - "name": "postIndex", - "type": "uint256" + "internalType": "string", + "name": "id", + "type": "string" } ], "name": "PostAdded", @@ -210,9 +210,9 @@ "type": "int256" }, { - "internalType": "uint256", - "name": "targetPostIndex", - "type": "uint256" + "internalType": "string", + "name": "targetPostId", + "type": "string" } ], "internalType": "struct Citation[]", @@ -221,13 +221,7 @@ } ], "name": "addPost", - "outputs": [ - { - "internalType": "uint256", - "name": "postIndex", - "type": "uint256" - } - ], + "outputs": [], "stateMutability": "nonpayable", "type": "function" }, @@ -361,9 +355,9 @@ { "inputs": [ { - "internalType": "uint256", - "name": "postIndex", - "type": "uint256" + "internalType": "string", + "name": "postId", + "type": "string" }, { "internalType": "uint256", @@ -497,12 +491,31 @@ "type": "uint256" } ], + "name": "postIds", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], "name": "posts", "outputs": [ { - "internalType": "uint256", + "internalType": "string", "name": "id", - "type": "uint256" + "type": "string" }, { "internalType": "address", @@ -514,11 +527,6 @@ "name": "author", "type": "address" }, - { - "internalType": "string", - "name": "contentId", - "type": "string" - }, { "internalType": "uint256", "name": "reputation", @@ -688,9 +696,9 @@ "type": "uint256" }, { - "internalType": "uint256", - "name": "postIndex", - "type": "uint256" + "internalType": "string", + "name": "postId", + "type": "string" }, { "internalType": "address", @@ -774,8 +782,8 @@ "type": "function" } ], - "bytecode": "0x608060405260036008556040518060400160405280600160ff168152602001600a60ff16815250600e90600262000038929190620000df565b503480156200004657600080fd5b506040518060400160405280600a81526020017f52657075746174696f6e000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f52455000000000000000000000000000000000000000000000000000000000008152508160039081620000c49190620003c2565b508060049081620000d69190620003c2565b505050620004a9565b826002810192821562000116579160200282015b8281111562000115578251829060ff16905591602001919060010190620000f3565b5b50905062000125919062000129565b5090565b5b80821115620001445760008160009055506001016200012a565b5090565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620001ca57607f821691505b602082108103620001e057620001df62000182565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026200024a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200020b565b6200025686836200020b565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620002a36200029d62000297846200026e565b62000278565b6200026e565b9050919050565b6000819050919050565b620002bf8362000282565b620002d7620002ce82620002aa565b84845462000218565b825550505050565b600090565b620002ee620002df565b620002fb818484620002b4565b505050565b5b81811015620003235762000317600082620002e4565b60018101905062000301565b5050565b601f82111562000372576200033c81620001e6565b6200034784620001fb565b8101602085101562000357578190505b6200036f6200036685620001fb565b83018262000300565b50505b505050565b600082821c905092915050565b6000620003976000198460080262000377565b1980831691505092915050565b6000620003b2838362000384565b9150826002028217905092915050565b620003cd8262000148565b67ffffffffffffffff811115620003e957620003e862000153565b5b620003f58254620001b1565b6200040282828562000327565b600060209050601f8311600181146200043a576000841562000425578287015190505b620004318582620003a4565b865550620004a1565b601f1984166200044a86620001e6565b60005b8281101562000474578489015182556001820191506020850194506020810190506200044d565b8683101562000494578489015162000490601f89168262000384565b8355505b6001600288020188555050505b505050505050565b614a0280620004b96000396000f3fe6080604052600436106101355760003560e01c80635daf08ca116100ab57806395d89b411161006f57806395d89b4114610481578063975762b3146104ac578063a230c524146104d5578063a233627914610512578063a9059cbb1461055a578063dd62ed3e1461059757610135565b80635daf08ca1461036f578063642b5bfb146103ac57806370a08231146103d75780637fcf675914610414578063883802741461044457610135565b806317c18217116100fd57806317c182171461023957806318160ddd1461027657806323b872dd146102a15780632d17c062146102de578063313ce567146103075780634acce5911461033257610135565b806306fdde031461013a578063095ea7b3146101655780630b1e7f83146101a257806311aee380146101e357806317906c2e1461020e575b600080fd5b34801561014657600080fd5b5061014f6105d4565b60405161015c9190612dad565b60405180910390f35b34801561017157600080fd5b5061018c60048036038101906101879190612e6d565b610666565b6040516101999190612ec8565b60405180910390f35b3480156101ae57600080fd5b506101c960048036038101906101c49190612ee3565b610689565b6040516101da959493929190612f2e565b60405180910390f35b3480156101ef57600080fd5b506101f8610787565b6040516102059190612f88565b60405180910390f35b34801561021a57600080fd5b5061022361078d565b6040516102309190612f88565b60405180910390f35b34801561024557600080fd5b50610260600480360381019061025b9190612ee3565b610793565b60405161026d9190612ec8565b60405180910390f35b34801561028257600080fd5b5061028b61128f565b6040516102989190612f88565b60405180910390f35b3480156102ad57600080fd5b506102c860048036038101906102c39190612fa3565b611299565b6040516102d59190612ec8565b60405180910390f35b3480156102ea57600080fd5b5061030560048036038101906103009190613022565b6112d6565b005b34801561031357600080fd5b5061031c6112ff565b6040516103299190613091565b60405180910390f35b34801561033e57600080fd5b5061035960048036038101906103549190613167565b611308565b6040516103669190612f88565b60405180910390f35b34801561037b57600080fd5b5061039660048036038101906103919190612ee3565b611659565b6040516103a391906131fc565b60405180910390f35b3480156103b857600080fd5b506103c161168c565b6040516103ce9190612f88565b60405180910390f35b3480156103e357600080fd5b506103fe60048036038101906103f99190613217565b611692565b60405161040b9190612f88565b60405180910390f35b61042e600480360381019061042991906132bc565b6116da565b60405161043b9190612f88565b60405180910390f35b34801561045057600080fd5b5061046b60048036038101906104669190613394565b611bc4565b6040516104789190612ec8565b60405180910390f35b34801561048d57600080fd5b50610496611c4b565b6040516104a39190612dad565b60405180910390f35b3480156104b857600080fd5b506104d360048036038101906104ce91906133e7565b611cdd565b005b3480156104e157600080fd5b506104fc60048036038101906104f79190613217565b611d12565b6040516105099190612ec8565b60405180910390f35b34801561051e57600080fd5b5061053960048036038101906105349190612ee3565b611d32565b6040516105519c9b9a999897969594939291906135c5565b60405180910390f35b34801561056657600080fd5b50610581600480360381019061057c9190612e6d565b611f24565b60405161058e9190612ec8565b60405180910390f35b3480156105a357600080fd5b506105be60048036038101906105b99190613688565b611f61565b6040516105cb9190612f88565b60405180910390f35b6060600380546105e3906136f7565b80601f016020809104026020016040519081016040528092919081815260200182805461060f906136f7565b801561065c5780601f106106315761010080835404028352916020019161065c565b820191906000526020600020905b81548152906001019060200180831161063f57829003601f168201915b5050505050905090565b600080610671611fe8565b905061067e818585611ff0565b600191505092915050565b60056020528060005260406000206000915090508060000154908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060030180546106fe906136f7565b80601f016020809104026020016040519081016040528092919081815260200182805461072a906136f7565b80156107775780601f1061074c57610100808354040283529160200191610777565b820191906000526020600020905b81548152906001019060200180831161075a57829003601f168201915b5050505050908060050154905085565b600c5481565b60065481565b6000806009600084815260200190815260200160002090506000600560008360010154815260200190815260200160002090506000151582600f0160009054906101000a900460ff1615151461081e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161081590613774565b60405180910390fd5b600080600080600090505b856005015481101561089a5785600401600082815260200190815260200160002091508160010160009054906101000a900460ff161561087a5781600201548461087391906137c3565b935061088d565b81600201548361088a91906137c3565b92505b8080600101915050610829565b50600285600301546108ac9190613826565b836108b791906137c3565b9250600285600301546108ca9190613826565b826108d591906137c3565b91506000600286600301546108ea9190613857565b146108ff576001836108fc91906137c3565b92505b84600e0154421180610922575061091461128f565b828461092091906137c3565b145b610961576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610958906138fa565b60405180910390fd5b8460060160010160006002811061097b5761097a61391a565b5b015461098561128f565b61098f9190613949565b828461099b91906137c3565b866006016001016001600281106109b5576109b461391a565b5b01546109c19190613949565b11610af257600185600f0160006101000a81548160ff0219169083151502179055507fae8941f3b4d152118273444f36b8b5642e5602102b789968bd4b7cf8b250de8187600080604051610a179392919061398b565b60405180910390a184600f0160029054906101000a900460ff1615610ae4578460020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b4e6a1d587600086868a6010016040518663ffffffff1660e01b8152600401610a9f959493929190613a5b565b6020604051808303816000875af1158015610abe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ae29190613aca565b505b60009550505050505061128a565b84600601600301600060028110610b0c57610b0b61391a565b5b01548284610b1a91906137c3565b610b249190613949565b85600601600301600160028110610b3e57610b3d61391a565b5b015484610b4b9190613949565b10159550858015610bca5750600d60008560020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15610cd8578360020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600b6000600c6000815480929190610c0b90613af7565b91905055815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600d60008660020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b600185600f0160006101000a81548160ff0219169083151502179055508585600f0160016101000a81548160ff0219169083151502179055507fae8941f3b4d152118273444f36b8b5642e5602102b789968bd4b7cf8b250de8187876001604051610d459392919061398b565b60405180910390a1600086610d5a5782610d5c565b835b905060008060005b8860050154811015610e645788600401600082815260200190815260200160002094508460010160009054906101000a900460ff1615158a151514610e5757600060648a600601600501548760020154610dbe9190613949565b610dc89190613826565b90508960060160060160009054906101000a900460ff1615610e2657610e138660030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff163083612002565b8084610e1f91906137c3565b9350610e55565b610e548660030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682612227565b5b505b8080600101915050610d64565b508815610fda5760028860030154610e7c9190613826565b82610e8791906137c3565b915060005b8860050154811015610f725788600401600082815260200190815260200160002094508860060160060160009054906101000a900460ff168015610ee457508460010160009054906101000a900460ff1615158a1515145b15610f6557600060648a6006016005015486886002015487610f069190613949565b610f109190613826565b610f1a9190613949565b610f249190613826565b90508083610f3291906137c3565b9250610f63308760030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683612002565b505b8080600101915050610e8c565b5060008183610f819190613b3f565b9050600060028a60030154610f969190613857565b14610fab57600181610fa891906137c3565b90505b610fd489600101548260028c60030154610fc59190613826565b610fcf91906137c3565b6122a9565b506110f2565b876003015482610fea91906137c3565b915060005b88600501548110156110f05788600401600082815260200190815260200160002094508860060160060160009054906101000a900460ff16801561104757508460010160009054906101000a900460ff1615158a1515145b156110e357600060648a6006016005015460028c600301546110699190613826565b876110749190613b3f565b8860020154876110849190613949565b61108e9190613826565b6110989190613949565b6110a29190613826565b905080836110b091906137c3565b92506110e1308760030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683612002565b505b8080600101915050610fef565b505b60005b600c548110156111bb576000600b600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600061114161128f565b61114a83611692565b8c600d01546111599190613949565b6111639190613826565b90508173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156111ab573d6000803e3d6000fd5b50505080806001019150506110f5565b5087600f0160029054906101000a900460ff1615611281578760020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b4e6a1d58a600189898d6010016040518663ffffffff1660e01b815260040161123c959493929190613a5b565b6020604051808303816000875af115801561125b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061127f9190613aca565b505b50505050505050505b919050565b6000600254905090565b60006040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112cd90613bbf565b60405180910390fd5b60006009600085815260200190815260200160002090506112f9813385856122bb565b50505050565b60006009905090565b60006006600081548092919061131d90613af7565b9190505590506000600560008381526020019081526020016000209050868160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550338160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081816000018190555085858260030191826113dc929190613dc5565b5060005b8484905081101561144c57816004018585838181106114025761140161391a565b5b9050604002019080600181540180825580915050600190039060005260206000209060020201600090919091909150818161143d9190613fe9565b505080806001019150506113e0565b5060008060005b836004018054905081101561156e57600084600401828154811061147a5761147961391a565b5b90600052602060002090600202016000015490507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c8112156114f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e890614069565b60405180910390fd5b6064811315611535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152c906140fb565b60405180910390fd5b600081131561155157808461154a919061411b565b9350611560565b808361155d919061411b565b92505b508080600101915050611453565b5060648213156115b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115aa906141d1565b60405180910390fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c811215611616576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160d90614263565b60405180910390fd5b7f60b94e7764708712b927071922e2d834b79011347c7b80aed74caeeece2eed4c846040516116459190612f88565b60405180910390a150505095945050505050565b600b6020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a5481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600080341161171e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611715906142f5565b60405180910390fd5b6001891015611762576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175990614361565b60405180910390fd5b651cae8c13e0008911156117ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a2906143cd565b60405180910390fd5b876001600281106117bf576117be61391a565b5b6020020135600e6000600281106117d9576117d861391a565b5b01546117e59190613949565b886000600281106117f9576117f861391a565b5b6020020135600e6001600281106118135761181261391a565b5b015461181f9190613949565b1015611860576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185790614439565b60405180910390fd5b876001600281106118745761187361391a565b5b60200201358860006002811061188d5761188c61391a565b5b602002013511156118d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ca906144a5565b60405180910390fd5b866001600281106118e7576118e661391a565b5b602002013587600060028110611900576118ff61391a565b5b60200201351115611946576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193d90614511565b60405180910390fd5b606486111561198a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119819061457d565b60405180910390fd5b6000600560008c81526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611a34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2b906145e9565b60405180910390fd5b600a6000815480929190611a4790613af7565b9190505591506000600960008481526020019081526020016000209050338160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508b81600101819055503481600d01819055508981600601600101906002611acf929190612cc0565b508881600601600301906002611ae6929190612cc0565b50878160060160050181905550868160060160060160006101000a81548160ff0219169083151502179055508a81600601600001819055508a42611b2a91906137c3565b81600e01819055508281600001819055508581600f0160026101000a81548160ff0219169083151502179055508484826010019182611b6a92919061465a565b50611b7530346123b1565b3481600301819055507f6e5c598b821d7fa8550e5fea58ab6e27c59e1cbe1df75a8591aa0c453b49e10a83604051611bad9190612f88565b60405180910390a150509998505050505050505050565b6000611bd1338585611ff0565b8373ffffffffffffffffffffffffffffffffffffffff1663216ed6ad3385856040518463ffffffff1660e01b8152600401611c0e9392919061472a565b600060405180830381600087803b158015611c2857600080fd5b505af1158015611c3c573d6000803e3d6000fd5b50505050600190509392505050565b606060048054611c5a906136f7565b80601f0160208091040260200160405190810160405280929190818152602001828054611c86906136f7565b8015611cd35780601f10611ca857610100808354040283529160200191611cd3565b820191906000526020600020905b815481529060010190602001808311611cb657829003601f168201915b5050505050905090565b6000600960008681526020019081526020016000209050611cff843385612433565b611d0b818585856122bb565b5050505050565b600d6020528060005260406000206000915054906101000a900460ff1681565b60096020528060005260406000206000915090508060000154908060010154908060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806003015490806005015490806006016040518060a00160405290816000820154815260200160018201600280602002604051908101604052809291908260028015611dd9576020028201915b815481526020019060010190808311611dc5575b5050505050815260200160038201600280602002604051908101604052809291908260028015611e1e576020028201915b815481526020019060010190808311611e0a575b50505050508152602001600582015481526020016006820160009054906101000a900460ff1615151515815250509080600d01549080600e01549080600f0160009054906101000a900460ff169080600f0160019054906101000a900460ff169080600f0160029054906101000a900460ff1690806010018054611ea1906136f7565b80601f0160208091040260200160405190810160405280929190818152602001828054611ecd906136f7565b8015611f1a5780601f10611eef57610100808354040283529160200191611f1a565b820191906000526020600020905b815481529060010190602001808311611efd57829003601f168201915b505050505090508c565b60006040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5890613bbf565b60405180910390fd5b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600033905090565b611ffd83838360016124c7565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361205457806002600082825461204891906137c3565b92505081905550612127565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156120e0578381836040517fe450d38c0000000000000000000000000000000000000000000000000000000081526004016120d79392919061472a565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361217057806002600082825403925050819055506121bd565b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161221a9190612f88565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036122995760006040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260040161229091906131fc565b60405180910390fd5b6122a582600083612002565b5050565b6122b6828260008061269e565b505050565b83600e0154421115612302576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122f9906147ad565b60405180910390fd5b600084600501600081548092919061231990613af7565b91905055905060008560040160008381526020019081526020016000209050848160030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550828160010160006101000a81548160ff021916908315150217905550838160020181905550818160000181905550505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036124235760006040517fec442f0500000000000000000000000000000000000000000000000000000000815260040161241a91906131fc565b60405180910390fd5b61242f60008383612002565b5050565b600061243f8484611f61565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146124c157818110156124b1578281836040517ffb8f41b20000000000000000000000000000000000000000000000000000000081526004016124a89392919061472a565b60405180910390fd5b6124c0848484840360006124c7565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036125395760006040517fe602df0500000000000000000000000000000000000000000000000000000000815260040161253091906131fc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036125ab5760006040517f94280d620000000000000000000000000000000000000000000000000000000081526004016125a291906131fc565b60405180910390fd5b81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508015612698578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161268f9190612f88565b60405180910390a35b50505050565b600060085482106126b157839050612afd565b600060056000878152602001908152602001600020905060005b81600401805490508110156127745760008260040182815481106126f2576126f161391a565b5b906000526020600020906002020160000154121561276757612759878360040183815481106127245761272361391a565b5b906000526020600020906002020160405180604001604052908160008201548152602001600182015481525050888888612b05565b8661276491906147cd565b95505b80806001019150506126cb565b5060005b816004018054905081101561282157600082600401828154811061279f5761279e61391a565b5b906000526020600020906002020160000154131561281457612806878360040183815481106127d1576127d061391a565b5b906000526020600020906002020160405180604001604052908160008201548152602001600182015481525050888888612b05565b8661281191906147cd565b95505b8080600101915050612778565b50600085131561287a5761285a308260020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1687612002565b8481600501600082825461286e91906137c3565b92505081905550612afb565b600085826005015461288c919061411b565b126129c9578461289b90614810565b6128c88260020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611692565b1061290a576129058160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16308761290090614810565b612002565b6129a0565b6129378160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611692565b85612942919061411b565b915061299f8160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff163061299a8460020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611692565b612002565b5b846129aa90614810565b8160050160008282546129bd9190613b3f565b92505081905550612afa565b8481600501546129d9919061411b565b91508060050154612a0d8260020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611692565b10612a4a57612a458160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16308360050154612002565b612aef565b612a778160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611692565b8160050154612a869190613b3f565b82612a9191906147cd565b9150612aee8160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1630612ae98460020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611692565b612002565b5b600081600501819055505b5b505b949350505050565b60006064856000015185612b199190614858565b612b2391906148d0565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff856020015103612ba3576000811215612b94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b8b906149ac565b60405180910390fd5b612b9e3082612227565b612cb7565b6000600760008881526020019081526020016000206000876020015181526020019081526020016000205490508315612c2c576000821215612c075780612be990614810565b8213612bfe5780612bf990614810565b612c00565b815b9150612c2b565b80612c1190614810565b8212612c265780612c2190614810565b612c28565b815b91505b5b6000612c658760200151848780612c535750600087148015612c52575060008a60000151125b5b600188612c6091906137c3565b61269e565b90508083612c7391906147cd565b925082600760008a81526020019081526020016000206000896020015181526020019081526020016000206000828254612cad919061411b565b9250508190555050505b95945050505050565b8260028101928215612cef579160200282015b82811115612cee578235825591602001919060010190612cd3565b5b509050612cfc9190612d00565b5090565b5b80821115612d19576000816000905550600101612d01565b5090565b600081519050919050565b600082825260208201905092915050565b60005b83811015612d57578082015181840152602081019050612d3c565b60008484015250505050565b6000601f19601f8301169050919050565b6000612d7f82612d1d565b612d898185612d28565b9350612d99818560208601612d39565b612da281612d63565b840191505092915050565b60006020820190508181036000830152612dc78184612d74565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612e0482612dd9565b9050919050565b612e1481612df9565b8114612e1f57600080fd5b50565b600081359050612e3181612e0b565b92915050565b6000819050919050565b612e4a81612e37565b8114612e5557600080fd5b50565b600081359050612e6781612e41565b92915050565b60008060408385031215612e8457612e83612dcf565b5b6000612e9285828601612e22565b9250506020612ea385828601612e58565b9150509250929050565b60008115159050919050565b612ec281612ead565b82525050565b6000602082019050612edd6000830184612eb9565b92915050565b600060208284031215612ef957612ef8612dcf565b5b6000612f0784828501612e58565b91505092915050565b612f1981612e37565b82525050565b612f2881612df9565b82525050565b600060a082019050612f436000830188612f10565b612f506020830187612f1f565b612f5d6040830186612f1f565b8181036060830152612f6f8185612d74565b9050612f7e6080830184612f10565b9695505050505050565b6000602082019050612f9d6000830184612f10565b92915050565b600080600060608486031215612fbc57612fbb612dcf565b5b6000612fca86828701612e22565b9350506020612fdb86828701612e22565b9250506040612fec86828701612e58565b9150509250925092565b612fff81612ead565b811461300a57600080fd5b50565b60008135905061301c81612ff6565b92915050565b60008060006060848603121561303b5761303a612dcf565b5b600061304986828701612e58565b935050602061305a86828701612e58565b925050604061306b8682870161300d565b9150509250925092565b600060ff82169050919050565b61308b81613075565b82525050565b60006020820190506130a66000830184613082565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126130d1576130d06130ac565b5b8235905067ffffffffffffffff8111156130ee576130ed6130b1565b5b60208301915083600182028301111561310a576131096130b6565b5b9250929050565b60008083601f840112613127576131266130ac565b5b8235905067ffffffffffffffff811115613144576131436130b1565b5b6020830191508360408202830111156131605761315f6130b6565b5b9250929050565b60008060008060006060868803121561318357613182612dcf565b5b600061319188828901612e22565b955050602086013567ffffffffffffffff8111156131b2576131b1612dd4565b5b6131be888289016130bb565b9450945050604086013567ffffffffffffffff8111156131e1576131e0612dd4565b5b6131ed88828901613111565b92509250509295509295909350565b60006020820190506132116000830184612f1f565b92915050565b60006020828403121561322d5761322c612dcf565b5b600061323b84828501612e22565b91505092915050565b6000819050826020600202820111156132605761325f6130b6565b5b92915050565b60008083601f84011261327c5761327b6130ac565b5b8235905067ffffffffffffffff811115613299576132986130b1565b5b6020830191508360018202830111156132b5576132b46130b6565b5b9250929050565b60008060008060008060008060006101408a8c0312156132df576132de612dcf565b5b60006132ed8c828d01612e58565b99505060206132fe8c828d01612e58565b985050604061330f8c828d01613244565b97505060806133208c828d01613244565b96505060c06133318c828d01612e58565b95505060e06133428c828d0161300d565b9450506101006133548c828d0161300d565b9350506101208a013567ffffffffffffffff81111561337657613375612dd4565b5b6133828c828d01613266565b92509250509295985092959850929598565b6000806000606084860312156133ad576133ac612dcf565b5b60006133bb86828701612e22565b93505060206133cc86828701612e58565b92505060406133dd86828701612e58565b9150509250925092565b6000806000806080858703121561340157613400612dcf565b5b600061340f87828801612e58565b945050602061342087828801612e22565b935050604061343187828801612e58565b92505060606134428782880161300d565b91505092959194509250565b61345781612e37565b82525050565b600060029050919050565b600081905092915050565b6000819050919050565b6000613489838361344e565b60208301905092915050565b6000602082019050919050565b6134ab8161345d565b6134b58184613468565b92506134c082613473565b8060005b838110156134f15781516134d8878261347d565b96506134e383613495565b9250506001810190506134c4565b505050505050565b61350281612ead565b82525050565b60e08201600082015161351e600085018261344e565b50602082015161353160208501826134a2565b50604082015161354460608501826134a2565b50606082015161355760a085018261344e565b50608082015161356a60c08501826134f9565b50505050565b600081519050919050565b600082825260208201905092915050565b600061359782613570565b6135a1818561357b565b93506135b1818560208601612d39565b6135ba81612d63565b840191505092915050565b6000610240820190506135db600083018f612f10565b6135e8602083018e612f10565b6135f5604083018d612f1f565b613602606083018c612f10565b61360f608083018b612f10565b61361c60a083018a613508565b61362a610180830189612f10565b6136386101a0830188612f10565b6136466101c0830187612eb9565b6136546101e0830186612eb9565b613662610200830185612eb9565b818103610220830152613675818461358c565b90509d9c50505050505050505050505050565b6000806040838503121561369f5761369e612dcf565b5b60006136ad85828601612e22565b92505060206136be85828601612e22565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061370f57607f821691505b602082108103613722576137216136c8565b5b50919050565b7f506f6f6c20697320616c7265616479207265736f6c7665640000000000000000600082015250565b600061375e601883612d28565b915061376982613728565b602082019050919050565b6000602082019050818103600083015261378d81613751565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006137ce82612e37565b91506137d983612e37565b92508282019050808211156137f1576137f0613794565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061383182612e37565b915061383c83612e37565b92508261384c5761384b6137f7565b5b828204905092915050565b600061386282612e37565b915061386d83612e37565b92508261387d5761387c6137f7565b5b828206905092915050565b7f506f6f6c20656e642074696d6520686173206e6f74207965742061727269766560008201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b60006138e4602183612d28565b91506138ef82613888565b604082019050919050565b60006020820190508181036000830152613913816138d7565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061395482612e37565b915061395f83612e37565b925082820261396d81612e37565b9150828204841483151761398457613983613794565b5b5092915050565b60006060820190506139a06000830186612f10565b6139ad6020830185612eb9565b6139ba6040830184612eb9565b949350505050565b60008190508160005260206000209050919050565b600081546139e4816136f7565b6139ee818661357b565b94506001821660008114613a095760018114613a1f57613a52565b60ff198316865281151560200286019350613a52565b613a28856139c2565b60005b83811015613a4a57815481890152600182019150602081019050613a2b565b808801955050505b50505092915050565b600060a082019050613a706000830188612eb9565b613a7d6020830187612eb9565b613a8a6040830186612f10565b613a976060830185612f10565b8181036080830152613aa981846139d7565b90509695505050505050565b600081519050613ac481612e41565b92915050565b600060208284031215613ae057613adf612dcf565b5b6000613aee84828501613ab5565b91505092915050565b6000613b0282612e37565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613b3457613b33613794565b5b600182019050919050565b6000613b4a82612e37565b9150613b5583612e37565b9250828203905081811115613b6d57613b6c613794565b5b92915050565b7f524550207472616e73666572206973206e6f7420616c6c6f7765640000000000600082015250565b6000613ba9601b83612d28565b9150613bb482613b73565b602082019050919050565b60006020820190508181036000830152613bd881613b9c565b9050919050565b600082905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302613c7b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613c3e565b613c858683613c3e565b95508019841693508086168417925050509392505050565b6000819050919050565b6000613cc2613cbd613cb884612e37565b613c9d565b612e37565b9050919050565b6000819050919050565b613cdc83613ca7565b613cf0613ce882613cc9565b848454613c4b565b825550505050565b600090565b613d05613cf8565b613d10818484613cd3565b505050565b5b81811015613d3457613d29600082613cfd565b600181019050613d16565b5050565b601f821115613d7957613d4a81613c19565b613d5384613c2e565b81016020851015613d62578190505b613d76613d6e85613c2e565b830182613d15565b50505b505050565b600082821c905092915050565b6000613d9c60001984600802613d7e565b1980831691505092915050565b6000613db58383613d8b565b9150826002028217905092915050565b613dcf8383613bdf565b67ffffffffffffffff811115613de857613de7613bea565b5b613df282546136f7565b613dfd828285613d38565b6000601f831160018114613e2c5760008415613e1a578287013590505b613e248582613da9565b865550613e8c565b601f198416613e3a86613c19565b60005b82811015613e6257848901358255600182019150602085019450602081019050613e3d565b86831015613e7f5784890135613e7b601f891682613d8b565b8355505b6001600288020188555050505b50505050505050565b6000819050919050565b613ea881613e95565b8114613eb357600080fd5b50565b60008135613ec381613e9f565b80915050919050565b60008160001b9050919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff613f0584613ecc565b9350801983169250808416831791505092915050565b6000613f36613f31613f2c84613e95565b613c9d565b613e95565b9050919050565b6000819050919050565b613f5082613f1b565b613f63613f5c82613f3d565b8354613ed9565b8255505050565b60008135613f7781612e41565b80915050919050565b613f8982613ca7565b613f9c613f9582613cc9565b8354613ed9565b8255505050565b600081016000830180613fb581613eb6565b9050613fc18184613f47565b505050600181016020830180613fd681613f6a565b9050613fe28184613f80565b5050505050565b613ff38282613fa3565b5050565b7f45616368206369746174696f6e20776569676874206d757374206265203e3d2060008201527f2d31303000000000000000000000000000000000000000000000000000000000602082015250565b6000614053602483612d28565b915061405e82613ff7565b604082019050919050565b6000602082019050818103600083015261408281614046565b9050919050565b7f45616368206369746174696f6e20776569676874206d757374206265203c3d2060008201527f3130300000000000000000000000000000000000000000000000000000000000602082015250565b60006140e5602383612d28565b91506140f082614089565b604082019050919050565b60006020820190508181036000830152614114816140d8565b9050919050565b600061412682613e95565b915061413183613e95565b92508282019050828112156000831216838212600084121516171561415957614158613794565b5b92915050565b7f53756d206f6620706f736974697665206369746174696f6e73206d757374206260008201527f65203c3d20313030000000000000000000000000000000000000000000000000602082015250565b60006141bb602883612d28565b91506141c68261415f565b604082019050919050565b600060208201905081810360008301526141ea816141ae565b9050919050565b7f53756d206f66206e65676174697665206369746174696f6e73206d757374206260008201527f65203e3d202d3130300000000000000000000000000000000000000000000000602082015250565b600061424d602983612d28565b9150614258826141f1565b604082019050919050565b6000602082019050818103600083015261427c81614240565b9050919050565b7f46656520697320726571756972656420746f20696e6974696174652076616c6960008201527f646174696f6e20706f6f6c000000000000000000000000000000000000000000602082015250565b60006142df602b83612d28565b91506142ea82614283565b604082019050919050565b6000602082019050818103600083015261430e816142d2565b9050919050565b7f4475726174696f6e20697320746f6f2073686f72740000000000000000000000600082015250565b600061434b601583612d28565b915061435682614315565b602082019050919050565b6000602082019050818103600083015261437a8161433e565b9050919050565b7f4475726174696f6e20697320746f6f206c6f6e67000000000000000000000000600082015250565b60006143b7601483612d28565b91506143c282614381565b602082019050919050565b600060208201905081810360008301526143e6816143aa565b9050919050565b7f51756f72756d2069732062656c6f77206d696e696d756d000000000000000000600082015250565b6000614423601783612d28565b915061442e826143ed565b602082019050919050565b6000602082019050818103600083015261445281614416565b9050919050565b7f51756f72756d2069732067726561746572207468616e206f6e65000000000000600082015250565b600061448f601a83612d28565b915061449a82614459565b602082019050919050565b600060208201905081810360008301526144be81614482565b9050919050565b7f57696e20726174696f2069732067726561746572207468616e206f6e65000000600082015250565b60006144fb601d83612d28565b9150614506826144c5565b602082019050919050565b6000602082019050818103600083015261452a816144ee565b9050919050565b7f42696e64696e672070657263656e74206d757374206265203c3d203130300000600082015250565b6000614567601e83612d28565b915061457282614531565b602082019050919050565b600060208201905081810360008301526145968161455a565b9050919050565b7f54617267657420706f7374206e6f7420666f756e640000000000000000000000600082015250565b60006145d3601583612d28565b91506145de8261459d565b602082019050919050565b60006020820190508181036000830152614602816145c6565b9050919050565b600082905092915050565b601f82111561465557614626816139c2565b61462f84613c2e565b8101602085101561463e578190505b61465261464a85613c2e565b830182613d15565b50505b505050565b6146648383614609565b67ffffffffffffffff81111561467d5761467c613bea565b5b61468782546136f7565b614692828285614614565b6000601f8311600181146146c157600084156146af578287013590505b6146b98582613da9565b865550614721565b601f1984166146cf866139c2565b60005b828110156146f7578489013582556001820191506020850194506020810190506146d2565b868310156147145784890135614710601f891682613d8b565b8355505b6001600288020188555050505b50505050505050565b600060608201905061473f6000830186612f1f565b61474c6020830185612f10565b6147596040830184612f10565b949350505050565b7f506f6f6c20656e642074696d6520686173207061737365640000000000000000600082015250565b6000614797601883612d28565b91506147a282614761565b602082019050919050565b600060208201905081810360008301526147c68161478a565b9050919050565b60006147d882613e95565b91506147e383613e95565b925082820390508181126000841216828213600085121516171561480a57614809613794565b5b92915050565b600061481b82613e95565b91507f8000000000000000000000000000000000000000000000000000000000000000820361484d5761484c613794565b5b816000039050919050565b600061486382613e95565b915061486e83613e95565b925082820261487c81613e95565b91507f800000000000000000000000000000000000000000000000000000000000000084146000841216156148b4576148b3613794565b5b82820584148315176148c9576148c8613794565b5b5092915050565b60006148db82613e95565b91506148e683613e95565b9250826148f6576148f56137f7565b5b600160000383147f80000000000000000000000000000000000000000000000000000000000000008314161561492f5761492e613794565b5b828205905092915050565b7f4c65616368696e672066726f6d20696e63696e657261746f7220697320666f7260008201527f62696464656e0000000000000000000000000000000000000000000000000000602082015250565b6000614996602683612d28565b91506149a18261493a565b604082019050919050565b600060208201905081810360008301526149c581614989565b905091905056fea2646970667358221220d1b3055f19d56cbb56ab481fa19378b72c5262b3b6cde9338368bac8fb03bea664736f6c63430008180033", - "deployedBytecode": "0x6080604052600436106101355760003560e01c80635daf08ca116100ab57806395d89b411161006f57806395d89b4114610481578063975762b3146104ac578063a230c524146104d5578063a233627914610512578063a9059cbb1461055a578063dd62ed3e1461059757610135565b80635daf08ca1461036f578063642b5bfb146103ac57806370a08231146103d75780637fcf675914610414578063883802741461044457610135565b806317c18217116100fd57806317c182171461023957806318160ddd1461027657806323b872dd146102a15780632d17c062146102de578063313ce567146103075780634acce5911461033257610135565b806306fdde031461013a578063095ea7b3146101655780630b1e7f83146101a257806311aee380146101e357806317906c2e1461020e575b600080fd5b34801561014657600080fd5b5061014f6105d4565b60405161015c9190612dad565b60405180910390f35b34801561017157600080fd5b5061018c60048036038101906101879190612e6d565b610666565b6040516101999190612ec8565b60405180910390f35b3480156101ae57600080fd5b506101c960048036038101906101c49190612ee3565b610689565b6040516101da959493929190612f2e565b60405180910390f35b3480156101ef57600080fd5b506101f8610787565b6040516102059190612f88565b60405180910390f35b34801561021a57600080fd5b5061022361078d565b6040516102309190612f88565b60405180910390f35b34801561024557600080fd5b50610260600480360381019061025b9190612ee3565b610793565b60405161026d9190612ec8565b60405180910390f35b34801561028257600080fd5b5061028b61128f565b6040516102989190612f88565b60405180910390f35b3480156102ad57600080fd5b506102c860048036038101906102c39190612fa3565b611299565b6040516102d59190612ec8565b60405180910390f35b3480156102ea57600080fd5b5061030560048036038101906103009190613022565b6112d6565b005b34801561031357600080fd5b5061031c6112ff565b6040516103299190613091565b60405180910390f35b34801561033e57600080fd5b5061035960048036038101906103549190613167565b611308565b6040516103669190612f88565b60405180910390f35b34801561037b57600080fd5b5061039660048036038101906103919190612ee3565b611659565b6040516103a391906131fc565b60405180910390f35b3480156103b857600080fd5b506103c161168c565b6040516103ce9190612f88565b60405180910390f35b3480156103e357600080fd5b506103fe60048036038101906103f99190613217565b611692565b60405161040b9190612f88565b60405180910390f35b61042e600480360381019061042991906132bc565b6116da565b60405161043b9190612f88565b60405180910390f35b34801561045057600080fd5b5061046b60048036038101906104669190613394565b611bc4565b6040516104789190612ec8565b60405180910390f35b34801561048d57600080fd5b50610496611c4b565b6040516104a39190612dad565b60405180910390f35b3480156104b857600080fd5b506104d360048036038101906104ce91906133e7565b611cdd565b005b3480156104e157600080fd5b506104fc60048036038101906104f79190613217565b611d12565b6040516105099190612ec8565b60405180910390f35b34801561051e57600080fd5b5061053960048036038101906105349190612ee3565b611d32565b6040516105519c9b9a999897969594939291906135c5565b60405180910390f35b34801561056657600080fd5b50610581600480360381019061057c9190612e6d565b611f24565b60405161058e9190612ec8565b60405180910390f35b3480156105a357600080fd5b506105be60048036038101906105b99190613688565b611f61565b6040516105cb9190612f88565b60405180910390f35b6060600380546105e3906136f7565b80601f016020809104026020016040519081016040528092919081815260200182805461060f906136f7565b801561065c5780601f106106315761010080835404028352916020019161065c565b820191906000526020600020905b81548152906001019060200180831161063f57829003601f168201915b5050505050905090565b600080610671611fe8565b905061067e818585611ff0565b600191505092915050565b60056020528060005260406000206000915090508060000154908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060030180546106fe906136f7565b80601f016020809104026020016040519081016040528092919081815260200182805461072a906136f7565b80156107775780601f1061074c57610100808354040283529160200191610777565b820191906000526020600020905b81548152906001019060200180831161075a57829003601f168201915b5050505050908060050154905085565b600c5481565b60065481565b6000806009600084815260200190815260200160002090506000600560008360010154815260200190815260200160002090506000151582600f0160009054906101000a900460ff1615151461081e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161081590613774565b60405180910390fd5b600080600080600090505b856005015481101561089a5785600401600082815260200190815260200160002091508160010160009054906101000a900460ff161561087a5781600201548461087391906137c3565b935061088d565b81600201548361088a91906137c3565b92505b8080600101915050610829565b50600285600301546108ac9190613826565b836108b791906137c3565b9250600285600301546108ca9190613826565b826108d591906137c3565b91506000600286600301546108ea9190613857565b146108ff576001836108fc91906137c3565b92505b84600e0154421180610922575061091461128f565b828461092091906137c3565b145b610961576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610958906138fa565b60405180910390fd5b8460060160010160006002811061097b5761097a61391a565b5b015461098561128f565b61098f9190613949565b828461099b91906137c3565b866006016001016001600281106109b5576109b461391a565b5b01546109c19190613949565b11610af257600185600f0160006101000a81548160ff0219169083151502179055507fae8941f3b4d152118273444f36b8b5642e5602102b789968bd4b7cf8b250de8187600080604051610a179392919061398b565b60405180910390a184600f0160029054906101000a900460ff1615610ae4578460020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b4e6a1d587600086868a6010016040518663ffffffff1660e01b8152600401610a9f959493929190613a5b565b6020604051808303816000875af1158015610abe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ae29190613aca565b505b60009550505050505061128a565b84600601600301600060028110610b0c57610b0b61391a565b5b01548284610b1a91906137c3565b610b249190613949565b85600601600301600160028110610b3e57610b3d61391a565b5b015484610b4b9190613949565b10159550858015610bca5750600d60008560020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15610cd8578360020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600b6000600c6000815480929190610c0b90613af7565b91905055815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600d60008660020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b600185600f0160006101000a81548160ff0219169083151502179055508585600f0160016101000a81548160ff0219169083151502179055507fae8941f3b4d152118273444f36b8b5642e5602102b789968bd4b7cf8b250de8187876001604051610d459392919061398b565b60405180910390a1600086610d5a5782610d5c565b835b905060008060005b8860050154811015610e645788600401600082815260200190815260200160002094508460010160009054906101000a900460ff1615158a151514610e5757600060648a600601600501548760020154610dbe9190613949565b610dc89190613826565b90508960060160060160009054906101000a900460ff1615610e2657610e138660030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff163083612002565b8084610e1f91906137c3565b9350610e55565b610e548660030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682612227565b5b505b8080600101915050610d64565b508815610fda5760028860030154610e7c9190613826565b82610e8791906137c3565b915060005b8860050154811015610f725788600401600082815260200190815260200160002094508860060160060160009054906101000a900460ff168015610ee457508460010160009054906101000a900460ff1615158a1515145b15610f6557600060648a6006016005015486886002015487610f069190613949565b610f109190613826565b610f1a9190613949565b610f249190613826565b90508083610f3291906137c3565b9250610f63308760030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683612002565b505b8080600101915050610e8c565b5060008183610f819190613b3f565b9050600060028a60030154610f969190613857565b14610fab57600181610fa891906137c3565b90505b610fd489600101548260028c60030154610fc59190613826565b610fcf91906137c3565b6122a9565b506110f2565b876003015482610fea91906137c3565b915060005b88600501548110156110f05788600401600082815260200190815260200160002094508860060160060160009054906101000a900460ff16801561104757508460010160009054906101000a900460ff1615158a1515145b156110e357600060648a6006016005015460028c600301546110699190613826565b876110749190613b3f565b8860020154876110849190613949565b61108e9190613826565b6110989190613949565b6110a29190613826565b905080836110b091906137c3565b92506110e1308760030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683612002565b505b8080600101915050610fef565b505b60005b600c548110156111bb576000600b600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600061114161128f565b61114a83611692565b8c600d01546111599190613949565b6111639190613826565b90508173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156111ab573d6000803e3d6000fd5b50505080806001019150506110f5565b5087600f0160029054906101000a900460ff1615611281578760020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b4e6a1d58a600189898d6010016040518663ffffffff1660e01b815260040161123c959493929190613a5b565b6020604051808303816000875af115801561125b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061127f9190613aca565b505b50505050505050505b919050565b6000600254905090565b60006040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112cd90613bbf565b60405180910390fd5b60006009600085815260200190815260200160002090506112f9813385856122bb565b50505050565b60006009905090565b60006006600081548092919061131d90613af7565b9190505590506000600560008381526020019081526020016000209050868160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550338160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081816000018190555085858260030191826113dc929190613dc5565b5060005b8484905081101561144c57816004018585838181106114025761140161391a565b5b9050604002019080600181540180825580915050600190039060005260206000209060020201600090919091909150818161143d9190613fe9565b505080806001019150506113e0565b5060008060005b836004018054905081101561156e57600084600401828154811061147a5761147961391a565b5b90600052602060002090600202016000015490507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c8112156114f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e890614069565b60405180910390fd5b6064811315611535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152c906140fb565b60405180910390fd5b600081131561155157808461154a919061411b565b9350611560565b808361155d919061411b565b92505b508080600101915050611453565b5060648213156115b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115aa906141d1565b60405180910390fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c811215611616576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160d90614263565b60405180910390fd5b7f60b94e7764708712b927071922e2d834b79011347c7b80aed74caeeece2eed4c846040516116459190612f88565b60405180910390a150505095945050505050565b600b6020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a5481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600080341161171e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611715906142f5565b60405180910390fd5b6001891015611762576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175990614361565b60405180910390fd5b651cae8c13e0008911156117ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a2906143cd565b60405180910390fd5b876001600281106117bf576117be61391a565b5b6020020135600e6000600281106117d9576117d861391a565b5b01546117e59190613949565b886000600281106117f9576117f861391a565b5b6020020135600e6001600281106118135761181261391a565b5b015461181f9190613949565b1015611860576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185790614439565b60405180910390fd5b876001600281106118745761187361391a565b5b60200201358860006002811061188d5761188c61391a565b5b602002013511156118d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ca906144a5565b60405180910390fd5b866001600281106118e7576118e661391a565b5b602002013587600060028110611900576118ff61391a565b5b60200201351115611946576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193d90614511565b60405180910390fd5b606486111561198a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119819061457d565b60405180910390fd5b6000600560008c81526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611a34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2b906145e9565b60405180910390fd5b600a6000815480929190611a4790613af7565b9190505591506000600960008481526020019081526020016000209050338160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508b81600101819055503481600d01819055508981600601600101906002611acf929190612cc0565b508881600601600301906002611ae6929190612cc0565b50878160060160050181905550868160060160060160006101000a81548160ff0219169083151502179055508a81600601600001819055508a42611b2a91906137c3565b81600e01819055508281600001819055508581600f0160026101000a81548160ff0219169083151502179055508484826010019182611b6a92919061465a565b50611b7530346123b1565b3481600301819055507f6e5c598b821d7fa8550e5fea58ab6e27c59e1cbe1df75a8591aa0c453b49e10a83604051611bad9190612f88565b60405180910390a150509998505050505050505050565b6000611bd1338585611ff0565b8373ffffffffffffffffffffffffffffffffffffffff1663216ed6ad3385856040518463ffffffff1660e01b8152600401611c0e9392919061472a565b600060405180830381600087803b158015611c2857600080fd5b505af1158015611c3c573d6000803e3d6000fd5b50505050600190509392505050565b606060048054611c5a906136f7565b80601f0160208091040260200160405190810160405280929190818152602001828054611c86906136f7565b8015611cd35780601f10611ca857610100808354040283529160200191611cd3565b820191906000526020600020905b815481529060010190602001808311611cb657829003601f168201915b5050505050905090565b6000600960008681526020019081526020016000209050611cff843385612433565b611d0b818585856122bb565b5050505050565b600d6020528060005260406000206000915054906101000a900460ff1681565b60096020528060005260406000206000915090508060000154908060010154908060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806003015490806005015490806006016040518060a00160405290816000820154815260200160018201600280602002604051908101604052809291908260028015611dd9576020028201915b815481526020019060010190808311611dc5575b5050505050815260200160038201600280602002604051908101604052809291908260028015611e1e576020028201915b815481526020019060010190808311611e0a575b50505050508152602001600582015481526020016006820160009054906101000a900460ff1615151515815250509080600d01549080600e01549080600f0160009054906101000a900460ff169080600f0160019054906101000a900460ff169080600f0160029054906101000a900460ff1690806010018054611ea1906136f7565b80601f0160208091040260200160405190810160405280929190818152602001828054611ecd906136f7565b8015611f1a5780601f10611eef57610100808354040283529160200191611f1a565b820191906000526020600020905b815481529060010190602001808311611efd57829003601f168201915b505050505090508c565b60006040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5890613bbf565b60405180910390fd5b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600033905090565b611ffd83838360016124c7565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361205457806002600082825461204891906137c3565b92505081905550612127565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156120e0578381836040517fe450d38c0000000000000000000000000000000000000000000000000000000081526004016120d79392919061472a565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361217057806002600082825403925050819055506121bd565b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161221a9190612f88565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036122995760006040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260040161229091906131fc565b60405180910390fd5b6122a582600083612002565b5050565b6122b6828260008061269e565b505050565b83600e0154421115612302576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122f9906147ad565b60405180910390fd5b600084600501600081548092919061231990613af7565b91905055905060008560040160008381526020019081526020016000209050848160030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550828160010160006101000a81548160ff021916908315150217905550838160020181905550818160000181905550505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036124235760006040517fec442f0500000000000000000000000000000000000000000000000000000000815260040161241a91906131fc565b60405180910390fd5b61242f60008383612002565b5050565b600061243f8484611f61565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146124c157818110156124b1578281836040517ffb8f41b20000000000000000000000000000000000000000000000000000000081526004016124a89392919061472a565b60405180910390fd5b6124c0848484840360006124c7565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036125395760006040517fe602df0500000000000000000000000000000000000000000000000000000000815260040161253091906131fc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036125ab5760006040517f94280d620000000000000000000000000000000000000000000000000000000081526004016125a291906131fc565b60405180910390fd5b81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508015612698578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161268f9190612f88565b60405180910390a35b50505050565b600060085482106126b157839050612afd565b600060056000878152602001908152602001600020905060005b81600401805490508110156127745760008260040182815481106126f2576126f161391a565b5b906000526020600020906002020160000154121561276757612759878360040183815481106127245761272361391a565b5b906000526020600020906002020160405180604001604052908160008201548152602001600182015481525050888888612b05565b8661276491906147cd565b95505b80806001019150506126cb565b5060005b816004018054905081101561282157600082600401828154811061279f5761279e61391a565b5b906000526020600020906002020160000154131561281457612806878360040183815481106127d1576127d061391a565b5b906000526020600020906002020160405180604001604052908160008201548152602001600182015481525050888888612b05565b8661281191906147cd565b95505b8080600101915050612778565b50600085131561287a5761285a308260020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1687612002565b8481600501600082825461286e91906137c3565b92505081905550612afb565b600085826005015461288c919061411b565b126129c9578461289b90614810565b6128c88260020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611692565b1061290a576129058160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16308761290090614810565b612002565b6129a0565b6129378160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611692565b85612942919061411b565b915061299f8160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff163061299a8460020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611692565b612002565b5b846129aa90614810565b8160050160008282546129bd9190613b3f565b92505081905550612afa565b8481600501546129d9919061411b565b91508060050154612a0d8260020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611692565b10612a4a57612a458160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16308360050154612002565b612aef565b612a778160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611692565b8160050154612a869190613b3f565b82612a9191906147cd565b9150612aee8160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1630612ae98460020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611692565b612002565b5b600081600501819055505b5b505b949350505050565b60006064856000015185612b199190614858565b612b2391906148d0565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff856020015103612ba3576000811215612b94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b8b906149ac565b60405180910390fd5b612b9e3082612227565b612cb7565b6000600760008881526020019081526020016000206000876020015181526020019081526020016000205490508315612c2c576000821215612c075780612be990614810565b8213612bfe5780612bf990614810565b612c00565b815b9150612c2b565b80612c1190614810565b8212612c265780612c2190614810565b612c28565b815b91505b5b6000612c658760200151848780612c535750600087148015612c52575060008a60000151125b5b600188612c6091906137c3565b61269e565b90508083612c7391906147cd565b925082600760008a81526020019081526020016000206000896020015181526020019081526020016000206000828254612cad919061411b565b9250508190555050505b95945050505050565b8260028101928215612cef579160200282015b82811115612cee578235825591602001919060010190612cd3565b5b509050612cfc9190612d00565b5090565b5b80821115612d19576000816000905550600101612d01565b5090565b600081519050919050565b600082825260208201905092915050565b60005b83811015612d57578082015181840152602081019050612d3c565b60008484015250505050565b6000601f19601f8301169050919050565b6000612d7f82612d1d565b612d898185612d28565b9350612d99818560208601612d39565b612da281612d63565b840191505092915050565b60006020820190508181036000830152612dc78184612d74565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612e0482612dd9565b9050919050565b612e1481612df9565b8114612e1f57600080fd5b50565b600081359050612e3181612e0b565b92915050565b6000819050919050565b612e4a81612e37565b8114612e5557600080fd5b50565b600081359050612e6781612e41565b92915050565b60008060408385031215612e8457612e83612dcf565b5b6000612e9285828601612e22565b9250506020612ea385828601612e58565b9150509250929050565b60008115159050919050565b612ec281612ead565b82525050565b6000602082019050612edd6000830184612eb9565b92915050565b600060208284031215612ef957612ef8612dcf565b5b6000612f0784828501612e58565b91505092915050565b612f1981612e37565b82525050565b612f2881612df9565b82525050565b600060a082019050612f436000830188612f10565b612f506020830187612f1f565b612f5d6040830186612f1f565b8181036060830152612f6f8185612d74565b9050612f7e6080830184612f10565b9695505050505050565b6000602082019050612f9d6000830184612f10565b92915050565b600080600060608486031215612fbc57612fbb612dcf565b5b6000612fca86828701612e22565b9350506020612fdb86828701612e22565b9250506040612fec86828701612e58565b9150509250925092565b612fff81612ead565b811461300a57600080fd5b50565b60008135905061301c81612ff6565b92915050565b60008060006060848603121561303b5761303a612dcf565b5b600061304986828701612e58565b935050602061305a86828701612e58565b925050604061306b8682870161300d565b9150509250925092565b600060ff82169050919050565b61308b81613075565b82525050565b60006020820190506130a66000830184613082565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126130d1576130d06130ac565b5b8235905067ffffffffffffffff8111156130ee576130ed6130b1565b5b60208301915083600182028301111561310a576131096130b6565b5b9250929050565b60008083601f840112613127576131266130ac565b5b8235905067ffffffffffffffff811115613144576131436130b1565b5b6020830191508360408202830111156131605761315f6130b6565b5b9250929050565b60008060008060006060868803121561318357613182612dcf565b5b600061319188828901612e22565b955050602086013567ffffffffffffffff8111156131b2576131b1612dd4565b5b6131be888289016130bb565b9450945050604086013567ffffffffffffffff8111156131e1576131e0612dd4565b5b6131ed88828901613111565b92509250509295509295909350565b60006020820190506132116000830184612f1f565b92915050565b60006020828403121561322d5761322c612dcf565b5b600061323b84828501612e22565b91505092915050565b6000819050826020600202820111156132605761325f6130b6565b5b92915050565b60008083601f84011261327c5761327b6130ac565b5b8235905067ffffffffffffffff811115613299576132986130b1565b5b6020830191508360018202830111156132b5576132b46130b6565b5b9250929050565b60008060008060008060008060006101408a8c0312156132df576132de612dcf565b5b60006132ed8c828d01612e58565b99505060206132fe8c828d01612e58565b985050604061330f8c828d01613244565b97505060806133208c828d01613244565b96505060c06133318c828d01612e58565b95505060e06133428c828d0161300d565b9450506101006133548c828d0161300d565b9350506101208a013567ffffffffffffffff81111561337657613375612dd4565b5b6133828c828d01613266565b92509250509295985092959850929598565b6000806000606084860312156133ad576133ac612dcf565b5b60006133bb86828701612e22565b93505060206133cc86828701612e58565b92505060406133dd86828701612e58565b9150509250925092565b6000806000806080858703121561340157613400612dcf565b5b600061340f87828801612e58565b945050602061342087828801612e22565b935050604061343187828801612e58565b92505060606134428782880161300d565b91505092959194509250565b61345781612e37565b82525050565b600060029050919050565b600081905092915050565b6000819050919050565b6000613489838361344e565b60208301905092915050565b6000602082019050919050565b6134ab8161345d565b6134b58184613468565b92506134c082613473565b8060005b838110156134f15781516134d8878261347d565b96506134e383613495565b9250506001810190506134c4565b505050505050565b61350281612ead565b82525050565b60e08201600082015161351e600085018261344e565b50602082015161353160208501826134a2565b50604082015161354460608501826134a2565b50606082015161355760a085018261344e565b50608082015161356a60c08501826134f9565b50505050565b600081519050919050565b600082825260208201905092915050565b600061359782613570565b6135a1818561357b565b93506135b1818560208601612d39565b6135ba81612d63565b840191505092915050565b6000610240820190506135db600083018f612f10565b6135e8602083018e612f10565b6135f5604083018d612f1f565b613602606083018c612f10565b61360f608083018b612f10565b61361c60a083018a613508565b61362a610180830189612f10565b6136386101a0830188612f10565b6136466101c0830187612eb9565b6136546101e0830186612eb9565b613662610200830185612eb9565b818103610220830152613675818461358c565b90509d9c50505050505050505050505050565b6000806040838503121561369f5761369e612dcf565b5b60006136ad85828601612e22565b92505060206136be85828601612e22565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061370f57607f821691505b602082108103613722576137216136c8565b5b50919050565b7f506f6f6c20697320616c7265616479207265736f6c7665640000000000000000600082015250565b600061375e601883612d28565b915061376982613728565b602082019050919050565b6000602082019050818103600083015261378d81613751565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006137ce82612e37565b91506137d983612e37565b92508282019050808211156137f1576137f0613794565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061383182612e37565b915061383c83612e37565b92508261384c5761384b6137f7565b5b828204905092915050565b600061386282612e37565b915061386d83612e37565b92508261387d5761387c6137f7565b5b828206905092915050565b7f506f6f6c20656e642074696d6520686173206e6f74207965742061727269766560008201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b60006138e4602183612d28565b91506138ef82613888565b604082019050919050565b60006020820190508181036000830152613913816138d7565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061395482612e37565b915061395f83612e37565b925082820261396d81612e37565b9150828204841483151761398457613983613794565b5b5092915050565b60006060820190506139a06000830186612f10565b6139ad6020830185612eb9565b6139ba6040830184612eb9565b949350505050565b60008190508160005260206000209050919050565b600081546139e4816136f7565b6139ee818661357b565b94506001821660008114613a095760018114613a1f57613a52565b60ff198316865281151560200286019350613a52565b613a28856139c2565b60005b83811015613a4a57815481890152600182019150602081019050613a2b565b808801955050505b50505092915050565b600060a082019050613a706000830188612eb9565b613a7d6020830187612eb9565b613a8a6040830186612f10565b613a976060830185612f10565b8181036080830152613aa981846139d7565b90509695505050505050565b600081519050613ac481612e41565b92915050565b600060208284031215613ae057613adf612dcf565b5b6000613aee84828501613ab5565b91505092915050565b6000613b0282612e37565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613b3457613b33613794565b5b600182019050919050565b6000613b4a82612e37565b9150613b5583612e37565b9250828203905081811115613b6d57613b6c613794565b5b92915050565b7f524550207472616e73666572206973206e6f7420616c6c6f7765640000000000600082015250565b6000613ba9601b83612d28565b9150613bb482613b73565b602082019050919050565b60006020820190508181036000830152613bd881613b9c565b9050919050565b600082905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302613c7b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613c3e565b613c858683613c3e565b95508019841693508086168417925050509392505050565b6000819050919050565b6000613cc2613cbd613cb884612e37565b613c9d565b612e37565b9050919050565b6000819050919050565b613cdc83613ca7565b613cf0613ce882613cc9565b848454613c4b565b825550505050565b600090565b613d05613cf8565b613d10818484613cd3565b505050565b5b81811015613d3457613d29600082613cfd565b600181019050613d16565b5050565b601f821115613d7957613d4a81613c19565b613d5384613c2e565b81016020851015613d62578190505b613d76613d6e85613c2e565b830182613d15565b50505b505050565b600082821c905092915050565b6000613d9c60001984600802613d7e565b1980831691505092915050565b6000613db58383613d8b565b9150826002028217905092915050565b613dcf8383613bdf565b67ffffffffffffffff811115613de857613de7613bea565b5b613df282546136f7565b613dfd828285613d38565b6000601f831160018114613e2c5760008415613e1a578287013590505b613e248582613da9565b865550613e8c565b601f198416613e3a86613c19565b60005b82811015613e6257848901358255600182019150602085019450602081019050613e3d565b86831015613e7f5784890135613e7b601f891682613d8b565b8355505b6001600288020188555050505b50505050505050565b6000819050919050565b613ea881613e95565b8114613eb357600080fd5b50565b60008135613ec381613e9f565b80915050919050565b60008160001b9050919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff613f0584613ecc565b9350801983169250808416831791505092915050565b6000613f36613f31613f2c84613e95565b613c9d565b613e95565b9050919050565b6000819050919050565b613f5082613f1b565b613f63613f5c82613f3d565b8354613ed9565b8255505050565b60008135613f7781612e41565b80915050919050565b613f8982613ca7565b613f9c613f9582613cc9565b8354613ed9565b8255505050565b600081016000830180613fb581613eb6565b9050613fc18184613f47565b505050600181016020830180613fd681613f6a565b9050613fe28184613f80565b5050505050565b613ff38282613fa3565b5050565b7f45616368206369746174696f6e20776569676874206d757374206265203e3d2060008201527f2d31303000000000000000000000000000000000000000000000000000000000602082015250565b6000614053602483612d28565b915061405e82613ff7565b604082019050919050565b6000602082019050818103600083015261408281614046565b9050919050565b7f45616368206369746174696f6e20776569676874206d757374206265203c3d2060008201527f3130300000000000000000000000000000000000000000000000000000000000602082015250565b60006140e5602383612d28565b91506140f082614089565b604082019050919050565b60006020820190508181036000830152614114816140d8565b9050919050565b600061412682613e95565b915061413183613e95565b92508282019050828112156000831216838212600084121516171561415957614158613794565b5b92915050565b7f53756d206f6620706f736974697665206369746174696f6e73206d757374206260008201527f65203c3d20313030000000000000000000000000000000000000000000000000602082015250565b60006141bb602883612d28565b91506141c68261415f565b604082019050919050565b600060208201905081810360008301526141ea816141ae565b9050919050565b7f53756d206f66206e65676174697665206369746174696f6e73206d757374206260008201527f65203e3d202d3130300000000000000000000000000000000000000000000000602082015250565b600061424d602983612d28565b9150614258826141f1565b604082019050919050565b6000602082019050818103600083015261427c81614240565b9050919050565b7f46656520697320726571756972656420746f20696e6974696174652076616c6960008201527f646174696f6e20706f6f6c000000000000000000000000000000000000000000602082015250565b60006142df602b83612d28565b91506142ea82614283565b604082019050919050565b6000602082019050818103600083015261430e816142d2565b9050919050565b7f4475726174696f6e20697320746f6f2073686f72740000000000000000000000600082015250565b600061434b601583612d28565b915061435682614315565b602082019050919050565b6000602082019050818103600083015261437a8161433e565b9050919050565b7f4475726174696f6e20697320746f6f206c6f6e67000000000000000000000000600082015250565b60006143b7601483612d28565b91506143c282614381565b602082019050919050565b600060208201905081810360008301526143e6816143aa565b9050919050565b7f51756f72756d2069732062656c6f77206d696e696d756d000000000000000000600082015250565b6000614423601783612d28565b915061442e826143ed565b602082019050919050565b6000602082019050818103600083015261445281614416565b9050919050565b7f51756f72756d2069732067726561746572207468616e206f6e65000000000000600082015250565b600061448f601a83612d28565b915061449a82614459565b602082019050919050565b600060208201905081810360008301526144be81614482565b9050919050565b7f57696e20726174696f2069732067726561746572207468616e206f6e65000000600082015250565b60006144fb601d83612d28565b9150614506826144c5565b602082019050919050565b6000602082019050818103600083015261452a816144ee565b9050919050565b7f42696e64696e672070657263656e74206d757374206265203c3d203130300000600082015250565b6000614567601e83612d28565b915061457282614531565b602082019050919050565b600060208201905081810360008301526145968161455a565b9050919050565b7f54617267657420706f7374206e6f7420666f756e640000000000000000000000600082015250565b60006145d3601583612d28565b91506145de8261459d565b602082019050919050565b60006020820190508181036000830152614602816145c6565b9050919050565b600082905092915050565b601f82111561465557614626816139c2565b61462f84613c2e565b8101602085101561463e578190505b61465261464a85613c2e565b830182613d15565b50505b505050565b6146648383614609565b67ffffffffffffffff81111561467d5761467c613bea565b5b61468782546136f7565b614692828285614614565b6000601f8311600181146146c157600084156146af578287013590505b6146b98582613da9565b865550614721565b601f1984166146cf866139c2565b60005b828110156146f7578489013582556001820191506020850194506020810190506146d2565b868310156147145784890135614710601f891682613d8b565b8355505b6001600288020188555050505b50505050505050565b600060608201905061473f6000830186612f1f565b61474c6020830185612f10565b6147596040830184612f10565b949350505050565b7f506f6f6c20656e642074696d6520686173207061737365640000000000000000600082015250565b6000614797601883612d28565b91506147a282614761565b602082019050919050565b600060208201905081810360008301526147c68161478a565b9050919050565b60006147d882613e95565b91506147e383613e95565b925082820390508181126000841216828213600085121516171561480a57614809613794565b5b92915050565b600061481b82613e95565b91507f8000000000000000000000000000000000000000000000000000000000000000820361484d5761484c613794565b5b816000039050919050565b600061486382613e95565b915061486e83613e95565b925082820261487c81613e95565b91507f800000000000000000000000000000000000000000000000000000000000000084146000841216156148b4576148b3613794565b5b82820584148315176148c9576148c8613794565b5b5092915050565b60006148db82613e95565b91506148e683613e95565b9250826148f6576148f56137f7565b5b600160000383147f80000000000000000000000000000000000000000000000000000000000000008314161561492f5761492e613794565b5b828205905092915050565b7f4c65616368696e672066726f6d20696e63696e657261746f7220697320666f7260008201527f62696464656e0000000000000000000000000000000000000000000000000000602082015250565b6000614996602683612d28565b91506149a18261493a565b604082019050919050565b600060208201905081810360008301526149c581614989565b905091905056fea2646970667358221220d1b3055f19d56cbb56ab481fa19378b72c5262b3b6cde9338368bac8fb03bea664736f6c63430008180033", + "bytecode": "0x608060405260036009556040518060400160405280600160ff168152602001600a60ff16815250600f90600262000038929190620000df565b503480156200004657600080fd5b506040518060400160405280600a81526020017f52657075746174696f6e000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f52455000000000000000000000000000000000000000000000000000000000008152508160039081620000c49190620003c2565b508060049081620000d69190620003c2565b505050620004a9565b826002810192821562000116579160200282015b8281111562000115578251829060ff16905591602001919060010190620000f3565b5b50905062000125919062000129565b5090565b5b80821115620001445760008160009055506001016200012a565b5090565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620001ca57607f821691505b602082108103620001e057620001df62000182565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026200024a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200020b565b6200025686836200020b565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620002a36200029d62000297846200026e565b62000278565b6200026e565b9050919050565b6000819050919050565b620002bf8362000282565b620002d7620002ce82620002aa565b84845462000218565b825550505050565b600090565b620002ee620002df565b620002fb818484620002b4565b505050565b5b81811015620003235762000317600082620002e4565b60018101905062000301565b5050565b601f82111562000372576200033c81620001e6565b6200034784620001fb565b8101602085101562000357578190505b6200036f6200036685620001fb565b83018262000300565b50505b505050565b600082821c905092915050565b6000620003976000198460080262000377565b1980831691505092915050565b6000620003b2838362000384565b9150826002028217905092915050565b620003cd8262000148565b67ffffffffffffffff811115620003e957620003e862000153565b5b620003f58254620001b1565b6200040282828562000327565b600060209050601f8311600181146200043a576000841562000425578287015190505b620004318582620003a4565b865550620004a1565b601f1984166200044a86620001e6565b60005b8281101562000474578489015182556001820191506020850194506020810190506200044d565b8683101562000494578489015162000490601f89168262000384565b8355505b6001600288020188555050505b505050505050565b61521880620004b96000396000f3fe6080604052600436106101405760003560e01c80635daf08ca116100b65780639fbe7c731161006f5780639fbe7c7314610498578063a230c524146104c8578063a233627914610505578063a9059cbb1461054d578063dd62ed3e1461058a578063f8300fca146105c757610140565b80635daf08ca14610362578063642b5bfb1461039f57806370a08231146103ca578063883802741461040757806395d89b4114610444578063975762b31461046f57610140565b806318160ddd1161010857806318160ddd1461024057806323b872dd1461026b5780632d17c062146102a8578063313ce567146102d157806338787df0146102fc57806350cde8ef1461032557610140565b806306fdde0314610145578063095ea7b31461017057806311aee380146101ad57806317906c2e146101d857806317c1821714610203575b600080fd5b34801561015157600080fd5b5061015a610607565b60405161016791906131d6565b60405180910390f35b34801561017c57600080fd5b50610197600480360381019061019291906132a0565b610699565b6040516101a491906132fb565b60405180910390f35b3480156101b957600080fd5b506101c26106bc565b6040516101cf9190613325565b60405180910390f35b3480156101e457600080fd5b506101ed6106c2565b6040516101fa9190613325565b60405180910390f35b34801561020f57600080fd5b5061022a60048036038101906102259190613340565b6106c8565b60405161023791906132fb565b60405180910390f35b34801561024c57600080fd5b50610255611256565b6040516102629190613325565b60405180910390f35b34801561027757600080fd5b50610292600480360381019061028d919061336d565b611260565b60405161029f91906132fb565b60405180910390f35b3480156102b457600080fd5b506102cf60048036038101906102ca91906133ec565b61129d565b005b3480156102dd57600080fd5b506102e66112c6565b6040516102f3919061345b565b60405180910390f35b34801561030857600080fd5b50610323600480360381019061031e9190613531565b6112cf565b005b34801561033157600080fd5b5061034c60048036038101906103479190613340565b6116fe565b60405161035991906131d6565b60405180910390f35b34801561036e57600080fd5b5061038960048036038101906103849190613340565b6117aa565b60405161039691906135d5565b60405180910390f35b3480156103ab57600080fd5b506103b46117dd565b6040516103c19190613325565b60405180910390f35b3480156103d657600080fd5b506103f160048036038101906103ec91906135f0565b6117e3565b6040516103fe9190613325565b60405180910390f35b34801561041357600080fd5b5061042e6004803603810190610429919061361d565b61182b565b60405161043b91906132fb565b60405180910390f35b34801561045057600080fd5b506104596118b2565b60405161046691906131d6565b60405180910390f35b34801561047b57600080fd5b5061049660048036038101906104919190613670565b611944565b005b6104b260048036038101906104ad919061374f565b611979565b6040516104bf9190613325565b60405180910390f35b3480156104d457600080fd5b506104ef60048036038101906104ea91906135f0565b611e7c565b6040516104fc91906132fb565b60405180910390f35b34801561051157600080fd5b5061052c60048036038101906105279190613340565b611e9c565b6040516105449c9b9a999897969594939291906139bf565b60405180910390f35b34801561055957600080fd5b50610574600480360381019061056f91906132a0565b612116565b60405161058191906132fb565b60405180910390f35b34801561059657600080fd5b506105b160048036038101906105ac9190613a89565b612153565b6040516105be9190613325565b60405180910390f35b3480156105d357600080fd5b506105ee60048036038101906105e99190613bf9565b6121da565b6040516105fe9493929190613c42565b60405180910390f35b60606003805461061690613cbd565b80601f016020809104026020016040519081016040528092919081815260200182805461064290613cbd565b801561068f5780601f106106645761010080835404028352916020019161068f565b820191906000526020600020905b81548152906001019060200180831161067257829003601f168201915b5050505050905090565b6000806106a46122e8565b90506106b18185856122f0565b600191505092915050565b600d5481565b60075481565b600080600a6000848152602001908152602001600020905060006005826001016040516106f59190613d91565b908152602001604051809103902090506000151582600f0160009054906101000a900460ff1615151461075d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161075490613df4565b60405180910390fd5b600080600080600090505b85600501548110156107d95785600401600082815260200190815260200160002091508160010160009054906101000a900460ff16156107b9578160020154846107b29190613e43565b93506107cc565b8160020154836107c99190613e43565b92505b8080600101915050610768565b50600285600301546107eb9190613ea6565b836107f69190613e43565b9250600285600301546108099190613ea6565b826108149190613e43565b91506000600286600301546108299190613ed7565b1461083e5760018361083b9190613e43565b92505b84600e01544211806108615750610853611256565b828461085f9190613e43565b145b6108a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161089790613f7a565b60405180910390fd5b846006016001016000600281106108ba576108b9613f9a565b5b01546108c4611256565b6108ce9190613fc9565b82846108da9190613e43565b866006016001016001600281106108f4576108f3613f9a565b5b01546109009190613fc9565b11610a3157600185600f0160006101000a81548160ff0219169083151502179055507fae8941f3b4d152118273444f36b8b5642e5602102b789968bd4b7cf8b250de81876000806040516109569392919061400b565b60405180910390a184600f0160029054906101000a900460ff1615610a23578460020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b4e6a1d587600086868a6010016040518663ffffffff1660e01b81526004016109de9594939291906140db565b6020604051808303816000875af11580156109fd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a21919061414a565b505b600095505050505050611251565b84600601600301600060028110610a4b57610a4a613f9a565b5b01548284610a599190613e43565b610a639190613fc9565b85600601600301600160028110610a7d57610a7c613f9a565b5b015484610a8a9190613fc9565b10159550858015610b095750600e60008560020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15610c17578360020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600c6000600d6000815480929190610b4a90614177565b91905055815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600e60008660020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b600185600f0160006101000a81548160ff0219169083151502179055508585600f0160016101000a81548160ff0219169083151502179055507fae8941f3b4d152118273444f36b8b5642e5602102b789968bd4b7cf8b250de8187876001604051610c849392919061400b565b60405180910390a1600086610c995782610c9b565b835b905060008060005b8860050154811015610da35788600401600082815260200190815260200160002094508460010160009054906101000a900460ff1615158a151514610d9657600060648a600601600501548760020154610cfd9190613fc9565b610d079190613ea6565b90508960060160060160009054906101000a900460ff1615610d6557610d528660030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff163083612302565b8084610d5e9190613e43565b9350610d94565b610d938660030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682612527565b5b505b8080600101915050610ca3565b508815610fa15760028860030154610dbb9190613ea6565b82610dc69190613e43565b915060005b8860050154811015610eb15788600401600082815260200190815260200160002094508860060160060160009054906101000a900460ff168015610e2357508460010160009054906101000a900460ff1615158a1515145b15610ea457600060648a6006016005015486886002015487610e459190613fc9565b610e4f9190613ea6565b610e599190613fc9565b610e639190613ea6565b90508083610e719190613e43565b9250610ea2308760030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683612302565b505b8080600101915050610dcb565b5060008183610ec091906141bf565b9050600060028a60030154610ed59190613ed7565b14610eea57600181610ee79190613e43565b90505b610f9b896001018054610efc90613cbd565b80601f0160208091040260200160405190810160405280929190818152602001828054610f2890613cbd565b8015610f755780601f10610f4a57610100808354040283529160200191610f75565b820191906000526020600020905b815481529060010190602001808311610f5857829003601f168201915b50505050508260028c60030154610f8c9190613ea6565b610f969190613e43565b6125a9565b506110b9565b876003015482610fb19190613e43565b915060005b88600501548110156110b75788600401600082815260200190815260200160002094508860060160060160009054906101000a900460ff16801561100e57508460010160009054906101000a900460ff1615158a1515145b156110aa57600060648a6006016005015460028c600301546110309190613ea6565b8761103b91906141bf565b88600201548761104b9190613fc9565b6110559190613ea6565b61105f9190613fc9565b6110699190613ea6565b905080836110779190613e43565b92506110a8308760030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683612302565b505b8080600101915050610fb6565b505b60005b600d54811015611182576000600c600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000611108611256565b611111836117e3565b8c600d01546111209190613fc9565b61112a9190613ea6565b90508173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611172573d6000803e3d6000fd5b50505080806001019150506110bc565b5087600f0160029054906101000a900460ff1615611248578760020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b4e6a1d58a600189898d6010016040518663ffffffff1660e01b81526004016112039594939291906140db565b6020604051808303816000875af1158015611222573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611246919061414a565b505b50505050505050505b919050565b6000600254905090565b60006040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112949061423f565b60405180910390fd5b6000600a600085815260200190815260200160002090506112c0813385856125bb565b50505050565b60006009905090565b600760008154809291906112e290614177565b91905055506006848490918060018154018082558091505060019003906000526020600020016000909192909192909192909192509182611324929190614401565b506000600585856040516113399291906144f6565b90815260200160405180910390209050600073ffffffffffffffffffffffffffffffffffffffff168160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d390614581565b60405180910390fd5b858160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550338160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508484826000019182611475929190614401565b5060005b838390508110156114f1578160030184848381811061149b5761149a613f9a565b5b90506020028101906114ad91906145b0565b908060018154018082558091505060019003906000526020600020906002020160009091909190915081816114e29190614766565b50508080600101915050611479565b5060008060005b836003018054905081101561161357600084600301828154811061151f5761151e613f9a565b5b90600052602060002090600202016000015490507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c811215611596576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158d906147e6565b60405180910390fd5b60648113156115da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d190614878565b60405180910390fd5b60008113156115f65780846115ef9190614898565b9350611605565b80836116029190614898565b92505b5080806001019150506114f8565b506064821315611658576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164f9061494e565b60405180910390fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c8112156116bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b2906149e0565b60405180910390fd5b7fbd6277baf8ced6ab6543a1aef164635fc2bde1ba962d39d8a0fd81a5af24972787876040516116ec929190614a2d565b60405180910390a15050505050505050565b6006818154811061170e57600080fd5b90600052602060002001600091509050805461172990613cbd565b80601f016020809104026020016040519081016040528092919081815260200182805461175590613cbd565b80156117a25780601f10611777576101008083540402835291602001916117a2565b820191906000526020600020905b81548152906001019060200180831161178557829003601f168201915b505050505081565b600c6020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b5481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60006118383385856122f0565b8373ffffffffffffffffffffffffffffffffffffffff1663216ed6ad3385856040518463ffffffff1660e01b815260040161187593929190614a51565b600060405180830381600087803b15801561188f57600080fd5b505af11580156118a3573d6000803e3d6000fd5b50505050600190509392505050565b6060600480546118c190613cbd565b80601f01602080910402602001604051908101604052809291908181526020018280546118ed90613cbd565b801561193a5780601f1061190f5761010080835404028352916020019161193a565b820191906000526020600020905b81548152906001019060200180831161191d57829003601f168201915b5050505050905090565b6000600a600086815260200190815260200160002090506119668433856126b1565b611972818585856125bb565b5050505050565b60008034116119bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b490614afa565b60405180910390fd5b6001891015611a01576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f890614b66565b60405180910390fd5b651cae8c13e000891115611a4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4190614bd2565b60405180910390fd5b87600160028110611a5e57611a5d613f9a565b5b6020020135600f600060028110611a7857611a77613f9a565b5b0154611a849190613fc9565b88600060028110611a9857611a97613f9a565b5b6020020135600f600160028110611ab257611ab1613f9a565b5b0154611abe9190613fc9565b1015611aff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af690614c3e565b60405180910390fd5b87600160028110611b1357611b12613f9a565b5b602002013588600060028110611b2c57611b2b613f9a565b5b60200201351115611b72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6990614caa565b60405180910390fd5b86600160028110611b8657611b85613f9a565b5b602002013587600060028110611b9f57611b9e613f9a565b5b60200201351115611be5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bdc90614d16565b60405180910390fd5b6064861115611c29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2090614d82565b60405180910390fd5b600060058c8c604051611c3d9291906144f6565b90815260200160405180910390209050600073ffffffffffffffffffffffffffffffffffffffff168160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611ce0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd790614dee565b60405180910390fd5b600b6000815480929190611cf390614177565b9190505591506000600a60008481526020019081526020016000209050338160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508c8c826001019182611d66929190614401565b503481600d01819055508981600601600101906002611d869291906130e9565b508881600601600301906002611d9d9291906130e9565b50878160060160050181905550868160060160060160006101000a81548160ff0219169083151502179055508a81600601600001819055508a42611de19190613e43565b81600e01819055508281600001819055508581600f0160026101000a81548160ff0219169083151502179055508484826010019182611e21929190614e5f565b50611e2c3034612745565b3481600301819055507f6e5c598b821d7fa8550e5fea58ab6e27c59e1cbe1df75a8591aa0c453b49e10a83604051611e649190613325565b60405180910390a150509a9950505050505050505050565b600e6020528060005260406000206000915054906101000a900460ff1681565b600a602052806000526040600020600091509050806000015490806001018054611ec590613cbd565b80601f0160208091040260200160405190810160405280929190818152602001828054611ef190613cbd565b8015611f3e5780601f10611f1357610100808354040283529160200191611f3e565b820191906000526020600020905b815481529060010190602001808311611f2157829003601f168201915b5050505050908060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806003015490806005015490806006016040518060a00160405290816000820154815260200160018201600280602002604051908101604052809291908260028015611fcb576020028201915b815481526020019060010190808311611fb7575b5050505050815260200160038201600280602002604051908101604052809291908260028015612010576020028201915b815481526020019060010190808311611ffc575b50505050508152602001600582015481526020016006820160009054906101000a900460ff1615151515815250509080600d01549080600e01549080600f0160009054906101000a900460ff169080600f0160019054906101000a900460ff169080600f0160029054906101000a900460ff169080601001805461209390613cbd565b80601f01602080910402602001604051908101604052809291908181526020018280546120bf90613cbd565b801561210c5780601f106120e15761010080835404028352916020019161210c565b820191906000526020600020905b8154815290600101906020018083116120ef57829003601f168201915b505050505090508c565b60006040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214a9061423f565b60405180910390fd5b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60058180516020810182018051848252602083016020850120818352809550505050505060009150905080600001805461221390613cbd565b80601f016020809104026020016040519081016040528092919081815260200182805461223f90613cbd565b801561228c5780601f106122615761010080835404028352916020019161228c565b820191906000526020600020905b81548152906001019060200180831161226f57829003601f168201915b5050505050908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060040154905084565b600033905090565b6122fd83838360016127c7565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036123545780600260008282546123489190613e43565b92505081905550612427565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156123e0578381836040517fe450d38c0000000000000000000000000000000000000000000000000000000081526004016123d793929190614a51565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361247057806002600082825403925050819055506124bd565b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161251a9190613325565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036125995760006040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260040161259091906135d5565b60405180910390fd5b6125a582600083612302565b5050565b6125b6828260008061299e565b505050565b83600e0154421115612602576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125f990614f7b565b60405180910390fd5b600084600501600081548092919061261990614177565b91905055905060008560040160008381526020019081526020016000209050848160030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550828160010160006101000a81548160ff021916908315150217905550838160020181905550818160000181905550505050505050565b60006126bd8484612153565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461273f578181101561272f578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161272693929190614a51565b60405180910390fd5b61273e848484840360006127c7565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036127b75760006040517fec442f050000000000000000000000000000000000000000000000000000000081526004016127ae91906135d5565b60405180910390fd5b6127c360008383612302565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036128395760006040517fe602df0500000000000000000000000000000000000000000000000000000000815260040161283091906135d5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036128ab5760006040517f94280d620000000000000000000000000000000000000000000000000000000081526004016128a291906135d5565b60405180910390fd5b81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508015612998578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161298f9190613325565b60405180910390a35b50505050565b600060095482106129b157839050612f18565b60006005866040516129c39190614fcc565b9081526020016040518091039020905060005b8160030180549050811015612b075760008260030182815481106129fd576129fc613f9a565b5b9060005260206000209060020201600001541215612afa57612aec87836003018381548110612a2f57612a2e613f9a565b5b906000526020600020906002020160405180604001604052908160008201548152602001600182018054612a6290613cbd565b80601f0160208091040260200160405190810160405280929190818152602001828054612a8e90613cbd565b8015612adb5780601f10612ab057610100808354040283529160200191612adb565b820191906000526020600020905b815481529060010190602001808311612abe57829003601f168201915b505050505081525050888888612f20565b86612af79190614fe3565b95505b80806001019150506129d6565b5060005b8160030180549050811015612c3c576000826003018281548110612b3257612b31613f9a565b5b9060005260206000209060020201600001541315612c2f57612c2187836003018381548110612b6457612b63613f9a565b5b906000526020600020906002020160405180604001604052908160008201548152602001600182018054612b9790613cbd565b80601f0160208091040260200160405190810160405280929190818152602001828054612bc390613cbd565b8015612c105780601f10612be557610100808354040283529160200191612c10565b820191906000526020600020905b815481529060010190602001808311612bf357829003601f168201915b505050505081525050888888612f20565b86612c2c9190614fe3565b95505b8080600101915050612b0b565b506000851315612c9557612c75308260020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1687612302565b84816004016000828254612c899190613e43565b92505081905550612f16565b6000858260040154612ca79190614898565b12612de45784612cb690615026565b612ce38260020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166117e3565b10612d2557612d208160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff163087612d1b90615026565b612302565b612dbb565b612d528160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166117e3565b85612d5d9190614898565b9150612dba8160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1630612db58460020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166117e3565b612302565b5b84612dc590615026565b816004016000828254612dd891906141bf565b92505081905550612f15565b848160040154612df49190614898565b91508060040154612e288260020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166117e3565b10612e6557612e608160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16308360040154612302565b612f0a565b612e928160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166117e3565b8160040154612ea191906141bf565b82612eac9190614fe3565b9150612f098160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1630612f048460020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166117e3565b612302565b5b600081600401819055505b5b505b949350505050565b60006064856000015185612f34919061506e565b612f3e91906150e6565b9050600085602001515103612fa0576000811215612f91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f88906151c2565b60405180910390fd5b612f9b3082612527565b6130e0565b6000600887604051612fb29190614fcc565b90815260200160405180910390208660200151604051612fd29190614fcc565b9081526020016040518091039020549050831561303f57600082121561301a5780612ffc90615026565b8213613011578061300c90615026565b613013565b815b915061303e565b8061302490615026565b8212613039578061303490615026565b61303b565b815b91505b5b600061307887602001518487806130665750600087148015613065575060008a60000151125b5b6001886130739190613e43565b61299e565b905080836130869190614fe3565b9250826008896040516130999190614fcc565b908152602001604051809103902088602001516040516130b99190614fcc565b908152602001604051809103902060008282546130d69190614898565b9250508190555050505b95945050505050565b8260028101928215613118579160200282015b828111156131175782358255916020019190600101906130fc565b5b5090506131259190613129565b5090565b5b8082111561314257600081600090555060010161312a565b5090565b600081519050919050565b600082825260208201905092915050565b60005b83811015613180578082015181840152602081019050613165565b60008484015250505050565b6000601f19601f8301169050919050565b60006131a882613146565b6131b28185613151565b93506131c2818560208601613162565b6131cb8161318c565b840191505092915050565b600060208201905081810360008301526131f0818461319d565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006132378261320c565b9050919050565b6132478161322c565b811461325257600080fd5b50565b6000813590506132648161323e565b92915050565b6000819050919050565b61327d8161326a565b811461328857600080fd5b50565b60008135905061329a81613274565b92915050565b600080604083850312156132b7576132b6613202565b5b60006132c585828601613255565b92505060206132d68582860161328b565b9150509250929050565b60008115159050919050565b6132f5816132e0565b82525050565b600060208201905061331060008301846132ec565b92915050565b61331f8161326a565b82525050565b600060208201905061333a6000830184613316565b92915050565b60006020828403121561335657613355613202565b5b60006133648482850161328b565b91505092915050565b60008060006060848603121561338657613385613202565b5b600061339486828701613255565b93505060206133a586828701613255565b92505060406133b68682870161328b565b9150509250925092565b6133c9816132e0565b81146133d457600080fd5b50565b6000813590506133e6816133c0565b92915050565b60008060006060848603121561340557613404613202565b5b60006134138682870161328b565b93505060206134248682870161328b565b9250506040613435868287016133d7565b9150509250925092565b600060ff82169050919050565b6134558161343f565b82525050565b6000602082019050613470600083018461344c565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261349b5761349a613476565b5b8235905067ffffffffffffffff8111156134b8576134b761347b565b5b6020830191508360018202830111156134d4576134d3613480565b5b9250929050565b60008083601f8401126134f1576134f0613476565b5b8235905067ffffffffffffffff81111561350e5761350d61347b565b5b60208301915083602082028301111561352a57613529613480565b5b9250929050565b60008060008060006060868803121561354d5761354c613202565b5b600061355b88828901613255565b955050602086013567ffffffffffffffff81111561357c5761357b613207565b5b61358888828901613485565b9450945050604086013567ffffffffffffffff8111156135ab576135aa613207565b5b6135b7888289016134db565b92509250509295509295909350565b6135cf8161322c565b82525050565b60006020820190506135ea60008301846135c6565b92915050565b60006020828403121561360657613605613202565b5b600061361484828501613255565b91505092915050565b60008060006060848603121561363657613635613202565b5b600061364486828701613255565b93505060206136558682870161328b565b92505060406136668682870161328b565b9150509250925092565b6000806000806080858703121561368a57613689613202565b5b60006136988782880161328b565b94505060206136a987828801613255565b93505060406136ba8782880161328b565b92505060606136cb878288016133d7565b91505092959194509250565b6000819050826020600202820111156136f3576136f2613480565b5b92915050565b60008083601f84011261370f5761370e613476565b5b8235905067ffffffffffffffff81111561372c5761372b61347b565b5b60208301915083600182028301111561374857613747613480565b5b9250929050565b6000806000806000806000806000806101408b8d03121561377357613772613202565b5b60008b013567ffffffffffffffff81111561379157613790613207565b5b61379d8d828e01613485565b9a509a505060206137b08d828e0161328b565b98505060406137c18d828e016136d7565b97505060806137d28d828e016136d7565b96505060c06137e38d828e0161328b565b95505060e06137f48d828e016133d7565b9450506101006138068d828e016133d7565b9350506101208b013567ffffffffffffffff81111561382857613827613207565b5b6138348d828e016136f9565b92509250509295989b9194979a5092959850565b6138518161326a565b82525050565b600060029050919050565b600081905092915050565b6000819050919050565b60006138838383613848565b60208301905092915050565b6000602082019050919050565b6138a581613857565b6138af8184613862565b92506138ba8261386d565b8060005b838110156138eb5781516138d28782613877565b96506138dd8361388f565b9250506001810190506138be565b505050505050565b6138fc816132e0565b82525050565b60e0820160008201516139186000850182613848565b50602082015161392b602085018261389c565b50604082015161393e606085018261389c565b50606082015161395160a0850182613848565b50608082015161396460c08501826138f3565b50505050565b600081519050919050565b600082825260208201905092915050565b60006139918261396a565b61399b8185613975565b93506139ab818560208601613162565b6139b48161318c565b840191505092915050565b6000610240820190506139d5600083018f613316565b81810360208301526139e7818e61319d565b90506139f6604083018d6135c6565b613a03606083018c613316565b613a10608083018b613316565b613a1d60a083018a613902565b613a2b610180830189613316565b613a396101a0830188613316565b613a476101c08301876132ec565b613a556101e08301866132ec565b613a636102008301856132ec565b818103610220830152613a768184613986565b90509d9c50505050505050505050505050565b60008060408385031215613aa057613a9f613202565b5b6000613aae85828601613255565b9250506020613abf85828601613255565b9150509250929050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613b068261318c565b810181811067ffffffffffffffff82111715613b2557613b24613ace565b5b80604052505050565b6000613b386131f8565b9050613b448282613afd565b919050565b600067ffffffffffffffff821115613b6457613b63613ace565b5b613b6d8261318c565b9050602081019050919050565b82818337600083830152505050565b6000613b9c613b9784613b49565b613b2e565b905082815260208101848484011115613bb857613bb7613ac9565b5b613bc3848285613b7a565b509392505050565b600082601f830112613be057613bdf613476565b5b8135613bf0848260208601613b89565b91505092915050565b600060208284031215613c0f57613c0e613202565b5b600082013567ffffffffffffffff811115613c2d57613c2c613207565b5b613c3984828501613bcb565b91505092915050565b60006080820190508181036000830152613c5c818761319d565b9050613c6b60208301866135c6565b613c7860408301856135c6565b613c856060830184613316565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613cd557607f821691505b602082108103613ce857613ce7613c8e565b5b50919050565b600081905092915050565b60008190508160005260206000209050919050565b60008154613d1b81613cbd565b613d258186613cee565b94506001821660008114613d405760018114613d5557613d88565b60ff1983168652811515820286019350613d88565b613d5e85613cf9565b60005b83811015613d8057815481890152600182019150602081019050613d61565b838801955050505b50505092915050565b6000613d9d8284613d0e565b915081905092915050565b7f506f6f6c20697320616c7265616479207265736f6c7665640000000000000000600082015250565b6000613dde601883613151565b9150613de982613da8565b602082019050919050565b60006020820190508181036000830152613e0d81613dd1565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613e4e8261326a565b9150613e598361326a565b9250828201905080821115613e7157613e70613e14565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613eb18261326a565b9150613ebc8361326a565b925082613ecc57613ecb613e77565b5b828204905092915050565b6000613ee28261326a565b9150613eed8361326a565b925082613efd57613efc613e77565b5b828206905092915050565b7f506f6f6c20656e642074696d6520686173206e6f74207965742061727269766560008201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b6000613f64602183613151565b9150613f6f82613f08565b604082019050919050565b60006020820190508181036000830152613f9381613f57565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000613fd48261326a565b9150613fdf8361326a565b9250828202613fed8161326a565b9150828204841483151761400457614003613e14565b5b5092915050565b60006060820190506140206000830186613316565b61402d60208301856132ec565b61403a60408301846132ec565b949350505050565b60008190508160005260206000209050919050565b6000815461406481613cbd565b61406e8186613975565b94506001821660008114614089576001811461409f576140d2565b60ff1983168652811515602002860193506140d2565b6140a885614042565b60005b838110156140ca578154818901526001820191506020810190506140ab565b808801955050505b50505092915050565b600060a0820190506140f060008301886132ec565b6140fd60208301876132ec565b61410a6040830186613316565b6141176060830185613316565b81810360808301526141298184614057565b90509695505050505050565b60008151905061414481613274565b92915050565b6000602082840312156141605761415f613202565b5b600061416e84828501614135565b91505092915050565b60006141828261326a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036141b4576141b3613e14565b5b600182019050919050565b60006141ca8261326a565b91506141d58361326a565b92508282039050818111156141ed576141ec613e14565b5b92915050565b7f524550207472616e73666572206973206e6f7420616c6c6f7765640000000000600082015250565b6000614229601b83613151565b9150614234826141f3565b602082019050919050565b600060208201905081810360008301526142588161421c565b9050919050565b600082905092915050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026142b77fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261427a565b6142c1868361427a565b95508019841693508086168417925050509392505050565b6000819050919050565b60006142fe6142f96142f48461326a565b6142d9565b61326a565b9050919050565b6000819050919050565b614318836142e3565b61432c61432482614305565b848454614287565b825550505050565b600090565b614341614334565b61434c81848461430f565b505050565b5b8181101561437057614365600082614339565b600181019050614352565b5050565b601f8211156143b55761438681613cf9565b61438f8461426a565b8101602085101561439e578190505b6143b26143aa8561426a565b830182614351565b50505b505050565b600082821c905092915050565b60006143d8600019846008026143ba565b1980831691505092915050565b60006143f183836143c7565b9150826002028217905092915050565b61440b838361425f565b67ffffffffffffffff81111561442457614423613ace565b5b61442e8254613cbd565b614439828285614374565b6000601f8311600181146144685760008415614456578287013590505b61446085826143e5565b8655506144c8565b601f19841661447686613cf9565b60005b8281101561449e57848901358255600182019150602085019450602081019050614479565b868310156144bb57848901356144b7601f8916826143c7565b8355505b6001600288020188555050505b50505050505050565b60006144dd8385613cee565b93506144ea838584613b7a565b82840190509392505050565b60006145038284866144d1565b91508190509392505050565b7f4120706f73742077697468207468697320636f6e74656e74496420616c72656160008201527f6479206578697374730000000000000000000000000000000000000000000000602082015250565b600061456b602983613151565b91506145768261450f565b604082019050919050565b6000602082019050818103600083015261459a8161455e565b9050919050565b600080fd5b600080fd5b600080fd5b6000823560016040038336030381126145cc576145cb6145a1565b5b80830191505092915050565b6000819050919050565b6145eb816145d8565b81146145f657600080fd5b50565b60008135614606816145e2565b80915050919050565b60008160001b9050919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6146488461460f565b9350801983169250808416831791505092915050565b600061467961467461466f846145d8565b6142d9565b6145d8565b9050919050565b6000819050919050565b6146938261465e565b6146a661469f82614680565b835461461c565b8255505050565b600080833560016020038436030381126146ca576146c96145a1565b5b80840192508235915067ffffffffffffffff8211156146ec576146eb6145a6565b5b602083019250600182023603831315614708576147076145ab565b5b509250929050565b61471b838383614401565b505050565b600081016000830180614732816145f9565b905061473e818461468a565b505050600181016020830161475381856146ad565b61475e818386614710565b505050505050565b6147708282614720565b5050565b7f45616368206369746174696f6e20776569676874206d757374206265203e3d2060008201527f2d31303000000000000000000000000000000000000000000000000000000000602082015250565b60006147d0602483613151565b91506147db82614774565b604082019050919050565b600060208201905081810360008301526147ff816147c3565b9050919050565b7f45616368206369746174696f6e20776569676874206d757374206265203c3d2060008201527f3130300000000000000000000000000000000000000000000000000000000000602082015250565b6000614862602383613151565b915061486d82614806565b604082019050919050565b6000602082019050818103600083015261489181614855565b9050919050565b60006148a3826145d8565b91506148ae836145d8565b9250828201905082811215600083121683821260008412151617156148d6576148d5613e14565b5b92915050565b7f53756d206f6620706f736974697665206369746174696f6e73206d757374206260008201527f65203c3d20313030000000000000000000000000000000000000000000000000602082015250565b6000614938602883613151565b9150614943826148dc565b604082019050919050565b600060208201905081810360008301526149678161492b565b9050919050565b7f53756d206f66206e65676174697665206369746174696f6e73206d757374206260008201527f65203e3d202d3130300000000000000000000000000000000000000000000000602082015250565b60006149ca602983613151565b91506149d58261496e565b604082019050919050565b600060208201905081810360008301526149f9816149bd565b9050919050565b6000614a0c8385613151565b9350614a19838584613b7a565b614a228361318c565b840190509392505050565b60006020820190508181036000830152614a48818486614a00565b90509392505050565b6000606082019050614a6660008301866135c6565b614a736020830185613316565b614a806040830184613316565b949350505050565b7f46656520697320726571756972656420746f20696e6974696174652076616c6960008201527f646174696f6e20706f6f6c000000000000000000000000000000000000000000602082015250565b6000614ae4602b83613151565b9150614aef82614a88565b604082019050919050565b60006020820190508181036000830152614b1381614ad7565b9050919050565b7f4475726174696f6e20697320746f6f2073686f72740000000000000000000000600082015250565b6000614b50601583613151565b9150614b5b82614b1a565b602082019050919050565b60006020820190508181036000830152614b7f81614b43565b9050919050565b7f4475726174696f6e20697320746f6f206c6f6e67000000000000000000000000600082015250565b6000614bbc601483613151565b9150614bc782614b86565b602082019050919050565b60006020820190508181036000830152614beb81614baf565b9050919050565b7f51756f72756d2069732062656c6f77206d696e696d756d000000000000000000600082015250565b6000614c28601783613151565b9150614c3382614bf2565b602082019050919050565b60006020820190508181036000830152614c5781614c1b565b9050919050565b7f51756f72756d2069732067726561746572207468616e206f6e65000000000000600082015250565b6000614c94601a83613151565b9150614c9f82614c5e565b602082019050919050565b60006020820190508181036000830152614cc381614c87565b9050919050565b7f57696e20726174696f2069732067726561746572207468616e206f6e65000000600082015250565b6000614d00601d83613151565b9150614d0b82614cca565b602082019050919050565b60006020820190508181036000830152614d2f81614cf3565b9050919050565b7f42696e64696e672070657263656e74206d757374206265203c3d203130300000600082015250565b6000614d6c601e83613151565b9150614d7782614d36565b602082019050919050565b60006020820190508181036000830152614d9b81614d5f565b9050919050565b7f54617267657420706f7374206e6f7420666f756e640000000000000000000000600082015250565b6000614dd8601583613151565b9150614de382614da2565b602082019050919050565b60006020820190508181036000830152614e0781614dcb565b9050919050565b600082905092915050565b601f821115614e5a57614e2b81614042565b614e348461426a565b81016020851015614e43578190505b614e57614e4f8561426a565b830182614351565b50505b505050565b614e698383614e0e565b67ffffffffffffffff811115614e8257614e81613ace565b5b614e8c8254613cbd565b614e97828285614e19565b6000601f831160018114614ec65760008415614eb4578287013590505b614ebe85826143e5565b865550614f26565b601f198416614ed486614042565b60005b82811015614efc57848901358255600182019150602085019450602081019050614ed7565b86831015614f195784890135614f15601f8916826143c7565b8355505b6001600288020188555050505b50505050505050565b7f506f6f6c20656e642074696d6520686173207061737365640000000000000000600082015250565b6000614f65601883613151565b9150614f7082614f2f565b602082019050919050565b60006020820190508181036000830152614f9481614f58565b9050919050565b6000614fa682613146565b614fb08185613cee565b9350614fc0818560208601613162565b80840191505092915050565b6000614fd88284614f9b565b915081905092915050565b6000614fee826145d8565b9150614ff9836145d8565b92508282039050818112600084121682821360008512151617156150205761501f613e14565b5b92915050565b6000615031826145d8565b91507f8000000000000000000000000000000000000000000000000000000000000000820361506357615062613e14565b5b816000039050919050565b6000615079826145d8565b9150615084836145d8565b9250828202615092816145d8565b91507f800000000000000000000000000000000000000000000000000000000000000084146000841216156150ca576150c9613e14565b5b82820584148315176150df576150de613e14565b5b5092915050565b60006150f1826145d8565b91506150fc836145d8565b92508261510c5761510b613e77565b5b600160000383147f80000000000000000000000000000000000000000000000000000000000000008314161561514557615144613e14565b5b828205905092915050565b7f4c65616368696e672066726f6d20696e63696e657261746f7220697320666f7260008201527f62696464656e0000000000000000000000000000000000000000000000000000602082015250565b60006151ac602683613151565b91506151b782615150565b604082019050919050565b600060208201905081810360008301526151db8161519f565b905091905056fea26469706673582212202139e93ce050854daf1beda33b1bbb7a3673091ce5f7ad6ef1084c8d4926da4b64736f6c63430008180033", + "deployedBytecode": "0x6080604052600436106101405760003560e01c80635daf08ca116100b65780639fbe7c731161006f5780639fbe7c7314610498578063a230c524146104c8578063a233627914610505578063a9059cbb1461054d578063dd62ed3e1461058a578063f8300fca146105c757610140565b80635daf08ca14610362578063642b5bfb1461039f57806370a08231146103ca578063883802741461040757806395d89b4114610444578063975762b31461046f57610140565b806318160ddd1161010857806318160ddd1461024057806323b872dd1461026b5780632d17c062146102a8578063313ce567146102d157806338787df0146102fc57806350cde8ef1461032557610140565b806306fdde0314610145578063095ea7b31461017057806311aee380146101ad57806317906c2e146101d857806317c1821714610203575b600080fd5b34801561015157600080fd5b5061015a610607565b60405161016791906131d6565b60405180910390f35b34801561017c57600080fd5b50610197600480360381019061019291906132a0565b610699565b6040516101a491906132fb565b60405180910390f35b3480156101b957600080fd5b506101c26106bc565b6040516101cf9190613325565b60405180910390f35b3480156101e457600080fd5b506101ed6106c2565b6040516101fa9190613325565b60405180910390f35b34801561020f57600080fd5b5061022a60048036038101906102259190613340565b6106c8565b60405161023791906132fb565b60405180910390f35b34801561024c57600080fd5b50610255611256565b6040516102629190613325565b60405180910390f35b34801561027757600080fd5b50610292600480360381019061028d919061336d565b611260565b60405161029f91906132fb565b60405180910390f35b3480156102b457600080fd5b506102cf60048036038101906102ca91906133ec565b61129d565b005b3480156102dd57600080fd5b506102e66112c6565b6040516102f3919061345b565b60405180910390f35b34801561030857600080fd5b50610323600480360381019061031e9190613531565b6112cf565b005b34801561033157600080fd5b5061034c60048036038101906103479190613340565b6116fe565b60405161035991906131d6565b60405180910390f35b34801561036e57600080fd5b5061038960048036038101906103849190613340565b6117aa565b60405161039691906135d5565b60405180910390f35b3480156103ab57600080fd5b506103b46117dd565b6040516103c19190613325565b60405180910390f35b3480156103d657600080fd5b506103f160048036038101906103ec91906135f0565b6117e3565b6040516103fe9190613325565b60405180910390f35b34801561041357600080fd5b5061042e6004803603810190610429919061361d565b61182b565b60405161043b91906132fb565b60405180910390f35b34801561045057600080fd5b506104596118b2565b60405161046691906131d6565b60405180910390f35b34801561047b57600080fd5b5061049660048036038101906104919190613670565b611944565b005b6104b260048036038101906104ad919061374f565b611979565b6040516104bf9190613325565b60405180910390f35b3480156104d457600080fd5b506104ef60048036038101906104ea91906135f0565b611e7c565b6040516104fc91906132fb565b60405180910390f35b34801561051157600080fd5b5061052c60048036038101906105279190613340565b611e9c565b6040516105449c9b9a999897969594939291906139bf565b60405180910390f35b34801561055957600080fd5b50610574600480360381019061056f91906132a0565b612116565b60405161058191906132fb565b60405180910390f35b34801561059657600080fd5b506105b160048036038101906105ac9190613a89565b612153565b6040516105be9190613325565b60405180910390f35b3480156105d357600080fd5b506105ee60048036038101906105e99190613bf9565b6121da565b6040516105fe9493929190613c42565b60405180910390f35b60606003805461061690613cbd565b80601f016020809104026020016040519081016040528092919081815260200182805461064290613cbd565b801561068f5780601f106106645761010080835404028352916020019161068f565b820191906000526020600020905b81548152906001019060200180831161067257829003601f168201915b5050505050905090565b6000806106a46122e8565b90506106b18185856122f0565b600191505092915050565b600d5481565b60075481565b600080600a6000848152602001908152602001600020905060006005826001016040516106f59190613d91565b908152602001604051809103902090506000151582600f0160009054906101000a900460ff1615151461075d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161075490613df4565b60405180910390fd5b600080600080600090505b85600501548110156107d95785600401600082815260200190815260200160002091508160010160009054906101000a900460ff16156107b9578160020154846107b29190613e43565b93506107cc565b8160020154836107c99190613e43565b92505b8080600101915050610768565b50600285600301546107eb9190613ea6565b836107f69190613e43565b9250600285600301546108099190613ea6565b826108149190613e43565b91506000600286600301546108299190613ed7565b1461083e5760018361083b9190613e43565b92505b84600e01544211806108615750610853611256565b828461085f9190613e43565b145b6108a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161089790613f7a565b60405180910390fd5b846006016001016000600281106108ba576108b9613f9a565b5b01546108c4611256565b6108ce9190613fc9565b82846108da9190613e43565b866006016001016001600281106108f4576108f3613f9a565b5b01546109009190613fc9565b11610a3157600185600f0160006101000a81548160ff0219169083151502179055507fae8941f3b4d152118273444f36b8b5642e5602102b789968bd4b7cf8b250de81876000806040516109569392919061400b565b60405180910390a184600f0160029054906101000a900460ff1615610a23578460020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b4e6a1d587600086868a6010016040518663ffffffff1660e01b81526004016109de9594939291906140db565b6020604051808303816000875af11580156109fd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a21919061414a565b505b600095505050505050611251565b84600601600301600060028110610a4b57610a4a613f9a565b5b01548284610a599190613e43565b610a639190613fc9565b85600601600301600160028110610a7d57610a7c613f9a565b5b015484610a8a9190613fc9565b10159550858015610b095750600e60008560020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15610c17578360020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600c6000600d6000815480929190610b4a90614177565b91905055815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600e60008660020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b600185600f0160006101000a81548160ff0219169083151502179055508585600f0160016101000a81548160ff0219169083151502179055507fae8941f3b4d152118273444f36b8b5642e5602102b789968bd4b7cf8b250de8187876001604051610c849392919061400b565b60405180910390a1600086610c995782610c9b565b835b905060008060005b8860050154811015610da35788600401600082815260200190815260200160002094508460010160009054906101000a900460ff1615158a151514610d9657600060648a600601600501548760020154610cfd9190613fc9565b610d079190613ea6565b90508960060160060160009054906101000a900460ff1615610d6557610d528660030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff163083612302565b8084610d5e9190613e43565b9350610d94565b610d938660030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682612527565b5b505b8080600101915050610ca3565b508815610fa15760028860030154610dbb9190613ea6565b82610dc69190613e43565b915060005b8860050154811015610eb15788600401600082815260200190815260200160002094508860060160060160009054906101000a900460ff168015610e2357508460010160009054906101000a900460ff1615158a1515145b15610ea457600060648a6006016005015486886002015487610e459190613fc9565b610e4f9190613ea6565b610e599190613fc9565b610e639190613ea6565b90508083610e719190613e43565b9250610ea2308760030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683612302565b505b8080600101915050610dcb565b5060008183610ec091906141bf565b9050600060028a60030154610ed59190613ed7565b14610eea57600181610ee79190613e43565b90505b610f9b896001018054610efc90613cbd565b80601f0160208091040260200160405190810160405280929190818152602001828054610f2890613cbd565b8015610f755780601f10610f4a57610100808354040283529160200191610f75565b820191906000526020600020905b815481529060010190602001808311610f5857829003601f168201915b50505050508260028c60030154610f8c9190613ea6565b610f969190613e43565b6125a9565b506110b9565b876003015482610fb19190613e43565b915060005b88600501548110156110b75788600401600082815260200190815260200160002094508860060160060160009054906101000a900460ff16801561100e57508460010160009054906101000a900460ff1615158a1515145b156110aa57600060648a6006016005015460028c600301546110309190613ea6565b8761103b91906141bf565b88600201548761104b9190613fc9565b6110559190613ea6565b61105f9190613fc9565b6110699190613ea6565b905080836110779190613e43565b92506110a8308760030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683612302565b505b8080600101915050610fb6565b505b60005b600d54811015611182576000600c600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000611108611256565b611111836117e3565b8c600d01546111209190613fc9565b61112a9190613ea6565b90508173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611172573d6000803e3d6000fd5b50505080806001019150506110bc565b5087600f0160029054906101000a900460ff1615611248578760020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b4e6a1d58a600189898d6010016040518663ffffffff1660e01b81526004016112039594939291906140db565b6020604051808303816000875af1158015611222573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611246919061414a565b505b50505050505050505b919050565b6000600254905090565b60006040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112949061423f565b60405180910390fd5b6000600a600085815260200190815260200160002090506112c0813385856125bb565b50505050565b60006009905090565b600760008154809291906112e290614177565b91905055506006848490918060018154018082558091505060019003906000526020600020016000909192909192909192909192509182611324929190614401565b506000600585856040516113399291906144f6565b90815260200160405180910390209050600073ffffffffffffffffffffffffffffffffffffffff168160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d390614581565b60405180910390fd5b858160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550338160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508484826000019182611475929190614401565b5060005b838390508110156114f1578160030184848381811061149b5761149a613f9a565b5b90506020028101906114ad91906145b0565b908060018154018082558091505060019003906000526020600020906002020160009091909190915081816114e29190614766565b50508080600101915050611479565b5060008060005b836003018054905081101561161357600084600301828154811061151f5761151e613f9a565b5b90600052602060002090600202016000015490507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c811215611596576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158d906147e6565b60405180910390fd5b60648113156115da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d190614878565b60405180910390fd5b60008113156115f65780846115ef9190614898565b9350611605565b80836116029190614898565b92505b5080806001019150506114f8565b506064821315611658576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164f9061494e565b60405180910390fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c8112156116bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b2906149e0565b60405180910390fd5b7fbd6277baf8ced6ab6543a1aef164635fc2bde1ba962d39d8a0fd81a5af24972787876040516116ec929190614a2d565b60405180910390a15050505050505050565b6006818154811061170e57600080fd5b90600052602060002001600091509050805461172990613cbd565b80601f016020809104026020016040519081016040528092919081815260200182805461175590613cbd565b80156117a25780601f10611777576101008083540402835291602001916117a2565b820191906000526020600020905b81548152906001019060200180831161178557829003601f168201915b505050505081565b600c6020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b5481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60006118383385856122f0565b8373ffffffffffffffffffffffffffffffffffffffff1663216ed6ad3385856040518463ffffffff1660e01b815260040161187593929190614a51565b600060405180830381600087803b15801561188f57600080fd5b505af11580156118a3573d6000803e3d6000fd5b50505050600190509392505050565b6060600480546118c190613cbd565b80601f01602080910402602001604051908101604052809291908181526020018280546118ed90613cbd565b801561193a5780601f1061190f5761010080835404028352916020019161193a565b820191906000526020600020905b81548152906001019060200180831161191d57829003601f168201915b5050505050905090565b6000600a600086815260200190815260200160002090506119668433856126b1565b611972818585856125bb565b5050505050565b60008034116119bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b490614afa565b60405180910390fd5b6001891015611a01576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f890614b66565b60405180910390fd5b651cae8c13e000891115611a4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4190614bd2565b60405180910390fd5b87600160028110611a5e57611a5d613f9a565b5b6020020135600f600060028110611a7857611a77613f9a565b5b0154611a849190613fc9565b88600060028110611a9857611a97613f9a565b5b6020020135600f600160028110611ab257611ab1613f9a565b5b0154611abe9190613fc9565b1015611aff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af690614c3e565b60405180910390fd5b87600160028110611b1357611b12613f9a565b5b602002013588600060028110611b2c57611b2b613f9a565b5b60200201351115611b72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6990614caa565b60405180910390fd5b86600160028110611b8657611b85613f9a565b5b602002013587600060028110611b9f57611b9e613f9a565b5b60200201351115611be5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bdc90614d16565b60405180910390fd5b6064861115611c29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2090614d82565b60405180910390fd5b600060058c8c604051611c3d9291906144f6565b90815260200160405180910390209050600073ffffffffffffffffffffffffffffffffffffffff168160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611ce0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd790614dee565b60405180910390fd5b600b6000815480929190611cf390614177565b9190505591506000600a60008481526020019081526020016000209050338160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508c8c826001019182611d66929190614401565b503481600d01819055508981600601600101906002611d869291906130e9565b508881600601600301906002611d9d9291906130e9565b50878160060160050181905550868160060160060160006101000a81548160ff0219169083151502179055508a81600601600001819055508a42611de19190613e43565b81600e01819055508281600001819055508581600f0160026101000a81548160ff0219169083151502179055508484826010019182611e21929190614e5f565b50611e2c3034612745565b3481600301819055507f6e5c598b821d7fa8550e5fea58ab6e27c59e1cbe1df75a8591aa0c453b49e10a83604051611e649190613325565b60405180910390a150509a9950505050505050505050565b600e6020528060005260406000206000915054906101000a900460ff1681565b600a602052806000526040600020600091509050806000015490806001018054611ec590613cbd565b80601f0160208091040260200160405190810160405280929190818152602001828054611ef190613cbd565b8015611f3e5780601f10611f1357610100808354040283529160200191611f3e565b820191906000526020600020905b815481529060010190602001808311611f2157829003601f168201915b5050505050908060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806003015490806005015490806006016040518060a00160405290816000820154815260200160018201600280602002604051908101604052809291908260028015611fcb576020028201915b815481526020019060010190808311611fb7575b5050505050815260200160038201600280602002604051908101604052809291908260028015612010576020028201915b815481526020019060010190808311611ffc575b50505050508152602001600582015481526020016006820160009054906101000a900460ff1615151515815250509080600d01549080600e01549080600f0160009054906101000a900460ff169080600f0160019054906101000a900460ff169080600f0160029054906101000a900460ff169080601001805461209390613cbd565b80601f01602080910402602001604051908101604052809291908181526020018280546120bf90613cbd565b801561210c5780601f106120e15761010080835404028352916020019161210c565b820191906000526020600020905b8154815290600101906020018083116120ef57829003601f168201915b505050505090508c565b60006040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214a9061423f565b60405180910390fd5b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60058180516020810182018051848252602083016020850120818352809550505050505060009150905080600001805461221390613cbd565b80601f016020809104026020016040519081016040528092919081815260200182805461223f90613cbd565b801561228c5780601f106122615761010080835404028352916020019161228c565b820191906000526020600020905b81548152906001019060200180831161226f57829003601f168201915b5050505050908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060040154905084565b600033905090565b6122fd83838360016127c7565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036123545780600260008282546123489190613e43565b92505081905550612427565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156123e0578381836040517fe450d38c0000000000000000000000000000000000000000000000000000000081526004016123d793929190614a51565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361247057806002600082825403925050819055506124bd565b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161251a9190613325565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036125995760006040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260040161259091906135d5565b60405180910390fd5b6125a582600083612302565b5050565b6125b6828260008061299e565b505050565b83600e0154421115612602576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125f990614f7b565b60405180910390fd5b600084600501600081548092919061261990614177565b91905055905060008560040160008381526020019081526020016000209050848160030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550828160010160006101000a81548160ff021916908315150217905550838160020181905550818160000181905550505050505050565b60006126bd8484612153565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461273f578181101561272f578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161272693929190614a51565b60405180910390fd5b61273e848484840360006127c7565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036127b75760006040517fec442f050000000000000000000000000000000000000000000000000000000081526004016127ae91906135d5565b60405180910390fd5b6127c360008383612302565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036128395760006040517fe602df0500000000000000000000000000000000000000000000000000000000815260040161283091906135d5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036128ab5760006040517f94280d620000000000000000000000000000000000000000000000000000000081526004016128a291906135d5565b60405180910390fd5b81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508015612998578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161298f9190613325565b60405180910390a35b50505050565b600060095482106129b157839050612f18565b60006005866040516129c39190614fcc565b9081526020016040518091039020905060005b8160030180549050811015612b075760008260030182815481106129fd576129fc613f9a565b5b9060005260206000209060020201600001541215612afa57612aec87836003018381548110612a2f57612a2e613f9a565b5b906000526020600020906002020160405180604001604052908160008201548152602001600182018054612a6290613cbd565b80601f0160208091040260200160405190810160405280929190818152602001828054612a8e90613cbd565b8015612adb5780601f10612ab057610100808354040283529160200191612adb565b820191906000526020600020905b815481529060010190602001808311612abe57829003601f168201915b505050505081525050888888612f20565b86612af79190614fe3565b95505b80806001019150506129d6565b5060005b8160030180549050811015612c3c576000826003018281548110612b3257612b31613f9a565b5b9060005260206000209060020201600001541315612c2f57612c2187836003018381548110612b6457612b63613f9a565b5b906000526020600020906002020160405180604001604052908160008201548152602001600182018054612b9790613cbd565b80601f0160208091040260200160405190810160405280929190818152602001828054612bc390613cbd565b8015612c105780601f10612be557610100808354040283529160200191612c10565b820191906000526020600020905b815481529060010190602001808311612bf357829003601f168201915b505050505081525050888888612f20565b86612c2c9190614fe3565b95505b8080600101915050612b0b565b506000851315612c9557612c75308260020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1687612302565b84816004016000828254612c899190613e43565b92505081905550612f16565b6000858260040154612ca79190614898565b12612de45784612cb690615026565b612ce38260020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166117e3565b10612d2557612d208160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff163087612d1b90615026565b612302565b612dbb565b612d528160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166117e3565b85612d5d9190614898565b9150612dba8160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1630612db58460020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166117e3565b612302565b5b84612dc590615026565b816004016000828254612dd891906141bf565b92505081905550612f15565b848160040154612df49190614898565b91508060040154612e288260020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166117e3565b10612e6557612e608160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16308360040154612302565b612f0a565b612e928160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166117e3565b8160040154612ea191906141bf565b82612eac9190614fe3565b9150612f098160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1630612f048460020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166117e3565b612302565b5b600081600401819055505b5b505b949350505050565b60006064856000015185612f34919061506e565b612f3e91906150e6565b9050600085602001515103612fa0576000811215612f91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f88906151c2565b60405180910390fd5b612f9b3082612527565b6130e0565b6000600887604051612fb29190614fcc565b90815260200160405180910390208660200151604051612fd29190614fcc565b9081526020016040518091039020549050831561303f57600082121561301a5780612ffc90615026565b8213613011578061300c90615026565b613013565b815b915061303e565b8061302490615026565b8212613039578061303490615026565b61303b565b815b91505b5b600061307887602001518487806130665750600087148015613065575060008a60000151125b5b6001886130739190613e43565b61299e565b905080836130869190614fe3565b9250826008896040516130999190614fcc565b908152602001604051809103902088602001516040516130b99190614fcc565b908152602001604051809103902060008282546130d69190614898565b9250508190555050505b95945050505050565b8260028101928215613118579160200282015b828111156131175782358255916020019190600101906130fc565b5b5090506131259190613129565b5090565b5b8082111561314257600081600090555060010161312a565b5090565b600081519050919050565b600082825260208201905092915050565b60005b83811015613180578082015181840152602081019050613165565b60008484015250505050565b6000601f19601f8301169050919050565b60006131a882613146565b6131b28185613151565b93506131c2818560208601613162565b6131cb8161318c565b840191505092915050565b600060208201905081810360008301526131f0818461319d565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006132378261320c565b9050919050565b6132478161322c565b811461325257600080fd5b50565b6000813590506132648161323e565b92915050565b6000819050919050565b61327d8161326a565b811461328857600080fd5b50565b60008135905061329a81613274565b92915050565b600080604083850312156132b7576132b6613202565b5b60006132c585828601613255565b92505060206132d68582860161328b565b9150509250929050565b60008115159050919050565b6132f5816132e0565b82525050565b600060208201905061331060008301846132ec565b92915050565b61331f8161326a565b82525050565b600060208201905061333a6000830184613316565b92915050565b60006020828403121561335657613355613202565b5b60006133648482850161328b565b91505092915050565b60008060006060848603121561338657613385613202565b5b600061339486828701613255565b93505060206133a586828701613255565b92505060406133b68682870161328b565b9150509250925092565b6133c9816132e0565b81146133d457600080fd5b50565b6000813590506133e6816133c0565b92915050565b60008060006060848603121561340557613404613202565b5b60006134138682870161328b565b93505060206134248682870161328b565b9250506040613435868287016133d7565b9150509250925092565b600060ff82169050919050565b6134558161343f565b82525050565b6000602082019050613470600083018461344c565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261349b5761349a613476565b5b8235905067ffffffffffffffff8111156134b8576134b761347b565b5b6020830191508360018202830111156134d4576134d3613480565b5b9250929050565b60008083601f8401126134f1576134f0613476565b5b8235905067ffffffffffffffff81111561350e5761350d61347b565b5b60208301915083602082028301111561352a57613529613480565b5b9250929050565b60008060008060006060868803121561354d5761354c613202565b5b600061355b88828901613255565b955050602086013567ffffffffffffffff81111561357c5761357b613207565b5b61358888828901613485565b9450945050604086013567ffffffffffffffff8111156135ab576135aa613207565b5b6135b7888289016134db565b92509250509295509295909350565b6135cf8161322c565b82525050565b60006020820190506135ea60008301846135c6565b92915050565b60006020828403121561360657613605613202565b5b600061361484828501613255565b91505092915050565b60008060006060848603121561363657613635613202565b5b600061364486828701613255565b93505060206136558682870161328b565b92505060406136668682870161328b565b9150509250925092565b6000806000806080858703121561368a57613689613202565b5b60006136988782880161328b565b94505060206136a987828801613255565b93505060406136ba8782880161328b565b92505060606136cb878288016133d7565b91505092959194509250565b6000819050826020600202820111156136f3576136f2613480565b5b92915050565b60008083601f84011261370f5761370e613476565b5b8235905067ffffffffffffffff81111561372c5761372b61347b565b5b60208301915083600182028301111561374857613747613480565b5b9250929050565b6000806000806000806000806000806101408b8d03121561377357613772613202565b5b60008b013567ffffffffffffffff81111561379157613790613207565b5b61379d8d828e01613485565b9a509a505060206137b08d828e0161328b565b98505060406137c18d828e016136d7565b97505060806137d28d828e016136d7565b96505060c06137e38d828e0161328b565b95505060e06137f48d828e016133d7565b9450506101006138068d828e016133d7565b9350506101208b013567ffffffffffffffff81111561382857613827613207565b5b6138348d828e016136f9565b92509250509295989b9194979a5092959850565b6138518161326a565b82525050565b600060029050919050565b600081905092915050565b6000819050919050565b60006138838383613848565b60208301905092915050565b6000602082019050919050565b6138a581613857565b6138af8184613862565b92506138ba8261386d565b8060005b838110156138eb5781516138d28782613877565b96506138dd8361388f565b9250506001810190506138be565b505050505050565b6138fc816132e0565b82525050565b60e0820160008201516139186000850182613848565b50602082015161392b602085018261389c565b50604082015161393e606085018261389c565b50606082015161395160a0850182613848565b50608082015161396460c08501826138f3565b50505050565b600081519050919050565b600082825260208201905092915050565b60006139918261396a565b61399b8185613975565b93506139ab818560208601613162565b6139b48161318c565b840191505092915050565b6000610240820190506139d5600083018f613316565b81810360208301526139e7818e61319d565b90506139f6604083018d6135c6565b613a03606083018c613316565b613a10608083018b613316565b613a1d60a083018a613902565b613a2b610180830189613316565b613a396101a0830188613316565b613a476101c08301876132ec565b613a556101e08301866132ec565b613a636102008301856132ec565b818103610220830152613a768184613986565b90509d9c50505050505050505050505050565b60008060408385031215613aa057613a9f613202565b5b6000613aae85828601613255565b9250506020613abf85828601613255565b9150509250929050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613b068261318c565b810181811067ffffffffffffffff82111715613b2557613b24613ace565b5b80604052505050565b6000613b386131f8565b9050613b448282613afd565b919050565b600067ffffffffffffffff821115613b6457613b63613ace565b5b613b6d8261318c565b9050602081019050919050565b82818337600083830152505050565b6000613b9c613b9784613b49565b613b2e565b905082815260208101848484011115613bb857613bb7613ac9565b5b613bc3848285613b7a565b509392505050565b600082601f830112613be057613bdf613476565b5b8135613bf0848260208601613b89565b91505092915050565b600060208284031215613c0f57613c0e613202565b5b600082013567ffffffffffffffff811115613c2d57613c2c613207565b5b613c3984828501613bcb565b91505092915050565b60006080820190508181036000830152613c5c818761319d565b9050613c6b60208301866135c6565b613c7860408301856135c6565b613c856060830184613316565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613cd557607f821691505b602082108103613ce857613ce7613c8e565b5b50919050565b600081905092915050565b60008190508160005260206000209050919050565b60008154613d1b81613cbd565b613d258186613cee565b94506001821660008114613d405760018114613d5557613d88565b60ff1983168652811515820286019350613d88565b613d5e85613cf9565b60005b83811015613d8057815481890152600182019150602081019050613d61565b838801955050505b50505092915050565b6000613d9d8284613d0e565b915081905092915050565b7f506f6f6c20697320616c7265616479207265736f6c7665640000000000000000600082015250565b6000613dde601883613151565b9150613de982613da8565b602082019050919050565b60006020820190508181036000830152613e0d81613dd1565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613e4e8261326a565b9150613e598361326a565b9250828201905080821115613e7157613e70613e14565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613eb18261326a565b9150613ebc8361326a565b925082613ecc57613ecb613e77565b5b828204905092915050565b6000613ee28261326a565b9150613eed8361326a565b925082613efd57613efc613e77565b5b828206905092915050565b7f506f6f6c20656e642074696d6520686173206e6f74207965742061727269766560008201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b6000613f64602183613151565b9150613f6f82613f08565b604082019050919050565b60006020820190508181036000830152613f9381613f57565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000613fd48261326a565b9150613fdf8361326a565b9250828202613fed8161326a565b9150828204841483151761400457614003613e14565b5b5092915050565b60006060820190506140206000830186613316565b61402d60208301856132ec565b61403a60408301846132ec565b949350505050565b60008190508160005260206000209050919050565b6000815461406481613cbd565b61406e8186613975565b94506001821660008114614089576001811461409f576140d2565b60ff1983168652811515602002860193506140d2565b6140a885614042565b60005b838110156140ca578154818901526001820191506020810190506140ab565b808801955050505b50505092915050565b600060a0820190506140f060008301886132ec565b6140fd60208301876132ec565b61410a6040830186613316565b6141176060830185613316565b81810360808301526141298184614057565b90509695505050505050565b60008151905061414481613274565b92915050565b6000602082840312156141605761415f613202565b5b600061416e84828501614135565b91505092915050565b60006141828261326a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036141b4576141b3613e14565b5b600182019050919050565b60006141ca8261326a565b91506141d58361326a565b92508282039050818111156141ed576141ec613e14565b5b92915050565b7f524550207472616e73666572206973206e6f7420616c6c6f7765640000000000600082015250565b6000614229601b83613151565b9150614234826141f3565b602082019050919050565b600060208201905081810360008301526142588161421c565b9050919050565b600082905092915050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026142b77fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261427a565b6142c1868361427a565b95508019841693508086168417925050509392505050565b6000819050919050565b60006142fe6142f96142f48461326a565b6142d9565b61326a565b9050919050565b6000819050919050565b614318836142e3565b61432c61432482614305565b848454614287565b825550505050565b600090565b614341614334565b61434c81848461430f565b505050565b5b8181101561437057614365600082614339565b600181019050614352565b5050565b601f8211156143b55761438681613cf9565b61438f8461426a565b8101602085101561439e578190505b6143b26143aa8561426a565b830182614351565b50505b505050565b600082821c905092915050565b60006143d8600019846008026143ba565b1980831691505092915050565b60006143f183836143c7565b9150826002028217905092915050565b61440b838361425f565b67ffffffffffffffff81111561442457614423613ace565b5b61442e8254613cbd565b614439828285614374565b6000601f8311600181146144685760008415614456578287013590505b61446085826143e5565b8655506144c8565b601f19841661447686613cf9565b60005b8281101561449e57848901358255600182019150602085019450602081019050614479565b868310156144bb57848901356144b7601f8916826143c7565b8355505b6001600288020188555050505b50505050505050565b60006144dd8385613cee565b93506144ea838584613b7a565b82840190509392505050565b60006145038284866144d1565b91508190509392505050565b7f4120706f73742077697468207468697320636f6e74656e74496420616c72656160008201527f6479206578697374730000000000000000000000000000000000000000000000602082015250565b600061456b602983613151565b91506145768261450f565b604082019050919050565b6000602082019050818103600083015261459a8161455e565b9050919050565b600080fd5b600080fd5b600080fd5b6000823560016040038336030381126145cc576145cb6145a1565b5b80830191505092915050565b6000819050919050565b6145eb816145d8565b81146145f657600080fd5b50565b60008135614606816145e2565b80915050919050565b60008160001b9050919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6146488461460f565b9350801983169250808416831791505092915050565b600061467961467461466f846145d8565b6142d9565b6145d8565b9050919050565b6000819050919050565b6146938261465e565b6146a661469f82614680565b835461461c565b8255505050565b600080833560016020038436030381126146ca576146c96145a1565b5b80840192508235915067ffffffffffffffff8211156146ec576146eb6145a6565b5b602083019250600182023603831315614708576147076145ab565b5b509250929050565b61471b838383614401565b505050565b600081016000830180614732816145f9565b905061473e818461468a565b505050600181016020830161475381856146ad565b61475e818386614710565b505050505050565b6147708282614720565b5050565b7f45616368206369746174696f6e20776569676874206d757374206265203e3d2060008201527f2d31303000000000000000000000000000000000000000000000000000000000602082015250565b60006147d0602483613151565b91506147db82614774565b604082019050919050565b600060208201905081810360008301526147ff816147c3565b9050919050565b7f45616368206369746174696f6e20776569676874206d757374206265203c3d2060008201527f3130300000000000000000000000000000000000000000000000000000000000602082015250565b6000614862602383613151565b915061486d82614806565b604082019050919050565b6000602082019050818103600083015261489181614855565b9050919050565b60006148a3826145d8565b91506148ae836145d8565b9250828201905082811215600083121683821260008412151617156148d6576148d5613e14565b5b92915050565b7f53756d206f6620706f736974697665206369746174696f6e73206d757374206260008201527f65203c3d20313030000000000000000000000000000000000000000000000000602082015250565b6000614938602883613151565b9150614943826148dc565b604082019050919050565b600060208201905081810360008301526149678161492b565b9050919050565b7f53756d206f66206e65676174697665206369746174696f6e73206d757374206260008201527f65203e3d202d3130300000000000000000000000000000000000000000000000602082015250565b60006149ca602983613151565b91506149d58261496e565b604082019050919050565b600060208201905081810360008301526149f9816149bd565b9050919050565b6000614a0c8385613151565b9350614a19838584613b7a565b614a228361318c565b840190509392505050565b60006020820190508181036000830152614a48818486614a00565b90509392505050565b6000606082019050614a6660008301866135c6565b614a736020830185613316565b614a806040830184613316565b949350505050565b7f46656520697320726571756972656420746f20696e6974696174652076616c6960008201527f646174696f6e20706f6f6c000000000000000000000000000000000000000000602082015250565b6000614ae4602b83613151565b9150614aef82614a88565b604082019050919050565b60006020820190508181036000830152614b1381614ad7565b9050919050565b7f4475726174696f6e20697320746f6f2073686f72740000000000000000000000600082015250565b6000614b50601583613151565b9150614b5b82614b1a565b602082019050919050565b60006020820190508181036000830152614b7f81614b43565b9050919050565b7f4475726174696f6e20697320746f6f206c6f6e67000000000000000000000000600082015250565b6000614bbc601483613151565b9150614bc782614b86565b602082019050919050565b60006020820190508181036000830152614beb81614baf565b9050919050565b7f51756f72756d2069732062656c6f77206d696e696d756d000000000000000000600082015250565b6000614c28601783613151565b9150614c3382614bf2565b602082019050919050565b60006020820190508181036000830152614c5781614c1b565b9050919050565b7f51756f72756d2069732067726561746572207468616e206f6e65000000000000600082015250565b6000614c94601a83613151565b9150614c9f82614c5e565b602082019050919050565b60006020820190508181036000830152614cc381614c87565b9050919050565b7f57696e20726174696f2069732067726561746572207468616e206f6e65000000600082015250565b6000614d00601d83613151565b9150614d0b82614cca565b602082019050919050565b60006020820190508181036000830152614d2f81614cf3565b9050919050565b7f42696e64696e672070657263656e74206d757374206265203c3d203130300000600082015250565b6000614d6c601e83613151565b9150614d7782614d36565b602082019050919050565b60006020820190508181036000830152614d9b81614d5f565b9050919050565b7f54617267657420706f7374206e6f7420666f756e640000000000000000000000600082015250565b6000614dd8601583613151565b9150614de382614da2565b602082019050919050565b60006020820190508181036000830152614e0781614dcb565b9050919050565b600082905092915050565b601f821115614e5a57614e2b81614042565b614e348461426a565b81016020851015614e43578190505b614e57614e4f8561426a565b830182614351565b50505b505050565b614e698383614e0e565b67ffffffffffffffff811115614e8257614e81613ace565b5b614e8c8254613cbd565b614e97828285614e19565b6000601f831160018114614ec65760008415614eb4578287013590505b614ebe85826143e5565b865550614f26565b601f198416614ed486614042565b60005b82811015614efc57848901358255600182019150602085019450602081019050614ed7565b86831015614f195784890135614f15601f8916826143c7565b8355505b6001600288020188555050505b50505050505050565b7f506f6f6c20656e642074696d6520686173207061737365640000000000000000600082015250565b6000614f65601883613151565b9150614f7082614f2f565b602082019050919050565b60006020820190508181036000830152614f9481614f58565b9050919050565b6000614fa682613146565b614fb08185613cee565b9350614fc0818560208601613162565b80840191505092915050565b6000614fd88284614f9b565b915081905092915050565b6000614fee826145d8565b9150614ff9836145d8565b92508282039050818112600084121682821360008512151617156150205761501f613e14565b5b92915050565b6000615031826145d8565b91507f8000000000000000000000000000000000000000000000000000000000000000820361506357615062613e14565b5b816000039050919050565b6000615079826145d8565b9150615084836145d8565b9250828202615092816145d8565b91507f800000000000000000000000000000000000000000000000000000000000000084146000841216156150ca576150c9613e14565b5b82820584148315176150df576150de613e14565b5b5092915050565b60006150f1826145d8565b91506150fc836145d8565b92508261510c5761510b613e77565b5b600160000383147f80000000000000000000000000000000000000000000000000000000000000008314161561514557615144613e14565b5b828205905092915050565b7f4c65616368696e672066726f6d20696e63696e657261746f7220697320666f7260008201527f62696464656e0000000000000000000000000000000000000000000000000000602082015250565b60006151ac602683613151565b91506151b782615150565b604082019050919050565b600060208201905081810360008301526151db8161519f565b905091905056fea26469706673582212202139e93ce050854daf1beda33b1bbb7a3673091ce5f7ad6ef1084c8d4926da4b64736f6c63430008180033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/client/src/assets/Onboarding.json b/client/src/assets/Onboarding.json index 19407f5..2d61f81 100644 --- a/client/src/assets/Onboarding.json +++ b/client/src/assets/Onboarding.json @@ -462,9 +462,9 @@ "type": "int256" }, { - "internalType": "uint256", - "name": "targetPostIndex", - "type": "uint256" + "internalType": "string", + "name": "targetPostId", + "type": "string" } ], "internalType": "struct Citation[]", @@ -478,8 +478,8 @@ "type": "function" } ], - "bytecode": "0x60a06040523480156200001157600080fd5b50604051620031ee380380620031ee8339818101604052810190620000379190620001c1565b828282828073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250505080600181905550816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505050506200021d565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620000f582620000c8565b9050919050565b60006200010982620000e8565b9050919050565b6200011b81620000fc565b81146200012757600080fd5b50565b6000815190506200013b8162000110565b92915050565b60006200014e82620000e8565b9050919050565b620001608162000141565b81146200016c57600080fd5b50565b600081519050620001808162000155565b92915050565b6000819050919050565b6200019b8162000186565b8114620001a757600080fd5b50565b600081519050620001bb8162000190565b92915050565b600080600060608486031215620001dd57620001dc620000c3565b5b6000620001ed868287016200012a565b935050602062000200868287016200016f565b92505060406200021386828701620001aa565b9150509250925092565b608051612f926200025c600039600081816108b9015281816109c001528181610ada01528181610f1a0152818161106c01526111350152612f926000f3fe6080604052600436106100e85760003560e01c806399ad6c561161008a578063c4a9e11611610059578063c4a9e116146102dc578063cf37625614610307578063d5a44f8614610345578063d76b679414610385576100e8565b806399ad6c561461022f578063a035b1fe1461024b578063b4e6a1d514610276578063b5b20c00146102b3576100e8565b8063815a0572116100c6578063815a05721461015d57806381d12c581461019a578063854b6a4f146101dd57806395edaaf214610206576100e8565b80630d0271d6146100ed578063216ed6ad146101095780635badbe4c14610132575b600080fd5b6101076004803603810190610102919061169b565b6103b0565b005b34801561011557600080fd5b50610130600480360381019061012b919061177c565b61049e565b005b34801561013e57600080fd5b506101476105b1565b60405161015491906117de565b60405180910390f35b34801561016957600080fd5b50610184600480360381019061017f919061184f565b6105b7565b60405161019191906117de565b60405180910390f35b3480156101a657600080fd5b506101c160048036038101906101bc91906118c3565b610636565b6040516101d49796959493929190611a21565b60405180910390f35b3480156101e957600080fd5b5061020460048036038101906101ff9190611aca565b6107c2565b005b34801561021257600080fd5b5061022d60048036038101906102289190611b60565b610b9a565b005b61024960048036038101906102449190611c17565b610dc7565b005b34801561025757600080fd5b50610260610f10565b60405161026d91906117de565b60405180910390f35b34801561028257600080fd5b5061029d60048036038101906102989190611c8b565b610f16565b6040516102aa91906117de565b60405180910390f35b3480156102bf57600080fd5b506102da60048036038101906102d59190611d25565b611230565b005b3480156102e857600080fd5b506102f16113a5565b6040516102fe91906117de565b60405180910390f35b34801561031357600080fd5b5061032e600480360381019061032991906118c3565b6113ab565b60405161033c929190611d65565b60405180910390f35b34801561035157600080fd5b5061036c600480360381019061036791906118c3565b6113cf565b60405161037c9493929190611d8e565b60405180910390f35b34801561039157600080fd5b5061039a61142c565b6040516103a791906117de565b60405180910390f35b6001543410156103f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103ec90611e1f565b60405180910390fd5b60006007600081548092919061040a90611e6e565b9190505590506000600660008381526020019081526020016000209050338160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555034816001018190555061047c82611432565b816003018190555083838260040191826104979291906120fc565b5050505050565b600082116104e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104d890612218565b60405180910390fd5b6000600560008154809291906104f690611e6e565b9190505590506000600460008381526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550838160010181905550824261056b9190612238565b81600201819055507fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e9826040516105a291906117de565b60405180910390a15050505050565b60075481565b60008083838101906105c991906118c3565b9050600060026000838152602001908152602001600020905080600001546001819055507f6a3843c02c26620842ae8496fd3afcb44b27463b3808e2ccdae4bcee5a2e3f2082600154604051610620929190611d65565b60405180910390a1600092505050949350505050565b60066020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020160009054906101000a900460ff169080600301549080600401805461069e90611f1f565b80601f01602080910402602001604051908101604052809291908181526020018280546106ca90611f1f565b80156107175780601f106106ec57610100808354040283529160200191610717565b820191906000526020600020905b8154815290600101906020018083116106fa57829003601f168201915b50505050509080600501805461072c90611f1f565b80601f016020809104026020016040519081016040528092919081815260200182805461075890611f1f565b80156107a55780601f1061077a576101008083540402835291602001916107a5565b820191906000526020600020905b81548152906001019060200180831161078857829003601f168201915b5050505050908060070160009054906101000a900460ff16905087565b6000600660008481526020019081526020016000209050600160038111156107ed576107ec6118ff565b5b8160020160009054906101000a900460ff166003811115610811576108106118ff565b5b14610851576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610848906122b8565b60405180910390fd5b60006004600083600301548152602001908152602001600020905060028260020160006101000a81548160ff02191690836003811115610894576108936118ff565b5b0217905550828260070160006101000a81548160ff02191690831515021790555060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16634acce5918360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1685600501866006016040518463ffffffff1660e01b815260040161093e939291906124d3565b6020604051808303816000875af115801561095d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610981919061252d565b90507f470d2978e081461f6d144c091dfd83ec06e6011da0b03bd1c0121b7fb71370dc85856040516109b492919061255a565b60405180910390a160007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637fcf6759600a8660010154610a0b91906125b2565b8660010154610a1a91906125e3565b8460146040518060400160405280600181526020016003815250604051806040016040528060018152602001600281525060646001808f604051602001610a6191906117de565b6040516020818303038152906040526040518a63ffffffff1660e01b8152600401610a93989796959493929190612743565b60206040518083038185885af1158015610ab1573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610ad6919061252d565b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663975762b3828560000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16866001015460016040518563ffffffff1660e01b8152600401610b6094939291906127ca565b600060405180830381600087803b158015610b7a57600080fd5b505af1158015610b8e573d6000803e3d6000fd5b50505050505050505050565b600060066000878152602001908152602001600020905060006003811115610bc557610bc46118ff565b5b8160020160009054906101000a900460ff166003811115610be957610be86118ff565b5b14610c29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c209061285b565b60405180910390fd5b6000600460008360030154815260200190815260200160002090503373ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610cd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ccd906128ed565b60405180910390fd5b60018260020160006101000a81548160ff02191690836003811115610cfe57610cfd6118ff565b5b02179055508585836005019182610d169291906120fc565b5060005b84849050811015610d865782600601858583818110610d3c57610d3b61290d565b5b90506040020190806001815401808255809150506001900390600052602060002090600202016000909190919091508181610d779190612a86565b50508080600101915050610d1a565b507ffaecd3b4db089bf25a48306100dd5fb2152e3887c7815b2b221dbb7da2f8e8dc87604051610db691906117de565b60405180910390a150505050505050565b600060036000815480929190610ddc90611e6e565b919050559050600060026000838152602001908152602001600020905085816000018190555060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632805b5d93487873388600189604051602001610e5691906117de565b6040516020818303038152906040526040518863ffffffff1660e01b8152600401610e8696959493929190612ae9565b60206040518083038185885af1158015610ea4573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610ec9919061252d565b81600101819055507f71eae802097e4e77c5345dee7f35d74ac0ae45eb5a456fdaed0de4d141fc5d8c82604051610f0091906117de565b60405180910390a1505050505050565b60015481565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610fa6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9d90612bbe565b60405180910390fd5b60008383810190610fb791906118c3565b90506000600660008381526020019081526020016000209050881580610fdb575087155b15611066578060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc600a836001015461102f91906125b2565b9081150290604051600060405180830381858888f1935050505015801561105a573d6000803e3d6000fd5b50600192505050611226565b606060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16634acce5918460000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1685600401856040518463ffffffff1660e01b81526004016110ee93929190612cab565b6020604051808303816000875af115801561110d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611131919061252d565b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637fcf6759600a856001015461118091906125b2565b836014604051806040016040528060018152602001600381525060405180604001604052806001815260200160028152506064600160006040518963ffffffff1660e01b81526004016111d99796959493929190612d16565b60206040518083038185885af11580156111f7573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061121c919061252d565b5060009450505050505b9695505050505050565b60006004600084815260200190815260200160002090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146112d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d090612e0d565b60405180910390fd5b8060030160009054906101000a900460ff161561132b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132290612e9f565b60405180910390fd5b80600201544211156113505781426113439190612238565b8160020181905550611369565b8181600201546113609190612238565b81600201819055505b7fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e98360405161139891906117de565b60405180910390a1505050565b60055481565b60026020528060005260406000206000915090508060000154908060010154905082565b60046020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030160009054906101000a900460ff16905084565b60035481565b600061143c6114b1565b9050600060046000838152602001908152602001600020905060018160030160006101000a81548160ff0219169083151502179055507fd9e7f38a71691fb1db2da17057c03d381a42a9925350883f10e8e5d0bca4a3b483836040516114a3929190611d65565b60405180910390a150919050565b60008060005b600554811015611538576004600082815260200190815260200160002060030160009054906101000a900460ff1661152b576004600082815260200190815260200160002060020154421161152b576004600082815260200190815260200160002060010154826115289190612238565b91505b80806001019150506114b7565b506000811161157c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157390612f0b565b60405180910390fd5b6000814461158a9190612f2b565b9050600080600090505b600554811015611625576004600082815260200190815260200160002060030160009054906101000a900460ff166116185760046000828152602001908152602001600020600201544211611618576004600082815260200190815260200160002060010154826116059190612238565b91508282111561161757809450611625565b5b8080600101915050611594565b5050505090565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f84011261165b5761165a611636565b5b8235905067ffffffffffffffff8111156116785761167761163b565b5b60208301915083600182028301111561169457611693611640565b5b9250929050565b600080602083850312156116b2576116b161162c565b5b600083013567ffffffffffffffff8111156116d0576116cf611631565b5b6116dc85828601611645565b92509250509250929050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611713826116e8565b9050919050565b61172381611708565b811461172e57600080fd5b50565b6000813590506117408161171a565b92915050565b6000819050919050565b61175981611746565b811461176457600080fd5b50565b60008135905061177681611750565b92915050565b6000806000606084860312156117955761179461162c565b5b60006117a386828701611731565b93505060206117b486828701611767565b92505060406117c586828701611767565b9150509250925092565b6117d881611746565b82525050565b60006020820190506117f360008301846117cf565b92915050565b60008083601f84011261180f5761180e611636565b5b8235905067ffffffffffffffff81111561182c5761182b61163b565b5b60208301915083600182028301111561184857611847611640565b5b9250929050565b600080600080606085870312156118695761186861162c565b5b600061187787828801611767565b945050602061188887828801611767565b935050604085013567ffffffffffffffff8111156118a9576118a8611631565b5b6118b5878288016117f9565b925092505092959194509250565b6000602082840312156118d9576118d861162c565b5b60006118e784828501611767565b91505092915050565b6118f981611708565b82525050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6004811061193f5761193e6118ff565b5b50565b60008190506119508261192e565b919050565b600061196082611942565b9050919050565b61197081611955565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b838110156119b0578082015181840152602081019050611995565b60008484015250505050565b6000601f19601f8301169050919050565b60006119d882611976565b6119e28185611981565b93506119f2818560208601611992565b6119fb816119bc565b840191505092915050565b60008115159050919050565b611a1b81611a06565b82525050565b600060e082019050611a36600083018a6118f0565b611a4360208301896117cf565b611a506040830188611967565b611a5d60608301876117cf565b8181036080830152611a6f81866119cd565b905081810360a0830152611a8381856119cd565b9050611a9260c0830184611a12565b98975050505050505050565b611aa781611a06565b8114611ab257600080fd5b50565b600081359050611ac481611a9e565b92915050565b60008060408385031215611ae157611ae061162c565b5b6000611aef85828601611767565b9250506020611b0085828601611ab5565b9150509250929050565b60008083601f840112611b2057611b1f611636565b5b8235905067ffffffffffffffff811115611b3d57611b3c61163b565b5b602083019150836040820283011115611b5957611b58611640565b5b9250929050565b600080600080600060608688031215611b7c57611b7b61162c565b5b6000611b8a88828901611767565b955050602086013567ffffffffffffffff811115611bab57611baa611631565b5b611bb788828901611645565b9450945050604086013567ffffffffffffffff811115611bda57611bd9611631565b5b611be688828901611b0a565b92509250509295509295909350565b600081905082602060030282011115611c1157611c10611640565b5b92915050565b60008060008060a08587031215611c3157611c3061162c565b5b6000611c3f87828801611767565b945050602085013567ffffffffffffffff811115611c6057611c5f611631565b5b611c6c87828801611645565b93509350506040611c7f87828801611bf5565b91505092959194509250565b60008060008060008060a08789031215611ca857611ca761162c565b5b6000611cb689828a01611ab5565b9650506020611cc789828a01611ab5565b9550506040611cd889828a01611767565b9450506060611ce989828a01611767565b935050608087013567ffffffffffffffff811115611d0a57611d09611631565b5b611d1689828a016117f9565b92509250509295509295509295565b60008060408385031215611d3c57611d3b61162c565b5b6000611d4a85828601611767565b9250506020611d5b85828601611767565b9150509250929050565b6000604082019050611d7a60008301856117cf565b611d8760208301846117cf565b9392505050565b6000608082019050611da360008301876118f0565b611db060208301866117cf565b611dbd60408301856117cf565b611dca6060830184611a12565b95945050505050565b7f496e73756666696369656e742066656500000000000000000000000000000000600082015250565b6000611e09601083611981565b9150611e1482611dd3565b602082019050919050565b60006020820190508181036000830152611e3881611dfc565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611e7982611746565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611eab57611eaa611e3f565b5b600182019050919050565b600082905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611f3757607f821691505b602082108103611f4a57611f49611ef0565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302611fb27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82611f75565b611fbc8683611f75565b95508019841693508086168417925050509392505050565b6000819050919050565b6000611ff9611ff4611fef84611746565b611fd4565b611746565b9050919050565b6000819050919050565b61201383611fde565b61202761201f82612000565b848454611f82565b825550505050565b600090565b61203c61202f565b61204781848461200a565b505050565b5b8181101561206b57612060600082612034565b60018101905061204d565b5050565b601f8211156120b05761208181611f50565b61208a84611f65565b81016020851015612099578190505b6120ad6120a585611f65565b83018261204c565b50505b505050565b600082821c905092915050565b60006120d3600019846008026120b5565b1980831691505092915050565b60006120ec83836120c2565b9150826002028217905092915050565b6121068383611eb6565b67ffffffffffffffff81111561211f5761211e611ec1565b5b6121298254611f1f565b61213482828561206f565b6000601f8311600181146121635760008415612151578287013590505b61215b85826120e0565b8655506121c3565b601f19841661217186611f50565b60005b8281101561219957848901358255600182019150602085019450602081019050612174565b868310156121b657848901356121b2601f8916826120c2565b8355505b6001600288020188555050505b50505050505050565b7f4e6f207374616b652070726f7669646564000000000000000000000000000000600082015250565b6000612202601183611981565b915061220d826121cc565b602082019050919050565b60006020820190508181036000830152612231816121f5565b9050919050565b600061224382611746565b915061224e83611746565b925082820190508082111561226657612265611e3f565b5b92915050565b7f537461747573206d7573742062652045766964656e63655375626d6974746564600082015250565b60006122a2602083611981565b91506122ad8261226c565b602082019050919050565b600060208201905081810360008301526122d181612295565b9050919050565b600081546122e581611f1f565b6122ef8186611981565b9450600182166000811461230a576001811461232057612353565b60ff198316865281151560200286019350612353565b61232985611f50565b60005b8381101561234b5781548189015260018201915060208101905061232c565b808801955050505b50505092915050565b600081549050919050565b600082825260208201905092915050565b60008190508160005260206000209050919050565b60008160001c9050919050565b6000819050919050565b60006123b76123b28361238d565b61239a565b9050919050565b6000819050919050565b6123d1816123be565b82525050565b6000819050919050565b60006123f46123ef8361238d565b6123d7565b9050919050565b61240481611746565b82525050565b60408201600080830154905061241f816123a4565b61242c60008601826123c8565b506001830154905061243d816123e1565b61244a60208601826123fb565b5050505050565b600061245d838361240a565b60408301905092915050565b6000600282019050919050565b60006124818261235c565b61248b8185612367565b935061249683612378565b8060005b838110156124c657816124ad8882612451565b97506124b883612469565b92505060018101905061249a565b5085935050505092915050565b60006060820190506124e860008301866118f0565b81810360208301526124fa81856122d8565b9050818103604083015261250e8184612476565b9050949350505050565b60008151905061252781611750565b92915050565b6000602082840312156125435761254261162c565b5b600061255184828501612518565b91505092915050565b600060408201905061256f60008301856117cf565b61257c6020830184611a12565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006125bd82611746565b91506125c883611746565b9250826125d8576125d7612583565b5b828204905092915050565b60006125ee82611746565b91506125f983611746565b925082820390508181111561261157612610611e3f565b5b92915050565b600060029050919050565b600081905092915050565b6000819050919050565b600061264383836123fb565b60208301905092915050565b6000602082019050919050565b61266581612617565b61266f8184612622565b925061267a8261262d565b8060005b838110156126ab5781516126928782612637565b965061269d8361264f565b92505060018101905061267e565b505050505050565b6000819050919050565b60006126d86126d36126ce846126b3565b611fd4565b611746565b9050919050565b6126e8816126bd565b82525050565b600081519050919050565b600082825260208201905092915050565b6000612715826126ee565b61271f81856126f9565b935061272f818560208601611992565b612738816119bc565b840191505092915050565b600061014082019050612759600083018b6117cf565b612766602083018a6117cf565b612773604083018961265c565b612780608083018861265c565b61278d60c08301876126df565b61279a60e0830186611a12565b6127a8610100830185611a12565b8181036101208301526127bb818461270a565b90509998505050505050505050565b60006080820190506127df60008301876117cf565b6127ec60208301866118f0565b6127f960408301856117cf565b6128066060830184611a12565b95945050505050565b7f537461747573206d757374206265205265717565737465640000000000000000600082015250565b6000612845601883611981565b91506128508261280f565b602082019050919050565b6000602082019050818103600083015261287481612838565b9050919050565b7f576f726b65722063616e206f6e6c79207375626d69742065766964656e63652060008201527f666f7220776f726b2074686579206172652061737369676e6564000000000000602082015250565b60006128d7603a83611981565b91506128e28261287b565b604082019050919050565b60006020820190508181036000830152612906816128ca565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b612945816123be565b811461295057600080fd5b50565b600081356129608161293c565b80915050919050565b60008160001b9050919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6129a284612969565b9350801983169250808416831791505092915050565b60006129d36129ce6129c9846123be565b611fd4565b6123be565b9050919050565b6000819050919050565b6129ed826129b8565b612a006129f9826129da565b8354612976565b8255505050565b60008135612a1481611750565b80915050919050565b612a2682611fde565b612a39612a3282612000565b8354612976565b8255505050565b600081016000830180612a5281612953565b9050612a5e81846129e4565b505050600181016020830180612a7381612a07565b9050612a7f8184612a1d565b5050505050565b612a908282612a40565b5050565b82818337600083830152505050565b6000612aaf8385611981565b9350612abc838584612a94565b612ac5836119bc565b840190509392505050565b82818337505050565b612ae560608383612ad0565b5050565b600060e0820190508181036000830152612b0481888a612aa3565b9050612b1360208301876118f0565b612b206040830186612ad9565b612b2d60a0830185611a12565b81810360c0830152612b3f818461270a565b9050979650505050505050565b7f6f6e56616c6964617465206d6179206f6e6c792062652063616c6c656420627960008201527f207468652044414f20636f6e7472616374000000000000000000000000000000602082015250565b6000612ba8603183611981565b9150612bb382612b4c565b604082019050919050565b60006020820190508181036000830152612bd781612b9b565b9050919050565b600081519050919050565b6000819050602082019050919050565b604082016000820151612c0f60008501826123c8565b506020820151612c2260208501826123fb565b50505050565b6000612c348383612bf9565b60408301905092915050565b6000602082019050919050565b6000612c5882612bde565b612c628185612367565b9350612c6d83612be9565b8060005b83811015612c9e578151612c858882612c28565b9750612c9083612c40565b925050600181019050612c71565b5085935050505092915050565b6000606082019050612cc060008301866118f0565b8181036020830152612cd281856122d8565b90508181036040830152612ce68184612c4d565b9050949350505050565b50565b6000612d006000836126f9565b9150612d0b82612cf0565b600082019050919050565b600061014082019050612d2c600083018a6117cf565b612d3960208301896117cf565b612d46604083018861265c565b612d53608083018761265c565b612d6060c08301866126df565b612d6d60e0830185611a12565b612d7b610100830184611a12565b818103610120830152612d8d81612cf3565b905098975050505050505050565b7f576f726b65722063616e206f6e6c7920657874656e64207468656972206f776e60008201527f20617661696c6162696c697479207374616b6500000000000000000000000000602082015250565b6000612df7603383611981565b9150612e0282612d9b565b604082019050919050565b60006020820190508181036000830152612e2681612dea565b9050919050565b7f5374616b652068617320616c7265616479206265656e2061737369676e65642060008201527f776f726b00000000000000000000000000000000000000000000000000000000602082015250565b6000612e89602483611981565b9150612e9482612e2d565b604082019050919050565b60006020820190508181036000830152612eb881612e7c565b9050919050565b7f4e6f20617661696c61626c6520776f726b6572207374616b6573000000000000600082015250565b6000612ef5601a83611981565b9150612f0082612ebf565b602082019050919050565b60006020820190508181036000830152612f2481612ee8565b9050919050565b6000612f3682611746565b9150612f4183611746565b925082612f5157612f50612583565b5b82820690509291505056fea2646970667358221220d1b632d2fd82da8133c92314d6bddc7a8314687125100dd29c2dc3c7fad1f1b964736f6c63430008180033", - "deployedBytecode": "0x6080604052600436106100e85760003560e01c806399ad6c561161008a578063c4a9e11611610059578063c4a9e116146102dc578063cf37625614610307578063d5a44f8614610345578063d76b679414610385576100e8565b806399ad6c561461022f578063a035b1fe1461024b578063b4e6a1d514610276578063b5b20c00146102b3576100e8565b8063815a0572116100c6578063815a05721461015d57806381d12c581461019a578063854b6a4f146101dd57806395edaaf214610206576100e8565b80630d0271d6146100ed578063216ed6ad146101095780635badbe4c14610132575b600080fd5b6101076004803603810190610102919061169b565b6103b0565b005b34801561011557600080fd5b50610130600480360381019061012b919061177c565b61049e565b005b34801561013e57600080fd5b506101476105b1565b60405161015491906117de565b60405180910390f35b34801561016957600080fd5b50610184600480360381019061017f919061184f565b6105b7565b60405161019191906117de565b60405180910390f35b3480156101a657600080fd5b506101c160048036038101906101bc91906118c3565b610636565b6040516101d49796959493929190611a21565b60405180910390f35b3480156101e957600080fd5b5061020460048036038101906101ff9190611aca565b6107c2565b005b34801561021257600080fd5b5061022d60048036038101906102289190611b60565b610b9a565b005b61024960048036038101906102449190611c17565b610dc7565b005b34801561025757600080fd5b50610260610f10565b60405161026d91906117de565b60405180910390f35b34801561028257600080fd5b5061029d60048036038101906102989190611c8b565b610f16565b6040516102aa91906117de565b60405180910390f35b3480156102bf57600080fd5b506102da60048036038101906102d59190611d25565b611230565b005b3480156102e857600080fd5b506102f16113a5565b6040516102fe91906117de565b60405180910390f35b34801561031357600080fd5b5061032e600480360381019061032991906118c3565b6113ab565b60405161033c929190611d65565b60405180910390f35b34801561035157600080fd5b5061036c600480360381019061036791906118c3565b6113cf565b60405161037c9493929190611d8e565b60405180910390f35b34801561039157600080fd5b5061039a61142c565b6040516103a791906117de565b60405180910390f35b6001543410156103f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103ec90611e1f565b60405180910390fd5b60006007600081548092919061040a90611e6e565b9190505590506000600660008381526020019081526020016000209050338160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555034816001018190555061047c82611432565b816003018190555083838260040191826104979291906120fc565b5050505050565b600082116104e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104d890612218565b60405180910390fd5b6000600560008154809291906104f690611e6e565b9190505590506000600460008381526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550838160010181905550824261056b9190612238565b81600201819055507fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e9826040516105a291906117de565b60405180910390a15050505050565b60075481565b60008083838101906105c991906118c3565b9050600060026000838152602001908152602001600020905080600001546001819055507f6a3843c02c26620842ae8496fd3afcb44b27463b3808e2ccdae4bcee5a2e3f2082600154604051610620929190611d65565b60405180910390a1600092505050949350505050565b60066020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020160009054906101000a900460ff169080600301549080600401805461069e90611f1f565b80601f01602080910402602001604051908101604052809291908181526020018280546106ca90611f1f565b80156107175780601f106106ec57610100808354040283529160200191610717565b820191906000526020600020905b8154815290600101906020018083116106fa57829003601f168201915b50505050509080600501805461072c90611f1f565b80601f016020809104026020016040519081016040528092919081815260200182805461075890611f1f565b80156107a55780601f1061077a576101008083540402835291602001916107a5565b820191906000526020600020905b81548152906001019060200180831161078857829003601f168201915b5050505050908060070160009054906101000a900460ff16905087565b6000600660008481526020019081526020016000209050600160038111156107ed576107ec6118ff565b5b8160020160009054906101000a900460ff166003811115610811576108106118ff565b5b14610851576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610848906122b8565b60405180910390fd5b60006004600083600301548152602001908152602001600020905060028260020160006101000a81548160ff02191690836003811115610894576108936118ff565b5b0217905550828260070160006101000a81548160ff02191690831515021790555060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16634acce5918360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1685600501866006016040518463ffffffff1660e01b815260040161093e939291906124d3565b6020604051808303816000875af115801561095d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610981919061252d565b90507f470d2978e081461f6d144c091dfd83ec06e6011da0b03bd1c0121b7fb71370dc85856040516109b492919061255a565b60405180910390a160007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637fcf6759600a8660010154610a0b91906125b2565b8660010154610a1a91906125e3565b8460146040518060400160405280600181526020016003815250604051806040016040528060018152602001600281525060646001808f604051602001610a6191906117de565b6040516020818303038152906040526040518a63ffffffff1660e01b8152600401610a93989796959493929190612743565b60206040518083038185885af1158015610ab1573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610ad6919061252d565b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663975762b3828560000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16866001015460016040518563ffffffff1660e01b8152600401610b6094939291906127ca565b600060405180830381600087803b158015610b7a57600080fd5b505af1158015610b8e573d6000803e3d6000fd5b50505050505050505050565b600060066000878152602001908152602001600020905060006003811115610bc557610bc46118ff565b5b8160020160009054906101000a900460ff166003811115610be957610be86118ff565b5b14610c29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c209061285b565b60405180910390fd5b6000600460008360030154815260200190815260200160002090503373ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610cd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ccd906128ed565b60405180910390fd5b60018260020160006101000a81548160ff02191690836003811115610cfe57610cfd6118ff565b5b02179055508585836005019182610d169291906120fc565b5060005b84849050811015610d865782600601858583818110610d3c57610d3b61290d565b5b90506040020190806001815401808255809150506001900390600052602060002090600202016000909190919091508181610d779190612a86565b50508080600101915050610d1a565b507ffaecd3b4db089bf25a48306100dd5fb2152e3887c7815b2b221dbb7da2f8e8dc87604051610db691906117de565b60405180910390a150505050505050565b600060036000815480929190610ddc90611e6e565b919050559050600060026000838152602001908152602001600020905085816000018190555060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632805b5d93487873388600189604051602001610e5691906117de565b6040516020818303038152906040526040518863ffffffff1660e01b8152600401610e8696959493929190612ae9565b60206040518083038185885af1158015610ea4573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610ec9919061252d565b81600101819055507f71eae802097e4e77c5345dee7f35d74ac0ae45eb5a456fdaed0de4d141fc5d8c82604051610f0091906117de565b60405180910390a1505050505050565b60015481565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610fa6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9d90612bbe565b60405180910390fd5b60008383810190610fb791906118c3565b90506000600660008381526020019081526020016000209050881580610fdb575087155b15611066578060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc600a836001015461102f91906125b2565b9081150290604051600060405180830381858888f1935050505015801561105a573d6000803e3d6000fd5b50600192505050611226565b606060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16634acce5918460000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1685600401856040518463ffffffff1660e01b81526004016110ee93929190612cab565b6020604051808303816000875af115801561110d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611131919061252d565b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637fcf6759600a856001015461118091906125b2565b836014604051806040016040528060018152602001600381525060405180604001604052806001815260200160028152506064600160006040518963ffffffff1660e01b81526004016111d99796959493929190612d16565b60206040518083038185885af11580156111f7573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061121c919061252d565b5060009450505050505b9695505050505050565b60006004600084815260200190815260200160002090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146112d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d090612e0d565b60405180910390fd5b8060030160009054906101000a900460ff161561132b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132290612e9f565b60405180910390fd5b80600201544211156113505781426113439190612238565b8160020181905550611369565b8181600201546113609190612238565b81600201819055505b7fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e98360405161139891906117de565b60405180910390a1505050565b60055481565b60026020528060005260406000206000915090508060000154908060010154905082565b60046020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030160009054906101000a900460ff16905084565b60035481565b600061143c6114b1565b9050600060046000838152602001908152602001600020905060018160030160006101000a81548160ff0219169083151502179055507fd9e7f38a71691fb1db2da17057c03d381a42a9925350883f10e8e5d0bca4a3b483836040516114a3929190611d65565b60405180910390a150919050565b60008060005b600554811015611538576004600082815260200190815260200160002060030160009054906101000a900460ff1661152b576004600082815260200190815260200160002060020154421161152b576004600082815260200190815260200160002060010154826115289190612238565b91505b80806001019150506114b7565b506000811161157c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157390612f0b565b60405180910390fd5b6000814461158a9190612f2b565b9050600080600090505b600554811015611625576004600082815260200190815260200160002060030160009054906101000a900460ff166116185760046000828152602001908152602001600020600201544211611618576004600082815260200190815260200160002060010154826116059190612238565b91508282111561161757809450611625565b5b8080600101915050611594565b5050505090565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f84011261165b5761165a611636565b5b8235905067ffffffffffffffff8111156116785761167761163b565b5b60208301915083600182028301111561169457611693611640565b5b9250929050565b600080602083850312156116b2576116b161162c565b5b600083013567ffffffffffffffff8111156116d0576116cf611631565b5b6116dc85828601611645565b92509250509250929050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611713826116e8565b9050919050565b61172381611708565b811461172e57600080fd5b50565b6000813590506117408161171a565b92915050565b6000819050919050565b61175981611746565b811461176457600080fd5b50565b60008135905061177681611750565b92915050565b6000806000606084860312156117955761179461162c565b5b60006117a386828701611731565b93505060206117b486828701611767565b92505060406117c586828701611767565b9150509250925092565b6117d881611746565b82525050565b60006020820190506117f360008301846117cf565b92915050565b60008083601f84011261180f5761180e611636565b5b8235905067ffffffffffffffff81111561182c5761182b61163b565b5b60208301915083600182028301111561184857611847611640565b5b9250929050565b600080600080606085870312156118695761186861162c565b5b600061187787828801611767565b945050602061188887828801611767565b935050604085013567ffffffffffffffff8111156118a9576118a8611631565b5b6118b5878288016117f9565b925092505092959194509250565b6000602082840312156118d9576118d861162c565b5b60006118e784828501611767565b91505092915050565b6118f981611708565b82525050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6004811061193f5761193e6118ff565b5b50565b60008190506119508261192e565b919050565b600061196082611942565b9050919050565b61197081611955565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b838110156119b0578082015181840152602081019050611995565b60008484015250505050565b6000601f19601f8301169050919050565b60006119d882611976565b6119e28185611981565b93506119f2818560208601611992565b6119fb816119bc565b840191505092915050565b60008115159050919050565b611a1b81611a06565b82525050565b600060e082019050611a36600083018a6118f0565b611a4360208301896117cf565b611a506040830188611967565b611a5d60608301876117cf565b8181036080830152611a6f81866119cd565b905081810360a0830152611a8381856119cd565b9050611a9260c0830184611a12565b98975050505050505050565b611aa781611a06565b8114611ab257600080fd5b50565b600081359050611ac481611a9e565b92915050565b60008060408385031215611ae157611ae061162c565b5b6000611aef85828601611767565b9250506020611b0085828601611ab5565b9150509250929050565b60008083601f840112611b2057611b1f611636565b5b8235905067ffffffffffffffff811115611b3d57611b3c61163b565b5b602083019150836040820283011115611b5957611b58611640565b5b9250929050565b600080600080600060608688031215611b7c57611b7b61162c565b5b6000611b8a88828901611767565b955050602086013567ffffffffffffffff811115611bab57611baa611631565b5b611bb788828901611645565b9450945050604086013567ffffffffffffffff811115611bda57611bd9611631565b5b611be688828901611b0a565b92509250509295509295909350565b600081905082602060030282011115611c1157611c10611640565b5b92915050565b60008060008060a08587031215611c3157611c3061162c565b5b6000611c3f87828801611767565b945050602085013567ffffffffffffffff811115611c6057611c5f611631565b5b611c6c87828801611645565b93509350506040611c7f87828801611bf5565b91505092959194509250565b60008060008060008060a08789031215611ca857611ca761162c565b5b6000611cb689828a01611ab5565b9650506020611cc789828a01611ab5565b9550506040611cd889828a01611767565b9450506060611ce989828a01611767565b935050608087013567ffffffffffffffff811115611d0a57611d09611631565b5b611d1689828a016117f9565b92509250509295509295509295565b60008060408385031215611d3c57611d3b61162c565b5b6000611d4a85828601611767565b9250506020611d5b85828601611767565b9150509250929050565b6000604082019050611d7a60008301856117cf565b611d8760208301846117cf565b9392505050565b6000608082019050611da360008301876118f0565b611db060208301866117cf565b611dbd60408301856117cf565b611dca6060830184611a12565b95945050505050565b7f496e73756666696369656e742066656500000000000000000000000000000000600082015250565b6000611e09601083611981565b9150611e1482611dd3565b602082019050919050565b60006020820190508181036000830152611e3881611dfc565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611e7982611746565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611eab57611eaa611e3f565b5b600182019050919050565b600082905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611f3757607f821691505b602082108103611f4a57611f49611ef0565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302611fb27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82611f75565b611fbc8683611f75565b95508019841693508086168417925050509392505050565b6000819050919050565b6000611ff9611ff4611fef84611746565b611fd4565b611746565b9050919050565b6000819050919050565b61201383611fde565b61202761201f82612000565b848454611f82565b825550505050565b600090565b61203c61202f565b61204781848461200a565b505050565b5b8181101561206b57612060600082612034565b60018101905061204d565b5050565b601f8211156120b05761208181611f50565b61208a84611f65565b81016020851015612099578190505b6120ad6120a585611f65565b83018261204c565b50505b505050565b600082821c905092915050565b60006120d3600019846008026120b5565b1980831691505092915050565b60006120ec83836120c2565b9150826002028217905092915050565b6121068383611eb6565b67ffffffffffffffff81111561211f5761211e611ec1565b5b6121298254611f1f565b61213482828561206f565b6000601f8311600181146121635760008415612151578287013590505b61215b85826120e0565b8655506121c3565b601f19841661217186611f50565b60005b8281101561219957848901358255600182019150602085019450602081019050612174565b868310156121b657848901356121b2601f8916826120c2565b8355505b6001600288020188555050505b50505050505050565b7f4e6f207374616b652070726f7669646564000000000000000000000000000000600082015250565b6000612202601183611981565b915061220d826121cc565b602082019050919050565b60006020820190508181036000830152612231816121f5565b9050919050565b600061224382611746565b915061224e83611746565b925082820190508082111561226657612265611e3f565b5b92915050565b7f537461747573206d7573742062652045766964656e63655375626d6974746564600082015250565b60006122a2602083611981565b91506122ad8261226c565b602082019050919050565b600060208201905081810360008301526122d181612295565b9050919050565b600081546122e581611f1f565b6122ef8186611981565b9450600182166000811461230a576001811461232057612353565b60ff198316865281151560200286019350612353565b61232985611f50565b60005b8381101561234b5781548189015260018201915060208101905061232c565b808801955050505b50505092915050565b600081549050919050565b600082825260208201905092915050565b60008190508160005260206000209050919050565b60008160001c9050919050565b6000819050919050565b60006123b76123b28361238d565b61239a565b9050919050565b6000819050919050565b6123d1816123be565b82525050565b6000819050919050565b60006123f46123ef8361238d565b6123d7565b9050919050565b61240481611746565b82525050565b60408201600080830154905061241f816123a4565b61242c60008601826123c8565b506001830154905061243d816123e1565b61244a60208601826123fb565b5050505050565b600061245d838361240a565b60408301905092915050565b6000600282019050919050565b60006124818261235c565b61248b8185612367565b935061249683612378565b8060005b838110156124c657816124ad8882612451565b97506124b883612469565b92505060018101905061249a565b5085935050505092915050565b60006060820190506124e860008301866118f0565b81810360208301526124fa81856122d8565b9050818103604083015261250e8184612476565b9050949350505050565b60008151905061252781611750565b92915050565b6000602082840312156125435761254261162c565b5b600061255184828501612518565b91505092915050565b600060408201905061256f60008301856117cf565b61257c6020830184611a12565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006125bd82611746565b91506125c883611746565b9250826125d8576125d7612583565b5b828204905092915050565b60006125ee82611746565b91506125f983611746565b925082820390508181111561261157612610611e3f565b5b92915050565b600060029050919050565b600081905092915050565b6000819050919050565b600061264383836123fb565b60208301905092915050565b6000602082019050919050565b61266581612617565b61266f8184612622565b925061267a8261262d565b8060005b838110156126ab5781516126928782612637565b965061269d8361264f565b92505060018101905061267e565b505050505050565b6000819050919050565b60006126d86126d36126ce846126b3565b611fd4565b611746565b9050919050565b6126e8816126bd565b82525050565b600081519050919050565b600082825260208201905092915050565b6000612715826126ee565b61271f81856126f9565b935061272f818560208601611992565b612738816119bc565b840191505092915050565b600061014082019050612759600083018b6117cf565b612766602083018a6117cf565b612773604083018961265c565b612780608083018861265c565b61278d60c08301876126df565b61279a60e0830186611a12565b6127a8610100830185611a12565b8181036101208301526127bb818461270a565b90509998505050505050505050565b60006080820190506127df60008301876117cf565b6127ec60208301866118f0565b6127f960408301856117cf565b6128066060830184611a12565b95945050505050565b7f537461747573206d757374206265205265717565737465640000000000000000600082015250565b6000612845601883611981565b91506128508261280f565b602082019050919050565b6000602082019050818103600083015261287481612838565b9050919050565b7f576f726b65722063616e206f6e6c79207375626d69742065766964656e63652060008201527f666f7220776f726b2074686579206172652061737369676e6564000000000000602082015250565b60006128d7603a83611981565b91506128e28261287b565b604082019050919050565b60006020820190508181036000830152612906816128ca565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b612945816123be565b811461295057600080fd5b50565b600081356129608161293c565b80915050919050565b60008160001b9050919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6129a284612969565b9350801983169250808416831791505092915050565b60006129d36129ce6129c9846123be565b611fd4565b6123be565b9050919050565b6000819050919050565b6129ed826129b8565b612a006129f9826129da565b8354612976565b8255505050565b60008135612a1481611750565b80915050919050565b612a2682611fde565b612a39612a3282612000565b8354612976565b8255505050565b600081016000830180612a5281612953565b9050612a5e81846129e4565b505050600181016020830180612a7381612a07565b9050612a7f8184612a1d565b5050505050565b612a908282612a40565b5050565b82818337600083830152505050565b6000612aaf8385611981565b9350612abc838584612a94565b612ac5836119bc565b840190509392505050565b82818337505050565b612ae560608383612ad0565b5050565b600060e0820190508181036000830152612b0481888a612aa3565b9050612b1360208301876118f0565b612b206040830186612ad9565b612b2d60a0830185611a12565b81810360c0830152612b3f818461270a565b9050979650505050505050565b7f6f6e56616c6964617465206d6179206f6e6c792062652063616c6c656420627960008201527f207468652044414f20636f6e7472616374000000000000000000000000000000602082015250565b6000612ba8603183611981565b9150612bb382612b4c565b604082019050919050565b60006020820190508181036000830152612bd781612b9b565b9050919050565b600081519050919050565b6000819050602082019050919050565b604082016000820151612c0f60008501826123c8565b506020820151612c2260208501826123fb565b50505050565b6000612c348383612bf9565b60408301905092915050565b6000602082019050919050565b6000612c5882612bde565b612c628185612367565b9350612c6d83612be9565b8060005b83811015612c9e578151612c858882612c28565b9750612c9083612c40565b925050600181019050612c71565b5085935050505092915050565b6000606082019050612cc060008301866118f0565b8181036020830152612cd281856122d8565b90508181036040830152612ce68184612c4d565b9050949350505050565b50565b6000612d006000836126f9565b9150612d0b82612cf0565b600082019050919050565b600061014082019050612d2c600083018a6117cf565b612d3960208301896117cf565b612d46604083018861265c565b612d53608083018761265c565b612d6060c08301866126df565b612d6d60e0830185611a12565b612d7b610100830184611a12565b818103610120830152612d8d81612cf3565b905098975050505050505050565b7f576f726b65722063616e206f6e6c7920657874656e64207468656972206f776e60008201527f20617661696c6162696c697479207374616b6500000000000000000000000000602082015250565b6000612df7603383611981565b9150612e0282612d9b565b604082019050919050565b60006020820190508181036000830152612e2681612dea565b9050919050565b7f5374616b652068617320616c7265616479206265656e2061737369676e65642060008201527f776f726b00000000000000000000000000000000000000000000000000000000602082015250565b6000612e89602483611981565b9150612e9482612e2d565b604082019050919050565b60006020820190508181036000830152612eb881612e7c565b9050919050565b7f4e6f20617661696c61626c6520776f726b6572207374616b6573000000000000600082015250565b6000612ef5601a83611981565b9150612f0082612ebf565b602082019050919050565b60006020820190508181036000830152612f2481612ee8565b9050919050565b6000612f3682611746565b9150612f4183611746565b925082612f5157612f50612583565b5b82820690509291505056fea2646970667358221220d1b632d2fd82da8133c92314d6bddc7a8314687125100dd29c2dc3c7fad1f1b964736f6c63430008180033", + "bytecode": "0x60a06040523480156200001157600080fd5b5060405162003333380380620033338339818101604052810190620000379190620001c1565b828282828073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250505080600181905550816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505050506200021d565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620000f582620000c8565b9050919050565b60006200010982620000e8565b9050919050565b6200011b81620000fc565b81146200012757600080fd5b50565b6000815190506200013b8162000110565b92915050565b60006200014e82620000e8565b9050919050565b620001608162000141565b81146200016c57600080fd5b50565b600081519050620001808162000155565b92915050565b6000819050919050565b6200019b8162000186565b8114620001a757600080fd5b50565b600081519050620001bb8162000190565b92915050565b600080600060608486031215620001dd57620001dc620000c3565b5b6000620001ed868287016200012a565b935050602062000200868287016200016f565b92505060406200021386828701620001aa565b9150509250925092565b6080516130d76200025c600039600081816108b7015281816109ab01528181610ac801528181610cda01528181610e2a0152610ee001526130d76000f3fe6080604052600436106100e85760003560e01c8063a035b1fe1161008a578063cf37625611610059578063cf376256146102de578063d0fae95f1461031c578063d5a44f8614610345578063d76b679414610385576100e8565b8063a035b1fe14610222578063b4e6a1d51461024d578063b5b20c001461028a578063c4a9e116146102b3576100e8565b8063815a0572116100c6578063815a05721461015d57806381d12c581461019a578063854b6a4f146101dd57806399ad6c5614610206576100e8565b80630d0271d6146100ed578063216ed6ad146101095780635badbe4c14610132575b600080fd5b61010760048036038101906101029190611681565b6103b0565b005b34801561011557600080fd5b50610130600480360381019061012b9190611762565b61049e565b005b34801561013e57600080fd5b506101476105b1565b60405161015491906117c4565b60405180910390f35b34801561016957600080fd5b50610184600480360381019061017f9190611835565b6105b7565b60405161019191906117c4565b60405180910390f35b3480156101a657600080fd5b506101c160048036038101906101bc91906118a9565b610636565b6040516101d49796959493929190611a07565b60405180910390f35b3480156101e957600080fd5b5061020460048036038101906101ff9190611ab0565b6107c2565b005b610220600480360381019061021b9190611b12565b610b87565b005b34801561022e57600080fd5b50610237610cd0565b60405161024491906117c4565b60405180910390f35b34801561025957600080fd5b50610274600480360381019061026f9190611b86565b610cd6565b60405161028191906117c4565b60405180910390f35b34801561029657600080fd5b506102b160048036038101906102ac9190611c20565b610fdd565b005b3480156102bf57600080fd5b506102c8611152565b6040516102d591906117c4565b60405180910390f35b3480156102ea57600080fd5b50610305600480360381019061030091906118a9565b611158565b604051610313929190611c60565b60405180910390f35b34801561032857600080fd5b50610343600480360381019061033e9190611cdf565b61117c565b005b34801561035157600080fd5b5061036c600480360381019061036791906118a9565b6113b5565b60405161037c9493929190611d74565b60405180910390f35b34801561039157600080fd5b5061039a611412565b6040516103a791906117c4565b60405180910390f35b6001543410156103f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103ec90611e05565b60405180910390fd5b60006007600081548092919061040a90611e54565b9190505590506000600660008381526020019081526020016000209050338160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555034816001018190555061047c82611418565b816003018190555083838260040191826104979291906120e2565b5050505050565b600082116104e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104d8906121fe565b60405180910390fd5b6000600560008154809291906104f690611e54565b9190505590506000600460008381526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550838160010181905550824261056b919061221e565b81600201819055507fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e9826040516105a291906117c4565b60405180910390a15050505050565b60075481565b60008083838101906105c991906118a9565b9050600060026000838152602001908152602001600020905080600001546001819055507f6a3843c02c26620842ae8496fd3afcb44b27463b3808e2ccdae4bcee5a2e3f2082600154604051610620929190611c60565b60405180910390a1600092505050949350505050565b60066020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020160009054906101000a900460ff169080600301549080600401805461069e90611f05565b80601f01602080910402602001604051908101604052809291908181526020018280546106ca90611f05565b80156107175780601f106106ec57610100808354040283529160200191610717565b820191906000526020600020905b8154815290600101906020018083116106fa57829003601f168201915b50505050509080600501805461072c90611f05565b80601f016020809104026020016040519081016040528092919081815260200182805461075890611f05565b80156107a55780601f1061077a576101008083540402835291602001916107a5565b820191906000526020600020905b81548152906001019060200180831161078857829003601f168201915b5050505050908060070160009054906101000a900460ff16905087565b6000600660008481526020019081526020016000209050600160038111156107ed576107ec6118e5565b5b8160020160009054906101000a900460ff166003811115610811576108106118e5565b5b14610851576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108489061229e565b60405180910390fd5b60006004600083600301548152602001908152602001600020905060028260020160006101000a81548160ff02191690836003811115610894576108936118e5565b5b0217905550828260070160006101000a81548160ff0219169083151502179055507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166338787df08260000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684600501856006016040518463ffffffff1660e01b815260040161093c93929190612530565b600060405180830381600087803b15801561095657600080fd5b505af115801561096a573d6000803e3d6000fd5b505050507f470d2978e081461f6d144c091dfd83ec06e6011da0b03bd1c0121b7fb71370dc848460405161099f929190612575565b60405180910390a160007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639fbe7c73600a85600101546109f691906125cd565b8560010154610a0591906125fe565b8560050160146040518060400160405280600181526020016003815250604051806040016040528060018152602001600281525060646001808e604051602001610a4f91906117c4565b6040516020818303038152906040526040518a63ffffffff1660e01b8152600401610a8198979695949392919061276d565b60206040518083038185885af1158015610a9f573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610ac49190612810565b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663975762b3828460000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16856001015460016040518563ffffffff1660e01b8152600401610b4e949392919061283d565b600060405180830381600087803b158015610b6857600080fd5b505af1158015610b7c573d6000803e3d6000fd5b505050505050505050565b600060036000815480929190610b9c90611e54565b919050559050600060026000838152602001908152602001600020905085816000018190555060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632805b5d93487873388600189604051602001610c1691906117c4565b6040516020818303038152906040526040518863ffffffff1660e01b8152600401610c46969594939291906128d7565b60206040518083038185885af1158015610c64573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610c899190612810565b81600101819055507f71eae802097e4e77c5345dee7f35d74ac0ae45eb5a456fdaed0de4d141fc5d8c82604051610cc091906117c4565b60405180910390a1505050505050565b60015481565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610d66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5d906129ac565b60405180910390fd5b60008383810190610d7791906118a9565b90506000600660008381526020019081526020016000209050881580610d9b575087155b15610e26578060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc600a8360010154610def91906125cd565b9081150290604051600060405180830381858888f19350505050158015610e1a573d6000803e3d6000fd5b50600192505050610fd3565b60607f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166338787df08360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684600401846040518463ffffffff1660e01b8152600401610eac93929190612af3565b600060405180830381600087803b158015610ec657600080fd5b505af1158015610eda573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639fbe7c73600a8460010154610f2b91906125cd565b846004016014604051806040016040528060018152602001600381525060405180604001604052806001815260200160028152506064600160006040518963ffffffff1660e01b8152600401610f879796959493929190612b5e565b60206040518083038185885af1158015610fa5573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610fca9190612810565b50600093505050505b9695505050505050565b60006004600084815260200190815260200160002090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611086576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107d90612c5c565b60405180910390fd5b8060030160009054906101000a900460ff16156110d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110cf90612cee565b60405180910390fd5b80600201544211156110fd5781426110f0919061221e565b8160020181905550611116565b81816002015461110d919061221e565b81600201819055505b7fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e98360405161114591906117c4565b60405180910390a1505050565b60055481565b60026020528060005260406000206000915090508060000154908060010154905082565b6000600660008781526020019081526020016000209050600060038111156111a7576111a66118e5565b5b8160020160009054906101000a900460ff1660038111156111cb576111ca6118e5565b5b1461120b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120290612d5a565b60405180910390fd5b6000600460008360030154815260200190815260200160002090503373ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112af90612dec565b60405180910390fd5b60018260020160006101000a81548160ff021916908360038111156112e0576112df6118e5565b5b021790555085858360050191826112f89291906120e2565b5060005b84849050811015611374578260060185858381811061131e5761131d612e0c565b5b90506020028101906113309190612e4a565b908060018154018082558091505060019003906000526020600020906002020160009091909190915081816113659190612ff6565b505080806001019150506112fc565b507ffaecd3b4db089bf25a48306100dd5fb2152e3887c7815b2b221dbb7da2f8e8dc876040516113a491906117c4565b60405180910390a150505050505050565b60046020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030160009054906101000a900460ff16905084565b60035481565b6000611422611497565b9050600060046000838152602001908152602001600020905060018160030160006101000a81548160ff0219169083151502179055507fd9e7f38a71691fb1db2da17057c03d381a42a9925350883f10e8e5d0bca4a3b48383604051611489929190611c60565b60405180910390a150919050565b60008060005b60055481101561151e576004600082815260200190815260200160002060030160009054906101000a900460ff1661151157600460008281526020019081526020016000206002015442116115115760046000828152602001908152602001600020600101548261150e919061221e565b91505b808060010191505061149d565b5060008111611562576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155990613050565b60405180910390fd5b600081446115709190613070565b9050600080600090505b60055481101561160b576004600082815260200190815260200160002060030160009054906101000a900460ff166115fe57600460008281526020019081526020016000206002015442116115fe576004600082815260200190815260200160002060010154826115eb919061221e565b9150828211156115fd5780945061160b565b5b808060010191505061157a565b5050505090565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f8401126116415761164061161c565b5b8235905067ffffffffffffffff81111561165e5761165d611621565b5b60208301915083600182028301111561167a57611679611626565b5b9250929050565b6000806020838503121561169857611697611612565b5b600083013567ffffffffffffffff8111156116b6576116b5611617565b5b6116c28582860161162b565b92509250509250929050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006116f9826116ce565b9050919050565b611709816116ee565b811461171457600080fd5b50565b60008135905061172681611700565b92915050565b6000819050919050565b61173f8161172c565b811461174a57600080fd5b50565b60008135905061175c81611736565b92915050565b60008060006060848603121561177b5761177a611612565b5b600061178986828701611717565b935050602061179a8682870161174d565b92505060406117ab8682870161174d565b9150509250925092565b6117be8161172c565b82525050565b60006020820190506117d960008301846117b5565b92915050565b60008083601f8401126117f5576117f461161c565b5b8235905067ffffffffffffffff81111561181257611811611621565b5b60208301915083600182028301111561182e5761182d611626565b5b9250929050565b6000806000806060858703121561184f5761184e611612565b5b600061185d8782880161174d565b945050602061186e8782880161174d565b935050604085013567ffffffffffffffff81111561188f5761188e611617565b5b61189b878288016117df565b925092505092959194509250565b6000602082840312156118bf576118be611612565b5b60006118cd8482850161174d565b91505092915050565b6118df816116ee565b82525050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60048110611925576119246118e5565b5b50565b600081905061193682611914565b919050565b600061194682611928565b9050919050565b6119568161193b565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561199657808201518184015260208101905061197b565b60008484015250505050565b6000601f19601f8301169050919050565b60006119be8261195c565b6119c88185611967565b93506119d8818560208601611978565b6119e1816119a2565b840191505092915050565b60008115159050919050565b611a01816119ec565b82525050565b600060e082019050611a1c600083018a6118d6565b611a2960208301896117b5565b611a36604083018861194d565b611a4360608301876117b5565b8181036080830152611a5581866119b3565b905081810360a0830152611a6981856119b3565b9050611a7860c08301846119f8565b98975050505050505050565b611a8d816119ec565b8114611a9857600080fd5b50565b600081359050611aaa81611a84565b92915050565b60008060408385031215611ac757611ac6611612565b5b6000611ad58582860161174d565b9250506020611ae685828601611a9b565b9150509250929050565b600081905082602060030282011115611b0c57611b0b611626565b5b92915050565b60008060008060a08587031215611b2c57611b2b611612565b5b6000611b3a8782880161174d565b945050602085013567ffffffffffffffff811115611b5b57611b5a611617565b5b611b678782880161162b565b93509350506040611b7a87828801611af0565b91505092959194509250565b60008060008060008060a08789031215611ba357611ba2611612565b5b6000611bb189828a01611a9b565b9650506020611bc289828a01611a9b565b9550506040611bd389828a0161174d565b9450506060611be489828a0161174d565b935050608087013567ffffffffffffffff811115611c0557611c04611617565b5b611c1189828a016117df565b92509250509295509295509295565b60008060408385031215611c3757611c36611612565b5b6000611c458582860161174d565b9250506020611c568582860161174d565b9150509250929050565b6000604082019050611c7560008301856117b5565b611c8260208301846117b5565b9392505050565b60008083601f840112611c9f57611c9e61161c565b5b8235905067ffffffffffffffff811115611cbc57611cbb611621565b5b602083019150836020820283011115611cd857611cd7611626565b5b9250929050565b600080600080600060608688031215611cfb57611cfa611612565b5b6000611d098882890161174d565b955050602086013567ffffffffffffffff811115611d2a57611d29611617565b5b611d368882890161162b565b9450945050604086013567ffffffffffffffff811115611d5957611d58611617565b5b611d6588828901611c89565b92509250509295509295909350565b6000608082019050611d8960008301876118d6565b611d9660208301866117b5565b611da360408301856117b5565b611db060608301846119f8565b95945050505050565b7f496e73756666696369656e742066656500000000000000000000000000000000600082015250565b6000611def601083611967565b9150611dfa82611db9565b602082019050919050565b60006020820190508181036000830152611e1e81611de2565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611e5f8261172c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611e9157611e90611e25565b5b600182019050919050565b600082905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611f1d57607f821691505b602082108103611f3057611f2f611ed6565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302611f987fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82611f5b565b611fa28683611f5b565b95508019841693508086168417925050509392505050565b6000819050919050565b6000611fdf611fda611fd58461172c565b611fba565b61172c565b9050919050565b6000819050919050565b611ff983611fc4565b61200d61200582611fe6565b848454611f68565b825550505050565b600090565b612022612015565b61202d818484611ff0565b505050565b5b818110156120515761204660008261201a565b600181019050612033565b5050565b601f8211156120965761206781611f36565b61207084611f4b565b8101602085101561207f578190505b61209361208b85611f4b565b830182612032565b50505b505050565b600082821c905092915050565b60006120b96000198460080261209b565b1980831691505092915050565b60006120d283836120a8565b9150826002028217905092915050565b6120ec8383611e9c565b67ffffffffffffffff81111561210557612104611ea7565b5b61210f8254611f05565b61211a828285612055565b6000601f8311600181146121495760008415612137578287013590505b61214185826120c6565b8655506121a9565b601f19841661215786611f36565b60005b8281101561217f5784890135825560018201915060208501945060208101905061215a565b8683101561219c5784890135612198601f8916826120a8565b8355505b6001600288020188555050505b50505050505050565b7f4e6f207374616b652070726f7669646564000000000000000000000000000000600082015250565b60006121e8601183611967565b91506121f3826121b2565b602082019050919050565b60006020820190508181036000830152612217816121db565b9050919050565b60006122298261172c565b91506122348361172c565b925082820190508082111561224c5761224b611e25565b5b92915050565b7f537461747573206d7573742062652045766964656e63655375626d6974746564600082015250565b6000612288602083611967565b915061229382612252565b602082019050919050565b600060208201905081810360008301526122b78161227b565b9050919050565b600081546122cb81611f05565b6122d58186611967565b945060018216600081146122f0576001811461230657612339565b60ff198316865281151560200286019350612339565b61230f85611f36565b60005b8381101561233157815481890152600182019150602081019050612312565b808801955050505b50505092915050565b600081549050919050565b600082825260208201905092915050565b60008190508160005260206000209050919050565b60008160001c9050919050565b6000819050919050565b600061239d61239883612373565b612380565b9050919050565b6000819050919050565b6123b7816123a4565b82525050565b600082825260208201905092915050565b600081546123db81611f05565b6123e581866123bd565b94506001821660008114612400576001811461241657612449565b60ff198316865281151560200286019350612449565b61241f85611f36565b60005b8381101561244157815481890152600182019150602081019050612422565b808801955050505b50505092915050565b60006040830160008084015490506124698161238a565b61247660008701826123ae565b5060018401858303602087015261248d83826123ce565b925050819250505092915050565b60006124a78383612452565b905092915050565b6000600282019050919050565b60006124c782612342565b6124d1818561234d565b9350836020820285016124e38561235e565b8060005b8581101561251e578484038952816124ff858261249b565b945061250a836124af565b925060208a019950506001810190506124e7565b50829750879550505050505092915050565b600060608201905061254560008301866118d6565b818103602083015261255781856122be565b9050818103604083015261256b81846124bc565b9050949350505050565b600060408201905061258a60008301856117b5565b61259760208301846119f8565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006125d88261172c565b91506125e38361172c565b9250826125f3576125f261259e565b5b828204905092915050565b60006126098261172c565b91506126148361172c565b925082820390508181111561262c5761262b611e25565b5b92915050565b600060029050919050565b600081905092915050565b6000819050919050565b61265b8161172c565b82525050565b600061266d8383612652565b60208301905092915050565b6000602082019050919050565b61268f81612632565b612699818461263d565b92506126a482612648565b8060005b838110156126d55781516126bc8782612661565b96506126c783612679565b9250506001810190506126a8565b505050505050565b6000819050919050565b60006127026126fd6126f8846126dd565b611fba565b61172c565b9050919050565b612712816126e7565b82525050565b600081519050919050565b600082825260208201905092915050565b600061273f82612718565b6127498185612723565b9350612759818560208601611978565b612762816119a2565b840191505092915050565b6000610140820190508181036000830152612788818b6122be565b9050612797602083018a6117b5565b6127a46040830189612686565b6127b16080830188612686565b6127be60c0830187612709565b6127cb60e08301866119f8565b6127d96101008301856119f8565b8181036101208301526127ec8184612734565b90509998505050505050505050565b60008151905061280a81611736565b92915050565b60006020828403121561282657612825611612565b5b6000612834848285016127fb565b91505092915050565b600060808201905061285260008301876117b5565b61285f60208301866118d6565b61286c60408301856117b5565b61287960608301846119f8565b95945050505050565b82818337600083830152505050565b600061289d8385611967565b93506128aa838584612882565b6128b3836119a2565b840190509392505050565b82818337505050565b6128d3606083836128be565b5050565b600060e08201905081810360008301526128f281888a612891565b905061290160208301876118d6565b61290e60408301866128c7565b61291b60a08301856119f8565b81810360c083015261292d8184612734565b9050979650505050505050565b7f6f6e56616c6964617465206d6179206f6e6c792062652063616c6c656420627960008201527f207468652044414f20636f6e7472616374000000000000000000000000000000602082015250565b6000612996603183611967565b91506129a18261293a565b604082019050919050565b600060208201905081810360008301526129c581612989565b9050919050565b600081519050919050565b6000819050602082019050919050565b60006129f28261195c565b6129fc81856123bd565b9350612a0c818560208601611978565b612a15816119a2565b840191505092915050565b6000604083016000830151612a3860008601826123ae565b5060208301518482036020860152612a5082826129e7565b9150508091505092915050565b6000612a698383612a20565b905092915050565b6000602082019050919050565b6000612a89826129cc565b612a93818561234d565b935083602082028501612aa5856129d7565b8060005b85811015612ae15784840389528151612ac28582612a5d565b9450612acd83612a71565b925060208a01995050600181019050612aa9565b50829750879550505050505092915050565b6000606082019050612b0860008301866118d6565b8181036020830152612b1a81856122be565b90508181036040830152612b2e8184612a7e565b9050949350505050565b50565b6000612b48600083612723565b9150612b5382612b38565b600082019050919050565b6000610140820190508181036000830152612b79818a6122be565b9050612b8860208301896117b5565b612b956040830188612686565b612ba26080830187612686565b612baf60c0830186612709565b612bbc60e08301856119f8565b612bca6101008301846119f8565b818103610120830152612bdc81612b3b565b905098975050505050505050565b7f576f726b65722063616e206f6e6c7920657874656e64207468656972206f776e60008201527f20617661696c6162696c697479207374616b6500000000000000000000000000602082015250565b6000612c46603383611967565b9150612c5182612bea565b604082019050919050565b60006020820190508181036000830152612c7581612c39565b9050919050565b7f5374616b652068617320616c7265616479206265656e2061737369676e65642060008201527f776f726b00000000000000000000000000000000000000000000000000000000602082015250565b6000612cd8602483611967565b9150612ce382612c7c565b604082019050919050565b60006020820190508181036000830152612d0781612ccb565b9050919050565b7f537461747573206d757374206265205265717565737465640000000000000000600082015250565b6000612d44601883611967565b9150612d4f82612d0e565b602082019050919050565b60006020820190508181036000830152612d7381612d37565b9050919050565b7f576f726b65722063616e206f6e6c79207375626d69742065766964656e63652060008201527f666f7220776f726b2074686579206172652061737369676e6564000000000000602082015250565b6000612dd6603a83611967565b9150612de182612d7a565b604082019050919050565b60006020820190508181036000830152612e0581612dc9565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600080fd5b600080fd5b600080fd5b600082356001604003833603038112612e6657612e65612e3b565b5b80830191505092915050565b612e7b816123a4565b8114612e8657600080fd5b50565b60008135612e9681612e72565b80915050919050565b60008160001b9050919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff612ed884612e9f565b9350801983169250808416831791505092915050565b6000612f09612f04612eff846123a4565b611fba565b6123a4565b9050919050565b6000819050919050565b612f2382612eee565b612f36612f2f82612f10565b8354612eac565b8255505050565b60008083356001602003843603038112612f5a57612f59612e3b565b5b80840192508235915067ffffffffffffffff821115612f7c57612f7b612e40565b5b602083019250600182023603831315612f9857612f97612e45565b5b509250929050565b612fab8383836120e2565b505050565b600081016000830180612fc281612e89565b9050612fce8184612f1a565b5050506001810160208301612fe38185612f3d565b612fee818386612fa0565b505050505050565b6130008282612fb0565b5050565b7f4e6f20617661696c61626c6520776f726b6572207374616b6573000000000000600082015250565b600061303a601a83611967565b915061304582613004565b602082019050919050565b600060208201905081810360008301526130698161302d565b9050919050565b600061307b8261172c565b91506130868361172c565b9250826130965761309561259e565b5b82820690509291505056fea264697066735822122082a13b6cfe92044167ae3094889be3aae565f8e6e03c615886ff43f98415d1d764736f6c63430008180033", + "deployedBytecode": "0x6080604052600436106100e85760003560e01c8063a035b1fe1161008a578063cf37625611610059578063cf376256146102de578063d0fae95f1461031c578063d5a44f8614610345578063d76b679414610385576100e8565b8063a035b1fe14610222578063b4e6a1d51461024d578063b5b20c001461028a578063c4a9e116146102b3576100e8565b8063815a0572116100c6578063815a05721461015d57806381d12c581461019a578063854b6a4f146101dd57806399ad6c5614610206576100e8565b80630d0271d6146100ed578063216ed6ad146101095780635badbe4c14610132575b600080fd5b61010760048036038101906101029190611681565b6103b0565b005b34801561011557600080fd5b50610130600480360381019061012b9190611762565b61049e565b005b34801561013e57600080fd5b506101476105b1565b60405161015491906117c4565b60405180910390f35b34801561016957600080fd5b50610184600480360381019061017f9190611835565b6105b7565b60405161019191906117c4565b60405180910390f35b3480156101a657600080fd5b506101c160048036038101906101bc91906118a9565b610636565b6040516101d49796959493929190611a07565b60405180910390f35b3480156101e957600080fd5b5061020460048036038101906101ff9190611ab0565b6107c2565b005b610220600480360381019061021b9190611b12565b610b87565b005b34801561022e57600080fd5b50610237610cd0565b60405161024491906117c4565b60405180910390f35b34801561025957600080fd5b50610274600480360381019061026f9190611b86565b610cd6565b60405161028191906117c4565b60405180910390f35b34801561029657600080fd5b506102b160048036038101906102ac9190611c20565b610fdd565b005b3480156102bf57600080fd5b506102c8611152565b6040516102d591906117c4565b60405180910390f35b3480156102ea57600080fd5b50610305600480360381019061030091906118a9565b611158565b604051610313929190611c60565b60405180910390f35b34801561032857600080fd5b50610343600480360381019061033e9190611cdf565b61117c565b005b34801561035157600080fd5b5061036c600480360381019061036791906118a9565b6113b5565b60405161037c9493929190611d74565b60405180910390f35b34801561039157600080fd5b5061039a611412565b6040516103a791906117c4565b60405180910390f35b6001543410156103f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103ec90611e05565b60405180910390fd5b60006007600081548092919061040a90611e54565b9190505590506000600660008381526020019081526020016000209050338160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555034816001018190555061047c82611418565b816003018190555083838260040191826104979291906120e2565b5050505050565b600082116104e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104d8906121fe565b60405180910390fd5b6000600560008154809291906104f690611e54565b9190505590506000600460008381526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550838160010181905550824261056b919061221e565b81600201819055507fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e9826040516105a291906117c4565b60405180910390a15050505050565b60075481565b60008083838101906105c991906118a9565b9050600060026000838152602001908152602001600020905080600001546001819055507f6a3843c02c26620842ae8496fd3afcb44b27463b3808e2ccdae4bcee5a2e3f2082600154604051610620929190611c60565b60405180910390a1600092505050949350505050565b60066020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020160009054906101000a900460ff169080600301549080600401805461069e90611f05565b80601f01602080910402602001604051908101604052809291908181526020018280546106ca90611f05565b80156107175780601f106106ec57610100808354040283529160200191610717565b820191906000526020600020905b8154815290600101906020018083116106fa57829003601f168201915b50505050509080600501805461072c90611f05565b80601f016020809104026020016040519081016040528092919081815260200182805461075890611f05565b80156107a55780601f1061077a576101008083540402835291602001916107a5565b820191906000526020600020905b81548152906001019060200180831161078857829003601f168201915b5050505050908060070160009054906101000a900460ff16905087565b6000600660008481526020019081526020016000209050600160038111156107ed576107ec6118e5565b5b8160020160009054906101000a900460ff166003811115610811576108106118e5565b5b14610851576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108489061229e565b60405180910390fd5b60006004600083600301548152602001908152602001600020905060028260020160006101000a81548160ff02191690836003811115610894576108936118e5565b5b0217905550828260070160006101000a81548160ff0219169083151502179055507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166338787df08260000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684600501856006016040518463ffffffff1660e01b815260040161093c93929190612530565b600060405180830381600087803b15801561095657600080fd5b505af115801561096a573d6000803e3d6000fd5b505050507f470d2978e081461f6d144c091dfd83ec06e6011da0b03bd1c0121b7fb71370dc848460405161099f929190612575565b60405180910390a160007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639fbe7c73600a85600101546109f691906125cd565b8560010154610a0591906125fe565b8560050160146040518060400160405280600181526020016003815250604051806040016040528060018152602001600281525060646001808e604051602001610a4f91906117c4565b6040516020818303038152906040526040518a63ffffffff1660e01b8152600401610a8198979695949392919061276d565b60206040518083038185885af1158015610a9f573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610ac49190612810565b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663975762b3828460000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16856001015460016040518563ffffffff1660e01b8152600401610b4e949392919061283d565b600060405180830381600087803b158015610b6857600080fd5b505af1158015610b7c573d6000803e3d6000fd5b505050505050505050565b600060036000815480929190610b9c90611e54565b919050559050600060026000838152602001908152602001600020905085816000018190555060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632805b5d93487873388600189604051602001610c1691906117c4565b6040516020818303038152906040526040518863ffffffff1660e01b8152600401610c46969594939291906128d7565b60206040518083038185885af1158015610c64573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610c899190612810565b81600101819055507f71eae802097e4e77c5345dee7f35d74ac0ae45eb5a456fdaed0de4d141fc5d8c82604051610cc091906117c4565b60405180910390a1505050505050565b60015481565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610d66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5d906129ac565b60405180910390fd5b60008383810190610d7791906118a9565b90506000600660008381526020019081526020016000209050881580610d9b575087155b15610e26578060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc600a8360010154610def91906125cd565b9081150290604051600060405180830381858888f19350505050158015610e1a573d6000803e3d6000fd5b50600192505050610fd3565b60607f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166338787df08360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684600401846040518463ffffffff1660e01b8152600401610eac93929190612af3565b600060405180830381600087803b158015610ec657600080fd5b505af1158015610eda573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639fbe7c73600a8460010154610f2b91906125cd565b846004016014604051806040016040528060018152602001600381525060405180604001604052806001815260200160028152506064600160006040518963ffffffff1660e01b8152600401610f879796959493929190612b5e565b60206040518083038185885af1158015610fa5573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610fca9190612810565b50600093505050505b9695505050505050565b60006004600084815260200190815260200160002090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611086576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107d90612c5c565b60405180910390fd5b8060030160009054906101000a900460ff16156110d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110cf90612cee565b60405180910390fd5b80600201544211156110fd5781426110f0919061221e565b8160020181905550611116565b81816002015461110d919061221e565b81600201819055505b7fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e98360405161114591906117c4565b60405180910390a1505050565b60055481565b60026020528060005260406000206000915090508060000154908060010154905082565b6000600660008781526020019081526020016000209050600060038111156111a7576111a66118e5565b5b8160020160009054906101000a900460ff1660038111156111cb576111ca6118e5565b5b1461120b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120290612d5a565b60405180910390fd5b6000600460008360030154815260200190815260200160002090503373ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112af90612dec565b60405180910390fd5b60018260020160006101000a81548160ff021916908360038111156112e0576112df6118e5565b5b021790555085858360050191826112f89291906120e2565b5060005b84849050811015611374578260060185858381811061131e5761131d612e0c565b5b90506020028101906113309190612e4a565b908060018154018082558091505060019003906000526020600020906002020160009091909190915081816113659190612ff6565b505080806001019150506112fc565b507ffaecd3b4db089bf25a48306100dd5fb2152e3887c7815b2b221dbb7da2f8e8dc876040516113a491906117c4565b60405180910390a150505050505050565b60046020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030160009054906101000a900460ff16905084565b60035481565b6000611422611497565b9050600060046000838152602001908152602001600020905060018160030160006101000a81548160ff0219169083151502179055507fd9e7f38a71691fb1db2da17057c03d381a42a9925350883f10e8e5d0bca4a3b48383604051611489929190611c60565b60405180910390a150919050565b60008060005b60055481101561151e576004600082815260200190815260200160002060030160009054906101000a900460ff1661151157600460008281526020019081526020016000206002015442116115115760046000828152602001908152602001600020600101548261150e919061221e565b91505b808060010191505061149d565b5060008111611562576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155990613050565b60405180910390fd5b600081446115709190613070565b9050600080600090505b60055481101561160b576004600082815260200190815260200160002060030160009054906101000a900460ff166115fe57600460008281526020019081526020016000206002015442116115fe576004600082815260200190815260200160002060010154826115eb919061221e565b9150828211156115fd5780945061160b565b5b808060010191505061157a565b5050505090565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f8401126116415761164061161c565b5b8235905067ffffffffffffffff81111561165e5761165d611621565b5b60208301915083600182028301111561167a57611679611626565b5b9250929050565b6000806020838503121561169857611697611612565b5b600083013567ffffffffffffffff8111156116b6576116b5611617565b5b6116c28582860161162b565b92509250509250929050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006116f9826116ce565b9050919050565b611709816116ee565b811461171457600080fd5b50565b60008135905061172681611700565b92915050565b6000819050919050565b61173f8161172c565b811461174a57600080fd5b50565b60008135905061175c81611736565b92915050565b60008060006060848603121561177b5761177a611612565b5b600061178986828701611717565b935050602061179a8682870161174d565b92505060406117ab8682870161174d565b9150509250925092565b6117be8161172c565b82525050565b60006020820190506117d960008301846117b5565b92915050565b60008083601f8401126117f5576117f461161c565b5b8235905067ffffffffffffffff81111561181257611811611621565b5b60208301915083600182028301111561182e5761182d611626565b5b9250929050565b6000806000806060858703121561184f5761184e611612565b5b600061185d8782880161174d565b945050602061186e8782880161174d565b935050604085013567ffffffffffffffff81111561188f5761188e611617565b5b61189b878288016117df565b925092505092959194509250565b6000602082840312156118bf576118be611612565b5b60006118cd8482850161174d565b91505092915050565b6118df816116ee565b82525050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60048110611925576119246118e5565b5b50565b600081905061193682611914565b919050565b600061194682611928565b9050919050565b6119568161193b565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561199657808201518184015260208101905061197b565b60008484015250505050565b6000601f19601f8301169050919050565b60006119be8261195c565b6119c88185611967565b93506119d8818560208601611978565b6119e1816119a2565b840191505092915050565b60008115159050919050565b611a01816119ec565b82525050565b600060e082019050611a1c600083018a6118d6565b611a2960208301896117b5565b611a36604083018861194d565b611a4360608301876117b5565b8181036080830152611a5581866119b3565b905081810360a0830152611a6981856119b3565b9050611a7860c08301846119f8565b98975050505050505050565b611a8d816119ec565b8114611a9857600080fd5b50565b600081359050611aaa81611a84565b92915050565b60008060408385031215611ac757611ac6611612565b5b6000611ad58582860161174d565b9250506020611ae685828601611a9b565b9150509250929050565b600081905082602060030282011115611b0c57611b0b611626565b5b92915050565b60008060008060a08587031215611b2c57611b2b611612565b5b6000611b3a8782880161174d565b945050602085013567ffffffffffffffff811115611b5b57611b5a611617565b5b611b678782880161162b565b93509350506040611b7a87828801611af0565b91505092959194509250565b60008060008060008060a08789031215611ba357611ba2611612565b5b6000611bb189828a01611a9b565b9650506020611bc289828a01611a9b565b9550506040611bd389828a0161174d565b9450506060611be489828a0161174d565b935050608087013567ffffffffffffffff811115611c0557611c04611617565b5b611c1189828a016117df565b92509250509295509295509295565b60008060408385031215611c3757611c36611612565b5b6000611c458582860161174d565b9250506020611c568582860161174d565b9150509250929050565b6000604082019050611c7560008301856117b5565b611c8260208301846117b5565b9392505050565b60008083601f840112611c9f57611c9e61161c565b5b8235905067ffffffffffffffff811115611cbc57611cbb611621565b5b602083019150836020820283011115611cd857611cd7611626565b5b9250929050565b600080600080600060608688031215611cfb57611cfa611612565b5b6000611d098882890161174d565b955050602086013567ffffffffffffffff811115611d2a57611d29611617565b5b611d368882890161162b565b9450945050604086013567ffffffffffffffff811115611d5957611d58611617565b5b611d6588828901611c89565b92509250509295509295909350565b6000608082019050611d8960008301876118d6565b611d9660208301866117b5565b611da360408301856117b5565b611db060608301846119f8565b95945050505050565b7f496e73756666696369656e742066656500000000000000000000000000000000600082015250565b6000611def601083611967565b9150611dfa82611db9565b602082019050919050565b60006020820190508181036000830152611e1e81611de2565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611e5f8261172c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611e9157611e90611e25565b5b600182019050919050565b600082905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611f1d57607f821691505b602082108103611f3057611f2f611ed6565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302611f987fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82611f5b565b611fa28683611f5b565b95508019841693508086168417925050509392505050565b6000819050919050565b6000611fdf611fda611fd58461172c565b611fba565b61172c565b9050919050565b6000819050919050565b611ff983611fc4565b61200d61200582611fe6565b848454611f68565b825550505050565b600090565b612022612015565b61202d818484611ff0565b505050565b5b818110156120515761204660008261201a565b600181019050612033565b5050565b601f8211156120965761206781611f36565b61207084611f4b565b8101602085101561207f578190505b61209361208b85611f4b565b830182612032565b50505b505050565b600082821c905092915050565b60006120b96000198460080261209b565b1980831691505092915050565b60006120d283836120a8565b9150826002028217905092915050565b6120ec8383611e9c565b67ffffffffffffffff81111561210557612104611ea7565b5b61210f8254611f05565b61211a828285612055565b6000601f8311600181146121495760008415612137578287013590505b61214185826120c6565b8655506121a9565b601f19841661215786611f36565b60005b8281101561217f5784890135825560018201915060208501945060208101905061215a565b8683101561219c5784890135612198601f8916826120a8565b8355505b6001600288020188555050505b50505050505050565b7f4e6f207374616b652070726f7669646564000000000000000000000000000000600082015250565b60006121e8601183611967565b91506121f3826121b2565b602082019050919050565b60006020820190508181036000830152612217816121db565b9050919050565b60006122298261172c565b91506122348361172c565b925082820190508082111561224c5761224b611e25565b5b92915050565b7f537461747573206d7573742062652045766964656e63655375626d6974746564600082015250565b6000612288602083611967565b915061229382612252565b602082019050919050565b600060208201905081810360008301526122b78161227b565b9050919050565b600081546122cb81611f05565b6122d58186611967565b945060018216600081146122f0576001811461230657612339565b60ff198316865281151560200286019350612339565b61230f85611f36565b60005b8381101561233157815481890152600182019150602081019050612312565b808801955050505b50505092915050565b600081549050919050565b600082825260208201905092915050565b60008190508160005260206000209050919050565b60008160001c9050919050565b6000819050919050565b600061239d61239883612373565b612380565b9050919050565b6000819050919050565b6123b7816123a4565b82525050565b600082825260208201905092915050565b600081546123db81611f05565b6123e581866123bd565b94506001821660008114612400576001811461241657612449565b60ff198316865281151560200286019350612449565b61241f85611f36565b60005b8381101561244157815481890152600182019150602081019050612422565b808801955050505b50505092915050565b60006040830160008084015490506124698161238a565b61247660008701826123ae565b5060018401858303602087015261248d83826123ce565b925050819250505092915050565b60006124a78383612452565b905092915050565b6000600282019050919050565b60006124c782612342565b6124d1818561234d565b9350836020820285016124e38561235e565b8060005b8581101561251e578484038952816124ff858261249b565b945061250a836124af565b925060208a019950506001810190506124e7565b50829750879550505050505092915050565b600060608201905061254560008301866118d6565b818103602083015261255781856122be565b9050818103604083015261256b81846124bc565b9050949350505050565b600060408201905061258a60008301856117b5565b61259760208301846119f8565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006125d88261172c565b91506125e38361172c565b9250826125f3576125f261259e565b5b828204905092915050565b60006126098261172c565b91506126148361172c565b925082820390508181111561262c5761262b611e25565b5b92915050565b600060029050919050565b600081905092915050565b6000819050919050565b61265b8161172c565b82525050565b600061266d8383612652565b60208301905092915050565b6000602082019050919050565b61268f81612632565b612699818461263d565b92506126a482612648565b8060005b838110156126d55781516126bc8782612661565b96506126c783612679565b9250506001810190506126a8565b505050505050565b6000819050919050565b60006127026126fd6126f8846126dd565b611fba565b61172c565b9050919050565b612712816126e7565b82525050565b600081519050919050565b600082825260208201905092915050565b600061273f82612718565b6127498185612723565b9350612759818560208601611978565b612762816119a2565b840191505092915050565b6000610140820190508181036000830152612788818b6122be565b9050612797602083018a6117b5565b6127a46040830189612686565b6127b16080830188612686565b6127be60c0830187612709565b6127cb60e08301866119f8565b6127d96101008301856119f8565b8181036101208301526127ec8184612734565b90509998505050505050505050565b60008151905061280a81611736565b92915050565b60006020828403121561282657612825611612565b5b6000612834848285016127fb565b91505092915050565b600060808201905061285260008301876117b5565b61285f60208301866118d6565b61286c60408301856117b5565b61287960608301846119f8565b95945050505050565b82818337600083830152505050565b600061289d8385611967565b93506128aa838584612882565b6128b3836119a2565b840190509392505050565b82818337505050565b6128d3606083836128be565b5050565b600060e08201905081810360008301526128f281888a612891565b905061290160208301876118d6565b61290e60408301866128c7565b61291b60a08301856119f8565b81810360c083015261292d8184612734565b9050979650505050505050565b7f6f6e56616c6964617465206d6179206f6e6c792062652063616c6c656420627960008201527f207468652044414f20636f6e7472616374000000000000000000000000000000602082015250565b6000612996603183611967565b91506129a18261293a565b604082019050919050565b600060208201905081810360008301526129c581612989565b9050919050565b600081519050919050565b6000819050602082019050919050565b60006129f28261195c565b6129fc81856123bd565b9350612a0c818560208601611978565b612a15816119a2565b840191505092915050565b6000604083016000830151612a3860008601826123ae565b5060208301518482036020860152612a5082826129e7565b9150508091505092915050565b6000612a698383612a20565b905092915050565b6000602082019050919050565b6000612a89826129cc565b612a93818561234d565b935083602082028501612aa5856129d7565b8060005b85811015612ae15784840389528151612ac28582612a5d565b9450612acd83612a71565b925060208a01995050600181019050612aa9565b50829750879550505050505092915050565b6000606082019050612b0860008301866118d6565b8181036020830152612b1a81856122be565b90508181036040830152612b2e8184612a7e565b9050949350505050565b50565b6000612b48600083612723565b9150612b5382612b38565b600082019050919050565b6000610140820190508181036000830152612b79818a6122be565b9050612b8860208301896117b5565b612b956040830188612686565b612ba26080830187612686565b612baf60c0830186612709565b612bbc60e08301856119f8565b612bca6101008301846119f8565b818103610120830152612bdc81612b3b565b905098975050505050505050565b7f576f726b65722063616e206f6e6c7920657874656e64207468656972206f776e60008201527f20617661696c6162696c697479207374616b6500000000000000000000000000602082015250565b6000612c46603383611967565b9150612c5182612bea565b604082019050919050565b60006020820190508181036000830152612c7581612c39565b9050919050565b7f5374616b652068617320616c7265616479206265656e2061737369676e65642060008201527f776f726b00000000000000000000000000000000000000000000000000000000602082015250565b6000612cd8602483611967565b9150612ce382612c7c565b604082019050919050565b60006020820190508181036000830152612d0781612ccb565b9050919050565b7f537461747573206d757374206265205265717565737465640000000000000000600082015250565b6000612d44601883611967565b9150612d4f82612d0e565b602082019050919050565b60006020820190508181036000830152612d7381612d37565b9050919050565b7f576f726b65722063616e206f6e6c79207375626d69742065766964656e63652060008201527f666f7220776f726b2074686579206172652061737369676e6564000000000000602082015250565b6000612dd6603a83611967565b9150612de182612d7a565b604082019050919050565b60006020820190508181036000830152612e0581612dc9565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600080fd5b600080fd5b600080fd5b600082356001604003833603038112612e6657612e65612e3b565b5b80830191505092915050565b612e7b816123a4565b8114612e8657600080fd5b50565b60008135612e9681612e72565b80915050919050565b60008160001b9050919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff612ed884612e9f565b9350801983169250808416831791505092915050565b6000612f09612f04612eff846123a4565b611fba565b6123a4565b9050919050565b6000819050919050565b612f2382612eee565b612f36612f2f82612f10565b8354612eac565b8255505050565b60008083356001602003843603038112612f5a57612f59612e3b565b5b80840192508235915067ffffffffffffffff821115612f7c57612f7b612e40565b5b602083019250600182023603831315612f9857612f97612e45565b5b509250929050565b612fab8383836120e2565b505050565b600081016000830180612fc281612e89565b9050612fce8184612f1a565b5050506001810160208301612fe38185612f3d565b612fee818386612fa0565b505050505050565b6130008282612fb0565b5050565b7f4e6f20617661696c61626c6520776f726b6572207374616b6573000000000000600082015250565b600061303a601a83611967565b915061304582613004565b602082019050919050565b600060208201905081810360008301526130698161302d565b9050919050565b600061307b8261172c565b91506130868361172c565b9250826130965761309561259e565b5b82820690509291505056fea264697066735822122082a13b6cfe92044167ae3094889be3aae565f8e6e03c615886ff43f98415d1d764736f6c63430008180033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/client/src/assets/Proposals.json b/client/src/assets/Proposals.json index fd6919c..921663f 100644 --- a/client/src/assets/Proposals.json +++ b/client/src/assets/Proposals.json @@ -262,9 +262,9 @@ "type": "uint256" }, { - "internalType": "uint256", - "name": "postIndex", - "type": "uint256" + "internalType": "string", + "name": "postId", + "type": "string" }, { "internalType": "uint256", @@ -348,8 +348,8 @@ "type": "function" } ], - "bytecode": "0x60a06040526040518060600160405280600060ff168152602001600160ff168152602001606460ff1681525060029060036200003d929190620001ef565b5060405180606001604052806000151515158152602001600015151515815260200160011515151581525060059060036200007a92919062000239565b5060405180606001604052806040518060400160405280600160ff168152602001600a60ff1681525081526020016040518060400160405280600160ff168152602001600a60ff1681525081526020016040518060400160405280600160ff168152602001600a60ff168152508152506006906003620000fc929190620002d9565b5060405180606001604052806040518060400160405280600260ff168152602001600360ff1681525081526020016040518060400160405280600260ff168152602001600360ff1681525081526020016040518060400160405280600260ff168152602001600360ff16815250815250600c9060036200017e929190620002d9565b503480156200018c57600080fd5b5060405162003513380380620035138339818101604052810190620001b291906200044e565b808073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1681525050505062000480565b826003810192821562000226579160200282015b8281111562000225578251829060ff1690559160200191906001019062000203565b5b50905062000235919062000331565b5090565b826003601f01602090048101928215620002c65791602002820160005b838211156200029557835183826101000a81548160ff021916908315150217905550926020019260010160208160000104928301926001030262000256565b8015620002c45782816101000a81549060ff021916905560010160208160000104928301926001030262000295565b505b509050620002d5919062000331565b5090565b82600360020281019282156200031e579160200282015b828111156200031d578251829060026200030c92919062000350565b5091602001919060020190620002f0565b5b5090506200032d91906200039a565b5090565b5b808211156200034c57600081600090555060010162000332565b5090565b826002810192821562000387579160200282015b8281111562000386578251829060ff1690559160200191906001019062000364565b5b50905062000396919062000331565b5090565b5b80821115620003be5760008181620003b49190620003c2565b506002016200039b565b5090565b506000815560010160009055565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200040282620003d5565b9050919050565b60006200041682620003f5565b9050919050565b620004288162000409565b81146200043457600080fd5b50565b60008151905062000448816200041d565b92915050565b600060208284031215620004675762000466620003d0565b5b6000620004778482850162000437565b91505092915050565b608051613054620004bf60003960008181610341015281816108df01528181610acb01528181610cc501528181611561015261172f01526130546000f3fe60806040526004361061007b5760003560e01c8063b4e6a1d51161004e578063b4e6a1d51461015b578063c019faab14610198578063da35c664146101c1578063ea923e63146101ec5761007b565b8063013cf08b146100805780632805b5d9146100c557806362d26ed7146100f5578063a3bb24cc14610132575b600080fd5b34801561008c57600080fd5b506100a760048036038101906100a29190611a12565b610229565b6040516100bc99989796959493929190611bb1565b60405180910390f35b6100df60048036038101906100da9190611d7a565b610339565b6040516100ec9190611e36565b60405180910390f35b34801561010157600080fd5b5061011c60048036038101906101179190611a12565b6105a3565b6040516101299190612036565b60405180910390f35b34801561013e57600080fd5b5061015960048036038101906101549190612052565b6108dc565b005b34801561016757600080fd5b50610182600480360381019061017d9190612092565b610ac7565b60405161018f9190611e36565b60405180910390f35b3480156101a457600080fd5b506101bf60048036038101906101ba9190611a12565b61139c565b005b3480156101cd57600080fd5b506101d66114c8565b6040516101e39190611e36565b60405180910390f35b3480156101f857600080fd5b50610213600480360381019061020e9190611a12565b6114ce565b604051610220919061212c565b60405180910390f35b60006020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030154908060040154908060050160009054906101000a900460ff169080600701549080603b0160009054906101000a900460ff169080603c0180546102b690612176565b80601f01602080910402602001604051908101604052809291908181526020018280546102e290612176565b801561032f5780601f106103045761010080835404028352916020019161032f565b820191906000526020600020905b81548152906001019060200180831161031257829003601f168201915b5050505050905089565b6000606060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16634acce591898c8c866040518563ffffffff1660e01b815260040161039e94939291906122eb565b6020604051808303816000875af11580156103bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103e19190612347565b9050600160008154809291906103f6906123a3565b91905055925060008060008581526020019081526020016000209050338160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508181600301819055504281600401819055508760006003811061047b5761047a6123eb565b5b602002013581600801600060038110610497576104966123eb565b5b6011020160000181905550876001600381106104b6576104b56123eb565b5b6020020135816008016001600381106104d2576104d16123eb565b5b6011020160000181905550876002600381106104f1576104f06123eb565b5b60200201358160080160026003811061050d5761050c6123eb565b5b6011020160000181905550348160010181905550806001015481600201819055508681603b0160006101000a81548160ff021916908315150217905550858582603c01918261055d929190612600565b507f9a863892f20a6b9c6cec64d611b5864be6373191ce2cacc3b05a299bce3bf80e8460405161058d9190611e36565b60405180910390a1505050979650505050505050565b6105ab611933565b60008060008481526020019081526020016000209050806008016000600381106105d8576105d76123eb565b5b60110201600101600380602002604051908101604052809291906000905b828210156106a8578382600502016040518060e0016040529081600082015481526020016001820160009054906101000a900460ff161515151581526020016001820160019054906101000a900460ff1615151515815260200160028201548152602001600382015481526020016004820160009054906101000a900460ff161515151581526020016004820160019054906101000a900460ff161515151581525050815260200190600101906105f6565b50505050826000600381106106c0576106bf6123eb565b5b6020020181905250806008016001600381106106df576106de6123eb565b5b60110201600101600380602002604051908101604052809291906000905b828210156107af578382600502016040518060e0016040529081600082015481526020016001820160009054906101000a900460ff161515151581526020016001820160019054906101000a900460ff1615151515815260200160028201548152602001600382015481526020016004820160009054906101000a900460ff161515151581526020016004820160019054906101000a900460ff161515151581525050815260200190600101906106fd565b50505050826001600381106107c7576107c66123eb565b5b6020020181905250806008016002600381106107e6576107e56123eb565b5b60110201600101600380602002604051908101604052809291906000905b828210156108b6578382600502016040518060e0016040529081600082015481526020016001820160009054906101000a900460ff161515151581526020016001820160019054906101000a900460ff1615151515815260200160028201548152602001600382015481526020016004820160009054906101000a900460ff161515151581526020016004820160019054906101000a900460ff16151515158152505081526020019060010190610804565b50505050826002600381106108ce576108cd6123eb565b5b602002018190525050919050565b807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b815260040161093691906126d0565b602060405180830381865afa158015610953573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109779190612347565b10156109b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109af9061275d565b60405180910390fd5b600080600084815260200190815260200160002090508060060160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054816007016000828254610a23919061277d565b92505081905550818160060160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081816007016000828254610a8491906127b1565b925050819055507fc23775ba00d23f337b9f790bd67eb5194aa9b95876933f9ccd1887becbb55ccb83604051610aba9190611e36565b60405180910390a1505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610b57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4e90612857565b60405180910390fd5b60008060008585810190610b6b9190612877565b925092509250600080600085815260200190815260200160002090506000816008018460038110610b9f57610b9e6123eb565b5b601102019050600081600101826010015460038110610bc157610bc06123eb565b5b60050201905060018160010160016101000a81548160ff0219169083151502179055508a81600201819055508981600301819055508b8160040160016101000a81548160ff0219169083151502179055508c8160040160006101000a81548160ff0219169083151502179055508b610cc15760048360050160006101000a81548160ff02191690836005811115610c5b57610c5a611a8f565b5b02179055507f2a15f4605f8e68cbaccd2234253a8189163d500a6f60c1751405443ca1562beb86604051610c8f9190612916565b60405180910390a183836002016000828254610cab91906127b1565b9250508190555060019650505050505050611392565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d529190612347565b8b8d610d5e91906127b1565b6002610d6a9190612944565b1015905060016005811115610d8257610d81611a8f565b5b8460050160009054906101000a900460ff166005811115610da657610da5611a8f565b5b03610ec75760008614610dee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de5906129d2565b60405180910390fd5b8d8015610df85750805b15610e2f5760028460050160006101000a81548160ff02191690836005811115610e2557610e24611a8f565b5b0217905550610ec2565b6002836010015410610ea45760048460050160006101000a81548160ff02191690836005811115610e6357610e62611a8f565b5b02179055507f2a15f4605f8e68cbaccd2234253a8189163d500a6f60c1751405443ca1562beb87604051610e979190612a3e565b60405180910390a1610ec1565b6001836010016000828254610eb991906127b1565b925050819055505b5b61126e565b60026005811115610edb57610eda611a8f565b5b8460050160009054906101000a900460ff166005811115610eff57610efe611a8f565b5b036110205760018614610f47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3e90612ab8565b60405180910390fd5b8d8015610f515750805b15610f885760038460050160006101000a81548160ff02191690836005811115610f7e57610f7d611a8f565b5b021790555061101b565b6002836010015410610ffd5760048460050160006101000a81548160ff02191690836005811115610fbc57610fbb611a8f565b5b02179055507f2a15f4605f8e68cbaccd2234253a8189163d500a6f60c1751405443ca1562beb87604051610ff09190612a3e565b60405180910390a161101a565b600183601001600082825461101291906127b1565b925050819055505b5b61126d565b6003600581111561103457611033611a8f565b5b8460050160009054906101000a900460ff16600581111561105857611057611a8f565b5b0361126c57600286146110a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109790612b24565b60405180910390fd5b8d80156110aa5750805b156111d85760058460050160006101000a81548160ff021916908360058111156110d7576110d6611a8f565b5b02179055507fd24c2047577899547bacebb29e319fc7d73f6712b5adb401d45556f34bb2aa3b8760405161110b9190611e36565b60405180910390a183603b0160009054906101000a900460ff16156111d3578360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663815a05728d8d87603c016040518463ffffffff1660e01b815260040161118e93929190612bc8565b6020604051808303816000875af11580156111ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111d19190612347565b505b61126b565b600283601001541061124d5760048460050160006101000a81548160ff0219169083600581111561120c5761120b611a8f565b5b02179055507f2a15f4605f8e68cbaccd2234253a8189163d500a6f60c1751405443ca1562beb876040516112409190612a3e565b60405180910390a161126a565b600183601001600082825461126291906127b1565b925050819055505b5b5b5b5b6001600581111561128257611281611a8f565b5b8460050160009054906101000a900460ff1660058111156112a6576112a5611a8f565b5b036112cc576112c7876000600a87600101546112c29190612c35565b6116fa565b611386565b600260058111156112e0576112df611a8f565b5b8460050160009054906101000a900460ff16600581111561130457611303611a8f565b5b0361132a57611325876001600a87600101546113209190612c35565b6116fa565b611385565b6003600581111561133e5761133d611a8f565b5b8460050160009054906101000a900460ff16600581111561136257611361611a8f565b5b0361138457611383876002600a876001015461137e9190612c35565b6116fa565b5b5b5b60009750505050505050505b9695505050505050565b60008060008381526020019081526020016000209050600460058111156113c6576113c5611a8f565b5b8160050160009054906101000a900460ff1660058111156113ea576113e9611a8f565b5b148061142a575060058081111561140457611403611a8f565b5b8160050160009054906101000a900460ff16600581111561142857611427611a8f565b5b145b611469576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146090612cfe565b60405180910390fd5b600081600201549050600082600201819055503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156114c2573d6000803e3d6000fd5b50505050565b60015481565b6000806000808481526020019081526020016000209050600060058111156114f9576114f8611a8f565b5b8160050160009054906101000a900460ff16600581111561151d5761151c611a8f565b5b1461155d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155490612d90565b60405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115ee9190612347565b8260070154600a6115ff9190612944565b1015905060006301e13380836004015461161991906127b1565b42119050816116a45780156116985760048360050160006101000a81548160ff021916908360058111156116505761164f611a8f565b5b02179055507f2a15f4605f8e68cbaccd2234253a8189163d500a6f60c1751405443ca1562beb856040516116849190612e22565b60405180910390a1600093505050506116f5565b600093505050506116f5565b60018360050160006101000a81548160ff021916908360058111156116cc576116cb611a8f565b5b02179055506116ed856000600a86600101546116e89190612c35565b6116fa565b600193505050505b919050565b6000806000858152602001908152602001600020905081816002016000828254611724919061277d565b9250508190555060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637fcf6759848460030154856008018860038110611785576117846123eb565b5b6011020160000154600689600381106117a1576117a06123eb565b5b60020201600c8a600381106117b9576117b86123eb565b5b6002020160028b600381106117d1576117d06123eb565b5b015460058c600381106117e7576117e66123eb565b5b602091828204019190069054906101000a900460ff1660018e8e8e60405160200161181493929190612e50565b6040516020818303038152906040526040518a63ffffffff1660e01b8152600401611846989796959493929190612f6e565b60206040518083038185885af1158015611864573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906118899190612347565b905060008260080185600381106118a3576118a26123eb565b5b6011020190506000816001018260100154600381106118c5576118c46123eb565b5b60050201905082816000018190555060018160010160006101000a81548160ff0219169083151502179055507f4c14e16a98683e5b8bd70d51192048d0499fb3999b27ff1e9dce7e4a2c6734798784604051611922929190612ff5565b60405180910390a150505050505050565b60405180606001604052806003905b61194a611960565b8152602001906001900390816119425790505090565b60405180606001604052806003905b61197761198d565b81526020019060019003908161196f5790505090565b6040518060e001604052806000815260200160001515815260200160001515815260200160008152602001600081526020016000151581526020016000151581525090565b600080fd5b600080fd5b6000819050919050565b6119ef816119dc565b81146119fa57600080fd5b50565b600081359050611a0c816119e6565b92915050565b600060208284031215611a2857611a276119d2565b5b6000611a36848285016119fd565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611a6a82611a3f565b9050919050565b611a7a81611a5f565b82525050565b611a89816119dc565b82525050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60068110611acf57611ace611a8f565b5b50565b6000819050611ae082611abe565b919050565b6000611af082611ad2565b9050919050565b611b0081611ae5565b82525050565b60008115159050919050565b611b1b81611b06565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611b5b578082015181840152602081019050611b40565b60008484015250505050565b6000601f19601f8301169050919050565b6000611b8382611b21565b611b8d8185611b2c565b9350611b9d818560208601611b3d565b611ba681611b67565b840191505092915050565b600061012082019050611bc7600083018c611a71565b611bd4602083018b611a80565b611be1604083018a611a80565b611bee6060830189611a80565b611bfb6080830188611a80565b611c0860a0830187611af7565b611c1560c0830186611a80565b611c2260e0830185611b12565b818103610100830152611c358184611b78565b90509a9950505050505050505050565b600080fd5b600080fd5b600080fd5b60008083601f840112611c6a57611c69611c45565b5b8235905067ffffffffffffffff811115611c8757611c86611c4a565b5b602083019150836001820283011115611ca357611ca2611c4f565b5b9250929050565b611cb381611a5f565b8114611cbe57600080fd5b50565b600081359050611cd081611caa565b92915050565b600081905082602060030282011115611cf257611cf1611c4f565b5b92915050565b611d0181611b06565b8114611d0c57600080fd5b50565b600081359050611d1e81611cf8565b92915050565b60008083601f840112611d3a57611d39611c45565b5b8235905067ffffffffffffffff811115611d5757611d56611c4a565b5b602083019150836001820283011115611d7357611d72611c4f565b5b9250929050565b600080600080600080600060e0888a031215611d9957611d986119d2565b5b600088013567ffffffffffffffff811115611db757611db66119d7565b5b611dc38a828b01611c54565b97509750506020611dd68a828b01611cc1565b9550506040611de78a828b01611cd6565b94505060a0611df88a828b01611d0f565b93505060c088013567ffffffffffffffff811115611e1957611e186119d7565b5b611e258a828b01611d24565b925092505092959891949750929550565b6000602082019050611e4b6000830184611a80565b92915050565b600060039050919050565b600081905092915050565b6000819050919050565b600060039050919050565b600081905092915050565b6000819050919050565b611e9a816119dc565b82525050565b611ea981611b06565b82525050565b60e082016000820151611ec56000850182611e91565b506020820151611ed86020850182611ea0565b506040820151611eeb6040850182611ea0565b506060820151611efe6060850182611e91565b506080820151611f116080850182611e91565b5060a0820151611f2460a0850182611ea0565b5060c0820151611f3760c0850182611ea0565b50505050565b6000611f498383611eaf565b60e08301905092915050565b6000602082019050919050565b611f6b81611e71565b611f758184611e7c565b9250611f8082611e87565b8060005b83811015611fb1578151611f988782611f3d565b9650611fa383611f55565b925050600181019050611f84565b505050505050565b6000611fc58383611f62565b6102a08301905092915050565b6000602082019050919050565b611fe881611e51565b611ff28184611e5c565b9250611ffd82611e67565b8060005b8381101561202e5781516120158782611fb9565b965061202083611fd2565b925050600181019050612001565b505050505050565b60006107e08201905061204c6000830184611fdf565b92915050565b60008060408385031215612069576120686119d2565b5b6000612077858286016119fd565b9250506020612088858286016119fd565b9150509250929050565b60008060008060008060a087890312156120af576120ae6119d2565b5b60006120bd89828a01611d0f565b96505060206120ce89828a01611d0f565b95505060406120df89828a016119fd565b94505060606120f089828a016119fd565b935050608087013567ffffffffffffffff811115612111576121106119d7565b5b61211d89828a01611d24565b92509250509295509295509295565b60006020820190506121416000830184611b12565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061218e57607f821691505b6020821081036121a1576121a0612147565b5b50919050565b600082825260208201905092915050565b82818337600083830152505050565b60006121d383856121a7565b93506121e08385846121b8565b6121e983611b67565b840190509392505050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6000819050919050565b61223381612220565b82525050565b60408201600082015161224f600085018261222a565b5060208201516122626020850182611e91565b50505050565b60006122748383612239565b60408301905092915050565b6000602082019050919050565b6000612298826121f4565b6122a281856121ff565b93506122ad83612210565b8060005b838110156122de5781516122c58882612268565b97506122d083612280565b9250506001810190506122b1565b5085935050505092915050565b60006060820190506123006000830187611a71565b81810360208301526123138185876121c7565b90508181036040830152612327818461228d565b905095945050505050565b600081519050612341816119e6565b92915050565b60006020828403121561235d5761235c6119d2565b5b600061236b84828501612332565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006123ae826119dc565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036123e0576123df612374565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026124b67fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82612479565b6124c08683612479565b95508019841693508086168417925050509392505050565b6000819050919050565b60006124fd6124f86124f3846119dc565b6124d8565b6119dc565b9050919050565b6000819050919050565b612517836124e2565b61252b61252382612504565b848454612486565b825550505050565b600090565b612540612533565b61254b81848461250e565b505050565b5b8181101561256f57612564600082612538565b600181019050612551565b5050565b601f8211156125b45761258581612454565b61258e84612469565b8101602085101561259d578190505b6125b16125a985612469565b830182612550565b50505b505050565b600082821c905092915050565b60006125d7600019846008026125b9565b1980831691505092915050565b60006125f083836125c6565b9150826002028217905092915050565b61260a838361241a565b67ffffffffffffffff81111561262357612622612425565b5b61262d8254612176565b612638828285612573565b6000601f8311600181146126675760008415612655578287013590505b61265f85826125e4565b8655506126c7565b601f19841661267586612454565b60005b8281101561269d57848901358255600182019150602085019450602081019050612678565b868310156126ba57848901356126b6601f8916826125c6565b8355505b6001600288020188555050505b50505050505050565b60006020820190506126e56000830184611a71565b92915050565b7f53656e6465722068617320696e73756666696369656e74205245502062616c6160008201527f6e63650000000000000000000000000000000000000000000000000000000000602082015250565b60006127476023836121a7565b9150612752826126eb565b604082019050919050565b600060208201905081810360008301526127768161273a565b9050919050565b6000612788826119dc565b9150612793836119dc565b92508282039050818111156127ab576127aa612374565b5b92915050565b60006127bc826119dc565b91506127c7836119dc565b92508282019050808211156127df576127de612374565b5b92915050565b7f6f6e56616c6964617465206d6179206f6e6c792062652063616c6c656420627960008201527f207468652044414f20636f6e7472616374000000000000000000000000000000602082015250565b60006128416031836121a7565b915061284c826127e5565b604082019050919050565b6000602082019050818103600083015261287081612834565b9050919050565b6000806000606084860312156128905761288f6119d2565b5b600061289e868287016119fd565b93505060206128af868287016119fd565b92505060406128c0868287016119fd565b9150509250925092565b7f51756f72756d206e6f74206d6574000000000000000000000000000000000000600082015250565b6000612900600e836121a7565b915061290b826128ca565b602082019050919050565b600060408201905061292b6000830184611a80565b818103602083015261293c816128f3565b905092915050565b600061294f826119dc565b915061295a836119dc565b9250828202612968816119dc565b9150828204841483151761297f5761297e612374565b5b5092915050565b7f5374616765203020696e646578206d69736d6174636800000000000000000000600082015250565b60006129bc6016836121a7565b91506129c782612986565b602082019050919050565b600060208201905081810360008301526129eb816129af565b9050919050565b7f526574727920636f756e74206578636565646564000000000000000000000000600082015250565b6000612a286014836121a7565b9150612a33826129f2565b602082019050919050565b6000604082019050612a536000830184611a80565b8181036020830152612a6481612a1b565b905092915050565b7f5374616765203120696e646578206d69736d6174636800000000000000000000600082015250565b6000612aa26016836121a7565b9150612aad82612a6c565b602082019050919050565b60006020820190508181036000830152612ad181612a95565b9050919050565b7f5374616765203220696e646578206d69736d6174636800000000000000000000600082015250565b6000612b0e6016836121a7565b9150612b1982612ad8565b602082019050919050565b60006020820190508181036000830152612b3d81612b01565b9050919050565b60008154612b5181612176565b612b5b8186611b2c565b94506001821660008114612b765760018114612b8c57612bbf565b60ff198316865281151560200286019350612bbf565b612b9585612454565b60005b83811015612bb757815481890152600182019150602081019050612b98565b808801955050505b50505092915050565b6000606082019050612bdd6000830186611a80565b612bea6020830185611a80565b8181036040830152612bfc8184612b44565b9050949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612c40826119dc565b9150612c4b836119dc565b925082612c5b57612c5a612c06565b5b828204905092915050565b7f52656d61696e696e6720666565732063616e206f6e6c79206265207265636c6160008201527f696d6564207768656e2070726f706f73616c20686173206265656e206163636560208201527f70746564206f72206661696c6564000000000000000000000000000000000000604082015250565b6000612ce8604e836121a7565b9150612cf382612c66565b606082019050919050565b60006020820190508181036000830152612d1781612cdb565b9050919050565b7f4174746573746174696f6e206f6e6c79207065727461696e7320746f2050726f60008201527f706f73616c207374616765000000000000000000000000000000000000000000602082015250565b6000612d7a602b836121a7565b9150612d8582612d1e565b604082019050919050565b60006020820190508181036000830152612da981612d6d565b9050919050565b7f4578706972656420776974686f7574206d656574696e6720617474657374617460008201527f696f6e207468726573686f6c6400000000000000000000000000000000000000602082015250565b6000612e0c602d836121a7565b9150612e1782612db0565b604082019050919050565b6000604082019050612e376000830184611a80565b8181036020830152612e4881612dff565b905092915050565b6000606082019050612e656000830186611a80565b612e726020830185611a80565b612e7f6040830184611a80565b949350505050565b600060029050919050565b600081905092915050565b6000819050919050565b6000612eb38383611e91565b60208301905092915050565b60008160001c9050919050565b6000819050919050565b6000612ee9612ee483612ebf565b612ecc565b9050919050565b6000612efc8254612ed6565b9050919050565b6000600182019050919050565b612f1981612e87565b612f238184612e92565b9250612f2e82612e9d565b8060005b83811015612f6657612f4382612ef0565b612f4d8782612ea7565b9650612f5883612f03565b925050600181019050612f32565b505050505050565b600061014082019050612f84600083018b611a80565b612f91602083018a611a80565b612f9e6040830189612f10565b612fab6080830188612f10565b612fb860c0830187611a80565b612fc560e0830186611b12565b612fd3610100830185611b12565b818103610120830152612fe68184611b78565b90509998505050505050505050565b600060408201905061300a6000830185611a80565b6130176020830184611a80565b939250505056fea26469706673582212209b3d56e380ed93011f6f637450bfb2b12bae98395a6121e825604d3276f250b464736f6c63430008180033", - "deployedBytecode": "0x60806040526004361061007b5760003560e01c8063b4e6a1d51161004e578063b4e6a1d51461015b578063c019faab14610198578063da35c664146101c1578063ea923e63146101ec5761007b565b8063013cf08b146100805780632805b5d9146100c557806362d26ed7146100f5578063a3bb24cc14610132575b600080fd5b34801561008c57600080fd5b506100a760048036038101906100a29190611a12565b610229565b6040516100bc99989796959493929190611bb1565b60405180910390f35b6100df60048036038101906100da9190611d7a565b610339565b6040516100ec9190611e36565b60405180910390f35b34801561010157600080fd5b5061011c60048036038101906101179190611a12565b6105a3565b6040516101299190612036565b60405180910390f35b34801561013e57600080fd5b5061015960048036038101906101549190612052565b6108dc565b005b34801561016757600080fd5b50610182600480360381019061017d9190612092565b610ac7565b60405161018f9190611e36565b60405180910390f35b3480156101a457600080fd5b506101bf60048036038101906101ba9190611a12565b61139c565b005b3480156101cd57600080fd5b506101d66114c8565b6040516101e39190611e36565b60405180910390f35b3480156101f857600080fd5b50610213600480360381019061020e9190611a12565b6114ce565b604051610220919061212c565b60405180910390f35b60006020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030154908060040154908060050160009054906101000a900460ff169080600701549080603b0160009054906101000a900460ff169080603c0180546102b690612176565b80601f01602080910402602001604051908101604052809291908181526020018280546102e290612176565b801561032f5780601f106103045761010080835404028352916020019161032f565b820191906000526020600020905b81548152906001019060200180831161031257829003601f168201915b5050505050905089565b6000606060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16634acce591898c8c866040518563ffffffff1660e01b815260040161039e94939291906122eb565b6020604051808303816000875af11580156103bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103e19190612347565b9050600160008154809291906103f6906123a3565b91905055925060008060008581526020019081526020016000209050338160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508181600301819055504281600401819055508760006003811061047b5761047a6123eb565b5b602002013581600801600060038110610497576104966123eb565b5b6011020160000181905550876001600381106104b6576104b56123eb565b5b6020020135816008016001600381106104d2576104d16123eb565b5b6011020160000181905550876002600381106104f1576104f06123eb565b5b60200201358160080160026003811061050d5761050c6123eb565b5b6011020160000181905550348160010181905550806001015481600201819055508681603b0160006101000a81548160ff021916908315150217905550858582603c01918261055d929190612600565b507f9a863892f20a6b9c6cec64d611b5864be6373191ce2cacc3b05a299bce3bf80e8460405161058d9190611e36565b60405180910390a1505050979650505050505050565b6105ab611933565b60008060008481526020019081526020016000209050806008016000600381106105d8576105d76123eb565b5b60110201600101600380602002604051908101604052809291906000905b828210156106a8578382600502016040518060e0016040529081600082015481526020016001820160009054906101000a900460ff161515151581526020016001820160019054906101000a900460ff1615151515815260200160028201548152602001600382015481526020016004820160009054906101000a900460ff161515151581526020016004820160019054906101000a900460ff161515151581525050815260200190600101906105f6565b50505050826000600381106106c0576106bf6123eb565b5b6020020181905250806008016001600381106106df576106de6123eb565b5b60110201600101600380602002604051908101604052809291906000905b828210156107af578382600502016040518060e0016040529081600082015481526020016001820160009054906101000a900460ff161515151581526020016001820160019054906101000a900460ff1615151515815260200160028201548152602001600382015481526020016004820160009054906101000a900460ff161515151581526020016004820160019054906101000a900460ff161515151581525050815260200190600101906106fd565b50505050826001600381106107c7576107c66123eb565b5b6020020181905250806008016002600381106107e6576107e56123eb565b5b60110201600101600380602002604051908101604052809291906000905b828210156108b6578382600502016040518060e0016040529081600082015481526020016001820160009054906101000a900460ff161515151581526020016001820160019054906101000a900460ff1615151515815260200160028201548152602001600382015481526020016004820160009054906101000a900460ff161515151581526020016004820160019054906101000a900460ff16151515158152505081526020019060010190610804565b50505050826002600381106108ce576108cd6123eb565b5b602002018190525050919050565b807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b815260040161093691906126d0565b602060405180830381865afa158015610953573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109779190612347565b10156109b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109af9061275d565b60405180910390fd5b600080600084815260200190815260200160002090508060060160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054816007016000828254610a23919061277d565b92505081905550818160060160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081816007016000828254610a8491906127b1565b925050819055507fc23775ba00d23f337b9f790bd67eb5194aa9b95876933f9ccd1887becbb55ccb83604051610aba9190611e36565b60405180910390a1505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610b57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4e90612857565b60405180910390fd5b60008060008585810190610b6b9190612877565b925092509250600080600085815260200190815260200160002090506000816008018460038110610b9f57610b9e6123eb565b5b601102019050600081600101826010015460038110610bc157610bc06123eb565b5b60050201905060018160010160016101000a81548160ff0219169083151502179055508a81600201819055508981600301819055508b8160040160016101000a81548160ff0219169083151502179055508c8160040160006101000a81548160ff0219169083151502179055508b610cc15760048360050160006101000a81548160ff02191690836005811115610c5b57610c5a611a8f565b5b02179055507f2a15f4605f8e68cbaccd2234253a8189163d500a6f60c1751405443ca1562beb86604051610c8f9190612916565b60405180910390a183836002016000828254610cab91906127b1565b9250508190555060019650505050505050611392565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d529190612347565b8b8d610d5e91906127b1565b6002610d6a9190612944565b1015905060016005811115610d8257610d81611a8f565b5b8460050160009054906101000a900460ff166005811115610da657610da5611a8f565b5b03610ec75760008614610dee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de5906129d2565b60405180910390fd5b8d8015610df85750805b15610e2f5760028460050160006101000a81548160ff02191690836005811115610e2557610e24611a8f565b5b0217905550610ec2565b6002836010015410610ea45760048460050160006101000a81548160ff02191690836005811115610e6357610e62611a8f565b5b02179055507f2a15f4605f8e68cbaccd2234253a8189163d500a6f60c1751405443ca1562beb87604051610e979190612a3e565b60405180910390a1610ec1565b6001836010016000828254610eb991906127b1565b925050819055505b5b61126e565b60026005811115610edb57610eda611a8f565b5b8460050160009054906101000a900460ff166005811115610eff57610efe611a8f565b5b036110205760018614610f47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3e90612ab8565b60405180910390fd5b8d8015610f515750805b15610f885760038460050160006101000a81548160ff02191690836005811115610f7e57610f7d611a8f565b5b021790555061101b565b6002836010015410610ffd5760048460050160006101000a81548160ff02191690836005811115610fbc57610fbb611a8f565b5b02179055507f2a15f4605f8e68cbaccd2234253a8189163d500a6f60c1751405443ca1562beb87604051610ff09190612a3e565b60405180910390a161101a565b600183601001600082825461101291906127b1565b925050819055505b5b61126d565b6003600581111561103457611033611a8f565b5b8460050160009054906101000a900460ff16600581111561105857611057611a8f565b5b0361126c57600286146110a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109790612b24565b60405180910390fd5b8d80156110aa5750805b156111d85760058460050160006101000a81548160ff021916908360058111156110d7576110d6611a8f565b5b02179055507fd24c2047577899547bacebb29e319fc7d73f6712b5adb401d45556f34bb2aa3b8760405161110b9190611e36565b60405180910390a183603b0160009054906101000a900460ff16156111d3578360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663815a05728d8d87603c016040518463ffffffff1660e01b815260040161118e93929190612bc8565b6020604051808303816000875af11580156111ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111d19190612347565b505b61126b565b600283601001541061124d5760048460050160006101000a81548160ff0219169083600581111561120c5761120b611a8f565b5b02179055507f2a15f4605f8e68cbaccd2234253a8189163d500a6f60c1751405443ca1562beb876040516112409190612a3e565b60405180910390a161126a565b600183601001600082825461126291906127b1565b925050819055505b5b5b5b5b6001600581111561128257611281611a8f565b5b8460050160009054906101000a900460ff1660058111156112a6576112a5611a8f565b5b036112cc576112c7876000600a87600101546112c29190612c35565b6116fa565b611386565b600260058111156112e0576112df611a8f565b5b8460050160009054906101000a900460ff16600581111561130457611303611a8f565b5b0361132a57611325876001600a87600101546113209190612c35565b6116fa565b611385565b6003600581111561133e5761133d611a8f565b5b8460050160009054906101000a900460ff16600581111561136257611361611a8f565b5b0361138457611383876002600a876001015461137e9190612c35565b6116fa565b5b5b5b60009750505050505050505b9695505050505050565b60008060008381526020019081526020016000209050600460058111156113c6576113c5611a8f565b5b8160050160009054906101000a900460ff1660058111156113ea576113e9611a8f565b5b148061142a575060058081111561140457611403611a8f565b5b8160050160009054906101000a900460ff16600581111561142857611427611a8f565b5b145b611469576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146090612cfe565b60405180910390fd5b600081600201549050600082600201819055503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156114c2573d6000803e3d6000fd5b50505050565b60015481565b6000806000808481526020019081526020016000209050600060058111156114f9576114f8611a8f565b5b8160050160009054906101000a900460ff16600581111561151d5761151c611a8f565b5b1461155d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155490612d90565b60405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115ee9190612347565b8260070154600a6115ff9190612944565b1015905060006301e13380836004015461161991906127b1565b42119050816116a45780156116985760048360050160006101000a81548160ff021916908360058111156116505761164f611a8f565b5b02179055507f2a15f4605f8e68cbaccd2234253a8189163d500a6f60c1751405443ca1562beb856040516116849190612e22565b60405180910390a1600093505050506116f5565b600093505050506116f5565b60018360050160006101000a81548160ff021916908360058111156116cc576116cb611a8f565b5b02179055506116ed856000600a86600101546116e89190612c35565b6116fa565b600193505050505b919050565b6000806000858152602001908152602001600020905081816002016000828254611724919061277d565b9250508190555060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637fcf6759848460030154856008018860038110611785576117846123eb565b5b6011020160000154600689600381106117a1576117a06123eb565b5b60020201600c8a600381106117b9576117b86123eb565b5b6002020160028b600381106117d1576117d06123eb565b5b015460058c600381106117e7576117e66123eb565b5b602091828204019190069054906101000a900460ff1660018e8e8e60405160200161181493929190612e50565b6040516020818303038152906040526040518a63ffffffff1660e01b8152600401611846989796959493929190612f6e565b60206040518083038185885af1158015611864573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906118899190612347565b905060008260080185600381106118a3576118a26123eb565b5b6011020190506000816001018260100154600381106118c5576118c46123eb565b5b60050201905082816000018190555060018160010160006101000a81548160ff0219169083151502179055507f4c14e16a98683e5b8bd70d51192048d0499fb3999b27ff1e9dce7e4a2c6734798784604051611922929190612ff5565b60405180910390a150505050505050565b60405180606001604052806003905b61194a611960565b8152602001906001900390816119425790505090565b60405180606001604052806003905b61197761198d565b81526020019060019003908161196f5790505090565b6040518060e001604052806000815260200160001515815260200160001515815260200160008152602001600081526020016000151581526020016000151581525090565b600080fd5b600080fd5b6000819050919050565b6119ef816119dc565b81146119fa57600080fd5b50565b600081359050611a0c816119e6565b92915050565b600060208284031215611a2857611a276119d2565b5b6000611a36848285016119fd565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611a6a82611a3f565b9050919050565b611a7a81611a5f565b82525050565b611a89816119dc565b82525050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60068110611acf57611ace611a8f565b5b50565b6000819050611ae082611abe565b919050565b6000611af082611ad2565b9050919050565b611b0081611ae5565b82525050565b60008115159050919050565b611b1b81611b06565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611b5b578082015181840152602081019050611b40565b60008484015250505050565b6000601f19601f8301169050919050565b6000611b8382611b21565b611b8d8185611b2c565b9350611b9d818560208601611b3d565b611ba681611b67565b840191505092915050565b600061012082019050611bc7600083018c611a71565b611bd4602083018b611a80565b611be1604083018a611a80565b611bee6060830189611a80565b611bfb6080830188611a80565b611c0860a0830187611af7565b611c1560c0830186611a80565b611c2260e0830185611b12565b818103610100830152611c358184611b78565b90509a9950505050505050505050565b600080fd5b600080fd5b600080fd5b60008083601f840112611c6a57611c69611c45565b5b8235905067ffffffffffffffff811115611c8757611c86611c4a565b5b602083019150836001820283011115611ca357611ca2611c4f565b5b9250929050565b611cb381611a5f565b8114611cbe57600080fd5b50565b600081359050611cd081611caa565b92915050565b600081905082602060030282011115611cf257611cf1611c4f565b5b92915050565b611d0181611b06565b8114611d0c57600080fd5b50565b600081359050611d1e81611cf8565b92915050565b60008083601f840112611d3a57611d39611c45565b5b8235905067ffffffffffffffff811115611d5757611d56611c4a565b5b602083019150836001820283011115611d7357611d72611c4f565b5b9250929050565b600080600080600080600060e0888a031215611d9957611d986119d2565b5b600088013567ffffffffffffffff811115611db757611db66119d7565b5b611dc38a828b01611c54565b97509750506020611dd68a828b01611cc1565b9550506040611de78a828b01611cd6565b94505060a0611df88a828b01611d0f565b93505060c088013567ffffffffffffffff811115611e1957611e186119d7565b5b611e258a828b01611d24565b925092505092959891949750929550565b6000602082019050611e4b6000830184611a80565b92915050565b600060039050919050565b600081905092915050565b6000819050919050565b600060039050919050565b600081905092915050565b6000819050919050565b611e9a816119dc565b82525050565b611ea981611b06565b82525050565b60e082016000820151611ec56000850182611e91565b506020820151611ed86020850182611ea0565b506040820151611eeb6040850182611ea0565b506060820151611efe6060850182611e91565b506080820151611f116080850182611e91565b5060a0820151611f2460a0850182611ea0565b5060c0820151611f3760c0850182611ea0565b50505050565b6000611f498383611eaf565b60e08301905092915050565b6000602082019050919050565b611f6b81611e71565b611f758184611e7c565b9250611f8082611e87565b8060005b83811015611fb1578151611f988782611f3d565b9650611fa383611f55565b925050600181019050611f84565b505050505050565b6000611fc58383611f62565b6102a08301905092915050565b6000602082019050919050565b611fe881611e51565b611ff28184611e5c565b9250611ffd82611e67565b8060005b8381101561202e5781516120158782611fb9565b965061202083611fd2565b925050600181019050612001565b505050505050565b60006107e08201905061204c6000830184611fdf565b92915050565b60008060408385031215612069576120686119d2565b5b6000612077858286016119fd565b9250506020612088858286016119fd565b9150509250929050565b60008060008060008060a087890312156120af576120ae6119d2565b5b60006120bd89828a01611d0f565b96505060206120ce89828a01611d0f565b95505060406120df89828a016119fd565b94505060606120f089828a016119fd565b935050608087013567ffffffffffffffff811115612111576121106119d7565b5b61211d89828a01611d24565b92509250509295509295509295565b60006020820190506121416000830184611b12565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061218e57607f821691505b6020821081036121a1576121a0612147565b5b50919050565b600082825260208201905092915050565b82818337600083830152505050565b60006121d383856121a7565b93506121e08385846121b8565b6121e983611b67565b840190509392505050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6000819050919050565b61223381612220565b82525050565b60408201600082015161224f600085018261222a565b5060208201516122626020850182611e91565b50505050565b60006122748383612239565b60408301905092915050565b6000602082019050919050565b6000612298826121f4565b6122a281856121ff565b93506122ad83612210565b8060005b838110156122de5781516122c58882612268565b97506122d083612280565b9250506001810190506122b1565b5085935050505092915050565b60006060820190506123006000830187611a71565b81810360208301526123138185876121c7565b90508181036040830152612327818461228d565b905095945050505050565b600081519050612341816119e6565b92915050565b60006020828403121561235d5761235c6119d2565b5b600061236b84828501612332565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006123ae826119dc565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036123e0576123df612374565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026124b67fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82612479565b6124c08683612479565b95508019841693508086168417925050509392505050565b6000819050919050565b60006124fd6124f86124f3846119dc565b6124d8565b6119dc565b9050919050565b6000819050919050565b612517836124e2565b61252b61252382612504565b848454612486565b825550505050565b600090565b612540612533565b61254b81848461250e565b505050565b5b8181101561256f57612564600082612538565b600181019050612551565b5050565b601f8211156125b45761258581612454565b61258e84612469565b8101602085101561259d578190505b6125b16125a985612469565b830182612550565b50505b505050565b600082821c905092915050565b60006125d7600019846008026125b9565b1980831691505092915050565b60006125f083836125c6565b9150826002028217905092915050565b61260a838361241a565b67ffffffffffffffff81111561262357612622612425565b5b61262d8254612176565b612638828285612573565b6000601f8311600181146126675760008415612655578287013590505b61265f85826125e4565b8655506126c7565b601f19841661267586612454565b60005b8281101561269d57848901358255600182019150602085019450602081019050612678565b868310156126ba57848901356126b6601f8916826125c6565b8355505b6001600288020188555050505b50505050505050565b60006020820190506126e56000830184611a71565b92915050565b7f53656e6465722068617320696e73756666696369656e74205245502062616c6160008201527f6e63650000000000000000000000000000000000000000000000000000000000602082015250565b60006127476023836121a7565b9150612752826126eb565b604082019050919050565b600060208201905081810360008301526127768161273a565b9050919050565b6000612788826119dc565b9150612793836119dc565b92508282039050818111156127ab576127aa612374565b5b92915050565b60006127bc826119dc565b91506127c7836119dc565b92508282019050808211156127df576127de612374565b5b92915050565b7f6f6e56616c6964617465206d6179206f6e6c792062652063616c6c656420627960008201527f207468652044414f20636f6e7472616374000000000000000000000000000000602082015250565b60006128416031836121a7565b915061284c826127e5565b604082019050919050565b6000602082019050818103600083015261287081612834565b9050919050565b6000806000606084860312156128905761288f6119d2565b5b600061289e868287016119fd565b93505060206128af868287016119fd565b92505060406128c0868287016119fd565b9150509250925092565b7f51756f72756d206e6f74206d6574000000000000000000000000000000000000600082015250565b6000612900600e836121a7565b915061290b826128ca565b602082019050919050565b600060408201905061292b6000830184611a80565b818103602083015261293c816128f3565b905092915050565b600061294f826119dc565b915061295a836119dc565b9250828202612968816119dc565b9150828204841483151761297f5761297e612374565b5b5092915050565b7f5374616765203020696e646578206d69736d6174636800000000000000000000600082015250565b60006129bc6016836121a7565b91506129c782612986565b602082019050919050565b600060208201905081810360008301526129eb816129af565b9050919050565b7f526574727920636f756e74206578636565646564000000000000000000000000600082015250565b6000612a286014836121a7565b9150612a33826129f2565b602082019050919050565b6000604082019050612a536000830184611a80565b8181036020830152612a6481612a1b565b905092915050565b7f5374616765203120696e646578206d69736d6174636800000000000000000000600082015250565b6000612aa26016836121a7565b9150612aad82612a6c565b602082019050919050565b60006020820190508181036000830152612ad181612a95565b9050919050565b7f5374616765203220696e646578206d69736d6174636800000000000000000000600082015250565b6000612b0e6016836121a7565b9150612b1982612ad8565b602082019050919050565b60006020820190508181036000830152612b3d81612b01565b9050919050565b60008154612b5181612176565b612b5b8186611b2c565b94506001821660008114612b765760018114612b8c57612bbf565b60ff198316865281151560200286019350612bbf565b612b9585612454565b60005b83811015612bb757815481890152600182019150602081019050612b98565b808801955050505b50505092915050565b6000606082019050612bdd6000830186611a80565b612bea6020830185611a80565b8181036040830152612bfc8184612b44565b9050949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612c40826119dc565b9150612c4b836119dc565b925082612c5b57612c5a612c06565b5b828204905092915050565b7f52656d61696e696e6720666565732063616e206f6e6c79206265207265636c6160008201527f696d6564207768656e2070726f706f73616c20686173206265656e206163636560208201527f70746564206f72206661696c6564000000000000000000000000000000000000604082015250565b6000612ce8604e836121a7565b9150612cf382612c66565b606082019050919050565b60006020820190508181036000830152612d1781612cdb565b9050919050565b7f4174746573746174696f6e206f6e6c79207065727461696e7320746f2050726f60008201527f706f73616c207374616765000000000000000000000000000000000000000000602082015250565b6000612d7a602b836121a7565b9150612d8582612d1e565b604082019050919050565b60006020820190508181036000830152612da981612d6d565b9050919050565b7f4578706972656420776974686f7574206d656574696e6720617474657374617460008201527f696f6e207468726573686f6c6400000000000000000000000000000000000000602082015250565b6000612e0c602d836121a7565b9150612e1782612db0565b604082019050919050565b6000604082019050612e376000830184611a80565b8181036020830152612e4881612dff565b905092915050565b6000606082019050612e656000830186611a80565b612e726020830185611a80565b612e7f6040830184611a80565b949350505050565b600060029050919050565b600081905092915050565b6000819050919050565b6000612eb38383611e91565b60208301905092915050565b60008160001c9050919050565b6000819050919050565b6000612ee9612ee483612ebf565b612ecc565b9050919050565b6000612efc8254612ed6565b9050919050565b6000600182019050919050565b612f1981612e87565b612f238184612e92565b9250612f2e82612e9d565b8060005b83811015612f6657612f4382612ef0565b612f4d8782612ea7565b9650612f5883612f03565b925050600181019050612f32565b505050505050565b600061014082019050612f84600083018b611a80565b612f91602083018a611a80565b612f9e6040830189612f10565b612fab6080830188612f10565b612fb860c0830187611a80565b612fc560e0830186611b12565b612fd3610100830185611b12565b818103610120830152612fe68184611b78565b90509998505050505050505050565b600060408201905061300a6000830185611a80565b6130176020830184611a80565b939250505056fea26469706673582212209b3d56e380ed93011f6f637450bfb2b12bae98395a6121e825604d3276f250b464736f6c63430008180033", + "bytecode": "0x60a06040526040518060600160405280600060ff168152602001600160ff168152602001606460ff1681525060029060036200003d929190620001ef565b5060405180606001604052806000151515158152602001600015151515815260200160011515151581525060059060036200007a92919062000239565b5060405180606001604052806040518060400160405280600160ff168152602001600a60ff1681525081526020016040518060400160405280600160ff168152602001600a60ff1681525081526020016040518060400160405280600160ff168152602001600a60ff168152508152506006906003620000fc929190620002d9565b5060405180606001604052806040518060400160405280600260ff168152602001600360ff1681525081526020016040518060400160405280600260ff168152602001600360ff1681525081526020016040518060400160405280600260ff168152602001600360ff16815250815250600c9060036200017e929190620002d9565b503480156200018c57600080fd5b5060405162003806380380620038068339818101604052810190620001b291906200044e565b808073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1681525050505062000480565b826003810192821562000226579160200282015b8281111562000225578251829060ff1690559160200191906001019062000203565b5b50905062000235919062000331565b5090565b826003601f01602090048101928215620002c65791602002820160005b838211156200029557835183826101000a81548160ff021916908315150217905550926020019260010160208160000104928301926001030262000256565b8015620002c45782816101000a81549060ff021916905560010160208160000104928301926001030262000295565b505b509050620002d5919062000331565b5090565b82600360020281019282156200031e579160200282015b828111156200031d578251829060026200030c92919062000350565b5091602001919060020190620002f0565b5b5090506200032d91906200039a565b5090565b5b808211156200034c57600081600090555060010162000332565b5090565b826002810192821562000387579160200282015b8281111562000386578251829060ff1690559160200191906001019062000364565b5b50905062000396919062000331565b5090565b5b80821115620003be5760008181620003b49190620003c2565b506002016200039b565b5090565b506000815560010160009055565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200040282620003d5565b9050919050565b60006200041682620003f5565b9050919050565b620004288162000409565b81146200043457600080fd5b50565b60008151905062000448816200041d565b92915050565b600060208284031215620004675762000466620003d0565b5b6000620004778482850162000437565b91505092915050565b608051613347620004bf600039600081816103c70152818161095c01528181610b4801528181610d42015281816115de01526117ac01526133476000f3fe60806040526004361061007b5760003560e01c8063b4e6a1d51161004e578063b4e6a1d51461015b578063c019faab14610198578063da35c664146101c1578063ea923e63146101ec5761007b565b8063013cf08b146100805780632805b5d9146100c557806362d26ed7146100f5578063a3bb24cc14610132575b600080fd5b34801561008c57600080fd5b506100a760048036038101906100a29190611a8e565b610229565b6040516100bc99989796959493929190611c82565b60405180910390f35b6100df60048036038101906100da9190611e52565b6103c1565b6040516100ec9190611f0e565b60405180910390f35b34801561010157600080fd5b5061011c60048036038101906101179190611a8e565b610620565b604051610129919061210e565b60405180910390f35b34801561013e57600080fd5b506101596004803603810190610154919061212a565b610959565b005b34801561016757600080fd5b50610182600480360381019061017d919061216a565b610b44565b60405161018f9190611f0e565b60405180910390f35b3480156101a457600080fd5b506101bf60048036038101906101ba9190611a8e565b611419565b005b3480156101cd57600080fd5b506101d6611545565b6040516101e39190611f0e565b60405180910390f35b3480156101f857600080fd5b50610213600480360381019061020e9190611a8e565b61154b565b6040516102209190612204565b60405180910390f35b60006020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169080600101549080600201549080600301805461027e9061224e565b80601f01602080910402602001604051908101604052809291908181526020018280546102aa9061224e565b80156102f75780601f106102cc576101008083540402835291602001916102f7565b820191906000526020600020905b8154815290600101906020018083116102da57829003601f168201915b5050505050908060040154908060050160009054906101000a900460ff169080600701549080603b0160009054906101000a900460ff169080603c01805461033e9061224e565b80601f016020809104026020016040519081016040528092919081815260200182805461036a9061224e565b80156103b75780601f1061038c576101008083540402835291602001916103b7565b820191906000526020600020905b81548152906001019060200180831161039a57829003601f168201915b5050505050905089565b600060607f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166338787df0888b8b856040518563ffffffff1660e01b8152600401610424949392919061241d565b600060405180830381600087803b15801561043e57600080fd5b505af1158015610452573d6000803e3d6000fd5b505050506001600081548092919061046990612493565b91905055915060008060008481526020019081526020016000209050338160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555089898260030191826104db9291906126c1565b50428160040181905550866000600381106104f9576104f8612791565b5b60200201358160080160006003811061051557610514612791565b5b60110201600001819055508660016003811061053457610533612791565b5b6020020135816008016001600381106105505761054f612791565b5b60110201600001819055508660026003811061056f5761056e612791565b5b60200201358160080160026003811061058b5761058a612791565b5b6011020160000181905550348160010181905550806001015481600201819055508581603b0160006101000a81548160ff021916908315150217905550848482603c0191826105db929190612826565b507f9a863892f20a6b9c6cec64d611b5864be6373191ce2cacc3b05a299bce3bf80e8360405161060b9190611f0e565b60405180910390a15050979650505050505050565b6106286119af565b600080600084815260200190815260200160002090508060080160006003811061065557610654612791565b5b60110201600101600380602002604051908101604052809291906000905b82821015610725578382600502016040518060e0016040529081600082015481526020016001820160009054906101000a900460ff161515151581526020016001820160019054906101000a900460ff1615151515815260200160028201548152602001600382015481526020016004820160009054906101000a900460ff161515151581526020016004820160019054906101000a900460ff16151515158152505081526020019060010190610673565b505050508260006003811061073d5761073c612791565b5b60200201819052508060080160016003811061075c5761075b612791565b5b60110201600101600380602002604051908101604052809291906000905b8282101561082c578382600502016040518060e0016040529081600082015481526020016001820160009054906101000a900460ff161515151581526020016001820160019054906101000a900460ff1615151515815260200160028201548152602001600382015481526020016004820160009054906101000a900460ff161515151581526020016004820160019054906101000a900460ff1615151515815250508152602001906001019061077a565b505050508260016003811061084457610843612791565b5b60200201819052508060080160026003811061086357610862612791565b5b60110201600101600380602002604051908101604052809291906000905b82821015610933578382600502016040518060e0016040529081600082015481526020016001820160009054906101000a900460ff161515151581526020016001820160019054906101000a900460ff1615151515815260200160028201548152602001600382015481526020016004820160009054906101000a900460ff161515151581526020016004820160019054906101000a900460ff16151515158152505081526020019060010190610881565b505050508260026003811061094b5761094a612791565b5b602002018190525050919050565b807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b81526004016109b391906128f6565b602060405180830381865afa1580156109d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109f49190612926565b1015610a35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2c906129c5565b60405180910390fd5b600080600084815260200190815260200160002090508060060160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054816007016000828254610aa091906129e5565b92505081905550818160060160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081816007016000828254610b019190612a19565b925050819055507fc23775ba00d23f337b9f790bd67eb5194aa9b95876933f9ccd1887becbb55ccb83604051610b379190611f0e565b60405180910390a1505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610bd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bcb90612abf565b60405180910390fd5b60008060008585810190610be89190612adf565b925092509250600080600085815260200190815260200160002090506000816008018460038110610c1c57610c1b612791565b5b601102019050600081600101826010015460038110610c3e57610c3d612791565b5b60050201905060018160010160016101000a81548160ff0219169083151502179055508a81600201819055508981600301819055508b8160040160016101000a81548160ff0219169083151502179055508c8160040160006101000a81548160ff0219169083151502179055508b610d3e5760048360050160006101000a81548160ff02191690836005811115610cd857610cd7611b9b565b5b02179055507f2a15f4605f8e68cbaccd2234253a8189163d500a6f60c1751405443ca1562beb86604051610d0c9190612b7e565b60405180910390a183836002016000828254610d289190612a19565b925050819055506001965050505050505061140f565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dcf9190612926565b8b8d610ddb9190612a19565b6002610de79190612bac565b1015905060016005811115610dff57610dfe611b9b565b5b8460050160009054906101000a900460ff166005811115610e2357610e22611b9b565b5b03610f445760008614610e6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6290612c3a565b60405180910390fd5b8d8015610e755750805b15610eac5760028460050160006101000a81548160ff02191690836005811115610ea257610ea1611b9b565b5b0217905550610f3f565b6002836010015410610f215760048460050160006101000a81548160ff02191690836005811115610ee057610edf611b9b565b5b02179055507f2a15f4605f8e68cbaccd2234253a8189163d500a6f60c1751405443ca1562beb87604051610f149190612ca6565b60405180910390a1610f3e565b6001836010016000828254610f369190612a19565b925050819055505b5b6112eb565b60026005811115610f5857610f57611b9b565b5b8460050160009054906101000a900460ff166005811115610f7c57610f7b611b9b565b5b0361109d5760018614610fc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fbb90612d20565b60405180910390fd5b8d8015610fce5750805b156110055760038460050160006101000a81548160ff02191690836005811115610ffb57610ffa611b9b565b5b0217905550611098565b600283601001541061107a5760048460050160006101000a81548160ff0219169083600581111561103957611038611b9b565b5b02179055507f2a15f4605f8e68cbaccd2234253a8189163d500a6f60c1751405443ca1562beb8760405161106d9190612ca6565b60405180910390a1611097565b600183601001600082825461108f9190612a19565b925050819055505b5b6112ea565b600360058111156110b1576110b0611b9b565b5b8460050160009054906101000a900460ff1660058111156110d5576110d4611b9b565b5b036112e9576002861461111d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111490612d8c565b60405180910390fd5b8d80156111275750805b156112555760058460050160006101000a81548160ff0219169083600581111561115457611153611b9b565b5b02179055507fd24c2047577899547bacebb29e319fc7d73f6712b5adb401d45556f34bb2aa3b876040516111889190611f0e565b60405180910390a183603b0160009054906101000a900460ff1615611250578360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663815a05728d8d87603c016040518463ffffffff1660e01b815260040161120b93929190612e30565b6020604051808303816000875af115801561122a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061124e9190612926565b505b6112e8565b60028360100154106112ca5760048460050160006101000a81548160ff0219169083600581111561128957611288611b9b565b5b02179055507f2a15f4605f8e68cbaccd2234253a8189163d500a6f60c1751405443ca1562beb876040516112bd9190612ca6565b60405180910390a16112e7565b60018360100160008282546112df9190612a19565b925050819055505b5b5b5b5b600160058111156112ff576112fe611b9b565b5b8460050160009054906101000a900460ff16600581111561132357611322611b9b565b5b0361134957611344876000600a876001015461133f9190612e9d565b611777565b611403565b6002600581111561135d5761135c611b9b565b5b8460050160009054906101000a900460ff16600581111561138157611380611b9b565b5b036113a7576113a2876001600a876001015461139d9190612e9d565b611777565b611402565b600360058111156113bb576113ba611b9b565b5b8460050160009054906101000a900460ff1660058111156113df576113de611b9b565b5b0361140157611400876002600a87600101546113fb9190612e9d565b611777565b5b5b5b60009750505050505050505b9695505050505050565b600080600083815260200190815260200160002090506004600581111561144357611442611b9b565b5b8160050160009054906101000a900460ff16600581111561146757611466611b9b565b5b14806114a7575060058081111561148157611480611b9b565b5b8160050160009054906101000a900460ff1660058111156114a5576114a4611b9b565b5b145b6114e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114dd90612f66565b60405180910390fd5b600081600201549050600082600201819055503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561153f573d6000803e3d6000fd5b50505050565b60015481565b60008060008084815260200190815260200160002090506000600581111561157657611575611b9b565b5b8160050160009054906101000a900460ff16600581111561159a57611599611b9b565b5b146115da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d190612ff8565b60405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611647573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061166b9190612926565b8260070154600a61167c9190612bac565b1015905060006301e1338083600401546116969190612a19565b42119050816117215780156117155760048360050160006101000a81548160ff021916908360058111156116cd576116cc611b9b565b5b02179055507f2a15f4605f8e68cbaccd2234253a8189163d500a6f60c1751405443ca1562beb85604051611701919061308a565b60405180910390a160009350505050611772565b60009350505050611772565b60018360050160006101000a81548160ff0219169083600581111561174957611748611b9b565b5b021790555061176a856000600a86600101546117659190612e9d565b611777565b600193505050505b919050565b60008060008581526020019081526020016000209050818160020160008282546117a191906129e5565b9250508190555060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639fbe7c73848460030185600801886003811061180157611800612791565b5b60110201600001546006896003811061181d5761181c612791565b5b60020201600c8a6003811061183557611834612791565b5b6002020160028b6003811061184d5761184c612791565b5b015460058c6003811061186357611862612791565b5b602091828204019190069054906101000a900460ff1660018e8e8e604051602001611890939291906130b8565b6040516020818303038152906040526040518a63ffffffff1660e01b81526004016118c298979695949392919061325a565b60206040518083038185885af11580156118e0573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906119059190612926565b9050600082600801856003811061191f5761191e612791565b5b60110201905060008160010182601001546003811061194157611940612791565b5b60050201905082816000018190555060018160010160006101000a81548160ff0219169083151502179055507f4c14e16a98683e5b8bd70d51192048d0499fb3999b27ff1e9dce7e4a2c673479878460405161199e9291906132e8565b60405180910390a150505050505050565b60405180606001604052806003905b6119c66119dc565b8152602001906001900390816119be5790505090565b60405180606001604052806003905b6119f3611a09565b8152602001906001900390816119eb5790505090565b6040518060e001604052806000815260200160001515815260200160001515815260200160008152602001600081526020016000151581526020016000151581525090565b600080fd5b600080fd5b6000819050919050565b611a6b81611a58565b8114611a7657600080fd5b50565b600081359050611a8881611a62565b92915050565b600060208284031215611aa457611aa3611a4e565b5b6000611ab284828501611a79565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611ae682611abb565b9050919050565b611af681611adb565b82525050565b611b0581611a58565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611b45578082015181840152602081019050611b2a565b60008484015250505050565b6000601f19601f8301169050919050565b6000611b6d82611b0b565b611b778185611b16565b9350611b87818560208601611b27565b611b9081611b51565b840191505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60068110611bdb57611bda611b9b565b5b50565b6000819050611bec82611bca565b919050565b6000611bfc82611bde565b9050919050565b611c0c81611bf1565b82525050565b60008115159050919050565b611c2781611c12565b82525050565b600081519050919050565b600082825260208201905092915050565b6000611c5482611c2d565b611c5e8185611c38565b9350611c6e818560208601611b27565b611c7781611b51565b840191505092915050565b600061012082019050611c98600083018c611aed565b611ca5602083018b611afc565b611cb2604083018a611afc565b8181036060830152611cc48189611b62565b9050611cd36080830188611afc565b611ce060a0830187611c03565b611ced60c0830186611afc565b611cfa60e0830185611c1e565b818103610100830152611d0d8184611c49565b90509a9950505050505050505050565b600080fd5b600080fd5b600080fd5b60008083601f840112611d4257611d41611d1d565b5b8235905067ffffffffffffffff811115611d5f57611d5e611d22565b5b602083019150836001820283011115611d7b57611d7a611d27565b5b9250929050565b611d8b81611adb565b8114611d9657600080fd5b50565b600081359050611da881611d82565b92915050565b600081905082602060030282011115611dca57611dc9611d27565b5b92915050565b611dd981611c12565b8114611de457600080fd5b50565b600081359050611df681611dd0565b92915050565b60008083601f840112611e1257611e11611d1d565b5b8235905067ffffffffffffffff811115611e2f57611e2e611d22565b5b602083019150836001820283011115611e4b57611e4a611d27565b5b9250929050565b600080600080600080600060e0888a031215611e7157611e70611a4e565b5b600088013567ffffffffffffffff811115611e8f57611e8e611a53565b5b611e9b8a828b01611d2c565b97509750506020611eae8a828b01611d99565b9550506040611ebf8a828b01611dae565b94505060a0611ed08a828b01611de7565b93505060c088013567ffffffffffffffff811115611ef157611ef0611a53565b5b611efd8a828b01611dfc565b925092505092959891949750929550565b6000602082019050611f236000830184611afc565b92915050565b600060039050919050565b600081905092915050565b6000819050919050565b600060039050919050565b600081905092915050565b6000819050919050565b611f7281611a58565b82525050565b611f8181611c12565b82525050565b60e082016000820151611f9d6000850182611f69565b506020820151611fb06020850182611f78565b506040820151611fc36040850182611f78565b506060820151611fd66060850182611f69565b506080820151611fe96080850182611f69565b5060a0820151611ffc60a0850182611f78565b5060c082015161200f60c0850182611f78565b50505050565b60006120218383611f87565b60e08301905092915050565b6000602082019050919050565b61204381611f49565b61204d8184611f54565b925061205882611f5f565b8060005b838110156120895781516120708782612015565b965061207b8361202d565b92505060018101905061205c565b505050505050565b600061209d838361203a565b6102a08301905092915050565b6000602082019050919050565b6120c081611f29565b6120ca8184611f34565b92506120d582611f3f565b8060005b838110156121065781516120ed8782612091565b96506120f8836120aa565b9250506001810190506120d9565b505050505050565b60006107e08201905061212460008301846120b7565b92915050565b6000806040838503121561214157612140611a4e565b5b600061214f85828601611a79565b925050602061216085828601611a79565b9150509250929050565b60008060008060008060a0878903121561218757612186611a4e565b5b600061219589828a01611de7565b96505060206121a689828a01611de7565b95505060406121b789828a01611a79565b94505060606121c889828a01611a79565b935050608087013567ffffffffffffffff8111156121e9576121e8611a53565b5b6121f589828a01611dfc565b92509250509295509295509295565b60006020820190506122196000830184611c1e565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061226657607f821691505b6020821081036122795761227861221f565b5b50919050565b82818337600083830152505050565b600061229a8385611b16565b93506122a783858461227f565b6122b083611b51565b840190509392505050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6000819050919050565b6122fa816122e7565b82525050565b600082825260208201905092915050565b600061231c82611b0b565b6123268185612300565b9350612336818560208601611b27565b61233f81611b51565b840191505092915050565b600060408301600083015161236260008601826122f1565b506020830151848203602086015261237a8282612311565b9150508091505092915050565b6000612393838361234a565b905092915050565b6000602082019050919050565b60006123b3826122bb565b6123bd81856122c6565b9350836020820285016123cf856122d7565b8060005b8581101561240b57848403895281516123ec8582612387565b94506123f78361239b565b925060208a019950506001810190506123d3565b50829750879550505050505092915050565b60006060820190506124326000830187611aed565b818103602083015261244581858761228e565b9050818103604083015261245981846123a8565b905095945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061249e82611a58565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036124d0576124cf612464565b5b600182019050919050565b600082905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026125777fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261253a565b612581868361253a565b95508019841693508086168417925050509392505050565b6000819050919050565b60006125be6125b96125b484611a58565b612599565b611a58565b9050919050565b6000819050919050565b6125d8836125a3565b6125ec6125e4826125c5565b848454612547565b825550505050565b600090565b6126016125f4565b61260c8184846125cf565b505050565b5b81811015612630576126256000826125f9565b600181019050612612565b5050565b601f8211156126755761264681612515565b61264f8461252a565b8101602085101561265e578190505b61267261266a8561252a565b830182612611565b50505b505050565b600082821c905092915050565b60006126986000198460080261267a565b1980831691505092915050565b60006126b18383612687565b9150826002028217905092915050565b6126cb83836124db565b67ffffffffffffffff8111156126e4576126e36124e6565b5b6126ee825461224e565b6126f9828285612634565b6000601f8311600181146127285760008415612716578287013590505b61272085826126a5565b865550612788565b601f19841661273686612515565b60005b8281101561275e57848901358255600182019150602085019450602081019050612739565b8683101561277b5784890135612777601f891682612687565b8355505b6001600288020188555050505b50505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082905092915050565b60008190508160005260206000209050919050565b601f821115612821576127f2816127cb565b6127fb8461252a565b8101602085101561280a578190505b61281e6128168561252a565b830182612611565b50505b505050565b61283083836127c0565b67ffffffffffffffff811115612849576128486124e6565b5b612853825461224e565b61285e8282856127e0565b6000601f83116001811461288d576000841561287b578287013590505b61288585826126a5565b8655506128ed565b601f19841661289b866127cb565b60005b828110156128c35784890135825560018201915060208501945060208101905061289e565b868310156128e057848901356128dc601f891682612687565b8355505b6001600288020188555050505b50505050505050565b600060208201905061290b6000830184611aed565b92915050565b60008151905061292081611a62565b92915050565b60006020828403121561293c5761293b611a4e565b5b600061294a84828501612911565b91505092915050565b7f53656e6465722068617320696e73756666696369656e74205245502062616c6160008201527f6e63650000000000000000000000000000000000000000000000000000000000602082015250565b60006129af602383611b16565b91506129ba82612953565b604082019050919050565b600060208201905081810360008301526129de816129a2565b9050919050565b60006129f082611a58565b91506129fb83611a58565b9250828203905081811115612a1357612a12612464565b5b92915050565b6000612a2482611a58565b9150612a2f83611a58565b9250828201905080821115612a4757612a46612464565b5b92915050565b7f6f6e56616c6964617465206d6179206f6e6c792062652063616c6c656420627960008201527f207468652044414f20636f6e7472616374000000000000000000000000000000602082015250565b6000612aa9603183611b16565b9150612ab482612a4d565b604082019050919050565b60006020820190508181036000830152612ad881612a9c565b9050919050565b600080600060608486031215612af857612af7611a4e565b5b6000612b0686828701611a79565b9350506020612b1786828701611a79565b9250506040612b2886828701611a79565b9150509250925092565b7f51756f72756d206e6f74206d6574000000000000000000000000000000000000600082015250565b6000612b68600e83611b16565b9150612b7382612b32565b602082019050919050565b6000604082019050612b936000830184611afc565b8181036020830152612ba481612b5b565b905092915050565b6000612bb782611a58565b9150612bc283611a58565b9250828202612bd081611a58565b91508282048414831517612be757612be6612464565b5b5092915050565b7f5374616765203020696e646578206d69736d6174636800000000000000000000600082015250565b6000612c24601683611b16565b9150612c2f82612bee565b602082019050919050565b60006020820190508181036000830152612c5381612c17565b9050919050565b7f526574727920636f756e74206578636565646564000000000000000000000000600082015250565b6000612c90601483611b16565b9150612c9b82612c5a565b602082019050919050565b6000604082019050612cbb6000830184611afc565b8181036020830152612ccc81612c83565b905092915050565b7f5374616765203120696e646578206d69736d6174636800000000000000000000600082015250565b6000612d0a601683611b16565b9150612d1582612cd4565b602082019050919050565b60006020820190508181036000830152612d3981612cfd565b9050919050565b7f5374616765203220696e646578206d69736d6174636800000000000000000000600082015250565b6000612d76601683611b16565b9150612d8182612d40565b602082019050919050565b60006020820190508181036000830152612da581612d69565b9050919050565b60008154612db98161224e565b612dc38186611c38565b94506001821660008114612dde5760018114612df457612e27565b60ff198316865281151560200286019350612e27565b612dfd856127cb565b60005b83811015612e1f57815481890152600182019150602081019050612e00565b808801955050505b50505092915050565b6000606082019050612e456000830186611afc565b612e526020830185611afc565b8181036040830152612e648184612dac565b9050949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612ea882611a58565b9150612eb383611a58565b925082612ec357612ec2612e6e565b5b828204905092915050565b7f52656d61696e696e6720666565732063616e206f6e6c79206265207265636c6160008201527f696d6564207768656e2070726f706f73616c20686173206265656e206163636560208201527f70746564206f72206661696c6564000000000000000000000000000000000000604082015250565b6000612f50604e83611b16565b9150612f5b82612ece565b606082019050919050565b60006020820190508181036000830152612f7f81612f43565b9050919050565b7f4174746573746174696f6e206f6e6c79207065727461696e7320746f2050726f60008201527f706f73616c207374616765000000000000000000000000000000000000000000602082015250565b6000612fe2602b83611b16565b9150612fed82612f86565b604082019050919050565b6000602082019050818103600083015261301181612fd5565b9050919050565b7f4578706972656420776974686f7574206d656574696e6720617474657374617460008201527f696f6e207468726573686f6c6400000000000000000000000000000000000000602082015250565b6000613074602d83611b16565b915061307f82613018565b604082019050919050565b600060408201905061309f6000830184611afc565b81810360208301526130b081613067565b905092915050565b60006060820190506130cd6000830186611afc565b6130da6020830185611afc565b6130e76040830184611afc565b949350505050565b600081546130fc8161224e565b6131068186611b16565b9450600182166000811461312157600181146131375761316a565b60ff19831686528115156020028601935061316a565b61314085612515565b60005b8381101561316257815481890152600182019150602081019050613143565b808801955050505b50505092915050565b600060029050919050565b600081905092915050565b6000819050919050565b600061319f8383611f69565b60208301905092915050565b60008160001c9050919050565b6000819050919050565b60006131d56131d0836131ab565b6131b8565b9050919050565b60006131e882546131c2565b9050919050565b6000600182019050919050565b61320581613173565b61320f818461317e565b925061321a82613189565b8060005b838110156132525761322f826131dc565b6132398782613193565b9650613244836131ef565b92505060018101905061321e565b505050505050565b6000610140820190508181036000830152613275818b6130ef565b9050613284602083018a611afc565b61329160408301896131fc565b61329e60808301886131fc565b6132ab60c0830187611afc565b6132b860e0830186611c1e565b6132c6610100830185611c1e565b8181036101208301526132d98184611c49565b90509998505050505050505050565b60006040820190506132fd6000830185611afc565b61330a6020830184611afc565b939250505056fea26469706673582212205bde99787b176f992c1714aa1f74e188ddc80de7aee6d4837531b2b6da509eea64736f6c63430008180033", + "deployedBytecode": "0x60806040526004361061007b5760003560e01c8063b4e6a1d51161004e578063b4e6a1d51461015b578063c019faab14610198578063da35c664146101c1578063ea923e63146101ec5761007b565b8063013cf08b146100805780632805b5d9146100c557806362d26ed7146100f5578063a3bb24cc14610132575b600080fd5b34801561008c57600080fd5b506100a760048036038101906100a29190611a8e565b610229565b6040516100bc99989796959493929190611c82565b60405180910390f35b6100df60048036038101906100da9190611e52565b6103c1565b6040516100ec9190611f0e565b60405180910390f35b34801561010157600080fd5b5061011c60048036038101906101179190611a8e565b610620565b604051610129919061210e565b60405180910390f35b34801561013e57600080fd5b506101596004803603810190610154919061212a565b610959565b005b34801561016757600080fd5b50610182600480360381019061017d919061216a565b610b44565b60405161018f9190611f0e565b60405180910390f35b3480156101a457600080fd5b506101bf60048036038101906101ba9190611a8e565b611419565b005b3480156101cd57600080fd5b506101d6611545565b6040516101e39190611f0e565b60405180910390f35b3480156101f857600080fd5b50610213600480360381019061020e9190611a8e565b61154b565b6040516102209190612204565b60405180910390f35b60006020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169080600101549080600201549080600301805461027e9061224e565b80601f01602080910402602001604051908101604052809291908181526020018280546102aa9061224e565b80156102f75780601f106102cc576101008083540402835291602001916102f7565b820191906000526020600020905b8154815290600101906020018083116102da57829003601f168201915b5050505050908060040154908060050160009054906101000a900460ff169080600701549080603b0160009054906101000a900460ff169080603c01805461033e9061224e565b80601f016020809104026020016040519081016040528092919081815260200182805461036a9061224e565b80156103b75780601f1061038c576101008083540402835291602001916103b7565b820191906000526020600020905b81548152906001019060200180831161039a57829003601f168201915b5050505050905089565b600060607f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166338787df0888b8b856040518563ffffffff1660e01b8152600401610424949392919061241d565b600060405180830381600087803b15801561043e57600080fd5b505af1158015610452573d6000803e3d6000fd5b505050506001600081548092919061046990612493565b91905055915060008060008481526020019081526020016000209050338160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555089898260030191826104db9291906126c1565b50428160040181905550866000600381106104f9576104f8612791565b5b60200201358160080160006003811061051557610514612791565b5b60110201600001819055508660016003811061053457610533612791565b5b6020020135816008016001600381106105505761054f612791565b5b60110201600001819055508660026003811061056f5761056e612791565b5b60200201358160080160026003811061058b5761058a612791565b5b6011020160000181905550348160010181905550806001015481600201819055508581603b0160006101000a81548160ff021916908315150217905550848482603c0191826105db929190612826565b507f9a863892f20a6b9c6cec64d611b5864be6373191ce2cacc3b05a299bce3bf80e8360405161060b9190611f0e565b60405180910390a15050979650505050505050565b6106286119af565b600080600084815260200190815260200160002090508060080160006003811061065557610654612791565b5b60110201600101600380602002604051908101604052809291906000905b82821015610725578382600502016040518060e0016040529081600082015481526020016001820160009054906101000a900460ff161515151581526020016001820160019054906101000a900460ff1615151515815260200160028201548152602001600382015481526020016004820160009054906101000a900460ff161515151581526020016004820160019054906101000a900460ff16151515158152505081526020019060010190610673565b505050508260006003811061073d5761073c612791565b5b60200201819052508060080160016003811061075c5761075b612791565b5b60110201600101600380602002604051908101604052809291906000905b8282101561082c578382600502016040518060e0016040529081600082015481526020016001820160009054906101000a900460ff161515151581526020016001820160019054906101000a900460ff1615151515815260200160028201548152602001600382015481526020016004820160009054906101000a900460ff161515151581526020016004820160019054906101000a900460ff1615151515815250508152602001906001019061077a565b505050508260016003811061084457610843612791565b5b60200201819052508060080160026003811061086357610862612791565b5b60110201600101600380602002604051908101604052809291906000905b82821015610933578382600502016040518060e0016040529081600082015481526020016001820160009054906101000a900460ff161515151581526020016001820160019054906101000a900460ff1615151515815260200160028201548152602001600382015481526020016004820160009054906101000a900460ff161515151581526020016004820160019054906101000a900460ff16151515158152505081526020019060010190610881565b505050508260026003811061094b5761094a612791565b5b602002018190525050919050565b807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b81526004016109b391906128f6565b602060405180830381865afa1580156109d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109f49190612926565b1015610a35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2c906129c5565b60405180910390fd5b600080600084815260200190815260200160002090508060060160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054816007016000828254610aa091906129e5565b92505081905550818160060160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081816007016000828254610b019190612a19565b925050819055507fc23775ba00d23f337b9f790bd67eb5194aa9b95876933f9ccd1887becbb55ccb83604051610b379190611f0e565b60405180910390a1505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610bd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bcb90612abf565b60405180910390fd5b60008060008585810190610be89190612adf565b925092509250600080600085815260200190815260200160002090506000816008018460038110610c1c57610c1b612791565b5b601102019050600081600101826010015460038110610c3e57610c3d612791565b5b60050201905060018160010160016101000a81548160ff0219169083151502179055508a81600201819055508981600301819055508b8160040160016101000a81548160ff0219169083151502179055508c8160040160006101000a81548160ff0219169083151502179055508b610d3e5760048360050160006101000a81548160ff02191690836005811115610cd857610cd7611b9b565b5b02179055507f2a15f4605f8e68cbaccd2234253a8189163d500a6f60c1751405443ca1562beb86604051610d0c9190612b7e565b60405180910390a183836002016000828254610d289190612a19565b925050819055506001965050505050505061140f565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dcf9190612926565b8b8d610ddb9190612a19565b6002610de79190612bac565b1015905060016005811115610dff57610dfe611b9b565b5b8460050160009054906101000a900460ff166005811115610e2357610e22611b9b565b5b03610f445760008614610e6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6290612c3a565b60405180910390fd5b8d8015610e755750805b15610eac5760028460050160006101000a81548160ff02191690836005811115610ea257610ea1611b9b565b5b0217905550610f3f565b6002836010015410610f215760048460050160006101000a81548160ff02191690836005811115610ee057610edf611b9b565b5b02179055507f2a15f4605f8e68cbaccd2234253a8189163d500a6f60c1751405443ca1562beb87604051610f149190612ca6565b60405180910390a1610f3e565b6001836010016000828254610f369190612a19565b925050819055505b5b6112eb565b60026005811115610f5857610f57611b9b565b5b8460050160009054906101000a900460ff166005811115610f7c57610f7b611b9b565b5b0361109d5760018614610fc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fbb90612d20565b60405180910390fd5b8d8015610fce5750805b156110055760038460050160006101000a81548160ff02191690836005811115610ffb57610ffa611b9b565b5b0217905550611098565b600283601001541061107a5760048460050160006101000a81548160ff0219169083600581111561103957611038611b9b565b5b02179055507f2a15f4605f8e68cbaccd2234253a8189163d500a6f60c1751405443ca1562beb8760405161106d9190612ca6565b60405180910390a1611097565b600183601001600082825461108f9190612a19565b925050819055505b5b6112ea565b600360058111156110b1576110b0611b9b565b5b8460050160009054906101000a900460ff1660058111156110d5576110d4611b9b565b5b036112e9576002861461111d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111490612d8c565b60405180910390fd5b8d80156111275750805b156112555760058460050160006101000a81548160ff0219169083600581111561115457611153611b9b565b5b02179055507fd24c2047577899547bacebb29e319fc7d73f6712b5adb401d45556f34bb2aa3b876040516111889190611f0e565b60405180910390a183603b0160009054906101000a900460ff1615611250578360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663815a05728d8d87603c016040518463ffffffff1660e01b815260040161120b93929190612e30565b6020604051808303816000875af115801561122a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061124e9190612926565b505b6112e8565b60028360100154106112ca5760048460050160006101000a81548160ff0219169083600581111561128957611288611b9b565b5b02179055507f2a15f4605f8e68cbaccd2234253a8189163d500a6f60c1751405443ca1562beb876040516112bd9190612ca6565b60405180910390a16112e7565b60018360100160008282546112df9190612a19565b925050819055505b5b5b5b5b600160058111156112ff576112fe611b9b565b5b8460050160009054906101000a900460ff16600581111561132357611322611b9b565b5b0361134957611344876000600a876001015461133f9190612e9d565b611777565b611403565b6002600581111561135d5761135c611b9b565b5b8460050160009054906101000a900460ff16600581111561138157611380611b9b565b5b036113a7576113a2876001600a876001015461139d9190612e9d565b611777565b611402565b600360058111156113bb576113ba611b9b565b5b8460050160009054906101000a900460ff1660058111156113df576113de611b9b565b5b0361140157611400876002600a87600101546113fb9190612e9d565b611777565b5b5b5b60009750505050505050505b9695505050505050565b600080600083815260200190815260200160002090506004600581111561144357611442611b9b565b5b8160050160009054906101000a900460ff16600581111561146757611466611b9b565b5b14806114a7575060058081111561148157611480611b9b565b5b8160050160009054906101000a900460ff1660058111156114a5576114a4611b9b565b5b145b6114e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114dd90612f66565b60405180910390fd5b600081600201549050600082600201819055503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561153f573d6000803e3d6000fd5b50505050565b60015481565b60008060008084815260200190815260200160002090506000600581111561157657611575611b9b565b5b8160050160009054906101000a900460ff16600581111561159a57611599611b9b565b5b146115da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d190612ff8565b60405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611647573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061166b9190612926565b8260070154600a61167c9190612bac565b1015905060006301e1338083600401546116969190612a19565b42119050816117215780156117155760048360050160006101000a81548160ff021916908360058111156116cd576116cc611b9b565b5b02179055507f2a15f4605f8e68cbaccd2234253a8189163d500a6f60c1751405443ca1562beb85604051611701919061308a565b60405180910390a160009350505050611772565b60009350505050611772565b60018360050160006101000a81548160ff0219169083600581111561174957611748611b9b565b5b021790555061176a856000600a86600101546117659190612e9d565b611777565b600193505050505b919050565b60008060008581526020019081526020016000209050818160020160008282546117a191906129e5565b9250508190555060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639fbe7c73848460030185600801886003811061180157611800612791565b5b60110201600001546006896003811061181d5761181c612791565b5b60020201600c8a6003811061183557611834612791565b5b6002020160028b6003811061184d5761184c612791565b5b015460058c6003811061186357611862612791565b5b602091828204019190069054906101000a900460ff1660018e8e8e604051602001611890939291906130b8565b6040516020818303038152906040526040518a63ffffffff1660e01b81526004016118c298979695949392919061325a565b60206040518083038185885af11580156118e0573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906119059190612926565b9050600082600801856003811061191f5761191e612791565b5b60110201905060008160010182601001546003811061194157611940612791565b5b60050201905082816000018190555060018160010160006101000a81548160ff0219169083151502179055507f4c14e16a98683e5b8bd70d51192048d0499fb3999b27ff1e9dce7e4a2c673479878460405161199e9291906132e8565b60405180910390a150505050505050565b60405180606001604052806003905b6119c66119dc565b8152602001906001900390816119be5790505090565b60405180606001604052806003905b6119f3611a09565b8152602001906001900390816119eb5790505090565b6040518060e001604052806000815260200160001515815260200160001515815260200160008152602001600081526020016000151581526020016000151581525090565b600080fd5b600080fd5b6000819050919050565b611a6b81611a58565b8114611a7657600080fd5b50565b600081359050611a8881611a62565b92915050565b600060208284031215611aa457611aa3611a4e565b5b6000611ab284828501611a79565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611ae682611abb565b9050919050565b611af681611adb565b82525050565b611b0581611a58565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611b45578082015181840152602081019050611b2a565b60008484015250505050565b6000601f19601f8301169050919050565b6000611b6d82611b0b565b611b778185611b16565b9350611b87818560208601611b27565b611b9081611b51565b840191505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60068110611bdb57611bda611b9b565b5b50565b6000819050611bec82611bca565b919050565b6000611bfc82611bde565b9050919050565b611c0c81611bf1565b82525050565b60008115159050919050565b611c2781611c12565b82525050565b600081519050919050565b600082825260208201905092915050565b6000611c5482611c2d565b611c5e8185611c38565b9350611c6e818560208601611b27565b611c7781611b51565b840191505092915050565b600061012082019050611c98600083018c611aed565b611ca5602083018b611afc565b611cb2604083018a611afc565b8181036060830152611cc48189611b62565b9050611cd36080830188611afc565b611ce060a0830187611c03565b611ced60c0830186611afc565b611cfa60e0830185611c1e565b818103610100830152611d0d8184611c49565b90509a9950505050505050505050565b600080fd5b600080fd5b600080fd5b60008083601f840112611d4257611d41611d1d565b5b8235905067ffffffffffffffff811115611d5f57611d5e611d22565b5b602083019150836001820283011115611d7b57611d7a611d27565b5b9250929050565b611d8b81611adb565b8114611d9657600080fd5b50565b600081359050611da881611d82565b92915050565b600081905082602060030282011115611dca57611dc9611d27565b5b92915050565b611dd981611c12565b8114611de457600080fd5b50565b600081359050611df681611dd0565b92915050565b60008083601f840112611e1257611e11611d1d565b5b8235905067ffffffffffffffff811115611e2f57611e2e611d22565b5b602083019150836001820283011115611e4b57611e4a611d27565b5b9250929050565b600080600080600080600060e0888a031215611e7157611e70611a4e565b5b600088013567ffffffffffffffff811115611e8f57611e8e611a53565b5b611e9b8a828b01611d2c565b97509750506020611eae8a828b01611d99565b9550506040611ebf8a828b01611dae565b94505060a0611ed08a828b01611de7565b93505060c088013567ffffffffffffffff811115611ef157611ef0611a53565b5b611efd8a828b01611dfc565b925092505092959891949750929550565b6000602082019050611f236000830184611afc565b92915050565b600060039050919050565b600081905092915050565b6000819050919050565b600060039050919050565b600081905092915050565b6000819050919050565b611f7281611a58565b82525050565b611f8181611c12565b82525050565b60e082016000820151611f9d6000850182611f69565b506020820151611fb06020850182611f78565b506040820151611fc36040850182611f78565b506060820151611fd66060850182611f69565b506080820151611fe96080850182611f69565b5060a0820151611ffc60a0850182611f78565b5060c082015161200f60c0850182611f78565b50505050565b60006120218383611f87565b60e08301905092915050565b6000602082019050919050565b61204381611f49565b61204d8184611f54565b925061205882611f5f565b8060005b838110156120895781516120708782612015565b965061207b8361202d565b92505060018101905061205c565b505050505050565b600061209d838361203a565b6102a08301905092915050565b6000602082019050919050565b6120c081611f29565b6120ca8184611f34565b92506120d582611f3f565b8060005b838110156121065781516120ed8782612091565b96506120f8836120aa565b9250506001810190506120d9565b505050505050565b60006107e08201905061212460008301846120b7565b92915050565b6000806040838503121561214157612140611a4e565b5b600061214f85828601611a79565b925050602061216085828601611a79565b9150509250929050565b60008060008060008060a0878903121561218757612186611a4e565b5b600061219589828a01611de7565b96505060206121a689828a01611de7565b95505060406121b789828a01611a79565b94505060606121c889828a01611a79565b935050608087013567ffffffffffffffff8111156121e9576121e8611a53565b5b6121f589828a01611dfc565b92509250509295509295509295565b60006020820190506122196000830184611c1e565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061226657607f821691505b6020821081036122795761227861221f565b5b50919050565b82818337600083830152505050565b600061229a8385611b16565b93506122a783858461227f565b6122b083611b51565b840190509392505050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6000819050919050565b6122fa816122e7565b82525050565b600082825260208201905092915050565b600061231c82611b0b565b6123268185612300565b9350612336818560208601611b27565b61233f81611b51565b840191505092915050565b600060408301600083015161236260008601826122f1565b506020830151848203602086015261237a8282612311565b9150508091505092915050565b6000612393838361234a565b905092915050565b6000602082019050919050565b60006123b3826122bb565b6123bd81856122c6565b9350836020820285016123cf856122d7565b8060005b8581101561240b57848403895281516123ec8582612387565b94506123f78361239b565b925060208a019950506001810190506123d3565b50829750879550505050505092915050565b60006060820190506124326000830187611aed565b818103602083015261244581858761228e565b9050818103604083015261245981846123a8565b905095945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061249e82611a58565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036124d0576124cf612464565b5b600182019050919050565b600082905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026125777fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261253a565b612581868361253a565b95508019841693508086168417925050509392505050565b6000819050919050565b60006125be6125b96125b484611a58565b612599565b611a58565b9050919050565b6000819050919050565b6125d8836125a3565b6125ec6125e4826125c5565b848454612547565b825550505050565b600090565b6126016125f4565b61260c8184846125cf565b505050565b5b81811015612630576126256000826125f9565b600181019050612612565b5050565b601f8211156126755761264681612515565b61264f8461252a565b8101602085101561265e578190505b61267261266a8561252a565b830182612611565b50505b505050565b600082821c905092915050565b60006126986000198460080261267a565b1980831691505092915050565b60006126b18383612687565b9150826002028217905092915050565b6126cb83836124db565b67ffffffffffffffff8111156126e4576126e36124e6565b5b6126ee825461224e565b6126f9828285612634565b6000601f8311600181146127285760008415612716578287013590505b61272085826126a5565b865550612788565b601f19841661273686612515565b60005b8281101561275e57848901358255600182019150602085019450602081019050612739565b8683101561277b5784890135612777601f891682612687565b8355505b6001600288020188555050505b50505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082905092915050565b60008190508160005260206000209050919050565b601f821115612821576127f2816127cb565b6127fb8461252a565b8101602085101561280a578190505b61281e6128168561252a565b830182612611565b50505b505050565b61283083836127c0565b67ffffffffffffffff811115612849576128486124e6565b5b612853825461224e565b61285e8282856127e0565b6000601f83116001811461288d576000841561287b578287013590505b61288585826126a5565b8655506128ed565b601f19841661289b866127cb565b60005b828110156128c35784890135825560018201915060208501945060208101905061289e565b868310156128e057848901356128dc601f891682612687565b8355505b6001600288020188555050505b50505050505050565b600060208201905061290b6000830184611aed565b92915050565b60008151905061292081611a62565b92915050565b60006020828403121561293c5761293b611a4e565b5b600061294a84828501612911565b91505092915050565b7f53656e6465722068617320696e73756666696369656e74205245502062616c6160008201527f6e63650000000000000000000000000000000000000000000000000000000000602082015250565b60006129af602383611b16565b91506129ba82612953565b604082019050919050565b600060208201905081810360008301526129de816129a2565b9050919050565b60006129f082611a58565b91506129fb83611a58565b9250828203905081811115612a1357612a12612464565b5b92915050565b6000612a2482611a58565b9150612a2f83611a58565b9250828201905080821115612a4757612a46612464565b5b92915050565b7f6f6e56616c6964617465206d6179206f6e6c792062652063616c6c656420627960008201527f207468652044414f20636f6e7472616374000000000000000000000000000000602082015250565b6000612aa9603183611b16565b9150612ab482612a4d565b604082019050919050565b60006020820190508181036000830152612ad881612a9c565b9050919050565b600080600060608486031215612af857612af7611a4e565b5b6000612b0686828701611a79565b9350506020612b1786828701611a79565b9250506040612b2886828701611a79565b9150509250925092565b7f51756f72756d206e6f74206d6574000000000000000000000000000000000000600082015250565b6000612b68600e83611b16565b9150612b7382612b32565b602082019050919050565b6000604082019050612b936000830184611afc565b8181036020830152612ba481612b5b565b905092915050565b6000612bb782611a58565b9150612bc283611a58565b9250828202612bd081611a58565b91508282048414831517612be757612be6612464565b5b5092915050565b7f5374616765203020696e646578206d69736d6174636800000000000000000000600082015250565b6000612c24601683611b16565b9150612c2f82612bee565b602082019050919050565b60006020820190508181036000830152612c5381612c17565b9050919050565b7f526574727920636f756e74206578636565646564000000000000000000000000600082015250565b6000612c90601483611b16565b9150612c9b82612c5a565b602082019050919050565b6000604082019050612cbb6000830184611afc565b8181036020830152612ccc81612c83565b905092915050565b7f5374616765203120696e646578206d69736d6174636800000000000000000000600082015250565b6000612d0a601683611b16565b9150612d1582612cd4565b602082019050919050565b60006020820190508181036000830152612d3981612cfd565b9050919050565b7f5374616765203220696e646578206d69736d6174636800000000000000000000600082015250565b6000612d76601683611b16565b9150612d8182612d40565b602082019050919050565b60006020820190508181036000830152612da581612d69565b9050919050565b60008154612db98161224e565b612dc38186611c38565b94506001821660008114612dde5760018114612df457612e27565b60ff198316865281151560200286019350612e27565b612dfd856127cb565b60005b83811015612e1f57815481890152600182019150602081019050612e00565b808801955050505b50505092915050565b6000606082019050612e456000830186611afc565b612e526020830185611afc565b8181036040830152612e648184612dac565b9050949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612ea882611a58565b9150612eb383611a58565b925082612ec357612ec2612e6e565b5b828204905092915050565b7f52656d61696e696e6720666565732063616e206f6e6c79206265207265636c6160008201527f696d6564207768656e2070726f706f73616c20686173206265656e206163636560208201527f70746564206f72206661696c6564000000000000000000000000000000000000604082015250565b6000612f50604e83611b16565b9150612f5b82612ece565b606082019050919050565b60006020820190508181036000830152612f7f81612f43565b9050919050565b7f4174746573746174696f6e206f6e6c79207065727461696e7320746f2050726f60008201527f706f73616c207374616765000000000000000000000000000000000000000000602082015250565b6000612fe2602b83611b16565b9150612fed82612f86565b604082019050919050565b6000602082019050818103600083015261301181612fd5565b9050919050565b7f4578706972656420776974686f7574206d656574696e6720617474657374617460008201527f696f6e207468726573686f6c6400000000000000000000000000000000000000602082015250565b6000613074602d83611b16565b915061307f82613018565b604082019050919050565b600060408201905061309f6000830184611afc565b81810360208301526130b081613067565b905092915050565b60006060820190506130cd6000830186611afc565b6130da6020830185611afc565b6130e76040830184611afc565b949350505050565b600081546130fc8161224e565b6131068186611b16565b9450600182166000811461312157600181146131375761316a565b60ff19831686528115156020028601935061316a565b61314085612515565b60005b8381101561316257815481890152600182019150602081019050613143565b808801955050505b50505092915050565b600060029050919050565b600081905092915050565b6000819050919050565b600061319f8383611f69565b60208301905092915050565b60008160001c9050919050565b6000819050919050565b60006131d56131d0836131ab565b6131b8565b9050919050565b60006131e882546131c2565b9050919050565b6000600182019050919050565b61320581613173565b61320f818461317e565b925061321a82613189565b8060005b838110156132525761322f826131dc565b6132398782613193565b9650613244836131ef565b92505060018101905061321e565b505050505050565b6000610140820190508181036000830152613275818b6130ef565b9050613284602083018a611afc565b61329160408301896131fc565b61329e60808301886131fc565b6132ab60c0830187611afc565b6132b860e0830186611c1e565b6132c6610100830185611c1e565b8181036101208301526132d98184611c49565b90509998505050505050505050565b60006040820190506132fd6000830185611afc565b61330a6020830184611afc565b939250505056fea26469706673582212205bde99787b176f992c1714aa1f74e188ddc80de7aee6d4837531b2b6da509eea64736f6c63430008180033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/client/src/assets/Work1.json b/client/src/assets/Work1.json index aca9094..7219504 100644 --- a/client/src/assets/Work1.json +++ b/client/src/assets/Work1.json @@ -423,9 +423,9 @@ "type": "int256" }, { - "internalType": "uint256", - "name": "targetPostIndex", - "type": "uint256" + "internalType": "string", + "name": "targetPostId", + "type": "string" } ], "internalType": "struct Citation[]", @@ -439,8 +439,8 @@ "type": "function" } ], - "bytecode": "0x60a06040523480156200001157600080fd5b5060405162002b1238038062002b128339818101604052810190620000379190620001c1565b828282828073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250505080600181905550816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505050506200021d565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620000f582620000c8565b9050919050565b60006200010982620000e8565b9050919050565b6200011b81620000fc565b81146200012757600080fd5b50565b6000815190506200013b8162000110565b92915050565b60006200014e82620000e8565b9050919050565b620001608162000141565b81146200016c57600080fd5b50565b600081519050620001808162000155565b92915050565b6000819050919050565b6200019b8162000186565b8114620001a757600080fd5b50565b600081519050620001bb8162000190565b92915050565b600080600060608486031215620001dd57620001dc620000c3565b5b6000620001ed868287016200012a565b935050602062000200868287016200016f565b92505060406200021386828701620001aa565b9150509250925092565b6080516128cb6200024760003960008181610871015281816109780152610a5701526128cb6000f3fe6080604052600436106100dd5760003560e01c806399ad6c561161007f578063c4a9e11611610059578063c4a9e11614610294578063cf376256146102bf578063d5a44f86146102fd578063d76b67941461033d576100dd565b806399ad6c5614610224578063a035b1fe14610240578063b5b20c001461026b576100dd565b8063815a0572116100bb578063815a05721461015257806381d12c581461018f578063854b6a4f146101d257806395edaaf2146101fb576100dd565b80630d0271d6146100e2578063216ed6ad146100fe5780635badbe4c14610127575b600080fd5b6100fc60048036038101906100f791906112fe565b610368565b005b34801561010a57600080fd5b50610125600480360381019061012091906113df565b610456565b005b34801561013357600080fd5b5061013c610569565b6040516101499190611441565b60405180910390f35b34801561015e57600080fd5b50610179600480360381019061017491906114b2565b61056f565b6040516101869190611441565b60405180910390f35b34801561019b57600080fd5b506101b660048036038101906101b19190611526565b6105ee565b6040516101c99796959493929190611684565b60405180910390f35b3480156101de57600080fd5b506101f960048036038101906101f4919061172d565b61077a565b005b34801561020757600080fd5b50610222600480360381019061021d91906117c3565b610b17565b005b61023e6004803603810190610239919061187a565b610d44565b005b34801561024c57600080fd5b50610255610e8d565b6040516102629190611441565b60405180910390f35b34801561027757600080fd5b50610292600480360381019061028d91906118ee565b610e93565b005b3480156102a057600080fd5b506102a9611008565b6040516102b69190611441565b60405180910390f35b3480156102cb57600080fd5b506102e660048036038101906102e19190611526565b61100e565b6040516102f492919061192e565b60405180910390f35b34801561030957600080fd5b50610324600480360381019061031f9190611526565b611032565b6040516103349493929190611957565b60405180910390f35b34801561034957600080fd5b5061035261108f565b60405161035f9190611441565b60405180910390f35b6001543410156103ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103a4906119e8565b60405180910390fd5b6000600760008154809291906103c290611a37565b9190505590506000600660008381526020019081526020016000209050338160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555034816001018190555061043482611095565b8160030181905550838382600401918261044f929190611cc5565b5050505050565b60008211610499576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161049090611de1565b60405180910390fd5b6000600560008154809291906104ae90611a37565b9190505590506000600460008381526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083816001018190555082426105239190611e01565b81600201819055507fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e98260405161055a9190611441565b60405180910390a15050505050565b60075481565b60008083838101906105819190611526565b9050600060026000838152602001908152602001600020905080600001546001819055507f6a3843c02c26620842ae8496fd3afcb44b27463b3808e2ccdae4bcee5a2e3f20826001546040516105d892919061192e565b60405180910390a1600092505050949350505050565b60066020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020160009054906101000a900460ff169080600301549080600401805461065690611ae8565b80601f016020809104026020016040519081016040528092919081815260200182805461068290611ae8565b80156106cf5780601f106106a4576101008083540402835291602001916106cf565b820191906000526020600020905b8154815290600101906020018083116106b257829003601f168201915b5050505050908060050180546106e490611ae8565b80601f016020809104026020016040519081016040528092919081815260200182805461071090611ae8565b801561075d5780601f106107325761010080835404028352916020019161075d565b820191906000526020600020905b81548152906001019060200180831161074057829003601f168201915b5050505050908060070160009054906101000a900460ff16905087565b6000600660008481526020019081526020016000209050600160038111156107a5576107a4611562565b5b8160020160009054906101000a900460ff1660038111156107c9576107c8611562565b5b14610809576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161080090611e81565b60405180910390fd5b60006004600083600301548152602001908152602001600020905060028260020160006101000a81548160ff0219169083600381111561084c5761084b611562565b5b0217905550828260070160006101000a81548160ff02191690831515021790555060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16634acce5918360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1685600501866006016040518463ffffffff1660e01b81526004016108f69392919061209c565b6020604051808303816000875af1158015610915573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061093991906120f6565b90507f470d2978e081461f6d144c091dfd83ec06e6011da0b03bd1c0121b7fb71370dc858560405161096c929190612123565b60405180910390a160007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637fcf67598560010154846014604051806040016040528060018152602001600381525060405180604001604052806001815260200160028152506064600160006040518963ffffffff1660e01b8152600401610a10979695949392919061225a565b60206040518083038185885af1158015610a2e573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610a5391906120f6565b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663975762b3828560000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16866001015460016040518563ffffffff1660e01b8152600401610add94939291906122df565b600060405180830381600087803b158015610af757600080fd5b505af1158015610b0b573d6000803e3d6000fd5b50505050505050505050565b600060066000878152602001908152602001600020905060006003811115610b4257610b41611562565b5b8160020160009054906101000a900460ff166003811115610b6657610b65611562565b5b14610ba6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9d90612370565b60405180910390fd5b6000600460008360030154815260200190815260200160002090503373ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4a90612402565b60405180910390fd5b60018260020160006101000a81548160ff02191690836003811115610c7b57610c7a611562565b5b02179055508585836005019182610c93929190611cc5565b5060005b84849050811015610d035782600601858583818110610cb957610cb8612422565b5b90506040020190806001815401808255809150506001900390600052602060002090600202016000909190919091508181610cf4919061259b565b50508080600101915050610c97565b507ffaecd3b4db089bf25a48306100dd5fb2152e3887c7815b2b221dbb7da2f8e8dc87604051610d339190611441565b60405180910390a150505050505050565b600060036000815480929190610d5990611a37565b919050559050600060026000838152602001908152602001600020905085816000018190555060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632805b5d93487873388600189604051602001610dd39190611441565b6040516020818303038152906040526040518863ffffffff1660e01b8152600401610e0396959493929190612642565b60206040518083038185885af1158015610e21573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610e4691906120f6565b81600101819055507f71eae802097e4e77c5345dee7f35d74ac0ae45eb5a456fdaed0de4d141fc5d8c82604051610e7d9190611441565b60405180910390a1505050505050565b60015481565b60006004600084815260200190815260200160002090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610f3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3390612717565b60405180910390fd5b8060030160009054906101000a900460ff1615610f8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f85906127a9565b60405180910390fd5b8060020154421115610fb3578142610fa69190611e01565b8160020181905550610fcc565b818160020154610fc39190611e01565b81600201819055505b7fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e983604051610ffb9190611441565b60405180910390a1505050565b60055481565b60026020528060005260406000206000915090508060000154908060010154905082565b60046020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030160009054906101000a900460ff16905084565b60035481565b600061109f611114565b9050600060046000838152602001908152602001600020905060018160030160006101000a81548160ff0219169083151502179055507fd9e7f38a71691fb1db2da17057c03d381a42a9925350883f10e8e5d0bca4a3b4838360405161110692919061192e565b60405180910390a150919050565b60008060005b60055481101561119b576004600082815260200190815260200160002060030160009054906101000a900460ff1661118e576004600082815260200190815260200160002060020154421161118e5760046000828152602001908152602001600020600101548261118b9190611e01565b91505b808060010191505061111a565b50600081116111df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d690612815565b60405180910390fd5b600081446111ed9190612864565b9050600080600090505b600554811015611288576004600082815260200190815260200160002060030160009054906101000a900460ff1661127b576004600082815260200190815260200160002060020154421161127b576004600082815260200190815260200160002060010154826112689190611e01565b91508282111561127a57809450611288565b5b80806001019150506111f7565b5050505090565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f8401126112be576112bd611299565b5b8235905067ffffffffffffffff8111156112db576112da61129e565b5b6020830191508360018202830111156112f7576112f66112a3565b5b9250929050565b600080602083850312156113155761131461128f565b5b600083013567ffffffffffffffff81111561133357611332611294565b5b61133f858286016112a8565b92509250509250929050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006113768261134b565b9050919050565b6113868161136b565b811461139157600080fd5b50565b6000813590506113a38161137d565b92915050565b6000819050919050565b6113bc816113a9565b81146113c757600080fd5b50565b6000813590506113d9816113b3565b92915050565b6000806000606084860312156113f8576113f761128f565b5b600061140686828701611394565b9350506020611417868287016113ca565b9250506040611428868287016113ca565b9150509250925092565b61143b816113a9565b82525050565b60006020820190506114566000830184611432565b92915050565b60008083601f84011261147257611471611299565b5b8235905067ffffffffffffffff81111561148f5761148e61129e565b5b6020830191508360018202830111156114ab576114aa6112a3565b5b9250929050565b600080600080606085870312156114cc576114cb61128f565b5b60006114da878288016113ca565b94505060206114eb878288016113ca565b935050604085013567ffffffffffffffff81111561150c5761150b611294565b5b6115188782880161145c565b925092505092959194509250565b60006020828403121561153c5761153b61128f565b5b600061154a848285016113ca565b91505092915050565b61155c8161136b565b82525050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600481106115a2576115a1611562565b5b50565b60008190506115b382611591565b919050565b60006115c3826115a5565b9050919050565b6115d3816115b8565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b838110156116135780820151818401526020810190506115f8565b60008484015250505050565b6000601f19601f8301169050919050565b600061163b826115d9565b61164581856115e4565b93506116558185602086016115f5565b61165e8161161f565b840191505092915050565b60008115159050919050565b61167e81611669565b82525050565b600060e082019050611699600083018a611553565b6116a66020830189611432565b6116b360408301886115ca565b6116c06060830187611432565b81810360808301526116d28186611630565b905081810360a08301526116e68185611630565b90506116f560c0830184611675565b98975050505050505050565b61170a81611669565b811461171557600080fd5b50565b60008135905061172781611701565b92915050565b600080604083850312156117445761174361128f565b5b6000611752858286016113ca565b925050602061176385828601611718565b9150509250929050565b60008083601f84011261178357611782611299565b5b8235905067ffffffffffffffff8111156117a05761179f61129e565b5b6020830191508360408202830111156117bc576117bb6112a3565b5b9250929050565b6000806000806000606086880312156117df576117de61128f565b5b60006117ed888289016113ca565b955050602086013567ffffffffffffffff81111561180e5761180d611294565b5b61181a888289016112a8565b9450945050604086013567ffffffffffffffff81111561183d5761183c611294565b5b6118498882890161176d565b92509250509295509295909350565b600081905082602060030282011115611874576118736112a3565b5b92915050565b60008060008060a085870312156118945761189361128f565b5b60006118a2878288016113ca565b945050602085013567ffffffffffffffff8111156118c3576118c2611294565b5b6118cf878288016112a8565b935093505060406118e287828801611858565b91505092959194509250565b600080604083850312156119055761190461128f565b5b6000611913858286016113ca565b9250506020611924858286016113ca565b9150509250929050565b60006040820190506119436000830185611432565b6119506020830184611432565b9392505050565b600060808201905061196c6000830187611553565b6119796020830186611432565b6119866040830185611432565b6119936060830184611675565b95945050505050565b7f496e73756666696369656e742066656500000000000000000000000000000000600082015250565b60006119d26010836115e4565b91506119dd8261199c565b602082019050919050565b60006020820190508181036000830152611a01816119c5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611a42826113a9565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611a7457611a73611a08565b5b600182019050919050565b600082905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611b0057607f821691505b602082108103611b1357611b12611ab9565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302611b7b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82611b3e565b611b858683611b3e565b95508019841693508086168417925050509392505050565b6000819050919050565b6000611bc2611bbd611bb8846113a9565b611b9d565b6113a9565b9050919050565b6000819050919050565b611bdc83611ba7565b611bf0611be882611bc9565b848454611b4b565b825550505050565b600090565b611c05611bf8565b611c10818484611bd3565b505050565b5b81811015611c3457611c29600082611bfd565b600181019050611c16565b5050565b601f821115611c7957611c4a81611b19565b611c5384611b2e565b81016020851015611c62578190505b611c76611c6e85611b2e565b830182611c15565b50505b505050565b600082821c905092915050565b6000611c9c60001984600802611c7e565b1980831691505092915050565b6000611cb58383611c8b565b9150826002028217905092915050565b611ccf8383611a7f565b67ffffffffffffffff811115611ce857611ce7611a8a565b5b611cf28254611ae8565b611cfd828285611c38565b6000601f831160018114611d2c5760008415611d1a578287013590505b611d248582611ca9565b865550611d8c565b601f198416611d3a86611b19565b60005b82811015611d6257848901358255600182019150602085019450602081019050611d3d565b86831015611d7f5784890135611d7b601f891682611c8b565b8355505b6001600288020188555050505b50505050505050565b7f4e6f207374616b652070726f7669646564000000000000000000000000000000600082015250565b6000611dcb6011836115e4565b9150611dd682611d95565b602082019050919050565b60006020820190508181036000830152611dfa81611dbe565b9050919050565b6000611e0c826113a9565b9150611e17836113a9565b9250828201905080821115611e2f57611e2e611a08565b5b92915050565b7f537461747573206d7573742062652045766964656e63655375626d6974746564600082015250565b6000611e6b6020836115e4565b9150611e7682611e35565b602082019050919050565b60006020820190508181036000830152611e9a81611e5e565b9050919050565b60008154611eae81611ae8565b611eb881866115e4565b94506001821660008114611ed35760018114611ee957611f1c565b60ff198316865281151560200286019350611f1c565b611ef285611b19565b60005b83811015611f1457815481890152600182019150602081019050611ef5565b808801955050505b50505092915050565b600081549050919050565b600082825260208201905092915050565b60008190508160005260206000209050919050565b60008160001c9050919050565b6000819050919050565b6000611f80611f7b83611f56565b611f63565b9050919050565b6000819050919050565b611f9a81611f87565b82525050565b6000819050919050565b6000611fbd611fb883611f56565b611fa0565b9050919050565b611fcd816113a9565b82525050565b604082016000808301549050611fe881611f6d565b611ff56000860182611f91565b506001830154905061200681611faa565b6120136020860182611fc4565b5050505050565b60006120268383611fd3565b60408301905092915050565b6000600282019050919050565b600061204a82611f25565b6120548185611f30565b935061205f83611f41565b8060005b8381101561208f5781612076888261201a565b975061208183612032565b925050600181019050612063565b5085935050505092915050565b60006060820190506120b16000830186611553565b81810360208301526120c38185611ea1565b905081810360408301526120d7818461203f565b9050949350505050565b6000815190506120f0816113b3565b92915050565b60006020828403121561210c5761210b61128f565b5b600061211a848285016120e1565b91505092915050565b60006040820190506121386000830185611432565b6121456020830184611675565b9392505050565b600060029050919050565b600081905092915050565b6000819050919050565b60006121788383611fc4565b60208301905092915050565b6000602082019050919050565b61219a8161214c565b6121a48184612157565b92506121af82612162565b8060005b838110156121e05781516121c7878261216c565b96506121d283612184565b9250506001810190506121b3565b505050505050565b6000819050919050565b600061220d612208612203846121e8565b611b9d565b6113a9565b9050919050565b61221d816121f2565b82525050565b600082825260208201905092915050565b50565b6000612244600083612223565b915061224f82612234565b600082019050919050565b600061014082019050612270600083018a611432565b61227d6020830189611432565b61228a6040830188612191565b6122976080830187612191565b6122a460c0830186612214565b6122b160e0830185611675565b6122bf610100830184611675565b8181036101208301526122d181612237565b905098975050505050505050565b60006080820190506122f46000830187611432565b6123016020830186611553565b61230e6040830185611432565b61231b6060830184611675565b95945050505050565b7f537461747573206d757374206265205265717565737465640000000000000000600082015250565b600061235a6018836115e4565b915061236582612324565b602082019050919050565b600060208201905081810360008301526123898161234d565b9050919050565b7f576f726b65722063616e206f6e6c79207375626d69742065766964656e63652060008201527f666f7220776f726b2074686579206172652061737369676e6564000000000000602082015250565b60006123ec603a836115e4565b91506123f782612390565b604082019050919050565b6000602082019050818103600083015261241b816123df565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b61245a81611f87565b811461246557600080fd5b50565b6000813561247581612451565b80915050919050565b60008160001b9050919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6124b78461247e565b9350801983169250808416831791505092915050565b60006124e86124e36124de84611f87565b611b9d565b611f87565b9050919050565b6000819050919050565b612502826124cd565b61251561250e826124ef565b835461248b565b8255505050565b60008135612529816113b3565b80915050919050565b61253b82611ba7565b61254e61254782611bc9565b835461248b565b8255505050565b60008101600083018061256781612468565b905061257381846124f9565b5050506001810160208301806125888161251c565b90506125948184612532565b5050505050565b6125a58282612555565b5050565b82818337600083830152505050565b60006125c483856115e4565b93506125d18385846125a9565b6125da8361161f565b840190509392505050565b82818337505050565b6125fa606083836125e5565b5050565b600081519050919050565b6000612614826125fe565b61261e8185612223565b935061262e8185602086016115f5565b6126378161161f565b840191505092915050565b600060e082019050818103600083015261265d81888a6125b8565b905061266c6020830187611553565b61267960408301866125ee565b61268660a0830185611675565b81810360c08301526126988184612609565b9050979650505050505050565b7f576f726b65722063616e206f6e6c7920657874656e64207468656972206f776e60008201527f20617661696c6162696c697479207374616b6500000000000000000000000000602082015250565b60006127016033836115e4565b915061270c826126a5565b604082019050919050565b60006020820190508181036000830152612730816126f4565b9050919050565b7f5374616b652068617320616c7265616479206265656e2061737369676e65642060008201527f776f726b00000000000000000000000000000000000000000000000000000000602082015250565b60006127936024836115e4565b915061279e82612737565b604082019050919050565b600060208201905081810360008301526127c281612786565b9050919050565b7f4e6f20617661696c61626c6520776f726b6572207374616b6573000000000000600082015250565b60006127ff601a836115e4565b915061280a826127c9565b602082019050919050565b6000602082019050818103600083015261282e816127f2565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061286f826113a9565b915061287a836113a9565b92508261288a57612889612835565b5b82820690509291505056fea2646970667358221220fe5f3f6d1b5535618e0308702cf1c837cf976ac1dabf5cddfb9a25e27af5167764736f6c63430008180033", - "deployedBytecode": "0x6080604052600436106100dd5760003560e01c806399ad6c561161007f578063c4a9e11611610059578063c4a9e11614610294578063cf376256146102bf578063d5a44f86146102fd578063d76b67941461033d576100dd565b806399ad6c5614610224578063a035b1fe14610240578063b5b20c001461026b576100dd565b8063815a0572116100bb578063815a05721461015257806381d12c581461018f578063854b6a4f146101d257806395edaaf2146101fb576100dd565b80630d0271d6146100e2578063216ed6ad146100fe5780635badbe4c14610127575b600080fd5b6100fc60048036038101906100f791906112fe565b610368565b005b34801561010a57600080fd5b50610125600480360381019061012091906113df565b610456565b005b34801561013357600080fd5b5061013c610569565b6040516101499190611441565b60405180910390f35b34801561015e57600080fd5b50610179600480360381019061017491906114b2565b61056f565b6040516101869190611441565b60405180910390f35b34801561019b57600080fd5b506101b660048036038101906101b19190611526565b6105ee565b6040516101c99796959493929190611684565b60405180910390f35b3480156101de57600080fd5b506101f960048036038101906101f4919061172d565b61077a565b005b34801561020757600080fd5b50610222600480360381019061021d91906117c3565b610b17565b005b61023e6004803603810190610239919061187a565b610d44565b005b34801561024c57600080fd5b50610255610e8d565b6040516102629190611441565b60405180910390f35b34801561027757600080fd5b50610292600480360381019061028d91906118ee565b610e93565b005b3480156102a057600080fd5b506102a9611008565b6040516102b69190611441565b60405180910390f35b3480156102cb57600080fd5b506102e660048036038101906102e19190611526565b61100e565b6040516102f492919061192e565b60405180910390f35b34801561030957600080fd5b50610324600480360381019061031f9190611526565b611032565b6040516103349493929190611957565b60405180910390f35b34801561034957600080fd5b5061035261108f565b60405161035f9190611441565b60405180910390f35b6001543410156103ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103a4906119e8565b60405180910390fd5b6000600760008154809291906103c290611a37565b9190505590506000600660008381526020019081526020016000209050338160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555034816001018190555061043482611095565b8160030181905550838382600401918261044f929190611cc5565b5050505050565b60008211610499576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161049090611de1565b60405180910390fd5b6000600560008154809291906104ae90611a37565b9190505590506000600460008381526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083816001018190555082426105239190611e01565b81600201819055507fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e98260405161055a9190611441565b60405180910390a15050505050565b60075481565b60008083838101906105819190611526565b9050600060026000838152602001908152602001600020905080600001546001819055507f6a3843c02c26620842ae8496fd3afcb44b27463b3808e2ccdae4bcee5a2e3f20826001546040516105d892919061192e565b60405180910390a1600092505050949350505050565b60066020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020160009054906101000a900460ff169080600301549080600401805461065690611ae8565b80601f016020809104026020016040519081016040528092919081815260200182805461068290611ae8565b80156106cf5780601f106106a4576101008083540402835291602001916106cf565b820191906000526020600020905b8154815290600101906020018083116106b257829003601f168201915b5050505050908060050180546106e490611ae8565b80601f016020809104026020016040519081016040528092919081815260200182805461071090611ae8565b801561075d5780601f106107325761010080835404028352916020019161075d565b820191906000526020600020905b81548152906001019060200180831161074057829003601f168201915b5050505050908060070160009054906101000a900460ff16905087565b6000600660008481526020019081526020016000209050600160038111156107a5576107a4611562565b5b8160020160009054906101000a900460ff1660038111156107c9576107c8611562565b5b14610809576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161080090611e81565b60405180910390fd5b60006004600083600301548152602001908152602001600020905060028260020160006101000a81548160ff0219169083600381111561084c5761084b611562565b5b0217905550828260070160006101000a81548160ff02191690831515021790555060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16634acce5918360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1685600501866006016040518463ffffffff1660e01b81526004016108f69392919061209c565b6020604051808303816000875af1158015610915573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061093991906120f6565b90507f470d2978e081461f6d144c091dfd83ec06e6011da0b03bd1c0121b7fb71370dc858560405161096c929190612123565b60405180910390a160007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637fcf67598560010154846014604051806040016040528060018152602001600381525060405180604001604052806001815260200160028152506064600160006040518963ffffffff1660e01b8152600401610a10979695949392919061225a565b60206040518083038185885af1158015610a2e573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610a5391906120f6565b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663975762b3828560000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16866001015460016040518563ffffffff1660e01b8152600401610add94939291906122df565b600060405180830381600087803b158015610af757600080fd5b505af1158015610b0b573d6000803e3d6000fd5b50505050505050505050565b600060066000878152602001908152602001600020905060006003811115610b4257610b41611562565b5b8160020160009054906101000a900460ff166003811115610b6657610b65611562565b5b14610ba6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9d90612370565b60405180910390fd5b6000600460008360030154815260200190815260200160002090503373ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4a90612402565b60405180910390fd5b60018260020160006101000a81548160ff02191690836003811115610c7b57610c7a611562565b5b02179055508585836005019182610c93929190611cc5565b5060005b84849050811015610d035782600601858583818110610cb957610cb8612422565b5b90506040020190806001815401808255809150506001900390600052602060002090600202016000909190919091508181610cf4919061259b565b50508080600101915050610c97565b507ffaecd3b4db089bf25a48306100dd5fb2152e3887c7815b2b221dbb7da2f8e8dc87604051610d339190611441565b60405180910390a150505050505050565b600060036000815480929190610d5990611a37565b919050559050600060026000838152602001908152602001600020905085816000018190555060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632805b5d93487873388600189604051602001610dd39190611441565b6040516020818303038152906040526040518863ffffffff1660e01b8152600401610e0396959493929190612642565b60206040518083038185885af1158015610e21573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610e4691906120f6565b81600101819055507f71eae802097e4e77c5345dee7f35d74ac0ae45eb5a456fdaed0de4d141fc5d8c82604051610e7d9190611441565b60405180910390a1505050505050565b60015481565b60006004600084815260200190815260200160002090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610f3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3390612717565b60405180910390fd5b8060030160009054906101000a900460ff1615610f8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f85906127a9565b60405180910390fd5b8060020154421115610fb3578142610fa69190611e01565b8160020181905550610fcc565b818160020154610fc39190611e01565b81600201819055505b7fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e983604051610ffb9190611441565b60405180910390a1505050565b60055481565b60026020528060005260406000206000915090508060000154908060010154905082565b60046020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030160009054906101000a900460ff16905084565b60035481565b600061109f611114565b9050600060046000838152602001908152602001600020905060018160030160006101000a81548160ff0219169083151502179055507fd9e7f38a71691fb1db2da17057c03d381a42a9925350883f10e8e5d0bca4a3b4838360405161110692919061192e565b60405180910390a150919050565b60008060005b60055481101561119b576004600082815260200190815260200160002060030160009054906101000a900460ff1661118e576004600082815260200190815260200160002060020154421161118e5760046000828152602001908152602001600020600101548261118b9190611e01565b91505b808060010191505061111a565b50600081116111df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d690612815565b60405180910390fd5b600081446111ed9190612864565b9050600080600090505b600554811015611288576004600082815260200190815260200160002060030160009054906101000a900460ff1661127b576004600082815260200190815260200160002060020154421161127b576004600082815260200190815260200160002060010154826112689190611e01565b91508282111561127a57809450611288565b5b80806001019150506111f7565b5050505090565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f8401126112be576112bd611299565b5b8235905067ffffffffffffffff8111156112db576112da61129e565b5b6020830191508360018202830111156112f7576112f66112a3565b5b9250929050565b600080602083850312156113155761131461128f565b5b600083013567ffffffffffffffff81111561133357611332611294565b5b61133f858286016112a8565b92509250509250929050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006113768261134b565b9050919050565b6113868161136b565b811461139157600080fd5b50565b6000813590506113a38161137d565b92915050565b6000819050919050565b6113bc816113a9565b81146113c757600080fd5b50565b6000813590506113d9816113b3565b92915050565b6000806000606084860312156113f8576113f761128f565b5b600061140686828701611394565b9350506020611417868287016113ca565b9250506040611428868287016113ca565b9150509250925092565b61143b816113a9565b82525050565b60006020820190506114566000830184611432565b92915050565b60008083601f84011261147257611471611299565b5b8235905067ffffffffffffffff81111561148f5761148e61129e565b5b6020830191508360018202830111156114ab576114aa6112a3565b5b9250929050565b600080600080606085870312156114cc576114cb61128f565b5b60006114da878288016113ca565b94505060206114eb878288016113ca565b935050604085013567ffffffffffffffff81111561150c5761150b611294565b5b6115188782880161145c565b925092505092959194509250565b60006020828403121561153c5761153b61128f565b5b600061154a848285016113ca565b91505092915050565b61155c8161136b565b82525050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600481106115a2576115a1611562565b5b50565b60008190506115b382611591565b919050565b60006115c3826115a5565b9050919050565b6115d3816115b8565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b838110156116135780820151818401526020810190506115f8565b60008484015250505050565b6000601f19601f8301169050919050565b600061163b826115d9565b61164581856115e4565b93506116558185602086016115f5565b61165e8161161f565b840191505092915050565b60008115159050919050565b61167e81611669565b82525050565b600060e082019050611699600083018a611553565b6116a66020830189611432565b6116b360408301886115ca565b6116c06060830187611432565b81810360808301526116d28186611630565b905081810360a08301526116e68185611630565b90506116f560c0830184611675565b98975050505050505050565b61170a81611669565b811461171557600080fd5b50565b60008135905061172781611701565b92915050565b600080604083850312156117445761174361128f565b5b6000611752858286016113ca565b925050602061176385828601611718565b9150509250929050565b60008083601f84011261178357611782611299565b5b8235905067ffffffffffffffff8111156117a05761179f61129e565b5b6020830191508360408202830111156117bc576117bb6112a3565b5b9250929050565b6000806000806000606086880312156117df576117de61128f565b5b60006117ed888289016113ca565b955050602086013567ffffffffffffffff81111561180e5761180d611294565b5b61181a888289016112a8565b9450945050604086013567ffffffffffffffff81111561183d5761183c611294565b5b6118498882890161176d565b92509250509295509295909350565b600081905082602060030282011115611874576118736112a3565b5b92915050565b60008060008060a085870312156118945761189361128f565b5b60006118a2878288016113ca565b945050602085013567ffffffffffffffff8111156118c3576118c2611294565b5b6118cf878288016112a8565b935093505060406118e287828801611858565b91505092959194509250565b600080604083850312156119055761190461128f565b5b6000611913858286016113ca565b9250506020611924858286016113ca565b9150509250929050565b60006040820190506119436000830185611432565b6119506020830184611432565b9392505050565b600060808201905061196c6000830187611553565b6119796020830186611432565b6119866040830185611432565b6119936060830184611675565b95945050505050565b7f496e73756666696369656e742066656500000000000000000000000000000000600082015250565b60006119d26010836115e4565b91506119dd8261199c565b602082019050919050565b60006020820190508181036000830152611a01816119c5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611a42826113a9565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611a7457611a73611a08565b5b600182019050919050565b600082905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611b0057607f821691505b602082108103611b1357611b12611ab9565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302611b7b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82611b3e565b611b858683611b3e565b95508019841693508086168417925050509392505050565b6000819050919050565b6000611bc2611bbd611bb8846113a9565b611b9d565b6113a9565b9050919050565b6000819050919050565b611bdc83611ba7565b611bf0611be882611bc9565b848454611b4b565b825550505050565b600090565b611c05611bf8565b611c10818484611bd3565b505050565b5b81811015611c3457611c29600082611bfd565b600181019050611c16565b5050565b601f821115611c7957611c4a81611b19565b611c5384611b2e565b81016020851015611c62578190505b611c76611c6e85611b2e565b830182611c15565b50505b505050565b600082821c905092915050565b6000611c9c60001984600802611c7e565b1980831691505092915050565b6000611cb58383611c8b565b9150826002028217905092915050565b611ccf8383611a7f565b67ffffffffffffffff811115611ce857611ce7611a8a565b5b611cf28254611ae8565b611cfd828285611c38565b6000601f831160018114611d2c5760008415611d1a578287013590505b611d248582611ca9565b865550611d8c565b601f198416611d3a86611b19565b60005b82811015611d6257848901358255600182019150602085019450602081019050611d3d565b86831015611d7f5784890135611d7b601f891682611c8b565b8355505b6001600288020188555050505b50505050505050565b7f4e6f207374616b652070726f7669646564000000000000000000000000000000600082015250565b6000611dcb6011836115e4565b9150611dd682611d95565b602082019050919050565b60006020820190508181036000830152611dfa81611dbe565b9050919050565b6000611e0c826113a9565b9150611e17836113a9565b9250828201905080821115611e2f57611e2e611a08565b5b92915050565b7f537461747573206d7573742062652045766964656e63655375626d6974746564600082015250565b6000611e6b6020836115e4565b9150611e7682611e35565b602082019050919050565b60006020820190508181036000830152611e9a81611e5e565b9050919050565b60008154611eae81611ae8565b611eb881866115e4565b94506001821660008114611ed35760018114611ee957611f1c565b60ff198316865281151560200286019350611f1c565b611ef285611b19565b60005b83811015611f1457815481890152600182019150602081019050611ef5565b808801955050505b50505092915050565b600081549050919050565b600082825260208201905092915050565b60008190508160005260206000209050919050565b60008160001c9050919050565b6000819050919050565b6000611f80611f7b83611f56565b611f63565b9050919050565b6000819050919050565b611f9a81611f87565b82525050565b6000819050919050565b6000611fbd611fb883611f56565b611fa0565b9050919050565b611fcd816113a9565b82525050565b604082016000808301549050611fe881611f6d565b611ff56000860182611f91565b506001830154905061200681611faa565b6120136020860182611fc4565b5050505050565b60006120268383611fd3565b60408301905092915050565b6000600282019050919050565b600061204a82611f25565b6120548185611f30565b935061205f83611f41565b8060005b8381101561208f5781612076888261201a565b975061208183612032565b925050600181019050612063565b5085935050505092915050565b60006060820190506120b16000830186611553565b81810360208301526120c38185611ea1565b905081810360408301526120d7818461203f565b9050949350505050565b6000815190506120f0816113b3565b92915050565b60006020828403121561210c5761210b61128f565b5b600061211a848285016120e1565b91505092915050565b60006040820190506121386000830185611432565b6121456020830184611675565b9392505050565b600060029050919050565b600081905092915050565b6000819050919050565b60006121788383611fc4565b60208301905092915050565b6000602082019050919050565b61219a8161214c565b6121a48184612157565b92506121af82612162565b8060005b838110156121e05781516121c7878261216c565b96506121d283612184565b9250506001810190506121b3565b505050505050565b6000819050919050565b600061220d612208612203846121e8565b611b9d565b6113a9565b9050919050565b61221d816121f2565b82525050565b600082825260208201905092915050565b50565b6000612244600083612223565b915061224f82612234565b600082019050919050565b600061014082019050612270600083018a611432565b61227d6020830189611432565b61228a6040830188612191565b6122976080830187612191565b6122a460c0830186612214565b6122b160e0830185611675565b6122bf610100830184611675565b8181036101208301526122d181612237565b905098975050505050505050565b60006080820190506122f46000830187611432565b6123016020830186611553565b61230e6040830185611432565b61231b6060830184611675565b95945050505050565b7f537461747573206d757374206265205265717565737465640000000000000000600082015250565b600061235a6018836115e4565b915061236582612324565b602082019050919050565b600060208201905081810360008301526123898161234d565b9050919050565b7f576f726b65722063616e206f6e6c79207375626d69742065766964656e63652060008201527f666f7220776f726b2074686579206172652061737369676e6564000000000000602082015250565b60006123ec603a836115e4565b91506123f782612390565b604082019050919050565b6000602082019050818103600083015261241b816123df565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b61245a81611f87565b811461246557600080fd5b50565b6000813561247581612451565b80915050919050565b60008160001b9050919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6124b78461247e565b9350801983169250808416831791505092915050565b60006124e86124e36124de84611f87565b611b9d565b611f87565b9050919050565b6000819050919050565b612502826124cd565b61251561250e826124ef565b835461248b565b8255505050565b60008135612529816113b3565b80915050919050565b61253b82611ba7565b61254e61254782611bc9565b835461248b565b8255505050565b60008101600083018061256781612468565b905061257381846124f9565b5050506001810160208301806125888161251c565b90506125948184612532565b5050505050565b6125a58282612555565b5050565b82818337600083830152505050565b60006125c483856115e4565b93506125d18385846125a9565b6125da8361161f565b840190509392505050565b82818337505050565b6125fa606083836125e5565b5050565b600081519050919050565b6000612614826125fe565b61261e8185612223565b935061262e8185602086016115f5565b6126378161161f565b840191505092915050565b600060e082019050818103600083015261265d81888a6125b8565b905061266c6020830187611553565b61267960408301866125ee565b61268660a0830185611675565b81810360c08301526126988184612609565b9050979650505050505050565b7f576f726b65722063616e206f6e6c7920657874656e64207468656972206f776e60008201527f20617661696c6162696c697479207374616b6500000000000000000000000000602082015250565b60006127016033836115e4565b915061270c826126a5565b604082019050919050565b60006020820190508181036000830152612730816126f4565b9050919050565b7f5374616b652068617320616c7265616479206265656e2061737369676e65642060008201527f776f726b00000000000000000000000000000000000000000000000000000000602082015250565b60006127936024836115e4565b915061279e82612737565b604082019050919050565b600060208201905081810360008301526127c281612786565b9050919050565b7f4e6f20617661696c61626c6520776f726b6572207374616b6573000000000000600082015250565b60006127ff601a836115e4565b915061280a826127c9565b602082019050919050565b6000602082019050818103600083015261282e816127f2565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061286f826113a9565b915061287a836113a9565b92508261288a57612889612835565b5b82820690509291505056fea2646970667358221220fe5f3f6d1b5535618e0308702cf1c837cf976ac1dabf5cddfb9a25e27af5167764736f6c63430008180033", + "bytecode": "0x60a06040523480156200001157600080fd5b5060405162002c0938038062002c098339818101604052810190620000379190620001c1565b828282828073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250505080600181905550816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505050506200021d565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620000f582620000c8565b9050919050565b60006200010982620000e8565b9050919050565b6200011b81620000fc565b81146200012757600080fd5b50565b6000815190506200013b8162000110565b92915050565b60006200014e82620000e8565b9050919050565b620001608162000141565b81146200016c57600080fd5b50565b600081519050620001808162000155565b92915050565b6000819050919050565b6200019b8162000186565b8114620001a757600080fd5b50565b600081519050620001bb8162000190565b92915050565b600080600060608486031215620001dd57620001dc620000c3565b5b6000620001ed868287016200012a565b935050602062000200868287016200016f565b92505060406200021386828701620001aa565b9150509250925092565b6080516129c2620002476000396000818161086f015281816109630152610a4501526129c26000f3fe6080604052600436106100dd5760003560e01c8063a035b1fe1161007f578063cf37625611610059578063cf37625614610296578063d0fae95f146102d4578063d5a44f86146102fd578063d76b67941461033d576100dd565b8063a035b1fe14610217578063b5b20c0014610242578063c4a9e1161461026b576100dd565b8063815a0572116100bb578063815a05721461015257806381d12c581461018f578063854b6a4f146101d257806399ad6c56146101fb576100dd565b80630d0271d6146100e2578063216ed6ad146100fe5780635badbe4c14610127575b600080fd5b6100fc60048036038101906100f791906112f7565b610368565b005b34801561010a57600080fd5b50610125600480360381019061012091906113d8565b610456565b005b34801561013357600080fd5b5061013c610569565b604051610149919061143a565b60405180910390f35b34801561015e57600080fd5b50610179600480360381019061017491906114ab565b61056f565b604051610186919061143a565b60405180910390f35b34801561019b57600080fd5b506101b660048036038101906101b1919061151f565b6105ee565b6040516101c9979695949392919061167d565b60405180910390f35b3480156101de57600080fd5b506101f960048036038101906101f49190611726565b61077a565b005b61021560048036038101906102109190611788565b610b04565b005b34801561022357600080fd5b5061022c610c4d565b604051610239919061143a565b60405180910390f35b34801561024e57600080fd5b50610269600480360381019061026491906117fc565b610c53565b005b34801561027757600080fd5b50610280610dc8565b60405161028d919061143a565b60405180910390f35b3480156102a257600080fd5b506102bd60048036038101906102b8919061151f565b610dce565b6040516102cb92919061183c565b60405180910390f35b3480156102e057600080fd5b506102fb60048036038101906102f691906118bb565b610df2565b005b34801561030957600080fd5b50610324600480360381019061031f919061151f565b61102b565b6040516103349493929190611950565b60405180910390f35b34801561034957600080fd5b50610352611088565b60405161035f919061143a565b60405180910390f35b6001543410156103ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103a4906119e1565b60405180910390fd5b6000600760008154809291906103c290611a30565b9190505590506000600660008381526020019081526020016000209050338160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503481600101819055506104348261108e565b8160030181905550838382600401918261044f929190611cbe565b5050505050565b60008211610499576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161049090611dda565b60405180910390fd5b6000600560008154809291906104ae90611a30565b9190505590506000600460008381526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083816001018190555082426105239190611dfa565b81600201819055507fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e98260405161055a919061143a565b60405180910390a15050505050565b60075481565b6000808383810190610581919061151f565b9050600060026000838152602001908152602001600020905080600001546001819055507f6a3843c02c26620842ae8496fd3afcb44b27463b3808e2ccdae4bcee5a2e3f20826001546040516105d892919061183c565b60405180910390a1600092505050949350505050565b60066020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020160009054906101000a900460ff169080600301549080600401805461065690611ae1565b80601f016020809104026020016040519081016040528092919081815260200182805461068290611ae1565b80156106cf5780601f106106a4576101008083540402835291602001916106cf565b820191906000526020600020905b8154815290600101906020018083116106b257829003601f168201915b5050505050908060050180546106e490611ae1565b80601f016020809104026020016040519081016040528092919081815260200182805461071090611ae1565b801561075d5780601f106107325761010080835404028352916020019161075d565b820191906000526020600020905b81548152906001019060200180831161074057829003601f168201915b5050505050908060070160009054906101000a900460ff16905087565b6000600660008481526020019081526020016000209050600160038111156107a5576107a461155b565b5b8160020160009054906101000a900460ff1660038111156107c9576107c861155b565b5b14610809576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161080090611e7a565b60405180910390fd5b60006004600083600301548152602001908152602001600020905060028260020160006101000a81548160ff0219169083600381111561084c5761084b61155b565b5b0217905550828260070160006101000a81548160ff0219169083151502179055507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166338787df08260000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684600501856006016040518463ffffffff1660e01b81526004016108f49392919061210c565b600060405180830381600087803b15801561090e57600080fd5b505af1158015610922573d6000803e3d6000fd5b505050507f470d2978e081461f6d144c091dfd83ec06e6011da0b03bd1c0121b7fb71370dc8484604051610957929190612151565b60405180910390a160007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639fbe7c738460010154856005016014604051806040016040528060018152602001600381525060405180604001604052806001815260200160028152506064600160006040518963ffffffff1660e01b81526004016109fe9796959493929190612297565b60206040518083038185885af1158015610a1c573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610a419190612338565b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663975762b3828460000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16856001015460016040518563ffffffff1660e01b8152600401610acb9493929190612365565b600060405180830381600087803b158015610ae557600080fd5b505af1158015610af9573d6000803e3d6000fd5b505050505050505050565b600060036000815480929190610b1990611a30565b919050559050600060026000838152602001908152602001600020905085816000018190555060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632805b5d93487873388600189604051602001610b93919061143a565b6040516020818303038152906040526040518863ffffffff1660e01b8152600401610bc396959493929190612443565b60206040518083038185885af1158015610be1573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610c069190612338565b81600101819055507f71eae802097e4e77c5345dee7f35d74ac0ae45eb5a456fdaed0de4d141fc5d8c82604051610c3d919061143a565b60405180910390a1505050505050565b60015481565b60006004600084815260200190815260200160002090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610cfc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf390612518565b60405180910390fd5b8060030160009054906101000a900460ff1615610d4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d45906125aa565b60405180910390fd5b8060020154421115610d73578142610d669190611dfa565b8160020181905550610d8c565b818160020154610d839190611dfa565b81600201819055505b7fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e983604051610dbb919061143a565b60405180910390a1505050565b60055481565b60026020528060005260406000206000915090508060000154908060010154905082565b600060066000878152602001908152602001600020905060006003811115610e1d57610e1c61155b565b5b8160020160009054906101000a900460ff166003811115610e4157610e4061155b565b5b14610e81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7890612616565b60405180910390fd5b6000600460008360030154815260200190815260200160002090503373ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f25906126a8565b60405180910390fd5b60018260020160006101000a81548160ff02191690836003811115610f5657610f5561155b565b5b02179055508585836005019182610f6e929190611cbe565b5060005b84849050811015610fea5782600601858583818110610f9457610f936126c8565b5b9050602002810190610fa69190612706565b90806001815401808255809150506001900390600052602060002090600202016000909190919091508181610fdb91906128b2565b50508080600101915050610f72565b507ffaecd3b4db089bf25a48306100dd5fb2152e3887c7815b2b221dbb7da2f8e8dc8760405161101a919061143a565b60405180910390a150505050505050565b60046020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030160009054906101000a900460ff16905084565b60035481565b600061109861110d565b9050600060046000838152602001908152602001600020905060018160030160006101000a81548160ff0219169083151502179055507fd9e7f38a71691fb1db2da17057c03d381a42a9925350883f10e8e5d0bca4a3b483836040516110ff92919061183c565b60405180910390a150919050565b60008060005b600554811015611194576004600082815260200190815260200160002060030160009054906101000a900460ff166111875760046000828152602001908152602001600020600201544211611187576004600082815260200190815260200160002060010154826111849190611dfa565b91505b8080600101915050611113565b50600081116111d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111cf9061290c565b60405180910390fd5b600081446111e6919061295b565b9050600080600090505b600554811015611281576004600082815260200190815260200160002060030160009054906101000a900460ff166112745760046000828152602001908152602001600020600201544211611274576004600082815260200190815260200160002060010154826112619190611dfa565b91508282111561127357809450611281565b5b80806001019150506111f0565b5050505090565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f8401126112b7576112b6611292565b5b8235905067ffffffffffffffff8111156112d4576112d3611297565b5b6020830191508360018202830111156112f0576112ef61129c565b5b9250929050565b6000806020838503121561130e5761130d611288565b5b600083013567ffffffffffffffff81111561132c5761132b61128d565b5b611338858286016112a1565b92509250509250929050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061136f82611344565b9050919050565b61137f81611364565b811461138a57600080fd5b50565b60008135905061139c81611376565b92915050565b6000819050919050565b6113b5816113a2565b81146113c057600080fd5b50565b6000813590506113d2816113ac565b92915050565b6000806000606084860312156113f1576113f0611288565b5b60006113ff8682870161138d565b9350506020611410868287016113c3565b9250506040611421868287016113c3565b9150509250925092565b611434816113a2565b82525050565b600060208201905061144f600083018461142b565b92915050565b60008083601f84011261146b5761146a611292565b5b8235905067ffffffffffffffff81111561148857611487611297565b5b6020830191508360018202830111156114a4576114a361129c565b5b9250929050565b600080600080606085870312156114c5576114c4611288565b5b60006114d3878288016113c3565b94505060206114e4878288016113c3565b935050604085013567ffffffffffffffff8111156115055761150461128d565b5b61151187828801611455565b925092505092959194509250565b60006020828403121561153557611534611288565b5b6000611543848285016113c3565b91505092915050565b61155581611364565b82525050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6004811061159b5761159a61155b565b5b50565b60008190506115ac8261158a565b919050565b60006115bc8261159e565b9050919050565b6115cc816115b1565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561160c5780820151818401526020810190506115f1565b60008484015250505050565b6000601f19601f8301169050919050565b6000611634826115d2565b61163e81856115dd565b935061164e8185602086016115ee565b61165781611618565b840191505092915050565b60008115159050919050565b61167781611662565b82525050565b600060e082019050611692600083018a61154c565b61169f602083018961142b565b6116ac60408301886115c3565b6116b9606083018761142b565b81810360808301526116cb8186611629565b905081810360a08301526116df8185611629565b90506116ee60c083018461166e565b98975050505050505050565b61170381611662565b811461170e57600080fd5b50565b600081359050611720816116fa565b92915050565b6000806040838503121561173d5761173c611288565b5b600061174b858286016113c3565b925050602061175c85828601611711565b9150509250929050565b6000819050826020600302820111156117825761178161129c565b5b92915050565b60008060008060a085870312156117a2576117a1611288565b5b60006117b0878288016113c3565b945050602085013567ffffffffffffffff8111156117d1576117d061128d565b5b6117dd878288016112a1565b935093505060406117f087828801611766565b91505092959194509250565b6000806040838503121561181357611812611288565b5b6000611821858286016113c3565b9250506020611832858286016113c3565b9150509250929050565b6000604082019050611851600083018561142b565b61185e602083018461142b565b9392505050565b60008083601f84011261187b5761187a611292565b5b8235905067ffffffffffffffff81111561189857611897611297565b5b6020830191508360208202830111156118b4576118b361129c565b5b9250929050565b6000806000806000606086880312156118d7576118d6611288565b5b60006118e5888289016113c3565b955050602086013567ffffffffffffffff8111156119065761190561128d565b5b611912888289016112a1565b9450945050604086013567ffffffffffffffff8111156119355761193461128d565b5b61194188828901611865565b92509250509295509295909350565b6000608082019050611965600083018761154c565b611972602083018661142b565b61197f604083018561142b565b61198c606083018461166e565b95945050505050565b7f496e73756666696369656e742066656500000000000000000000000000000000600082015250565b60006119cb6010836115dd565b91506119d682611995565b602082019050919050565b600060208201905081810360008301526119fa816119be565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611a3b826113a2565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611a6d57611a6c611a01565b5b600182019050919050565b600082905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611af957607f821691505b602082108103611b0c57611b0b611ab2565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302611b747fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82611b37565b611b7e8683611b37565b95508019841693508086168417925050509392505050565b6000819050919050565b6000611bbb611bb6611bb1846113a2565b611b96565b6113a2565b9050919050565b6000819050919050565b611bd583611ba0565b611be9611be182611bc2565b848454611b44565b825550505050565b600090565b611bfe611bf1565b611c09818484611bcc565b505050565b5b81811015611c2d57611c22600082611bf6565b600181019050611c0f565b5050565b601f821115611c7257611c4381611b12565b611c4c84611b27565b81016020851015611c5b578190505b611c6f611c6785611b27565b830182611c0e565b50505b505050565b600082821c905092915050565b6000611c9560001984600802611c77565b1980831691505092915050565b6000611cae8383611c84565b9150826002028217905092915050565b611cc88383611a78565b67ffffffffffffffff811115611ce157611ce0611a83565b5b611ceb8254611ae1565b611cf6828285611c31565b6000601f831160018114611d255760008415611d13578287013590505b611d1d8582611ca2565b865550611d85565b601f198416611d3386611b12565b60005b82811015611d5b57848901358255600182019150602085019450602081019050611d36565b86831015611d785784890135611d74601f891682611c84565b8355505b6001600288020188555050505b50505050505050565b7f4e6f207374616b652070726f7669646564000000000000000000000000000000600082015250565b6000611dc46011836115dd565b9150611dcf82611d8e565b602082019050919050565b60006020820190508181036000830152611df381611db7565b9050919050565b6000611e05826113a2565b9150611e10836113a2565b9250828201905080821115611e2857611e27611a01565b5b92915050565b7f537461747573206d7573742062652045766964656e63655375626d6974746564600082015250565b6000611e646020836115dd565b9150611e6f82611e2e565b602082019050919050565b60006020820190508181036000830152611e9381611e57565b9050919050565b60008154611ea781611ae1565b611eb181866115dd565b94506001821660008114611ecc5760018114611ee257611f15565b60ff198316865281151560200286019350611f15565b611eeb85611b12565b60005b83811015611f0d57815481890152600182019150602081019050611eee565b808801955050505b50505092915050565b600081549050919050565b600082825260208201905092915050565b60008190508160005260206000209050919050565b60008160001c9050919050565b6000819050919050565b6000611f79611f7483611f4f565b611f5c565b9050919050565b6000819050919050565b611f9381611f80565b82525050565b600082825260208201905092915050565b60008154611fb781611ae1565b611fc18186611f99565b94506001821660008114611fdc5760018114611ff257612025565b60ff198316865281151560200286019350612025565b611ffb85611b12565b60005b8381101561201d57815481890152600182019150602081019050611ffe565b808801955050505b50505092915050565b600060408301600080840154905061204581611f66565b6120526000870182611f8a565b506001840185830360208701526120698382611faa565b925050819250505092915050565b6000612083838361202e565b905092915050565b6000600282019050919050565b60006120a382611f1e565b6120ad8185611f29565b9350836020820285016120bf85611f3a565b8060005b858110156120fa578484038952816120db8582612077565b94506120e68361208b565b925060208a019950506001810190506120c3565b50829750879550505050505092915050565b6000606082019050612121600083018661154c565b81810360208301526121338185611e9a565b905081810360408301526121478184612098565b9050949350505050565b6000604082019050612166600083018561142b565b612173602083018461166e565b9392505050565b600060029050919050565b600081905092915050565b6000819050919050565b6121a3816113a2565b82525050565b60006121b5838361219a565b60208301905092915050565b6000602082019050919050565b6121d78161217a565b6121e18184612185565b92506121ec82612190565b8060005b8381101561221d57815161220487826121a9565b965061220f836121c1565b9250506001810190506121f0565b505050505050565b6000819050919050565b600061224a61224561224084612225565b611b96565b6113a2565b9050919050565b61225a8161222f565b82525050565b600082825260208201905092915050565b50565b6000612281600083612260565b915061228c82612271565b600082019050919050565b60006101408201905081810360008301526122b2818a611e9a565b90506122c1602083018961142b565b6122ce60408301886121ce565b6122db60808301876121ce565b6122e860c0830186612251565b6122f560e083018561166e565b61230361010083018461166e565b81810361012083015261231581612274565b905098975050505050505050565b600081519050612332816113ac565b92915050565b60006020828403121561234e5761234d611288565b5b600061235c84828501612323565b91505092915050565b600060808201905061237a600083018761142b565b612387602083018661154c565b612394604083018561142b565b6123a1606083018461166e565b95945050505050565b82818337600083830152505050565b60006123c583856115dd565b93506123d28385846123aa565b6123db83611618565b840190509392505050565b82818337505050565b6123fb606083836123e6565b5050565b600081519050919050565b6000612415826123ff565b61241f8185612260565b935061242f8185602086016115ee565b61243881611618565b840191505092915050565b600060e082019050818103600083015261245e81888a6123b9565b905061246d602083018761154c565b61247a60408301866123ef565b61248760a083018561166e565b81810360c0830152612499818461240a565b9050979650505050505050565b7f576f726b65722063616e206f6e6c7920657874656e64207468656972206f776e60008201527f20617661696c6162696c697479207374616b6500000000000000000000000000602082015250565b60006125026033836115dd565b915061250d826124a6565b604082019050919050565b60006020820190508181036000830152612531816124f5565b9050919050565b7f5374616b652068617320616c7265616479206265656e2061737369676e65642060008201527f776f726b00000000000000000000000000000000000000000000000000000000602082015250565b60006125946024836115dd565b915061259f82612538565b604082019050919050565b600060208201905081810360008301526125c381612587565b9050919050565b7f537461747573206d757374206265205265717565737465640000000000000000600082015250565b60006126006018836115dd565b915061260b826125ca565b602082019050919050565b6000602082019050818103600083015261262f816125f3565b9050919050565b7f576f726b65722063616e206f6e6c79207375626d69742065766964656e63652060008201527f666f7220776f726b2074686579206172652061737369676e6564000000000000602082015250565b6000612692603a836115dd565b915061269d82612636565b604082019050919050565b600060208201905081810360008301526126c181612685565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600080fd5b600080fd5b600080fd5b600082356001604003833603038112612722576127216126f7565b5b80830191505092915050565b61273781611f80565b811461274257600080fd5b50565b600081356127528161272e565b80915050919050565b60008160001b9050919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6127948461275b565b9350801983169250808416831791505092915050565b60006127c56127c06127bb84611f80565b611b96565b611f80565b9050919050565b6000819050919050565b6127df826127aa565b6127f26127eb826127cc565b8354612768565b8255505050565b60008083356001602003843603038112612816576128156126f7565b5b80840192508235915067ffffffffffffffff821115612838576128376126fc565b5b60208301925060018202360383131561285457612853612701565b5b509250929050565b612867838383611cbe565b505050565b60008101600083018061287e81612745565b905061288a81846127d6565b505050600181016020830161289f81856127f9565b6128aa81838661285c565b505050505050565b6128bc828261286c565b5050565b7f4e6f20617661696c61626c6520776f726b6572207374616b6573000000000000600082015250565b60006128f6601a836115dd565b9150612901826128c0565b602082019050919050565b60006020820190508181036000830152612925816128e9565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612966826113a2565b9150612971836113a2565b9250826129815761298061292c565b5b82820690509291505056fea2646970667358221220c01eed11461449dc00fe9d8edfc08d1ee586bceb08fbdb5f39a8d70d70c477ec64736f6c63430008180033", + "deployedBytecode": "0x6080604052600436106100dd5760003560e01c8063a035b1fe1161007f578063cf37625611610059578063cf37625614610296578063d0fae95f146102d4578063d5a44f86146102fd578063d76b67941461033d576100dd565b8063a035b1fe14610217578063b5b20c0014610242578063c4a9e1161461026b576100dd565b8063815a0572116100bb578063815a05721461015257806381d12c581461018f578063854b6a4f146101d257806399ad6c56146101fb576100dd565b80630d0271d6146100e2578063216ed6ad146100fe5780635badbe4c14610127575b600080fd5b6100fc60048036038101906100f791906112f7565b610368565b005b34801561010a57600080fd5b50610125600480360381019061012091906113d8565b610456565b005b34801561013357600080fd5b5061013c610569565b604051610149919061143a565b60405180910390f35b34801561015e57600080fd5b50610179600480360381019061017491906114ab565b61056f565b604051610186919061143a565b60405180910390f35b34801561019b57600080fd5b506101b660048036038101906101b1919061151f565b6105ee565b6040516101c9979695949392919061167d565b60405180910390f35b3480156101de57600080fd5b506101f960048036038101906101f49190611726565b61077a565b005b61021560048036038101906102109190611788565b610b04565b005b34801561022357600080fd5b5061022c610c4d565b604051610239919061143a565b60405180910390f35b34801561024e57600080fd5b50610269600480360381019061026491906117fc565b610c53565b005b34801561027757600080fd5b50610280610dc8565b60405161028d919061143a565b60405180910390f35b3480156102a257600080fd5b506102bd60048036038101906102b8919061151f565b610dce565b6040516102cb92919061183c565b60405180910390f35b3480156102e057600080fd5b506102fb60048036038101906102f691906118bb565b610df2565b005b34801561030957600080fd5b50610324600480360381019061031f919061151f565b61102b565b6040516103349493929190611950565b60405180910390f35b34801561034957600080fd5b50610352611088565b60405161035f919061143a565b60405180910390f35b6001543410156103ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103a4906119e1565b60405180910390fd5b6000600760008154809291906103c290611a30565b9190505590506000600660008381526020019081526020016000209050338160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503481600101819055506104348261108e565b8160030181905550838382600401918261044f929190611cbe565b5050505050565b60008211610499576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161049090611dda565b60405180910390fd5b6000600560008154809291906104ae90611a30565b9190505590506000600460008381526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083816001018190555082426105239190611dfa565b81600201819055507fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e98260405161055a919061143a565b60405180910390a15050505050565b60075481565b6000808383810190610581919061151f565b9050600060026000838152602001908152602001600020905080600001546001819055507f6a3843c02c26620842ae8496fd3afcb44b27463b3808e2ccdae4bcee5a2e3f20826001546040516105d892919061183c565b60405180910390a1600092505050949350505050565b60066020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020160009054906101000a900460ff169080600301549080600401805461065690611ae1565b80601f016020809104026020016040519081016040528092919081815260200182805461068290611ae1565b80156106cf5780601f106106a4576101008083540402835291602001916106cf565b820191906000526020600020905b8154815290600101906020018083116106b257829003601f168201915b5050505050908060050180546106e490611ae1565b80601f016020809104026020016040519081016040528092919081815260200182805461071090611ae1565b801561075d5780601f106107325761010080835404028352916020019161075d565b820191906000526020600020905b81548152906001019060200180831161074057829003601f168201915b5050505050908060070160009054906101000a900460ff16905087565b6000600660008481526020019081526020016000209050600160038111156107a5576107a461155b565b5b8160020160009054906101000a900460ff1660038111156107c9576107c861155b565b5b14610809576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161080090611e7a565b60405180910390fd5b60006004600083600301548152602001908152602001600020905060028260020160006101000a81548160ff0219169083600381111561084c5761084b61155b565b5b0217905550828260070160006101000a81548160ff0219169083151502179055507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166338787df08260000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684600501856006016040518463ffffffff1660e01b81526004016108f49392919061210c565b600060405180830381600087803b15801561090e57600080fd5b505af1158015610922573d6000803e3d6000fd5b505050507f470d2978e081461f6d144c091dfd83ec06e6011da0b03bd1c0121b7fb71370dc8484604051610957929190612151565b60405180910390a160007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639fbe7c738460010154856005016014604051806040016040528060018152602001600381525060405180604001604052806001815260200160028152506064600160006040518963ffffffff1660e01b81526004016109fe9796959493929190612297565b60206040518083038185885af1158015610a1c573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610a419190612338565b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663975762b3828460000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16856001015460016040518563ffffffff1660e01b8152600401610acb9493929190612365565b600060405180830381600087803b158015610ae557600080fd5b505af1158015610af9573d6000803e3d6000fd5b505050505050505050565b600060036000815480929190610b1990611a30565b919050559050600060026000838152602001908152602001600020905085816000018190555060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632805b5d93487873388600189604051602001610b93919061143a565b6040516020818303038152906040526040518863ffffffff1660e01b8152600401610bc396959493929190612443565b60206040518083038185885af1158015610be1573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610c069190612338565b81600101819055507f71eae802097e4e77c5345dee7f35d74ac0ae45eb5a456fdaed0de4d141fc5d8c82604051610c3d919061143a565b60405180910390a1505050505050565b60015481565b60006004600084815260200190815260200160002090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610cfc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf390612518565b60405180910390fd5b8060030160009054906101000a900460ff1615610d4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d45906125aa565b60405180910390fd5b8060020154421115610d73578142610d669190611dfa565b8160020181905550610d8c565b818160020154610d839190611dfa565b81600201819055505b7fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e983604051610dbb919061143a565b60405180910390a1505050565b60055481565b60026020528060005260406000206000915090508060000154908060010154905082565b600060066000878152602001908152602001600020905060006003811115610e1d57610e1c61155b565b5b8160020160009054906101000a900460ff166003811115610e4157610e4061155b565b5b14610e81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7890612616565b60405180910390fd5b6000600460008360030154815260200190815260200160002090503373ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f25906126a8565b60405180910390fd5b60018260020160006101000a81548160ff02191690836003811115610f5657610f5561155b565b5b02179055508585836005019182610f6e929190611cbe565b5060005b84849050811015610fea5782600601858583818110610f9457610f936126c8565b5b9050602002810190610fa69190612706565b90806001815401808255809150506001900390600052602060002090600202016000909190919091508181610fdb91906128b2565b50508080600101915050610f72565b507ffaecd3b4db089bf25a48306100dd5fb2152e3887c7815b2b221dbb7da2f8e8dc8760405161101a919061143a565b60405180910390a150505050505050565b60046020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030160009054906101000a900460ff16905084565b60035481565b600061109861110d565b9050600060046000838152602001908152602001600020905060018160030160006101000a81548160ff0219169083151502179055507fd9e7f38a71691fb1db2da17057c03d381a42a9925350883f10e8e5d0bca4a3b483836040516110ff92919061183c565b60405180910390a150919050565b60008060005b600554811015611194576004600082815260200190815260200160002060030160009054906101000a900460ff166111875760046000828152602001908152602001600020600201544211611187576004600082815260200190815260200160002060010154826111849190611dfa565b91505b8080600101915050611113565b50600081116111d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111cf9061290c565b60405180910390fd5b600081446111e6919061295b565b9050600080600090505b600554811015611281576004600082815260200190815260200160002060030160009054906101000a900460ff166112745760046000828152602001908152602001600020600201544211611274576004600082815260200190815260200160002060010154826112619190611dfa565b91508282111561127357809450611281565b5b80806001019150506111f0565b5050505090565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f8401126112b7576112b6611292565b5b8235905067ffffffffffffffff8111156112d4576112d3611297565b5b6020830191508360018202830111156112f0576112ef61129c565b5b9250929050565b6000806020838503121561130e5761130d611288565b5b600083013567ffffffffffffffff81111561132c5761132b61128d565b5b611338858286016112a1565b92509250509250929050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061136f82611344565b9050919050565b61137f81611364565b811461138a57600080fd5b50565b60008135905061139c81611376565b92915050565b6000819050919050565b6113b5816113a2565b81146113c057600080fd5b50565b6000813590506113d2816113ac565b92915050565b6000806000606084860312156113f1576113f0611288565b5b60006113ff8682870161138d565b9350506020611410868287016113c3565b9250506040611421868287016113c3565b9150509250925092565b611434816113a2565b82525050565b600060208201905061144f600083018461142b565b92915050565b60008083601f84011261146b5761146a611292565b5b8235905067ffffffffffffffff81111561148857611487611297565b5b6020830191508360018202830111156114a4576114a361129c565b5b9250929050565b600080600080606085870312156114c5576114c4611288565b5b60006114d3878288016113c3565b94505060206114e4878288016113c3565b935050604085013567ffffffffffffffff8111156115055761150461128d565b5b61151187828801611455565b925092505092959194509250565b60006020828403121561153557611534611288565b5b6000611543848285016113c3565b91505092915050565b61155581611364565b82525050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6004811061159b5761159a61155b565b5b50565b60008190506115ac8261158a565b919050565b60006115bc8261159e565b9050919050565b6115cc816115b1565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561160c5780820151818401526020810190506115f1565b60008484015250505050565b6000601f19601f8301169050919050565b6000611634826115d2565b61163e81856115dd565b935061164e8185602086016115ee565b61165781611618565b840191505092915050565b60008115159050919050565b61167781611662565b82525050565b600060e082019050611692600083018a61154c565b61169f602083018961142b565b6116ac60408301886115c3565b6116b9606083018761142b565b81810360808301526116cb8186611629565b905081810360a08301526116df8185611629565b90506116ee60c083018461166e565b98975050505050505050565b61170381611662565b811461170e57600080fd5b50565b600081359050611720816116fa565b92915050565b6000806040838503121561173d5761173c611288565b5b600061174b858286016113c3565b925050602061175c85828601611711565b9150509250929050565b6000819050826020600302820111156117825761178161129c565b5b92915050565b60008060008060a085870312156117a2576117a1611288565b5b60006117b0878288016113c3565b945050602085013567ffffffffffffffff8111156117d1576117d061128d565b5b6117dd878288016112a1565b935093505060406117f087828801611766565b91505092959194509250565b6000806040838503121561181357611812611288565b5b6000611821858286016113c3565b9250506020611832858286016113c3565b9150509250929050565b6000604082019050611851600083018561142b565b61185e602083018461142b565b9392505050565b60008083601f84011261187b5761187a611292565b5b8235905067ffffffffffffffff81111561189857611897611297565b5b6020830191508360208202830111156118b4576118b361129c565b5b9250929050565b6000806000806000606086880312156118d7576118d6611288565b5b60006118e5888289016113c3565b955050602086013567ffffffffffffffff8111156119065761190561128d565b5b611912888289016112a1565b9450945050604086013567ffffffffffffffff8111156119355761193461128d565b5b61194188828901611865565b92509250509295509295909350565b6000608082019050611965600083018761154c565b611972602083018661142b565b61197f604083018561142b565b61198c606083018461166e565b95945050505050565b7f496e73756666696369656e742066656500000000000000000000000000000000600082015250565b60006119cb6010836115dd565b91506119d682611995565b602082019050919050565b600060208201905081810360008301526119fa816119be565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611a3b826113a2565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611a6d57611a6c611a01565b5b600182019050919050565b600082905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611af957607f821691505b602082108103611b0c57611b0b611ab2565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302611b747fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82611b37565b611b7e8683611b37565b95508019841693508086168417925050509392505050565b6000819050919050565b6000611bbb611bb6611bb1846113a2565b611b96565b6113a2565b9050919050565b6000819050919050565b611bd583611ba0565b611be9611be182611bc2565b848454611b44565b825550505050565b600090565b611bfe611bf1565b611c09818484611bcc565b505050565b5b81811015611c2d57611c22600082611bf6565b600181019050611c0f565b5050565b601f821115611c7257611c4381611b12565b611c4c84611b27565b81016020851015611c5b578190505b611c6f611c6785611b27565b830182611c0e565b50505b505050565b600082821c905092915050565b6000611c9560001984600802611c77565b1980831691505092915050565b6000611cae8383611c84565b9150826002028217905092915050565b611cc88383611a78565b67ffffffffffffffff811115611ce157611ce0611a83565b5b611ceb8254611ae1565b611cf6828285611c31565b6000601f831160018114611d255760008415611d13578287013590505b611d1d8582611ca2565b865550611d85565b601f198416611d3386611b12565b60005b82811015611d5b57848901358255600182019150602085019450602081019050611d36565b86831015611d785784890135611d74601f891682611c84565b8355505b6001600288020188555050505b50505050505050565b7f4e6f207374616b652070726f7669646564000000000000000000000000000000600082015250565b6000611dc46011836115dd565b9150611dcf82611d8e565b602082019050919050565b60006020820190508181036000830152611df381611db7565b9050919050565b6000611e05826113a2565b9150611e10836113a2565b9250828201905080821115611e2857611e27611a01565b5b92915050565b7f537461747573206d7573742062652045766964656e63655375626d6974746564600082015250565b6000611e646020836115dd565b9150611e6f82611e2e565b602082019050919050565b60006020820190508181036000830152611e9381611e57565b9050919050565b60008154611ea781611ae1565b611eb181866115dd565b94506001821660008114611ecc5760018114611ee257611f15565b60ff198316865281151560200286019350611f15565b611eeb85611b12565b60005b83811015611f0d57815481890152600182019150602081019050611eee565b808801955050505b50505092915050565b600081549050919050565b600082825260208201905092915050565b60008190508160005260206000209050919050565b60008160001c9050919050565b6000819050919050565b6000611f79611f7483611f4f565b611f5c565b9050919050565b6000819050919050565b611f9381611f80565b82525050565b600082825260208201905092915050565b60008154611fb781611ae1565b611fc18186611f99565b94506001821660008114611fdc5760018114611ff257612025565b60ff198316865281151560200286019350612025565b611ffb85611b12565b60005b8381101561201d57815481890152600182019150602081019050611ffe565b808801955050505b50505092915050565b600060408301600080840154905061204581611f66565b6120526000870182611f8a565b506001840185830360208701526120698382611faa565b925050819250505092915050565b6000612083838361202e565b905092915050565b6000600282019050919050565b60006120a382611f1e565b6120ad8185611f29565b9350836020820285016120bf85611f3a565b8060005b858110156120fa578484038952816120db8582612077565b94506120e68361208b565b925060208a019950506001810190506120c3565b50829750879550505050505092915050565b6000606082019050612121600083018661154c565b81810360208301526121338185611e9a565b905081810360408301526121478184612098565b9050949350505050565b6000604082019050612166600083018561142b565b612173602083018461166e565b9392505050565b600060029050919050565b600081905092915050565b6000819050919050565b6121a3816113a2565b82525050565b60006121b5838361219a565b60208301905092915050565b6000602082019050919050565b6121d78161217a565b6121e18184612185565b92506121ec82612190565b8060005b8381101561221d57815161220487826121a9565b965061220f836121c1565b9250506001810190506121f0565b505050505050565b6000819050919050565b600061224a61224561224084612225565b611b96565b6113a2565b9050919050565b61225a8161222f565b82525050565b600082825260208201905092915050565b50565b6000612281600083612260565b915061228c82612271565b600082019050919050565b60006101408201905081810360008301526122b2818a611e9a565b90506122c1602083018961142b565b6122ce60408301886121ce565b6122db60808301876121ce565b6122e860c0830186612251565b6122f560e083018561166e565b61230361010083018461166e565b81810361012083015261231581612274565b905098975050505050505050565b600081519050612332816113ac565b92915050565b60006020828403121561234e5761234d611288565b5b600061235c84828501612323565b91505092915050565b600060808201905061237a600083018761142b565b612387602083018661154c565b612394604083018561142b565b6123a1606083018461166e565b95945050505050565b82818337600083830152505050565b60006123c583856115dd565b93506123d28385846123aa565b6123db83611618565b840190509392505050565b82818337505050565b6123fb606083836123e6565b5050565b600081519050919050565b6000612415826123ff565b61241f8185612260565b935061242f8185602086016115ee565b61243881611618565b840191505092915050565b600060e082019050818103600083015261245e81888a6123b9565b905061246d602083018761154c565b61247a60408301866123ef565b61248760a083018561166e565b81810360c0830152612499818461240a565b9050979650505050505050565b7f576f726b65722063616e206f6e6c7920657874656e64207468656972206f776e60008201527f20617661696c6162696c697479207374616b6500000000000000000000000000602082015250565b60006125026033836115dd565b915061250d826124a6565b604082019050919050565b60006020820190508181036000830152612531816124f5565b9050919050565b7f5374616b652068617320616c7265616479206265656e2061737369676e65642060008201527f776f726b00000000000000000000000000000000000000000000000000000000602082015250565b60006125946024836115dd565b915061259f82612538565b604082019050919050565b600060208201905081810360008301526125c381612587565b9050919050565b7f537461747573206d757374206265205265717565737465640000000000000000600082015250565b60006126006018836115dd565b915061260b826125ca565b602082019050919050565b6000602082019050818103600083015261262f816125f3565b9050919050565b7f576f726b65722063616e206f6e6c79207375626d69742065766964656e63652060008201527f666f7220776f726b2074686579206172652061737369676e6564000000000000602082015250565b6000612692603a836115dd565b915061269d82612636565b604082019050919050565b600060208201905081810360008301526126c181612685565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600080fd5b600080fd5b600080fd5b600082356001604003833603038112612722576127216126f7565b5b80830191505092915050565b61273781611f80565b811461274257600080fd5b50565b600081356127528161272e565b80915050919050565b60008160001b9050919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6127948461275b565b9350801983169250808416831791505092915050565b60006127c56127c06127bb84611f80565b611b96565b611f80565b9050919050565b6000819050919050565b6127df826127aa565b6127f26127eb826127cc565b8354612768565b8255505050565b60008083356001602003843603038112612816576128156126f7565b5b80840192508235915067ffffffffffffffff821115612838576128376126fc565b5b60208301925060018202360383131561285457612853612701565b5b509250929050565b612867838383611cbe565b505050565b60008101600083018061287e81612745565b905061288a81846127d6565b505050600181016020830161289f81856127f9565b6128aa81838661285c565b505050505050565b6128bc828261286c565b5050565b7f4e6f20617661696c61626c6520776f726b6572207374616b6573000000000000600082015250565b60006128f6601a836115dd565b9150612901826128c0565b602082019050919050565b60006020820190508181036000830152612925816128e9565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612966826113a2565b9150612971836113a2565b9250826129815761298061292c565b5b82820690509291505056fea2646970667358221220c01eed11461449dc00fe9d8edfc08d1ee586bceb08fbdb5f39a8d70d70c477ec64736f6c63430008180033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/client/src/components/Proposals.jsx b/client/src/components/Proposals.jsx index 7d0297e..808b7e7 100644 --- a/client/src/components/Proposals.jsx +++ b/client/src/components/Proposals.jsx @@ -28,7 +28,7 @@ const getProposalStatus = (proposal) => { function Proposals() { const { - provider, chainId, account, reputation, posts, + provider, chainId, account, reputation, } = useContext(Web3Context); const [proposals, dispatchProposal] = useList(); const proposalsContract = useRef(); @@ -96,11 +96,11 @@ function Proposals() { }; const handleShowViewProposal = useCallback(async (proposal) => { - const { postIndex } = proposal; - const post = await Post.read(posts[postIndex].contentId); + const { postId } = proposal; + const post = await Post.read(postId); setViewPost(post); setShowViewProposal(true); - }, [posts, setViewPost, setShowViewProposal]); + }, [setViewPost, setShowViewProposal]); const onSubmitProposal = useCallback(async (post) => { const web3 = new Web3(provider); diff --git a/ethereum/contracts/Onboarding.sol b/ethereum/contracts/Onboarding.sol index 371c55f..812828a 100644 --- a/ethereum/contracts/Onboarding.sol +++ b/ethereum/contracts/Onboarding.sol @@ -27,17 +27,13 @@ contract Onboarding is WorkContract, IOnValidate { request.status = WorkStatus.ApprovalSubmitted; request.approval = approval; // Make work evidence post - uint postIndex = dao.addPost( - stake.worker, - request.evidenceContentId, - request.citations - ); + dao.addPost(stake.worker, request.evidenceContentId, request.citations); emit WorkApprovalSubmitted(requestIndex, approval); // Initiate validation pool uint poolIndex = dao.initiateValidationPool{ value: request.fee - request.fee / 10 }( - postIndex, + request.evidenceContentId, POOL_DURATION, [uint256(1), uint256(3)], [uint256(1), uint256(2)], @@ -75,13 +71,9 @@ contract Onboarding is WorkContract, IOnValidate { return 1; } Citation[] memory emptyCitations; - uint postIndex = dao.addPost( - request.customer, - request.requestContentId, - emptyCitations - ); + dao.addPost(request.customer, request.requestContentId, emptyCitations); dao.initiateValidationPool{value: request.fee / 10}( - postIndex, + request.requestContentId, POOL_DURATION, [uint256(1), uint256(3)], [uint256(1), uint256(2)], diff --git a/ethereum/contracts/Proposals.sol b/ethereum/contracts/Proposals.sol index eac50e2..c2ab1ff 100644 --- a/ethereum/contracts/Proposals.sol +++ b/ethereum/contracts/Proposals.sol @@ -38,7 +38,7 @@ contract Proposals is DAOContract, IOnValidate { address sender; uint fee; uint remainingFee; - uint postIndex; + string postId; uint startTime; Stage stage; mapping(address => uint) attestations; @@ -73,11 +73,11 @@ contract Proposals is DAOContract, IOnValidate { // or support post lookup by contentId // TODO: Take citations as a parameter Citation[] memory emptyCitations; - uint postIndex = dao.addPost(author, contentId, emptyCitations); + dao.addPost(author, contentId, emptyCitations); proposalIndex = proposalCount++; Proposal storage proposal = proposals[proposalIndex]; proposal.sender = msg.sender; - proposal.postIndex = postIndex; + proposal.postId = contentId; proposal.startTime = block.timestamp; proposal.referenda[0].duration = durations[0]; proposal.referenda[1].duration = durations[1]; @@ -138,7 +138,7 @@ contract Proposals is DAOContract, IOnValidate { Proposal storage proposal = proposals[proposalIndex]; proposal.remainingFee -= fee; uint poolIndex = dao.initiateValidationPool{value: fee}( - proposal.postIndex, + proposal.postId, proposal.referenda[referendumIndex].duration, referendaQuora[referendumIndex], referendaWinRatio[referendumIndex], diff --git a/ethereum/contracts/WorkContract.sol b/ethereum/contracts/WorkContract.sol index f038012..c6602f6 100644 --- a/ethereum/contracts/WorkContract.sol +++ b/ethereum/contracts/WorkContract.sol @@ -179,15 +179,11 @@ abstract contract WorkContract is request.status = WorkStatus.ApprovalSubmitted; request.approval = approval; // Make work evidence post - uint postIndex = dao.addPost( - stake.worker, - request.evidenceContentId, - request.citations - ); + dao.addPost(stake.worker, request.evidenceContentId, request.citations); emit WorkApprovalSubmitted(requestIndex, approval); // Initiate validation pool uint poolIndex = dao.initiateValidationPool{value: request.fee}( - postIndex, + request.evidenceContentId, POOL_DURATION, [uint256(1), uint256(3)], [uint256(1), uint256(2)], diff --git a/ethereum/contracts/core/DAO.sol b/ethereum/contracts/core/DAO.sol index ce0ad31..41c64e4 100644 --- a/ethereum/contracts/core/DAO.sol +++ b/ethereum/contracts/core/DAO.sol @@ -8,7 +8,6 @@ import "./Forum.sol"; import "../interfaces/IAcceptAvailability.sol"; import "hardhat/console.sol"; -// TODO: consider dynamically constructing contract instances rather than merging at build time contract DAO is Reputation, Forum, ValidationPools { /// Authorize a contract to transfer REP, and call that contract's acceptAvailability method function stakeAvailability( diff --git a/ethereum/contracts/core/Forum.sol b/ethereum/contracts/core/Forum.sol index df9a47a..6f63976 100644 --- a/ethereum/contracts/core/Forum.sol +++ b/ethereum/contracts/core/Forum.sol @@ -6,24 +6,25 @@ import "hardhat/console.sol"; struct Citation { int weightPercent; - uint targetPostIndex; + string targetPostId; } struct Post { - uint id; + string id; address sender; address author; - string contentId; Citation[] citations; uint reputation; + // TODO: timestamp } contract Forum is Reputation { - mapping(uint => Post) public posts; + mapping(string => Post) public posts; + string[] public postIds; uint public postCount; - mapping(uint => mapping(uint => int)) _edgeBalances; + mapping(string => mapping(string => int)) _edgeBalances; - event PostAdded(uint postIndex); + event PostAdded(string id); // Forum parameters // TODO: Make depth limit configurable; take as param in _onValidatePost callback @@ -33,13 +34,17 @@ contract Forum is Reputation { address author, string calldata contentId, Citation[] calldata citations - ) external returns (uint postIndex) { - postIndex = postCount++; - Post storage post = posts[postIndex]; + ) external { + postCount++; + postIds.push(contentId); + Post storage post = posts[contentId]; + require( + post.author == address(0), + "A post with this contentId already exists" + ); post.author = author; post.sender = msg.sender; - post.id = postIndex; - post.contentId = contentId; + post.id = contentId; for (uint i = 0; i < citations.length; i++) { post.citations.push(citations[i]); } @@ -60,22 +65,22 @@ contract Forum is Reputation { totalCitationWeightNeg >= -100, "Sum of negative citations must be >= -100" ); - emit PostAdded(postIndex); + emit PostAdded(contentId); } - function _onValidatePost(uint postIndex, uint amount) internal { - _propagateReputation(postIndex, int(amount), false, 0); + function _onValidatePost(string memory postId, uint amount) internal { + _propagateReputation(postId, int(amount), false, 0); } function _handleCitation( - uint postIndex, + string memory postId, Citation memory citation, int amount, bool initialNegative, uint depth ) internal returns (int outboundAmount) { outboundAmount = (amount * citation.weightPercent) / 100; - if (citation.targetPostIndex == type(uint256).max) { + if (bytes(citation.targetPostId).length == 0) { // Incineration require( outboundAmount >= 0, @@ -84,9 +89,7 @@ contract Forum is Reputation { _burn(address(this), uint(outboundAmount)); return outboundAmount; } - int balanceToOutbound = _edgeBalances[postIndex][ - citation.targetPostIndex - ]; + int balanceToOutbound = _edgeBalances[postId][citation.targetPostId]; if (initialNegative) { if (outboundAmount < 0) { outboundAmount = outboundAmount > -balanceToOutbound @@ -99,17 +102,17 @@ contract Forum is Reputation { } } int refund = _propagateReputation( - citation.targetPostIndex, + citation.targetPostId, outboundAmount, initialNegative || (depth == 0 && citation.weightPercent < 0), depth + 1 ); outboundAmount -= refund; - _edgeBalances[postIndex][citation.targetPostIndex] += outboundAmount; + _edgeBalances[postId][citation.targetPostId] += outboundAmount; } function _propagateReputation( - uint postIndex, + string memory postId, int amount, bool initialNegative, uint depth @@ -117,12 +120,12 @@ contract Forum is Reputation { if (depth >= depthLimit) { return amount; } - Post storage post = posts[postIndex]; + Post storage post = posts[postId]; // Propagate negative citations first for (uint i = 0; i < post.citations.length; i++) { if (post.citations[i].weightPercent < 0) { amount -= _handleCitation( - postIndex, + postId, post.citations[i], amount, initialNegative, @@ -134,7 +137,7 @@ contract Forum is Reputation { for (uint i = 0; i < post.citations.length; i++) { if (post.citations[i].weightPercent > 0) { amount -= _handleCitation( - postIndex, + postId, post.citations[i], amount, initialNegative, diff --git a/ethereum/contracts/core/ValidationPools.sol b/ethereum/contracts/core/ValidationPools.sol index 2fb0e21..13fa5ed 100644 --- a/ethereum/contracts/core/ValidationPools.sol +++ b/ethereum/contracts/core/ValidationPools.sol @@ -23,7 +23,7 @@ struct ValidationPoolParams { struct ValidationPool { uint id; - uint postIndex; + string postId; address sender; uint minted; mapping(uint => ValidationPoolStake) stakes; @@ -97,7 +97,7 @@ contract ValidationPools is Reputation, Forum { /// Accept fee to initiate a validation pool function initiateValidationPool( - uint postIndex, + string calldata postId, uint duration, uint[2] calldata quorum, // [Numerator, Denominator] uint[2] calldata winRatio, // [Numerator, Denominator] @@ -116,12 +116,12 @@ contract ValidationPools is Reputation, Forum { require(quorum[0] <= quorum[1], "Quorum is greater than one"); require(winRatio[0] <= winRatio[1], "Win ratio is greater than one"); require(bindingPercent <= 100, "Binding percent must be <= 100"); - Post storage post = posts[postIndex]; + Post storage post = posts[postId]; require(post.author != address(0), "Target post not found"); poolIndex = validationPoolCount++; ValidationPool storage pool = validationPools[poolIndex]; pool.sender = msg.sender; - pool.postIndex = postIndex; + pool.postId = postId; pool.fee = msg.value; pool.params.quorum = quorum; pool.params.winRatio = winRatio; @@ -143,7 +143,7 @@ contract ValidationPools is Reputation, Forum { /// Evaluate outcome of a validation pool function evaluateOutcome(uint poolIndex) public returns (bool votePasses) { ValidationPool storage pool = validationPools[poolIndex]; - Post storage post = posts[pool.postIndex]; + Post storage post = posts[pool.postId]; require(pool.resolved == false, "Pool is already resolved"); uint stakedFor; uint stakedAgainst; @@ -253,7 +253,7 @@ contract ValidationPools is Reputation, Forum { } // Transfer REP to the forum instead of to the author directly - _onValidatePost(pool.postIndex, pool.minted / 2 + remainder); + _onValidatePost(pool.postId, pool.minted / 2 + remainder); } else { // If vote does not pass, divide the losing stake among the winners totalRewards += pool.minted; diff --git a/ethereum/test/Forum.js b/ethereum/test/Forum.js index 377ef42..f74f4c4 100644 --- a/ethereum/test/Forum.js +++ b/ethereum/test/Forum.js @@ -23,12 +23,12 @@ describe('Forum', () => { const emptyCallbackData = ethers.AbiCoder.defaultAbiCoder().encode([], []); const initiateValidationPool = ({ - postIndex, duration, + postId, duration, quorum, winRatio, bindingPercent, redistributeLosingStakes, callbackOnValidate, callbackData, fee, } = {}) => dao.initiateValidationPool( - postIndex ?? 0, + postId, duration ?? POOL_DURATION, quorum ?? [1, 10], winRatio ?? [1, 2], @@ -48,28 +48,28 @@ describe('Forum', () => { it('should be able to add a post', async () => { const contentId = 'some-id'; - await expect(dao.addPost(account1, contentId, [])).to.emit(dao, 'PostAdded').withArgs(0); - const post = await dao.posts(0); + await expect(dao.addPost(account1, contentId, [])).to.emit(dao, 'PostAdded').withArgs('some-id'); + const post = await dao.posts(contentId); expect(post.author).to.equal(account1); expect(post.sender).to.equal(account1); - expect(post.contentId).to.equal(contentId); + expect(post.id).to.equal(contentId); }); it('should be able to add a post on behalf of another account', async () => { const contentId = 'some-id'; await dao.addPost(account2, contentId, []); - const post = await dao.posts(0); + const post = await dao.posts(contentId); expect(post.author).to.equal(account2); expect(post.sender).to.equal(account1); - expect(post.contentId).to.equal(contentId); + expect(post.id).to.equal(contentId); }); it('should be able to donate reputation via citations', async () => { await dao.addPost(account1, 'content-id', []); - await dao.addPost(account2, 'second-content-id', [{ weightPercent: 50, targetPostIndex: 0 }]); - await initiateValidationPool({ postIndex: 1 }); + await dao.addPost(account2, 'second-content-id', [{ weightPercent: 50, targetPostId: 'content-id' }]); + await initiateValidationPool({ postId: 'second-content-id' }); const pool = await dao.validationPools(0); - expect(pool.postIndex).to.equal(1); + expect(pool.postId).to.equal('second-content-id'); await dao.evaluateOutcome(0); expect(await dao.balanceOf(account1)).to.equal(50); expect(await dao.balanceOf(account2)).to.equal(50); @@ -77,41 +77,38 @@ describe('Forum', () => { it('should be able to leach reputation via citations', async () => { await dao.addPost(account1, 'content-id', []); - expect((await dao.posts(0)).reputation).to.equal(0); - await initiateValidationPool({ postIndex: 0 }); + expect((await dao.posts('content-id')).reputation).to.equal(0); + await initiateValidationPool({ postId: 'content-id' }); await dao.evaluateOutcome(0); expect(await dao.balanceOf(account1)).to.equal(100); - expect((await dao.posts(0)).reputation).to.equal(100); - await dao.addPost(account2, 'second-content-id', [{ weightPercent: -50, targetPostIndex: 0 }]); - expect((await dao.posts(1)).reputation).to.equal(0); - await initiateValidationPool({ postIndex: 1 }); + expect((await dao.posts('content-id')).reputation).to.equal(100); + await dao.addPost(account2, 'second-content-id', [{ weightPercent: -50, targetPostId: 'content-id' }]); + expect((await dao.posts('second-content-id')).reputation).to.equal(0); + await initiateValidationPool({ postId: 'second-content-id' }); const pool = await dao.validationPools(1); - expect(pool.postIndex).to.equal(1); + expect(pool.postId).to.equal('second-content-id'); await time.increase(POOL_DURATION + 1); await dao.evaluateOutcome(1); expect(await dao.balanceOf(account1)).to.equal(50); expect(await dao.balanceOf(account2)).to.equal(150); - expect((await dao.posts(0)).reputation).to.equal(50); - expect((await dao.posts(1)).reputation).to.equal(150); + expect((await dao.posts('content-id')).reputation).to.equal(50); + expect((await dao.posts('second-content-id')).reputation).to.equal(150); }); it('should be able to redistribute power via citations', async () => { - console.log('First post'); await dao.addPost(account1, 'content-id', []); - await initiateValidationPool({ postIndex: 0 }); + await initiateValidationPool({ postId: 'content-id' }); await dao.evaluateOutcome(0); expect(await dao.balanceOf(account1)).to.equal(100); - console.log('Second post'); await dao.addPost(account2, 'second-content-id', []); expect(await dao.balanceOf(account2)).to.equal(0); - console.log('Third post'); await dao.addPost(account3, 'third-content-id', [ - { weightPercent: 100, targetPostIndex: 1 }, - { weightPercent: -100, targetPostIndex: 0 }, + { weightPercent: -100, targetPostId: 'content-id' }, + { weightPercent: 100, targetPostId: 'second-content-id' }, ]); - await initiateValidationPool({ postIndex: 2 }); + await initiateValidationPool({ postId: 'third-content-id' }); const pool = await dao.validationPools(1); - expect(pool.postIndex).to.equal(2); + expect(pool.postId).to.equal('third-content-id'); await time.increase(POOL_DURATION + 1); await dao.evaluateOutcome(1); expect(await dao.balanceOf(account1)).to.equal(0); @@ -121,17 +118,17 @@ describe('Forum', () => { it('should be able to reverse a negative citation with a negative citation', async () => { await dao.addPost(account1, 'content-id', []); - await initiateValidationPool({ postIndex: 0 }); + await initiateValidationPool({ postId: 'content-id' }); await dao.evaluateOutcome(0); expect(await dao.balanceOf(account1)).to.equal(100); - await dao.addPost(account2, 'second-content-id', [{ weightPercent: -100, targetPostIndex: 0 }]); - await initiateValidationPool({ postIndex: 1 }); + await dao.addPost(account2, 'second-content-id', [{ weightPercent: -100, targetPostId: 'content-id' }]); + await initiateValidationPool({ postId: 'second-content-id' }); await time.increase(POOL_DURATION + 1); await dao.evaluateOutcome(1); expect(await dao.balanceOf(account1)).to.equal(0); expect(await dao.balanceOf(account2)).to.equal(200); - await dao.addPost(account3, 'third-content-id', [{ weightPercent: -100, targetPostIndex: 1 }]); - await initiateValidationPool({ postIndex: 2 }); + await dao.addPost(account3, 'third-content-id', [{ weightPercent: -100, targetPostId: 'second-content-id' }]); + await initiateValidationPool({ postId: 'third-content-id' }); await time.increase(POOL_DURATION + 1); await dao.evaluateOutcome(2); expect(await dao.balanceOf(account1)).to.equal(100); @@ -141,17 +138,17 @@ describe('Forum', () => { it('forum reputation rewards are shared with validation pool policing rewards', async () => { await dao.addPost(account1, 'content-id', []); - await initiateValidationPool({ postIndex: 0 }); + await initiateValidationPool({ postId: 'content-id' }); await dao.evaluateOutcome(0); expect(await dao.balanceOf(account1)).to.equal(100); await dao.addPost(account2, 'second-content-id', []); - await initiateValidationPool({ postIndex: 1 }); + await initiateValidationPool({ postId: 'second-content-id' }); await time.increase(POOL_DURATION + 1); await dao.evaluateOutcome(1); expect(await dao.balanceOf(account1)).to.equal(100); expect(await dao.balanceOf(account2)).to.equal(100); - await dao.addPost(account3, 'third-content-id', [{ weightPercent: -100, targetPostIndex: 1 }]); - await initiateValidationPool({ postIndex: 2 }); + await dao.addPost(account3, 'third-content-id', [{ weightPercent: -100, targetPostId: 'second-content-id' }]); + await initiateValidationPool({ postId: 'third-content-id' }); await dao.stakeOnValidationPool(2, 100, true); await time.increase(POOL_DURATION + 1); await dao.evaluateOutcome(2); @@ -163,17 +160,17 @@ describe('Forum', () => { it('should limit effects of negative references on prior positive references', async () => { console.log('First post'); await dao.addPost(account1, 'content-id', []); - await initiateValidationPool({ postIndex: 0 }); + await initiateValidationPool({ postId: 'content-id' }); await dao.evaluateOutcome(0); expect(await dao.balanceOf(account1)).to.equal(100); - await dao.addPost(account2, 'second-content-id', [{ weightPercent: 50, targetPostIndex: 0 }]); - await initiateValidationPool({ postIndex: 1 }); + await dao.addPost(account2, 'second-content-id', [{ weightPercent: 50, targetPostId: 'content-id' }]); + await initiateValidationPool({ postId: 'second-content-id' }); await time.increase(POOL_DURATION + 1); await dao.evaluateOutcome(1); expect(await dao.balanceOf(account1)).to.equal(150); expect(await dao.balanceOf(account2)).to.equal(50); - await dao.addPost(account3, 'third-content-id', [{ weightPercent: -100, targetPostIndex: 1 }]); - await initiateValidationPool({ postIndex: 2, fee: 200 }); + await dao.addPost(account3, 'third-content-id', [{ weightPercent: -100, targetPostId: 'second-content-id' }]); + await initiateValidationPool({ postId: 'third-content-id', fee: 200 }); await time.increase(POOL_DURATION + 1); await dao.evaluateOutcome(2); expect(await dao.balanceOf(account1)).to.equal(100); @@ -183,17 +180,17 @@ describe('Forum', () => { it('should limit effects of negative references on prior negative references', async () => { await dao.addPost(account1, 'content-id', []); - await initiateValidationPool({ postIndex: 0 }); + await initiateValidationPool({ postId: 'content-id' }); await dao.evaluateOutcome(0); expect(await dao.balanceOf(account1)).to.equal(100); - await dao.addPost(account2, 'second-content-id', [{ weightPercent: -100, targetPostIndex: 0 }]); - await initiateValidationPool({ postIndex: 1 }); + await dao.addPost(account2, 'second-content-id', [{ weightPercent: -100, targetPostId: 'content-id' }]); + await initiateValidationPool({ postId: 'second-content-id' }); await time.increase(POOL_DURATION + 1); await dao.evaluateOutcome(1); expect(await dao.balanceOf(account1)).to.equal(0); expect(await dao.balanceOf(account2)).to.equal(200); - await dao.addPost(account3, 'third-content-id', [{ weightPercent: -100, targetPostIndex: 1 }]); - await initiateValidationPool({ postIndex: 2, fee: 200 }); + await dao.addPost(account3, 'third-content-id', [{ weightPercent: -100, targetPostId: 'second-content-id' }]); + await initiateValidationPool({ postId: 'third-content-id', fee: 200 }); await time.increase(POOL_DURATION + 1); await dao.evaluateOutcome(2); expect(await dao.balanceOf(account1)).to.equal(100); @@ -203,16 +200,16 @@ describe('Forum', () => { it('should enforce depth limit', async () => { await dao.addPost(account1, 'content-id-1', []); - await dao.addPost(account1, 'content-id-2', [{ weightPercent: 100, targetPostIndex: 0 }]); - await dao.addPost(account1, 'content-id-3', [{ weightPercent: 100, targetPostIndex: 1 }]); - await dao.addPost(account1, 'content-id-4', [{ weightPercent: 100, targetPostIndex: 2 }]); - await initiateValidationPool({ postIndex: 3 }); + await dao.addPost(account1, 'content-id-2', [{ weightPercent: 100, targetPostId: 'content-id-1' }]); + await dao.addPost(account1, 'content-id-3', [{ weightPercent: 100, targetPostId: 'content-id-2' }]); + await dao.addPost(account1, 'content-id-4', [{ weightPercent: 100, targetPostId: 'content-id-3' }]); + await initiateValidationPool({ postId: 'content-id-4' }); await dao.evaluateOutcome(0); const posts = await Promise.all([ - await dao.posts(0), - await dao.posts(1), - await dao.posts(2), - await dao.posts(3), + await dao.posts('content-id-1'), + await dao.posts('content-id-2'), + await dao.posts('content-id-3'), + await dao.posts('content-id-4'), ]); expect(posts[0].reputation).to.equal(0); expect(posts[1].reputation).to.equal(100); @@ -224,37 +221,37 @@ describe('Forum', () => { await dao.addPost(account1, 'content-id-1', [ { weightPercent: 50, - targetPostIndex: ethers.MaxUint256, + targetPostId: '', }, ]); - await initiateValidationPool({ postIndex: 0 }); + await initiateValidationPool({ postId: 'content-id-1' }); expect(await dao.totalSupply()).to.equal(100); await dao.evaluateOutcome(0); - expect((await dao.posts(0)).reputation).to.equal(50); + expect((await dao.posts('content-id-1')).reputation).to.equal(50); expect(await dao.totalSupply()).to.equal(50); }); describe('negative citation of a post, the author having already staked and lost reputation', async () => { beforeEach(async () => { await dao.addPost(account1, 'content-id', []); - await initiateValidationPool({ postIndex: 0 }); + await initiateValidationPool({ postId: 'content-id' }); await dao.evaluateOutcome(0); expect(await dao.balanceOf(account1)).to.equal(100); expect(await dao.totalSupply()).to.equal(100); - expect((await dao.posts(0)).reputation).to.equal(100); + expect((await dao.posts('content-id')).reputation).to.equal(100); await dao.addPost(account2, 'second-content-id', []); - await initiateValidationPool({ postIndex: 1 }); + await initiateValidationPool({ postId: 'second-content-id' }); await time.increase(POOL_DURATION + 1); await dao.evaluateOutcome(1); expect(await dao.balanceOf(account1)).to.equal(100); expect(await dao.balanceOf(account2)).to.equal(100); expect(await dao.totalSupply()).to.equal(200); - expect((await dao.posts(0)).reputation).to.equal(100); - expect((await dao.posts(1)).reputation).to.equal(100); + expect((await dao.posts('content-id')).reputation).to.equal(100); + expect((await dao.posts('second-content-id')).reputation).to.equal(100); // account1 stakes and loses - await initiateValidationPool({ postIndex: 1 }); + await initiateValidationPool({ postId: 'second-content-id' }); await dao.stakeOnValidationPool(2, 50, true); await dao.connect(account2).stakeOnValidationPool(2, 60, false); await time.increase(POOL_DURATION + 1); @@ -262,53 +259,53 @@ describe('Forum', () => { expect(await dao.balanceOf(account1)).to.equal(50); expect(await dao.balanceOf(account2)).to.equal(250); expect(await dao.totalSupply()).to.equal(300); - expect((await dao.posts(0)).reputation).to.equal(100); - expect((await dao.posts(1)).reputation).to.equal(100); + expect((await dao.posts('content-id')).reputation).to.equal(100); + expect((await dao.posts('second-content-id')).reputation).to.equal(100); }); it('author and post rep can be completely destroyed', async () => { // account1's post is later strongly negatively referenced - await dao.addPost(account3, 'third-content-id', [{ weightPercent: -100, targetPostIndex: 0 }]); - await initiateValidationPool({ postIndex: 2, fee: 200 }); + await dao.addPost(account3, 'third-content-id', [{ weightPercent: -100, targetPostId: 'content-id' }]); + await initiateValidationPool({ postId: 'third-content-id', fee: 200 }); await time.increase(POOL_DURATION + 1); await dao.evaluateOutcome(3); expect(await dao.balanceOf(account1)).to.equal(0); expect(await dao.balanceOf(account2)).to.equal(250); expect(await dao.balanceOf(account3)).to.equal(250); expect(await dao.totalSupply()).to.equal(500); - expect((await dao.posts(0)).reputation).to.equal(0); - expect((await dao.posts(1)).reputation).to.equal(100); - expect((await dao.posts(2)).reputation).to.equal(250); + expect((await dao.posts('content-id')).reputation).to.equal(0); + expect((await dao.posts('second-content-id')).reputation).to.equal(100); + expect((await dao.posts('third-content-id')).reputation).to.equal(250); }); it('author rep can be destroyed while some post rep remains', async () => { // account1's post is later strongly negatively referenced - await dao.addPost(account3, 'third-content-id', [{ weightPercent: -100, targetPostIndex: 0 }]); - await initiateValidationPool({ postIndex: 2, fee: 70 }); + await dao.addPost(account3, 'third-content-id', [{ weightPercent: -100, targetPostId: 'content-id' }]); + await initiateValidationPool({ postId: 'third-content-id', fee: 70 }); await time.increase(POOL_DURATION + 1); await dao.evaluateOutcome(3); expect(await dao.totalSupply()).to.equal(370); expect(await dao.balanceOf(account1)).to.equal(0); expect(await dao.balanceOf(account2)).to.equal(250); expect(await dao.balanceOf(account3)).to.equal(120); - expect((await dao.posts(0)).reputation).to.equal(30); - expect((await dao.posts(1)).reputation).to.equal(100); - expect((await dao.posts(2)).reputation).to.equal(120); + expect((await dao.posts('content-id')).reputation).to.equal(30); + expect((await dao.posts('second-content-id')).reputation).to.equal(100); + expect((await dao.posts('third-content-id')).reputation).to.equal(120); }); it('author rep can be destroyed while some post rep remains (odd amount)', async () => { // account1's post is later strongly negatively referenced - await dao.addPost(account3, 'third-content-id', [{ weightPercent: -100, targetPostIndex: 0 }]); - await initiateValidationPool({ postIndex: 2, fee: 75 }); + await dao.addPost(account3, 'third-content-id', [{ weightPercent: -100, targetPostId: 'content-id' }]); + await initiateValidationPool({ postId: 'third-content-id', fee: 75 }); await time.increase(POOL_DURATION + 1); await dao.evaluateOutcome(3); expect(await dao.totalSupply()).to.equal(375); expect(await dao.balanceOf(account1)).to.equal(0); expect(await dao.balanceOf(account2)).to.equal(250); expect(await dao.balanceOf(account3)).to.equal(125); - expect((await dao.posts(0)).reputation).to.equal(25); - expect((await dao.posts(1)).reputation).to.equal(100); - expect((await dao.posts(2)).reputation).to.equal(125); + expect((await dao.posts('content-id')).reputation).to.equal(25); + expect((await dao.posts('second-content-id')).reputation).to.equal(100); + expect((await dao.posts('third-content-id')).reputation).to.equal(125); }); }); }); diff --git a/ethereum/test/Onboarding.js b/ethereum/test/Onboarding.js index 1ce5fa5..2b2ae42 100644 --- a/ethereum/test/Onboarding.js +++ b/ethereum/test/Onboarding.js @@ -22,7 +22,7 @@ describe('Onboarding', () => { await dao.addPost(account1, 'content-id', []); const callbackData = ethers.AbiCoder.defaultAbiCoder().encode([], []); await dao.initiateValidationPool( - 0, + 'content-id', 60, [1, 3], [1, 2], @@ -70,12 +70,12 @@ describe('Onboarding', () => { await expect(onboarding.submitWorkApproval(0, true)) .to.emit(dao, 'ValidationPoolInitiated').withArgs(1) .to.emit(onboarding, 'WorkApprovalSubmitted').withArgs(0, true); - const post = await dao.posts(1); + const post = await dao.posts('evidence-content-id'); expect(post.author).to.equal(account1); expect(post.sender).to.equal(onboarding.target); - expect(post.contentId).to.equal('evidence-content-id'); + expect(post.id).to.equal('evidence-content-id'); const pool = await dao.validationPools(1); - expect(pool.postIndex).to.equal(1); + expect(pool.postId).to.equal('evidence-content-id'); expect(pool.fee).to.equal(PRICE * 0.9); expect(pool.sender).to.equal(onboarding.target); }); @@ -120,12 +120,12 @@ describe('Onboarding', () => { await time.increase(86401); await expect(dao.evaluateOutcome(1)).to.emit(dao, 'ValidationPoolInitiated').withArgs(2); expect(await dao.postCount()).to.equal(3); - const post = await dao.posts(2); + const post = await dao.posts('req-content-id'); expect(post.author).to.equal(account2); expect(post.sender).to.equal(onboarding.target); - expect(post.contentId).to.equal('req-content-id'); + expect(post.id).to.equal('req-content-id'); const pool = await dao.validationPools(2); - expect(pool.postIndex).to.equal(2); + expect(pool.postId).to.equal('req-content-id'); expect(pool.fee).to.equal(PRICE * 0.1); expect(pool.sender).to.equal(onboarding.target); expect(pool.fee); diff --git a/ethereum/test/Proposals.js b/ethereum/test/Proposals.js index e399fc1..5aeee6d 100644 --- a/ethereum/test/Proposals.js +++ b/ethereum/test/Proposals.js @@ -20,7 +20,7 @@ describe('Proposal', () => { await dao.addPost(account2, 'some-other-content-id', []); const callbackData = ethers.AbiCoder.defaultAbiCoder().encode([], []); await dao.initiateValidationPool( - 0, + 'some-content-id', 60, [1, 3], [1, 2], @@ -31,7 +31,7 @@ describe('Proposal', () => { { value: 1000 }, ); await dao.initiateValidationPool( - 1, + 'some-other-content-id', 60, [1, 3], [1, 2], @@ -82,7 +82,7 @@ describe('Proposal', () => { await proposals.propose('proposal-content-id', account1, [20, 20, 20], false, emptyCallbackData, { value: 100 }); expect(await proposals.proposalCount()).to.equal(1); proposal = await proposals.proposals(0); - expect(proposal.postIndex).to.equal(2); + expect(proposal.postId).to.equal('proposal-content-id'); expect(proposal.stage).to.equal(0); }); diff --git a/ethereum/test/ValidationPools.js b/ethereum/test/ValidationPools.js index bc5d7fb..0182413 100644 --- a/ethereum/test/ValidationPools.js +++ b/ethereum/test/ValidationPools.js @@ -20,12 +20,12 @@ describe('Validation Pools', () => { const emptyCallbackData = ethers.AbiCoder.defaultAbiCoder().encode([], []); const initiateValidationPool = ({ - postIndex, duration, + postId, duration, quorum, winRatio, bindingPercent, redistributeLosingStakes, callbackOnValidate, callbackData, fee, } = {}) => dao.initiateValidationPool( - postIndex ?? 0, + postId ?? 'content-id', duration ?? POOL_DURATION, quorum ?? [1, 3], winRatio ?? [1, 2], @@ -88,7 +88,7 @@ describe('Validation Pools', () => { const pool = await dao.validationPools(0); expect(pool).to.exist; expect(pool.params.duration).to.equal(POOL_DURATION); - expect(pool.postIndex).to.equal(0); + expect(pool.postId).to.equal('content-id'); expect(pool.resolved).to.be.false; expect(pool.sender).to.equal(account1); }); @@ -167,17 +167,7 @@ describe('Validation Pools', () => { }); it('should be able to evaluate outcome of second validation pool', async () => { - const init = () => dao.initiateValidationPool( - 0, - POOL_DURATION, - [1, 3], - [1, 2], - 100, - true, - false, - emptyCallbackData, - { value: POOL_FEE }, - ); + const init = () => initiateValidationPool(); await expect(init()).to.emit(dao, 'ValidationPoolInitiated').withArgs(1); expect(await dao.validationPoolCount()).to.equal(2); time.increase(POOL_DURATION + 1); @@ -202,8 +192,8 @@ describe('Validation Pools', () => { beforeEach(async () => { time.increase(POOL_DURATION + 1); await dao.evaluateOutcome(0); - await dao.addPost(account2, 'content-id', []); - const init = () => initiateValidationPool({ postIndex: 1 }); + await dao.addPost(account2, 'content-id-2', []); + const init = () => initiateValidationPool({ postId: 'content-id-2' }); await expect(init()).to.emit(dao, 'ValidationPoolInitiated').withArgs(1); time.increase(POOL_DURATION + 1); await dao.evaluateOutcome(1); diff --git a/ethereum/test/Work1.js b/ethereum/test/Work1.js index 153dc4c..cfe2a4b 100644 --- a/ethereum/test/Work1.js +++ b/ethereum/test/Work1.js @@ -22,7 +22,7 @@ describe('Work1', () => { await dao.addPost(account1, 'some-content-id', []); const callbackData = ethers.AbiCoder.defaultAbiCoder().encode([], []); await dao.initiateValidationPool( - 0, + 'some-content-id', 60, [1, 3], [1, 2], @@ -211,14 +211,14 @@ describe('Work1', () => { .to.emit(work1, 'WorkApprovalSubmitted').withArgs(0, true); expect(await dao.balanceOf(work1.target)).to.equal(0); expect(await dao.balanceOf(account1)).to.equal(100); - const post = await dao.posts(1); + const post = await dao.posts('evidence-content-id'); expect(post.author).to.equal(account1); expect(post.sender).to.equal(work1.target); - expect(post.contentId).to.equal('evidence-content-id'); + expect(post.id).to.equal('evidence-content-id'); const pool = await dao.validationPools(1); expect(pool.fee).to.equal(WORK1_PRICE); expect(pool.sender).to.equal(work1.target); - expect(pool.postIndex).to.equal(1); + expect(pool.postId).to.equal('evidence-content-id'); expect(pool.stakeCount).to.equal(1); await time.increase(86401); await expect(dao.evaluateOutcome(1)).to.emit(dao, 'ValidationPoolResolved').withArgs(1, true, true);