{"matchId":"58812790","creationMatch":"exact_match","runtimeMatch":"exact_match","verifiedAt":"2026-11-08T11:44:59Z","creationBytecode":{"onchainBytecode":"0x61010060405234801562000011575f80fd5b50604051620028e4380380620028e483398101604081905262000034916200033c565b828260036200004483826200044d565b5060046200005382826200044d565b50506001600555506001600160a01b038116620000b75760405162461bcd60e51b815260206004820152601660248201527f7061796f7574206973207a65726f20616464726573730000000000000000000060448201526064015b60405180910390fd5b6001600160a01b0381166080524260a0819052620000da90620697809062000519565b60c052620000ed6301e133804262000519565b60e05262000107306a52b7d2dcc80cd2e400000062000110565b5050506200053f565b6001600160a01b0382166200013b5760405163ec442f0560e01b81525f6004820152602401620000ae565b620001485f83836200014c565b5050565b6001600160a01b0383166200017a578060025f8282546200016e919062000519565b90915550620001ec9050565b6001600160a01b0383165f9081526020819052604090205481811015620001ce5760405163391434e360e21b81526001600160a01b03851660048201526024810182905260448101839052606401620000ae565b6001600160a01b0384165f9081526020819052604090209082900390555b6001600160a01b0382166200020a5760028054829003905562000228565b6001600160a01b0382165f9081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200026e91815260200190565b60405180910390a3505050565b634e487b7160e01b5f52604160045260245ffd5b5f82601f8301126200029f575f80fd5b81516001600160401b0380821115620002bc57620002bc6200027b565b604051601f8301601f19908116603f01168101908282118183101715620002e757620002e76200027b565b816040528381526020925086602085880101111562000304575f80fd5b5f91505b8382101562000327578582018301518183018401529082019062000308565b5f602085830101528094505050505092915050565b5f805f606084860312156200034f575f80fd5b83516001600160401b038082111562000366575f80fd5b62000374878388016200028f565b945060208601519150808211156200038a575f80fd5b5062000399868287016200028f565b604086015190935090506001600160a01b0381168114620003b8575f80fd5b809150509250925092565b600181811c90821680620003d857607f821691505b602082108103620003f757634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156200044857805f5260205f20601f840160051c81016020851015620004245750805b601f840160051c820191505b8181101562000445575f815560010162000430565b50505b505050565b81516001600160401b038111156200046957620004696200027b565b62000481816200047a8454620003c3565b84620003fd565b602080601f831160018114620004b7575f84156200049f5750858301515b5f19600386901b1c1916600185901b17855562000511565b5f85815260208120601f198616915b82811015620004e757888601518255948401946001909101908401620004c6565b50858210156200050557878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b808201808211156200053957634e487b7160e01b5f52601160045260245ffd5b92915050565b60805160a05160c05160e051612340620005a45f395f818161040901526114d201525f81816107e501528181610c3f015281816116d7015261175e01525f6105ef01525f8181610528015281816113ad01528181611588015261160101526123405ff3fe608060405260043610610275575f3560e01c80636dbc45821161014a578063a0388ca6116100be578063c5de72dd11610078578063c5de72dd14610762578063c63de8101461077b578063dd62ed3e14610790578063ea2b4ab2146107d4578063ed2b606d14610807578063f5eb42dc14610826575f80fd5b8063a0388ca6146106bb578063a0b93856146106e9578063a9059cbb146106fe578063b4d0df8a1461071d578063b52a585114610731578063c084f54014610745575f80fd5b806385e3f9971161010f57806385e3f997146106255780638854a0ff1461063a578063902d55a5146106615780639106d7ba1461067f57806395d89b41146106935780639b8906ae146106a7575f80fd5b80636dbc45821461056257806370a082311461057f578063735f21be146105b357806378e97925146105de5780638099b00214610611575f80fd5b8063313ce567116101ec5780634db159f5116101a65780634db159f514610495578063510040cb146104aa5780636101b37f146104be57806361c0b6a0146104d357806362bc5f7b1461050157806363bd1d4a14610517575f80fd5b8063313ce567146103dd5780633c78929e146103f85780633ce165031461042b57806340036e4914610440578063485d38341461045f5780634bddda1514610476575f80fd5b806318160ddd1161023d57806318160ddd146103285780631e130f9e1461033c5780632115e5ce1461037057806323b872dd1461038f5780632880ea9e146103ae5780632b5e5809146103c8575f80fd5b806306fdde0314610279578063095ea7b3146102a357806310b985d4146102d257806313b0be33146102f557806315cccf3514610314575b5f80fd5b348015610284575f80fd5b5061028d610851565b60405161029a9190611e88565b60405180910390f35b3480156102ae575f80fd5b506102c26102bd366004611ed1565b6108e1565b604051901515815260200161029a565b3480156102dd575f80fd5b506102e760085481565b60405190815260200161029a565b348015610300575f80fd5b506102e761030f366004611efb565b6108fa565b34801561031f575f80fd5b506102e7610928565b348015610333575f80fd5b506002546102e7565b348015610347575f80fd5b506102e7610356366004611f29565b6001600160a01b03165f908152600f602052604090205490565b34801561037b575f80fd5b506102e761038a366004611f29565b610976565b34801561039a575f80fd5b506102c26103a9366004611f44565b610999565b3480156103b9575f80fd5b506102e766071afd498d000081565b3480156103d3575f80fd5b506102e7600a5481565b3480156103e8575f80fd5b506040516012815260200161029a565b348015610403575f80fd5b506102e77f000000000000000000000000000000000000000000000000000000000000000081565b348015610436575f80fd5b506102e761022b81565b34801561044b575f80fd5b506102c261045a366004611fc7565b6109bc565b34801561046a575f80fd5b506102e76301e1338081565b348015610481575f80fd5b506102e7610490366004611f29565b610bd9565b6104a86104a3366004612018565b610c35565b005b3480156104b5575f80fd5b506104a86114c8565b3480156104c9575f80fd5b506102e760075481565b3480156104de575f80fd5b506102c26104ed366004611f29565b600c6020525f908152604090205460ff1681565b34801561050c575f80fd5b506102e76206978081565b348015610522575f80fd5b5061054a7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161029a565b34801561056d575f80fd5b506102e769012d231c7c593eec000081565b34801561058a575f80fd5b506102e7610599366004611f29565b6001600160a01b03165f9081526020819052604090205490565b3480156105be575f80fd5b506102e76105cd366004611f29565b600d6020525f908152604090205481565b3480156105e9575f80fd5b506102e77f000000000000000000000000000000000000000000000000000000000000000081565b34801561061c575f80fd5b506102e7600a81565b348015610630575f80fd5b506102e76115b381565b348015610645575f80fd5b5061054a7360b9262456de011f7d15a54cdd8c48baaa8b022f81565b34801561066c575f80fd5b506102e76a52b7d2dcc80cd2e400000081565b34801561068a575f80fd5b506102e76116af565b34801561069e575f80fd5b5061028d6116c5565b3480156106b2575f80fd5b506102c26116d4565b3480156106c6575f80fd5b506102c26106d5366004611f29565b600e6020525f908152604090205460ff1681565b3480156106f4575f80fd5b506102e760095481565b348015610709575f80fd5b506102c2610718366004611ed1565b611711565b348015610728575f80fd5b506102e761171e565b34801561073c575f80fd5b506104a8611754565b348015610750575f80fd5b506102e769034b3cfd4613f12c000081565b34801561076d575f80fd5b506006546102c29060ff1681565b348015610786575f80fd5b506102e761138881565b34801561079b575f80fd5b506102e76107aa36600461208c565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b3480156107df575f80fd5b506102e77f000000000000000000000000000000000000000000000000000000000000000081565b348015610812575f80fd5b5061054a6108213660046120b8565b6118e9565b348015610831575f80fd5b506102e7610840366004611f29565b600b6020525f908152604090205481565b606060038054610860906120f7565b80601f016020809104026020016040519081016040528092919081815260200182805461088c906120f7565b80156108d75780601f106108ae576101008083540402835291602001916108d7565b820191905f5260205f20905b8154815290600101906020018083116108ba57829003601f168201915b5050505050905090565b5f336108ee818585611951565b60019150505b92915050565b5f66071afd498d000061090d8385611963565b6109179085612143565b6109219190612156565b9392505050565b61093e69034b3cfd4613f12c0000611388612156565b61095469012d231c7c593eec000061022b612156565b61095e919061216d565b610973906a52b7d2dcc80cd2e4000000612143565b81565b6001600160a01b0381165f908152600d60205260408120546108f490600a61216d565b5f336109a68582856119b1565b6109b1858585611a2c565b506001949350505050565b5f806109fc84848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250611a8992505050565b905080515f03610a0f575f915050610921565b6040516370a0823160e01b81526001600160a01b03861660048201527360b9262456de011f7d15a54cdd8c48baaa8b022f906370a0823190602401602060405180830381865afa158015610a65573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a899190612180565b5f03610a98575f915050610921565b604051633142854560e21b81526001600160a01b03861660048201525f90610b1f907360b9262456de011f7d15a54cdd8c48baaa8b022f9063c50a1514906024015f60405180830381865afa158015610af3573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610b1a91908101906121ab565b611a89565b90508180519060200120818051906020012014610b40575f92505050610921565b815160208301206040516331a9108f60e11b8152600481018290526001600160a01b038816907360b9262456de011f7d15a54cdd8c48baaa8b022f90636352211e90602401602060405180830381865afa158015610ba0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bc49190612253565b6001600160a01b031614979650505050505050565b5f80610be483610976565b6001600160a01b0384165f908152600b6020526040902054909150811115610c2d576001600160a01b0383165f908152600b6020526040902054610c289082612143565b610921565b5f9392505050565b610c3d611c0c565b7f00000000000000000000000000000000000000000000000000000000000000004210610ca95760405162461bcd60e51b8152602060048201526015602482015274135a5b9d081dda5b991bddc81a185cc8195b991959605a1b60448201526064015b60405180910390fd5b6115b3610cb46116af565b10610cf95760405162461bcd60e51b815260206004820152601560248201527411d95b995cda5cc81cd85b19481cdbdb19081bdd5d605a1b6044820152606401610ca0565b6001851015610d3c5760405162461bcd60e51b815260206004820152600f60248201526e4d696e696d756d203120736861726560881b6044820152606401610ca0565b82610d805760405162461bcd60e51b81526020600482015260146024820152731059d95b9d081251081a5cc81c995c5d5a5c995960621b6044820152606401610ca0565b610d8933610976565b335f908152600b6020526040902054610da390879061216d565b1115610df15760405162461bcd60e51b815260206004820152601c60248201527f4578636565647320746865207065722d77616c6c6574206c696d6974000000006044820152606401610ca0565b6115b385610dfd6116af565b610e07919061216d565b1115610e4c5760405162461bcd60e51b81526020600482015260146024820152734578636565647320746f74616c2073686172657360601b6044820152606401610ca0565b610e573385856109bc565b610eb15760405162461bcd60e51b815260206004820152602560248201527f4167656e74204944206e6f7420766572696669656420666f7220746869732077604482015264185b1b195d60da1b6064820152608401610ca0565b5f610ef085858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250611a8992505050565b8051602091820120335f908152600f909252604090912054909150610fb8575f818152601060205260409020546001600160a01b031615610f845760405162461bcd60e51b815260206004820152602860248201527f4167656e7420494420616c726561647920626f756e6420746f20616e6f7468656044820152671c881dd85b1b195d60c21b6064820152608401610ca0565b335f818152600f602090815260408083208590558483526010909152902080546001600160a01b0319169091179055611021565b335f908152600f602052604090205481146110215760405162461bcd60e51b815260206004820152602360248201527f4167656e7420494420646f6573206e6f74206d6174636820746869732077616c6044820152621b195d60ea1b6064820152608401610ca0565b5f61102c3388611963565b90505f6110398289612143565b90506113888160085461104c919061216d565b111561109a5760405162461bcd60e51b815260206004820152601a60248201527f506169642073686172652071756f7461206578686175737465640000000000006044820152606401610ca0565b5f6110ac66071afd498d000083612156565b90508034146110f45760405162461bcd60e51b8152602060048201526014602482015273125b98dbdc9c9958dd0810939088185b5bdd5b9d60621b6044820152606401610ca0565b5f61110969034b3cfd4613f12c000084612156565b61111d69012d231c7c593eec000086612156565b611127919061216d565b90508360010361116257600160075f828254611143919061216d565b9091555050335f908152600c60205260409020805460ff191660011790555b8260085f828254611173919061216d565b9091555050335f908152600b6020526040812080548c929061119690849061216d565b925050819055503460095f8282546111ae919061216d565b909155505085156112e6575f60105f6111fb8a8a8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250611a8992505050565b805160209182012082528101919091526040015f20546001600160a01b03169050801580159061123457506001600160a01b0381163314155b801561124f5750335f908152600e602052604090205460ff16155b156112e457335f908152600e60209081526040808320805460ff191660019081179091556001600160a01b0385168452600d909252822080549192909161129790849061216d565b909155505060405133906001600160a01b038316907f99b028dd597faf0b2ad0e538fc15267c0b023e6e7b4fbae549419dc63ec795d1906112db908c908c90612296565b60405180910390a35b505b6112fc69034b3cfd4613f12c0000611388612156565b61131269012d231c7c593eec000061022b612156565b61131c919061216d565b611331906a52b7d2dcc80cd2e4000000612143565b305f9081526020819052604090205461134b908390612143565b10156113995760405162461bcd60e51b815260206004820152601c60248201527f496e73756666696369656e742067656e657369732072657365727665000000006044820152606401610ca0565b6113a4303383611a2c565b3415611463575f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316346040515f6040518083038185875af1925050503d805f8114611413576040519150601f19603f3d011682016040523d82523d5f602084013e611418565b606091505b50509050806114615760405162461bcd60e51b815260206004820152601560248201527410939088199bdc9dd85c991a5b99c819985a5b1959605a1b6044820152606401610ca0565b505b336001600160a01b03167f66b57df7aba118d24ed7972643e779f593eb515f67a6faa387db1e5975aab0758a8a8d88888734426040516114aa9897969594939291906122b1565b60405180910390a250505050506114c16001600555565b5050505050565b6114d0611c0c565b7f000000000000000000000000000000000000000000000000000000000000000042101561152f5760405162461bcd60e51b815260206004820152600c60248201526b14dd1a5b1b081b1bd8dad95960a21b6044820152606401610ca0565b60065460ff16156115755760405162461bcd60e51b815260206004820152601060248201526f105b1c9958591e481c995b19585cd95960821b6044820152606401610ca0565b6006805460ff191660011790556115f7307f00000000000000000000000000000000000000000000000000000000000000006115bd69034b3cfd4613f12c0000611388612156565b6115d369012d231c7c593eec000061022b612156565b6115dd919061216d565b6115f2906a52b7d2dcc80cd2e4000000612143565b611a2c565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000167f7bbe9c0ab7edf3877274e19436d2e10ecb76324ae6afd629d2f928f1aff8165161165869034b3cfd4613f12c0000611388612156565b61166e69012d231c7c593eec000061022b612156565b611678919061216d565b61168d906a52b7d2dcc80cd2e4000000612143565b604080519182524260208301520160405180910390a26116ad6001600555565b565b5f6008546007546116c0919061216d565b905090565b606060048054610860906120f7565b5f7f0000000000000000000000000000000000000000000000000000000000000000421015806116c057506115b361170a6116af565b1015905090565b5f336108ee818585611a2c565b61173469034b3cfd4613f12c0000611388612156565b61174a69012d231c7c593eec000061022b612156565b610973919061216d565b61175c611c0c565b7f00000000000000000000000000000000000000000000000000000000000000004210156117c55760405162461bcd60e51b815260206004820152601660248201527526b4b73a103bb4b73237bb9039ba34b6361037b832b760511b6044820152606401610ca0565b6006545f9060ff16611821576117e769034b3cfd4613f12c0000611388612156565b6117fd69012d231c7c593eec000061022b612156565b611807919061216d565b61181c906a52b7d2dcc80cd2e4000000612143565b611823565b5f5b305f9081526020819052604081205491925090611841908390612143565b90505f81116118845760405162461bcd60e51b815260206004820152600f60248201526e2737ba3434b733903a3790313ab93760891b6044820152606401610ca0565b80600a5f828254611895919061216d565b909155506118a590503082611c36565b604080518281524260208201527fd23443dd319810153e81eb4de570440dbff0f207c19b68eabf15b159644505c9910160405180910390a150506116ad6001600555565b5f60105f61192b85858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250611a8992505050565b805160209182012082528101919091526040015f20546001600160a01b03169392505050565b61195e8383836001611c6e565b505050565b5f808211801561198b57506001600160a01b0383165f908152600c602052604090205460ff16155b801561199a575061022b600754105b6119a4575f6119a7565b60015b60ff169392505050565b6001600160a01b038381165f908152600160209081526040808320938616835292905220545f198114611a265781811015611a1857604051637dc7a0d960e11b81526001600160a01b03841660048201526024810182905260448101839052606401610ca0565b611a2684848484035f611c6e565b50505050565b6001600160a01b038316611a5557604051634b637e8f60e11b81525f6004820152602401610ca0565b6001600160a01b038216611a7e5760405163ec442f0560e01b81525f6004820152602401610ca0565b61195e838383611d40565b60605f8290506003815110158015611ad257508060038251611aab9190612143565b81518110611abb57611abb6122f6565b6020910101516001600160f81b031916601760f91b145b8015611b0f57508060028251611ae89190612143565b81518110611af857611af86122f6565b6020910101516001600160f81b031916606160f81b145b8015611b4c57508060018251611b259190612143565b81518110611b3557611b356122f6565b6020910101516001600160f81b031916606960f81b145b15611c05575f60038251611b609190612143565b67ffffffffffffffff811115611b7857611b78612197565b6040519080825280601f01601f191660200182016040528015611ba2576020820181803683370190505b5090505f5b8151811015611bfd57828181518110611bc257611bc26122f6565b602001015160f81c60f81b828281518110611bdf57611bdf6122f6565b60200101906001600160f81b03191690815f1a905350600101611ba7565b509392505050565b5090919050565b600260055403611c2f57604051633ee5aeb560e01b815260040160405180910390fd5b6002600555565b6001600160a01b038216611c5f57604051634b637e8f60e11b81525f6004820152602401610ca0565b611c6a825f83611d40565b5050565b6001600160a01b038416611c975760405163e602df0560e01b81525f6004820152602401610ca0565b6001600160a01b038316611cc057604051634a1406b160e11b81525f6004820152602401610ca0565b6001600160a01b038085165f9081526001602090815260408083209387168352929052208290558015611a2657826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051611d3291815260200190565b60405180910390a350505050565b6001600160a01b038316611d6a578060025f828254611d5f919061216d565b90915550611dda9050565b6001600160a01b0383165f9081526020819052604090205481811015611dbc5760405163391434e360e21b81526001600160a01b03851660048201526024810182905260448101839052606401610ca0565b6001600160a01b0384165f9081526020819052604090209082900390555b6001600160a01b038216611df657600280548290039055611e14565b6001600160a01b0382165f9081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611e5991815260200190565b60405180910390a3505050565b5f5b83811015611e80578181015183820152602001611e68565b50505f910152565b602081525f8251806020840152611ea6816040850160208701611e66565b601f01601f19169190910160400192915050565b6001600160a01b0381168114611ece575f80fd5b50565b5f8060408385031215611ee2575f80fd5b8235611eed81611eba565b946020939093013593505050565b5f8060408385031215611f0c575f80fd5b823591506020830135611f1e81611eba565b809150509250929050565b5f60208284031215611f39575f80fd5b813561092181611eba565b5f805f60608486031215611f56575f80fd5b8335611f6181611eba565b92506020840135611f7181611eba565b929592945050506040919091013590565b5f8083601f840112611f92575f80fd5b50813567ffffffffffffffff811115611fa9575f80fd5b602083019150836020828501011115611fc0575f80fd5b9250929050565b5f805f60408486031215611fd9575f80fd5b8335611fe481611eba565b9250602084013567ffffffffffffffff811115611fff575f80fd5b61200b86828701611f82565b9497909650939450505050565b5f805f805f6060868803121561202c575f80fd5b85359450602086013567ffffffffffffffff8082111561204a575f80fd5b61205689838a01611f82565b9096509450604088013591508082111561206e575f80fd5b5061207b88828901611f82565b969995985093965092949392505050565b5f806040838503121561209d575f80fd5b82356120a881611eba565b91506020830135611f1e81611eba565b5f80602083850312156120c9575f80fd5b823567ffffffffffffffff8111156120df575f80fd5b6120eb85828601611f82565b90969095509350505050565b600181811c9082168061210b57607f821691505b60208210810361212957634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b818103818111156108f4576108f461212f565b80820281158282048414176108f4576108f461212f565b808201808211156108f4576108f461212f565b5f60208284031215612190575f80fd5b5051919050565b634e487b7160e01b5f52604160045260245ffd5b5f602082840312156121bb575f80fd5b815167ffffffffffffffff808211156121d2575f80fd5b818401915084601f8301126121e5575f80fd5b8151818111156121f7576121f7612197565b604051601f8201601f19908116603f0116810190838211818310171561221f5761221f612197565b81604052828152876020848701011115612237575f80fd5b612248836020830160208801611e66565b979650505050505050565b5f60208284031215612263575f80fd5b815161092181611eba565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b602081525f6122a960208301848661226e565b949350505050565b60e081525f6122c460e083018a8c61226e565b60208301989098525060408101959095526060850193909352608084019190915260a083015260c09091015292915050565b634e487b7160e01b5f52603260045260245ffdfea2646970667358221220bb1c34b251fff5db210c76fdc7dd482dd9f079288c0437d59df711449eec82ee64736f6c63430008180033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000045e2c8a09022914ce00cfce9a93dd3fda54d8686000000000000000000000000000000000000000000000000000000000000000ce585abe88d92e9809ae5ae9d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044248544200000000000000000000000000000000000000000000000000000000","recompiledBytecode":"0x61010060405234801562000011575f80fd5b50604051620028e4380380620028e483398101604081905262000034916200033c565b828260036200004483826200044d565b5060046200005382826200044d565b50506001600555506001600160a01b038116620000b75760405162461bcd60e51b815260206004820152601660248201527f7061796f7574206973207a65726f20616464726573730000000000000000000060448201526064015b60405180910390fd5b6001600160a01b0381166080524260a0819052620000da90620697809062000519565b60c052620000ed6301e133804262000519565b60e05262000107306a52b7d2dcc80cd2e400000062000110565b5050506200053f565b6001600160a01b0382166200013b5760405163ec442f0560e01b81525f6004820152602401620000ae565b620001485f83836200014c565b5050565b6001600160a01b0383166200017a578060025f8282546200016e919062000519565b90915550620001ec9050565b6001600160a01b0383165f9081526020819052604090205481811015620001ce5760405163391434e360e21b81526001600160a01b03851660048201526024810182905260448101839052606401620000ae565b6001600160a01b0384165f9081526020819052604090209082900390555b6001600160a01b0382166200020a5760028054829003905562000228565b6001600160a01b0382165f9081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200026e91815260200190565b60405180910390a3505050565b634e487b7160e01b5f52604160045260245ffd5b5f82601f8301126200029f575f80fd5b81516001600160401b0380821115620002bc57620002bc6200027b565b604051601f8301601f19908116603f01168101908282118183101715620002e757620002e76200027b565b816040528381526020925086602085880101111562000304575f80fd5b5f91505b8382101562000327578582018301518183018401529082019062000308565b5f602085830101528094505050505092915050565b5f805f606084860312156200034f575f80fd5b83516001600160401b038082111562000366575f80fd5b62000374878388016200028f565b945060208601519150808211156200038a575f80fd5b5062000399868287016200028f565b604086015190935090506001600160a01b0381168114620003b8575f80fd5b809150509250925092565b600181811c90821680620003d857607f821691505b602082108103620003f757634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156200044857805f5260205f20601f840160051c81016020851015620004245750805b601f840160051c820191505b8181101562000445575f815560010162000430565b50505b505050565b81516001600160401b038111156200046957620004696200027b565b62000481816200047a8454620003c3565b84620003fd565b602080601f831160018114620004b7575f84156200049f5750858301515b5f19600386901b1c1916600185901b17855562000511565b5f85815260208120601f198616915b82811015620004e757888601518255948401946001909101908401620004c6565b50858210156200050557878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b808201808211156200053957634e487b7160e01b5f52601160045260245ffd5b92915050565b60805160a05160c05160e051612340620005a45f395f818161040901526114d201525f81816107e501528181610c3f015281816116d7015261175e01525f6105ef01525f8181610528015281816113ad01528181611588015261160101526123405ff3fe608060405260043610610275575f3560e01c80636dbc45821161014a578063a0388ca6116100be578063c5de72dd11610078578063c5de72dd14610762578063c63de8101461077b578063dd62ed3e14610790578063ea2b4ab2146107d4578063ed2b606d14610807578063f5eb42dc14610826575f80fd5b8063a0388ca6146106bb578063a0b93856146106e9578063a9059cbb146106fe578063b4d0df8a1461071d578063b52a585114610731578063c084f54014610745575f80fd5b806385e3f9971161010f57806385e3f997146106255780638854a0ff1461063a578063902d55a5146106615780639106d7ba1461067f57806395d89b41146106935780639b8906ae146106a7575f80fd5b80636dbc45821461056257806370a082311461057f578063735f21be146105b357806378e97925146105de5780638099b00214610611575f80fd5b8063313ce567116101ec5780634db159f5116101a65780634db159f514610495578063510040cb146104aa5780636101b37f146104be57806361c0b6a0146104d357806362bc5f7b1461050157806363bd1d4a14610517575f80fd5b8063313ce567146103dd5780633c78929e146103f85780633ce165031461042b57806340036e4914610440578063485d38341461045f5780634bddda1514610476575f80fd5b806318160ddd1161023d57806318160ddd146103285780631e130f9e1461033c5780632115e5ce1461037057806323b872dd1461038f5780632880ea9e146103ae5780632b5e5809146103c8575f80fd5b806306fdde0314610279578063095ea7b3146102a357806310b985d4146102d257806313b0be33146102f557806315cccf3514610314575b5f80fd5b348015610284575f80fd5b5061028d610851565b60405161029a9190611e88565b60405180910390f35b3480156102ae575f80fd5b506102c26102bd366004611ed1565b6108e1565b604051901515815260200161029a565b3480156102dd575f80fd5b506102e760085481565b60405190815260200161029a565b348015610300575f80fd5b506102e761030f366004611efb565b6108fa565b34801561031f575f80fd5b506102e7610928565b348015610333575f80fd5b506002546102e7565b348015610347575f80fd5b506102e7610356366004611f29565b6001600160a01b03165f908152600f602052604090205490565b34801561037b575f80fd5b506102e761038a366004611f29565b610976565b34801561039a575f80fd5b506102c26103a9366004611f44565b610999565b3480156103b9575f80fd5b506102e766071afd498d000081565b3480156103d3575f80fd5b506102e7600a5481565b3480156103e8575f80fd5b506040516012815260200161029a565b348015610403575f80fd5b506102e77f000000000000000000000000000000000000000000000000000000000000000081565b348015610436575f80fd5b506102e761022b81565b34801561044b575f80fd5b506102c261045a366004611fc7565b6109bc565b34801561046a575f80fd5b506102e76301e1338081565b348015610481575f80fd5b506102e7610490366004611f29565b610bd9565b6104a86104a3366004612018565b610c35565b005b3480156104b5575f80fd5b506104a86114c8565b3480156104c9575f80fd5b506102e760075481565b3480156104de575f80fd5b506102c26104ed366004611f29565b600c6020525f908152604090205460ff1681565b34801561050c575f80fd5b506102e76206978081565b348015610522575f80fd5b5061054a7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161029a565b34801561056d575f80fd5b506102e769012d231c7c593eec000081565b34801561058a575f80fd5b506102e7610599366004611f29565b6001600160a01b03165f9081526020819052604090205490565b3480156105be575f80fd5b506102e76105cd366004611f29565b600d6020525f908152604090205481565b3480156105e9575f80fd5b506102e77f000000000000000000000000000000000000000000000000000000000000000081565b34801561061c575f80fd5b506102e7600a81565b348015610630575f80fd5b506102e76115b381565b348015610645575f80fd5b5061054a7360b9262456de011f7d15a54cdd8c48baaa8b022f81565b34801561066c575f80fd5b506102e76a52b7d2dcc80cd2e400000081565b34801561068a575f80fd5b506102e76116af565b34801561069e575f80fd5b5061028d6116c5565b3480156106b2575f80fd5b506102c26116d4565b3480156106c6575f80fd5b506102c26106d5366004611f29565b600e6020525f908152604090205460ff1681565b3480156106f4575f80fd5b506102e760095481565b348015610709575f80fd5b506102c2610718366004611ed1565b611711565b348015610728575f80fd5b506102e761171e565b34801561073c575f80fd5b506104a8611754565b348015610750575f80fd5b506102e769034b3cfd4613f12c000081565b34801561076d575f80fd5b506006546102c29060ff1681565b348015610786575f80fd5b506102e761138881565b34801561079b575f80fd5b506102e76107aa36600461208c565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b3480156107df575f80fd5b506102e77f000000000000000000000000000000000000000000000000000000000000000081565b348015610812575f80fd5b5061054a6108213660046120b8565b6118e9565b348015610831575f80fd5b506102e7610840366004611f29565b600b6020525f908152604090205481565b606060038054610860906120f7565b80601f016020809104026020016040519081016040528092919081815260200182805461088c906120f7565b80156108d75780601f106108ae576101008083540402835291602001916108d7565b820191905f5260205f20905b8154815290600101906020018083116108ba57829003601f168201915b5050505050905090565b5f336108ee818585611951565b60019150505b92915050565b5f66071afd498d000061090d8385611963565b6109179085612143565b6109219190612156565b9392505050565b61093e69034b3cfd4613f12c0000611388612156565b61095469012d231c7c593eec000061022b612156565b61095e919061216d565b610973906a52b7d2dcc80cd2e4000000612143565b81565b6001600160a01b0381165f908152600d60205260408120546108f490600a61216d565b5f336109a68582856119b1565b6109b1858585611a2c565b506001949350505050565b5f806109fc84848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250611a8992505050565b905080515f03610a0f575f915050610921565b6040516370a0823160e01b81526001600160a01b03861660048201527360b9262456de011f7d15a54cdd8c48baaa8b022f906370a0823190602401602060405180830381865afa158015610a65573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a899190612180565b5f03610a98575f915050610921565b604051633142854560e21b81526001600160a01b03861660048201525f90610b1f907360b9262456de011f7d15a54cdd8c48baaa8b022f9063c50a1514906024015f60405180830381865afa158015610af3573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610b1a91908101906121ab565b611a89565b90508180519060200120818051906020012014610b40575f92505050610921565b815160208301206040516331a9108f60e11b8152600481018290526001600160a01b038816907360b9262456de011f7d15a54cdd8c48baaa8b022f90636352211e90602401602060405180830381865afa158015610ba0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bc49190612253565b6001600160a01b031614979650505050505050565b5f80610be483610976565b6001600160a01b0384165f908152600b6020526040902054909150811115610c2d576001600160a01b0383165f908152600b6020526040902054610c289082612143565b610921565b5f9392505050565b610c3d611c0c565b7f00000000000000000000000000000000000000000000000000000000000000004210610ca95760405162461bcd60e51b8152602060048201526015602482015274135a5b9d081dda5b991bddc81a185cc8195b991959605a1b60448201526064015b60405180910390fd5b6115b3610cb46116af565b10610cf95760405162461bcd60e51b815260206004820152601560248201527411d95b995cda5cc81cd85b19481cdbdb19081bdd5d605a1b6044820152606401610ca0565b6001851015610d3c5760405162461bcd60e51b815260206004820152600f60248201526e4d696e696d756d203120736861726560881b6044820152606401610ca0565b82610d805760405162461bcd60e51b81526020600482015260146024820152731059d95b9d081251081a5cc81c995c5d5a5c995960621b6044820152606401610ca0565b610d8933610976565b335f908152600b6020526040902054610da390879061216d565b1115610df15760405162461bcd60e51b815260206004820152601c60248201527f4578636565647320746865207065722d77616c6c6574206c696d6974000000006044820152606401610ca0565b6115b385610dfd6116af565b610e07919061216d565b1115610e4c5760405162461bcd60e51b81526020600482015260146024820152734578636565647320746f74616c2073686172657360601b6044820152606401610ca0565b610e573385856109bc565b610eb15760405162461bcd60e51b815260206004820152602560248201527f4167656e74204944206e6f7420766572696669656420666f7220746869732077604482015264185b1b195d60da1b6064820152608401610ca0565b5f610ef085858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250611a8992505050565b8051602091820120335f908152600f909252604090912054909150610fb8575f818152601060205260409020546001600160a01b031615610f845760405162461bcd60e51b815260206004820152602860248201527f4167656e7420494420616c726561647920626f756e6420746f20616e6f7468656044820152671c881dd85b1b195d60c21b6064820152608401610ca0565b335f818152600f602090815260408083208590558483526010909152902080546001600160a01b0319169091179055611021565b335f908152600f602052604090205481146110215760405162461bcd60e51b815260206004820152602360248201527f4167656e7420494420646f6573206e6f74206d6174636820746869732077616c6044820152621b195d60ea1b6064820152608401610ca0565b5f61102c3388611963565b90505f6110398289612143565b90506113888160085461104c919061216d565b111561109a5760405162461bcd60e51b815260206004820152601a60248201527f506169642073686172652071756f7461206578686175737465640000000000006044820152606401610ca0565b5f6110ac66071afd498d000083612156565b90508034146110f45760405162461bcd60e51b8152602060048201526014602482015273125b98dbdc9c9958dd0810939088185b5bdd5b9d60621b6044820152606401610ca0565b5f61110969034b3cfd4613f12c000084612156565b61111d69012d231c7c593eec000086612156565b611127919061216d565b90508360010361116257600160075f828254611143919061216d565b9091555050335f908152600c60205260409020805460ff191660011790555b8260085f828254611173919061216d565b9091555050335f908152600b6020526040812080548c929061119690849061216d565b925050819055503460095f8282546111ae919061216d565b909155505085156112e6575f60105f6111fb8a8a8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250611a8992505050565b805160209182012082528101919091526040015f20546001600160a01b03169050801580159061123457506001600160a01b0381163314155b801561124f5750335f908152600e602052604090205460ff16155b156112e457335f908152600e60209081526040808320805460ff191660019081179091556001600160a01b0385168452600d909252822080549192909161129790849061216d565b909155505060405133906001600160a01b038316907f99b028dd597faf0b2ad0e538fc15267c0b023e6e7b4fbae549419dc63ec795d1906112db908c908c90612296565b60405180910390a35b505b6112fc69034b3cfd4613f12c0000611388612156565b61131269012d231c7c593eec000061022b612156565b61131c919061216d565b611331906a52b7d2dcc80cd2e4000000612143565b305f9081526020819052604090205461134b908390612143565b10156113995760405162461bcd60e51b815260206004820152601c60248201527f496e73756666696369656e742067656e657369732072657365727665000000006044820152606401610ca0565b6113a4303383611a2c565b3415611463575f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316346040515f6040518083038185875af1925050503d805f8114611413576040519150601f19603f3d011682016040523d82523d5f602084013e611418565b606091505b50509050806114615760405162461bcd60e51b815260206004820152601560248201527410939088199bdc9dd85c991a5b99c819985a5b1959605a1b6044820152606401610ca0565b505b336001600160a01b03167f66b57df7aba118d24ed7972643e779f593eb515f67a6faa387db1e5975aab0758a8a8d88888734426040516114aa9897969594939291906122b1565b60405180910390a250505050506114c16001600555565b5050505050565b6114d0611c0c565b7f000000000000000000000000000000000000000000000000000000000000000042101561152f5760405162461bcd60e51b815260206004820152600c60248201526b14dd1a5b1b081b1bd8dad95960a21b6044820152606401610ca0565b60065460ff16156115755760405162461bcd60e51b815260206004820152601060248201526f105b1c9958591e481c995b19585cd95960821b6044820152606401610ca0565b6006805460ff191660011790556115f7307f00000000000000000000000000000000000000000000000000000000000000006115bd69034b3cfd4613f12c0000611388612156565b6115d369012d231c7c593eec000061022b612156565b6115dd919061216d565b6115f2906a52b7d2dcc80cd2e4000000612143565b611a2c565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000167f7bbe9c0ab7edf3877274e19436d2e10ecb76324ae6afd629d2f928f1aff8165161165869034b3cfd4613f12c0000611388612156565b61166e69012d231c7c593eec000061022b612156565b611678919061216d565b61168d906a52b7d2dcc80cd2e4000000612143565b604080519182524260208301520160405180910390a26116ad6001600555565b565b5f6008546007546116c0919061216d565b905090565b606060048054610860906120f7565b5f7f0000000000000000000000000000000000000000000000000000000000000000421015806116c057506115b361170a6116af565b1015905090565b5f336108ee818585611a2c565b61173469034b3cfd4613f12c0000611388612156565b61174a69012d231c7c593eec000061022b612156565b610973919061216d565b61175c611c0c565b7f00000000000000000000000000000000000000000000000000000000000000004210156117c55760405162461bcd60e51b815260206004820152601660248201527526b4b73a103bb4b73237bb9039ba34b6361037b832b760511b6044820152606401610ca0565b6006545f9060ff16611821576117e769034b3cfd4613f12c0000611388612156565b6117fd69012d231c7c593eec000061022b612156565b611807919061216d565b61181c906a52b7d2dcc80cd2e4000000612143565b611823565b5f5b305f9081526020819052604081205491925090611841908390612143565b90505f81116118845760405162461bcd60e51b815260206004820152600f60248201526e2737ba3434b733903a3790313ab93760891b6044820152606401610ca0565b80600a5f828254611895919061216d565b909155506118a590503082611c36565b604080518281524260208201527fd23443dd319810153e81eb4de570440dbff0f207c19b68eabf15b159644505c9910160405180910390a150506116ad6001600555565b5f60105f61192b85858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250611a8992505050565b805160209182012082528101919091526040015f20546001600160a01b03169392505050565b61195e8383836001611c6e565b505050565b5f808211801561198b57506001600160a01b0383165f908152600c602052604090205460ff16155b801561199a575061022b600754105b6119a4575f6119a7565b60015b60ff169392505050565b6001600160a01b038381165f908152600160209081526040808320938616835292905220545f198114611a265781811015611a1857604051637dc7a0d960e11b81526001600160a01b03841660048201526024810182905260448101839052606401610ca0565b611a2684848484035f611c6e565b50505050565b6001600160a01b038316611a5557604051634b637e8f60e11b81525f6004820152602401610ca0565b6001600160a01b038216611a7e5760405163ec442f0560e01b81525f6004820152602401610ca0565b61195e838383611d40565b60605f8290506003815110158015611ad257508060038251611aab9190612143565b81518110611abb57611abb6122f6565b6020910101516001600160f81b031916601760f91b145b8015611b0f57508060028251611ae89190612143565b81518110611af857611af86122f6565b6020910101516001600160f81b031916606160f81b145b8015611b4c57508060018251611b259190612143565b81518110611b3557611b356122f6565b6020910101516001600160f81b031916606960f81b145b15611c05575f60038251611b609190612143565b67ffffffffffffffff811115611b7857611b78612197565b6040519080825280601f01601f191660200182016040528015611ba2576020820181803683370190505b5090505f5b8151811015611bfd57828181518110611bc257611bc26122f6565b602001015160f81c60f81b828281518110611bdf57611bdf6122f6565b60200101906001600160f81b03191690815f1a905350600101611ba7565b509392505050565b5090919050565b600260055403611c2f57604051633ee5aeb560e01b815260040160405180910390fd5b6002600555565b6001600160a01b038216611c5f57604051634b637e8f60e11b81525f6004820152602401610ca0565b611c6a825f83611d40565b5050565b6001600160a01b038416611c975760405163e602df0560e01b81525f6004820152602401610ca0565b6001600160a01b038316611cc057604051634a1406b160e11b81525f6004820152602401610ca0565b6001600160a01b038085165f9081526001602090815260408083209387168352929052208290558015611a2657826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051611d3291815260200190565b60405180910390a350505050565b6001600160a01b038316611d6a578060025f828254611d5f919061216d565b90915550611dda9050565b6001600160a01b0383165f9081526020819052604090205481811015611dbc5760405163391434e360e21b81526001600160a01b03851660048201526024810182905260448101839052606401610ca0565b6001600160a01b0384165f9081526020819052604090209082900390555b6001600160a01b038216611df657600280548290039055611e14565b6001600160a01b0382165f9081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611e5991815260200190565b60405180910390a3505050565b5f5b83811015611e80578181015183820152602001611e68565b50505f910152565b602081525f8251806020840152611ea6816040850160208701611e66565b601f01601f19169190910160400192915050565b6001600160a01b0381168114611ece575f80fd5b50565b5f8060408385031215611ee2575f80fd5b8235611eed81611eba565b946020939093013593505050565b5f8060408385031215611f0c575f80fd5b823591506020830135611f1e81611eba565b809150509250929050565b5f60208284031215611f39575f80fd5b813561092181611eba565b5f805f60608486031215611f56575f80fd5b8335611f6181611eba565b92506020840135611f7181611eba565b929592945050506040919091013590565b5f8083601f840112611f92575f80fd5b50813567ffffffffffffffff811115611fa9575f80fd5b602083019150836020828501011115611fc0575f80fd5b9250929050565b5f805f60408486031215611fd9575f80fd5b8335611fe481611eba565b9250602084013567ffffffffffffffff811115611fff575f80fd5b61200b86828701611f82565b9497909650939450505050565b5f805f805f6060868803121561202c575f80fd5b85359450602086013567ffffffffffffffff8082111561204a575f80fd5b61205689838a01611f82565b9096509450604088013591508082111561206e575f80fd5b5061207b88828901611f82565b969995985093965092949392505050565b5f806040838503121561209d575f80fd5b82356120a881611eba565b91506020830135611f1e81611eba565b5f80602083850312156120c9575f80fd5b823567ffffffffffffffff8111156120df575f80fd5b6120eb85828601611f82565b90969095509350505050565b600181811c9082168061210b57607f821691505b60208210810361212957634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b818103818111156108f4576108f461212f565b80820281158282048414176108f4576108f461212f565b808201808211156108f4576108f461212f565b5f60208284031215612190575f80fd5b5051919050565b634e487b7160e01b5f52604160045260245ffd5b5f602082840312156121bb575f80fd5b815167ffffffffffffffff808211156121d2575f80fd5b818401915084601f8301126121e5575f80fd5b8151818111156121f7576121f7612197565b604051601f8201601f19908116603f0116810190838211818310171561221f5761221f612197565b81604052828152876020848701011115612237575f80fd5b612248836020830160208801611e66565b979650505050505050565b5f60208284031215612263575f80fd5b815161092181611eba565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b602081525f6122a960208301848661226e565b949350505050565b60e081525f6122c460e083018a8c61226e565b60208301989098525060408101959095526060850193909352608084019190915260a083015260c09091015292915050565b634e487b7160e01b5f52603260045260245ffdfea2646970667358221220bb1c34b251fff5db210c76fdc7dd482dd9f079288c0437d59df711449eec82ee64736f6c63430008180033","sourceMap":"1459:8839:6:-:0;;;3839:387;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3926:5;3933:7;1962:5:1;:13;3926:5:6;1962::1;:13;:::i;:::-;-1:-1:-1;1985:7:1;:17;1995:7;1985;:17;:::i;:::-;-1:-1:-1;;1713:1:5;1917:7;:21;-1:-1:-1;;;;;;3960:21:6;::::1;3952:56;;;::::0;-1:-1:-1;;;3952:56:6;;4494:2:7;3952:56:6::1;::::0;::::1;4476:21:7::0;4533:2;4513:18;;;4506:30;4572:24;4552:18;;;4545:52;4614:18;;3952:56:6::1;;;;;;;;;-1:-1:-1::0;;;;;4018:16:6;::::1;;::::0;4056:15:::1;4044:27;::::0;;;4091:31:::1;::::0;2289:6:::1;::::0;4091:31:::1;:::i;:::-;4081:41;::::0;4144:31:::1;2235:8;4144:15;:31;:::i;:::-;4132:43;::::0;4185:34:::1;4199:4;1579:18;4185:5;:34::i;:::-;3839:387:::0;;;1459:8839;;7721:208:1;-1:-1:-1;;;;;7791:21:1;;7787:91;;7835:32;;-1:-1:-1;;;7835:32:1;;7864:1;7835:32;;;5016:51:7;4989:18;;7835:32:1;4870:203:7;7787:91:1;7887:35;7903:1;7907:7;7916:5;7887:7;:35::i;:::-;7721:208;;:::o;6271:1107::-;-1:-1:-1;;;;;6360:18:1;;6356:540;;6512:5;6496:12;;:21;;;;;;;:::i;:::-;;;;-1:-1:-1;6356:540:1;;-1:-1:-1;6356:540:1;;-1:-1:-1;;;;;6570:15:1;;6548:19;6570:15;;;;;;;;;;;6603:19;;;6599:115;;;6649:50;;-1:-1:-1;;;6649:50:1;;-1:-1:-1;;;;;5298:32:7;;6649:50:1;;;5280:51:7;5347:18;;;5340:34;;;5390:18;;;5383:34;;;5253:18;;6649:50:1;5078:345:7;6599:115:1;-1:-1:-1;;;;;6834:15:1;;:9;:15;;;;;;;;;;6852:19;;;;6834:37;;6356:540;-1:-1:-1;;;;;6910:16:1;;6906:425;;7073:12;:21;;;;;;;6906:425;;;-1:-1:-1;;;;;7284:13:1;;:9;:13;;;;;;;;;;:22;;;;;;6906:425;7361:2;-1:-1:-1;;;;;7346:25:1;7355:4;-1:-1:-1;;;;;7346:25:1;;7365:5;7346:25;;;;5574::7;;5562:2;5547:18;;5428:177;7346:25:1;;;;;;;;6271:1107;;;:::o;14:127:7:-;75:10;70:3;66:20;63:1;56:31;106:4;103:1;96:15;130:4;127:1;120:15;146:844;200:5;253:3;246:4;238:6;234:17;230:27;220:55;;271:1;268;261:12;220:55;294:13;;-1:-1:-1;;;;;356:10:7;;;353:36;;;369:18;;:::i;:::-;444:2;438:9;412:2;498:13;;-1:-1:-1;;494:22:7;;;518:2;490:31;486:40;474:53;;;542:18;;;562:22;;;539:46;536:72;;;588:18;;:::i;:::-;628:10;624:2;617:22;663:2;655:6;648:18;685:4;675:14;;732:3;725:4;720:2;712:6;708:15;704:26;701:35;698:55;;;749:1;746;739:12;698:55;771:1;762:10;;781:133;795:2;792:1;789:9;781:133;;;883:14;;;879:23;;873:30;852:14;;;848:23;;841:63;806:10;;;;781:133;;;958:1;951:4;946:2;938:6;934:15;930:26;923:37;978:6;969:15;;;;;;146:844;;;;:::o;995:737::-;1111:6;1119;1127;1180:2;1168:9;1159:7;1155:23;1151:32;1148:52;;;1196:1;1193;1186:12;1148:52;1223:16;;-1:-1:-1;;;;;1288:14:7;;;1285:34;;;1315:1;1312;1305:12;1285:34;1338:61;1391:7;1382:6;1371:9;1367:22;1338:61;:::i;:::-;1328:71;;1445:2;1434:9;1430:18;1424:25;1408:41;;1474:2;1464:8;1461:16;1458:36;;;1490:1;1487;1480:12;1458:36;;1513:63;1568:7;1557:8;1546:9;1542:24;1513:63;:::i;:::-;1619:2;1604:18;;1598:25;1503:73;;-1:-1:-1;1598:25:7;-1:-1:-1;;;;;;1652:31:7;;1642:42;;1632:70;;1698:1;1695;1688:12;1632:70;1721:5;1711:15;;;995:737;;;;;:::o;1737:380::-;1816:1;1812:12;;;;1859;;;1880:61;;1934:4;1926:6;1922:17;1912:27;;1880:61;1987:2;1979:6;1976:14;1956:18;1953:38;1950:161;;2033:10;2028:3;2024:20;2021:1;2014:31;2068:4;2065:1;2058:15;2096:4;2093:1;2086:15;1950:161;;1737:380;;;:::o;2248:518::-;2350:2;2345:3;2342:11;2339:421;;;2386:5;2383:1;2376:16;2430:4;2427:1;2417:18;2500:2;2488:10;2484:19;2481:1;2477:27;2471:4;2467:38;2536:4;2524:10;2521:20;2518:47;;;-1:-1:-1;2559:4:7;2518:47;2614:2;2609:3;2605:12;2602:1;2598:20;2592:4;2588:31;2578:41;;2669:81;2687:2;2680:5;2677:13;2669:81;;;2746:1;2732:16;;2713:1;2702:13;2669:81;;;2673:3;;2339:421;2248:518;;;:::o;2942:1345::-;3062:10;;-1:-1:-1;;;;;3084:30:7;;3081:56;;;3117:18;;:::i;:::-;3146:97;3236:6;3196:38;3228:4;3222:11;3196:38;:::i;:::-;3190:4;3146:97;:::i;:::-;3298:4;;3355:2;3344:14;;3372:1;3367:663;;;;4074:1;4091:6;4088:89;;;-1:-1:-1;4143:19:7;;;4137:26;4088:89;-1:-1:-1;;2899:1:7;2895:11;;;2891:24;2887:29;2877:40;2923:1;2919:11;;;2874:57;4190:81;;3337:944;;3367:663;2195:1;2188:14;;;2232:4;2219:18;;-1:-1:-1;;3403:20:7;;;3521:236;3535:7;3532:1;3529:14;3521:236;;;3624:19;;;3618:26;3603:42;;3716:27;;;;3684:1;3672:14;;;;3551:19;;3521:236;;;3525:3;3785:6;3776:7;3773:19;3770:201;;;3846:19;;;3840:26;-1:-1:-1;;3929:1:7;3925:14;;;3941:3;3921:24;3917:37;3913:42;3898:58;3883:74;;3770:201;;;4017:1;4008:6;4005:1;4001:14;3997:22;3991:4;3984:36;3337:944;;;;;2942:1345;;:::o;4643:222::-;4708:9;;;4729:10;;;4726:133;;;4781:10;4776:3;4772:20;4769:1;4762:31;4816:4;4813:1;4806:15;4844:4;4841:1;4834:15;4726:133;4643:222;;;;:::o;5428:177::-;1459:8839:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","linkReferences":{},"cborAuxdata":{"1":{"value":"0xa2646970667358221220bb1c34b251fff5db210c76fdc7dd482dd9f079288c0437d59df711449eec82ee64736f6c63430008180033","offset":10415}},"transformations":[{"type":"insert","offset":10468,"reason":"constructorArguments"}],"transformationValues":{"constructorArguments":"0x000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000045e2c8a09022914ce00cfce9a93dd3fda54d8686000000000000000000000000000000000000000000000000000000000000000ce585abe88d92e9809ae5ae9d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044248544200000000000000000000000000000000000000000000000000000000"}},"runtimeBytecode":{"onchainBytecode":"0x608060405260043610610275575f3560e01c80636dbc45821161014a578063a0388ca6116100be578063c5de72dd11610078578063c5de72dd14610762578063c63de8101461077b578063dd62ed3e14610790578063ea2b4ab2146107d4578063ed2b606d14610807578063f5eb42dc14610826575f80fd5b8063a0388ca6146106bb578063a0b93856146106e9578063a9059cbb146106fe578063b4d0df8a1461071d578063b52a585114610731578063c084f54014610745575f80fd5b806385e3f9971161010f57806385e3f997146106255780638854a0ff1461063a578063902d55a5146106615780639106d7ba1461067f57806395d89b41146106935780639b8906ae146106a7575f80fd5b80636dbc45821461056257806370a082311461057f578063735f21be146105b357806378e97925146105de5780638099b00214610611575f80fd5b8063313ce567116101ec5780634db159f5116101a65780634db159f514610495578063510040cb146104aa5780636101b37f146104be57806361c0b6a0146104d357806362bc5f7b1461050157806363bd1d4a14610517575f80fd5b8063313ce567146103dd5780633c78929e146103f85780633ce165031461042b57806340036e4914610440578063485d38341461045f5780634bddda1514610476575f80fd5b806318160ddd1161023d57806318160ddd146103285780631e130f9e1461033c5780632115e5ce1461037057806323b872dd1461038f5780632880ea9e146103ae5780632b5e5809146103c8575f80fd5b806306fdde0314610279578063095ea7b3146102a357806310b985d4146102d257806313b0be33146102f557806315cccf3514610314575b5f80fd5b348015610284575f80fd5b5061028d610851565b60405161029a9190611e88565b60405180910390f35b3480156102ae575f80fd5b506102c26102bd366004611ed1565b6108e1565b604051901515815260200161029a565b3480156102dd575f80fd5b506102e760085481565b60405190815260200161029a565b348015610300575f80fd5b506102e761030f366004611efb565b6108fa565b34801561031f575f80fd5b506102e7610928565b348015610333575f80fd5b506002546102e7565b348015610347575f80fd5b506102e7610356366004611f29565b6001600160a01b03165f908152600f602052604090205490565b34801561037b575f80fd5b506102e761038a366004611f29565b610976565b34801561039a575f80fd5b506102c26103a9366004611f44565b610999565b3480156103b9575f80fd5b506102e766071afd498d000081565b3480156103d3575f80fd5b506102e7600a5481565b3480156103e8575f80fd5b506040516012815260200161029a565b348015610403575f80fd5b506102e77f000000000000000000000000000000000000000000000000000000006cd1942981565b348015610436575f80fd5b506102e761022b81565b34801561044b575f80fd5b506102c261045a366004611fc7565b6109bc565b34801561046a575f80fd5b506102e76301e1338081565b348015610481575f80fd5b506102e7610490366004611f29565b610bd9565b6104a86104a3366004612018565b610c35565b005b3480156104b5575f80fd5b506104a86114c8565b3480156104c9575f80fd5b506102e760075481565b3480156104de575f80fd5b506102c26104ed366004611f29565b600c6020525f908152604090205460ff1681565b34801561050c575f80fd5b506102e76206978081565b348015610522575f80fd5b5061054a7f00000000000000000000000045e2c8a09022914ce00cfce9a93dd3fda54d868681565b6040516001600160a01b03909116815260200161029a565b34801561056d575f80fd5b506102e769012d231c7c593eec000081565b34801561058a575f80fd5b506102e7610599366004611f29565b6001600160a01b03165f9081526020819052604090205490565b3480156105be575f80fd5b506102e76105cd366004611f29565b600d6020525f908152604090205481565b3480156105e9575f80fd5b506102e77f000000000000000000000000000000000000000000000000000000006af060a981565b34801561061c575f80fd5b506102e7600a81565b348015610630575f80fd5b506102e76115b381565b348015610645575f80fd5b5061054a7360b9262456de011f7d15a54cdd8c48baaa8b022f81565b34801561066c575f80fd5b506102e76a52b7d2dcc80cd2e400000081565b34801561068a575f80fd5b506102e76116af565b34801561069e575f80fd5b5061028d6116c5565b3480156106b2575f80fd5b506102c26116d4565b3480156106c6575f80fd5b506102c26106d5366004611f29565b600e6020525f908152604090205460ff1681565b3480156106f4575f80fd5b506102e760095481565b348015610709575f80fd5b506102c2610718366004611ed1565b611711565b348015610728575f80fd5b506102e761171e565b34801561073c575f80fd5b506104a8611754565b348015610750575f80fd5b506102e769034b3cfd4613f12c000081565b34801561076d575f80fd5b506006546102c29060ff1681565b348015610786575f80fd5b506102e761138881565b34801561079b575f80fd5b506102e76107aa36600461208c565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b3480156107df575f80fd5b506102e77f000000000000000000000000000000000000000000000000000000006af6f82981565b348015610812575f80fd5b5061054a6108213660046120b8565b6118e9565b348015610831575f80fd5b506102e7610840366004611f29565b600b6020525f908152604090205481565b606060038054610860906120f7565b80601f016020809104026020016040519081016040528092919081815260200182805461088c906120f7565b80156108d75780601f106108ae576101008083540402835291602001916108d7565b820191905f5260205f20905b8154815290600101906020018083116108ba57829003601f168201915b5050505050905090565b5f336108ee818585611951565b60019150505b92915050565b5f66071afd498d000061090d8385611963565b6109179085612143565b6109219190612156565b9392505050565b61093e69034b3cfd4613f12c0000611388612156565b61095469012d231c7c593eec000061022b612156565b61095e919061216d565b610973906a52b7d2dcc80cd2e4000000612143565b81565b6001600160a01b0381165f908152600d60205260408120546108f490600a61216d565b5f336109a68582856119b1565b6109b1858585611a2c565b506001949350505050565b5f806109fc84848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250611a8992505050565b905080515f03610a0f575f915050610921565b6040516370a0823160e01b81526001600160a01b03861660048201527360b9262456de011f7d15a54cdd8c48baaa8b022f906370a0823190602401602060405180830381865afa158015610a65573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a899190612180565b5f03610a98575f915050610921565b604051633142854560e21b81526001600160a01b03861660048201525f90610b1f907360b9262456de011f7d15a54cdd8c48baaa8b022f9063c50a1514906024015f60405180830381865afa158015610af3573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610b1a91908101906121ab565b611a89565b90508180519060200120818051906020012014610b40575f92505050610921565b815160208301206040516331a9108f60e11b8152600481018290526001600160a01b038816907360b9262456de011f7d15a54cdd8c48baaa8b022f90636352211e90602401602060405180830381865afa158015610ba0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bc49190612253565b6001600160a01b031614979650505050505050565b5f80610be483610976565b6001600160a01b0384165f908152600b6020526040902054909150811115610c2d576001600160a01b0383165f908152600b6020526040902054610c289082612143565b610921565b5f9392505050565b610c3d611c0c565b7f000000000000000000000000000000000000000000000000000000006af6f8294210610ca95760405162461bcd60e51b8152602060048201526015602482015274135a5b9d081dda5b991bddc81a185cc8195b991959605a1b60448201526064015b60405180910390fd5b6115b3610cb46116af565b10610cf95760405162461bcd60e51b815260206004820152601560248201527411d95b995cda5cc81cd85b19481cdbdb19081bdd5d605a1b6044820152606401610ca0565b6001851015610d3c5760405162461bcd60e51b815260206004820152600f60248201526e4d696e696d756d203120736861726560881b6044820152606401610ca0565b82610d805760405162461bcd60e51b81526020600482015260146024820152731059d95b9d081251081a5cc81c995c5d5a5c995960621b6044820152606401610ca0565b610d8933610976565b335f908152600b6020526040902054610da390879061216d565b1115610df15760405162461bcd60e51b815260206004820152601c60248201527f4578636565647320746865207065722d77616c6c6574206c696d6974000000006044820152606401610ca0565b6115b385610dfd6116af565b610e07919061216d565b1115610e4c5760405162461bcd60e51b81526020600482015260146024820152734578636565647320746f74616c2073686172657360601b6044820152606401610ca0565b610e573385856109bc565b610eb15760405162461bcd60e51b815260206004820152602560248201527f4167656e74204944206e6f7420766572696669656420666f7220746869732077604482015264185b1b195d60da1b6064820152608401610ca0565b5f610ef085858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250611a8992505050565b8051602091820120335f908152600f909252604090912054909150610fb8575f818152601060205260409020546001600160a01b031615610f845760405162461bcd60e51b815260206004820152602860248201527f4167656e7420494420616c726561647920626f756e6420746f20616e6f7468656044820152671c881dd85b1b195d60c21b6064820152608401610ca0565b335f818152600f602090815260408083208590558483526010909152902080546001600160a01b0319169091179055611021565b335f908152600f602052604090205481146110215760405162461bcd60e51b815260206004820152602360248201527f4167656e7420494420646f6573206e6f74206d6174636820746869732077616c6044820152621b195d60ea1b6064820152608401610ca0565b5f61102c3388611963565b90505f6110398289612143565b90506113888160085461104c919061216d565b111561109a5760405162461bcd60e51b815260206004820152601a60248201527f506169642073686172652071756f7461206578686175737465640000000000006044820152606401610ca0565b5f6110ac66071afd498d000083612156565b90508034146110f45760405162461bcd60e51b8152602060048201526014602482015273125b98dbdc9c9958dd0810939088185b5bdd5b9d60621b6044820152606401610ca0565b5f61110969034b3cfd4613f12c000084612156565b61111d69012d231c7c593eec000086612156565b611127919061216d565b90508360010361116257600160075f828254611143919061216d565b9091555050335f908152600c60205260409020805460ff191660011790555b8260085f828254611173919061216d565b9091555050335f908152600b6020526040812080548c929061119690849061216d565b925050819055503460095f8282546111ae919061216d565b909155505085156112e6575f60105f6111fb8a8a8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250611a8992505050565b805160209182012082528101919091526040015f20546001600160a01b03169050801580159061123457506001600160a01b0381163314155b801561124f5750335f908152600e602052604090205460ff16155b156112e457335f908152600e60209081526040808320805460ff191660019081179091556001600160a01b0385168452600d909252822080549192909161129790849061216d565b909155505060405133906001600160a01b038316907f99b028dd597faf0b2ad0e538fc15267c0b023e6e7b4fbae549419dc63ec795d1906112db908c908c90612296565b60405180910390a35b505b6112fc69034b3cfd4613f12c0000611388612156565b61131269012d231c7c593eec000061022b612156565b61131c919061216d565b611331906a52b7d2dcc80cd2e4000000612143565b305f9081526020819052604090205461134b908390612143565b10156113995760405162461bcd60e51b815260206004820152601c60248201527f496e73756666696369656e742067656e657369732072657365727665000000006044820152606401610ca0565b6113a4303383611a2c565b3415611463575f7f00000000000000000000000045e2c8a09022914ce00cfce9a93dd3fda54d86866001600160a01b0316346040515f6040518083038185875af1925050503d805f8114611413576040519150601f19603f3d011682016040523d82523d5f602084013e611418565b606091505b50509050806114615760405162461bcd60e51b815260206004820152601560248201527410939088199bdc9dd85c991a5b99c819985a5b1959605a1b6044820152606401610ca0565b505b336001600160a01b03167f66b57df7aba118d24ed7972643e779f593eb515f67a6faa387db1e5975aab0758a8a8d88888734426040516114aa9897969594939291906122b1565b60405180910390a250505050506114c16001600555565b5050505050565b6114d0611c0c565b7f000000000000000000000000000000000000000000000000000000006cd1942942101561152f5760405162461bcd60e51b815260206004820152600c60248201526b14dd1a5b1b081b1bd8dad95960a21b6044820152606401610ca0565b60065460ff16156115755760405162461bcd60e51b815260206004820152601060248201526f105b1c9958591e481c995b19585cd95960821b6044820152606401610ca0565b6006805460ff191660011790556115f7307f00000000000000000000000045e2c8a09022914ce00cfce9a93dd3fda54d86866115bd69034b3cfd4613f12c0000611388612156565b6115d369012d231c7c593eec000061022b612156565b6115dd919061216d565b6115f2906a52b7d2dcc80cd2e4000000612143565b611a2c565b6001600160a01b037f00000000000000000000000045e2c8a09022914ce00cfce9a93dd3fda54d8686167f7bbe9c0ab7edf3877274e19436d2e10ecb76324ae6afd629d2f928f1aff8165161165869034b3cfd4613f12c0000611388612156565b61166e69012d231c7c593eec000061022b612156565b611678919061216d565b61168d906a52b7d2dcc80cd2e4000000612143565b604080519182524260208301520160405180910390a26116ad6001600555565b565b5f6008546007546116c0919061216d565b905090565b606060048054610860906120f7565b5f7f000000000000000000000000000000000000000000000000000000006af6f829421015806116c057506115b361170a6116af565b1015905090565b5f336108ee818585611a2c565b61173469034b3cfd4613f12c0000611388612156565b61174a69012d231c7c593eec000061022b612156565b610973919061216d565b61175c611c0c565b7f000000000000000000000000000000000000000000000000000000006af6f8294210156117c55760405162461bcd60e51b815260206004820152601660248201527526b4b73a103bb4b73237bb9039ba34b6361037b832b760511b6044820152606401610ca0565b6006545f9060ff16611821576117e769034b3cfd4613f12c0000611388612156565b6117fd69012d231c7c593eec000061022b612156565b611807919061216d565b61181c906a52b7d2dcc80cd2e4000000612143565b611823565b5f5b305f9081526020819052604081205491925090611841908390612143565b90505f81116118845760405162461bcd60e51b815260206004820152600f60248201526e2737ba3434b733903a3790313ab93760891b6044820152606401610ca0565b80600a5f828254611895919061216d565b909155506118a590503082611c36565b604080518281524260208201527fd23443dd319810153e81eb4de570440dbff0f207c19b68eabf15b159644505c9910160405180910390a150506116ad6001600555565b5f60105f61192b85858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250611a8992505050565b805160209182012082528101919091526040015f20546001600160a01b03169392505050565b61195e8383836001611c6e565b505050565b5f808211801561198b57506001600160a01b0383165f908152600c602052604090205460ff16155b801561199a575061022b600754105b6119a4575f6119a7565b60015b60ff169392505050565b6001600160a01b038381165f908152600160209081526040808320938616835292905220545f198114611a265781811015611a1857604051637dc7a0d960e11b81526001600160a01b03841660048201526024810182905260448101839052606401610ca0565b611a2684848484035f611c6e565b50505050565b6001600160a01b038316611a5557604051634b637e8f60e11b81525f6004820152602401610ca0565b6001600160a01b038216611a7e5760405163ec442f0560e01b81525f6004820152602401610ca0565b61195e838383611d40565b60605f8290506003815110158015611ad257508060038251611aab9190612143565b81518110611abb57611abb6122f6565b6020910101516001600160f81b031916601760f91b145b8015611b0f57508060028251611ae89190612143565b81518110611af857611af86122f6565b6020910101516001600160f81b031916606160f81b145b8015611b4c57508060018251611b259190612143565b81518110611b3557611b356122f6565b6020910101516001600160f81b031916606960f81b145b15611c05575f60038251611b609190612143565b67ffffffffffffffff811115611b7857611b78612197565b6040519080825280601f01601f191660200182016040528015611ba2576020820181803683370190505b5090505f5b8151811015611bfd57828181518110611bc257611bc26122f6565b602001015160f81c60f81b828281518110611bdf57611bdf6122f6565b60200101906001600160f81b03191690815f1a905350600101611ba7565b509392505050565b5090919050565b600260055403611c2f57604051633ee5aeb560e01b815260040160405180910390fd5b6002600555565b6001600160a01b038216611c5f57604051634b637e8f60e11b81525f6004820152602401610ca0565b611c6a825f83611d40565b5050565b6001600160a01b038416611c975760405163e602df0560e01b81525f6004820152602401610ca0565b6001600160a01b038316611cc057604051634a1406b160e11b81525f6004820152602401610ca0565b6001600160a01b038085165f9081526001602090815260408083209387168352929052208290558015611a2657826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051611d3291815260200190565b60405180910390a350505050565b6001600160a01b038316611d6a578060025f828254611d5f919061216d565b90915550611dda9050565b6001600160a01b0383165f9081526020819052604090205481811015611dbc5760405163391434e360e21b81526001600160a01b03851660048201526024810182905260448101839052606401610ca0565b6001600160a01b0384165f9081526020819052604090209082900390555b6001600160a01b038216611df657600280548290039055611e14565b6001600160a01b0382165f9081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611e5991815260200190565b60405180910390a3505050565b5f5b83811015611e80578181015183820152602001611e68565b50505f910152565b602081525f8251806020840152611ea6816040850160208701611e66565b601f01601f19169190910160400192915050565b6001600160a01b0381168114611ece575f80fd5b50565b5f8060408385031215611ee2575f80fd5b8235611eed81611eba565b946020939093013593505050565b5f8060408385031215611f0c575f80fd5b823591506020830135611f1e81611eba565b809150509250929050565b5f60208284031215611f39575f80fd5b813561092181611eba565b5f805f60608486031215611f56575f80fd5b8335611f6181611eba565b92506020840135611f7181611eba565b929592945050506040919091013590565b5f8083601f840112611f92575f80fd5b50813567ffffffffffffffff811115611fa9575f80fd5b602083019150836020828501011115611fc0575f80fd5b9250929050565b5f805f60408486031215611fd9575f80fd5b8335611fe481611eba565b9250602084013567ffffffffffffffff811115611fff575f80fd5b61200b86828701611f82565b9497909650939450505050565b5f805f805f6060868803121561202c575f80fd5b85359450602086013567ffffffffffffffff8082111561204a575f80fd5b61205689838a01611f82565b9096509450604088013591508082111561206e575f80fd5b5061207b88828901611f82565b969995985093965092949392505050565b5f806040838503121561209d575f80fd5b82356120a881611eba565b91506020830135611f1e81611eba565b5f80602083850312156120c9575f80fd5b823567ffffffffffffffff8111156120df575f80fd5b6120eb85828601611f82565b90969095509350505050565b600181811c9082168061210b57607f821691505b60208210810361212957634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b818103818111156108f4576108f461212f565b80820281158282048414176108f4576108f461212f565b808201808211156108f4576108f461212f565b5f60208284031215612190575f80fd5b5051919050565b634e487b7160e01b5f52604160045260245ffd5b5f602082840312156121bb575f80fd5b815167ffffffffffffffff808211156121d2575f80fd5b818401915084601f8301126121e5575f80fd5b8151818111156121f7576121f7612197565b604051601f8201601f19908116603f0116810190838211818310171561221f5761221f612197565b81604052828152876020848701011115612237575f80fd5b612248836020830160208801611e66565b979650505050505050565b5f60208284031215612263575f80fd5b815161092181611eba565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b602081525f6122a960208301848661226e565b949350505050565b60e081525f6122c460e083018a8c61226e565b60208301989098525060408101959095526060850193909352608084019190915260a083015260c09091015292915050565b634e487b7160e01b5f52603260045260245ffdfea2646970667358221220bb1c34b251fff5db210c76fdc7dd482dd9f079288c0437d59df711449eec82ee64736f6c63430008180033","recompiledBytecode":"0x608060405260043610610275575f3560e01c80636dbc45821161014a578063a0388ca6116100be578063c5de72dd11610078578063c5de72dd14610762578063c63de8101461077b578063dd62ed3e14610790578063ea2b4ab2146107d4578063ed2b606d14610807578063f5eb42dc14610826575f80fd5b8063a0388ca6146106bb578063a0b93856146106e9578063a9059cbb146106fe578063b4d0df8a1461071d578063b52a585114610731578063c084f54014610745575f80fd5b806385e3f9971161010f57806385e3f997146106255780638854a0ff1461063a578063902d55a5146106615780639106d7ba1461067f57806395d89b41146106935780639b8906ae146106a7575f80fd5b80636dbc45821461056257806370a082311461057f578063735f21be146105b357806378e97925146105de5780638099b00214610611575f80fd5b8063313ce567116101ec5780634db159f5116101a65780634db159f514610495578063510040cb146104aa5780636101b37f146104be57806361c0b6a0146104d357806362bc5f7b1461050157806363bd1d4a14610517575f80fd5b8063313ce567146103dd5780633c78929e146103f85780633ce165031461042b57806340036e4914610440578063485d38341461045f5780634bddda1514610476575f80fd5b806318160ddd1161023d57806318160ddd146103285780631e130f9e1461033c5780632115e5ce1461037057806323b872dd1461038f5780632880ea9e146103ae5780632b5e5809146103c8575f80fd5b806306fdde0314610279578063095ea7b3146102a357806310b985d4146102d257806313b0be33146102f557806315cccf3514610314575b5f80fd5b348015610284575f80fd5b5061028d610851565b60405161029a9190611e88565b60405180910390f35b3480156102ae575f80fd5b506102c26102bd366004611ed1565b6108e1565b604051901515815260200161029a565b3480156102dd575f80fd5b506102e760085481565b60405190815260200161029a565b348015610300575f80fd5b506102e761030f366004611efb565b6108fa565b34801561031f575f80fd5b506102e7610928565b348015610333575f80fd5b506002546102e7565b348015610347575f80fd5b506102e7610356366004611f29565b6001600160a01b03165f908152600f602052604090205490565b34801561037b575f80fd5b506102e761038a366004611f29565b610976565b34801561039a575f80fd5b506102c26103a9366004611f44565b610999565b3480156103b9575f80fd5b506102e766071afd498d000081565b3480156103d3575f80fd5b506102e7600a5481565b3480156103e8575f80fd5b506040516012815260200161029a565b348015610403575f80fd5b506102e77f000000000000000000000000000000000000000000000000000000000000000081565b348015610436575f80fd5b506102e761022b81565b34801561044b575f80fd5b506102c261045a366004611fc7565b6109bc565b34801561046a575f80fd5b506102e76301e1338081565b348015610481575f80fd5b506102e7610490366004611f29565b610bd9565b6104a86104a3366004612018565b610c35565b005b3480156104b5575f80fd5b506104a86114c8565b3480156104c9575f80fd5b506102e760075481565b3480156104de575f80fd5b506102c26104ed366004611f29565b600c6020525f908152604090205460ff1681565b34801561050c575f80fd5b506102e76206978081565b348015610522575f80fd5b5061054a7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161029a565b34801561056d575f80fd5b506102e769012d231c7c593eec000081565b34801561058a575f80fd5b506102e7610599366004611f29565b6001600160a01b03165f9081526020819052604090205490565b3480156105be575f80fd5b506102e76105cd366004611f29565b600d6020525f908152604090205481565b3480156105e9575f80fd5b506102e77f000000000000000000000000000000000000000000000000000000000000000081565b34801561061c575f80fd5b506102e7600a81565b348015610630575f80fd5b506102e76115b381565b348015610645575f80fd5b5061054a7360b9262456de011f7d15a54cdd8c48baaa8b022f81565b34801561066c575f80fd5b506102e76a52b7d2dcc80cd2e400000081565b34801561068a575f80fd5b506102e76116af565b34801561069e575f80fd5b5061028d6116c5565b3480156106b2575f80fd5b506102c26116d4565b3480156106c6575f80fd5b506102c26106d5366004611f29565b600e6020525f908152604090205460ff1681565b3480156106f4575f80fd5b506102e760095481565b348015610709575f80fd5b506102c2610718366004611ed1565b611711565b348015610728575f80fd5b506102e761171e565b34801561073c575f80fd5b506104a8611754565b348015610750575f80fd5b506102e769034b3cfd4613f12c000081565b34801561076d575f80fd5b506006546102c29060ff1681565b348015610786575f80fd5b506102e761138881565b34801561079b575f80fd5b506102e76107aa36600461208c565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b3480156107df575f80fd5b506102e77f000000000000000000000000000000000000000000000000000000000000000081565b348015610812575f80fd5b5061054a6108213660046120b8565b6118e9565b348015610831575f80fd5b506102e7610840366004611f29565b600b6020525f908152604090205481565b606060038054610860906120f7565b80601f016020809104026020016040519081016040528092919081815260200182805461088c906120f7565b80156108d75780601f106108ae576101008083540402835291602001916108d7565b820191905f5260205f20905b8154815290600101906020018083116108ba57829003601f168201915b5050505050905090565b5f336108ee818585611951565b60019150505b92915050565b5f66071afd498d000061090d8385611963565b6109179085612143565b6109219190612156565b9392505050565b61093e69034b3cfd4613f12c0000611388612156565b61095469012d231c7c593eec000061022b612156565b61095e919061216d565b610973906a52b7d2dcc80cd2e4000000612143565b81565b6001600160a01b0381165f908152600d60205260408120546108f490600a61216d565b5f336109a68582856119b1565b6109b1858585611a2c565b506001949350505050565b5f806109fc84848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250611a8992505050565b905080515f03610a0f575f915050610921565b6040516370a0823160e01b81526001600160a01b03861660048201527360b9262456de011f7d15a54cdd8c48baaa8b022f906370a0823190602401602060405180830381865afa158015610a65573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a899190612180565b5f03610a98575f915050610921565b604051633142854560e21b81526001600160a01b03861660048201525f90610b1f907360b9262456de011f7d15a54cdd8c48baaa8b022f9063c50a1514906024015f60405180830381865afa158015610af3573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610b1a91908101906121ab565b611a89565b90508180519060200120818051906020012014610b40575f92505050610921565b815160208301206040516331a9108f60e11b8152600481018290526001600160a01b038816907360b9262456de011f7d15a54cdd8c48baaa8b022f90636352211e90602401602060405180830381865afa158015610ba0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bc49190612253565b6001600160a01b031614979650505050505050565b5f80610be483610976565b6001600160a01b0384165f908152600b6020526040902054909150811115610c2d576001600160a01b0383165f908152600b6020526040902054610c289082612143565b610921565b5f9392505050565b610c3d611c0c565b7f00000000000000000000000000000000000000000000000000000000000000004210610ca95760405162461bcd60e51b8152602060048201526015602482015274135a5b9d081dda5b991bddc81a185cc8195b991959605a1b60448201526064015b60405180910390fd5b6115b3610cb46116af565b10610cf95760405162461bcd60e51b815260206004820152601560248201527411d95b995cda5cc81cd85b19481cdbdb19081bdd5d605a1b6044820152606401610ca0565b6001851015610d3c5760405162461bcd60e51b815260206004820152600f60248201526e4d696e696d756d203120736861726560881b6044820152606401610ca0565b82610d805760405162461bcd60e51b81526020600482015260146024820152731059d95b9d081251081a5cc81c995c5d5a5c995960621b6044820152606401610ca0565b610d8933610976565b335f908152600b6020526040902054610da390879061216d565b1115610df15760405162461bcd60e51b815260206004820152601c60248201527f4578636565647320746865207065722d77616c6c6574206c696d6974000000006044820152606401610ca0565b6115b385610dfd6116af565b610e07919061216d565b1115610e4c5760405162461bcd60e51b81526020600482015260146024820152734578636565647320746f74616c2073686172657360601b6044820152606401610ca0565b610e573385856109bc565b610eb15760405162461bcd60e51b815260206004820152602560248201527f4167656e74204944206e6f7420766572696669656420666f7220746869732077604482015264185b1b195d60da1b6064820152608401610ca0565b5f610ef085858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250611a8992505050565b8051602091820120335f908152600f909252604090912054909150610fb8575f818152601060205260409020546001600160a01b031615610f845760405162461bcd60e51b815260206004820152602860248201527f4167656e7420494420616c726561647920626f756e6420746f20616e6f7468656044820152671c881dd85b1b195d60c21b6064820152608401610ca0565b335f818152600f602090815260408083208590558483526010909152902080546001600160a01b0319169091179055611021565b335f908152600f602052604090205481146110215760405162461bcd60e51b815260206004820152602360248201527f4167656e7420494420646f6573206e6f74206d6174636820746869732077616c6044820152621b195d60ea1b6064820152608401610ca0565b5f61102c3388611963565b90505f6110398289612143565b90506113888160085461104c919061216d565b111561109a5760405162461bcd60e51b815260206004820152601a60248201527f506169642073686172652071756f7461206578686175737465640000000000006044820152606401610ca0565b5f6110ac66071afd498d000083612156565b90508034146110f45760405162461bcd60e51b8152602060048201526014602482015273125b98dbdc9c9958dd0810939088185b5bdd5b9d60621b6044820152606401610ca0565b5f61110969034b3cfd4613f12c000084612156565b61111d69012d231c7c593eec000086612156565b611127919061216d565b90508360010361116257600160075f828254611143919061216d565b9091555050335f908152600c60205260409020805460ff191660011790555b8260085f828254611173919061216d565b9091555050335f908152600b6020526040812080548c929061119690849061216d565b925050819055503460095f8282546111ae919061216d565b909155505085156112e6575f60105f6111fb8a8a8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250611a8992505050565b805160209182012082528101919091526040015f20546001600160a01b03169050801580159061123457506001600160a01b0381163314155b801561124f5750335f908152600e602052604090205460ff16155b156112e457335f908152600e60209081526040808320805460ff191660019081179091556001600160a01b0385168452600d909252822080549192909161129790849061216d565b909155505060405133906001600160a01b038316907f99b028dd597faf0b2ad0e538fc15267c0b023e6e7b4fbae549419dc63ec795d1906112db908c908c90612296565b60405180910390a35b505b6112fc69034b3cfd4613f12c0000611388612156565b61131269012d231c7c593eec000061022b612156565b61131c919061216d565b611331906a52b7d2dcc80cd2e4000000612143565b305f9081526020819052604090205461134b908390612143565b10156113995760405162461bcd60e51b815260206004820152601c60248201527f496e73756666696369656e742067656e657369732072657365727665000000006044820152606401610ca0565b6113a4303383611a2c565b3415611463575f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316346040515f6040518083038185875af1925050503d805f8114611413576040519150601f19603f3d011682016040523d82523d5f602084013e611418565b606091505b50509050806114615760405162461bcd60e51b815260206004820152601560248201527410939088199bdc9dd85c991a5b99c819985a5b1959605a1b6044820152606401610ca0565b505b336001600160a01b03167f66b57df7aba118d24ed7972643e779f593eb515f67a6faa387db1e5975aab0758a8a8d88888734426040516114aa9897969594939291906122b1565b60405180910390a250505050506114c16001600555565b5050505050565b6114d0611c0c565b7f000000000000000000000000000000000000000000000000000000000000000042101561152f5760405162461bcd60e51b815260206004820152600c60248201526b14dd1a5b1b081b1bd8dad95960a21b6044820152606401610ca0565b60065460ff16156115755760405162461bcd60e51b815260206004820152601060248201526f105b1c9958591e481c995b19585cd95960821b6044820152606401610ca0565b6006805460ff191660011790556115f7307f00000000000000000000000000000000000000000000000000000000000000006115bd69034b3cfd4613f12c0000611388612156565b6115d369012d231c7c593eec000061022b612156565b6115dd919061216d565b6115f2906a52b7d2dcc80cd2e4000000612143565b611a2c565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000167f7bbe9c0ab7edf3877274e19436d2e10ecb76324ae6afd629d2f928f1aff8165161165869034b3cfd4613f12c0000611388612156565b61166e69012d231c7c593eec000061022b612156565b611678919061216d565b61168d906a52b7d2dcc80cd2e4000000612143565b604080519182524260208301520160405180910390a26116ad6001600555565b565b5f6008546007546116c0919061216d565b905090565b606060048054610860906120f7565b5f7f0000000000000000000000000000000000000000000000000000000000000000421015806116c057506115b361170a6116af565b1015905090565b5f336108ee818585611a2c565b61173469034b3cfd4613f12c0000611388612156565b61174a69012d231c7c593eec000061022b612156565b610973919061216d565b61175c611c0c565b7f00000000000000000000000000000000000000000000000000000000000000004210156117c55760405162461bcd60e51b815260206004820152601660248201527526b4b73a103bb4b73237bb9039ba34b6361037b832b760511b6044820152606401610ca0565b6006545f9060ff16611821576117e769034b3cfd4613f12c0000611388612156565b6117fd69012d231c7c593eec000061022b612156565b611807919061216d565b61181c906a52b7d2dcc80cd2e4000000612143565b611823565b5f5b305f9081526020819052604081205491925090611841908390612143565b90505f81116118845760405162461bcd60e51b815260206004820152600f60248201526e2737ba3434b733903a3790313ab93760891b6044820152606401610ca0565b80600a5f828254611895919061216d565b909155506118a590503082611c36565b604080518281524260208201527fd23443dd319810153e81eb4de570440dbff0f207c19b68eabf15b159644505c9910160405180910390a150506116ad6001600555565b5f60105f61192b85858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250611a8992505050565b805160209182012082528101919091526040015f20546001600160a01b03169392505050565b61195e8383836001611c6e565b505050565b5f808211801561198b57506001600160a01b0383165f908152600c602052604090205460ff16155b801561199a575061022b600754105b6119a4575f6119a7565b60015b60ff169392505050565b6001600160a01b038381165f908152600160209081526040808320938616835292905220545f198114611a265781811015611a1857604051637dc7a0d960e11b81526001600160a01b03841660048201526024810182905260448101839052606401610ca0565b611a2684848484035f611c6e565b50505050565b6001600160a01b038316611a5557604051634b637e8f60e11b81525f6004820152602401610ca0565b6001600160a01b038216611a7e5760405163ec442f0560e01b81525f6004820152602401610ca0565b61195e838383611d40565b60605f8290506003815110158015611ad257508060038251611aab9190612143565b81518110611abb57611abb6122f6565b6020910101516001600160f81b031916601760f91b145b8015611b0f57508060028251611ae89190612143565b81518110611af857611af86122f6565b6020910101516001600160f81b031916606160f81b145b8015611b4c57508060018251611b259190612143565b81518110611b3557611b356122f6565b6020910101516001600160f81b031916606960f81b145b15611c05575f60038251611b609190612143565b67ffffffffffffffff811115611b7857611b78612197565b6040519080825280601f01601f191660200182016040528015611ba2576020820181803683370190505b5090505f5b8151811015611bfd57828181518110611bc257611bc26122f6565b602001015160f81c60f81b828281518110611bdf57611bdf6122f6565b60200101906001600160f81b03191690815f1a905350600101611ba7565b509392505050565b5090919050565b600260055403611c2f57604051633ee5aeb560e01b815260040160405180910390fd5b6002600555565b6001600160a01b038216611c5f57604051634b637e8f60e11b81525f6004820152602401610ca0565b611c6a825f83611d40565b5050565b6001600160a01b038416611c975760405163e602df0560e01b81525f6004820152602401610ca0565b6001600160a01b038316611cc057604051634a1406b160e11b81525f6004820152602401610ca0565b6001600160a01b038085165f9081526001602090815260408083209387168352929052208290558015611a2657826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051611d3291815260200190565b60405180910390a350505050565b6001600160a01b038316611d6a578060025f828254611d5f919061216d565b90915550611dda9050565b6001600160a01b0383165f9081526020819052604090205481811015611dbc5760405163391434e360e21b81526001600160a01b03851660048201526024810182905260448101839052606401610ca0565b6001600160a01b0384165f9081526020819052604090209082900390555b6001600160a01b038216611df657600280548290039055611e14565b6001600160a01b0382165f9081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611e5991815260200190565b60405180910390a3505050565b5f5b83811015611e80578181015183820152602001611e68565b50505f910152565b602081525f8251806020840152611ea6816040850160208701611e66565b601f01601f19169190910160400192915050565b6001600160a01b0381168114611ece575f80fd5b50565b5f8060408385031215611ee2575f80fd5b8235611eed81611eba565b946020939093013593505050565b5f8060408385031215611f0c575f80fd5b823591506020830135611f1e81611eba565b809150509250929050565b5f60208284031215611f39575f80fd5b813561092181611eba565b5f805f60608486031215611f56575f80fd5b8335611f6181611eba565b92506020840135611f7181611eba565b929592945050506040919091013590565b5f8083601f840112611f92575f80fd5b50813567ffffffffffffffff811115611fa9575f80fd5b602083019150836020828501011115611fc0575f80fd5b9250929050565b5f805f60408486031215611fd9575f80fd5b8335611fe481611eba565b9250602084013567ffffffffffffffff811115611fff575f80fd5b61200b86828701611f82565b9497909650939450505050565b5f805f805f6060868803121561202c575f80fd5b85359450602086013567ffffffffffffffff8082111561204a575f80fd5b61205689838a01611f82565b9096509450604088013591508082111561206e575f80fd5b5061207b88828901611f82565b969995985093965092949392505050565b5f806040838503121561209d575f80fd5b82356120a881611eba565b91506020830135611f1e81611eba565b5f80602083850312156120c9575f80fd5b823567ffffffffffffffff8111156120df575f80fd5b6120eb85828601611f82565b90969095509350505050565b600181811c9082168061210b57607f821691505b60208210810361212957634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b818103818111156108f4576108f461212f565b80820281158282048414176108f4576108f461212f565b808201808211156108f4576108f461212f565b5f60208284031215612190575f80fd5b5051919050565b634e487b7160e01b5f52604160045260245ffd5b5f602082840312156121bb575f80fd5b815167ffffffffffffffff808211156121d2575f80fd5b818401915084601f8301126121e5575f80fd5b8151818111156121f7576121f7612197565b604051601f8201601f19908116603f0116810190838211818310171561221f5761221f612197565b81604052828152876020848701011115612237575f80fd5b612248836020830160208801611e66565b979650505050505050565b5f60208284031215612263575f80fd5b815161092181611eba565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b602081525f6122a960208301848661226e565b949350505050565b60e081525f6122c460e083018a8c61226e565b60208301989098525060408101959095526060850193909352608084019190915260a083015260c09091015292915050565b634e487b7160e01b5f52603260045260245ffdfea2646970667358221220bb1c34b251fff5db210c76fdc7dd482dd9f079288c0437d59df711449eec82ee64736f6c63430008180033","sourceMap":"1459:8839:6:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2074:89:1;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4293:186;;;;;;;;;;-1:-1:-1;4293:186:1;;;;;:::i;:::-;;:::i;:::-;;;1291:14:7;;1284:22;1266:41;;1254:2;1239:18;4293:186:1;1126:187:7;2790:23:6;;;;;;;;;;;;;;;;;;;1464:25:7;;;1452:2;1437:18;2790:23:6;1318:177:7;5478:165:6;;;;;;;;;;-1:-1:-1;5478:165:6;;;;;:::i;:::-;;:::i;2105:70::-;;;;;;;;;;;;;:::i;3144:97:1:-;;;;;;;;;;-1:-1:-1;3222:12:1;;3144:97;;4830:117:6;;;;;;;;;;-1:-1:-1;4830:117:6;;;;;:::i;:::-;-1:-1:-1;;;;;4918:22:6;4892:7;4918:22;;;:14;:22;;;;;;;4830:117;4490:140;;;;;;;;;;-1:-1:-1;4490:140:6;;;;;:::i;:::-;;:::i;5039:244:1:-;;;;;;;;;;-1:-1:-1;5039:244:1;;;;;:::i;:::-;;:::i;1716:58:6:-;;;;;;;;;;;;1763:11;1716:58;;2855:27;;;;;;;;;;;;;;;;3002:82:1;;;;;;;;;;-1:-1:-1;3002:82:1;;3075:2;2857:36:7;;2845:2;2830:18;3002:82:1;2715:184:7;2665:34:6;;;;;;;;;;;;;;;1787:40;;;;;;;;;;;;1824:3;1787:40;;6138:562;;;;;;;;;;-1:-1:-1;6138:562:6;;;;;:::i;:::-;;:::i;2195:48::-;;;;;;;;;;;;2235:8;2195:48;;4636:188;;;;;;;;;;-1:-1:-1;4636:188:6;;;;;:::i;:::-;;:::i;6736:2664::-;;;;;;:::i;:::-;;:::i;:::-;;9486:322;;;;;;;;;;;;;:::i;2761:23::-;;;;;;;;;;;;;;;;2938:43;;;;;;;;;;-1:-1:-1;2938:43:6;;;;;:::i;:::-;;;;;;;;;;;;;;;;2249:46;;;;;;;;;;;;2289:6;2249:46;;2542:39;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4782:32:7;;;4764:51;;4752:2;4737:18;2542:39:6;4602:219:7;1603:50:6;;;;;;;;;;;;1641:12;1603:50;;3299:116:1;;;;;;;;;;-1:-1:-1;3299:116:1;;;;;:::i;:::-;-1:-1:-1;;;;;3390:18:1;3364:7;3390:18;;;;;;;;;;;;3299:116;2987:54:6;;;;;;;;;;-1:-1:-1;2987:54:6;;;;;:::i;:::-;;;;;;;;;;;;;;2587:34;;;;;;;;;;;;;;;1931:48;;;;;;;;;;;;1977:2;1931:48;;1881:44;;;;;;;;;;;;1920:5;1881:44;;2385:111;;;;;;;;;;;;2453:42;2385:111;;1540:57;;;;;;;;;;;;1579:18;1540:57;;4255:94;;;;;;;;;;;;;:::i;2276:93:1:-;;;;;;;;;;;;;:::i;4355:129:6:-;;;;;;;;;;;;;:::i;3047:40::-;;;;;;;;;;-1:-1:-1;3047:40:6;;;;;:::i;:::-;;;;;;;;;;;;;;;;2819:30;;;;;;;;;;;;;;;;3610:178:1;;;;;;;;;;-1:-1:-1;3610:178:1;;;;;:::i;:::-;;:::i;1985:100:6:-;;;;;;;;;;;;;:::i;9884:412::-;;;;;;;;;;;;;:::i;1659:51::-;;;;;;;;;;;;1697:13;1659:51;;2729:26;;;;;;;;;;-1:-1:-1;2729:26:6;;;;;;;;1833:42;;;;;;;;;;;;1870:5;1833:42;;3846:140:1;;;;;;;;;;-1:-1:-1;3846:140:1;;;;;:::i;:::-;-1:-1:-1;;;;;3952:18:1;;;3926:7;3952:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;3846:140;2627:32:6;;;;;;;;;;;;;;;4953:165;;;;;;;;;;-1:-1:-1;4953:165:6;;;;;:::i;:::-;;:::i;2889:43::-;;;;;;;;;;-1:-1:-1;2889:43:6;;;;;:::i;:::-;;;;;;;;;;;;;;2074:89:1;2119:13;2151:5;2144:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2074:89;:::o;4293:186::-;4366:4;735:10:4;4420:31:1;735:10:4;4436:7:1;4445:5;4420:8;:31::i;:::-;4468:4;4461:11;;;4293:186;;;;;:::o;5478:165:6:-;5548:7;1763:11;5584:28;5597:6;5605;5584:12;:28::i;:::-;5575:37;;:6;:37;:::i;:::-;5574:62;;;;:::i;:::-;5567:69;5478:165;-1:-1:-1;;;5478:165:6:o;2105:70::-;2060:24;1697:13;1870:5;2060:24;:::i;:::-;2031;1641:12;1824:3;2031:24;:::i;:::-;2030:55;;;;:::i;:::-;2142:33;;1579:18;2142:33;:::i;:::-;2105:70;:::o;4490:140::-;-1:-1:-1;;;;;4596:27:6;;4548:7;4596:27;;;:19;:27;;;;;;4574:49;;1977:2;4574:49;:::i;5039:244:1:-;5126:4;735:10:4;5182:37:1;5198:4;735:10:4;5213:5:1;5182:15;:37::i;:::-;5229:26;5239:4;5245:2;5249:5;5229:9;:26::i;:::-;-1:-1:-1;5272:4:1;;5039:244;-1:-1:-1;;;;5039:244:1:o;6138:562:6:-;6223:4;6239:20;6262:23;6277:7;;6262:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6262:14:6;;-1:-1:-1;;;6262:23:6:i;:::-;6239:46;;6305:6;6299:20;6323:1;6299:25;6295:43;;6333:5;6326:12;;;;;6295:43;6352:33;;-1:-1:-1;;;6352:33:6;;-1:-1:-1;;;;;4782:32:7;;6352:33:6;;;4764:51:7;2453:42:6;;6352:25;;4737:18:7;;6352:33:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6389:1;6352:38;6348:56;;6399:5;6392:12;;;;;6348:56;6456:32;;-1:-1:-1;;;6456:32:6;;-1:-1:-1;;;;;4782:32:7;;6456::6;;;4764:51:7;6414:24:6;;6441:48;;2453:42;;6456:24;;4737:18:7;;6456:32:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;6456:32:6;;;;;;;;;;;;:::i;:::-;6441:14;:48::i;:::-;6414:75;;6551:6;6535:24;;;;;;6519:10;6503:28;;;;;;:56;6499:74;;6568:5;6561:12;;;;;;6499:74;6609:24;;;;;;6651:32;;-1:-1:-1;;;6651:32:6;;;;;1464:25:7;;;-1:-1:-1;;;;;6651:42:6;;;2453;;6651:23;;1437:18:7;;6651:32:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;6651:42:6;;;6138:562;-1:-1:-1;;;;;;;6138:562:6:o;4636:188::-;4702:7;4721:9;4733:19;4745:6;4733:11;:19::i;:::-;-1:-1:-1;;;;;4769:16:6;;;;;;:8;:16;;;;;;4721:31;;-1:-1:-1;4769:21:6;-1:-1:-1;4769:21:6;:48;;-1:-1:-1;;;;;4801:16:6;;;;;;:8;:16;;;;;;4797:20;;:1;:20;:::i;:::-;4769:48;;;4793:1;4762:55;4636:188;-1:-1:-1;;;4636:188:6:o;6736:2664::-;2356:21:5;:19;:21::i;:::-;6925:7:6::1;6907:15;:25;6899:59;;;::::0;-1:-1:-1;;;6899:59:6;;8709:2:7;6899:59:6::1;::::0;::::1;8691:21:7::0;8748:2;8728:18;;;8721:30;-1:-1:-1;;;8767:18:7;;;8760:51;8828:18;;6899:59:6::1;;;;;;;;;1920:5;6976:11;:9;:11::i;:::-;:26;6968:60;;;::::0;-1:-1:-1;;;6968:60:6;;9059:2:7;6968:60:6::1;::::0;::::1;9041:21:7::0;9098:2;9078:18;;;9071:30;-1:-1:-1;;;9117:18:7;;;9110:51;9178:18;;6968:60:6::1;8857:345:7::0;6968:60:6::1;7056:1;7046:6;:11;;7038:39;;;::::0;-1:-1:-1;;;7038:39:6;;9409:2:7;7038:39:6::1;::::0;::::1;9391:21:7::0;9448:2;9428:18;;;9421:30;-1:-1:-1;;;9467:18:7;;;9460:45;9522:18;;7038:39:6::1;9207:339:7::0;7038:39:6::1;7095:25:::0;7087:58:::1;;;::::0;-1:-1:-1;;;7087:58:6;;9753:2:7;7087:58:6::1;::::0;::::1;9735:21:7::0;9792:2;9772:18;;;9765:30;-1:-1:-1;;;9811:18:7;;;9804:50;9871:18;;7087:58:6::1;9551:344:7::0;7087:58:6::1;7196:23;7208:10;7196:11;:23::i;:::-;7172:10;7163:20;::::0;;;:8:::1;:20;::::0;;;;;:29:::1;::::0;7186:6;;7163:29:::1;:::i;:::-;:56;;7155:97;;;::::0;-1:-1:-1;;;7155:97:6;;10102:2:7;7155:97:6::1;::::0;::::1;10084:21:7::0;10141:2;10121:18;;;10114:30;10180;10160:18;;;10153:58;10228:18;;7155:97:6::1;9900:352:7::0;7155:97:6::1;1920:5;7284:6;7270:11;:9;:11::i;:::-;:20;;;;:::i;:::-;:36;;7262:69;;;::::0;-1:-1:-1;;;7262:69:6;;10459:2:7;7262:69:6::1;::::0;::::1;10441:21:7::0;10498:2;10478:18;;;10471:30;-1:-1:-1;;;10517:18:7;;;10510:50;10577:18;;7262:69:6::1;10257:344:7::0;7262:69:6::1;7349:34;7363:10;7375:7;;7349:13;:34::i;:::-;7341:84;;;::::0;-1:-1:-1;;;7341:84:6;;10808:2:7;7341:84:6::1;::::0;::::1;10790:21:7::0;10847:2;10827:18;;;10820:30;10886:34;10866:18;;;10859:62;-1:-1:-1;;;10937:18:7;;;10930:35;10982:19;;7341:84:6::1;10606:401:7::0;7341:84:6::1;7436:14;7469:23;7484:7;;7469:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;7469:14:6::1;::::0;-1:-1:-1;;;7469:23:6:i:1;:::-;7453:41:::0;;::::1;::::0;;::::1;::::0;7523:10:::1;7546:1;7508:26:::0;;;:14:::1;:26:::0;;;;;;;;7453:41;;-1:-1:-1;7504:377:6::1;;7608:1;7572:24:::0;;;:16:::1;:24;::::0;;;;;-1:-1:-1;;;;;7572:24:6::1;:38:::0;7564:91:::1;;;::::0;-1:-1:-1;;;7564:91:6;;11214:2:7;7564:91:6::1;::::0;::::1;11196:21:7::0;11253:2;11233:18;;;11226:30;11292:34;11272:18;;;11265:62;-1:-1:-1;;;11343:18:7;;;11336:38;11391:19;;7564:91:6::1;11012:404:7::0;7564:91:6::1;7684:10;7669:26;::::0;;;:14:::1;:26;::::0;;;;;;;:35;;;7718:24;;;:16:::1;:24:::0;;;;;:37;;-1:-1:-1;;;;;;7718:37:6::1;::::0;;::::1;::::0;;7504:377:::1;;;7809:10;7794:26;::::0;;;:14:::1;:26;::::0;;;;;:36;::::1;7786:84;;;::::0;-1:-1:-1;;;7786:84:6;;11623:2:7;7786:84:6::1;::::0;::::1;11605:21:7::0;11662:2;11642:18;;;11635:30;11701:34;11681:18;;;11674:62;-1:-1:-1;;;11752:18:7;;;11745:33;11795:19;;7786:84:6::1;11421:399:7::0;7786:84:6::1;7891:19;7913:32;7926:10;7938:6;7913:12;:32::i;:::-;7891:54:::0;-1:-1:-1;7955:19:6::1;7977:20;7891:54:::0;7977:6;:20:::1;:::i;:::-;7955:42;;1870:5;8026:11;8015:8;;:22;;;;:::i;:::-;:36;;8007:75;;;::::0;-1:-1:-1;;;8007:75:6;;12027:2:7;8007:75:6::1;::::0;::::1;12009:21:7::0;12066:2;12046:18;;;12039:30;12105:28;12085:18;;;12078:56;12151:18;;8007:75:6::1;11825:350:7::0;8007:75:6::1;8092:12;8107:34;1763:11;8107::::0;:34:::1;:::i;:::-;8092:49;;8172:4;8159:9;:17;8151:50;;;::::0;-1:-1:-1;;;8151:50:6;;12382:2:7;8151:50:6::1;::::0;::::1;12364:21:7::0;12421:2;12401:18;;;12394:30;-1:-1:-1;;;12440:18:7;;;12433:50;12500:18;;8151:50:6::1;12180:344:7::0;8151:50:6::1;8212:17;8263:25;1697:13;8263:11:::0;:25:::1;:::i;:::-;8233;1641:12;8233:11:::0;:25:::1;:::i;:::-;8232:57;;;;:::i;:::-;8212:77;;8304:11;8319:1;8304:16:::0;8300:104:::1;;8348:1;8336:8;;:13;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;8375:10:6::1;8363:23;::::0;;;:11:::1;:23;::::0;;;;:30;;-1:-1:-1;;8363:30:6::1;8389:4;8363:30;::::0;;8300:104:::1;8425:11;8413:8;;:23;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;8455:10:6::1;8446:20;::::0;;;:8:::1;:20;::::0;;;;:30;;8470:6;;8446:20;:30:::1;::::0;8470:6;;8446:30:::1;:::i;:::-;;;;;;;;8505:9;8486:15;;:28;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;8529:33:6;;8525:437:::1;;8578:17;8598:16;:67;8631:31;8646:15;;8631:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;8631:14:6::1;::::0;-1:-1:-1;;;8631:31:6:i:1;:::-;8615:49:::0;;::::1;::::0;;::::1;::::0;8598:67;;;::::1;::::0;;;;;;-1:-1:-1;8598:67:6;;-1:-1:-1;;;;;8598:67:6::1;::::0;-1:-1:-1;8683:23:6;;;::::1;::::0;:50:::1;;-1:-1:-1::0;;;;;;8710:23:6;::::1;8723:10;8710:23;;8683:50;:75;;;;-1:-1:-1::0;8747:10:6::1;8738:20;::::0;;;:8:::1;:20;::::0;;;;;::::1;;8737:21;8683:75;8679:273;;;8787:10;8778:20;::::0;;;:8:::1;:20;::::0;;;;;;;:27;;-1:-1:-1;;8778:27:6::1;8801:4;8778:27:::0;;::::1;::::0;;;-1:-1:-1;;;;;8823:30:6;::::1;::::0;;:19:::1;:30:::0;;;;;:35;;8801:4;;8823:30;;:35:::1;::::0;8801:4;;8823:35:::1;:::i;:::-;::::0;;;-1:-1:-1;;8881:56:6::1;::::0;8926:10:::1;::::0;-1:-1:-1;;;;;8881:56:6;::::1;::::0;::::1;::::0;::::1;::::0;8909:15;;;;8881:56:::1;:::i;:::-;;;;;;;;8679:273;8564:398;8525:437;2060:24;1697:13;1870:5;2060:24;:::i;:::-;2031;1641:12;1824:3;2031:24;:::i;:::-;2030:55;;;;:::i;:::-;2142:33;::::0;1579:18:::1;2142:33;:::i;:::-;8998:4;3364:7:1::0;3390:18;;;;;;;;;;;8980:36:6::1;::::0;9007:9;;8980:36:::1;:::i;:::-;:50;;8972:91;;;::::0;-1:-1:-1;;;8972:91:6;;13255:2:7;8972:91:6::1;::::0;::::1;13237:21:7::0;13294:2;13274:18;;;13267:30;13333;13313:18;;;13306:58;13381:18;;8972:91:6::1;13053:352:7::0;8972:91:6::1;9073:47;9091:4;9098:10;9110:9;9073;:47::i;:::-;9135:9;:13:::0;9131:141:::1;;9165:7;9178:6;-1:-1:-1::0;;;;;9178:11:6::1;9197:9;9178:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9164:47;;;9233:2;9225:36;;;::::0;-1:-1:-1;;;9225:36:6;;13822:2:7;9225:36:6::1;::::0;::::1;13804:21:7::0;13861:2;13841:18;;;13834:30;-1:-1:-1;;;13880:18:7;;;13873:51;13941:18;;9225:36:6::1;13620:345:7::0;9225:36:6::1;9150:122;9131:141;9300:10;-1:-1:-1::0;;;;;9287:106:6::1;;9312:7;;9321:6;9329:11;9342;9355:9;9366;9377:15;9287:106;;;;;;;;;;;;;:::i;:::-;;;;;;;;6889:2511;;;;;2398:20:5::0;1713:1;2924:7;:21;2744:208;2398:20;6736:2664:6;;;;;:::o;9486:322::-;2356:21:5;:19;:21::i;:::-;9570:9:6::1;9551:15;:28;;9543:53;;;::::0;-1:-1:-1;;;9543:53:6;;14855:2:7;9543:53:6::1;::::0;::::1;14837:21:7::0;14894:2;14874:18;;;14867:30;-1:-1:-1;;;14913:18:7;;;14906:42;14965:18;;9543:53:6::1;14653:336:7::0;9543:53:6::1;9615:14;::::0;::::1;;9614:15;9606:44;;;::::0;-1:-1:-1;;;9606:44:6;;15196:2:7;9606:44:6::1;::::0;::::1;15178:21:7::0;15235:2;15215:18;;;15208:30;-1:-1:-1;;;15254:18:7;;;15247:46;15310:18;;9606:44:6::1;14994:340:7::0;9606:44:6::1;9660:14;:21:::0;;-1:-1:-1;;9660:21:6::1;9677:4;9660:21;::::0;;9691:44:::1;9709:4;9716:6;2060:24;1697:13;1870:5;2060:24;:::i;:::-;2031;1641:12;1824:3;2031:24;:::i;:::-;2030:55;;;;:::i;:::-;2142:33;::::0;1579:18:::1;2142:33;:::i;:::-;9691:9;:44::i;:::-;-1:-1:-1::0;;;;;9765:6:6::1;9750:51;;2060:24;1697:13;1870:5;2060:24;:::i;:::-;2031;1641:12;1824:3;2031:24;:::i;:::-;2030:55;;;;:::i;:::-;2142:33;::::0;1579:18:::1;2142:33;:::i;:::-;9750:51;::::0;;15513:25:7;;;9785:15:6::1;15569:2:7::0;15554:18;;15547:34;15486:18;9750:51:6::1;;;;;;;2398:20:5::0;1713:1;2924:7;:21;2744:208;2398:20;9486:322:6:o;4255:94::-;4297:7;4334:8;;4323;;:19;;;;:::i;:::-;4316:26;;4255:94;:::o;2276:93:1:-;2323:13;2355:7;2348:14;;;;;:::i;4355:129:6:-;4397:4;4439:7;4420:15;:26;;:57;;;;1920:5;4450:11;:9;:11::i;:::-;:27;;4413:64;;4355:129;:::o;3610:178:1:-;3679:4;735:10:4;3733:27:1;735:10:4;3750:2:1;3754:5;3733:9;:27::i;1985:100:6:-;2060:24;1697:13;1870:5;2060:24;:::i;:::-;2031;1641:12;1824:3;2031:24;:::i;:::-;2030:55;;;;:::i;9884:412::-;2356:21:5;:19;:21::i;:::-;9965:7:6::1;9946:15;:26;;9938:61;;;::::0;-1:-1:-1;;;9938:61:6;;15794:2:7;9938:61:6::1;::::0;::::1;15776:21:7::0;15833:2;15813:18;;;15806:30;-1:-1:-1;;;15852:18:7;;;15845:52;15914:18;;9938:61:6::1;15592:346:7::0;9938:61:6::1;10027:14;::::0;10009:15:::1;::::0;10027:14:::1;;:31;;2060:24;1697:13;1870:5;2060:24;:::i;:::-;2031;1641:12;1824:3;2031:24;:::i;:::-;2030:55;;;;:::i;:::-;2142:33;::::0;1579:18:::1;2142:33;:::i;:::-;10027:31;;;10044:1;10027:31;10103:4;10068:14;3390:18:1::0;;;;;;;;;;;10009:49:6;;-1:-1:-1;10068:14:6;10085:34:::1;::::0;10009:49;;10085:34:::1;:::i;:::-;10068:51;;10146:1;10137:6;:10;10129:38;;;::::0;-1:-1:-1;;;10129:38:6;;16145:2:7;10129:38:6::1;::::0;::::1;16127:21:7::0;16184:2;16164:18;;;16157:30;-1:-1:-1;;;16203:18:7;;;16196:45;16258:18;;10129:38:6::1;15943:339:7::0;10129:38:6::1;10193:6;10177:12;;:22;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;10209:28:6::1;::::0;-1:-1:-1;10223:4:6::1;10230:6:::0;10209:5:::1;:28::i;:::-;10252:37;::::0;;15513:25:7;;;10273:15:6::1;15569:2:7::0;15554:18;;15547:34;10252:37:6::1;::::0;15486:18:7;10252:37:6::1;;;;;;;9928:368;;2398:20:5::0;1713:1;2924:7;:21;2744:208;4953:165:6;5026:7;5052:16;:59;5085:23;5100:7;;5085:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5085:14:6;;-1:-1:-1;;;5085:23:6:i;:::-;5069:41;;;;;;;5052:59;;;;;;;;;;-1:-1:-1;5052:59:6;;-1:-1:-1;;;;;5052:59:6;;4953:165;-1:-1:-1;;;4953:165:6:o;8989:128:1:-;9073:37;9082:5;9089:7;9098:5;9105:4;9073:8;:37::i;:::-;8989:128;;;:::o;5208:179:6:-;5285:7;5321:1;5312:6;:10;:34;;;;-1:-1:-1;;;;;;5327:19:6;;;;;;:11;:19;;;;;;;;5326:20;5312:34;:59;;;;;1824:3;5350:8;;:21;5312:59;5311:69;;5379:1;5311:69;;;5375:1;5311:69;5304:76;;;5208:179;-1:-1:-1;;;5208:179:6:o;10663:477:1:-;-1:-1:-1;;;;;3952:18:1;;;10762:24;3952:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;-1:-1:-1;;10828:37:1;;10824:310;;10904:5;10885:16;:24;10881:130;;;10936:60;;-1:-1:-1;;;10936:60:1;;-1:-1:-1;;;;;16507:32:7;;10936:60:1;;;16489:51:7;16556:18;;;16549:34;;;16599:18;;;16592:34;;;16462:18;;10936:60:1;16287:345:7;10881:130:1;11052:57;11061:5;11068:7;11096:5;11077:16;:24;11103:5;11052:8;:57::i;:::-;10752:388;10663:477;;;:::o;5656:300::-;-1:-1:-1;;;;;5739:18:1;;5735:86;;5780:30;;-1:-1:-1;;;5780:30:1;;5807:1;5780:30;;;4764:51:7;4737:18;;5780:30:1;4602:219:7;5735:86:1;-1:-1:-1;;;;;5834:16:1;;5830:86;;5873:32;;-1:-1:-1;;;5873:32:1;;5902:1;5873:32;;;4764:51:7;4737:18;;5873:32:1;4602:219:7;5830:86:1;5925:24;5933:4;5939:2;5943:5;5925:7;:24::i;5688:444:6:-;5752:13;5777:14;5800:1;5777:25;;5828:1;5816;:8;:13;;:39;;;;;5833:1;5846;5835;:8;:12;;;;:::i;:::-;5833:15;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;;;;;5833:15:6;-1:-1:-1;;;5833:22:6;5816:39;:65;;;;;5859:1;5872;5861;:8;:12;;;;:::i;:::-;5859:15;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;;;;;5859:15:6;-1:-1:-1;;;5859:22:6;5816:65;:91;;;;;5885:1;5898;5887;:8;:12;;;;:::i;:::-;5885:15;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;;;;;5885:15:6;-1:-1:-1;;;5885:22:6;5816:91;5812:296;;;5923:16;5963:1;5952;:8;:12;;;;:::i;:::-;5942:23;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5942:23:6;;5923:42;;5984:9;5979:87;6003:3;:10;5999:1;:14;5979:87;;;6047:1;6049;6047:4;;;;;;;;:::i;:::-;;;;;;;;;6038:3;6042:1;6038:6;;;;;;;;:::i;:::-;;;;:13;-1:-1:-1;;;;;6038:13:6;;;;;;;;-1:-1:-1;6015:3:6;;5979:87;;;-1:-1:-1;6093:3:6;5688:444;-1:-1:-1;;;5688:444:6:o;5812:296::-;-1:-1:-1;6124:1:6;;5688:444;-1:-1:-1;5688:444:6:o;2431:307:5:-;1755:1;2558:7;;:18;2554:86;;2599:30;;-1:-1:-1;;;2599:30:5;;;;;;;;;;;2554:86;1755:1;2714:7;:17;2431:307::o;8247:206:1:-;-1:-1:-1;;;;;8317:21:1;;8313:89;;8361:30;;-1:-1:-1;;;8361:30:1;;8388:1;8361:30;;;4764:51:7;4737:18;;8361:30:1;4602:219:7;8313:89:1;8411:35;8419:7;8436:1;8440:5;8411:7;:35::i;:::-;8247:206;;:::o;9949:432::-;-1:-1:-1;;;;;10061:19:1;;10057:89;;10103:32;;-1:-1:-1;;;10103:32:1;;10132:1;10103:32;;;4764:51:7;4737:18;;10103:32:1;4602:219:7;10057:89:1;-1:-1:-1;;;;;10159:21:1;;10155:90;;10203:31;;-1:-1:-1;;;10203:31:1;;10231:1;10203:31;;;4764:51:7;4737:18;;10203:31:1;4602:219:7;10155:90:1;-1:-1:-1;;;;;10254:18:1;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;:35;;;10299:76;;;;10349:7;-1:-1:-1;;;;;10333:31:1;10342:5;-1:-1:-1;;;;;10333:31:1;;10358:5;10333:31;;;;1464:25:7;;1452:2;1437:18;;1318:177;10333:31:1;;;;;;;;9949:432;;;;:::o;6271:1107::-;-1:-1:-1;;;;;6360:18:1;;6356:540;;6512:5;6496:12;;:21;;;;;;;:::i;:::-;;;;-1:-1:-1;6356:540:1;;-1:-1:-1;6356:540:1;;-1:-1:-1;;;;;6570:15:1;;6548:19;6570:15;;;;;;;;;;;6603:19;;;6599:115;;;6649:50;;-1:-1:-1;;;6649:50:1;;-1:-1:-1;;;;;16507:32:7;;6649:50:1;;;16489:51:7;16556:18;;;16549:34;;;16599:18;;;16592:34;;;16462:18;;6649:50:1;16287:345:7;6599:115:1;-1:-1:-1;;;;;6834:15:1;;:9;:15;;;;;;;;;;6852:19;;;;6834:37;;6356:540;-1:-1:-1;;;;;6910:16:1;;6906:425;;7073:12;:21;;;;;;;6906:425;;;-1:-1:-1;;;;;7284:13:1;;:9;:13;;;;;;;;;;:22;;;;;;6906:425;7361:2;-1:-1:-1;;;;;7346:25:1;7355:4;-1:-1:-1;;;;;7346:25:1;;7365:5;7346:25;;;;1464::7;;1452:2;1437:18;;1318:177;7346:25:1;;;;;;;;6271:1107;;;:::o;14:250:7:-;99:1;109:113;123:6;120:1;117:13;109:113;;;199:11;;;193:18;180:11;;;173:39;145:2;138:10;109:113;;;-1:-1:-1;;256:1:7;238:16;;231:27;14:250::o;269:396::-;418:2;407:9;400:21;381:4;450:6;444:13;493:6;488:2;477:9;473:18;466:34;509:79;581:6;576:2;565:9;561:18;556:2;548:6;544:15;509:79;:::i;:::-;649:2;628:15;-1:-1:-1;;624:29:7;609:45;;;;656:2;605:54;;269:396;-1:-1:-1;;269:396:7:o;670:131::-;-1:-1:-1;;;;;745:31:7;;735:42;;725:70;;791:1;788;781:12;725:70;670:131;:::o;806:315::-;874:6;882;935:2;923:9;914:7;910:23;906:32;903:52;;;951:1;948;941:12;903:52;990:9;977:23;1009:31;1034:5;1009:31;:::i;:::-;1059:5;1111:2;1096:18;;;;1083:32;;-1:-1:-1;;;806:315:7:o;1500:::-;1568:6;1576;1629:2;1617:9;1608:7;1604:23;1600:32;1597:52;;;1645:1;1642;1635:12;1597:52;1681:9;1668:23;1658:33;;1741:2;1730:9;1726:18;1713:32;1754:31;1779:5;1754:31;:::i;:::-;1804:5;1794:15;;;1500:315;;;;;:::o;1820:247::-;1879:6;1932:2;1920:9;1911:7;1907:23;1903:32;1900:52;;;1948:1;1945;1938:12;1900:52;1987:9;1974:23;2006:31;2031:5;2006:31;:::i;2254:456::-;2331:6;2339;2347;2400:2;2388:9;2379:7;2375:23;2371:32;2368:52;;;2416:1;2413;2406:12;2368:52;2455:9;2442:23;2474:31;2499:5;2474:31;:::i;:::-;2524:5;-1:-1:-1;2581:2:7;2566:18;;2553:32;2594:33;2553:32;2594:33;:::i;:::-;2254:456;;2646:7;;-1:-1:-1;;;2700:2:7;2685:18;;;;2672:32;;2254:456::o;2904:348::-;2956:8;2966:6;3020:3;3013:4;3005:6;3001:17;2997:27;2987:55;;3038:1;3035;3028:12;2987:55;-1:-1:-1;3061:20:7;;3104:18;3093:30;;3090:50;;;3136:1;3133;3126:12;3090:50;3173:4;3165:6;3161:17;3149:29;;3225:3;3218:4;3209:6;3201;3197:19;3193:30;3190:39;3187:59;;;3242:1;3239;3232:12;3187:59;2904:348;;;;;:::o;3257:546::-;3337:6;3345;3353;3406:2;3394:9;3385:7;3381:23;3377:32;3374:52;;;3422:1;3419;3412:12;3374:52;3461:9;3448:23;3480:31;3505:5;3480:31;:::i;:::-;3530:5;-1:-1:-1;3586:2:7;3571:18;;3558:32;3613:18;3602:30;;3599:50;;;3645:1;3642;3635:12;3599:50;3684:59;3735:7;3726:6;3715:9;3711:22;3684:59;:::i;:::-;3257:546;;3762:8;;-1:-1:-1;3658:85:7;;-1:-1:-1;;;;3257:546:7:o;3808:789::-;3909:6;3917;3925;3933;3941;3994:2;3982:9;3973:7;3969:23;3965:32;3962:52;;;4010:1;4007;4000:12;3962:52;4046:9;4033:23;4023:33;;4107:2;4096:9;4092:18;4079:32;4130:18;4171:2;4163:6;4160:14;4157:34;;;4187:1;4184;4177:12;4157:34;4226:59;4277:7;4268:6;4257:9;4253:22;4226:59;:::i;:::-;4304:8;;-1:-1:-1;4200:85:7;-1:-1:-1;4392:2:7;4377:18;;4364:32;;-1:-1:-1;4408:16:7;;;4405:36;;;4437:1;4434;4427:12;4405:36;;4476:61;4529:7;4518:8;4507:9;4503:24;4476:61;:::i;:::-;3808:789;;;;-1:-1:-1;3808:789:7;;-1:-1:-1;4556:8:7;;4450:87;3808:789;-1:-1:-1;;;3808:789:7:o;5058:388::-;5126:6;5134;5187:2;5175:9;5166:7;5162:23;5158:32;5155:52;;;5203:1;5200;5193:12;5155:52;5242:9;5229:23;5261:31;5286:5;5261:31;:::i;:::-;5311:5;-1:-1:-1;5368:2:7;5353:18;;5340:32;5381:33;5340:32;5381:33;:::i;5451:411::-;5522:6;5530;5583:2;5571:9;5562:7;5558:23;5554:32;5551:52;;;5599:1;5596;5589:12;5551:52;5639:9;5626:23;5672:18;5664:6;5661:30;5658:50;;;5704:1;5701;5694:12;5658:50;5743:59;5794:7;5785:6;5774:9;5770:22;5743:59;:::i;:::-;5821:8;;5717:85;;-1:-1:-1;5451:411:7;-1:-1:-1;;;;5451:411:7:o;6075:380::-;6154:1;6150:12;;;;6197;;;6218:61;;6272:4;6264:6;6260:17;6250:27;;6218:61;6325:2;6317:6;6314:14;6294:18;6291:38;6288:161;;6371:10;6366:3;6362:20;6359:1;6352:31;6406:4;6403:1;6396:15;6434:4;6431:1;6424:15;6288:161;;6075:380;;;:::o;6460:127::-;6521:10;6516:3;6512:20;6509:1;6502:31;6552:4;6549:1;6542:15;6576:4;6573:1;6566:15;6592:128;6659:9;;;6680:11;;;6677:37;;;6694:18;;:::i;6725:168::-;6798:9;;;6829;;6846:15;;;6840:22;;6826:37;6816:71;;6867:18;;:::i;6898:125::-;6963:9;;;6984:10;;;6981:36;;;6997:18;;:::i;7028:184::-;7098:6;7151:2;7139:9;7130:7;7126:23;7122:32;7119:52;;;7167:1;7164;7157:12;7119:52;-1:-1:-1;7190:16:7;;7028:184;-1:-1:-1;7028:184:7:o;7217:127::-;7278:10;7273:3;7269:20;7266:1;7259:31;7309:4;7306:1;7299:15;7333:4;7330:1;7323:15;7349:897;7429:6;7482:2;7470:9;7461:7;7457:23;7453:32;7450:52;;;7498:1;7495;7488:12;7450:52;7531:9;7525:16;7560:18;7601:2;7593:6;7590:14;7587:34;;;7617:1;7614;7607:12;7587:34;7655:6;7644:9;7640:22;7630:32;;7700:7;7693:4;7689:2;7685:13;7681:27;7671:55;;7722:1;7719;7712:12;7671:55;7751:2;7745:9;7773:2;7769;7766:10;7763:36;;;7779:18;;:::i;:::-;7854:2;7848:9;7822:2;7908:13;;-1:-1:-1;;7904:22:7;;;7928:2;7900:31;7896:40;7884:53;;;7952:18;;;7972:22;;;7949:46;7946:72;;;7998:18;;:::i;:::-;8038:10;8034:2;8027:22;8073:2;8065:6;8058:18;8113:7;8108:2;8103;8099;8095:11;8091:20;8088:33;8085:53;;;8134:1;8131;8124:12;8085:53;8147:68;8212:2;8207;8199:6;8195:15;8190:2;8186;8182:11;8147:68;:::i;:::-;8234:6;7349:897;-1:-1:-1;;;;;;;7349:897:7:o;8251:251::-;8321:6;8374:2;8362:9;8353:7;8349:23;8345:32;8342:52;;;8390:1;8387;8380:12;8342:52;8422:9;8416:16;8441:31;8466:5;8441:31;:::i;12529:267::-;12618:6;12613:3;12606:19;12670:6;12663:5;12656:4;12651:3;12647:14;12634:43;-1:-1:-1;12722:1:7;12697:16;;;12715:4;12693:27;;;12686:38;;;;12778:2;12757:15;;;-1:-1:-1;;12753:29:7;12744:39;;;12740:50;;12529:267::o;12801:247::-;12960:2;12949:9;12942:21;12923:4;12980:62;13038:2;13027:9;13023:18;13015:6;13007;12980:62;:::i;:::-;12972:70;12801:247;-1:-1:-1;;;;12801:247:7:o;13970:678::-;14297:3;14286:9;14279:22;14260:4;14318:63;14376:3;14365:9;14361:19;14353:6;14345;14318:63;:::i;:::-;14412:2;14397:18;;14390:34;;;;-1:-1:-1;14455:2:7;14440:18;;14433:34;;;;14498:2;14483:18;;14476:34;;;;14541:3;14526:19;;14519:35;;;;14585:3;14570:19;;14563:35;14629:3;14614:19;;;14607:35;14310:71;13970:678;-1:-1:-1;;13970:678:7:o;16637:127::-;16698:10;16693:3;16689:20;16686:1;16679:31;16729:4;16726:1;16719:15;16753:4;16750:1;16743:15","linkReferences":{},"cborAuxdata":{"1":{"value":"0xa2646970667358221220bb1c34b251fff5db210c76fdc7dd482dd9f079288c0437d59df711449eec82ee64736f6c63430008180033","offset":8971}},"immutableReferences":{"945":[{"start":1320,"length":32},{"start":5037,"length":32},{"start":5512,"length":32},{"start":5633,"length":32}],"947":[{"start":1519,"length":32}],"949":[{"start":2021,"length":32},{"start":3135,"length":32},{"start":5847,"length":32},{"start":5982,"length":32}],"951":[{"start":1033,"length":32},{"start":5330,"length":32}]},"transformations":[{"id":"951","type":"replace","offset":1033,"reason":"immutable"},{"id":"945","type":"replace","offset":1320,"reason":"immutable"},{"id":"947","type":"replace","offset":1519,"reason":"immutable"},{"id":"949","type":"replace","offset":2021,"reason":"immutable"},{"id":"949","type":"replace","offset":3135,"reason":"immutable"},{"id":"945","type":"replace","offset":5037,"reason":"immutable"},{"id":"951","type":"replace","offset":5330,"reason":"immutable"},{"id":"945","type":"replace","offset":5512,"reason":"immutable"},{"id":"945","type":"replace","offset":5633,"reason":"immutable"},{"id":"949","type":"replace","offset":5847,"reason":"immutable"},{"id":"949","type":"replace","offset":5982,"reason":"immutable"}],"transformationValues":{"immutables":{"945":"0x00000000000000000000000045e2c8a09022914ce00cfce9a93dd3fda54d8686","947":"0x000000000000000000000000000000000000000000000000000000006af060a9","949":"0x000000000000000000000000000000000000000000000000000000006af6f829","951":"0x000000000000000000000000000000000000000000000000000000006cd19429"}}},"deployment":{"transactionHash":"0x85598c3b81ac6e93a5d2e85be6092d124a881e3d42c58a43ea584ace4174166d","blockNumber":"132386787","transactionIndex":"33","deployer":"0x45E2c8a09022914cE00cFce9A93dD3FDa54D8686"},"sources":{"GenesisToken.sol":{"content":"// SPDX-License-Identifier: MIT\npragma solidity 0.8.24;\n\nimport \"@openzeppelin/contracts@5.0.2/token/ERC20/ERC20.sol\";\nimport \"@openzeppelin/contracts@5.0.2/utils/ReentrancyGuard.sol\";\n\n/**\n * Genesis token + genesis sale (BSC / BEP-20). Modelled on ASOCGenesis.\n *\n * - Total supply 100,000,000 tokens, 18 decimals, all minted to this contract.\n * - 5,555 genesis shares = 555 free + 5,000 paid.\n * - A wallet's FIRST share is free while the 555 free shares last = 5,555 tokens.\n * - A paid share = 15,555 tokens for exactly 0.002 BNB. BNB is forwarded straight to `payout`.\n * - Max 10 shares per wallet, +1 quota for every referral (invitee mints naming your Agent ID).\n * - Every mint is verified on-chain against the SPACE ID Agent ID registry on BSC.\n *   One Agent ID binds to one wallet.\n * - Mint window: opens at deployment, closes 5 days later (`mintEnd`).\n * - Dev reserve (19,141,975 tokens) locked for 1 year; anyone may call releaseLocked()\n *   after `lockUntil`, and it can only go to `payout`.\n * - After `mintEnd`, anyone may call burnUnsold() to burn unsold genesis tokens (never the dev reserve).\n * - NO owner, NO admin functions, NO withdraw. Verification cannot be switched off.\n */\ninterface IAgentIdRegistry {\n    function balanceOf(address wallet) external view returns (uint256);\n    function handleOf(address wallet) external view returns (string memory);\n    function ownerOf(uint256 tokenId) external view returns (address);\n}\n\ncontract GenesisToken is ERC20, ReentrancyGuard {\n    // ---- Economics ----\n    uint256 public constant TOTAL_SUPPLY = 100_000_000 * 1e18;\n    uint256 public constant FREE_TOKENS = 5_555 * 1e18;\n    uint256 public constant PAID_TOKENS = 15_555 * 1e18;\n    uint256 public constant PRICE_PER_PAID_SHARE = 0.002 ether; // BNB\n    uint256 public constant FREE_QUOTA = 555;\n    uint256 public constant PAID_QUOTA = 5_000;\n    uint256 public constant TOTAL_SHARES = 5_555;\n    uint256 public constant BASE_MAX_PER_WALLET = 10;\n    uint256 public constant GENESIS_ALLOCATION = (FREE_QUOTA * FREE_TOKENS) + (PAID_QUOTA * PAID_TOKENS); // 80,858,025\n    uint256 public constant DEV_LOCKED = TOTAL_SUPPLY - GENESIS_ALLOCATION; // 19,141,975\n    uint256 public constant LOCK_DURATION = 365 days;\n    uint256 public constant MINT_DURATION = 5 days; // 432,000 s\n\n    // ---- Agent ID registry (SPACE ID, BSC) - fixed, no setter ----\n    IAgentIdRegistry public constant agentIdRegistry = IAgentIdRegistry(0x60B9262456dE011F7d15a54CdD8c48bAaa8B022F);\n\n    // ---- Deployment parameters ----\n    address payable public immutable payout;\n    uint256 public immutable startTime;\n    uint256 public immutable mintEnd;\n    uint256 public immutable lockUntil;\n\n    // ---- State ----\n    bool public lockedReleased;\n    uint256 public freeUsed;\n    uint256 public paidSold;\n    uint256 public totalRevenueWei;\n    uint256 public burnedUnsold;\n\n    mapping(address => uint256) public sharesOf;\n    mapping(address => bool) public freeClaimed;\n    mapping(address => uint256) public referralBonusShares;\n    mapping(address => bool) public referred; // each invitee credits a referrer at most once\n    mapping(address => bytes32) private _agentIdHashOf;   // wallet -> keccak(handle without .ai)\n    mapping(bytes32 => address) private _walletOfAgentId; // keccak(handle without .ai) -> wallet\n\n    event MintRecorded(\n        address indexed wallet,\n        string agentId,\n        uint256 shares,\n        uint256 freeShares,\n        uint256 paidShares,\n        uint256 tokensOut,\n        uint256 bnbPaid,\n        uint256 timestamp\n    );\n    event ReferralCredited(address indexed referrerWallet, string referrerAgentId, address indexed inviteeWallet);\n    event LockedReleased(address indexed to, uint256 amount, uint256 timestamp);\n    event UnsoldBurned(uint256 amount, uint256 timestamp);\n\n    constructor(string memory name_, string memory symbol_, address payable payout_) ERC20(name_, symbol_) {\n        require(payout_ != address(0), \"payout is zero address\");\n        payout = payout_;\n        startTime = block.timestamp;\n        mintEnd = block.timestamp + MINT_DURATION;\n        lockUntil = block.timestamp + LOCK_DURATION;\n        _mint(address(this), TOTAL_SUPPLY);\n    }\n\n    // ---- Views ----\n    function totalSold() public view returns (uint256) {\n        return freeUsed + paidSold;\n    }\n\n    function saleEnded() public view returns (bool) {\n        return block.timestamp >= mintEnd || totalSold() >= TOTAL_SHARES;\n    }\n\n    function maxSharesOf(address wallet) public view returns (uint256) {\n        return BASE_MAX_PER_WALLET + referralBonusShares[wallet];\n    }\n\n    function remainingSharesOf(address wallet) external view returns (uint256) {\n        uint256 m = maxSharesOf(wallet);\n        return sharesOf[wallet] >= m ? 0 : m - sharesOf[wallet];\n    }\n\n    function agentIdHashOf(address wallet) external view returns (bytes32) {\n        return _agentIdHashOf[wallet];\n    }\n\n    function walletOfAgentId(string calldata agentId) external view returns (address) {\n        return _walletOfAgentId[keccak256(bytes(_stripAiSuffix(agentId)))];\n    }\n\n    /// @notice Number of free shares `wallet` would get in its next mint (0 or 1).\n    function _freePortion(address wallet, uint256 shares) internal view returns (uint256) {\n        return (shares > 0 && !freeClaimed[wallet] && freeUsed < FREE_QUOTA) ? 1 : 0;\n    }\n\n    /// @notice Exact BNB (wei) to send with mintGenesis(shares, ...) from `wallet`.\n    function quote(uint256 shares, address wallet) external view returns (uint256) {\n        return (shares - _freePortion(wallet, shares)) * PRICE_PER_PAID_SHARE;\n    }\n\n    // ---- Agent ID verification ----\n    function _stripAiSuffix(string memory s) internal pure returns (string memory) {\n        bytes memory b = bytes(s);\n        if (b.length >= 3 && b[b.length - 3] == \".\" && b[b.length - 2] == \"a\" && b[b.length - 1] == \"i\") {\n            bytes memory out = new bytes(b.length - 3);\n            for (uint256 i = 0; i < out.length; i++) {\n                out[i] = b[i];\n            }\n            return string(out);\n        }\n        return s;\n    }\n\n    function verifyAgentId(address wallet, string calldata agentId) public view returns (bool) {\n        string memory handle = _stripAiSuffix(agentId);\n        if (bytes(handle).length == 0) return false;\n        if (agentIdRegistry.balanceOf(wallet) == 0) return false;\n        string memory registered = _stripAiSuffix(agentIdRegistry.handleOf(wallet));\n        if (keccak256(bytes(registered)) != keccak256(bytes(handle))) return false;\n        uint256 tokenId = uint256(keccak256(bytes(handle)));\n        return agentIdRegistry.ownerOf(tokenId) == wallet;\n    }\n\n    // ---- Genesis mint ----\n    function mintGenesis(uint256 shares, string calldata agentId, string calldata referrerAgentId)\n        external\n        payable\n        nonReentrant\n    {\n        require(block.timestamp < mintEnd, \"Mint window has ended\");\n        require(totalSold() < TOTAL_SHARES, \"Genesis sale sold out\");\n        require(shares >= 1, \"Minimum 1 share\");\n        require(bytes(agentId).length > 0, \"Agent ID is required\");\n        require(sharesOf[msg.sender] + shares <= maxSharesOf(msg.sender), \"Exceeds the per-wallet limit\");\n        require(totalSold() + shares <= TOTAL_SHARES, \"Exceeds total shares\");\n        require(verifyAgentId(msg.sender, agentId), \"Agent ID not verified for this wallet\");\n\n        bytes32 myHash = keccak256(bytes(_stripAiSuffix(agentId)));\n        if (_agentIdHashOf[msg.sender] == bytes32(0)) {\n            require(_walletOfAgentId[myHash] == address(0), \"Agent ID already bound to another wallet\");\n            _agentIdHashOf[msg.sender] = myHash;\n            _walletOfAgentId[myHash] = msg.sender;\n        } else {\n            require(_agentIdHashOf[msg.sender] == myHash, \"Agent ID does not match this wallet\");\n        }\n\n        uint256 freePortion = _freePortion(msg.sender, shares);\n        uint256 paidPortion = shares - freePortion;\n        require(paidSold + paidPortion <= PAID_QUOTA, \"Paid share quota exhausted\");\n        uint256 cost = paidPortion * PRICE_PER_PAID_SHARE;\n        require(msg.value == cost, \"Incorrect BNB amount\");\n\n        uint256 tokensOut = (freePortion * FREE_TOKENS) + (paidPortion * PAID_TOKENS);\n\n        if (freePortion == 1) {\n            freeUsed += 1;\n            freeClaimed[msg.sender] = true;\n        }\n        paidSold += paidPortion;\n        sharesOf[msg.sender] += shares;\n        totalRevenueWei += msg.value;\n\n        if (bytes(referrerAgentId).length > 0) {\n            address refWallet = _walletOfAgentId[keccak256(bytes(_stripAiSuffix(referrerAgentId)))];\n            if (refWallet != address(0) && refWallet != msg.sender && !referred[msg.sender]) {\n                referred[msg.sender] = true;\n                referralBonusShares[refWallet] += 1;\n                emit ReferralCredited(refWallet, referrerAgentId, msg.sender);\n            }\n        }\n\n        require(balanceOf(address(this)) - tokensOut >= DEV_LOCKED, \"Insufficient genesis reserve\");\n        _transfer(address(this), msg.sender, tokensOut);\n\n        if (msg.value > 0) {\n            (bool ok, ) = payout.call{value: msg.value}(\"\");\n            require(ok, \"BNB forwarding failed\");\n        }\n\n        emit MintRecorded(msg.sender, agentId, shares, freePortion, paidPortion, tokensOut, msg.value, block.timestamp);\n    }\n\n    // ---- Dev reserve: anyone can trigger after 1 year, always to payout ----\n    function releaseLocked() external nonReentrant {\n        require(block.timestamp >= lockUntil, \"Still locked\");\n        require(!lockedReleased, \"Already released\");\n        lockedReleased = true;\n        _transfer(address(this), payout, DEV_LOCKED);\n        emit LockedReleased(payout, DEV_LOCKED, block.timestamp);\n    }\n\n    // ---- Unsold genesis tokens: anyone can burn after mintEnd ----\n    function burnUnsold() external nonReentrant {\n        require(block.timestamp >= mintEnd, \"Mint window still open\");\n        uint256 reserve = lockedReleased ? 0 : DEV_LOCKED;\n        uint256 amount = balanceOf(address(this)) - reserve;\n        require(amount > 0, \"Nothing to burn\");\n        burnedUnsold += amount;\n        _burn(address(this), amount);\n        emit UnsoldBurned(amount, block.timestamp);\n    }\n}\n"},"@openzeppelin/contracts@5.0.2/token/ERC20/ERC20.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/ERC20.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC20} from \"./IERC20.sol\";\nimport {IERC20Metadata} from \"./extensions/IERC20Metadata.sol\";\nimport {Context} from \"../../utils/Context.sol\";\nimport {IERC20Errors} from \"../../interfaces/draft-IERC6093.sol\";\n\n/**\n * @dev Implementation of the {IERC20} interface.\n *\n * This implementation is agnostic to the way tokens are created. This means\n * that a supply mechanism has to be added in a derived contract using {_mint}.\n *\n * TIP: For a detailed writeup see our guide\n * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How\n * to implement supply mechanisms].\n *\n * The default value of {decimals} is 18. To change this, you should override\n * this function so it returns a different value.\n *\n * We have followed general OpenZeppelin Contracts guidelines: functions revert\n * instead returning `false` on failure. This behavior is nonetheless\n * conventional and does not conflict with the expectations of ERC20\n * applications.\n *\n * Additionally, an {Approval} event is emitted on calls to {transferFrom}.\n * This allows applications to reconstruct the allowance for all accounts just\n * by listening to said events. Other implementations of the EIP may not emit\n * these events, as it isn't required by the specification.\n */\nabstract contract ERC20 is Context, IERC20, IERC20Metadata, IERC20Errors {\n    mapping(address account => uint256) private _balances;\n\n    mapping(address account => mapping(address spender => uint256)) private _allowances;\n\n    uint256 private _totalSupply;\n\n    string private _name;\n    string private _symbol;\n\n    /**\n     * @dev Sets the values for {name} and {symbol}.\n     *\n     * All two of these values are immutable: they can only be set once during\n     * construction.\n     */\n    constructor(string memory name_, string memory symbol_) {\n        _name = name_;\n        _symbol = symbol_;\n    }\n\n    /**\n     * @dev Returns the name of the token.\n     */\n    function name() public view virtual returns (string memory) {\n        return _name;\n    }\n\n    /**\n     * @dev Returns the symbol of the token, usually a shorter version of the\n     * name.\n     */\n    function symbol() public view virtual returns (string memory) {\n        return _symbol;\n    }\n\n    /**\n     * @dev Returns the number of decimals used to get its user representation.\n     * For example, if `decimals` equals `2`, a balance of `505` tokens should\n     * be displayed to a user as `5.05` (`505 / 10 ** 2`).\n     *\n     * Tokens usually opt for a value of 18, imitating the relationship between\n     * Ether and Wei. This is the default value returned by this function, unless\n     * it's overridden.\n     *\n     * NOTE: This information is only used for _display_ purposes: it in\n     * no way affects any of the arithmetic of the contract, including\n     * {IERC20-balanceOf} and {IERC20-transfer}.\n     */\n    function decimals() public view virtual returns (uint8) {\n        return 18;\n    }\n\n    /**\n     * @dev See {IERC20-totalSupply}.\n     */\n    function totalSupply() public view virtual returns (uint256) {\n        return _totalSupply;\n    }\n\n    /**\n     * @dev See {IERC20-balanceOf}.\n     */\n    function balanceOf(address account) public view virtual returns (uint256) {\n        return _balances[account];\n    }\n\n    /**\n     * @dev See {IERC20-transfer}.\n     *\n     * Requirements:\n     *\n     * - `to` cannot be the zero address.\n     * - the caller must have a balance of at least `value`.\n     */\n    function transfer(address to, uint256 value) public virtual returns (bool) {\n        address owner = _msgSender();\n        _transfer(owner, to, value);\n        return true;\n    }\n\n    /**\n     * @dev See {IERC20-allowance}.\n     */\n    function allowance(address owner, address spender) public view virtual returns (uint256) {\n        return _allowances[owner][spender];\n    }\n\n    /**\n     * @dev See {IERC20-approve}.\n     *\n     * NOTE: If `value` is the maximum `uint256`, the allowance is not updated on\n     * `transferFrom`. This is semantically equivalent to an infinite approval.\n     *\n     * Requirements:\n     *\n     * - `spender` cannot be the zero address.\n     */\n    function approve(address spender, uint256 value) public virtual returns (bool) {\n        address owner = _msgSender();\n        _approve(owner, spender, value);\n        return true;\n    }\n\n    /**\n     * @dev See {IERC20-transferFrom}.\n     *\n     * Emits an {Approval} event indicating the updated allowance. This is not\n     * required by the EIP. See the note at the beginning of {ERC20}.\n     *\n     * NOTE: Does not update the allowance if the current allowance\n     * is the maximum `uint256`.\n     *\n     * Requirements:\n     *\n     * - `from` and `to` cannot be the zero address.\n     * - `from` must have a balance of at least `value`.\n     * - the caller must have allowance for ``from``'s tokens of at least\n     * `value`.\n     */\n    function transferFrom(address from, address to, uint256 value) public virtual returns (bool) {\n        address spender = _msgSender();\n        _spendAllowance(from, spender, value);\n        _transfer(from, to, value);\n        return true;\n    }\n\n    /**\n     * @dev Moves a `value` amount of tokens from `from` to `to`.\n     *\n     * This internal function is equivalent to {transfer}, and can be used to\n     * e.g. implement automatic token fees, slashing mechanisms, etc.\n     *\n     * Emits a {Transfer} event.\n     *\n     * NOTE: This function is not virtual, {_update} should be overridden instead.\n     */\n    function _transfer(address from, address to, uint256 value) internal {\n        if (from == address(0)) {\n            revert ERC20InvalidSender(address(0));\n        }\n        if (to == address(0)) {\n            revert ERC20InvalidReceiver(address(0));\n        }\n        _update(from, to, value);\n    }\n\n    /**\n     * @dev Transfers a `value` amount of tokens from `from` to `to`, or alternatively mints (or burns) if `from`\n     * (or `to`) is the zero address. All customizations to transfers, mints, and burns should be done by overriding\n     * this function.\n     *\n     * Emits a {Transfer} event.\n     */\n    function _update(address from, address to, uint256 value) internal virtual {\n        if (from == address(0)) {\n            // Overflow check required: The rest of the code assumes that totalSupply never overflows\n            _totalSupply += value;\n        } else {\n            uint256 fromBalance = _balances[from];\n            if (fromBalance < value) {\n                revert ERC20InsufficientBalance(from, fromBalance, value);\n            }\n            unchecked {\n                // Overflow not possible: value <= fromBalance <= totalSupply.\n                _balances[from] = fromBalance - value;\n            }\n        }\n\n        if (to == address(0)) {\n            unchecked {\n                // Overflow not possible: value <= totalSupply or value <= fromBalance <= totalSupply.\n                _totalSupply -= value;\n            }\n        } else {\n            unchecked {\n                // Overflow not possible: balance + value is at most totalSupply, which we know fits into a uint256.\n                _balances[to] += value;\n            }\n        }\n\n        emit Transfer(from, to, value);\n    }\n\n    /**\n     * @dev Creates a `value` amount of tokens and assigns them to `account`, by transferring it from address(0).\n     * Relies on the `_update` mechanism\n     *\n     * Emits a {Transfer} event with `from` set to the zero address.\n     *\n     * NOTE: This function is not virtual, {_update} should be overridden instead.\n     */\n    function _mint(address account, uint256 value) internal {\n        if (account == address(0)) {\n            revert ERC20InvalidReceiver(address(0));\n        }\n        _update(address(0), account, value);\n    }\n\n    /**\n     * @dev Destroys a `value` amount of tokens from `account`, lowering the total supply.\n     * Relies on the `_update` mechanism.\n     *\n     * Emits a {Transfer} event with `to` set to the zero address.\n     *\n     * NOTE: This function is not virtual, {_update} should be overridden instead\n     */\n    function _burn(address account, uint256 value) internal {\n        if (account == address(0)) {\n            revert ERC20InvalidSender(address(0));\n        }\n        _update(account, address(0), value);\n    }\n\n    /**\n     * @dev Sets `value` as the allowance of `spender` over the `owner` s tokens.\n     *\n     * This internal function is equivalent to `approve`, and can be used to\n     * e.g. set automatic allowances for certain subsystems, etc.\n     *\n     * Emits an {Approval} event.\n     *\n     * Requirements:\n     *\n     * - `owner` cannot be the zero address.\n     * - `spender` cannot be the zero address.\n     *\n     * Overrides to this logic should be done to the variant with an additional `bool emitEvent` argument.\n     */\n    function _approve(address owner, address spender, uint256 value) internal {\n        _approve(owner, spender, value, true);\n    }\n\n    /**\n     * @dev Variant of {_approve} with an optional flag to enable or disable the {Approval} event.\n     *\n     * By default (when calling {_approve}) the flag is set to true. On the other hand, approval changes made by\n     * `_spendAllowance` during the `transferFrom` operation set the flag to false. This saves gas by not emitting any\n     * `Approval` event during `transferFrom` operations.\n     *\n     * Anyone who wishes to continue emitting `Approval` events on the`transferFrom` operation can force the flag to\n     * true using the following override:\n     * ```\n     * function _approve(address owner, address spender, uint256 value, bool) internal virtual override {\n     *     super._approve(owner, spender, value, true);\n     * }\n     * ```\n     *\n     * Requirements are the same as {_approve}.\n     */\n    function _approve(address owner, address spender, uint256 value, bool emitEvent) internal virtual {\n        if (owner == address(0)) {\n            revert ERC20InvalidApprover(address(0));\n        }\n        if (spender == address(0)) {\n            revert ERC20InvalidSpender(address(0));\n        }\n        _allowances[owner][spender] = value;\n        if (emitEvent) {\n            emit Approval(owner, spender, value);\n        }\n    }\n\n    /**\n     * @dev Updates `owner` s allowance for `spender` based on spent `value`.\n     *\n     * Does not update the allowance value in case of infinite allowance.\n     * Revert if not enough allowance is available.\n     *\n     * Does not emit an {Approval} event.\n     */\n    function _spendAllowance(address owner, address spender, uint256 value) internal virtual {\n        uint256 currentAllowance = allowance(owner, spender);\n        if (currentAllowance != type(uint256).max) {\n            if (currentAllowance < value) {\n                revert ERC20InsufficientAllowance(spender, currentAllowance, value);\n            }\n            unchecked {\n                _approve(owner, spender, currentAllowance - value, false);\n            }\n        }\n    }\n}\n"},"@openzeppelin/contracts@5.0.2/utils/ReentrancyGuard.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/ReentrancyGuard.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Contract module that helps prevent reentrant calls to a function.\n *\n * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier\n * available, which can be applied to functions to make sure there are no nested\n * (reentrant) calls to them.\n *\n * Note that because there is a single `nonReentrant` guard, functions marked as\n * `nonReentrant` may not call one another. This can be worked around by making\n * those functions `private`, and then adding `external` `nonReentrant` entry\n * points to them.\n *\n * TIP: If you would like to learn more about reentrancy and alternative ways\n * to protect against it, check out our blog post\n * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].\n */\nabstract contract ReentrancyGuard {\n    // Booleans are more expensive than uint256 or any type that takes up a full\n    // word because each write operation emits an extra SLOAD to first read the\n    // slot's contents, replace the bits taken up by the boolean, and then write\n    // back. This is the compiler's defense against contract upgrades and\n    // pointer aliasing, and it cannot be disabled.\n\n    // The values being non-zero value makes deployment a bit more expensive,\n    // but in exchange the refund on every call to nonReentrant will be lower in\n    // amount. Since refunds are capped to a percentage of the total\n    // transaction's gas, it is best to keep them low in cases like this one, to\n    // increase the likelihood of the full refund coming into effect.\n    uint256 private constant NOT_ENTERED = 1;\n    uint256 private constant ENTERED = 2;\n\n    uint256 private _status;\n\n    /**\n     * @dev Unauthorized reentrant call.\n     */\n    error ReentrancyGuardReentrantCall();\n\n    constructor() {\n        _status = NOT_ENTERED;\n    }\n\n    /**\n     * @dev Prevents a contract from calling itself, directly or indirectly.\n     * Calling a `nonReentrant` function from another `nonReentrant`\n     * function is not supported. It is possible to prevent this from happening\n     * by making the `nonReentrant` function external, and making it call a\n     * `private` function that does the actual work.\n     */\n    modifier nonReentrant() {\n        _nonReentrantBefore();\n        _;\n        _nonReentrantAfter();\n    }\n\n    function _nonReentrantBefore() private {\n        // On the first call to nonReentrant, _status will be NOT_ENTERED\n        if (_status == ENTERED) {\n            revert ReentrancyGuardReentrantCall();\n        }\n\n        // Any calls to nonReentrant after this point will fail\n        _status = ENTERED;\n    }\n\n    function _nonReentrantAfter() private {\n        // By storing the original value once again, a refund is triggered (see\n        // https://eips.ethereum.org/EIPS/eip-2200)\n        _status = NOT_ENTERED;\n    }\n\n    /**\n     * @dev Returns true if the reentrancy guard is currently set to \"entered\", which indicates there is a\n     * `nonReentrant` function in the call stack.\n     */\n    function _reentrancyGuardEntered() internal view returns (bool) {\n        return _status == ENTERED;\n    }\n}\n"},"@openzeppelin/contracts@5.0.2/token/ERC20/IERC20.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/IERC20.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Interface of the ERC20 standard as defined in the EIP.\n */\ninterface IERC20 {\n    /**\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\n     * another (`to`).\n     *\n     * Note that `value` may be zero.\n     */\n    event Transfer(address indexed from, address indexed to, uint256 value);\n\n    /**\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\n     * a call to {approve}. `value` is the new allowance.\n     */\n    event Approval(address indexed owner, address indexed spender, uint256 value);\n\n    /**\n     * @dev Returns the value of tokens in existence.\n     */\n    function totalSupply() external view returns (uint256);\n\n    /**\n     * @dev Returns the value of tokens owned by `account`.\n     */\n    function balanceOf(address account) external view returns (uint256);\n\n    /**\n     * @dev Moves a `value` amount of tokens from the caller's account to `to`.\n     *\n     * Returns a boolean value indicating whether the operation succeeded.\n     *\n     * Emits a {Transfer} event.\n     */\n    function transfer(address to, uint256 value) external returns (bool);\n\n    /**\n     * @dev Returns the remaining number of tokens that `spender` will be\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\n     * zero by default.\n     *\n     * This value changes when {approve} or {transferFrom} are called.\n     */\n    function allowance(address owner, address spender) external view returns (uint256);\n\n    /**\n     * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\n     * caller's tokens.\n     *\n     * Returns a boolean value indicating whether the operation succeeded.\n     *\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\n     * that someone may use both the old and the new allowance by unfortunate\n     * transaction ordering. One possible solution to mitigate this race\n     * condition is to first reduce the spender's allowance to 0 and set the\n     * desired value afterwards:\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n     *\n     * Emits an {Approval} event.\n     */\n    function approve(address spender, uint256 value) external returns (bool);\n\n    /**\n     * @dev Moves a `value` amount of tokens from `from` to `to` using the\n     * allowance mechanism. `value` is then deducted from the caller's\n     * allowance.\n     *\n     * Returns a boolean value indicating whether the operation succeeded.\n     *\n     * Emits a {Transfer} event.\n     */\n    function transferFrom(address from, address to, uint256 value) external returns (bool);\n}\n"},"@openzeppelin/contracts@5.0.2/token/ERC20/extensions/IERC20Metadata.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/extensions/IERC20Metadata.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC20} from \"../IERC20.sol\";\n\n/**\n * @dev Interface for the optional metadata functions from the ERC20 standard.\n */\ninterface IERC20Metadata is IERC20 {\n    /**\n     * @dev Returns the name of the token.\n     */\n    function name() external view returns (string memory);\n\n    /**\n     * @dev Returns the symbol of the token.\n     */\n    function symbol() external view returns (string memory);\n\n    /**\n     * @dev Returns the decimals places of the token.\n     */\n    function decimals() external view returns (uint8);\n}\n"},"@openzeppelin/contracts@5.0.2/utils/Context.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Provides information about the current execution context, including the\n * sender of the transaction and its data. While these are generally available\n * via msg.sender and msg.data, they should not be accessed in such a direct\n * manner, since when dealing with meta-transactions the account sending and\n * paying for execution may not be the actual sender (as far as an application\n * is concerned).\n *\n * This contract is only required for intermediate, library-like contracts.\n */\nabstract contract Context {\n    function _msgSender() internal view virtual returns (address) {\n        return msg.sender;\n    }\n\n    function _msgData() internal view virtual returns (bytes calldata) {\n        return msg.data;\n    }\n\n    function _contextSuffixLength() internal view virtual returns (uint256) {\n        return 0;\n    }\n}\n"},"@openzeppelin/contracts@5.0.2/interfaces/draft-IERC6093.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/draft-IERC6093.sol)\npragma solidity ^0.8.20;\n\n/**\n * @dev Standard ERC20 Errors\n * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC20 tokens.\n */\ninterface IERC20Errors {\n    /**\n     * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.\n     * @param sender Address whose tokens are being transferred.\n     * @param balance Current balance for the interacting account.\n     * @param needed Minimum amount required to perform a transfer.\n     */\n    error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed);\n\n    /**\n     * @dev Indicates a failure with the token `sender`. Used in transfers.\n     * @param sender Address whose tokens are being transferred.\n     */\n    error ERC20InvalidSender(address sender);\n\n    /**\n     * @dev Indicates a failure with the token `receiver`. Used in transfers.\n     * @param receiver Address to which tokens are being transferred.\n     */\n    error ERC20InvalidReceiver(address receiver);\n\n    /**\n     * @dev Indicates a failure with the `spender`’s `allowance`. Used in transfers.\n     * @param spender Address that may be allowed to operate on tokens without being their owner.\n     * @param allowance Amount of tokens a `spender` is allowed to operate with.\n     * @param needed Minimum amount required to perform a transfer.\n     */\n    error ERC20InsufficientAllowance(address spender, uint256 allowance, uint256 needed);\n\n    /**\n     * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.\n     * @param approver Address initiating an approval operation.\n     */\n    error ERC20InvalidApprover(address approver);\n\n    /**\n     * @dev Indicates a failure with the `spender` to be approved. Used in approvals.\n     * @param spender Address that may be allowed to operate on tokens without being their owner.\n     */\n    error ERC20InvalidSpender(address spender);\n}\n\n/**\n * @dev Standard ERC721 Errors\n * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC721 tokens.\n */\ninterface IERC721Errors {\n    /**\n     * @dev Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in EIP-20.\n     * Used in balance queries.\n     * @param owner Address of the current owner of a token.\n     */\n    error ERC721InvalidOwner(address owner);\n\n    /**\n     * @dev Indicates a `tokenId` whose `owner` is the zero address.\n     * @param tokenId Identifier number of a token.\n     */\n    error ERC721NonexistentToken(uint256 tokenId);\n\n    /**\n     * @dev Indicates an error related to the ownership over a particular token. Used in transfers.\n     * @param sender Address whose tokens are being transferred.\n     * @param tokenId Identifier number of a token.\n     * @param owner Address of the current owner of a token.\n     */\n    error ERC721IncorrectOwner(address sender, uint256 tokenId, address owner);\n\n    /**\n     * @dev Indicates a failure with the token `sender`. Used in transfers.\n     * @param sender Address whose tokens are being transferred.\n     */\n    error ERC721InvalidSender(address sender);\n\n    /**\n     * @dev Indicates a failure with the token `receiver`. Used in transfers.\n     * @param receiver Address to which tokens are being transferred.\n     */\n    error ERC721InvalidReceiver(address receiver);\n\n    /**\n     * @dev Indicates a failure with the `operator`’s approval. Used in transfers.\n     * @param operator Address that may be allowed to operate on tokens without being their owner.\n     * @param tokenId Identifier number of a token.\n     */\n    error ERC721InsufficientApproval(address operator, uint256 tokenId);\n\n    /**\n     * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.\n     * @param approver Address initiating an approval operation.\n     */\n    error ERC721InvalidApprover(address approver);\n\n    /**\n     * @dev Indicates a failure with the `operator` to be approved. Used in approvals.\n     * @param operator Address that may be allowed to operate on tokens without being their owner.\n     */\n    error ERC721InvalidOperator(address operator);\n}\n\n/**\n * @dev Standard ERC1155 Errors\n * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC1155 tokens.\n */\ninterface IERC1155Errors {\n    /**\n     * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.\n     * @param sender Address whose tokens are being transferred.\n     * @param balance Current balance for the interacting account.\n     * @param needed Minimum amount required to perform a transfer.\n     * @param tokenId Identifier number of a token.\n     */\n    error ERC1155InsufficientBalance(address sender, uint256 balance, uint256 needed, uint256 tokenId);\n\n    /**\n     * @dev Indicates a failure with the token `sender`. Used in transfers.\n     * @param sender Address whose tokens are being transferred.\n     */\n    error ERC1155InvalidSender(address sender);\n\n    /**\n     * @dev Indicates a failure with the token `receiver`. Used in transfers.\n     * @param receiver Address to which tokens are being transferred.\n     */\n    error ERC1155InvalidReceiver(address receiver);\n\n    /**\n     * @dev Indicates a failure with the `operator`’s approval. Used in transfers.\n     * @param operator Address that may be allowed to operate on tokens without being their owner.\n     * @param owner Address of the current owner of a token.\n     */\n    error ERC1155MissingApprovalForAll(address operator, address owner);\n\n    /**\n     * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.\n     * @param approver Address initiating an approval operation.\n     */\n    error ERC1155InvalidApprover(address approver);\n\n    /**\n     * @dev Indicates a failure with the `operator` to be approved. Used in approvals.\n     * @param operator Address that may be allowed to operate on tokens without being their owner.\n     */\n    error ERC1155InvalidOperator(address operator);\n\n    /**\n     * @dev Indicates an array length mismatch between ids and values in a safeBatchTransferFrom operation.\n     * Used in batch transfers.\n     * @param idsLength Length of the array of token identifiers\n     * @param valuesLength Length of the array of token amounts\n     */\n    error ERC1155InvalidArrayLength(uint256 idsLength, uint256 valuesLength);\n}\n"}},"compilation":{"language":"Solidity","compiler":"solc","compilerVersion":"0.8.24+commit.e11b9ed9","compilerSettings":{"optimizer":{"runs":200,"enabled":true},"evmVersion":"cancun"},"name":"GenesisToken","fullyQualifiedName":"GenesisToken.sol:GenesisToken"},"abi":[{"type":"constructor","inputs":[{"name":"name_","type":"string","internalType":"string"},{"name":"symbol_","type":"string","internalType":"string"},{"name":"payout_","type":"address","internalType":"address payable"}],"stateMutability":"nonpayable"},{"name":"ERC20InsufficientAllowance","type":"error","inputs":[{"name":"spender","type":"address","internalType":"address"},{"name":"allowance","type":"uint256","internalType":"uint256"},{"name":"needed","type":"uint256","internalType":"uint256"}]},{"name":"ERC20InsufficientBalance","type":"error","inputs":[{"name":"sender","type":"address","internalType":"address"},{"name":"balance","type":"uint256","internalType":"uint256"},{"name":"needed","type":"uint256","internalType":"uint256"}]},{"name":"ERC20InvalidApprover","type":"error","inputs":[{"name":"approver","type":"address","internalType":"address"}]},{"name":"ERC20InvalidReceiver","type":"error","inputs":[{"name":"receiver","type":"address","internalType":"address"}]},{"name":"ERC20InvalidSender","type":"error","inputs":[{"name":"sender","type":"address","internalType":"address"}]},{"name":"ERC20InvalidSpender","type":"error","inputs":[{"name":"spender","type":"address","internalType":"address"}]},{"name":"ReentrancyGuardReentrantCall","type":"error","inputs":[]},{"name":"Approval","type":"event","inputs":[{"name":"owner","type":"address","indexed":true,"internalType":"address"},{"name":"spender","type":"address","indexed":true,"internalType":"address"},{"name":"value","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"name":"LockedReleased","type":"event","inputs":[{"name":"to","type":"address","indexed":true,"internalType":"address"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"timestamp","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"name":"MintRecorded","type":"event","inputs":[{"name":"wallet","type":"address","indexed":true,"internalType":"address"},{"name":"agentId","type":"string","indexed":false,"internalType":"string"},{"name":"shares","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"freeShares","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"paidShares","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"tokensOut","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"bnbPaid","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"timestamp","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"name":"ReferralCredited","type":"event","inputs":[{"name":"referrerWallet","type":"address","indexed":true,"internalType":"address"},{"name":"referrerAgentId","type":"string","indexed":false,"internalType":"string"},{"name":"inviteeWallet","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"name":"Transfer","type":"event","inputs":[{"name":"from","type":"address","indexed":true,"internalType":"address"},{"name":"to","type":"address","indexed":true,"internalType":"address"},{"name":"value","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"name":"UnsoldBurned","type":"event","inputs":[{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"timestamp","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"name":"BASE_MAX_PER_WALLET","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"DEV_LOCKED","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"FREE_QUOTA","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"FREE_TOKENS","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"GENESIS_ALLOCATION","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"LOCK_DURATION","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"MINT_DURATION","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"PAID_QUOTA","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"PAID_TOKENS","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"PRICE_PER_PAID_SHARE","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"TOTAL_SHARES","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"TOTAL_SUPPLY","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"agentIdHashOf","type":"function","inputs":[{"name":"wallet","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"name":"agentIdRegistry","type":"function","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract IAgentIdRegistry"}],"stateMutability":"view"},{"name":"allowance","type":"function","inputs":[{"name":"owner","type":"address","internalType":"address"},{"name":"spender","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"approve","type":"function","inputs":[{"name":"spender","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"name":"balanceOf","type":"function","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"burnUnsold","type":"function","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"name":"burnedUnsold","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"decimals","type":"function","inputs":[],"outputs":[{"name":"","type":"uint8","internalType":"uint8"}],"stateMutability":"view"},{"name":"freeClaimed","type":"function","inputs":[{"name":"","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"name":"freeUsed","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"lockUntil","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"lockedReleased","type":"function","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"name":"maxSharesOf","type":"function","inputs":[{"name":"wallet","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"mintEnd","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"mintGenesis","type":"function","inputs":[{"name":"shares","type":"uint256","internalType":"uint256"},{"name":"agentId","type":"string","internalType":"string"},{"name":"referrerAgentId","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"payable"},{"name":"name","type":"function","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"name":"paidSold","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"payout","type":"function","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address payable"}],"stateMutability":"view"},{"name":"quote","type":"function","inputs":[{"name":"shares","type":"uint256","internalType":"uint256"},{"name":"wallet","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"referralBonusShares","type":"function","inputs":[{"name":"","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"referred","type":"function","inputs":[{"name":"","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"name":"releaseLocked","type":"function","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"name":"remainingSharesOf","type":"function","inputs":[{"name":"wallet","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"saleEnded","type":"function","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"name":"sharesOf","type":"function","inputs":[{"name":"","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"startTime","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"symbol","type":"function","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"name":"totalRevenueWei","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"totalSold","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"totalSupply","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"transfer","type":"function","inputs":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"name":"transferFrom","type":"function","inputs":[{"name":"from","type":"address","internalType":"address"},{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"name":"verifyAgentId","type":"function","inputs":[{"name":"wallet","type":"address","internalType":"address"},{"name":"agentId","type":"string","internalType":"string"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"name":"walletOfAgentId","type":"function","inputs":[{"name":"agentId","type":"string","internalType":"string"}],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"}],"metadata":{"compiler":{"version":"0.8.24+commit.e11b9ed9"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"string","name":"name_","type":"string"},{"internalType":"string","name":"symbol_","type":"string"},{"internalType":"address payable","name":"payout_","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientAllowance","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC20InvalidApprover","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC20InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC20InvalidSender","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"ERC20InvalidSpender","type":"error"},{"inputs":[],"name":"ReentrancyGuardReentrantCall","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"LockedReleased","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"wallet","type":"address"},{"indexed":false,"internalType":"string","name":"agentId","type":"string"},{"indexed":false,"internalType":"uint256","name":"shares","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"freeShares","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"paidShares","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensOut","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"bnbPaid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"MintRecorded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"referrerWallet","type":"address"},{"indexed":false,"internalType":"string","name":"referrerAgentId","type":"string"},{"indexed":true,"internalType":"address","name":"inviteeWallet","type":"address"}],"name":"ReferralCredited","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"UnsoldBurned","type":"event"},{"inputs":[],"name":"BASE_MAX_PER_WALLET","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DEV_LOCKED","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FREE_QUOTA","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FREE_TOKENS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"GENESIS_ALLOCATION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LOCK_DURATION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINT_DURATION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PAID_QUOTA","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PAID_TOKENS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRICE_PER_PAID_SHARE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TOTAL_SHARES","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TOTAL_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"agentIdHashOf","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"agentIdRegistry","outputs":[{"internalType":"contract IAgentIdRegistry","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnUnsold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"burnedUnsold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"freeClaimed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"freeUsed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lockUntil","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lockedReleased","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"maxSharesOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintEnd","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"shares","type":"uint256"},{"internalType":"string","name":"agentId","type":"string"},{"internalType":"string","name":"referrerAgentId","type":"string"}],"name":"mintGenesis","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paidSold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"payout","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"shares","type":"uint256"},{"internalType":"address","name":"wallet","type":"address"}],"name":"quote","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"referralBonusShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"referred","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"releaseLocked","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"remainingSharesOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"saleEnded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"sharesOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"startTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalRevenueWei","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"},{"internalType":"string","name":"agentId","type":"string"}],"name":"verifyAgentId","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"agentId","type":"string"}],"name":"walletOfAgentId","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}],"devdoc":{"errors":{"ERC20InsufficientAllowance(address,uint256,uint256)":[{"details":"Indicates a failure with the `spender`’s `allowance`. Used in transfers.","params":{"allowance":"Amount of tokens a `spender` is allowed to operate with.","needed":"Minimum amount required to perform a transfer.","spender":"Address that may be allowed to operate on tokens without being their owner."}}],"ERC20InsufficientBalance(address,uint256,uint256)":[{"details":"Indicates an error related to the current `balance` of a `sender`. Used in transfers.","params":{"balance":"Current balance for the interacting account.","needed":"Minimum amount required to perform a transfer.","sender":"Address whose tokens are being transferred."}}],"ERC20InvalidApprover(address)":[{"details":"Indicates a failure with the `approver` of a token to be approved. Used in approvals.","params":{"approver":"Address initiating an approval operation."}}],"ERC20InvalidReceiver(address)":[{"details":"Indicates a failure with the token `receiver`. Used in transfers.","params":{"receiver":"Address to which tokens are being transferred."}}],"ERC20InvalidSender(address)":[{"details":"Indicates a failure with the token `sender`. Used in transfers.","params":{"sender":"Address whose tokens are being transferred."}}],"ERC20InvalidSpender(address)":[{"details":"Indicates a failure with the `spender` to be approved. Used in approvals.","params":{"spender":"Address that may be allowed to operate on tokens without being their owner."}}],"ReentrancyGuardReentrantCall()":[{"details":"Unauthorized reentrant call."}]},"events":{"Approval(address,address,uint256)":{"details":"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance."},"Transfer(address,address,uint256)":{"details":"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero."}},"kind":"dev","methods":{"allowance(address,address)":{"details":"See {IERC20-allowance}."},"approve(address,uint256)":{"details":"See {IERC20-approve}. NOTE: If `value` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address."},"balanceOf(address)":{"details":"See {IERC20-balanceOf}."},"decimals()":{"details":"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the default value returned by this function, unless it's overridden. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}."},"name()":{"details":"Returns the name of the token."},"symbol()":{"details":"Returns the symbol of the token, usually a shorter version of the name."},"totalSupply()":{"details":"See {IERC20-totalSupply}."},"transfer(address,uint256)":{"details":"See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `value`."},"transferFrom(address,address,uint256)":{"details":"See {IERC20-transferFrom}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `value`. - the caller must have allowance for ``from``'s tokens of at least `value`."}},"version":1},"userdoc":{"kind":"user","methods":{"quote(uint256,address)":{"notice":"Exact BNB (wei) to send with mintGenesis(shares, ...) from `wallet`."}},"version":1}},"settings":{"compilationTarget":{"GenesisToken.sol":"GenesisToken"},"evmVersion":"cancun","libraries":{},"metadata":{"bytecodeHash":"ipfs"},"optimizer":{"enabled":true,"runs":200},"remappings":[]},"sources":{"@openzeppelin/contracts@5.0.2/interfaces/draft-IERC6093.sol":{"keccak256":"0x60c65f701957fdd6faea1acb0bb45825791d473693ed9ecb34726fdfaa849dd7","license":"MIT","urls":["bzz-raw://ea290300e0efc4d901244949dc4d877fd46e6c5e43dc2b26620e8efab3ab803f","dweb:/ipfs/QmcLLJppxKeJWqHxE2CUkcfhuRTgHSn8J4kijcLa5MYhSt"]},"@openzeppelin/contracts@5.0.2/token/ERC20/ERC20.sol":{"keccak256":"0xc3e1fa9d1987f8d349dfb4d6fe93bf2ca014b52ba335cfac30bfe71e357e6f80","license":"MIT","urls":["bzz-raw://c5703ccdeb7b1d685e375ed719117e9edf2ab4bc544f24f23b0d50ec82257229","dweb:/ipfs/QmTdwkbQq7owpCiyuzE7eh5LrD2ddrBCZ5WHVsWPi1RrTS"]},"@openzeppelin/contracts@5.0.2/token/ERC20/IERC20.sol":{"keccak256":"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70","license":"MIT","urls":["bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c","dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq"]},"@openzeppelin/contracts@5.0.2/token/ERC20/extensions/IERC20Metadata.sol":{"keccak256":"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2","license":"MIT","urls":["bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850","dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV"]},"@openzeppelin/contracts@5.0.2/utils/Context.sol":{"keccak256":"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2","license":"MIT","urls":["bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12","dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF"]},"@openzeppelin/contracts@5.0.2/utils/ReentrancyGuard.sol":{"keccak256":"0xf980daa263b661ab8ddee7d4fd833c7da7e7995e2c359ff1f17e67e4112f2236","license":"MIT","urls":["bzz-raw://7448ab095d6940130bcf76ba47a2eab14148c83119523b93dd89f6d84edd6c02","dweb:/ipfs/QmawrZ4voKQjH3oomXT3Kuheb3Mnmo2VvVpxg8Ne5UJUrd"]},"GenesisToken.sol":{"keccak256":"0x75e1903cd7b42fd5d55c306544fdc216c3c5a742c59cdd28bf335dcf64a44dd8","license":"MIT","urls":["bzz-raw://12b03bf2290d846bdac97ff413c3c5be32f6cd1aee218f06d835ebb1f4c2f93b","dweb:/ipfs/Qmb38KB1XA2TMPjaP2b9AWZi1mHuaZLrxcW2o6Sf6eNr7J"]}},"version":1},"storageLayout":{"types":{"t_bool":{"label":"bool","encoding":"inplace","numberOfBytes":"1"},"t_address":{"label":"address","encoding":"inplace","numberOfBytes":"20"},"t_bytes32":{"label":"bytes32","encoding":"inplace","numberOfBytes":"32"},"t_uint256":{"label":"uint256","encoding":"inplace","numberOfBytes":"32"},"t_string_storage":{"label":"string","encoding":"bytes","numberOfBytes":"32"},"t_mapping(t_address,t_bool)":{"key":"t_address","label":"mapping(address => bool)","value":"t_bool","encoding":"mapping","numberOfBytes":"32"},"t_mapping(t_address,t_bytes32)":{"key":"t_address","label":"mapping(address => bytes32)","value":"t_bytes32","encoding":"mapping","numberOfBytes":"32"},"t_mapping(t_address,t_uint256)":{"key":"t_address","label":"mapping(address => uint256)","value":"t_uint256","encoding":"mapping","numberOfBytes":"32"},"t_mapping(t_bytes32,t_address)":{"key":"t_bytes32","label":"mapping(bytes32 => address)","value":"t_address","encoding":"mapping","numberOfBytes":"32"},"t_mapping(t_address,t_mapping(t_address,t_uint256))":{"key":"t_address","label":"mapping(address => mapping(address => uint256))","value":"t_mapping(t_address,t_uint256)","encoding":"mapping","numberOfBytes":"32"}},"storage":[{"slot":"0","type":"t_mapping(t_address,t_uint256)","astId":159,"label":"_balances","offset":0,"contract":"GenesisToken.sol:GenesisToken"},{"slot":"1","type":"t_mapping(t_address,t_mapping(t_address,t_uint256))","astId":165,"label":"_allowances","offset":0,"contract":"GenesisToken.sol:GenesisToken"},{"slot":"2","type":"t_uint256","astId":167,"label":"_totalSupply","offset":0,"contract":"GenesisToken.sol:GenesisToken"},{"slot":"3","type":"t_string_storage","astId":169,"label":"_name","offset":0,"contract":"GenesisToken.sol:GenesisToken"},{"slot":"4","type":"t_string_storage","astId":171,"label":"_symbol","offset":0,"contract":"GenesisToken.sol:GenesisToken"},{"slot":"5","type":"t_uint256","astId":796,"label":"_status","offset":0,"contract":"GenesisToken.sol:GenesisToken"},{"slot":"6","type":"t_bool","astId":953,"label":"lockedReleased","offset":0,"contract":"GenesisToken.sol:GenesisToken"},{"slot":"7","type":"t_uint256","astId":955,"label":"freeUsed","offset":0,"contract":"GenesisToken.sol:GenesisToken"},{"slot":"8","type":"t_uint256","astId":957,"label":"paidSold","offset":0,"contract":"GenesisToken.sol:GenesisToken"},{"slot":"9","type":"t_uint256","astId":959,"label":"totalRevenueWei","offset":0,"contract":"GenesisToken.sol:GenesisToken"},{"slot":"10","type":"t_uint256","astId":961,"label":"burnedUnsold","offset":0,"contract":"GenesisToken.sol:GenesisToken"},{"slot":"11","type":"t_mapping(t_address,t_uint256)","astId":965,"label":"sharesOf","offset":0,"contract":"GenesisToken.sol:GenesisToken"},{"slot":"12","type":"t_mapping(t_address,t_bool)","astId":969,"label":"freeClaimed","offset":0,"contract":"GenesisToken.sol:GenesisToken"},{"slot":"13","type":"t_mapping(t_address,t_uint256)","astId":973,"label":"referralBonusShares","offset":0,"contract":"GenesisToken.sol:GenesisToken"},{"slot":"14","type":"t_mapping(t_address,t_bool)","astId":977,"label":"referred","offset":0,"contract":"GenesisToken.sol:GenesisToken"},{"slot":"15","type":"t_mapping(t_address,t_bytes32)","astId":981,"label":"_agentIdHashOf","offset":0,"contract":"GenesisToken.sol:GenesisToken"},{"slot":"16","type":"t_mapping(t_bytes32,t_address)","astId":985,"label":"_walletOfAgentId","offset":0,"contract":"GenesisToken.sol:GenesisToken"}]},"transientStorageLayout":null,"userdoc":{"kind":"user","methods":{"quote(uint256,address)":{"notice":"Exact BNB (wei) to send with mintGenesis(shares, ...) from `wallet`."}},"version":1},"devdoc":{"kind":"dev","errors":{"ERC20InvalidSender(address)":[{"params":{"sender":"Address whose tokens are being transferred."},"details":"Indicates a failure with the token `sender`. Used in transfers."}],"ERC20InvalidSpender(address)":[{"params":{"spender":"Address that may be allowed to operate on tokens without being their owner."},"details":"Indicates a failure with the `spender` to be approved. Used in approvals."}],"ERC20InvalidApprover(address)":[{"params":{"approver":"Address initiating an approval operation."},"details":"Indicates a failure with the `approver` of a token to be approved. Used in approvals."}],"ERC20InvalidReceiver(address)":[{"params":{"receiver":"Address to which tokens are being transferred."},"details":"Indicates a failure with the token `receiver`. Used in transfers."}],"ReentrancyGuardReentrantCall()":[{"details":"Unauthorized reentrant call."}],"ERC20InsufficientBalance(address,uint256,uint256)":[{"params":{"needed":"Minimum amount required to perform a transfer.","sender":"Address whose tokens are being transferred.","balance":"Current balance for the interacting account."},"details":"Indicates an error related to the current `balance` of a `sender`. Used in transfers."}],"ERC20InsufficientAllowance(address,uint256,uint256)":[{"params":{"needed":"Minimum amount required to perform a transfer.","spender":"Address that may be allowed to operate on tokens without being their owner.","allowance":"Amount of tokens a `spender` is allowed to operate with."},"details":"Indicates a failure with the `spender`’s `allowance`. Used in transfers."}]},"events":{"Approval(address,address,uint256)":{"details":"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance."},"Transfer(address,address,uint256)":{"details":"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero."}},"methods":{"name()":{"details":"Returns the name of the token."},"symbol()":{"details":"Returns the symbol of the token, usually a shorter version of the name."},"decimals()":{"details":"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the default value returned by this function, unless it's overridden. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}."},"totalSupply()":{"details":"See {IERC20-totalSupply}."},"balanceOf(address)":{"details":"See {IERC20-balanceOf}."},"approve(address,uint256)":{"details":"See {IERC20-approve}. NOTE: If `value` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address."},"transfer(address,uint256)":{"details":"See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `value`."},"allowance(address,address)":{"details":"See {IERC20-allowance}."},"transferFrom(address,address,uint256)":{"details":"See {IERC20-transferFrom}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `value`. - the caller must have allowance for ``from``'s tokens of at least `value`."}},"version":1},"sourceIds":{"GenesisToken.sol":{"id":6},"@openzeppelin/contracts@5.0.2/utils/Context.sol":{"id":4},"@openzeppelin/contracts@5.0.2/token/ERC20/ERC20.sol":{"id":1},"@openzeppelin/contracts@5.0.2/token/ERC20/IERC20.sol":{"id":2},"@openzeppelin/contracts@5.0.2/utils/ReentrancyGuard.sol":{"id":5},"@openzeppelin/contracts@5.0.2/interfaces/draft-IERC6093.sol":{"id":0},"@openzeppelin/contracts@5.0.2/token/ERC20/extensions/IERC20Metadata.sol":{"id":3}},"additionalInput":null,"stdJsonInput":{"sources":{"GenesisToken.sol":{"content":"// SPDX-License-Identifier: MIT\npragma solidity 0.8.24;\n\nimport \"@openzeppelin/contracts@5.0.2/token/ERC20/ERC20.sol\";\nimport \"@openzeppelin/contracts@5.0.2/utils/ReentrancyGuard.sol\";\n\n/**\n * Genesis token + genesis sale (BSC / BEP-20). Modelled on ASOCGenesis.\n *\n * - Total supply 100,000,000 tokens, 18 decimals, all minted to this contract.\n * - 5,555 genesis shares = 555 free + 5,000 paid.\n * - A wallet's FIRST share is free while the 555 free shares last = 5,555 tokens.\n * - A paid share = 15,555 tokens for exactly 0.002 BNB. BNB is forwarded straight to `payout`.\n * - Max 10 shares per wallet, +1 quota for every referral (invitee mints naming your Agent ID).\n * - Every mint is verified on-chain against the SPACE ID Agent ID registry on BSC.\n *   One Agent ID binds to one wallet.\n * - Mint window: opens at deployment, closes 5 days later (`mintEnd`).\n * - Dev reserve (19,141,975 tokens) locked for 1 year; anyone may call releaseLocked()\n *   after `lockUntil`, and it can only go to `payout`.\n * - After `mintEnd`, anyone may call burnUnsold() to burn unsold genesis tokens (never the dev reserve).\n * - NO owner, NO admin functions, NO withdraw. Verification cannot be switched off.\n */\ninterface IAgentIdRegistry {\n    function balanceOf(address wallet) external view returns (uint256);\n    function handleOf(address wallet) external view returns (string memory);\n    function ownerOf(uint256 tokenId) external view returns (address);\n}\n\ncontract GenesisToken is ERC20, ReentrancyGuard {\n    // ---- Economics ----\n    uint256 public constant TOTAL_SUPPLY = 100_000_000 * 1e18;\n    uint256 public constant FREE_TOKENS = 5_555 * 1e18;\n    uint256 public constant PAID_TOKENS = 15_555 * 1e18;\n    uint256 public constant PRICE_PER_PAID_SHARE = 0.002 ether; // BNB\n    uint256 public constant FREE_QUOTA = 555;\n    uint256 public constant PAID_QUOTA = 5_000;\n    uint256 public constant TOTAL_SHARES = 5_555;\n    uint256 public constant BASE_MAX_PER_WALLET = 10;\n    uint256 public constant GENESIS_ALLOCATION = (FREE_QUOTA * FREE_TOKENS) + (PAID_QUOTA * PAID_TOKENS); // 80,858,025\n    uint256 public constant DEV_LOCKED = TOTAL_SUPPLY - GENESIS_ALLOCATION; // 19,141,975\n    uint256 public constant LOCK_DURATION = 365 days;\n    uint256 public constant MINT_DURATION = 5 days; // 432,000 s\n\n    // ---- Agent ID registry (SPACE ID, BSC) - fixed, no setter ----\n    IAgentIdRegistry public constant agentIdRegistry = IAgentIdRegistry(0x60B9262456dE011F7d15a54CdD8c48bAaa8B022F);\n\n    // ---- Deployment parameters ----\n    address payable public immutable payout;\n    uint256 public immutable startTime;\n    uint256 public immutable mintEnd;\n    uint256 public immutable lockUntil;\n\n    // ---- State ----\n    bool public lockedReleased;\n    uint256 public freeUsed;\n    uint256 public paidSold;\n    uint256 public totalRevenueWei;\n    uint256 public burnedUnsold;\n\n    mapping(address => uint256) public sharesOf;\n    mapping(address => bool) public freeClaimed;\n    mapping(address => uint256) public referralBonusShares;\n    mapping(address => bool) public referred; // each invitee credits a referrer at most once\n    mapping(address => bytes32) private _agentIdHashOf;   // wallet -> keccak(handle without .ai)\n    mapping(bytes32 => address) private _walletOfAgentId; // keccak(handle without .ai) -> wallet\n\n    event MintRecorded(\n        address indexed wallet,\n        string agentId,\n        uint256 shares,\n        uint256 freeShares,\n        uint256 paidShares,\n        uint256 tokensOut,\n        uint256 bnbPaid,\n        uint256 timestamp\n    );\n    event ReferralCredited(address indexed referrerWallet, string referrerAgentId, address indexed inviteeWallet);\n    event LockedReleased(address indexed to, uint256 amount, uint256 timestamp);\n    event UnsoldBurned(uint256 amount, uint256 timestamp);\n\n    constructor(string memory name_, string memory symbol_, address payable payout_) ERC20(name_, symbol_) {\n        require(payout_ != address(0), \"payout is zero address\");\n        payout = payout_;\n        startTime = block.timestamp;\n        mintEnd = block.timestamp + MINT_DURATION;\n        lockUntil = block.timestamp + LOCK_DURATION;\n        _mint(address(this), TOTAL_SUPPLY);\n    }\n\n    // ---- Views ----\n    function totalSold() public view returns (uint256) {\n        return freeUsed + paidSold;\n    }\n\n    function saleEnded() public view returns (bool) {\n        return block.timestamp >= mintEnd || totalSold() >= TOTAL_SHARES;\n    }\n\n    function maxSharesOf(address wallet) public view returns (uint256) {\n        return BASE_MAX_PER_WALLET + referralBonusShares[wallet];\n    }\n\n    function remainingSharesOf(address wallet) external view returns (uint256) {\n        uint256 m = maxSharesOf(wallet);\n        return sharesOf[wallet] >= m ? 0 : m - sharesOf[wallet];\n    }\n\n    function agentIdHashOf(address wallet) external view returns (bytes32) {\n        return _agentIdHashOf[wallet];\n    }\n\n    function walletOfAgentId(string calldata agentId) external view returns (address) {\n        return _walletOfAgentId[keccak256(bytes(_stripAiSuffix(agentId)))];\n    }\n\n    /// @notice Number of free shares `wallet` would get in its next mint (0 or 1).\n    function _freePortion(address wallet, uint256 shares) internal view returns (uint256) {\n        return (shares > 0 && !freeClaimed[wallet] && freeUsed < FREE_QUOTA) ? 1 : 0;\n    }\n\n    /// @notice Exact BNB (wei) to send with mintGenesis(shares, ...) from `wallet`.\n    function quote(uint256 shares, address wallet) external view returns (uint256) {\n        return (shares - _freePortion(wallet, shares)) * PRICE_PER_PAID_SHARE;\n    }\n\n    // ---- Agent ID verification ----\n    function _stripAiSuffix(string memory s) internal pure returns (string memory) {\n        bytes memory b = bytes(s);\n        if (b.length >= 3 && b[b.length - 3] == \".\" && b[b.length - 2] == \"a\" && b[b.length - 1] == \"i\") {\n            bytes memory out = new bytes(b.length - 3);\n            for (uint256 i = 0; i < out.length; i++) {\n                out[i] = b[i];\n            }\n            return string(out);\n        }\n        return s;\n    }\n\n    function verifyAgentId(address wallet, string calldata agentId) public view returns (bool) {\n        string memory handle = _stripAiSuffix(agentId);\n        if (bytes(handle).length == 0) return false;\n        if (agentIdRegistry.balanceOf(wallet) == 0) return false;\n        string memory registered = _stripAiSuffix(agentIdRegistry.handleOf(wallet));\n        if (keccak256(bytes(registered)) != keccak256(bytes(handle))) return false;\n        uint256 tokenId = uint256(keccak256(bytes(handle)));\n        return agentIdRegistry.ownerOf(tokenId) == wallet;\n    }\n\n    // ---- Genesis mint ----\n    function mintGenesis(uint256 shares, string calldata agentId, string calldata referrerAgentId)\n        external\n        payable\n        nonReentrant\n    {\n        require(block.timestamp < mintEnd, \"Mint window has ended\");\n        require(totalSold() < TOTAL_SHARES, \"Genesis sale sold out\");\n        require(shares >= 1, \"Minimum 1 share\");\n        require(bytes(agentId).length > 0, \"Agent ID is required\");\n        require(sharesOf[msg.sender] + shares <= maxSharesOf(msg.sender), \"Exceeds the per-wallet limit\");\n        require(totalSold() + shares <= TOTAL_SHARES, \"Exceeds total shares\");\n        require(verifyAgentId(msg.sender, agentId), \"Agent ID not verified for this wallet\");\n\n        bytes32 myHash = keccak256(bytes(_stripAiSuffix(agentId)));\n        if (_agentIdHashOf[msg.sender] == bytes32(0)) {\n            require(_walletOfAgentId[myHash] == address(0), \"Agent ID already bound to another wallet\");\n            _agentIdHashOf[msg.sender] = myHash;\n            _walletOfAgentId[myHash] = msg.sender;\n        } else {\n            require(_agentIdHashOf[msg.sender] == myHash, \"Agent ID does not match this wallet\");\n        }\n\n        uint256 freePortion = _freePortion(msg.sender, shares);\n        uint256 paidPortion = shares - freePortion;\n        require(paidSold + paidPortion <= PAID_QUOTA, \"Paid share quota exhausted\");\n        uint256 cost = paidPortion * PRICE_PER_PAID_SHARE;\n        require(msg.value == cost, \"Incorrect BNB amount\");\n\n        uint256 tokensOut = (freePortion * FREE_TOKENS) + (paidPortion * PAID_TOKENS);\n\n        if (freePortion == 1) {\n            freeUsed += 1;\n            freeClaimed[msg.sender] = true;\n        }\n        paidSold += paidPortion;\n        sharesOf[msg.sender] += shares;\n        totalRevenueWei += msg.value;\n\n        if (bytes(referrerAgentId).length > 0) {\n            address refWallet = _walletOfAgentId[keccak256(bytes(_stripAiSuffix(referrerAgentId)))];\n            if (refWallet != address(0) && refWallet != msg.sender && !referred[msg.sender]) {\n                referred[msg.sender] = true;\n                referralBonusShares[refWallet] += 1;\n                emit ReferralCredited(refWallet, referrerAgentId, msg.sender);\n            }\n        }\n\n        require(balanceOf(address(this)) - tokensOut >= DEV_LOCKED, \"Insufficient genesis reserve\");\n        _transfer(address(this), msg.sender, tokensOut);\n\n        if (msg.value > 0) {\n            (bool ok, ) = payout.call{value: msg.value}(\"\");\n            require(ok, \"BNB forwarding failed\");\n        }\n\n        emit MintRecorded(msg.sender, agentId, shares, freePortion, paidPortion, tokensOut, msg.value, block.timestamp);\n    }\n\n    // ---- Dev reserve: anyone can trigger after 1 year, always to payout ----\n    function releaseLocked() external nonReentrant {\n        require(block.timestamp >= lockUntil, \"Still locked\");\n        require(!lockedReleased, \"Already released\");\n        lockedReleased = true;\n        _transfer(address(this), payout, DEV_LOCKED);\n        emit LockedReleased(payout, DEV_LOCKED, block.timestamp);\n    }\n\n    // ---- Unsold genesis tokens: anyone can burn after mintEnd ----\n    function burnUnsold() external nonReentrant {\n        require(block.timestamp >= mintEnd, \"Mint window still open\");\n        uint256 reserve = lockedReleased ? 0 : DEV_LOCKED;\n        uint256 amount = balanceOf(address(this)) - reserve;\n        require(amount > 0, \"Nothing to burn\");\n        burnedUnsold += amount;\n        _burn(address(this), amount);\n        emit UnsoldBurned(amount, block.timestamp);\n    }\n}\n"},"@openzeppelin/contracts@5.0.2/utils/Context.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Provides information about the current execution context, including the\n * sender of the transaction and its data. While these are generally available\n * via msg.sender and msg.data, they should not be accessed in such a direct\n * manner, since when dealing with meta-transactions the account sending and\n * paying for execution may not be the actual sender (as far as an application\n * is concerned).\n *\n * This contract is only required for intermediate, library-like contracts.\n */\nabstract contract Context {\n    function _msgSender() internal view virtual returns (address) {\n        return msg.sender;\n    }\n\n    function _msgData() internal view virtual returns (bytes calldata) {\n        return msg.data;\n    }\n\n    function _contextSuffixLength() internal view virtual returns (uint256) {\n        return 0;\n    }\n}\n"},"@openzeppelin/contracts@5.0.2/token/ERC20/ERC20.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/ERC20.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC20} from \"./IERC20.sol\";\nimport {IERC20Metadata} from \"./extensions/IERC20Metadata.sol\";\nimport {Context} from \"../../utils/Context.sol\";\nimport {IERC20Errors} from \"../../interfaces/draft-IERC6093.sol\";\n\n/**\n * @dev Implementation of the {IERC20} interface.\n *\n * This implementation is agnostic to the way tokens are created. This means\n * that a supply mechanism has to be added in a derived contract using {_mint}.\n *\n * TIP: For a detailed writeup see our guide\n * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How\n * to implement supply mechanisms].\n *\n * The default value of {decimals} is 18. To change this, you should override\n * this function so it returns a different value.\n *\n * We have followed general OpenZeppelin Contracts guidelines: functions revert\n * instead returning `false` on failure. This behavior is nonetheless\n * conventional and does not conflict with the expectations of ERC20\n * applications.\n *\n * Additionally, an {Approval} event is emitted on calls to {transferFrom}.\n * This allows applications to reconstruct the allowance for all accounts just\n * by listening to said events. Other implementations of the EIP may not emit\n * these events, as it isn't required by the specification.\n */\nabstract contract ERC20 is Context, IERC20, IERC20Metadata, IERC20Errors {\n    mapping(address account => uint256) private _balances;\n\n    mapping(address account => mapping(address spender => uint256)) private _allowances;\n\n    uint256 private _totalSupply;\n\n    string private _name;\n    string private _symbol;\n\n    /**\n     * @dev Sets the values for {name} and {symbol}.\n     *\n     * All two of these values are immutable: they can only be set once during\n     * construction.\n     */\n    constructor(string memory name_, string memory symbol_) {\n        _name = name_;\n        _symbol = symbol_;\n    }\n\n    /**\n     * @dev Returns the name of the token.\n     */\n    function name() public view virtual returns (string memory) {\n        return _name;\n    }\n\n    /**\n     * @dev Returns the symbol of the token, usually a shorter version of the\n     * name.\n     */\n    function symbol() public view virtual returns (string memory) {\n        return _symbol;\n    }\n\n    /**\n     * @dev Returns the number of decimals used to get its user representation.\n     * For example, if `decimals` equals `2`, a balance of `505` tokens should\n     * be displayed to a user as `5.05` (`505 / 10 ** 2`).\n     *\n     * Tokens usually opt for a value of 18, imitating the relationship between\n     * Ether and Wei. This is the default value returned by this function, unless\n     * it's overridden.\n     *\n     * NOTE: This information is only used for _display_ purposes: it in\n     * no way affects any of the arithmetic of the contract, including\n     * {IERC20-balanceOf} and {IERC20-transfer}.\n     */\n    function decimals() public view virtual returns (uint8) {\n        return 18;\n    }\n\n    /**\n     * @dev See {IERC20-totalSupply}.\n     */\n    function totalSupply() public view virtual returns (uint256) {\n        return _totalSupply;\n    }\n\n    /**\n     * @dev See {IERC20-balanceOf}.\n     */\n    function balanceOf(address account) public view virtual returns (uint256) {\n        return _balances[account];\n    }\n\n    /**\n     * @dev See {IERC20-transfer}.\n     *\n     * Requirements:\n     *\n     * - `to` cannot be the zero address.\n     * - the caller must have a balance of at least `value`.\n     */\n    function transfer(address to, uint256 value) public virtual returns (bool) {\n        address owner = _msgSender();\n        _transfer(owner, to, value);\n        return true;\n    }\n\n    /**\n     * @dev See {IERC20-allowance}.\n     */\n    function allowance(address owner, address spender) public view virtual returns (uint256) {\n        return _allowances[owner][spender];\n    }\n\n    /**\n     * @dev See {IERC20-approve}.\n     *\n     * NOTE: If `value` is the maximum `uint256`, the allowance is not updated on\n     * `transferFrom`. This is semantically equivalent to an infinite approval.\n     *\n     * Requirements:\n     *\n     * - `spender` cannot be the zero address.\n     */\n    function approve(address spender, uint256 value) public virtual returns (bool) {\n        address owner = _msgSender();\n        _approve(owner, spender, value);\n        return true;\n    }\n\n    /**\n     * @dev See {IERC20-transferFrom}.\n     *\n     * Emits an {Approval} event indicating the updated allowance. This is not\n     * required by the EIP. See the note at the beginning of {ERC20}.\n     *\n     * NOTE: Does not update the allowance if the current allowance\n     * is the maximum `uint256`.\n     *\n     * Requirements:\n     *\n     * - `from` and `to` cannot be the zero address.\n     * - `from` must have a balance of at least `value`.\n     * - the caller must have allowance for ``from``'s tokens of at least\n     * `value`.\n     */\n    function transferFrom(address from, address to, uint256 value) public virtual returns (bool) {\n        address spender = _msgSender();\n        _spendAllowance(from, spender, value);\n        _transfer(from, to, value);\n        return true;\n    }\n\n    /**\n     * @dev Moves a `value` amount of tokens from `from` to `to`.\n     *\n     * This internal function is equivalent to {transfer}, and can be used to\n     * e.g. implement automatic token fees, slashing mechanisms, etc.\n     *\n     * Emits a {Transfer} event.\n     *\n     * NOTE: This function is not virtual, {_update} should be overridden instead.\n     */\n    function _transfer(address from, address to, uint256 value) internal {\n        if (from == address(0)) {\n            revert ERC20InvalidSender(address(0));\n        }\n        if (to == address(0)) {\n            revert ERC20InvalidReceiver(address(0));\n        }\n        _update(from, to, value);\n    }\n\n    /**\n     * @dev Transfers a `value` amount of tokens from `from` to `to`, or alternatively mints (or burns) if `from`\n     * (or `to`) is the zero address. All customizations to transfers, mints, and burns should be done by overriding\n     * this function.\n     *\n     * Emits a {Transfer} event.\n     */\n    function _update(address from, address to, uint256 value) internal virtual {\n        if (from == address(0)) {\n            // Overflow check required: The rest of the code assumes that totalSupply never overflows\n            _totalSupply += value;\n        } else {\n            uint256 fromBalance = _balances[from];\n            if (fromBalance < value) {\n                revert ERC20InsufficientBalance(from, fromBalance, value);\n            }\n            unchecked {\n                // Overflow not possible: value <= fromBalance <= totalSupply.\n                _balances[from] = fromBalance - value;\n            }\n        }\n\n        if (to == address(0)) {\n            unchecked {\n                // Overflow not possible: value <= totalSupply or value <= fromBalance <= totalSupply.\n                _totalSupply -= value;\n            }\n        } else {\n            unchecked {\n                // Overflow not possible: balance + value is at most totalSupply, which we know fits into a uint256.\n                _balances[to] += value;\n            }\n        }\n\n        emit Transfer(from, to, value);\n    }\n\n    /**\n     * @dev Creates a `value` amount of tokens and assigns them to `account`, by transferring it from address(0).\n     * Relies on the `_update` mechanism\n     *\n     * Emits a {Transfer} event with `from` set to the zero address.\n     *\n     * NOTE: This function is not virtual, {_update} should be overridden instead.\n     */\n    function _mint(address account, uint256 value) internal {\n        if (account == address(0)) {\n            revert ERC20InvalidReceiver(address(0));\n        }\n        _update(address(0), account, value);\n    }\n\n    /**\n     * @dev Destroys a `value` amount of tokens from `account`, lowering the total supply.\n     * Relies on the `_update` mechanism.\n     *\n     * Emits a {Transfer} event with `to` set to the zero address.\n     *\n     * NOTE: This function is not virtual, {_update} should be overridden instead\n     */\n    function _burn(address account, uint256 value) internal {\n        if (account == address(0)) {\n            revert ERC20InvalidSender(address(0));\n        }\n        _update(account, address(0), value);\n    }\n\n    /**\n     * @dev Sets `value` as the allowance of `spender` over the `owner` s tokens.\n     *\n     * This internal function is equivalent to `approve`, and can be used to\n     * e.g. set automatic allowances for certain subsystems, etc.\n     *\n     * Emits an {Approval} event.\n     *\n     * Requirements:\n     *\n     * - `owner` cannot be the zero address.\n     * - `spender` cannot be the zero address.\n     *\n     * Overrides to this logic should be done to the variant with an additional `bool emitEvent` argument.\n     */\n    function _approve(address owner, address spender, uint256 value) internal {\n        _approve(owner, spender, value, true);\n    }\n\n    /**\n     * @dev Variant of {_approve} with an optional flag to enable or disable the {Approval} event.\n     *\n     * By default (when calling {_approve}) the flag is set to true. On the other hand, approval changes made by\n     * `_spendAllowance` during the `transferFrom` operation set the flag to false. This saves gas by not emitting any\n     * `Approval` event during `transferFrom` operations.\n     *\n     * Anyone who wishes to continue emitting `Approval` events on the`transferFrom` operation can force the flag to\n     * true using the following override:\n     * ```\n     * function _approve(address owner, address spender, uint256 value, bool) internal virtual override {\n     *     super._approve(owner, spender, value, true);\n     * }\n     * ```\n     *\n     * Requirements are the same as {_approve}.\n     */\n    function _approve(address owner, address spender, uint256 value, bool emitEvent) internal virtual {\n        if (owner == address(0)) {\n            revert ERC20InvalidApprover(address(0));\n        }\n        if (spender == address(0)) {\n            revert ERC20InvalidSpender(address(0));\n        }\n        _allowances[owner][spender] = value;\n        if (emitEvent) {\n            emit Approval(owner, spender, value);\n        }\n    }\n\n    /**\n     * @dev Updates `owner` s allowance for `spender` based on spent `value`.\n     *\n     * Does not update the allowance value in case of infinite allowance.\n     * Revert if not enough allowance is available.\n     *\n     * Does not emit an {Approval} event.\n     */\n    function _spendAllowance(address owner, address spender, uint256 value) internal virtual {\n        uint256 currentAllowance = allowance(owner, spender);\n        if (currentAllowance != type(uint256).max) {\n            if (currentAllowance < value) {\n                revert ERC20InsufficientAllowance(spender, currentAllowance, value);\n            }\n            unchecked {\n                _approve(owner, spender, currentAllowance - value, false);\n            }\n        }\n    }\n}\n"},"@openzeppelin/contracts@5.0.2/token/ERC20/IERC20.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/IERC20.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Interface of the ERC20 standard as defined in the EIP.\n */\ninterface IERC20 {\n    /**\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\n     * another (`to`).\n     *\n     * Note that `value` may be zero.\n     */\n    event Transfer(address indexed from, address indexed to, uint256 value);\n\n    /**\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\n     * a call to {approve}. `value` is the new allowance.\n     */\n    event Approval(address indexed owner, address indexed spender, uint256 value);\n\n    /**\n     * @dev Returns the value of tokens in existence.\n     */\n    function totalSupply() external view returns (uint256);\n\n    /**\n     * @dev Returns the value of tokens owned by `account`.\n     */\n    function balanceOf(address account) external view returns (uint256);\n\n    /**\n     * @dev Moves a `value` amount of tokens from the caller's account to `to`.\n     *\n     * Returns a boolean value indicating whether the operation succeeded.\n     *\n     * Emits a {Transfer} event.\n     */\n    function transfer(address to, uint256 value) external returns (bool);\n\n    /**\n     * @dev Returns the remaining number of tokens that `spender` will be\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\n     * zero by default.\n     *\n     * This value changes when {approve} or {transferFrom} are called.\n     */\n    function allowance(address owner, address spender) external view returns (uint256);\n\n    /**\n     * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\n     * caller's tokens.\n     *\n     * Returns a boolean value indicating whether the operation succeeded.\n     *\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\n     * that someone may use both the old and the new allowance by unfortunate\n     * transaction ordering. One possible solution to mitigate this race\n     * condition is to first reduce the spender's allowance to 0 and set the\n     * desired value afterwards:\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n     *\n     * Emits an {Approval} event.\n     */\n    function approve(address spender, uint256 value) external returns (bool);\n\n    /**\n     * @dev Moves a `value` amount of tokens from `from` to `to` using the\n     * allowance mechanism. `value` is then deducted from the caller's\n     * allowance.\n     *\n     * Returns a boolean value indicating whether the operation succeeded.\n     *\n     * Emits a {Transfer} event.\n     */\n    function transferFrom(address from, address to, uint256 value) external returns (bool);\n}\n"},"@openzeppelin/contracts@5.0.2/utils/ReentrancyGuard.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/ReentrancyGuard.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Contract module that helps prevent reentrant calls to a function.\n *\n * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier\n * available, which can be applied to functions to make sure there are no nested\n * (reentrant) calls to them.\n *\n * Note that because there is a single `nonReentrant` guard, functions marked as\n * `nonReentrant` may not call one another. This can be worked around by making\n * those functions `private`, and then adding `external` `nonReentrant` entry\n * points to them.\n *\n * TIP: If you would like to learn more about reentrancy and alternative ways\n * to protect against it, check out our blog post\n * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].\n */\nabstract contract ReentrancyGuard {\n    // Booleans are more expensive than uint256 or any type that takes up a full\n    // word because each write operation emits an extra SLOAD to first read the\n    // slot's contents, replace the bits taken up by the boolean, and then write\n    // back. This is the compiler's defense against contract upgrades and\n    // pointer aliasing, and it cannot be disabled.\n\n    // The values being non-zero value makes deployment a bit more expensive,\n    // but in exchange the refund on every call to nonReentrant will be lower in\n    // amount. Since refunds are capped to a percentage of the total\n    // transaction's gas, it is best to keep them low in cases like this one, to\n    // increase the likelihood of the full refund coming into effect.\n    uint256 private constant NOT_ENTERED = 1;\n    uint256 private constant ENTERED = 2;\n\n    uint256 private _status;\n\n    /**\n     * @dev Unauthorized reentrant call.\n     */\n    error ReentrancyGuardReentrantCall();\n\n    constructor() {\n        _status = NOT_ENTERED;\n    }\n\n    /**\n     * @dev Prevents a contract from calling itself, directly or indirectly.\n     * Calling a `nonReentrant` function from another `nonReentrant`\n     * function is not supported. It is possible to prevent this from happening\n     * by making the `nonReentrant` function external, and making it call a\n     * `private` function that does the actual work.\n     */\n    modifier nonReentrant() {\n        _nonReentrantBefore();\n        _;\n        _nonReentrantAfter();\n    }\n\n    function _nonReentrantBefore() private {\n        // On the first call to nonReentrant, _status will be NOT_ENTERED\n        if (_status == ENTERED) {\n            revert ReentrancyGuardReentrantCall();\n        }\n\n        // Any calls to nonReentrant after this point will fail\n        _status = ENTERED;\n    }\n\n    function _nonReentrantAfter() private {\n        // By storing the original value once again, a refund is triggered (see\n        // https://eips.ethereum.org/EIPS/eip-2200)\n        _status = NOT_ENTERED;\n    }\n\n    /**\n     * @dev Returns true if the reentrancy guard is currently set to \"entered\", which indicates there is a\n     * `nonReentrant` function in the call stack.\n     */\n    function _reentrancyGuardEntered() internal view returns (bool) {\n        return _status == ENTERED;\n    }\n}\n"},"@openzeppelin/contracts@5.0.2/interfaces/draft-IERC6093.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/draft-IERC6093.sol)\npragma solidity ^0.8.20;\n\n/**\n * @dev Standard ERC20 Errors\n * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC20 tokens.\n */\ninterface IERC20Errors {\n    /**\n     * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.\n     * @param sender Address whose tokens are being transferred.\n     * @param balance Current balance for the interacting account.\n     * @param needed Minimum amount required to perform a transfer.\n     */\n    error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed);\n\n    /**\n     * @dev Indicates a failure with the token `sender`. Used in transfers.\n     * @param sender Address whose tokens are being transferred.\n     */\n    error ERC20InvalidSender(address sender);\n\n    /**\n     * @dev Indicates a failure with the token `receiver`. Used in transfers.\n     * @param receiver Address to which tokens are being transferred.\n     */\n    error ERC20InvalidReceiver(address receiver);\n\n    /**\n     * @dev Indicates a failure with the `spender`’s `allowance`. Used in transfers.\n     * @param spender Address that may be allowed to operate on tokens without being their owner.\n     * @param allowance Amount of tokens a `spender` is allowed to operate with.\n     * @param needed Minimum amount required to perform a transfer.\n     */\n    error ERC20InsufficientAllowance(address spender, uint256 allowance, uint256 needed);\n\n    /**\n     * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.\n     * @param approver Address initiating an approval operation.\n     */\n    error ERC20InvalidApprover(address approver);\n\n    /**\n     * @dev Indicates a failure with the `spender` to be approved. Used in approvals.\n     * @param spender Address that may be allowed to operate on tokens without being their owner.\n     */\n    error ERC20InvalidSpender(address spender);\n}\n\n/**\n * @dev Standard ERC721 Errors\n * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC721 tokens.\n */\ninterface IERC721Errors {\n    /**\n     * @dev Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in EIP-20.\n     * Used in balance queries.\n     * @param owner Address of the current owner of a token.\n     */\n    error ERC721InvalidOwner(address owner);\n\n    /**\n     * @dev Indicates a `tokenId` whose `owner` is the zero address.\n     * @param tokenId Identifier number of a token.\n     */\n    error ERC721NonexistentToken(uint256 tokenId);\n\n    /**\n     * @dev Indicates an error related to the ownership over a particular token. Used in transfers.\n     * @param sender Address whose tokens are being transferred.\n     * @param tokenId Identifier number of a token.\n     * @param owner Address of the current owner of a token.\n     */\n    error ERC721IncorrectOwner(address sender, uint256 tokenId, address owner);\n\n    /**\n     * @dev Indicates a failure with the token `sender`. Used in transfers.\n     * @param sender Address whose tokens are being transferred.\n     */\n    error ERC721InvalidSender(address sender);\n\n    /**\n     * @dev Indicates a failure with the token `receiver`. Used in transfers.\n     * @param receiver Address to which tokens are being transferred.\n     */\n    error ERC721InvalidReceiver(address receiver);\n\n    /**\n     * @dev Indicates a failure with the `operator`’s approval. Used in transfers.\n     * @param operator Address that may be allowed to operate on tokens without being their owner.\n     * @param tokenId Identifier number of a token.\n     */\n    error ERC721InsufficientApproval(address operator, uint256 tokenId);\n\n    /**\n     * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.\n     * @param approver Address initiating an approval operation.\n     */\n    error ERC721InvalidApprover(address approver);\n\n    /**\n     * @dev Indicates a failure with the `operator` to be approved. Used in approvals.\n     * @param operator Address that may be allowed to operate on tokens without being their owner.\n     */\n    error ERC721InvalidOperator(address operator);\n}\n\n/**\n * @dev Standard ERC1155 Errors\n * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC1155 tokens.\n */\ninterface IERC1155Errors {\n    /**\n     * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.\n     * @param sender Address whose tokens are being transferred.\n     * @param balance Current balance for the interacting account.\n     * @param needed Minimum amount required to perform a transfer.\n     * @param tokenId Identifier number of a token.\n     */\n    error ERC1155InsufficientBalance(address sender, uint256 balance, uint256 needed, uint256 tokenId);\n\n    /**\n     * @dev Indicates a failure with the token `sender`. Used in transfers.\n     * @param sender Address whose tokens are being transferred.\n     */\n    error ERC1155InvalidSender(address sender);\n\n    /**\n     * @dev Indicates a failure with the token `receiver`. Used in transfers.\n     * @param receiver Address to which tokens are being transferred.\n     */\n    error ERC1155InvalidReceiver(address receiver);\n\n    /**\n     * @dev Indicates a failure with the `operator`’s approval. Used in transfers.\n     * @param operator Address that may be allowed to operate on tokens without being their owner.\n     * @param owner Address of the current owner of a token.\n     */\n    error ERC1155MissingApprovalForAll(address operator, address owner);\n\n    /**\n     * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.\n     * @param approver Address initiating an approval operation.\n     */\n    error ERC1155InvalidApprover(address approver);\n\n    /**\n     * @dev Indicates a failure with the `operator` to be approved. Used in approvals.\n     * @param operator Address that may be allowed to operate on tokens without being their owner.\n     */\n    error ERC1155InvalidOperator(address operator);\n\n    /**\n     * @dev Indicates an array length mismatch between ids and values in a safeBatchTransferFrom operation.\n     * Used in batch transfers.\n     * @param idsLength Length of the array of token identifiers\n     * @param valuesLength Length of the array of token amounts\n     */\n    error ERC1155InvalidArrayLength(uint256 idsLength, uint256 valuesLength);\n}\n"},"@openzeppelin/contracts@5.0.2/token/ERC20/extensions/IERC20Metadata.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/extensions/IERC20Metadata.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC20} from \"../IERC20.sol\";\n\n/**\n * @dev Interface for the optional metadata functions from the ERC20 standard.\n */\ninterface IERC20Metadata is IERC20 {\n    /**\n     * @dev Returns the name of the token.\n     */\n    function name() external view returns (string memory);\n\n    /**\n     * @dev Returns the symbol of the token.\n     */\n    function symbol() external view returns (string memory);\n\n    /**\n     * @dev Returns the decimals places of the token.\n     */\n    function decimals() external view returns (uint8);\n}\n"}},"language":"Solidity","settings":{"optimizer":{"runs":200,"enabled":true},"evmVersion":"cancun"}},"stdJsonOutput":{"sources":{"GenesisToken.sol":{"id":6},"@openzeppelin/contracts@5.0.2/utils/Context.sol":{"id":4},"@openzeppelin/contracts@5.0.2/token/ERC20/ERC20.sol":{"id":1},"@openzeppelin/contracts@5.0.2/token/ERC20/IERC20.sol":{"id":2},"@openzeppelin/contracts@5.0.2/utils/ReentrancyGuard.sol":{"id":5},"@openzeppelin/contracts@5.0.2/interfaces/draft-IERC6093.sol":{"id":0},"@openzeppelin/contracts@5.0.2/token/ERC20/extensions/IERC20Metadata.sol":{"id":3}},"contracts":{"GenesisToken.sol":{"GenesisToken":{"abi":[{"type":"constructor","inputs":[{"name":"name_","type":"string","internalType":"string"},{"name":"symbol_","type":"string","internalType":"string"},{"name":"payout_","type":"address","internalType":"address payable"}],"stateMutability":"nonpayable"},{"name":"ERC20InsufficientAllowance","type":"error","inputs":[{"name":"spender","type":"address","internalType":"address"},{"name":"allowance","type":"uint256","internalType":"uint256"},{"name":"needed","type":"uint256","internalType":"uint256"}]},{"name":"ERC20InsufficientBalance","type":"error","inputs":[{"name":"sender","type":"address","internalType":"address"},{"name":"balance","type":"uint256","internalType":"uint256"},{"name":"needed","type":"uint256","internalType":"uint256"}]},{"name":"ERC20InvalidApprover","type":"error","inputs":[{"name":"approver","type":"address","internalType":"address"}]},{"name":"ERC20InvalidReceiver","type":"error","inputs":[{"name":"receiver","type":"address","internalType":"address"}]},{"name":"ERC20InvalidSender","type":"error","inputs":[{"name":"sender","type":"address","internalType":"address"}]},{"name":"ERC20InvalidSpender","type":"error","inputs":[{"name":"spender","type":"address","internalType":"address"}]},{"name":"ReentrancyGuardReentrantCall","type":"error","inputs":[]},{"name":"Approval","type":"event","inputs":[{"name":"owner","type":"address","indexed":true,"internalType":"address"},{"name":"spender","type":"address","indexed":true,"internalType":"address"},{"name":"value","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"name":"LockedReleased","type":"event","inputs":[{"name":"to","type":"address","indexed":true,"internalType":"address"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"timestamp","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"name":"MintRecorded","type":"event","inputs":[{"name":"wallet","type":"address","indexed":true,"internalType":"address"},{"name":"agentId","type":"string","indexed":false,"internalType":"string"},{"name":"shares","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"freeShares","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"paidShares","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"tokensOut","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"bnbPaid","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"timestamp","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"name":"ReferralCredited","type":"event","inputs":[{"name":"referrerWallet","type":"address","indexed":true,"internalType":"address"},{"name":"referrerAgentId","type":"string","indexed":false,"internalType":"string"},{"name":"inviteeWallet","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"name":"Transfer","type":"event","inputs":[{"name":"from","type":"address","indexed":true,"internalType":"address"},{"name":"to","type":"address","indexed":true,"internalType":"address"},{"name":"value","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"name":"UnsoldBurned","type":"event","inputs":[{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"timestamp","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"name":"BASE_MAX_PER_WALLET","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"DEV_LOCKED","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"FREE_QUOTA","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"FREE_TOKENS","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"GENESIS_ALLOCATION","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"LOCK_DURATION","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"MINT_DURATION","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"PAID_QUOTA","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"PAID_TOKENS","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"PRICE_PER_PAID_SHARE","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"TOTAL_SHARES","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"TOTAL_SUPPLY","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"agentIdHashOf","type":"function","inputs":[{"name":"wallet","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"name":"agentIdRegistry","type":"function","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract IAgentIdRegistry"}],"stateMutability":"view"},{"name":"allowance","type":"function","inputs":[{"name":"owner","type":"address","internalType":"address"},{"name":"spender","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"approve","type":"function","inputs":[{"name":"spender","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"name":"balanceOf","type":"function","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"burnUnsold","type":"function","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"name":"burnedUnsold","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"decimals","type":"function","inputs":[],"outputs":[{"name":"","type":"uint8","internalType":"uint8"}],"stateMutability":"view"},{"name":"freeClaimed","type":"function","inputs":[{"name":"","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"name":"freeUsed","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"lockUntil","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"lockedReleased","type":"function","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"name":"maxSharesOf","type":"function","inputs":[{"name":"wallet","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"mintEnd","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"mintGenesis","type":"function","inputs":[{"name":"shares","type":"uint256","internalType":"uint256"},{"name":"agentId","type":"string","internalType":"string"},{"name":"referrerAgentId","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"payable"},{"name":"name","type":"function","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"name":"paidSold","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"payout","type":"function","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address payable"}],"stateMutability":"view"},{"name":"quote","type":"function","inputs":[{"name":"shares","type":"uint256","internalType":"uint256"},{"name":"wallet","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"referralBonusShares","type":"function","inputs":[{"name":"","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"referred","type":"function","inputs":[{"name":"","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"name":"releaseLocked","type":"function","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"name":"remainingSharesOf","type":"function","inputs":[{"name":"wallet","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"saleEnded","type":"function","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"name":"sharesOf","type":"function","inputs":[{"name":"","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"startTime","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"symbol","type":"function","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"name":"totalRevenueWei","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"totalSold","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"totalSupply","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"transfer","type":"function","inputs":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"name":"transferFrom","type":"function","inputs":[{"name":"from","type":"address","internalType":"address"},{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"name":"verifyAgentId","type":"function","inputs":[{"name":"wallet","type":"address","internalType":"address"},{"name":"agentId","type":"string","internalType":"string"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"name":"walletOfAgentId","type":"function","inputs":[{"name":"agentId","type":"string","internalType":"string"}],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"}],"metadata":"{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name_\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol_\",\"type\":\"string\"},{\"internalType\":\"address payable\",\"name\":\"payout_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"allowance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientAllowance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSpender\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"name\":\"LockedReleased\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"wallet\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"agentId\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"freeShares\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"paidShares\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokensOut\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"bnbPaid\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"name\":\"MintRecorded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"referrerWallet\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"referrerAgentId\",\"type\":\"string\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"inviteeWallet\",\"type\":\"address\"}],\"name\":\"ReferralCredited\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"name\":\"UnsoldBurned\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"BASE_MAX_PER_WALLET\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DEV_LOCKED\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"FREE_QUOTA\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"FREE_TOKENS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"GENESIS_ALLOCATION\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"LOCK_DURATION\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MINT_DURATION\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PAID_QUOTA\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PAID_TOKENS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PRICE_PER_PAID_SHARE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"TOTAL_SHARES\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"TOTAL_SUPPLY\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"wallet\",\"type\":\"address\"}],\"name\":\"agentIdHashOf\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"agentIdRegistry\",\"outputs\":[{\"internalType\":\"contract IAgentIdRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"burnUnsold\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"burnedUnsold\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"freeClaimed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"freeUsed\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lockUntil\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lockedReleased\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"wallet\",\"type\":\"address\"}],\"name\":\"maxSharesOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"mintEnd\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"agentId\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"referrerAgentId\",\"type\":\"string\"}],\"name\":\"mintGenesis\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paidSold\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"payout\",\"outputs\":[{\"internalType\":\"address payable\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"wallet\",\"type\":\"address\"}],\"name\":\"quote\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"referralBonusShares\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"referred\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"releaseLocked\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"wallet\",\"type\":\"address\"}],\"name\":\"remainingSharesOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"saleEnded\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"sharesOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"startTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalRevenueWei\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSold\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"wallet\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"agentId\",\"type\":\"string\"}],\"name\":\"verifyAgentId\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"agentId\",\"type\":\"string\"}],\"name\":\"walletOfAgentId\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"ERC20InsufficientAllowance(address,uint256,uint256)\":[{\"details\":\"Indicates a failure with the `spender`’s `allowance`. Used in transfers.\",\"params\":{\"allowance\":\"Amount of tokens a `spender` is allowed to operate with.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ERC20InsufficientBalance(address,uint256,uint256)\":[{\"details\":\"Indicates an error related to the current `balance` of a `sender`. Used in transfers.\",\"params\":{\"balance\":\"Current balance for the interacting account.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidApprover(address)\":[{\"details\":\"Indicates a failure with the `approver` of a token to be approved. Used in approvals.\",\"params\":{\"approver\":\"Address initiating an approval operation.\"}}],\"ERC20InvalidReceiver(address)\":[{\"details\":\"Indicates a failure with the token `receiver`. Used in transfers.\",\"params\":{\"receiver\":\"Address to which tokens are being transferred.\"}}],\"ERC20InvalidSender(address)\":[{\"details\":\"Indicates a failure with the token `sender`. Used in transfers.\",\"params\":{\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidSpender(address)\":[{\"details\":\"Indicates a failure with the `spender` to be approved. Used in approvals.\",\"params\":{\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ReentrancyGuardReentrantCall()\":[{\"details\":\"Unauthorized reentrant call.\"}]},\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"See {IERC20-allowance}.\"},\"approve(address,uint256)\":{\"details\":\"See {IERC20-approve}. NOTE: If `value` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address.\"},\"balanceOf(address)\":{\"details\":\"See {IERC20-balanceOf}.\"},\"decimals()\":{\"details\":\"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the default value returned by this function, unless it's overridden. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}.\"},\"name()\":{\"details\":\"Returns the name of the token.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token, usually a shorter version of the name.\"},\"totalSupply()\":{\"details\":\"See {IERC20-totalSupply}.\"},\"transfer(address,uint256)\":{\"details\":\"See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `value`.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC20-transferFrom}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `value`. - the caller must have allowance for ``from``'s tokens of at least `value`.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"quote(uint256,address)\":{\"notice\":\"Exact BNB (wei) to send with mintGenesis(shares, ...) from `wallet`.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"GenesisToken.sol\":\"GenesisToken\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts@5.0.2/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x60c65f701957fdd6faea1acb0bb45825791d473693ed9ecb34726fdfaa849dd7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ea290300e0efc4d901244949dc4d877fd46e6c5e43dc2b26620e8efab3ab803f\",\"dweb:/ipfs/QmcLLJppxKeJWqHxE2CUkcfhuRTgHSn8J4kijcLa5MYhSt\"]},\"@openzeppelin/contracts@5.0.2/token/ERC20/ERC20.sol\":{\"keccak256\":\"0xc3e1fa9d1987f8d349dfb4d6fe93bf2ca014b52ba335cfac30bfe71e357e6f80\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c5703ccdeb7b1d685e375ed719117e9edf2ab4bc544f24f23b0d50ec82257229\",\"dweb:/ipfs/QmTdwkbQq7owpCiyuzE7eh5LrD2ddrBCZ5WHVsWPi1RrTS\"]},\"@openzeppelin/contracts@5.0.2/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts@5.0.2/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]},\"@openzeppelin/contracts@5.0.2/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"@openzeppelin/contracts@5.0.2/utils/ReentrancyGuard.sol\":{\"keccak256\":\"0xf980daa263b661ab8ddee7d4fd833c7da7e7995e2c359ff1f17e67e4112f2236\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7448ab095d6940130bcf76ba47a2eab14148c83119523b93dd89f6d84edd6c02\",\"dweb:/ipfs/QmawrZ4voKQjH3oomXT3Kuheb3Mnmo2VvVpxg8Ne5UJUrd\"]},\"GenesisToken.sol\":{\"keccak256\":\"0x75e1903cd7b42fd5d55c306544fdc216c3c5a742c59cdd28bf335dcf64a44dd8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://12b03bf2290d846bdac97ff413c3c5be32f6cd1aee218f06d835ebb1f4c2f93b\",\"dweb:/ipfs/Qmb38KB1XA2TMPjaP2b9AWZi1mHuaZLrxcW2o6Sf6eNr7J\"]}},\"version\":1}","userdoc":{"kind":"user","methods":{"quote(uint256,address)":{"notice":"Exact BNB (wei) to send with mintGenesis(shares, ...) from `wallet`."}},"version":1},"devdoc":{"kind":"dev","errors":{"ERC20InvalidSender(address)":[{"params":{"sender":"Address whose tokens are being transferred."},"details":"Indicates a failure with the token `sender`. Used in transfers."}],"ERC20InvalidSpender(address)":[{"params":{"spender":"Address that may be allowed to operate on tokens without being their owner."},"details":"Indicates a failure with the `spender` to be approved. Used in approvals."}],"ERC20InvalidApprover(address)":[{"params":{"approver":"Address initiating an approval operation."},"details":"Indicates a failure with the `approver` of a token to be approved. Used in approvals."}],"ERC20InvalidReceiver(address)":[{"params":{"receiver":"Address to which tokens are being transferred."},"details":"Indicates a failure with the token `receiver`. Used in transfers."}],"ReentrancyGuardReentrantCall()":[{"details":"Unauthorized reentrant call."}],"ERC20InsufficientBalance(address,uint256,uint256)":[{"params":{"needed":"Minimum amount required to perform a transfer.","sender":"Address whose tokens are being transferred.","balance":"Current balance for the interacting account."},"details":"Indicates an error related to the current `balance` of a `sender`. Used in transfers."}],"ERC20InsufficientAllowance(address,uint256,uint256)":[{"params":{"needed":"Minimum amount required to perform a transfer.","spender":"Address that may be allowed to operate on tokens without being their owner.","allowance":"Amount of tokens a `spender` is allowed to operate with."},"details":"Indicates a failure with the `spender`’s `allowance`. Used in transfers."}]},"events":{"Approval(address,address,uint256)":{"details":"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance."},"Transfer(address,address,uint256)":{"details":"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero."}},"methods":{"name()":{"details":"Returns the name of the token."},"symbol()":{"details":"Returns the symbol of the token, usually a shorter version of the name."},"decimals()":{"details":"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the default value returned by this function, unless it's overridden. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}."},"totalSupply()":{"details":"See {IERC20-totalSupply}."},"balanceOf(address)":{"details":"See {IERC20-balanceOf}."},"approve(address,uint256)":{"details":"See {IERC20-approve}. NOTE: If `value` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address."},"transfer(address,uint256)":{"details":"See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `value`."},"allowance(address,address)":{"details":"See {IERC20-allowance}."},"transferFrom(address,address,uint256)":{"details":"See {IERC20-transferFrom}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `value`. - the caller must have allowance for ``from``'s tokens of at least `value`."}},"version":1},"storageLayout":{"types":{"t_bool":{"label":"bool","encoding":"inplace","numberOfBytes":"1"},"t_address":{"label":"address","encoding":"inplace","numberOfBytes":"20"},"t_bytes32":{"label":"bytes32","encoding":"inplace","numberOfBytes":"32"},"t_uint256":{"label":"uint256","encoding":"inplace","numberOfBytes":"32"},"t_string_storage":{"label":"string","encoding":"bytes","numberOfBytes":"32"},"t_mapping(t_address,t_bool)":{"key":"t_address","label":"mapping(address => bool)","value":"t_bool","encoding":"mapping","numberOfBytes":"32"},"t_mapping(t_address,t_bytes32)":{"key":"t_address","label":"mapping(address => bytes32)","value":"t_bytes32","encoding":"mapping","numberOfBytes":"32"},"t_mapping(t_address,t_uint256)":{"key":"t_address","label":"mapping(address => uint256)","value":"t_uint256","encoding":"mapping","numberOfBytes":"32"},"t_mapping(t_bytes32,t_address)":{"key":"t_bytes32","label":"mapping(bytes32 => address)","value":"t_address","encoding":"mapping","numberOfBytes":"32"},"t_mapping(t_address,t_mapping(t_address,t_uint256))":{"key":"t_address","label":"mapping(address => mapping(address => uint256))","value":"t_mapping(t_address,t_uint256)","encoding":"mapping","numberOfBytes":"32"}},"storage":[{"slot":"0","type":"t_mapping(t_address,t_uint256)","astId":159,"label":"_balances","offset":0,"contract":"GenesisToken.sol:GenesisToken"},{"slot":"1","type":"t_mapping(t_address,t_mapping(t_address,t_uint256))","astId":165,"label":"_allowances","offset":0,"contract":"GenesisToken.sol:GenesisToken"},{"slot":"2","type":"t_uint256","astId":167,"label":"_totalSupply","offset":0,"contract":"GenesisToken.sol:GenesisToken"},{"slot":"3","type":"t_string_storage","astId":169,"label":"_name","offset":0,"contract":"GenesisToken.sol:GenesisToken"},{"slot":"4","type":"t_string_storage","astId":171,"label":"_symbol","offset":0,"contract":"GenesisToken.sol:GenesisToken"},{"slot":"5","type":"t_uint256","astId":796,"label":"_status","offset":0,"contract":"GenesisToken.sol:GenesisToken"},{"slot":"6","type":"t_bool","astId":953,"label":"lockedReleased","offset":0,"contract":"GenesisToken.sol:GenesisToken"},{"slot":"7","type":"t_uint256","astId":955,"label":"freeUsed","offset":0,"contract":"GenesisToken.sol:GenesisToken"},{"slot":"8","type":"t_uint256","astId":957,"label":"paidSold","offset":0,"contract":"GenesisToken.sol:GenesisToken"},{"slot":"9","type":"t_uint256","astId":959,"label":"totalRevenueWei","offset":0,"contract":"GenesisToken.sol:GenesisToken"},{"slot":"10","type":"t_uint256","astId":961,"label":"burnedUnsold","offset":0,"contract":"GenesisToken.sol:GenesisToken"},{"slot":"11","type":"t_mapping(t_address,t_uint256)","astId":965,"label":"sharesOf","offset":0,"contract":"GenesisToken.sol:GenesisToken"},{"slot":"12","type":"t_mapping(t_address,t_bool)","astId":969,"label":"freeClaimed","offset":0,"contract":"GenesisToken.sol:GenesisToken"},{"slot":"13","type":"t_mapping(t_address,t_uint256)","astId":973,"label":"referralBonusShares","offset":0,"contract":"GenesisToken.sol:GenesisToken"},{"slot":"14","type":"t_mapping(t_address,t_bool)","astId":977,"label":"referred","offset":0,"contract":"GenesisToken.sol:GenesisToken"},{"slot":"15","type":"t_mapping(t_address,t_bytes32)","astId":981,"label":"_agentIdHashOf","offset":0,"contract":"GenesisToken.sol:GenesisToken"},{"slot":"16","type":"t_mapping(t_bytes32,t_address)","astId":985,"label":"_walletOfAgentId","offset":0,"contract":"GenesisToken.sol:GenesisToken"}]},"transientStorageLayout":null,"evm":{"bytecode":{"object":"61010060405234801562000011575f80fd5b50604051620028e4380380620028e483398101604081905262000034916200033c565b828260036200004483826200044d565b5060046200005382826200044d565b50506001600555506001600160a01b038116620000b75760405162461bcd60e51b815260206004820152601660248201527f7061796f7574206973207a65726f20616464726573730000000000000000000060448201526064015b60405180910390fd5b6001600160a01b0381166080524260a0819052620000da90620697809062000519565b60c052620000ed6301e133804262000519565b60e05262000107306a52b7d2dcc80cd2e400000062000110565b5050506200053f565b6001600160a01b0382166200013b5760405163ec442f0560e01b81525f6004820152602401620000ae565b620001485f83836200014c565b5050565b6001600160a01b0383166200017a578060025f8282546200016e919062000519565b90915550620001ec9050565b6001600160a01b0383165f9081526020819052604090205481811015620001ce5760405163391434e360e21b81526001600160a01b03851660048201526024810182905260448101839052606401620000ae565b6001600160a01b0384165f9081526020819052604090209082900390555b6001600160a01b0382166200020a5760028054829003905562000228565b6001600160a01b0382165f9081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200026e91815260200190565b60405180910390a3505050565b634e487b7160e01b5f52604160045260245ffd5b5f82601f8301126200029f575f80fd5b81516001600160401b0380821115620002bc57620002bc6200027b565b604051601f8301601f19908116603f01168101908282118183101715620002e757620002e76200027b565b816040528381526020925086602085880101111562000304575f80fd5b5f91505b8382101562000327578582018301518183018401529082019062000308565b5f602085830101528094505050505092915050565b5f805f606084860312156200034f575f80fd5b83516001600160401b038082111562000366575f80fd5b62000374878388016200028f565b945060208601519150808211156200038a575f80fd5b5062000399868287016200028f565b604086015190935090506001600160a01b0381168114620003b8575f80fd5b809150509250925092565b600181811c90821680620003d857607f821691505b602082108103620003f757634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156200044857805f5260205f20601f840160051c81016020851015620004245750805b601f840160051c820191505b8181101562000445575f815560010162000430565b50505b505050565b81516001600160401b038111156200046957620004696200027b565b62000481816200047a8454620003c3565b84620003fd565b602080601f831160018114620004b7575f84156200049f5750858301515b5f19600386901b1c1916600185901b17855562000511565b5f85815260208120601f198616915b82811015620004e757888601518255948401946001909101908401620004c6565b50858210156200050557878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b808201808211156200053957634e487b7160e01b5f52601160045260245ffd5b92915050565b60805160a05160c05160e051612340620005a45f395f818161040901526114d201525f81816107e501528181610c3f015281816116d7015261175e01525f6105ef01525f8181610528015281816113ad01528181611588015261160101526123405ff3fe608060405260043610610275575f3560e01c80636dbc45821161014a578063a0388ca6116100be578063c5de72dd11610078578063c5de72dd14610762578063c63de8101461077b578063dd62ed3e14610790578063ea2b4ab2146107d4578063ed2b606d14610807578063f5eb42dc14610826575f80fd5b8063a0388ca6146106bb578063a0b93856146106e9578063a9059cbb146106fe578063b4d0df8a1461071d578063b52a585114610731578063c084f54014610745575f80fd5b806385e3f9971161010f57806385e3f997146106255780638854a0ff1461063a578063902d55a5146106615780639106d7ba1461067f57806395d89b41146106935780639b8906ae146106a7575f80fd5b80636dbc45821461056257806370a082311461057f578063735f21be146105b357806378e97925146105de5780638099b00214610611575f80fd5b8063313ce567116101ec5780634db159f5116101a65780634db159f514610495578063510040cb146104aa5780636101b37f146104be57806361c0b6a0146104d357806362bc5f7b1461050157806363bd1d4a14610517575f80fd5b8063313ce567146103dd5780633c78929e146103f85780633ce165031461042b57806340036e4914610440578063485d38341461045f5780634bddda1514610476575f80fd5b806318160ddd1161023d57806318160ddd146103285780631e130f9e1461033c5780632115e5ce1461037057806323b872dd1461038f5780632880ea9e146103ae5780632b5e5809146103c8575f80fd5b806306fdde0314610279578063095ea7b3146102a357806310b985d4146102d257806313b0be33146102f557806315cccf3514610314575b5f80fd5b348015610284575f80fd5b5061028d610851565b60405161029a9190611e88565b60405180910390f35b3480156102ae575f80fd5b506102c26102bd366004611ed1565b6108e1565b604051901515815260200161029a565b3480156102dd575f80fd5b506102e760085481565b60405190815260200161029a565b348015610300575f80fd5b506102e761030f366004611efb565b6108fa565b34801561031f575f80fd5b506102e7610928565b348015610333575f80fd5b506002546102e7565b348015610347575f80fd5b506102e7610356366004611f29565b6001600160a01b03165f908152600f602052604090205490565b34801561037b575f80fd5b506102e761038a366004611f29565b610976565b34801561039a575f80fd5b506102c26103a9366004611f44565b610999565b3480156103b9575f80fd5b506102e766071afd498d000081565b3480156103d3575f80fd5b506102e7600a5481565b3480156103e8575f80fd5b506040516012815260200161029a565b348015610403575f80fd5b506102e77f000000000000000000000000000000000000000000000000000000000000000081565b348015610436575f80fd5b506102e761022b81565b34801561044b575f80fd5b506102c261045a366004611fc7565b6109bc565b34801561046a575f80fd5b506102e76301e1338081565b348015610481575f80fd5b506102e7610490366004611f29565b610bd9565b6104a86104a3366004612018565b610c35565b005b3480156104b5575f80fd5b506104a86114c8565b3480156104c9575f80fd5b506102e760075481565b3480156104de575f80fd5b506102c26104ed366004611f29565b600c6020525f908152604090205460ff1681565b34801561050c575f80fd5b506102e76206978081565b348015610522575f80fd5b5061054a7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161029a565b34801561056d575f80fd5b506102e769012d231c7c593eec000081565b34801561058a575f80fd5b506102e7610599366004611f29565b6001600160a01b03165f9081526020819052604090205490565b3480156105be575f80fd5b506102e76105cd366004611f29565b600d6020525f908152604090205481565b3480156105e9575f80fd5b506102e77f000000000000000000000000000000000000000000000000000000000000000081565b34801561061c575f80fd5b506102e7600a81565b348015610630575f80fd5b506102e76115b381565b348015610645575f80fd5b5061054a7360b9262456de011f7d15a54cdd8c48baaa8b022f81565b34801561066c575f80fd5b506102e76a52b7d2dcc80cd2e400000081565b34801561068a575f80fd5b506102e76116af565b34801561069e575f80fd5b5061028d6116c5565b3480156106b2575f80fd5b506102c26116d4565b3480156106c6575f80fd5b506102c26106d5366004611f29565b600e6020525f908152604090205460ff1681565b3480156106f4575f80fd5b506102e760095481565b348015610709575f80fd5b506102c2610718366004611ed1565b611711565b348015610728575f80fd5b506102e761171e565b34801561073c575f80fd5b506104a8611754565b348015610750575f80fd5b506102e769034b3cfd4613f12c000081565b34801561076d575f80fd5b506006546102c29060ff1681565b348015610786575f80fd5b506102e761138881565b34801561079b575f80fd5b506102e76107aa36600461208c565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b3480156107df575f80fd5b506102e77f000000000000000000000000000000000000000000000000000000000000000081565b348015610812575f80fd5b5061054a6108213660046120b8565b6118e9565b348015610831575f80fd5b506102e7610840366004611f29565b600b6020525f908152604090205481565b606060038054610860906120f7565b80601f016020809104026020016040519081016040528092919081815260200182805461088c906120f7565b80156108d75780601f106108ae576101008083540402835291602001916108d7565b820191905f5260205f20905b8154815290600101906020018083116108ba57829003601f168201915b5050505050905090565b5f336108ee818585611951565b60019150505b92915050565b5f66071afd498d000061090d8385611963565b6109179085612143565b6109219190612156565b9392505050565b61093e69034b3cfd4613f12c0000611388612156565b61095469012d231c7c593eec000061022b612156565b61095e919061216d565b610973906a52b7d2dcc80cd2e4000000612143565b81565b6001600160a01b0381165f908152600d60205260408120546108f490600a61216d565b5f336109a68582856119b1565b6109b1858585611a2c565b506001949350505050565b5f806109fc84848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250611a8992505050565b905080515f03610a0f575f915050610921565b6040516370a0823160e01b81526001600160a01b03861660048201527360b9262456de011f7d15a54cdd8c48baaa8b022f906370a0823190602401602060405180830381865afa158015610a65573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a899190612180565b5f03610a98575f915050610921565b604051633142854560e21b81526001600160a01b03861660048201525f90610b1f907360b9262456de011f7d15a54cdd8c48baaa8b022f9063c50a1514906024015f60405180830381865afa158015610af3573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610b1a91908101906121ab565b611a89565b90508180519060200120818051906020012014610b40575f92505050610921565b815160208301206040516331a9108f60e11b8152600481018290526001600160a01b038816907360b9262456de011f7d15a54cdd8c48baaa8b022f90636352211e90602401602060405180830381865afa158015610ba0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bc49190612253565b6001600160a01b031614979650505050505050565b5f80610be483610976565b6001600160a01b0384165f908152600b6020526040902054909150811115610c2d576001600160a01b0383165f908152600b6020526040902054610c289082612143565b610921565b5f9392505050565b610c3d611c0c565b7f00000000000000000000000000000000000000000000000000000000000000004210610ca95760405162461bcd60e51b8152602060048201526015602482015274135a5b9d081dda5b991bddc81a185cc8195b991959605a1b60448201526064015b60405180910390fd5b6115b3610cb46116af565b10610cf95760405162461bcd60e51b815260206004820152601560248201527411d95b995cda5cc81cd85b19481cdbdb19081bdd5d605a1b6044820152606401610ca0565b6001851015610d3c5760405162461bcd60e51b815260206004820152600f60248201526e4d696e696d756d203120736861726560881b6044820152606401610ca0565b82610d805760405162461bcd60e51b81526020600482015260146024820152731059d95b9d081251081a5cc81c995c5d5a5c995960621b6044820152606401610ca0565b610d8933610976565b335f908152600b6020526040902054610da390879061216d565b1115610df15760405162461bcd60e51b815260206004820152601c60248201527f4578636565647320746865207065722d77616c6c6574206c696d6974000000006044820152606401610ca0565b6115b385610dfd6116af565b610e07919061216d565b1115610e4c5760405162461bcd60e51b81526020600482015260146024820152734578636565647320746f74616c2073686172657360601b6044820152606401610ca0565b610e573385856109bc565b610eb15760405162461bcd60e51b815260206004820152602560248201527f4167656e74204944206e6f7420766572696669656420666f7220746869732077604482015264185b1b195d60da1b6064820152608401610ca0565b5f610ef085858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250611a8992505050565b8051602091820120335f908152600f909252604090912054909150610fb8575f818152601060205260409020546001600160a01b031615610f845760405162461bcd60e51b815260206004820152602860248201527f4167656e7420494420616c726561647920626f756e6420746f20616e6f7468656044820152671c881dd85b1b195d60c21b6064820152608401610ca0565b335f818152600f602090815260408083208590558483526010909152902080546001600160a01b0319169091179055611021565b335f908152600f602052604090205481146110215760405162461bcd60e51b815260206004820152602360248201527f4167656e7420494420646f6573206e6f74206d6174636820746869732077616c6044820152621b195d60ea1b6064820152608401610ca0565b5f61102c3388611963565b90505f6110398289612143565b90506113888160085461104c919061216d565b111561109a5760405162461bcd60e51b815260206004820152601a60248201527f506169642073686172652071756f7461206578686175737465640000000000006044820152606401610ca0565b5f6110ac66071afd498d000083612156565b90508034146110f45760405162461bcd60e51b8152602060048201526014602482015273125b98dbdc9c9958dd0810939088185b5bdd5b9d60621b6044820152606401610ca0565b5f61110969034b3cfd4613f12c000084612156565b61111d69012d231c7c593eec000086612156565b611127919061216d565b90508360010361116257600160075f828254611143919061216d565b9091555050335f908152600c60205260409020805460ff191660011790555b8260085f828254611173919061216d565b9091555050335f908152600b6020526040812080548c929061119690849061216d565b925050819055503460095f8282546111ae919061216d565b909155505085156112e6575f60105f6111fb8a8a8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250611a8992505050565b805160209182012082528101919091526040015f20546001600160a01b03169050801580159061123457506001600160a01b0381163314155b801561124f5750335f908152600e602052604090205460ff16155b156112e457335f908152600e60209081526040808320805460ff191660019081179091556001600160a01b0385168452600d909252822080549192909161129790849061216d565b909155505060405133906001600160a01b038316907f99b028dd597faf0b2ad0e538fc15267c0b023e6e7b4fbae549419dc63ec795d1906112db908c908c90612296565b60405180910390a35b505b6112fc69034b3cfd4613f12c0000611388612156565b61131269012d231c7c593eec000061022b612156565b61131c919061216d565b611331906a52b7d2dcc80cd2e4000000612143565b305f9081526020819052604090205461134b908390612143565b10156113995760405162461bcd60e51b815260206004820152601c60248201527f496e73756666696369656e742067656e657369732072657365727665000000006044820152606401610ca0565b6113a4303383611a2c565b3415611463575f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316346040515f6040518083038185875af1925050503d805f8114611413576040519150601f19603f3d011682016040523d82523d5f602084013e611418565b606091505b50509050806114615760405162461bcd60e51b815260206004820152601560248201527410939088199bdc9dd85c991a5b99c819985a5b1959605a1b6044820152606401610ca0565b505b336001600160a01b03167f66b57df7aba118d24ed7972643e779f593eb515f67a6faa387db1e5975aab0758a8a8d88888734426040516114aa9897969594939291906122b1565b60405180910390a250505050506114c16001600555565b5050505050565b6114d0611c0c565b7f000000000000000000000000000000000000000000000000000000000000000042101561152f5760405162461bcd60e51b815260206004820152600c60248201526b14dd1a5b1b081b1bd8dad95960a21b6044820152606401610ca0565b60065460ff16156115755760405162461bcd60e51b815260206004820152601060248201526f105b1c9958591e481c995b19585cd95960821b6044820152606401610ca0565b6006805460ff191660011790556115f7307f00000000000000000000000000000000000000000000000000000000000000006115bd69034b3cfd4613f12c0000611388612156565b6115d369012d231c7c593eec000061022b612156565b6115dd919061216d565b6115f2906a52b7d2dcc80cd2e4000000612143565b611a2c565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000167f7bbe9c0ab7edf3877274e19436d2e10ecb76324ae6afd629d2f928f1aff8165161165869034b3cfd4613f12c0000611388612156565b61166e69012d231c7c593eec000061022b612156565b611678919061216d565b61168d906a52b7d2dcc80cd2e4000000612143565b604080519182524260208301520160405180910390a26116ad6001600555565b565b5f6008546007546116c0919061216d565b905090565b606060048054610860906120f7565b5f7f0000000000000000000000000000000000000000000000000000000000000000421015806116c057506115b361170a6116af565b1015905090565b5f336108ee818585611a2c565b61173469034b3cfd4613f12c0000611388612156565b61174a69012d231c7c593eec000061022b612156565b610973919061216d565b61175c611c0c565b7f00000000000000000000000000000000000000000000000000000000000000004210156117c55760405162461bcd60e51b815260206004820152601660248201527526b4b73a103bb4b73237bb9039ba34b6361037b832b760511b6044820152606401610ca0565b6006545f9060ff16611821576117e769034b3cfd4613f12c0000611388612156565b6117fd69012d231c7c593eec000061022b612156565b611807919061216d565b61181c906a52b7d2dcc80cd2e4000000612143565b611823565b5f5b305f9081526020819052604081205491925090611841908390612143565b90505f81116118845760405162461bcd60e51b815260206004820152600f60248201526e2737ba3434b733903a3790313ab93760891b6044820152606401610ca0565b80600a5f828254611895919061216d565b909155506118a590503082611c36565b604080518281524260208201527fd23443dd319810153e81eb4de570440dbff0f207c19b68eabf15b159644505c9910160405180910390a150506116ad6001600555565b5f60105f61192b85858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250611a8992505050565b805160209182012082528101919091526040015f20546001600160a01b03169392505050565b61195e8383836001611c6e565b505050565b5f808211801561198b57506001600160a01b0383165f908152600c602052604090205460ff16155b801561199a575061022b600754105b6119a4575f6119a7565b60015b60ff169392505050565b6001600160a01b038381165f908152600160209081526040808320938616835292905220545f198114611a265781811015611a1857604051637dc7a0d960e11b81526001600160a01b03841660048201526024810182905260448101839052606401610ca0565b611a2684848484035f611c6e565b50505050565b6001600160a01b038316611a5557604051634b637e8f60e11b81525f6004820152602401610ca0565b6001600160a01b038216611a7e5760405163ec442f0560e01b81525f6004820152602401610ca0565b61195e838383611d40565b60605f8290506003815110158015611ad257508060038251611aab9190612143565b81518110611abb57611abb6122f6565b6020910101516001600160f81b031916601760f91b145b8015611b0f57508060028251611ae89190612143565b81518110611af857611af86122f6565b6020910101516001600160f81b031916606160f81b145b8015611b4c57508060018251611b259190612143565b81518110611b3557611b356122f6565b6020910101516001600160f81b031916606960f81b145b15611c05575f60038251611b609190612143565b67ffffffffffffffff811115611b7857611b78612197565b6040519080825280601f01601f191660200182016040528015611ba2576020820181803683370190505b5090505f5b8151811015611bfd57828181518110611bc257611bc26122f6565b602001015160f81c60f81b828281518110611bdf57611bdf6122f6565b60200101906001600160f81b03191690815f1a905350600101611ba7565b509392505050565b5090919050565b600260055403611c2f57604051633ee5aeb560e01b815260040160405180910390fd5b6002600555565b6001600160a01b038216611c5f57604051634b637e8f60e11b81525f6004820152602401610ca0565b611c6a825f83611d40565b5050565b6001600160a01b038416611c975760405163e602df0560e01b81525f6004820152602401610ca0565b6001600160a01b038316611cc057604051634a1406b160e11b81525f6004820152602401610ca0565b6001600160a01b038085165f9081526001602090815260408083209387168352929052208290558015611a2657826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051611d3291815260200190565b60405180910390a350505050565b6001600160a01b038316611d6a578060025f828254611d5f919061216d565b90915550611dda9050565b6001600160a01b0383165f9081526020819052604090205481811015611dbc5760405163391434e360e21b81526001600160a01b03851660048201526024810182905260448101839052606401610ca0565b6001600160a01b0384165f9081526020819052604090209082900390555b6001600160a01b038216611df657600280548290039055611e14565b6001600160a01b0382165f9081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611e5991815260200190565b60405180910390a3505050565b5f5b83811015611e80578181015183820152602001611e68565b50505f910152565b602081525f8251806020840152611ea6816040850160208701611e66565b601f01601f19169190910160400192915050565b6001600160a01b0381168114611ece575f80fd5b50565b5f8060408385031215611ee2575f80fd5b8235611eed81611eba565b946020939093013593505050565b5f8060408385031215611f0c575f80fd5b823591506020830135611f1e81611eba565b809150509250929050565b5f60208284031215611f39575f80fd5b813561092181611eba565b5f805f60608486031215611f56575f80fd5b8335611f6181611eba565b92506020840135611f7181611eba565b929592945050506040919091013590565b5f8083601f840112611f92575f80fd5b50813567ffffffffffffffff811115611fa9575f80fd5b602083019150836020828501011115611fc0575f80fd5b9250929050565b5f805f60408486031215611fd9575f80fd5b8335611fe481611eba565b9250602084013567ffffffffffffffff811115611fff575f80fd5b61200b86828701611f82565b9497909650939450505050565b5f805f805f6060868803121561202c575f80fd5b85359450602086013567ffffffffffffffff8082111561204a575f80fd5b61205689838a01611f82565b9096509450604088013591508082111561206e575f80fd5b5061207b88828901611f82565b969995985093965092949392505050565b5f806040838503121561209d575f80fd5b82356120a881611eba565b91506020830135611f1e81611eba565b5f80602083850312156120c9575f80fd5b823567ffffffffffffffff8111156120df575f80fd5b6120eb85828601611f82565b90969095509350505050565b600181811c9082168061210b57607f821691505b60208210810361212957634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b818103818111156108f4576108f461212f565b80820281158282048414176108f4576108f461212f565b808201808211156108f4576108f461212f565b5f60208284031215612190575f80fd5b5051919050565b634e487b7160e01b5f52604160045260245ffd5b5f602082840312156121bb575f80fd5b815167ffffffffffffffff808211156121d2575f80fd5b818401915084601f8301126121e5575f80fd5b8151818111156121f7576121f7612197565b604051601f8201601f19908116603f0116810190838211818310171561221f5761221f612197565b81604052828152876020848701011115612237575f80fd5b612248836020830160208801611e66565b979650505050505050565b5f60208284031215612263575f80fd5b815161092181611eba565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b602081525f6122a960208301848661226e565b949350505050565b60e081525f6122c460e083018a8c61226e565b60208301989098525060408101959095526060850193909352608084019190915260a083015260c09091015292915050565b634e487b7160e01b5f52603260045260245ffdfea2646970667358221220bb1c34b251fff5db210c76fdc7dd482dd9f079288c0437d59df711449eec82ee64736f6c63430008180033","sourceMap":"1459:8839:6:-:0;;;3839:387;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3926:5;3933:7;1962:5:1;:13;3926:5:6;1962::1;:13;:::i;:::-;-1:-1:-1;1985:7:1;:17;1995:7;1985;:17;:::i;:::-;-1:-1:-1;;1713:1:5;1917:7;:21;-1:-1:-1;;;;;;3960:21:6;::::1;3952:56;;;::::0;-1:-1:-1;;;3952:56:6;;4494:2:7;3952:56:6::1;::::0;::::1;4476:21:7::0;4533:2;4513:18;;;4506:30;4572:24;4552:18;;;4545:52;4614:18;;3952:56:6::1;;;;;;;;;-1:-1:-1::0;;;;;4018:16:6;::::1;;::::0;4056:15:::1;4044:27;::::0;;;4091:31:::1;::::0;2289:6:::1;::::0;4091:31:::1;:::i;:::-;4081:41;::::0;4144:31:::1;2235:8;4144:15;:31;:::i;:::-;4132:43;::::0;4185:34:::1;4199:4;1579:18;4185:5;:34::i;:::-;3839:387:::0;;;1459:8839;;7721:208:1;-1:-1:-1;;;;;7791:21:1;;7787:91;;7835:32;;-1:-1:-1;;;7835:32:1;;7864:1;7835:32;;;5016:51:7;4989:18;;7835:32:1;4870:203:7;7787:91:1;7887:35;7903:1;7907:7;7916:5;7887:7;:35::i;:::-;7721:208;;:::o;6271:1107::-;-1:-1:-1;;;;;6360:18:1;;6356:540;;6512:5;6496:12;;:21;;;;;;;:::i;:::-;;;;-1:-1:-1;6356:540:1;;-1:-1:-1;6356:540:1;;-1:-1:-1;;;;;6570:15:1;;6548:19;6570:15;;;;;;;;;;;6603:19;;;6599:115;;;6649:50;;-1:-1:-1;;;6649:50:1;;-1:-1:-1;;;;;5298:32:7;;6649:50:1;;;5280:51:7;5347:18;;;5340:34;;;5390:18;;;5383:34;;;5253:18;;6649:50:1;5078:345:7;6599:115:1;-1:-1:-1;;;;;6834:15:1;;:9;:15;;;;;;;;;;6852:19;;;;6834:37;;6356:540;-1:-1:-1;;;;;6910:16:1;;6906:425;;7073:12;:21;;;;;;;6906:425;;;-1:-1:-1;;;;;7284:13:1;;:9;:13;;;;;;;;;;:22;;;;;;6906:425;7361:2;-1:-1:-1;;;;;7346:25:1;7355:4;-1:-1:-1;;;;;7346:25:1;;7365:5;7346:25;;;;5574::7;;5562:2;5547:18;;5428:177;7346:25:1;;;;;;;;6271:1107;;;:::o;14:127:7:-;75:10;70:3;66:20;63:1;56:31;106:4;103:1;96:15;130:4;127:1;120:15;146:844;200:5;253:3;246:4;238:6;234:17;230:27;220:55;;271:1;268;261:12;220:55;294:13;;-1:-1:-1;;;;;356:10:7;;;353:36;;;369:18;;:::i;:::-;444:2;438:9;412:2;498:13;;-1:-1:-1;;494:22:7;;;518:2;490:31;486:40;474:53;;;542:18;;;562:22;;;539:46;536:72;;;588:18;;:::i;:::-;628:10;624:2;617:22;663:2;655:6;648:18;685:4;675:14;;732:3;725:4;720:2;712:6;708:15;704:26;701:35;698:55;;;749:1;746;739:12;698:55;771:1;762:10;;781:133;795:2;792:1;789:9;781:133;;;883:14;;;879:23;;873:30;852:14;;;848:23;;841:63;806:10;;;;781:133;;;958:1;951:4;946:2;938:6;934:15;930:26;923:37;978:6;969:15;;;;;;146:844;;;;:::o;995:737::-;1111:6;1119;1127;1180:2;1168:9;1159:7;1155:23;1151:32;1148:52;;;1196:1;1193;1186:12;1148:52;1223:16;;-1:-1:-1;;;;;1288:14:7;;;1285:34;;;1315:1;1312;1305:12;1285:34;1338:61;1391:7;1382:6;1371:9;1367:22;1338:61;:::i;:::-;1328:71;;1445:2;1434:9;1430:18;1424:25;1408:41;;1474:2;1464:8;1461:16;1458:36;;;1490:1;1487;1480:12;1458:36;;1513:63;1568:7;1557:8;1546:9;1542:24;1513:63;:::i;:::-;1619:2;1604:18;;1598:25;1503:73;;-1:-1:-1;1598:25:7;-1:-1:-1;;;;;;1652:31:7;;1642:42;;1632:70;;1698:1;1695;1688:12;1632:70;1721:5;1711:15;;;995:737;;;;;:::o;1737:380::-;1816:1;1812:12;;;;1859;;;1880:61;;1934:4;1926:6;1922:17;1912:27;;1880:61;1987:2;1979:6;1976:14;1956:18;1953:38;1950:161;;2033:10;2028:3;2024:20;2021:1;2014:31;2068:4;2065:1;2058:15;2096:4;2093:1;2086:15;1950:161;;1737:380;;;:::o;2248:518::-;2350:2;2345:3;2342:11;2339:421;;;2386:5;2383:1;2376:16;2430:4;2427:1;2417:18;2500:2;2488:10;2484:19;2481:1;2477:27;2471:4;2467:38;2536:4;2524:10;2521:20;2518:47;;;-1:-1:-1;2559:4:7;2518:47;2614:2;2609:3;2605:12;2602:1;2598:20;2592:4;2588:31;2578:41;;2669:81;2687:2;2680:5;2677:13;2669:81;;;2746:1;2732:16;;2713:1;2702:13;2669:81;;;2673:3;;2339:421;2248:518;;;:::o;2942:1345::-;3062:10;;-1:-1:-1;;;;;3084:30:7;;3081:56;;;3117:18;;:::i;:::-;3146:97;3236:6;3196:38;3228:4;3222:11;3196:38;:::i;:::-;3190:4;3146:97;:::i;:::-;3298:4;;3355:2;3344:14;;3372:1;3367:663;;;;4074:1;4091:6;4088:89;;;-1:-1:-1;4143:19:7;;;4137:26;4088:89;-1:-1:-1;;2899:1:7;2895:11;;;2891:24;2887:29;2877:40;2923:1;2919:11;;;2874:57;4190:81;;3337:944;;3367:663;2195:1;2188:14;;;2232:4;2219:18;;-1:-1:-1;;3403:20:7;;;3521:236;3535:7;3532:1;3529:14;3521:236;;;3624:19;;;3618:26;3603:42;;3716:27;;;;3684:1;3672:14;;;;3551:19;;3521:236;;;3525:3;3785:6;3776:7;3773:19;3770:201;;;3846:19;;;3840:26;-1:-1:-1;;3929:1:7;3925:14;;;3941:3;3921:24;3917:37;3913:42;3898:58;3883:74;;3770:201;;;4017:1;4008:6;4005:1;4001:14;3997:22;3991:4;3984:36;3337:944;;;;;2942:1345;;:::o;4643:222::-;4708:9;;;4729:10;;;4726:133;;;4781:10;4776:3;4772:20;4769:1;4762:31;4816:4;4813:1;4806:15;4844:4;4841:1;4834:15;4726:133;4643:222;;;;:::o;5428:177::-;1459:8839:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"608060405260043610610275575f3560e01c80636dbc45821161014a578063a0388ca6116100be578063c5de72dd11610078578063c5de72dd14610762578063c63de8101461077b578063dd62ed3e14610790578063ea2b4ab2146107d4578063ed2b606d14610807578063f5eb42dc14610826575f80fd5b8063a0388ca6146106bb578063a0b93856146106e9578063a9059cbb146106fe578063b4d0df8a1461071d578063b52a585114610731578063c084f54014610745575f80fd5b806385e3f9971161010f57806385e3f997146106255780638854a0ff1461063a578063902d55a5146106615780639106d7ba1461067f57806395d89b41146106935780639b8906ae146106a7575f80fd5b80636dbc45821461056257806370a082311461057f578063735f21be146105b357806378e97925146105de5780638099b00214610611575f80fd5b8063313ce567116101ec5780634db159f5116101a65780634db159f514610495578063510040cb146104aa5780636101b37f146104be57806361c0b6a0146104d357806362bc5f7b1461050157806363bd1d4a14610517575f80fd5b8063313ce567146103dd5780633c78929e146103f85780633ce165031461042b57806340036e4914610440578063485d38341461045f5780634bddda1514610476575f80fd5b806318160ddd1161023d57806318160ddd146103285780631e130f9e1461033c5780632115e5ce1461037057806323b872dd1461038f5780632880ea9e146103ae5780632b5e5809146103c8575f80fd5b806306fdde0314610279578063095ea7b3146102a357806310b985d4146102d257806313b0be33146102f557806315cccf3514610314575b5f80fd5b348015610284575f80fd5b5061028d610851565b60405161029a9190611e88565b60405180910390f35b3480156102ae575f80fd5b506102c26102bd366004611ed1565b6108e1565b604051901515815260200161029a565b3480156102dd575f80fd5b506102e760085481565b60405190815260200161029a565b348015610300575f80fd5b506102e761030f366004611efb565b6108fa565b34801561031f575f80fd5b506102e7610928565b348015610333575f80fd5b506002546102e7565b348015610347575f80fd5b506102e7610356366004611f29565b6001600160a01b03165f908152600f602052604090205490565b34801561037b575f80fd5b506102e761038a366004611f29565b610976565b34801561039a575f80fd5b506102c26103a9366004611f44565b610999565b3480156103b9575f80fd5b506102e766071afd498d000081565b3480156103d3575f80fd5b506102e7600a5481565b3480156103e8575f80fd5b506040516012815260200161029a565b348015610403575f80fd5b506102e77f000000000000000000000000000000000000000000000000000000000000000081565b348015610436575f80fd5b506102e761022b81565b34801561044b575f80fd5b506102c261045a366004611fc7565b6109bc565b34801561046a575f80fd5b506102e76301e1338081565b348015610481575f80fd5b506102e7610490366004611f29565b610bd9565b6104a86104a3366004612018565b610c35565b005b3480156104b5575f80fd5b506104a86114c8565b3480156104c9575f80fd5b506102e760075481565b3480156104de575f80fd5b506102c26104ed366004611f29565b600c6020525f908152604090205460ff1681565b34801561050c575f80fd5b506102e76206978081565b348015610522575f80fd5b5061054a7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161029a565b34801561056d575f80fd5b506102e769012d231c7c593eec000081565b34801561058a575f80fd5b506102e7610599366004611f29565b6001600160a01b03165f9081526020819052604090205490565b3480156105be575f80fd5b506102e76105cd366004611f29565b600d6020525f908152604090205481565b3480156105e9575f80fd5b506102e77f000000000000000000000000000000000000000000000000000000000000000081565b34801561061c575f80fd5b506102e7600a81565b348015610630575f80fd5b506102e76115b381565b348015610645575f80fd5b5061054a7360b9262456de011f7d15a54cdd8c48baaa8b022f81565b34801561066c575f80fd5b506102e76a52b7d2dcc80cd2e400000081565b34801561068a575f80fd5b506102e76116af565b34801561069e575f80fd5b5061028d6116c5565b3480156106b2575f80fd5b506102c26116d4565b3480156106c6575f80fd5b506102c26106d5366004611f29565b600e6020525f908152604090205460ff1681565b3480156106f4575f80fd5b506102e760095481565b348015610709575f80fd5b506102c2610718366004611ed1565b611711565b348015610728575f80fd5b506102e761171e565b34801561073c575f80fd5b506104a8611754565b348015610750575f80fd5b506102e769034b3cfd4613f12c000081565b34801561076d575f80fd5b506006546102c29060ff1681565b348015610786575f80fd5b506102e761138881565b34801561079b575f80fd5b506102e76107aa36600461208c565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b3480156107df575f80fd5b506102e77f000000000000000000000000000000000000000000000000000000000000000081565b348015610812575f80fd5b5061054a6108213660046120b8565b6118e9565b348015610831575f80fd5b506102e7610840366004611f29565b600b6020525f908152604090205481565b606060038054610860906120f7565b80601f016020809104026020016040519081016040528092919081815260200182805461088c906120f7565b80156108d75780601f106108ae576101008083540402835291602001916108d7565b820191905f5260205f20905b8154815290600101906020018083116108ba57829003601f168201915b5050505050905090565b5f336108ee818585611951565b60019150505b92915050565b5f66071afd498d000061090d8385611963565b6109179085612143565b6109219190612156565b9392505050565b61093e69034b3cfd4613f12c0000611388612156565b61095469012d231c7c593eec000061022b612156565b61095e919061216d565b610973906a52b7d2dcc80cd2e4000000612143565b81565b6001600160a01b0381165f908152600d60205260408120546108f490600a61216d565b5f336109a68582856119b1565b6109b1858585611a2c565b506001949350505050565b5f806109fc84848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250611a8992505050565b905080515f03610a0f575f915050610921565b6040516370a0823160e01b81526001600160a01b03861660048201527360b9262456de011f7d15a54cdd8c48baaa8b022f906370a0823190602401602060405180830381865afa158015610a65573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a899190612180565b5f03610a98575f915050610921565b604051633142854560e21b81526001600160a01b03861660048201525f90610b1f907360b9262456de011f7d15a54cdd8c48baaa8b022f9063c50a1514906024015f60405180830381865afa158015610af3573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610b1a91908101906121ab565b611a89565b90508180519060200120818051906020012014610b40575f92505050610921565b815160208301206040516331a9108f60e11b8152600481018290526001600160a01b038816907360b9262456de011f7d15a54cdd8c48baaa8b022f90636352211e90602401602060405180830381865afa158015610ba0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bc49190612253565b6001600160a01b031614979650505050505050565b5f80610be483610976565b6001600160a01b0384165f908152600b6020526040902054909150811115610c2d576001600160a01b0383165f908152600b6020526040902054610c289082612143565b610921565b5f9392505050565b610c3d611c0c565b7f00000000000000000000000000000000000000000000000000000000000000004210610ca95760405162461bcd60e51b8152602060048201526015602482015274135a5b9d081dda5b991bddc81a185cc8195b991959605a1b60448201526064015b60405180910390fd5b6115b3610cb46116af565b10610cf95760405162461bcd60e51b815260206004820152601560248201527411d95b995cda5cc81cd85b19481cdbdb19081bdd5d605a1b6044820152606401610ca0565b6001851015610d3c5760405162461bcd60e51b815260206004820152600f60248201526e4d696e696d756d203120736861726560881b6044820152606401610ca0565b82610d805760405162461bcd60e51b81526020600482015260146024820152731059d95b9d081251081a5cc81c995c5d5a5c995960621b6044820152606401610ca0565b610d8933610976565b335f908152600b6020526040902054610da390879061216d565b1115610df15760405162461bcd60e51b815260206004820152601c60248201527f4578636565647320746865207065722d77616c6c6574206c696d6974000000006044820152606401610ca0565b6115b385610dfd6116af565b610e07919061216d565b1115610e4c5760405162461bcd60e51b81526020600482015260146024820152734578636565647320746f74616c2073686172657360601b6044820152606401610ca0565b610e573385856109bc565b610eb15760405162461bcd60e51b815260206004820152602560248201527f4167656e74204944206e6f7420766572696669656420666f7220746869732077604482015264185b1b195d60da1b6064820152608401610ca0565b5f610ef085858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250611a8992505050565b8051602091820120335f908152600f909252604090912054909150610fb8575f818152601060205260409020546001600160a01b031615610f845760405162461bcd60e51b815260206004820152602860248201527f4167656e7420494420616c726561647920626f756e6420746f20616e6f7468656044820152671c881dd85b1b195d60c21b6064820152608401610ca0565b335f818152600f602090815260408083208590558483526010909152902080546001600160a01b0319169091179055611021565b335f908152600f602052604090205481146110215760405162461bcd60e51b815260206004820152602360248201527f4167656e7420494420646f6573206e6f74206d6174636820746869732077616c6044820152621b195d60ea1b6064820152608401610ca0565b5f61102c3388611963565b90505f6110398289612143565b90506113888160085461104c919061216d565b111561109a5760405162461bcd60e51b815260206004820152601a60248201527f506169642073686172652071756f7461206578686175737465640000000000006044820152606401610ca0565b5f6110ac66071afd498d000083612156565b90508034146110f45760405162461bcd60e51b8152602060048201526014602482015273125b98dbdc9c9958dd0810939088185b5bdd5b9d60621b6044820152606401610ca0565b5f61110969034b3cfd4613f12c000084612156565b61111d69012d231c7c593eec000086612156565b611127919061216d565b90508360010361116257600160075f828254611143919061216d565b9091555050335f908152600c60205260409020805460ff191660011790555b8260085f828254611173919061216d565b9091555050335f908152600b6020526040812080548c929061119690849061216d565b925050819055503460095f8282546111ae919061216d565b909155505085156112e6575f60105f6111fb8a8a8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250611a8992505050565b805160209182012082528101919091526040015f20546001600160a01b03169050801580159061123457506001600160a01b0381163314155b801561124f5750335f908152600e602052604090205460ff16155b156112e457335f908152600e60209081526040808320805460ff191660019081179091556001600160a01b0385168452600d909252822080549192909161129790849061216d565b909155505060405133906001600160a01b038316907f99b028dd597faf0b2ad0e538fc15267c0b023e6e7b4fbae549419dc63ec795d1906112db908c908c90612296565b60405180910390a35b505b6112fc69034b3cfd4613f12c0000611388612156565b61131269012d231c7c593eec000061022b612156565b61131c919061216d565b611331906a52b7d2dcc80cd2e4000000612143565b305f9081526020819052604090205461134b908390612143565b10156113995760405162461bcd60e51b815260206004820152601c60248201527f496e73756666696369656e742067656e657369732072657365727665000000006044820152606401610ca0565b6113a4303383611a2c565b3415611463575f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316346040515f6040518083038185875af1925050503d805f8114611413576040519150601f19603f3d011682016040523d82523d5f602084013e611418565b606091505b50509050806114615760405162461bcd60e51b815260206004820152601560248201527410939088199bdc9dd85c991a5b99c819985a5b1959605a1b6044820152606401610ca0565b505b336001600160a01b03167f66b57df7aba118d24ed7972643e779f593eb515f67a6faa387db1e5975aab0758a8a8d88888734426040516114aa9897969594939291906122b1565b60405180910390a250505050506114c16001600555565b5050505050565b6114d0611c0c565b7f000000000000000000000000000000000000000000000000000000000000000042101561152f5760405162461bcd60e51b815260206004820152600c60248201526b14dd1a5b1b081b1bd8dad95960a21b6044820152606401610ca0565b60065460ff16156115755760405162461bcd60e51b815260206004820152601060248201526f105b1c9958591e481c995b19585cd95960821b6044820152606401610ca0565b6006805460ff191660011790556115f7307f00000000000000000000000000000000000000000000000000000000000000006115bd69034b3cfd4613f12c0000611388612156565b6115d369012d231c7c593eec000061022b612156565b6115dd919061216d565b6115f2906a52b7d2dcc80cd2e4000000612143565b611a2c565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000167f7bbe9c0ab7edf3877274e19436d2e10ecb76324ae6afd629d2f928f1aff8165161165869034b3cfd4613f12c0000611388612156565b61166e69012d231c7c593eec000061022b612156565b611678919061216d565b61168d906a52b7d2dcc80cd2e4000000612143565b604080519182524260208301520160405180910390a26116ad6001600555565b565b5f6008546007546116c0919061216d565b905090565b606060048054610860906120f7565b5f7f0000000000000000000000000000000000000000000000000000000000000000421015806116c057506115b361170a6116af565b1015905090565b5f336108ee818585611a2c565b61173469034b3cfd4613f12c0000611388612156565b61174a69012d231c7c593eec000061022b612156565b610973919061216d565b61175c611c0c565b7f00000000000000000000000000000000000000000000000000000000000000004210156117c55760405162461bcd60e51b815260206004820152601660248201527526b4b73a103bb4b73237bb9039ba34b6361037b832b760511b6044820152606401610ca0565b6006545f9060ff16611821576117e769034b3cfd4613f12c0000611388612156565b6117fd69012d231c7c593eec000061022b612156565b611807919061216d565b61181c906a52b7d2dcc80cd2e4000000612143565b611823565b5f5b305f9081526020819052604081205491925090611841908390612143565b90505f81116118845760405162461bcd60e51b815260206004820152600f60248201526e2737ba3434b733903a3790313ab93760891b6044820152606401610ca0565b80600a5f828254611895919061216d565b909155506118a590503082611c36565b604080518281524260208201527fd23443dd319810153e81eb4de570440dbff0f207c19b68eabf15b159644505c9910160405180910390a150506116ad6001600555565b5f60105f61192b85858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250611a8992505050565b805160209182012082528101919091526040015f20546001600160a01b03169392505050565b61195e8383836001611c6e565b505050565b5f808211801561198b57506001600160a01b0383165f908152600c602052604090205460ff16155b801561199a575061022b600754105b6119a4575f6119a7565b60015b60ff169392505050565b6001600160a01b038381165f908152600160209081526040808320938616835292905220545f198114611a265781811015611a1857604051637dc7a0d960e11b81526001600160a01b03841660048201526024810182905260448101839052606401610ca0565b611a2684848484035f611c6e565b50505050565b6001600160a01b038316611a5557604051634b637e8f60e11b81525f6004820152602401610ca0565b6001600160a01b038216611a7e5760405163ec442f0560e01b81525f6004820152602401610ca0565b61195e838383611d40565b60605f8290506003815110158015611ad257508060038251611aab9190612143565b81518110611abb57611abb6122f6565b6020910101516001600160f81b031916601760f91b145b8015611b0f57508060028251611ae89190612143565b81518110611af857611af86122f6565b6020910101516001600160f81b031916606160f81b145b8015611b4c57508060018251611b259190612143565b81518110611b3557611b356122f6565b6020910101516001600160f81b031916606960f81b145b15611c05575f60038251611b609190612143565b67ffffffffffffffff811115611b7857611b78612197565b6040519080825280601f01601f191660200182016040528015611ba2576020820181803683370190505b5090505f5b8151811015611bfd57828181518110611bc257611bc26122f6565b602001015160f81c60f81b828281518110611bdf57611bdf6122f6565b60200101906001600160f81b03191690815f1a905350600101611ba7565b509392505050565b5090919050565b600260055403611c2f57604051633ee5aeb560e01b815260040160405180910390fd5b6002600555565b6001600160a01b038216611c5f57604051634b637e8f60e11b81525f6004820152602401610ca0565b611c6a825f83611d40565b5050565b6001600160a01b038416611c975760405163e602df0560e01b81525f6004820152602401610ca0565b6001600160a01b038316611cc057604051634a1406b160e11b81525f6004820152602401610ca0565b6001600160a01b038085165f9081526001602090815260408083209387168352929052208290558015611a2657826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051611d3291815260200190565b60405180910390a350505050565b6001600160a01b038316611d6a578060025f828254611d5f919061216d565b90915550611dda9050565b6001600160a01b0383165f9081526020819052604090205481811015611dbc5760405163391434e360e21b81526001600160a01b03851660048201526024810182905260448101839052606401610ca0565b6001600160a01b0384165f9081526020819052604090209082900390555b6001600160a01b038216611df657600280548290039055611e14565b6001600160a01b0382165f9081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611e5991815260200190565b60405180910390a3505050565b5f5b83811015611e80578181015183820152602001611e68565b50505f910152565b602081525f8251806020840152611ea6816040850160208701611e66565b601f01601f19169190910160400192915050565b6001600160a01b0381168114611ece575f80fd5b50565b5f8060408385031215611ee2575f80fd5b8235611eed81611eba565b946020939093013593505050565b5f8060408385031215611f0c575f80fd5b823591506020830135611f1e81611eba565b809150509250929050565b5f60208284031215611f39575f80fd5b813561092181611eba565b5f805f60608486031215611f56575f80fd5b8335611f6181611eba565b92506020840135611f7181611eba565b929592945050506040919091013590565b5f8083601f840112611f92575f80fd5b50813567ffffffffffffffff811115611fa9575f80fd5b602083019150836020828501011115611fc0575f80fd5b9250929050565b5f805f60408486031215611fd9575f80fd5b8335611fe481611eba565b9250602084013567ffffffffffffffff811115611fff575f80fd5b61200b86828701611f82565b9497909650939450505050565b5f805f805f6060868803121561202c575f80fd5b85359450602086013567ffffffffffffffff8082111561204a575f80fd5b61205689838a01611f82565b9096509450604088013591508082111561206e575f80fd5b5061207b88828901611f82565b969995985093965092949392505050565b5f806040838503121561209d575f80fd5b82356120a881611eba565b91506020830135611f1e81611eba565b5f80602083850312156120c9575f80fd5b823567ffffffffffffffff8111156120df575f80fd5b6120eb85828601611f82565b90969095509350505050565b600181811c9082168061210b57607f821691505b60208210810361212957634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b818103818111156108f4576108f461212f565b80820281158282048414176108f4576108f461212f565b808201808211156108f4576108f461212f565b5f60208284031215612190575f80fd5b5051919050565b634e487b7160e01b5f52604160045260245ffd5b5f602082840312156121bb575f80fd5b815167ffffffffffffffff808211156121d2575f80fd5b818401915084601f8301126121e5575f80fd5b8151818111156121f7576121f7612197565b604051601f8201601f19908116603f0116810190838211818310171561221f5761221f612197565b81604052828152876020848701011115612237575f80fd5b612248836020830160208801611e66565b979650505050505050565b5f60208284031215612263575f80fd5b815161092181611eba565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b602081525f6122a960208301848661226e565b949350505050565b60e081525f6122c460e083018a8c61226e565b60208301989098525060408101959095526060850193909352608084019190915260a083015260c09091015292915050565b634e487b7160e01b5f52603260045260245ffdfea2646970667358221220bb1c34b251fff5db210c76fdc7dd482dd9f079288c0437d59df711449eec82ee64736f6c63430008180033","sourceMap":"1459:8839:6:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2074:89:1;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4293:186;;;;;;;;;;-1:-1:-1;4293:186:1;;;;;:::i;:::-;;:::i;:::-;;;1291:14:7;;1284:22;1266:41;;1254:2;1239:18;4293:186:1;1126:187:7;2790:23:6;;;;;;;;;;;;;;;;;;;1464:25:7;;;1452:2;1437:18;2790:23:6;1318:177:7;5478:165:6;;;;;;;;;;-1:-1:-1;5478:165:6;;;;;:::i;:::-;;:::i;2105:70::-;;;;;;;;;;;;;:::i;3144:97:1:-;;;;;;;;;;-1:-1:-1;3222:12:1;;3144:97;;4830:117:6;;;;;;;;;;-1:-1:-1;4830:117:6;;;;;:::i;:::-;-1:-1:-1;;;;;4918:22:6;4892:7;4918:22;;;:14;:22;;;;;;;4830:117;4490:140;;;;;;;;;;-1:-1:-1;4490:140:6;;;;;:::i;:::-;;:::i;5039:244:1:-;;;;;;;;;;-1:-1:-1;5039:244:1;;;;;:::i;:::-;;:::i;1716:58:6:-;;;;;;;;;;;;1763:11;1716:58;;2855:27;;;;;;;;;;;;;;;;3002:82:1;;;;;;;;;;-1:-1:-1;3002:82:1;;3075:2;2857:36:7;;2845:2;2830:18;3002:82:1;2715:184:7;2665:34:6;;;;;;;;;;;;;;;1787:40;;;;;;;;;;;;1824:3;1787:40;;6138:562;;;;;;;;;;-1:-1:-1;6138:562:6;;;;;:::i;:::-;;:::i;2195:48::-;;;;;;;;;;;;2235:8;2195:48;;4636:188;;;;;;;;;;-1:-1:-1;4636:188:6;;;;;:::i;:::-;;:::i;6736:2664::-;;;;;;:::i;:::-;;:::i;:::-;;9486:322;;;;;;;;;;;;;:::i;2761:23::-;;;;;;;;;;;;;;;;2938:43;;;;;;;;;;-1:-1:-1;2938:43:6;;;;;:::i;:::-;;;;;;;;;;;;;;;;2249:46;;;;;;;;;;;;2289:6;2249:46;;2542:39;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4782:32:7;;;4764:51;;4752:2;4737:18;2542:39:6;4602:219:7;1603:50:6;;;;;;;;;;;;1641:12;1603:50;;3299:116:1;;;;;;;;;;-1:-1:-1;3299:116:1;;;;;:::i;:::-;-1:-1:-1;;;;;3390:18:1;3364:7;3390:18;;;;;;;;;;;;3299:116;2987:54:6;;;;;;;;;;-1:-1:-1;2987:54:6;;;;;:::i;:::-;;;;;;;;;;;;;;2587:34;;;;;;;;;;;;;;;1931:48;;;;;;;;;;;;1977:2;1931:48;;1881:44;;;;;;;;;;;;1920:5;1881:44;;2385:111;;;;;;;;;;;;2453:42;2385:111;;1540:57;;;;;;;;;;;;1579:18;1540:57;;4255:94;;;;;;;;;;;;;:::i;2276:93:1:-;;;;;;;;;;;;;:::i;4355:129:6:-;;;;;;;;;;;;;:::i;3047:40::-;;;;;;;;;;-1:-1:-1;3047:40:6;;;;;:::i;:::-;;;;;;;;;;;;;;;;2819:30;;;;;;;;;;;;;;;;3610:178:1;;;;;;;;;;-1:-1:-1;3610:178:1;;;;;:::i;:::-;;:::i;1985:100:6:-;;;;;;;;;;;;;:::i;9884:412::-;;;;;;;;;;;;;:::i;1659:51::-;;;;;;;;;;;;1697:13;1659:51;;2729:26;;;;;;;;;;-1:-1:-1;2729:26:6;;;;;;;;1833:42;;;;;;;;;;;;1870:5;1833:42;;3846:140:1;;;;;;;;;;-1:-1:-1;3846:140:1;;;;;:::i;:::-;-1:-1:-1;;;;;3952:18:1;;;3926:7;3952:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;3846:140;2627:32:6;;;;;;;;;;;;;;;4953:165;;;;;;;;;;-1:-1:-1;4953:165:6;;;;;:::i;:::-;;:::i;2889:43::-;;;;;;;;;;-1:-1:-1;2889:43:6;;;;;:::i;:::-;;;;;;;;;;;;;;2074:89:1;2119:13;2151:5;2144:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2074:89;:::o;4293:186::-;4366:4;735:10:4;4420:31:1;735:10:4;4436:7:1;4445:5;4420:8;:31::i;:::-;4468:4;4461:11;;;4293:186;;;;;:::o;5478:165:6:-;5548:7;1763:11;5584:28;5597:6;5605;5584:12;:28::i;:::-;5575:37;;:6;:37;:::i;:::-;5574:62;;;;:::i;:::-;5567:69;5478:165;-1:-1:-1;;;5478:165:6:o;2105:70::-;2060:24;1697:13;1870:5;2060:24;:::i;:::-;2031;1641:12;1824:3;2031:24;:::i;:::-;2030:55;;;;:::i;:::-;2142:33;;1579:18;2142:33;:::i;:::-;2105:70;:::o;4490:140::-;-1:-1:-1;;;;;4596:27:6;;4548:7;4596:27;;;:19;:27;;;;;;4574:49;;1977:2;4574:49;:::i;5039:244:1:-;5126:4;735:10:4;5182:37:1;5198:4;735:10:4;5213:5:1;5182:15;:37::i;:::-;5229:26;5239:4;5245:2;5249:5;5229:9;:26::i;:::-;-1:-1:-1;5272:4:1;;5039:244;-1:-1:-1;;;;5039:244:1:o;6138:562:6:-;6223:4;6239:20;6262:23;6277:7;;6262:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6262:14:6;;-1:-1:-1;;;6262:23:6:i;:::-;6239:46;;6305:6;6299:20;6323:1;6299:25;6295:43;;6333:5;6326:12;;;;;6295:43;6352:33;;-1:-1:-1;;;6352:33:6;;-1:-1:-1;;;;;4782:32:7;;6352:33:6;;;4764:51:7;2453:42:6;;6352:25;;4737:18:7;;6352:33:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6389:1;6352:38;6348:56;;6399:5;6392:12;;;;;6348:56;6456:32;;-1:-1:-1;;;6456:32:6;;-1:-1:-1;;;;;4782:32:7;;6456::6;;;4764:51:7;6414:24:6;;6441:48;;2453:42;;6456:24;;4737:18:7;;6456:32:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;6456:32:6;;;;;;;;;;;;:::i;:::-;6441:14;:48::i;:::-;6414:75;;6551:6;6535:24;;;;;;6519:10;6503:28;;;;;;:56;6499:74;;6568:5;6561:12;;;;;;6499:74;6609:24;;;;;;6651:32;;-1:-1:-1;;;6651:32:6;;;;;1464:25:7;;;-1:-1:-1;;;;;6651:42:6;;;2453;;6651:23;;1437:18:7;;6651:32:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;6651:42:6;;;6138:562;-1:-1:-1;;;;;;;6138:562:6:o;4636:188::-;4702:7;4721:9;4733:19;4745:6;4733:11;:19::i;:::-;-1:-1:-1;;;;;4769:16:6;;;;;;:8;:16;;;;;;4721:31;;-1:-1:-1;4769:21:6;-1:-1:-1;4769:21:6;:48;;-1:-1:-1;;;;;4801:16:6;;;;;;:8;:16;;;;;;4797:20;;:1;:20;:::i;:::-;4769:48;;;4793:1;4762:55;4636:188;-1:-1:-1;;;4636:188:6:o;6736:2664::-;2356:21:5;:19;:21::i;:::-;6925:7:6::1;6907:15;:25;6899:59;;;::::0;-1:-1:-1;;;6899:59:6;;8709:2:7;6899:59:6::1;::::0;::::1;8691:21:7::0;8748:2;8728:18;;;8721:30;-1:-1:-1;;;8767:18:7;;;8760:51;8828:18;;6899:59:6::1;;;;;;;;;1920:5;6976:11;:9;:11::i;:::-;:26;6968:60;;;::::0;-1:-1:-1;;;6968:60:6;;9059:2:7;6968:60:6::1;::::0;::::1;9041:21:7::0;9098:2;9078:18;;;9071:30;-1:-1:-1;;;9117:18:7;;;9110:51;9178:18;;6968:60:6::1;8857:345:7::0;6968:60:6::1;7056:1;7046:6;:11;;7038:39;;;::::0;-1:-1:-1;;;7038:39:6;;9409:2:7;7038:39:6::1;::::0;::::1;9391:21:7::0;9448:2;9428:18;;;9421:30;-1:-1:-1;;;9467:18:7;;;9460:45;9522:18;;7038:39:6::1;9207:339:7::0;7038:39:6::1;7095:25:::0;7087:58:::1;;;::::0;-1:-1:-1;;;7087:58:6;;9753:2:7;7087:58:6::1;::::0;::::1;9735:21:7::0;9792:2;9772:18;;;9765:30;-1:-1:-1;;;9811:18:7;;;9804:50;9871:18;;7087:58:6::1;9551:344:7::0;7087:58:6::1;7196:23;7208:10;7196:11;:23::i;:::-;7172:10;7163:20;::::0;;;:8:::1;:20;::::0;;;;;:29:::1;::::0;7186:6;;7163:29:::1;:::i;:::-;:56;;7155:97;;;::::0;-1:-1:-1;;;7155:97:6;;10102:2:7;7155:97:6::1;::::0;::::1;10084:21:7::0;10141:2;10121:18;;;10114:30;10180;10160:18;;;10153:58;10228:18;;7155:97:6::1;9900:352:7::0;7155:97:6::1;1920:5;7284:6;7270:11;:9;:11::i;:::-;:20;;;;:::i;:::-;:36;;7262:69;;;::::0;-1:-1:-1;;;7262:69:6;;10459:2:7;7262:69:6::1;::::0;::::1;10441:21:7::0;10498:2;10478:18;;;10471:30;-1:-1:-1;;;10517:18:7;;;10510:50;10577:18;;7262:69:6::1;10257:344:7::0;7262:69:6::1;7349:34;7363:10;7375:7;;7349:13;:34::i;:::-;7341:84;;;::::0;-1:-1:-1;;;7341:84:6;;10808:2:7;7341:84:6::1;::::0;::::1;10790:21:7::0;10847:2;10827:18;;;10820:30;10886:34;10866:18;;;10859:62;-1:-1:-1;;;10937:18:7;;;10930:35;10982:19;;7341:84:6::1;10606:401:7::0;7341:84:6::1;7436:14;7469:23;7484:7;;7469:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;7469:14:6::1;::::0;-1:-1:-1;;;7469:23:6:i:1;:::-;7453:41:::0;;::::1;::::0;;::::1;::::0;7523:10:::1;7546:1;7508:26:::0;;;:14:::1;:26:::0;;;;;;;;7453:41;;-1:-1:-1;7504:377:6::1;;7608:1;7572:24:::0;;;:16:::1;:24;::::0;;;;;-1:-1:-1;;;;;7572:24:6::1;:38:::0;7564:91:::1;;;::::0;-1:-1:-1;;;7564:91:6;;11214:2:7;7564:91:6::1;::::0;::::1;11196:21:7::0;11253:2;11233:18;;;11226:30;11292:34;11272:18;;;11265:62;-1:-1:-1;;;11343:18:7;;;11336:38;11391:19;;7564:91:6::1;11012:404:7::0;7564:91:6::1;7684:10;7669:26;::::0;;;:14:::1;:26;::::0;;;;;;;:35;;;7718:24;;;:16:::1;:24:::0;;;;;:37;;-1:-1:-1;;;;;;7718:37:6::1;::::0;;::::1;::::0;;7504:377:::1;;;7809:10;7794:26;::::0;;;:14:::1;:26;::::0;;;;;:36;::::1;7786:84;;;::::0;-1:-1:-1;;;7786:84:6;;11623:2:7;7786:84:6::1;::::0;::::1;11605:21:7::0;11662:2;11642:18;;;11635:30;11701:34;11681:18;;;11674:62;-1:-1:-1;;;11752:18:7;;;11745:33;11795:19;;7786:84:6::1;11421:399:7::0;7786:84:6::1;7891:19;7913:32;7926:10;7938:6;7913:12;:32::i;:::-;7891:54:::0;-1:-1:-1;7955:19:6::1;7977:20;7891:54:::0;7977:6;:20:::1;:::i;:::-;7955:42;;1870:5;8026:11;8015:8;;:22;;;;:::i;:::-;:36;;8007:75;;;::::0;-1:-1:-1;;;8007:75:6;;12027:2:7;8007:75:6::1;::::0;::::1;12009:21:7::0;12066:2;12046:18;;;12039:30;12105:28;12085:18;;;12078:56;12151:18;;8007:75:6::1;11825:350:7::0;8007:75:6::1;8092:12;8107:34;1763:11;8107::::0;:34:::1;:::i;:::-;8092:49;;8172:4;8159:9;:17;8151:50;;;::::0;-1:-1:-1;;;8151:50:6;;12382:2:7;8151:50:6::1;::::0;::::1;12364:21:7::0;12421:2;12401:18;;;12394:30;-1:-1:-1;;;12440:18:7;;;12433:50;12500:18;;8151:50:6::1;12180:344:7::0;8151:50:6::1;8212:17;8263:25;1697:13;8263:11:::0;:25:::1;:::i;:::-;8233;1641:12;8233:11:::0;:25:::1;:::i;:::-;8232:57;;;;:::i;:::-;8212:77;;8304:11;8319:1;8304:16:::0;8300:104:::1;;8348:1;8336:8;;:13;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;8375:10:6::1;8363:23;::::0;;;:11:::1;:23;::::0;;;;:30;;-1:-1:-1;;8363:30:6::1;8389:4;8363:30;::::0;;8300:104:::1;8425:11;8413:8;;:23;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;8455:10:6::1;8446:20;::::0;;;:8:::1;:20;::::0;;;;:30;;8470:6;;8446:20;:30:::1;::::0;8470:6;;8446:30:::1;:::i;:::-;;;;;;;;8505:9;8486:15;;:28;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;8529:33:6;;8525:437:::1;;8578:17;8598:16;:67;8631:31;8646:15;;8631:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;8631:14:6::1;::::0;-1:-1:-1;;;8631:31:6:i:1;:::-;8615:49:::0;;::::1;::::0;;::::1;::::0;8598:67;;;::::1;::::0;;;;;;-1:-1:-1;8598:67:6;;-1:-1:-1;;;;;8598:67:6::1;::::0;-1:-1:-1;8683:23:6;;;::::1;::::0;:50:::1;;-1:-1:-1::0;;;;;;8710:23:6;::::1;8723:10;8710:23;;8683:50;:75;;;;-1:-1:-1::0;8747:10:6::1;8738:20;::::0;;;:8:::1;:20;::::0;;;;;::::1;;8737:21;8683:75;8679:273;;;8787:10;8778:20;::::0;;;:8:::1;:20;::::0;;;;;;;:27;;-1:-1:-1;;8778:27:6::1;8801:4;8778:27:::0;;::::1;::::0;;;-1:-1:-1;;;;;8823:30:6;::::1;::::0;;:19:::1;:30:::0;;;;;:35;;8801:4;;8823:30;;:35:::1;::::0;8801:4;;8823:35:::1;:::i;:::-;::::0;;;-1:-1:-1;;8881:56:6::1;::::0;8926:10:::1;::::0;-1:-1:-1;;;;;8881:56:6;::::1;::::0;::::1;::::0;::::1;::::0;8909:15;;;;8881:56:::1;:::i;:::-;;;;;;;;8679:273;8564:398;8525:437;2060:24;1697:13;1870:5;2060:24;:::i;:::-;2031;1641:12;1824:3;2031:24;:::i;:::-;2030:55;;;;:::i;:::-;2142:33;::::0;1579:18:::1;2142:33;:::i;:::-;8998:4;3364:7:1::0;3390:18;;;;;;;;;;;8980:36:6::1;::::0;9007:9;;8980:36:::1;:::i;:::-;:50;;8972:91;;;::::0;-1:-1:-1;;;8972:91:6;;13255:2:7;8972:91:6::1;::::0;::::1;13237:21:7::0;13294:2;13274:18;;;13267:30;13333;13313:18;;;13306:58;13381:18;;8972:91:6::1;13053:352:7::0;8972:91:6::1;9073:47;9091:4;9098:10;9110:9;9073;:47::i;:::-;9135:9;:13:::0;9131:141:::1;;9165:7;9178:6;-1:-1:-1::0;;;;;9178:11:6::1;9197:9;9178:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9164:47;;;9233:2;9225:36;;;::::0;-1:-1:-1;;;9225:36:6;;13822:2:7;9225:36:6::1;::::0;::::1;13804:21:7::0;13861:2;13841:18;;;13834:30;-1:-1:-1;;;13880:18:7;;;13873:51;13941:18;;9225:36:6::1;13620:345:7::0;9225:36:6::1;9150:122;9131:141;9300:10;-1:-1:-1::0;;;;;9287:106:6::1;;9312:7;;9321:6;9329:11;9342;9355:9;9366;9377:15;9287:106;;;;;;;;;;;;;:::i;:::-;;;;;;;;6889:2511;;;;;2398:20:5::0;1713:1;2924:7;:21;2744:208;2398:20;6736:2664:6;;;;;:::o;9486:322::-;2356:21:5;:19;:21::i;:::-;9570:9:6::1;9551:15;:28;;9543:53;;;::::0;-1:-1:-1;;;9543:53:6;;14855:2:7;9543:53:6::1;::::0;::::1;14837:21:7::0;14894:2;14874:18;;;14867:30;-1:-1:-1;;;14913:18:7;;;14906:42;14965:18;;9543:53:6::1;14653:336:7::0;9543:53:6::1;9615:14;::::0;::::1;;9614:15;9606:44;;;::::0;-1:-1:-1;;;9606:44:6;;15196:2:7;9606:44:6::1;::::0;::::1;15178:21:7::0;15235:2;15215:18;;;15208:30;-1:-1:-1;;;15254:18:7;;;15247:46;15310:18;;9606:44:6::1;14994:340:7::0;9606:44:6::1;9660:14;:21:::0;;-1:-1:-1;;9660:21:6::1;9677:4;9660:21;::::0;;9691:44:::1;9709:4;9716:6;2060:24;1697:13;1870:5;2060:24;:::i;:::-;2031;1641:12;1824:3;2031:24;:::i;:::-;2030:55;;;;:::i;:::-;2142:33;::::0;1579:18:::1;2142:33;:::i;:::-;9691:9;:44::i;:::-;-1:-1:-1::0;;;;;9765:6:6::1;9750:51;;2060:24;1697:13;1870:5;2060:24;:::i;:::-;2031;1641:12;1824:3;2031:24;:::i;:::-;2030:55;;;;:::i;:::-;2142:33;::::0;1579:18:::1;2142:33;:::i;:::-;9750:51;::::0;;15513:25:7;;;9785:15:6::1;15569:2:7::0;15554:18;;15547:34;15486:18;9750:51:6::1;;;;;;;2398:20:5::0;1713:1;2924:7;:21;2744:208;2398:20;9486:322:6:o;4255:94::-;4297:7;4334:8;;4323;;:19;;;;:::i;:::-;4316:26;;4255:94;:::o;2276:93:1:-;2323:13;2355:7;2348:14;;;;;:::i;4355:129:6:-;4397:4;4439:7;4420:15;:26;;:57;;;;1920:5;4450:11;:9;:11::i;:::-;:27;;4413:64;;4355:129;:::o;3610:178:1:-;3679:4;735:10:4;3733:27:1;735:10:4;3750:2:1;3754:5;3733:9;:27::i;1985:100:6:-;2060:24;1697:13;1870:5;2060:24;:::i;:::-;2031;1641:12;1824:3;2031:24;:::i;:::-;2030:55;;;;:::i;9884:412::-;2356:21:5;:19;:21::i;:::-;9965:7:6::1;9946:15;:26;;9938:61;;;::::0;-1:-1:-1;;;9938:61:6;;15794:2:7;9938:61:6::1;::::0;::::1;15776:21:7::0;15833:2;15813:18;;;15806:30;-1:-1:-1;;;15852:18:7;;;15845:52;15914:18;;9938:61:6::1;15592:346:7::0;9938:61:6::1;10027:14;::::0;10009:15:::1;::::0;10027:14:::1;;:31;;2060:24;1697:13;1870:5;2060:24;:::i;:::-;2031;1641:12;1824:3;2031:24;:::i;:::-;2030:55;;;;:::i;:::-;2142:33;::::0;1579:18:::1;2142:33;:::i;:::-;10027:31;;;10044:1;10027:31;10103:4;10068:14;3390:18:1::0;;;;;;;;;;;10009:49:6;;-1:-1:-1;10068:14:6;10085:34:::1;::::0;10009:49;;10085:34:::1;:::i;:::-;10068:51;;10146:1;10137:6;:10;10129:38;;;::::0;-1:-1:-1;;;10129:38:6;;16145:2:7;10129:38:6::1;::::0;::::1;16127:21:7::0;16184:2;16164:18;;;16157:30;-1:-1:-1;;;16203:18:7;;;16196:45;16258:18;;10129:38:6::1;15943:339:7::0;10129:38:6::1;10193:6;10177:12;;:22;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;10209:28:6::1;::::0;-1:-1:-1;10223:4:6::1;10230:6:::0;10209:5:::1;:28::i;:::-;10252:37;::::0;;15513:25:7;;;10273:15:6::1;15569:2:7::0;15554:18;;15547:34;10252:37:6::1;::::0;15486:18:7;10252:37:6::1;;;;;;;9928:368;;2398:20:5::0;1713:1;2924:7;:21;2744:208;4953:165:6;5026:7;5052:16;:59;5085:23;5100:7;;5085:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5085:14:6;;-1:-1:-1;;;5085:23:6:i;:::-;5069:41;;;;;;;5052:59;;;;;;;;;;-1:-1:-1;5052:59:6;;-1:-1:-1;;;;;5052:59:6;;4953:165;-1:-1:-1;;;4953:165:6:o;8989:128:1:-;9073:37;9082:5;9089:7;9098:5;9105:4;9073:8;:37::i;:::-;8989:128;;;:::o;5208:179:6:-;5285:7;5321:1;5312:6;:10;:34;;;;-1:-1:-1;;;;;;5327:19:6;;;;;;:11;:19;;;;;;;;5326:20;5312:34;:59;;;;;1824:3;5350:8;;:21;5312:59;5311:69;;5379:1;5311:69;;;5375:1;5311:69;5304:76;;;5208:179;-1:-1:-1;;;5208:179:6:o;10663:477:1:-;-1:-1:-1;;;;;3952:18:1;;;10762:24;3952:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;-1:-1:-1;;10828:37:1;;10824:310;;10904:5;10885:16;:24;10881:130;;;10936:60;;-1:-1:-1;;;10936:60:1;;-1:-1:-1;;;;;16507:32:7;;10936:60:1;;;16489:51:7;16556:18;;;16549:34;;;16599:18;;;16592:34;;;16462:18;;10936:60:1;16287:345:7;10881:130:1;11052:57;11061:5;11068:7;11096:5;11077:16;:24;11103:5;11052:8;:57::i;:::-;10752:388;10663:477;;;:::o;5656:300::-;-1:-1:-1;;;;;5739:18:1;;5735:86;;5780:30;;-1:-1:-1;;;5780:30:1;;5807:1;5780:30;;;4764:51:7;4737:18;;5780:30:1;4602:219:7;5735:86:1;-1:-1:-1;;;;;5834:16:1;;5830:86;;5873:32;;-1:-1:-1;;;5873:32:1;;5902:1;5873:32;;;4764:51:7;4737:18;;5873:32:1;4602:219:7;5830:86:1;5925:24;5933:4;5939:2;5943:5;5925:7;:24::i;5688:444:6:-;5752:13;5777:14;5800:1;5777:25;;5828:1;5816;:8;:13;;:39;;;;;5833:1;5846;5835;:8;:12;;;;:::i;:::-;5833:15;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;;;;;5833:15:6;-1:-1:-1;;;5833:22:6;5816:39;:65;;;;;5859:1;5872;5861;:8;:12;;;;:::i;:::-;5859:15;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;;;;;5859:15:6;-1:-1:-1;;;5859:22:6;5816:65;:91;;;;;5885:1;5898;5887;:8;:12;;;;:::i;:::-;5885:15;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;;;;;5885:15:6;-1:-1:-1;;;5885:22:6;5816:91;5812:296;;;5923:16;5963:1;5952;:8;:12;;;;:::i;:::-;5942:23;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5942:23:6;;5923:42;;5984:9;5979:87;6003:3;:10;5999:1;:14;5979:87;;;6047:1;6049;6047:4;;;;;;;;:::i;:::-;;;;;;;;;6038:3;6042:1;6038:6;;;;;;;;:::i;:::-;;;;:13;-1:-1:-1;;;;;6038:13:6;;;;;;;;-1:-1:-1;6015:3:6;;5979:87;;;-1:-1:-1;6093:3:6;5688:444;-1:-1:-1;;;5688:444:6:o;5812:296::-;-1:-1:-1;6124:1:6;;5688:444;-1:-1:-1;5688:444:6:o;2431:307:5:-;1755:1;2558:7;;:18;2554:86;;2599:30;;-1:-1:-1;;;2599:30:5;;;;;;;;;;;2554:86;1755:1;2714:7;:17;2431:307::o;8247:206:1:-;-1:-1:-1;;;;;8317:21:1;;8313:89;;8361:30;;-1:-1:-1;;;8361:30:1;;8388:1;8361:30;;;4764:51:7;4737:18;;8361:30:1;4602:219:7;8313:89:1;8411:35;8419:7;8436:1;8440:5;8411:7;:35::i;:::-;8247:206;;:::o;9949:432::-;-1:-1:-1;;;;;10061:19:1;;10057:89;;10103:32;;-1:-1:-1;;;10103:32:1;;10132:1;10103:32;;;4764:51:7;4737:18;;10103:32:1;4602:219:7;10057:89:1;-1:-1:-1;;;;;10159:21:1;;10155:90;;10203:31;;-1:-1:-1;;;10203:31:1;;10231:1;10203:31;;;4764:51:7;4737:18;;10203:31:1;4602:219:7;10155:90:1;-1:-1:-1;;;;;10254:18:1;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;:35;;;10299:76;;;;10349:7;-1:-1:-1;;;;;10333:31:1;10342:5;-1:-1:-1;;;;;10333:31:1;;10358:5;10333:31;;;;1464:25:7;;1452:2;1437:18;;1318:177;10333:31:1;;;;;;;;9949:432;;;;:::o;6271:1107::-;-1:-1:-1;;;;;6360:18:1;;6356:540;;6512:5;6496:12;;:21;;;;;;;:::i;:::-;;;;-1:-1:-1;6356:540:1;;-1:-1:-1;6356:540:1;;-1:-1:-1;;;;;6570:15:1;;6548:19;6570:15;;;;;;;;;;;6603:19;;;6599:115;;;6649:50;;-1:-1:-1;;;6649:50:1;;-1:-1:-1;;;;;16507:32:7;;6649:50:1;;;16489:51:7;16556:18;;;16549:34;;;16599:18;;;16592:34;;;16462:18;;6649:50:1;16287:345:7;6599:115:1;-1:-1:-1;;;;;6834:15:1;;:9;:15;;;;;;;;;;6852:19;;;;6834:37;;6356:540;-1:-1:-1;;;;;6910:16:1;;6906:425;;7073:12;:21;;;;;;;6906:425;;;-1:-1:-1;;;;;7284:13:1;;:9;:13;;;;;;;;;;:22;;;;;;6906:425;7361:2;-1:-1:-1;;;;;7346:25:1;7355:4;-1:-1:-1;;;;;7346:25:1;;7365:5;7346:25;;;;1464::7;;1452:2;1437:18;;1318:177;7346:25:1;;;;;;;;6271:1107;;;:::o;14:250:7:-;99:1;109:113;123:6;120:1;117:13;109:113;;;199:11;;;193:18;180:11;;;173:39;145:2;138:10;109:113;;;-1:-1:-1;;256:1:7;238:16;;231:27;14:250::o;269:396::-;418:2;407:9;400:21;381:4;450:6;444:13;493:6;488:2;477:9;473:18;466:34;509:79;581:6;576:2;565:9;561:18;556:2;548:6;544:15;509:79;:::i;:::-;649:2;628:15;-1:-1:-1;;624:29:7;609:45;;;;656:2;605:54;;269:396;-1:-1:-1;;269:396:7:o;670:131::-;-1:-1:-1;;;;;745:31:7;;735:42;;725:70;;791:1;788;781:12;725:70;670:131;:::o;806:315::-;874:6;882;935:2;923:9;914:7;910:23;906:32;903:52;;;951:1;948;941:12;903:52;990:9;977:23;1009:31;1034:5;1009:31;:::i;:::-;1059:5;1111:2;1096:18;;;;1083:32;;-1:-1:-1;;;806:315:7:o;1500:::-;1568:6;1576;1629:2;1617:9;1608:7;1604:23;1600:32;1597:52;;;1645:1;1642;1635:12;1597:52;1681:9;1668:23;1658:33;;1741:2;1730:9;1726:18;1713:32;1754:31;1779:5;1754:31;:::i;:::-;1804:5;1794:15;;;1500:315;;;;;:::o;1820:247::-;1879:6;1932:2;1920:9;1911:7;1907:23;1903:32;1900:52;;;1948:1;1945;1938:12;1900:52;1987:9;1974:23;2006:31;2031:5;2006:31;:::i;2254:456::-;2331:6;2339;2347;2400:2;2388:9;2379:7;2375:23;2371:32;2368:52;;;2416:1;2413;2406:12;2368:52;2455:9;2442:23;2474:31;2499:5;2474:31;:::i;:::-;2524:5;-1:-1:-1;2581:2:7;2566:18;;2553:32;2594:33;2553:32;2594:33;:::i;:::-;2254:456;;2646:7;;-1:-1:-1;;;2700:2:7;2685:18;;;;2672:32;;2254:456::o;2904:348::-;2956:8;2966:6;3020:3;3013:4;3005:6;3001:17;2997:27;2987:55;;3038:1;3035;3028:12;2987:55;-1:-1:-1;3061:20:7;;3104:18;3093:30;;3090:50;;;3136:1;3133;3126:12;3090:50;3173:4;3165:6;3161:17;3149:29;;3225:3;3218:4;3209:6;3201;3197:19;3193:30;3190:39;3187:59;;;3242:1;3239;3232:12;3187:59;2904:348;;;;;:::o;3257:546::-;3337:6;3345;3353;3406:2;3394:9;3385:7;3381:23;3377:32;3374:52;;;3422:1;3419;3412:12;3374:52;3461:9;3448:23;3480:31;3505:5;3480:31;:::i;:::-;3530:5;-1:-1:-1;3586:2:7;3571:18;;3558:32;3613:18;3602:30;;3599:50;;;3645:1;3642;3635:12;3599:50;3684:59;3735:7;3726:6;3715:9;3711:22;3684:59;:::i;:::-;3257:546;;3762:8;;-1:-1:-1;3658:85:7;;-1:-1:-1;;;;3257:546:7:o;3808:789::-;3909:6;3917;3925;3933;3941;3994:2;3982:9;3973:7;3969:23;3965:32;3962:52;;;4010:1;4007;4000:12;3962:52;4046:9;4033:23;4023:33;;4107:2;4096:9;4092:18;4079:32;4130:18;4171:2;4163:6;4160:14;4157:34;;;4187:1;4184;4177:12;4157:34;4226:59;4277:7;4268:6;4257:9;4253:22;4226:59;:::i;:::-;4304:8;;-1:-1:-1;4200:85:7;-1:-1:-1;4392:2:7;4377:18;;4364:32;;-1:-1:-1;4408:16:7;;;4405:36;;;4437:1;4434;4427:12;4405:36;;4476:61;4529:7;4518:8;4507:9;4503:24;4476:61;:::i;:::-;3808:789;;;;-1:-1:-1;3808:789:7;;-1:-1:-1;4556:8:7;;4450:87;3808:789;-1:-1:-1;;;3808:789:7:o;5058:388::-;5126:6;5134;5187:2;5175:9;5166:7;5162:23;5158:32;5155:52;;;5203:1;5200;5193:12;5155:52;5242:9;5229:23;5261:31;5286:5;5261:31;:::i;:::-;5311:5;-1:-1:-1;5368:2:7;5353:18;;5340:32;5381:33;5340:32;5381:33;:::i;5451:411::-;5522:6;5530;5583:2;5571:9;5562:7;5558:23;5554:32;5551:52;;;5599:1;5596;5589:12;5551:52;5639:9;5626:23;5672:18;5664:6;5661:30;5658:50;;;5704:1;5701;5694:12;5658:50;5743:59;5794:7;5785:6;5774:9;5770:22;5743:59;:::i;:::-;5821:8;;5717:85;;-1:-1:-1;5451:411:7;-1:-1:-1;;;;5451:411:7:o;6075:380::-;6154:1;6150:12;;;;6197;;;6218:61;;6272:4;6264:6;6260:17;6250:27;;6218:61;6325:2;6317:6;6314:14;6294:18;6291:38;6288:161;;6371:10;6366:3;6362:20;6359:1;6352:31;6406:4;6403:1;6396:15;6434:4;6431:1;6424:15;6288:161;;6075:380;;;:::o;6460:127::-;6521:10;6516:3;6512:20;6509:1;6502:31;6552:4;6549:1;6542:15;6576:4;6573:1;6566:15;6592:128;6659:9;;;6680:11;;;6677:37;;;6694:18;;:::i;6725:168::-;6798:9;;;6829;;6846:15;;;6840:22;;6826:37;6816:71;;6867:18;;:::i;6898:125::-;6963:9;;;6984:10;;;6981:36;;;6997:18;;:::i;7028:184::-;7098:6;7151:2;7139:9;7130:7;7126:23;7122:32;7119:52;;;7167:1;7164;7157:12;7119:52;-1:-1:-1;7190:16:7;;7028:184;-1:-1:-1;7028:184:7:o;7217:127::-;7278:10;7273:3;7269:20;7266:1;7259:31;7309:4;7306:1;7299:15;7333:4;7330:1;7323:15;7349:897;7429:6;7482:2;7470:9;7461:7;7457:23;7453:32;7450:52;;;7498:1;7495;7488:12;7450:52;7531:9;7525:16;7560:18;7601:2;7593:6;7590:14;7587:34;;;7617:1;7614;7607:12;7587:34;7655:6;7644:9;7640:22;7630:32;;7700:7;7693:4;7689:2;7685:13;7681:27;7671:55;;7722:1;7719;7712:12;7671:55;7751:2;7745:9;7773:2;7769;7766:10;7763:36;;;7779:18;;:::i;:::-;7854:2;7848:9;7822:2;7908:13;;-1:-1:-1;;7904:22:7;;;7928:2;7900:31;7896:40;7884:53;;;7952:18;;;7972:22;;;7949:46;7946:72;;;7998:18;;:::i;:::-;8038:10;8034:2;8027:22;8073:2;8065:6;8058:18;8113:7;8108:2;8103;8099;8095:11;8091:20;8088:33;8085:53;;;8134:1;8131;8124:12;8085:53;8147:68;8212:2;8207;8199:6;8195:15;8190:2;8186;8182:11;8147:68;:::i;:::-;8234:6;7349:897;-1:-1:-1;;;;;;;7349:897:7:o;8251:251::-;8321:6;8374:2;8362:9;8353:7;8349:23;8345:32;8342:52;;;8390:1;8387;8380:12;8342:52;8422:9;8416:16;8441:31;8466:5;8441:31;:::i;12529:267::-;12618:6;12613:3;12606:19;12670:6;12663:5;12656:4;12651:3;12647:14;12634:43;-1:-1:-1;12722:1:7;12697:16;;;12715:4;12693:27;;;12686:38;;;;12778:2;12757:15;;;-1:-1:-1;;12753:29:7;12744:39;;;12740:50;;12529:267::o;12801:247::-;12960:2;12949:9;12942:21;12923:4;12980:62;13038:2;13027:9;13023:18;13015:6;13007;12980:62;:::i;:::-;12972:70;12801:247;-1:-1:-1;;;;12801:247:7:o;13970:678::-;14297:3;14286:9;14279:22;14260:4;14318:63;14376:3;14365:9;14361:19;14353:6;14345;14318:63;:::i;:::-;14412:2;14397:18;;14390:34;;;;-1:-1:-1;14455:2:7;14440:18;;14433:34;;;;14498:2;14483:18;;14476:34;;;;14541:3;14526:19;;14519:35;;;;14585:3;14570:19;;14563:35;14629:3;14614:19;;;14607:35;14310:71;13970:678;-1:-1:-1;;13970:678:7:o;16637:127::-;16698:10;16693:3;16689:20;16686:1;16679:31;16729:4;16726:1;16719:15;16753:4;16750:1;16743:15","linkReferences":{},"immutableReferences":{"945":[{"start":1320,"length":32},{"start":5037,"length":32},{"start":5512,"length":32},{"start":5633,"length":32}],"947":[{"start":1519,"length":32}],"949":[{"start":2021,"length":32},{"start":3135,"length":32},{"start":5847,"length":32},{"start":5982,"length":32}],"951":[{"start":1033,"length":32},{"start":5330,"length":32}]}}}}}}},"signatures":{"function":[{"signature":"agentIdHashOf(address)","signatureHash4":"0x1e130f9e","signatureHash32":"0x1e130f9e2855fc5e907d91a56ea935e43813ad30c1e79dda5f7550db936967ea"},{"signature":"agentIdRegistry()","signatureHash4":"0x8854a0ff","signatureHash32":"0x8854a0ff3e111616697df151de04aace9be980204035ef70a232784d5e0c6fd9"},{"signature":"allowance(address,address)","signatureHash4":"0xdd62ed3e","signatureHash32":"0xdd62ed3e90e97b3d417db9c0c7522647811bafca5afc6694f143588d255fdfb4"},{"signature":"approve(address,uint256)","signatureHash4":"0x095ea7b3","signatureHash32":"0x095ea7b334ae44009aa867bfb386f5c3b4b443ac6f0ee573fa91c4608fbadfba"},{"signature":"balanceOf(address)","signatureHash4":"0x70a08231","signatureHash32":"0x70a08231b98ef4ca268c9cc3f6b4590e4bfec28280db06bb5d45e689f2a360be"},{"signature":"BASE_MAX_PER_WALLET()","signatureHash4":"0x8099b002","signatureHash32":"0x8099b002921bf1e3364deeb4273c8f79ba2d2f7fe0ced52c623f4e3cf52e4534"},{"signature":"burnedUnsold()","signatureHash4":"0x2b5e5809","signatureHash32":"0x2b5e58093735e54380c6b7dc43195e9709f768e00f6a4e1297c6cee235b47dcb"},{"signature":"burnUnsold()","signatureHash4":"0xb52a5851","signatureHash32":"0xb52a5851cc7df31fe95c82ab47ce8f8e73c92e7c75d9e2a397e17a486a92b2ea"},{"signature":"decimals()","signatureHash4":"0x313ce567","signatureHash32":"0x313ce567add4d438edf58b94ff345d7d38c45b17dfc0f947988d7819dca364f9"},{"signature":"DEV_LOCKED()","signatureHash4":"0x15cccf35","signatureHash32":"0x15cccf3516852b9fe55f126a0200b8614ea92bf04da7630f23cb9b8a09bcbbe1"},{"signature":"freeClaimed(address)","signatureHash4":"0x61c0b6a0","signatureHash32":"0x61c0b6a03a912b51e4ad2227e72ff0f0b22e8b238cbe93d14241f517eb10ca9b"},{"signature":"FREE_QUOTA()","signatureHash4":"0x3ce16503","signatureHash32":"0x3ce165032a687e1372e81f83e2c9639af5c7892cf2bce937be73f526c4539f1c"},{"signature":"FREE_TOKENS()","signatureHash4":"0x6dbc4582","signatureHash32":"0x6dbc458292e9fa532ed06239642844580d0ce6825fe9c48bfb507617012f8543"},{"signature":"freeUsed()","signatureHash4":"0x6101b37f","signatureHash32":"0x6101b37fe74ff4daaea9f573ff720589afc03dd2649d28fbc86ba9ca895bf604"},{"signature":"GENESIS_ALLOCATION()","signatureHash4":"0xb4d0df8a","signatureHash32":"0xb4d0df8af1149ad260bd0f6667d70d6e5eab92108aa348fef5d474e939850cac"},{"signature":"LOCK_DURATION()","signatureHash4":"0x485d3834","signatureHash32":"0x485d3834c537f5fb69f09af1c532bec5332a18ce9f1af185a89d939166686c8a"},{"signature":"lockedReleased()","signatureHash4":"0xc5de72dd","signatureHash32":"0xc5de72dd4c51635bc4a12ce80c8bfe13afe4eed0f26a009a2bbedf6436584b60"},{"signature":"lockUntil()","signatureHash4":"0x3c78929e","signatureHash32":"0x3c78929ed949c7468d952af175367acba3378711f316101026519a66dc3504cf"},{"signature":"maxSharesOf(address)","signatureHash4":"0x2115e5ce","signatureHash32":"0x2115e5cec0b3a8c7bce72d7dfc44fccf81e8594b8b9a399e737831c3244a4397"},{"signature":"MINT_DURATION()","signatureHash4":"0x62bc5f7b","signatureHash32":"0x62bc5f7bdecf9bb42ef09617ca765617fde6fd40d1c257766ca450100210da62"},{"signature":"mintEnd()","signatureHash4":"0xea2b4ab2","signatureHash32":"0xea2b4ab23e09f89ff1d0c8b4139ff4162a55663aff9eb64cb6e9aaf751964d8d"},{"signature":"mintGenesis(uint256,string,string)","signatureHash4":"0x4db159f5","signatureHash32":"0x4db159f525d4735943d48d04eed401d1752e768398cb03a7a996f3ad942feae0"},{"signature":"name()","signatureHash4":"0x06fdde03","signatureHash32":"0x06fdde0383f15d582d1a74511486c9ddf862a882fb7904b3d9fe9b8b8e58a796"},{"signature":"PAID_QUOTA()","signatureHash4":"0xc63de810","signatureHash32":"0xc63de810855518ca0f31a04f10bce451865f694b97fbc9ad9673c1f5b91181c7"},{"signature":"paidSold()","signatureHash4":"0x10b985d4","signatureHash32":"0x10b985d4f83d61a6bdb42e6d03b8134ded0e61193c14ba279f5403a62772478b"},{"signature":"PAID_TOKENS()","signatureHash4":"0xc084f540","signatureHash32":"0xc084f540886df8e22f87579a5ae4aeb753735eb4a54d7b5a392eb114fbd1cb7f"},{"signature":"payout()","signatureHash4":"0x63bd1d4a","signatureHash32":"0x63bd1d4a88bedfb7160db00a11fe1bffc8c945fca05210a721e82aed26239413"},{"signature":"PRICE_PER_PAID_SHARE()","signatureHash4":"0x2880ea9e","signatureHash32":"0x2880ea9efb6878be9363a18819f7874ec53923642c90c9bd20777b7f17e7d883"},{"signature":"quote(uint256,address)","signatureHash4":"0x13b0be33","signatureHash32":"0x13b0be33f8974d9dd9535f4a4db94dd60a7d597fa15d07214aa354ff44f7930d"},{"signature":"referralBonusShares(address)","signatureHash4":"0x735f21be","signatureHash32":"0x735f21be85a302826138f93d64bdf366cde671b790adf6082a3b1cd7bf7513c4"},{"signature":"referred(address)","signatureHash4":"0xa0388ca6","signatureHash32":"0xa0388ca629648bd4a59e20045a7461e09d6d3efd451c4730794a5993803da573"},{"signature":"releaseLocked()","signatureHash4":"0x510040cb","signatureHash32":"0x510040cbfb549188043ec32b12d1d91dcee4fae504bc69bcbc28595b6af8cd8b"},{"signature":"remainingSharesOf(address)","signatureHash4":"0x4bddda15","signatureHash32":"0x4bddda154b8343beb467396daa131500b8a340b2dcff8b501a8559b482365551"},{"signature":"saleEnded()","signatureHash4":"0x9b8906ae","signatureHash32":"0x9b8906aecc8762939651539f8879e05da78c0ddf697c880815d7b4f1c4a21cab"},{"signature":"sharesOf(address)","signatureHash4":"0xf5eb42dc","signatureHash32":"0xf5eb42dc5b75aeacf458fb7ee3a7e64aff33064c435de4410e593730eb7c3169"},{"signature":"startTime()","signatureHash4":"0x78e97925","signatureHash32":"0x78e97925b0c960112c3f7c467b571e2a7dd5de32093cc2c34bbf3ac813766b87"},{"signature":"symbol()","signatureHash4":"0x95d89b41","signatureHash32":"0x95d89b41e2f5f391a79ec54e9d87c79d6e777c63e32c28da95b4e9e4a79250ec"},{"signature":"totalRevenueWei()","signatureHash4":"0xa0b93856","signatureHash32":"0xa0b9385620840b7adca274fd1ce3cd19d3530236d6d8ec4bfa46f03558c14cfe"},{"signature":"TOTAL_SHARES()","signatureHash4":"0x85e3f997","signatureHash32":"0x85e3f997178984874d22826f0522c2b75199c53eb97a012facfc34899a5a9e4a"},{"signature":"totalSold()","signatureHash4":"0x9106d7ba","signatureHash32":"0x9106d7ba65a7cd9db73f59ecebf6baa9adedf27748ea5a4425ddc963ba757165"},{"signature":"totalSupply()","signatureHash4":"0x18160ddd","signatureHash32":"0x18160ddd7f15c72528c2f94fd8dfe3c8d5aa26e2c50c7d81f4bc7bee8d4b7932"},{"signature":"TOTAL_SUPPLY()","signatureHash4":"0x902d55a5","signatureHash32":"0x902d55a5fbb06634e68ce8c14f3aafca4a66c492f3a9731758b80afef6f8b009"},{"signature":"transfer(address,uint256)","signatureHash4":"0xa9059cbb","signatureHash32":"0xa9059cbb2ab09eb219583f4a59a5d0623ade346d962bcd4e46b11da047c9049b"},{"signature":"transferFrom(address,address,uint256)","signatureHash4":"0x23b872dd","signatureHash32":"0x23b872dd7302113369cda2901243429419bec145408fa8b352b3dd92b66c680b"},{"signature":"verifyAgentId(address,string)","signatureHash4":"0x40036e49","signatureHash32":"0x40036e49550e4393a210be1c3a4189272f025f936726dafec13daf85d5462eee"},{"signature":"walletOfAgentId(string)","signatureHash4":"0xed2b606d","signatureHash32":"0xed2b606d16f11a91f7d5e07b25937b507c8d763107f7833cfa914dd3f69e86af"}],"event":[{"signature":"Approval(address,address,uint256)","signatureHash4":"0x8c5be1e5","signatureHash32":"0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925"},{"signature":"LockedReleased(address,uint256,uint256)","signatureHash4":"0x7bbe9c0a","signatureHash32":"0x7bbe9c0ab7edf3877274e19436d2e10ecb76324ae6afd629d2f928f1aff81651"},{"signature":"MintRecorded(address,string,uint256,uint256,uint256,uint256,uint256,uint256)","signatureHash4":"0x66b57df7","signatureHash32":"0x66b57df7aba118d24ed7972643e779f593eb515f67a6faa387db1e5975aab075"},{"signature":"ReferralCredited(address,string,address)","signatureHash4":"0x99b028dd","signatureHash32":"0x99b028dd597faf0b2ad0e538fc15267c0b023e6e7b4fbae549419dc63ec795d1"},{"signature":"Transfer(address,address,uint256)","signatureHash4":"0xddf252ad","signatureHash32":"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef"},{"signature":"UnsoldBurned(uint256,uint256)","signatureHash4":"0xd23443dd","signatureHash32":"0xd23443dd319810153e81eb4de570440dbff0f207c19b68eabf15b159644505c9"}],"error":[{"signature":"ERC20InsufficientAllowance(address,uint256,uint256)","signatureHash4":"0xfb8f41b2","signatureHash32":"0xfb8f41b23e99d2101d86da76cdfa87dd51c82ed07d3cb62cbc473e469dbc75c3"},{"signature":"ERC20InsufficientBalance(address,uint256,uint256)","signatureHash4":"0xe450d38c","signatureHash32":"0xe450d38cd8d9f7d95077d567d60ed49c7254716e6ad08fc9872816c97e0ffec6"},{"signature":"ERC20InvalidApprover(address)","signatureHash4":"0xe602df05","signatureHash32":"0xe602df05cc75712490294c6c104ab7c17f4030363910a7a2626411c6d3118847"},{"signature":"ERC20InvalidReceiver(address)","signatureHash4":"0xec442f05","signatureHash32":"0xec442f055133b72f3b2f9f0bb351c406b178527de2040a7d1feb4e058771f613"},{"signature":"ERC20InvalidSender(address)","signatureHash4":"0x96c6fd1e","signatureHash32":"0x96c6fd1edd0cd6ef7ff0ecc0facdf53148dc0048b57fe58af65755250a7a96bd"},{"signature":"ERC20InvalidSpender(address)","signatureHash4":"0x94280d62","signatureHash32":"0x94280d62c347d8d9f4d59a76ea321452406db88df38e0c9da304f58b57b373a2"},{"signature":"ReentrancyGuardReentrantCall()","signatureHash4":"0x3ee5aeb5","signatureHash32":"0x3ee5aeb571de7fc460830b4d0017439a1ca56fb0bc39062227ade4fe4a24c1ca"}]},"proxyResolution":{"isProxy":false,"proxyType":null,"implementations":[]},"match":"exact_match","chainId":"56","address":"0xffcA030c6C69A5b75392AAfaF5BF1980c0ed0467"}