From 981dda97b1d050cb5da7d1aed51fb9455ce1e727 Mon Sep 17 00:00:00 2001 From: Ladd Hoffman Date: Fri, 3 May 2024 20:43:58 -0500 Subject: [PATCH] Fixes for matrix pool batching --- backend/contract-addresses.json | 18 ++++---- backend/contractArtifacts/Rollup.json | 10 ++--- backend/contractArtifacts/Work2.json | 4 +- backend/src/event-handlers/bot-commands.js | 4 +- .../src/event-handlers/rollup/batch-items.js | 36 +++------------ .../rollup/compute-author-weights.js | 1 + backend/src/event-handlers/rollup/index.js | 31 +++++++++---- .../compute-result.js} | 2 +- .../rollup/matrix-pools/evaluate.js | 2 +- .../matrix-pools/initiate-matrix-pools.js | 45 +++++++++++++++++++ .../rollup/matrix-pools/initiate.js | 19 +++++--- backend/src/event-handlers/rollup/utils.js | 19 ++------ ethereum/contract-addresses.json | 18 ++++---- frontend/contract-addresses.json | 18 ++++---- frontend/contractArtifacts/Rollup.json | 10 ++--- frontend/contractArtifacts/Work2.json | 4 +- 16 files changed, 135 insertions(+), 106 deletions(-) rename backend/src/event-handlers/rollup/{compute-matrix-pool-result.js => matrix-pools/compute-result.js} (95%) create mode 100644 backend/src/event-handlers/rollup/matrix-pools/initiate-matrix-pools.js diff --git a/backend/contract-addresses.json b/backend/contract-addresses.json index 3dbee7d..46a193f 100644 --- a/backend/contract-addresses.json +++ b/backend/contract-addresses.json @@ -1,14 +1,14 @@ { "localhost": { - "DAO": "0x1d63FDe5B461106729fE1e5e38A02fc68C518Af5", - "Work1": "0xB8f0cd092979F273b752FDa060F82BF2745f192e", - "Onboarding": "0x8F00038542C87A5eAf18d5938B7723bF2A04A4e4", - "Proposals": "0x6c18eb38b7450F8DaE5A5928A40fcA3952493Ee4", - "Rollup": "0x57BDFFf79108E5198dec6268A6BFFD8B62ECfA38", - "Work2": "0x42b79f8d8408c36aD4347ab72f826684440a7a8F", - "Reputation": "0x8d914D38dD301FC4606f5aa9fEcF8A76389020d3", - "Forum": "0x050C420Cc4995B41217Eba1B54B82Fd5687e9139", - "Bench": "0xfe58B9EB03F75A603de1B286584f5E9532ab8fB5" + "DAO": "0x3734B0944ea37694E85AEF60D5b256d19EDA04be", + "Work1": "0x8BDA04936887cF11263B87185E4D19e8158c6296", + "Onboarding": "0x8688E736D0D72161db4D25f68EF7d0EE4856ba19", + "Proposals": "0x3287061aDCeE36C1aae420a06E4a5EaE865Fe3ce", + "Rollup": "0x71cb20D63576a0Fa4F620a2E96C73F82848B09e1", + "Work2": "0x76Dfe9F47f06112a1b78960bf37d87CfbB6D6133", + "Reputation": "0xEAefe601Aad7422307B99be65bbE005aeA966012", + "Forum": "0x79e365342329560e8420d7a0f016633d7640cB18", + "Bench": "0xC0f00E5915F9abE6476858fD1961EAf79395ea64" }, "sepolia": { "DAO": "0x02dC6871d89fA6a16be2e875C63d81761CF459A8", diff --git a/backend/contractArtifacts/Rollup.json b/backend/contractArtifacts/Rollup.json index 7ed103b..a018fe4 100644 --- a/backend/contractArtifacts/Rollup.json +++ b/backend/contractArtifacts/Rollup.json @@ -237,9 +237,9 @@ "type": "string" }, { - "internalType": "uint256", - "name": "batchSize", - "type": "uint256" + "internalType": "string[]", + "name": "batchItems", + "type": "string[]" }, { "internalType": "uint256", @@ -259,8 +259,8 @@ "type": "function" } ], - "bytecode": "0x60a06040523480156200001157600080fd5b50604051620020b4380380620020b48339818101604052810190620000379190620000f4565b80808073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505050505062000126565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620000a8826200007b565b9050919050565b6000620000bc826200009b565b9050919050565b620000ce81620000af565b8114620000da57600080fd5b50565b600081519050620000ee81620000c3565b92915050565b6000602082840312156200010d576200010c62000076565b5b60006200011d84828501620000dd565b91505092915050565b608051611f5d620001576000396000818161021c01528181610860015281816109470152610a890152611f5d6000f3fe60806040526004361061007b5760003560e01c8063c4a9e1161161004e578063c4a9e11614610154578063d5a44f861461017f578063da553ec2146101bf578063f85c5a8a146101fc5761007b565b8063216ed6ad1461008057806324364a6b146100bd5780636bfb0d01146100e8578063bfb231d214610113575b600080fd5b34801561008c57600080fd5b506100a760048036038101906100a29190611153565b610218565b6040516100b491906111b5565b60405180910390f35b3480156100c957600080fd5b506100d2610561565b6040516100df91906111df565b60405180910390f35b3480156100f457600080fd5b506100fd610587565b60405161010a91906111b5565b60405180910390f35b34801561011f57600080fd5b5061013a600480360381019061013591906111fa565b61058d565b60405161014b9594939291906112b7565b60405180910390f35b34801561016057600080fd5b5061016961068b565b60405161017691906111b5565b60405180910390f35b34801561018b57600080fd5b506101a660048036038101906101a191906111fa565b610691565b6040516101b6949392919061132c565b60405180910390f35b3480156101cb57600080fd5b506101e660048036038101906101e191906113d6565b6106ee565b6040516101f391906111b5565b60405180910390f35b6102166004803603810190610211919061144a565b610db8565b005b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146102a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161029f90611530565b60405180910390fd5b600083116102eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102e29061159c565b60405180910390fd5b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000811480156103a057508473ffffffffffffffffffffffffffffffffffffffff1660008083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b1561040757600260008154809291906103b8906115eb565b91905055905080600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506104ab565b60008082815260200190815260200160002060030160009054906101000a900460ff16156104915760026000815480929190610442906115eb565b91905055905080600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506104aa565b6000808281526020019081526020016000206001015491505b5b60008060008381526020019081526020016000209050858160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084816001018190555083426105199190611633565b81600201819055507fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e98260405161055091906111b5565b60405180910390a150509392505050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60045481565b60036020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169080600201549080600301549080600401805461060890611696565b80601f016020809104026020016040519081016040528092919081815260200182805461063490611696565b80156106815780601f1061065657610100808354040283529160200191610681565b820191906000526020600020905b81548152906001019060200180831161066457829003601f168201915b5050505050905085565b60025481565b60006020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030160009054906101000a900460ff16905084565b6000600454831115610735576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161072c90611713565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461081c57600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461081b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610812906117a5565b60405180910390fd5b5b600080600090505b8481101561085d5760036000828152602001908152602001600020600301548261084e9190611633565b91508080600101915050610824565b507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639fbe7c7382888887604051806040016040528060018152602001600381525060405180604001604052806001815260200160028152506064600160006040518a63ffffffff1660e01b81526004016108f5989796959493929190611928565b60206040518083038185885af1158015610913573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061093891906119cb565b915060005b84811015610a30577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663975762b3846003600085815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600360008681526020019081526020016000206002015460016040518563ffffffff1660e01b81526004016109f194939291906119f8565b600060405180830381600087803b158015610a0b57600080fd5b505af1158015610a1f573d6000803e3d6000fd5b50505050808060010191505061093d565b50600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b53577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663975762b383600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660008060065481526020019081526020016000206001015460016040518563ffffffff1660e01b8152600401610b2094939291906119f8565b600060405180830381600087803b158015610b3a57600080fd5b505af1158015610b4e573d6000803e3d6000fd5b505050505b600454841015610cc75760005b84600454610b6e9190611a3d565b811015610cad57600360008287610b859190611633565b8152602001908152602001600020600360008381526020019081526020016000206000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600282015481600201556003820154816003015560048201816004019081610c9c9190611c58565b509050508080600101915050610b60565b5083600454610cbc9190611a3d565b600481905550610cd0565b60006004819055505b610cd8610efd565b600681905550600080600654815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f672ebfecd081c72b12452a84f8b6d051a1f32cda55cdf8992251279a5408b5a5600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051610da791906111df565b60405180910390a150949350505050565b60006003600060046000815480929190610dd1906115eb565b9190505581526020019081526020016000209050338160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550848160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508381600201819055503481600301819055508282826004019182610e90929190611d4b565b507ff67a2314f80fd951705a8cb64e24285516f2937f5e0db904aa6d29f3bae1d02783838360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168460030154604051610eee9493929190611e1b565b60405180910390a15050505050565b6000610f07610f40565b90506000806000838152602001908152602001600020905060018160030160006101000a81548160ff0219169083151502179055505090565b60008060005b600254811015610fc45760008082815260200190815260200160002060030160009054906101000a900460ff16610fb757600080828152602001908152602001600020600201544211610fb7576000808281526020019081526020016000206001015482610fb49190611633565b91505b8080600101915050610f46565b5060008111611008576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fff90611ea7565b60405180910390fd5b600081446110169190611ef6565b9050600080600090505b6002548110156110ae5760008082815260200190815260200160002060030160009054906101000a900460ff166110a1576000808281526020019081526020016000206002015442116110a157600080828152602001908152602001600020600101548261108e9190611633565b9150828211156110a0578094506110ae565b5b8080600101915050611020565b5050505090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006110ea826110bf565b9050919050565b6110fa816110df565b811461110557600080fd5b50565b600081359050611117816110f1565b92915050565b6000819050919050565b6111308161111d565b811461113b57600080fd5b50565b60008135905061114d81611127565b92915050565b60008060006060848603121561116c5761116b6110b5565b5b600061117a86828701611108565b935050602061118b8682870161113e565b925050604061119c8682870161113e565b9150509250925092565b6111af8161111d565b82525050565b60006020820190506111ca60008301846111a6565b92915050565b6111d9816110df565b82525050565b60006020820190506111f460008301846111d0565b92915050565b6000602082840312156112105761120f6110b5565b5b600061121e8482850161113e565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611261578082015181840152602081019050611246565b60008484015250505050565b6000601f19601f8301169050919050565b600061128982611227565b6112938185611232565b93506112a3818560208601611243565b6112ac8161126d565b840191505092915050565b600060a0820190506112cc60008301886111d0565b6112d960208301876111d0565b6112e660408301866111a6565b6112f360608301856111a6565b8181036080830152611305818461127e565b90509695505050505050565b60008115159050919050565b61132681611311565b82525050565b600060808201905061134160008301876111d0565b61134e60208301866111a6565b61135b60408301856111a6565b611368606083018461131d565b95945050505050565b600080fd5b600080fd5b600080fd5b60008083601f84011261139657611395611371565b5b8235905067ffffffffffffffff8111156113b3576113b2611376565b5b6020830191508360018202830111156113cf576113ce61137b565b5b9250929050565b600080600080606085870312156113f0576113ef6110b5565b5b600085013567ffffffffffffffff81111561140e5761140d6110ba565b5b61141a87828801611380565b9450945050602061142d8782880161113e565b925050604061143e8782880161113e565b91505092959194509250565b60008060008060608587031215611464576114636110b5565b5b600061147287828801611108565b94505060206114838782880161113e565b935050604085013567ffffffffffffffff8111156114a4576114a36110ba565b5b6114b087828801611380565b925092505092959194509250565b7f616363657074417661696c6162696c697479206d757374206f6e6c792062652060008201527f63616c6c65642062792044414f20636f6e747261637400000000000000000000602082015250565b600061151a603683611232565b9150611525826114be565b604082019050919050565b600060208201905081810360008301526115498161150d565b9050919050565b7f4e6f207374616b652070726f7669646564000000000000000000000000000000600082015250565b6000611586601183611232565b915061159182611550565b602082019050919050565b600060208201905081810360008301526115b581611579565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006115f68261111d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611628576116276115bc565b5b600182019050919050565b600061163e8261111d565b91506116498361111d565b9250828201905080821115611661576116606115bc565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806116ae57607f821691505b6020821081036116c1576116c0611667565b5b50919050565b7f42617463682073697a6520746f6f206c61726765000000000000000000000000600082015250565b60006116fd601483611232565b9150611708826116c7565b602082019050919050565b6000602082019050818103600083015261172c816116f0565b9050919050565b7f426174636820726573756c74206d757374206265207375626d6974746564206260008201527f792063757272656e7420626174636820776f726b657200000000000000000000602082015250565b600061178f603683611232565b915061179a82611733565b604082019050919050565b600060208201905081810360008301526117be81611782565b9050919050565b82818337600083830152505050565b60006117e08385611232565b93506117ed8385846117c5565b6117f68361126d565b840190509392505050565b600060029050919050565b600081905092915050565b6000819050919050565b61182a8161111d565b82525050565b600061183c8383611821565b60208301905092915050565b6000602082019050919050565b61185e81611801565b611868818461180c565b925061187382611817565b8060005b838110156118a457815161188b8782611830565b965061189683611848565b925050600181019050611877565b505050505050565b6000819050919050565b6000819050919050565b60006118db6118d66118d1846118ac565b6118b6565b61111d565b9050919050565b6118eb816118c0565b82525050565b600082825260208201905092915050565b50565b60006119126000836118f1565b915061191d82611902565b600082019050919050565b6000610140820190508181036000830152611944818a8c6117d4565b905061195360208301896111a6565b6119606040830188611855565b61196d6080830187611855565b61197a60c08301866118e2565b61198760e083018561131d565b61199561010083018461131d565b8181036101208301526119a781611905565b90509998505050505050505050565b6000815190506119c581611127565b92915050565b6000602082840312156119e1576119e06110b5565b5b60006119ef848285016119b6565b91505092915050565b6000608082019050611a0d60008301876111a6565b611a1a60208301866111d0565b611a2760408301856111a6565b611a34606083018461131d565b95945050505050565b6000611a488261111d565b9150611a538361111d565b9250828203905081811115611a6b57611a6a6115bc565b5b92915050565b600081549050611a8081611696565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302611b187fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82611adb565b611b228683611adb565b95508019841693508086168417925050509392505050565b6000611b55611b50611b4b8461111d565b6118b6565b61111d565b9050919050565b6000819050919050565b611b6f83611b3a565b611b83611b7b82611b5c565b848454611ae8565b825550505050565b600090565b611b98611b8b565b611ba3818484611b66565b505050565b5b81811015611bc757611bbc600082611b90565b600181019050611ba9565b5050565b601f821115611c0c57611bdd81611ab6565b611be684611acb565b81016020851015611bf5578190505b611c09611c0185611acb565b830182611ba8565b50505b505050565b600082821c905092915050565b6000611c2f60001984600802611c11565b1980831691505092915050565b6000611c488383611c1e565b9150826002028217905092915050565b818103611c66575050611d3e565b611c6f82611a71565b67ffffffffffffffff811115611c8857611c87611a87565b5b611c928254611696565b611c9d828285611bcb565b6000601f831160018114611ccc5760008415611cba578287015490505b611cc48582611c3c565b865550611d37565b601f198416611cda87611ab6565b9650611ce586611ab6565b60005b82811015611d0d57848901548255600182019150600185019450602081019050611ce8565b86831015611d2a5784890154611d26601f891682611c1e565b8355505b6001600288020188555050505b5050505050505b565b600082905092915050565b611d558383611d40565b67ffffffffffffffff811115611d6e57611d6d611a87565b5b611d788254611696565b611d83828285611bcb565b6000601f831160018114611db25760008415611da0578287013590505b611daa8582611c3c565b865550611e12565b601f198416611dc086611ab6565b60005b82811015611de857848901358255600182019150602085019450602081019050611dc3565b86831015611e055784890135611e01601f891682611c1e565b8355505b6001600288020188555050505b50505050505050565b60006060820190508181036000830152611e368186886117d4565b9050611e4560208301856111d0565b611e5260408301846111a6565b95945050505050565b7f4e6f20617661696c61626c6520776f726b6572207374616b6573000000000000600082015250565b6000611e91601a83611232565b9150611e9c82611e5b565b602082019050919050565b60006020820190508181036000830152611ec081611e84565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000611f018261111d565b9150611f0c8361111d565b925082611f1c57611f1b611ec7565b5b82820690509291505056fea264697066735822122095392d734918a8a61988b0f3ab9e926fa8b58c4ae69b87c0c25a151cb04642d364736f6c63430008180033", - "deployedBytecode": "0x60806040526004361061007b5760003560e01c8063c4a9e1161161004e578063c4a9e11614610154578063d5a44f861461017f578063da553ec2146101bf578063f85c5a8a146101fc5761007b565b8063216ed6ad1461008057806324364a6b146100bd5780636bfb0d01146100e8578063bfb231d214610113575b600080fd5b34801561008c57600080fd5b506100a760048036038101906100a29190611153565b610218565b6040516100b491906111b5565b60405180910390f35b3480156100c957600080fd5b506100d2610561565b6040516100df91906111df565b60405180910390f35b3480156100f457600080fd5b506100fd610587565b60405161010a91906111b5565b60405180910390f35b34801561011f57600080fd5b5061013a600480360381019061013591906111fa565b61058d565b60405161014b9594939291906112b7565b60405180910390f35b34801561016057600080fd5b5061016961068b565b60405161017691906111b5565b60405180910390f35b34801561018b57600080fd5b506101a660048036038101906101a191906111fa565b610691565b6040516101b6949392919061132c565b60405180910390f35b3480156101cb57600080fd5b506101e660048036038101906101e191906113d6565b6106ee565b6040516101f391906111b5565b60405180910390f35b6102166004803603810190610211919061144a565b610db8565b005b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146102a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161029f90611530565b60405180910390fd5b600083116102eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102e29061159c565b60405180910390fd5b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000811480156103a057508473ffffffffffffffffffffffffffffffffffffffff1660008083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b1561040757600260008154809291906103b8906115eb565b91905055905080600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506104ab565b60008082815260200190815260200160002060030160009054906101000a900460ff16156104915760026000815480929190610442906115eb565b91905055905080600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506104aa565b6000808281526020019081526020016000206001015491505b5b60008060008381526020019081526020016000209050858160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084816001018190555083426105199190611633565b81600201819055507fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e98260405161055091906111b5565b60405180910390a150509392505050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60045481565b60036020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169080600201549080600301549080600401805461060890611696565b80601f016020809104026020016040519081016040528092919081815260200182805461063490611696565b80156106815780601f1061065657610100808354040283529160200191610681565b820191906000526020600020905b81548152906001019060200180831161066457829003601f168201915b5050505050905085565b60025481565b60006020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030160009054906101000a900460ff16905084565b6000600454831115610735576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161072c90611713565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461081c57600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461081b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610812906117a5565b60405180910390fd5b5b600080600090505b8481101561085d5760036000828152602001908152602001600020600301548261084e9190611633565b91508080600101915050610824565b507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639fbe7c7382888887604051806040016040528060018152602001600381525060405180604001604052806001815260200160028152506064600160006040518a63ffffffff1660e01b81526004016108f5989796959493929190611928565b60206040518083038185885af1158015610913573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061093891906119cb565b915060005b84811015610a30577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663975762b3846003600085815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600360008681526020019081526020016000206002015460016040518563ffffffff1660e01b81526004016109f194939291906119f8565b600060405180830381600087803b158015610a0b57600080fd5b505af1158015610a1f573d6000803e3d6000fd5b50505050808060010191505061093d565b50600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b53577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663975762b383600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660008060065481526020019081526020016000206001015460016040518563ffffffff1660e01b8152600401610b2094939291906119f8565b600060405180830381600087803b158015610b3a57600080fd5b505af1158015610b4e573d6000803e3d6000fd5b505050505b600454841015610cc75760005b84600454610b6e9190611a3d565b811015610cad57600360008287610b859190611633565b8152602001908152602001600020600360008381526020019081526020016000206000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600282015481600201556003820154816003015560048201816004019081610c9c9190611c58565b509050508080600101915050610b60565b5083600454610cbc9190611a3d565b600481905550610cd0565b60006004819055505b610cd8610efd565b600681905550600080600654815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f672ebfecd081c72b12452a84f8b6d051a1f32cda55cdf8992251279a5408b5a5600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051610da791906111df565b60405180910390a150949350505050565b60006003600060046000815480929190610dd1906115eb565b9190505581526020019081526020016000209050338160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550848160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508381600201819055503481600301819055508282826004019182610e90929190611d4b565b507ff67a2314f80fd951705a8cb64e24285516f2937f5e0db904aa6d29f3bae1d02783838360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168460030154604051610eee9493929190611e1b565b60405180910390a15050505050565b6000610f07610f40565b90506000806000838152602001908152602001600020905060018160030160006101000a81548160ff0219169083151502179055505090565b60008060005b600254811015610fc45760008082815260200190815260200160002060030160009054906101000a900460ff16610fb757600080828152602001908152602001600020600201544211610fb7576000808281526020019081526020016000206001015482610fb49190611633565b91505b8080600101915050610f46565b5060008111611008576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fff90611ea7565b60405180910390fd5b600081446110169190611ef6565b9050600080600090505b6002548110156110ae5760008082815260200190815260200160002060030160009054906101000a900460ff166110a1576000808281526020019081526020016000206002015442116110a157600080828152602001908152602001600020600101548261108e9190611633565b9150828211156110a0578094506110ae565b5b8080600101915050611020565b5050505090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006110ea826110bf565b9050919050565b6110fa816110df565b811461110557600080fd5b50565b600081359050611117816110f1565b92915050565b6000819050919050565b6111308161111d565b811461113b57600080fd5b50565b60008135905061114d81611127565b92915050565b60008060006060848603121561116c5761116b6110b5565b5b600061117a86828701611108565b935050602061118b8682870161113e565b925050604061119c8682870161113e565b9150509250925092565b6111af8161111d565b82525050565b60006020820190506111ca60008301846111a6565b92915050565b6111d9816110df565b82525050565b60006020820190506111f460008301846111d0565b92915050565b6000602082840312156112105761120f6110b5565b5b600061121e8482850161113e565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611261578082015181840152602081019050611246565b60008484015250505050565b6000601f19601f8301169050919050565b600061128982611227565b6112938185611232565b93506112a3818560208601611243565b6112ac8161126d565b840191505092915050565b600060a0820190506112cc60008301886111d0565b6112d960208301876111d0565b6112e660408301866111a6565b6112f360608301856111a6565b8181036080830152611305818461127e565b90509695505050505050565b60008115159050919050565b61132681611311565b82525050565b600060808201905061134160008301876111d0565b61134e60208301866111a6565b61135b60408301856111a6565b611368606083018461131d565b95945050505050565b600080fd5b600080fd5b600080fd5b60008083601f84011261139657611395611371565b5b8235905067ffffffffffffffff8111156113b3576113b2611376565b5b6020830191508360018202830111156113cf576113ce61137b565b5b9250929050565b600080600080606085870312156113f0576113ef6110b5565b5b600085013567ffffffffffffffff81111561140e5761140d6110ba565b5b61141a87828801611380565b9450945050602061142d8782880161113e565b925050604061143e8782880161113e565b91505092959194509250565b60008060008060608587031215611464576114636110b5565b5b600061147287828801611108565b94505060206114838782880161113e565b935050604085013567ffffffffffffffff8111156114a4576114a36110ba565b5b6114b087828801611380565b925092505092959194509250565b7f616363657074417661696c6162696c697479206d757374206f6e6c792062652060008201527f63616c6c65642062792044414f20636f6e747261637400000000000000000000602082015250565b600061151a603683611232565b9150611525826114be565b604082019050919050565b600060208201905081810360008301526115498161150d565b9050919050565b7f4e6f207374616b652070726f7669646564000000000000000000000000000000600082015250565b6000611586601183611232565b915061159182611550565b602082019050919050565b600060208201905081810360008301526115b581611579565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006115f68261111d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611628576116276115bc565b5b600182019050919050565b600061163e8261111d565b91506116498361111d565b9250828201905080821115611661576116606115bc565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806116ae57607f821691505b6020821081036116c1576116c0611667565b5b50919050565b7f42617463682073697a6520746f6f206c61726765000000000000000000000000600082015250565b60006116fd601483611232565b9150611708826116c7565b602082019050919050565b6000602082019050818103600083015261172c816116f0565b9050919050565b7f426174636820726573756c74206d757374206265207375626d6974746564206260008201527f792063757272656e7420626174636820776f726b657200000000000000000000602082015250565b600061178f603683611232565b915061179a82611733565b604082019050919050565b600060208201905081810360008301526117be81611782565b9050919050565b82818337600083830152505050565b60006117e08385611232565b93506117ed8385846117c5565b6117f68361126d565b840190509392505050565b600060029050919050565b600081905092915050565b6000819050919050565b61182a8161111d565b82525050565b600061183c8383611821565b60208301905092915050565b6000602082019050919050565b61185e81611801565b611868818461180c565b925061187382611817565b8060005b838110156118a457815161188b8782611830565b965061189683611848565b925050600181019050611877565b505050505050565b6000819050919050565b6000819050919050565b60006118db6118d66118d1846118ac565b6118b6565b61111d565b9050919050565b6118eb816118c0565b82525050565b600082825260208201905092915050565b50565b60006119126000836118f1565b915061191d82611902565b600082019050919050565b6000610140820190508181036000830152611944818a8c6117d4565b905061195360208301896111a6565b6119606040830188611855565b61196d6080830187611855565b61197a60c08301866118e2565b61198760e083018561131d565b61199561010083018461131d565b8181036101208301526119a781611905565b90509998505050505050505050565b6000815190506119c581611127565b92915050565b6000602082840312156119e1576119e06110b5565b5b60006119ef848285016119b6565b91505092915050565b6000608082019050611a0d60008301876111a6565b611a1a60208301866111d0565b611a2760408301856111a6565b611a34606083018461131d565b95945050505050565b6000611a488261111d565b9150611a538361111d565b9250828203905081811115611a6b57611a6a6115bc565b5b92915050565b600081549050611a8081611696565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302611b187fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82611adb565b611b228683611adb565b95508019841693508086168417925050509392505050565b6000611b55611b50611b4b8461111d565b6118b6565b61111d565b9050919050565b6000819050919050565b611b6f83611b3a565b611b83611b7b82611b5c565b848454611ae8565b825550505050565b600090565b611b98611b8b565b611ba3818484611b66565b505050565b5b81811015611bc757611bbc600082611b90565b600181019050611ba9565b5050565b601f821115611c0c57611bdd81611ab6565b611be684611acb565b81016020851015611bf5578190505b611c09611c0185611acb565b830182611ba8565b50505b505050565b600082821c905092915050565b6000611c2f60001984600802611c11565b1980831691505092915050565b6000611c488383611c1e565b9150826002028217905092915050565b818103611c66575050611d3e565b611c6f82611a71565b67ffffffffffffffff811115611c8857611c87611a87565b5b611c928254611696565b611c9d828285611bcb565b6000601f831160018114611ccc5760008415611cba578287015490505b611cc48582611c3c565b865550611d37565b601f198416611cda87611ab6565b9650611ce586611ab6565b60005b82811015611d0d57848901548255600182019150600185019450602081019050611ce8565b86831015611d2a5784890154611d26601f891682611c1e565b8355505b6001600288020188555050505b5050505050505b565b600082905092915050565b611d558383611d40565b67ffffffffffffffff811115611d6e57611d6d611a87565b5b611d788254611696565b611d83828285611bcb565b6000601f831160018114611db25760008415611da0578287013590505b611daa8582611c3c565b865550611e12565b601f198416611dc086611ab6565b60005b82811015611de857848901358255600182019150602085019450602081019050611dc3565b86831015611e055784890135611e01601f891682611c1e565b8355505b6001600288020188555050505b50505050505050565b60006060820190508181036000830152611e368186886117d4565b9050611e4560208301856111d0565b611e5260408301846111a6565b95945050505050565b7f4e6f20617661696c61626c6520776f726b6572207374616b6573000000000000600082015250565b6000611e91601a83611232565b9150611e9c82611e5b565b602082019050919050565b60006020820190508181036000830152611ec081611e84565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000611f018261111d565b9150611f0c8361111d565b925082611f1c57611f1b611ec7565b5b82820690509291505056fea264697066735822122095392d734918a8a61988b0f3ab9e926fa8b58c4ae69b87c0c25a151cb04642d364736f6c63430008180033", + "bytecode": "0x60a06040523480156200001157600080fd5b5060405162002407380380620024078339818101604052810190620000379190620000f4565b80808073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505050505062000126565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620000a8826200007b565b9050919050565b6000620000bc826200009b565b9050919050565b620000ce81620000af565b8114620000da57600080fd5b50565b600081519050620000ee81620000c3565b92915050565b6000602082840312156200010d576200010c62000076565b5b60006200011d84828501620000dd565b91505092915050565b6080516122b0620001576000396000818161021c015281816107c0015281816108aa01526109ec01526122b06000f3fe60806040526004361061007b5760003560e01c8063bfb231d21161004e578063bfb231d214610150578063c4a9e11614610191578063d5a44f86146101bc578063f85c5a8a146101fc5761007b565b8063216ed6ad1461008057806324364a6b146100bd5780632c6a2e83146100e85780636bfb0d0114610125575b600080fd5b34801561008c57600080fd5b506100a760048036038101906100a2919061122a565b610218565b6040516100b4919061128c565b60405180910390f35b3480156100c957600080fd5b506100d2610561565b6040516100df91906112b6565b60405180910390f35b3480156100f457600080fd5b5061010f600480360381019061010a919061138c565b610587565b60405161011c919061128c565b60405180910390f35b34801561013157600080fd5b5061013a610d28565b604051610147919061128c565b60405180910390f35b34801561015c57600080fd5b5061017760048036038101906101729190611421565b610d2e565b6040516101889594939291906114de565b60405180910390f35b34801561019d57600080fd5b506101a6610e2c565b6040516101b3919061128c565b60405180910390f35b3480156101c857600080fd5b506101e360048036038101906101de9190611421565b610e32565b6040516101f39493929190611553565b60405180910390f35b61021660048036038101906102119190611598565b610e8f565b005b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146102a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161029f9061167e565b60405180910390fd5b600083116102eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102e2906116ea565b60405180910390fd5b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000811480156103a057508473ffffffffffffffffffffffffffffffffffffffff1660008083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b1561040757600260008154809291906103b890611739565b91905055905080600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506104ab565b60008082815260200190815260200160002060030160009054906101000a900460ff1615610491576002600081548092919061044290611739565b91905055905080600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506104aa565b6000808281526020019081526020016000206001015491505b5b60008060008381526020019081526020016000209050858160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084816001018190555083426105199190611781565b81600201819055507fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e982604051610550919061128c565b60405180910390a150509392505050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461066f57600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461066e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161066590611827565b60405180910390fd5b5b6004548484905011156106b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ae90611893565b60405180910390fd5b60005b8484905081101561077857600360008281526020019081526020016000206004016040516106e891906119b6565b6040518091039020858583818110610703576107026119cd565b5b90506020028101906107159190611a0b565b604051610723929190611aa2565b60405180910390201461076b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161076290611b07565b60405180910390fd5b80806001019150506106ba565b50600080600090505b858590508110156107bd576003600082815260200190815260200160002060030154826107ae9190611781565b91508080600101915050610781565b507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639fbe7c7382898987604051806040016040528060018152602001600381525060405180604001604052806001815260200160028152506064600160006040518a63ffffffff1660e01b8152600401610855989796959493929190611c7b565b60206040518083038185885af1158015610873573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906108989190611d1e565b915060005b85859050811015610993577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663975762b3846003600085815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600360008681526020019081526020016000206002015460016040518563ffffffff1660e01b81526004016109549493929190611d4b565b600060405180830381600087803b15801561096e57600080fd5b505af1158015610982573d6000803e3d6000fd5b50505050808060010191505061089d565b50600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ab6577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663975762b383600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660008060065481526020019081526020016000206001015460016040518563ffffffff1660e01b8152600401610a839493929190611d4b565b600060405180830381600087803b158015610a9d57600080fd5b505af1158015610ab1573d6000803e3d6000fd5b505050505b600454858590501015610c365760005b85859050600454610ad79190611d90565b811015610c1957600360008288889050610af19190611781565b8152602001908152602001600020600360008381526020019081526020016000206000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600282015481600201556003820154816003015560048201816004019081610c089190611fab565b509050508080600101915050610ac6565b5084849050600454610c2b9190611d90565b600481905550610c3f565b60006004819055505b610c47610fd4565b600681905550600080600654815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f672ebfecd081c72b12452a84f8b6d051a1f32cda55cdf8992251279a5408b5a5600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051610d1691906112b6565b60405180910390a15095945050505050565b60045481565b60036020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806002015490806003015490806004018054610da9906118e2565b80601f0160208091040260200160405190810160405280929190818152602001828054610dd5906118e2565b8015610e225780601f10610df757610100808354040283529160200191610e22565b820191906000526020600020905b815481529060010190602001808311610e0557829003601f168201915b5050505050905085565b60025481565b60006020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030160009054906101000a900460ff16905084565b60006003600060046000815480929190610ea890611739565b9190505581526020019081526020016000209050338160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550848160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508381600201819055503481600301819055508282826004019182610f6792919061209e565b507ff67a2314f80fd951705a8cb64e24285516f2937f5e0db904aa6d29f3bae1d02783838360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168460030154604051610fc5949392919061216e565b60405180910390a15050505050565b6000610fde611017565b90506000806000838152602001908152602001600020905060018160030160006101000a81548160ff0219169083151502179055505090565b60008060005b60025481101561109b5760008082815260200190815260200160002060030160009054906101000a900460ff1661108e5760008082815260200190815260200160002060020154421161108e57600080828152602001908152602001600020600101548261108b9190611781565b91505b808060010191505061101d565b50600081116110df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d6906121fa565b60405180910390fd5b600081446110ed9190612249565b9050600080600090505b6002548110156111855760008082815260200190815260200160002060030160009054906101000a900460ff16611178576000808281526020019081526020016000206002015442116111785760008082815260200190815260200160002060010154826111659190611781565b91508282111561117757809450611185565b5b80806001019150506110f7565b5050505090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006111c182611196565b9050919050565b6111d1816111b6565b81146111dc57600080fd5b50565b6000813590506111ee816111c8565b92915050565b6000819050919050565b611207816111f4565b811461121257600080fd5b50565b600081359050611224816111fe565b92915050565b6000806000606084860312156112435761124261118c565b5b6000611251868287016111df565b935050602061126286828701611215565b925050604061127386828701611215565b9150509250925092565b611286816111f4565b82525050565b60006020820190506112a1600083018461127d565b92915050565b6112b0816111b6565b82525050565b60006020820190506112cb60008301846112a7565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126112f6576112f56112d1565b5b8235905067ffffffffffffffff811115611313576113126112d6565b5b60208301915083600182028301111561132f5761132e6112db565b5b9250929050565b60008083601f84011261134c5761134b6112d1565b5b8235905067ffffffffffffffff811115611369576113686112d6565b5b602083019150836020820283011115611385576113846112db565b5b9250929050565b6000806000806000606086880312156113a8576113a761118c565b5b600086013567ffffffffffffffff8111156113c6576113c5611191565b5b6113d2888289016112e0565b9550955050602086013567ffffffffffffffff8111156113f5576113f4611191565b5b61140188828901611336565b9350935050604061141488828901611215565b9150509295509295909350565b6000602082840312156114375761143661118c565b5b600061144584828501611215565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561148857808201518184015260208101905061146d565b60008484015250505050565b6000601f19601f8301169050919050565b60006114b08261144e565b6114ba8185611459565b93506114ca81856020860161146a565b6114d381611494565b840191505092915050565b600060a0820190506114f360008301886112a7565b61150060208301876112a7565b61150d604083018661127d565b61151a606083018561127d565b818103608083015261152c81846114a5565b90509695505050505050565b60008115159050919050565b61154d81611538565b82525050565b600060808201905061156860008301876112a7565b611575602083018661127d565b611582604083018561127d565b61158f6060830184611544565b95945050505050565b600080600080606085870312156115b2576115b161118c565b5b60006115c0878288016111df565b94505060206115d187828801611215565b935050604085013567ffffffffffffffff8111156115f2576115f1611191565b5b6115fe878288016112e0565b925092505092959194509250565b7f616363657074417661696c6162696c697479206d757374206f6e6c792062652060008201527f63616c6c65642062792044414f20636f6e747261637400000000000000000000602082015250565b6000611668603683611459565b91506116738261160c565b604082019050919050565b600060208201905081810360008301526116978161165b565b9050919050565b7f4e6f207374616b652070726f7669646564000000000000000000000000000000600082015250565b60006116d4601183611459565b91506116df8261169e565b602082019050919050565b60006020820190508181036000830152611703816116c7565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611744826111f4565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036117765761177561170a565b5b600182019050919050565b600061178c826111f4565b9150611797836111f4565b92508282019050808211156117af576117ae61170a565b5b92915050565b7f426174636820726573756c74206d757374206265207375626d6974746564206260008201527f792063757272656e7420626174636820776f726b657200000000000000000000602082015250565b6000611811603683611459565b915061181c826117b5565b604082019050919050565b6000602082019050818103600083015261184081611804565b9050919050565b7f42617463682073697a6520746f6f206c61726765000000000000000000000000600082015250565b600061187d601483611459565b915061188882611847565b602082019050919050565b600060208201905081810360008301526118ac81611870565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806118fa57607f821691505b60208210810361190d5761190c6118b3565b5b50919050565b600081905092915050565b60008190508160005260206000209050919050565b60008154611940816118e2565b61194a8186611913565b94506001821660008114611965576001811461197a576119ad565b60ff19831686528115158202860193506119ad565b6119838561191e565b60005b838110156119a557815481890152600182019150602081019050611986565b838801955050505b50505092915050565b60006119c28284611933565b915081905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600080fd5b600080fd5b600080fd5b60008083356001602003843603038112611a2857611a276119fc565b5b80840192508235915067ffffffffffffffff821115611a4a57611a49611a01565b5b602083019250600182023603831315611a6657611a65611a06565b5b509250929050565b82818337600083830152505050565b6000611a898385611913565b9350611a96838584611a6e565b82840190509392505050565b6000611aaf828486611a7d565b91508190509392505050565b7f4261746368206974656d206d69736d6174636800000000000000000000000000600082015250565b6000611af1601383611459565b9150611afc82611abb565b602082019050919050565b60006020820190508181036000830152611b2081611ae4565b9050919050565b6000611b338385611459565b9350611b40838584611a6e565b611b4983611494565b840190509392505050565b600060029050919050565b600081905092915050565b6000819050919050565b611b7d816111f4565b82525050565b6000611b8f8383611b74565b60208301905092915050565b6000602082019050919050565b611bb181611b54565b611bbb8184611b5f565b9250611bc682611b6a565b8060005b83811015611bf7578151611bde8782611b83565b9650611be983611b9b565b925050600181019050611bca565b505050505050565b6000819050919050565b6000819050919050565b6000611c2e611c29611c2484611bff565b611c09565b6111f4565b9050919050565b611c3e81611c13565b82525050565b600082825260208201905092915050565b50565b6000611c65600083611c44565b9150611c7082611c55565b600082019050919050565b6000610140820190508181036000830152611c97818a8c611b27565b9050611ca6602083018961127d565b611cb36040830188611ba8565b611cc06080830187611ba8565b611ccd60c0830186611c35565b611cda60e0830185611544565b611ce8610100830184611544565b818103610120830152611cfa81611c58565b90509998505050505050505050565b600081519050611d18816111fe565b92915050565b600060208284031215611d3457611d3361118c565b5b6000611d4284828501611d09565b91505092915050565b6000608082019050611d60600083018761127d565b611d6d60208301866112a7565b611d7a604083018561127d565b611d876060830184611544565b95945050505050565b6000611d9b826111f4565b9150611da6836111f4565b9250828203905081811115611dbe57611dbd61170a565b5b92915050565b600081549050611dd3816118e2565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302611e6b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82611e2e565b611e758683611e2e565b95508019841693508086168417925050509392505050565b6000611ea8611ea3611e9e846111f4565b611c09565b6111f4565b9050919050565b6000819050919050565b611ec283611e8d565b611ed6611ece82611eaf565b848454611e3b565b825550505050565b600090565b611eeb611ede565b611ef6818484611eb9565b505050565b5b81811015611f1a57611f0f600082611ee3565b600181019050611efc565b5050565b601f821115611f5f57611f3081611e09565b611f3984611e1e565b81016020851015611f48578190505b611f5c611f5485611e1e565b830182611efb565b50505b505050565b600082821c905092915050565b6000611f8260001984600802611f64565b1980831691505092915050565b6000611f9b8383611f71565b9150826002028217905092915050565b818103611fb9575050612091565b611fc282611dc4565b67ffffffffffffffff811115611fdb57611fda611dda565b5b611fe582546118e2565b611ff0828285611f1e565b6000601f83116001811461201f576000841561200d578287015490505b6120178582611f8f565b86555061208a565b601f19841661202d87611e09565b965061203886611e09565b60005b828110156120605784890154825560018201915060018501945060208101905061203b565b8683101561207d5784890154612079601f891682611f71565b8355505b6001600288020188555050505b5050505050505b565b600082905092915050565b6120a88383612093565b67ffffffffffffffff8111156120c1576120c0611dda565b5b6120cb82546118e2565b6120d6828285611f1e565b6000601f83116001811461210557600084156120f3578287013590505b6120fd8582611f8f565b865550612165565b601f19841661211386611e09565b60005b8281101561213b57848901358255600182019150602085019450602081019050612116565b868310156121585784890135612154601f891682611f71565b8355505b6001600288020188555050505b50505050505050565b60006060820190508181036000830152612189818688611b27565b905061219860208301856112a7565b6121a5604083018461127d565b95945050505050565b7f4e6f20617661696c61626c6520776f726b6572207374616b6573000000000000600082015250565b60006121e4601a83611459565b91506121ef826121ae565b602082019050919050565b60006020820190508181036000830152612213816121d7565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612254826111f4565b915061225f836111f4565b92508261226f5761226e61221a565b5b82820690509291505056fea2646970667358221220115a2824c33b295f7dc9f549eab70cbadd2c73f626a90b55c2592c40e01cc52364736f6c63430008180033", + "deployedBytecode": "0x60806040526004361061007b5760003560e01c8063bfb231d21161004e578063bfb231d214610150578063c4a9e11614610191578063d5a44f86146101bc578063f85c5a8a146101fc5761007b565b8063216ed6ad1461008057806324364a6b146100bd5780632c6a2e83146100e85780636bfb0d0114610125575b600080fd5b34801561008c57600080fd5b506100a760048036038101906100a2919061122a565b610218565b6040516100b4919061128c565b60405180910390f35b3480156100c957600080fd5b506100d2610561565b6040516100df91906112b6565b60405180910390f35b3480156100f457600080fd5b5061010f600480360381019061010a919061138c565b610587565b60405161011c919061128c565b60405180910390f35b34801561013157600080fd5b5061013a610d28565b604051610147919061128c565b60405180910390f35b34801561015c57600080fd5b5061017760048036038101906101729190611421565b610d2e565b6040516101889594939291906114de565b60405180910390f35b34801561019d57600080fd5b506101a6610e2c565b6040516101b3919061128c565b60405180910390f35b3480156101c857600080fd5b506101e360048036038101906101de9190611421565b610e32565b6040516101f39493929190611553565b60405180910390f35b61021660048036038101906102119190611598565b610e8f565b005b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146102a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161029f9061167e565b60405180910390fd5b600083116102eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102e2906116ea565b60405180910390fd5b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000811480156103a057508473ffffffffffffffffffffffffffffffffffffffff1660008083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b1561040757600260008154809291906103b890611739565b91905055905080600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506104ab565b60008082815260200190815260200160002060030160009054906101000a900460ff1615610491576002600081548092919061044290611739565b91905055905080600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506104aa565b6000808281526020019081526020016000206001015491505b5b60008060008381526020019081526020016000209050858160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084816001018190555083426105199190611781565b81600201819055507fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e982604051610550919061128c565b60405180910390a150509392505050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461066f57600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461066e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161066590611827565b60405180910390fd5b5b6004548484905011156106b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ae90611893565b60405180910390fd5b60005b8484905081101561077857600360008281526020019081526020016000206004016040516106e891906119b6565b6040518091039020858583818110610703576107026119cd565b5b90506020028101906107159190611a0b565b604051610723929190611aa2565b60405180910390201461076b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161076290611b07565b60405180910390fd5b80806001019150506106ba565b50600080600090505b858590508110156107bd576003600082815260200190815260200160002060030154826107ae9190611781565b91508080600101915050610781565b507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639fbe7c7382898987604051806040016040528060018152602001600381525060405180604001604052806001815260200160028152506064600160006040518a63ffffffff1660e01b8152600401610855989796959493929190611c7b565b60206040518083038185885af1158015610873573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906108989190611d1e565b915060005b85859050811015610993577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663975762b3846003600085815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600360008681526020019081526020016000206002015460016040518563ffffffff1660e01b81526004016109549493929190611d4b565b600060405180830381600087803b15801561096e57600080fd5b505af1158015610982573d6000803e3d6000fd5b50505050808060010191505061089d565b50600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ab6577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663975762b383600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660008060065481526020019081526020016000206001015460016040518563ffffffff1660e01b8152600401610a839493929190611d4b565b600060405180830381600087803b158015610a9d57600080fd5b505af1158015610ab1573d6000803e3d6000fd5b505050505b600454858590501015610c365760005b85859050600454610ad79190611d90565b811015610c1957600360008288889050610af19190611781565b8152602001908152602001600020600360008381526020019081526020016000206000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600282015481600201556003820154816003015560048201816004019081610c089190611fab565b509050508080600101915050610ac6565b5084849050600454610c2b9190611d90565b600481905550610c3f565b60006004819055505b610c47610fd4565b600681905550600080600654815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f672ebfecd081c72b12452a84f8b6d051a1f32cda55cdf8992251279a5408b5a5600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051610d1691906112b6565b60405180910390a15095945050505050565b60045481565b60036020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806002015490806003015490806004018054610da9906118e2565b80601f0160208091040260200160405190810160405280929190818152602001828054610dd5906118e2565b8015610e225780601f10610df757610100808354040283529160200191610e22565b820191906000526020600020905b815481529060010190602001808311610e0557829003601f168201915b5050505050905085565b60025481565b60006020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030160009054906101000a900460ff16905084565b60006003600060046000815480929190610ea890611739565b9190505581526020019081526020016000209050338160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550848160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508381600201819055503481600301819055508282826004019182610f6792919061209e565b507ff67a2314f80fd951705a8cb64e24285516f2937f5e0db904aa6d29f3bae1d02783838360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168460030154604051610fc5949392919061216e565b60405180910390a15050505050565b6000610fde611017565b90506000806000838152602001908152602001600020905060018160030160006101000a81548160ff0219169083151502179055505090565b60008060005b60025481101561109b5760008082815260200190815260200160002060030160009054906101000a900460ff1661108e5760008082815260200190815260200160002060020154421161108e57600080828152602001908152602001600020600101548261108b9190611781565b91505b808060010191505061101d565b50600081116110df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d6906121fa565b60405180910390fd5b600081446110ed9190612249565b9050600080600090505b6002548110156111855760008082815260200190815260200160002060030160009054906101000a900460ff16611178576000808281526020019081526020016000206002015442116111785760008082815260200190815260200160002060010154826111659190611781565b91508282111561117757809450611185565b5b80806001019150506110f7565b5050505090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006111c182611196565b9050919050565b6111d1816111b6565b81146111dc57600080fd5b50565b6000813590506111ee816111c8565b92915050565b6000819050919050565b611207816111f4565b811461121257600080fd5b50565b600081359050611224816111fe565b92915050565b6000806000606084860312156112435761124261118c565b5b6000611251868287016111df565b935050602061126286828701611215565b925050604061127386828701611215565b9150509250925092565b611286816111f4565b82525050565b60006020820190506112a1600083018461127d565b92915050565b6112b0816111b6565b82525050565b60006020820190506112cb60008301846112a7565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126112f6576112f56112d1565b5b8235905067ffffffffffffffff811115611313576113126112d6565b5b60208301915083600182028301111561132f5761132e6112db565b5b9250929050565b60008083601f84011261134c5761134b6112d1565b5b8235905067ffffffffffffffff811115611369576113686112d6565b5b602083019150836020820283011115611385576113846112db565b5b9250929050565b6000806000806000606086880312156113a8576113a761118c565b5b600086013567ffffffffffffffff8111156113c6576113c5611191565b5b6113d2888289016112e0565b9550955050602086013567ffffffffffffffff8111156113f5576113f4611191565b5b61140188828901611336565b9350935050604061141488828901611215565b9150509295509295909350565b6000602082840312156114375761143661118c565b5b600061144584828501611215565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561148857808201518184015260208101905061146d565b60008484015250505050565b6000601f19601f8301169050919050565b60006114b08261144e565b6114ba8185611459565b93506114ca81856020860161146a565b6114d381611494565b840191505092915050565b600060a0820190506114f360008301886112a7565b61150060208301876112a7565b61150d604083018661127d565b61151a606083018561127d565b818103608083015261152c81846114a5565b90509695505050505050565b60008115159050919050565b61154d81611538565b82525050565b600060808201905061156860008301876112a7565b611575602083018661127d565b611582604083018561127d565b61158f6060830184611544565b95945050505050565b600080600080606085870312156115b2576115b161118c565b5b60006115c0878288016111df565b94505060206115d187828801611215565b935050604085013567ffffffffffffffff8111156115f2576115f1611191565b5b6115fe878288016112e0565b925092505092959194509250565b7f616363657074417661696c6162696c697479206d757374206f6e6c792062652060008201527f63616c6c65642062792044414f20636f6e747261637400000000000000000000602082015250565b6000611668603683611459565b91506116738261160c565b604082019050919050565b600060208201905081810360008301526116978161165b565b9050919050565b7f4e6f207374616b652070726f7669646564000000000000000000000000000000600082015250565b60006116d4601183611459565b91506116df8261169e565b602082019050919050565b60006020820190508181036000830152611703816116c7565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611744826111f4565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036117765761177561170a565b5b600182019050919050565b600061178c826111f4565b9150611797836111f4565b92508282019050808211156117af576117ae61170a565b5b92915050565b7f426174636820726573756c74206d757374206265207375626d6974746564206260008201527f792063757272656e7420626174636820776f726b657200000000000000000000602082015250565b6000611811603683611459565b915061181c826117b5565b604082019050919050565b6000602082019050818103600083015261184081611804565b9050919050565b7f42617463682073697a6520746f6f206c61726765000000000000000000000000600082015250565b600061187d601483611459565b915061188882611847565b602082019050919050565b600060208201905081810360008301526118ac81611870565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806118fa57607f821691505b60208210810361190d5761190c6118b3565b5b50919050565b600081905092915050565b60008190508160005260206000209050919050565b60008154611940816118e2565b61194a8186611913565b94506001821660008114611965576001811461197a576119ad565b60ff19831686528115158202860193506119ad565b6119838561191e565b60005b838110156119a557815481890152600182019150602081019050611986565b838801955050505b50505092915050565b60006119c28284611933565b915081905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600080fd5b600080fd5b600080fd5b60008083356001602003843603038112611a2857611a276119fc565b5b80840192508235915067ffffffffffffffff821115611a4a57611a49611a01565b5b602083019250600182023603831315611a6657611a65611a06565b5b509250929050565b82818337600083830152505050565b6000611a898385611913565b9350611a96838584611a6e565b82840190509392505050565b6000611aaf828486611a7d565b91508190509392505050565b7f4261746368206974656d206d69736d6174636800000000000000000000000000600082015250565b6000611af1601383611459565b9150611afc82611abb565b602082019050919050565b60006020820190508181036000830152611b2081611ae4565b9050919050565b6000611b338385611459565b9350611b40838584611a6e565b611b4983611494565b840190509392505050565b600060029050919050565b600081905092915050565b6000819050919050565b611b7d816111f4565b82525050565b6000611b8f8383611b74565b60208301905092915050565b6000602082019050919050565b611bb181611b54565b611bbb8184611b5f565b9250611bc682611b6a565b8060005b83811015611bf7578151611bde8782611b83565b9650611be983611b9b565b925050600181019050611bca565b505050505050565b6000819050919050565b6000819050919050565b6000611c2e611c29611c2484611bff565b611c09565b6111f4565b9050919050565b611c3e81611c13565b82525050565b600082825260208201905092915050565b50565b6000611c65600083611c44565b9150611c7082611c55565b600082019050919050565b6000610140820190508181036000830152611c97818a8c611b27565b9050611ca6602083018961127d565b611cb36040830188611ba8565b611cc06080830187611ba8565b611ccd60c0830186611c35565b611cda60e0830185611544565b611ce8610100830184611544565b818103610120830152611cfa81611c58565b90509998505050505050505050565b600081519050611d18816111fe565b92915050565b600060208284031215611d3457611d3361118c565b5b6000611d4284828501611d09565b91505092915050565b6000608082019050611d60600083018761127d565b611d6d60208301866112a7565b611d7a604083018561127d565b611d876060830184611544565b95945050505050565b6000611d9b826111f4565b9150611da6836111f4565b9250828203905081811115611dbe57611dbd61170a565b5b92915050565b600081549050611dd3816118e2565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302611e6b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82611e2e565b611e758683611e2e565b95508019841693508086168417925050509392505050565b6000611ea8611ea3611e9e846111f4565b611c09565b6111f4565b9050919050565b6000819050919050565b611ec283611e8d565b611ed6611ece82611eaf565b848454611e3b565b825550505050565b600090565b611eeb611ede565b611ef6818484611eb9565b505050565b5b81811015611f1a57611f0f600082611ee3565b600181019050611efc565b5050565b601f821115611f5f57611f3081611e09565b611f3984611e1e565b81016020851015611f48578190505b611f5c611f5485611e1e565b830182611efb565b50505b505050565b600082821c905092915050565b6000611f8260001984600802611f64565b1980831691505092915050565b6000611f9b8383611f71565b9150826002028217905092915050565b818103611fb9575050612091565b611fc282611dc4565b67ffffffffffffffff811115611fdb57611fda611dda565b5b611fe582546118e2565b611ff0828285611f1e565b6000601f83116001811461201f576000841561200d578287015490505b6120178582611f8f565b86555061208a565b601f19841661202d87611e09565b965061203886611e09565b60005b828110156120605784890154825560018201915060018501945060208101905061203b565b8683101561207d5784890154612079601f891682611f71565b8355505b6001600288020188555050505b5050505050505b565b600082905092915050565b6120a88383612093565b67ffffffffffffffff8111156120c1576120c0611dda565b5b6120cb82546118e2565b6120d6828285611f1e565b6000601f83116001811461210557600084156120f3578287013590505b6120fd8582611f8f565b865550612165565b601f19841661211386611e09565b60005b8281101561213b57848901358255600182019150602085019450602081019050612116565b868310156121585784890135612154601f891682611f71565b8355505b6001600288020188555050505b50505050505050565b60006060820190508181036000830152612189818688611b27565b905061219860208301856112a7565b6121a5604083018461127d565b95945050505050565b7f4e6f20617661696c61626c6520776f726b6572207374616b6573000000000000600082015250565b60006121e4601a83611459565b91506121ef826121ae565b602082019050919050565b60006020820190508181036000830152612213816121d7565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612254826111f4565b915061225f836111f4565b92508261226f5761226e61221a565b5b82820690509291505056fea2646970667358221220115a2824c33b295f7dc9f549eab70cbadd2c73f626a90b55c2592c40e01cc52364736f6c63430008180033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/backend/contractArtifacts/Work2.json b/backend/contractArtifacts/Work2.json index ceacd40..7e8c724 100644 --- a/backend/contractArtifacts/Work2.json +++ b/backend/contractArtifacts/Work2.json @@ -432,8 +432,8 @@ "type": "function" } ], - "bytecode": "0x60c06040523480156200001157600080fd5b5060405162002cc738038062002cc7833981810160405281019062000037919062000246565b8383838383838282808073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505050508060048190555081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050508173ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250505050505050505050620002b8565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620001358262000108565b9050919050565b6000620001498262000128565b9050919050565b6200015b816200013c565b81146200016757600080fd5b50565b6000815190506200017b8162000150565b92915050565b60006200018e8262000128565b9050919050565b620001a08162000181565b8114620001ac57600080fd5b50565b600081519050620001c08162000195565b92915050565b6000620001d38262000128565b9050919050565b620001e581620001c6565b8114620001f157600080fd5b50565b6000815190506200020581620001da565b92915050565b6000819050919050565b62000220816200020b565b81146200022c57600080fd5b50565b600081519050620002408162000215565b92915050565b6000806000806080858703121562000263576200026262000103565b5b600062000273878288016200016a565b94505060206200028687828801620001af565b93505060406200029987828801620001f4565b9250506060620002ac878288016200022f565b91505092959194509250565b60805160a0516129d4620002f360003960008181610ca90152610d1f01526000818161046601528181610bb30152610c4801526129d46000f3fe6080604052600436106100c25760003560e01c806399ad6c561161007f578063cf37625611610059578063cf37625614610266578063d0fae95f146102a4578063d5a44f86146102cd578063d76b67941461030d576100c2565b806399ad6c56146101f4578063a035b1fe14610210578063c4a9e1161461023b576100c2565b80630d0271d6146100c7578063216ed6ad146100e35780635badbe4c14610120578063815a05721461014b57806381d12c5814610188578063854b6a4f146101cb575b600080fd5b6100e160048036038101906100dc919061144e565b610338565b005b3480156100ef57600080fd5b5061010a6004803603810190610105919061152f565b610462565b6040516101179190611591565b60405180910390f35b34801561012c57600080fd5b506101356107ab565b6040516101429190611591565b60405180910390f35b34801561015757600080fd5b50610172600480360381019061016d9190611602565b6107b1565b60405161017f9190611591565b60405180910390f35b34801561019457600080fd5b506101af60048036038101906101aa9190611676565b610830565b6040516101c297969594939291906117d4565b60405180910390f35b3480156101d757600080fd5b506101f260048036038101906101ed919061187d565b6109bc565b005b61020e600480360381019061020991906118df565b610de3565b005b34801561021c57600080fd5b50610225610f2c565b6040516102329190611591565b60405180910390f35b34801561024757600080fd5b50610250610f32565b60405161025d9190611591565b60405180910390f35b34801561027257600080fd5b5061028d60048036038101906102889190611676565b610f38565b60405161029b929190611953565b60405180910390f35b3480156102b057600080fd5b506102cb60048036038101906102c691906119d2565b610f5c565b005b3480156102d957600080fd5b506102f460048036038101906102ef9190611676565b611194565b6040516103049493929190611a67565b60405180910390f35b34801561031957600080fd5b506103226111f1565b60405161032f9190611591565b60405180910390f35b60045434101561037d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161037490611af8565b60405180910390fd5b60006008600081548092919061039290611b47565b9190505590506000600760008381526020019081526020016000209050338160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503481600101819055506104036111f7565b8160030181905550838382600401918261041e929190611dd5565b507fd9e7f38a71691fb1db2da17057c03d381a42a9925350883f10e8e5d0bca4a3b4828260030154604051610454929190611953565b60405180910390a150505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146104f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104e990611f17565b60405180910390fd5b60008311610535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161052c90611f83565b60405180910390fd5b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000811480156105ea57508473ffffffffffffffffffffffffffffffffffffffff1660008083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b15610651576002600081548092919061060290611b47565b91905055905080600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506106f5565b60008082815260200190815260200160002060030160009054906101000a900460ff16156106db576002600081548092919061068c90611b47565b91905055905080600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506106f4565b6000808281526020019081526020016000206001015491505b5b60008060008381526020019081526020016000209050858160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084816001018190555083426107639190611fa3565b81600201819055507fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e98260405161079a9190611591565b60405180910390a150509392505050565b60085481565b60008083838101906107c39190611676565b9050600060056000838152602001908152602001600020905080600001546004819055507f6a3843c02c26620842ae8496fd3afcb44b27463b3808e2ccdae4bcee5a2e3f208260045460405161081a929190611953565b60405180910390a1600092505050949350505050565b60076020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020160009054906101000a900460ff169080600301549080600401805461089890611bf8565b80601f01602080910402602001604051908101604052809291908181526020018280546108c490611bf8565b80156109115780601f106108e657610100808354040283529160200191610911565b820191906000526020600020905b8154815290600101906020018083116108f457829003601f168201915b50505050509080600501805461092690611bf8565b80601f016020809104026020016040519081016040528092919081815260200182805461095290611bf8565b801561099f5780601f106109745761010080835404028352916020019161099f565b820191906000526020600020905b81548152906001019060200180831161098257829003601f168201915b5050505050908060070160009054906101000a900460ff16905087565b6000600760008481526020019081526020016000209050600160038111156109e7576109e66116b2565b5b8160020160009054906101000a900460ff166003811115610a0b57610a0a6116b2565b5b14610a4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4290612023565b60405180910390fd5b600080600083600301548152602001908152602001600020905060028260020160006101000a81548160ff02191690836003811115610a8d57610a8c6116b2565b5b0217905550828260070160006101000a81548160ff0219169083151502179055507f470d2978e081461f6d144c091dfd83ec06e6011da0b03bd1c0121b7fb71370dc8484604051610adf929190612043565b60405180910390a16000600167ffffffffffffffff811115610b0457610b03611b9a565b5b604051908082528060200260200182016040528015610b3d57816020015b610b2a6113af565b815260200190600190039081610b225790505b5090506040518060400160405280620f424081526020018360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681525081600081518110610ba657610ba561206c565b5b60200260200101819052507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e5b4d8278285600501866006016040518463ffffffff1660e01b8152600401610c1493929190612409565b600060405180830381600087803b158015610c2e57600080fd5b505af1158015610c42573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635ffc70048360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000085600101546040518463ffffffff1660e01b8152600401610ceb93929190612455565b600060405180830381600087803b158015610d0557600080fd5b505af1158015610d19573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f85c5a8a84600101548460000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168560010154876005016040518563ffffffff1660e01b8152600401610daa9392919061248c565b6000604051808303818588803b158015610dc357600080fd5b505af1158015610dd7573d6000803e3d6000fd5b50505050505050505050565b600060066000815480929190610df890611b47565b9190505590506000600560008381526020019081526020016000209050858160000181905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cac152a434878787600188604051602001610e739190611591565b6040516020818303038152906040526040518763ffffffff1660e01b8152600401610ea2959493929190612574565b60206040518083038185885af1158015610ec0573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610ee591906125de565b81600101819055507f71eae802097e4e77c5345dee7f35d74ac0ae45eb5a456fdaed0de4d141fc5d8c82604051610f1c9190611591565b60405180910390a1505050505050565b60045481565b60025481565b60056020528060005260406000206000915090508060000154908060010154905082565b600060076000878152602001908152602001600020905060006003811115610f8757610f866116b2565b5b8160020160009054906101000a900460ff166003811115610fab57610faa6116b2565b5b14610feb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe290612657565b60405180910390fd5b60008060008360030154815260200190815260200160002090503373ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611097576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108e906126e9565b60405180910390fd5b60018260020160006101000a81548160ff021916908360038111156110bf576110be6116b2565b5b021790555085858360050191826110d7929190611dd5565b5060005b8484905081101561115357826006018585838181106110fd576110fc61206c565b5b905060200281019061110f9190612718565b9080600181540180825580915050600190039060005260206000209060020201600090919091909150818161114491906128c4565b505080806001019150506110db565b507ffaecd3b4db089bf25a48306100dd5fb2152e3887c7815b2b221dbb7da2f8e8dc876040516111839190611591565b60405180910390a150505050505050565b60006020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030160009054906101000a900460ff16905084565b60065481565b600061120161123a565b90506000806000838152602001908152602001600020905060018160030160006101000a81548160ff0219169083151502179055505090565b60008060005b6002548110156112be5760008082815260200190815260200160002060030160009054906101000a900460ff166112b1576000808281526020019081526020016000206002015442116112b15760008082815260200190815260200160002060010154826112ae9190611fa3565b91505b8080600101915050611240565b5060008111611302576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f99061291e565b60405180910390fd5b60008144611310919061296d565b9050600080600090505b6002548110156113a85760008082815260200190815260200160002060030160009054906101000a900460ff1661139b5760008082815260200190815260200160002060020154421161139b5760008082815260200190815260200160002060010154826113889190611fa3565b91508282111561139a578094506113a8565b5b808060010191505061131a565b5050505090565b604051806040016040528060008152602001600073ffffffffffffffffffffffffffffffffffffffff1681525090565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f84011261140e5761140d6113e9565b5b8235905067ffffffffffffffff81111561142b5761142a6113ee565b5b602083019150836001820283011115611447576114466113f3565b5b9250929050565b60008060208385031215611465576114646113df565b5b600083013567ffffffffffffffff811115611483576114826113e4565b5b61148f858286016113f8565b92509250509250929050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006114c68261149b565b9050919050565b6114d6816114bb565b81146114e157600080fd5b50565b6000813590506114f3816114cd565b92915050565b6000819050919050565b61150c816114f9565b811461151757600080fd5b50565b60008135905061152981611503565b92915050565b600080600060608486031215611548576115476113df565b5b6000611556868287016114e4565b93505060206115678682870161151a565b92505060406115788682870161151a565b9150509250925092565b61158b816114f9565b82525050565b60006020820190506115a66000830184611582565b92915050565b60008083601f8401126115c2576115c16113e9565b5b8235905067ffffffffffffffff8111156115df576115de6113ee565b5b6020830191508360018202830111156115fb576115fa6113f3565b5b9250929050565b6000806000806060858703121561161c5761161b6113df565b5b600061162a8782880161151a565b945050602061163b8782880161151a565b935050604085013567ffffffffffffffff81111561165c5761165b6113e4565b5b611668878288016115ac565b925092505092959194509250565b60006020828403121561168c5761168b6113df565b5b600061169a8482850161151a565b91505092915050565b6116ac816114bb565b82525050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600481106116f2576116f16116b2565b5b50565b6000819050611703826116e1565b919050565b6000611713826116f5565b9050919050565b61172381611708565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611763578082015181840152602081019050611748565b60008484015250505050565b6000601f19601f8301169050919050565b600061178b82611729565b6117958185611734565b93506117a5818560208601611745565b6117ae8161176f565b840191505092915050565b60008115159050919050565b6117ce816117b9565b82525050565b600060e0820190506117e9600083018a6116a3565b6117f66020830189611582565b611803604083018861171a565b6118106060830187611582565b81810360808301526118228186611780565b905081810360a08301526118368185611780565b905061184560c08301846117c5565b98975050505050505050565b61185a816117b9565b811461186557600080fd5b50565b60008135905061187781611851565b92915050565b60008060408385031215611894576118936113df565b5b60006118a28582860161151a565b92505060206118b385828601611868565b9150509250929050565b6000819050826020600302820111156118d9576118d86113f3565b5b92915050565b60008060008060a085870312156118f9576118f86113df565b5b60006119078782880161151a565b945050602085013567ffffffffffffffff811115611928576119276113e4565b5b611934878288016113f8565b93509350506040611947878288016118bd565b91505092959194509250565b60006040820190506119686000830185611582565b6119756020830184611582565b9392505050565b60008083601f840112611992576119916113e9565b5b8235905067ffffffffffffffff8111156119af576119ae6113ee565b5b6020830191508360208202830111156119cb576119ca6113f3565b5b9250929050565b6000806000806000606086880312156119ee576119ed6113df565b5b60006119fc8882890161151a565b955050602086013567ffffffffffffffff811115611a1d57611a1c6113e4565b5b611a29888289016113f8565b9450945050604086013567ffffffffffffffff811115611a4c57611a4b6113e4565b5b611a588882890161197c565b92509250509295509295909350565b6000608082019050611a7c60008301876116a3565b611a896020830186611582565b611a966040830185611582565b611aa360608301846117c5565b95945050505050565b7f496e73756666696369656e742066656500000000000000000000000000000000600082015250565b6000611ae2601083611734565b9150611aed82611aac565b602082019050919050565b60006020820190508181036000830152611b1181611ad5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611b52826114f9565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611b8457611b83611b18565b5b600182019050919050565b600082905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611c1057607f821691505b602082108103611c2357611c22611bc9565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302611c8b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82611c4e565b611c958683611c4e565b95508019841693508086168417925050509392505050565b6000819050919050565b6000611cd2611ccd611cc8846114f9565b611cad565b6114f9565b9050919050565b6000819050919050565b611cec83611cb7565b611d00611cf882611cd9565b848454611c5b565b825550505050565b600090565b611d15611d08565b611d20818484611ce3565b505050565b5b81811015611d4457611d39600082611d0d565b600181019050611d26565b5050565b601f821115611d8957611d5a81611c29565b611d6384611c3e565b81016020851015611d72578190505b611d86611d7e85611c3e565b830182611d25565b50505b505050565b600082821c905092915050565b6000611dac60001984600802611d8e565b1980831691505092915050565b6000611dc58383611d9b565b9150826002028217905092915050565b611ddf8383611b8f565b67ffffffffffffffff811115611df857611df7611b9a565b5b611e028254611bf8565b611e0d828285611d48565b6000601f831160018114611e3c5760008415611e2a578287013590505b611e348582611db9565b865550611e9c565b601f198416611e4a86611c29565b60005b82811015611e7257848901358255600182019150602085019450602081019050611e4d565b86831015611e8f5784890135611e8b601f891682611d9b565b8355505b6001600288020188555050505b50505050505050565b7f616363657074417661696c6162696c697479206d757374206f6e6c792062652060008201527f63616c6c65642062792044414f20636f6e747261637400000000000000000000602082015250565b6000611f01603683611734565b9150611f0c82611ea5565b604082019050919050565b60006020820190508181036000830152611f3081611ef4565b9050919050565b7f4e6f207374616b652070726f7669646564000000000000000000000000000000600082015250565b6000611f6d601183611734565b9150611f7882611f37565b602082019050919050565b60006020820190508181036000830152611f9c81611f60565b9050919050565b6000611fae826114f9565b9150611fb9836114f9565b9250828201905080821115611fd157611fd0611b18565b5b92915050565b7f537461747573206d7573742062652045766964656e63655375626d6974746564600082015250565b600061200d602083611734565b915061201882611fd7565b602082019050919050565b6000602082019050818103600083015261203c81612000565b9050919050565b60006040820190506120586000830185611582565b61206560208301846117c5565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6120d0816114f9565b82525050565b6120df816114bb565b82525050565b6040820160008201516120fb60008501826120c7565b50602082015161210e60208501826120d6565b50505050565b600061212083836120e5565b60408301905092915050565b6000602082019050919050565b60006121448261209b565b61214e81856120a6565b9350612159836120b7565b8060005b8381101561218a5781516121718882612114565b975061217c8361212c565b92505060018101905061215d565b5085935050505092915050565b600081546121a481611bf8565b6121ae8186611734565b945060018216600081146121c957600181146121df57612212565b60ff198316865281151560200286019350612212565b6121e885611c29565b60005b8381101561220a578154818901526001820191506020810190506121eb565b808801955050505b50505092915050565b600081549050919050565b600082825260208201905092915050565b60008190508160005260206000209050919050565b60008160001c9050919050565b6000819050919050565b60006122766122718361224c565b612259565b9050919050565b6000819050919050565b6122908161227d565b82525050565b600082825260208201905092915050565b600081546122b481611bf8565b6122be8186612296565b945060018216600081146122d957600181146122ef57612322565b60ff198316865281151560200286019350612322565b6122f885611c29565b60005b8381101561231a578154818901526001820191506020810190506122fb565b808801955050505b50505092915050565b600060408301600080840154905061234281612263565b61234f6000870182612287565b5060018401858303602087015261236683826122a7565b925050819250505092915050565b6000612380838361232b565b905092915050565b6000600282019050919050565b60006123a08261221b565b6123aa8185612226565b9350836020820285016123bc85612237565b8060005b858110156123f7578484038952816123d88582612374565b94506123e383612388565b925060208a019950506001810190506123c0565b50829750879550505050505092915050565b600060608201905081810360008301526124238186612139565b905081810360208301526124378185612197565b9050818103604083015261244b8184612395565b9050949350505050565b600060608201905061246a60008301866116a3565b61247760208301856116a3565b6124846040830184611582565b949350505050565b60006060820190506124a160008301866116a3565b6124ae6020830185611582565b81810360408301526124c08184612197565b9050949350505050565b82818337600083830152505050565b60006124e58385611734565b93506124f28385846124ca565b6124fb8361176f565b840190509392505050565b82818337505050565b61251b60608383612506565b5050565b600081519050919050565b600082825260208201905092915050565b60006125468261251f565b612550818561252a565b9350612560818560208601611745565b6125698161176f565b840191505092915050565b600060c082019050818103600083015261258f8187896124d9565b905061259e602083018661250f565b6125ab60808301856117c5565b81810360a08301526125bd818461253b565b90509695505050505050565b6000815190506125d881611503565b92915050565b6000602082840312156125f4576125f36113df565b5b6000612602848285016125c9565b91505092915050565b7f537461747573206d757374206265205265717565737465640000000000000000600082015250565b6000612641601883611734565b915061264c8261260b565b602082019050919050565b6000602082019050818103600083015261267081612634565b9050919050565b7f576f726b65722063616e206f6e6c79207375626d69742065766964656e63652060008201527f666f7220776f726b2074686579206172652061737369676e6564000000000000602082015250565b60006126d3603a83611734565b91506126de82612677565b604082019050919050565b60006020820190508181036000830152612702816126c6565b9050919050565b600080fd5b600080fd5b600080fd5b60008235600160400383360303811261273457612733612709565b5b80830191505092915050565b6127498161227d565b811461275457600080fd5b50565b6000813561276481612740565b80915050919050565b60008160001b9050919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6127a68461276d565b9350801983169250808416831791505092915050565b60006127d76127d26127cd8461227d565b611cad565b61227d565b9050919050565b6000819050919050565b6127f1826127bc565b6128046127fd826127de565b835461277a565b8255505050565b6000808335600160200384360303811261282857612827612709565b5b80840192508235915067ffffffffffffffff82111561284a5761284961270e565b5b60208301925060018202360383131561286657612865612713565b5b509250929050565b612879838383611dd5565b505050565b60008101600083018061289081612757565b905061289c81846127e8565b50505060018101602083016128b1818561280b565b6128bc81838661286e565b505050505050565b6128ce828261287e565b5050565b7f4e6f20617661696c61626c6520776f726b6572207374616b6573000000000000600082015250565b6000612908601a83611734565b9150612913826128d2565b602082019050919050565b60006020820190508181036000830152612937816128fb565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612978826114f9565b9150612983836114f9565b9250826129935761299261293e565b5b82820690509291505056fea2646970667358221220a122b09048867f0c0091111f882f1faeb3fef05b9432d6255addf03d4f2c8fb364736f6c63430008180033", - "deployedBytecode": "0x6080604052600436106100c25760003560e01c806399ad6c561161007f578063cf37625611610059578063cf37625614610266578063d0fae95f146102a4578063d5a44f86146102cd578063d76b67941461030d576100c2565b806399ad6c56146101f4578063a035b1fe14610210578063c4a9e1161461023b576100c2565b80630d0271d6146100c7578063216ed6ad146100e35780635badbe4c14610120578063815a05721461014b57806381d12c5814610188578063854b6a4f146101cb575b600080fd5b6100e160048036038101906100dc919061144e565b610338565b005b3480156100ef57600080fd5b5061010a6004803603810190610105919061152f565b610462565b6040516101179190611591565b60405180910390f35b34801561012c57600080fd5b506101356107ab565b6040516101429190611591565b60405180910390f35b34801561015757600080fd5b50610172600480360381019061016d9190611602565b6107b1565b60405161017f9190611591565b60405180910390f35b34801561019457600080fd5b506101af60048036038101906101aa9190611676565b610830565b6040516101c297969594939291906117d4565b60405180910390f35b3480156101d757600080fd5b506101f260048036038101906101ed919061187d565b6109bc565b005b61020e600480360381019061020991906118df565b610de3565b005b34801561021c57600080fd5b50610225610f2c565b6040516102329190611591565b60405180910390f35b34801561024757600080fd5b50610250610f32565b60405161025d9190611591565b60405180910390f35b34801561027257600080fd5b5061028d60048036038101906102889190611676565b610f38565b60405161029b929190611953565b60405180910390f35b3480156102b057600080fd5b506102cb60048036038101906102c691906119d2565b610f5c565b005b3480156102d957600080fd5b506102f460048036038101906102ef9190611676565b611194565b6040516103049493929190611a67565b60405180910390f35b34801561031957600080fd5b506103226111f1565b60405161032f9190611591565b60405180910390f35b60045434101561037d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161037490611af8565b60405180910390fd5b60006008600081548092919061039290611b47565b9190505590506000600760008381526020019081526020016000209050338160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503481600101819055506104036111f7565b8160030181905550838382600401918261041e929190611dd5565b507fd9e7f38a71691fb1db2da17057c03d381a42a9925350883f10e8e5d0bca4a3b4828260030154604051610454929190611953565b60405180910390a150505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146104f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104e990611f17565b60405180910390fd5b60008311610535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161052c90611f83565b60405180910390fd5b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000811480156105ea57508473ffffffffffffffffffffffffffffffffffffffff1660008083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b15610651576002600081548092919061060290611b47565b91905055905080600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506106f5565b60008082815260200190815260200160002060030160009054906101000a900460ff16156106db576002600081548092919061068c90611b47565b91905055905080600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506106f4565b6000808281526020019081526020016000206001015491505b5b60008060008381526020019081526020016000209050858160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084816001018190555083426107639190611fa3565b81600201819055507fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e98260405161079a9190611591565b60405180910390a150509392505050565b60085481565b60008083838101906107c39190611676565b9050600060056000838152602001908152602001600020905080600001546004819055507f6a3843c02c26620842ae8496fd3afcb44b27463b3808e2ccdae4bcee5a2e3f208260045460405161081a929190611953565b60405180910390a1600092505050949350505050565b60076020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020160009054906101000a900460ff169080600301549080600401805461089890611bf8565b80601f01602080910402602001604051908101604052809291908181526020018280546108c490611bf8565b80156109115780601f106108e657610100808354040283529160200191610911565b820191906000526020600020905b8154815290600101906020018083116108f457829003601f168201915b50505050509080600501805461092690611bf8565b80601f016020809104026020016040519081016040528092919081815260200182805461095290611bf8565b801561099f5780601f106109745761010080835404028352916020019161099f565b820191906000526020600020905b81548152906001019060200180831161098257829003601f168201915b5050505050908060070160009054906101000a900460ff16905087565b6000600760008481526020019081526020016000209050600160038111156109e7576109e66116b2565b5b8160020160009054906101000a900460ff166003811115610a0b57610a0a6116b2565b5b14610a4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4290612023565b60405180910390fd5b600080600083600301548152602001908152602001600020905060028260020160006101000a81548160ff02191690836003811115610a8d57610a8c6116b2565b5b0217905550828260070160006101000a81548160ff0219169083151502179055507f470d2978e081461f6d144c091dfd83ec06e6011da0b03bd1c0121b7fb71370dc8484604051610adf929190612043565b60405180910390a16000600167ffffffffffffffff811115610b0457610b03611b9a565b5b604051908082528060200260200182016040528015610b3d57816020015b610b2a6113af565b815260200190600190039081610b225790505b5090506040518060400160405280620f424081526020018360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681525081600081518110610ba657610ba561206c565b5b60200260200101819052507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e5b4d8278285600501866006016040518463ffffffff1660e01b8152600401610c1493929190612409565b600060405180830381600087803b158015610c2e57600080fd5b505af1158015610c42573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635ffc70048360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000085600101546040518463ffffffff1660e01b8152600401610ceb93929190612455565b600060405180830381600087803b158015610d0557600080fd5b505af1158015610d19573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f85c5a8a84600101548460000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168560010154876005016040518563ffffffff1660e01b8152600401610daa9392919061248c565b6000604051808303818588803b158015610dc357600080fd5b505af1158015610dd7573d6000803e3d6000fd5b50505050505050505050565b600060066000815480929190610df890611b47565b9190505590506000600560008381526020019081526020016000209050858160000181905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cac152a434878787600188604051602001610e739190611591565b6040516020818303038152906040526040518763ffffffff1660e01b8152600401610ea2959493929190612574565b60206040518083038185885af1158015610ec0573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610ee591906125de565b81600101819055507f71eae802097e4e77c5345dee7f35d74ac0ae45eb5a456fdaed0de4d141fc5d8c82604051610f1c9190611591565b60405180910390a1505050505050565b60045481565b60025481565b60056020528060005260406000206000915090508060000154908060010154905082565b600060076000878152602001908152602001600020905060006003811115610f8757610f866116b2565b5b8160020160009054906101000a900460ff166003811115610fab57610faa6116b2565b5b14610feb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe290612657565b60405180910390fd5b60008060008360030154815260200190815260200160002090503373ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611097576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108e906126e9565b60405180910390fd5b60018260020160006101000a81548160ff021916908360038111156110bf576110be6116b2565b5b021790555085858360050191826110d7929190611dd5565b5060005b8484905081101561115357826006018585838181106110fd576110fc61206c565b5b905060200281019061110f9190612718565b9080600181540180825580915050600190039060005260206000209060020201600090919091909150818161114491906128c4565b505080806001019150506110db565b507ffaecd3b4db089bf25a48306100dd5fb2152e3887c7815b2b221dbb7da2f8e8dc876040516111839190611591565b60405180910390a150505050505050565b60006020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030160009054906101000a900460ff16905084565b60065481565b600061120161123a565b90506000806000838152602001908152602001600020905060018160030160006101000a81548160ff0219169083151502179055505090565b60008060005b6002548110156112be5760008082815260200190815260200160002060030160009054906101000a900460ff166112b1576000808281526020019081526020016000206002015442116112b15760008082815260200190815260200160002060010154826112ae9190611fa3565b91505b8080600101915050611240565b5060008111611302576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f99061291e565b60405180910390fd5b60008144611310919061296d565b9050600080600090505b6002548110156113a85760008082815260200190815260200160002060030160009054906101000a900460ff1661139b5760008082815260200190815260200160002060020154421161139b5760008082815260200190815260200160002060010154826113889190611fa3565b91508282111561139a578094506113a8565b5b808060010191505061131a565b5050505090565b604051806040016040528060008152602001600073ffffffffffffffffffffffffffffffffffffffff1681525090565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f84011261140e5761140d6113e9565b5b8235905067ffffffffffffffff81111561142b5761142a6113ee565b5b602083019150836001820283011115611447576114466113f3565b5b9250929050565b60008060208385031215611465576114646113df565b5b600083013567ffffffffffffffff811115611483576114826113e4565b5b61148f858286016113f8565b92509250509250929050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006114c68261149b565b9050919050565b6114d6816114bb565b81146114e157600080fd5b50565b6000813590506114f3816114cd565b92915050565b6000819050919050565b61150c816114f9565b811461151757600080fd5b50565b60008135905061152981611503565b92915050565b600080600060608486031215611548576115476113df565b5b6000611556868287016114e4565b93505060206115678682870161151a565b92505060406115788682870161151a565b9150509250925092565b61158b816114f9565b82525050565b60006020820190506115a66000830184611582565b92915050565b60008083601f8401126115c2576115c16113e9565b5b8235905067ffffffffffffffff8111156115df576115de6113ee565b5b6020830191508360018202830111156115fb576115fa6113f3565b5b9250929050565b6000806000806060858703121561161c5761161b6113df565b5b600061162a8782880161151a565b945050602061163b8782880161151a565b935050604085013567ffffffffffffffff81111561165c5761165b6113e4565b5b611668878288016115ac565b925092505092959194509250565b60006020828403121561168c5761168b6113df565b5b600061169a8482850161151a565b91505092915050565b6116ac816114bb565b82525050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600481106116f2576116f16116b2565b5b50565b6000819050611703826116e1565b919050565b6000611713826116f5565b9050919050565b61172381611708565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611763578082015181840152602081019050611748565b60008484015250505050565b6000601f19601f8301169050919050565b600061178b82611729565b6117958185611734565b93506117a5818560208601611745565b6117ae8161176f565b840191505092915050565b60008115159050919050565b6117ce816117b9565b82525050565b600060e0820190506117e9600083018a6116a3565b6117f66020830189611582565b611803604083018861171a565b6118106060830187611582565b81810360808301526118228186611780565b905081810360a08301526118368185611780565b905061184560c08301846117c5565b98975050505050505050565b61185a816117b9565b811461186557600080fd5b50565b60008135905061187781611851565b92915050565b60008060408385031215611894576118936113df565b5b60006118a28582860161151a565b92505060206118b385828601611868565b9150509250929050565b6000819050826020600302820111156118d9576118d86113f3565b5b92915050565b60008060008060a085870312156118f9576118f86113df565b5b60006119078782880161151a565b945050602085013567ffffffffffffffff811115611928576119276113e4565b5b611934878288016113f8565b93509350506040611947878288016118bd565b91505092959194509250565b60006040820190506119686000830185611582565b6119756020830184611582565b9392505050565b60008083601f840112611992576119916113e9565b5b8235905067ffffffffffffffff8111156119af576119ae6113ee565b5b6020830191508360208202830111156119cb576119ca6113f3565b5b9250929050565b6000806000806000606086880312156119ee576119ed6113df565b5b60006119fc8882890161151a565b955050602086013567ffffffffffffffff811115611a1d57611a1c6113e4565b5b611a29888289016113f8565b9450945050604086013567ffffffffffffffff811115611a4c57611a4b6113e4565b5b611a588882890161197c565b92509250509295509295909350565b6000608082019050611a7c60008301876116a3565b611a896020830186611582565b611a966040830185611582565b611aa360608301846117c5565b95945050505050565b7f496e73756666696369656e742066656500000000000000000000000000000000600082015250565b6000611ae2601083611734565b9150611aed82611aac565b602082019050919050565b60006020820190508181036000830152611b1181611ad5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611b52826114f9565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611b8457611b83611b18565b5b600182019050919050565b600082905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611c1057607f821691505b602082108103611c2357611c22611bc9565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302611c8b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82611c4e565b611c958683611c4e565b95508019841693508086168417925050509392505050565b6000819050919050565b6000611cd2611ccd611cc8846114f9565b611cad565b6114f9565b9050919050565b6000819050919050565b611cec83611cb7565b611d00611cf882611cd9565b848454611c5b565b825550505050565b600090565b611d15611d08565b611d20818484611ce3565b505050565b5b81811015611d4457611d39600082611d0d565b600181019050611d26565b5050565b601f821115611d8957611d5a81611c29565b611d6384611c3e565b81016020851015611d72578190505b611d86611d7e85611c3e565b830182611d25565b50505b505050565b600082821c905092915050565b6000611dac60001984600802611d8e565b1980831691505092915050565b6000611dc58383611d9b565b9150826002028217905092915050565b611ddf8383611b8f565b67ffffffffffffffff811115611df857611df7611b9a565b5b611e028254611bf8565b611e0d828285611d48565b6000601f831160018114611e3c5760008415611e2a578287013590505b611e348582611db9565b865550611e9c565b601f198416611e4a86611c29565b60005b82811015611e7257848901358255600182019150602085019450602081019050611e4d565b86831015611e8f5784890135611e8b601f891682611d9b565b8355505b6001600288020188555050505b50505050505050565b7f616363657074417661696c6162696c697479206d757374206f6e6c792062652060008201527f63616c6c65642062792044414f20636f6e747261637400000000000000000000602082015250565b6000611f01603683611734565b9150611f0c82611ea5565b604082019050919050565b60006020820190508181036000830152611f3081611ef4565b9050919050565b7f4e6f207374616b652070726f7669646564000000000000000000000000000000600082015250565b6000611f6d601183611734565b9150611f7882611f37565b602082019050919050565b60006020820190508181036000830152611f9c81611f60565b9050919050565b6000611fae826114f9565b9150611fb9836114f9565b9250828201905080821115611fd157611fd0611b18565b5b92915050565b7f537461747573206d7573742062652045766964656e63655375626d6974746564600082015250565b600061200d602083611734565b915061201882611fd7565b602082019050919050565b6000602082019050818103600083015261203c81612000565b9050919050565b60006040820190506120586000830185611582565b61206560208301846117c5565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6120d0816114f9565b82525050565b6120df816114bb565b82525050565b6040820160008201516120fb60008501826120c7565b50602082015161210e60208501826120d6565b50505050565b600061212083836120e5565b60408301905092915050565b6000602082019050919050565b60006121448261209b565b61214e81856120a6565b9350612159836120b7565b8060005b8381101561218a5781516121718882612114565b975061217c8361212c565b92505060018101905061215d565b5085935050505092915050565b600081546121a481611bf8565b6121ae8186611734565b945060018216600081146121c957600181146121df57612212565b60ff198316865281151560200286019350612212565b6121e885611c29565b60005b8381101561220a578154818901526001820191506020810190506121eb565b808801955050505b50505092915050565b600081549050919050565b600082825260208201905092915050565b60008190508160005260206000209050919050565b60008160001c9050919050565b6000819050919050565b60006122766122718361224c565b612259565b9050919050565b6000819050919050565b6122908161227d565b82525050565b600082825260208201905092915050565b600081546122b481611bf8565b6122be8186612296565b945060018216600081146122d957600181146122ef57612322565b60ff198316865281151560200286019350612322565b6122f885611c29565b60005b8381101561231a578154818901526001820191506020810190506122fb565b808801955050505b50505092915050565b600060408301600080840154905061234281612263565b61234f6000870182612287565b5060018401858303602087015261236683826122a7565b925050819250505092915050565b6000612380838361232b565b905092915050565b6000600282019050919050565b60006123a08261221b565b6123aa8185612226565b9350836020820285016123bc85612237565b8060005b858110156123f7578484038952816123d88582612374565b94506123e383612388565b925060208a019950506001810190506123c0565b50829750879550505050505092915050565b600060608201905081810360008301526124238186612139565b905081810360208301526124378185612197565b9050818103604083015261244b8184612395565b9050949350505050565b600060608201905061246a60008301866116a3565b61247760208301856116a3565b6124846040830184611582565b949350505050565b60006060820190506124a160008301866116a3565b6124ae6020830185611582565b81810360408301526124c08184612197565b9050949350505050565b82818337600083830152505050565b60006124e58385611734565b93506124f28385846124ca565b6124fb8361176f565b840190509392505050565b82818337505050565b61251b60608383612506565b5050565b600081519050919050565b600082825260208201905092915050565b60006125468261251f565b612550818561252a565b9350612560818560208601611745565b6125698161176f565b840191505092915050565b600060c082019050818103600083015261258f8187896124d9565b905061259e602083018661250f565b6125ab60808301856117c5565b81810360a08301526125bd818461253b565b90509695505050505050565b6000815190506125d881611503565b92915050565b6000602082840312156125f4576125f36113df565b5b6000612602848285016125c9565b91505092915050565b7f537461747573206d757374206265205265717565737465640000000000000000600082015250565b6000612641601883611734565b915061264c8261260b565b602082019050919050565b6000602082019050818103600083015261267081612634565b9050919050565b7f576f726b65722063616e206f6e6c79207375626d69742065766964656e63652060008201527f666f7220776f726b2074686579206172652061737369676e6564000000000000602082015250565b60006126d3603a83611734565b91506126de82612677565b604082019050919050565b60006020820190508181036000830152612702816126c6565b9050919050565b600080fd5b600080fd5b600080fd5b60008235600160400383360303811261273457612733612709565b5b80830191505092915050565b6127498161227d565b811461275457600080fd5b50565b6000813561276481612740565b80915050919050565b60008160001b9050919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6127a68461276d565b9350801983169250808416831791505092915050565b60006127d76127d26127cd8461227d565b611cad565b61227d565b9050919050565b6000819050919050565b6127f1826127bc565b6128046127fd826127de565b835461277a565b8255505050565b6000808335600160200384360303811261282857612827612709565b5b80840192508235915067ffffffffffffffff82111561284a5761284961270e565b5b60208301925060018202360383131561286657612865612713565b5b509250929050565b612879838383611dd5565b505050565b60008101600083018061289081612757565b905061289c81846127e8565b50505060018101602083016128b1818561280b565b6128bc81838661286e565b505050505050565b6128ce828261287e565b5050565b7f4e6f20617661696c61626c6520776f726b6572207374616b6573000000000000600082015250565b6000612908601a83611734565b9150612913826128d2565b602082019050919050565b60006020820190508181036000830152612937816128fb565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612978826114f9565b9150612983836114f9565b9250826129935761299261293e565b5b82820690509291505056fea2646970667358221220a122b09048867f0c0091111f882f1faeb3fef05b9432d6255addf03d4f2c8fb364736f6c63430008180033", + "bytecode": "0x60c06040523480156200001157600080fd5b5060405162002cc738038062002cc7833981810160405281019062000037919062000246565b8383838383838282808073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505050508060048190555081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050508173ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250505050505050505050620002b8565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620001358262000108565b9050919050565b6000620001498262000128565b9050919050565b6200015b816200013c565b81146200016757600080fd5b50565b6000815190506200017b8162000150565b92915050565b60006200018e8262000128565b9050919050565b620001a08162000181565b8114620001ac57600080fd5b50565b600081519050620001c08162000195565b92915050565b6000620001d38262000128565b9050919050565b620001e581620001c6565b8114620001f157600080fd5b50565b6000815190506200020581620001da565b92915050565b6000819050919050565b62000220816200020b565b81146200022c57600080fd5b50565b600081519050620002408162000215565b92915050565b6000806000806080858703121562000263576200026262000103565b5b600062000273878288016200016a565b94505060206200028687828801620001af565b93505060406200029987828801620001f4565b9250506060620002ac878288016200022f565b91505092959194509250565b60805160a0516129d4620002f360003960008181610ca90152610d1f01526000818161046601528181610bb30152610c4801526129d46000f3fe6080604052600436106100c25760003560e01c806399ad6c561161007f578063cf37625611610059578063cf37625614610266578063d0fae95f146102a4578063d5a44f86146102cd578063d76b67941461030d576100c2565b806399ad6c56146101f4578063a035b1fe14610210578063c4a9e1161461023b576100c2565b80630d0271d6146100c7578063216ed6ad146100e35780635badbe4c14610120578063815a05721461014b57806381d12c5814610188578063854b6a4f146101cb575b600080fd5b6100e160048036038101906100dc919061144e565b610338565b005b3480156100ef57600080fd5b5061010a6004803603810190610105919061152f565b610462565b6040516101179190611591565b60405180910390f35b34801561012c57600080fd5b506101356107ab565b6040516101429190611591565b60405180910390f35b34801561015757600080fd5b50610172600480360381019061016d9190611602565b6107b1565b60405161017f9190611591565b60405180910390f35b34801561019457600080fd5b506101af60048036038101906101aa9190611676565b610830565b6040516101c297969594939291906117d4565b60405180910390f35b3480156101d757600080fd5b506101f260048036038101906101ed919061187d565b6109bc565b005b61020e600480360381019061020991906118df565b610de3565b005b34801561021c57600080fd5b50610225610f2c565b6040516102329190611591565b60405180910390f35b34801561024757600080fd5b50610250610f32565b60405161025d9190611591565b60405180910390f35b34801561027257600080fd5b5061028d60048036038101906102889190611676565b610f38565b60405161029b929190611953565b60405180910390f35b3480156102b057600080fd5b506102cb60048036038101906102c691906119d2565b610f5c565b005b3480156102d957600080fd5b506102f460048036038101906102ef9190611676565b611194565b6040516103049493929190611a67565b60405180910390f35b34801561031957600080fd5b506103226111f1565b60405161032f9190611591565b60405180910390f35b60045434101561037d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161037490611af8565b60405180910390fd5b60006008600081548092919061039290611b47565b9190505590506000600760008381526020019081526020016000209050338160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503481600101819055506104036111f7565b8160030181905550838382600401918261041e929190611dd5565b507fd9e7f38a71691fb1db2da17057c03d381a42a9925350883f10e8e5d0bca4a3b4828260030154604051610454929190611953565b60405180910390a150505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146104f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104e990611f17565b60405180910390fd5b60008311610535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161052c90611f83565b60405180910390fd5b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000811480156105ea57508473ffffffffffffffffffffffffffffffffffffffff1660008083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b15610651576002600081548092919061060290611b47565b91905055905080600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506106f5565b60008082815260200190815260200160002060030160009054906101000a900460ff16156106db576002600081548092919061068c90611b47565b91905055905080600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506106f4565b6000808281526020019081526020016000206001015491505b5b60008060008381526020019081526020016000209050858160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084816001018190555083426107639190611fa3565b81600201819055507fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e98260405161079a9190611591565b60405180910390a150509392505050565b60085481565b60008083838101906107c39190611676565b9050600060056000838152602001908152602001600020905080600001546004819055507f6a3843c02c26620842ae8496fd3afcb44b27463b3808e2ccdae4bcee5a2e3f208260045460405161081a929190611953565b60405180910390a1600092505050949350505050565b60076020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020160009054906101000a900460ff169080600301549080600401805461089890611bf8565b80601f01602080910402602001604051908101604052809291908181526020018280546108c490611bf8565b80156109115780601f106108e657610100808354040283529160200191610911565b820191906000526020600020905b8154815290600101906020018083116108f457829003601f168201915b50505050509080600501805461092690611bf8565b80601f016020809104026020016040519081016040528092919081815260200182805461095290611bf8565b801561099f5780601f106109745761010080835404028352916020019161099f565b820191906000526020600020905b81548152906001019060200180831161098257829003601f168201915b5050505050908060070160009054906101000a900460ff16905087565b6000600760008481526020019081526020016000209050600160038111156109e7576109e66116b2565b5b8160020160009054906101000a900460ff166003811115610a0b57610a0a6116b2565b5b14610a4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4290612023565b60405180910390fd5b600080600083600301548152602001908152602001600020905060028260020160006101000a81548160ff02191690836003811115610a8d57610a8c6116b2565b5b0217905550828260070160006101000a81548160ff0219169083151502179055507f470d2978e081461f6d144c091dfd83ec06e6011da0b03bd1c0121b7fb71370dc8484604051610adf929190612043565b60405180910390a16000600167ffffffffffffffff811115610b0457610b03611b9a565b5b604051908082528060200260200182016040528015610b3d57816020015b610b2a6113af565b815260200190600190039081610b225790505b5090506040518060400160405280620f424081526020018360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681525081600081518110610ba657610ba561206c565b5b60200260200101819052507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e5b4d8278285600501866006016040518463ffffffff1660e01b8152600401610c1493929190612409565b600060405180830381600087803b158015610c2e57600080fd5b505af1158015610c42573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635ffc70048360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000085600101546040518463ffffffff1660e01b8152600401610ceb93929190612455565b600060405180830381600087803b158015610d0557600080fd5b505af1158015610d19573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f85c5a8a84600101548460000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168560010154876005016040518563ffffffff1660e01b8152600401610daa9392919061248c565b6000604051808303818588803b158015610dc357600080fd5b505af1158015610dd7573d6000803e3d6000fd5b50505050505050505050565b600060066000815480929190610df890611b47565b9190505590506000600560008381526020019081526020016000209050858160000181905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cac152a434878787600188604051602001610e739190611591565b6040516020818303038152906040526040518763ffffffff1660e01b8152600401610ea2959493929190612574565b60206040518083038185885af1158015610ec0573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610ee591906125de565b81600101819055507f71eae802097e4e77c5345dee7f35d74ac0ae45eb5a456fdaed0de4d141fc5d8c82604051610f1c9190611591565b60405180910390a1505050505050565b60045481565b60025481565b60056020528060005260406000206000915090508060000154908060010154905082565b600060076000878152602001908152602001600020905060006003811115610f8757610f866116b2565b5b8160020160009054906101000a900460ff166003811115610fab57610faa6116b2565b5b14610feb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe290612657565b60405180910390fd5b60008060008360030154815260200190815260200160002090503373ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611097576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108e906126e9565b60405180910390fd5b60018260020160006101000a81548160ff021916908360038111156110bf576110be6116b2565b5b021790555085858360050191826110d7929190611dd5565b5060005b8484905081101561115357826006018585838181106110fd576110fc61206c565b5b905060200281019061110f9190612718565b9080600181540180825580915050600190039060005260206000209060020201600090919091909150818161114491906128c4565b505080806001019150506110db565b507ffaecd3b4db089bf25a48306100dd5fb2152e3887c7815b2b221dbb7da2f8e8dc876040516111839190611591565b60405180910390a150505050505050565b60006020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030160009054906101000a900460ff16905084565b60065481565b600061120161123a565b90506000806000838152602001908152602001600020905060018160030160006101000a81548160ff0219169083151502179055505090565b60008060005b6002548110156112be5760008082815260200190815260200160002060030160009054906101000a900460ff166112b1576000808281526020019081526020016000206002015442116112b15760008082815260200190815260200160002060010154826112ae9190611fa3565b91505b8080600101915050611240565b5060008111611302576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f99061291e565b60405180910390fd5b60008144611310919061296d565b9050600080600090505b6002548110156113a85760008082815260200190815260200160002060030160009054906101000a900460ff1661139b5760008082815260200190815260200160002060020154421161139b5760008082815260200190815260200160002060010154826113889190611fa3565b91508282111561139a578094506113a8565b5b808060010191505061131a565b5050505090565b604051806040016040528060008152602001600073ffffffffffffffffffffffffffffffffffffffff1681525090565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f84011261140e5761140d6113e9565b5b8235905067ffffffffffffffff81111561142b5761142a6113ee565b5b602083019150836001820283011115611447576114466113f3565b5b9250929050565b60008060208385031215611465576114646113df565b5b600083013567ffffffffffffffff811115611483576114826113e4565b5b61148f858286016113f8565b92509250509250929050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006114c68261149b565b9050919050565b6114d6816114bb565b81146114e157600080fd5b50565b6000813590506114f3816114cd565b92915050565b6000819050919050565b61150c816114f9565b811461151757600080fd5b50565b60008135905061152981611503565b92915050565b600080600060608486031215611548576115476113df565b5b6000611556868287016114e4565b93505060206115678682870161151a565b92505060406115788682870161151a565b9150509250925092565b61158b816114f9565b82525050565b60006020820190506115a66000830184611582565b92915050565b60008083601f8401126115c2576115c16113e9565b5b8235905067ffffffffffffffff8111156115df576115de6113ee565b5b6020830191508360018202830111156115fb576115fa6113f3565b5b9250929050565b6000806000806060858703121561161c5761161b6113df565b5b600061162a8782880161151a565b945050602061163b8782880161151a565b935050604085013567ffffffffffffffff81111561165c5761165b6113e4565b5b611668878288016115ac565b925092505092959194509250565b60006020828403121561168c5761168b6113df565b5b600061169a8482850161151a565b91505092915050565b6116ac816114bb565b82525050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600481106116f2576116f16116b2565b5b50565b6000819050611703826116e1565b919050565b6000611713826116f5565b9050919050565b61172381611708565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611763578082015181840152602081019050611748565b60008484015250505050565b6000601f19601f8301169050919050565b600061178b82611729565b6117958185611734565b93506117a5818560208601611745565b6117ae8161176f565b840191505092915050565b60008115159050919050565b6117ce816117b9565b82525050565b600060e0820190506117e9600083018a6116a3565b6117f66020830189611582565b611803604083018861171a565b6118106060830187611582565b81810360808301526118228186611780565b905081810360a08301526118368185611780565b905061184560c08301846117c5565b98975050505050505050565b61185a816117b9565b811461186557600080fd5b50565b60008135905061187781611851565b92915050565b60008060408385031215611894576118936113df565b5b60006118a28582860161151a565b92505060206118b385828601611868565b9150509250929050565b6000819050826020600302820111156118d9576118d86113f3565b5b92915050565b60008060008060a085870312156118f9576118f86113df565b5b60006119078782880161151a565b945050602085013567ffffffffffffffff811115611928576119276113e4565b5b611934878288016113f8565b93509350506040611947878288016118bd565b91505092959194509250565b60006040820190506119686000830185611582565b6119756020830184611582565b9392505050565b60008083601f840112611992576119916113e9565b5b8235905067ffffffffffffffff8111156119af576119ae6113ee565b5b6020830191508360208202830111156119cb576119ca6113f3565b5b9250929050565b6000806000806000606086880312156119ee576119ed6113df565b5b60006119fc8882890161151a565b955050602086013567ffffffffffffffff811115611a1d57611a1c6113e4565b5b611a29888289016113f8565b9450945050604086013567ffffffffffffffff811115611a4c57611a4b6113e4565b5b611a588882890161197c565b92509250509295509295909350565b6000608082019050611a7c60008301876116a3565b611a896020830186611582565b611a966040830185611582565b611aa360608301846117c5565b95945050505050565b7f496e73756666696369656e742066656500000000000000000000000000000000600082015250565b6000611ae2601083611734565b9150611aed82611aac565b602082019050919050565b60006020820190508181036000830152611b1181611ad5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611b52826114f9565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611b8457611b83611b18565b5b600182019050919050565b600082905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611c1057607f821691505b602082108103611c2357611c22611bc9565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302611c8b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82611c4e565b611c958683611c4e565b95508019841693508086168417925050509392505050565b6000819050919050565b6000611cd2611ccd611cc8846114f9565b611cad565b6114f9565b9050919050565b6000819050919050565b611cec83611cb7565b611d00611cf882611cd9565b848454611c5b565b825550505050565b600090565b611d15611d08565b611d20818484611ce3565b505050565b5b81811015611d4457611d39600082611d0d565b600181019050611d26565b5050565b601f821115611d8957611d5a81611c29565b611d6384611c3e565b81016020851015611d72578190505b611d86611d7e85611c3e565b830182611d25565b50505b505050565b600082821c905092915050565b6000611dac60001984600802611d8e565b1980831691505092915050565b6000611dc58383611d9b565b9150826002028217905092915050565b611ddf8383611b8f565b67ffffffffffffffff811115611df857611df7611b9a565b5b611e028254611bf8565b611e0d828285611d48565b6000601f831160018114611e3c5760008415611e2a578287013590505b611e348582611db9565b865550611e9c565b601f198416611e4a86611c29565b60005b82811015611e7257848901358255600182019150602085019450602081019050611e4d565b86831015611e8f5784890135611e8b601f891682611d9b565b8355505b6001600288020188555050505b50505050505050565b7f616363657074417661696c6162696c697479206d757374206f6e6c792062652060008201527f63616c6c65642062792044414f20636f6e747261637400000000000000000000602082015250565b6000611f01603683611734565b9150611f0c82611ea5565b604082019050919050565b60006020820190508181036000830152611f3081611ef4565b9050919050565b7f4e6f207374616b652070726f7669646564000000000000000000000000000000600082015250565b6000611f6d601183611734565b9150611f7882611f37565b602082019050919050565b60006020820190508181036000830152611f9c81611f60565b9050919050565b6000611fae826114f9565b9150611fb9836114f9565b9250828201905080821115611fd157611fd0611b18565b5b92915050565b7f537461747573206d7573742062652045766964656e63655375626d6974746564600082015250565b600061200d602083611734565b915061201882611fd7565b602082019050919050565b6000602082019050818103600083015261203c81612000565b9050919050565b60006040820190506120586000830185611582565b61206560208301846117c5565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6120d0816114f9565b82525050565b6120df816114bb565b82525050565b6040820160008201516120fb60008501826120c7565b50602082015161210e60208501826120d6565b50505050565b600061212083836120e5565b60408301905092915050565b6000602082019050919050565b60006121448261209b565b61214e81856120a6565b9350612159836120b7565b8060005b8381101561218a5781516121718882612114565b975061217c8361212c565b92505060018101905061215d565b5085935050505092915050565b600081546121a481611bf8565b6121ae8186611734565b945060018216600081146121c957600181146121df57612212565b60ff198316865281151560200286019350612212565b6121e885611c29565b60005b8381101561220a578154818901526001820191506020810190506121eb565b808801955050505b50505092915050565b600081549050919050565b600082825260208201905092915050565b60008190508160005260206000209050919050565b60008160001c9050919050565b6000819050919050565b60006122766122718361224c565b612259565b9050919050565b6000819050919050565b6122908161227d565b82525050565b600082825260208201905092915050565b600081546122b481611bf8565b6122be8186612296565b945060018216600081146122d957600181146122ef57612322565b60ff198316865281151560200286019350612322565b6122f885611c29565b60005b8381101561231a578154818901526001820191506020810190506122fb565b808801955050505b50505092915050565b600060408301600080840154905061234281612263565b61234f6000870182612287565b5060018401858303602087015261236683826122a7565b925050819250505092915050565b6000612380838361232b565b905092915050565b6000600282019050919050565b60006123a08261221b565b6123aa8185612226565b9350836020820285016123bc85612237565b8060005b858110156123f7578484038952816123d88582612374565b94506123e383612388565b925060208a019950506001810190506123c0565b50829750879550505050505092915050565b600060608201905081810360008301526124238186612139565b905081810360208301526124378185612197565b9050818103604083015261244b8184612395565b9050949350505050565b600060608201905061246a60008301866116a3565b61247760208301856116a3565b6124846040830184611582565b949350505050565b60006060820190506124a160008301866116a3565b6124ae6020830185611582565b81810360408301526124c08184612197565b9050949350505050565b82818337600083830152505050565b60006124e58385611734565b93506124f28385846124ca565b6124fb8361176f565b840190509392505050565b82818337505050565b61251b60608383612506565b5050565b600081519050919050565b600082825260208201905092915050565b60006125468261251f565b612550818561252a565b9350612560818560208601611745565b6125698161176f565b840191505092915050565b600060c082019050818103600083015261258f8187896124d9565b905061259e602083018661250f565b6125ab60808301856117c5565b81810360a08301526125bd818461253b565b90509695505050505050565b6000815190506125d881611503565b92915050565b6000602082840312156125f4576125f36113df565b5b6000612602848285016125c9565b91505092915050565b7f537461747573206d757374206265205265717565737465640000000000000000600082015250565b6000612641601883611734565b915061264c8261260b565b602082019050919050565b6000602082019050818103600083015261267081612634565b9050919050565b7f576f726b65722063616e206f6e6c79207375626d69742065766964656e63652060008201527f666f7220776f726b2074686579206172652061737369676e6564000000000000602082015250565b60006126d3603a83611734565b91506126de82612677565b604082019050919050565b60006020820190508181036000830152612702816126c6565b9050919050565b600080fd5b600080fd5b600080fd5b60008235600160400383360303811261273457612733612709565b5b80830191505092915050565b6127498161227d565b811461275457600080fd5b50565b6000813561276481612740565b80915050919050565b60008160001b9050919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6127a68461276d565b9350801983169250808416831791505092915050565b60006127d76127d26127cd8461227d565b611cad565b61227d565b9050919050565b6000819050919050565b6127f1826127bc565b6128046127fd826127de565b835461277a565b8255505050565b6000808335600160200384360303811261282857612827612709565b5b80840192508235915067ffffffffffffffff82111561284a5761284961270e565b5b60208301925060018202360383131561286657612865612713565b5b509250929050565b612879838383611dd5565b505050565b60008101600083018061289081612757565b905061289c81846127e8565b50505060018101602083016128b1818561280b565b6128bc81838661286e565b505050505050565b6128ce828261287e565b5050565b7f4e6f20617661696c61626c6520776f726b6572207374616b6573000000000000600082015250565b6000612908601a83611734565b9150612913826128d2565b602082019050919050565b60006020820190508181036000830152612937816128fb565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612978826114f9565b9150612983836114f9565b9250826129935761299261293e565b5b82820690509291505056fea26469706673582212205af2cc46dc16ad2b74a2b47dd271a3b16c7aeb616473bee47f25f4ed38ebb02664736f6c63430008180033", + "deployedBytecode": "0x6080604052600436106100c25760003560e01c806399ad6c561161007f578063cf37625611610059578063cf37625614610266578063d0fae95f146102a4578063d5a44f86146102cd578063d76b67941461030d576100c2565b806399ad6c56146101f4578063a035b1fe14610210578063c4a9e1161461023b576100c2565b80630d0271d6146100c7578063216ed6ad146100e35780635badbe4c14610120578063815a05721461014b57806381d12c5814610188578063854b6a4f146101cb575b600080fd5b6100e160048036038101906100dc919061144e565b610338565b005b3480156100ef57600080fd5b5061010a6004803603810190610105919061152f565b610462565b6040516101179190611591565b60405180910390f35b34801561012c57600080fd5b506101356107ab565b6040516101429190611591565b60405180910390f35b34801561015757600080fd5b50610172600480360381019061016d9190611602565b6107b1565b60405161017f9190611591565b60405180910390f35b34801561019457600080fd5b506101af60048036038101906101aa9190611676565b610830565b6040516101c297969594939291906117d4565b60405180910390f35b3480156101d757600080fd5b506101f260048036038101906101ed919061187d565b6109bc565b005b61020e600480360381019061020991906118df565b610de3565b005b34801561021c57600080fd5b50610225610f2c565b6040516102329190611591565b60405180910390f35b34801561024757600080fd5b50610250610f32565b60405161025d9190611591565b60405180910390f35b34801561027257600080fd5b5061028d60048036038101906102889190611676565b610f38565b60405161029b929190611953565b60405180910390f35b3480156102b057600080fd5b506102cb60048036038101906102c691906119d2565b610f5c565b005b3480156102d957600080fd5b506102f460048036038101906102ef9190611676565b611194565b6040516103049493929190611a67565b60405180910390f35b34801561031957600080fd5b506103226111f1565b60405161032f9190611591565b60405180910390f35b60045434101561037d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161037490611af8565b60405180910390fd5b60006008600081548092919061039290611b47565b9190505590506000600760008381526020019081526020016000209050338160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503481600101819055506104036111f7565b8160030181905550838382600401918261041e929190611dd5565b507fd9e7f38a71691fb1db2da17057c03d381a42a9925350883f10e8e5d0bca4a3b4828260030154604051610454929190611953565b60405180910390a150505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146104f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104e990611f17565b60405180910390fd5b60008311610535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161052c90611f83565b60405180910390fd5b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000811480156105ea57508473ffffffffffffffffffffffffffffffffffffffff1660008083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b15610651576002600081548092919061060290611b47565b91905055905080600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506106f5565b60008082815260200190815260200160002060030160009054906101000a900460ff16156106db576002600081548092919061068c90611b47565b91905055905080600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506106f4565b6000808281526020019081526020016000206001015491505b5b60008060008381526020019081526020016000209050858160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084816001018190555083426107639190611fa3565b81600201819055507fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e98260405161079a9190611591565b60405180910390a150509392505050565b60085481565b60008083838101906107c39190611676565b9050600060056000838152602001908152602001600020905080600001546004819055507f6a3843c02c26620842ae8496fd3afcb44b27463b3808e2ccdae4bcee5a2e3f208260045460405161081a929190611953565b60405180910390a1600092505050949350505050565b60076020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020160009054906101000a900460ff169080600301549080600401805461089890611bf8565b80601f01602080910402602001604051908101604052809291908181526020018280546108c490611bf8565b80156109115780601f106108e657610100808354040283529160200191610911565b820191906000526020600020905b8154815290600101906020018083116108f457829003601f168201915b50505050509080600501805461092690611bf8565b80601f016020809104026020016040519081016040528092919081815260200182805461095290611bf8565b801561099f5780601f106109745761010080835404028352916020019161099f565b820191906000526020600020905b81548152906001019060200180831161098257829003601f168201915b5050505050908060070160009054906101000a900460ff16905087565b6000600760008481526020019081526020016000209050600160038111156109e7576109e66116b2565b5b8160020160009054906101000a900460ff166003811115610a0b57610a0a6116b2565b5b14610a4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4290612023565b60405180910390fd5b600080600083600301548152602001908152602001600020905060028260020160006101000a81548160ff02191690836003811115610a8d57610a8c6116b2565b5b0217905550828260070160006101000a81548160ff0219169083151502179055507f470d2978e081461f6d144c091dfd83ec06e6011da0b03bd1c0121b7fb71370dc8484604051610adf929190612043565b60405180910390a16000600167ffffffffffffffff811115610b0457610b03611b9a565b5b604051908082528060200260200182016040528015610b3d57816020015b610b2a6113af565b815260200190600190039081610b225790505b5090506040518060400160405280620f424081526020018360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681525081600081518110610ba657610ba561206c565b5b60200260200101819052507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e5b4d8278285600501866006016040518463ffffffff1660e01b8152600401610c1493929190612409565b600060405180830381600087803b158015610c2e57600080fd5b505af1158015610c42573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635ffc70048360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000085600101546040518463ffffffff1660e01b8152600401610ceb93929190612455565b600060405180830381600087803b158015610d0557600080fd5b505af1158015610d19573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f85c5a8a84600101548460000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168560010154876005016040518563ffffffff1660e01b8152600401610daa9392919061248c565b6000604051808303818588803b158015610dc357600080fd5b505af1158015610dd7573d6000803e3d6000fd5b50505050505050505050565b600060066000815480929190610df890611b47565b9190505590506000600560008381526020019081526020016000209050858160000181905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cac152a434878787600188604051602001610e739190611591565b6040516020818303038152906040526040518763ffffffff1660e01b8152600401610ea2959493929190612574565b60206040518083038185885af1158015610ec0573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610ee591906125de565b81600101819055507f71eae802097e4e77c5345dee7f35d74ac0ae45eb5a456fdaed0de4d141fc5d8c82604051610f1c9190611591565b60405180910390a1505050505050565b60045481565b60025481565b60056020528060005260406000206000915090508060000154908060010154905082565b600060076000878152602001908152602001600020905060006003811115610f8757610f866116b2565b5b8160020160009054906101000a900460ff166003811115610fab57610faa6116b2565b5b14610feb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe290612657565b60405180910390fd5b60008060008360030154815260200190815260200160002090503373ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611097576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108e906126e9565b60405180910390fd5b60018260020160006101000a81548160ff021916908360038111156110bf576110be6116b2565b5b021790555085858360050191826110d7929190611dd5565b5060005b8484905081101561115357826006018585838181106110fd576110fc61206c565b5b905060200281019061110f9190612718565b9080600181540180825580915050600190039060005260206000209060020201600090919091909150818161114491906128c4565b505080806001019150506110db565b507ffaecd3b4db089bf25a48306100dd5fb2152e3887c7815b2b221dbb7da2f8e8dc876040516111839190611591565b60405180910390a150505050505050565b60006020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030160009054906101000a900460ff16905084565b60065481565b600061120161123a565b90506000806000838152602001908152602001600020905060018160030160006101000a81548160ff0219169083151502179055505090565b60008060005b6002548110156112be5760008082815260200190815260200160002060030160009054906101000a900460ff166112b1576000808281526020019081526020016000206002015442116112b15760008082815260200190815260200160002060010154826112ae9190611fa3565b91505b8080600101915050611240565b5060008111611302576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f99061291e565b60405180910390fd5b60008144611310919061296d565b9050600080600090505b6002548110156113a85760008082815260200190815260200160002060030160009054906101000a900460ff1661139b5760008082815260200190815260200160002060020154421161139b5760008082815260200190815260200160002060010154826113889190611fa3565b91508282111561139a578094506113a8565b5b808060010191505061131a565b5050505090565b604051806040016040528060008152602001600073ffffffffffffffffffffffffffffffffffffffff1681525090565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f84011261140e5761140d6113e9565b5b8235905067ffffffffffffffff81111561142b5761142a6113ee565b5b602083019150836001820283011115611447576114466113f3565b5b9250929050565b60008060208385031215611465576114646113df565b5b600083013567ffffffffffffffff811115611483576114826113e4565b5b61148f858286016113f8565b92509250509250929050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006114c68261149b565b9050919050565b6114d6816114bb565b81146114e157600080fd5b50565b6000813590506114f3816114cd565b92915050565b6000819050919050565b61150c816114f9565b811461151757600080fd5b50565b60008135905061152981611503565b92915050565b600080600060608486031215611548576115476113df565b5b6000611556868287016114e4565b93505060206115678682870161151a565b92505060406115788682870161151a565b9150509250925092565b61158b816114f9565b82525050565b60006020820190506115a66000830184611582565b92915050565b60008083601f8401126115c2576115c16113e9565b5b8235905067ffffffffffffffff8111156115df576115de6113ee565b5b6020830191508360018202830111156115fb576115fa6113f3565b5b9250929050565b6000806000806060858703121561161c5761161b6113df565b5b600061162a8782880161151a565b945050602061163b8782880161151a565b935050604085013567ffffffffffffffff81111561165c5761165b6113e4565b5b611668878288016115ac565b925092505092959194509250565b60006020828403121561168c5761168b6113df565b5b600061169a8482850161151a565b91505092915050565b6116ac816114bb565b82525050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600481106116f2576116f16116b2565b5b50565b6000819050611703826116e1565b919050565b6000611713826116f5565b9050919050565b61172381611708565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611763578082015181840152602081019050611748565b60008484015250505050565b6000601f19601f8301169050919050565b600061178b82611729565b6117958185611734565b93506117a5818560208601611745565b6117ae8161176f565b840191505092915050565b60008115159050919050565b6117ce816117b9565b82525050565b600060e0820190506117e9600083018a6116a3565b6117f66020830189611582565b611803604083018861171a565b6118106060830187611582565b81810360808301526118228186611780565b905081810360a08301526118368185611780565b905061184560c08301846117c5565b98975050505050505050565b61185a816117b9565b811461186557600080fd5b50565b60008135905061187781611851565b92915050565b60008060408385031215611894576118936113df565b5b60006118a28582860161151a565b92505060206118b385828601611868565b9150509250929050565b6000819050826020600302820111156118d9576118d86113f3565b5b92915050565b60008060008060a085870312156118f9576118f86113df565b5b60006119078782880161151a565b945050602085013567ffffffffffffffff811115611928576119276113e4565b5b611934878288016113f8565b93509350506040611947878288016118bd565b91505092959194509250565b60006040820190506119686000830185611582565b6119756020830184611582565b9392505050565b60008083601f840112611992576119916113e9565b5b8235905067ffffffffffffffff8111156119af576119ae6113ee565b5b6020830191508360208202830111156119cb576119ca6113f3565b5b9250929050565b6000806000806000606086880312156119ee576119ed6113df565b5b60006119fc8882890161151a565b955050602086013567ffffffffffffffff811115611a1d57611a1c6113e4565b5b611a29888289016113f8565b9450945050604086013567ffffffffffffffff811115611a4c57611a4b6113e4565b5b611a588882890161197c565b92509250509295509295909350565b6000608082019050611a7c60008301876116a3565b611a896020830186611582565b611a966040830185611582565b611aa360608301846117c5565b95945050505050565b7f496e73756666696369656e742066656500000000000000000000000000000000600082015250565b6000611ae2601083611734565b9150611aed82611aac565b602082019050919050565b60006020820190508181036000830152611b1181611ad5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611b52826114f9565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611b8457611b83611b18565b5b600182019050919050565b600082905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611c1057607f821691505b602082108103611c2357611c22611bc9565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302611c8b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82611c4e565b611c958683611c4e565b95508019841693508086168417925050509392505050565b6000819050919050565b6000611cd2611ccd611cc8846114f9565b611cad565b6114f9565b9050919050565b6000819050919050565b611cec83611cb7565b611d00611cf882611cd9565b848454611c5b565b825550505050565b600090565b611d15611d08565b611d20818484611ce3565b505050565b5b81811015611d4457611d39600082611d0d565b600181019050611d26565b5050565b601f821115611d8957611d5a81611c29565b611d6384611c3e565b81016020851015611d72578190505b611d86611d7e85611c3e565b830182611d25565b50505b505050565b600082821c905092915050565b6000611dac60001984600802611d8e565b1980831691505092915050565b6000611dc58383611d9b565b9150826002028217905092915050565b611ddf8383611b8f565b67ffffffffffffffff811115611df857611df7611b9a565b5b611e028254611bf8565b611e0d828285611d48565b6000601f831160018114611e3c5760008415611e2a578287013590505b611e348582611db9565b865550611e9c565b601f198416611e4a86611c29565b60005b82811015611e7257848901358255600182019150602085019450602081019050611e4d565b86831015611e8f5784890135611e8b601f891682611d9b565b8355505b6001600288020188555050505b50505050505050565b7f616363657074417661696c6162696c697479206d757374206f6e6c792062652060008201527f63616c6c65642062792044414f20636f6e747261637400000000000000000000602082015250565b6000611f01603683611734565b9150611f0c82611ea5565b604082019050919050565b60006020820190508181036000830152611f3081611ef4565b9050919050565b7f4e6f207374616b652070726f7669646564000000000000000000000000000000600082015250565b6000611f6d601183611734565b9150611f7882611f37565b602082019050919050565b60006020820190508181036000830152611f9c81611f60565b9050919050565b6000611fae826114f9565b9150611fb9836114f9565b9250828201905080821115611fd157611fd0611b18565b5b92915050565b7f537461747573206d7573742062652045766964656e63655375626d6974746564600082015250565b600061200d602083611734565b915061201882611fd7565b602082019050919050565b6000602082019050818103600083015261203c81612000565b9050919050565b60006040820190506120586000830185611582565b61206560208301846117c5565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6120d0816114f9565b82525050565b6120df816114bb565b82525050565b6040820160008201516120fb60008501826120c7565b50602082015161210e60208501826120d6565b50505050565b600061212083836120e5565b60408301905092915050565b6000602082019050919050565b60006121448261209b565b61214e81856120a6565b9350612159836120b7565b8060005b8381101561218a5781516121718882612114565b975061217c8361212c565b92505060018101905061215d565b5085935050505092915050565b600081546121a481611bf8565b6121ae8186611734565b945060018216600081146121c957600181146121df57612212565b60ff198316865281151560200286019350612212565b6121e885611c29565b60005b8381101561220a578154818901526001820191506020810190506121eb565b808801955050505b50505092915050565b600081549050919050565b600082825260208201905092915050565b60008190508160005260206000209050919050565b60008160001c9050919050565b6000819050919050565b60006122766122718361224c565b612259565b9050919050565b6000819050919050565b6122908161227d565b82525050565b600082825260208201905092915050565b600081546122b481611bf8565b6122be8186612296565b945060018216600081146122d957600181146122ef57612322565b60ff198316865281151560200286019350612322565b6122f885611c29565b60005b8381101561231a578154818901526001820191506020810190506122fb565b808801955050505b50505092915050565b600060408301600080840154905061234281612263565b61234f6000870182612287565b5060018401858303602087015261236683826122a7565b925050819250505092915050565b6000612380838361232b565b905092915050565b6000600282019050919050565b60006123a08261221b565b6123aa8185612226565b9350836020820285016123bc85612237565b8060005b858110156123f7578484038952816123d88582612374565b94506123e383612388565b925060208a019950506001810190506123c0565b50829750879550505050505092915050565b600060608201905081810360008301526124238186612139565b905081810360208301526124378185612197565b9050818103604083015261244b8184612395565b9050949350505050565b600060608201905061246a60008301866116a3565b61247760208301856116a3565b6124846040830184611582565b949350505050565b60006060820190506124a160008301866116a3565b6124ae6020830185611582565b81810360408301526124c08184612197565b9050949350505050565b82818337600083830152505050565b60006124e58385611734565b93506124f28385846124ca565b6124fb8361176f565b840190509392505050565b82818337505050565b61251b60608383612506565b5050565b600081519050919050565b600082825260208201905092915050565b60006125468261251f565b612550818561252a565b9350612560818560208601611745565b6125698161176f565b840191505092915050565b600060c082019050818103600083015261258f8187896124d9565b905061259e602083018661250f565b6125ab60808301856117c5565b81810360a08301526125bd818461253b565b90509695505050505050565b6000815190506125d881611503565b92915050565b6000602082840312156125f4576125f36113df565b5b6000612602848285016125c9565b91505092915050565b7f537461747573206d757374206265205265717565737465640000000000000000600082015250565b6000612641601883611734565b915061264c8261260b565b602082019050919050565b6000602082019050818103600083015261267081612634565b9050919050565b7f576f726b65722063616e206f6e6c79207375626d69742065766964656e63652060008201527f666f7220776f726b2074686579206172652061737369676e6564000000000000602082015250565b60006126d3603a83611734565b91506126de82612677565b604082019050919050565b60006020820190508181036000830152612702816126c6565b9050919050565b600080fd5b600080fd5b600080fd5b60008235600160400383360303811261273457612733612709565b5b80830191505092915050565b6127498161227d565b811461275457600080fd5b50565b6000813561276481612740565b80915050919050565b60008160001b9050919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6127a68461276d565b9350801983169250808416831791505092915050565b60006127d76127d26127cd8461227d565b611cad565b61227d565b9050919050565b6000819050919050565b6127f1826127bc565b6128046127fd826127de565b835461277a565b8255505050565b6000808335600160200384360303811261282857612827612709565b5b80840192508235915067ffffffffffffffff82111561284a5761284961270e565b5b60208301925060018202360383131561286657612865612713565b5b509250929050565b612879838383611dd5565b505050565b60008101600083018061289081612757565b905061289c81846127e8565b50505060018101602083016128b1818561280b565b6128bc81838661286e565b505050505050565b6128ce828261287e565b5050565b7f4e6f20617661696c61626c6520776f726b6572207374616b6573000000000000600082015250565b6000612908601a83611734565b9150612913826128d2565b602082019050919050565b60006020820190508181036000830152612937816128fb565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612978826114f9565b9150612983836114f9565b9250826129935761299261293e565b5b82820690509291505056fea26469706673582212205af2cc46dc16ad2b74a2b47dd271a3b16c7aeb616473bee47f25f4ed38ebb02664736f6c63430008180033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/backend/src/event-handlers/bot-commands.js b/backend/src/event-handlers/bot-commands.js index 4819883..9794d28 100644 --- a/backend/src/event-handlers/bot-commands.js +++ b/backend/src/event-handlers/bot-commands.js @@ -5,8 +5,9 @@ const { appState, proposalEventIds, } = require('../util/db'); -const { submitRollup } = require('./rollup'); +const submitRollup = require('./rollup/submit-rollup'); const { resetBatchItems } = require('./rollup/batch-items'); +const { initiateMatrixPools } = require('./rollup/matrix-pools/initiate-matrix-pools'); const { BOT_INSTANCE_ID, @@ -71,6 +72,7 @@ const handleCommand = async (client, roomId, event) => { if (instanceId === BOT_INSTANCE_ID) { console.log('!resetBatch'); const batchItems = await resetBatchItems(); + await initiateMatrixPools(); await client.replyText(roomId, event, `Reset batch, now contains ${batchItems.length} items`); } } diff --git a/backend/src/event-handlers/rollup/batch-items.js b/backend/src/event-handlers/rollup/batch-items.js index 25e1a79..71f1253 100644 --- a/backend/src/event-handlers/rollup/batch-items.js +++ b/backend/src/event-handlers/rollup/batch-items.js @@ -1,7 +1,4 @@ -const { rollup } = require('../../util/contracts'); -const { applicationData, matrixPools } = require('../../util/db'); -const read = require('../../util/forum/read'); -const { initiateMatrixPool } = require('./matrix-pools/initiate'); +const { applicationData } = require('../../util/db'); let batchItems; @@ -16,8 +13,10 @@ const initializeBatchItems = async () => { const getBatchItems = () => batchItems; const addBatchItem = async (postId) => { - batchItems.push(postId); - await applicationData.put('batchItems', batchItems); + if (!batchItems.includes(postId)) { + batchItems.push(postId); + await applicationData.put('batchItems', batchItems); + } }; const clearBatchItems = async (itemsToClear) => { @@ -27,32 +26,7 @@ const clearBatchItems = async (itemsToClear) => { const resetBatchItems = async () => { batchItems = []; - // Read from Rollup.items - const itemCount = await rollup.itemCount(); - const promises = []; - for (let i = 0; i < itemCount; i += 1) { - promises.push(rollup.items(i)); - } - const batchItemsInfo = await Promise.all(promises); - batchItems = batchItemsInfo.map((x) => x.postId); await applicationData.put('batchItems', batchItems); - - // Make sure there's a matrix pool for each batch item. - // If there's not, then let's start one. - await Promise.each(batchItemsInfo, async ({ postId, sender, fee }) => { - let post; - try { - post = await read(postId); - } catch (e) { - console.error(`Post ID ${postId} not found`); - return; - } - try { - await matrixPools.get(postId); - } catch (e) { - await initiateMatrixPool(postId, post, sender, fee); - } - }); return batchItems; }; diff --git a/backend/src/event-handlers/rollup/compute-author-weights.js b/backend/src/event-handlers/rollup/compute-author-weights.js index 0d8b992..8bc5f2e 100644 --- a/backend/src/event-handlers/rollup/compute-author-weights.js +++ b/backend/src/event-handlers/rollup/compute-author-weights.js @@ -1,3 +1,4 @@ +const Promise = require('bluebird'); const read = require('../../util/forum/read'); const { matrixPools } = require('../../util/db'); diff --git a/backend/src/event-handlers/rollup/index.js b/backend/src/event-handlers/rollup/index.js index 1557271..5c2023a 100644 --- a/backend/src/event-handlers/rollup/index.js +++ b/backend/src/event-handlers/rollup/index.js @@ -1,7 +1,7 @@ const { isEqual } = require('lodash'); const { registerDecider } = require('../validation-pools'); -const { registerMatrixEventHandler, sendMatrixText } = require('../../matrix-bot'); +const { registerMatrixEventHandler, sendMatrixText, sendMatrixEvent } = require('../../matrix-bot'); const { matrixPools, matrixUserToAuthorAddress, applicationData } = require('../../util/db'); const { rollup, wallet, @@ -9,12 +9,14 @@ const { const read = require('../../util/forum/read'); const { availabilityStakeDuration } = require('./config'); const { - stakeRollupAvailability, getBatchPostAuthorWeights, authorsMatch, validatePost, + stakeRollupAvailability, authorsMatch, validatePost, } = require('./utils'); -const computeMatrixPoolResult = require('./compute-matrix-pool-result'); +const computeMatrixPoolResult = require('./matrix-pools/compute-result'); const { initializeBatchItems } = require('./batch-items'); const { getCurrentBatchWorker, initializeBatchWorker } = require('./batch-worker'); -const { initiateMatrixPool } = require('./matrix-pools/initiate'); +const initiateMatrixPool = require('./matrix-pools/initiate'); +const { initiateMatrixPools } = require('./matrix-pools/initiate-matrix-pools'); +const computeAuthorWeights = require('./compute-author-weights'); let batchItems; @@ -32,7 +34,7 @@ const start = async () => { // Our task here is to check whether the posted result agrees with our own computations let expectedAuthors; try { - expectedAuthors = await getBatchPostAuthorWeights(post.embeddedData.batchItems); + expectedAuthors = await computeAuthorWeights(post.embeddedData.batchItems); } catch (e) { console.error('Error calculating batch post author weights', e); return null; @@ -52,6 +54,9 @@ const start = async () => { await stakeRollupAvailability(); setInterval(stakeRollupAvailability, availabilityStakeDuration * 1000); + // Initiate any matrix pools that haven't already occurred + await initiateMatrixPools(); + /// `sender` is the address that called Rollup.addItem on chain, i.e. the Work2 contract. rollup.on('BatchItemAdded', async (postId, sender, fee) => { // If we are the batch worker or there is no batch worker, initiate a matrix pool @@ -98,9 +103,17 @@ const start = async () => { console.error(`Post ID ${postId} not found`); break; } - await validatePost({ - sender, post, postId, roomId, eventId, ...params, - }); + // Register our own stake and send a message + const { amount, inFavor } = await validatePost(sender, post); + sendMatrixEvent('io.dgov.pool.stake', { postId, amount, inFavor }); + const matrixPool = { + postId, + roomId, + eventId, + ...params, + stakes: [{ amount, inFavor, account: await wallet.getAddress() }], + }; + await matrixPools.put(postId, matrixPool); break; } case 'io.dgov.pool.stake': { @@ -165,7 +178,7 @@ const start = async () => { batchPostIds.push(batchPostId); await applicationData.put('batchPostIds', batchPostIds); // Compare batch worker's result with ours to verify - const expectedAuthors = await getBatchPostAuthorWeights(batchItems_); + const expectedAuthors = await computeAuthorWeights(batchItems_); if (!authorsMatch(authors, expectedAuthors)) { sendMatrixText(`Unexpected result for batch post ${batchPostId}`); } diff --git a/backend/src/event-handlers/rollup/compute-matrix-pool-result.js b/backend/src/event-handlers/rollup/matrix-pools/compute-result.js similarity index 95% rename from backend/src/event-handlers/rollup/compute-matrix-pool-result.js rename to backend/src/event-handlers/rollup/matrix-pools/compute-result.js index f838ed4..9b443a9 100644 --- a/backend/src/event-handlers/rollup/compute-matrix-pool-result.js +++ b/backend/src/event-handlers/rollup/matrix-pools/compute-result.js @@ -1,6 +1,6 @@ const { dao, -} = require('../../util/contracts'); +} = require('../../../util/contracts'); const computeMatrixPoolResult = async (matrixPool) => { // This should already contain all the info we need to evaluate the outcome diff --git a/backend/src/event-handlers/rollup/matrix-pools/evaluate.js b/backend/src/event-handlers/rollup/matrix-pools/evaluate.js index b421f16..8b85635 100644 --- a/backend/src/event-handlers/rollup/matrix-pools/evaluate.js +++ b/backend/src/event-handlers/rollup/matrix-pools/evaluate.js @@ -3,7 +3,7 @@ const { wallet } = require('../../../util/contracts'); const { matrixPools } = require('../../../util/db'); const { addBatchItem, getBatchItems } = require('../batch-items'); const { getCurrentBatchWorker } = require('../batch-worker'); -const computeMatrixPoolResult = require('../compute-matrix-pool-result'); +const computeMatrixPoolResult = require('./compute-result'); const { rollupBatchSize } = require('../config'); const submitRollup = require('../submit-rollup'); const { stakeRollupAvailability } = require('../utils'); diff --git a/backend/src/event-handlers/rollup/matrix-pools/initiate-matrix-pools.js b/backend/src/event-handlers/rollup/matrix-pools/initiate-matrix-pools.js new file mode 100644 index 0000000..8876813 --- /dev/null +++ b/backend/src/event-handlers/rollup/matrix-pools/initiate-matrix-pools.js @@ -0,0 +1,45 @@ +const Promise = require('bluebird'); +const { rollup } = require('../../../util/contracts'); +const { matrixPools } = require('../../../util/db'); +const read = require('../../../util/forum/read'); +const initiateMatrixPool = require('./initiate'); +const { addBatchItem, getBatchItems } = require('../batch-items'); + +const fetchBatchItemsInfo = async () => { + // Read from Rollup.items + const itemCount = await rollup.itemCount(); + const promises = []; + for (let i = 0; i < itemCount; i += 1) { + promises.push(rollup.items(i)); + } + return Promise.all(promises); +}; + +const initiateMatrixPools = async () => { + const batchItemsInfo = await fetchBatchItemsInfo(); + // Make sure there's a matrix pool for each batch item. + // If there's not, then let's start one. + await Promise.each(batchItemsInfo, async ({ postId, sender, fee }) => { + let post; + try { + post = await read(postId); + } catch (e) { + console.error(`Post ID ${postId} not found`); + return; + } + try { + const matrixPool = await matrixPools.get(postId); + if (matrixPool.result) { + await addBatchItem(postId); + } + } catch (e) { + // TODO: It's possible we missed messages about pools that have already occurred. + await initiateMatrixPool(postId, post, sender, fee); + } + }); + console.log('batch items count:', getBatchItems().length); +}; + +module.exports = { + initiateMatrixPools, +}; diff --git a/backend/src/event-handlers/rollup/matrix-pools/initiate.js b/backend/src/event-handlers/rollup/matrix-pools/initiate.js index cb0965a..4c4eb1c 100644 --- a/backend/src/event-handlers/rollup/matrix-pools/initiate.js +++ b/backend/src/event-handlers/rollup/matrix-pools/initiate.js @@ -1,6 +1,8 @@ const { sendMatrixEvent } = require('../../../matrix-bot'); const { validatePost } = require('../utils'); const evaluateMatrixPoolOutcome = require('./evaluate'); +const { matrixPools } = require('../../../util/db'); +const { wallet } = require('../../../util/contracts'); const initiateMatrixPool = async (postId, post, sender, fee) => { const duration = 20; @@ -21,9 +23,16 @@ const initiateMatrixPool = async (postId, post, sender, fee) => { }); console.log('sent matrix pool start event'); // Register our own stake and send a message - await validatePost({ - sender, post, postId, roomId, eventId, ...params, - }); + const { amount, inFavor } = await validatePost(sender, post); + sendMatrixEvent('io.dgov.pool.stake', { postId, amount, inFavor }); + const matrixPool = { + postId, + roomId, + eventId, + ...params, + stakes: [{ amount, inFavor, account: await wallet.getAddress() }], + }; + await matrixPools.put(postId, matrixPool); // Since we're assuming responsibility as the batch worker, // set a timeout to evaulate the outcome @@ -35,6 +44,4 @@ const initiateMatrixPool = async (postId, post, sender, fee) => { ); }; -module.exports = { - initiateMatrixPool, -}; +module.exports = initiateMatrixPool; diff --git a/backend/src/event-handlers/rollup/utils.js b/backend/src/event-handlers/rollup/utils.js index 65a2662..8a0509d 100644 --- a/backend/src/event-handlers/rollup/utils.js +++ b/backend/src/event-handlers/rollup/utils.js @@ -1,10 +1,8 @@ -const { sendMatrixEvent } = require('../../matrix-bot'); const callWithRetry = require('../../util/call-with-retry'); const { rollup, wallet, dao, work2, } = require('../../util/contracts'); -const { matrixPools } = require('../../util/db'); const { availabilityStakeDuration } = require('./config'); const stakeRollupAvailability = async () => { @@ -36,22 +34,11 @@ const validateWorkEvidence = async (sender, post) => { return valid; }; -const validatePost = async ({ - sender, post, postId, roomId, eventId, ...params -}) => { +const validatePost = async (sender, post) => { const currentRep = Number(await dao.balanceOf(await wallet.getAddress())); const valid = await validateWorkEvidence(sender, post); - const stake = { amount: currentRep, account: await wallet.getAddress(), inFavor: valid }; - sendMatrixEvent('io.dgov.pool.stake', { postId, amount: currentRep, inFavor: valid }); - const matrixPool = { - postId, - roomId, - eventId, - ...params, - stakes: [stake], - }; - console.log('matrixPool', matrixPool); - await matrixPools.put(postId, matrixPool); + const stake = { amount: currentRep, inFavor: valid }; + return stake; }; module.exports = { diff --git a/ethereum/contract-addresses.json b/ethereum/contract-addresses.json index 3dbee7d..46a193f 100644 --- a/ethereum/contract-addresses.json +++ b/ethereum/contract-addresses.json @@ -1,14 +1,14 @@ { "localhost": { - "DAO": "0x1d63FDe5B461106729fE1e5e38A02fc68C518Af5", - "Work1": "0xB8f0cd092979F273b752FDa060F82BF2745f192e", - "Onboarding": "0x8F00038542C87A5eAf18d5938B7723bF2A04A4e4", - "Proposals": "0x6c18eb38b7450F8DaE5A5928A40fcA3952493Ee4", - "Rollup": "0x57BDFFf79108E5198dec6268A6BFFD8B62ECfA38", - "Work2": "0x42b79f8d8408c36aD4347ab72f826684440a7a8F", - "Reputation": "0x8d914D38dD301FC4606f5aa9fEcF8A76389020d3", - "Forum": "0x050C420Cc4995B41217Eba1B54B82Fd5687e9139", - "Bench": "0xfe58B9EB03F75A603de1B286584f5E9532ab8fB5" + "DAO": "0x3734B0944ea37694E85AEF60D5b256d19EDA04be", + "Work1": "0x8BDA04936887cF11263B87185E4D19e8158c6296", + "Onboarding": "0x8688E736D0D72161db4D25f68EF7d0EE4856ba19", + "Proposals": "0x3287061aDCeE36C1aae420a06E4a5EaE865Fe3ce", + "Rollup": "0x71cb20D63576a0Fa4F620a2E96C73F82848B09e1", + "Work2": "0x76Dfe9F47f06112a1b78960bf37d87CfbB6D6133", + "Reputation": "0xEAefe601Aad7422307B99be65bbE005aeA966012", + "Forum": "0x79e365342329560e8420d7a0f016633d7640cB18", + "Bench": "0xC0f00E5915F9abE6476858fD1961EAf79395ea64" }, "sepolia": { "DAO": "0x02dC6871d89fA6a16be2e875C63d81761CF459A8", diff --git a/frontend/contract-addresses.json b/frontend/contract-addresses.json index 3dbee7d..46a193f 100644 --- a/frontend/contract-addresses.json +++ b/frontend/contract-addresses.json @@ -1,14 +1,14 @@ { "localhost": { - "DAO": "0x1d63FDe5B461106729fE1e5e38A02fc68C518Af5", - "Work1": "0xB8f0cd092979F273b752FDa060F82BF2745f192e", - "Onboarding": "0x8F00038542C87A5eAf18d5938B7723bF2A04A4e4", - "Proposals": "0x6c18eb38b7450F8DaE5A5928A40fcA3952493Ee4", - "Rollup": "0x57BDFFf79108E5198dec6268A6BFFD8B62ECfA38", - "Work2": "0x42b79f8d8408c36aD4347ab72f826684440a7a8F", - "Reputation": "0x8d914D38dD301FC4606f5aa9fEcF8A76389020d3", - "Forum": "0x050C420Cc4995B41217Eba1B54B82Fd5687e9139", - "Bench": "0xfe58B9EB03F75A603de1B286584f5E9532ab8fB5" + "DAO": "0x3734B0944ea37694E85AEF60D5b256d19EDA04be", + "Work1": "0x8BDA04936887cF11263B87185E4D19e8158c6296", + "Onboarding": "0x8688E736D0D72161db4D25f68EF7d0EE4856ba19", + "Proposals": "0x3287061aDCeE36C1aae420a06E4a5EaE865Fe3ce", + "Rollup": "0x71cb20D63576a0Fa4F620a2E96C73F82848B09e1", + "Work2": "0x76Dfe9F47f06112a1b78960bf37d87CfbB6D6133", + "Reputation": "0xEAefe601Aad7422307B99be65bbE005aeA966012", + "Forum": "0x79e365342329560e8420d7a0f016633d7640cB18", + "Bench": "0xC0f00E5915F9abE6476858fD1961EAf79395ea64" }, "sepolia": { "DAO": "0x02dC6871d89fA6a16be2e875C63d81761CF459A8", diff --git a/frontend/contractArtifacts/Rollup.json b/frontend/contractArtifacts/Rollup.json index 7ed103b..a018fe4 100644 --- a/frontend/contractArtifacts/Rollup.json +++ b/frontend/contractArtifacts/Rollup.json @@ -237,9 +237,9 @@ "type": "string" }, { - "internalType": "uint256", - "name": "batchSize", - "type": "uint256" + "internalType": "string[]", + "name": "batchItems", + "type": "string[]" }, { "internalType": "uint256", @@ -259,8 +259,8 @@ "type": "function" } ], - "bytecode": "0x60a06040523480156200001157600080fd5b50604051620020b4380380620020b48339818101604052810190620000379190620000f4565b80808073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505050505062000126565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620000a8826200007b565b9050919050565b6000620000bc826200009b565b9050919050565b620000ce81620000af565b8114620000da57600080fd5b50565b600081519050620000ee81620000c3565b92915050565b6000602082840312156200010d576200010c62000076565b5b60006200011d84828501620000dd565b91505092915050565b608051611f5d620001576000396000818161021c01528181610860015281816109470152610a890152611f5d6000f3fe60806040526004361061007b5760003560e01c8063c4a9e1161161004e578063c4a9e11614610154578063d5a44f861461017f578063da553ec2146101bf578063f85c5a8a146101fc5761007b565b8063216ed6ad1461008057806324364a6b146100bd5780636bfb0d01146100e8578063bfb231d214610113575b600080fd5b34801561008c57600080fd5b506100a760048036038101906100a29190611153565b610218565b6040516100b491906111b5565b60405180910390f35b3480156100c957600080fd5b506100d2610561565b6040516100df91906111df565b60405180910390f35b3480156100f457600080fd5b506100fd610587565b60405161010a91906111b5565b60405180910390f35b34801561011f57600080fd5b5061013a600480360381019061013591906111fa565b61058d565b60405161014b9594939291906112b7565b60405180910390f35b34801561016057600080fd5b5061016961068b565b60405161017691906111b5565b60405180910390f35b34801561018b57600080fd5b506101a660048036038101906101a191906111fa565b610691565b6040516101b6949392919061132c565b60405180910390f35b3480156101cb57600080fd5b506101e660048036038101906101e191906113d6565b6106ee565b6040516101f391906111b5565b60405180910390f35b6102166004803603810190610211919061144a565b610db8565b005b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146102a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161029f90611530565b60405180910390fd5b600083116102eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102e29061159c565b60405180910390fd5b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000811480156103a057508473ffffffffffffffffffffffffffffffffffffffff1660008083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b1561040757600260008154809291906103b8906115eb565b91905055905080600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506104ab565b60008082815260200190815260200160002060030160009054906101000a900460ff16156104915760026000815480929190610442906115eb565b91905055905080600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506104aa565b6000808281526020019081526020016000206001015491505b5b60008060008381526020019081526020016000209050858160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084816001018190555083426105199190611633565b81600201819055507fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e98260405161055091906111b5565b60405180910390a150509392505050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60045481565b60036020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169080600201549080600301549080600401805461060890611696565b80601f016020809104026020016040519081016040528092919081815260200182805461063490611696565b80156106815780601f1061065657610100808354040283529160200191610681565b820191906000526020600020905b81548152906001019060200180831161066457829003601f168201915b5050505050905085565b60025481565b60006020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030160009054906101000a900460ff16905084565b6000600454831115610735576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161072c90611713565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461081c57600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461081b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610812906117a5565b60405180910390fd5b5b600080600090505b8481101561085d5760036000828152602001908152602001600020600301548261084e9190611633565b91508080600101915050610824565b507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639fbe7c7382888887604051806040016040528060018152602001600381525060405180604001604052806001815260200160028152506064600160006040518a63ffffffff1660e01b81526004016108f5989796959493929190611928565b60206040518083038185885af1158015610913573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061093891906119cb565b915060005b84811015610a30577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663975762b3846003600085815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600360008681526020019081526020016000206002015460016040518563ffffffff1660e01b81526004016109f194939291906119f8565b600060405180830381600087803b158015610a0b57600080fd5b505af1158015610a1f573d6000803e3d6000fd5b50505050808060010191505061093d565b50600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b53577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663975762b383600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660008060065481526020019081526020016000206001015460016040518563ffffffff1660e01b8152600401610b2094939291906119f8565b600060405180830381600087803b158015610b3a57600080fd5b505af1158015610b4e573d6000803e3d6000fd5b505050505b600454841015610cc75760005b84600454610b6e9190611a3d565b811015610cad57600360008287610b859190611633565b8152602001908152602001600020600360008381526020019081526020016000206000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600282015481600201556003820154816003015560048201816004019081610c9c9190611c58565b509050508080600101915050610b60565b5083600454610cbc9190611a3d565b600481905550610cd0565b60006004819055505b610cd8610efd565b600681905550600080600654815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f672ebfecd081c72b12452a84f8b6d051a1f32cda55cdf8992251279a5408b5a5600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051610da791906111df565b60405180910390a150949350505050565b60006003600060046000815480929190610dd1906115eb565b9190505581526020019081526020016000209050338160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550848160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508381600201819055503481600301819055508282826004019182610e90929190611d4b565b507ff67a2314f80fd951705a8cb64e24285516f2937f5e0db904aa6d29f3bae1d02783838360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168460030154604051610eee9493929190611e1b565b60405180910390a15050505050565b6000610f07610f40565b90506000806000838152602001908152602001600020905060018160030160006101000a81548160ff0219169083151502179055505090565b60008060005b600254811015610fc45760008082815260200190815260200160002060030160009054906101000a900460ff16610fb757600080828152602001908152602001600020600201544211610fb7576000808281526020019081526020016000206001015482610fb49190611633565b91505b8080600101915050610f46565b5060008111611008576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fff90611ea7565b60405180910390fd5b600081446110169190611ef6565b9050600080600090505b6002548110156110ae5760008082815260200190815260200160002060030160009054906101000a900460ff166110a1576000808281526020019081526020016000206002015442116110a157600080828152602001908152602001600020600101548261108e9190611633565b9150828211156110a0578094506110ae565b5b8080600101915050611020565b5050505090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006110ea826110bf565b9050919050565b6110fa816110df565b811461110557600080fd5b50565b600081359050611117816110f1565b92915050565b6000819050919050565b6111308161111d565b811461113b57600080fd5b50565b60008135905061114d81611127565b92915050565b60008060006060848603121561116c5761116b6110b5565b5b600061117a86828701611108565b935050602061118b8682870161113e565b925050604061119c8682870161113e565b9150509250925092565b6111af8161111d565b82525050565b60006020820190506111ca60008301846111a6565b92915050565b6111d9816110df565b82525050565b60006020820190506111f460008301846111d0565b92915050565b6000602082840312156112105761120f6110b5565b5b600061121e8482850161113e565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611261578082015181840152602081019050611246565b60008484015250505050565b6000601f19601f8301169050919050565b600061128982611227565b6112938185611232565b93506112a3818560208601611243565b6112ac8161126d565b840191505092915050565b600060a0820190506112cc60008301886111d0565b6112d960208301876111d0565b6112e660408301866111a6565b6112f360608301856111a6565b8181036080830152611305818461127e565b90509695505050505050565b60008115159050919050565b61132681611311565b82525050565b600060808201905061134160008301876111d0565b61134e60208301866111a6565b61135b60408301856111a6565b611368606083018461131d565b95945050505050565b600080fd5b600080fd5b600080fd5b60008083601f84011261139657611395611371565b5b8235905067ffffffffffffffff8111156113b3576113b2611376565b5b6020830191508360018202830111156113cf576113ce61137b565b5b9250929050565b600080600080606085870312156113f0576113ef6110b5565b5b600085013567ffffffffffffffff81111561140e5761140d6110ba565b5b61141a87828801611380565b9450945050602061142d8782880161113e565b925050604061143e8782880161113e565b91505092959194509250565b60008060008060608587031215611464576114636110b5565b5b600061147287828801611108565b94505060206114838782880161113e565b935050604085013567ffffffffffffffff8111156114a4576114a36110ba565b5b6114b087828801611380565b925092505092959194509250565b7f616363657074417661696c6162696c697479206d757374206f6e6c792062652060008201527f63616c6c65642062792044414f20636f6e747261637400000000000000000000602082015250565b600061151a603683611232565b9150611525826114be565b604082019050919050565b600060208201905081810360008301526115498161150d565b9050919050565b7f4e6f207374616b652070726f7669646564000000000000000000000000000000600082015250565b6000611586601183611232565b915061159182611550565b602082019050919050565b600060208201905081810360008301526115b581611579565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006115f68261111d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611628576116276115bc565b5b600182019050919050565b600061163e8261111d565b91506116498361111d565b9250828201905080821115611661576116606115bc565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806116ae57607f821691505b6020821081036116c1576116c0611667565b5b50919050565b7f42617463682073697a6520746f6f206c61726765000000000000000000000000600082015250565b60006116fd601483611232565b9150611708826116c7565b602082019050919050565b6000602082019050818103600083015261172c816116f0565b9050919050565b7f426174636820726573756c74206d757374206265207375626d6974746564206260008201527f792063757272656e7420626174636820776f726b657200000000000000000000602082015250565b600061178f603683611232565b915061179a82611733565b604082019050919050565b600060208201905081810360008301526117be81611782565b9050919050565b82818337600083830152505050565b60006117e08385611232565b93506117ed8385846117c5565b6117f68361126d565b840190509392505050565b600060029050919050565b600081905092915050565b6000819050919050565b61182a8161111d565b82525050565b600061183c8383611821565b60208301905092915050565b6000602082019050919050565b61185e81611801565b611868818461180c565b925061187382611817565b8060005b838110156118a457815161188b8782611830565b965061189683611848565b925050600181019050611877565b505050505050565b6000819050919050565b6000819050919050565b60006118db6118d66118d1846118ac565b6118b6565b61111d565b9050919050565b6118eb816118c0565b82525050565b600082825260208201905092915050565b50565b60006119126000836118f1565b915061191d82611902565b600082019050919050565b6000610140820190508181036000830152611944818a8c6117d4565b905061195360208301896111a6565b6119606040830188611855565b61196d6080830187611855565b61197a60c08301866118e2565b61198760e083018561131d565b61199561010083018461131d565b8181036101208301526119a781611905565b90509998505050505050505050565b6000815190506119c581611127565b92915050565b6000602082840312156119e1576119e06110b5565b5b60006119ef848285016119b6565b91505092915050565b6000608082019050611a0d60008301876111a6565b611a1a60208301866111d0565b611a2760408301856111a6565b611a34606083018461131d565b95945050505050565b6000611a488261111d565b9150611a538361111d565b9250828203905081811115611a6b57611a6a6115bc565b5b92915050565b600081549050611a8081611696565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302611b187fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82611adb565b611b228683611adb565b95508019841693508086168417925050509392505050565b6000611b55611b50611b4b8461111d565b6118b6565b61111d565b9050919050565b6000819050919050565b611b6f83611b3a565b611b83611b7b82611b5c565b848454611ae8565b825550505050565b600090565b611b98611b8b565b611ba3818484611b66565b505050565b5b81811015611bc757611bbc600082611b90565b600181019050611ba9565b5050565b601f821115611c0c57611bdd81611ab6565b611be684611acb565b81016020851015611bf5578190505b611c09611c0185611acb565b830182611ba8565b50505b505050565b600082821c905092915050565b6000611c2f60001984600802611c11565b1980831691505092915050565b6000611c488383611c1e565b9150826002028217905092915050565b818103611c66575050611d3e565b611c6f82611a71565b67ffffffffffffffff811115611c8857611c87611a87565b5b611c928254611696565b611c9d828285611bcb565b6000601f831160018114611ccc5760008415611cba578287015490505b611cc48582611c3c565b865550611d37565b601f198416611cda87611ab6565b9650611ce586611ab6565b60005b82811015611d0d57848901548255600182019150600185019450602081019050611ce8565b86831015611d2a5784890154611d26601f891682611c1e565b8355505b6001600288020188555050505b5050505050505b565b600082905092915050565b611d558383611d40565b67ffffffffffffffff811115611d6e57611d6d611a87565b5b611d788254611696565b611d83828285611bcb565b6000601f831160018114611db25760008415611da0578287013590505b611daa8582611c3c565b865550611e12565b601f198416611dc086611ab6565b60005b82811015611de857848901358255600182019150602085019450602081019050611dc3565b86831015611e055784890135611e01601f891682611c1e565b8355505b6001600288020188555050505b50505050505050565b60006060820190508181036000830152611e368186886117d4565b9050611e4560208301856111d0565b611e5260408301846111a6565b95945050505050565b7f4e6f20617661696c61626c6520776f726b6572207374616b6573000000000000600082015250565b6000611e91601a83611232565b9150611e9c82611e5b565b602082019050919050565b60006020820190508181036000830152611ec081611e84565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000611f018261111d565b9150611f0c8361111d565b925082611f1c57611f1b611ec7565b5b82820690509291505056fea264697066735822122095392d734918a8a61988b0f3ab9e926fa8b58c4ae69b87c0c25a151cb04642d364736f6c63430008180033", - "deployedBytecode": "0x60806040526004361061007b5760003560e01c8063c4a9e1161161004e578063c4a9e11614610154578063d5a44f861461017f578063da553ec2146101bf578063f85c5a8a146101fc5761007b565b8063216ed6ad1461008057806324364a6b146100bd5780636bfb0d01146100e8578063bfb231d214610113575b600080fd5b34801561008c57600080fd5b506100a760048036038101906100a29190611153565b610218565b6040516100b491906111b5565b60405180910390f35b3480156100c957600080fd5b506100d2610561565b6040516100df91906111df565b60405180910390f35b3480156100f457600080fd5b506100fd610587565b60405161010a91906111b5565b60405180910390f35b34801561011f57600080fd5b5061013a600480360381019061013591906111fa565b61058d565b60405161014b9594939291906112b7565b60405180910390f35b34801561016057600080fd5b5061016961068b565b60405161017691906111b5565b60405180910390f35b34801561018b57600080fd5b506101a660048036038101906101a191906111fa565b610691565b6040516101b6949392919061132c565b60405180910390f35b3480156101cb57600080fd5b506101e660048036038101906101e191906113d6565b6106ee565b6040516101f391906111b5565b60405180910390f35b6102166004803603810190610211919061144a565b610db8565b005b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146102a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161029f90611530565b60405180910390fd5b600083116102eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102e29061159c565b60405180910390fd5b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000811480156103a057508473ffffffffffffffffffffffffffffffffffffffff1660008083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b1561040757600260008154809291906103b8906115eb565b91905055905080600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506104ab565b60008082815260200190815260200160002060030160009054906101000a900460ff16156104915760026000815480929190610442906115eb565b91905055905080600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506104aa565b6000808281526020019081526020016000206001015491505b5b60008060008381526020019081526020016000209050858160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084816001018190555083426105199190611633565b81600201819055507fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e98260405161055091906111b5565b60405180910390a150509392505050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60045481565b60036020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169080600201549080600301549080600401805461060890611696565b80601f016020809104026020016040519081016040528092919081815260200182805461063490611696565b80156106815780601f1061065657610100808354040283529160200191610681565b820191906000526020600020905b81548152906001019060200180831161066457829003601f168201915b5050505050905085565b60025481565b60006020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030160009054906101000a900460ff16905084565b6000600454831115610735576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161072c90611713565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461081c57600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461081b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610812906117a5565b60405180910390fd5b5b600080600090505b8481101561085d5760036000828152602001908152602001600020600301548261084e9190611633565b91508080600101915050610824565b507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639fbe7c7382888887604051806040016040528060018152602001600381525060405180604001604052806001815260200160028152506064600160006040518a63ffffffff1660e01b81526004016108f5989796959493929190611928565b60206040518083038185885af1158015610913573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061093891906119cb565b915060005b84811015610a30577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663975762b3846003600085815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600360008681526020019081526020016000206002015460016040518563ffffffff1660e01b81526004016109f194939291906119f8565b600060405180830381600087803b158015610a0b57600080fd5b505af1158015610a1f573d6000803e3d6000fd5b50505050808060010191505061093d565b50600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b53577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663975762b383600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660008060065481526020019081526020016000206001015460016040518563ffffffff1660e01b8152600401610b2094939291906119f8565b600060405180830381600087803b158015610b3a57600080fd5b505af1158015610b4e573d6000803e3d6000fd5b505050505b600454841015610cc75760005b84600454610b6e9190611a3d565b811015610cad57600360008287610b859190611633565b8152602001908152602001600020600360008381526020019081526020016000206000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600282015481600201556003820154816003015560048201816004019081610c9c9190611c58565b509050508080600101915050610b60565b5083600454610cbc9190611a3d565b600481905550610cd0565b60006004819055505b610cd8610efd565b600681905550600080600654815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f672ebfecd081c72b12452a84f8b6d051a1f32cda55cdf8992251279a5408b5a5600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051610da791906111df565b60405180910390a150949350505050565b60006003600060046000815480929190610dd1906115eb565b9190505581526020019081526020016000209050338160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550848160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508381600201819055503481600301819055508282826004019182610e90929190611d4b565b507ff67a2314f80fd951705a8cb64e24285516f2937f5e0db904aa6d29f3bae1d02783838360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168460030154604051610eee9493929190611e1b565b60405180910390a15050505050565b6000610f07610f40565b90506000806000838152602001908152602001600020905060018160030160006101000a81548160ff0219169083151502179055505090565b60008060005b600254811015610fc45760008082815260200190815260200160002060030160009054906101000a900460ff16610fb757600080828152602001908152602001600020600201544211610fb7576000808281526020019081526020016000206001015482610fb49190611633565b91505b8080600101915050610f46565b5060008111611008576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fff90611ea7565b60405180910390fd5b600081446110169190611ef6565b9050600080600090505b6002548110156110ae5760008082815260200190815260200160002060030160009054906101000a900460ff166110a1576000808281526020019081526020016000206002015442116110a157600080828152602001908152602001600020600101548261108e9190611633565b9150828211156110a0578094506110ae565b5b8080600101915050611020565b5050505090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006110ea826110bf565b9050919050565b6110fa816110df565b811461110557600080fd5b50565b600081359050611117816110f1565b92915050565b6000819050919050565b6111308161111d565b811461113b57600080fd5b50565b60008135905061114d81611127565b92915050565b60008060006060848603121561116c5761116b6110b5565b5b600061117a86828701611108565b935050602061118b8682870161113e565b925050604061119c8682870161113e565b9150509250925092565b6111af8161111d565b82525050565b60006020820190506111ca60008301846111a6565b92915050565b6111d9816110df565b82525050565b60006020820190506111f460008301846111d0565b92915050565b6000602082840312156112105761120f6110b5565b5b600061121e8482850161113e565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611261578082015181840152602081019050611246565b60008484015250505050565b6000601f19601f8301169050919050565b600061128982611227565b6112938185611232565b93506112a3818560208601611243565b6112ac8161126d565b840191505092915050565b600060a0820190506112cc60008301886111d0565b6112d960208301876111d0565b6112e660408301866111a6565b6112f360608301856111a6565b8181036080830152611305818461127e565b90509695505050505050565b60008115159050919050565b61132681611311565b82525050565b600060808201905061134160008301876111d0565b61134e60208301866111a6565b61135b60408301856111a6565b611368606083018461131d565b95945050505050565b600080fd5b600080fd5b600080fd5b60008083601f84011261139657611395611371565b5b8235905067ffffffffffffffff8111156113b3576113b2611376565b5b6020830191508360018202830111156113cf576113ce61137b565b5b9250929050565b600080600080606085870312156113f0576113ef6110b5565b5b600085013567ffffffffffffffff81111561140e5761140d6110ba565b5b61141a87828801611380565b9450945050602061142d8782880161113e565b925050604061143e8782880161113e565b91505092959194509250565b60008060008060608587031215611464576114636110b5565b5b600061147287828801611108565b94505060206114838782880161113e565b935050604085013567ffffffffffffffff8111156114a4576114a36110ba565b5b6114b087828801611380565b925092505092959194509250565b7f616363657074417661696c6162696c697479206d757374206f6e6c792062652060008201527f63616c6c65642062792044414f20636f6e747261637400000000000000000000602082015250565b600061151a603683611232565b9150611525826114be565b604082019050919050565b600060208201905081810360008301526115498161150d565b9050919050565b7f4e6f207374616b652070726f7669646564000000000000000000000000000000600082015250565b6000611586601183611232565b915061159182611550565b602082019050919050565b600060208201905081810360008301526115b581611579565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006115f68261111d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611628576116276115bc565b5b600182019050919050565b600061163e8261111d565b91506116498361111d565b9250828201905080821115611661576116606115bc565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806116ae57607f821691505b6020821081036116c1576116c0611667565b5b50919050565b7f42617463682073697a6520746f6f206c61726765000000000000000000000000600082015250565b60006116fd601483611232565b9150611708826116c7565b602082019050919050565b6000602082019050818103600083015261172c816116f0565b9050919050565b7f426174636820726573756c74206d757374206265207375626d6974746564206260008201527f792063757272656e7420626174636820776f726b657200000000000000000000602082015250565b600061178f603683611232565b915061179a82611733565b604082019050919050565b600060208201905081810360008301526117be81611782565b9050919050565b82818337600083830152505050565b60006117e08385611232565b93506117ed8385846117c5565b6117f68361126d565b840190509392505050565b600060029050919050565b600081905092915050565b6000819050919050565b61182a8161111d565b82525050565b600061183c8383611821565b60208301905092915050565b6000602082019050919050565b61185e81611801565b611868818461180c565b925061187382611817565b8060005b838110156118a457815161188b8782611830565b965061189683611848565b925050600181019050611877565b505050505050565b6000819050919050565b6000819050919050565b60006118db6118d66118d1846118ac565b6118b6565b61111d565b9050919050565b6118eb816118c0565b82525050565b600082825260208201905092915050565b50565b60006119126000836118f1565b915061191d82611902565b600082019050919050565b6000610140820190508181036000830152611944818a8c6117d4565b905061195360208301896111a6565b6119606040830188611855565b61196d6080830187611855565b61197a60c08301866118e2565b61198760e083018561131d565b61199561010083018461131d565b8181036101208301526119a781611905565b90509998505050505050505050565b6000815190506119c581611127565b92915050565b6000602082840312156119e1576119e06110b5565b5b60006119ef848285016119b6565b91505092915050565b6000608082019050611a0d60008301876111a6565b611a1a60208301866111d0565b611a2760408301856111a6565b611a34606083018461131d565b95945050505050565b6000611a488261111d565b9150611a538361111d565b9250828203905081811115611a6b57611a6a6115bc565b5b92915050565b600081549050611a8081611696565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302611b187fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82611adb565b611b228683611adb565b95508019841693508086168417925050509392505050565b6000611b55611b50611b4b8461111d565b6118b6565b61111d565b9050919050565b6000819050919050565b611b6f83611b3a565b611b83611b7b82611b5c565b848454611ae8565b825550505050565b600090565b611b98611b8b565b611ba3818484611b66565b505050565b5b81811015611bc757611bbc600082611b90565b600181019050611ba9565b5050565b601f821115611c0c57611bdd81611ab6565b611be684611acb565b81016020851015611bf5578190505b611c09611c0185611acb565b830182611ba8565b50505b505050565b600082821c905092915050565b6000611c2f60001984600802611c11565b1980831691505092915050565b6000611c488383611c1e565b9150826002028217905092915050565b818103611c66575050611d3e565b611c6f82611a71565b67ffffffffffffffff811115611c8857611c87611a87565b5b611c928254611696565b611c9d828285611bcb565b6000601f831160018114611ccc5760008415611cba578287015490505b611cc48582611c3c565b865550611d37565b601f198416611cda87611ab6565b9650611ce586611ab6565b60005b82811015611d0d57848901548255600182019150600185019450602081019050611ce8565b86831015611d2a5784890154611d26601f891682611c1e565b8355505b6001600288020188555050505b5050505050505b565b600082905092915050565b611d558383611d40565b67ffffffffffffffff811115611d6e57611d6d611a87565b5b611d788254611696565b611d83828285611bcb565b6000601f831160018114611db25760008415611da0578287013590505b611daa8582611c3c565b865550611e12565b601f198416611dc086611ab6565b60005b82811015611de857848901358255600182019150602085019450602081019050611dc3565b86831015611e055784890135611e01601f891682611c1e565b8355505b6001600288020188555050505b50505050505050565b60006060820190508181036000830152611e368186886117d4565b9050611e4560208301856111d0565b611e5260408301846111a6565b95945050505050565b7f4e6f20617661696c61626c6520776f726b6572207374616b6573000000000000600082015250565b6000611e91601a83611232565b9150611e9c82611e5b565b602082019050919050565b60006020820190508181036000830152611ec081611e84565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000611f018261111d565b9150611f0c8361111d565b925082611f1c57611f1b611ec7565b5b82820690509291505056fea264697066735822122095392d734918a8a61988b0f3ab9e926fa8b58c4ae69b87c0c25a151cb04642d364736f6c63430008180033", + "bytecode": "0x60a06040523480156200001157600080fd5b5060405162002407380380620024078339818101604052810190620000379190620000f4565b80808073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505050505062000126565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620000a8826200007b565b9050919050565b6000620000bc826200009b565b9050919050565b620000ce81620000af565b8114620000da57600080fd5b50565b600081519050620000ee81620000c3565b92915050565b6000602082840312156200010d576200010c62000076565b5b60006200011d84828501620000dd565b91505092915050565b6080516122b0620001576000396000818161021c015281816107c0015281816108aa01526109ec01526122b06000f3fe60806040526004361061007b5760003560e01c8063bfb231d21161004e578063bfb231d214610150578063c4a9e11614610191578063d5a44f86146101bc578063f85c5a8a146101fc5761007b565b8063216ed6ad1461008057806324364a6b146100bd5780632c6a2e83146100e85780636bfb0d0114610125575b600080fd5b34801561008c57600080fd5b506100a760048036038101906100a2919061122a565b610218565b6040516100b4919061128c565b60405180910390f35b3480156100c957600080fd5b506100d2610561565b6040516100df91906112b6565b60405180910390f35b3480156100f457600080fd5b5061010f600480360381019061010a919061138c565b610587565b60405161011c919061128c565b60405180910390f35b34801561013157600080fd5b5061013a610d28565b604051610147919061128c565b60405180910390f35b34801561015c57600080fd5b5061017760048036038101906101729190611421565b610d2e565b6040516101889594939291906114de565b60405180910390f35b34801561019d57600080fd5b506101a6610e2c565b6040516101b3919061128c565b60405180910390f35b3480156101c857600080fd5b506101e360048036038101906101de9190611421565b610e32565b6040516101f39493929190611553565b60405180910390f35b61021660048036038101906102119190611598565b610e8f565b005b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146102a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161029f9061167e565b60405180910390fd5b600083116102eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102e2906116ea565b60405180910390fd5b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000811480156103a057508473ffffffffffffffffffffffffffffffffffffffff1660008083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b1561040757600260008154809291906103b890611739565b91905055905080600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506104ab565b60008082815260200190815260200160002060030160009054906101000a900460ff1615610491576002600081548092919061044290611739565b91905055905080600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506104aa565b6000808281526020019081526020016000206001015491505b5b60008060008381526020019081526020016000209050858160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084816001018190555083426105199190611781565b81600201819055507fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e982604051610550919061128c565b60405180910390a150509392505050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461066f57600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461066e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161066590611827565b60405180910390fd5b5b6004548484905011156106b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ae90611893565b60405180910390fd5b60005b8484905081101561077857600360008281526020019081526020016000206004016040516106e891906119b6565b6040518091039020858583818110610703576107026119cd565b5b90506020028101906107159190611a0b565b604051610723929190611aa2565b60405180910390201461076b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161076290611b07565b60405180910390fd5b80806001019150506106ba565b50600080600090505b858590508110156107bd576003600082815260200190815260200160002060030154826107ae9190611781565b91508080600101915050610781565b507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639fbe7c7382898987604051806040016040528060018152602001600381525060405180604001604052806001815260200160028152506064600160006040518a63ffffffff1660e01b8152600401610855989796959493929190611c7b565b60206040518083038185885af1158015610873573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906108989190611d1e565b915060005b85859050811015610993577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663975762b3846003600085815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600360008681526020019081526020016000206002015460016040518563ffffffff1660e01b81526004016109549493929190611d4b565b600060405180830381600087803b15801561096e57600080fd5b505af1158015610982573d6000803e3d6000fd5b50505050808060010191505061089d565b50600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ab6577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663975762b383600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660008060065481526020019081526020016000206001015460016040518563ffffffff1660e01b8152600401610a839493929190611d4b565b600060405180830381600087803b158015610a9d57600080fd5b505af1158015610ab1573d6000803e3d6000fd5b505050505b600454858590501015610c365760005b85859050600454610ad79190611d90565b811015610c1957600360008288889050610af19190611781565b8152602001908152602001600020600360008381526020019081526020016000206000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600282015481600201556003820154816003015560048201816004019081610c089190611fab565b509050508080600101915050610ac6565b5084849050600454610c2b9190611d90565b600481905550610c3f565b60006004819055505b610c47610fd4565b600681905550600080600654815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f672ebfecd081c72b12452a84f8b6d051a1f32cda55cdf8992251279a5408b5a5600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051610d1691906112b6565b60405180910390a15095945050505050565b60045481565b60036020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806002015490806003015490806004018054610da9906118e2565b80601f0160208091040260200160405190810160405280929190818152602001828054610dd5906118e2565b8015610e225780601f10610df757610100808354040283529160200191610e22565b820191906000526020600020905b815481529060010190602001808311610e0557829003601f168201915b5050505050905085565b60025481565b60006020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030160009054906101000a900460ff16905084565b60006003600060046000815480929190610ea890611739565b9190505581526020019081526020016000209050338160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550848160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508381600201819055503481600301819055508282826004019182610f6792919061209e565b507ff67a2314f80fd951705a8cb64e24285516f2937f5e0db904aa6d29f3bae1d02783838360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168460030154604051610fc5949392919061216e565b60405180910390a15050505050565b6000610fde611017565b90506000806000838152602001908152602001600020905060018160030160006101000a81548160ff0219169083151502179055505090565b60008060005b60025481101561109b5760008082815260200190815260200160002060030160009054906101000a900460ff1661108e5760008082815260200190815260200160002060020154421161108e57600080828152602001908152602001600020600101548261108b9190611781565b91505b808060010191505061101d565b50600081116110df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d6906121fa565b60405180910390fd5b600081446110ed9190612249565b9050600080600090505b6002548110156111855760008082815260200190815260200160002060030160009054906101000a900460ff16611178576000808281526020019081526020016000206002015442116111785760008082815260200190815260200160002060010154826111659190611781565b91508282111561117757809450611185565b5b80806001019150506110f7565b5050505090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006111c182611196565b9050919050565b6111d1816111b6565b81146111dc57600080fd5b50565b6000813590506111ee816111c8565b92915050565b6000819050919050565b611207816111f4565b811461121257600080fd5b50565b600081359050611224816111fe565b92915050565b6000806000606084860312156112435761124261118c565b5b6000611251868287016111df565b935050602061126286828701611215565b925050604061127386828701611215565b9150509250925092565b611286816111f4565b82525050565b60006020820190506112a1600083018461127d565b92915050565b6112b0816111b6565b82525050565b60006020820190506112cb60008301846112a7565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126112f6576112f56112d1565b5b8235905067ffffffffffffffff811115611313576113126112d6565b5b60208301915083600182028301111561132f5761132e6112db565b5b9250929050565b60008083601f84011261134c5761134b6112d1565b5b8235905067ffffffffffffffff811115611369576113686112d6565b5b602083019150836020820283011115611385576113846112db565b5b9250929050565b6000806000806000606086880312156113a8576113a761118c565b5b600086013567ffffffffffffffff8111156113c6576113c5611191565b5b6113d2888289016112e0565b9550955050602086013567ffffffffffffffff8111156113f5576113f4611191565b5b61140188828901611336565b9350935050604061141488828901611215565b9150509295509295909350565b6000602082840312156114375761143661118c565b5b600061144584828501611215565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561148857808201518184015260208101905061146d565b60008484015250505050565b6000601f19601f8301169050919050565b60006114b08261144e565b6114ba8185611459565b93506114ca81856020860161146a565b6114d381611494565b840191505092915050565b600060a0820190506114f360008301886112a7565b61150060208301876112a7565b61150d604083018661127d565b61151a606083018561127d565b818103608083015261152c81846114a5565b90509695505050505050565b60008115159050919050565b61154d81611538565b82525050565b600060808201905061156860008301876112a7565b611575602083018661127d565b611582604083018561127d565b61158f6060830184611544565b95945050505050565b600080600080606085870312156115b2576115b161118c565b5b60006115c0878288016111df565b94505060206115d187828801611215565b935050604085013567ffffffffffffffff8111156115f2576115f1611191565b5b6115fe878288016112e0565b925092505092959194509250565b7f616363657074417661696c6162696c697479206d757374206f6e6c792062652060008201527f63616c6c65642062792044414f20636f6e747261637400000000000000000000602082015250565b6000611668603683611459565b91506116738261160c565b604082019050919050565b600060208201905081810360008301526116978161165b565b9050919050565b7f4e6f207374616b652070726f7669646564000000000000000000000000000000600082015250565b60006116d4601183611459565b91506116df8261169e565b602082019050919050565b60006020820190508181036000830152611703816116c7565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611744826111f4565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036117765761177561170a565b5b600182019050919050565b600061178c826111f4565b9150611797836111f4565b92508282019050808211156117af576117ae61170a565b5b92915050565b7f426174636820726573756c74206d757374206265207375626d6974746564206260008201527f792063757272656e7420626174636820776f726b657200000000000000000000602082015250565b6000611811603683611459565b915061181c826117b5565b604082019050919050565b6000602082019050818103600083015261184081611804565b9050919050565b7f42617463682073697a6520746f6f206c61726765000000000000000000000000600082015250565b600061187d601483611459565b915061188882611847565b602082019050919050565b600060208201905081810360008301526118ac81611870565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806118fa57607f821691505b60208210810361190d5761190c6118b3565b5b50919050565b600081905092915050565b60008190508160005260206000209050919050565b60008154611940816118e2565b61194a8186611913565b94506001821660008114611965576001811461197a576119ad565b60ff19831686528115158202860193506119ad565b6119838561191e565b60005b838110156119a557815481890152600182019150602081019050611986565b838801955050505b50505092915050565b60006119c28284611933565b915081905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600080fd5b600080fd5b600080fd5b60008083356001602003843603038112611a2857611a276119fc565b5b80840192508235915067ffffffffffffffff821115611a4a57611a49611a01565b5b602083019250600182023603831315611a6657611a65611a06565b5b509250929050565b82818337600083830152505050565b6000611a898385611913565b9350611a96838584611a6e565b82840190509392505050565b6000611aaf828486611a7d565b91508190509392505050565b7f4261746368206974656d206d69736d6174636800000000000000000000000000600082015250565b6000611af1601383611459565b9150611afc82611abb565b602082019050919050565b60006020820190508181036000830152611b2081611ae4565b9050919050565b6000611b338385611459565b9350611b40838584611a6e565b611b4983611494565b840190509392505050565b600060029050919050565b600081905092915050565b6000819050919050565b611b7d816111f4565b82525050565b6000611b8f8383611b74565b60208301905092915050565b6000602082019050919050565b611bb181611b54565b611bbb8184611b5f565b9250611bc682611b6a565b8060005b83811015611bf7578151611bde8782611b83565b9650611be983611b9b565b925050600181019050611bca565b505050505050565b6000819050919050565b6000819050919050565b6000611c2e611c29611c2484611bff565b611c09565b6111f4565b9050919050565b611c3e81611c13565b82525050565b600082825260208201905092915050565b50565b6000611c65600083611c44565b9150611c7082611c55565b600082019050919050565b6000610140820190508181036000830152611c97818a8c611b27565b9050611ca6602083018961127d565b611cb36040830188611ba8565b611cc06080830187611ba8565b611ccd60c0830186611c35565b611cda60e0830185611544565b611ce8610100830184611544565b818103610120830152611cfa81611c58565b90509998505050505050505050565b600081519050611d18816111fe565b92915050565b600060208284031215611d3457611d3361118c565b5b6000611d4284828501611d09565b91505092915050565b6000608082019050611d60600083018761127d565b611d6d60208301866112a7565b611d7a604083018561127d565b611d876060830184611544565b95945050505050565b6000611d9b826111f4565b9150611da6836111f4565b9250828203905081811115611dbe57611dbd61170a565b5b92915050565b600081549050611dd3816118e2565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302611e6b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82611e2e565b611e758683611e2e565b95508019841693508086168417925050509392505050565b6000611ea8611ea3611e9e846111f4565b611c09565b6111f4565b9050919050565b6000819050919050565b611ec283611e8d565b611ed6611ece82611eaf565b848454611e3b565b825550505050565b600090565b611eeb611ede565b611ef6818484611eb9565b505050565b5b81811015611f1a57611f0f600082611ee3565b600181019050611efc565b5050565b601f821115611f5f57611f3081611e09565b611f3984611e1e565b81016020851015611f48578190505b611f5c611f5485611e1e565b830182611efb565b50505b505050565b600082821c905092915050565b6000611f8260001984600802611f64565b1980831691505092915050565b6000611f9b8383611f71565b9150826002028217905092915050565b818103611fb9575050612091565b611fc282611dc4565b67ffffffffffffffff811115611fdb57611fda611dda565b5b611fe582546118e2565b611ff0828285611f1e565b6000601f83116001811461201f576000841561200d578287015490505b6120178582611f8f565b86555061208a565b601f19841661202d87611e09565b965061203886611e09565b60005b828110156120605784890154825560018201915060018501945060208101905061203b565b8683101561207d5784890154612079601f891682611f71565b8355505b6001600288020188555050505b5050505050505b565b600082905092915050565b6120a88383612093565b67ffffffffffffffff8111156120c1576120c0611dda565b5b6120cb82546118e2565b6120d6828285611f1e565b6000601f83116001811461210557600084156120f3578287013590505b6120fd8582611f8f565b865550612165565b601f19841661211386611e09565b60005b8281101561213b57848901358255600182019150602085019450602081019050612116565b868310156121585784890135612154601f891682611f71565b8355505b6001600288020188555050505b50505050505050565b60006060820190508181036000830152612189818688611b27565b905061219860208301856112a7565b6121a5604083018461127d565b95945050505050565b7f4e6f20617661696c61626c6520776f726b6572207374616b6573000000000000600082015250565b60006121e4601a83611459565b91506121ef826121ae565b602082019050919050565b60006020820190508181036000830152612213816121d7565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612254826111f4565b915061225f836111f4565b92508261226f5761226e61221a565b5b82820690509291505056fea2646970667358221220115a2824c33b295f7dc9f549eab70cbadd2c73f626a90b55c2592c40e01cc52364736f6c63430008180033", + "deployedBytecode": "0x60806040526004361061007b5760003560e01c8063bfb231d21161004e578063bfb231d214610150578063c4a9e11614610191578063d5a44f86146101bc578063f85c5a8a146101fc5761007b565b8063216ed6ad1461008057806324364a6b146100bd5780632c6a2e83146100e85780636bfb0d0114610125575b600080fd5b34801561008c57600080fd5b506100a760048036038101906100a2919061122a565b610218565b6040516100b4919061128c565b60405180910390f35b3480156100c957600080fd5b506100d2610561565b6040516100df91906112b6565b60405180910390f35b3480156100f457600080fd5b5061010f600480360381019061010a919061138c565b610587565b60405161011c919061128c565b60405180910390f35b34801561013157600080fd5b5061013a610d28565b604051610147919061128c565b60405180910390f35b34801561015c57600080fd5b5061017760048036038101906101729190611421565b610d2e565b6040516101889594939291906114de565b60405180910390f35b34801561019d57600080fd5b506101a6610e2c565b6040516101b3919061128c565b60405180910390f35b3480156101c857600080fd5b506101e360048036038101906101de9190611421565b610e32565b6040516101f39493929190611553565b60405180910390f35b61021660048036038101906102119190611598565b610e8f565b005b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146102a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161029f9061167e565b60405180910390fd5b600083116102eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102e2906116ea565b60405180910390fd5b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000811480156103a057508473ffffffffffffffffffffffffffffffffffffffff1660008083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b1561040757600260008154809291906103b890611739565b91905055905080600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506104ab565b60008082815260200190815260200160002060030160009054906101000a900460ff1615610491576002600081548092919061044290611739565b91905055905080600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506104aa565b6000808281526020019081526020016000206001015491505b5b60008060008381526020019081526020016000209050858160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084816001018190555083426105199190611781565b81600201819055507fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e982604051610550919061128c565b60405180910390a150509392505050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461066f57600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461066e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161066590611827565b60405180910390fd5b5b6004548484905011156106b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ae90611893565b60405180910390fd5b60005b8484905081101561077857600360008281526020019081526020016000206004016040516106e891906119b6565b6040518091039020858583818110610703576107026119cd565b5b90506020028101906107159190611a0b565b604051610723929190611aa2565b60405180910390201461076b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161076290611b07565b60405180910390fd5b80806001019150506106ba565b50600080600090505b858590508110156107bd576003600082815260200190815260200160002060030154826107ae9190611781565b91508080600101915050610781565b507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639fbe7c7382898987604051806040016040528060018152602001600381525060405180604001604052806001815260200160028152506064600160006040518a63ffffffff1660e01b8152600401610855989796959493929190611c7b565b60206040518083038185885af1158015610873573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906108989190611d1e565b915060005b85859050811015610993577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663975762b3846003600085815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600360008681526020019081526020016000206002015460016040518563ffffffff1660e01b81526004016109549493929190611d4b565b600060405180830381600087803b15801561096e57600080fd5b505af1158015610982573d6000803e3d6000fd5b50505050808060010191505061089d565b50600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ab6577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663975762b383600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660008060065481526020019081526020016000206001015460016040518563ffffffff1660e01b8152600401610a839493929190611d4b565b600060405180830381600087803b158015610a9d57600080fd5b505af1158015610ab1573d6000803e3d6000fd5b505050505b600454858590501015610c365760005b85859050600454610ad79190611d90565b811015610c1957600360008288889050610af19190611781565b8152602001908152602001600020600360008381526020019081526020016000206000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600282015481600201556003820154816003015560048201816004019081610c089190611fab565b509050508080600101915050610ac6565b5084849050600454610c2b9190611d90565b600481905550610c3f565b60006004819055505b610c47610fd4565b600681905550600080600654815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f672ebfecd081c72b12452a84f8b6d051a1f32cda55cdf8992251279a5408b5a5600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051610d1691906112b6565b60405180910390a15095945050505050565b60045481565b60036020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806002015490806003015490806004018054610da9906118e2565b80601f0160208091040260200160405190810160405280929190818152602001828054610dd5906118e2565b8015610e225780601f10610df757610100808354040283529160200191610e22565b820191906000526020600020905b815481529060010190602001808311610e0557829003601f168201915b5050505050905085565b60025481565b60006020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030160009054906101000a900460ff16905084565b60006003600060046000815480929190610ea890611739565b9190505581526020019081526020016000209050338160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550848160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508381600201819055503481600301819055508282826004019182610f6792919061209e565b507ff67a2314f80fd951705a8cb64e24285516f2937f5e0db904aa6d29f3bae1d02783838360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168460030154604051610fc5949392919061216e565b60405180910390a15050505050565b6000610fde611017565b90506000806000838152602001908152602001600020905060018160030160006101000a81548160ff0219169083151502179055505090565b60008060005b60025481101561109b5760008082815260200190815260200160002060030160009054906101000a900460ff1661108e5760008082815260200190815260200160002060020154421161108e57600080828152602001908152602001600020600101548261108b9190611781565b91505b808060010191505061101d565b50600081116110df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d6906121fa565b60405180910390fd5b600081446110ed9190612249565b9050600080600090505b6002548110156111855760008082815260200190815260200160002060030160009054906101000a900460ff16611178576000808281526020019081526020016000206002015442116111785760008082815260200190815260200160002060010154826111659190611781565b91508282111561117757809450611185565b5b80806001019150506110f7565b5050505090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006111c182611196565b9050919050565b6111d1816111b6565b81146111dc57600080fd5b50565b6000813590506111ee816111c8565b92915050565b6000819050919050565b611207816111f4565b811461121257600080fd5b50565b600081359050611224816111fe565b92915050565b6000806000606084860312156112435761124261118c565b5b6000611251868287016111df565b935050602061126286828701611215565b925050604061127386828701611215565b9150509250925092565b611286816111f4565b82525050565b60006020820190506112a1600083018461127d565b92915050565b6112b0816111b6565b82525050565b60006020820190506112cb60008301846112a7565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126112f6576112f56112d1565b5b8235905067ffffffffffffffff811115611313576113126112d6565b5b60208301915083600182028301111561132f5761132e6112db565b5b9250929050565b60008083601f84011261134c5761134b6112d1565b5b8235905067ffffffffffffffff811115611369576113686112d6565b5b602083019150836020820283011115611385576113846112db565b5b9250929050565b6000806000806000606086880312156113a8576113a761118c565b5b600086013567ffffffffffffffff8111156113c6576113c5611191565b5b6113d2888289016112e0565b9550955050602086013567ffffffffffffffff8111156113f5576113f4611191565b5b61140188828901611336565b9350935050604061141488828901611215565b9150509295509295909350565b6000602082840312156114375761143661118c565b5b600061144584828501611215565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561148857808201518184015260208101905061146d565b60008484015250505050565b6000601f19601f8301169050919050565b60006114b08261144e565b6114ba8185611459565b93506114ca81856020860161146a565b6114d381611494565b840191505092915050565b600060a0820190506114f360008301886112a7565b61150060208301876112a7565b61150d604083018661127d565b61151a606083018561127d565b818103608083015261152c81846114a5565b90509695505050505050565b60008115159050919050565b61154d81611538565b82525050565b600060808201905061156860008301876112a7565b611575602083018661127d565b611582604083018561127d565b61158f6060830184611544565b95945050505050565b600080600080606085870312156115b2576115b161118c565b5b60006115c0878288016111df565b94505060206115d187828801611215565b935050604085013567ffffffffffffffff8111156115f2576115f1611191565b5b6115fe878288016112e0565b925092505092959194509250565b7f616363657074417661696c6162696c697479206d757374206f6e6c792062652060008201527f63616c6c65642062792044414f20636f6e747261637400000000000000000000602082015250565b6000611668603683611459565b91506116738261160c565b604082019050919050565b600060208201905081810360008301526116978161165b565b9050919050565b7f4e6f207374616b652070726f7669646564000000000000000000000000000000600082015250565b60006116d4601183611459565b91506116df8261169e565b602082019050919050565b60006020820190508181036000830152611703816116c7565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611744826111f4565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036117765761177561170a565b5b600182019050919050565b600061178c826111f4565b9150611797836111f4565b92508282019050808211156117af576117ae61170a565b5b92915050565b7f426174636820726573756c74206d757374206265207375626d6974746564206260008201527f792063757272656e7420626174636820776f726b657200000000000000000000602082015250565b6000611811603683611459565b915061181c826117b5565b604082019050919050565b6000602082019050818103600083015261184081611804565b9050919050565b7f42617463682073697a6520746f6f206c61726765000000000000000000000000600082015250565b600061187d601483611459565b915061188882611847565b602082019050919050565b600060208201905081810360008301526118ac81611870565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806118fa57607f821691505b60208210810361190d5761190c6118b3565b5b50919050565b600081905092915050565b60008190508160005260206000209050919050565b60008154611940816118e2565b61194a8186611913565b94506001821660008114611965576001811461197a576119ad565b60ff19831686528115158202860193506119ad565b6119838561191e565b60005b838110156119a557815481890152600182019150602081019050611986565b838801955050505b50505092915050565b60006119c28284611933565b915081905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600080fd5b600080fd5b600080fd5b60008083356001602003843603038112611a2857611a276119fc565b5b80840192508235915067ffffffffffffffff821115611a4a57611a49611a01565b5b602083019250600182023603831315611a6657611a65611a06565b5b509250929050565b82818337600083830152505050565b6000611a898385611913565b9350611a96838584611a6e565b82840190509392505050565b6000611aaf828486611a7d565b91508190509392505050565b7f4261746368206974656d206d69736d6174636800000000000000000000000000600082015250565b6000611af1601383611459565b9150611afc82611abb565b602082019050919050565b60006020820190508181036000830152611b2081611ae4565b9050919050565b6000611b338385611459565b9350611b40838584611a6e565b611b4983611494565b840190509392505050565b600060029050919050565b600081905092915050565b6000819050919050565b611b7d816111f4565b82525050565b6000611b8f8383611b74565b60208301905092915050565b6000602082019050919050565b611bb181611b54565b611bbb8184611b5f565b9250611bc682611b6a565b8060005b83811015611bf7578151611bde8782611b83565b9650611be983611b9b565b925050600181019050611bca565b505050505050565b6000819050919050565b6000819050919050565b6000611c2e611c29611c2484611bff565b611c09565b6111f4565b9050919050565b611c3e81611c13565b82525050565b600082825260208201905092915050565b50565b6000611c65600083611c44565b9150611c7082611c55565b600082019050919050565b6000610140820190508181036000830152611c97818a8c611b27565b9050611ca6602083018961127d565b611cb36040830188611ba8565b611cc06080830187611ba8565b611ccd60c0830186611c35565b611cda60e0830185611544565b611ce8610100830184611544565b818103610120830152611cfa81611c58565b90509998505050505050505050565b600081519050611d18816111fe565b92915050565b600060208284031215611d3457611d3361118c565b5b6000611d4284828501611d09565b91505092915050565b6000608082019050611d60600083018761127d565b611d6d60208301866112a7565b611d7a604083018561127d565b611d876060830184611544565b95945050505050565b6000611d9b826111f4565b9150611da6836111f4565b9250828203905081811115611dbe57611dbd61170a565b5b92915050565b600081549050611dd3816118e2565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302611e6b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82611e2e565b611e758683611e2e565b95508019841693508086168417925050509392505050565b6000611ea8611ea3611e9e846111f4565b611c09565b6111f4565b9050919050565b6000819050919050565b611ec283611e8d565b611ed6611ece82611eaf565b848454611e3b565b825550505050565b600090565b611eeb611ede565b611ef6818484611eb9565b505050565b5b81811015611f1a57611f0f600082611ee3565b600181019050611efc565b5050565b601f821115611f5f57611f3081611e09565b611f3984611e1e565b81016020851015611f48578190505b611f5c611f5485611e1e565b830182611efb565b50505b505050565b600082821c905092915050565b6000611f8260001984600802611f64565b1980831691505092915050565b6000611f9b8383611f71565b9150826002028217905092915050565b818103611fb9575050612091565b611fc282611dc4565b67ffffffffffffffff811115611fdb57611fda611dda565b5b611fe582546118e2565b611ff0828285611f1e565b6000601f83116001811461201f576000841561200d578287015490505b6120178582611f8f565b86555061208a565b601f19841661202d87611e09565b965061203886611e09565b60005b828110156120605784890154825560018201915060018501945060208101905061203b565b8683101561207d5784890154612079601f891682611f71565b8355505b6001600288020188555050505b5050505050505b565b600082905092915050565b6120a88383612093565b67ffffffffffffffff8111156120c1576120c0611dda565b5b6120cb82546118e2565b6120d6828285611f1e565b6000601f83116001811461210557600084156120f3578287013590505b6120fd8582611f8f565b865550612165565b601f19841661211386611e09565b60005b8281101561213b57848901358255600182019150602085019450602081019050612116565b868310156121585784890135612154601f891682611f71565b8355505b6001600288020188555050505b50505050505050565b60006060820190508181036000830152612189818688611b27565b905061219860208301856112a7565b6121a5604083018461127d565b95945050505050565b7f4e6f20617661696c61626c6520776f726b6572207374616b6573000000000000600082015250565b60006121e4601a83611459565b91506121ef826121ae565b602082019050919050565b60006020820190508181036000830152612213816121d7565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612254826111f4565b915061225f836111f4565b92508261226f5761226e61221a565b5b82820690509291505056fea2646970667358221220115a2824c33b295f7dc9f549eab70cbadd2c73f626a90b55c2592c40e01cc52364736f6c63430008180033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/frontend/contractArtifacts/Work2.json b/frontend/contractArtifacts/Work2.json index ceacd40..7e8c724 100644 --- a/frontend/contractArtifacts/Work2.json +++ b/frontend/contractArtifacts/Work2.json @@ -432,8 +432,8 @@ "type": "function" } ], - "bytecode": "0x60c06040523480156200001157600080fd5b5060405162002cc738038062002cc7833981810160405281019062000037919062000246565b8383838383838282808073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505050508060048190555081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050508173ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250505050505050505050620002b8565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620001358262000108565b9050919050565b6000620001498262000128565b9050919050565b6200015b816200013c565b81146200016757600080fd5b50565b6000815190506200017b8162000150565b92915050565b60006200018e8262000128565b9050919050565b620001a08162000181565b8114620001ac57600080fd5b50565b600081519050620001c08162000195565b92915050565b6000620001d38262000128565b9050919050565b620001e581620001c6565b8114620001f157600080fd5b50565b6000815190506200020581620001da565b92915050565b6000819050919050565b62000220816200020b565b81146200022c57600080fd5b50565b600081519050620002408162000215565b92915050565b6000806000806080858703121562000263576200026262000103565b5b600062000273878288016200016a565b94505060206200028687828801620001af565b93505060406200029987828801620001f4565b9250506060620002ac878288016200022f565b91505092959194509250565b60805160a0516129d4620002f360003960008181610ca90152610d1f01526000818161046601528181610bb30152610c4801526129d46000f3fe6080604052600436106100c25760003560e01c806399ad6c561161007f578063cf37625611610059578063cf37625614610266578063d0fae95f146102a4578063d5a44f86146102cd578063d76b67941461030d576100c2565b806399ad6c56146101f4578063a035b1fe14610210578063c4a9e1161461023b576100c2565b80630d0271d6146100c7578063216ed6ad146100e35780635badbe4c14610120578063815a05721461014b57806381d12c5814610188578063854b6a4f146101cb575b600080fd5b6100e160048036038101906100dc919061144e565b610338565b005b3480156100ef57600080fd5b5061010a6004803603810190610105919061152f565b610462565b6040516101179190611591565b60405180910390f35b34801561012c57600080fd5b506101356107ab565b6040516101429190611591565b60405180910390f35b34801561015757600080fd5b50610172600480360381019061016d9190611602565b6107b1565b60405161017f9190611591565b60405180910390f35b34801561019457600080fd5b506101af60048036038101906101aa9190611676565b610830565b6040516101c297969594939291906117d4565b60405180910390f35b3480156101d757600080fd5b506101f260048036038101906101ed919061187d565b6109bc565b005b61020e600480360381019061020991906118df565b610de3565b005b34801561021c57600080fd5b50610225610f2c565b6040516102329190611591565b60405180910390f35b34801561024757600080fd5b50610250610f32565b60405161025d9190611591565b60405180910390f35b34801561027257600080fd5b5061028d60048036038101906102889190611676565b610f38565b60405161029b929190611953565b60405180910390f35b3480156102b057600080fd5b506102cb60048036038101906102c691906119d2565b610f5c565b005b3480156102d957600080fd5b506102f460048036038101906102ef9190611676565b611194565b6040516103049493929190611a67565b60405180910390f35b34801561031957600080fd5b506103226111f1565b60405161032f9190611591565b60405180910390f35b60045434101561037d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161037490611af8565b60405180910390fd5b60006008600081548092919061039290611b47565b9190505590506000600760008381526020019081526020016000209050338160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503481600101819055506104036111f7565b8160030181905550838382600401918261041e929190611dd5565b507fd9e7f38a71691fb1db2da17057c03d381a42a9925350883f10e8e5d0bca4a3b4828260030154604051610454929190611953565b60405180910390a150505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146104f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104e990611f17565b60405180910390fd5b60008311610535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161052c90611f83565b60405180910390fd5b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000811480156105ea57508473ffffffffffffffffffffffffffffffffffffffff1660008083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b15610651576002600081548092919061060290611b47565b91905055905080600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506106f5565b60008082815260200190815260200160002060030160009054906101000a900460ff16156106db576002600081548092919061068c90611b47565b91905055905080600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506106f4565b6000808281526020019081526020016000206001015491505b5b60008060008381526020019081526020016000209050858160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084816001018190555083426107639190611fa3565b81600201819055507fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e98260405161079a9190611591565b60405180910390a150509392505050565b60085481565b60008083838101906107c39190611676565b9050600060056000838152602001908152602001600020905080600001546004819055507f6a3843c02c26620842ae8496fd3afcb44b27463b3808e2ccdae4bcee5a2e3f208260045460405161081a929190611953565b60405180910390a1600092505050949350505050565b60076020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020160009054906101000a900460ff169080600301549080600401805461089890611bf8565b80601f01602080910402602001604051908101604052809291908181526020018280546108c490611bf8565b80156109115780601f106108e657610100808354040283529160200191610911565b820191906000526020600020905b8154815290600101906020018083116108f457829003601f168201915b50505050509080600501805461092690611bf8565b80601f016020809104026020016040519081016040528092919081815260200182805461095290611bf8565b801561099f5780601f106109745761010080835404028352916020019161099f565b820191906000526020600020905b81548152906001019060200180831161098257829003601f168201915b5050505050908060070160009054906101000a900460ff16905087565b6000600760008481526020019081526020016000209050600160038111156109e7576109e66116b2565b5b8160020160009054906101000a900460ff166003811115610a0b57610a0a6116b2565b5b14610a4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4290612023565b60405180910390fd5b600080600083600301548152602001908152602001600020905060028260020160006101000a81548160ff02191690836003811115610a8d57610a8c6116b2565b5b0217905550828260070160006101000a81548160ff0219169083151502179055507f470d2978e081461f6d144c091dfd83ec06e6011da0b03bd1c0121b7fb71370dc8484604051610adf929190612043565b60405180910390a16000600167ffffffffffffffff811115610b0457610b03611b9a565b5b604051908082528060200260200182016040528015610b3d57816020015b610b2a6113af565b815260200190600190039081610b225790505b5090506040518060400160405280620f424081526020018360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681525081600081518110610ba657610ba561206c565b5b60200260200101819052507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e5b4d8278285600501866006016040518463ffffffff1660e01b8152600401610c1493929190612409565b600060405180830381600087803b158015610c2e57600080fd5b505af1158015610c42573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635ffc70048360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000085600101546040518463ffffffff1660e01b8152600401610ceb93929190612455565b600060405180830381600087803b158015610d0557600080fd5b505af1158015610d19573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f85c5a8a84600101548460000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168560010154876005016040518563ffffffff1660e01b8152600401610daa9392919061248c565b6000604051808303818588803b158015610dc357600080fd5b505af1158015610dd7573d6000803e3d6000fd5b50505050505050505050565b600060066000815480929190610df890611b47565b9190505590506000600560008381526020019081526020016000209050858160000181905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cac152a434878787600188604051602001610e739190611591565b6040516020818303038152906040526040518763ffffffff1660e01b8152600401610ea2959493929190612574565b60206040518083038185885af1158015610ec0573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610ee591906125de565b81600101819055507f71eae802097e4e77c5345dee7f35d74ac0ae45eb5a456fdaed0de4d141fc5d8c82604051610f1c9190611591565b60405180910390a1505050505050565b60045481565b60025481565b60056020528060005260406000206000915090508060000154908060010154905082565b600060076000878152602001908152602001600020905060006003811115610f8757610f866116b2565b5b8160020160009054906101000a900460ff166003811115610fab57610faa6116b2565b5b14610feb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe290612657565b60405180910390fd5b60008060008360030154815260200190815260200160002090503373ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611097576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108e906126e9565b60405180910390fd5b60018260020160006101000a81548160ff021916908360038111156110bf576110be6116b2565b5b021790555085858360050191826110d7929190611dd5565b5060005b8484905081101561115357826006018585838181106110fd576110fc61206c565b5b905060200281019061110f9190612718565b9080600181540180825580915050600190039060005260206000209060020201600090919091909150818161114491906128c4565b505080806001019150506110db565b507ffaecd3b4db089bf25a48306100dd5fb2152e3887c7815b2b221dbb7da2f8e8dc876040516111839190611591565b60405180910390a150505050505050565b60006020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030160009054906101000a900460ff16905084565b60065481565b600061120161123a565b90506000806000838152602001908152602001600020905060018160030160006101000a81548160ff0219169083151502179055505090565b60008060005b6002548110156112be5760008082815260200190815260200160002060030160009054906101000a900460ff166112b1576000808281526020019081526020016000206002015442116112b15760008082815260200190815260200160002060010154826112ae9190611fa3565b91505b8080600101915050611240565b5060008111611302576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f99061291e565b60405180910390fd5b60008144611310919061296d565b9050600080600090505b6002548110156113a85760008082815260200190815260200160002060030160009054906101000a900460ff1661139b5760008082815260200190815260200160002060020154421161139b5760008082815260200190815260200160002060010154826113889190611fa3565b91508282111561139a578094506113a8565b5b808060010191505061131a565b5050505090565b604051806040016040528060008152602001600073ffffffffffffffffffffffffffffffffffffffff1681525090565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f84011261140e5761140d6113e9565b5b8235905067ffffffffffffffff81111561142b5761142a6113ee565b5b602083019150836001820283011115611447576114466113f3565b5b9250929050565b60008060208385031215611465576114646113df565b5b600083013567ffffffffffffffff811115611483576114826113e4565b5b61148f858286016113f8565b92509250509250929050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006114c68261149b565b9050919050565b6114d6816114bb565b81146114e157600080fd5b50565b6000813590506114f3816114cd565b92915050565b6000819050919050565b61150c816114f9565b811461151757600080fd5b50565b60008135905061152981611503565b92915050565b600080600060608486031215611548576115476113df565b5b6000611556868287016114e4565b93505060206115678682870161151a565b92505060406115788682870161151a565b9150509250925092565b61158b816114f9565b82525050565b60006020820190506115a66000830184611582565b92915050565b60008083601f8401126115c2576115c16113e9565b5b8235905067ffffffffffffffff8111156115df576115de6113ee565b5b6020830191508360018202830111156115fb576115fa6113f3565b5b9250929050565b6000806000806060858703121561161c5761161b6113df565b5b600061162a8782880161151a565b945050602061163b8782880161151a565b935050604085013567ffffffffffffffff81111561165c5761165b6113e4565b5b611668878288016115ac565b925092505092959194509250565b60006020828403121561168c5761168b6113df565b5b600061169a8482850161151a565b91505092915050565b6116ac816114bb565b82525050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600481106116f2576116f16116b2565b5b50565b6000819050611703826116e1565b919050565b6000611713826116f5565b9050919050565b61172381611708565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611763578082015181840152602081019050611748565b60008484015250505050565b6000601f19601f8301169050919050565b600061178b82611729565b6117958185611734565b93506117a5818560208601611745565b6117ae8161176f565b840191505092915050565b60008115159050919050565b6117ce816117b9565b82525050565b600060e0820190506117e9600083018a6116a3565b6117f66020830189611582565b611803604083018861171a565b6118106060830187611582565b81810360808301526118228186611780565b905081810360a08301526118368185611780565b905061184560c08301846117c5565b98975050505050505050565b61185a816117b9565b811461186557600080fd5b50565b60008135905061187781611851565b92915050565b60008060408385031215611894576118936113df565b5b60006118a28582860161151a565b92505060206118b385828601611868565b9150509250929050565b6000819050826020600302820111156118d9576118d86113f3565b5b92915050565b60008060008060a085870312156118f9576118f86113df565b5b60006119078782880161151a565b945050602085013567ffffffffffffffff811115611928576119276113e4565b5b611934878288016113f8565b93509350506040611947878288016118bd565b91505092959194509250565b60006040820190506119686000830185611582565b6119756020830184611582565b9392505050565b60008083601f840112611992576119916113e9565b5b8235905067ffffffffffffffff8111156119af576119ae6113ee565b5b6020830191508360208202830111156119cb576119ca6113f3565b5b9250929050565b6000806000806000606086880312156119ee576119ed6113df565b5b60006119fc8882890161151a565b955050602086013567ffffffffffffffff811115611a1d57611a1c6113e4565b5b611a29888289016113f8565b9450945050604086013567ffffffffffffffff811115611a4c57611a4b6113e4565b5b611a588882890161197c565b92509250509295509295909350565b6000608082019050611a7c60008301876116a3565b611a896020830186611582565b611a966040830185611582565b611aa360608301846117c5565b95945050505050565b7f496e73756666696369656e742066656500000000000000000000000000000000600082015250565b6000611ae2601083611734565b9150611aed82611aac565b602082019050919050565b60006020820190508181036000830152611b1181611ad5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611b52826114f9565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611b8457611b83611b18565b5b600182019050919050565b600082905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611c1057607f821691505b602082108103611c2357611c22611bc9565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302611c8b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82611c4e565b611c958683611c4e565b95508019841693508086168417925050509392505050565b6000819050919050565b6000611cd2611ccd611cc8846114f9565b611cad565b6114f9565b9050919050565b6000819050919050565b611cec83611cb7565b611d00611cf882611cd9565b848454611c5b565b825550505050565b600090565b611d15611d08565b611d20818484611ce3565b505050565b5b81811015611d4457611d39600082611d0d565b600181019050611d26565b5050565b601f821115611d8957611d5a81611c29565b611d6384611c3e565b81016020851015611d72578190505b611d86611d7e85611c3e565b830182611d25565b50505b505050565b600082821c905092915050565b6000611dac60001984600802611d8e565b1980831691505092915050565b6000611dc58383611d9b565b9150826002028217905092915050565b611ddf8383611b8f565b67ffffffffffffffff811115611df857611df7611b9a565b5b611e028254611bf8565b611e0d828285611d48565b6000601f831160018114611e3c5760008415611e2a578287013590505b611e348582611db9565b865550611e9c565b601f198416611e4a86611c29565b60005b82811015611e7257848901358255600182019150602085019450602081019050611e4d565b86831015611e8f5784890135611e8b601f891682611d9b565b8355505b6001600288020188555050505b50505050505050565b7f616363657074417661696c6162696c697479206d757374206f6e6c792062652060008201527f63616c6c65642062792044414f20636f6e747261637400000000000000000000602082015250565b6000611f01603683611734565b9150611f0c82611ea5565b604082019050919050565b60006020820190508181036000830152611f3081611ef4565b9050919050565b7f4e6f207374616b652070726f7669646564000000000000000000000000000000600082015250565b6000611f6d601183611734565b9150611f7882611f37565b602082019050919050565b60006020820190508181036000830152611f9c81611f60565b9050919050565b6000611fae826114f9565b9150611fb9836114f9565b9250828201905080821115611fd157611fd0611b18565b5b92915050565b7f537461747573206d7573742062652045766964656e63655375626d6974746564600082015250565b600061200d602083611734565b915061201882611fd7565b602082019050919050565b6000602082019050818103600083015261203c81612000565b9050919050565b60006040820190506120586000830185611582565b61206560208301846117c5565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6120d0816114f9565b82525050565b6120df816114bb565b82525050565b6040820160008201516120fb60008501826120c7565b50602082015161210e60208501826120d6565b50505050565b600061212083836120e5565b60408301905092915050565b6000602082019050919050565b60006121448261209b565b61214e81856120a6565b9350612159836120b7565b8060005b8381101561218a5781516121718882612114565b975061217c8361212c565b92505060018101905061215d565b5085935050505092915050565b600081546121a481611bf8565b6121ae8186611734565b945060018216600081146121c957600181146121df57612212565b60ff198316865281151560200286019350612212565b6121e885611c29565b60005b8381101561220a578154818901526001820191506020810190506121eb565b808801955050505b50505092915050565b600081549050919050565b600082825260208201905092915050565b60008190508160005260206000209050919050565b60008160001c9050919050565b6000819050919050565b60006122766122718361224c565b612259565b9050919050565b6000819050919050565b6122908161227d565b82525050565b600082825260208201905092915050565b600081546122b481611bf8565b6122be8186612296565b945060018216600081146122d957600181146122ef57612322565b60ff198316865281151560200286019350612322565b6122f885611c29565b60005b8381101561231a578154818901526001820191506020810190506122fb565b808801955050505b50505092915050565b600060408301600080840154905061234281612263565b61234f6000870182612287565b5060018401858303602087015261236683826122a7565b925050819250505092915050565b6000612380838361232b565b905092915050565b6000600282019050919050565b60006123a08261221b565b6123aa8185612226565b9350836020820285016123bc85612237565b8060005b858110156123f7578484038952816123d88582612374565b94506123e383612388565b925060208a019950506001810190506123c0565b50829750879550505050505092915050565b600060608201905081810360008301526124238186612139565b905081810360208301526124378185612197565b9050818103604083015261244b8184612395565b9050949350505050565b600060608201905061246a60008301866116a3565b61247760208301856116a3565b6124846040830184611582565b949350505050565b60006060820190506124a160008301866116a3565b6124ae6020830185611582565b81810360408301526124c08184612197565b9050949350505050565b82818337600083830152505050565b60006124e58385611734565b93506124f28385846124ca565b6124fb8361176f565b840190509392505050565b82818337505050565b61251b60608383612506565b5050565b600081519050919050565b600082825260208201905092915050565b60006125468261251f565b612550818561252a565b9350612560818560208601611745565b6125698161176f565b840191505092915050565b600060c082019050818103600083015261258f8187896124d9565b905061259e602083018661250f565b6125ab60808301856117c5565b81810360a08301526125bd818461253b565b90509695505050505050565b6000815190506125d881611503565b92915050565b6000602082840312156125f4576125f36113df565b5b6000612602848285016125c9565b91505092915050565b7f537461747573206d757374206265205265717565737465640000000000000000600082015250565b6000612641601883611734565b915061264c8261260b565b602082019050919050565b6000602082019050818103600083015261267081612634565b9050919050565b7f576f726b65722063616e206f6e6c79207375626d69742065766964656e63652060008201527f666f7220776f726b2074686579206172652061737369676e6564000000000000602082015250565b60006126d3603a83611734565b91506126de82612677565b604082019050919050565b60006020820190508181036000830152612702816126c6565b9050919050565b600080fd5b600080fd5b600080fd5b60008235600160400383360303811261273457612733612709565b5b80830191505092915050565b6127498161227d565b811461275457600080fd5b50565b6000813561276481612740565b80915050919050565b60008160001b9050919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6127a68461276d565b9350801983169250808416831791505092915050565b60006127d76127d26127cd8461227d565b611cad565b61227d565b9050919050565b6000819050919050565b6127f1826127bc565b6128046127fd826127de565b835461277a565b8255505050565b6000808335600160200384360303811261282857612827612709565b5b80840192508235915067ffffffffffffffff82111561284a5761284961270e565b5b60208301925060018202360383131561286657612865612713565b5b509250929050565b612879838383611dd5565b505050565b60008101600083018061289081612757565b905061289c81846127e8565b50505060018101602083016128b1818561280b565b6128bc81838661286e565b505050505050565b6128ce828261287e565b5050565b7f4e6f20617661696c61626c6520776f726b6572207374616b6573000000000000600082015250565b6000612908601a83611734565b9150612913826128d2565b602082019050919050565b60006020820190508181036000830152612937816128fb565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612978826114f9565b9150612983836114f9565b9250826129935761299261293e565b5b82820690509291505056fea2646970667358221220a122b09048867f0c0091111f882f1faeb3fef05b9432d6255addf03d4f2c8fb364736f6c63430008180033", - "deployedBytecode": "0x6080604052600436106100c25760003560e01c806399ad6c561161007f578063cf37625611610059578063cf37625614610266578063d0fae95f146102a4578063d5a44f86146102cd578063d76b67941461030d576100c2565b806399ad6c56146101f4578063a035b1fe14610210578063c4a9e1161461023b576100c2565b80630d0271d6146100c7578063216ed6ad146100e35780635badbe4c14610120578063815a05721461014b57806381d12c5814610188578063854b6a4f146101cb575b600080fd5b6100e160048036038101906100dc919061144e565b610338565b005b3480156100ef57600080fd5b5061010a6004803603810190610105919061152f565b610462565b6040516101179190611591565b60405180910390f35b34801561012c57600080fd5b506101356107ab565b6040516101429190611591565b60405180910390f35b34801561015757600080fd5b50610172600480360381019061016d9190611602565b6107b1565b60405161017f9190611591565b60405180910390f35b34801561019457600080fd5b506101af60048036038101906101aa9190611676565b610830565b6040516101c297969594939291906117d4565b60405180910390f35b3480156101d757600080fd5b506101f260048036038101906101ed919061187d565b6109bc565b005b61020e600480360381019061020991906118df565b610de3565b005b34801561021c57600080fd5b50610225610f2c565b6040516102329190611591565b60405180910390f35b34801561024757600080fd5b50610250610f32565b60405161025d9190611591565b60405180910390f35b34801561027257600080fd5b5061028d60048036038101906102889190611676565b610f38565b60405161029b929190611953565b60405180910390f35b3480156102b057600080fd5b506102cb60048036038101906102c691906119d2565b610f5c565b005b3480156102d957600080fd5b506102f460048036038101906102ef9190611676565b611194565b6040516103049493929190611a67565b60405180910390f35b34801561031957600080fd5b506103226111f1565b60405161032f9190611591565b60405180910390f35b60045434101561037d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161037490611af8565b60405180910390fd5b60006008600081548092919061039290611b47565b9190505590506000600760008381526020019081526020016000209050338160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503481600101819055506104036111f7565b8160030181905550838382600401918261041e929190611dd5565b507fd9e7f38a71691fb1db2da17057c03d381a42a9925350883f10e8e5d0bca4a3b4828260030154604051610454929190611953565b60405180910390a150505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146104f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104e990611f17565b60405180910390fd5b60008311610535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161052c90611f83565b60405180910390fd5b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000811480156105ea57508473ffffffffffffffffffffffffffffffffffffffff1660008083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b15610651576002600081548092919061060290611b47565b91905055905080600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506106f5565b60008082815260200190815260200160002060030160009054906101000a900460ff16156106db576002600081548092919061068c90611b47565b91905055905080600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506106f4565b6000808281526020019081526020016000206001015491505b5b60008060008381526020019081526020016000209050858160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084816001018190555083426107639190611fa3565b81600201819055507fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e98260405161079a9190611591565b60405180910390a150509392505050565b60085481565b60008083838101906107c39190611676565b9050600060056000838152602001908152602001600020905080600001546004819055507f6a3843c02c26620842ae8496fd3afcb44b27463b3808e2ccdae4bcee5a2e3f208260045460405161081a929190611953565b60405180910390a1600092505050949350505050565b60076020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020160009054906101000a900460ff169080600301549080600401805461089890611bf8565b80601f01602080910402602001604051908101604052809291908181526020018280546108c490611bf8565b80156109115780601f106108e657610100808354040283529160200191610911565b820191906000526020600020905b8154815290600101906020018083116108f457829003601f168201915b50505050509080600501805461092690611bf8565b80601f016020809104026020016040519081016040528092919081815260200182805461095290611bf8565b801561099f5780601f106109745761010080835404028352916020019161099f565b820191906000526020600020905b81548152906001019060200180831161098257829003601f168201915b5050505050908060070160009054906101000a900460ff16905087565b6000600760008481526020019081526020016000209050600160038111156109e7576109e66116b2565b5b8160020160009054906101000a900460ff166003811115610a0b57610a0a6116b2565b5b14610a4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4290612023565b60405180910390fd5b600080600083600301548152602001908152602001600020905060028260020160006101000a81548160ff02191690836003811115610a8d57610a8c6116b2565b5b0217905550828260070160006101000a81548160ff0219169083151502179055507f470d2978e081461f6d144c091dfd83ec06e6011da0b03bd1c0121b7fb71370dc8484604051610adf929190612043565b60405180910390a16000600167ffffffffffffffff811115610b0457610b03611b9a565b5b604051908082528060200260200182016040528015610b3d57816020015b610b2a6113af565b815260200190600190039081610b225790505b5090506040518060400160405280620f424081526020018360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681525081600081518110610ba657610ba561206c565b5b60200260200101819052507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e5b4d8278285600501866006016040518463ffffffff1660e01b8152600401610c1493929190612409565b600060405180830381600087803b158015610c2e57600080fd5b505af1158015610c42573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635ffc70048360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000085600101546040518463ffffffff1660e01b8152600401610ceb93929190612455565b600060405180830381600087803b158015610d0557600080fd5b505af1158015610d19573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f85c5a8a84600101548460000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168560010154876005016040518563ffffffff1660e01b8152600401610daa9392919061248c565b6000604051808303818588803b158015610dc357600080fd5b505af1158015610dd7573d6000803e3d6000fd5b50505050505050505050565b600060066000815480929190610df890611b47565b9190505590506000600560008381526020019081526020016000209050858160000181905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cac152a434878787600188604051602001610e739190611591565b6040516020818303038152906040526040518763ffffffff1660e01b8152600401610ea2959493929190612574565b60206040518083038185885af1158015610ec0573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610ee591906125de565b81600101819055507f71eae802097e4e77c5345dee7f35d74ac0ae45eb5a456fdaed0de4d141fc5d8c82604051610f1c9190611591565b60405180910390a1505050505050565b60045481565b60025481565b60056020528060005260406000206000915090508060000154908060010154905082565b600060076000878152602001908152602001600020905060006003811115610f8757610f866116b2565b5b8160020160009054906101000a900460ff166003811115610fab57610faa6116b2565b5b14610feb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe290612657565b60405180910390fd5b60008060008360030154815260200190815260200160002090503373ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611097576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108e906126e9565b60405180910390fd5b60018260020160006101000a81548160ff021916908360038111156110bf576110be6116b2565b5b021790555085858360050191826110d7929190611dd5565b5060005b8484905081101561115357826006018585838181106110fd576110fc61206c565b5b905060200281019061110f9190612718565b9080600181540180825580915050600190039060005260206000209060020201600090919091909150818161114491906128c4565b505080806001019150506110db565b507ffaecd3b4db089bf25a48306100dd5fb2152e3887c7815b2b221dbb7da2f8e8dc876040516111839190611591565b60405180910390a150505050505050565b60006020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030160009054906101000a900460ff16905084565b60065481565b600061120161123a565b90506000806000838152602001908152602001600020905060018160030160006101000a81548160ff0219169083151502179055505090565b60008060005b6002548110156112be5760008082815260200190815260200160002060030160009054906101000a900460ff166112b1576000808281526020019081526020016000206002015442116112b15760008082815260200190815260200160002060010154826112ae9190611fa3565b91505b8080600101915050611240565b5060008111611302576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f99061291e565b60405180910390fd5b60008144611310919061296d565b9050600080600090505b6002548110156113a85760008082815260200190815260200160002060030160009054906101000a900460ff1661139b5760008082815260200190815260200160002060020154421161139b5760008082815260200190815260200160002060010154826113889190611fa3565b91508282111561139a578094506113a8565b5b808060010191505061131a565b5050505090565b604051806040016040528060008152602001600073ffffffffffffffffffffffffffffffffffffffff1681525090565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f84011261140e5761140d6113e9565b5b8235905067ffffffffffffffff81111561142b5761142a6113ee565b5b602083019150836001820283011115611447576114466113f3565b5b9250929050565b60008060208385031215611465576114646113df565b5b600083013567ffffffffffffffff811115611483576114826113e4565b5b61148f858286016113f8565b92509250509250929050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006114c68261149b565b9050919050565b6114d6816114bb565b81146114e157600080fd5b50565b6000813590506114f3816114cd565b92915050565b6000819050919050565b61150c816114f9565b811461151757600080fd5b50565b60008135905061152981611503565b92915050565b600080600060608486031215611548576115476113df565b5b6000611556868287016114e4565b93505060206115678682870161151a565b92505060406115788682870161151a565b9150509250925092565b61158b816114f9565b82525050565b60006020820190506115a66000830184611582565b92915050565b60008083601f8401126115c2576115c16113e9565b5b8235905067ffffffffffffffff8111156115df576115de6113ee565b5b6020830191508360018202830111156115fb576115fa6113f3565b5b9250929050565b6000806000806060858703121561161c5761161b6113df565b5b600061162a8782880161151a565b945050602061163b8782880161151a565b935050604085013567ffffffffffffffff81111561165c5761165b6113e4565b5b611668878288016115ac565b925092505092959194509250565b60006020828403121561168c5761168b6113df565b5b600061169a8482850161151a565b91505092915050565b6116ac816114bb565b82525050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600481106116f2576116f16116b2565b5b50565b6000819050611703826116e1565b919050565b6000611713826116f5565b9050919050565b61172381611708565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611763578082015181840152602081019050611748565b60008484015250505050565b6000601f19601f8301169050919050565b600061178b82611729565b6117958185611734565b93506117a5818560208601611745565b6117ae8161176f565b840191505092915050565b60008115159050919050565b6117ce816117b9565b82525050565b600060e0820190506117e9600083018a6116a3565b6117f66020830189611582565b611803604083018861171a565b6118106060830187611582565b81810360808301526118228186611780565b905081810360a08301526118368185611780565b905061184560c08301846117c5565b98975050505050505050565b61185a816117b9565b811461186557600080fd5b50565b60008135905061187781611851565b92915050565b60008060408385031215611894576118936113df565b5b60006118a28582860161151a565b92505060206118b385828601611868565b9150509250929050565b6000819050826020600302820111156118d9576118d86113f3565b5b92915050565b60008060008060a085870312156118f9576118f86113df565b5b60006119078782880161151a565b945050602085013567ffffffffffffffff811115611928576119276113e4565b5b611934878288016113f8565b93509350506040611947878288016118bd565b91505092959194509250565b60006040820190506119686000830185611582565b6119756020830184611582565b9392505050565b60008083601f840112611992576119916113e9565b5b8235905067ffffffffffffffff8111156119af576119ae6113ee565b5b6020830191508360208202830111156119cb576119ca6113f3565b5b9250929050565b6000806000806000606086880312156119ee576119ed6113df565b5b60006119fc8882890161151a565b955050602086013567ffffffffffffffff811115611a1d57611a1c6113e4565b5b611a29888289016113f8565b9450945050604086013567ffffffffffffffff811115611a4c57611a4b6113e4565b5b611a588882890161197c565b92509250509295509295909350565b6000608082019050611a7c60008301876116a3565b611a896020830186611582565b611a966040830185611582565b611aa360608301846117c5565b95945050505050565b7f496e73756666696369656e742066656500000000000000000000000000000000600082015250565b6000611ae2601083611734565b9150611aed82611aac565b602082019050919050565b60006020820190508181036000830152611b1181611ad5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611b52826114f9565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611b8457611b83611b18565b5b600182019050919050565b600082905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611c1057607f821691505b602082108103611c2357611c22611bc9565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302611c8b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82611c4e565b611c958683611c4e565b95508019841693508086168417925050509392505050565b6000819050919050565b6000611cd2611ccd611cc8846114f9565b611cad565b6114f9565b9050919050565b6000819050919050565b611cec83611cb7565b611d00611cf882611cd9565b848454611c5b565b825550505050565b600090565b611d15611d08565b611d20818484611ce3565b505050565b5b81811015611d4457611d39600082611d0d565b600181019050611d26565b5050565b601f821115611d8957611d5a81611c29565b611d6384611c3e565b81016020851015611d72578190505b611d86611d7e85611c3e565b830182611d25565b50505b505050565b600082821c905092915050565b6000611dac60001984600802611d8e565b1980831691505092915050565b6000611dc58383611d9b565b9150826002028217905092915050565b611ddf8383611b8f565b67ffffffffffffffff811115611df857611df7611b9a565b5b611e028254611bf8565b611e0d828285611d48565b6000601f831160018114611e3c5760008415611e2a578287013590505b611e348582611db9565b865550611e9c565b601f198416611e4a86611c29565b60005b82811015611e7257848901358255600182019150602085019450602081019050611e4d565b86831015611e8f5784890135611e8b601f891682611d9b565b8355505b6001600288020188555050505b50505050505050565b7f616363657074417661696c6162696c697479206d757374206f6e6c792062652060008201527f63616c6c65642062792044414f20636f6e747261637400000000000000000000602082015250565b6000611f01603683611734565b9150611f0c82611ea5565b604082019050919050565b60006020820190508181036000830152611f3081611ef4565b9050919050565b7f4e6f207374616b652070726f7669646564000000000000000000000000000000600082015250565b6000611f6d601183611734565b9150611f7882611f37565b602082019050919050565b60006020820190508181036000830152611f9c81611f60565b9050919050565b6000611fae826114f9565b9150611fb9836114f9565b9250828201905080821115611fd157611fd0611b18565b5b92915050565b7f537461747573206d7573742062652045766964656e63655375626d6974746564600082015250565b600061200d602083611734565b915061201882611fd7565b602082019050919050565b6000602082019050818103600083015261203c81612000565b9050919050565b60006040820190506120586000830185611582565b61206560208301846117c5565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6120d0816114f9565b82525050565b6120df816114bb565b82525050565b6040820160008201516120fb60008501826120c7565b50602082015161210e60208501826120d6565b50505050565b600061212083836120e5565b60408301905092915050565b6000602082019050919050565b60006121448261209b565b61214e81856120a6565b9350612159836120b7565b8060005b8381101561218a5781516121718882612114565b975061217c8361212c565b92505060018101905061215d565b5085935050505092915050565b600081546121a481611bf8565b6121ae8186611734565b945060018216600081146121c957600181146121df57612212565b60ff198316865281151560200286019350612212565b6121e885611c29565b60005b8381101561220a578154818901526001820191506020810190506121eb565b808801955050505b50505092915050565b600081549050919050565b600082825260208201905092915050565b60008190508160005260206000209050919050565b60008160001c9050919050565b6000819050919050565b60006122766122718361224c565b612259565b9050919050565b6000819050919050565b6122908161227d565b82525050565b600082825260208201905092915050565b600081546122b481611bf8565b6122be8186612296565b945060018216600081146122d957600181146122ef57612322565b60ff198316865281151560200286019350612322565b6122f885611c29565b60005b8381101561231a578154818901526001820191506020810190506122fb565b808801955050505b50505092915050565b600060408301600080840154905061234281612263565b61234f6000870182612287565b5060018401858303602087015261236683826122a7565b925050819250505092915050565b6000612380838361232b565b905092915050565b6000600282019050919050565b60006123a08261221b565b6123aa8185612226565b9350836020820285016123bc85612237565b8060005b858110156123f7578484038952816123d88582612374565b94506123e383612388565b925060208a019950506001810190506123c0565b50829750879550505050505092915050565b600060608201905081810360008301526124238186612139565b905081810360208301526124378185612197565b9050818103604083015261244b8184612395565b9050949350505050565b600060608201905061246a60008301866116a3565b61247760208301856116a3565b6124846040830184611582565b949350505050565b60006060820190506124a160008301866116a3565b6124ae6020830185611582565b81810360408301526124c08184612197565b9050949350505050565b82818337600083830152505050565b60006124e58385611734565b93506124f28385846124ca565b6124fb8361176f565b840190509392505050565b82818337505050565b61251b60608383612506565b5050565b600081519050919050565b600082825260208201905092915050565b60006125468261251f565b612550818561252a565b9350612560818560208601611745565b6125698161176f565b840191505092915050565b600060c082019050818103600083015261258f8187896124d9565b905061259e602083018661250f565b6125ab60808301856117c5565b81810360a08301526125bd818461253b565b90509695505050505050565b6000815190506125d881611503565b92915050565b6000602082840312156125f4576125f36113df565b5b6000612602848285016125c9565b91505092915050565b7f537461747573206d757374206265205265717565737465640000000000000000600082015250565b6000612641601883611734565b915061264c8261260b565b602082019050919050565b6000602082019050818103600083015261267081612634565b9050919050565b7f576f726b65722063616e206f6e6c79207375626d69742065766964656e63652060008201527f666f7220776f726b2074686579206172652061737369676e6564000000000000602082015250565b60006126d3603a83611734565b91506126de82612677565b604082019050919050565b60006020820190508181036000830152612702816126c6565b9050919050565b600080fd5b600080fd5b600080fd5b60008235600160400383360303811261273457612733612709565b5b80830191505092915050565b6127498161227d565b811461275457600080fd5b50565b6000813561276481612740565b80915050919050565b60008160001b9050919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6127a68461276d565b9350801983169250808416831791505092915050565b60006127d76127d26127cd8461227d565b611cad565b61227d565b9050919050565b6000819050919050565b6127f1826127bc565b6128046127fd826127de565b835461277a565b8255505050565b6000808335600160200384360303811261282857612827612709565b5b80840192508235915067ffffffffffffffff82111561284a5761284961270e565b5b60208301925060018202360383131561286657612865612713565b5b509250929050565b612879838383611dd5565b505050565b60008101600083018061289081612757565b905061289c81846127e8565b50505060018101602083016128b1818561280b565b6128bc81838661286e565b505050505050565b6128ce828261287e565b5050565b7f4e6f20617661696c61626c6520776f726b6572207374616b6573000000000000600082015250565b6000612908601a83611734565b9150612913826128d2565b602082019050919050565b60006020820190508181036000830152612937816128fb565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612978826114f9565b9150612983836114f9565b9250826129935761299261293e565b5b82820690509291505056fea2646970667358221220a122b09048867f0c0091111f882f1faeb3fef05b9432d6255addf03d4f2c8fb364736f6c63430008180033", + "bytecode": "0x60c06040523480156200001157600080fd5b5060405162002cc738038062002cc7833981810160405281019062000037919062000246565b8383838383838282808073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505050508060048190555081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050508173ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250505050505050505050620002b8565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620001358262000108565b9050919050565b6000620001498262000128565b9050919050565b6200015b816200013c565b81146200016757600080fd5b50565b6000815190506200017b8162000150565b92915050565b60006200018e8262000128565b9050919050565b620001a08162000181565b8114620001ac57600080fd5b50565b600081519050620001c08162000195565b92915050565b6000620001d38262000128565b9050919050565b620001e581620001c6565b8114620001f157600080fd5b50565b6000815190506200020581620001da565b92915050565b6000819050919050565b62000220816200020b565b81146200022c57600080fd5b50565b600081519050620002408162000215565b92915050565b6000806000806080858703121562000263576200026262000103565b5b600062000273878288016200016a565b94505060206200028687828801620001af565b93505060406200029987828801620001f4565b9250506060620002ac878288016200022f565b91505092959194509250565b60805160a0516129d4620002f360003960008181610ca90152610d1f01526000818161046601528181610bb30152610c4801526129d46000f3fe6080604052600436106100c25760003560e01c806399ad6c561161007f578063cf37625611610059578063cf37625614610266578063d0fae95f146102a4578063d5a44f86146102cd578063d76b67941461030d576100c2565b806399ad6c56146101f4578063a035b1fe14610210578063c4a9e1161461023b576100c2565b80630d0271d6146100c7578063216ed6ad146100e35780635badbe4c14610120578063815a05721461014b57806381d12c5814610188578063854b6a4f146101cb575b600080fd5b6100e160048036038101906100dc919061144e565b610338565b005b3480156100ef57600080fd5b5061010a6004803603810190610105919061152f565b610462565b6040516101179190611591565b60405180910390f35b34801561012c57600080fd5b506101356107ab565b6040516101429190611591565b60405180910390f35b34801561015757600080fd5b50610172600480360381019061016d9190611602565b6107b1565b60405161017f9190611591565b60405180910390f35b34801561019457600080fd5b506101af60048036038101906101aa9190611676565b610830565b6040516101c297969594939291906117d4565b60405180910390f35b3480156101d757600080fd5b506101f260048036038101906101ed919061187d565b6109bc565b005b61020e600480360381019061020991906118df565b610de3565b005b34801561021c57600080fd5b50610225610f2c565b6040516102329190611591565b60405180910390f35b34801561024757600080fd5b50610250610f32565b60405161025d9190611591565b60405180910390f35b34801561027257600080fd5b5061028d60048036038101906102889190611676565b610f38565b60405161029b929190611953565b60405180910390f35b3480156102b057600080fd5b506102cb60048036038101906102c691906119d2565b610f5c565b005b3480156102d957600080fd5b506102f460048036038101906102ef9190611676565b611194565b6040516103049493929190611a67565b60405180910390f35b34801561031957600080fd5b506103226111f1565b60405161032f9190611591565b60405180910390f35b60045434101561037d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161037490611af8565b60405180910390fd5b60006008600081548092919061039290611b47565b9190505590506000600760008381526020019081526020016000209050338160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503481600101819055506104036111f7565b8160030181905550838382600401918261041e929190611dd5565b507fd9e7f38a71691fb1db2da17057c03d381a42a9925350883f10e8e5d0bca4a3b4828260030154604051610454929190611953565b60405180910390a150505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146104f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104e990611f17565b60405180910390fd5b60008311610535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161052c90611f83565b60405180910390fd5b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000811480156105ea57508473ffffffffffffffffffffffffffffffffffffffff1660008083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b15610651576002600081548092919061060290611b47565b91905055905080600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506106f5565b60008082815260200190815260200160002060030160009054906101000a900460ff16156106db576002600081548092919061068c90611b47565b91905055905080600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506106f4565b6000808281526020019081526020016000206001015491505b5b60008060008381526020019081526020016000209050858160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084816001018190555083426107639190611fa3565b81600201819055507fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e98260405161079a9190611591565b60405180910390a150509392505050565b60085481565b60008083838101906107c39190611676565b9050600060056000838152602001908152602001600020905080600001546004819055507f6a3843c02c26620842ae8496fd3afcb44b27463b3808e2ccdae4bcee5a2e3f208260045460405161081a929190611953565b60405180910390a1600092505050949350505050565b60076020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020160009054906101000a900460ff169080600301549080600401805461089890611bf8565b80601f01602080910402602001604051908101604052809291908181526020018280546108c490611bf8565b80156109115780601f106108e657610100808354040283529160200191610911565b820191906000526020600020905b8154815290600101906020018083116108f457829003601f168201915b50505050509080600501805461092690611bf8565b80601f016020809104026020016040519081016040528092919081815260200182805461095290611bf8565b801561099f5780601f106109745761010080835404028352916020019161099f565b820191906000526020600020905b81548152906001019060200180831161098257829003601f168201915b5050505050908060070160009054906101000a900460ff16905087565b6000600760008481526020019081526020016000209050600160038111156109e7576109e66116b2565b5b8160020160009054906101000a900460ff166003811115610a0b57610a0a6116b2565b5b14610a4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4290612023565b60405180910390fd5b600080600083600301548152602001908152602001600020905060028260020160006101000a81548160ff02191690836003811115610a8d57610a8c6116b2565b5b0217905550828260070160006101000a81548160ff0219169083151502179055507f470d2978e081461f6d144c091dfd83ec06e6011da0b03bd1c0121b7fb71370dc8484604051610adf929190612043565b60405180910390a16000600167ffffffffffffffff811115610b0457610b03611b9a565b5b604051908082528060200260200182016040528015610b3d57816020015b610b2a6113af565b815260200190600190039081610b225790505b5090506040518060400160405280620f424081526020018360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681525081600081518110610ba657610ba561206c565b5b60200260200101819052507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e5b4d8278285600501866006016040518463ffffffff1660e01b8152600401610c1493929190612409565b600060405180830381600087803b158015610c2e57600080fd5b505af1158015610c42573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635ffc70048360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000085600101546040518463ffffffff1660e01b8152600401610ceb93929190612455565b600060405180830381600087803b158015610d0557600080fd5b505af1158015610d19573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f85c5a8a84600101548460000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168560010154876005016040518563ffffffff1660e01b8152600401610daa9392919061248c565b6000604051808303818588803b158015610dc357600080fd5b505af1158015610dd7573d6000803e3d6000fd5b50505050505050505050565b600060066000815480929190610df890611b47565b9190505590506000600560008381526020019081526020016000209050858160000181905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cac152a434878787600188604051602001610e739190611591565b6040516020818303038152906040526040518763ffffffff1660e01b8152600401610ea2959493929190612574565b60206040518083038185885af1158015610ec0573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610ee591906125de565b81600101819055507f71eae802097e4e77c5345dee7f35d74ac0ae45eb5a456fdaed0de4d141fc5d8c82604051610f1c9190611591565b60405180910390a1505050505050565b60045481565b60025481565b60056020528060005260406000206000915090508060000154908060010154905082565b600060076000878152602001908152602001600020905060006003811115610f8757610f866116b2565b5b8160020160009054906101000a900460ff166003811115610fab57610faa6116b2565b5b14610feb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe290612657565b60405180910390fd5b60008060008360030154815260200190815260200160002090503373ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611097576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108e906126e9565b60405180910390fd5b60018260020160006101000a81548160ff021916908360038111156110bf576110be6116b2565b5b021790555085858360050191826110d7929190611dd5565b5060005b8484905081101561115357826006018585838181106110fd576110fc61206c565b5b905060200281019061110f9190612718565b9080600181540180825580915050600190039060005260206000209060020201600090919091909150818161114491906128c4565b505080806001019150506110db565b507ffaecd3b4db089bf25a48306100dd5fb2152e3887c7815b2b221dbb7da2f8e8dc876040516111839190611591565b60405180910390a150505050505050565b60006020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030160009054906101000a900460ff16905084565b60065481565b600061120161123a565b90506000806000838152602001908152602001600020905060018160030160006101000a81548160ff0219169083151502179055505090565b60008060005b6002548110156112be5760008082815260200190815260200160002060030160009054906101000a900460ff166112b1576000808281526020019081526020016000206002015442116112b15760008082815260200190815260200160002060010154826112ae9190611fa3565b91505b8080600101915050611240565b5060008111611302576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f99061291e565b60405180910390fd5b60008144611310919061296d565b9050600080600090505b6002548110156113a85760008082815260200190815260200160002060030160009054906101000a900460ff1661139b5760008082815260200190815260200160002060020154421161139b5760008082815260200190815260200160002060010154826113889190611fa3565b91508282111561139a578094506113a8565b5b808060010191505061131a565b5050505090565b604051806040016040528060008152602001600073ffffffffffffffffffffffffffffffffffffffff1681525090565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f84011261140e5761140d6113e9565b5b8235905067ffffffffffffffff81111561142b5761142a6113ee565b5b602083019150836001820283011115611447576114466113f3565b5b9250929050565b60008060208385031215611465576114646113df565b5b600083013567ffffffffffffffff811115611483576114826113e4565b5b61148f858286016113f8565b92509250509250929050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006114c68261149b565b9050919050565b6114d6816114bb565b81146114e157600080fd5b50565b6000813590506114f3816114cd565b92915050565b6000819050919050565b61150c816114f9565b811461151757600080fd5b50565b60008135905061152981611503565b92915050565b600080600060608486031215611548576115476113df565b5b6000611556868287016114e4565b93505060206115678682870161151a565b92505060406115788682870161151a565b9150509250925092565b61158b816114f9565b82525050565b60006020820190506115a66000830184611582565b92915050565b60008083601f8401126115c2576115c16113e9565b5b8235905067ffffffffffffffff8111156115df576115de6113ee565b5b6020830191508360018202830111156115fb576115fa6113f3565b5b9250929050565b6000806000806060858703121561161c5761161b6113df565b5b600061162a8782880161151a565b945050602061163b8782880161151a565b935050604085013567ffffffffffffffff81111561165c5761165b6113e4565b5b611668878288016115ac565b925092505092959194509250565b60006020828403121561168c5761168b6113df565b5b600061169a8482850161151a565b91505092915050565b6116ac816114bb565b82525050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600481106116f2576116f16116b2565b5b50565b6000819050611703826116e1565b919050565b6000611713826116f5565b9050919050565b61172381611708565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611763578082015181840152602081019050611748565b60008484015250505050565b6000601f19601f8301169050919050565b600061178b82611729565b6117958185611734565b93506117a5818560208601611745565b6117ae8161176f565b840191505092915050565b60008115159050919050565b6117ce816117b9565b82525050565b600060e0820190506117e9600083018a6116a3565b6117f66020830189611582565b611803604083018861171a565b6118106060830187611582565b81810360808301526118228186611780565b905081810360a08301526118368185611780565b905061184560c08301846117c5565b98975050505050505050565b61185a816117b9565b811461186557600080fd5b50565b60008135905061187781611851565b92915050565b60008060408385031215611894576118936113df565b5b60006118a28582860161151a565b92505060206118b385828601611868565b9150509250929050565b6000819050826020600302820111156118d9576118d86113f3565b5b92915050565b60008060008060a085870312156118f9576118f86113df565b5b60006119078782880161151a565b945050602085013567ffffffffffffffff811115611928576119276113e4565b5b611934878288016113f8565b93509350506040611947878288016118bd565b91505092959194509250565b60006040820190506119686000830185611582565b6119756020830184611582565b9392505050565b60008083601f840112611992576119916113e9565b5b8235905067ffffffffffffffff8111156119af576119ae6113ee565b5b6020830191508360208202830111156119cb576119ca6113f3565b5b9250929050565b6000806000806000606086880312156119ee576119ed6113df565b5b60006119fc8882890161151a565b955050602086013567ffffffffffffffff811115611a1d57611a1c6113e4565b5b611a29888289016113f8565b9450945050604086013567ffffffffffffffff811115611a4c57611a4b6113e4565b5b611a588882890161197c565b92509250509295509295909350565b6000608082019050611a7c60008301876116a3565b611a896020830186611582565b611a966040830185611582565b611aa360608301846117c5565b95945050505050565b7f496e73756666696369656e742066656500000000000000000000000000000000600082015250565b6000611ae2601083611734565b9150611aed82611aac565b602082019050919050565b60006020820190508181036000830152611b1181611ad5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611b52826114f9565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611b8457611b83611b18565b5b600182019050919050565b600082905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611c1057607f821691505b602082108103611c2357611c22611bc9565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302611c8b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82611c4e565b611c958683611c4e565b95508019841693508086168417925050509392505050565b6000819050919050565b6000611cd2611ccd611cc8846114f9565b611cad565b6114f9565b9050919050565b6000819050919050565b611cec83611cb7565b611d00611cf882611cd9565b848454611c5b565b825550505050565b600090565b611d15611d08565b611d20818484611ce3565b505050565b5b81811015611d4457611d39600082611d0d565b600181019050611d26565b5050565b601f821115611d8957611d5a81611c29565b611d6384611c3e565b81016020851015611d72578190505b611d86611d7e85611c3e565b830182611d25565b50505b505050565b600082821c905092915050565b6000611dac60001984600802611d8e565b1980831691505092915050565b6000611dc58383611d9b565b9150826002028217905092915050565b611ddf8383611b8f565b67ffffffffffffffff811115611df857611df7611b9a565b5b611e028254611bf8565b611e0d828285611d48565b6000601f831160018114611e3c5760008415611e2a578287013590505b611e348582611db9565b865550611e9c565b601f198416611e4a86611c29565b60005b82811015611e7257848901358255600182019150602085019450602081019050611e4d565b86831015611e8f5784890135611e8b601f891682611d9b565b8355505b6001600288020188555050505b50505050505050565b7f616363657074417661696c6162696c697479206d757374206f6e6c792062652060008201527f63616c6c65642062792044414f20636f6e747261637400000000000000000000602082015250565b6000611f01603683611734565b9150611f0c82611ea5565b604082019050919050565b60006020820190508181036000830152611f3081611ef4565b9050919050565b7f4e6f207374616b652070726f7669646564000000000000000000000000000000600082015250565b6000611f6d601183611734565b9150611f7882611f37565b602082019050919050565b60006020820190508181036000830152611f9c81611f60565b9050919050565b6000611fae826114f9565b9150611fb9836114f9565b9250828201905080821115611fd157611fd0611b18565b5b92915050565b7f537461747573206d7573742062652045766964656e63655375626d6974746564600082015250565b600061200d602083611734565b915061201882611fd7565b602082019050919050565b6000602082019050818103600083015261203c81612000565b9050919050565b60006040820190506120586000830185611582565b61206560208301846117c5565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6120d0816114f9565b82525050565b6120df816114bb565b82525050565b6040820160008201516120fb60008501826120c7565b50602082015161210e60208501826120d6565b50505050565b600061212083836120e5565b60408301905092915050565b6000602082019050919050565b60006121448261209b565b61214e81856120a6565b9350612159836120b7565b8060005b8381101561218a5781516121718882612114565b975061217c8361212c565b92505060018101905061215d565b5085935050505092915050565b600081546121a481611bf8565b6121ae8186611734565b945060018216600081146121c957600181146121df57612212565b60ff198316865281151560200286019350612212565b6121e885611c29565b60005b8381101561220a578154818901526001820191506020810190506121eb565b808801955050505b50505092915050565b600081549050919050565b600082825260208201905092915050565b60008190508160005260206000209050919050565b60008160001c9050919050565b6000819050919050565b60006122766122718361224c565b612259565b9050919050565b6000819050919050565b6122908161227d565b82525050565b600082825260208201905092915050565b600081546122b481611bf8565b6122be8186612296565b945060018216600081146122d957600181146122ef57612322565b60ff198316865281151560200286019350612322565b6122f885611c29565b60005b8381101561231a578154818901526001820191506020810190506122fb565b808801955050505b50505092915050565b600060408301600080840154905061234281612263565b61234f6000870182612287565b5060018401858303602087015261236683826122a7565b925050819250505092915050565b6000612380838361232b565b905092915050565b6000600282019050919050565b60006123a08261221b565b6123aa8185612226565b9350836020820285016123bc85612237565b8060005b858110156123f7578484038952816123d88582612374565b94506123e383612388565b925060208a019950506001810190506123c0565b50829750879550505050505092915050565b600060608201905081810360008301526124238186612139565b905081810360208301526124378185612197565b9050818103604083015261244b8184612395565b9050949350505050565b600060608201905061246a60008301866116a3565b61247760208301856116a3565b6124846040830184611582565b949350505050565b60006060820190506124a160008301866116a3565b6124ae6020830185611582565b81810360408301526124c08184612197565b9050949350505050565b82818337600083830152505050565b60006124e58385611734565b93506124f28385846124ca565b6124fb8361176f565b840190509392505050565b82818337505050565b61251b60608383612506565b5050565b600081519050919050565b600082825260208201905092915050565b60006125468261251f565b612550818561252a565b9350612560818560208601611745565b6125698161176f565b840191505092915050565b600060c082019050818103600083015261258f8187896124d9565b905061259e602083018661250f565b6125ab60808301856117c5565b81810360a08301526125bd818461253b565b90509695505050505050565b6000815190506125d881611503565b92915050565b6000602082840312156125f4576125f36113df565b5b6000612602848285016125c9565b91505092915050565b7f537461747573206d757374206265205265717565737465640000000000000000600082015250565b6000612641601883611734565b915061264c8261260b565b602082019050919050565b6000602082019050818103600083015261267081612634565b9050919050565b7f576f726b65722063616e206f6e6c79207375626d69742065766964656e63652060008201527f666f7220776f726b2074686579206172652061737369676e6564000000000000602082015250565b60006126d3603a83611734565b91506126de82612677565b604082019050919050565b60006020820190508181036000830152612702816126c6565b9050919050565b600080fd5b600080fd5b600080fd5b60008235600160400383360303811261273457612733612709565b5b80830191505092915050565b6127498161227d565b811461275457600080fd5b50565b6000813561276481612740565b80915050919050565b60008160001b9050919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6127a68461276d565b9350801983169250808416831791505092915050565b60006127d76127d26127cd8461227d565b611cad565b61227d565b9050919050565b6000819050919050565b6127f1826127bc565b6128046127fd826127de565b835461277a565b8255505050565b6000808335600160200384360303811261282857612827612709565b5b80840192508235915067ffffffffffffffff82111561284a5761284961270e565b5b60208301925060018202360383131561286657612865612713565b5b509250929050565b612879838383611dd5565b505050565b60008101600083018061289081612757565b905061289c81846127e8565b50505060018101602083016128b1818561280b565b6128bc81838661286e565b505050505050565b6128ce828261287e565b5050565b7f4e6f20617661696c61626c6520776f726b6572207374616b6573000000000000600082015250565b6000612908601a83611734565b9150612913826128d2565b602082019050919050565b60006020820190508181036000830152612937816128fb565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612978826114f9565b9150612983836114f9565b9250826129935761299261293e565b5b82820690509291505056fea26469706673582212205af2cc46dc16ad2b74a2b47dd271a3b16c7aeb616473bee47f25f4ed38ebb02664736f6c63430008180033", + "deployedBytecode": "0x6080604052600436106100c25760003560e01c806399ad6c561161007f578063cf37625611610059578063cf37625614610266578063d0fae95f146102a4578063d5a44f86146102cd578063d76b67941461030d576100c2565b806399ad6c56146101f4578063a035b1fe14610210578063c4a9e1161461023b576100c2565b80630d0271d6146100c7578063216ed6ad146100e35780635badbe4c14610120578063815a05721461014b57806381d12c5814610188578063854b6a4f146101cb575b600080fd5b6100e160048036038101906100dc919061144e565b610338565b005b3480156100ef57600080fd5b5061010a6004803603810190610105919061152f565b610462565b6040516101179190611591565b60405180910390f35b34801561012c57600080fd5b506101356107ab565b6040516101429190611591565b60405180910390f35b34801561015757600080fd5b50610172600480360381019061016d9190611602565b6107b1565b60405161017f9190611591565b60405180910390f35b34801561019457600080fd5b506101af60048036038101906101aa9190611676565b610830565b6040516101c297969594939291906117d4565b60405180910390f35b3480156101d757600080fd5b506101f260048036038101906101ed919061187d565b6109bc565b005b61020e600480360381019061020991906118df565b610de3565b005b34801561021c57600080fd5b50610225610f2c565b6040516102329190611591565b60405180910390f35b34801561024757600080fd5b50610250610f32565b60405161025d9190611591565b60405180910390f35b34801561027257600080fd5b5061028d60048036038101906102889190611676565b610f38565b60405161029b929190611953565b60405180910390f35b3480156102b057600080fd5b506102cb60048036038101906102c691906119d2565b610f5c565b005b3480156102d957600080fd5b506102f460048036038101906102ef9190611676565b611194565b6040516103049493929190611a67565b60405180910390f35b34801561031957600080fd5b506103226111f1565b60405161032f9190611591565b60405180910390f35b60045434101561037d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161037490611af8565b60405180910390fd5b60006008600081548092919061039290611b47565b9190505590506000600760008381526020019081526020016000209050338160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503481600101819055506104036111f7565b8160030181905550838382600401918261041e929190611dd5565b507fd9e7f38a71691fb1db2da17057c03d381a42a9925350883f10e8e5d0bca4a3b4828260030154604051610454929190611953565b60405180910390a150505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146104f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104e990611f17565b60405180910390fd5b60008311610535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161052c90611f83565b60405180910390fd5b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000811480156105ea57508473ffffffffffffffffffffffffffffffffffffffff1660008083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b15610651576002600081548092919061060290611b47565b91905055905080600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506106f5565b60008082815260200190815260200160002060030160009054906101000a900460ff16156106db576002600081548092919061068c90611b47565b91905055905080600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506106f4565b6000808281526020019081526020016000206001015491505b5b60008060008381526020019081526020016000209050858160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084816001018190555083426107639190611fa3565b81600201819055507fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e98260405161079a9190611591565b60405180910390a150509392505050565b60085481565b60008083838101906107c39190611676565b9050600060056000838152602001908152602001600020905080600001546004819055507f6a3843c02c26620842ae8496fd3afcb44b27463b3808e2ccdae4bcee5a2e3f208260045460405161081a929190611953565b60405180910390a1600092505050949350505050565b60076020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020160009054906101000a900460ff169080600301549080600401805461089890611bf8565b80601f01602080910402602001604051908101604052809291908181526020018280546108c490611bf8565b80156109115780601f106108e657610100808354040283529160200191610911565b820191906000526020600020905b8154815290600101906020018083116108f457829003601f168201915b50505050509080600501805461092690611bf8565b80601f016020809104026020016040519081016040528092919081815260200182805461095290611bf8565b801561099f5780601f106109745761010080835404028352916020019161099f565b820191906000526020600020905b81548152906001019060200180831161098257829003601f168201915b5050505050908060070160009054906101000a900460ff16905087565b6000600760008481526020019081526020016000209050600160038111156109e7576109e66116b2565b5b8160020160009054906101000a900460ff166003811115610a0b57610a0a6116b2565b5b14610a4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4290612023565b60405180910390fd5b600080600083600301548152602001908152602001600020905060028260020160006101000a81548160ff02191690836003811115610a8d57610a8c6116b2565b5b0217905550828260070160006101000a81548160ff0219169083151502179055507f470d2978e081461f6d144c091dfd83ec06e6011da0b03bd1c0121b7fb71370dc8484604051610adf929190612043565b60405180910390a16000600167ffffffffffffffff811115610b0457610b03611b9a565b5b604051908082528060200260200182016040528015610b3d57816020015b610b2a6113af565b815260200190600190039081610b225790505b5090506040518060400160405280620f424081526020018360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681525081600081518110610ba657610ba561206c565b5b60200260200101819052507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e5b4d8278285600501866006016040518463ffffffff1660e01b8152600401610c1493929190612409565b600060405180830381600087803b158015610c2e57600080fd5b505af1158015610c42573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635ffc70048360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000085600101546040518463ffffffff1660e01b8152600401610ceb93929190612455565b600060405180830381600087803b158015610d0557600080fd5b505af1158015610d19573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f85c5a8a84600101548460000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168560010154876005016040518563ffffffff1660e01b8152600401610daa9392919061248c565b6000604051808303818588803b158015610dc357600080fd5b505af1158015610dd7573d6000803e3d6000fd5b50505050505050505050565b600060066000815480929190610df890611b47565b9190505590506000600560008381526020019081526020016000209050858160000181905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cac152a434878787600188604051602001610e739190611591565b6040516020818303038152906040526040518763ffffffff1660e01b8152600401610ea2959493929190612574565b60206040518083038185885af1158015610ec0573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610ee591906125de565b81600101819055507f71eae802097e4e77c5345dee7f35d74ac0ae45eb5a456fdaed0de4d141fc5d8c82604051610f1c9190611591565b60405180910390a1505050505050565b60045481565b60025481565b60056020528060005260406000206000915090508060000154908060010154905082565b600060076000878152602001908152602001600020905060006003811115610f8757610f866116b2565b5b8160020160009054906101000a900460ff166003811115610fab57610faa6116b2565b5b14610feb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe290612657565b60405180910390fd5b60008060008360030154815260200190815260200160002090503373ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611097576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108e906126e9565b60405180910390fd5b60018260020160006101000a81548160ff021916908360038111156110bf576110be6116b2565b5b021790555085858360050191826110d7929190611dd5565b5060005b8484905081101561115357826006018585838181106110fd576110fc61206c565b5b905060200281019061110f9190612718565b9080600181540180825580915050600190039060005260206000209060020201600090919091909150818161114491906128c4565b505080806001019150506110db565b507ffaecd3b4db089bf25a48306100dd5fb2152e3887c7815b2b221dbb7da2f8e8dc876040516111839190611591565b60405180910390a150505050505050565b60006020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030160009054906101000a900460ff16905084565b60065481565b600061120161123a565b90506000806000838152602001908152602001600020905060018160030160006101000a81548160ff0219169083151502179055505090565b60008060005b6002548110156112be5760008082815260200190815260200160002060030160009054906101000a900460ff166112b1576000808281526020019081526020016000206002015442116112b15760008082815260200190815260200160002060010154826112ae9190611fa3565b91505b8080600101915050611240565b5060008111611302576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f99061291e565b60405180910390fd5b60008144611310919061296d565b9050600080600090505b6002548110156113a85760008082815260200190815260200160002060030160009054906101000a900460ff1661139b5760008082815260200190815260200160002060020154421161139b5760008082815260200190815260200160002060010154826113889190611fa3565b91508282111561139a578094506113a8565b5b808060010191505061131a565b5050505090565b604051806040016040528060008152602001600073ffffffffffffffffffffffffffffffffffffffff1681525090565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f84011261140e5761140d6113e9565b5b8235905067ffffffffffffffff81111561142b5761142a6113ee565b5b602083019150836001820283011115611447576114466113f3565b5b9250929050565b60008060208385031215611465576114646113df565b5b600083013567ffffffffffffffff811115611483576114826113e4565b5b61148f858286016113f8565b92509250509250929050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006114c68261149b565b9050919050565b6114d6816114bb565b81146114e157600080fd5b50565b6000813590506114f3816114cd565b92915050565b6000819050919050565b61150c816114f9565b811461151757600080fd5b50565b60008135905061152981611503565b92915050565b600080600060608486031215611548576115476113df565b5b6000611556868287016114e4565b93505060206115678682870161151a565b92505060406115788682870161151a565b9150509250925092565b61158b816114f9565b82525050565b60006020820190506115a66000830184611582565b92915050565b60008083601f8401126115c2576115c16113e9565b5b8235905067ffffffffffffffff8111156115df576115de6113ee565b5b6020830191508360018202830111156115fb576115fa6113f3565b5b9250929050565b6000806000806060858703121561161c5761161b6113df565b5b600061162a8782880161151a565b945050602061163b8782880161151a565b935050604085013567ffffffffffffffff81111561165c5761165b6113e4565b5b611668878288016115ac565b925092505092959194509250565b60006020828403121561168c5761168b6113df565b5b600061169a8482850161151a565b91505092915050565b6116ac816114bb565b82525050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600481106116f2576116f16116b2565b5b50565b6000819050611703826116e1565b919050565b6000611713826116f5565b9050919050565b61172381611708565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611763578082015181840152602081019050611748565b60008484015250505050565b6000601f19601f8301169050919050565b600061178b82611729565b6117958185611734565b93506117a5818560208601611745565b6117ae8161176f565b840191505092915050565b60008115159050919050565b6117ce816117b9565b82525050565b600060e0820190506117e9600083018a6116a3565b6117f66020830189611582565b611803604083018861171a565b6118106060830187611582565b81810360808301526118228186611780565b905081810360a08301526118368185611780565b905061184560c08301846117c5565b98975050505050505050565b61185a816117b9565b811461186557600080fd5b50565b60008135905061187781611851565b92915050565b60008060408385031215611894576118936113df565b5b60006118a28582860161151a565b92505060206118b385828601611868565b9150509250929050565b6000819050826020600302820111156118d9576118d86113f3565b5b92915050565b60008060008060a085870312156118f9576118f86113df565b5b60006119078782880161151a565b945050602085013567ffffffffffffffff811115611928576119276113e4565b5b611934878288016113f8565b93509350506040611947878288016118bd565b91505092959194509250565b60006040820190506119686000830185611582565b6119756020830184611582565b9392505050565b60008083601f840112611992576119916113e9565b5b8235905067ffffffffffffffff8111156119af576119ae6113ee565b5b6020830191508360208202830111156119cb576119ca6113f3565b5b9250929050565b6000806000806000606086880312156119ee576119ed6113df565b5b60006119fc8882890161151a565b955050602086013567ffffffffffffffff811115611a1d57611a1c6113e4565b5b611a29888289016113f8565b9450945050604086013567ffffffffffffffff811115611a4c57611a4b6113e4565b5b611a588882890161197c565b92509250509295509295909350565b6000608082019050611a7c60008301876116a3565b611a896020830186611582565b611a966040830185611582565b611aa360608301846117c5565b95945050505050565b7f496e73756666696369656e742066656500000000000000000000000000000000600082015250565b6000611ae2601083611734565b9150611aed82611aac565b602082019050919050565b60006020820190508181036000830152611b1181611ad5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611b52826114f9565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611b8457611b83611b18565b5b600182019050919050565b600082905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611c1057607f821691505b602082108103611c2357611c22611bc9565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302611c8b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82611c4e565b611c958683611c4e565b95508019841693508086168417925050509392505050565b6000819050919050565b6000611cd2611ccd611cc8846114f9565b611cad565b6114f9565b9050919050565b6000819050919050565b611cec83611cb7565b611d00611cf882611cd9565b848454611c5b565b825550505050565b600090565b611d15611d08565b611d20818484611ce3565b505050565b5b81811015611d4457611d39600082611d0d565b600181019050611d26565b5050565b601f821115611d8957611d5a81611c29565b611d6384611c3e565b81016020851015611d72578190505b611d86611d7e85611c3e565b830182611d25565b50505b505050565b600082821c905092915050565b6000611dac60001984600802611d8e565b1980831691505092915050565b6000611dc58383611d9b565b9150826002028217905092915050565b611ddf8383611b8f565b67ffffffffffffffff811115611df857611df7611b9a565b5b611e028254611bf8565b611e0d828285611d48565b6000601f831160018114611e3c5760008415611e2a578287013590505b611e348582611db9565b865550611e9c565b601f198416611e4a86611c29565b60005b82811015611e7257848901358255600182019150602085019450602081019050611e4d565b86831015611e8f5784890135611e8b601f891682611d9b565b8355505b6001600288020188555050505b50505050505050565b7f616363657074417661696c6162696c697479206d757374206f6e6c792062652060008201527f63616c6c65642062792044414f20636f6e747261637400000000000000000000602082015250565b6000611f01603683611734565b9150611f0c82611ea5565b604082019050919050565b60006020820190508181036000830152611f3081611ef4565b9050919050565b7f4e6f207374616b652070726f7669646564000000000000000000000000000000600082015250565b6000611f6d601183611734565b9150611f7882611f37565b602082019050919050565b60006020820190508181036000830152611f9c81611f60565b9050919050565b6000611fae826114f9565b9150611fb9836114f9565b9250828201905080821115611fd157611fd0611b18565b5b92915050565b7f537461747573206d7573742062652045766964656e63655375626d6974746564600082015250565b600061200d602083611734565b915061201882611fd7565b602082019050919050565b6000602082019050818103600083015261203c81612000565b9050919050565b60006040820190506120586000830185611582565b61206560208301846117c5565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6120d0816114f9565b82525050565b6120df816114bb565b82525050565b6040820160008201516120fb60008501826120c7565b50602082015161210e60208501826120d6565b50505050565b600061212083836120e5565b60408301905092915050565b6000602082019050919050565b60006121448261209b565b61214e81856120a6565b9350612159836120b7565b8060005b8381101561218a5781516121718882612114565b975061217c8361212c565b92505060018101905061215d565b5085935050505092915050565b600081546121a481611bf8565b6121ae8186611734565b945060018216600081146121c957600181146121df57612212565b60ff198316865281151560200286019350612212565b6121e885611c29565b60005b8381101561220a578154818901526001820191506020810190506121eb565b808801955050505b50505092915050565b600081549050919050565b600082825260208201905092915050565b60008190508160005260206000209050919050565b60008160001c9050919050565b6000819050919050565b60006122766122718361224c565b612259565b9050919050565b6000819050919050565b6122908161227d565b82525050565b600082825260208201905092915050565b600081546122b481611bf8565b6122be8186612296565b945060018216600081146122d957600181146122ef57612322565b60ff198316865281151560200286019350612322565b6122f885611c29565b60005b8381101561231a578154818901526001820191506020810190506122fb565b808801955050505b50505092915050565b600060408301600080840154905061234281612263565b61234f6000870182612287565b5060018401858303602087015261236683826122a7565b925050819250505092915050565b6000612380838361232b565b905092915050565b6000600282019050919050565b60006123a08261221b565b6123aa8185612226565b9350836020820285016123bc85612237565b8060005b858110156123f7578484038952816123d88582612374565b94506123e383612388565b925060208a019950506001810190506123c0565b50829750879550505050505092915050565b600060608201905081810360008301526124238186612139565b905081810360208301526124378185612197565b9050818103604083015261244b8184612395565b9050949350505050565b600060608201905061246a60008301866116a3565b61247760208301856116a3565b6124846040830184611582565b949350505050565b60006060820190506124a160008301866116a3565b6124ae6020830185611582565b81810360408301526124c08184612197565b9050949350505050565b82818337600083830152505050565b60006124e58385611734565b93506124f28385846124ca565b6124fb8361176f565b840190509392505050565b82818337505050565b61251b60608383612506565b5050565b600081519050919050565b600082825260208201905092915050565b60006125468261251f565b612550818561252a565b9350612560818560208601611745565b6125698161176f565b840191505092915050565b600060c082019050818103600083015261258f8187896124d9565b905061259e602083018661250f565b6125ab60808301856117c5565b81810360a08301526125bd818461253b565b90509695505050505050565b6000815190506125d881611503565b92915050565b6000602082840312156125f4576125f36113df565b5b6000612602848285016125c9565b91505092915050565b7f537461747573206d757374206265205265717565737465640000000000000000600082015250565b6000612641601883611734565b915061264c8261260b565b602082019050919050565b6000602082019050818103600083015261267081612634565b9050919050565b7f576f726b65722063616e206f6e6c79207375626d69742065766964656e63652060008201527f666f7220776f726b2074686579206172652061737369676e6564000000000000602082015250565b60006126d3603a83611734565b91506126de82612677565b604082019050919050565b60006020820190508181036000830152612702816126c6565b9050919050565b600080fd5b600080fd5b600080fd5b60008235600160400383360303811261273457612733612709565b5b80830191505092915050565b6127498161227d565b811461275457600080fd5b50565b6000813561276481612740565b80915050919050565b60008160001b9050919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6127a68461276d565b9350801983169250808416831791505092915050565b60006127d76127d26127cd8461227d565b611cad565b61227d565b9050919050565b6000819050919050565b6127f1826127bc565b6128046127fd826127de565b835461277a565b8255505050565b6000808335600160200384360303811261282857612827612709565b5b80840192508235915067ffffffffffffffff82111561284a5761284961270e565b5b60208301925060018202360383131561286657612865612713565b5b509250929050565b612879838383611dd5565b505050565b60008101600083018061289081612757565b905061289c81846127e8565b50505060018101602083016128b1818561280b565b6128bc81838661286e565b505050505050565b6128ce828261287e565b5050565b7f4e6f20617661696c61626c6520776f726b6572207374616b6573000000000000600082015250565b6000612908601a83611734565b9150612913826128d2565b602082019050919050565b60006020820190508181036000830152612937816128fb565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612978826114f9565b9150612983836114f9565b9250826129935761299261293e565b5b82820690509291505056fea26469706673582212205af2cc46dc16ad2b74a2b47dd271a3b16c7aeb616473bee47f25f4ed38ebb02664736f6c63430008180033", "linkReferences": {}, "deployedLinkReferences": {} }