diff --git a/app/exceptions.py b/app/exceptions.py index 9db334fb..5a2a44e1 100644 --- a/app/exceptions.py +++ b/app/exceptions.py @@ -31,46 +31,67 @@ class AppError(Exception): ################################################ # 400_BAD_REQUEST ################################################ -class InvalidParameterError(AppError): +class BadRequestError(AppError): status_code = status.HTTP_400_BAD_REQUEST + + +class InvalidParameterError(BadRequestError): code = 1 -class SendTransactionError(AppError): - status_code = status.HTTP_400_BAD_REQUEST +class SendTransactionError(BadRequestError): code = 2 -class AuthTokenAlreadyExistsError(AppError): - status_code = status.HTTP_400_BAD_REQUEST +class AuthTokenAlreadyExistsError(BadRequestError): code = 3 -class ResponseLimitExceededError(AppError): - status_code = status.HTTP_400_BAD_REQUEST +class ResponseLimitExceededError(BadRequestError): code = 4 -class Integer64bitLimitExceededError(AppError): - status_code = status.HTTP_400_BAD_REQUEST +class Integer64bitLimitExceededError(BadRequestError): code = 5 -class OperationNotSupportedVersionError(AppError): +class OperationNotSupportedVersionError(BadRequestError): """ The token version for which the operation is not supported """ - status_code = status.HTTP_400_BAD_REQUEST code = 6 -class OperationNotAllowedStateError(AppError): +class TokenNotExistError(BadRequestError): + """ + Operation on non-existent token + """ + + code = 7 + + +class NonTransferableTokenError(BadRequestError): + """ + Operations on non-transferable tokens + """ + + code = 8 + + +class MultipleTokenTransferNotAllowedError(BadRequestError): + """ + Transfer operations that do not allow specifying multiple tokens at once + """ + + code = 9 + + +class OperationNotAllowedStateError(BadRequestError): """ Error returned when server-side data is not ready to process the request """ - status_code = status.HTTP_400_BAD_REQUEST code_list = [ 101, # Transfer approval operations cannot be performed for accounts that do not have personal information registered. ] diff --git a/app/main.py b/app/main.py index 55167cfd..08542174 100644 --- a/app/main.py +++ b/app/main.py @@ -164,84 +164,21 @@ async def query_validation_exception_handler(request: Request, exc: ValidationEr ) -# 400:InvalidParameterError -@app.exception_handler(InvalidParameterError) -async def invalid_parameter_error_handler(request: Request, exc: InvalidParameterError): - meta = {"code": 1, "title": "InvalidParameterError"} - return JSONResponse( - status_code=exc.status_code, - content=jsonable_encoder({"meta": meta, "detail": exc.args[0]}), - ) - - -# 400:SendTransactionError -@app.exception_handler(SendTransactionError) -async def send_transaction_error_handler(request: Request, exc: SendTransactionError): - meta = {"code": 2, "title": "SendTransactionError"} - return JSONResponse( - status_code=exc.status_code, - content=jsonable_encoder({"meta": meta, "detail": exc.args[0]}), - ) - - -# 400:AuthTokenAlreadyExistsError -@app.exception_handler(AuthTokenAlreadyExistsError) -async def auth_token_already_exists_error_handler( - request: Request, exc: AuthTokenAlreadyExistsError -): - meta = {"code": 3, "title": "AuthTokenAlreadyExistsError"} - return JSONResponse( - status_code=exc.status_code, - content=jsonable_encoder({"meta": meta}), - ) - - -# 400:ResponseLimitExceededError -@app.exception_handler(ResponseLimitExceededError) -async def response_limit_exceeded_error_handler( - request: Request, exc: ResponseLimitExceededError -): - meta = {"code": 4, "title": "ResponseLimitExceededError"} - return JSONResponse( - status_code=exc.status_code, - content=jsonable_encoder({"meta": meta, "detail": exc.args[0]}), - ) - - -# 400:Integer64bitLimitExceededError -@app.exception_handler(Integer64bitLimitExceededError) -async def response_limit_exceeded_error_handler( - request: Request, exc: Integer64bitLimitExceededError -): - meta = {"code": 5, "title": "Integer64bitLimitExceededError"} - return JSONResponse( - status_code=exc.status_code, - content=jsonable_encoder({"meta": meta, "detail": exc.args[0]}), - ) - - -# 400:OperationNotSupportedVersionError -@app.exception_handler(OperationNotSupportedVersionError) -async def operation_not_supported_version_error_handler( - request: Request, exc: OperationNotSupportedVersionError -): - meta = {"code": 6, "title": "OperationNotSupportedVersionError"} - return JSONResponse( - status_code=exc.status_code, - content=jsonable_encoder({"meta": meta, "detail": exc.args[0]}), - ) - - -# 400:OperationNotAllowedStateError -@app.exception_handler(OperationNotAllowedStateError) -async def operation_not_permitted_error_handler( - request: Request, exc: OperationNotAllowedStateError -): - meta = {"code": exc.code, "title": "OperationNotAllowedStateError"} - return JSONResponse( - status_code=exc.status_code, - content=jsonable_encoder({"meta": meta, "detail": exc.args[0]}), - ) +# 400:BadRequestError +@app.exception_handler(BadRequestError) +async def bad_request_error_handler(request: Request, exc: BadRequestError): + meta = {"code": exc.code, "title": exc.__class__.__name__} + + if len(exc.args) > 0: + return JSONResponse( + status_code=exc.status_code, + content=jsonable_encoder({"meta": meta, "detail": exc.args[0]}), + ) + else: + return JSONResponse( + status_code=exc.status_code, + content=jsonable_encoder({"meta": meta}), + ) # 400:ContractRevertError diff --git a/app/model/blockchain/token.py b/app/model/blockchain/token.py index 559ae250..3d1600de 100644 --- a/app/model/blockchain/token.py +++ b/app/model/blockchain/token.py @@ -42,10 +42,10 @@ ApproveTransferParams as IbetSecurityTokenApproveTransfer, BulkTransferParams as IbetSecurityTokenBulkTransferParams, CancelTransferParams as IbetSecurityTokenCancelTransfer, + ForcedTransferParams as IbetSecurityTokenForcedTransferParams, ForceUnlockParams as IbetSecurityTokenForceUnlockParams, LockParams as IbetSecurityTokenLockParams, RedeemParams as IbetSecurityTokenRedeemParams, - TransferParams as IbetSecurityTokenTransferParams, ) from app.model.blockchain.tx_params.ibet_share import ( UpdateParams as IbetShareUpdateParams, @@ -179,8 +179,11 @@ def __init__( ): super().__init__(contract_address, contract_name) - async def transfer( - self, data: IbetSecurityTokenTransferParams, tx_from: str, private_key: bytes + async def forced_transfer( + self, + data: IbetSecurityTokenForcedTransferParams, + tx_from: str, + private_key: bytes, ): """Transfer ownership""" try: @@ -212,6 +215,48 @@ async def transfer( return tx_hash + async def bulk_forced_transfer( + self, + data: list[IbetSecurityTokenForcedTransferParams], + tx_from: str, + private_key: bytes, + ): + """Bulk transfer ownership""" + from_list = [] + to_list = [] + amounts = [] + + for _d in data: + from_list.append(_d.from_address) + to_list.append(_d.to_address) + amounts.append(_d.amount) + + try: + contract = AsyncContractUtils.get_contract( + contract_name=self.contract_name, contract_address=self.token_address + ) + tx = await contract.functions.bulkTransferFrom( + from_list, to_list, amounts + ).build_transaction( + { + "chainId": CHAIN_ID, + "from": tx_from, + "gas": TX_GAS_LIMIT, + "gasPrice": 0, + } + ) + tx_hash, _ = await AsyncContractUtils.send_transaction( + transaction=tx, private_key=private_key + ) + except ContractRevertError: + raise + except TimeExhausted as timeout_error: + raise SendTransactionError(timeout_error) + except Exception as err: + raise SendTransactionError(err) + + return tx_hash + async def bulk_transfer( self, data: IbetSecurityTokenBulkTransferParams, @@ -284,8 +329,63 @@ async def additional_issue( await self.record_attr_update(db_session) await self.delete_cache(db_session) await db_session.commit() + except Exception: + LOG.exception("Failed to update database") + pass + finally: + await db_session.close() + + return tx_hash + + async def bulk_additional_issue( + self, + data: list[IbetSecurityTokenAdditionalIssueParams], + tx_from: str, + private_key: bytes, + ): + """Bulk additional issue""" + target_address_list = [] + lock_address_list = [] + amounts = [] + + for _d in data: + target_address_list.append(_d.account_address) + lock_address_list.append(ZERO_ADDRESS) + amounts.append(_d.amount) + + try: + contract = AsyncContractUtils.get_contract( + contract_name=self.contract_name, contract_address=self.token_address + ) + tx = await contract.functions.bulkIssueFrom( + target_address_list, lock_address_list, amounts + ).build_transaction( + { + "chainId": CHAIN_ID, + "from": tx_from, + "gas": TX_GAS_LIMIT, + "gasPrice": 0, + } + ) + tx_hash, _ = await AsyncContractUtils.send_transaction( + transaction=tx, private_key=private_key + ) + except ContractRevertError: + raise + except TimeExhausted as timeout_error: + raise SendTransactionError(timeout_error) except Exception as err: raise SendTransactionError(err) + + # Delete Cache + db_session = AsyncSession(autocommit=False, autoflush=True, bind=async_engine) + try: + await self.record_attr_update(db_session) + await self.delete_cache(db_session) + await db_session.commit() + except Exception: + LOG.exception("Failed to update database") + pass finally: await db_session.close() @@ -327,8 +427,63 @@ async def redeem( await self.record_attr_update(db_session) await self.delete_cache(db_session) await db_session.commit() + except Exception: + LOG.exception("Failed to update database") + pass + finally: + await db_session.close() + + return tx_hash + + async def bulk_redeem( + self, + data: list[IbetSecurityTokenRedeemParams], + tx_from: str, + private_key: bytes, + ): + """Redeem a token""" + target_address_list = [] + lock_address_list = [] + amounts = [] + + for _d in data: + target_address_list.append(_d.account_address) + lock_address_list.append(ZERO_ADDRESS) + amounts.append(_d.amount) + + try: + contract = AsyncContractUtils.get_contract( + contract_name=self.contract_name, contract_address=self.token_address + ) + tx = await contract.functions.bulkRedeemFrom( + target_address_list, lock_address_list, amounts + ).build_transaction( + { + "chainId": CHAIN_ID, + "from": tx_from, + "gas": TX_GAS_LIMIT, + "gasPrice": 0, + } + ) + tx_hash, _ = await AsyncContractUtils.send_transaction( + transaction=tx, private_key=private_key + ) + except ContractRevertError: + raise + except TimeExhausted as timeout_error: + raise SendTransactionError(timeout_error) except Exception as err: raise SendTransactionError(err) + + # Delete Cache + db_session = AsyncSession(autocommit=False, autoflush=True, bind=async_engine) + try: + await self.record_attr_update(db_session) + await self.delete_cache(db_session) + await db_session.commit() + except Exception: + LOG.exception("Failed to update database") + pass finally: await db_session.close() @@ -497,7 +652,9 @@ async def create(self, args: list, tx_from: str, private_key: bytes): else: raise SendTransactionError("contract is already deployed") - async def get(self): + T = TypeVar("T") + + async def get(self) -> T: """Get token attributes""" db_session = AsyncSession(autocommit=False, autoflush=True, bind=async_engine) try: @@ -1089,8 +1246,9 @@ async def update( await self.record_attr_update(db_session) await self.delete_cache(db_session) await db_session.commit() - except Exception as err: - raise SendTransactionError(err) + except Exception: + LOG.exception("Failed to update database") + pass finally: await db_session.close() @@ -1572,7 +1730,8 @@ async def update( await self.record_attr_update(db_session) await self.delete_cache(db_session) await db_session.commit() - except Exception as err: - raise SendTransactionError(err) + except Exception: + LOG.exception("Failed to update database") + pass finally: await db_session.close() diff --git a/app/model/blockchain/tx_params/ibet_security_token.py b/app/model/blockchain/tx_params/ibet_security_token.py index 2892a65b..f66a94b5 100644 --- a/app/model/blockchain/tx_params/ibet_security_token.py +++ b/app/model/blockchain/tx_params/ibet_security_token.py @@ -22,7 +22,7 @@ from app.model import EthereumAddress -class TransferParams(BaseModel): +class ForcedTransferParams(BaseModel): from_address: EthereumAddress to_address: EthereumAddress amount: PositiveInt diff --git a/app/model/blockchain/tx_params/ibet_share.py b/app/model/blockchain/tx_params/ibet_share.py index 71dc0524..3808b183 100644 --- a/app/model/blockchain/tx_params/ibet_share.py +++ b/app/model/blockchain/tx_params/ibet_share.py @@ -30,10 +30,10 @@ ApproveTransferParams as IbetSecurityTokenApproveTransferParams, BulkTransferParams as IbetSecurityTokenBulkTransferParams, CancelTransferParams as IbetSecurityTokenCancelTransferParams, + ForcedTransferParams as IbetSecurityTokenForcedTransferParams, ForceUnlockParams as IbetSecurityTokenForceUnlockParams, LockParams as IbetSecurityTokenLockParams, RedeemParams as IbetSecurityTokenRedeemParams, - TransferParams as IbetSecurityTokenTransferParams, ) @@ -66,7 +66,7 @@ def dividends_13_decimal_places(cls, v): return v -class TransferParams(IbetSecurityTokenTransferParams): +class ForcedTransferParams(IbetSecurityTokenForcedTransferParams): pass diff --git a/app/model/blockchain/tx_params/ibet_straight_bond.py b/app/model/blockchain/tx_params/ibet_straight_bond.py index 28b734c9..ccad0c95 100644 --- a/app/model/blockchain/tx_params/ibet_straight_bond.py +++ b/app/model/blockchain/tx_params/ibet_straight_bond.py @@ -30,10 +30,10 @@ ApproveTransferParams as IbetSecurityTokenApproveTransferParams, BulkTransferParams as IbetSecurityTokenBulkTransferParams, CancelTransferParams as IbetSecurityTokenCancelTransferParams, + ForcedTransferParams as IbetSecurityTokenForcedTransferParams, ForceUnlockParams as IbetSecurityTokenForceUnlockParams, LockParams as IbetSecurityTokenLockParams, RedeemParams as IbetSecurityTokenRedeemParams, - TransferParams as IbetSecurityTokenTransferParams, ) @@ -88,7 +88,7 @@ def interest_payment_date_list_length_less_than_13(cls, v): return v -class TransferParams(IbetSecurityTokenTransferParams): +class ForcedTransferParams(IbetSecurityTokenForcedTransferParams): pass diff --git a/app/model/db/bulk_transfer.py b/app/model/db/bulk_transfer.py index 80a83a50..44c8f0f3 100644 --- a/app/model/db/bulk_transfer.py +++ b/app/model/db/bulk_transfer.py @@ -34,8 +34,8 @@ class BulkTransferUpload(Base): issuer_address: Mapped[str] = mapped_column(String(42), nullable=False, index=True) # token type token_type: Mapped[str] = mapped_column(String(40), nullable=False) - # transaction compression - transaction_compression: Mapped[bool | None] = mapped_column(Boolean, nullable=True) + # token address + token_address: Mapped[str | None] = mapped_column(String(42), nullable=True) # processing status (pending:0, succeeded:1, failed:2) status: Mapped[int] = mapped_column(Integer, nullable=False, index=True) diff --git a/app/model/db/token.py b/app/model/db/token.py index d6b0c7a9..005302fe 100644 --- a/app/model/db/token.py +++ b/app/model/db/token.py @@ -35,6 +35,7 @@ class TokenVersion(StrEnum): V_22_12 = "22_12" V_23_12 = "23_12" V_24_06 = "24_06" + V_24_09 = "24_09" class Token(Base): diff --git a/app/model/schema/base/base.py b/app/model/schema/base/base.py index 5d1902df..f6652e4e 100644 --- a/app/model/schema/base/base.py +++ b/app/model/schema/base/base.py @@ -31,11 +31,13 @@ class IbetStraightBondContractVersion(StrEnum): V_22_12 = "22_12" V_23_12 = "23_12" V_24_06 = "24_06" + V_24_09 = "24_09" class IbetShareContractVersion(StrEnum): V_22_12 = "22_12" V_24_06 = "24_06" + V_24_09 = "24_09" MMDD_constr = Annotated[ diff --git a/app/model/schema/bulk_transfer.py b/app/model/schema/bulk_transfer.py index c9959132..16513268 100644 --- a/app/model/schema/bulk_transfer.py +++ b/app/model/schema/bulk_transfer.py @@ -35,10 +35,6 @@ class IbetStraightBondBulkTransferRequest(BaseModel): min_length=1, max_length=500000, ) - transaction_compression: Optional[bool] = Field( - default=None, - description="Transaction compression mode", - ) class IbetShareBulkTransferRequest(BaseModel): @@ -48,10 +44,6 @@ class IbetShareBulkTransferRequest(BaseModel): min_length=1, max_length=500000, ) - transaction_compression: Optional[bool] = Field( - default=None, - description="Transaction compression mode", - ) ############################ @@ -69,9 +61,7 @@ class BulkTransferUploadResponse(BaseModel): upload_id: str = Field(..., description="Upload id") issuer_address: str = Field(..., description="Issuer account address") token_type: TokenType = Field(..., description="Token type") - transaction_compression: bool = Field( - ..., description="Transaction compression mode" - ) + token_address: str | None = Field(..., description="Token address") status: int = Field(..., description="Processing status") created: str = Field(..., description="Upload created datetime (ISO8601)") diff --git a/app/routers/bond.py b/app/routers/bond.py index f4867b86..bb3f8a50 100644 --- a/app/routers/bond.py +++ b/app/routers/bond.py @@ -50,9 +50,12 @@ AuthorizationError, ContractRevertError, InvalidParameterError, + MultipleTokenTransferNotAllowedError, + NonTransferableTokenError, OperationNotAllowedStateError, OperationNotSupportedVersionError, SendTransactionError, + TokenNotExistError, ) from app.model.blockchain import ( IbetSecurityTokenEscrow, @@ -67,8 +70,8 @@ AdditionalIssueParams, ApproveTransferParams, CancelTransferParams, + ForcedTransferParams, RedeemParams, - TransferParams, UpdateParams, ) from app.model.db import ( @@ -330,7 +333,7 @@ async def issue_token( _token.token_address = contract_address _token.abi = abi _token.token_status = token_status - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # Register operation log @@ -2796,8 +2799,8 @@ async def transfer_ownership( raise InvalidParameterError("this token is temporarily unavailable") try: - await IbetStraightBondContract(token.token_address).transfer( - data=TransferParams(**token.model_dump()), + await IbetStraightBondContract(token.token_address).forced_transfer( + data=ForcedTransferParams(**token.model_dump()), tx_from=issuer_address, private_key=private_key, ) @@ -3639,7 +3642,11 @@ async def update_transfer_approval( @router.get( "/transfer_approvals/{token_address}/{id}", response_model=TransferApprovalTokenDetailResponse, - responses=get_routers_responses(422, 404, InvalidParameterError), + responses=get_routers_responses( + 422, + 404, + InvalidParameterError, + ), ) async def retrieve_transfer_approval_history( db: DBAsyncSession, token_address: str, id: int @@ -3858,31 +3865,27 @@ async def retrieve_transfer_approval_history( "/bulk_transfer", response_model=BulkTransferUploadIdResponse, responses=get_routers_responses( - 422, AuthorizationError, InvalidParameterError, 401 + 401, + 422, + AuthorizationError, + InvalidParameterError, + MultipleTokenTransferNotAllowedError, + TokenNotExistError, + NonTransferableTokenError, ), ) async def bulk_transfer_ownership( db: DBAsyncSession, request: Request, - bulk_transfer_req: IbetStraightBondBulkTransferRequest, + transfer_req: IbetStraightBondBulkTransferRequest, issuer_address: str = Header(...), eoa_password: Optional[str] = Header(None), auth_token: Optional[str] = Header(None), ): """Bulk transfer token ownership - By using "transaction compression mode", it is possible to consolidate multiple transfers into one transaction. - This speeds up the time it takes for all transfers to be completed. - On the other hand, when using transaction compression, the input data must meet the following conditions. - All `token_address` must be the same. - - All `from_address` must be the same. - - `from_address` and `issuer_address` must be the same. """ - tx_compression = bulk_transfer_req.transaction_compression - transfer_list = bulk_transfer_req.transfer_list - token_addr_set = set() - from_addr_set = set() - # Validate Headers validate_headers( issuer_address=(issuer_address, address_is_valid_address), @@ -3898,49 +3901,38 @@ async def bulk_transfer_ownership( auth_token=auth_token, ) - # Verify that the tokens are issued by the issuer_address - for _transfer in transfer_list: - _issued_token: Token | None = ( - await db.scalars( - select(Token) - .where( - and_( - Token.type == TokenType.IBET_STRAIGHT_BOND, - Token.issuer_address == issuer_address, - Token.token_address == _transfer.token_address, - Token.token_status != 2, - ) - ) - .limit(1) - ) - ).first() - if _issued_token is None: - raise InvalidParameterError(f"token not found: {_transfer.token_address}") - if _issued_token.token_status == 0: - raise InvalidParameterError( - f"this token is temporarily unavailable: {_transfer.token_address}" - ) - + # Verify that the same token address is set. + token_addr_set = set() + for _transfer in transfer_req.transfer_list: token_addr_set.add(_transfer.token_address) - from_addr_set.add(_transfer.from_address) - # Checks when compressing transactions - if tx_compression: - # All token_address must be the same - if len(token_addr_set) > 1: - raise InvalidParameterError( - "When using transaction compression, all token_address must be the same." - ) - # All from_address must be the same - if len(from_addr_set) > 1: - raise InvalidParameterError( - "When using transaction compression, all from_address must be the same." - ) - # from_address must be the same as issuer_address - if next(iter(from_addr_set)) != issuer_address: - raise InvalidParameterError( - "When using transaction compression, from_address must be the same as issuer_address." + if len(token_addr_set) > 1: + raise MultipleTokenTransferNotAllowedError( + "All token_address must be the same." + ) + token_address = token_addr_set.pop() + + # Verify that the tokens are issued by the issuer_address + _issued_token: Token | None = ( + await db.scalars( + select(Token) + .where( + and_( + Token.type == TokenType.IBET_STRAIGHT_BOND, + Token.issuer_address == issuer_address, + Token.token_address == token_address, + Token.token_status != 2, + ) ) + .limit(1) + ) + ).first() + if _issued_token is None: + raise TokenNotExistError(f"token not found: {token_address}") + if _issued_token.token_status == 0: + raise NonTransferableTokenError( + f"this token is temporarily unavailable: {token_address}" + ) # Generate upload_id upload_id = uuid.uuid4() @@ -3950,12 +3942,12 @@ async def bulk_transfer_ownership( _bulk_transfer_upload.upload_id = upload_id _bulk_transfer_upload.issuer_address = issuer_address _bulk_transfer_upload.token_type = TokenType.IBET_STRAIGHT_BOND.value - _bulk_transfer_upload.transaction_compression = tx_compression + _bulk_transfer_upload.token_address = token_address _bulk_transfer_upload.status = 0 db.add(_bulk_transfer_upload) # add bulk transfer records - for _transfer in transfer_list: + for _transfer in transfer_req.transfer_list: _bulk_transfer = BulkTransfer() _bulk_transfer.issuer_address = issuer_address _bulk_transfer.upload_id = upload_id @@ -4014,10 +4006,8 @@ async def list_bulk_transfer_upload( { "issuer_address": _upload.issuer_address, "token_type": _upload.token_type, + "token_address": _upload.token_address, "upload_id": _upload.upload_id, - "transaction_compression": ( - True if _upload.transaction_compression is True else False - ), "status": _upload.status, "created": created_utc.astimezone(local_tz).isoformat(), } diff --git a/app/routers/share.py b/app/routers/share.py index c3229614..c92122e8 100644 --- a/app/routers/share.py +++ b/app/routers/share.py @@ -51,9 +51,12 @@ AuthorizationError, ContractRevertError, InvalidParameterError, + MultipleTokenTransferNotAllowedError, + NonTransferableTokenError, OperationNotAllowedStateError, OperationNotSupportedVersionError, SendTransactionError, + TokenNotExistError, ) from app.model.blockchain import ( IbetSecurityTokenEscrow, @@ -68,8 +71,8 @@ AdditionalIssueParams, ApproveTransferParams, CancelTransferParams, + ForcedTransferParams, RedeemParams, - TransferParams, UpdateParams, ) from app.model.db import ( @@ -322,7 +325,7 @@ async def issue_token( _token.token_address = contract_address _token.abi = abi _token.token_status = token_status - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # Register operation log @@ -2763,8 +2766,8 @@ async def transfer_ownership( raise InvalidParameterError("this token is temporarily unavailable") try: - await IbetShareContract(token.token_address).transfer( - data=TransferParams(**token.model_dump()), + await IbetShareContract(token.token_address).forced_transfer( + data=ForcedTransferParams(**token.model_dump()), tx_from=issuer_address, private_key=private_key, ) @@ -3824,31 +3827,27 @@ async def retrieve_transfer_approval_history( "/bulk_transfer", response_model=BulkTransferUploadIdResponse, responses=get_routers_responses( - 422, AuthorizationError, InvalidParameterError, 401 + 401, + 422, + AuthorizationError, + InvalidParameterError, + MultipleTokenTransferNotAllowedError, + TokenNotExistError, + NonTransferableTokenError, ), ) async def bulk_transfer_ownership( db: DBAsyncSession, request: Request, - bulk_transfer_req: IbetShareBulkTransferRequest, + transfer_req: IbetShareBulkTransferRequest, issuer_address: str = Header(...), eoa_password: Optional[str] = Header(None), auth_token: Optional[str] = Header(None), ): """Bulk transfer token ownership - By using "transaction compression mode", it is possible to consolidate multiple transfers into one transaction. - This speeds up the time it takes for all transfers to be completed. - On the other hand, when using transaction compression, the input data must meet the following conditions. - All `token_address` must be the same. - - All `from_address` must be the same. - - `from_address` and `issuer_address` must be the same. """ - tx_compression = bulk_transfer_req.transaction_compression - transfer_list = bulk_transfer_req.transfer_list - token_addr_set = set() - from_addr_set = set() - # Validate Headers validate_headers( issuer_address=(issuer_address, address_is_valid_address), @@ -3864,49 +3863,38 @@ async def bulk_transfer_ownership( auth_token=auth_token, ) + # Verify that the same token address is set. + token_addr_set = set() + for _transfer in transfer_req.transfer_list: + token_addr_set.add(_transfer.token_address) + + if len(token_addr_set) > 1: + raise MultipleTokenTransferNotAllowedError( + "All token_address must be the same." + ) + token_address = token_addr_set.pop() + # Verify that the tokens are issued by the issuer_address - for _transfer in transfer_list: - _issued_token: Token | None = ( - await db.scalars( - select(Token) - .where( - and_( - Token.type == TokenType.IBET_SHARE, - Token.issuer_address == issuer_address, - Token.token_address == _transfer.token_address, - Token.token_status != 2, - ) + _issued_token: Token | None = ( + await db.scalars( + select(Token) + .where( + and_( + Token.type == TokenType.IBET_SHARE, + Token.issuer_address == issuer_address, + Token.token_address == token_address, + Token.token_status != 2, ) - .limit(1) - ) - ).first() - if _issued_token is None: - raise InvalidParameterError(f"token not found: {_transfer.token_address}") - if _issued_token.token_status == 0: - raise InvalidParameterError( - f"this token is temporarily unavailable: {_transfer.token_address}" - ) - - token_addr_set.add(_transfer.token_address) - from_addr_set.add(_transfer.from_address) - - # Checks when compressing transactions - if tx_compression: - # All token_address must be the same - if len(token_addr_set) > 1: - raise InvalidParameterError( - "When using transaction compression, all token_address must be the same." - ) - # All from_address must be the same - if len(from_addr_set) > 1: - raise InvalidParameterError( - "When using transaction compression, all from_address must be the same." - ) - # from_address must be the same as issuer_address - if next(iter(from_addr_set)) != issuer_address: - raise InvalidParameterError( - "When using transaction compression, from_address must be the same as issuer_address." ) + .limit(1) + ) + ).first() + if _issued_token is None: + raise TokenNotExistError(f"token not found: {token_address}") + if _issued_token.token_status == 0: + raise NonTransferableTokenError( + f"this token is temporarily unavailable: {token_address}" + ) # Generate upload_id upload_id = uuid.uuid4() @@ -3916,12 +3904,12 @@ async def bulk_transfer_ownership( _bulk_transfer_upload.upload_id = upload_id _bulk_transfer_upload.issuer_address = issuer_address _bulk_transfer_upload.token_type = TokenType.IBET_SHARE.value - _bulk_transfer_upload.transaction_compression = tx_compression + _bulk_transfer_upload.token_address = token_address _bulk_transfer_upload.status = 0 db.add(_bulk_transfer_upload) # Add bulk transfer records - for _transfer in transfer_list: + for _transfer in transfer_req.transfer_list: _bulk_transfer = BulkTransfer() _bulk_transfer.issuer_address = issuer_address _bulk_transfer.upload_id = upload_id @@ -3980,10 +3968,8 @@ async def list_bulk_transfer_upload( { "issuer_address": _upload.issuer_address, "token_type": _upload.token_type, + "token_address": _upload.token_address, "upload_id": _upload.upload_id, - "transaction_compression": ( - True if _upload.transaction_compression is True else False - ), "status": _upload.status, "created": created_utc.astimezone(local_tz).isoformat(), } diff --git a/app/utils/contract_error_code.py b/app/utils/contract_error_code.py index 27ec004f..f45400e8 100644 --- a/app/utils/contract_error_code.py +++ b/app/utils/contract_error_code.py @@ -51,6 +51,9 @@ 111101: "Redeem amount is less than locked address balance.", 111102: "Redeem amount is less than target address balance.", 111201: "Unlock amount is greater than locked amount.", + 111301: "The length of the target address, the lock address and the amount don't match.", + 111401: "The length of the target address, the lock address and the amount don't match.", + 111501: "The From, To and Value lengths don't match.", # IbetStraightBond (12XXXX) 120001: "Lock address is invalid.", # < v22.12 120002: "Lock amount is greater than message sender balance.", @@ -76,6 +79,9 @@ 121101: "Redeem amount is less than locked address balance.", 121102: "Redeem amount is less than target address balance.", 121201: "Unlock amount is greater than locked amount.", + 121301: "The length of the target address, the lock address and the amount don't match.", + 121401: "The length of the target address, the lock address and the amount don't match.", + 121501: "The From, To and Value lengths don't match.", # IbetCoupon (13XXXX) 130001: "Destination address isn't tradable exchange.", 130101: "Message sender balance is insufficient.", @@ -87,6 +93,7 @@ 130401: "Message sender balance is insufficient.", 130501: "Offering is stopped.", 130502: "Personal information of message sender isn't registered to token owner.", + 130601: "The From, To and Value lengths don't match.", # IbetMembership (14XXXX) 140001: "Destination address isn't tradable exchange.", 140101: "Message sender balance is insufficient.", @@ -97,12 +104,14 @@ 140301: "Transfer amount is greater than from address balance.", 140401: "Offering is stopped.", 140402: "Personal information of message sender isn't registered to token owner.", + 140501: "The From, To and Value lengths don't match.", # IbetStandardToken (15XXXX) 150001: "Destination address isn't tradable exchange.", 150101: "Message sender balance is insufficient.", 150201: "Length of To and of Value aren't matched.", 150202: "Transfer amount is greater than from address balance.", 150301: "Transfer amount is greater than from address balance.", + 150401: "The From, To and Value lengths don't match.", # ExchangeStorage (20XXXX) 200001: "Message sender(exchange contract) isn't latest version.", # IbetExchange (21XXXX) diff --git a/batch/processor_batch_issue_redeem.py b/batch/processor_batch_issue_redeem.py index 6cb5df11..dd837007 100644 --- a/batch/processor_batch_issue_redeem.py +++ b/batch/processor_batch_issue_redeem.py @@ -46,11 +46,13 @@ BatchIssueRedeemUpload, Notification, NotificationType, + Token, TokenType, + TokenVersion, ) from app.utils.e2ee_utils import E2EEUtils from batch import batch_log -from config import DATABASE_URL +from config import BULK_TX_LOT_SIZE, DATABASE_URL """ [PROCESSOR-Batch-Issue-Redeem] @@ -65,17 +67,36 @@ class Processor: + async def process(self): db_session = BatchAsyncSessionLocal() try: - upload_list: Sequence[BatchIssueRedeemUpload] = ( - await db_session.scalars( - select(BatchIssueRedeemUpload).where( - BatchIssueRedeemUpload.processed == False + upload_list: Sequence[ + tuple[BatchIssueRedeemUpload, TokenVersion | None] + ] = ( + ( + await db_session.execute( + select(BatchIssueRedeemUpload, Token.version) + .outerjoin( + Token, + and_( + BatchIssueRedeemUpload.issuer_address + == Token.issuer_address, + BatchIssueRedeemUpload.token_address + == Token.token_address, + ), + ) + .where(BatchIssueRedeemUpload.processed == False) + .order_by(BatchIssueRedeemUpload.created) ) ) - ).all() - for upload in upload_list: + .tuples() + .all() + ) + for _d in upload_list: + upload = _d[0] + token_version = _d[1] + LOG.info(f"Process start: upload_id={upload.upload_id}") # Get issuer's private key @@ -125,100 +146,27 @@ async def process(self): await db_session.commit() continue - # Batch processing - batch_data_list: Sequence[BatchIssueRedeem] = ( - await db_session.scalars( - select(BatchIssueRedeem).where( - and_( - BatchIssueRedeem.upload_id == upload.upload_id, - BatchIssueRedeem.status == 0, - ) - ) + # Processing + if token_version is not None and token_version >= TokenVersion.V_24_09: + await self.__processing_in_batch( + db_session=db_session, issuer_pk=issuer_pk, upload=upload + ) + else: + await self.__processing_individually( + db_session=db_session, issuer_pk=issuer_pk, upload=upload ) - ).all() - for batch_data in batch_data_list: - tx_hash = "-" - try: - if upload.token_type == TokenType.IBET_STRAIGHT_BOND.value: - if ( - upload.category - == BatchIssueRedeemProcessingCategory.ISSUE.value - ): - tx_hash = await IbetStraightBondContract( - upload.token_address - ).additional_issue( - data=IbetStraightBondAdditionalIssueParams( - account_address=batch_data.account_address, - amount=batch_data.amount, - ), - tx_from=upload.issuer_address, - private_key=issuer_pk, - ) - elif ( - upload.category - == BatchIssueRedeemProcessingCategory.REDEEM.value - ): - tx_hash = await IbetStraightBondContract( - upload.token_address - ).redeem( - data=IbetStraightBondRedeemParams( - account_address=batch_data.account_address, - amount=batch_data.amount, - ), - tx_from=upload.issuer_address, - private_key=issuer_pk, - ) - elif upload.token_type == TokenType.IBET_SHARE.value: - if ( - upload.category - == BatchIssueRedeemProcessingCategory.ISSUE.value - ): - tx_hash = await IbetShareContract( - upload.token_address - ).additional_issue( - data=IbetShareAdditionalIssueParams( - account_address=batch_data.account_address, - amount=batch_data.amount, - ), - tx_from=upload.issuer_address, - private_key=issuer_pk, - ) - elif ( - upload.category - == BatchIssueRedeemProcessingCategory.REDEEM.value - ): - tx_hash = await IbetShareContract( - upload.token_address - ).redeem( - data=IbetShareRedeemParams( - account_address=batch_data.account_address, - amount=batch_data.amount, - ), - tx_from=upload.issuer_address, - private_key=issuer_pk, - ) - LOG.debug(f"Transaction sent successfully: {tx_hash}") - batch_data.status = 1 - except ContractRevertError as e: - LOG.warning( - f"Transaction reverted: upload_id=<{batch_data.upload_id}> error_code:<{e.code}> error_msg:<{e.message}>" - ) - batch_data.status = 2 - except SendTransactionError: - LOG.warning(f"Failed to send transaction: {tx_hash}") - batch_data.status = 2 - finally: - await db_session.commit() # commit for each data # Process failed data failed_batch_data_list: Sequence[BatchIssueRedeem] = ( await db_session.scalars( - select(BatchIssueRedeem).where( + select(BatchIssueRedeem) + .where( and_( BatchIssueRedeem.upload_id == upload.upload_id, BatchIssueRedeem.status == 2, ) ) + .order_by(BatchIssueRedeem.created) ) ).all() @@ -243,6 +191,217 @@ async def process(self): finally: await db_session.close() + @staticmethod + async def __processing_individually( + db_session: AsyncSession, issuer_pk: bytes, upload: BatchIssueRedeemUpload + ): + """ + Process transactions line by line + - For v24.6 and earlier tokens + """ + batch_data_list: Sequence[BatchIssueRedeem] = ( + await db_session.scalars( + select(BatchIssueRedeem).where( + and_( + BatchIssueRedeem.upload_id == upload.upload_id, + BatchIssueRedeem.status == 0, + ) + ) + ) + ).all() + for batch_data in batch_data_list: + tx_hash = "-" + try: + if upload.token_type == TokenType.IBET_STRAIGHT_BOND.value: + if ( + upload.category + == BatchIssueRedeemProcessingCategory.ISSUE.value + ): + tx_hash = await IbetStraightBondContract( + upload.token_address + ).additional_issue( + data=IbetStraightBondAdditionalIssueParams( + account_address=batch_data.account_address, + amount=batch_data.amount, + ), + tx_from=upload.issuer_address, + private_key=issuer_pk, + ) + elif ( + upload.category + == BatchIssueRedeemProcessingCategory.REDEEM.value + ): + tx_hash = await IbetStraightBondContract( + upload.token_address + ).redeem( + data=IbetStraightBondRedeemParams( + account_address=batch_data.account_address, + amount=batch_data.amount, + ), + tx_from=upload.issuer_address, + private_key=issuer_pk, + ) + elif upload.token_type == TokenType.IBET_SHARE.value: + if ( + upload.category + == BatchIssueRedeemProcessingCategory.ISSUE.value + ): + tx_hash = await IbetShareContract( + upload.token_address + ).additional_issue( + data=IbetShareAdditionalIssueParams( + account_address=batch_data.account_address, + amount=batch_data.amount, + ), + tx_from=upload.issuer_address, + private_key=issuer_pk, + ) + elif ( + upload.category + == BatchIssueRedeemProcessingCategory.REDEEM.value + ): + tx_hash = await IbetShareContract(upload.token_address).redeem( + data=IbetShareRedeemParams( + account_address=batch_data.account_address, + amount=batch_data.amount, + ), + tx_from=upload.issuer_address, + private_key=issuer_pk, + ) + LOG.debug(f"Transaction sent successfully: {tx_hash}") + batch_data.status = 1 + except ContractRevertError as e: + LOG.warning( + f"Transaction reverted: upload_id=<{batch_data.upload_id}> error_code:<{e.code}> error_msg:<{e.message}>" + ) + batch_data.status = 2 + except SendTransactionError: + LOG.warning(f"Failed to send transaction: {tx_hash}") + batch_data.status = 2 + finally: + await db_session.commit() # commit for each data + + @staticmethod + async def __processing_in_batch( + db_session: AsyncSession, issuer_pk: bytes, upload: BatchIssueRedeemUpload + ): + """ + Process transactions in batch + """ + + while True: + # Get unprocessed records + # - Process up to 100(default) records in a batch + batch_data_list: Sequence[BatchIssueRedeem] = ( + await db_session.scalars( + select(BatchIssueRedeem) + .where( + and_( + BatchIssueRedeem.upload_id == upload.upload_id, + BatchIssueRedeem.status == 0, + ) + ) + .limit(BULK_TX_LOT_SIZE) + ) + ).all() + if len(batch_data_list) == 0: + break + + tx_hash = "-" + try: + # Send bulk transaction + if upload.token_type == TokenType.IBET_STRAIGHT_BOND.value: + if ( + upload.category + == BatchIssueRedeemProcessingCategory.ISSUE.value + ): + tx_data: list[IbetStraightBondAdditionalIssueParams] = [ + IbetStraightBondAdditionalIssueParams( + account_address=batch_data.account_address, + amount=batch_data.amount, + ) + for batch_data in batch_data_list + ] + tx_hash = await IbetStraightBondContract( + upload.token_address + ).bulk_additional_issue( + data=tx_data, + tx_from=upload.issuer_address, + private_key=issuer_pk, + ) + elif ( + upload.category + == BatchIssueRedeemProcessingCategory.REDEEM.value + ): + tx_data: list[IbetStraightBondRedeemParams] = [ + IbetStraightBondRedeemParams( + account_address=batch_data.account_address, + amount=batch_data.amount, + ) + for batch_data in batch_data_list + ] + tx_hash = await IbetStraightBondContract( + upload.token_address + ).bulk_redeem( + data=tx_data, + tx_from=upload.issuer_address, + private_key=issuer_pk, + ) + elif upload.token_type == TokenType.IBET_SHARE.value: + if ( + upload.category + == BatchIssueRedeemProcessingCategory.ISSUE.value + ): + tx_data: list[IbetShareAdditionalIssueParams] = [ + IbetShareAdditionalIssueParams( + account_address=batch_data.account_address, + amount=batch_data.amount, + ) + for batch_data in batch_data_list + ] + tx_hash = await IbetShareContract( + upload.token_address + ).bulk_additional_issue( + data=tx_data, + tx_from=upload.issuer_address, + private_key=issuer_pk, + ) + elif ( + upload.category + == BatchIssueRedeemProcessingCategory.REDEEM.value + ): + tx_data: list[IbetShareRedeemParams] = [ + IbetShareRedeemParams( + account_address=batch_data.account_address, + amount=batch_data.amount, + ) + for batch_data in batch_data_list + ] + tx_hash = await IbetShareContract( + upload.token_address + ).bulk_redeem( + data=tx_data, + tx_from=upload.issuer_address, + private_key=issuer_pk, + ) + + # Update status + LOG.debug(f"Transaction sent successfully: {tx_hash}") + for batch_data in batch_data_list: + batch_data.status = 1 + except ContractRevertError as e: + LOG.warning( + f"Transaction reverted: upload_id=<{upload.upload_id}> error_code:<{e.code}> error_msg:<{e.message}>" + ) + for batch_data in batch_data_list: + batch_data.status = 2 + except SendTransactionError: + LOG.warning(f"Failed to send transaction: {tx_hash}") + for batch_data in batch_data_list: + batch_data.status = 2 + finally: + await db_session.commit() # commit per each bulk transaction + @staticmethod async def __sink_on_notification( db_session: AsyncSession, diff --git a/batch/processor_bulk_transfer.py b/batch/processor_bulk_transfer.py index 81b228b4..a726e102 100644 --- a/batch/processor_bulk_transfer.py +++ b/batch/processor_bulk_transfer.py @@ -35,21 +35,16 @@ ServiceUnavailableError, ) from app.model.blockchain import IbetShareContract, IbetStraightBondContract -from app.model.blockchain.tx_params.ibet_share import ( - BulkTransferParams as IbetShareBulkTransferParams, - TransferParams as IbetShareTransferParams, -) -from app.model.blockchain.tx_params.ibet_straight_bond import ( - BulkTransferParams as IbetStraightBondBulkTransferParams, - TransferParams as IbetStraightBondTransferParams, -) +from app.model.blockchain.tx_params.ibet_security_token import ForcedTransferParams from app.model.db import ( Account, BulkTransfer, BulkTransferUpload, Notification, NotificationType, + Token, TokenType, + TokenVersion, ) from app.utils.asyncio_utils import SemaphoreTaskGroup from app.utils.e2ee_utils import E2EEUtils @@ -59,6 +54,7 @@ BULK_TRANSFER_INTERVAL, BULK_TRANSFER_WORKER_COUNT, BULK_TRANSFER_WORKER_LOT_SIZE, + BULK_TX_LOT_SIZE, ) """ @@ -86,7 +82,10 @@ async def process(self): if len(upload_list) < 1: return - for _upload in upload_list: + for _d in upload_list: + _upload = _d[0] + _token_version = _d[1] + LOG.info( f"<{self.worker_num}> Process start: upload_id={_upload.upload_id}" ) @@ -147,49 +146,37 @@ async def process(self): continue # Transfer + # - ~v24.6: Forced transfer individually + # - v24.9~: Bulk forced transfer transfer_list = await self.__get_transfer_data( db_session=db_session, upload_id=_upload.upload_id, status=0 ) - if _upload.transaction_compression is True: + if ( + _token_version is not None + and _token_version >= TokenVersion.V_24_09 + ): # Split the original transfer list into sub-lists chunked_transfer_list: list[list[BulkTransfer]] = list( - self.__split_list(list(transfer_list), 100) + self.__split_list(list(transfer_list), BULK_TX_LOT_SIZE) ) - # Execute bulkTransfer for each sub-list + # Execute bulk forced transfer for each sub-list for _transfer_list in chunked_transfer_list: - _token_type = _transfer_list[0].token_type - _token_addr = _transfer_list[0].token_address - _from_addr = _transfer_list[0].from_address - - _to_addr_list = [] - _amount_list = [] - for _transfer in _transfer_list: - _to_addr_list.append(_transfer.to_address) - _amount_list.append(_transfer.amount) - try: - if _token_type == TokenType.IBET_SHARE.value: - _transfer_data = IbetShareBulkTransferParams( - to_address_list=_to_addr_list, - amount_list=_amount_list, - ) - await IbetShareContract(_token_addr).bulk_transfer( - data=_transfer_data, - tx_from=_from_addr, - private_key=private_key, - ) - elif _token_type == TokenType.IBET_STRAIGHT_BOND.value: - _transfer_data = IbetStraightBondBulkTransferParams( - to_address_list=_to_addr_list, - amount_list=_amount_list, - ) - await IbetStraightBondContract( - _token_addr - ).bulk_transfer( - data=_transfer_data, - tx_from=_from_addr, - private_key=private_key, + _transfer_data_list = [ + ForcedTransferParams( + from_address=_transfer.from_address, + to_address=_transfer.to_address, + amount=_transfer.amount, ) + for _transfer in _transfer_list + ] + await self.__bulk_forced_transfer( + token_address=_upload.token_address, + token_type=_upload.token_type, + transfer_data_list=_transfer_data_list, + tx_from=_upload.issuer_address, + tx_from_pk=private_key, + ) for _transfer in _transfer_list: await self.__sink_on_finish_transfer_process( db_session=db_session, @@ -221,34 +208,20 @@ async def process(self): await db_session.commit() else: for _transfer in transfer_list: - token = { - "token_address": _transfer.token_address, - "from_address": _transfer.from_address, - "to_address": _transfer.to_address, - "amount": _transfer.amount, - } + # Execute bulk forced transfer try: - if _transfer.token_type == TokenType.IBET_SHARE.value: - _transfer_data = IbetShareTransferParams(**token) - await IbetShareContract( - _transfer.token_address - ).transfer( - data=_transfer_data, - tx_from=_transfer.issuer_address, - private_key=private_key, - ) - elif ( - _transfer.token_type - == TokenType.IBET_STRAIGHT_BOND.value - ): - _transfer_data = IbetStraightBondTransferParams(**token) - await IbetStraightBondContract( - _transfer.token_address - ).transfer( - data=_transfer_data, - tx_from=_transfer.issuer_address, - private_key=private_key, - ) + _transfer_data = ForcedTransferParams( + from_address=_transfer.from_address, + to_address=_transfer.to_address, + amount=_transfer.amount, + ) + await self.__forced_transfer( + token_address=_transfer.token_address, + token_type=_transfer.token_type, + transfer_data=_transfer_data, + tx_from=_upload.issuer_address, + tx_from_pk=private_key, + ) await self.__sink_on_finish_transfer_process( db_session=db_session, record_id=_transfer.id, status=1 ) @@ -311,7 +284,9 @@ async def process(self): finally: await db_session.close() - async def __get_uploads(self, db_session: AsyncSession) -> List[BulkTransferUpload]: + async def __get_uploads( + self, db_session: AsyncSession + ) -> list[tuple[BulkTransferUpload, TokenVersion]]: # NOTE: # - Only one issuer can be processed in the same thread. # - The maximum number of uploads that can be processed in one batch cycle is the number defined by BULK_TRANSFER_WORKER_LOT_SIZE. @@ -329,66 +304,111 @@ async def __get_uploads(self, db_session: AsyncSession) -> List[BulkTransferUplo # Retrieve one target data # NOTE: Priority is given to issuers that are not being processed by other threads. - upload_1: BulkTransferUpload | None = ( - await db_session.scalars( - select(BulkTransferUpload) - .where( - and_( - BulkTransferUpload.upload_id.notin_(locked_update_id), - BulkTransferUpload.status == 0, - BulkTransferUpload.issuer_address.notin_(exclude_issuer), + upload_1: tuple[BulkTransferUpload, TokenVersion | None] | None = ( + ( + await db_session.execute( + select(BulkTransferUpload, Token.version) + .outerjoin( + Token, + and_( + BulkTransferUpload.issuer_address + == Token.issuer_address, + BulkTransferUpload.token_address == Token.token_address, + ), ) - ) - .order_by(BulkTransferUpload.created) - .limit(1) - ) - ).first() - if upload_1 is None: - # If there are no targets, then all issuers will be retrieved. - upload_1: BulkTransferUpload | None = ( - await db_session.scalars( - select(BulkTransferUpload) .where( and_( BulkTransferUpload.upload_id.notin_(locked_update_id), BulkTransferUpload.status == 0, + BulkTransferUpload.issuer_address.notin_( + exclude_issuer + ), + BulkTransferUpload.token_address != None, ) ) .order_by(BulkTransferUpload.created) .limit(1) ) - ).first() + ) + .tuples() + .first() + ) + if upload_1 is None: + # If there are no targets, then all issuers will be retrieved. + upload_1: tuple[BulkTransferUpload, TokenVersion | None] | None = ( + ( + await db_session.execute( + select(BulkTransferUpload, Token.version) + .outerjoin( + Token, + and_( + BulkTransferUpload.issuer_address + == Token.issuer_address, + BulkTransferUpload.token_address + == Token.token_address, + ), + ) + .where( + and_( + BulkTransferUpload.upload_id.notin_( + locked_update_id + ), + BulkTransferUpload.status == 0, + BulkTransferUpload.token_address != None, + ) + ) + .order_by(BulkTransferUpload.created) + .limit(1) + ) + ) + .tuples() + .first() + ) # Issuer to be processed => upload_1.issuer_address # Retrieve the data of the Issuer to be processed - upload_list = [] + upload_list: list[tuple[BulkTransferUpload, TokenVersion | None]] = [] if upload_1 is not None: upload_list = [upload_1] if BULK_TRANSFER_WORKER_LOT_SIZE > 1: upload_list += ( - await db_session.scalars( - select(BulkTransferUpload) - .where( - and_( - BulkTransferUpload.upload_id.notin_( - locked_update_id + ( + await db_session.execute( + select(BulkTransferUpload, Token.version) + .outerjoin( + Token, + and_( + BulkTransferUpload.issuer_address + == Token.issuer_address, + BulkTransferUpload.token_address + == Token.token_address, ), - BulkTransferUpload.status == 0, - BulkTransferUpload.issuer_address - == upload_1.issuer_address, ) + .where( + and_( + BulkTransferUpload.upload_id.notin_( + locked_update_id + ), + BulkTransferUpload.status == 0, + BulkTransferUpload.issuer_address + == upload_1[0].issuer_address, + BulkTransferUpload.token_address != None, + ) + ) + .order_by(BulkTransferUpload.created) + .offset(1) + .limit(BULK_TRANSFER_WORKER_LOT_SIZE - 1) ) - .order_by(BulkTransferUpload.created) - .offset(1) - .limit(BULK_TRANSFER_WORKER_LOT_SIZE - 1) ) - ).all() + .tuples() + .all() + ) processing_issuer[self.worker_num] = {} for upload in upload_list: - processing_issuer[self.worker_num][ - upload.upload_id - ] = upload.issuer_address + processing_issuer[self.worker_num][upload[0].upload_id] = upload[ + 0 + ].issuer_address return upload_list @staticmethod @@ -418,6 +438,55 @@ async def __release_processing_issuer(self, upload_id): async with lock: processing_issuer[self.worker_num].pop(upload_id, None) + @staticmethod + async def __bulk_forced_transfer( + token_address: str, + token_type: str, + transfer_data_list: list[ForcedTransferParams], + tx_from: str, + tx_from_pk: bytes, + ): + """ + Bulk forced transfer + - Forced transfers in batch + """ + if token_type == TokenType.IBET_SHARE.value: + await IbetShareContract(token_address).bulk_forced_transfer( + data=transfer_data_list, + tx_from=tx_from, + private_key=tx_from_pk, + ) + elif token_type == TokenType.IBET_STRAIGHT_BOND.value: + await IbetStraightBondContract(token_address).bulk_forced_transfer( + data=transfer_data_list, + tx_from=tx_from, + private_key=tx_from_pk, + ) + + @staticmethod + async def __forced_transfer( + token_address: str, + token_type: str, + transfer_data: ForcedTransferParams, + tx_from: str, + tx_from_pk: bytes, + ): + """ + Forced transfer individually + """ + if token_type == TokenType.IBET_SHARE.value: + await IbetShareContract(token_address).forced_transfer( + data=transfer_data, + tx_from=tx_from, + private_key=tx_from_pk, + ) + elif token_type == TokenType.IBET_STRAIGHT_BOND.value: + await IbetStraightBondContract(token_address).forced_transfer( + data=transfer_data, + tx_from=tx_from, + private_key=tx_from_pk, + ) + @staticmethod async def __sink_on_finish_upload_process( db_session: AsyncSession, upload_id: str, status: int diff --git a/config.py b/config.py index 035daf16..f0936bfa 100644 --- a/config.py +++ b/config.py @@ -175,7 +175,10 @@ #################################################### # Batch settings #################################################### + +# ============================= # Indexer +# ============================= INDEXER_SYNC_INTERVAL = 10 INDEXER_BLOCK_LOT_MAX_SIZE = ( int(os.environ.get("INDEXER_BLOCK_LOT_MAX_SIZE")) @@ -183,7 +186,17 @@ else 1000000 ) +# ============================= # Processor +# ============================= + +# Bulk Tx +BULK_TX_LOT_SIZE = ( + int(os.environ.get("BULK_TX_LOT_SIZE")) + if os.environ.get("BULK_TX_LOT_SIZE") + else 100 +) + # Bulk Transfer BULK_TRANSFER_INTERVAL = ( int(os.environ.get("BULK_TRANSFER_INTERVAL")) diff --git a/contracts/ContractRegistry.json b/contracts/ContractRegistry.json index 938e8cac..58c409bb 100644 --- a/contracts/ContractRegistry.json +++ b/contracts/ContractRegistry.json @@ -119,6 +119,6 @@ "type": "function" } ], - "bytecode": "608060405234801561001057600080fd5b5060008054600160a060020a03191633179055610850806100326000396000f3fe608060405234801561001057600080fd5b5060043610610068577c0100000000000000000000000000000000000000000000000000000000600035046332434a2e811461006d5780638da5cb5b14610095578063f2fde38b146100c0578063f971d77c146100d5575b600080fd5b61008061007b366004610529565b6100f6565b60405190151581526020015b60405180910390f35b6000546100a890600160a060020a031681565b604051600160a060020a03909116815260200161008c565b6100d36100ce3660046105ed565b6102e7565b005b6100e86100e33660046105ed565b610412565b60405161008c929190610657565b60408051808201909152600681527f36303030303100000000000000000000000000000000000000000000000000006020820152600090833b908161015a5760405160e560020a62461bcd0281526004016101519190610682565b60405180910390fd5b5083600160a060020a0316638da5cb5b6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381865afa1580156101b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101d99190610695565b600160a060020a031633600160a060020a0316146040518060400160405280600681526020017f3630303030320000000000000000000000000000000000000000000000000000815250906102445760405160e560020a62461bcd0281526004016101519190610682565b50600160a060020a03841660009081526001602052604090206102678482610754565b50600160a060020a03841660008181526001602081905260409182902001805473ffffffffffffffffffffffffffffffffffffffff19163390811790915590517fcf03e589fffdb277541bdb1081311cf33c0f187d0ad83db9a91ea2a1bffbbf04916102d591879190610657565b60405180910390a25060019392505050565b60005460408051808201909152600681527f3530303030310000000000000000000000000000000000000000000000000000602082015290600160a060020a0316331461034a5760405160e560020a62461bcd0281526004016101519190610682565b5060408051808201909152600681527f35303031303100000000000000000000000000000000000000000000000000006020820152600160a060020a0382166103a95760405160e560020a62461bcd0281526004016101519190610682565b5060008054604051600160a060020a03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600160a060020a03811660009081526001602052604081208054606092919061043a906106b2565b80601f0160208091040260200160405190810160405280929190818152602001828054610466906106b2565b80156104b35780601f10610488576101008083540402835291602001916104b3565b820191906000526020600020905b81548152906001019060200180831161049657829003601f168201915b50505050600160a060020a03948516600090815260016020819052604090912001549195919094169350915050565b600160a060020a03811681146104f757600080fd5b50565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806040838503121561053c57600080fd5b8235610547816104e2565b9150602083013567ffffffffffffffff8082111561056457600080fd5b818501915085601f83011261057857600080fd5b81358181111561058a5761058a6104fa565b604051601f8201601f19908116603f011681019083821181831017156105b2576105b26104fa565b816040528281528860208487010111156105cb57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b6000602082840312156105ff57600080fd5b813561060a816104e2565b9392505050565b6000815180845260005b818110156106375760208185018101518683018201520161061b565b506000602082860101526020601f19601f83011685010191505092915050565b60408152600061066a6040830185610611565b9050600160a060020a03831660208301529392505050565b60208152600061060a6020830184610611565b6000602082840312156106a757600080fd5b815161060a816104e2565b6002810460018216806106c657607f821691505b6020821081036106ff577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b601f82111561074f576000818152602081206020601f8601048101602086101561072c5750805b6020601f860104820191505b8181101561074b57828155600101610738565b5050505b505050565b815167ffffffffffffffff81111561076e5761076e6104fa565b6107828161077c84546106b2565b84610705565b602080601f8311600181146107bb576000841561079f5750858301515b60028086026008870290910a600019041982161786555061074b565b600085815260208120601f198616915b828110156107ea578886015182559484019460019091019084016107cb565b508582101561080a57878501516008601f88160260020a60001904191681555b505050505060020260010190555056fea2646970667358221220ce124b084a9ee22f9508a848e878b5a80dfc0c49cbf77041b33d20ccd3d44cbf64736f6c63430008110033", - "deployedBytecode": "608060405234801561001057600080fd5b5060043610610068577c0100000000000000000000000000000000000000000000000000000000600035046332434a2e811461006d5780638da5cb5b14610095578063f2fde38b146100c0578063f971d77c146100d5575b600080fd5b61008061007b366004610529565b6100f6565b60405190151581526020015b60405180910390f35b6000546100a890600160a060020a031681565b604051600160a060020a03909116815260200161008c565b6100d36100ce3660046105ed565b6102e7565b005b6100e86100e33660046105ed565b610412565b60405161008c929190610657565b60408051808201909152600681527f36303030303100000000000000000000000000000000000000000000000000006020820152600090833b908161015a5760405160e560020a62461bcd0281526004016101519190610682565b60405180910390fd5b5083600160a060020a0316638da5cb5b6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381865afa1580156101b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101d99190610695565b600160a060020a031633600160a060020a0316146040518060400160405280600681526020017f3630303030320000000000000000000000000000000000000000000000000000815250906102445760405160e560020a62461bcd0281526004016101519190610682565b50600160a060020a03841660009081526001602052604090206102678482610754565b50600160a060020a03841660008181526001602081905260409182902001805473ffffffffffffffffffffffffffffffffffffffff19163390811790915590517fcf03e589fffdb277541bdb1081311cf33c0f187d0ad83db9a91ea2a1bffbbf04916102d591879190610657565b60405180910390a25060019392505050565b60005460408051808201909152600681527f3530303030310000000000000000000000000000000000000000000000000000602082015290600160a060020a0316331461034a5760405160e560020a62461bcd0281526004016101519190610682565b5060408051808201909152600681527f35303031303100000000000000000000000000000000000000000000000000006020820152600160a060020a0382166103a95760405160e560020a62461bcd0281526004016101519190610682565b5060008054604051600160a060020a03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600160a060020a03811660009081526001602052604081208054606092919061043a906106b2565b80601f0160208091040260200160405190810160405280929190818152602001828054610466906106b2565b80156104b35780601f10610488576101008083540402835291602001916104b3565b820191906000526020600020905b81548152906001019060200180831161049657829003601f168201915b50505050600160a060020a03948516600090815260016020819052604090912001549195919094169350915050565b600160a060020a03811681146104f757600080fd5b50565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806040838503121561053c57600080fd5b8235610547816104e2565b9150602083013567ffffffffffffffff8082111561056457600080fd5b818501915085601f83011261057857600080fd5b81358181111561058a5761058a6104fa565b604051601f8201601f19908116603f011681019083821181831017156105b2576105b26104fa565b816040528281528860208487010111156105cb57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b6000602082840312156105ff57600080fd5b813561060a816104e2565b9392505050565b6000815180845260005b818110156106375760208185018101518683018201520161061b565b506000602082860101526020601f19601f83011685010191505092915050565b60408152600061066a6040830185610611565b9050600160a060020a03831660208301529392505050565b60208152600061060a6020830184610611565b6000602082840312156106a757600080fd5b815161060a816104e2565b6002810460018216806106c657607f821691505b6020821081036106ff577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b601f82111561074f576000818152602081206020601f8601048101602086101561072c5750805b6020601f860104820191505b8181101561074b57828155600101610738565b5050505b505050565b815167ffffffffffffffff81111561076e5761076e6104fa565b6107828161077c84546106b2565b84610705565b602080601f8311600181146107bb576000841561079f5750858301515b60028086026008870290910a600019041982161786555061074b565b600085815260208120601f198616915b828110156107ea578886015182559484019460019091019084016107cb565b508582101561080a57878501516008601f88160260020a60001904191681555b505050505060020260010190555056fea2646970667358221220ce124b084a9ee22f9508a848e878b5a80dfc0c49cbf77041b33d20ccd3d44cbf64736f6c63430008110033" + "bytecode": "608060405234801561001057600080fd5b50600080546001600160a01b0319163317905561075f806100326000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c806332434a2e146100515780638da5cb5b14610079578063f2fde38b146100a4578063f971d77c146100b9575b600080fd5b61006461005f366004610456565b6100da565b60405190151581526020015b60405180910390f35b60005461008c906001600160a01b031681565b6040516001600160a01b039091168152602001610070565b6100b76100b236600461051a565b61026e565b005b6100cc6100c736600461051a565b610358565b604051610070929190610584565b60408051808201909152600681526536303030303160d01b6020820152600090833b90816101245760405162461bcd60e51b815260040161011b91906105ae565b60405180910390fd5b50836001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610163573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061018791906105c1565b6001600160a01b0316336001600160a01b031614604051806040016040528060068152602001651b181818181960d11b815250906101d85760405162461bcd60e51b815260040161011b91906105ae565b506001600160a01b03841660009081526001602052604090206101fb8482610669565b506001600160a01b0384166000818152600160208190526040918290200180546001600160a01b0319163390811790915590517fcf03e589fffdb277541bdb1081311cf33c0f187d0ad83db9a91ea2a1bffbbf049161025c91879190610584565b60405180910390a25060019392505050565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b031633146102b75760405162461bcd60e51b815260040161011b91906105ae565b5060408051808201909152600681526535303031303160d01b60208201526001600160a01b0382166102fc5760405162461bcd60e51b815260040161011b91906105ae565b50600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038116600090815260016020526040812080546060929190610380906105de565b80601f01602080910402602001604051908101604052809291908181526020018280546103ac906105de565b80156103f95780601f106103ce576101008083540402835291602001916103f9565b820191906000526020600020905b8154815290600101906020018083116103dc57829003601f168201915b505050506001600160a01b03948516600090815260016020819052604090912001549195919094169350915050565b6001600160a01b038116811461043d57600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561046957600080fd5b823561047481610428565b9150602083013567ffffffffffffffff8082111561049157600080fd5b818501915085601f8301126104a557600080fd5b8135818111156104b7576104b7610440565b604051601f8201601f19908116603f011681019083821181831017156104df576104df610440565b816040528281528860208487010111156104f857600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60006020828403121561052c57600080fd5b813561053781610428565b9392505050565b6000815180845260005b8181101561056457602081850181015186830182015201610548565b506000602082860101526020601f19601f83011685010191505092915050565b604081526000610597604083018561053e565b905060018060a01b03831660208301529392505050565b602081526000610537602083018461053e565b6000602082840312156105d357600080fd5b815161053781610428565b600181811c908216806105f257607f821691505b60208210810361061257634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115610664576000816000526020600020601f850160051c810160208610156106415750805b601f850160051c820191505b818110156106605782815560010161064d565b5050505b505050565b815167ffffffffffffffff81111561068357610683610440565b6106978161069184546105de565b84610618565b602080601f8311600181146106cc57600084156106b45750858301515b600019600386901b1c1916600185901b178555610660565b600085815260208120601f198616915b828110156106fb578886015182559484019460019091019084016106dc565b50858210156107195787850151600019600388901b60f8161c191681555b5050505050600190811b0190555056fea2646970667358221220c16a4771ed109c044e372574db06fb12e6d313647dbc6f39ef885c028947a44f64736f6c63430008170033", + "deployedBytecode": "608060405234801561001057600080fd5b506004361061004c5760003560e01c806332434a2e146100515780638da5cb5b14610079578063f2fde38b146100a4578063f971d77c146100b9575b600080fd5b61006461005f366004610456565b6100da565b60405190151581526020015b60405180910390f35b60005461008c906001600160a01b031681565b6040516001600160a01b039091168152602001610070565b6100b76100b236600461051a565b61026e565b005b6100cc6100c736600461051a565b610358565b604051610070929190610584565b60408051808201909152600681526536303030303160d01b6020820152600090833b90816101245760405162461bcd60e51b815260040161011b91906105ae565b60405180910390fd5b50836001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610163573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061018791906105c1565b6001600160a01b0316336001600160a01b031614604051806040016040528060068152602001651b181818181960d11b815250906101d85760405162461bcd60e51b815260040161011b91906105ae565b506001600160a01b03841660009081526001602052604090206101fb8482610669565b506001600160a01b0384166000818152600160208190526040918290200180546001600160a01b0319163390811790915590517fcf03e589fffdb277541bdb1081311cf33c0f187d0ad83db9a91ea2a1bffbbf049161025c91879190610584565b60405180910390a25060019392505050565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b031633146102b75760405162461bcd60e51b815260040161011b91906105ae565b5060408051808201909152600681526535303031303160d01b60208201526001600160a01b0382166102fc5760405162461bcd60e51b815260040161011b91906105ae565b50600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038116600090815260016020526040812080546060929190610380906105de565b80601f01602080910402602001604051908101604052809291908181526020018280546103ac906105de565b80156103f95780601f106103ce576101008083540402835291602001916103f9565b820191906000526020600020905b8154815290600101906020018083116103dc57829003601f168201915b505050506001600160a01b03948516600090815260016020819052604090912001549195919094169350915050565b6001600160a01b038116811461043d57600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561046957600080fd5b823561047481610428565b9150602083013567ffffffffffffffff8082111561049157600080fd5b818501915085601f8301126104a557600080fd5b8135818111156104b7576104b7610440565b604051601f8201601f19908116603f011681019083821181831017156104df576104df610440565b816040528281528860208487010111156104f857600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60006020828403121561052c57600080fd5b813561053781610428565b9392505050565b6000815180845260005b8181101561056457602081850181015186830182015201610548565b506000602082860101526020601f19601f83011685010191505092915050565b604081526000610597604083018561053e565b905060018060a01b03831660208301529392505050565b602081526000610537602083018461053e565b6000602082840312156105d357600080fd5b815161053781610428565b600181811c908216806105f257607f821691505b60208210810361061257634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115610664576000816000526020600020601f850160051c810160208610156106415750805b601f850160051c820191505b818110156106605782815560010161064d565b5050505b505050565b815167ffffffffffffffff81111561068357610683610440565b6106978161069184546105de565b84610618565b602080601f8311600181146106cc57600084156106b45750858301515b600019600386901b1c1916600185901b178555610660565b600085815260208120601f198616915b828110156106fb578886015182559484019460019091019084016106dc565b50858210156107195787850151600019600388901b60f8161c191681555b5050505050600190811b0190555056fea2646970667358221220c16a4771ed109c044e372574db06fb12e6d313647dbc6f39ef885c028947a44f64736f6c63430008170033" } \ No newline at end of file diff --git a/contracts/DVPStorage.json b/contracts/DVPStorage.json index 62e7d3ed..6492856b 100644 --- a/contracts/DVPStorage.json +++ b/contracts/DVPStorage.json @@ -330,6 +330,6 @@ "type": "function" } ], - "bytecode": "6080604052600060055534801561001557600080fd5b50600080546001600160a01b0319163317905561086b806100376000396000f3fe608060405234801561001057600080fd5b50600436106100cf5760003560e01c8063d04c23af1161008c578063de8211a911610066578063de8211a914610215578063ecf89597146102c3578063f2fde38b146102d6578063fd44b92e146102e957600080fd5b8063d04c23af146101b4578063d28eb963146101c7578063d4fac45d146101dc57600080fd5b8063097d9012146100d45780638da5cb5b1461012057806399933b331461014b578063adb6f63f14610153578063b5c9cbbe1461017e578063c07f47d4146101a1575b600080fd5b61010d6100e23660046106a3565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b6040519081526020015b60405180910390f35b600054610133906001600160a01b031681565b6040516001600160a01b039091168152602001610117565b60055461010d565b61010d6101613660046106a3565b600360209081526000928352604080842090915290825290205481565b61019161018c3660046106d6565b6102fc565b6040519015158152602001610117565b600154610133906001600160a01b031681565b6101916101c23660046106d6565b610381565b6101da6101d5366004610712565b6103fd565b005b61010d6101ea3660046106a3565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b610278610223366004610734565b6000908152600460208190526040909120805460018201546002830154600384015493909401546001600160a01b0392831695918316948316939281169160ff600160a01b8304811692600160a81b90041690565b604080516001600160a01b0398891681529688166020880152948716948601949094526060850192909252909316608083015291151560a082015290151560c082015260e001610117565b6101da6102d136600461075d565b610469565b6101da6102e4366004610712565b61054e565b6101da6102f7366004610734565b610638565b60015460408051808201909152600681526532353030303160d01b60208201526000916001600160a01b031633146103505760405162461bcd60e51b815260040161034791906107e6565b60405180910390fd5b50506001600160a01b0392831660009081526002602090815260408083209490951682529290925291902055600190565b60015460408051808201909152600681526532353030303160d01b60208201526000916001600160a01b031633146103cc5760405162461bcd60e51b815260040161034791906107e6565b50506001600160a01b0392831660009081526003602090815260408083209490951682529290925291902055600190565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b031633146104465760405162461bcd60e51b815260040161034791906107e6565b50600180546001600160a01b0319166001600160a01b0392909216919091179055565b60015460408051808201909152600681526532353030303160d01b6020820152906001600160a01b031633146104b25760405162461bcd60e51b815260040161034791906107e6565b50600097885260046020819052604090982080546001600160a01b039889166001600160a01b0319918216178255600182018054988a169882169890981790975560028101805496891696909716959095179095556003840192909255919094018054921515600160a81b0260ff60a81b19951515600160a01b026001600160a81b031990941692909416919091179190911792909216179055565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b031633146105975760405162461bcd60e51b815260040161034791906107e6565b5060408051808201909152600681526535303031303160d01b60208201526001600160a01b0382166105dc5760405162461bcd60e51b815260040161034791906107e6565b50600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60015460408051808201909152600681526532353030303160d01b6020820152906001600160a01b031633146106815760405162461bcd60e51b815260040161034791906107e6565b50600555565b80356001600160a01b038116811461069e57600080fd5b919050565b600080604083850312156106b657600080fd5b6106bf83610687565b91506106cd60208401610687565b90509250929050565b6000806000606084860312156106eb57600080fd5b6106f484610687565b925061070260208501610687565b9150604084013590509250925092565b60006020828403121561072457600080fd5b61072d82610687565b9392505050565b60006020828403121561074657600080fd5b5035919050565b8035801515811461069e57600080fd5b600080600080600080600080610100898b03121561077a57600080fd5b8835975061078a60208a01610687565b965061079860408a01610687565b95506107a660608a01610687565b9450608089013593506107bb60a08a01610687565b92506107c960c08a0161074d565b91506107d760e08a0161074d565b90509295985092959890939650565b60006020808352835180602085015260005b81811015610814578581018301518582016040015282016107f8565b506000604082860101526040601f19601f830116850101925050509291505056fea26469706673582212204889423730a418bf1a26edf713979d543ae8c11a38568eeecfa7ddf5920b0f9664736f6c63430008170033", - "deployedBytecode": "608060405234801561001057600080fd5b50600436106100cf5760003560e01c8063d04c23af1161008c578063de8211a911610066578063de8211a914610215578063ecf89597146102c3578063f2fde38b146102d6578063fd44b92e146102e957600080fd5b8063d04c23af146101b4578063d28eb963146101c7578063d4fac45d146101dc57600080fd5b8063097d9012146100d45780638da5cb5b1461012057806399933b331461014b578063adb6f63f14610153578063b5c9cbbe1461017e578063c07f47d4146101a1575b600080fd5b61010d6100e23660046106a3565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b6040519081526020015b60405180910390f35b600054610133906001600160a01b031681565b6040516001600160a01b039091168152602001610117565b60055461010d565b61010d6101613660046106a3565b600360209081526000928352604080842090915290825290205481565b61019161018c3660046106d6565b6102fc565b6040519015158152602001610117565b600154610133906001600160a01b031681565b6101916101c23660046106d6565b610381565b6101da6101d5366004610712565b6103fd565b005b61010d6101ea3660046106a3565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b610278610223366004610734565b6000908152600460208190526040909120805460018201546002830154600384015493909401546001600160a01b0392831695918316948316939281169160ff600160a01b8304811692600160a81b90041690565b604080516001600160a01b0398891681529688166020880152948716948601949094526060850192909252909316608083015291151560a082015290151560c082015260e001610117565b6101da6102d136600461075d565b610469565b6101da6102e4366004610712565b61054e565b6101da6102f7366004610734565b610638565b60015460408051808201909152600681526532353030303160d01b60208201526000916001600160a01b031633146103505760405162461bcd60e51b815260040161034791906107e6565b60405180910390fd5b50506001600160a01b0392831660009081526002602090815260408083209490951682529290925291902055600190565b60015460408051808201909152600681526532353030303160d01b60208201526000916001600160a01b031633146103cc5760405162461bcd60e51b815260040161034791906107e6565b50506001600160a01b0392831660009081526003602090815260408083209490951682529290925291902055600190565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b031633146104465760405162461bcd60e51b815260040161034791906107e6565b50600180546001600160a01b0319166001600160a01b0392909216919091179055565b60015460408051808201909152600681526532353030303160d01b6020820152906001600160a01b031633146104b25760405162461bcd60e51b815260040161034791906107e6565b50600097885260046020819052604090982080546001600160a01b039889166001600160a01b0319918216178255600182018054988a169882169890981790975560028101805496891696909716959095179095556003840192909255919094018054921515600160a81b0260ff60a81b19951515600160a01b026001600160a81b031990941692909416919091179190911792909216179055565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b031633146105975760405162461bcd60e51b815260040161034791906107e6565b5060408051808201909152600681526535303031303160d01b60208201526001600160a01b0382166105dc5760405162461bcd60e51b815260040161034791906107e6565b50600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60015460408051808201909152600681526532353030303160d01b6020820152906001600160a01b031633146106815760405162461bcd60e51b815260040161034791906107e6565b50600555565b80356001600160a01b038116811461069e57600080fd5b919050565b600080604083850312156106b657600080fd5b6106bf83610687565b91506106cd60208401610687565b90509250929050565b6000806000606084860312156106eb57600080fd5b6106f484610687565b925061070260208501610687565b9150604084013590509250925092565b60006020828403121561072457600080fd5b61072d82610687565b9392505050565b60006020828403121561074657600080fd5b5035919050565b8035801515811461069e57600080fd5b600080600080600080600080610100898b03121561077a57600080fd5b8835975061078a60208a01610687565b965061079860408a01610687565b95506107a660608a01610687565b9450608089013593506107bb60a08a01610687565b92506107c960c08a0161074d565b91506107d760e08a0161074d565b90509295985092959890939650565b60006020808352835180602085015260005b81811015610814578581018301518582016040015282016107f8565b506000604082860101526040601f19601f830116850101925050509291505056fea26469706673582212204889423730a418bf1a26edf713979d543ae8c11a38568eeecfa7ddf5920b0f9664736f6c63430008170033" + "bytecode": "6080604052600060055534801561001557600080fd5b50600080546001600160a01b0319163317905561086b806100376000396000f3fe608060405234801561001057600080fd5b50600436106100cf5760003560e01c8063d04c23af1161008c578063de8211a911610066578063de8211a914610215578063ecf89597146102c3578063f2fde38b146102d6578063fd44b92e146102e957600080fd5b8063d04c23af146101b4578063d28eb963146101c7578063d4fac45d146101dc57600080fd5b8063097d9012146100d45780638da5cb5b1461012057806399933b331461014b578063adb6f63f14610153578063b5c9cbbe1461017e578063c07f47d4146101a1575b600080fd5b61010d6100e23660046106a3565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b6040519081526020015b60405180910390f35b600054610133906001600160a01b031681565b6040516001600160a01b039091168152602001610117565b60055461010d565b61010d6101613660046106a3565b600360209081526000928352604080842090915290825290205481565b61019161018c3660046106d6565b6102fc565b6040519015158152602001610117565b600154610133906001600160a01b031681565b6101916101c23660046106d6565b610381565b6101da6101d5366004610712565b6103fd565b005b61010d6101ea3660046106a3565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b610278610223366004610734565b6000908152600460208190526040909120805460018201546002830154600384015493909401546001600160a01b0392831695918316948316939281169160ff600160a01b8304811692600160a81b90041690565b604080516001600160a01b0398891681529688166020880152948716948601949094526060850192909252909316608083015291151560a082015290151560c082015260e001610117565b6101da6102d136600461075d565b610469565b6101da6102e4366004610712565b61054e565b6101da6102f7366004610734565b610638565b60015460408051808201909152600681526532353030303160d01b60208201526000916001600160a01b031633146103505760405162461bcd60e51b815260040161034791906107e6565b60405180910390fd5b50506001600160a01b0392831660009081526002602090815260408083209490951682529290925291902055600190565b60015460408051808201909152600681526532353030303160d01b60208201526000916001600160a01b031633146103cc5760405162461bcd60e51b815260040161034791906107e6565b50506001600160a01b0392831660009081526003602090815260408083209490951682529290925291902055600190565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b031633146104465760405162461bcd60e51b815260040161034791906107e6565b50600180546001600160a01b0319166001600160a01b0392909216919091179055565b60015460408051808201909152600681526532353030303160d01b6020820152906001600160a01b031633146104b25760405162461bcd60e51b815260040161034791906107e6565b50600097885260046020819052604090982080546001600160a01b039889166001600160a01b0319918216178255600182018054988a169882169890981790975560028101805496891696909716959095179095556003840192909255919094018054921515600160a81b0260ff60a81b19951515600160a01b026001600160a81b031990941692909416919091179190911792909216179055565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b031633146105975760405162461bcd60e51b815260040161034791906107e6565b5060408051808201909152600681526535303031303160d01b60208201526001600160a01b0382166105dc5760405162461bcd60e51b815260040161034791906107e6565b50600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60015460408051808201909152600681526532353030303160d01b6020820152906001600160a01b031633146106815760405162461bcd60e51b815260040161034791906107e6565b50600555565b80356001600160a01b038116811461069e57600080fd5b919050565b600080604083850312156106b657600080fd5b6106bf83610687565b91506106cd60208401610687565b90509250929050565b6000806000606084860312156106eb57600080fd5b6106f484610687565b925061070260208501610687565b9150604084013590509250925092565b60006020828403121561072457600080fd5b61072d82610687565b9392505050565b60006020828403121561074657600080fd5b5035919050565b8035801515811461069e57600080fd5b600080600080600080600080610100898b03121561077a57600080fd5b8835975061078a60208a01610687565b965061079860408a01610687565b95506107a660608a01610687565b9450608089013593506107bb60a08a01610687565b92506107c960c08a0161074d565b91506107d760e08a0161074d565b90509295985092959890939650565b60006020808352835180602085015260005b81811015610814578581018301518582016040015282016107f8565b506000604082860101526040601f19601f830116850101925050509291505056fea26469706673582212206091dfbbb972cd99fe69a5e2de81ff8843d07619e3c610a3628b298a7d7c7fd064736f6c63430008170033", + "deployedBytecode": "608060405234801561001057600080fd5b50600436106100cf5760003560e01c8063d04c23af1161008c578063de8211a911610066578063de8211a914610215578063ecf89597146102c3578063f2fde38b146102d6578063fd44b92e146102e957600080fd5b8063d04c23af146101b4578063d28eb963146101c7578063d4fac45d146101dc57600080fd5b8063097d9012146100d45780638da5cb5b1461012057806399933b331461014b578063adb6f63f14610153578063b5c9cbbe1461017e578063c07f47d4146101a1575b600080fd5b61010d6100e23660046106a3565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b6040519081526020015b60405180910390f35b600054610133906001600160a01b031681565b6040516001600160a01b039091168152602001610117565b60055461010d565b61010d6101613660046106a3565b600360209081526000928352604080842090915290825290205481565b61019161018c3660046106d6565b6102fc565b6040519015158152602001610117565b600154610133906001600160a01b031681565b6101916101c23660046106d6565b610381565b6101da6101d5366004610712565b6103fd565b005b61010d6101ea3660046106a3565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b610278610223366004610734565b6000908152600460208190526040909120805460018201546002830154600384015493909401546001600160a01b0392831695918316948316939281169160ff600160a01b8304811692600160a81b90041690565b604080516001600160a01b0398891681529688166020880152948716948601949094526060850192909252909316608083015291151560a082015290151560c082015260e001610117565b6101da6102d136600461075d565b610469565b6101da6102e4366004610712565b61054e565b6101da6102f7366004610734565b610638565b60015460408051808201909152600681526532353030303160d01b60208201526000916001600160a01b031633146103505760405162461bcd60e51b815260040161034791906107e6565b60405180910390fd5b50506001600160a01b0392831660009081526002602090815260408083209490951682529290925291902055600190565b60015460408051808201909152600681526532353030303160d01b60208201526000916001600160a01b031633146103cc5760405162461bcd60e51b815260040161034791906107e6565b50506001600160a01b0392831660009081526003602090815260408083209490951682529290925291902055600190565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b031633146104465760405162461bcd60e51b815260040161034791906107e6565b50600180546001600160a01b0319166001600160a01b0392909216919091179055565b60015460408051808201909152600681526532353030303160d01b6020820152906001600160a01b031633146104b25760405162461bcd60e51b815260040161034791906107e6565b50600097885260046020819052604090982080546001600160a01b039889166001600160a01b0319918216178255600182018054988a169882169890981790975560028101805496891696909716959095179095556003840192909255919094018054921515600160a81b0260ff60a81b19951515600160a01b026001600160a81b031990941692909416919091179190911792909216179055565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b031633146105975760405162461bcd60e51b815260040161034791906107e6565b5060408051808201909152600681526535303031303160d01b60208201526001600160a01b0382166105dc5760405162461bcd60e51b815260040161034791906107e6565b50600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60015460408051808201909152600681526532353030303160d01b6020820152906001600160a01b031633146106815760405162461bcd60e51b815260040161034791906107e6565b50600555565b80356001600160a01b038116811461069e57600080fd5b919050565b600080604083850312156106b657600080fd5b6106bf83610687565b91506106cd60208401610687565b90509250929050565b6000806000606084860312156106eb57600080fd5b6106f484610687565b925061070260208501610687565b9150604084013590509250925092565b60006020828403121561072457600080fd5b61072d82610687565b9392505050565b60006020828403121561074657600080fd5b5035919050565b8035801515811461069e57600080fd5b600080600080600080600080610100898b03121561077a57600080fd5b8835975061078a60208a01610687565b965061079860408a01610687565b95506107a660608a01610687565b9450608089013593506107bb60a08a01610687565b92506107c960c08a0161074d565b91506107d760e08a0161074d565b90509295985092959890939650565b60006020808352835180602085015260005b81811015610814578581018301518582016040015282016107f8565b506000604082860101526040601f19601f830116850101925050509291505056fea26469706673582212206091dfbbb972cd99fe69a5e2de81ff8843d07619e3c610a3628b298a7d7c7fd064736f6c63430008170033" } \ No newline at end of file diff --git a/contracts/E2EMessaging.json b/contracts/E2EMessaging.json index 75ec3326..eafc6c87 100644 --- a/contracts/E2EMessaging.json +++ b/contracts/E2EMessaging.json @@ -324,6 +324,6 @@ "type": "function" } ], - "bytecode": "608060405234801561001057600080fd5b50610f28806100206000396000f3fe608060405234801561001057600080fd5b50600436106100bb576000357c010000000000000000000000000000000000000000000000000000000090048063857cdbb811610083578063857cdbb81461015e578063c45d9bea14610171578063de6f24bb14610184578063e0c01bfe14610197578063edc8f0d8146101aa57600080fd5b8063070e3a71146100c05780631b6e23ea146100d557806342ac87cf146101085780634e6bd1c01461011b578063670d14b21461013d575b600080fd5b6100d36100ce366004610a9f565b6101d3565b005b6100f56100e3366004610ac9565b60006020819052908152604090205481565b6040519081526020015b60405180910390f35b6100d3610116366004610ba7565b610319565b61012e610129366004610a9f565b610397565b6040516100ff93929190610c51565b61015061014b366004610ac9565b61046c565b6040516100ff929190610c83565b61015061016c366004610ac9565b610598565b61012e61017f366004610a9f565b6106dc565b6100d3610192366004610cb1565b61079a565b61012e6101a5366004610ac9565b61088f565b6100f56101b8366004610ac9565b600160a060020a031660009081526020819052604090205490565b600160a060020a03808316600090815260016020908152604080832085845282529182902080548351808501909452600684527f36313031303100000000000000000000000000000000000000000000000000009284019290925292163314610272576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102699190610cf5565b60405180910390fd5b50600160a060020a0383166000908152600160208181526040808420868552808352818520805473ffffffffffffffffffffffffffffffffffffffff1916331781558251808501909352858352948790529091529101906102d39082610daa565b50604051828152600160a060020a0384169033907f68290397e9c550791c692a43bd678e06c59bc776f6f670778d58dd4d8903f5de9060200160405180910390a3505050565b3360009081526002602052604090206103328382610daa565b5033600090815260026020526040902060010161034f8282610daa565b5033600160a060020a03167fe963a0dc3358a0b8e4c9c301f3003bfbd501c8b1ca3497838a39b6e7208d4e32838360405161038b929190610c83565b60405180910390a25050565b600160a060020a03828116600090815260016020818152604080842086855290915282208054600282015491909201805493946060948694909116929082906103df90610d08565b80601f016020809104026020016040519081016040528092919081815260200182805461040b90610d08565b80156104585780601f1061042d57610100808354040283529160200191610458565b820191906000526020600020905b81548152906001019060200180831161043b57829003601f168201915b505050505091509250925092509250925092565b60026020526000908152604090208054819061048790610d08565b80601f01602080910402602001604051908101604052809291908181526020018280546104b390610d08565b80156105005780601f106104d557610100808354040283529160200191610500565b820191906000526020600020905b8154815290600101906020018083116104e357829003601f168201915b50505050509080600101805461051590610d08565b80601f016020809104026020016040519081016040528092919081815260200182805461054190610d08565b801561058e5780601f106105635761010080835404028352916020019161058e565b820191906000526020600020905b81548152906001019060200180831161057157829003601f168201915b5050505050905082565b600160a060020a038116600090815260026020526040902080546060918291600182019082906105c790610d08565b80601f01602080910402602001604051908101604052809291908181526020018280546105f390610d08565b80156106405780601f1061061557610100808354040283529160200191610640565b820191906000526020600020905b81548152906001019060200180831161062357829003601f168201915b5050505050915080805461065390610d08565b80601f016020809104026020016040519081016040528092919081815260200182805461067f90610d08565b80156106cc5780601f106106a1576101008083540402835291602001916106cc565b820191906000526020600020905b8154815290600101906020018083116106af57829003601f168201915b5050505050905091509150915091565b6001602081815260009384526040808520909152918352912080549181018054600160a060020a039093169261071190610d08565b80601f016020809104026020016040519081016040528092919081815260200182805461073d90610d08565b801561078a5780601f1061075f5761010080835404028352916020019161078a565b820191906000526020600020905b81548152906001019060200180831161076d57829003601f168201915b5050505050908060020154905083565b600160a060020a0382166000908152600160208181526040808420848352818520805486529252808420805473ffffffffffffffffffffffffffffffffffffffff19163317905590548352909120016107f38282610daa565b50600160a060020a038216600081815260016020908152604080832083835281842080548552908352908320426002909101559282528190528154919061083983610e9f565b919050555081600160a060020a031633600160a060020a03167fdd99aef5e4fdfad84059320be40f5dc0f015dc4025f56bd4010608c6743bc22e4284604051610883929190610eb8565b60405180910390a35050565b6000606060008060008086600160a060020a0316600160a060020a0316815260200190815260200160002054116040518060400160405280600681526020017f36313030303100000000000000000000000000000000000000000000000000008152509061092a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102699190610cf5565b50600160a060020a03841660009081526001602081815260408084209184905283205490929161095991610ed9565b81526020808201929092526040908101600090812054600160a060020a038881168352600180865284842095849052938320549116939261099991610ed9565b815260208082019290925260409081016000908120600160a060020a03891682526001808552838320948390529282205490830193926109d891610ed9565b8152602001908152602001600020600201548180546109f690610d08565b80601f0160208091040260200160405190810160405280929190818152602001828054610a2290610d08565b8015610a6f5780601f10610a4457610100808354040283529160200191610a6f565b820191906000526020600020905b815481529060010190602001808311610a5257829003601f168201915b505050505091509250925092509193909250565b8035600160a060020a0381168114610a9a57600080fd5b919050565b60008060408385031215610ab257600080fd5b610abb83610a83565b946020939093013593505050565b600060208284031215610adb57600080fd5b610ae482610a83565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f830112610b2b57600080fd5b813567ffffffffffffffff80821115610b4657610b46610aeb565b604051601f8301601f19908116603f01168101908282118183101715610b6e57610b6e610aeb565b81604052838152866020858801011115610b8757600080fd5b836020870160208301376000602085830101528094505050505092915050565b60008060408385031215610bba57600080fd5b823567ffffffffffffffff80821115610bd257600080fd5b610bde86838701610b1a565b93506020850135915080821115610bf457600080fd5b50610c0185828601610b1a565b9150509250929050565b6000815180845260005b81811015610c3157602081850181015186830182015201610c15565b506000602082860101526020601f19601f83011685010191505092915050565b600160a060020a0384168152606060208201526000610c736060830185610c0b565b9050826040830152949350505050565b604081526000610c966040830185610c0b565b8281036020840152610ca88185610c0b565b95945050505050565b60008060408385031215610cc457600080fd5b610ccd83610a83565b9150602083013567ffffffffffffffff811115610ce957600080fd5b610c0185828601610b1a565b602081526000610ae46020830184610c0b565b600281046001821680610d1c57607f821691505b602082108103610d55577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b601f821115610da5576000818152602081206020601f86010481016020861015610d825750805b6020601f860104820191505b81811015610da157828155600101610d8e565b5050505b505050565b815167ffffffffffffffff811115610dc457610dc4610aeb565b610dd881610dd28454610d08565b84610d5b565b602080601f831160018114610e115760008415610df55750858301515b60028086026008870290910a6000190419821617865550610da1565b600085815260208120601f198616915b82811015610e4057888601518255948401946001909101908401610e21565b5085821015610e6057878501516008601f88160260020a60001904191681555b5050505050600202600101905550565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600060018201610eb157610eb1610e70565b5060010190565b828152604060208201526000610ed16040830184610c0b565b949350505050565b81810381811115610eec57610eec610e70565b9291505056fea26469706673582212206a96bb261ac7dbc37a479034ce863817d48a37808383c088339c0d659cb44a3064736f6c63430008110033", - "deployedBytecode": "608060405234801561001057600080fd5b50600436106100bb576000357c010000000000000000000000000000000000000000000000000000000090048063857cdbb811610083578063857cdbb81461015e578063c45d9bea14610171578063de6f24bb14610184578063e0c01bfe14610197578063edc8f0d8146101aa57600080fd5b8063070e3a71146100c05780631b6e23ea146100d557806342ac87cf146101085780634e6bd1c01461011b578063670d14b21461013d575b600080fd5b6100d36100ce366004610a9f565b6101d3565b005b6100f56100e3366004610ac9565b60006020819052908152604090205481565b6040519081526020015b60405180910390f35b6100d3610116366004610ba7565b610319565b61012e610129366004610a9f565b610397565b6040516100ff93929190610c51565b61015061014b366004610ac9565b61046c565b6040516100ff929190610c83565b61015061016c366004610ac9565b610598565b61012e61017f366004610a9f565b6106dc565b6100d3610192366004610cb1565b61079a565b61012e6101a5366004610ac9565b61088f565b6100f56101b8366004610ac9565b600160a060020a031660009081526020819052604090205490565b600160a060020a03808316600090815260016020908152604080832085845282529182902080548351808501909452600684527f36313031303100000000000000000000000000000000000000000000000000009284019290925292163314610272576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102699190610cf5565b60405180910390fd5b50600160a060020a0383166000908152600160208181526040808420868552808352818520805473ffffffffffffffffffffffffffffffffffffffff1916331781558251808501909352858352948790529091529101906102d39082610daa565b50604051828152600160a060020a0384169033907f68290397e9c550791c692a43bd678e06c59bc776f6f670778d58dd4d8903f5de9060200160405180910390a3505050565b3360009081526002602052604090206103328382610daa565b5033600090815260026020526040902060010161034f8282610daa565b5033600160a060020a03167fe963a0dc3358a0b8e4c9c301f3003bfbd501c8b1ca3497838a39b6e7208d4e32838360405161038b929190610c83565b60405180910390a25050565b600160a060020a03828116600090815260016020818152604080842086855290915282208054600282015491909201805493946060948694909116929082906103df90610d08565b80601f016020809104026020016040519081016040528092919081815260200182805461040b90610d08565b80156104585780601f1061042d57610100808354040283529160200191610458565b820191906000526020600020905b81548152906001019060200180831161043b57829003601f168201915b505050505091509250925092509250925092565b60026020526000908152604090208054819061048790610d08565b80601f01602080910402602001604051908101604052809291908181526020018280546104b390610d08565b80156105005780601f106104d557610100808354040283529160200191610500565b820191906000526020600020905b8154815290600101906020018083116104e357829003601f168201915b50505050509080600101805461051590610d08565b80601f016020809104026020016040519081016040528092919081815260200182805461054190610d08565b801561058e5780601f106105635761010080835404028352916020019161058e565b820191906000526020600020905b81548152906001019060200180831161057157829003601f168201915b5050505050905082565b600160a060020a038116600090815260026020526040902080546060918291600182019082906105c790610d08565b80601f01602080910402602001604051908101604052809291908181526020018280546105f390610d08565b80156106405780601f1061061557610100808354040283529160200191610640565b820191906000526020600020905b81548152906001019060200180831161062357829003601f168201915b5050505050915080805461065390610d08565b80601f016020809104026020016040519081016040528092919081815260200182805461067f90610d08565b80156106cc5780601f106106a1576101008083540402835291602001916106cc565b820191906000526020600020905b8154815290600101906020018083116106af57829003601f168201915b5050505050905091509150915091565b6001602081815260009384526040808520909152918352912080549181018054600160a060020a039093169261071190610d08565b80601f016020809104026020016040519081016040528092919081815260200182805461073d90610d08565b801561078a5780601f1061075f5761010080835404028352916020019161078a565b820191906000526020600020905b81548152906001019060200180831161076d57829003601f168201915b5050505050908060020154905083565b600160a060020a0382166000908152600160208181526040808420848352818520805486529252808420805473ffffffffffffffffffffffffffffffffffffffff19163317905590548352909120016107f38282610daa565b50600160a060020a038216600081815260016020908152604080832083835281842080548552908352908320426002909101559282528190528154919061083983610e9f565b919050555081600160a060020a031633600160a060020a03167fdd99aef5e4fdfad84059320be40f5dc0f015dc4025f56bd4010608c6743bc22e4284604051610883929190610eb8565b60405180910390a35050565b6000606060008060008086600160a060020a0316600160a060020a0316815260200190815260200160002054116040518060400160405280600681526020017f36313030303100000000000000000000000000000000000000000000000000008152509061092a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102699190610cf5565b50600160a060020a03841660009081526001602081815260408084209184905283205490929161095991610ed9565b81526020808201929092526040908101600090812054600160a060020a038881168352600180865284842095849052938320549116939261099991610ed9565b815260208082019290925260409081016000908120600160a060020a03891682526001808552838320948390529282205490830193926109d891610ed9565b8152602001908152602001600020600201548180546109f690610d08565b80601f0160208091040260200160405190810160405280929190818152602001828054610a2290610d08565b8015610a6f5780601f10610a4457610100808354040283529160200191610a6f565b820191906000526020600020905b815481529060010190602001808311610a5257829003601f168201915b505050505091509250925092509193909250565b8035600160a060020a0381168114610a9a57600080fd5b919050565b60008060408385031215610ab257600080fd5b610abb83610a83565b946020939093013593505050565b600060208284031215610adb57600080fd5b610ae482610a83565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f830112610b2b57600080fd5b813567ffffffffffffffff80821115610b4657610b46610aeb565b604051601f8301601f19908116603f01168101908282118183101715610b6e57610b6e610aeb565b81604052838152866020858801011115610b8757600080fd5b836020870160208301376000602085830101528094505050505092915050565b60008060408385031215610bba57600080fd5b823567ffffffffffffffff80821115610bd257600080fd5b610bde86838701610b1a565b93506020850135915080821115610bf457600080fd5b50610c0185828601610b1a565b9150509250929050565b6000815180845260005b81811015610c3157602081850181015186830182015201610c15565b506000602082860101526020601f19601f83011685010191505092915050565b600160a060020a0384168152606060208201526000610c736060830185610c0b565b9050826040830152949350505050565b604081526000610c966040830185610c0b565b8281036020840152610ca88185610c0b565b95945050505050565b60008060408385031215610cc457600080fd5b610ccd83610a83565b9150602083013567ffffffffffffffff811115610ce957600080fd5b610c0185828601610b1a565b602081526000610ae46020830184610c0b565b600281046001821680610d1c57607f821691505b602082108103610d55577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b601f821115610da5576000818152602081206020601f86010481016020861015610d825750805b6020601f860104820191505b81811015610da157828155600101610d8e565b5050505b505050565b815167ffffffffffffffff811115610dc457610dc4610aeb565b610dd881610dd28454610d08565b84610d5b565b602080601f831160018114610e115760008415610df55750858301515b60028086026008870290910a6000190419821617865550610da1565b600085815260208120601f198616915b82811015610e4057888601518255948401946001909101908401610e21565b5085821015610e6057878501516008601f88160260020a60001904191681555b5050505050600202600101905550565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600060018201610eb157610eb1610e70565b5060010190565b828152604060208201526000610ed16040830184610c0b565b949350505050565b81810381811115610eec57610eec610e70565b9291505056fea26469706673582212206a96bb261ac7dbc37a479034ce863817d48a37808383c088339c0d659cb44a3064736f6c63430008110033" + "bytecode": "608060405234801561001057600080fd5b50610e42806100206000396000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c8063857cdbb811610066578063857cdbb814610141578063c45d9bea14610154578063de6f24bb14610167578063e0c01bfe1461017a578063edc8f0d81461018d57600080fd5b8063070e3a71146100a35780631b6e23ea146100b857806342ac87cf146100eb5780634e6bd1c0146100fe578063670d14b214610120575b600080fd5b6100b66100b1366004610a06565b6101b6565b005b6100d86100c6366004610a30565b60006020819052908152604090205481565b6040519081526020015b60405180910390f35b6100b66100f9366004610af5565b6102be565b61011161010c366004610a06565b61033c565b6040516100e293929190610b9f565b61013361012e366004610a30565b610411565b6040516100e2929190610bd3565b61013361014f366004610a30565b61053d565b610111610162366004610a06565b610681565b6100b6610175366004610c01565b61073f565b610111610188366004610a30565b610827565b6100d861019b366004610a30565b6001600160a01b031660009081526020819052604090205490565b6001600160a01b03808316600090815260016020908152604080832085845282529182902080548351808501909452600684526536313031303160d01b92840192909252921633146102245760405162461bcd60e51b815260040161021b9190610c45565b60405180910390fd5b506001600160a01b038316600090815260016020818152604080842086855280835281852080546001600160a01b031916331781558251808501909352858352948790529091529101906102789082610ce3565b506040518281526001600160a01b0384169033907f68290397e9c550791c692a43bd678e06c59bc776f6f670778d58dd4d8903f5de9060200160405180910390a3505050565b3360009081526002602052604090206102d78382610ce3565b503360009081526002602052604090206001016102f48282610ce3565b50336001600160a01b03167fe963a0dc3358a0b8e4c9c301f3003bfbd501c8b1ca3497838a39b6e7208d4e328383604051610330929190610bd3565b60405180910390a25050565b6001600160a01b038281166000908152600160208181526040808420868552909152822080546002820154919092018054939460609486949091169290829061038490610c58565b80601f01602080910402602001604051908101604052809291908181526020018280546103b090610c58565b80156103fd5780601f106103d2576101008083540402835291602001916103fd565b820191906000526020600020905b8154815290600101906020018083116103e057829003601f168201915b505050505091509250925092509250925092565b60026020526000908152604090208054819061042c90610c58565b80601f016020809104026020016040519081016040528092919081815260200182805461045890610c58565b80156104a55780601f1061047a576101008083540402835291602001916104a5565b820191906000526020600020905b81548152906001019060200180831161048857829003601f168201915b5050505050908060010180546104ba90610c58565b80601f01602080910402602001604051908101604052809291908181526020018280546104e690610c58565b80156105335780601f1061050857610100808354040283529160200191610533565b820191906000526020600020905b81548152906001019060200180831161051657829003601f168201915b5050505050905082565b6001600160a01b0381166000908152600260205260409020805460609182916001820190829061056c90610c58565b80601f016020809104026020016040519081016040528092919081815260200182805461059890610c58565b80156105e55780601f106105ba576101008083540402835291602001916105e5565b820191906000526020600020905b8154815290600101906020018083116105c857829003601f168201915b505050505091508080546105f890610c58565b80601f016020809104026020016040519081016040528092919081815260200182805461062490610c58565b80156106715780601f1061064657610100808354040283529160200191610671565b820191906000526020600020905b81548152906001019060200180831161065457829003601f168201915b5050505050905091509150915091565b60016020818152600093845260408085209091529183529120805491810180546001600160a01b03909316926106b690610c58565b80601f01602080910402602001604051908101604052809291908181526020018280546106e290610c58565b801561072f5780601f106107045761010080835404028352916020019161072f565b820191906000526020600020905b81548152906001019060200180831161071257829003601f168201915b5050505050908060020154905083565b6001600160a01b038216600090815260016020818152604080842084835281852080548652925280842080546001600160a01b03191633179055905483529091200161078b8282610ce3565b506001600160a01b03821660008181526001602090815260408083208383528184208054855290835290832042600290910155928252819052815491906107d183610db9565b9190505550816001600160a01b0316336001600160a01b03167fdd99aef5e4fdfad84059320be40f5dc0f015dc4025f56bd4010608c6743bc22e428460405161081b929190610dd2565b60405180910390a35050565b60006060600080600080866001600160a01b03166001600160a01b0316815260200190815260200160002054116040518060400160405280600681526020016536313030303160d01b815250906108915760405162461bcd60e51b815260040161021b9190610c45565b506001600160a01b0384166000908152600160208181526040808420918490528320549092916108c091610df3565b815260208082019290925260409081016000908120546001600160a01b038881168352600180865284842095849052938320549116939261090091610df3565b8152602080820192909252604090810160009081206001600160a01b038916825260018085528383209483905292822054908301939261093f91610df3565b81526020019081526020016000206002015481805461095d90610c58565b80601f016020809104026020016040519081016040528092919081815260200182805461098990610c58565b80156109d65780601f106109ab576101008083540402835291602001916109d6565b820191906000526020600020905b8154815290600101906020018083116109b957829003601f168201915b505050505091509250925092509193909250565b80356001600160a01b0381168114610a0157600080fd5b919050565b60008060408385031215610a1957600080fd5b610a22836109ea565b946020939093013593505050565b600060208284031215610a4257600080fd5b610a4b826109ea565b9392505050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112610a7957600080fd5b813567ffffffffffffffff80821115610a9457610a94610a52565b604051601f8301601f19908116603f01168101908282118183101715610abc57610abc610a52565b81604052838152866020858801011115610ad557600080fd5b836020870160208301376000602085830101528094505050505092915050565b60008060408385031215610b0857600080fd5b823567ffffffffffffffff80821115610b2057600080fd5b610b2c86838701610a68565b93506020850135915080821115610b4257600080fd5b50610b4f85828601610a68565b9150509250929050565b6000815180845260005b81811015610b7f57602081850181015186830182015201610b63565b506000602082860101526020601f19601f83011685010191505092915050565b6001600160a01b0384168152606060208201819052600090610bc390830185610b59565b9050826040830152949350505050565b604081526000610be66040830185610b59565b8281036020840152610bf88185610b59565b95945050505050565b60008060408385031215610c1457600080fd5b610c1d836109ea565b9150602083013567ffffffffffffffff811115610c3957600080fd5b610b4f85828601610a68565b602081526000610a4b6020830184610b59565b600181811c90821680610c6c57607f821691505b602082108103610c8c57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115610cde576000816000526020600020601f850160051c81016020861015610cbb5750805b601f850160051c820191505b81811015610cda57828155600101610cc7565b5050505b505050565b815167ffffffffffffffff811115610cfd57610cfd610a52565b610d1181610d0b8454610c58565b84610c92565b602080601f831160018114610d465760008415610d2e5750858301515b600019600386901b1c1916600185901b178555610cda565b600085815260208120601f198616915b82811015610d7557888601518255948401946001909101908401610d56565b5085821015610d935787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b600060018201610dcb57610dcb610da3565b5060010190565b828152604060208201526000610deb6040830184610b59565b949350505050565b81810381811115610e0657610e06610da3565b9291505056fea2646970667358221220c24576891d7321e7ed94a029e8ff76f82ecda07a61b8995b13663b3915b5cbf664736f6c63430008170033", + "deployedBytecode": "608060405234801561001057600080fd5b506004361061009e5760003560e01c8063857cdbb811610066578063857cdbb814610141578063c45d9bea14610154578063de6f24bb14610167578063e0c01bfe1461017a578063edc8f0d81461018d57600080fd5b8063070e3a71146100a35780631b6e23ea146100b857806342ac87cf146100eb5780634e6bd1c0146100fe578063670d14b214610120575b600080fd5b6100b66100b1366004610a06565b6101b6565b005b6100d86100c6366004610a30565b60006020819052908152604090205481565b6040519081526020015b60405180910390f35b6100b66100f9366004610af5565b6102be565b61011161010c366004610a06565b61033c565b6040516100e293929190610b9f565b61013361012e366004610a30565b610411565b6040516100e2929190610bd3565b61013361014f366004610a30565b61053d565b610111610162366004610a06565b610681565b6100b6610175366004610c01565b61073f565b610111610188366004610a30565b610827565b6100d861019b366004610a30565b6001600160a01b031660009081526020819052604090205490565b6001600160a01b03808316600090815260016020908152604080832085845282529182902080548351808501909452600684526536313031303160d01b92840192909252921633146102245760405162461bcd60e51b815260040161021b9190610c45565b60405180910390fd5b506001600160a01b038316600090815260016020818152604080842086855280835281852080546001600160a01b031916331781558251808501909352858352948790529091529101906102789082610ce3565b506040518281526001600160a01b0384169033907f68290397e9c550791c692a43bd678e06c59bc776f6f670778d58dd4d8903f5de9060200160405180910390a3505050565b3360009081526002602052604090206102d78382610ce3565b503360009081526002602052604090206001016102f48282610ce3565b50336001600160a01b03167fe963a0dc3358a0b8e4c9c301f3003bfbd501c8b1ca3497838a39b6e7208d4e328383604051610330929190610bd3565b60405180910390a25050565b6001600160a01b038281166000908152600160208181526040808420868552909152822080546002820154919092018054939460609486949091169290829061038490610c58565b80601f01602080910402602001604051908101604052809291908181526020018280546103b090610c58565b80156103fd5780601f106103d2576101008083540402835291602001916103fd565b820191906000526020600020905b8154815290600101906020018083116103e057829003601f168201915b505050505091509250925092509250925092565b60026020526000908152604090208054819061042c90610c58565b80601f016020809104026020016040519081016040528092919081815260200182805461045890610c58565b80156104a55780601f1061047a576101008083540402835291602001916104a5565b820191906000526020600020905b81548152906001019060200180831161048857829003601f168201915b5050505050908060010180546104ba90610c58565b80601f01602080910402602001604051908101604052809291908181526020018280546104e690610c58565b80156105335780601f1061050857610100808354040283529160200191610533565b820191906000526020600020905b81548152906001019060200180831161051657829003601f168201915b5050505050905082565b6001600160a01b0381166000908152600260205260409020805460609182916001820190829061056c90610c58565b80601f016020809104026020016040519081016040528092919081815260200182805461059890610c58565b80156105e55780601f106105ba576101008083540402835291602001916105e5565b820191906000526020600020905b8154815290600101906020018083116105c857829003601f168201915b505050505091508080546105f890610c58565b80601f016020809104026020016040519081016040528092919081815260200182805461062490610c58565b80156106715780601f1061064657610100808354040283529160200191610671565b820191906000526020600020905b81548152906001019060200180831161065457829003601f168201915b5050505050905091509150915091565b60016020818152600093845260408085209091529183529120805491810180546001600160a01b03909316926106b690610c58565b80601f01602080910402602001604051908101604052809291908181526020018280546106e290610c58565b801561072f5780601f106107045761010080835404028352916020019161072f565b820191906000526020600020905b81548152906001019060200180831161071257829003601f168201915b5050505050908060020154905083565b6001600160a01b038216600090815260016020818152604080842084835281852080548652925280842080546001600160a01b03191633179055905483529091200161078b8282610ce3565b506001600160a01b03821660008181526001602090815260408083208383528184208054855290835290832042600290910155928252819052815491906107d183610db9565b9190505550816001600160a01b0316336001600160a01b03167fdd99aef5e4fdfad84059320be40f5dc0f015dc4025f56bd4010608c6743bc22e428460405161081b929190610dd2565b60405180910390a35050565b60006060600080600080866001600160a01b03166001600160a01b0316815260200190815260200160002054116040518060400160405280600681526020016536313030303160d01b815250906108915760405162461bcd60e51b815260040161021b9190610c45565b506001600160a01b0384166000908152600160208181526040808420918490528320549092916108c091610df3565b815260208082019290925260409081016000908120546001600160a01b038881168352600180865284842095849052938320549116939261090091610df3565b8152602080820192909252604090810160009081206001600160a01b038916825260018085528383209483905292822054908301939261093f91610df3565b81526020019081526020016000206002015481805461095d90610c58565b80601f016020809104026020016040519081016040528092919081815260200182805461098990610c58565b80156109d65780601f106109ab576101008083540402835291602001916109d6565b820191906000526020600020905b8154815290600101906020018083116109b957829003601f168201915b505050505091509250925092509193909250565b80356001600160a01b0381168114610a0157600080fd5b919050565b60008060408385031215610a1957600080fd5b610a22836109ea565b946020939093013593505050565b600060208284031215610a4257600080fd5b610a4b826109ea565b9392505050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112610a7957600080fd5b813567ffffffffffffffff80821115610a9457610a94610a52565b604051601f8301601f19908116603f01168101908282118183101715610abc57610abc610a52565b81604052838152866020858801011115610ad557600080fd5b836020870160208301376000602085830101528094505050505092915050565b60008060408385031215610b0857600080fd5b823567ffffffffffffffff80821115610b2057600080fd5b610b2c86838701610a68565b93506020850135915080821115610b4257600080fd5b50610b4f85828601610a68565b9150509250929050565b6000815180845260005b81811015610b7f57602081850181015186830182015201610b63565b506000602082860101526020601f19601f83011685010191505092915050565b6001600160a01b0384168152606060208201819052600090610bc390830185610b59565b9050826040830152949350505050565b604081526000610be66040830185610b59565b8281036020840152610bf88185610b59565b95945050505050565b60008060408385031215610c1457600080fd5b610c1d836109ea565b9150602083013567ffffffffffffffff811115610c3957600080fd5b610b4f85828601610a68565b602081526000610a4b6020830184610b59565b600181811c90821680610c6c57607f821691505b602082108103610c8c57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115610cde576000816000526020600020601f850160051c81016020861015610cbb5750805b601f850160051c820191505b81811015610cda57828155600101610cc7565b5050505b505050565b815167ffffffffffffffff811115610cfd57610cfd610a52565b610d1181610d0b8454610c58565b84610c92565b602080601f831160018114610d465760008415610d2e5750858301515b600019600386901b1c1916600185901b178555610cda565b600085815260208120601f198616915b82811015610d7557888601518255948401946001909101908401610d56565b5085821015610d935787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b600060018201610dcb57610dcb610da3565b5060010190565b828152604060208201526000610deb6040830184610b59565b949350505050565b81810381811115610e0657610e06610da3565b9291505056fea2646970667358221220c24576891d7321e7ed94a029e8ff76f82ecda07a61b8995b13663b3915b5cbf664736f6c63430008170033" } \ No newline at end of file diff --git a/contracts/EscrowStorage.json b/contracts/EscrowStorage.json index 3ece8a18..7e614903 100644 --- a/contracts/EscrowStorage.json +++ b/contracts/EscrowStorage.json @@ -407,6 +407,6 @@ "type": "function" } ], - "bytecode": "6080604052600060055534801561001557600080fd5b5060008054600160a060020a03191633179055610f25806100376000396000f3fe608060405234801561001057600080fd5b5060043610610112576000357c010000000000000000000000000000000000000000000000000000000090048063b5c9cbbe116100b4578063d4fac45d11610083578063d4fac45d14610310578063e1072a6f14610349578063e3fd373914610351578063f2fde38b1461036457600080fd5b8063b5c9cbbe146102b4578063c07f47d4146102d7578063d04c23af146102ea578063d28eb963146102fd57600080fd5b80637d19e596116100f05780637d19e5961461019d5780638da5cb5b1461024b578063a176130f14610276578063adb6f63f1461028957600080fd5b8063097d9012146101175780633d114414146101635780635ff9a53814610188575b600080fd5b610150610125366004610a37565b600160a060020a03918216600090815260036020908152604080832093909416825291909152205490565b6040519081526020015b60405180910390f35b610176610171366004610a6a565b610377565b60405161015a96959493929190610ac9565b61019b610196366004610a6a565b6104f5565b005b6102086101ab366004610a6a565b600090815260046020819052604090912080546001820154600283015460038401549390940154600160a060020a039283169591831694831693928116917401000000000000000000000000000000000000000090910460ff1690565b60408051600160a060020a0397881681529587166020870152938616938501939093526060840191909152909216608082015290151560a082015260c00161015a565b60005461025e90600160a060020a031681565b604051600160a060020a03909116815260200161015a565b61019b610284366004610b2e565b610555565b610150610297366004610a37565b600360209081526000928352604080842090915290825290205481565b6102c76102c2366004610ba6565b610658565b604051901515815260200161015a565b60015461025e90600160a060020a031681565b6102c76102f8366004610ba6565b6106dc565b61019b61030b366004610be2565b610760565b61015061031e366004610a37565b600160a060020a03918216600090815260026020908152604080832093909416825291909152205490565b600554610150565b61019b61035f366004610cc0565b6107f3565b61019b610372366004610be2565b6108f0565b6000818152600660205260408120805460038201546001830180546060948594879485948594600160a060020a0390931693909260029091019160ff8082169261010083048216926201000090049091169085906103d490610d54565b80601f016020809104026020016040519081016040528092919081815260200182805461040090610d54565b801561044d5780601f106104225761010080835404028352916020019161044d565b820191906000526020600020905b81548152906001019060200180831161043057829003601f168201915b5050505050945083805461046090610d54565b80601f016020809104026020016040519081016040528092919081815260200182805461048c90610d54565b80156104d95780601f106104ae576101008083540402835291602001916104d9565b820191906000526020600020905b8154815290600101906020018083116104bc57829003601f168201915b5050505050935095509550955095509550955091939550919395565b6001546040805180820190915260068152600080516020610ed0833981519152602082015290600160a060020a0316331461054f5760405160e560020a62461bcd0281526004016105469190610da7565b60405180910390fd5b50600555565b6001546040805180820190915260068152600080516020610ed0833981519152602082015290600160a060020a031633146105a65760405160e560020a62461bcd0281526004016105469190610da7565b5060009687526004602081905260409097208054600160a060020a0397881673ffffffffffffffffffffffffffffffffffffffff19918216178255600182018054978916978216979097179096556002810180549588169590961694909417909455600383019190915593018054911515740100000000000000000000000000000000000000000274ffffffffffffffffffffffffffffffffffffffffff199092169390921692909217919091179055565b6001546040805180820190915260068152600080516020610ed08339815191526020820152600091600160a060020a031633146106ab5760405160e560020a62461bcd0281526004016105469190610da7565b5050600160a060020a0392831660009081526002602090815260408083209490951682529290925291902055600190565b6001546040805180820190915260068152600080516020610ed08339815191526020820152600091600160a060020a0316331461072f5760405160e560020a62461bcd0281526004016105469190610da7565b5050600160a060020a0392831660009081526003602090815260408083209490951682529290925291902055600190565b60005460408051808201909152600681527f3530303030310000000000000000000000000000000000000000000000000000602082015290600160a060020a031633146107c35760405160e560020a62461bcd0281526004016105469190610da7565b506001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b6001546040805180820190915260068152600080516020610ed0833981519152602082015290600160a060020a031633146108445760405160e560020a62461bcd0281526004016105469190610da7565b506000878152600660205260409020805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0388161781556001016108868682610e09565b5060008781526006602052604090206002016108a28582610e09565b50600096875260066020526040909620600301805461ffff191692151561ff00191692909217610100911515919091021762ff00001916620100009515159590950294909417909355505050565b60005460408051808201909152600681527f3530303030310000000000000000000000000000000000000000000000000000602082015290600160a060020a031633146109535760405160e560020a62461bcd0281526004016105469190610da7565b5060408051808201909152600681527f35303031303100000000000000000000000000000000000000000000000000006020820152600160a060020a0382166109b25760405160e560020a62461bcd0281526004016105469190610da7565b5060008054604051600160a060020a03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b8035600160a060020a0381168114610a3257600080fd5b919050565b60008060408385031215610a4a57600080fd5b610a5383610a1b565b9150610a6160208401610a1b565b90509250929050565b600060208284031215610a7c57600080fd5b5035919050565b6000815180845260005b81811015610aa957602081850181015186830182015201610a8d565b506000602082860101526020601f19601f83011685010191505092915050565b600160a060020a038716815260c060208201526000610aeb60c0830188610a83565b8281036040840152610afd8188610a83565b951515606084015250509115156080830152151560a0909101529392505050565b80358015158114610a3257600080fd5b600080600080600080600060e0888a031215610b4957600080fd5b87359650610b5960208901610a1b565b9550610b6760408901610a1b565b9450610b7560608901610a1b565b935060808801359250610b8a60a08901610a1b565b9150610b9860c08901610b1e565b905092959891949750929550565b600080600060608486031215610bbb57600080fd5b610bc484610a1b565b9250610bd260208501610a1b565b9150604084013590509250925092565b600060208284031215610bf457600080fd5b610bfd82610a1b565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f830112610c4457600080fd5b813567ffffffffffffffff80821115610c5f57610c5f610c04565b604051601f8301601f19908116603f01168101908282118183101715610c8757610c87610c04565b81604052838152866020858801011115610ca057600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080600080600060e0888a031215610cdb57600080fd5b87359650610ceb60208901610a1b565b9550604088013567ffffffffffffffff80821115610d0857600080fd5b610d148b838c01610c33565b965060608a0135915080821115610d2a57600080fd5b50610d378a828b01610c33565b945050610d4660808901610b1e565b9250610b8a60a08901610b1e565b600281046001821680610d6857607f821691505b602082108103610da1577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b602081526000610bfd6020830184610a83565b601f821115610e04576000818152602081206020601f86010481016020861015610de15750805b6020601f860104820191505b81811015610e0057828155600101610ded565b5050505b505050565b815167ffffffffffffffff811115610e2357610e23610c04565b610e3781610e318454610d54565b84610dba565b602080601f831160018114610e705760008415610e545750858301515b60028086026008870290910a6000190419821617865550610e00565b600085815260208120601f198616915b82811015610e9f57888601518255948401946001909101908401610e80565b5085821015610ebf57878501516008601f88160260020a60001904191681555b505050505060020260010190555056fe3232303030310000000000000000000000000000000000000000000000000000a264697066735822122041e055e28e15b25d5d7e21444dd28ceb26fb71669540c85b81a8134b1ab5df7f64736f6c63430008110033", - "deployedBytecode": "608060405234801561001057600080fd5b5060043610610112576000357c010000000000000000000000000000000000000000000000000000000090048063b5c9cbbe116100b4578063d4fac45d11610083578063d4fac45d14610310578063e1072a6f14610349578063e3fd373914610351578063f2fde38b1461036457600080fd5b8063b5c9cbbe146102b4578063c07f47d4146102d7578063d04c23af146102ea578063d28eb963146102fd57600080fd5b80637d19e596116100f05780637d19e5961461019d5780638da5cb5b1461024b578063a176130f14610276578063adb6f63f1461028957600080fd5b8063097d9012146101175780633d114414146101635780635ff9a53814610188575b600080fd5b610150610125366004610a37565b600160a060020a03918216600090815260036020908152604080832093909416825291909152205490565b6040519081526020015b60405180910390f35b610176610171366004610a6a565b610377565b60405161015a96959493929190610ac9565b61019b610196366004610a6a565b6104f5565b005b6102086101ab366004610a6a565b600090815260046020819052604090912080546001820154600283015460038401549390940154600160a060020a039283169591831694831693928116917401000000000000000000000000000000000000000090910460ff1690565b60408051600160a060020a0397881681529587166020870152938616938501939093526060840191909152909216608082015290151560a082015260c00161015a565b60005461025e90600160a060020a031681565b604051600160a060020a03909116815260200161015a565b61019b610284366004610b2e565b610555565b610150610297366004610a37565b600360209081526000928352604080842090915290825290205481565b6102c76102c2366004610ba6565b610658565b604051901515815260200161015a565b60015461025e90600160a060020a031681565b6102c76102f8366004610ba6565b6106dc565b61019b61030b366004610be2565b610760565b61015061031e366004610a37565b600160a060020a03918216600090815260026020908152604080832093909416825291909152205490565b600554610150565b61019b61035f366004610cc0565b6107f3565b61019b610372366004610be2565b6108f0565b6000818152600660205260408120805460038201546001830180546060948594879485948594600160a060020a0390931693909260029091019160ff8082169261010083048216926201000090049091169085906103d490610d54565b80601f016020809104026020016040519081016040528092919081815260200182805461040090610d54565b801561044d5780601f106104225761010080835404028352916020019161044d565b820191906000526020600020905b81548152906001019060200180831161043057829003601f168201915b5050505050945083805461046090610d54565b80601f016020809104026020016040519081016040528092919081815260200182805461048c90610d54565b80156104d95780601f106104ae576101008083540402835291602001916104d9565b820191906000526020600020905b8154815290600101906020018083116104bc57829003601f168201915b5050505050935095509550955095509550955091939550919395565b6001546040805180820190915260068152600080516020610ed0833981519152602082015290600160a060020a0316331461054f5760405160e560020a62461bcd0281526004016105469190610da7565b60405180910390fd5b50600555565b6001546040805180820190915260068152600080516020610ed0833981519152602082015290600160a060020a031633146105a65760405160e560020a62461bcd0281526004016105469190610da7565b5060009687526004602081905260409097208054600160a060020a0397881673ffffffffffffffffffffffffffffffffffffffff19918216178255600182018054978916978216979097179096556002810180549588169590961694909417909455600383019190915593018054911515740100000000000000000000000000000000000000000274ffffffffffffffffffffffffffffffffffffffffff199092169390921692909217919091179055565b6001546040805180820190915260068152600080516020610ed08339815191526020820152600091600160a060020a031633146106ab5760405160e560020a62461bcd0281526004016105469190610da7565b5050600160a060020a0392831660009081526002602090815260408083209490951682529290925291902055600190565b6001546040805180820190915260068152600080516020610ed08339815191526020820152600091600160a060020a0316331461072f5760405160e560020a62461bcd0281526004016105469190610da7565b5050600160a060020a0392831660009081526003602090815260408083209490951682529290925291902055600190565b60005460408051808201909152600681527f3530303030310000000000000000000000000000000000000000000000000000602082015290600160a060020a031633146107c35760405160e560020a62461bcd0281526004016105469190610da7565b506001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b6001546040805180820190915260068152600080516020610ed0833981519152602082015290600160a060020a031633146108445760405160e560020a62461bcd0281526004016105469190610da7565b506000878152600660205260409020805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0388161781556001016108868682610e09565b5060008781526006602052604090206002016108a28582610e09565b50600096875260066020526040909620600301805461ffff191692151561ff00191692909217610100911515919091021762ff00001916620100009515159590950294909417909355505050565b60005460408051808201909152600681527f3530303030310000000000000000000000000000000000000000000000000000602082015290600160a060020a031633146109535760405160e560020a62461bcd0281526004016105469190610da7565b5060408051808201909152600681527f35303031303100000000000000000000000000000000000000000000000000006020820152600160a060020a0382166109b25760405160e560020a62461bcd0281526004016105469190610da7565b5060008054604051600160a060020a03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b8035600160a060020a0381168114610a3257600080fd5b919050565b60008060408385031215610a4a57600080fd5b610a5383610a1b565b9150610a6160208401610a1b565b90509250929050565b600060208284031215610a7c57600080fd5b5035919050565b6000815180845260005b81811015610aa957602081850181015186830182015201610a8d565b506000602082860101526020601f19601f83011685010191505092915050565b600160a060020a038716815260c060208201526000610aeb60c0830188610a83565b8281036040840152610afd8188610a83565b951515606084015250509115156080830152151560a0909101529392505050565b80358015158114610a3257600080fd5b600080600080600080600060e0888a031215610b4957600080fd5b87359650610b5960208901610a1b565b9550610b6760408901610a1b565b9450610b7560608901610a1b565b935060808801359250610b8a60a08901610a1b565b9150610b9860c08901610b1e565b905092959891949750929550565b600080600060608486031215610bbb57600080fd5b610bc484610a1b565b9250610bd260208501610a1b565b9150604084013590509250925092565b600060208284031215610bf457600080fd5b610bfd82610a1b565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f830112610c4457600080fd5b813567ffffffffffffffff80821115610c5f57610c5f610c04565b604051601f8301601f19908116603f01168101908282118183101715610c8757610c87610c04565b81604052838152866020858801011115610ca057600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080600080600060e0888a031215610cdb57600080fd5b87359650610ceb60208901610a1b565b9550604088013567ffffffffffffffff80821115610d0857600080fd5b610d148b838c01610c33565b965060608a0135915080821115610d2a57600080fd5b50610d378a828b01610c33565b945050610d4660808901610b1e565b9250610b8a60a08901610b1e565b600281046001821680610d6857607f821691505b602082108103610da1577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b602081526000610bfd6020830184610a83565b601f821115610e04576000818152602081206020601f86010481016020861015610de15750805b6020601f860104820191505b81811015610e0057828155600101610ded565b5050505b505050565b815167ffffffffffffffff811115610e2357610e23610c04565b610e3781610e318454610d54565b84610dba565b602080601f831160018114610e705760008415610e545750858301515b60028086026008870290910a6000190419821617865550610e00565b600085815260208120601f198616915b82811015610e9f57888601518255948401946001909101908401610e80565b5085821015610ebf57878501516008601f88160260020a60001904191681555b505050505060020260010190555056fe3232303030310000000000000000000000000000000000000000000000000000a264697066735822122041e055e28e15b25d5d7e21444dd28ceb26fb71669540c85b81a8134b1ab5df7f64736f6c63430008110033" + "bytecode": "6080604052600060055534801561001557600080fd5b50600080546001600160a01b03191633179055610dda806100376000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c8063b5c9cbbe11610097578063d4fac45d11610066578063d4fac45d146102e2578063e1072a6f1461031b578063e3fd373914610323578063f2fde38b1461033657600080fd5b8063b5c9cbbe14610286578063c07f47d4146102a9578063d04c23af146102bc578063d28eb963146102cf57600080fd5b80637d19e596116100d35780637d19e596146101805780638da5cb5b1461021d578063a176130f14610248578063adb6f63f1461025b57600080fd5b8063097d9012146100fa5780633d114414146101465780635ff9a5381461016b575b600080fd5b610133610108366004610940565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b6040519081526020015b60405180910390f35b610159610154366004610973565b610349565b60405161013d969594939291906109d2565b61017e610179366004610973565b6104c7565b005b6101da61018e366004610973565b6000908152600460208190526040909120805460018201546002830154600384015493909401546001600160a01b03928316959183169483169392811691600160a01b90910460ff1690565b604080516001600160a01b0397881681529587166020870152938616938501939093526060840191909152909216608082015290151560a082015260c00161013d565b600054610230906001600160a01b031681565b6040516001600160a01b03909116815260200161013d565b61017e610256366004610a39565b61051f565b610133610269366004610940565b600360209081526000928352604080842090915290825290205481565b610299610294366004610ab1565b6105ee565b604051901515815260200161013d565b600154610230906001600160a01b031681565b6102996102ca366004610ab1565b61066a565b61017e6102dd366004610aed565b6106e6565b6101336102f0366004610940565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b600554610133565b61017e610331366004610bb2565b610752565b61017e610344366004610aed565b61083a565b60008181526006602052604081208054600382015460018301805460609485948794859485946001600160a01b0390931693909260029091019160ff8082169261010083048216926201000090049091169085906103a690610c46565b80601f01602080910402602001604051908101604052809291908181526020018280546103d290610c46565b801561041f5780601f106103f45761010080835404028352916020019161041f565b820191906000526020600020905b81548152906001019060200180831161040257829003601f168201915b5050505050945083805461043290610c46565b80601f016020809104026020016040519081016040528092919081815260200182805461045e90610c46565b80156104ab5780601f10610480576101008083540402835291602001916104ab565b820191906000526020600020905b81548152906001019060200180831161048e57829003601f168201915b5050505050935095509550955095509550955091939550919395565b60015460408051808201909152600681526532323030303160d01b6020820152906001600160a01b031633146105195760405162461bcd60e51b81526004016105109190610c80565b60405180910390fd5b50600555565b60015460408051808201909152600681526532323030303160d01b6020820152906001600160a01b031633146105685760405162461bcd60e51b81526004016105109190610c80565b50600096875260046020819052604090972080546001600160a01b039788166001600160a01b0319918216178255600182018054978916978216979097179096556002810180549588169590961694909417909455600383019190915593018054911515600160a01b026001600160a81b03199092169390921692909217919091179055565b60015460408051808201909152600681526532323030303160d01b60208201526000916001600160a01b031633146106395760405162461bcd60e51b81526004016105109190610c80565b50506001600160a01b0392831660009081526002602090815260408083209490951682529290925291902055600190565b60015460408051808201909152600681526532323030303160d01b60208201526000916001600160a01b031633146106b55760405162461bcd60e51b81526004016105109190610c80565b50506001600160a01b0392831660009081526003602090815260408083209490951682529290925291902055600190565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b0316331461072f5760405162461bcd60e51b81526004016105109190610c80565b50600180546001600160a01b0319166001600160a01b0392909216919091179055565b60015460408051808201909152600681526532323030303160d01b6020820152906001600160a01b0316331461079b5760405162461bcd60e51b81526004016105109190610c80565b50600087815260066020526040902080546001600160a01b0319166001600160a01b0388161781556001016107d08682610ce4565b5060008781526006602052604090206002016107ec8582610ce4565b50600096875260066020526040909620600301805461ffff191692151561ff00191692909217610100911515919091021762ff00001916620100009515159590950294909417909355505050565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b031633146108835760405162461bcd60e51b81526004016105109190610c80565b5060408051808201909152600681526535303031303160d01b60208201526001600160a01b0382166108c85760405162461bcd60e51b81526004016105109190610c80565b50600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b80356001600160a01b038116811461093b57600080fd5b919050565b6000806040838503121561095357600080fd5b61095c83610924565b915061096a60208401610924565b90509250929050565b60006020828403121561098557600080fd5b5035919050565b6000815180845260005b818110156109b257602081850181015186830182015201610996565b506000602082860101526020601f19601f83011685010191505092915050565b6001600160a01b038716815260c0602082018190526000906109f69083018861098c565b8281036040840152610a08818861098c565b951515606084015250509115156080830152151560a0909101529392505050565b8035801515811461093b57600080fd5b600080600080600080600060e0888a031215610a5457600080fd5b87359650610a6460208901610924565b9550610a7260408901610924565b9450610a8060608901610924565b935060808801359250610a9560a08901610924565b9150610aa360c08901610a29565b905092959891949750929550565b600080600060608486031215610ac657600080fd5b610acf84610924565b9250610add60208501610924565b9150604084013590509250925092565b600060208284031215610aff57600080fd5b610b0882610924565b9392505050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112610b3657600080fd5b813567ffffffffffffffff80821115610b5157610b51610b0f565b604051601f8301601f19908116603f01168101908282118183101715610b7957610b79610b0f565b81604052838152866020858801011115610b9257600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080600080600060e0888a031215610bcd57600080fd5b87359650610bdd60208901610924565b9550604088013567ffffffffffffffff80821115610bfa57600080fd5b610c068b838c01610b25565b965060608a0135915080821115610c1c57600080fd5b50610c298a828b01610b25565b945050610c3860808901610a29565b9250610a9560a08901610a29565b600181811c90821680610c5a57607f821691505b602082108103610c7a57634e487b7160e01b600052602260045260246000fd5b50919050565b602081526000610b08602083018461098c565b601f821115610cdf576000816000526020600020601f850160051c81016020861015610cbc5750805b601f850160051c820191505b81811015610cdb57828155600101610cc8565b5050505b505050565b815167ffffffffffffffff811115610cfe57610cfe610b0f565b610d1281610d0c8454610c46565b84610c93565b602080601f831160018114610d475760008415610d2f5750858301515b600019600386901b1c1916600185901b178555610cdb565b600085815260208120601f198616915b82811015610d7657888601518255948401946001909101908401610d57565b5085821015610d945787850151600019600388901b60f8161c191681555b5050505050600190811b0190555056fea2646970667358221220e3c2ee5ef1033f46af539c99e061147489cba834ad6270b5da64a127e932febf64736f6c63430008170033", + "deployedBytecode": "608060405234801561001057600080fd5b50600436106100f55760003560e01c8063b5c9cbbe11610097578063d4fac45d11610066578063d4fac45d146102e2578063e1072a6f1461031b578063e3fd373914610323578063f2fde38b1461033657600080fd5b8063b5c9cbbe14610286578063c07f47d4146102a9578063d04c23af146102bc578063d28eb963146102cf57600080fd5b80637d19e596116100d35780637d19e596146101805780638da5cb5b1461021d578063a176130f14610248578063adb6f63f1461025b57600080fd5b8063097d9012146100fa5780633d114414146101465780635ff9a5381461016b575b600080fd5b610133610108366004610940565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b6040519081526020015b60405180910390f35b610159610154366004610973565b610349565b60405161013d969594939291906109d2565b61017e610179366004610973565b6104c7565b005b6101da61018e366004610973565b6000908152600460208190526040909120805460018201546002830154600384015493909401546001600160a01b03928316959183169483169392811691600160a01b90910460ff1690565b604080516001600160a01b0397881681529587166020870152938616938501939093526060840191909152909216608082015290151560a082015260c00161013d565b600054610230906001600160a01b031681565b6040516001600160a01b03909116815260200161013d565b61017e610256366004610a39565b61051f565b610133610269366004610940565b600360209081526000928352604080842090915290825290205481565b610299610294366004610ab1565b6105ee565b604051901515815260200161013d565b600154610230906001600160a01b031681565b6102996102ca366004610ab1565b61066a565b61017e6102dd366004610aed565b6106e6565b6101336102f0366004610940565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b600554610133565b61017e610331366004610bb2565b610752565b61017e610344366004610aed565b61083a565b60008181526006602052604081208054600382015460018301805460609485948794859485946001600160a01b0390931693909260029091019160ff8082169261010083048216926201000090049091169085906103a690610c46565b80601f01602080910402602001604051908101604052809291908181526020018280546103d290610c46565b801561041f5780601f106103f45761010080835404028352916020019161041f565b820191906000526020600020905b81548152906001019060200180831161040257829003601f168201915b5050505050945083805461043290610c46565b80601f016020809104026020016040519081016040528092919081815260200182805461045e90610c46565b80156104ab5780601f10610480576101008083540402835291602001916104ab565b820191906000526020600020905b81548152906001019060200180831161048e57829003601f168201915b5050505050935095509550955095509550955091939550919395565b60015460408051808201909152600681526532323030303160d01b6020820152906001600160a01b031633146105195760405162461bcd60e51b81526004016105109190610c80565b60405180910390fd5b50600555565b60015460408051808201909152600681526532323030303160d01b6020820152906001600160a01b031633146105685760405162461bcd60e51b81526004016105109190610c80565b50600096875260046020819052604090972080546001600160a01b039788166001600160a01b0319918216178255600182018054978916978216979097179096556002810180549588169590961694909417909455600383019190915593018054911515600160a01b026001600160a81b03199092169390921692909217919091179055565b60015460408051808201909152600681526532323030303160d01b60208201526000916001600160a01b031633146106395760405162461bcd60e51b81526004016105109190610c80565b50506001600160a01b0392831660009081526002602090815260408083209490951682529290925291902055600190565b60015460408051808201909152600681526532323030303160d01b60208201526000916001600160a01b031633146106b55760405162461bcd60e51b81526004016105109190610c80565b50506001600160a01b0392831660009081526003602090815260408083209490951682529290925291902055600190565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b0316331461072f5760405162461bcd60e51b81526004016105109190610c80565b50600180546001600160a01b0319166001600160a01b0392909216919091179055565b60015460408051808201909152600681526532323030303160d01b6020820152906001600160a01b0316331461079b5760405162461bcd60e51b81526004016105109190610c80565b50600087815260066020526040902080546001600160a01b0319166001600160a01b0388161781556001016107d08682610ce4565b5060008781526006602052604090206002016107ec8582610ce4565b50600096875260066020526040909620600301805461ffff191692151561ff00191692909217610100911515919091021762ff00001916620100009515159590950294909417909355505050565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b031633146108835760405162461bcd60e51b81526004016105109190610c80565b5060408051808201909152600681526535303031303160d01b60208201526001600160a01b0382166108c85760405162461bcd60e51b81526004016105109190610c80565b50600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b80356001600160a01b038116811461093b57600080fd5b919050565b6000806040838503121561095357600080fd5b61095c83610924565b915061096a60208401610924565b90509250929050565b60006020828403121561098557600080fd5b5035919050565b6000815180845260005b818110156109b257602081850181015186830182015201610996565b506000602082860101526020601f19601f83011685010191505092915050565b6001600160a01b038716815260c0602082018190526000906109f69083018861098c565b8281036040840152610a08818861098c565b951515606084015250509115156080830152151560a0909101529392505050565b8035801515811461093b57600080fd5b600080600080600080600060e0888a031215610a5457600080fd5b87359650610a6460208901610924565b9550610a7260408901610924565b9450610a8060608901610924565b935060808801359250610a9560a08901610924565b9150610aa360c08901610a29565b905092959891949750929550565b600080600060608486031215610ac657600080fd5b610acf84610924565b9250610add60208501610924565b9150604084013590509250925092565b600060208284031215610aff57600080fd5b610b0882610924565b9392505050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112610b3657600080fd5b813567ffffffffffffffff80821115610b5157610b51610b0f565b604051601f8301601f19908116603f01168101908282118183101715610b7957610b79610b0f565b81604052838152866020858801011115610b9257600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080600080600060e0888a031215610bcd57600080fd5b87359650610bdd60208901610924565b9550604088013567ffffffffffffffff80821115610bfa57600080fd5b610c068b838c01610b25565b965060608a0135915080821115610c1c57600080fd5b50610c298a828b01610b25565b945050610c3860808901610a29565b9250610a9560a08901610a29565b600181811c90821680610c5a57607f821691505b602082108103610c7a57634e487b7160e01b600052602260045260246000fd5b50919050565b602081526000610b08602083018461098c565b601f821115610cdf576000816000526020600020601f850160051c81016020861015610cbc5750805b601f850160051c820191505b81811015610cdb57828155600101610cc8565b5050505b505050565b815167ffffffffffffffff811115610cfe57610cfe610b0f565b610d1281610d0c8454610c46565b84610c93565b602080601f831160018114610d475760008415610d2f5750858301515b600019600386901b1c1916600185901b178555610cdb565b600085815260208120601f198616915b82811015610d7657888601518255948401946001909101908401610d57565b5085821015610d945787850151600019600388901b60f8161c191681555b5050505050600190811b0190555056fea2646970667358221220e3c2ee5ef1033f46af539c99e061147489cba834ad6270b5da64a127e932febf64736f6c63430008170033" } \ No newline at end of file diff --git a/contracts/ExchangeStorage.json b/contracts/ExchangeStorage.json index 7647902c..621f9f3c 100644 --- a/contracts/ExchangeStorage.json +++ b/contracts/ExchangeStorage.json @@ -1209,6 +1209,6 @@ "type": "function" } ], - "bytecode": "6080604052600060055534801561001557600080fd5b5060008054600160a060020a03191633179055611a1a806100376000396000f3fe608060405234801561001057600080fd5b506004361061030e576000357c01000000000000000000000000000000000000000000000000000000009004806397d6388d116101ba578063c692fc7411610106578063d4a0ece6116100bf578063f2fde38b11610099578063f2fde38b14610a4d578063f5a6ba2e14610a60578063fde3eec214610a80578063fe597f9e14610a9357600080fd5b8063d4a0ece6146109a2578063d4fac45d146109b5578063e46cdff1146109ee57600080fd5b8063c692fc74146108a4578063c9ee7c9a146108cd578063cd4747ac146108ed578063d04c23af1461091b578063d09ef2411461092e578063d28eb9631461098f57600080fd5b8063b27eeb1611610173578063bf18e24e1161014d578063bf18e24e146107ba578063c07f47d414610853578063c0d1d3c714610866578063c23f001f1461087957600080fd5b8063b27eeb1614610781578063b5c9cbbe14610794578063b9530091146107a757600080fd5b806397d6388d146106425780639ec2db9c14610655578063a20b6e3414610668578063a7fa7a3b1461070f578063adb6f63f14610743578063b12c52cf1461076e57600080fd5b806344a022ff1161027957806379e883d2116102325780638cf53d971161020c5780638cf53d97146105e05780638da5cb5b14610609578063941ce21a1461061c57806395a0af751461062f57600080fd5b806379e883d214610566578063820c632614610579578063823ddf63146105aa57600080fd5b806344a022ff146104da57806344a87e5f146104ed5780634f758478146105145780635116eb021461052757806367bb1fcf1461053a5780636f3b60d61461055d57600080fd5b80632270fa5e116102cb5780632270fa5e146103dd57806327f089ab146103f05780632ac1011e1461041e5780632fb9f11a146104625780633d7fe973146104a05780633db2befc146104a857600080fd5b806301e7a80114610313578063097d9012146103285780630a786b0c146103745780630f251358146103945780631abdd3ce146103b75780632209f472146103ca575b600080fd5b6103266103213660046116c7565b610ac1565b005b6103616103363660046116f1565b600160a060020a03918216600090815260036020908152604080832093909416825291909152205490565b6040519081526020015b60405180910390f35b610361610382366004611724565b60076020526000908152604090205481565b6103616103a2366004611724565b60009081526004602052604090206003015490565b6103266103c536600461173d565b610b36565b6103266103d836600461173d565b610ba5565b6103266103eb366004611779565b610c14565b6103616103fe3660046117fb565b600091825260066020908152604080842092845291905290206001015490565b61044a61042c366004611724565b600090815260046020526040902060010154600160a060020a031690565b604051600160a060020a03909116815260200161036b565b610490610470366004611724565b6000908152600460208190526040909120015460a860020a900460ff1690565b604051901515815260200161036b565b600554610361565b61044a6104b6366004611724565b600090815260046020819052604090912001546101009004600160a060020a031690565b6103266104e836600461181d565b610d2d565b6104906104fb366004611724565b6000908152600460208190526040909120015460ff1690565b610326610522366004611840565b610dab565b6103266105353660046117fb565b610e71565b610361610548366004611724565b60009081526004602052604090206002015490565b61036160055481565b61032661057436600461181d565b610ed6565b6104906105873660046117fb565b600091825260066020908152604080842092845291905290206003015460ff1690565b6104906105b83660046117fb565b6000918252600660209081526040808420928452919052902060030154610100900460ff1690565b61044a6105ee366004611724565b600090815260046020526040902054600160a060020a031690565b60005461044a90600160a060020a031681565b61032661062a36600461173d565b610f57565b61032661063d3660046118b4565b610fc6565b6103266106503660046118e9565b61104e565b6103266106633660046118e9565b6110d2565b6106c9610676366004611724565b600460208190526000918252604090912080546001820154600283015460038401549390940154600160a060020a039283169491831693919260ff8083169261010081049092169160a860020a90041687565b60408051600160a060020a039889168152968816602088015286019490945260608501929092521515608084015290921660a082015290151560c082015260e00161036b565b61044a61071d3660046117fb565b6000918252600660209081526040808420928452919052902054600160a060020a031690565b6103616107513660046116f1565b600360209081526000928352604080842090915290825290205481565b61032661077c3660046117fb565b61114f565b61032661078f36600461181d565b6111b1565b6104906107a2366004611915565b611248565b6103266107b5366004611724565b6112ca565b6108186107c83660046117fb565b600091825260066020908152604080842092845291905290208054600182015460028301546003840154600490940154600160a060020a03909316949193909260ff808316936101009093041691565b60408051600160a060020a039097168752602087019590955293850192909252151560608401521515608083015260a082015260c00161036b565b60015461044a90600160a060020a031681565b6103266108743660046117fb565b61131f565b6103616108873660046116f1565b600260209081526000928352604080842090915290825290205481565b6103616108b2366004611951565b600160a060020a031660009081526008602052604090205490565b6103616108db366004611724565b60009081526007602052604090205490565b6103616108fb3660046117fb565b600091825260066020908152604080842092845291905290206002015490565b610326610929366004611915565b611384565b6106c961093c366004611724565b600090815260046020819052604090912080546001820154600283015460038401549390940154600160a060020a039283169591831694939260ff8083169361010084049092169260a860020a90041690565b61032661099d366004611951565b611400565b6103266109b0366004611973565b611486565b6103616109c33660046116f1565b600160a060020a03918216600090815260026020908152604080832093909416825291909152205490565b6108186109fc3660046117fb565b600660209081526000928352604080842090915290825290208054600182015460028301546003840154600490940154600160a060020a03909316939192909160ff80821692610100909204169086565b610326610a5b366004611951565b611518565b610361610a6e366004611951565b60086020526000908152604090205481565b610326610a8e366004611973565b611636565b610361610aa13660046117fb565b600091825260066020908152604080842092845291905290206004015490565b600154604080518082019091526006815260d060020a6532303030303102602082015290600160a060020a03163314610b195760405160e560020a62461bcd028152600401610b109190611996565b60405180910390fd5b50600160a060020a03909116600090815260086020526040902055565b600154604080518082019091526006815260d060020a6532303030303102602082015290600160a060020a03163314610b855760405160e560020a62461bcd028152600401610b109190611996565b506000928352600660209081526040808520938552929052912060020155565b600154604080518082019091526006815260d060020a6532303030303102602082015290600160a060020a03163314610bf45760405160e560020a62461bcd028152600401610b109190611996565b506000928352600660209081526040808520938552929052912060010155565b600154604080518082019091526006815260d060020a6532303030303102602082015290600160a060020a03163314610c635760405160e560020a62461bcd028152600401610b109190611996565b5060009788526004602081905260409098208054600160a060020a03988916600160a060020a0319918216178255600182018054988a1698909116979097179096556002860194909455600385019290925592909401805491151560a860020a0275ff00000000000000000000000000000000000000000019959094166101000274ffffffffffffffffffffffffffffffffffffffff00199315159390931674ffffffffffffffffffffffffffffffffffffffffff19909216919091179190911792909216179055565b600154604080518082019091526006815260d060020a6532303030303102602082015290600160a060020a03163314610d7c5760405160e560020a62461bcd028152600401610b109190611996565b506000918252600460205260409091208054600160a060020a031916600160a060020a03909216919091179055565b600154604080518082019091526006815260d060020a6532303030303102602082015290600160a060020a03163314610dfa5760405160e560020a62461bcd028152600401610b109190611996565b506000978852600660209081526040808a20988a52979052959096208054600160a060020a031916600160a060020a03959095169490941784556001840192909255600283015560038201805461ffff191691151561ff001916919091176101009415159490940293909317909255600490910155565b600154604080518082019091526006815260d060020a6532303030303102602082015290600160a060020a03163314610ec05760405160e560020a62461bcd028152600401610b109190611996565b5060009182526004602052604090912060020155565b600154604080518082019091526006815260d060020a6532303030303102602082015290600160a060020a03163314610f255760405160e560020a62461bcd028152600401610b109190611996565b506000918252600460205260409091206001018054600160a060020a031916600160a060020a03909216919091179055565b600154604080518082019091526006815260d060020a6532303030303102602082015290600160a060020a03163314610fa65760405160e560020a62461bcd028152600401610b109190611996565b506000928352600660209081526040808520938552929052912060040155565b600154604080518082019091526006815260d060020a6532303030303102602082015290600160a060020a031633146110155760405160e560020a62461bcd028152600401610b109190611996565b50600092835260066020908152604080852093855292905291208054600160a060020a031916600160a060020a03909216919091179055565b600154604080518082019091526006815260d060020a6532303030303102602082015290600160a060020a0316331461109d5760405160e560020a62461bcd028152600401610b109190611996565b506000928352600660209081526040808520938552929052912060030180549115156101000261ff0019909216919091179055565b600154604080518082019091526006815260d060020a6532303030303102602082015290600160a060020a031633146111215760405160e560020a62461bcd028152600401610b109190611996565b5060009283526006602090815260408085209385529290529120600301805460ff1916911515919091179055565b600154604080518082019091526006815260d060020a6532303030303102602082015290600160a060020a0316331461119e5760405160e560020a62461bcd028152600401610b109190611996565b5060009182526007602052604090912055565b600154604080518082019091526006815260d060020a6532303030303102602082015290600160a060020a031633146112005760405160e560020a62461bcd028152600401610b109190611996565b5060009182526004602081905260409092209091018054600160a060020a039092166101000274ffffffffffffffffffffffffffffffffffffffff0019909216919091179055565b600154604080518082019091526006815260d060020a65323030303031026020820152600091600160a060020a031633146112995760405160e560020a62461bcd028152600401610b109190611996565b5050600160a060020a0392831660009081526002602090815260408083209490951682529290925291902055600190565b600154604080518082019091526006815260d060020a6532303030303102602082015290600160a060020a031633146113195760405160e560020a62461bcd028152600401610b109190611996565b50600555565b600154604080518082019091526006815260d060020a6532303030303102602082015290600160a060020a0316331461136e5760405160e560020a62461bcd028152600401610b109190611996565b5060009182526004602052604090912060030155565b600154604080518082019091526006815260d060020a6532303030303102602082015290600160a060020a031633146113d35760405160e560020a62461bcd028152600401610b109190611996565b50600160a060020a0392831660009081526003602090815260408083209490951682529290925291902055565b60005460408051808201909152600681527f3530303030310000000000000000000000000000000000000000000000000000602082015290600160a060020a031633146114635760405160e560020a62461bcd028152600401610b109190611996565b5060018054600160a060020a031916600160a060020a0392909216919091179055565b600154604080518082019091526006815260d060020a6532303030303102602082015290600160a060020a031633146114d55760405160e560020a62461bcd028152600401610b109190611996565b506000918252600460208190526040909220909101805491151560a860020a0275ff00000000000000000000000000000000000000000019909216919091179055565b60005460408051808201909152600681527f3530303030310000000000000000000000000000000000000000000000000000602082015290600160a060020a0316331461157b5760405160e560020a62461bcd028152600401610b109190611996565b5060408051808201909152600681527f35303031303100000000000000000000000000000000000000000000000000006020820152600160a060020a0382166115da5760405160e560020a62461bcd028152600401610b109190611996565b5060008054604051600160a060020a03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a360008054600160a060020a031916600160a060020a0392909216919091179055565b600154604080518082019091526006815260d060020a6532303030303102602082015290600160a060020a031633146116855760405160e560020a62461bcd028152600401610b109190611996565b506000918252600460208190526040909220909101805460ff1916911515919091179055565b8035600160a060020a03811681146116c257600080fd5b919050565b600080604083850312156116da57600080fd5b6116e3836116ab565b946020939093013593505050565b6000806040838503121561170457600080fd5b61170d836116ab565b915061171b602084016116ab565b90509250929050565b60006020828403121561173657600080fd5b5035919050565b60008060006060848603121561175257600080fd5b505081359360208301359350604090920135919050565b803580151581146116c257600080fd5b600080600080600080600080610100898b03121561179657600080fd5b883597506117a660208a016116ab565b96506117b460408a016116ab565b955060608901359450608089013593506117d060a08a01611769565b92506117de60c08a016116ab565b91506117ec60e08a01611769565b90509295985092959890939650565b6000806040838503121561180e57600080fd5b50508035926020909101359150565b6000806040838503121561183057600080fd5b8235915061171b602084016116ab565b600080600080600080600080610100898b03121561185d57600080fd5b883597506020890135965061187460408a016116ab565b9550606089013594506080890135935061189060a08a01611769565b925061189e60c08a01611769565b915060e089013590509295985092959890939650565b6000806000606084860312156118c957600080fd5b83359250602084013591506118e0604085016116ab565b90509250925092565b6000806000606084860312156118fe57600080fd5b83359250602084013591506118e060408501611769565b60008060006060848603121561192a57600080fd5b611933846116ab565b9250611941602085016116ab565b9150604084013590509250925092565b60006020828403121561196357600080fd5b61196c826116ab565b9392505050565b6000806040838503121561198657600080fd5b8235915061171b60208401611769565b600060208083528351808285015260005b818110156119c3578581018301518582016040015282016119a7565b506000604082860101526040601f19601f830116850101925050509291505056fea2646970667358221220ca5cdb2fc667a39008efb3f32c7b22ca9590b1a449f6c737ce6f87a72735d48f64736f6c63430008110033", - "deployedBytecode": "608060405234801561001057600080fd5b506004361061030e576000357c01000000000000000000000000000000000000000000000000000000009004806397d6388d116101ba578063c692fc7411610106578063d4a0ece6116100bf578063f2fde38b11610099578063f2fde38b14610a4d578063f5a6ba2e14610a60578063fde3eec214610a80578063fe597f9e14610a9357600080fd5b8063d4a0ece6146109a2578063d4fac45d146109b5578063e46cdff1146109ee57600080fd5b8063c692fc74146108a4578063c9ee7c9a146108cd578063cd4747ac146108ed578063d04c23af1461091b578063d09ef2411461092e578063d28eb9631461098f57600080fd5b8063b27eeb1611610173578063bf18e24e1161014d578063bf18e24e146107ba578063c07f47d414610853578063c0d1d3c714610866578063c23f001f1461087957600080fd5b8063b27eeb1614610781578063b5c9cbbe14610794578063b9530091146107a757600080fd5b806397d6388d146106425780639ec2db9c14610655578063a20b6e3414610668578063a7fa7a3b1461070f578063adb6f63f14610743578063b12c52cf1461076e57600080fd5b806344a022ff1161027957806379e883d2116102325780638cf53d971161020c5780638cf53d97146105e05780638da5cb5b14610609578063941ce21a1461061c57806395a0af751461062f57600080fd5b806379e883d214610566578063820c632614610579578063823ddf63146105aa57600080fd5b806344a022ff146104da57806344a87e5f146104ed5780634f758478146105145780635116eb021461052757806367bb1fcf1461053a5780636f3b60d61461055d57600080fd5b80632270fa5e116102cb5780632270fa5e146103dd57806327f089ab146103f05780632ac1011e1461041e5780632fb9f11a146104625780633d7fe973146104a05780633db2befc146104a857600080fd5b806301e7a80114610313578063097d9012146103285780630a786b0c146103745780630f251358146103945780631abdd3ce146103b75780632209f472146103ca575b600080fd5b6103266103213660046116c7565b610ac1565b005b6103616103363660046116f1565b600160a060020a03918216600090815260036020908152604080832093909416825291909152205490565b6040519081526020015b60405180910390f35b610361610382366004611724565b60076020526000908152604090205481565b6103616103a2366004611724565b60009081526004602052604090206003015490565b6103266103c536600461173d565b610b36565b6103266103d836600461173d565b610ba5565b6103266103eb366004611779565b610c14565b6103616103fe3660046117fb565b600091825260066020908152604080842092845291905290206001015490565b61044a61042c366004611724565b600090815260046020526040902060010154600160a060020a031690565b604051600160a060020a03909116815260200161036b565b610490610470366004611724565b6000908152600460208190526040909120015460a860020a900460ff1690565b604051901515815260200161036b565b600554610361565b61044a6104b6366004611724565b600090815260046020819052604090912001546101009004600160a060020a031690565b6103266104e836600461181d565b610d2d565b6104906104fb366004611724565b6000908152600460208190526040909120015460ff1690565b610326610522366004611840565b610dab565b6103266105353660046117fb565b610e71565b610361610548366004611724565b60009081526004602052604090206002015490565b61036160055481565b61032661057436600461181d565b610ed6565b6104906105873660046117fb565b600091825260066020908152604080842092845291905290206003015460ff1690565b6104906105b83660046117fb565b6000918252600660209081526040808420928452919052902060030154610100900460ff1690565b61044a6105ee366004611724565b600090815260046020526040902054600160a060020a031690565b60005461044a90600160a060020a031681565b61032661062a36600461173d565b610f57565b61032661063d3660046118b4565b610fc6565b6103266106503660046118e9565b61104e565b6103266106633660046118e9565b6110d2565b6106c9610676366004611724565b600460208190526000918252604090912080546001820154600283015460038401549390940154600160a060020a039283169491831693919260ff8083169261010081049092169160a860020a90041687565b60408051600160a060020a039889168152968816602088015286019490945260608501929092521515608084015290921660a082015290151560c082015260e00161036b565b61044a61071d3660046117fb565b6000918252600660209081526040808420928452919052902054600160a060020a031690565b6103616107513660046116f1565b600360209081526000928352604080842090915290825290205481565b61032661077c3660046117fb565b61114f565b61032661078f36600461181d565b6111b1565b6104906107a2366004611915565b611248565b6103266107b5366004611724565b6112ca565b6108186107c83660046117fb565b600091825260066020908152604080842092845291905290208054600182015460028301546003840154600490940154600160a060020a03909316949193909260ff808316936101009093041691565b60408051600160a060020a039097168752602087019590955293850192909252151560608401521515608083015260a082015260c00161036b565b60015461044a90600160a060020a031681565b6103266108743660046117fb565b61131f565b6103616108873660046116f1565b600260209081526000928352604080842090915290825290205481565b6103616108b2366004611951565b600160a060020a031660009081526008602052604090205490565b6103616108db366004611724565b60009081526007602052604090205490565b6103616108fb3660046117fb565b600091825260066020908152604080842092845291905290206002015490565b610326610929366004611915565b611384565b6106c961093c366004611724565b600090815260046020819052604090912080546001820154600283015460038401549390940154600160a060020a039283169591831694939260ff8083169361010084049092169260a860020a90041690565b61032661099d366004611951565b611400565b6103266109b0366004611973565b611486565b6103616109c33660046116f1565b600160a060020a03918216600090815260026020908152604080832093909416825291909152205490565b6108186109fc3660046117fb565b600660209081526000928352604080842090915290825290208054600182015460028301546003840154600490940154600160a060020a03909316939192909160ff80821692610100909204169086565b610326610a5b366004611951565b611518565b610361610a6e366004611951565b60086020526000908152604090205481565b610326610a8e366004611973565b611636565b610361610aa13660046117fb565b600091825260066020908152604080842092845291905290206004015490565b600154604080518082019091526006815260d060020a6532303030303102602082015290600160a060020a03163314610b195760405160e560020a62461bcd028152600401610b109190611996565b60405180910390fd5b50600160a060020a03909116600090815260086020526040902055565b600154604080518082019091526006815260d060020a6532303030303102602082015290600160a060020a03163314610b855760405160e560020a62461bcd028152600401610b109190611996565b506000928352600660209081526040808520938552929052912060020155565b600154604080518082019091526006815260d060020a6532303030303102602082015290600160a060020a03163314610bf45760405160e560020a62461bcd028152600401610b109190611996565b506000928352600660209081526040808520938552929052912060010155565b600154604080518082019091526006815260d060020a6532303030303102602082015290600160a060020a03163314610c635760405160e560020a62461bcd028152600401610b109190611996565b5060009788526004602081905260409098208054600160a060020a03988916600160a060020a0319918216178255600182018054988a1698909116979097179096556002860194909455600385019290925592909401805491151560a860020a0275ff00000000000000000000000000000000000000000019959094166101000274ffffffffffffffffffffffffffffffffffffffff00199315159390931674ffffffffffffffffffffffffffffffffffffffffff19909216919091179190911792909216179055565b600154604080518082019091526006815260d060020a6532303030303102602082015290600160a060020a03163314610d7c5760405160e560020a62461bcd028152600401610b109190611996565b506000918252600460205260409091208054600160a060020a031916600160a060020a03909216919091179055565b600154604080518082019091526006815260d060020a6532303030303102602082015290600160a060020a03163314610dfa5760405160e560020a62461bcd028152600401610b109190611996565b506000978852600660209081526040808a20988a52979052959096208054600160a060020a031916600160a060020a03959095169490941784556001840192909255600283015560038201805461ffff191691151561ff001916919091176101009415159490940293909317909255600490910155565b600154604080518082019091526006815260d060020a6532303030303102602082015290600160a060020a03163314610ec05760405160e560020a62461bcd028152600401610b109190611996565b5060009182526004602052604090912060020155565b600154604080518082019091526006815260d060020a6532303030303102602082015290600160a060020a03163314610f255760405160e560020a62461bcd028152600401610b109190611996565b506000918252600460205260409091206001018054600160a060020a031916600160a060020a03909216919091179055565b600154604080518082019091526006815260d060020a6532303030303102602082015290600160a060020a03163314610fa65760405160e560020a62461bcd028152600401610b109190611996565b506000928352600660209081526040808520938552929052912060040155565b600154604080518082019091526006815260d060020a6532303030303102602082015290600160a060020a031633146110155760405160e560020a62461bcd028152600401610b109190611996565b50600092835260066020908152604080852093855292905291208054600160a060020a031916600160a060020a03909216919091179055565b600154604080518082019091526006815260d060020a6532303030303102602082015290600160a060020a0316331461109d5760405160e560020a62461bcd028152600401610b109190611996565b506000928352600660209081526040808520938552929052912060030180549115156101000261ff0019909216919091179055565b600154604080518082019091526006815260d060020a6532303030303102602082015290600160a060020a031633146111215760405160e560020a62461bcd028152600401610b109190611996565b5060009283526006602090815260408085209385529290529120600301805460ff1916911515919091179055565b600154604080518082019091526006815260d060020a6532303030303102602082015290600160a060020a0316331461119e5760405160e560020a62461bcd028152600401610b109190611996565b5060009182526007602052604090912055565b600154604080518082019091526006815260d060020a6532303030303102602082015290600160a060020a031633146112005760405160e560020a62461bcd028152600401610b109190611996565b5060009182526004602081905260409092209091018054600160a060020a039092166101000274ffffffffffffffffffffffffffffffffffffffff0019909216919091179055565b600154604080518082019091526006815260d060020a65323030303031026020820152600091600160a060020a031633146112995760405160e560020a62461bcd028152600401610b109190611996565b5050600160a060020a0392831660009081526002602090815260408083209490951682529290925291902055600190565b600154604080518082019091526006815260d060020a6532303030303102602082015290600160a060020a031633146113195760405160e560020a62461bcd028152600401610b109190611996565b50600555565b600154604080518082019091526006815260d060020a6532303030303102602082015290600160a060020a0316331461136e5760405160e560020a62461bcd028152600401610b109190611996565b5060009182526004602052604090912060030155565b600154604080518082019091526006815260d060020a6532303030303102602082015290600160a060020a031633146113d35760405160e560020a62461bcd028152600401610b109190611996565b50600160a060020a0392831660009081526003602090815260408083209490951682529290925291902055565b60005460408051808201909152600681527f3530303030310000000000000000000000000000000000000000000000000000602082015290600160a060020a031633146114635760405160e560020a62461bcd028152600401610b109190611996565b5060018054600160a060020a031916600160a060020a0392909216919091179055565b600154604080518082019091526006815260d060020a6532303030303102602082015290600160a060020a031633146114d55760405160e560020a62461bcd028152600401610b109190611996565b506000918252600460208190526040909220909101805491151560a860020a0275ff00000000000000000000000000000000000000000019909216919091179055565b60005460408051808201909152600681527f3530303030310000000000000000000000000000000000000000000000000000602082015290600160a060020a0316331461157b5760405160e560020a62461bcd028152600401610b109190611996565b5060408051808201909152600681527f35303031303100000000000000000000000000000000000000000000000000006020820152600160a060020a0382166115da5760405160e560020a62461bcd028152600401610b109190611996565b5060008054604051600160a060020a03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a360008054600160a060020a031916600160a060020a0392909216919091179055565b600154604080518082019091526006815260d060020a6532303030303102602082015290600160a060020a031633146116855760405160e560020a62461bcd028152600401610b109190611996565b506000918252600460208190526040909220909101805460ff1916911515919091179055565b8035600160a060020a03811681146116c257600080fd5b919050565b600080604083850312156116da57600080fd5b6116e3836116ab565b946020939093013593505050565b6000806040838503121561170457600080fd5b61170d836116ab565b915061171b602084016116ab565b90509250929050565b60006020828403121561173657600080fd5b5035919050565b60008060006060848603121561175257600080fd5b505081359360208301359350604090920135919050565b803580151581146116c257600080fd5b600080600080600080600080610100898b03121561179657600080fd5b883597506117a660208a016116ab565b96506117b460408a016116ab565b955060608901359450608089013593506117d060a08a01611769565b92506117de60c08a016116ab565b91506117ec60e08a01611769565b90509295985092959890939650565b6000806040838503121561180e57600080fd5b50508035926020909101359150565b6000806040838503121561183057600080fd5b8235915061171b602084016116ab565b600080600080600080600080610100898b03121561185d57600080fd5b883597506020890135965061187460408a016116ab565b9550606089013594506080890135935061189060a08a01611769565b925061189e60c08a01611769565b915060e089013590509295985092959890939650565b6000806000606084860312156118c957600080fd5b83359250602084013591506118e0604085016116ab565b90509250925092565b6000806000606084860312156118fe57600080fd5b83359250602084013591506118e060408501611769565b60008060006060848603121561192a57600080fd5b611933846116ab565b9250611941602085016116ab565b9150604084013590509250925092565b60006020828403121561196357600080fd5b61196c826116ab565b9392505050565b6000806040838503121561198657600080fd5b8235915061171b60208401611769565b600060208083528351808285015260005b818110156119c3578581018301518582016040015282016119a7565b506000604082860101526040601f19601f830116850101925050509291505056fea2646970667358221220ca5cdb2fc667a39008efb3f32c7b22ca9590b1a449f6c737ce6f87a72735d48f64736f6c63430008110033" + "bytecode": "6080604052600060055534801561001557600080fd5b50600080546001600160a01b031916331790556118ec806100376000396000f3fe608060405234801561001057600080fd5b50600436106102f15760003560e01c806397d6388d1161019d578063c692fc74116100e9578063d4a0ece6116100a2578063f2fde38b1161007c578063f2fde38b14610a30578063f5a6ba2e14610a43578063fde3eec214610a63578063fe597f9e14610a7657600080fd5b8063d4a0ece614610985578063d4fac45d14610998578063e46cdff1146109d157600080fd5b8063c692fc7414610887578063c9ee7c9a146108b0578063cd4747ac146108d0578063d04c23af146108fe578063d09ef24114610911578063d28eb9631461097257600080fd5b8063b27eeb1611610156578063bf18e24e11610130578063bf18e24e1461079d578063c07f47d414610836578063c0d1d3c714610849578063c23f001f1461085c57600080fd5b8063b27eeb1614610764578063b5c9cbbe14610777578063b95300911461078a57600080fd5b806397d6388d146106255780639ec2db9c14610638578063a20b6e341461064b578063a7fa7a3b146106f2578063adb6f63f14610726578063b12c52cf1461075157600080fd5b806344a022ff1161025c57806379e883d2116102155780638cf53d97116101ef5780638cf53d97146105c35780638da5cb5b146105ec578063941ce21a146105ff57806395a0af751461061257600080fd5b806379e883d214610549578063820c63261461055c578063823ddf631461058d57600080fd5b806344a022ff146104bd57806344a87e5f146104d05780634f758478146104f75780635116eb021461050a57806367bb1fcf1461051d5780636f3b60d61461054057600080fd5b80632270fa5e116102ae5780632270fa5e146103c057806327f089ab146103d35780632ac1011e146104015780632fb9f11a146104455780633d7fe973146104835780633db2befc1461048b57600080fd5b806301e7a801146102f6578063097d90121461030b5780630a786b0c146103575780630f251358146103775780631abdd3ce1461039a5780632209f472146103ad575b600080fd5b610309610304366004611598565b610aa4565b005b6103446103193660046115c2565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b6040519081526020015b60405180910390f35b6103446103653660046115f5565b60076020526000908152604090205481565b6103446103853660046115f5565b60009081526004602052604090206003015490565b6103096103a836600461160e565b610b13565b6103096103bb36600461160e565b610b7c565b6103096103ce36600461164a565b610be5565b6103446103e13660046116cc565b600091825260066020908152604080842092845291905290206001015490565b61042d61040f3660046115f5565b6000908152600460205260409020600101546001600160a01b031690565b6040516001600160a01b03909116815260200161034e565b6104736104533660046115f5565b60009081526004602081905260409091200154600160a81b900460ff1690565b604051901515815260200161034e565b600554610344565b61042d6104993660046115f5565b6000908152600460208190526040909120015461010090046001600160a01b031690565b6103096104cb3660046116ee565b610ccb565b6104736104de3660046115f5565b6000908152600460208190526040909120015460ff1690565b610309610505366004611711565b610d43565b6103096105183660046116cc565b610e03565b61034461052b3660046115f5565b60009081526004602052604090206002015490565b61034460055481565b6103096105573660046116ee565b610e62565b61047361056a3660046116cc565b600091825260066020908152604080842092845291905290206003015460ff1690565b61047361059b3660046116cc565b6000918252600660209081526040808420928452919052902060030154610100900460ff1690565b61042d6105d13660046115f5565b6000908152600460205260409020546001600160a01b031690565b60005461042d906001600160a01b031681565b61030961060d36600461160e565b610edd565b610309610620366004611785565b610f46565b6103096106333660046117ba565b610fc8565b6103096106463660046117ba565b611046565b6106ac6106593660046115f5565b6004602081905260009182526040909120805460018201546002830154600384015493909401546001600160a01b039283169491831693919260ff80831692610100810490921691600160a81b90041687565b604080516001600160a01b039889168152968816602088015286019490945260608501929092521515608084015290921660a082015290151560c082015260e00161034e565b61042d6107003660046116cc565b60009182526006602090815260408084209284529190529020546001600160a01b031690565b6103446107343660046115c2565b600360209081526000928352604080842090915290825290205481565b61030961075f3660046116cc565b6110bd565b6103096107723660046116ee565b611119565b6104736107853660046117e6565b61119d565b6103096107983660046115f5565b611219565b6107fb6107ab3660046116cc565b6000918252600660209081526040808420928452919052902080546001820154600283015460038401546004909401546001600160a01b03909316949193909260ff808316936101009093041691565b604080516001600160a01b039097168752602087019590955293850192909252151560608401521515608083015260a082015260c00161034e565b60015461042d906001600160a01b031681565b6103096108573660046116cc565b611268565b61034461086a3660046115c2565b600260209081526000928352604080842090915290825290205481565b610344610895366004611822565b6001600160a01b031660009081526008602052604090205490565b6103446108be3660046115f5565b60009081526007602052604090205490565b6103446108de3660046116cc565b600091825260066020908152604080842092845291905290206002015490565b61030961090c3660046117e6565b6112c7565b6106ac61091f3660046115f5565b6000908152600460208190526040909120805460018201546002830154600384015493909401546001600160a01b039283169591831694939260ff80831693610100840490921692600160a81b90041690565b610309610980366004611822565b61133d565b610309610993366004611844565b6113a9565b6103446109a63660046115c2565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b6107fb6109df3660046116cc565b6006602090815260009283526040808420909152908252902080546001820154600283015460038401546004909401546001600160a01b03909316939192909160ff80821692610100909204169086565b610309610a3e366004611822565b611423565b610344610a51366004611822565b60086020526000908152604090205481565b610309610a71366004611844565b61150d565b610344610a843660046116cc565b600091825260066020908152604080842092845291905290206004015490565b60015460408051808201909152600681526532303030303160d01b6020820152906001600160a01b03163314610af65760405162461bcd60e51b8152600401610aed9190611867565b60405180910390fd5b506001600160a01b03909116600090815260086020526040902055565b60015460408051808201909152600681526532303030303160d01b6020820152906001600160a01b03163314610b5c5760405162461bcd60e51b8152600401610aed9190611867565b506000928352600660209081526040808520938552929052912060020155565b60015460408051808201909152600681526532303030303160d01b6020820152906001600160a01b03163314610bc55760405162461bcd60e51b8152600401610aed9190611867565b506000928352600660209081526040808520938552929052912060010155565b60015460408051808201909152600681526532303030303160d01b6020820152906001600160a01b03163314610c2e5760405162461bcd60e51b8152600401610aed9190611867565b50600097885260046020819052604090982080546001600160a01b039889166001600160a01b0319918216178255600182018054988a16989091169790971790965560028601949094556003850192909255929094018054911515600160a81b0260ff60a81b199590941661010002610100600160a81b0319931515939093166001600160a81b0319909216919091179190911792909216179055565b60015460408051808201909152600681526532303030303160d01b6020820152906001600160a01b03163314610d145760405162461bcd60e51b8152600401610aed9190611867565b5060009182526004602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b60015460408051808201909152600681526532303030303160d01b6020820152906001600160a01b03163314610d8c5760405162461bcd60e51b8152600401610aed9190611867565b506000978852600660209081526040808a20988a529790529590962080546001600160a01b0319166001600160a01b03959095169490941784556001840192909255600283015560038201805461ffff191691151561ff001916919091176101009415159490940293909317909255600490910155565b60015460408051808201909152600681526532303030303160d01b6020820152906001600160a01b03163314610e4c5760405162461bcd60e51b8152600401610aed9190611867565b5060009182526004602052604090912060020155565b60015460408051808201909152600681526532303030303160d01b6020820152906001600160a01b03163314610eab5760405162461bcd60e51b8152600401610aed9190611867565b5060009182526004602052604090912060010180546001600160a01b0319166001600160a01b03909216919091179055565b60015460408051808201909152600681526532303030303160d01b6020820152906001600160a01b03163314610f265760405162461bcd60e51b8152600401610aed9190611867565b506000928352600660209081526040808520938552929052912060040155565b60015460408051808201909152600681526532303030303160d01b6020820152906001600160a01b03163314610f8f5760405162461bcd60e51b8152600401610aed9190611867565b506000928352600660209081526040808520938552929052912080546001600160a01b0319166001600160a01b03909216919091179055565b60015460408051808201909152600681526532303030303160d01b6020820152906001600160a01b031633146110115760405162461bcd60e51b8152600401610aed9190611867565b506000928352600660209081526040808520938552929052912060030180549115156101000261ff0019909216919091179055565b60015460408051808201909152600681526532303030303160d01b6020820152906001600160a01b0316331461108f5760405162461bcd60e51b8152600401610aed9190611867565b5060009283526006602090815260408085209385529290529120600301805460ff1916911515919091179055565b60015460408051808201909152600681526532303030303160d01b6020820152906001600160a01b031633146111065760405162461bcd60e51b8152600401610aed9190611867565b5060009182526007602052604090912055565b60015460408051808201909152600681526532303030303160d01b6020820152906001600160a01b031633146111625760405162461bcd60e51b8152600401610aed9190611867565b50600091825260046020819052604090922090910180546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b60015460408051808201909152600681526532303030303160d01b60208201526000916001600160a01b031633146111e85760405162461bcd60e51b8152600401610aed9190611867565b50506001600160a01b0392831660009081526002602090815260408083209490951682529290925291902055600190565b60015460408051808201909152600681526532303030303160d01b6020820152906001600160a01b031633146112625760405162461bcd60e51b8152600401610aed9190611867565b50600555565b60015460408051808201909152600681526532303030303160d01b6020820152906001600160a01b031633146112b15760405162461bcd60e51b8152600401610aed9190611867565b5060009182526004602052604090912060030155565b60015460408051808201909152600681526532303030303160d01b6020820152906001600160a01b031633146113105760405162461bcd60e51b8152600401610aed9190611867565b506001600160a01b0392831660009081526003602090815260408083209490951682529290925291902055565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b031633146113865760405162461bcd60e51b8152600401610aed9190611867565b50600180546001600160a01b0319166001600160a01b0392909216919091179055565b60015460408051808201909152600681526532303030303160d01b6020820152906001600160a01b031633146113f25760405162461bcd60e51b8152600401610aed9190611867565b5060009182526004602081905260409092209091018054911515600160a81b0260ff60a81b19909216919091179055565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b0316331461146c5760405162461bcd60e51b8152600401610aed9190611867565b5060408051808201909152600681526535303031303160d01b60208201526001600160a01b0382166114b15760405162461bcd60e51b8152600401610aed9190611867565b50600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60015460408051808201909152600681526532303030303160d01b6020820152906001600160a01b031633146115565760405162461bcd60e51b8152600401610aed9190611867565b506000918252600460208190526040909220909101805460ff1916911515919091179055565b80356001600160a01b038116811461159357600080fd5b919050565b600080604083850312156115ab57600080fd5b6115b48361157c565b946020939093013593505050565b600080604083850312156115d557600080fd5b6115de8361157c565b91506115ec6020840161157c565b90509250929050565b60006020828403121561160757600080fd5b5035919050565b60008060006060848603121561162357600080fd5b505081359360208301359350604090920135919050565b8035801515811461159357600080fd5b600080600080600080600080610100898b03121561166757600080fd5b8835975061167760208a0161157c565b965061168560408a0161157c565b955060608901359450608089013593506116a160a08a0161163a565b92506116af60c08a0161157c565b91506116bd60e08a0161163a565b90509295985092959890939650565b600080604083850312156116df57600080fd5b50508035926020909101359150565b6000806040838503121561170157600080fd5b823591506115ec6020840161157c565b600080600080600080600080610100898b03121561172e57600080fd5b883597506020890135965061174560408a0161157c565b9550606089013594506080890135935061176160a08a0161163a565b925061176f60c08a0161163a565b915060e089013590509295985092959890939650565b60008060006060848603121561179a57600080fd5b83359250602084013591506117b16040850161157c565b90509250925092565b6000806000606084860312156117cf57600080fd5b83359250602084013591506117b16040850161163a565b6000806000606084860312156117fb57600080fd5b6118048461157c565b92506118126020850161157c565b9150604084013590509250925092565b60006020828403121561183457600080fd5b61183d8261157c565b9392505050565b6000806040838503121561185757600080fd5b823591506115ec6020840161163a565b60006020808352835180602085015260005b8181101561189557858101830151858201604001528201611879565b506000604082860101526040601f19601f830116850101925050509291505056fea2646970667358221220dac71fc2cf783dd7b89b2d8845660b1c9ed4d4840bce2b0037cbd8e9c995645064736f6c63430008170033", + "deployedBytecode": "608060405234801561001057600080fd5b50600436106102f15760003560e01c806397d6388d1161019d578063c692fc74116100e9578063d4a0ece6116100a2578063f2fde38b1161007c578063f2fde38b14610a30578063f5a6ba2e14610a43578063fde3eec214610a63578063fe597f9e14610a7657600080fd5b8063d4a0ece614610985578063d4fac45d14610998578063e46cdff1146109d157600080fd5b8063c692fc7414610887578063c9ee7c9a146108b0578063cd4747ac146108d0578063d04c23af146108fe578063d09ef24114610911578063d28eb9631461097257600080fd5b8063b27eeb1611610156578063bf18e24e11610130578063bf18e24e1461079d578063c07f47d414610836578063c0d1d3c714610849578063c23f001f1461085c57600080fd5b8063b27eeb1614610764578063b5c9cbbe14610777578063b95300911461078a57600080fd5b806397d6388d146106255780639ec2db9c14610638578063a20b6e341461064b578063a7fa7a3b146106f2578063adb6f63f14610726578063b12c52cf1461075157600080fd5b806344a022ff1161025c57806379e883d2116102155780638cf53d97116101ef5780638cf53d97146105c35780638da5cb5b146105ec578063941ce21a146105ff57806395a0af751461061257600080fd5b806379e883d214610549578063820c63261461055c578063823ddf631461058d57600080fd5b806344a022ff146104bd57806344a87e5f146104d05780634f758478146104f75780635116eb021461050a57806367bb1fcf1461051d5780636f3b60d61461054057600080fd5b80632270fa5e116102ae5780632270fa5e146103c057806327f089ab146103d35780632ac1011e146104015780632fb9f11a146104455780633d7fe973146104835780633db2befc1461048b57600080fd5b806301e7a801146102f6578063097d90121461030b5780630a786b0c146103575780630f251358146103775780631abdd3ce1461039a5780632209f472146103ad575b600080fd5b610309610304366004611598565b610aa4565b005b6103446103193660046115c2565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b6040519081526020015b60405180910390f35b6103446103653660046115f5565b60076020526000908152604090205481565b6103446103853660046115f5565b60009081526004602052604090206003015490565b6103096103a836600461160e565b610b13565b6103096103bb36600461160e565b610b7c565b6103096103ce36600461164a565b610be5565b6103446103e13660046116cc565b600091825260066020908152604080842092845291905290206001015490565b61042d61040f3660046115f5565b6000908152600460205260409020600101546001600160a01b031690565b6040516001600160a01b03909116815260200161034e565b6104736104533660046115f5565b60009081526004602081905260409091200154600160a81b900460ff1690565b604051901515815260200161034e565b600554610344565b61042d6104993660046115f5565b6000908152600460208190526040909120015461010090046001600160a01b031690565b6103096104cb3660046116ee565b610ccb565b6104736104de3660046115f5565b6000908152600460208190526040909120015460ff1690565b610309610505366004611711565b610d43565b6103096105183660046116cc565b610e03565b61034461052b3660046115f5565b60009081526004602052604090206002015490565b61034460055481565b6103096105573660046116ee565b610e62565b61047361056a3660046116cc565b600091825260066020908152604080842092845291905290206003015460ff1690565b61047361059b3660046116cc565b6000918252600660209081526040808420928452919052902060030154610100900460ff1690565b61042d6105d13660046115f5565b6000908152600460205260409020546001600160a01b031690565b60005461042d906001600160a01b031681565b61030961060d36600461160e565b610edd565b610309610620366004611785565b610f46565b6103096106333660046117ba565b610fc8565b6103096106463660046117ba565b611046565b6106ac6106593660046115f5565b6004602081905260009182526040909120805460018201546002830154600384015493909401546001600160a01b039283169491831693919260ff80831692610100810490921691600160a81b90041687565b604080516001600160a01b039889168152968816602088015286019490945260608501929092521515608084015290921660a082015290151560c082015260e00161034e565b61042d6107003660046116cc565b60009182526006602090815260408084209284529190529020546001600160a01b031690565b6103446107343660046115c2565b600360209081526000928352604080842090915290825290205481565b61030961075f3660046116cc565b6110bd565b6103096107723660046116ee565b611119565b6104736107853660046117e6565b61119d565b6103096107983660046115f5565b611219565b6107fb6107ab3660046116cc565b6000918252600660209081526040808420928452919052902080546001820154600283015460038401546004909401546001600160a01b03909316949193909260ff808316936101009093041691565b604080516001600160a01b039097168752602087019590955293850192909252151560608401521515608083015260a082015260c00161034e565b60015461042d906001600160a01b031681565b6103096108573660046116cc565b611268565b61034461086a3660046115c2565b600260209081526000928352604080842090915290825290205481565b610344610895366004611822565b6001600160a01b031660009081526008602052604090205490565b6103446108be3660046115f5565b60009081526007602052604090205490565b6103446108de3660046116cc565b600091825260066020908152604080842092845291905290206002015490565b61030961090c3660046117e6565b6112c7565b6106ac61091f3660046115f5565b6000908152600460208190526040909120805460018201546002830154600384015493909401546001600160a01b039283169591831694939260ff80831693610100840490921692600160a81b90041690565b610309610980366004611822565b61133d565b610309610993366004611844565b6113a9565b6103446109a63660046115c2565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b6107fb6109df3660046116cc565b6006602090815260009283526040808420909152908252902080546001820154600283015460038401546004909401546001600160a01b03909316939192909160ff80821692610100909204169086565b610309610a3e366004611822565b611423565b610344610a51366004611822565b60086020526000908152604090205481565b610309610a71366004611844565b61150d565b610344610a843660046116cc565b600091825260066020908152604080842092845291905290206004015490565b60015460408051808201909152600681526532303030303160d01b6020820152906001600160a01b03163314610af65760405162461bcd60e51b8152600401610aed9190611867565b60405180910390fd5b506001600160a01b03909116600090815260086020526040902055565b60015460408051808201909152600681526532303030303160d01b6020820152906001600160a01b03163314610b5c5760405162461bcd60e51b8152600401610aed9190611867565b506000928352600660209081526040808520938552929052912060020155565b60015460408051808201909152600681526532303030303160d01b6020820152906001600160a01b03163314610bc55760405162461bcd60e51b8152600401610aed9190611867565b506000928352600660209081526040808520938552929052912060010155565b60015460408051808201909152600681526532303030303160d01b6020820152906001600160a01b03163314610c2e5760405162461bcd60e51b8152600401610aed9190611867565b50600097885260046020819052604090982080546001600160a01b039889166001600160a01b0319918216178255600182018054988a16989091169790971790965560028601949094556003850192909255929094018054911515600160a81b0260ff60a81b199590941661010002610100600160a81b0319931515939093166001600160a81b0319909216919091179190911792909216179055565b60015460408051808201909152600681526532303030303160d01b6020820152906001600160a01b03163314610d145760405162461bcd60e51b8152600401610aed9190611867565b5060009182526004602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b60015460408051808201909152600681526532303030303160d01b6020820152906001600160a01b03163314610d8c5760405162461bcd60e51b8152600401610aed9190611867565b506000978852600660209081526040808a20988a529790529590962080546001600160a01b0319166001600160a01b03959095169490941784556001840192909255600283015560038201805461ffff191691151561ff001916919091176101009415159490940293909317909255600490910155565b60015460408051808201909152600681526532303030303160d01b6020820152906001600160a01b03163314610e4c5760405162461bcd60e51b8152600401610aed9190611867565b5060009182526004602052604090912060020155565b60015460408051808201909152600681526532303030303160d01b6020820152906001600160a01b03163314610eab5760405162461bcd60e51b8152600401610aed9190611867565b5060009182526004602052604090912060010180546001600160a01b0319166001600160a01b03909216919091179055565b60015460408051808201909152600681526532303030303160d01b6020820152906001600160a01b03163314610f265760405162461bcd60e51b8152600401610aed9190611867565b506000928352600660209081526040808520938552929052912060040155565b60015460408051808201909152600681526532303030303160d01b6020820152906001600160a01b03163314610f8f5760405162461bcd60e51b8152600401610aed9190611867565b506000928352600660209081526040808520938552929052912080546001600160a01b0319166001600160a01b03909216919091179055565b60015460408051808201909152600681526532303030303160d01b6020820152906001600160a01b031633146110115760405162461bcd60e51b8152600401610aed9190611867565b506000928352600660209081526040808520938552929052912060030180549115156101000261ff0019909216919091179055565b60015460408051808201909152600681526532303030303160d01b6020820152906001600160a01b0316331461108f5760405162461bcd60e51b8152600401610aed9190611867565b5060009283526006602090815260408085209385529290529120600301805460ff1916911515919091179055565b60015460408051808201909152600681526532303030303160d01b6020820152906001600160a01b031633146111065760405162461bcd60e51b8152600401610aed9190611867565b5060009182526007602052604090912055565b60015460408051808201909152600681526532303030303160d01b6020820152906001600160a01b031633146111625760405162461bcd60e51b8152600401610aed9190611867565b50600091825260046020819052604090922090910180546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b60015460408051808201909152600681526532303030303160d01b60208201526000916001600160a01b031633146111e85760405162461bcd60e51b8152600401610aed9190611867565b50506001600160a01b0392831660009081526002602090815260408083209490951682529290925291902055600190565b60015460408051808201909152600681526532303030303160d01b6020820152906001600160a01b031633146112625760405162461bcd60e51b8152600401610aed9190611867565b50600555565b60015460408051808201909152600681526532303030303160d01b6020820152906001600160a01b031633146112b15760405162461bcd60e51b8152600401610aed9190611867565b5060009182526004602052604090912060030155565b60015460408051808201909152600681526532303030303160d01b6020820152906001600160a01b031633146113105760405162461bcd60e51b8152600401610aed9190611867565b506001600160a01b0392831660009081526003602090815260408083209490951682529290925291902055565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b031633146113865760405162461bcd60e51b8152600401610aed9190611867565b50600180546001600160a01b0319166001600160a01b0392909216919091179055565b60015460408051808201909152600681526532303030303160d01b6020820152906001600160a01b031633146113f25760405162461bcd60e51b8152600401610aed9190611867565b5060009182526004602081905260409092209091018054911515600160a81b0260ff60a81b19909216919091179055565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b0316331461146c5760405162461bcd60e51b8152600401610aed9190611867565b5060408051808201909152600681526535303031303160d01b60208201526001600160a01b0382166114b15760405162461bcd60e51b8152600401610aed9190611867565b50600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60015460408051808201909152600681526532303030303160d01b6020820152906001600160a01b031633146115565760405162461bcd60e51b8152600401610aed9190611867565b506000918252600460208190526040909220909101805460ff1916911515919091179055565b80356001600160a01b038116811461159357600080fd5b919050565b600080604083850312156115ab57600080fd5b6115b48361157c565b946020939093013593505050565b600080604083850312156115d557600080fd5b6115de8361157c565b91506115ec6020840161157c565b90509250929050565b60006020828403121561160757600080fd5b5035919050565b60008060006060848603121561162357600080fd5b505081359360208301359350604090920135919050565b8035801515811461159357600080fd5b600080600080600080600080610100898b03121561166757600080fd5b8835975061167760208a0161157c565b965061168560408a0161157c565b955060608901359450608089013593506116a160a08a0161163a565b92506116af60c08a0161157c565b91506116bd60e08a0161163a565b90509295985092959890939650565b600080604083850312156116df57600080fd5b50508035926020909101359150565b6000806040838503121561170157600080fd5b823591506115ec6020840161157c565b600080600080600080600080610100898b03121561172e57600080fd5b883597506020890135965061174560408a0161157c565b9550606089013594506080890135935061176160a08a0161163a565b925061176f60c08a0161163a565b915060e089013590509295985092959890939650565b60008060006060848603121561179a57600080fd5b83359250602084013591506117b16040850161157c565b90509250925092565b6000806000606084860312156117cf57600080fd5b83359250602084013591506117b16040850161163a565b6000806000606084860312156117fb57600080fd5b6118048461157c565b92506118126020850161157c565b9150604084013590509250925092565b60006020828403121561183457600080fd5b61183d8261157c565b9392505050565b6000806040838503121561185757600080fd5b823591506115ec6020840161163a565b60006020808352835180602085015260005b8181101561189557858101830151858201604001528201611879565b506000604082860101526040601f19601f830116850101925050509291505056fea2646970667358221220dac71fc2cf783dd7b89b2d8845660b1c9ed4d4840bce2b0037cbd8e9c995645064736f6c63430008170033" } \ No newline at end of file diff --git a/contracts/FreezeLog.json b/contracts/FreezeLog.json index 4218e49d..4b5b16a4 100644 --- a/contracts/FreezeLog.json +++ b/contracts/FreezeLog.json @@ -197,6 +197,6 @@ "type": "function" } ], - "bytecode": "608060405234801561001057600080fd5b50610877806100206000396000f3fe608060405234801561001057600080fd5b50600436106100625760003560e01c80633f70d56e146100675780638f0cfcb51461009257806395a85747146100c9578063c09a0167146100de578063d3aa484f146100fe578063ee7bafbb14610111575b600080fd5b61007a610075366004610468565b610134565b604051610089939291906104d8565b60405180910390f35b6100bb6100a0366004610500565b6001600160a01b031660009081526020819052604090205490565b604051908152602001610089565b6100dc6100d73660046105c5565b610208565b005b6100bb6100ec366004610500565b60006020819052908152604090205481565b6100dc61010c36600461060a565b6102cf565b61012461011f366004610468565b610388565b6040516100899493929190610651565b6001600160a01b03821660009081526001602081815260408084208585529091528220600281015460038201549282018054859460609493929091819061017a90610688565b80601f01602080910402602001604051908101604052809291908181526020018280546101a690610688565b80156101f35780601f106101c8576101008083540402835291602001916101f3565b820191906000526020600020905b8154815290600101906020018083116101d657829003601f168201915b50505050509050935093509350509250925092565b33600081815260016020818152604080842084835281852054855290915290912080546001600160a01b031916909217825581016102468482610713565b504360028201556003810182905533600090815260208190526040812080549161026f836107e9565b9091555050336000818152602081905260409020547f4a4e83199e0c51e5945d1d5e13d633e81bfea965c768f4f52f9d808c602a190c906102b290600190610802565b6040805191825260208201869052015b60405180910390a2505050565b33600090815260016020908152604080832085845290915290206003810154600282015443916102fe9161081b565b10156040518060400160405280600681526020016536323030303160d01b815250906103465760405162461bcd60e51b815260040161033d919061082e565b60405180910390fd5b50600181016103558382610713565b5060405183815233907f3eaf52d76d675c02ceed20f7ebcafbd308b4b8f24b33233e3c631749f1fbf23a906020016102c2565b60016020818152600093845260408085209091529183529120805491810180546001600160a01b03909316926103bd90610688565b80601f01602080910402602001604051908101604052809291908181526020018280546103e990610688565b80156104365780601f1061040b57610100808354040283529160200191610436565b820191906000526020600020905b81548152906001019060200180831161041957829003601f168201915b5050505050908060020154908060030154905084565b80356001600160a01b038116811461046357600080fd5b919050565b6000806040838503121561047b57600080fd5b6104848361044c565b946020939093013593505050565b6000815180845260005b818110156104b85760208185018101518683018201520161049c565b506000602082860101526020601f19601f83011685010191505092915050565b8381528260208201526060604082015260006104f76060830184610492565b95945050505050565b60006020828403121561051257600080fd5b61051b8261044c565b9392505050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261054957600080fd5b813567ffffffffffffffff8082111561056457610564610522565b604051601f8301601f19908116603f0116810190828211818310171561058c5761058c610522565b816040528381528660208588010111156105a557600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080604083850312156105d857600080fd5b823567ffffffffffffffff8111156105ef57600080fd5b6105fb85828601610538565b95602094909401359450505050565b6000806040838503121561061d57600080fd5b82359150602083013567ffffffffffffffff81111561063b57600080fd5b61064785828601610538565b9150509250929050565b6001600160a01b038516815260806020820181905260009061067590830186610492565b6040830194909452506060015292915050565b600181811c9082168061069c57607f821691505b6020821081036106bc57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561070e576000816000526020600020601f850160051c810160208610156106eb5750805b601f850160051c820191505b8181101561070a578281556001016106f7565b5050505b505050565b815167ffffffffffffffff81111561072d5761072d610522565b6107418161073b8454610688565b846106c2565b602080601f831160018114610776576000841561075e5750858301515b600019600386901b1c1916600185901b17855561070a565b600085815260208120601f198616915b828110156107a557888601518255948401946001909101908401610786565b50858210156107c35787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b6000600182016107fb576107fb6107d3565b5060010190565b81810381811115610815576108156107d3565b92915050565b80820180821115610815576108156107d3565b60208152600061051b602083018461049256fea26469706673582212206f6bff995b68975ea4845dce118f5f7e0ccbcc9cacb31bbf39d9961c004701a664736f6c63430008170033", - "deployedBytecode": "608060405234801561001057600080fd5b50600436106100625760003560e01c80633f70d56e146100675780638f0cfcb51461009257806395a85747146100c9578063c09a0167146100de578063d3aa484f146100fe578063ee7bafbb14610111575b600080fd5b61007a610075366004610468565b610134565b604051610089939291906104d8565b60405180910390f35b6100bb6100a0366004610500565b6001600160a01b031660009081526020819052604090205490565b604051908152602001610089565b6100dc6100d73660046105c5565b610208565b005b6100bb6100ec366004610500565b60006020819052908152604090205481565b6100dc61010c36600461060a565b6102cf565b61012461011f366004610468565b610388565b6040516100899493929190610651565b6001600160a01b03821660009081526001602081815260408084208585529091528220600281015460038201549282018054859460609493929091819061017a90610688565b80601f01602080910402602001604051908101604052809291908181526020018280546101a690610688565b80156101f35780601f106101c8576101008083540402835291602001916101f3565b820191906000526020600020905b8154815290600101906020018083116101d657829003601f168201915b50505050509050935093509350509250925092565b33600081815260016020818152604080842084835281852054855290915290912080546001600160a01b031916909217825581016102468482610713565b504360028201556003810182905533600090815260208190526040812080549161026f836107e9565b9091555050336000818152602081905260409020547f4a4e83199e0c51e5945d1d5e13d633e81bfea965c768f4f52f9d808c602a190c906102b290600190610802565b6040805191825260208201869052015b60405180910390a2505050565b33600090815260016020908152604080832085845290915290206003810154600282015443916102fe9161081b565b10156040518060400160405280600681526020016536323030303160d01b815250906103465760405162461bcd60e51b815260040161033d919061082e565b60405180910390fd5b50600181016103558382610713565b5060405183815233907f3eaf52d76d675c02ceed20f7ebcafbd308b4b8f24b33233e3c631749f1fbf23a906020016102c2565b60016020818152600093845260408085209091529183529120805491810180546001600160a01b03909316926103bd90610688565b80601f01602080910402602001604051908101604052809291908181526020018280546103e990610688565b80156104365780601f1061040b57610100808354040283529160200191610436565b820191906000526020600020905b81548152906001019060200180831161041957829003601f168201915b5050505050908060020154908060030154905084565b80356001600160a01b038116811461046357600080fd5b919050565b6000806040838503121561047b57600080fd5b6104848361044c565b946020939093013593505050565b6000815180845260005b818110156104b85760208185018101518683018201520161049c565b506000602082860101526020601f19601f83011685010191505092915050565b8381528260208201526060604082015260006104f76060830184610492565b95945050505050565b60006020828403121561051257600080fd5b61051b8261044c565b9392505050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261054957600080fd5b813567ffffffffffffffff8082111561056457610564610522565b604051601f8301601f19908116603f0116810190828211818310171561058c5761058c610522565b816040528381528660208588010111156105a557600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080604083850312156105d857600080fd5b823567ffffffffffffffff8111156105ef57600080fd5b6105fb85828601610538565b95602094909401359450505050565b6000806040838503121561061d57600080fd5b82359150602083013567ffffffffffffffff81111561063b57600080fd5b61064785828601610538565b9150509250929050565b6001600160a01b038516815260806020820181905260009061067590830186610492565b6040830194909452506060015292915050565b600181811c9082168061069c57607f821691505b6020821081036106bc57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561070e576000816000526020600020601f850160051c810160208610156106eb5750805b601f850160051c820191505b8181101561070a578281556001016106f7565b5050505b505050565b815167ffffffffffffffff81111561072d5761072d610522565b6107418161073b8454610688565b846106c2565b602080601f831160018114610776576000841561075e5750858301515b600019600386901b1c1916600185901b17855561070a565b600085815260208120601f198616915b828110156107a557888601518255948401946001909101908401610786565b50858210156107c35787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b6000600182016107fb576107fb6107d3565b5060010190565b81810381811115610815576108156107d3565b92915050565b80820180821115610815576108156107d3565b60208152600061051b602083018461049256fea26469706673582212206f6bff995b68975ea4845dce118f5f7e0ccbcc9cacb31bbf39d9961c004701a664736f6c63430008170033" + "bytecode": "608060405234801561001057600080fd5b50610877806100206000396000f3fe608060405234801561001057600080fd5b50600436106100625760003560e01c80633f70d56e146100675780638f0cfcb51461009257806395a85747146100c9578063c09a0167146100de578063d3aa484f146100fe578063ee7bafbb14610111575b600080fd5b61007a610075366004610468565b610134565b604051610089939291906104d8565b60405180910390f35b6100bb6100a0366004610500565b6001600160a01b031660009081526020819052604090205490565b604051908152602001610089565b6100dc6100d73660046105c5565b610208565b005b6100bb6100ec366004610500565b60006020819052908152604090205481565b6100dc61010c36600461060a565b6102cf565b61012461011f366004610468565b610388565b6040516100899493929190610651565b6001600160a01b03821660009081526001602081815260408084208585529091528220600281015460038201549282018054859460609493929091819061017a90610688565b80601f01602080910402602001604051908101604052809291908181526020018280546101a690610688565b80156101f35780601f106101c8576101008083540402835291602001916101f3565b820191906000526020600020905b8154815290600101906020018083116101d657829003601f168201915b50505050509050935093509350509250925092565b33600081815260016020818152604080842084835281852054855290915290912080546001600160a01b031916909217825581016102468482610713565b504360028201556003810182905533600090815260208190526040812080549161026f836107e9565b9091555050336000818152602081905260409020547f4a4e83199e0c51e5945d1d5e13d633e81bfea965c768f4f52f9d808c602a190c906102b290600190610802565b6040805191825260208201869052015b60405180910390a2505050565b33600090815260016020908152604080832085845290915290206003810154600282015443916102fe9161081b565b10156040518060400160405280600681526020016536323030303160d01b815250906103465760405162461bcd60e51b815260040161033d919061082e565b60405180910390fd5b50600181016103558382610713565b5060405183815233907f3eaf52d76d675c02ceed20f7ebcafbd308b4b8f24b33233e3c631749f1fbf23a906020016102c2565b60016020818152600093845260408085209091529183529120805491810180546001600160a01b03909316926103bd90610688565b80601f01602080910402602001604051908101604052809291908181526020018280546103e990610688565b80156104365780601f1061040b57610100808354040283529160200191610436565b820191906000526020600020905b81548152906001019060200180831161041957829003601f168201915b5050505050908060020154908060030154905084565b80356001600160a01b038116811461046357600080fd5b919050565b6000806040838503121561047b57600080fd5b6104848361044c565b946020939093013593505050565b6000815180845260005b818110156104b85760208185018101518683018201520161049c565b506000602082860101526020601f19601f83011685010191505092915050565b8381528260208201526060604082015260006104f76060830184610492565b95945050505050565b60006020828403121561051257600080fd5b61051b8261044c565b9392505050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261054957600080fd5b813567ffffffffffffffff8082111561056457610564610522565b604051601f8301601f19908116603f0116810190828211818310171561058c5761058c610522565b816040528381528660208588010111156105a557600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080604083850312156105d857600080fd5b823567ffffffffffffffff8111156105ef57600080fd5b6105fb85828601610538565b95602094909401359450505050565b6000806040838503121561061d57600080fd5b82359150602083013567ffffffffffffffff81111561063b57600080fd5b61064785828601610538565b9150509250929050565b6001600160a01b038516815260806020820181905260009061067590830186610492565b6040830194909452506060015292915050565b600181811c9082168061069c57607f821691505b6020821081036106bc57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561070e576000816000526020600020601f850160051c810160208610156106eb5750805b601f850160051c820191505b8181101561070a578281556001016106f7565b5050505b505050565b815167ffffffffffffffff81111561072d5761072d610522565b6107418161073b8454610688565b846106c2565b602080601f831160018114610776576000841561075e5750858301515b600019600386901b1c1916600185901b17855561070a565b600085815260208120601f198616915b828110156107a557888601518255948401946001909101908401610786565b50858210156107c35787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b6000600182016107fb576107fb6107d3565b5060010190565b81810381811115610815576108156107d3565b92915050565b80820180821115610815576108156107d3565b60208152600061051b602083018461049256fea2646970667358221220147a16eff403f0732a6ecc098260fb77b5244b68814070ccd3dc03cd15f037ec64736f6c63430008170033", + "deployedBytecode": "608060405234801561001057600080fd5b50600436106100625760003560e01c80633f70d56e146100675780638f0cfcb51461009257806395a85747146100c9578063c09a0167146100de578063d3aa484f146100fe578063ee7bafbb14610111575b600080fd5b61007a610075366004610468565b610134565b604051610089939291906104d8565b60405180910390f35b6100bb6100a0366004610500565b6001600160a01b031660009081526020819052604090205490565b604051908152602001610089565b6100dc6100d73660046105c5565b610208565b005b6100bb6100ec366004610500565b60006020819052908152604090205481565b6100dc61010c36600461060a565b6102cf565b61012461011f366004610468565b610388565b6040516100899493929190610651565b6001600160a01b03821660009081526001602081815260408084208585529091528220600281015460038201549282018054859460609493929091819061017a90610688565b80601f01602080910402602001604051908101604052809291908181526020018280546101a690610688565b80156101f35780601f106101c8576101008083540402835291602001916101f3565b820191906000526020600020905b8154815290600101906020018083116101d657829003601f168201915b50505050509050935093509350509250925092565b33600081815260016020818152604080842084835281852054855290915290912080546001600160a01b031916909217825581016102468482610713565b504360028201556003810182905533600090815260208190526040812080549161026f836107e9565b9091555050336000818152602081905260409020547f4a4e83199e0c51e5945d1d5e13d633e81bfea965c768f4f52f9d808c602a190c906102b290600190610802565b6040805191825260208201869052015b60405180910390a2505050565b33600090815260016020908152604080832085845290915290206003810154600282015443916102fe9161081b565b10156040518060400160405280600681526020016536323030303160d01b815250906103465760405162461bcd60e51b815260040161033d919061082e565b60405180910390fd5b50600181016103558382610713565b5060405183815233907f3eaf52d76d675c02ceed20f7ebcafbd308b4b8f24b33233e3c631749f1fbf23a906020016102c2565b60016020818152600093845260408085209091529183529120805491810180546001600160a01b03909316926103bd90610688565b80601f01602080910402602001604051908101604052809291908181526020018280546103e990610688565b80156104365780601f1061040b57610100808354040283529160200191610436565b820191906000526020600020905b81548152906001019060200180831161041957829003601f168201915b5050505050908060020154908060030154905084565b80356001600160a01b038116811461046357600080fd5b919050565b6000806040838503121561047b57600080fd5b6104848361044c565b946020939093013593505050565b6000815180845260005b818110156104b85760208185018101518683018201520161049c565b506000602082860101526020601f19601f83011685010191505092915050565b8381528260208201526060604082015260006104f76060830184610492565b95945050505050565b60006020828403121561051257600080fd5b61051b8261044c565b9392505050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261054957600080fd5b813567ffffffffffffffff8082111561056457610564610522565b604051601f8301601f19908116603f0116810190828211818310171561058c5761058c610522565b816040528381528660208588010111156105a557600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080604083850312156105d857600080fd5b823567ffffffffffffffff8111156105ef57600080fd5b6105fb85828601610538565b95602094909401359450505050565b6000806040838503121561061d57600080fd5b82359150602083013567ffffffffffffffff81111561063b57600080fd5b61064785828601610538565b9150509250929050565b6001600160a01b038516815260806020820181905260009061067590830186610492565b6040830194909452506060015292915050565b600181811c9082168061069c57607f821691505b6020821081036106bc57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561070e576000816000526020600020601f850160051c810160208610156106eb5750805b601f850160051c820191505b8181101561070a578281556001016106f7565b5050505b505050565b815167ffffffffffffffff81111561072d5761072d610522565b6107418161073b8454610688565b846106c2565b602080601f831160018114610776576000841561075e5750858301515b600019600386901b1c1916600185901b17855561070a565b600085815260208120601f198616915b828110156107a557888601518255948401946001909101908401610786565b50858210156107c35787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b6000600182016107fb576107fb6107d3565b5060010190565b81810381811115610815576108156107d3565b92915050565b80820180821115610815576108156107d3565b60208152600061051b602083018461049256fea2646970667358221220147a16eff403f0732a6ecc098260fb77b5244b68814070ccd3dc03cd15f037ec64736f6c63430008170033" } \ No newline at end of file diff --git a/contracts/IbetCoupon.json b/contracts/IbetCoupon.json index beac2f40..250b336f 100644 --- a/contracts/IbetCoupon.json +++ b/contracts/IbetCoupon.json @@ -256,6 +256,35 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "_fromList", + "type": "address[]" + }, + { + "internalType": "address[]", + "name": "_toList", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "_valueList", + "type": "uint256[]" + } + ], + "name": "bulkTransferFrom", + "outputs": [ + { + "internalType": "bool", + "name": "success", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [ { @@ -683,7 +712,7 @@ "outputs": [ { "internalType": "bool", - "name": "", + "name": "success", "type": "bool" } ], @@ -755,6 +784,6 @@ "type": "function" } ], - "bytecode": "60806040523480156200001157600080fd5b50604051620022203803806200222083398101604081905262000034916200023a565b60008054600160a060020a0319908116339182161717905560016200005a8c8262000494565b506002620000698b8262000494565b50600389905560048054600160a060020a031916600160a060020a038a16179055600962000098888262000494565b50600a620000a7878262000494565b50600c620000b6868262000494565b50600b620000c5858262000494565b5060035460008054600160a060020a0316815260086020526040902055600d805484151560ff199182161790915560078054909116600117905560056200010d838262000494565b5060066200011c828262000494565b50505050505050505050505062000566565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f8301126200016f57600080fd5b81516001604060020a03808211156200018c576200018c6200012e565b604051601f8301601f19908116603f01168101908282118183101715620001b757620001b76200012e565b81604052838152602092508683858801011115620001d457600080fd5b600091505b83821015620001f85785820183015181830184015290820190620001d9565b600093810190920192909252949350505050565b8051600160a060020a03811681146200022457600080fd5b919050565b805180151581146200022457600080fd5b60008060008060008060008060008060006101608c8e0312156200025d57600080fd5b8b516001604060020a038111156200027457600080fd5b620002828e828f016200015d565b9b505060208c01516001604060020a038111156200029f57600080fd5b620002ad8e828f016200015d565b9a505060408c01519850620002c560608d016200020c565b975060808c01516001604060020a03811115620002e157600080fd5b620002ef8e828f016200015d565b97505060a08c01516001604060020a038111156200030c57600080fd5b6200031a8e828f016200015d565b96505060c08c01516001604060020a038111156200033757600080fd5b620003458e828f016200015d565b95505060e08c01516001604060020a038111156200036257600080fd5b620003708e828f016200015d565b945050620003826101008d0162000229565b92506101208c01516001604060020a038111156200039f57600080fd5b620003ad8e828f016200015d565b9250506101408c01516001604060020a03811115620003cb57600080fd5b620003d98e828f016200015d565b9150509295989b509295989b9093969950565b6002810460018216806200040157607f821691505b6020821081036200043b577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b601f8211156200048f576000818152602081206020601f860104810160208610156200046a5750805b6020601f860104820191505b818110156200048b5782815560010162000476565b5050505b505050565b81516001604060020a03811115620004b057620004b06200012e565b620004c881620004c18454620003ec565b8462000441565b602080601f831160018114620005045760008415620004e75750858301515b60028086026008870290910a60001904198216178655506200048b565b600085815260208120601f198616915b82811015620005355788860151825594840194600190910190840162000514565b50858210156200055657878501516008601f88160260020a60001904191681555b5050505050600202600101905550565b611caa80620005766000396000f3fe608060405234801561001057600080fd5b506004361061025a576000357c0100000000000000000000000000000000000000000000000000000000900480637c3bf42d116101585780639ce96055116100d5578063c72fe06511610099578063c72fe065146104f4578063c9c9227714610507578063cc872b661461051a578063f2fde38b1461052d578063ffca397b1461054057600080fd5b80639ce9605514610472578063a124beba14610492578063a9059cbb146104a5578063ab2959ff146104b8578063b967a52e146104e157600080fd5b80638ed8a9bc1161011c5780638ed8a9bc1461042f5780638f6204871461044257806392ff0d311461044a57806395d89b41146104575780639cd237071461045f57600080fd5b80637c3bf42d146103dc578063833e0d8c146103ef5780638739e6631461040157806388539011146104095780638da5cb5b1461041c57600080fd5b80633e8a8009116101e657806358c3b870116101aa57806358c3b870146103885780635c40f6f41461039057806360bf50fc146103a357806370a08231146103b657806376fa7a31146103c957600080fd5b80633e8a80091461033f578063428630f614610352578063483f31ab1461035a5780635540e7cf1461036d578063565974d31461038057600080fd5b806323b872dd1161022d57806323b872dd146102c457806325287d42146102d757806325d608611461030257806327e235e31461031757806336f7ab5e1461033757600080fd5b806306fdde031461025f578063153a1f3e1461027d57806318160ddd146102a0578063200d2ed2146102b7575b600080fd5b610267610553565b60405161027491906116e6565b60405180910390f35b61029061028b3660046117eb565b6105e1565b6040519015158152602001610274565b6102a960035481565b604051908152602001610274565b6007546102909060ff1681565b6102906102d23660046118a8565b610848565b6004546102ea90600160a060020a031681565b604051600160a060020a039091168152602001610274565b610315610310366004611954565b610a7a565b005b6102a9610325366004611991565b60086020526000908152604090205481565b610267610ada565b61031561034d366004611954565b610ae7565b610267610b43565b6103156103683660046119ac565b610b50565b61031561037b366004611954565b610c44565b610267610cf3565b610267610d00565b61031561039e3660046119c5565b610d0d565b6102676103b13660046119f8565b610da2565b6102a96103c4366004611991565b610dbb565b6103156103d7366004611991565b610dd6565b6102676103ea366004611991565b610e55565b600d5461029090610100900460ff1681565b610267610e6e565b6103156104173660046119c5565b610e7b565b6000546102ea90600160a060020a031681565b61031561043d366004611954565b610ee5565b610267610f41565b600d546102909060ff1681565b610267610f4e565b61031561046d3660046119c5565b610f5b565b6102a9610480366004611991565b600e6020526000908152604090205481565b6103156104a0366004611a13565b610fbe565b6102906104b3366004611a57565b61102f565b6102a96104c6366004611991565b600160a060020a03166000908152600e602052604090205490565b6103156104ef366004611954565b61112a565b610315610502366004611954565b611186565b610315610515366004611954565b6111e2565b6103156105283660046119ac565b61123e565b61031561053b366004611991565b6112d5565b61026761054e3660046119f8565b6113ec565b6001805461056090611a81565b80601f016020809104026020016040519081016040528092919081815260200182805461058c90611a81565b80156105d95780601f106105ae576101008083540402835291602001916105d9565b820191906000526020600020905b8154815290600101906020018083116105bc57829003601f168201915b505050505081565b6000815183511461064357604080518082018252600681527f31333032303100000000000000000000000000000000000000000000000000006020820152905160e560020a62461bcd02815261063a91906004016116e6565b60405180910390fd5b6000805b84518110156106895783818151811061066257610662611abe565b6020026020010151826106759190611af0565b91508061068181611b03565b915050610647565b508061069433610dbb565b10156106e857604080518082018252600681527f31333032303200000000000000000000000000000000000000000000000000006020820152905160e560020a62461bcd02815261063a91906004016116e6565b600454600160a060020a0316331461075c57600d5460408051808201909152600681527f313330323033000000000000000000000000000000000000000000000000000060208201529060ff16151560011461075a5760405160e560020a62461bcd02815260040161063a91906116e6565b505b606060006001935060005b865181101561083d5761079387828151811061078557610785611abe565b60200260200101513b151590565b156107dc576107d58782815181106107ad576107ad611abe565b60200260200101518783815181106107c7576107c7611abe565b602002602001015185611492565b915061081c565b6108198782815181106107f1576107f1611abe565b602002602001015187838151811061080b5761080b611abe565b6020026020010151856115f2565b91505b81151560000361082b57600094505b8061083581611b03565b915050610767565b505050505b92915050565b60008054604080518082019091526006815260d060020a6535303030303102602082015290600160a060020a031633146108985760405160e560020a62461bcd02815260040161063a91906116e6565b50816108a385610dbb565b10156108f757604080518082018252600681527f31333033303100000000000000000000000000000000000000000000000000006020820152905160e560020a62461bcd02815261063a91906004016116e6565b6060833b156109d5576109138361090d87610dbb565b90611681565b600160a060020a03861660009081526008602052604090205561093f8361093986610dbb565b90611694565b600160a060020a038516600081815260086020526040908190209290925590517fc0ee0b8a00000000000000000000000000000000000000000000000000000000815285919063c0ee0b8a9061099d90339088908790600401611b1c565b600060405180830381600087803b1580156109b757600080fd5b505af11580156109cb573d6000803e3d6000fd5b5050505050610a22565b6109e28361090d87610dbb565b600160a060020a038616600090815260086020526040902055610a088361093986610dbb565b600160a060020a0385166000908152600860205260409020555b83600160a060020a031685600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051610a6791815260200190565b60405180910390a3506001949350505050565b600054604080518082019091526006815260d060020a6535303030303102602082015290600160a060020a03163314610ac95760405160e560020a62461bcd02815260040161063a91906116e6565b50600c610ad68282611b9b565b5050565b6005805461056090611a81565b600054604080518082019091526006815260d060020a6535303030303102602082015290600160a060020a03163314610b365760405160e560020a62461bcd02815260040161063a91906116e6565b506009610ad68282611b9b565b6006805461056090611a81565b80610b5a33610dbb565b1015610bae57604080518082018252600681527f31333034303100000000000000000000000000000000000000000000000000006020820152905160e560020a62461bcd02815261063a91906004016116e6565b610bbb8161090d33610dbb565b33600090815260086020908152604080832093909355600e90522054610be2908290610939565b336000818152600e6020818152604080842086905560088252928390205491815282519182528101939093528201839052907fd9380a77212b15ea71f279a52a60415086a7679b50528cb78e9db6ea848698d59060600160405180910390a250565b600d5460408051808201909152600681527f313330353031000000000000000000000000000000000000000000000000000060208201529060ff610100909104161515600114610caa5760405160e560020a62461bcd02815260040161063a91906116e6565b50336000908152601060205260409020610cc48282611b9b565b5060405133907fa0a0cb7a71308c6bc8ff419bcc1cc3e9fd3009c7edf8a8d8c506ca5c46688b4990600090a250565b6009805461056090611a81565b600c805461056090611a81565b600054604080518082019091526006815260d060020a6535303030303102602082015290600160a060020a03163314610d5c5760405160e560020a62461bcd02815260040161063a91906116e6565b506007805460ff191682151590811790915560405160ff9091161515907fe1e5c6f5867805bf3fab73f4df4b80d0e87e9262a7bc22ac7c2cb3fd5896222f90600090a250565b600f602052600090815260409020805461056090611a81565b600160a060020a031660009081526008602052604090205490565b600054604080518082019091526006815260d060020a6535303030303102602082015290600160a060020a03163314610e255760405160e560020a62461bcd02815260040161063a91906116e6565b506004805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b6010602052600090815260409020805461056090611a81565b600a805461056090611a81565b600054604080518082019091526006815260d060020a6535303030303102602082015290600160a060020a03163314610eca5760405160e560020a62461bcd02815260040161063a91906116e6565b50600d80549115156101000261ff0019909216919091179055565b600054604080518082019091526006815260d060020a6535303030303102602082015290600160a060020a03163314610f345760405160e560020a62461bcd02815260040161063a91906116e6565b506006610ad68282611b9b565b600b805461056090611a81565b6002805461056090611a81565b600054604080518082019091526006815260d060020a6535303030303102602082015290600160a060020a03163314610faa5760405160e560020a62461bcd02815260040161063a91906116e6565b50600d805460ff1916911515919091179055565b600054604080518082019091526006815260d060020a6535303030303102602082015290600160a060020a0316331461100d5760405160e560020a62461bcd02815260040161063a91906116e6565b5060ff82166000908152600f6020526040902061102a8282611b9b565b505050565b60008161103b33610dbb565b101561108f57604080518082018252600681527f31333031303100000000000000000000000000000000000000000000000000006020820152905160e560020a62461bcd02815261063a91906004016116e6565b600454600160a060020a0316331461110357600d5460408051808201909152600681527f313330313032000000000000000000000000000000000000000000000000000060208201529060ff1615156001146111015760405160e560020a62461bcd02815260040161063a91906116e6565b505b6060833b1561111f57611117848483611492565b915050610842565b6111178484836115f2565b600054604080518082019091526006815260d060020a6535303030303102602082015290600160a060020a031633146111795760405160e560020a62461bcd02815260040161063a91906116e6565b506005610ad68282611b9b565b600054604080518082019091526006815260d060020a6535303030303102602082015290600160a060020a031633146111d55760405160e560020a62461bcd02815260040161063a91906116e6565b50600a610ad68282611b9b565b600054604080518082019091526006815260d060020a6535303030303102602082015290600160a060020a031633146112315760405160e560020a62461bcd02815260040161063a91906116e6565b50600b610ad68282611b9b565b600054604080518082019091526006815260d060020a6535303030303102602082015290600160a060020a0316331461128d5760405160e560020a62461bcd02815260040161063a91906116e6565b5060035461129b9082611694565b6003556000546112b990829061093990600160a060020a0316610dbb565b60008054600160a060020a031681526008602052604090205550565b600054604080518082019091526006815260d060020a6535303030303102602082015290600160a060020a031633146113245760405160e560020a62461bcd02815260040161063a91906116e6565b5060408051808201909152600681527f35303031303100000000000000000000000000000000000000000000000000006020820152600160a060020a0382166113835760405160e560020a62461bcd02815260040161063a91906116e6565b5060008054604051600160a060020a03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60ff81166000908152600f6020526040902080546060919061140d90611a81565b80601f016020809104026020016040519081016040528092919081815260200182805461143990611a81565b80156114865780601f1061145b57610100808354040283529160200191611486565b820191906000526020600020905b81548152906001019060200180831161146957829003601f168201915b50505050509050919050565b60045460408051808201909152600681527f31333030303100000000000000000000000000000000000000000000000000006020820152600091600160a060020a038681169116146114fa5760405160e560020a62461bcd02815260040161063a91906116e6565b506115088361090d33610dbb565b336000908152600860205260409020556115258361093986610dbb565b600160a060020a038516600081815260086020526040908190209290925590517fc0ee0b8a00000000000000000000000000000000000000000000000000000000815285919063c0ee0b8a9061158390339088908890600401611b1c565b600060405180830381600087803b15801561159d57600080fd5b505af11580156115b1573d6000803e3d6000fd5b5050604051868152600160a060020a03881692503391507fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610a67565b60006116018361090d33610dbb565b3360009081526008602052604090205561161e8361093986610dbb565b600160a060020a0385166000818152600860205260409081902092909255905133907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061166f9087815260200190565b60405180910390a35060019392505050565b600061168d8284611c61565b9392505050565b600061168d8284611af0565b6000815180845260005b818110156116c6576020818501810151868301820152016116aa565b506000602082860101526020601f19601f83011685010191505092915050565b60208152600061168d60208301846116a0565b60e060020a634e487b7102600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561173b5761173b6116f9565b604052919050565b600067ffffffffffffffff82111561175d5761175d6116f9565b5060209081020190565b8035600160a060020a038116811461177e57600080fd5b919050565b600082601f83011261179457600080fd5b813560206117a96117a483611743565b611712565b828152918102840181019181810190868411156117c557600080fd5b8286015b848110156117e057803583529183019183016117c9565b509695505050505050565b600080604083850312156117fe57600080fd5b823567ffffffffffffffff8082111561181657600080fd5b818501915085601f83011261182a57600080fd5b8135602061183a6117a483611743565b8281529181028401810191818101908984111561185657600080fd5b948201945b8386101561187b5761186c86611767565b8252948201949082019061185b565b9650508601359250508082111561189157600080fd5b5061189e85828601611783565b9150509250929050565b6000806000606084860312156118bd57600080fd5b6118c684611767565b92506118d460208501611767565b9150604084013590509250925092565b600082601f8301126118f557600080fd5b813567ffffffffffffffff81111561190f5761190f6116f9565b611922601f8201601f1916602001611712565b81815284602083860101111561193757600080fd5b816020850160208301376000918101602001919091529392505050565b60006020828403121561196657600080fd5b813567ffffffffffffffff81111561197d57600080fd5b611989848285016118e4565b949350505050565b6000602082840312156119a357600080fd5b61168d82611767565b6000602082840312156119be57600080fd5b5035919050565b6000602082840312156119d757600080fd5b8135801515811461168d57600080fd5b803560ff8116811461177e57600080fd5b600060208284031215611a0a57600080fd5b61168d826119e7565b60008060408385031215611a2657600080fd5b611a2f836119e7565b9150602083013567ffffffffffffffff811115611a4b57600080fd5b61189e858286016118e4565b60008060408385031215611a6a57600080fd5b611a7383611767565b946020939093013593505050565b600281046001821680611a9557607f821691505b602082108103611ab85760e060020a634e487b7102600052602260045260246000fd5b50919050565b60e060020a634e487b7102600052603260045260246000fd5b60e060020a634e487b7102600052601160045260246000fd5b8082018082111561084257610842611ad7565b600060018201611b1557611b15611ad7565b5060010190565b600160a060020a0384168152826020820152606060408201526000611b4460608301846116a0565b95945050505050565b601f82111561102a576000818152602081206020601f86010481016020861015611b745750805b6020601f860104820191505b81811015611b9357828155600101611b80565b505050505050565b815167ffffffffffffffff811115611bb557611bb56116f9565b611bc981611bc38454611a81565b84611b4d565b602080601f831160018114611c025760008415611be65750858301515b60028086026008870290910a6000190419821617865550611b93565b600085815260208120601f198616915b82811015611c3157888601518255948401946001909101908401611c12565b5085821015611c5157878501516008601f88160260020a60001904191681555b5050505050600202600101905550565b8181038181111561084257610842611ad756fea2646970667358221220422bcb1e934b72021555720378d9158873c2328b3c58d3ed39b6a55a1308da9f64736f6c63430008110033", - "deployedBytecode": "608060405234801561001057600080fd5b506004361061025a576000357c0100000000000000000000000000000000000000000000000000000000900480637c3bf42d116101585780639ce96055116100d5578063c72fe06511610099578063c72fe065146104f4578063c9c9227714610507578063cc872b661461051a578063f2fde38b1461052d578063ffca397b1461054057600080fd5b80639ce9605514610472578063a124beba14610492578063a9059cbb146104a5578063ab2959ff146104b8578063b967a52e146104e157600080fd5b80638ed8a9bc1161011c5780638ed8a9bc1461042f5780638f6204871461044257806392ff0d311461044a57806395d89b41146104575780639cd237071461045f57600080fd5b80637c3bf42d146103dc578063833e0d8c146103ef5780638739e6631461040157806388539011146104095780638da5cb5b1461041c57600080fd5b80633e8a8009116101e657806358c3b870116101aa57806358c3b870146103885780635c40f6f41461039057806360bf50fc146103a357806370a08231146103b657806376fa7a31146103c957600080fd5b80633e8a80091461033f578063428630f614610352578063483f31ab1461035a5780635540e7cf1461036d578063565974d31461038057600080fd5b806323b872dd1161022d57806323b872dd146102c457806325287d42146102d757806325d608611461030257806327e235e31461031757806336f7ab5e1461033757600080fd5b806306fdde031461025f578063153a1f3e1461027d57806318160ddd146102a0578063200d2ed2146102b7575b600080fd5b610267610553565b60405161027491906116e6565b60405180910390f35b61029061028b3660046117eb565b6105e1565b6040519015158152602001610274565b6102a960035481565b604051908152602001610274565b6007546102909060ff1681565b6102906102d23660046118a8565b610848565b6004546102ea90600160a060020a031681565b604051600160a060020a039091168152602001610274565b610315610310366004611954565b610a7a565b005b6102a9610325366004611991565b60086020526000908152604090205481565b610267610ada565b61031561034d366004611954565b610ae7565b610267610b43565b6103156103683660046119ac565b610b50565b61031561037b366004611954565b610c44565b610267610cf3565b610267610d00565b61031561039e3660046119c5565b610d0d565b6102676103b13660046119f8565b610da2565b6102a96103c4366004611991565b610dbb565b6103156103d7366004611991565b610dd6565b6102676103ea366004611991565b610e55565b600d5461029090610100900460ff1681565b610267610e6e565b6103156104173660046119c5565b610e7b565b6000546102ea90600160a060020a031681565b61031561043d366004611954565b610ee5565b610267610f41565b600d546102909060ff1681565b610267610f4e565b61031561046d3660046119c5565b610f5b565b6102a9610480366004611991565b600e6020526000908152604090205481565b6103156104a0366004611a13565b610fbe565b6102906104b3366004611a57565b61102f565b6102a96104c6366004611991565b600160a060020a03166000908152600e602052604090205490565b6103156104ef366004611954565b61112a565b610315610502366004611954565b611186565b610315610515366004611954565b6111e2565b6103156105283660046119ac565b61123e565b61031561053b366004611991565b6112d5565b61026761054e3660046119f8565b6113ec565b6001805461056090611a81565b80601f016020809104026020016040519081016040528092919081815260200182805461058c90611a81565b80156105d95780601f106105ae576101008083540402835291602001916105d9565b820191906000526020600020905b8154815290600101906020018083116105bc57829003601f168201915b505050505081565b6000815183511461064357604080518082018252600681527f31333032303100000000000000000000000000000000000000000000000000006020820152905160e560020a62461bcd02815261063a91906004016116e6565b60405180910390fd5b6000805b84518110156106895783818151811061066257610662611abe565b6020026020010151826106759190611af0565b91508061068181611b03565b915050610647565b508061069433610dbb565b10156106e857604080518082018252600681527f31333032303200000000000000000000000000000000000000000000000000006020820152905160e560020a62461bcd02815261063a91906004016116e6565b600454600160a060020a0316331461075c57600d5460408051808201909152600681527f313330323033000000000000000000000000000000000000000000000000000060208201529060ff16151560011461075a5760405160e560020a62461bcd02815260040161063a91906116e6565b505b606060006001935060005b865181101561083d5761079387828151811061078557610785611abe565b60200260200101513b151590565b156107dc576107d58782815181106107ad576107ad611abe565b60200260200101518783815181106107c7576107c7611abe565b602002602001015185611492565b915061081c565b6108198782815181106107f1576107f1611abe565b602002602001015187838151811061080b5761080b611abe565b6020026020010151856115f2565b91505b81151560000361082b57600094505b8061083581611b03565b915050610767565b505050505b92915050565b60008054604080518082019091526006815260d060020a6535303030303102602082015290600160a060020a031633146108985760405160e560020a62461bcd02815260040161063a91906116e6565b50816108a385610dbb565b10156108f757604080518082018252600681527f31333033303100000000000000000000000000000000000000000000000000006020820152905160e560020a62461bcd02815261063a91906004016116e6565b6060833b156109d5576109138361090d87610dbb565b90611681565b600160a060020a03861660009081526008602052604090205561093f8361093986610dbb565b90611694565b600160a060020a038516600081815260086020526040908190209290925590517fc0ee0b8a00000000000000000000000000000000000000000000000000000000815285919063c0ee0b8a9061099d90339088908790600401611b1c565b600060405180830381600087803b1580156109b757600080fd5b505af11580156109cb573d6000803e3d6000fd5b5050505050610a22565b6109e28361090d87610dbb565b600160a060020a038616600090815260086020526040902055610a088361093986610dbb565b600160a060020a0385166000908152600860205260409020555b83600160a060020a031685600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051610a6791815260200190565b60405180910390a3506001949350505050565b600054604080518082019091526006815260d060020a6535303030303102602082015290600160a060020a03163314610ac95760405160e560020a62461bcd02815260040161063a91906116e6565b50600c610ad68282611b9b565b5050565b6005805461056090611a81565b600054604080518082019091526006815260d060020a6535303030303102602082015290600160a060020a03163314610b365760405160e560020a62461bcd02815260040161063a91906116e6565b506009610ad68282611b9b565b6006805461056090611a81565b80610b5a33610dbb565b1015610bae57604080518082018252600681527f31333034303100000000000000000000000000000000000000000000000000006020820152905160e560020a62461bcd02815261063a91906004016116e6565b610bbb8161090d33610dbb565b33600090815260086020908152604080832093909355600e90522054610be2908290610939565b336000818152600e6020818152604080842086905560088252928390205491815282519182528101939093528201839052907fd9380a77212b15ea71f279a52a60415086a7679b50528cb78e9db6ea848698d59060600160405180910390a250565b600d5460408051808201909152600681527f313330353031000000000000000000000000000000000000000000000000000060208201529060ff610100909104161515600114610caa5760405160e560020a62461bcd02815260040161063a91906116e6565b50336000908152601060205260409020610cc48282611b9b565b5060405133907fa0a0cb7a71308c6bc8ff419bcc1cc3e9fd3009c7edf8a8d8c506ca5c46688b4990600090a250565b6009805461056090611a81565b600c805461056090611a81565b600054604080518082019091526006815260d060020a6535303030303102602082015290600160a060020a03163314610d5c5760405160e560020a62461bcd02815260040161063a91906116e6565b506007805460ff191682151590811790915560405160ff9091161515907fe1e5c6f5867805bf3fab73f4df4b80d0e87e9262a7bc22ac7c2cb3fd5896222f90600090a250565b600f602052600090815260409020805461056090611a81565b600160a060020a031660009081526008602052604090205490565b600054604080518082019091526006815260d060020a6535303030303102602082015290600160a060020a03163314610e255760405160e560020a62461bcd02815260040161063a91906116e6565b506004805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b6010602052600090815260409020805461056090611a81565b600a805461056090611a81565b600054604080518082019091526006815260d060020a6535303030303102602082015290600160a060020a03163314610eca5760405160e560020a62461bcd02815260040161063a91906116e6565b50600d80549115156101000261ff0019909216919091179055565b600054604080518082019091526006815260d060020a6535303030303102602082015290600160a060020a03163314610f345760405160e560020a62461bcd02815260040161063a91906116e6565b506006610ad68282611b9b565b600b805461056090611a81565b6002805461056090611a81565b600054604080518082019091526006815260d060020a6535303030303102602082015290600160a060020a03163314610faa5760405160e560020a62461bcd02815260040161063a91906116e6565b50600d805460ff1916911515919091179055565b600054604080518082019091526006815260d060020a6535303030303102602082015290600160a060020a0316331461100d5760405160e560020a62461bcd02815260040161063a91906116e6565b5060ff82166000908152600f6020526040902061102a8282611b9b565b505050565b60008161103b33610dbb565b101561108f57604080518082018252600681527f31333031303100000000000000000000000000000000000000000000000000006020820152905160e560020a62461bcd02815261063a91906004016116e6565b600454600160a060020a0316331461110357600d5460408051808201909152600681527f313330313032000000000000000000000000000000000000000000000000000060208201529060ff1615156001146111015760405160e560020a62461bcd02815260040161063a91906116e6565b505b6060833b1561111f57611117848483611492565b915050610842565b6111178484836115f2565b600054604080518082019091526006815260d060020a6535303030303102602082015290600160a060020a031633146111795760405160e560020a62461bcd02815260040161063a91906116e6565b506005610ad68282611b9b565b600054604080518082019091526006815260d060020a6535303030303102602082015290600160a060020a031633146111d55760405160e560020a62461bcd02815260040161063a91906116e6565b50600a610ad68282611b9b565b600054604080518082019091526006815260d060020a6535303030303102602082015290600160a060020a031633146112315760405160e560020a62461bcd02815260040161063a91906116e6565b50600b610ad68282611b9b565b600054604080518082019091526006815260d060020a6535303030303102602082015290600160a060020a0316331461128d5760405160e560020a62461bcd02815260040161063a91906116e6565b5060035461129b9082611694565b6003556000546112b990829061093990600160a060020a0316610dbb565b60008054600160a060020a031681526008602052604090205550565b600054604080518082019091526006815260d060020a6535303030303102602082015290600160a060020a031633146113245760405160e560020a62461bcd02815260040161063a91906116e6565b5060408051808201909152600681527f35303031303100000000000000000000000000000000000000000000000000006020820152600160a060020a0382166113835760405160e560020a62461bcd02815260040161063a91906116e6565b5060008054604051600160a060020a03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60ff81166000908152600f6020526040902080546060919061140d90611a81565b80601f016020809104026020016040519081016040528092919081815260200182805461143990611a81565b80156114865780601f1061145b57610100808354040283529160200191611486565b820191906000526020600020905b81548152906001019060200180831161146957829003601f168201915b50505050509050919050565b60045460408051808201909152600681527f31333030303100000000000000000000000000000000000000000000000000006020820152600091600160a060020a038681169116146114fa5760405160e560020a62461bcd02815260040161063a91906116e6565b506115088361090d33610dbb565b336000908152600860205260409020556115258361093986610dbb565b600160a060020a038516600081815260086020526040908190209290925590517fc0ee0b8a00000000000000000000000000000000000000000000000000000000815285919063c0ee0b8a9061158390339088908890600401611b1c565b600060405180830381600087803b15801561159d57600080fd5b505af11580156115b1573d6000803e3d6000fd5b5050604051868152600160a060020a03881692503391507fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610a67565b60006116018361090d33610dbb565b3360009081526008602052604090205561161e8361093986610dbb565b600160a060020a0385166000818152600860205260409081902092909255905133907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061166f9087815260200190565b60405180910390a35060019392505050565b600061168d8284611c61565b9392505050565b600061168d8284611af0565b6000815180845260005b818110156116c6576020818501810151868301820152016116aa565b506000602082860101526020601f19601f83011685010191505092915050565b60208152600061168d60208301846116a0565b60e060020a634e487b7102600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561173b5761173b6116f9565b604052919050565b600067ffffffffffffffff82111561175d5761175d6116f9565b5060209081020190565b8035600160a060020a038116811461177e57600080fd5b919050565b600082601f83011261179457600080fd5b813560206117a96117a483611743565b611712565b828152918102840181019181810190868411156117c557600080fd5b8286015b848110156117e057803583529183019183016117c9565b509695505050505050565b600080604083850312156117fe57600080fd5b823567ffffffffffffffff8082111561181657600080fd5b818501915085601f83011261182a57600080fd5b8135602061183a6117a483611743565b8281529181028401810191818101908984111561185657600080fd5b948201945b8386101561187b5761186c86611767565b8252948201949082019061185b565b9650508601359250508082111561189157600080fd5b5061189e85828601611783565b9150509250929050565b6000806000606084860312156118bd57600080fd5b6118c684611767565b92506118d460208501611767565b9150604084013590509250925092565b600082601f8301126118f557600080fd5b813567ffffffffffffffff81111561190f5761190f6116f9565b611922601f8201601f1916602001611712565b81815284602083860101111561193757600080fd5b816020850160208301376000918101602001919091529392505050565b60006020828403121561196657600080fd5b813567ffffffffffffffff81111561197d57600080fd5b611989848285016118e4565b949350505050565b6000602082840312156119a357600080fd5b61168d82611767565b6000602082840312156119be57600080fd5b5035919050565b6000602082840312156119d757600080fd5b8135801515811461168d57600080fd5b803560ff8116811461177e57600080fd5b600060208284031215611a0a57600080fd5b61168d826119e7565b60008060408385031215611a2657600080fd5b611a2f836119e7565b9150602083013567ffffffffffffffff811115611a4b57600080fd5b61189e858286016118e4565b60008060408385031215611a6a57600080fd5b611a7383611767565b946020939093013593505050565b600281046001821680611a9557607f821691505b602082108103611ab85760e060020a634e487b7102600052602260045260246000fd5b50919050565b60e060020a634e487b7102600052603260045260246000fd5b60e060020a634e487b7102600052601160045260246000fd5b8082018082111561084257610842611ad7565b600060018201611b1557611b15611ad7565b5060010190565b600160a060020a0384168152826020820152606060408201526000611b4460608301846116a0565b95945050505050565b601f82111561102a576000818152602081206020601f86010481016020861015611b745750805b6020601f860104820191505b81811015611b9357828155600101611b80565b505050505050565b815167ffffffffffffffff811115611bb557611bb56116f9565b611bc981611bc38454611a81565b84611b4d565b602080601f831160018114611c025760008415611be65750858301515b60028086026008870290910a6000190419821617865550611b93565b600085815260208120601f198616915b82811015611c3157888601518255948401946001909101908401611c12565b5085821015611c5157878501516008601f88160260020a60001904191681555b5050505050600202600101905550565b8181038181111561084257610842611ad756fea2646970667358221220422bcb1e934b72021555720378d9158873c2328b3c58d3ed39b6a55a1308da9f64736f6c63430008110033" + "bytecode": "60806040523480156200001157600080fd5b506040516200216238038062002162833981016040819052620000349162000224565b600080546001600160a01b0319908116339182161717905560016200005a8c8262000473565b506002620000698b8262000473565b506003899055600480546001600160a01b0319166001600160a01b038a16179055600962000098888262000473565b50600a620000a7878262000473565b50600c620000b6868262000473565b50600b620000c5858262000473565b50600354600080546001600160a01b0316815260086020526040902055600d805484151560ff199182161790915560078054909116600117905560056200010d838262000473565b5060066200011c828262000473565b5050505050505050505050506200053f565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200015657600080fd5b81516001600160401b03808211156200017357620001736200012e565b604051601f8301601f19908116603f011681019082821181831017156200019e576200019e6200012e565b8160405283815260209250866020858801011115620001bc57600080fd5b600091505b83821015620001e05785820183015181830184015290820190620001c1565b6000602085830101528094505050505092915050565b80516001600160a01b03811681146200020e57600080fd5b919050565b805180151581146200020e57600080fd5b60008060008060008060008060008060006101608c8e0312156200024757600080fd5b8b516001600160401b038111156200025e57600080fd5b6200026c8e828f0162000144565b60208e0151909c5090506001600160401b038111156200028b57600080fd5b620002998e828f0162000144565b9a505060408c01519850620002b160608d01620001f6565b60808d01519098506001600160401b03811115620002ce57600080fd5b620002dc8e828f0162000144565b60a08e015190985090506001600160401b03811115620002fb57600080fd5b620003098e828f0162000144565b60c08e015190975090506001600160401b038111156200032857600080fd5b620003368e828f0162000144565b60e08e015190965090506001600160401b038111156200035557600080fd5b620003638e828f0162000144565b945050620003756101008d0162000213565b6101208d01519093506001600160401b038111156200039357600080fd5b620003a18e828f0162000144565b6101408e015190935090506001600160401b03811115620003c157600080fd5b620003cf8e828f0162000144565b9150509295989b509295989b9093969950565b600181811c90821680620003f757607f821691505b6020821081036200041857634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200046e576000816000526020600020601f850160051c81016020861015620004495750805b601f850160051c820191505b818110156200046a5782815560010162000455565b5050505b505050565b81516001600160401b038111156200048f576200048f6200012e565b620004a781620004a08454620003e2565b846200041e565b602080601f831160018114620004df5760008415620004c65750858301515b600019600386901b1c1916600185901b1785556200046a565b600085815260208120601f198616915b828110156200051057888601518255948401946001909101908401620004ef565b50858210156200052f5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b611c13806200054f6000396000f3fe608060405234801561001057600080fd5b50600436106102485760003560e01c8063833e0d8c1161013b578063a124beba116100b8578063c9c922771161007c578063c9c92277146104f5578063cc872b6614610508578063e80500521461051b578063f2fde38b1461052e578063ffca397b1461054157600080fd5b8063a124beba14610480578063a9059cbb14610493578063ab2959ff146104a6578063b967a52e146104cf578063c72fe065146104e257600080fd5b80638f620487116100ff5780638f6204871461043057806392ff0d311461043857806395d89b41146104455780639cd237071461044d5780639ce960551461046057600080fd5b8063833e0d8c146103dd5780638739e663146103ef57806388539011146103f75780638da5cb5b1461040a5780638ed8a9bc1461041d57600080fd5b8063428630f6116101c95780635c40f6f41161018d5780635c40f6f41461037e57806360bf50fc1461039157806370a08231146103a457806376fa7a31146103b75780637c3bf42d146103ca57600080fd5b8063428630f614610340578063483f31ab146103485780635540e7cf1461035b578063565974d31461036e57806358c3b8701461037657600080fd5b806325287d421161021057806325287d42146102c557806325d60861146102f057806327e235e31461030557806336f7ab5e146103255780633e8a80091461032d57600080fd5b806306fdde031461024d578063153a1f3e1461026b57806318160ddd1461028e578063200d2ed2146102a557806323b872dd146102b2575b600080fd5b610255610554565b604051610262919061167a565b60405180910390f35b61027e6102793660046116d9565b6105e2565b6040519015158152602001610262565b61029760035481565b604051908152602001610262565b60075461027e9060ff1681565b61027e6102c0366004611761565b610808565b6004546102d8906001600160a01b031681565b6040516001600160a01b039091168152602001610262565b6103036102fe366004611840565b610a01565b005b61029761031336600461187d565b60086020526000908152604090205481565b610255610a5b565b61030361033b366004611840565b610a68565b610255610abe565b610303610356366004611898565b610acb565b610303610369366004611840565b610ba5565b610255610c3a565b610255610c47565b61030361038c3660046118b1565b610c54565b61025561039f3660046118e4565b610ce3565b6102976103b236600461187d565b610cfc565b6103036103c536600461187d565b610d17565b6102556103d836600461187d565b610d83565b600d5461027e90610100900460ff1681565b610255610d9c565b6103036104053660046118b1565b610da9565b6000546102d8906001600160a01b031681565b61030361042b366004611840565b610e0d565b610255610e63565b600d5461027e9060ff1681565b610255610e70565b61030361045b3660046118b1565b610e7d565b61029761046e36600461187d565b600e6020526000908152604090205481565b61030361048e3660046118ff565b610eda565b61027e6104a136600461194d565b610f45565b6102976104b436600461187d565b6001600160a01b03166000908152600e602052604090205490565b6103036104dd366004611840565b611012565b6103036104f0366004611840565b611068565b610303610503366004611840565b6110be565b610303610516366004611898565b611114565b61027e610529366004611977565b6111a5565b61030361053c36600461187d565b6112c9565b61025561054f3660046118e4565b6113b3565b6001805461056190611a11565b80601f016020809104026020016040519081016040528092919081815260200182805461058d90611a11565b80156105da5780601f106105af576101008083540402835291602001916105da565b820191906000526020600020905b8154815290600101906020018083116105bd57829003601f168201915b505050505081565b600083821461062857604080518082018252600681526531333032303160d01b6020820152905162461bcd60e51b815261061f919060040161167a565b60405180910390fd5b6000805b858110156106625784848281811061064657610646611a4b565b90506020020135826106589190611a77565b915060010161062c565b508061066d33610cfc565b10156106a757604080518082018252600681526518999819181960d11b6020820152905162461bcd60e51b815261061f919060040161167a565b6004546001600160a01b0316331461070157600d5460408051808201909152600681526531333032303360d01b60208201529060ff1615156001146106ff5760405162461bcd60e51b815260040161061f919061167a565b505b606060006001935060005b878110156107fc5761074489898381811061072957610729611a4b565b905060200201602081019061073e919061187d565b3b151590565b156107995761079289898381811061075e5761075e611a4b565b9050602002016020810190610773919061187d565b88888481811061078557610785611a4b565b9050602002013585611459565b91506107e5565b6107e28989838181106107ae576107ae611a4b565b90506020020160208101906107c3919061187d565b8888848181106107d5576107d5611a4b565b9050602002013585611586565b91505b8115156000036107f457600094505b60010161070c565b50505050949350505050565b6000805460408051808201909152600681526535303030303160d01b6020820152906001600160a01b031633146108525760405162461bcd60e51b815260040161061f919061167a565b508161085d85610cfc565b101561089757604080518082018252600681526531333033303160d01b6020820152905162461bcd60e51b815261061f919060040161167a565b6060833b1561095c576108b3836108ad87610cfc565b90611615565b6001600160a01b0386166000908152600860205260409020556108df836108d986610cfc565b90611628565b6001600160a01b0385166000818152600860205260409081902092909255905163607705c560e11b815285919063c0ee0b8a9061092490339088908790600401611a8a565b600060405180830381600087803b15801561093e57600080fd5b505af1158015610952573d6000803e3d6000fd5b50505050506109a9565b610969836108ad87610cfc565b6001600160a01b03861660009081526008602052604090205561098f836108d986610cfc565b6001600160a01b0385166000908152600860205260409020555b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516109ee91815260200190565b60405180910390a3506001949350505050565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b03163314610a4a5760405162461bcd60e51b815260040161061f919061167a565b50600c610a578282611b0a565b5050565b6005805461056190611a11565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b03163314610ab15760405162461bcd60e51b815260040161061f919061167a565b506009610a578282611b0a565b6006805461056190611a11565b80610ad533610cfc565b1015610b0f57604080518082018252600681526531333034303160d01b6020820152905162461bcd60e51b815261061f919060040161167a565b610b1c816108ad33610cfc565b33600090815260086020908152604080832093909355600e90522054610b439082906108d9565b336000818152600e6020818152604080842086905560088252928390205491815282519182528101939093528201839052907fd9380a77212b15ea71f279a52a60415086a7679b50528cb78e9db6ea848698d59060600160405180910390a250565b600d5460408051808201909152600681526531333035303160d01b60208201529060ff610100909104161515600114610bf15760405162461bcd60e51b815260040161061f919061167a565b50336000908152601060205260409020610c0b8282611b0a565b5060405133907fa0a0cb7a71308c6bc8ff419bcc1cc3e9fd3009c7edf8a8d8c506ca5c46688b4990600090a250565b6009805461056190611a11565b600c805461056190611a11565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b03163314610c9d5760405162461bcd60e51b815260040161061f919061167a565b506007805460ff191682151590811790915560405160ff9091161515907fe1e5c6f5867805bf3fab73f4df4b80d0e87e9262a7bc22ac7c2cb3fd5896222f90600090a250565b600f602052600090815260409020805461056190611a11565b6001600160a01b031660009081526008602052604090205490565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b03163314610d605760405162461bcd60e51b815260040161061f919061167a565b50600480546001600160a01b0319166001600160a01b0392909216919091179055565b6010602052600090815260409020805461056190611a11565b600a805461056190611a11565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b03163314610df25760405162461bcd60e51b815260040161061f919061167a565b50600d80549115156101000261ff0019909216919091179055565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b03163314610e565760405162461bcd60e51b815260040161061f919061167a565b506006610a578282611b0a565b600b805461056190611a11565b6002805461056190611a11565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b03163314610ec65760405162461bcd60e51b815260040161061f919061167a565b50600d805460ff1916911515919091179055565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b03163314610f235760405162461bcd60e51b815260040161061f919061167a565b5060ff82166000908152600f60205260409020610f408282611b0a565b505050565b600081610f5133610cfc565b1015610f8b57604080518082018252600681526531333031303160d01b6020820152905162461bcd60e51b815261061f919060040161167a565b6004546001600160a01b03163314610fe557600d5460408051808201909152600681526518999818981960d11b60208201529060ff161515600114610fe35760405162461bcd60e51b815260040161061f919061167a565b505b6060833b1561100157610ff9848483611459565b91505061100c565b610ff9848483611586565b92915050565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b0316331461105b5760405162461bcd60e51b815260040161061f919061167a565b506005610a578282611b0a565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b031633146110b15760405162461bcd60e51b815260040161061f919061167a565b50600a610a578282611b0a565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b031633146111075760405162461bcd60e51b815260040161061f919061167a565b50600b610a578282611b0a565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b0316331461115d5760405162461bcd60e51b815260040161061f919061167a565b5060035461116b9082611628565b6003556000546111899082906108d9906001600160a01b0316610cfc565b600080546001600160a01b031681526008602052604090205550565b6000805460408051808201909152600681526535303030303160d01b6020820152906001600160a01b031633146111ef5760405162461bcd60e51b815260040161061f919061167a565b5085841415806111ff5750858214155b1561123857604080518082018252600681526531333036303160d01b6020820152905162461bcd60e51b815261061f919060040161167a565b60005b868110156112bb576112b288888381811061125857611258611a4b565b905060200201602081019061126d919061187d565b87878481811061127f5761127f611a4b565b9050602002016020810190611294919061187d565b8686858181106112a6576112a6611a4b565b90506020020135610808565b5060010161123b565b506001979650505050505050565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b031633146113125760405162461bcd60e51b815260040161061f919061167a565b5060408051808201909152600681526535303031303160d01b60208201526001600160a01b0382166113575760405162461bcd60e51b815260040161061f919061167a565b50600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60ff81166000908152600f602052604090208054606091906113d490611a11565b80601f016020809104026020016040519081016040528092919081815260200182805461140090611a11565b801561144d5780601f106114225761010080835404028352916020019161144d565b820191906000526020600020905b81548152906001019060200180831161143057829003601f168201915b50505050509050919050565b60045460408051808201909152600681526531333030303160d01b60208201526000916001600160a01b038681169116146114a75760405162461bcd60e51b815260040161061f919061167a565b506114b5836108ad33610cfc565b336000908152600860205260409020556114d2836108d986610cfc565b6001600160a01b0385166000818152600860205260409081902092909255905163607705c560e11b815285919063c0ee0b8a9061151790339088908890600401611a8a565b600060405180830381600087803b15801561153157600080fd5b505af1158015611545573d6000803e3d6000fd5b50506040518681526001600160a01b03881692503391507fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016109ee565b6000611595836108ad33610cfc565b336000908152600860205260409020556115b2836108d986610cfc565b6001600160a01b0385166000818152600860205260409081902092909255905133907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906116039087815260200190565b60405180910390a35060019392505050565b60006116218284611bca565b9392505050565b60006116218284611a77565b6000815180845260005b8181101561165a5760208185018101518683018201520161163e565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006116216020830184611634565b60008083601f84011261169f57600080fd5b50813567ffffffffffffffff8111156116b757600080fd5b6020830191508360208260051b85010111156116d257600080fd5b9250929050565b600080600080604085870312156116ef57600080fd5b843567ffffffffffffffff8082111561170757600080fd5b6117138883890161168d565b9096509450602087013591508082111561172c57600080fd5b506117398782880161168d565b95989497509550505050565b80356001600160a01b038116811461175c57600080fd5b919050565b60008060006060848603121561177657600080fd5b61177f84611745565b925061178d60208501611745565b9150604084013590509250925092565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126117c457600080fd5b813567ffffffffffffffff808211156117df576117df61179d565b604051601f8301601f19908116603f011681019082821181831017156118075761180761179d565b8160405283815286602085880101111561182057600080fd5b836020870160208301376000602085830101528094505050505092915050565b60006020828403121561185257600080fd5b813567ffffffffffffffff81111561186957600080fd5b611875848285016117b3565b949350505050565b60006020828403121561188f57600080fd5b61162182611745565b6000602082840312156118aa57600080fd5b5035919050565b6000602082840312156118c357600080fd5b8135801515811461162157600080fd5b803560ff8116811461175c57600080fd5b6000602082840312156118f657600080fd5b611621826118d3565b6000806040838503121561191257600080fd5b61191b836118d3565b9150602083013567ffffffffffffffff81111561193757600080fd5b611943858286016117b3565b9150509250929050565b6000806040838503121561196057600080fd5b61196983611745565b946020939093013593505050565b6000806000806000806060878903121561199057600080fd5b863567ffffffffffffffff808211156119a857600080fd5b6119b48a838b0161168d565b909850965060208901359150808211156119cd57600080fd5b6119d98a838b0161168d565b909650945060408901359150808211156119f257600080fd5b506119ff89828a0161168d565b979a9699509497509295939492505050565b600181811c90821680611a2557607f821691505b602082108103611a4557634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b8082018082111561100c5761100c611a61565b60018060a01b0384168152826020820152606060408201526000611ab16060830184611634565b95945050505050565b601f821115610f40576000816000526020600020601f850160051c81016020861015611ae35750805b601f850160051c820191505b81811015611b0257828155600101611aef565b505050505050565b815167ffffffffffffffff811115611b2457611b2461179d565b611b3881611b328454611a11565b84611aba565b602080601f831160018114611b6d5760008415611b555750858301515b600019600386901b1c1916600185901b178555611b02565b600085815260208120601f198616915b82811015611b9c57888601518255948401946001909101908401611b7d565b5085821015611bba5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b8181038181111561100c5761100c611a6156fea2646970667358221220a2ee61f6bda1c7c0772d8650565b74a88bf1cffc93816d05130caaed0efdb3de64736f6c63430008170033", + "deployedBytecode": "608060405234801561001057600080fd5b50600436106102485760003560e01c8063833e0d8c1161013b578063a124beba116100b8578063c9c922771161007c578063c9c92277146104f5578063cc872b6614610508578063e80500521461051b578063f2fde38b1461052e578063ffca397b1461054157600080fd5b8063a124beba14610480578063a9059cbb14610493578063ab2959ff146104a6578063b967a52e146104cf578063c72fe065146104e257600080fd5b80638f620487116100ff5780638f6204871461043057806392ff0d311461043857806395d89b41146104455780639cd237071461044d5780639ce960551461046057600080fd5b8063833e0d8c146103dd5780638739e663146103ef57806388539011146103f75780638da5cb5b1461040a5780638ed8a9bc1461041d57600080fd5b8063428630f6116101c95780635c40f6f41161018d5780635c40f6f41461037e57806360bf50fc1461039157806370a08231146103a457806376fa7a31146103b75780637c3bf42d146103ca57600080fd5b8063428630f614610340578063483f31ab146103485780635540e7cf1461035b578063565974d31461036e57806358c3b8701461037657600080fd5b806325287d421161021057806325287d42146102c557806325d60861146102f057806327e235e31461030557806336f7ab5e146103255780633e8a80091461032d57600080fd5b806306fdde031461024d578063153a1f3e1461026b57806318160ddd1461028e578063200d2ed2146102a557806323b872dd146102b2575b600080fd5b610255610554565b604051610262919061167a565b60405180910390f35b61027e6102793660046116d9565b6105e2565b6040519015158152602001610262565b61029760035481565b604051908152602001610262565b60075461027e9060ff1681565b61027e6102c0366004611761565b610808565b6004546102d8906001600160a01b031681565b6040516001600160a01b039091168152602001610262565b6103036102fe366004611840565b610a01565b005b61029761031336600461187d565b60086020526000908152604090205481565b610255610a5b565b61030361033b366004611840565b610a68565b610255610abe565b610303610356366004611898565b610acb565b610303610369366004611840565b610ba5565b610255610c3a565b610255610c47565b61030361038c3660046118b1565b610c54565b61025561039f3660046118e4565b610ce3565b6102976103b236600461187d565b610cfc565b6103036103c536600461187d565b610d17565b6102556103d836600461187d565b610d83565b600d5461027e90610100900460ff1681565b610255610d9c565b6103036104053660046118b1565b610da9565b6000546102d8906001600160a01b031681565b61030361042b366004611840565b610e0d565b610255610e63565b600d5461027e9060ff1681565b610255610e70565b61030361045b3660046118b1565b610e7d565b61029761046e36600461187d565b600e6020526000908152604090205481565b61030361048e3660046118ff565b610eda565b61027e6104a136600461194d565b610f45565b6102976104b436600461187d565b6001600160a01b03166000908152600e602052604090205490565b6103036104dd366004611840565b611012565b6103036104f0366004611840565b611068565b610303610503366004611840565b6110be565b610303610516366004611898565b611114565b61027e610529366004611977565b6111a5565b61030361053c36600461187d565b6112c9565b61025561054f3660046118e4565b6113b3565b6001805461056190611a11565b80601f016020809104026020016040519081016040528092919081815260200182805461058d90611a11565b80156105da5780601f106105af576101008083540402835291602001916105da565b820191906000526020600020905b8154815290600101906020018083116105bd57829003601f168201915b505050505081565b600083821461062857604080518082018252600681526531333032303160d01b6020820152905162461bcd60e51b815261061f919060040161167a565b60405180910390fd5b6000805b858110156106625784848281811061064657610646611a4b565b90506020020135826106589190611a77565b915060010161062c565b508061066d33610cfc565b10156106a757604080518082018252600681526518999819181960d11b6020820152905162461bcd60e51b815261061f919060040161167a565b6004546001600160a01b0316331461070157600d5460408051808201909152600681526531333032303360d01b60208201529060ff1615156001146106ff5760405162461bcd60e51b815260040161061f919061167a565b505b606060006001935060005b878110156107fc5761074489898381811061072957610729611a4b565b905060200201602081019061073e919061187d565b3b151590565b156107995761079289898381811061075e5761075e611a4b565b9050602002016020810190610773919061187d565b88888481811061078557610785611a4b565b9050602002013585611459565b91506107e5565b6107e28989838181106107ae576107ae611a4b565b90506020020160208101906107c3919061187d565b8888848181106107d5576107d5611a4b565b9050602002013585611586565b91505b8115156000036107f457600094505b60010161070c565b50505050949350505050565b6000805460408051808201909152600681526535303030303160d01b6020820152906001600160a01b031633146108525760405162461bcd60e51b815260040161061f919061167a565b508161085d85610cfc565b101561089757604080518082018252600681526531333033303160d01b6020820152905162461bcd60e51b815261061f919060040161167a565b6060833b1561095c576108b3836108ad87610cfc565b90611615565b6001600160a01b0386166000908152600860205260409020556108df836108d986610cfc565b90611628565b6001600160a01b0385166000818152600860205260409081902092909255905163607705c560e11b815285919063c0ee0b8a9061092490339088908790600401611a8a565b600060405180830381600087803b15801561093e57600080fd5b505af1158015610952573d6000803e3d6000fd5b50505050506109a9565b610969836108ad87610cfc565b6001600160a01b03861660009081526008602052604090205561098f836108d986610cfc565b6001600160a01b0385166000908152600860205260409020555b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516109ee91815260200190565b60405180910390a3506001949350505050565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b03163314610a4a5760405162461bcd60e51b815260040161061f919061167a565b50600c610a578282611b0a565b5050565b6005805461056190611a11565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b03163314610ab15760405162461bcd60e51b815260040161061f919061167a565b506009610a578282611b0a565b6006805461056190611a11565b80610ad533610cfc565b1015610b0f57604080518082018252600681526531333034303160d01b6020820152905162461bcd60e51b815261061f919060040161167a565b610b1c816108ad33610cfc565b33600090815260086020908152604080832093909355600e90522054610b439082906108d9565b336000818152600e6020818152604080842086905560088252928390205491815282519182528101939093528201839052907fd9380a77212b15ea71f279a52a60415086a7679b50528cb78e9db6ea848698d59060600160405180910390a250565b600d5460408051808201909152600681526531333035303160d01b60208201529060ff610100909104161515600114610bf15760405162461bcd60e51b815260040161061f919061167a565b50336000908152601060205260409020610c0b8282611b0a565b5060405133907fa0a0cb7a71308c6bc8ff419bcc1cc3e9fd3009c7edf8a8d8c506ca5c46688b4990600090a250565b6009805461056190611a11565b600c805461056190611a11565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b03163314610c9d5760405162461bcd60e51b815260040161061f919061167a565b506007805460ff191682151590811790915560405160ff9091161515907fe1e5c6f5867805bf3fab73f4df4b80d0e87e9262a7bc22ac7c2cb3fd5896222f90600090a250565b600f602052600090815260409020805461056190611a11565b6001600160a01b031660009081526008602052604090205490565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b03163314610d605760405162461bcd60e51b815260040161061f919061167a565b50600480546001600160a01b0319166001600160a01b0392909216919091179055565b6010602052600090815260409020805461056190611a11565b600a805461056190611a11565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b03163314610df25760405162461bcd60e51b815260040161061f919061167a565b50600d80549115156101000261ff0019909216919091179055565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b03163314610e565760405162461bcd60e51b815260040161061f919061167a565b506006610a578282611b0a565b600b805461056190611a11565b6002805461056190611a11565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b03163314610ec65760405162461bcd60e51b815260040161061f919061167a565b50600d805460ff1916911515919091179055565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b03163314610f235760405162461bcd60e51b815260040161061f919061167a565b5060ff82166000908152600f60205260409020610f408282611b0a565b505050565b600081610f5133610cfc565b1015610f8b57604080518082018252600681526531333031303160d01b6020820152905162461bcd60e51b815261061f919060040161167a565b6004546001600160a01b03163314610fe557600d5460408051808201909152600681526518999818981960d11b60208201529060ff161515600114610fe35760405162461bcd60e51b815260040161061f919061167a565b505b6060833b1561100157610ff9848483611459565b91505061100c565b610ff9848483611586565b92915050565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b0316331461105b5760405162461bcd60e51b815260040161061f919061167a565b506005610a578282611b0a565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b031633146110b15760405162461bcd60e51b815260040161061f919061167a565b50600a610a578282611b0a565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b031633146111075760405162461bcd60e51b815260040161061f919061167a565b50600b610a578282611b0a565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b0316331461115d5760405162461bcd60e51b815260040161061f919061167a565b5060035461116b9082611628565b6003556000546111899082906108d9906001600160a01b0316610cfc565b600080546001600160a01b031681526008602052604090205550565b6000805460408051808201909152600681526535303030303160d01b6020820152906001600160a01b031633146111ef5760405162461bcd60e51b815260040161061f919061167a565b5085841415806111ff5750858214155b1561123857604080518082018252600681526531333036303160d01b6020820152905162461bcd60e51b815261061f919060040161167a565b60005b868110156112bb576112b288888381811061125857611258611a4b565b905060200201602081019061126d919061187d565b87878481811061127f5761127f611a4b565b9050602002016020810190611294919061187d565b8686858181106112a6576112a6611a4b565b90506020020135610808565b5060010161123b565b506001979650505050505050565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b031633146113125760405162461bcd60e51b815260040161061f919061167a565b5060408051808201909152600681526535303031303160d01b60208201526001600160a01b0382166113575760405162461bcd60e51b815260040161061f919061167a565b50600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60ff81166000908152600f602052604090208054606091906113d490611a11565b80601f016020809104026020016040519081016040528092919081815260200182805461140090611a11565b801561144d5780601f106114225761010080835404028352916020019161144d565b820191906000526020600020905b81548152906001019060200180831161143057829003601f168201915b50505050509050919050565b60045460408051808201909152600681526531333030303160d01b60208201526000916001600160a01b038681169116146114a75760405162461bcd60e51b815260040161061f919061167a565b506114b5836108ad33610cfc565b336000908152600860205260409020556114d2836108d986610cfc565b6001600160a01b0385166000818152600860205260409081902092909255905163607705c560e11b815285919063c0ee0b8a9061151790339088908890600401611a8a565b600060405180830381600087803b15801561153157600080fd5b505af1158015611545573d6000803e3d6000fd5b50506040518681526001600160a01b03881692503391507fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016109ee565b6000611595836108ad33610cfc565b336000908152600860205260409020556115b2836108d986610cfc565b6001600160a01b0385166000818152600860205260409081902092909255905133907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906116039087815260200190565b60405180910390a35060019392505050565b60006116218284611bca565b9392505050565b60006116218284611a77565b6000815180845260005b8181101561165a5760208185018101518683018201520161163e565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006116216020830184611634565b60008083601f84011261169f57600080fd5b50813567ffffffffffffffff8111156116b757600080fd5b6020830191508360208260051b85010111156116d257600080fd5b9250929050565b600080600080604085870312156116ef57600080fd5b843567ffffffffffffffff8082111561170757600080fd5b6117138883890161168d565b9096509450602087013591508082111561172c57600080fd5b506117398782880161168d565b95989497509550505050565b80356001600160a01b038116811461175c57600080fd5b919050565b60008060006060848603121561177657600080fd5b61177f84611745565b925061178d60208501611745565b9150604084013590509250925092565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126117c457600080fd5b813567ffffffffffffffff808211156117df576117df61179d565b604051601f8301601f19908116603f011681019082821181831017156118075761180761179d565b8160405283815286602085880101111561182057600080fd5b836020870160208301376000602085830101528094505050505092915050565b60006020828403121561185257600080fd5b813567ffffffffffffffff81111561186957600080fd5b611875848285016117b3565b949350505050565b60006020828403121561188f57600080fd5b61162182611745565b6000602082840312156118aa57600080fd5b5035919050565b6000602082840312156118c357600080fd5b8135801515811461162157600080fd5b803560ff8116811461175c57600080fd5b6000602082840312156118f657600080fd5b611621826118d3565b6000806040838503121561191257600080fd5b61191b836118d3565b9150602083013567ffffffffffffffff81111561193757600080fd5b611943858286016117b3565b9150509250929050565b6000806040838503121561196057600080fd5b61196983611745565b946020939093013593505050565b6000806000806000806060878903121561199057600080fd5b863567ffffffffffffffff808211156119a857600080fd5b6119b48a838b0161168d565b909850965060208901359150808211156119cd57600080fd5b6119d98a838b0161168d565b909650945060408901359150808211156119f257600080fd5b506119ff89828a0161168d565b979a9699509497509295939492505050565b600181811c90821680611a2557607f821691505b602082108103611a4557634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b8082018082111561100c5761100c611a61565b60018060a01b0384168152826020820152606060408201526000611ab16060830184611634565b95945050505050565b601f821115610f40576000816000526020600020601f850160051c81016020861015611ae35750805b601f850160051c820191505b81811015611b0257828155600101611aef565b505050505050565b815167ffffffffffffffff811115611b2457611b2461179d565b611b3881611b328454611a11565b84611aba565b602080601f831160018114611b6d5760008415611b555750858301515b600019600386901b1c1916600185901b178555611b02565b600085815260208120601f198616915b82811015611b9c57888601518255948401946001909101908401611b7d565b5085821015611bba5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b8181038181111561100c5761100c611a6156fea2646970667358221220a2ee61f6bda1c7c0772d8650565b74a88bf1cffc93816d05130caaed0efdb3de64736f6c63430008170033" } \ No newline at end of file diff --git a/contracts/IbetEscrow.json b/contracts/IbetEscrow.json index 770fd8f1..0969710b 100644 --- a/contracts/IbetEscrow.json +++ b/contracts/IbetEscrow.json @@ -258,6 +258,25 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [ + { + "internalType": "uint256[]", + "name": "_escrowIdList", + "type": "uint256[]" + } + ], + "name": "bulkFinishEscrow", + "outputs": [ + { + "internalType": "bool", + "name": "success", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [ { @@ -498,6 +517,6 @@ "type": "function" } ], - "bytecode": "608060405234801561001057600080fd5b50604051611d48380380611d4883398101604081905261002f91610062565b6000805433600160a060020a03199182161790915560018054909116600160a060020a0392909216919091179055610092565b60006020828403121561007457600080fd5b8151600160a060020a038116811461008b57600080fd5b9392505050565b611ca7806100a16000396000f3fe608060405234801561001057600080fd5b50600436106100b85760003560e060020a90048063a2ee704311610075578063a2ee70431461019f578063b9ba9309146101c0578063c0ee0b8a146101c8578063e0182436146101dd578063f2fde38b146101f0578063f7888aec1461020357600080fd5b806332f1d7b6146100bd57806351cff8d9146100e557806367094fc9146100f85780637d19e5961461010b57806385aa92a7146101615780638da5cb5b1461018c575b600080fd5b6100d06100cb366004611829565b610216565b60405190151581526020015b60405180910390f35b6100d06100f336600461185a565b61082c565b6100d0610106366004611923565b6109f3565b61011e610119366004611829565b610e55565b60408051600160a060020a0397881681529587166020870152938616938501939093526060840191909152909216608082015290151560a082015260c0016100dc565b60015461017490600160a060020a031681565b604051600160a060020a0390911681526020016100dc565b60005461017490600160a060020a031681565b6101b26101ad3660046119b6565b610efc565b6040519081526020016100dc565b6101b2610f96565b6101db6101d63660046119ef565b61100c565b005b6100d06101eb366004611829565b6110cd565b6101db6101fe36600461185a565b611692565b6101b26102113660046119b6565b6117bd565b6001546040805160e060020a63e1072a6f0281529051600092600160a060020a03169163e1072a6f9160048083019260209291908290030181865afa158015610263573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102879190611a5c565b8211156040518060400160405280600681526020017f3233303230310000000000000000000000000000000000000000000000000000815250906102ea5760405160e560020a62461bcd0281526004016102e19190611abb565b60405180910390fd5b506040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a08101919091526001546040517f7d19e59600000000000000000000000000000000000000000000000000000000815260048101859052600160a060020a0390911690637d19e5969060240160c060405180830381865afa15801561037f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103a39190611ae3565b151560a08701819052600160a060020a03918216608088015260608701929092529182166040808701919091529282166020808701919091529390911684528151808301909252600682527f3233303230320000000000000000000000000000000000000000000000000000928201929092529060011461043a5760405160e560020a62461bcd0281526004016102e19190611abb565b50608081015160408051808201909152600681527f3233303230330000000000000000000000000000000000000000000000000000602082015290600160a060020a031633146104a05760405160e560020a62461bcd0281526004016102e19190611abb565b508060000151600160a060020a031663200d2ed26040518163ffffffff1660e060020a028152600401602060405180830381865afa1580156104e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061050a9190611b5b565b60408051808201909152600681527f323330323034000000000000000000000000000000000000000000000000000060208201529015156001146105645760405160e560020a62461bcd0281526004016102e19190611abb565b50600154604082015182516060840151600160a060020a039093169263b5c9cbbe92919061059c9061059684846117bd565b90611811565b6040518463ffffffff1660e060020a0281526004016105bd93929190611b76565b6020604051808303816000875af11580156105dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106009190611b5b565b50600154602082015182516060840151600160a060020a039093169263d04c23af929190610638906106328484610efc565b9061181d565b6040518463ffffffff1660e060020a02815260040161065993929190611b76565b6020604051808303816000875af1158015610678573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061069c9190611b5b565b50600154815160208301516040808501516060860151608087015192517fa176130f000000000000000000000000000000000000000000000000000000008152600160a060020a039096169563a176130f95610708958b95919490939092909190600090600401611b9a565b600060405180830381600087803b15801561072257600080fd5b505af1158015610736573d6000803e3d6000fd5b505050508060000151600160a060020a0316837f6ae20d697bda08042d7ee0b6d1b19bf6d337d44e5fee6740fc4101388856177983602001518460400151856060015186608001516040516107b49493929190600160a060020a03948516815292841660208401526040830191909152909116606082015260800190565b60405180910390a38060400151600160a060020a03168160200151600160a060020a03168260000151600160a060020a03167f2458504403156ef04185b3cb0aab362f0421374a9fccb513fcf87c416324d40e846060015160405161081b91815260200190565b60405180910390a450600192915050565b60008061083933846117bd565b9050600081116040518060400160405280600681526020017f3233303330310000000000000000000000000000000000000000000000000000815250906108965760405160e560020a62461bcd0281526004016102e19190611abb565b506040517fa9059cbb00000000000000000000000000000000000000000000000000000000815233600482015260248101829052600160a060020a0384169063a9059cbb906044016020604051808303816000875af11580156108fd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109219190611b5b565b506001546040517fb5c9cbbe000000000000000000000000000000000000000000000000000000008152600160a060020a039091169063b5c9cbbe906109709033908790600090600401611b76565b6020604051808303816000875af115801561098f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109b39190611b5b565b506040513390600160a060020a038516907f85b9d5ac4b95740dafd1b47130d38b5f34a9104dd14b1c88a2fb5a44c3a00ce790600090a350600192915050565b60008084116040518060400160405280600681526020017f323330303031000000000000000000000000000000000000000000000000000081525090610a4f5760405160e560020a62461bcd0281526004016102e19190611abb565b5083610a5b33886117bd565b10156040518060400160405280600681526020017f323330303032000000000000000000000000000000000000000000000000000081525090610ab45760405160e560020a62461bcd0281526004016102e19190611abb565b5085600160a060020a031663200d2ed26040518163ffffffff1660e060020a028152600401602060405180830381865afa158015610af6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b1a9190611b5b565b60408051808201909152600681527f32333030303300000000000000000000000000000000000000000000000000006020820152901515600114610b745760405160e560020a62461bcd0281526004016102e19190611abb565b506001546040805160e060020a63e1072a6f0281529051600092600160a060020a03169163e1072a6f9160048083019260209291908290030181865afa158015610bc2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610be69190611a5c565b610bf1906001611c06565b6001546040517f5ff9a53800000000000000000000000000000000000000000000000000000000815260048101839052919250600160a060020a031690635ff9a53890602401600060405180830381600087803b158015610c5157600080fd5b505af1158015610c65573d6000803e3d6000fd5b5050600180546040517fa176130f000000000000000000000000000000000000000000000000000000008152600160a060020a03909116935063a176130f9250610cbe9185918c9133918d918d918d9190600401611b9a565b600060405180830381600087803b158015610cd857600080fd5b505af1158015610cec573d6000803e3d6000fd5b5050600154600160a060020a0316915063b5c9cbbe90503389610d138961063284846117bd565b6040518463ffffffff1660e060020a028152600401610d3493929190611b76565b6020604051808303816000875af1158015610d53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d779190611b5b565b50600154600160a060020a031663d04c23af3389610d99896105968484610efc565b6040518463ffffffff1660e060020a028152600401610dba93929190611b76565b6020604051808303816000875af1158015610dd9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dfd9190611b5b565b5086600160a060020a0316817f1dbd4daa45ed3a034e3815010a377d5cb8cb4d62a344214241cb650c1da773263389898989604051610e40959493929190611c19565b60405180910390a35060019695505050505050565b6001546040517f7d19e5960000000000000000000000000000000000000000000000000000000081526004810183905260009182918291829182918291600160a060020a0390911690637d19e5969060240160c060405180830381865afa158015610ec4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee89190611ae3565b949c939b5091995097509550909350915050565b6001546040517f097d9012000000000000000000000000000000000000000000000000000000008152600160a060020a0384811660048301528381166024830152600092169063097d9012906044015b602060405180830381865afa158015610f69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f8d9190611a5c565b90505b92915050565b6001546040805160e060020a63e1072a6f0281529051600092600160a060020a03169163e1072a6f9160048083019260209291908290030181865afa158015610fe3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110079190611a5c565b905090565b600154600160a060020a031663b5c9cbbe843361102d8661059684846117bd565b6040518463ffffffff1660e060020a02815260040161104e93929190611b76565b6020604051808303816000875af115801561106d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110919190611b5b565b50604051600160a060020a0384169033907f76dacbd9b11b7bbe3372e54b4adc1eeb5724ff92f91142a1a45722c28582ebfd90600090a3505050565b6001546040805160e060020a63e1072a6f0281529051600092600160a060020a03169163e1072a6f9160048083019260209291908290030181865afa15801561111a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061113e9190611a5c565b8211156040518060400160405280600681526020017f3233303130310000000000000000000000000000000000000000000000000000815250906111985760405160e560020a62461bcd0281526004016102e19190611abb565b506040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a08101919091526001546040517f7d19e59600000000000000000000000000000000000000000000000000000000815260048101859052600160a060020a0390911690637d19e5969060240160c060405180830381865afa15801561122d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112519190611ae3565b151560a08701819052600160a060020a03918216608088015260608701929092529182166040808701919091529282166020808701919091529390911684528151808301909252600682527f323330313032000000000000000000000000000000000000000000000000000092820192909252906001146112e85760405160e560020a62461bcd0281526004016102e19190611abb565b508060200151600160a060020a031633600160a060020a0316148061132257508060800151600160a060020a031633600160a060020a0316145b6040518060400160405280600681526020017f3233303130330000000000000000000000000000000000000000000000000000815250906113795760405160e560020a62461bcd0281526004016102e19190611abb565b508060000151600160a060020a031663200d2ed26040518163ffffffff1660e060020a028152600401602060405180830381865afa1580156113bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113e39190611b5b565b60408051808201909152600681527f3233303130340000000000000000000000000000000000000000000000000000602082015290151560011461143d5760405160e560020a62461bcd0281526004016102e19190611abb565b50600154602082015182516060840151600160a060020a039093169263b5c9cbbe92919061146f9061059684846117bd565b6040518463ffffffff1660e060020a02815260040161149093929190611b76565b6020604051808303816000875af11580156114af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114d39190611b5b565b50600154602082015182516060840151600160a060020a039093169263d04c23af929190611505906106328484610efc565b6040518463ffffffff1660e060020a02815260040161152693929190611b76565b6020604051808303816000875af1158015611545573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115699190611b5b565b50600154815160208301516040808501516060860151608087015192517fa176130f000000000000000000000000000000000000000000000000000000008152600160a060020a039096169563a176130f956115d5958b95919490939092909190600090600401611b9a565b600060405180830381600087803b1580156115ef57600080fd5b505af1158015611603573d6000803e3d6000fd5b505050508060000151600160a060020a0316837fb7241699ec523a0e284a889e67fe27f7edc6a22e528c418f4de4b0870fa3b25283602001518460400151856060015186608001516040516116819493929190600160a060020a03948516815292841660208401526040830191909152909116606082015260800190565b60405180910390a350600192915050565b60005460408051808201909152600681527f3530303030310000000000000000000000000000000000000000000000000000602082015290600160a060020a031633146116f55760405160e560020a62461bcd0281526004016102e19190611abb565b5060408051808201909152600681527f35303031303100000000000000000000000000000000000000000000000000006020820152600160a060020a0382166117545760405160e560020a62461bcd0281526004016102e19190611abb565b5060008054604051600160a060020a03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b6001546040517fd4fac45d000000000000000000000000000000000000000000000000000000008152600160a060020a0384811660048301528381166024830152600092169063d4fac45d90604401610f4c565b6000610f8d8284611c06565b6000610f8d8284611c5e565b60006020828403121561183b57600080fd5b5035919050565b600160a060020a038116811461185757600080fd5b50565b60006020828403121561186c57600080fd5b813561187781611842565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600067ffffffffffffffff808411156118c8576118c861187e565b604051601f8501601f19908116603f011681019082821181831017156118f0576118f061187e565b8160405280935085815286868601111561190957600080fd5b858560208301376000602087830101525050509392505050565b600080600080600060a0868803121561193b57600080fd5b853561194681611842565b9450602086013561195681611842565b935060408601359250606086013561196d81611842565b9150608086013567ffffffffffffffff81111561198957600080fd5b8601601f8101881361199a57600080fd5b6119a9888235602084016118ad565b9150509295509295909350565b600080604083850312156119c957600080fd5b82356119d481611842565b915060208301356119e481611842565b809150509250929050565b600080600060608486031215611a0457600080fd5b8335611a0f81611842565b925060208401359150604084013567ffffffffffffffff811115611a3257600080fd5b8401601f81018613611a4357600080fd5b611a52868235602084016118ad565b9150509250925092565b600060208284031215611a6e57600080fd5b5051919050565b6000815180845260005b81811015611a9b57602081850181015186830182015201611a7f565b506000602082860101526020601f19601f83011685010191505092915050565b602081526000610f8d6020830184611a75565b80518015158114611ade57600080fd5b919050565b60008060008060008060c08789031215611afc57600080fd5b8651611b0781611842565b6020880151909650611b1881611842565b6040880151909550611b2981611842565b606088015160808901519195509350611b4181611842565b9150611b4f60a08801611ace565b90509295509295509295565b600060208284031215611b6d57600080fd5b610f8d82611ace565b600160a060020a039384168152919092166020820152604081019190915260600190565b968752600160a060020a03958616602088015293851660408701529184166060860152608085015290911660a0830152151560c082015260e00190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b80820180821115610f9057610f90611bd7565b6000600160a060020a038088168352808716602084015285604084015280851660608401525060a06080830152611c5360a0830184611a75565b979650505050505050565b81810381811115610f9057610f90611bd756fea26469706673582212202c75f459edede36eea02f6d532bdf9e02bea4a9631378d70c82052673d78ba3c64736f6c63430008110033", - "deployedBytecode": "608060405234801561001057600080fd5b50600436106100b85760003560e060020a90048063a2ee704311610075578063a2ee70431461019f578063b9ba9309146101c0578063c0ee0b8a146101c8578063e0182436146101dd578063f2fde38b146101f0578063f7888aec1461020357600080fd5b806332f1d7b6146100bd57806351cff8d9146100e557806367094fc9146100f85780637d19e5961461010b57806385aa92a7146101615780638da5cb5b1461018c575b600080fd5b6100d06100cb366004611829565b610216565b60405190151581526020015b60405180910390f35b6100d06100f336600461185a565b61082c565b6100d0610106366004611923565b6109f3565b61011e610119366004611829565b610e55565b60408051600160a060020a0397881681529587166020870152938616938501939093526060840191909152909216608082015290151560a082015260c0016100dc565b60015461017490600160a060020a031681565b604051600160a060020a0390911681526020016100dc565b60005461017490600160a060020a031681565b6101b26101ad3660046119b6565b610efc565b6040519081526020016100dc565b6101b2610f96565b6101db6101d63660046119ef565b61100c565b005b6100d06101eb366004611829565b6110cd565b6101db6101fe36600461185a565b611692565b6101b26102113660046119b6565b6117bd565b6001546040805160e060020a63e1072a6f0281529051600092600160a060020a03169163e1072a6f9160048083019260209291908290030181865afa158015610263573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102879190611a5c565b8211156040518060400160405280600681526020017f3233303230310000000000000000000000000000000000000000000000000000815250906102ea5760405160e560020a62461bcd0281526004016102e19190611abb565b60405180910390fd5b506040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a08101919091526001546040517f7d19e59600000000000000000000000000000000000000000000000000000000815260048101859052600160a060020a0390911690637d19e5969060240160c060405180830381865afa15801561037f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103a39190611ae3565b151560a08701819052600160a060020a03918216608088015260608701929092529182166040808701919091529282166020808701919091529390911684528151808301909252600682527f3233303230320000000000000000000000000000000000000000000000000000928201929092529060011461043a5760405160e560020a62461bcd0281526004016102e19190611abb565b50608081015160408051808201909152600681527f3233303230330000000000000000000000000000000000000000000000000000602082015290600160a060020a031633146104a05760405160e560020a62461bcd0281526004016102e19190611abb565b508060000151600160a060020a031663200d2ed26040518163ffffffff1660e060020a028152600401602060405180830381865afa1580156104e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061050a9190611b5b565b60408051808201909152600681527f323330323034000000000000000000000000000000000000000000000000000060208201529015156001146105645760405160e560020a62461bcd0281526004016102e19190611abb565b50600154604082015182516060840151600160a060020a039093169263b5c9cbbe92919061059c9061059684846117bd565b90611811565b6040518463ffffffff1660e060020a0281526004016105bd93929190611b76565b6020604051808303816000875af11580156105dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106009190611b5b565b50600154602082015182516060840151600160a060020a039093169263d04c23af929190610638906106328484610efc565b9061181d565b6040518463ffffffff1660e060020a02815260040161065993929190611b76565b6020604051808303816000875af1158015610678573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061069c9190611b5b565b50600154815160208301516040808501516060860151608087015192517fa176130f000000000000000000000000000000000000000000000000000000008152600160a060020a039096169563a176130f95610708958b95919490939092909190600090600401611b9a565b600060405180830381600087803b15801561072257600080fd5b505af1158015610736573d6000803e3d6000fd5b505050508060000151600160a060020a0316837f6ae20d697bda08042d7ee0b6d1b19bf6d337d44e5fee6740fc4101388856177983602001518460400151856060015186608001516040516107b49493929190600160a060020a03948516815292841660208401526040830191909152909116606082015260800190565b60405180910390a38060400151600160a060020a03168160200151600160a060020a03168260000151600160a060020a03167f2458504403156ef04185b3cb0aab362f0421374a9fccb513fcf87c416324d40e846060015160405161081b91815260200190565b60405180910390a450600192915050565b60008061083933846117bd565b9050600081116040518060400160405280600681526020017f3233303330310000000000000000000000000000000000000000000000000000815250906108965760405160e560020a62461bcd0281526004016102e19190611abb565b506040517fa9059cbb00000000000000000000000000000000000000000000000000000000815233600482015260248101829052600160a060020a0384169063a9059cbb906044016020604051808303816000875af11580156108fd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109219190611b5b565b506001546040517fb5c9cbbe000000000000000000000000000000000000000000000000000000008152600160a060020a039091169063b5c9cbbe906109709033908790600090600401611b76565b6020604051808303816000875af115801561098f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109b39190611b5b565b506040513390600160a060020a038516907f85b9d5ac4b95740dafd1b47130d38b5f34a9104dd14b1c88a2fb5a44c3a00ce790600090a350600192915050565b60008084116040518060400160405280600681526020017f323330303031000000000000000000000000000000000000000000000000000081525090610a4f5760405160e560020a62461bcd0281526004016102e19190611abb565b5083610a5b33886117bd565b10156040518060400160405280600681526020017f323330303032000000000000000000000000000000000000000000000000000081525090610ab45760405160e560020a62461bcd0281526004016102e19190611abb565b5085600160a060020a031663200d2ed26040518163ffffffff1660e060020a028152600401602060405180830381865afa158015610af6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b1a9190611b5b565b60408051808201909152600681527f32333030303300000000000000000000000000000000000000000000000000006020820152901515600114610b745760405160e560020a62461bcd0281526004016102e19190611abb565b506001546040805160e060020a63e1072a6f0281529051600092600160a060020a03169163e1072a6f9160048083019260209291908290030181865afa158015610bc2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610be69190611a5c565b610bf1906001611c06565b6001546040517f5ff9a53800000000000000000000000000000000000000000000000000000000815260048101839052919250600160a060020a031690635ff9a53890602401600060405180830381600087803b158015610c5157600080fd5b505af1158015610c65573d6000803e3d6000fd5b5050600180546040517fa176130f000000000000000000000000000000000000000000000000000000008152600160a060020a03909116935063a176130f9250610cbe9185918c9133918d918d918d9190600401611b9a565b600060405180830381600087803b158015610cd857600080fd5b505af1158015610cec573d6000803e3d6000fd5b5050600154600160a060020a0316915063b5c9cbbe90503389610d138961063284846117bd565b6040518463ffffffff1660e060020a028152600401610d3493929190611b76565b6020604051808303816000875af1158015610d53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d779190611b5b565b50600154600160a060020a031663d04c23af3389610d99896105968484610efc565b6040518463ffffffff1660e060020a028152600401610dba93929190611b76565b6020604051808303816000875af1158015610dd9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dfd9190611b5b565b5086600160a060020a0316817f1dbd4daa45ed3a034e3815010a377d5cb8cb4d62a344214241cb650c1da773263389898989604051610e40959493929190611c19565b60405180910390a35060019695505050505050565b6001546040517f7d19e5960000000000000000000000000000000000000000000000000000000081526004810183905260009182918291829182918291600160a060020a0390911690637d19e5969060240160c060405180830381865afa158015610ec4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee89190611ae3565b949c939b5091995097509550909350915050565b6001546040517f097d9012000000000000000000000000000000000000000000000000000000008152600160a060020a0384811660048301528381166024830152600092169063097d9012906044015b602060405180830381865afa158015610f69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f8d9190611a5c565b90505b92915050565b6001546040805160e060020a63e1072a6f0281529051600092600160a060020a03169163e1072a6f9160048083019260209291908290030181865afa158015610fe3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110079190611a5c565b905090565b600154600160a060020a031663b5c9cbbe843361102d8661059684846117bd565b6040518463ffffffff1660e060020a02815260040161104e93929190611b76565b6020604051808303816000875af115801561106d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110919190611b5b565b50604051600160a060020a0384169033907f76dacbd9b11b7bbe3372e54b4adc1eeb5724ff92f91142a1a45722c28582ebfd90600090a3505050565b6001546040805160e060020a63e1072a6f0281529051600092600160a060020a03169163e1072a6f9160048083019260209291908290030181865afa15801561111a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061113e9190611a5c565b8211156040518060400160405280600681526020017f3233303130310000000000000000000000000000000000000000000000000000815250906111985760405160e560020a62461bcd0281526004016102e19190611abb565b506040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a08101919091526001546040517f7d19e59600000000000000000000000000000000000000000000000000000000815260048101859052600160a060020a0390911690637d19e5969060240160c060405180830381865afa15801561122d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112519190611ae3565b151560a08701819052600160a060020a03918216608088015260608701929092529182166040808701919091529282166020808701919091529390911684528151808301909252600682527f323330313032000000000000000000000000000000000000000000000000000092820192909252906001146112e85760405160e560020a62461bcd0281526004016102e19190611abb565b508060200151600160a060020a031633600160a060020a0316148061132257508060800151600160a060020a031633600160a060020a0316145b6040518060400160405280600681526020017f3233303130330000000000000000000000000000000000000000000000000000815250906113795760405160e560020a62461bcd0281526004016102e19190611abb565b508060000151600160a060020a031663200d2ed26040518163ffffffff1660e060020a028152600401602060405180830381865afa1580156113bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113e39190611b5b565b60408051808201909152600681527f3233303130340000000000000000000000000000000000000000000000000000602082015290151560011461143d5760405160e560020a62461bcd0281526004016102e19190611abb565b50600154602082015182516060840151600160a060020a039093169263b5c9cbbe92919061146f9061059684846117bd565b6040518463ffffffff1660e060020a02815260040161149093929190611b76565b6020604051808303816000875af11580156114af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114d39190611b5b565b50600154602082015182516060840151600160a060020a039093169263d04c23af929190611505906106328484610efc565b6040518463ffffffff1660e060020a02815260040161152693929190611b76565b6020604051808303816000875af1158015611545573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115699190611b5b565b50600154815160208301516040808501516060860151608087015192517fa176130f000000000000000000000000000000000000000000000000000000008152600160a060020a039096169563a176130f956115d5958b95919490939092909190600090600401611b9a565b600060405180830381600087803b1580156115ef57600080fd5b505af1158015611603573d6000803e3d6000fd5b505050508060000151600160a060020a0316837fb7241699ec523a0e284a889e67fe27f7edc6a22e528c418f4de4b0870fa3b25283602001518460400151856060015186608001516040516116819493929190600160a060020a03948516815292841660208401526040830191909152909116606082015260800190565b60405180910390a350600192915050565b60005460408051808201909152600681527f3530303030310000000000000000000000000000000000000000000000000000602082015290600160a060020a031633146116f55760405160e560020a62461bcd0281526004016102e19190611abb565b5060408051808201909152600681527f35303031303100000000000000000000000000000000000000000000000000006020820152600160a060020a0382166117545760405160e560020a62461bcd0281526004016102e19190611abb565b5060008054604051600160a060020a03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b6001546040517fd4fac45d000000000000000000000000000000000000000000000000000000008152600160a060020a0384811660048301528381166024830152600092169063d4fac45d90604401610f4c565b6000610f8d8284611c06565b6000610f8d8284611c5e565b60006020828403121561183b57600080fd5b5035919050565b600160a060020a038116811461185757600080fd5b50565b60006020828403121561186c57600080fd5b813561187781611842565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600067ffffffffffffffff808411156118c8576118c861187e565b604051601f8501601f19908116603f011681019082821181831017156118f0576118f061187e565b8160405280935085815286868601111561190957600080fd5b858560208301376000602087830101525050509392505050565b600080600080600060a0868803121561193b57600080fd5b853561194681611842565b9450602086013561195681611842565b935060408601359250606086013561196d81611842565b9150608086013567ffffffffffffffff81111561198957600080fd5b8601601f8101881361199a57600080fd5b6119a9888235602084016118ad565b9150509295509295909350565b600080604083850312156119c957600080fd5b82356119d481611842565b915060208301356119e481611842565b809150509250929050565b600080600060608486031215611a0457600080fd5b8335611a0f81611842565b925060208401359150604084013567ffffffffffffffff811115611a3257600080fd5b8401601f81018613611a4357600080fd5b611a52868235602084016118ad565b9150509250925092565b600060208284031215611a6e57600080fd5b5051919050565b6000815180845260005b81811015611a9b57602081850181015186830182015201611a7f565b506000602082860101526020601f19601f83011685010191505092915050565b602081526000610f8d6020830184611a75565b80518015158114611ade57600080fd5b919050565b60008060008060008060c08789031215611afc57600080fd5b8651611b0781611842565b6020880151909650611b1881611842565b6040880151909550611b2981611842565b606088015160808901519195509350611b4181611842565b9150611b4f60a08801611ace565b90509295509295509295565b600060208284031215611b6d57600080fd5b610f8d82611ace565b600160a060020a039384168152919092166020820152604081019190915260600190565b968752600160a060020a03958616602088015293851660408701529184166060860152608085015290911660a0830152151560c082015260e00190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b80820180821115610f9057610f90611bd7565b6000600160a060020a038088168352808716602084015285604084015280851660608401525060a06080830152611c5360a0830184611a75565b979650505050505050565b81810381811115610f9057610f90611bd756fea26469706673582212202c75f459edede36eea02f6d532bdf9e02bea4a9631378d70c82052673d78ba3c64736f6c63430008110033" + "bytecode": "608060405234801561001057600080fd5b50604051611b4c380380611b4c83398101604081905261002f91610062565b60008054336001600160a01b031991821617909155600180549091166001600160a01b0392909216919091179055610092565b60006020828403121561007457600080fd5b81516001600160a01b038116811461008b57600080fd5b9392505050565b611aab806100a16000396000f3fe608060405234801561001057600080fd5b50600436106100cf5760003560e01c806391870a611161008c578063c0ee0b8a11610066578063c0ee0b8a146101f2578063e018243614610207578063f2fde38b1461021a578063f7888aec1461022d57600080fd5b806391870a61146101b6578063a2ee7043146101c9578063b9ba9309146101ea57600080fd5b806332f1d7b6146100d457806351cff8d9146100fc57806367094fc91461010f5780637d19e5961461012257806385aa92a7146101785780638da5cb5b146101a3575b600080fd5b6100e76100e23660046115da565b610240565b60405190151581526020015b60405180910390f35b6100e761010a36600461160b565b6107b0565b6100e761011d3660046116b4565b61092b565b6101356101303660046115da565b610d01565b604080516001600160a01b0397881681529587166020870152938616938501939093526060840191909152909216608082015290151560a082015260c0016100f3565b60015461018b906001600160a01b031681565b6040516001600160a01b0390911681526020016100f3565b60005461018b906001600160a01b031681565b6100e76101c4366004611747565b610d8f565b6101dc6101d73660046117bc565b610dce565b6040519081526020016100f3565b6101dc610e4d565b6102056102003660046117f5565b610ec0565b005b6100e76102153660046115da565b610f7e565b61020561022836600461160b565b61149d565b6101dc61023b3660046117bc565b611587565b6001546040805163e1072a6f60e01b815290516000926001600160a01b03169163e1072a6f9160048083019260209291908290030181865afa15801561028a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102ae9190611862565b8211156040518060400160405280600681526020016532333032303160d01b815250906102f75760405162461bcd60e51b81526004016102ee91906118c1565b60405180910390fd5b506040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810191909152600154604051633e8cf2cb60e11b8152600481018590526001600160a01b0390911690637d19e5969060240160c060405180830381865afa158015610373573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061039791906118e9565b151560a087018190526001600160a01b03918216608088015260608701929092529182166040808701919091529282166020808701919091529390911684528151808301909252600682526519199819181960d11b92820192909252906001146104145760405162461bcd60e51b81526004016102ee91906118c1565b50608081015160408051808201909152600681526532333032303360d01b6020820152906001600160a01b031633146104605760405162461bcd60e51b81526004016102ee91906118c1565b5080600001516001600160a01b031663200d2ed26040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104c79190611961565b6040805180820190915260068152650c8ccc0c8c0d60d21b60208201529015156001146105075760405162461bcd60e51b81526004016102ee91906118c1565b506001546040820151825160608401516001600160a01b039093169263b5c9cbbe92919061053f906105398484611587565b906115c2565b6040518463ffffffff1660e01b815260040161055d9392919061197c565b6020604051808303816000875af115801561057c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105a09190611961565b506001546020820151825160608401516001600160a01b039093169263d04c23af9291906105d8906105d28484610dce565b906115ce565b6040518463ffffffff1660e01b81526004016105f69392919061197c565b6020604051808303816000875af1158015610615573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106399190611961565b506001548151602083015160408085015160608601516080870151925163a176130f60e01b81526001600160a01b039096169563a176130f9561068c958b959194909390929091906000906004016119a0565b600060405180830381600087803b1580156106a657600080fd5b505af11580156106ba573d6000803e3d6000fd5b5050505080600001516001600160a01b0316837f6ae20d697bda08042d7ee0b6d1b19bf6d337d44e5fee6740fc41013888561779836020015184604001518560600151866080015160405161073894939291906001600160a01b03948516815292841660208401526040830191909152909116606082015260800190565b60405180910390a380604001516001600160a01b031681602001516001600160a01b031682600001516001600160a01b03167f2458504403156ef04185b3cb0aab362f0421374a9fccb513fcf87c416324d40e846060015160405161079f91815260200190565b60405180910390a450600192915050565b6000806107bd3384611587565b9050600081116040518060400160405280600681526020016532333033303160d01b815250906108005760405162461bcd60e51b81526004016102ee91906118c1565b5060405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0384169063a9059cbb906044016020604051808303816000875af115801561084e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108729190611961565b50600154604051635ae4e5df60e11b81526001600160a01b039091169063b5c9cbbe906108a8903390879060009060040161197c565b6020604051808303816000875af11580156108c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108eb9190611961565b5060405133906001600160a01b038516907f85b9d5ac4b95740dafd1b47130d38b5f34a9104dd14b1c88a2fb5a44c3a00ce790600090a350600192915050565b60008084116040518060400160405280600681526020016532333030303160d01b8152509061096d5760405162461bcd60e51b81526004016102ee91906118c1565b50836109793388611587565b10156040518060400160405280600681526020016519199818181960d11b815250906109b85760405162461bcd60e51b81526004016102ee91906118c1565b50856001600160a01b031663200d2ed26040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109f7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a1b9190611961565b60408051808201909152600681526532333030303360d01b6020820152901515600114610a5b5760405162461bcd60e51b81526004016102ee91906118c1565b506001546040805163e1072a6f60e01b815290516000926001600160a01b03169163e1072a6f9160048083019260209291908290030181865afa158015610aa6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aca9190611862565b610ad59060016119f3565b600154604051630bff34a760e31b8152600481018390529192506001600160a01b031690635ff9a53890602401600060405180830381600087803b158015610b1c57600080fd5b505af1158015610b30573d6000803e3d6000fd5b50506001805460405163a176130f60e01b81526001600160a01b03909116935063a176130f9250610b709185918c9133918d918d918d91906004016119a0565b600060405180830381600087803b158015610b8a57600080fd5b505af1158015610b9e573d6000803e3d6000fd5b50506001546001600160a01b0316915063b5c9cbbe90503389610bc5896105d28484611587565b6040518463ffffffff1660e01b8152600401610be39392919061197c565b6020604051808303816000875af1158015610c02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c269190611961565b506001546001600160a01b031663d04c23af3389610c48896105398484610dce565b6040518463ffffffff1660e01b8152600401610c669392919061197c565b6020604051808303816000875af1158015610c85573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca99190611961565b50866001600160a01b0316817f1dbd4daa45ed3a034e3815010a377d5cb8cb4d62a344214241cb650c1da773263389898989604051610cec959493929190611a06565b60405180910390a35060019695505050505050565b600154604051633e8cf2cb60e11b815260048101839052600091829182918291829182916001600160a01b0390911690637d19e5969060240160c060405180830381865afa158015610d57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d7b91906118e9565b949c939b5091995097509550909350915050565b6000805b82811015610dc657610dbc848483818110610db057610db0611a4c565b90506020020135610240565b9150600101610d93565b505b92915050565b6001546040516304bec80960e11b81526001600160a01b0384811660048301528381166024830152600092169063097d9012906044015b602060405180830381865afa158015610e22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e469190611862565b9392505050565b6001546040805163e1072a6f60e01b815290516000926001600160a01b03169163e1072a6f9160048083019260209291908290030181865afa158015610e97573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ebb9190611862565b905090565b6001546001600160a01b031663b5c9cbbe8433610ee1866105398484611587565b6040518463ffffffff1660e01b8152600401610eff9392919061197c565b6020604051808303816000875af1158015610f1e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f429190611961565b506040516001600160a01b0384169033907f76dacbd9b11b7bbe3372e54b4adc1eeb5724ff92f91142a1a45722c28582ebfd90600090a3505050565b6001546040805163e1072a6f60e01b815290516000926001600160a01b03169163e1072a6f9160048083019260209291908290030181865afa158015610fc8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fec9190611862565b8211156040518060400160405280600681526020016532333031303160d01b8152509061102c5760405162461bcd60e51b81526004016102ee91906118c1565b506040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810191909152600154604051633e8cf2cb60e11b8152600481018590526001600160a01b0390911690637d19e5969060240160c060405180830381865afa1580156110a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110cc91906118e9565b151560a087018190526001600160a01b03918216608088015260608701929092529182166040808701919091529282166020808701919091529390911684528151808301909252600682526519199818981960d11b92820192909252906001146111495760405162461bcd60e51b81526004016102ee91906118c1565b5080602001516001600160a01b0316336001600160a01b03161480611183575080608001516001600160a01b0316336001600160a01b0316145b6040518060400160405280600681526020016532333031303360d01b815250906111c05760405162461bcd60e51b81526004016102ee91906118c1565b5080600001516001600160a01b031663200d2ed26040518163ffffffff1660e01b8152600401602060405180830381865afa158015611203573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112279190611961565b6040805180820190915260068152650c8ccc0c4c0d60d21b60208201529015156001146112675760405162461bcd60e51b81526004016102ee91906118c1565b506001546020820151825160608401516001600160a01b039093169263b5c9cbbe929190611299906105398484611587565b6040518463ffffffff1660e01b81526004016112b79392919061197c565b6020604051808303816000875af11580156112d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112fa9190611961565b506001546020820151825160608401516001600160a01b039093169263d04c23af92919061132c906105d28484610dce565b6040518463ffffffff1660e01b815260040161134a9392919061197c565b6020604051808303816000875af1158015611369573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061138d9190611961565b506001548151602083015160408085015160608601516080870151925163a176130f60e01b81526001600160a01b039096169563a176130f956113e0958b959194909390929091906000906004016119a0565b600060405180830381600087803b1580156113fa57600080fd5b505af115801561140e573d6000803e3d6000fd5b5050505080600001516001600160a01b0316837fb7241699ec523a0e284a889e67fe27f7edc6a22e528c418f4de4b0870fa3b252836020015184604001518560600151866080015160405161148c94939291906001600160a01b03948516815292841660208401526040830191909152909116606082015260800190565b60405180910390a350600192915050565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b031633146114e65760405162461bcd60e51b81526004016102ee91906118c1565b5060408051808201909152600681526535303031303160d01b60208201526001600160a01b03821661152b5760405162461bcd60e51b81526004016102ee91906118c1565b50600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60015460405163d4fac45d60e01b81526001600160a01b0384811660048301528381166024830152600092169063d4fac45d90604401610e05565b6000610e4682846119f3565b6000610e468284611a62565b6000602082840312156115ec57600080fd5b5035919050565b6001600160a01b038116811461160857600080fd5b50565b60006020828403121561161d57600080fd5b8135610e46816115f3565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff8084111561165957611659611628565b604051601f8501601f19908116603f0116810190828211818310171561168157611681611628565b8160405280935085815286868601111561169a57600080fd5b858560208301376000602087830101525050509392505050565b600080600080600060a086880312156116cc57600080fd5b85356116d7816115f3565b945060208601356116e7816115f3565b93506040860135925060608601356116fe816115f3565b9150608086013567ffffffffffffffff81111561171a57600080fd5b8601601f8101881361172b57600080fd5b61173a8882356020840161163e565b9150509295509295909350565b6000806020838503121561175a57600080fd5b823567ffffffffffffffff8082111561177257600080fd5b818501915085601f83011261178657600080fd5b81358181111561179557600080fd5b8660208260051b85010111156117aa57600080fd5b60209290920196919550909350505050565b600080604083850312156117cf57600080fd5b82356117da816115f3565b915060208301356117ea816115f3565b809150509250929050565b60008060006060848603121561180a57600080fd5b8335611815816115f3565b925060208401359150604084013567ffffffffffffffff81111561183857600080fd5b8401601f8101861361184957600080fd5b6118588682356020840161163e565b9150509250925092565b60006020828403121561187457600080fd5b5051919050565b6000815180845260005b818110156118a157602081850181015186830182015201611885565b506000602082860101526020601f19601f83011685010191505092915050565b602081526000610e46602083018461187b565b805180151581146118e457600080fd5b919050565b60008060008060008060c0878903121561190257600080fd5b865161190d816115f3565b602088015190965061191e816115f3565b604088015190955061192f816115f3565b606088015160808901519195509350611947816115f3565b915061195560a088016118d4565b90509295509295509295565b60006020828403121561197357600080fd5b610e46826118d4565b6001600160a01b039384168152919092166020820152604081019190915260600190565b9687526001600160a01b03958616602088015293851660408701529184166060860152608085015290911660a0830152151560c082015260e00190565b634e487b7160e01b600052601160045260246000fd5b80820180821115610dc857610dc86119dd565b6001600160a01b0386811682528581166020830152604082018590528316606082015260a060808201819052600090611a419083018461187b565b979650505050505050565b634e487b7160e01b600052603260045260246000fd5b81810381811115610dc857610dc86119dd56fea2646970667358221220a033a23bd843e90dd83862dafa007edd2bc3d029b4bc75d1adde7d21f9cd31aa64736f6c63430008170033", + "deployedBytecode": "608060405234801561001057600080fd5b50600436106100cf5760003560e01c806391870a611161008c578063c0ee0b8a11610066578063c0ee0b8a146101f2578063e018243614610207578063f2fde38b1461021a578063f7888aec1461022d57600080fd5b806391870a61146101b6578063a2ee7043146101c9578063b9ba9309146101ea57600080fd5b806332f1d7b6146100d457806351cff8d9146100fc57806367094fc91461010f5780637d19e5961461012257806385aa92a7146101785780638da5cb5b146101a3575b600080fd5b6100e76100e23660046115da565b610240565b60405190151581526020015b60405180910390f35b6100e761010a36600461160b565b6107b0565b6100e761011d3660046116b4565b61092b565b6101356101303660046115da565b610d01565b604080516001600160a01b0397881681529587166020870152938616938501939093526060840191909152909216608082015290151560a082015260c0016100f3565b60015461018b906001600160a01b031681565b6040516001600160a01b0390911681526020016100f3565b60005461018b906001600160a01b031681565b6100e76101c4366004611747565b610d8f565b6101dc6101d73660046117bc565b610dce565b6040519081526020016100f3565b6101dc610e4d565b6102056102003660046117f5565b610ec0565b005b6100e76102153660046115da565b610f7e565b61020561022836600461160b565b61149d565b6101dc61023b3660046117bc565b611587565b6001546040805163e1072a6f60e01b815290516000926001600160a01b03169163e1072a6f9160048083019260209291908290030181865afa15801561028a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102ae9190611862565b8211156040518060400160405280600681526020016532333032303160d01b815250906102f75760405162461bcd60e51b81526004016102ee91906118c1565b60405180910390fd5b506040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810191909152600154604051633e8cf2cb60e11b8152600481018590526001600160a01b0390911690637d19e5969060240160c060405180830381865afa158015610373573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061039791906118e9565b151560a087018190526001600160a01b03918216608088015260608701929092529182166040808701919091529282166020808701919091529390911684528151808301909252600682526519199819181960d11b92820192909252906001146104145760405162461bcd60e51b81526004016102ee91906118c1565b50608081015160408051808201909152600681526532333032303360d01b6020820152906001600160a01b031633146104605760405162461bcd60e51b81526004016102ee91906118c1565b5080600001516001600160a01b031663200d2ed26040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104c79190611961565b6040805180820190915260068152650c8ccc0c8c0d60d21b60208201529015156001146105075760405162461bcd60e51b81526004016102ee91906118c1565b506001546040820151825160608401516001600160a01b039093169263b5c9cbbe92919061053f906105398484611587565b906115c2565b6040518463ffffffff1660e01b815260040161055d9392919061197c565b6020604051808303816000875af115801561057c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105a09190611961565b506001546020820151825160608401516001600160a01b039093169263d04c23af9291906105d8906105d28484610dce565b906115ce565b6040518463ffffffff1660e01b81526004016105f69392919061197c565b6020604051808303816000875af1158015610615573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106399190611961565b506001548151602083015160408085015160608601516080870151925163a176130f60e01b81526001600160a01b039096169563a176130f9561068c958b959194909390929091906000906004016119a0565b600060405180830381600087803b1580156106a657600080fd5b505af11580156106ba573d6000803e3d6000fd5b5050505080600001516001600160a01b0316837f6ae20d697bda08042d7ee0b6d1b19bf6d337d44e5fee6740fc41013888561779836020015184604001518560600151866080015160405161073894939291906001600160a01b03948516815292841660208401526040830191909152909116606082015260800190565b60405180910390a380604001516001600160a01b031681602001516001600160a01b031682600001516001600160a01b03167f2458504403156ef04185b3cb0aab362f0421374a9fccb513fcf87c416324d40e846060015160405161079f91815260200190565b60405180910390a450600192915050565b6000806107bd3384611587565b9050600081116040518060400160405280600681526020016532333033303160d01b815250906108005760405162461bcd60e51b81526004016102ee91906118c1565b5060405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0384169063a9059cbb906044016020604051808303816000875af115801561084e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108729190611961565b50600154604051635ae4e5df60e11b81526001600160a01b039091169063b5c9cbbe906108a8903390879060009060040161197c565b6020604051808303816000875af11580156108c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108eb9190611961565b5060405133906001600160a01b038516907f85b9d5ac4b95740dafd1b47130d38b5f34a9104dd14b1c88a2fb5a44c3a00ce790600090a350600192915050565b60008084116040518060400160405280600681526020016532333030303160d01b8152509061096d5760405162461bcd60e51b81526004016102ee91906118c1565b50836109793388611587565b10156040518060400160405280600681526020016519199818181960d11b815250906109b85760405162461bcd60e51b81526004016102ee91906118c1565b50856001600160a01b031663200d2ed26040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109f7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a1b9190611961565b60408051808201909152600681526532333030303360d01b6020820152901515600114610a5b5760405162461bcd60e51b81526004016102ee91906118c1565b506001546040805163e1072a6f60e01b815290516000926001600160a01b03169163e1072a6f9160048083019260209291908290030181865afa158015610aa6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aca9190611862565b610ad59060016119f3565b600154604051630bff34a760e31b8152600481018390529192506001600160a01b031690635ff9a53890602401600060405180830381600087803b158015610b1c57600080fd5b505af1158015610b30573d6000803e3d6000fd5b50506001805460405163a176130f60e01b81526001600160a01b03909116935063a176130f9250610b709185918c9133918d918d918d91906004016119a0565b600060405180830381600087803b158015610b8a57600080fd5b505af1158015610b9e573d6000803e3d6000fd5b50506001546001600160a01b0316915063b5c9cbbe90503389610bc5896105d28484611587565b6040518463ffffffff1660e01b8152600401610be39392919061197c565b6020604051808303816000875af1158015610c02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c269190611961565b506001546001600160a01b031663d04c23af3389610c48896105398484610dce565b6040518463ffffffff1660e01b8152600401610c669392919061197c565b6020604051808303816000875af1158015610c85573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca99190611961565b50866001600160a01b0316817f1dbd4daa45ed3a034e3815010a377d5cb8cb4d62a344214241cb650c1da773263389898989604051610cec959493929190611a06565b60405180910390a35060019695505050505050565b600154604051633e8cf2cb60e11b815260048101839052600091829182918291829182916001600160a01b0390911690637d19e5969060240160c060405180830381865afa158015610d57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d7b91906118e9565b949c939b5091995097509550909350915050565b6000805b82811015610dc657610dbc848483818110610db057610db0611a4c565b90506020020135610240565b9150600101610d93565b505b92915050565b6001546040516304bec80960e11b81526001600160a01b0384811660048301528381166024830152600092169063097d9012906044015b602060405180830381865afa158015610e22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e469190611862565b9392505050565b6001546040805163e1072a6f60e01b815290516000926001600160a01b03169163e1072a6f9160048083019260209291908290030181865afa158015610e97573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ebb9190611862565b905090565b6001546001600160a01b031663b5c9cbbe8433610ee1866105398484611587565b6040518463ffffffff1660e01b8152600401610eff9392919061197c565b6020604051808303816000875af1158015610f1e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f429190611961565b506040516001600160a01b0384169033907f76dacbd9b11b7bbe3372e54b4adc1eeb5724ff92f91142a1a45722c28582ebfd90600090a3505050565b6001546040805163e1072a6f60e01b815290516000926001600160a01b03169163e1072a6f9160048083019260209291908290030181865afa158015610fc8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fec9190611862565b8211156040518060400160405280600681526020016532333031303160d01b8152509061102c5760405162461bcd60e51b81526004016102ee91906118c1565b506040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810191909152600154604051633e8cf2cb60e11b8152600481018590526001600160a01b0390911690637d19e5969060240160c060405180830381865afa1580156110a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110cc91906118e9565b151560a087018190526001600160a01b03918216608088015260608701929092529182166040808701919091529282166020808701919091529390911684528151808301909252600682526519199818981960d11b92820192909252906001146111495760405162461bcd60e51b81526004016102ee91906118c1565b5080602001516001600160a01b0316336001600160a01b03161480611183575080608001516001600160a01b0316336001600160a01b0316145b6040518060400160405280600681526020016532333031303360d01b815250906111c05760405162461bcd60e51b81526004016102ee91906118c1565b5080600001516001600160a01b031663200d2ed26040518163ffffffff1660e01b8152600401602060405180830381865afa158015611203573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112279190611961565b6040805180820190915260068152650c8ccc0c4c0d60d21b60208201529015156001146112675760405162461bcd60e51b81526004016102ee91906118c1565b506001546020820151825160608401516001600160a01b039093169263b5c9cbbe929190611299906105398484611587565b6040518463ffffffff1660e01b81526004016112b79392919061197c565b6020604051808303816000875af11580156112d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112fa9190611961565b506001546020820151825160608401516001600160a01b039093169263d04c23af92919061132c906105d28484610dce565b6040518463ffffffff1660e01b815260040161134a9392919061197c565b6020604051808303816000875af1158015611369573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061138d9190611961565b506001548151602083015160408085015160608601516080870151925163a176130f60e01b81526001600160a01b039096169563a176130f956113e0958b959194909390929091906000906004016119a0565b600060405180830381600087803b1580156113fa57600080fd5b505af115801561140e573d6000803e3d6000fd5b5050505080600001516001600160a01b0316837fb7241699ec523a0e284a889e67fe27f7edc6a22e528c418f4de4b0870fa3b252836020015184604001518560600151866080015160405161148c94939291906001600160a01b03948516815292841660208401526040830191909152909116606082015260800190565b60405180910390a350600192915050565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b031633146114e65760405162461bcd60e51b81526004016102ee91906118c1565b5060408051808201909152600681526535303031303160d01b60208201526001600160a01b03821661152b5760405162461bcd60e51b81526004016102ee91906118c1565b50600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60015460405163d4fac45d60e01b81526001600160a01b0384811660048301528381166024830152600092169063d4fac45d90604401610e05565b6000610e4682846119f3565b6000610e468284611a62565b6000602082840312156115ec57600080fd5b5035919050565b6001600160a01b038116811461160857600080fd5b50565b60006020828403121561161d57600080fd5b8135610e46816115f3565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff8084111561165957611659611628565b604051601f8501601f19908116603f0116810190828211818310171561168157611681611628565b8160405280935085815286868601111561169a57600080fd5b858560208301376000602087830101525050509392505050565b600080600080600060a086880312156116cc57600080fd5b85356116d7816115f3565b945060208601356116e7816115f3565b93506040860135925060608601356116fe816115f3565b9150608086013567ffffffffffffffff81111561171a57600080fd5b8601601f8101881361172b57600080fd5b61173a8882356020840161163e565b9150509295509295909350565b6000806020838503121561175a57600080fd5b823567ffffffffffffffff8082111561177257600080fd5b818501915085601f83011261178657600080fd5b81358181111561179557600080fd5b8660208260051b85010111156117aa57600080fd5b60209290920196919550909350505050565b600080604083850312156117cf57600080fd5b82356117da816115f3565b915060208301356117ea816115f3565b809150509250929050565b60008060006060848603121561180a57600080fd5b8335611815816115f3565b925060208401359150604084013567ffffffffffffffff81111561183857600080fd5b8401601f8101861361184957600080fd5b6118588682356020840161163e565b9150509250925092565b60006020828403121561187457600080fd5b5051919050565b6000815180845260005b818110156118a157602081850181015186830182015201611885565b506000602082860101526020601f19601f83011685010191505092915050565b602081526000610e46602083018461187b565b805180151581146118e457600080fd5b919050565b60008060008060008060c0878903121561190257600080fd5b865161190d816115f3565b602088015190965061191e816115f3565b604088015190955061192f816115f3565b606088015160808901519195509350611947816115f3565b915061195560a088016118d4565b90509295509295509295565b60006020828403121561197357600080fd5b610e46826118d4565b6001600160a01b039384168152919092166020820152604081019190915260600190565b9687526001600160a01b03958616602088015293851660408701529184166060860152608085015290911660a0830152151560c082015260e00190565b634e487b7160e01b600052601160045260246000fd5b80820180821115610dc857610dc86119dd565b6001600160a01b0386811682528581166020830152604082018590528316606082015260a060808201819052600090611a419083018461187b565b979650505050505050565b634e487b7160e01b600052603260045260246000fd5b81810381811115610dc857610dc86119dd56fea2646970667358221220a033a23bd843e90dd83862dafa007edd2bc3d029b4bc75d1adde7d21f9cd31aa64736f6c63430008170033" } \ No newline at end of file diff --git a/contracts/IbetExchange.json b/contracts/IbetExchange.json index b1166999..5ee44453 100644 --- a/contracts/IbetExchange.json +++ b/contracts/IbetExchange.json @@ -862,6 +862,6 @@ "type": "function" } ], - "bytecode": "6080604052621275006001553480156200001857600080fd5b5060405162002c3338038062002c338339810160408190526200003b9162000095565b60008054600160a060020a0319908116331790915560028054600160a060020a0394851690831617905560038054929093169116179055620000cd565b8051600160a060020a03811681146200009057600080fd5b919050565b60008060408385031215620000a957600080fd5b620000b48362000078565b9150620000c46020840162000078565b90509250929050565b612b5680620000dd6000396000f3fe608060405234801561001057600080fd5b50600436106101255760003560e060020a90048063a2ee7043116100b1578063dc01f10b11610075578063dc01f10b146102e7578063deb2ec6a146102fa578063f2fde38b1461030d578063f5a6ba2e14610320578063f7888aec1461033357600080fd5b8063a2ee704314610205578063bf18e24e14610218578063c0ee0b8a14610266578063d09ef2411461027b578063d1a397e5146102d457600080fd5b80635edada77116100f85780635edada771461018b5780636f3b60d6146101b65780637e6d36e2146101cc57806385aa92a7146101df5780638da5cb5b146101f257600080fd5b8063307f636b1461012a57806338a6e85514610152578063514fcac71461016557806351cff8d914610178575b600080fd5b61013d6101383660046126dd565b610346565b60405190151581526020015b60405180910390f35b61013d610160366004612725565b610809565b61013d610173366004612784565b610b0b565b61013d61018636600461279d565b610e42565b60025461019e90600160a060020a031681565b604051600160a060020a039091168152602001610149565b6101be610f6e565b604051908152602001610149565b61013d6101da3660046127ba565b610ffa565b60035461019e90600160a060020a031681565b60005461019e90600160a060020a031681565b6101be6102133660046127f3565b61150d565b61022b6102263660046126dd565b61159e565b60408051600160a060020a039097168752602087019590955293850192909252151560608401521515608083015260a082015260c001610149565b61027961027436600461285b565b61164d565b005b61028e610289366004612784565b61169c565b60408051600160a060020a039889168152968816602088015286019490945260608501929092521515608084015290921660a082015290151560c082015260e001610149565b61013d6102e23660046126dd565b611746565b6101be6102f5366004612784565b611c75565b61013d610308366004612784565b611cfd565b61027961031b36600461279d565b612031565b6101be61032e36600461279d565b61215c565b6101be6103413660046127f3565b6121a8565b6000610350610f6e565b8311156040518060400160405280600681526020017f3231303530310000000000000000000000000000000000000000000000000000815250906103b35760405160e560020a62461bcd0281526004016103aa9190612928565b60405180910390fd5b506103bd83611c75565b8211156040518060400160405280600681526020017f3231303530320000000000000000000000000000000000000000000000000000815250906104175760405160e560020a62461bcd0281526004016103aa9190612928565b5061042061265e565b6104298461169c565b151560c0880152600160a060020a0390811660a0880152901515608087015260608601919091526040850191909152908116602084015216815261046b61269a565b610475858561159e565b60a087018190529015156080870152901515606086015260408501919091526020840191909152600160a060020a0390911682524210610564578060800151806104c0575080606001515b8061050c57508160a00151600160a060020a031633600160a060020a0316141580156104f657508151600160a060020a03163314155b801561050c57508051600160a060020a03163314155b1561055f57604080518082018252600681527f32313035303300000000000000000000000000000000000000000000000000006020820152905160e560020a62461bcd0281526103aa9190600401612928565b6105e9565b806080015180610575575080606001515b8061059657508160a00151600160a060020a031633600160a060020a031614155b156105e957604080518082018252600681527f32313035303400000000000000000000000000000000000000000000000000006020820152905160e560020a62461bcd0281526103aa9190600401612928565b61062b8583600001518460200151610612856020015187604001516121fc90919063ffffffff16565b866060015187608001518860a001518960c00151612208565b506106518585836000015184602001518560400151600187608001518860a001516122c7565b508160800151156107865760208281015182519183015160405160e060020a63a9059cbb028152600160a060020a039384166004820152602481019190915291169063a9059cbb906044016020604051808303816000875af11580156106bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106df9190612976565b5080516020808401519083015161070b92919061070690610700848461150d565b90612347565b612353565b508060000151600160a060020a03168260000151600160a060020a03168360200151600160a060020a03167fc7065461c527949bffa69924a2264fb3a12540677585393b0f3c3d96dde067518888876060015187602001518960a00151604051610779959493929190612993565b60405180910390a46107fc565b8160000151600160a060020a03168160000151600160a060020a03168360200151600160a060020a03167fc7065461c527949bffa69924a2264fb3a12540677585393b0f3c3d96dde067518888876060015187602001518960a001516040516107f3959493929190612993565b60405180910390a45b6001925050505b92915050565b60008215156001036108f657841580610884575085600160a060020a031663200d2ed26040518163ffffffff1660e060020a028152600401602060405180830381865afa15801561085e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108829190612976565b155b8061089257506001333b1515145b806108a357506108a1826123e5565b155b156108f657604080518082018252600681527f32313030303100000000000000000000000000000000000000000000000000006020820152905160e560020a62461bcd0281526103aa9190600401612928565b821515600003610a365784158061091557508461091333886121a8565b105b80610982575085600160a060020a031663200d2ed26040518163ffffffff1660e060020a028152600401602060405180830381865afa15801561095c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109809190612976565b155b806109935750610991826123e5565b155b15610a365785600160a060020a031663a9059cbb336109b2338a6121a8565b60405160e060020a63ffffffff8516028152600160a060020a03909216600483015260248201526044016020604051808303816000875af11580156109fb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a1f9190612976565b50610a2c3387600061246d565b5060009050610b02565b6000610a40610f6e565b610a4b9060016129ee565b9050610a568161250e565b50610a68813389898989896000612208565b5083610aa257610a863388610a8189610700338d6121a8565b61246d565b50610aa0338861070689610a9a338d61150d565b906121fc565b505b6040805182815260208101879052908101879052600160a060020a0384811660608301528515159133918a16907f62266baceb3938a36f642a6b6857911fda416ba3f0b192a5a5a8e27d51ad15f99060800160405180910390a460019150505b95945050505050565b6000610b15610f6e565b8211156040518060400160405280600681526020017f323130313031000000000000000000000000000000000000000000000000000081525090610b6f5760405160e560020a62461bcd0281526004016103aa9190612928565b50610b7861265e565b610b818361169c565b151560c0880152600160a060020a0390811660a0880152901515608087015260608601919091526040808601839052928116602080870191909152931684528151808301909252600682527f32313031303200000000000000000000000000000000000000000000000000009282019290925290610c155760405160e560020a62461bcd0281526004016103aa9190612928565b5060c081015160408051808201909152600681527f323130313033000000000000000000000000000000000000000000000000000060208201529015610c715760405160e560020a62461bcd0281526004016103aa9190612928565b50805160408051808201909152600681527f3231303130340000000000000000000000000000000000000000000000000000602082015290600160a060020a03163314610cd45760405160e560020a62461bcd0281526004016103aa9190612928565b508060800151610d845760208101518151604080840151905160e060020a63a9059cbb028152600160a060020a039283166004820152602481019190915291169063a9059cbb906044016020604051808303816000875af1158015610d3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d619190612976565b50805160208201516040830151610d8292919061070690610700848461150d565b505b610dad83826000015183602001518460400151856060015186608001518760a001516001612208565b50806080015115158160000151600160a060020a03168260200151600160a060020a03167facd757911d369d6b15d47ada91171b7b67295b3f90b8499f6d52348f009c944586856060015186604001518760a00151604051610e31949392919093845260208401929092526040830152600160a060020a0316606082015260800190565b60405180910390a450600192915050565b600080610e4f33846121a8565b9050600081116040518060400160405280600681526020017f323130363031000000000000000000000000000000000000000000000000000081525090610eac5760405160e560020a62461bcd0281526004016103aa9190612928565b5060405160e060020a63a9059cbb02815233600482015260248101829052600160a060020a0384169063a9059cbb906044016020604051808303816000875af1158015610efd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f219190612976565b50610f2e3384600061246d565b506040513390600160a060020a038516907f85b9d5ac4b95740dafd1b47130d38b5f34a9104dd14b1c88a2fb5a44c3a00ce790600090a350600192915050565b600354604080517f3d7fe9730000000000000000000000000000000000000000000000000000000081529051600092600160a060020a031691633d7fe9739160048083019260209291908290030181865afa158015610fd1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ff59190612a01565b905090565b6000611004610f6e565b8411156040518060400160405280600681526020017f32313033303100000000000000000000000000000000000000000000000000008152509061105e5760405160e560020a62461bcd0281526004016103aa9190612928565b5061106761265e565b6110708561169c565b151560c0880152600160a060020a0390811660a088015290151560808701526060860191909152604085019190915290811660208401521681528215156001036111cd578315806110c8575082151581608001511515145b806110dc57508051600160a060020a031633145b806110ea57506001333b1515145b806110fb575060c081015115156001145b8061116c57508060200151600160a060020a031663200d2ed26040518163ffffffff1660e060020a028152600401602060405180830381865afa158015611146573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061116a9190612976565b155b8061117a5750838160400151105b156111cd57604080518082018252600681527f32313033303200000000000000000000000000000000000000000000000000006020820152905160e560020a62461bcd0281526103aa9190600401612928565b821515600003611356578315806111eb575082151581608001511515145b806111ff57508051600160a060020a031633145b80611210575060c081015115156001145b8061128157508060200151600160a060020a031663200d2ed26040518163ffffffff1660e060020a028152600401602060405180830381865afa15801561125b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061127f9190612976565b155b806112985750836112963383602001516121a8565b105b806112a65750838160400151105b15611356578060200151600160a060020a031663a9059cbb336112cd3385602001516121a8565b60405160e060020a63ffffffff8516028152600160a060020a03909216600483015260248201526044016020604051808303816000875af1158015611316573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061133a9190612976565b5061134b338260200151600061246d565b506000915050611506565b600061136186611c75565b61136c9060016129ee565b90506113788682612582565b5060006001544261138991906129ee565b90506113a0878333898760600151600080886122c7565b506113df87846000015185602001516113c68a886040015161234790919063ffffffff16565b876060015188608001518960a001518a60c00151612208565b50826080015115611490576020830151611403903390610a818961070084846121a8565b50602083015161141d90339061070689610a9a848461150d565b5033600160a060020a03168360000151600160a060020a03168460200151600160a060020a03167f8572520837758ee6d544b77e467aa6bb30ea06c0e78c287b0d2a7d106f25d1668a8688606001518c8a60a00151604051611483959493929190612993565b60405180910390a46114fe565b8260000151600160a060020a031633600160a060020a03168460200151600160a060020a03167f8572520837758ee6d544b77e467aa6bb30ea06c0e78c287b0d2a7d106f25d1668a8688606001518c8a60a001516040516114f5959493929190612993565b60405180910390a45b600193505050505b9392505050565b6003546040517f097d9012000000000000000000000000000000000000000000000000000000008152600160a060020a0384811660048301528381166024830152600092169063097d9012906044015b602060405180830381865afa15801561157a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115069190612a01565b6003546040517fbf18e24e000000000000000000000000000000000000000000000000000000008152600481018490526024810183905260009182918291829182918291600160a060020a039091169063bf18e24e9060440160c060405180830381865afa158015611614573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116389190612a1a565b949d939c50919a509850965090945092505050565b6116608333610a8185610a9a88336121a8565b50604051600160a060020a0384169033907f76dacbd9b11b7bbe3372e54b4adc1eeb5724ff92f91142a1a45722c28582ebfd90600090a3505050565b6003546040517fd09ef24100000000000000000000000000000000000000000000000000000000815260048101839052600091829182918291829182918291600160a060020a03169063d09ef2419060240160e060405180830381865afa15801561170b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061172f9190612a84565b959e949d50929b5090995097509550909350915050565b6000611750610f6e565b8311156040518060400160405280600681526020017f3231303430310000000000000000000000000000000000000000000000000000815250906117aa5760405160e560020a62461bcd0281526004016103aa9190612928565b506117b483611c75565b8211156040518060400160405280600681526020017f32313034303200000000000000000000000000000000000000000000000000008152509061180e5760405160e560020a62461bcd0281526004016103aa9190612928565b5061181761265e565b6118208461169c565b151560c0880152600160a060020a0390811660a0880152901515608087015260608601919091526040850191909152908116602084015216815261186261269a565b61186c858561159e565b60a0870152151560808601819052901515606086015260408501919091526020840191909152600160a060020a039091168252806118ab575080606001515b806118cc57508160a00151600160a060020a031633600160a060020a031614155b1561191f57604080518082018252600681527f32313034303300000000000000000000000000000000000000000000000000006020820152905160e560020a62461bcd0281526103aa9190600401612928565b816080015115611aaf5760208281015183519183015160405160e060020a63a9059cbb028152600160a060020a039384166004820152602481019190915291169063a9059cbb906044016020604051808303816000875af1158015611988573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119ac9190612976565b508051602080840151908301516119cd92919061070690610700848461150d565b508060000151600160a060020a03168260000151600160a060020a03168360200151600160a060020a03167f1f33fcbce82033cd7b26ae868ba28784c1e405a5a631cb7063527b4aceb0b5cc8888876060015187602001518960a00151604051611a3b959493929190612993565b60405180910390a48160000151600160a060020a03168160000151600160a060020a03168360200151600160a060020a03167f2458504403156ef04185b3cb0aab362f0421374a9fccb513fcf87c416324d40e8460200151604051611aa291815260200190565b60405180910390a4611c31565b60208281015182519183015160405160e060020a63a9059cbb028152600160a060020a039384166004820152602481019190915291169063a9059cbb906044016020604051808303816000875af1158015611b0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b329190612976565b50815160208084015190830151611b5392919061070690610700848461150d565b508160000151600160a060020a03168160000151600160a060020a03168360200151600160a060020a03167f1f33fcbce82033cd7b26ae868ba28784c1e405a5a631cb7063527b4aceb0b5cc8888876060015187602001518960a00151604051611bc1959493929190612993565b60405180910390a48060000151600160a060020a03168260000151600160a060020a03168360200151600160a060020a03167f2458504403156ef04185b3cb0aab362f0421374a9fccb513fcf87c416324d40e8460200151604051611c2891815260200190565b60405180910390a45b611c568585836000015184602001518560400151866060015160018860a001516122c7565b50611c698260200151836060015161260b565b50600195945050505050565b6003546040517fc9ee7c9a00000000000000000000000000000000000000000000000000000000815260048101839052600091600160a060020a03169063c9ee7c9a906024015b602060405180830381865afa158015611cd9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108039190612a01565b6000611d07610f6e565b8211156040518060400160405280600681526020017f323130323031000000000000000000000000000000000000000000000000000081525090611d615760405160e560020a62461bcd0281526004016103aa9190612928565b50611d6a61265e565b611d738361169c565b151560c0880152600160a060020a0390811660a0880152901515608087015260608601919091526040808601839052928116602080870191909152931684528151808301909252600682527f32313032303200000000000000000000000000000000000000000000000000009282019290925290611e075760405160e560020a62461bcd0281526004016103aa9190612928565b5060c081015160408051808201909152600681527f323130323033000000000000000000000000000000000000000000000000000060208201529015611e635760405160e560020a62461bcd0281526004016103aa9190612928565b508060a00151600160a060020a031633600160a060020a0316146040518060400160405280600681526020017f323130323034000000000000000000000000000000000000000000000000000081525090611ed45760405160e560020a62461bcd0281526004016103aa9190612928565b508060800151611f845760208101518151604080840151905160e060020a63a9059cbb028152600160a060020a039283166004820152602481019190915291169063a9059cbb906044016020604051808303816000875af1158015611f3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f619190612976565b50805160208201516040830151611f8292919061070690610700848461150d565b505b611fad83826000015183602001518460400151856060015186608001518760a001516001612208565b50806080015115158160000151600160a060020a03168260200151600160a060020a03167f65bd22a691318e95dc7581c2e0565f47e877c1e82428ba3f58a62389e006d32986856060015186604001518760a00151604051610e31949392919093845260208401929092526040830152600160a060020a0316606082015260800190565b60005460408051808201909152600681527f3530303030310000000000000000000000000000000000000000000000000000602082015290600160a060020a031633146120945760405160e560020a62461bcd0281526004016103aa9190612928565b5060408051808201909152600681527f35303031303100000000000000000000000000000000000000000000000000006020820152600160a060020a0382166120f35760405160e560020a62461bcd0281526004016103aa9190612928565b5060008054604051600160a060020a03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b6003546040517fc692fc74000000000000000000000000000000000000000000000000000000008152600160a060020a038381166004830152600092169063c692fc7490602401611cbc565b6003546040517fd4fac45d000000000000000000000000000000000000000000000000000000008152600160a060020a0384811660048301528381166024830152600092169063d4fac45d9060440161155d565b600061150682846129ee565b6003546040517f2270fa5e000000000000000000000000000000000000000000000000000000008152600481018a9052600160a060020a0389811660248301528881166044830152606482018890526084820187905285151560a483015284811660c483015283151560e48301526000921690632270fa5e90610104015b600060405180830381600087803b1580156122a057600080fd5b505af11580156122b4573d6000803e3d6000fd5b5060019c9b505050505050505050505050565b6003546040517f4f758478000000000000000000000000000000000000000000000000000000008152600481018a905260248101899052600160a060020a038881166044830152606482018890526084820187905285151560a483015284151560c483015260e482018490526000921690634f7584789061010401612286565b60006115068284612b0d565b6003546040517fd04c23af000000000000000000000000000000000000000000000000000000008152600160a060020a038581166004830152848116602483015260448201849052600092169063d04c23af90606401600060405180830381600087803b1580156123c357600080fd5b505af11580156123d7573d6000803e3d6000fd5b506001979650505050505050565b6002546040517ffb3551ff000000000000000000000000000000000000000000000000000000008152600160a060020a038381166004830152600092169063fb3551ff90602401602060405180830381865afa158015612449573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108039190612976565b6003546040517fb5c9cbbe000000000000000000000000000000000000000000000000000000008152600160a060020a038581166004830152848116602483015260448201849052600092169063b5c9cbbe906064016020604051808303816000875af11580156124e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125069190612976565b949350505050565b6003546040517fb953009100000000000000000000000000000000000000000000000000000000815260048101839052600091600160a060020a03169063b953009190602401600060405180830381600087803b15801561256e57600080fd5b505af1158015611c69573d6000803e3d6000fd5b6003546040517fb12c52cf0000000000000000000000000000000000000000000000000000000081526004810184905260248101839052600091600160a060020a03169063b12c52cf906044015b600060405180830381600087803b1580156125ea57600080fd5b505af11580156125fe573d6000803e3d6000fd5b5060019695505050505050565b6003546040517f01e7a801000000000000000000000000000000000000000000000000000000008152600160a060020a0384811660048301526024820184905260009216906301e7a801906044016125d0565b6040805160e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c081019190915290565b6040518060c001604052806000600160a060020a031681526020016000815260200160008152602001600015158152602001600015158152602001600081525090565b600080604083850312156126f057600080fd5b50508035926020909101359150565b600160a060020a038116811461271457600080fd5b50565b801515811461271457600080fd5b600080600080600060a0868803121561273d57600080fd5b8535612748816126ff565b94506020860135935060408601359250606086013561276681612717565b91506080860135612776816126ff565b809150509295509295909350565b60006020828403121561279657600080fd5b5035919050565b6000602082840312156127af57600080fd5b8135611506816126ff565b6000806000606084860312156127cf57600080fd5b833592506020840135915060408401356127e881612717565b809150509250925092565b6000806040838503121561280657600080fd5b8235612811816126ff565b91506020830135612821816126ff565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060006060848603121561287057600080fd5b833561287b816126ff565b925060208401359150604084013567ffffffffffffffff8082111561289f57600080fd5b818601915086601f8301126128b357600080fd5b8135818111156128c5576128c561282c565b604051601f8201601f19908116603f011681019083821181831017156128ed576128ed61282c565b8160405282815289602084870101111561290657600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b600060208083528351808285015260005b8181101561295557858101830151858201604001528201612939565b506000604082860101526040601f19601f8301168501019250505092915050565b60006020828403121561298857600080fd5b815161150681612717565b948552602085019390935260408401919091526060830152600160a060020a0316608082015260a00190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b80820180821115610803576108036129bf565b600060208284031215612a1357600080fd5b5051919050565b60008060008060008060c08789031215612a3357600080fd5b8651612a3e816126ff565b8096505060208701519450604087015193506060870151612a5e81612717565b6080880151909350612a6f81612717565b8092505060a087015190509295509295509295565b600080600080600080600060e0888a031215612a9f57600080fd5b8751612aaa816126ff565b6020890151909750612abb816126ff565b8096505060408801519450606088015193506080880151612adb81612717565b60a0890151909350612aec816126ff565b60c0890151909250612afd81612717565b8091505092959891949750929550565b81810381811115610803576108036129bf56fea2646970667358221220de59eff57ecd835e19aad3330919f36900f788b6e7650646c63a43b6f1ece56164736f6c63430008110033", - "deployedBytecode": "608060405234801561001057600080fd5b50600436106101255760003560e060020a90048063a2ee7043116100b1578063dc01f10b11610075578063dc01f10b146102e7578063deb2ec6a146102fa578063f2fde38b1461030d578063f5a6ba2e14610320578063f7888aec1461033357600080fd5b8063a2ee704314610205578063bf18e24e14610218578063c0ee0b8a14610266578063d09ef2411461027b578063d1a397e5146102d457600080fd5b80635edada77116100f85780635edada771461018b5780636f3b60d6146101b65780637e6d36e2146101cc57806385aa92a7146101df5780638da5cb5b146101f257600080fd5b8063307f636b1461012a57806338a6e85514610152578063514fcac71461016557806351cff8d914610178575b600080fd5b61013d6101383660046126dd565b610346565b60405190151581526020015b60405180910390f35b61013d610160366004612725565b610809565b61013d610173366004612784565b610b0b565b61013d61018636600461279d565b610e42565b60025461019e90600160a060020a031681565b604051600160a060020a039091168152602001610149565b6101be610f6e565b604051908152602001610149565b61013d6101da3660046127ba565b610ffa565b60035461019e90600160a060020a031681565b60005461019e90600160a060020a031681565b6101be6102133660046127f3565b61150d565b61022b6102263660046126dd565b61159e565b60408051600160a060020a039097168752602087019590955293850192909252151560608401521515608083015260a082015260c001610149565b61027961027436600461285b565b61164d565b005b61028e610289366004612784565b61169c565b60408051600160a060020a039889168152968816602088015286019490945260608501929092521515608084015290921660a082015290151560c082015260e001610149565b61013d6102e23660046126dd565b611746565b6101be6102f5366004612784565b611c75565b61013d610308366004612784565b611cfd565b61027961031b36600461279d565b612031565b6101be61032e36600461279d565b61215c565b6101be6103413660046127f3565b6121a8565b6000610350610f6e565b8311156040518060400160405280600681526020017f3231303530310000000000000000000000000000000000000000000000000000815250906103b35760405160e560020a62461bcd0281526004016103aa9190612928565b60405180910390fd5b506103bd83611c75565b8211156040518060400160405280600681526020017f3231303530320000000000000000000000000000000000000000000000000000815250906104175760405160e560020a62461bcd0281526004016103aa9190612928565b5061042061265e565b6104298461169c565b151560c0880152600160a060020a0390811660a0880152901515608087015260608601919091526040850191909152908116602084015216815261046b61269a565b610475858561159e565b60a087018190529015156080870152901515606086015260408501919091526020840191909152600160a060020a0390911682524210610564578060800151806104c0575080606001515b8061050c57508160a00151600160a060020a031633600160a060020a0316141580156104f657508151600160a060020a03163314155b801561050c57508051600160a060020a03163314155b1561055f57604080518082018252600681527f32313035303300000000000000000000000000000000000000000000000000006020820152905160e560020a62461bcd0281526103aa9190600401612928565b6105e9565b806080015180610575575080606001515b8061059657508160a00151600160a060020a031633600160a060020a031614155b156105e957604080518082018252600681527f32313035303400000000000000000000000000000000000000000000000000006020820152905160e560020a62461bcd0281526103aa9190600401612928565b61062b8583600001518460200151610612856020015187604001516121fc90919063ffffffff16565b866060015187608001518860a001518960c00151612208565b506106518585836000015184602001518560400151600187608001518860a001516122c7565b508160800151156107865760208281015182519183015160405160e060020a63a9059cbb028152600160a060020a039384166004820152602481019190915291169063a9059cbb906044016020604051808303816000875af11580156106bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106df9190612976565b5080516020808401519083015161070b92919061070690610700848461150d565b90612347565b612353565b508060000151600160a060020a03168260000151600160a060020a03168360200151600160a060020a03167fc7065461c527949bffa69924a2264fb3a12540677585393b0f3c3d96dde067518888876060015187602001518960a00151604051610779959493929190612993565b60405180910390a46107fc565b8160000151600160a060020a03168160000151600160a060020a03168360200151600160a060020a03167fc7065461c527949bffa69924a2264fb3a12540677585393b0f3c3d96dde067518888876060015187602001518960a001516040516107f3959493929190612993565b60405180910390a45b6001925050505b92915050565b60008215156001036108f657841580610884575085600160a060020a031663200d2ed26040518163ffffffff1660e060020a028152600401602060405180830381865afa15801561085e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108829190612976565b155b8061089257506001333b1515145b806108a357506108a1826123e5565b155b156108f657604080518082018252600681527f32313030303100000000000000000000000000000000000000000000000000006020820152905160e560020a62461bcd0281526103aa9190600401612928565b821515600003610a365784158061091557508461091333886121a8565b105b80610982575085600160a060020a031663200d2ed26040518163ffffffff1660e060020a028152600401602060405180830381865afa15801561095c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109809190612976565b155b806109935750610991826123e5565b155b15610a365785600160a060020a031663a9059cbb336109b2338a6121a8565b60405160e060020a63ffffffff8516028152600160a060020a03909216600483015260248201526044016020604051808303816000875af11580156109fb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a1f9190612976565b50610a2c3387600061246d565b5060009050610b02565b6000610a40610f6e565b610a4b9060016129ee565b9050610a568161250e565b50610a68813389898989896000612208565b5083610aa257610a863388610a8189610700338d6121a8565b61246d565b50610aa0338861070689610a9a338d61150d565b906121fc565b505b6040805182815260208101879052908101879052600160a060020a0384811660608301528515159133918a16907f62266baceb3938a36f642a6b6857911fda416ba3f0b192a5a5a8e27d51ad15f99060800160405180910390a460019150505b95945050505050565b6000610b15610f6e565b8211156040518060400160405280600681526020017f323130313031000000000000000000000000000000000000000000000000000081525090610b6f5760405160e560020a62461bcd0281526004016103aa9190612928565b50610b7861265e565b610b818361169c565b151560c0880152600160a060020a0390811660a0880152901515608087015260608601919091526040808601839052928116602080870191909152931684528151808301909252600682527f32313031303200000000000000000000000000000000000000000000000000009282019290925290610c155760405160e560020a62461bcd0281526004016103aa9190612928565b5060c081015160408051808201909152600681527f323130313033000000000000000000000000000000000000000000000000000060208201529015610c715760405160e560020a62461bcd0281526004016103aa9190612928565b50805160408051808201909152600681527f3231303130340000000000000000000000000000000000000000000000000000602082015290600160a060020a03163314610cd45760405160e560020a62461bcd0281526004016103aa9190612928565b508060800151610d845760208101518151604080840151905160e060020a63a9059cbb028152600160a060020a039283166004820152602481019190915291169063a9059cbb906044016020604051808303816000875af1158015610d3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d619190612976565b50805160208201516040830151610d8292919061070690610700848461150d565b505b610dad83826000015183602001518460400151856060015186608001518760a001516001612208565b50806080015115158160000151600160a060020a03168260200151600160a060020a03167facd757911d369d6b15d47ada91171b7b67295b3f90b8499f6d52348f009c944586856060015186604001518760a00151604051610e31949392919093845260208401929092526040830152600160a060020a0316606082015260800190565b60405180910390a450600192915050565b600080610e4f33846121a8565b9050600081116040518060400160405280600681526020017f323130363031000000000000000000000000000000000000000000000000000081525090610eac5760405160e560020a62461bcd0281526004016103aa9190612928565b5060405160e060020a63a9059cbb02815233600482015260248101829052600160a060020a0384169063a9059cbb906044016020604051808303816000875af1158015610efd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f219190612976565b50610f2e3384600061246d565b506040513390600160a060020a038516907f85b9d5ac4b95740dafd1b47130d38b5f34a9104dd14b1c88a2fb5a44c3a00ce790600090a350600192915050565b600354604080517f3d7fe9730000000000000000000000000000000000000000000000000000000081529051600092600160a060020a031691633d7fe9739160048083019260209291908290030181865afa158015610fd1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ff59190612a01565b905090565b6000611004610f6e565b8411156040518060400160405280600681526020017f32313033303100000000000000000000000000000000000000000000000000008152509061105e5760405160e560020a62461bcd0281526004016103aa9190612928565b5061106761265e565b6110708561169c565b151560c0880152600160a060020a0390811660a088015290151560808701526060860191909152604085019190915290811660208401521681528215156001036111cd578315806110c8575082151581608001511515145b806110dc57508051600160a060020a031633145b806110ea57506001333b1515145b806110fb575060c081015115156001145b8061116c57508060200151600160a060020a031663200d2ed26040518163ffffffff1660e060020a028152600401602060405180830381865afa158015611146573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061116a9190612976565b155b8061117a5750838160400151105b156111cd57604080518082018252600681527f32313033303200000000000000000000000000000000000000000000000000006020820152905160e560020a62461bcd0281526103aa9190600401612928565b821515600003611356578315806111eb575082151581608001511515145b806111ff57508051600160a060020a031633145b80611210575060c081015115156001145b8061128157508060200151600160a060020a031663200d2ed26040518163ffffffff1660e060020a028152600401602060405180830381865afa15801561125b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061127f9190612976565b155b806112985750836112963383602001516121a8565b105b806112a65750838160400151105b15611356578060200151600160a060020a031663a9059cbb336112cd3385602001516121a8565b60405160e060020a63ffffffff8516028152600160a060020a03909216600483015260248201526044016020604051808303816000875af1158015611316573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061133a9190612976565b5061134b338260200151600061246d565b506000915050611506565b600061136186611c75565b61136c9060016129ee565b90506113788682612582565b5060006001544261138991906129ee565b90506113a0878333898760600151600080886122c7565b506113df87846000015185602001516113c68a886040015161234790919063ffffffff16565b876060015188608001518960a001518a60c00151612208565b50826080015115611490576020830151611403903390610a818961070084846121a8565b50602083015161141d90339061070689610a9a848461150d565b5033600160a060020a03168360000151600160a060020a03168460200151600160a060020a03167f8572520837758ee6d544b77e467aa6bb30ea06c0e78c287b0d2a7d106f25d1668a8688606001518c8a60a00151604051611483959493929190612993565b60405180910390a46114fe565b8260000151600160a060020a031633600160a060020a03168460200151600160a060020a03167f8572520837758ee6d544b77e467aa6bb30ea06c0e78c287b0d2a7d106f25d1668a8688606001518c8a60a001516040516114f5959493929190612993565b60405180910390a45b600193505050505b9392505050565b6003546040517f097d9012000000000000000000000000000000000000000000000000000000008152600160a060020a0384811660048301528381166024830152600092169063097d9012906044015b602060405180830381865afa15801561157a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115069190612a01565b6003546040517fbf18e24e000000000000000000000000000000000000000000000000000000008152600481018490526024810183905260009182918291829182918291600160a060020a039091169063bf18e24e9060440160c060405180830381865afa158015611614573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116389190612a1a565b949d939c50919a509850965090945092505050565b6116608333610a8185610a9a88336121a8565b50604051600160a060020a0384169033907f76dacbd9b11b7bbe3372e54b4adc1eeb5724ff92f91142a1a45722c28582ebfd90600090a3505050565b6003546040517fd09ef24100000000000000000000000000000000000000000000000000000000815260048101839052600091829182918291829182918291600160a060020a03169063d09ef2419060240160e060405180830381865afa15801561170b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061172f9190612a84565b959e949d50929b5090995097509550909350915050565b6000611750610f6e565b8311156040518060400160405280600681526020017f3231303430310000000000000000000000000000000000000000000000000000815250906117aa5760405160e560020a62461bcd0281526004016103aa9190612928565b506117b483611c75565b8211156040518060400160405280600681526020017f32313034303200000000000000000000000000000000000000000000000000008152509061180e5760405160e560020a62461bcd0281526004016103aa9190612928565b5061181761265e565b6118208461169c565b151560c0880152600160a060020a0390811660a0880152901515608087015260608601919091526040850191909152908116602084015216815261186261269a565b61186c858561159e565b60a0870152151560808601819052901515606086015260408501919091526020840191909152600160a060020a039091168252806118ab575080606001515b806118cc57508160a00151600160a060020a031633600160a060020a031614155b1561191f57604080518082018252600681527f32313034303300000000000000000000000000000000000000000000000000006020820152905160e560020a62461bcd0281526103aa9190600401612928565b816080015115611aaf5760208281015183519183015160405160e060020a63a9059cbb028152600160a060020a039384166004820152602481019190915291169063a9059cbb906044016020604051808303816000875af1158015611988573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119ac9190612976565b508051602080840151908301516119cd92919061070690610700848461150d565b508060000151600160a060020a03168260000151600160a060020a03168360200151600160a060020a03167f1f33fcbce82033cd7b26ae868ba28784c1e405a5a631cb7063527b4aceb0b5cc8888876060015187602001518960a00151604051611a3b959493929190612993565b60405180910390a48160000151600160a060020a03168160000151600160a060020a03168360200151600160a060020a03167f2458504403156ef04185b3cb0aab362f0421374a9fccb513fcf87c416324d40e8460200151604051611aa291815260200190565b60405180910390a4611c31565b60208281015182519183015160405160e060020a63a9059cbb028152600160a060020a039384166004820152602481019190915291169063a9059cbb906044016020604051808303816000875af1158015611b0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b329190612976565b50815160208084015190830151611b5392919061070690610700848461150d565b508160000151600160a060020a03168160000151600160a060020a03168360200151600160a060020a03167f1f33fcbce82033cd7b26ae868ba28784c1e405a5a631cb7063527b4aceb0b5cc8888876060015187602001518960a00151604051611bc1959493929190612993565b60405180910390a48060000151600160a060020a03168260000151600160a060020a03168360200151600160a060020a03167f2458504403156ef04185b3cb0aab362f0421374a9fccb513fcf87c416324d40e8460200151604051611c2891815260200190565b60405180910390a45b611c568585836000015184602001518560400151866060015160018860a001516122c7565b50611c698260200151836060015161260b565b50600195945050505050565b6003546040517fc9ee7c9a00000000000000000000000000000000000000000000000000000000815260048101839052600091600160a060020a03169063c9ee7c9a906024015b602060405180830381865afa158015611cd9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108039190612a01565b6000611d07610f6e565b8211156040518060400160405280600681526020017f323130323031000000000000000000000000000000000000000000000000000081525090611d615760405160e560020a62461bcd0281526004016103aa9190612928565b50611d6a61265e565b611d738361169c565b151560c0880152600160a060020a0390811660a0880152901515608087015260608601919091526040808601839052928116602080870191909152931684528151808301909252600682527f32313032303200000000000000000000000000000000000000000000000000009282019290925290611e075760405160e560020a62461bcd0281526004016103aa9190612928565b5060c081015160408051808201909152600681527f323130323033000000000000000000000000000000000000000000000000000060208201529015611e635760405160e560020a62461bcd0281526004016103aa9190612928565b508060a00151600160a060020a031633600160a060020a0316146040518060400160405280600681526020017f323130323034000000000000000000000000000000000000000000000000000081525090611ed45760405160e560020a62461bcd0281526004016103aa9190612928565b508060800151611f845760208101518151604080840151905160e060020a63a9059cbb028152600160a060020a039283166004820152602481019190915291169063a9059cbb906044016020604051808303816000875af1158015611f3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f619190612976565b50805160208201516040830151611f8292919061070690610700848461150d565b505b611fad83826000015183602001518460400151856060015186608001518760a001516001612208565b50806080015115158160000151600160a060020a03168260200151600160a060020a03167f65bd22a691318e95dc7581c2e0565f47e877c1e82428ba3f58a62389e006d32986856060015186604001518760a00151604051610e31949392919093845260208401929092526040830152600160a060020a0316606082015260800190565b60005460408051808201909152600681527f3530303030310000000000000000000000000000000000000000000000000000602082015290600160a060020a031633146120945760405160e560020a62461bcd0281526004016103aa9190612928565b5060408051808201909152600681527f35303031303100000000000000000000000000000000000000000000000000006020820152600160a060020a0382166120f35760405160e560020a62461bcd0281526004016103aa9190612928565b5060008054604051600160a060020a03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b6003546040517fc692fc74000000000000000000000000000000000000000000000000000000008152600160a060020a038381166004830152600092169063c692fc7490602401611cbc565b6003546040517fd4fac45d000000000000000000000000000000000000000000000000000000008152600160a060020a0384811660048301528381166024830152600092169063d4fac45d9060440161155d565b600061150682846129ee565b6003546040517f2270fa5e000000000000000000000000000000000000000000000000000000008152600481018a9052600160a060020a0389811660248301528881166044830152606482018890526084820187905285151560a483015284811660c483015283151560e48301526000921690632270fa5e90610104015b600060405180830381600087803b1580156122a057600080fd5b505af11580156122b4573d6000803e3d6000fd5b5060019c9b505050505050505050505050565b6003546040517f4f758478000000000000000000000000000000000000000000000000000000008152600481018a905260248101899052600160a060020a038881166044830152606482018890526084820187905285151560a483015284151560c483015260e482018490526000921690634f7584789061010401612286565b60006115068284612b0d565b6003546040517fd04c23af000000000000000000000000000000000000000000000000000000008152600160a060020a038581166004830152848116602483015260448201849052600092169063d04c23af90606401600060405180830381600087803b1580156123c357600080fd5b505af11580156123d7573d6000803e3d6000fd5b506001979650505050505050565b6002546040517ffb3551ff000000000000000000000000000000000000000000000000000000008152600160a060020a038381166004830152600092169063fb3551ff90602401602060405180830381865afa158015612449573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108039190612976565b6003546040517fb5c9cbbe000000000000000000000000000000000000000000000000000000008152600160a060020a038581166004830152848116602483015260448201849052600092169063b5c9cbbe906064016020604051808303816000875af11580156124e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125069190612976565b949350505050565b6003546040517fb953009100000000000000000000000000000000000000000000000000000000815260048101839052600091600160a060020a03169063b953009190602401600060405180830381600087803b15801561256e57600080fd5b505af1158015611c69573d6000803e3d6000fd5b6003546040517fb12c52cf0000000000000000000000000000000000000000000000000000000081526004810184905260248101839052600091600160a060020a03169063b12c52cf906044015b600060405180830381600087803b1580156125ea57600080fd5b505af11580156125fe573d6000803e3d6000fd5b5060019695505050505050565b6003546040517f01e7a801000000000000000000000000000000000000000000000000000000008152600160a060020a0384811660048301526024820184905260009216906301e7a801906044016125d0565b6040805160e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c081019190915290565b6040518060c001604052806000600160a060020a031681526020016000815260200160008152602001600015158152602001600015158152602001600081525090565b600080604083850312156126f057600080fd5b50508035926020909101359150565b600160a060020a038116811461271457600080fd5b50565b801515811461271457600080fd5b600080600080600060a0868803121561273d57600080fd5b8535612748816126ff565b94506020860135935060408601359250606086013561276681612717565b91506080860135612776816126ff565b809150509295509295909350565b60006020828403121561279657600080fd5b5035919050565b6000602082840312156127af57600080fd5b8135611506816126ff565b6000806000606084860312156127cf57600080fd5b833592506020840135915060408401356127e881612717565b809150509250925092565b6000806040838503121561280657600080fd5b8235612811816126ff565b91506020830135612821816126ff565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060006060848603121561287057600080fd5b833561287b816126ff565b925060208401359150604084013567ffffffffffffffff8082111561289f57600080fd5b818601915086601f8301126128b357600080fd5b8135818111156128c5576128c561282c565b604051601f8201601f19908116603f011681019083821181831017156128ed576128ed61282c565b8160405282815289602084870101111561290657600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b600060208083528351808285015260005b8181101561295557858101830151858201604001528201612939565b506000604082860101526040601f19601f8301168501019250505092915050565b60006020828403121561298857600080fd5b815161150681612717565b948552602085019390935260408401919091526060830152600160a060020a0316608082015260a00190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b80820180821115610803576108036129bf565b600060208284031215612a1357600080fd5b5051919050565b60008060008060008060c08789031215612a3357600080fd5b8651612a3e816126ff565b8096505060208701519450604087015193506060870151612a5e81612717565b6080880151909350612a6f81612717565b8092505060a087015190509295509295509295565b600080600080600080600060e0888a031215612a9f57600080fd5b8751612aaa816126ff565b6020890151909750612abb816126ff565b8096505060408801519450606088015193506080880151612adb81612717565b60a0890151909350612aec816126ff565b60c0890151909250612afd81612717565b8091505092959891949750929550565b81810381811115610803576108036129bf56fea2646970667358221220de59eff57ecd835e19aad3330919f36900f788b6e7650646c63a43b6f1ece56164736f6c63430008110033" + "bytecode": "6080604052621275006001553480156200001857600080fd5b506040516200283e3803806200283e8339810160408190526200003b9162000095565b600080546001600160a01b03199081163317909155600280546001600160a01b0394851690831617905560038054929093169116179055620000cd565b80516001600160a01b03811681146200009057600080fd5b919050565b60008060408385031215620000a957600080fd5b620000b48362000078565b9150620000c46020840162000078565b90509250929050565b61276180620000dd6000396000f3fe608060405234801561001057600080fd5b50600436106101215760003560e01c8063a2ee7043116100ad578063dc01f10b11610071578063dc01f10b146102e3578063deb2ec6a146102f6578063f2fde38b14610309578063f5a6ba2e1461031c578063f7888aec1461032f57600080fd5b8063a2ee704314610201578063bf18e24e14610214578063c0ee0b8a14610262578063d09ef24114610277578063d1a397e5146102d057600080fd5b80635edada77116100f45780635edada77146101875780636f3b60d6146101b25780637e6d36e2146101c857806385aa92a7146101db5780638da5cb5b146101ee57600080fd5b8063307f636b1461012657806338a6e8551461014e578063514fcac71461016157806351cff8d914610174575b600080fd5b610139610134366004612319565b610342565b60405190151581526020015b60405180910390f35b61013961015c366004612361565b61079a565b61013961016f3660046123c0565b610a7e565b6101396101823660046123d9565b610d4a565b60025461019a906001600160a01b031681565b6040516001600160a01b039091168152602001610145565b6101ba610e59565b604051908152602001610145565b6101396101d63660046123f6565b610ecc565b60035461019a906001600160a01b031681565b60005461019a906001600160a01b031681565b6101ba61020f36600461242f565b6113a7565b610227610222366004612319565b61141f565b604080516001600160a01b039097168752602087019590955293850192909252151560608401521515608083015260a082015260c001610145565b61027561027036600461247e565b6114b5565b005b61028a6102853660046123c0565b611504565b604080516001600160a01b039889168152968816602088015286019490945260608501929092521515608084015290921660a082015290151560c082015260e001610145565b6101396102de366004612319565b611595565b6101ba6102f13660046123c0565b611a70565b6101396103043660046123c0565b611adf565b6102756103173660046123d9565b611da8565b6101ba61032a3660046123d9565b611e92565b6101ba61033d36600461242f565b611ec5565b600061034c610e59565b8311156040518060400160405280600681526020016532313035303160d01b815250906103955760405162461bcd60e51b815260040161038c919061254b565b60405180910390fd5b5061039f83611a70565b821115604051806040016040528060068152602001651918981a981960d11b815250906103df5760405162461bcd60e51b815260040161038c919061254b565b506103e861229a565b6103f184611504565b151560c08801526001600160a01b0390811660a088015290151560808701526060860191909152604085019190915290811660208401521681526104336122d6565b61043d858561141f565b60a0870181905290151560808701529015156060860152604085019190915260208401919091526001600160a01b039091168252421061051257806080015180610488575080606001515b806104d457508160a001516001600160a01b0316336001600160a01b0316141580156104be575081516001600160a01b03163314155b80156104d4575080516001600160a01b03163314155b1561050d57604080518082018252600681526532313035303360d01b6020820152905162461bcd60e51b815261038c919060040161254b565b61057d565b806080015180610523575080606001515b8061054457508160a001516001600160a01b0316336001600160a01b031614155b1561057d5760408051808201825260068152650c8c4c0d4c0d60d21b6020820152905162461bcd60e51b815261038c919060040161254b565b6105bf85836000015184602001516105a685602001518760400151611f0090919063ffffffff16565b866060015187608001518860a001518960c00151611f0c565b506105e58585836000015184602001518560400151600187608001518860a00151611fb2565b508160800151156107175760208281015182519183015160405163a9059cbb60e01b81526001600160a01b039384166004820152602481019190915291169063a9059cbb906044016020604051808303816000875af115801561064c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610670919061259a565b5080516020808401519083015161069c9291906106979061069184846113a7565b90612019565b612025565b5080600001516001600160a01b031682600001516001600160a01b031683602001516001600160a01b03167fc7065461c527949bffa69924a2264fb3a12540677585393b0f3c3d96dde067518888876060015187602001518960a0015160405161070a9594939291906125b7565b60405180910390a461078d565b81600001516001600160a01b031681600001516001600160a01b031683602001516001600160a01b03167fc7065461c527949bffa69924a2264fb3a12540677585393b0f3c3d96dde067518888876060015187602001518960a001516040516107849594939291906125b7565b60405180910390a45b6001925050505b92915050565b600082151560010361086a578415806108125750856001600160a01b031663200d2ed26040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107ec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610810919061259a565b155b8061082057506001333b1515145b80610831575061082f8261209e565b155b1561086a57604080518082018252600681526532313030303160d01b6020820152905162461bcd60e51b815261038c919060040161254b565b8215156000036109a9578415806108895750846108873388611ec5565b105b806108f35750856001600160a01b031663200d2ed26040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108f1919061259a565b155b8061090457506109028261209e565b155b156109a957856001600160a01b031663a9059cbb33610923338a611ec5565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af115801561096e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610992919061259a565b5061099f3387600061210d565b5060009050610a75565b60006109b3610e59565b6109be9060016125f9565b90506109c981612195565b506109db813389898989896000611f0c565b5083610a15576109f933886109f489610691338d611ec5565b61210d565b50610a13338861069789610a0d338d6113a7565b90611f00565b505b60408051828152602081018790529081018790526001600160a01b0384811660608301528515159133918a16907f62266baceb3938a36f642a6b6857911fda416ba3f0b192a5a5a8e27d51ad15f99060800160405180910390a460019150505b95945050505050565b6000610a88610e59565b8211156040518060400160405280600681526020016532313031303160d01b81525090610ac85760405162461bcd60e51b815260040161038c919061254b565b50610ad161229a565b610ada83611504565b151560c08801526001600160a01b0390811660a0880152901515608087015260608601919091526040808601839052928116602080870191909152931684528151808301909252600682526519189818981960d11b9282019290925290610b545760405162461bcd60e51b815260040161038c919061254b565b5060c081015160408051808201909152600681526532313031303360d01b60208201529015610b965760405162461bcd60e51b815260040161038c919061254b565b5080516040805180820190915260068152650c8c4c0c4c0d60d21b6020820152906001600160a01b03163314610bdf5760405162461bcd60e51b815260040161038c919061254b565b508060800151610c8c5760208101518151604080840151905163a9059cbb60e01b81526001600160a01b039283166004820152602481019190915291169063a9059cbb906044016020604051808303816000875af1158015610c45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c69919061259a565b50805160208201516040830151610c8a9291906106979061069184846113a7565b505b610cb583826000015183602001518460400151856060015186608001518760a001516001611f0c565b508060800151151581600001516001600160a01b031682602001516001600160a01b03167facd757911d369d6b15d47ada91171b7b67295b3f90b8499f6d52348f009c944586856060015186604001518760a00151604051610d399493929190938452602084019290925260408301526001600160a01b0316606082015260800190565b60405180910390a450600192915050565b600080610d573384611ec5565b9050600081116040518060400160405280600681526020016532313036303160d01b81525090610d9a5760405162461bcd60e51b815260040161038c919061254b565b5060405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0384169063a9059cbb906044016020604051808303816000875af1158015610de8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e0c919061259a565b50610e193384600061210d565b5060405133906001600160a01b038516907f85b9d5ac4b95740dafd1b47130d38b5f34a9104dd14b1c88a2fb5a44c3a00ce790600090a350600192915050565b60035460408051633d7fe97360e01b815290516000926001600160a01b031691633d7fe9739160048083019260209291908290030181865afa158015610ea3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ec7919061260c565b905090565b6000610ed6610e59565b8411156040518060400160405280600681526020016532313033303160d01b81525090610f165760405162461bcd60e51b815260040161038c919061254b565b50610f1f61229a565b610f2885611504565b151560c08801526001600160a01b0390811660a0880152901515608087015260608601919091526040850191909152908116602084015216815282151560010361106857831580610f80575082151581608001511515145b80610f94575080516001600160a01b031633145b80610fa257506001333b1515145b80610fb3575060c081015115156001145b80611021575080602001516001600160a01b031663200d2ed26040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ffb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061101f919061259a565b155b8061102f5750838160400151105b1561106857604080518082018252600681526519189819981960d11b6020820152905162461bcd60e51b815261038c919060040161254b565b8215156000036111f057831580611086575082151581608001511515145b8061109a575080516001600160a01b031633145b806110ab575060c081015115156001145b80611119575080602001516001600160a01b031663200d2ed26040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611117919061259a565b155b8061113057508361112e338360200151611ec5565b105b8061113e5750838160400151105b156111f05780602001516001600160a01b031663a9059cbb33611165338560200151611ec5565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af11580156111b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111d4919061259a565b506111e5338260200151600061210d565b5060009150506113a0565b60006111fb86611a70565b6112069060016125f9565b905061121286826121f0565b5060006001544261122391906125f9565b905061123a87833389876060015160008088611fb2565b5061127987846000015185602001516112608a886040015161201990919063ffffffff16565b876060015188608001518960a001518a60c00151611f0c565b5082608001511561132a57602083015161129d9033906109f4896106918484611ec5565b5060208301516112b790339061069789610a0d84846113a7565b50336001600160a01b031683600001516001600160a01b031684602001516001600160a01b03167f8572520837758ee6d544b77e467aa6bb30ea06c0e78c287b0d2a7d106f25d1668a8688606001518c8a60a0015160405161131d9594939291906125b7565b60405180910390a4611398565b82600001516001600160a01b0316336001600160a01b031684602001516001600160a01b03167f8572520837758ee6d544b77e467aa6bb30ea06c0e78c287b0d2a7d106f25d1668a8688606001518c8a60a0015160405161138f9594939291906125b7565b60405180910390a45b600193505050505b9392505050565b6003546040516304bec80960e11b81526001600160a01b0384811660048301528381166024830152600092169063097d9012906044015b602060405180830381865afa1580156113fb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113a0919061260c565b600354604051635f8c712760e11b81526004810184905260248101839052600091829182918291829182916001600160a01b039091169063bf18e24e9060440160c060405180830381865afa15801561147c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114a09190612625565b949d939c50919a509850965090945092505050565b6114c883336109f485610a0d8833611ec5565b506040516001600160a01b0384169033907f76dacbd9b11b7bbe3372e54b4adc1eeb5724ff92f91142a1a45722c28582ebfd90600090a3505050565b60035460405163d09ef24160e01b8152600481018390526000918291829182918291829182916001600160a01b03169063d09ef2419060240160e060405180830381865afa15801561155a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061157e919061268f565b959e949d50929b5090995097509550909350915050565b600061159f610e59565b8311156040518060400160405280600681526020016532313034303160d01b815250906115df5760405162461bcd60e51b815260040161038c919061254b565b506115e983611a70565b821115604051806040016040528060068152602001651918981a181960d11b815250906116295760405162461bcd60e51b815260040161038c919061254b565b5061163261229a565b61163b84611504565b151560c08801526001600160a01b0390811660a0880152901515608087015260608601919091526040850191909152908116602084015216815261167d6122d6565b611687858561141f565b60a08701521515608086018190529015156060860152604085019190915260208401919091526001600160a01b039091168252806116c6575080606001515b806116e757508160a001516001600160a01b0316336001600160a01b031614155b1561172057604080518082018252600681526532313034303360d01b6020820152905162461bcd60e51b815261038c919060040161254b565b8160800151156118ad5760208281015183519183015160405163a9059cbb60e01b81526001600160a01b039384166004820152602481019190915291169063a9059cbb906044016020604051808303816000875af1158015611786573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117aa919061259a565b508051602080840151908301516117cb9291906106979061069184846113a7565b5080600001516001600160a01b031682600001516001600160a01b031683602001516001600160a01b03167f1f33fcbce82033cd7b26ae868ba28784c1e405a5a631cb7063527b4aceb0b5cc8888876060015187602001518960a001516040516118399594939291906125b7565b60405180910390a481600001516001600160a01b031681600001516001600160a01b031683602001516001600160a01b03167f2458504403156ef04185b3cb0aab362f0421374a9fccb513fcf87c416324d40e84602001516040516118a091815260200190565b60405180910390a4611a2c565b60208281015182519183015160405163a9059cbb60e01b81526001600160a01b039384166004820152602481019190915291169063a9059cbb906044016020604051808303816000875af1158015611909573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061192d919061259a565b5081516020808401519083015161194e9291906106979061069184846113a7565b5081600001516001600160a01b031681600001516001600160a01b031683602001516001600160a01b03167f1f33fcbce82033cd7b26ae868ba28784c1e405a5a631cb7063527b4aceb0b5cc8888876060015187602001518960a001516040516119bc9594939291906125b7565b60405180910390a480600001516001600160a01b031682600001516001600160a01b031683602001516001600160a01b03167f2458504403156ef04185b3cb0aab362f0421374a9fccb513fcf87c416324d40e8460200151604051611a2391815260200190565b60405180910390a45b611a518585836000015184602001518560400151866060015160018860a00151611fb2565b50611a6482602001518360600151612260565b50600195945050505050565b6003546040516364f73e4d60e11b8152600481018390526000916001600160a01b03169063c9ee7c9a906024015b602060405180830381865afa158015611abb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610794919061260c565b6000611ae9610e59565b8211156040518060400160405280600681526020016532313032303160d01b81525090611b295760405162461bcd60e51b815260040161038c919061254b565b50611b3261229a565b611b3b83611504565b151560c08801526001600160a01b0390811660a0880152901515608087015260608601919091526040808601839052928116602080870191909152931684528151808301909252600682526519189819181960d11b9282019290925290611bb55760405162461bcd60e51b815260040161038c919061254b565b5060c081015160408051808201909152600681526532313032303360d01b60208201529015611bf75760405162461bcd60e51b815260040161038c919061254b565b508060a001516001600160a01b0316336001600160a01b031614604051806040016040528060068152602001650c8c4c0c8c0d60d21b81525090611c4e5760405162461bcd60e51b815260040161038c919061254b565b508060800151611cfb5760208101518151604080840151905163a9059cbb60e01b81526001600160a01b039283166004820152602481019190915291169063a9059cbb906044016020604051808303816000875af1158015611cb4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cd8919061259a565b50805160208201516040830151611cf99291906106979061069184846113a7565b505b611d2483826000015183602001518460400151856060015186608001518760a001516001611f0c565b508060800151151581600001516001600160a01b031682602001516001600160a01b03167f65bd22a691318e95dc7581c2e0565f47e877c1e82428ba3f58a62389e006d32986856060015186604001518760a00151604051610d399493929190938452602084019290925260408301526001600160a01b0316606082015260800190565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b03163314611df15760405162461bcd60e51b815260040161038c919061254b565b5060408051808201909152600681526535303031303160d01b60208201526001600160a01b038216611e365760405162461bcd60e51b815260040161038c919061254b565b50600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6003546040516331a4bf1d60e21b81526001600160a01b038381166004830152600092169063c692fc7490602401611a9e565b60035460405163d4fac45d60e01b81526001600160a01b0384811660048301528381166024830152600092169063d4fac45d906044016113de565b60006113a082846125f9565b6003546040516311387d2f60e11b8152600481018a90526001600160a01b0389811660248301528881166044830152606482018890526084820187905285151560a483015284811660c483015283151560e48301526000921690632270fa5e90610104015b600060405180830381600087803b158015611f8b57600080fd5b505af1158015611f9f573d6000803e3d6000fd5b5060019c9b505050505050505050505050565b6003546040516309eeb08f60e31b8152600481018a9052602481018990526001600160a01b038881166044830152606482018890526084820187905285151560a483015284151560c483015260e482018490526000921690634f7584789061010401611f71565b60006113a08284612718565b60035460405163d04c23af60e01b81526001600160a01b038581166004830152848116602483015260448201849052600092169063d04c23af90606401600060405180830381600087803b15801561207c57600080fd5b505af1158015612090573d6000803e3d6000fd5b506001979650505050505050565b60025460405163fb3551ff60e01b81526001600160a01b038381166004830152600092169063fb3551ff90602401602060405180830381865afa1580156120e9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610794919061259a565b600354604051635ae4e5df60e11b81526001600160a01b038581166004830152848116602483015260448201849052600092169063b5c9cbbe906064016020604051808303816000875af1158015612169573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061218d919061259a565b949350505050565b60035460405163b953009160e01b8152600481018390526000916001600160a01b03169063b953009190602401600060405180830381600087803b1580156121dc57600080fd5b505af1158015611a64573d6000803e3d6000fd5b60035460405163b12c52cf60e01b815260048101849052602481018390526000916001600160a01b03169063b12c52cf906044015b600060405180830381600087803b15801561223f57600080fd5b505af1158015612253573d6000803e3d6000fd5b5060019695505050505050565b6003546040516301e7a80160e01b81526001600160a01b0384811660048301526024820184905260009216906301e7a80190604401612225565b6040805160e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c081019190915290565b6040518060c0016040528060006001600160a01b031681526020016000815260200160008152602001600015158152602001600015158152602001600081525090565b6000806040838503121561232c57600080fd5b50508035926020909101359150565b6001600160a01b038116811461235057600080fd5b50565b801515811461235057600080fd5b600080600080600060a0868803121561237957600080fd5b85356123848161233b565b9450602086013593506040860135925060608601356123a281612353565b915060808601356123b28161233b565b809150509295509295909350565b6000602082840312156123d257600080fd5b5035919050565b6000602082840312156123eb57600080fd5b81356113a08161233b565b60008060006060848603121561240b57600080fd5b8335925060208401359150604084013561242481612353565b809150509250925092565b6000806040838503121561244257600080fd5b823561244d8161233b565b9150602083013561245d8161233b565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b60008060006060848603121561249357600080fd5b833561249e8161233b565b925060208401359150604084013567ffffffffffffffff808211156124c257600080fd5b818601915086601f8301126124d657600080fd5b8135818111156124e8576124e8612468565b604051601f8201601f19908116603f0116810190838211818310171561251057612510612468565b8160405282815289602084870101111561252957600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b60006020808352835180602085015260005b818110156125795785810183015185820160400152820161255d565b506000604082860101526040601f19601f8301168501019250505092915050565b6000602082840312156125ac57600080fd5b81516113a081612353565b9485526020850193909352604084019190915260608301526001600160a01b0316608082015260a00190565b634e487b7160e01b600052601160045260246000fd5b80820180821115610794576107946125e3565b60006020828403121561261e57600080fd5b5051919050565b60008060008060008060c0878903121561263e57600080fd5b86516126498161233b565b809650506020870151945060408701519350606087015161266981612353565b608088015190935061267a81612353565b8092505060a087015190509295509295509295565b600080600080600080600060e0888a0312156126aa57600080fd5b87516126b58161233b565b60208901519097506126c68161233b565b80965050604088015194506060880151935060808801516126e681612353565b60a08901519093506126f78161233b565b60c089015190925061270881612353565b8091505092959891949750929550565b81810381811115610794576107946125e356fea2646970667358221220ff8077c9b451be2723cf5c46a62dd0074d224a51c84168b432c13ddb044a1e1464736f6c63430008170033", + "deployedBytecode": "608060405234801561001057600080fd5b50600436106101215760003560e01c8063a2ee7043116100ad578063dc01f10b11610071578063dc01f10b146102e3578063deb2ec6a146102f6578063f2fde38b14610309578063f5a6ba2e1461031c578063f7888aec1461032f57600080fd5b8063a2ee704314610201578063bf18e24e14610214578063c0ee0b8a14610262578063d09ef24114610277578063d1a397e5146102d057600080fd5b80635edada77116100f45780635edada77146101875780636f3b60d6146101b25780637e6d36e2146101c857806385aa92a7146101db5780638da5cb5b146101ee57600080fd5b8063307f636b1461012657806338a6e8551461014e578063514fcac71461016157806351cff8d914610174575b600080fd5b610139610134366004612319565b610342565b60405190151581526020015b60405180910390f35b61013961015c366004612361565b61079a565b61013961016f3660046123c0565b610a7e565b6101396101823660046123d9565b610d4a565b60025461019a906001600160a01b031681565b6040516001600160a01b039091168152602001610145565b6101ba610e59565b604051908152602001610145565b6101396101d63660046123f6565b610ecc565b60035461019a906001600160a01b031681565b60005461019a906001600160a01b031681565b6101ba61020f36600461242f565b6113a7565b610227610222366004612319565b61141f565b604080516001600160a01b039097168752602087019590955293850192909252151560608401521515608083015260a082015260c001610145565b61027561027036600461247e565b6114b5565b005b61028a6102853660046123c0565b611504565b604080516001600160a01b039889168152968816602088015286019490945260608501929092521515608084015290921660a082015290151560c082015260e001610145565b6101396102de366004612319565b611595565b6101ba6102f13660046123c0565b611a70565b6101396103043660046123c0565b611adf565b6102756103173660046123d9565b611da8565b6101ba61032a3660046123d9565b611e92565b6101ba61033d36600461242f565b611ec5565b600061034c610e59565b8311156040518060400160405280600681526020016532313035303160d01b815250906103955760405162461bcd60e51b815260040161038c919061254b565b60405180910390fd5b5061039f83611a70565b821115604051806040016040528060068152602001651918981a981960d11b815250906103df5760405162461bcd60e51b815260040161038c919061254b565b506103e861229a565b6103f184611504565b151560c08801526001600160a01b0390811660a088015290151560808701526060860191909152604085019190915290811660208401521681526104336122d6565b61043d858561141f565b60a0870181905290151560808701529015156060860152604085019190915260208401919091526001600160a01b039091168252421061051257806080015180610488575080606001515b806104d457508160a001516001600160a01b0316336001600160a01b0316141580156104be575081516001600160a01b03163314155b80156104d4575080516001600160a01b03163314155b1561050d57604080518082018252600681526532313035303360d01b6020820152905162461bcd60e51b815261038c919060040161254b565b61057d565b806080015180610523575080606001515b8061054457508160a001516001600160a01b0316336001600160a01b031614155b1561057d5760408051808201825260068152650c8c4c0d4c0d60d21b6020820152905162461bcd60e51b815261038c919060040161254b565b6105bf85836000015184602001516105a685602001518760400151611f0090919063ffffffff16565b866060015187608001518860a001518960c00151611f0c565b506105e58585836000015184602001518560400151600187608001518860a00151611fb2565b508160800151156107175760208281015182519183015160405163a9059cbb60e01b81526001600160a01b039384166004820152602481019190915291169063a9059cbb906044016020604051808303816000875af115801561064c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610670919061259a565b5080516020808401519083015161069c9291906106979061069184846113a7565b90612019565b612025565b5080600001516001600160a01b031682600001516001600160a01b031683602001516001600160a01b03167fc7065461c527949bffa69924a2264fb3a12540677585393b0f3c3d96dde067518888876060015187602001518960a0015160405161070a9594939291906125b7565b60405180910390a461078d565b81600001516001600160a01b031681600001516001600160a01b031683602001516001600160a01b03167fc7065461c527949bffa69924a2264fb3a12540677585393b0f3c3d96dde067518888876060015187602001518960a001516040516107849594939291906125b7565b60405180910390a45b6001925050505b92915050565b600082151560010361086a578415806108125750856001600160a01b031663200d2ed26040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107ec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610810919061259a565b155b8061082057506001333b1515145b80610831575061082f8261209e565b155b1561086a57604080518082018252600681526532313030303160d01b6020820152905162461bcd60e51b815261038c919060040161254b565b8215156000036109a9578415806108895750846108873388611ec5565b105b806108f35750856001600160a01b031663200d2ed26040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108f1919061259a565b155b8061090457506109028261209e565b155b156109a957856001600160a01b031663a9059cbb33610923338a611ec5565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af115801561096e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610992919061259a565b5061099f3387600061210d565b5060009050610a75565b60006109b3610e59565b6109be9060016125f9565b90506109c981612195565b506109db813389898989896000611f0c565b5083610a15576109f933886109f489610691338d611ec5565b61210d565b50610a13338861069789610a0d338d6113a7565b90611f00565b505b60408051828152602081018790529081018790526001600160a01b0384811660608301528515159133918a16907f62266baceb3938a36f642a6b6857911fda416ba3f0b192a5a5a8e27d51ad15f99060800160405180910390a460019150505b95945050505050565b6000610a88610e59565b8211156040518060400160405280600681526020016532313031303160d01b81525090610ac85760405162461bcd60e51b815260040161038c919061254b565b50610ad161229a565b610ada83611504565b151560c08801526001600160a01b0390811660a0880152901515608087015260608601919091526040808601839052928116602080870191909152931684528151808301909252600682526519189818981960d11b9282019290925290610b545760405162461bcd60e51b815260040161038c919061254b565b5060c081015160408051808201909152600681526532313031303360d01b60208201529015610b965760405162461bcd60e51b815260040161038c919061254b565b5080516040805180820190915260068152650c8c4c0c4c0d60d21b6020820152906001600160a01b03163314610bdf5760405162461bcd60e51b815260040161038c919061254b565b508060800151610c8c5760208101518151604080840151905163a9059cbb60e01b81526001600160a01b039283166004820152602481019190915291169063a9059cbb906044016020604051808303816000875af1158015610c45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c69919061259a565b50805160208201516040830151610c8a9291906106979061069184846113a7565b505b610cb583826000015183602001518460400151856060015186608001518760a001516001611f0c565b508060800151151581600001516001600160a01b031682602001516001600160a01b03167facd757911d369d6b15d47ada91171b7b67295b3f90b8499f6d52348f009c944586856060015186604001518760a00151604051610d399493929190938452602084019290925260408301526001600160a01b0316606082015260800190565b60405180910390a450600192915050565b600080610d573384611ec5565b9050600081116040518060400160405280600681526020016532313036303160d01b81525090610d9a5760405162461bcd60e51b815260040161038c919061254b565b5060405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0384169063a9059cbb906044016020604051808303816000875af1158015610de8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e0c919061259a565b50610e193384600061210d565b5060405133906001600160a01b038516907f85b9d5ac4b95740dafd1b47130d38b5f34a9104dd14b1c88a2fb5a44c3a00ce790600090a350600192915050565b60035460408051633d7fe97360e01b815290516000926001600160a01b031691633d7fe9739160048083019260209291908290030181865afa158015610ea3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ec7919061260c565b905090565b6000610ed6610e59565b8411156040518060400160405280600681526020016532313033303160d01b81525090610f165760405162461bcd60e51b815260040161038c919061254b565b50610f1f61229a565b610f2885611504565b151560c08801526001600160a01b0390811660a0880152901515608087015260608601919091526040850191909152908116602084015216815282151560010361106857831580610f80575082151581608001511515145b80610f94575080516001600160a01b031633145b80610fa257506001333b1515145b80610fb3575060c081015115156001145b80611021575080602001516001600160a01b031663200d2ed26040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ffb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061101f919061259a565b155b8061102f5750838160400151105b1561106857604080518082018252600681526519189819981960d11b6020820152905162461bcd60e51b815261038c919060040161254b565b8215156000036111f057831580611086575082151581608001511515145b8061109a575080516001600160a01b031633145b806110ab575060c081015115156001145b80611119575080602001516001600160a01b031663200d2ed26040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611117919061259a565b155b8061113057508361112e338360200151611ec5565b105b8061113e5750838160400151105b156111f05780602001516001600160a01b031663a9059cbb33611165338560200151611ec5565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af11580156111b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111d4919061259a565b506111e5338260200151600061210d565b5060009150506113a0565b60006111fb86611a70565b6112069060016125f9565b905061121286826121f0565b5060006001544261122391906125f9565b905061123a87833389876060015160008088611fb2565b5061127987846000015185602001516112608a886040015161201990919063ffffffff16565b876060015188608001518960a001518a60c00151611f0c565b5082608001511561132a57602083015161129d9033906109f4896106918484611ec5565b5060208301516112b790339061069789610a0d84846113a7565b50336001600160a01b031683600001516001600160a01b031684602001516001600160a01b03167f8572520837758ee6d544b77e467aa6bb30ea06c0e78c287b0d2a7d106f25d1668a8688606001518c8a60a0015160405161131d9594939291906125b7565b60405180910390a4611398565b82600001516001600160a01b0316336001600160a01b031684602001516001600160a01b03167f8572520837758ee6d544b77e467aa6bb30ea06c0e78c287b0d2a7d106f25d1668a8688606001518c8a60a0015160405161138f9594939291906125b7565b60405180910390a45b600193505050505b9392505050565b6003546040516304bec80960e11b81526001600160a01b0384811660048301528381166024830152600092169063097d9012906044015b602060405180830381865afa1580156113fb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113a0919061260c565b600354604051635f8c712760e11b81526004810184905260248101839052600091829182918291829182916001600160a01b039091169063bf18e24e9060440160c060405180830381865afa15801561147c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114a09190612625565b949d939c50919a509850965090945092505050565b6114c883336109f485610a0d8833611ec5565b506040516001600160a01b0384169033907f76dacbd9b11b7bbe3372e54b4adc1eeb5724ff92f91142a1a45722c28582ebfd90600090a3505050565b60035460405163d09ef24160e01b8152600481018390526000918291829182918291829182916001600160a01b03169063d09ef2419060240160e060405180830381865afa15801561155a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061157e919061268f565b959e949d50929b5090995097509550909350915050565b600061159f610e59565b8311156040518060400160405280600681526020016532313034303160d01b815250906115df5760405162461bcd60e51b815260040161038c919061254b565b506115e983611a70565b821115604051806040016040528060068152602001651918981a181960d11b815250906116295760405162461bcd60e51b815260040161038c919061254b565b5061163261229a565b61163b84611504565b151560c08801526001600160a01b0390811660a0880152901515608087015260608601919091526040850191909152908116602084015216815261167d6122d6565b611687858561141f565b60a08701521515608086018190529015156060860152604085019190915260208401919091526001600160a01b039091168252806116c6575080606001515b806116e757508160a001516001600160a01b0316336001600160a01b031614155b1561172057604080518082018252600681526532313034303360d01b6020820152905162461bcd60e51b815261038c919060040161254b565b8160800151156118ad5760208281015183519183015160405163a9059cbb60e01b81526001600160a01b039384166004820152602481019190915291169063a9059cbb906044016020604051808303816000875af1158015611786573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117aa919061259a565b508051602080840151908301516117cb9291906106979061069184846113a7565b5080600001516001600160a01b031682600001516001600160a01b031683602001516001600160a01b03167f1f33fcbce82033cd7b26ae868ba28784c1e405a5a631cb7063527b4aceb0b5cc8888876060015187602001518960a001516040516118399594939291906125b7565b60405180910390a481600001516001600160a01b031681600001516001600160a01b031683602001516001600160a01b03167f2458504403156ef04185b3cb0aab362f0421374a9fccb513fcf87c416324d40e84602001516040516118a091815260200190565b60405180910390a4611a2c565b60208281015182519183015160405163a9059cbb60e01b81526001600160a01b039384166004820152602481019190915291169063a9059cbb906044016020604051808303816000875af1158015611909573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061192d919061259a565b5081516020808401519083015161194e9291906106979061069184846113a7565b5081600001516001600160a01b031681600001516001600160a01b031683602001516001600160a01b03167f1f33fcbce82033cd7b26ae868ba28784c1e405a5a631cb7063527b4aceb0b5cc8888876060015187602001518960a001516040516119bc9594939291906125b7565b60405180910390a480600001516001600160a01b031682600001516001600160a01b031683602001516001600160a01b03167f2458504403156ef04185b3cb0aab362f0421374a9fccb513fcf87c416324d40e8460200151604051611a2391815260200190565b60405180910390a45b611a518585836000015184602001518560400151866060015160018860a00151611fb2565b50611a6482602001518360600151612260565b50600195945050505050565b6003546040516364f73e4d60e11b8152600481018390526000916001600160a01b03169063c9ee7c9a906024015b602060405180830381865afa158015611abb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610794919061260c565b6000611ae9610e59565b8211156040518060400160405280600681526020016532313032303160d01b81525090611b295760405162461bcd60e51b815260040161038c919061254b565b50611b3261229a565b611b3b83611504565b151560c08801526001600160a01b0390811660a0880152901515608087015260608601919091526040808601839052928116602080870191909152931684528151808301909252600682526519189819181960d11b9282019290925290611bb55760405162461bcd60e51b815260040161038c919061254b565b5060c081015160408051808201909152600681526532313032303360d01b60208201529015611bf75760405162461bcd60e51b815260040161038c919061254b565b508060a001516001600160a01b0316336001600160a01b031614604051806040016040528060068152602001650c8c4c0c8c0d60d21b81525090611c4e5760405162461bcd60e51b815260040161038c919061254b565b508060800151611cfb5760208101518151604080840151905163a9059cbb60e01b81526001600160a01b039283166004820152602481019190915291169063a9059cbb906044016020604051808303816000875af1158015611cb4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cd8919061259a565b50805160208201516040830151611cf99291906106979061069184846113a7565b505b611d2483826000015183602001518460400151856060015186608001518760a001516001611f0c565b508060800151151581600001516001600160a01b031682602001516001600160a01b03167f65bd22a691318e95dc7581c2e0565f47e877c1e82428ba3f58a62389e006d32986856060015186604001518760a00151604051610d399493929190938452602084019290925260408301526001600160a01b0316606082015260800190565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b03163314611df15760405162461bcd60e51b815260040161038c919061254b565b5060408051808201909152600681526535303031303160d01b60208201526001600160a01b038216611e365760405162461bcd60e51b815260040161038c919061254b565b50600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6003546040516331a4bf1d60e21b81526001600160a01b038381166004830152600092169063c692fc7490602401611a9e565b60035460405163d4fac45d60e01b81526001600160a01b0384811660048301528381166024830152600092169063d4fac45d906044016113de565b60006113a082846125f9565b6003546040516311387d2f60e11b8152600481018a90526001600160a01b0389811660248301528881166044830152606482018890526084820187905285151560a483015284811660c483015283151560e48301526000921690632270fa5e90610104015b600060405180830381600087803b158015611f8b57600080fd5b505af1158015611f9f573d6000803e3d6000fd5b5060019c9b505050505050505050505050565b6003546040516309eeb08f60e31b8152600481018a9052602481018990526001600160a01b038881166044830152606482018890526084820187905285151560a483015284151560c483015260e482018490526000921690634f7584789061010401611f71565b60006113a08284612718565b60035460405163d04c23af60e01b81526001600160a01b038581166004830152848116602483015260448201849052600092169063d04c23af90606401600060405180830381600087803b15801561207c57600080fd5b505af1158015612090573d6000803e3d6000fd5b506001979650505050505050565b60025460405163fb3551ff60e01b81526001600160a01b038381166004830152600092169063fb3551ff90602401602060405180830381865afa1580156120e9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610794919061259a565b600354604051635ae4e5df60e11b81526001600160a01b038581166004830152848116602483015260448201849052600092169063b5c9cbbe906064016020604051808303816000875af1158015612169573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061218d919061259a565b949350505050565b60035460405163b953009160e01b8152600481018390526000916001600160a01b03169063b953009190602401600060405180830381600087803b1580156121dc57600080fd5b505af1158015611a64573d6000803e3d6000fd5b60035460405163b12c52cf60e01b815260048101849052602481018390526000916001600160a01b03169063b12c52cf906044015b600060405180830381600087803b15801561223f57600080fd5b505af1158015612253573d6000803e3d6000fd5b5060019695505050505050565b6003546040516301e7a80160e01b81526001600160a01b0384811660048301526024820184905260009216906301e7a80190604401612225565b6040805160e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c081019190915290565b6040518060c0016040528060006001600160a01b031681526020016000815260200160008152602001600015158152602001600015158152602001600081525090565b6000806040838503121561232c57600080fd5b50508035926020909101359150565b6001600160a01b038116811461235057600080fd5b50565b801515811461235057600080fd5b600080600080600060a0868803121561237957600080fd5b85356123848161233b565b9450602086013593506040860135925060608601356123a281612353565b915060808601356123b28161233b565b809150509295509295909350565b6000602082840312156123d257600080fd5b5035919050565b6000602082840312156123eb57600080fd5b81356113a08161233b565b60008060006060848603121561240b57600080fd5b8335925060208401359150604084013561242481612353565b809150509250925092565b6000806040838503121561244257600080fd5b823561244d8161233b565b9150602083013561245d8161233b565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b60008060006060848603121561249357600080fd5b833561249e8161233b565b925060208401359150604084013567ffffffffffffffff808211156124c257600080fd5b818601915086601f8301126124d657600080fd5b8135818111156124e8576124e8612468565b604051601f8201601f19908116603f0116810190838211818310171561251057612510612468565b8160405282815289602084870101111561252957600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b60006020808352835180602085015260005b818110156125795785810183015185820160400152820161255d565b506000604082860101526040601f19601f8301168501019250505092915050565b6000602082840312156125ac57600080fd5b81516113a081612353565b9485526020850193909352604084019190915260608301526001600160a01b0316608082015260a00190565b634e487b7160e01b600052601160045260246000fd5b80820180821115610794576107946125e3565b60006020828403121561261e57600080fd5b5051919050565b60008060008060008060c0878903121561263e57600080fd5b86516126498161233b565b809650506020870151945060408701519350606087015161266981612353565b608088015190935061267a81612353565b8092505060a087015190509295509295509295565b600080600080600080600060e0888a0312156126aa57600080fd5b87516126b58161233b565b60208901519097506126c68161233b565b80965050604088015194506060880151935060808801516126e681612353565b60a08901519093506126f78161233b565b60c089015190925061270881612353565b8091505092959891949750929550565b81810381811115610794576107946125e356fea2646970667358221220ff8077c9b451be2723cf5c46a62dd0074d224a51c84168b432c13ddb044a1e1464736f6c63430008170033" } \ No newline at end of file diff --git a/contracts/IbetMembership.json b/contracts/IbetMembership.json index d61cdef1..9a08e7aa 100644 --- a/contracts/IbetMembership.json +++ b/contracts/IbetMembership.json @@ -225,6 +225,35 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "_fromList", + "type": "address[]" + }, + { + "internalType": "address[]", + "name": "_toList", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "_valueList", + "type": "uint256[]" + } + ], + "name": "bulkTransferFrom", + "outputs": [ + { + "internalType": "bool", + "name": "success", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [], "name": "contactInformation", @@ -639,7 +668,7 @@ "outputs": [ { "internalType": "bool", - "name": "", + "name": "success", "type": "bool" } ], @@ -673,6 +702,6 @@ "type": "function" } ], - "bytecode": "60806040523480156200001157600080fd5b50604051620020af380380620020af83398101604081905262000034916200023a565b60008054600160a060020a0319908116339182161717905560016200005a8c8262000494565b506002620000698b8262000494565b50600389905560048054600160a060020a031916600160a060020a038a16179055600962000098888262000494565b50600a620000a7878262000494565b50600b620000b6868262000494565b50600c620000c5858262000494565b5060035460008054600160a060020a0316815260086020526040902055600d805484151560ff199182161790915560078054909116600117905560056200010d838262000494565b5060066200011c828262000494565b50505050505050505050505062000566565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f8301126200016f57600080fd5b81516001604060020a03808211156200018c576200018c6200012e565b604051601f8301601f19908116603f01168101908282118183101715620001b757620001b76200012e565b81604052838152602092508683858801011115620001d457600080fd5b600091505b83821015620001f85785820183015181830184015290820190620001d9565b600093810190920192909252949350505050565b8051600160a060020a03811681146200022457600080fd5b919050565b805180151581146200022457600080fd5b60008060008060008060008060008060006101608c8e0312156200025d57600080fd5b8b516001604060020a038111156200027457600080fd5b620002828e828f016200015d565b9b505060208c01516001604060020a038111156200029f57600080fd5b620002ad8e828f016200015d565b9a505060408c01519850620002c560608d016200020c565b975060808c01516001604060020a03811115620002e157600080fd5b620002ef8e828f016200015d565b97505060a08c01516001604060020a038111156200030c57600080fd5b6200031a8e828f016200015d565b96505060c08c01516001604060020a038111156200033757600080fd5b620003458e828f016200015d565b95505060e08c01516001604060020a038111156200036257600080fd5b620003708e828f016200015d565b945050620003826101008d0162000229565b92506101208c01516001604060020a038111156200039f57600080fd5b620003ad8e828f016200015d565b9250506101408c01516001604060020a03811115620003cb57600080fd5b620003d98e828f016200015d565b9150509295989b509295989b9093969950565b6002810460018216806200040157607f821691505b6020821081036200043b577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b601f8211156200048f576000818152602081206020601f860104810160208610156200046a5750805b6020601f860104820191505b818110156200048b5782815560010162000476565b5050505b505050565b81516001604060020a03811115620004b057620004b06200012e565b620004c881620004c18454620003ec565b8462000441565b602080601f831160018114620005045760008415620004e75750858301515b60028086026008870290910a60001904198216178655506200048b565b600085815260208120601f198616915b82811015620005355788860151825594840194600190910190840162000514565b50858210156200055657878501516008601f88160260020a60001904191681555b5050505050600202600101905550565b611b3980620005766000396000f3fe608060405234801561001057600080fd5b5060043610610239576000357c0100000000000000000000000000000000000000000000000000000000900480637c3bf42d116101425780639cd23707116100ca578063c72fe06511610099578063c72fe06514610477578063c9c922771461048a578063cc872b661461049d578063f2fde38b146104b0578063ffca397b146104c357600080fd5b80639cd237071461042b578063a124beba1461043e578063a9059cbb14610451578063b967a52e1461046457600080fd5b80638da5cb5b116101115780638da5cb5b146103e85780638ed8a9bc146103fb5780638f6204871461040e57806392ff0d311461041657806395d89b411461042357600080fd5b80637c3bf42d146103a8578063833e0d8c146103bb5780638739e663146103cd57806388539011146103d557600080fd5b80633e8a8009116101c557806358c3b8701161019457806358c3b870146103545780635c40f6f41461035c57806360bf50fc1461036f57806370a082311461038257806376fa7a311461039557600080fd5b80633e8a80091461031e578063428630f6146103315780635540e7cf14610339578063565974d31461034c57600080fd5b806323b872dd1161020c57806323b872dd146102a357806325287d42146102b657806325d60861146102e157806327e235e3146102f657806336f7ab5e1461031657600080fd5b806306fdde031461023e578063153a1f3e1461025c57806318160ddd1461027f578063200d2ed214610296575b600080fd5b6102466104d6565b6040516102539190611575565b60405180910390f35b61026f61026a36600461167a565b610564565b6040519015158152602001610253565b61028860035481565b604051908152602001610253565b60075461026f9060ff1681565b61026f6102b1366004611737565b6107cb565b6004546102c990600160a060020a031681565b604051600160a060020a039091168152602001610253565b6102f46102ef3660046117e3565b6109fd565b005b610288610304366004611820565b60086020526000908152604090205481565b610246610a5d565b6102f461032c3660046117e3565b610a6a565b610246610ac6565b6102f46103473660046117e3565b610ad3565b610246610b82565b610246610b8f565b6102f461036a36600461183b565b610b9c565b61024661037d36600461186e565b610c31565b610288610390366004611820565b610c4a565b6102f46103a3366004611820565b610c65565b6102466103b6366004611820565b610ce4565b600d5461026f90610100900460ff1681565b610246610cfd565b6102f46103e336600461183b565b610d0a565b6000546102c990600160a060020a031681565b6102f46104093660046117e3565b610d74565b610246610dd0565b600d5461026f9060ff1681565b610246610ddd565b6102f461043936600461183b565b610dea565b6102f461044c366004611889565b610e4d565b61026f61045f3660046118cd565b610ebe565b6102f46104723660046117e3565b610fb9565b6102f46104853660046117e3565b611015565b6102f46104983660046117e3565b611071565b6102f46104ab3660046118f7565b6110cd565b6102f46104be366004611820565b611164565b6102466104d136600461186e565b61127b565b600180546104e390611910565b80601f016020809104026020016040519081016040528092919081815260200182805461050f90611910565b801561055c5780601f106105315761010080835404028352916020019161055c565b820191906000526020600020905b81548152906001019060200180831161053f57829003601f168201915b505050505081565b600081518351146105c657604080518082018252600681527f31343032303100000000000000000000000000000000000000000000000000006020820152905160e560020a62461bcd0281526105bd9190600401611575565b60405180910390fd5b6000805b845181101561060c578381815181106105e5576105e561194d565b6020026020010151826105f8919061197f565b91508061060481611992565b9150506105ca565b508061061733610c4a565b101561066b57604080518082018252600681527f31343032303200000000000000000000000000000000000000000000000000006020820152905160e560020a62461bcd0281526105bd9190600401611575565b600454600160a060020a031633146106df57600d5460408051808201909152600681527f313430323033000000000000000000000000000000000000000000000000000060208201529060ff1615156001146106dd5760405160e560020a62461bcd0281526004016105bd9190611575565b505b606060006001935060005b86518110156107c0576107168782815181106107085761070861194d565b60200260200101513b151590565b1561075f576107588782815181106107305761073061194d565b602002602001015187838151811061074a5761074a61194d565b602002602001015185611321565b915061079f565b61079c8782815181106107745761077461194d565b602002602001015187838151811061078e5761078e61194d565b602002602001015185611481565b91505b8115156000036107ae57600094505b806107b881611992565b9150506106ea565b505050505b92915050565b60008054604080518082019091526006815260d060020a6535303030303102602082015290600160a060020a0316331461081b5760405160e560020a62461bcd0281526004016105bd9190611575565b508161082685610c4a565b101561087a57604080518082018252600681527f31343033303100000000000000000000000000000000000000000000000000006020820152905160e560020a62461bcd0281526105bd9190600401611575565b6060833b15610958576108968361089087610c4a565b90611510565b600160a060020a0386166000908152600860205260409020556108c2836108bc86610c4a565b90611523565b600160a060020a038516600081815260086020526040908190209290925590517fc0ee0b8a00000000000000000000000000000000000000000000000000000000815285919063c0ee0b8a90610920903390889087906004016119ab565b600060405180830381600087803b15801561093a57600080fd5b505af115801561094e573d6000803e3d6000fd5b50505050506109a5565b6109658361089087610c4a565b600160a060020a03861660009081526008602052604090205561098b836108bc86610c4a565b600160a060020a0385166000908152600860205260409020555b83600160a060020a031685600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516109ea91815260200190565b60405180910390a3506001949350505050565b600054604080518082019091526006815260d060020a6535303030303102602082015290600160a060020a03163314610a4c5760405160e560020a62461bcd0281526004016105bd9190611575565b50600c610a598282611a2a565b5050565b600580546104e390611910565b600054604080518082019091526006815260d060020a6535303030303102602082015290600160a060020a03163314610ab95760405160e560020a62461bcd0281526004016105bd9190611575565b506009610a598282611a2a565b600680546104e390611910565b600d5460408051808201909152600681527f313430343031000000000000000000000000000000000000000000000000000060208201529060ff610100909104161515600114610b395760405160e560020a62461bcd0281526004016105bd9190611575565b50336000908152600f60205260409020610b538282611a2a565b5060405133907fa0a0cb7a71308c6bc8ff419bcc1cc3e9fd3009c7edf8a8d8c506ca5c46688b4990600090a250565b600980546104e390611910565b600c80546104e390611910565b600054604080518082019091526006815260d060020a6535303030303102602082015290600160a060020a03163314610beb5760405160e560020a62461bcd0281526004016105bd9190611575565b506007805460ff191682151590811790915560405160ff9091161515907fe1e5c6f5867805bf3fab73f4df4b80d0e87e9262a7bc22ac7c2cb3fd5896222f90600090a250565b600e60205260009081526040902080546104e390611910565b600160a060020a031660009081526008602052604090205490565b600054604080518082019091526006815260d060020a6535303030303102602082015290600160a060020a03163314610cb45760405160e560020a62461bcd0281526004016105bd9190611575565b506004805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600f60205260009081526040902080546104e390611910565b600a80546104e390611910565b600054604080518082019091526006815260d060020a6535303030303102602082015290600160a060020a03163314610d595760405160e560020a62461bcd0281526004016105bd9190611575565b50600d80549115156101000261ff0019909216919091179055565b600054604080518082019091526006815260d060020a6535303030303102602082015290600160a060020a03163314610dc35760405160e560020a62461bcd0281526004016105bd9190611575565b506006610a598282611a2a565b600b80546104e390611910565b600280546104e390611910565b600054604080518082019091526006815260d060020a6535303030303102602082015290600160a060020a03163314610e395760405160e560020a62461bcd0281526004016105bd9190611575565b50600d805460ff1916911515919091179055565b600054604080518082019091526006815260d060020a6535303030303102602082015290600160a060020a03163314610e9c5760405160e560020a62461bcd0281526004016105bd9190611575565b5060ff82166000908152600e60205260409020610eb98282611a2a565b505050565b600081610eca33610c4a565b1015610f1e57604080518082018252600681527f31343031303100000000000000000000000000000000000000000000000000006020820152905160e560020a62461bcd0281526105bd9190600401611575565b600454600160a060020a03163314610f9257600d5460408051808201909152600681527f313430313032000000000000000000000000000000000000000000000000000060208201529060ff161515600114610f905760405160e560020a62461bcd0281526004016105bd9190611575565b505b6060833b15610fae57610fa6848483611321565b9150506107c5565b610fa6848483611481565b600054604080518082019091526006815260d060020a6535303030303102602082015290600160a060020a031633146110085760405160e560020a62461bcd0281526004016105bd9190611575565b506005610a598282611a2a565b600054604080518082019091526006815260d060020a6535303030303102602082015290600160a060020a031633146110645760405160e560020a62461bcd0281526004016105bd9190611575565b50600a610a598282611a2a565b600054604080518082019091526006815260d060020a6535303030303102602082015290600160a060020a031633146110c05760405160e560020a62461bcd0281526004016105bd9190611575565b50600b610a598282611a2a565b600054604080518082019091526006815260d060020a6535303030303102602082015290600160a060020a0316331461111c5760405160e560020a62461bcd0281526004016105bd9190611575565b5060035461112a9082611523565b6003556000546111489082906108bc90600160a060020a0316610c4a565b60008054600160a060020a031681526008602052604090205550565b600054604080518082019091526006815260d060020a6535303030303102602082015290600160a060020a031633146111b35760405160e560020a62461bcd0281526004016105bd9190611575565b5060408051808201909152600681527f35303031303100000000000000000000000000000000000000000000000000006020820152600160a060020a0382166112125760405160e560020a62461bcd0281526004016105bd9190611575565b5060008054604051600160a060020a03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60ff81166000908152600e6020526040902080546060919061129c90611910565b80601f01602080910402602001604051908101604052809291908181526020018280546112c890611910565b80156113155780601f106112ea57610100808354040283529160200191611315565b820191906000526020600020905b8154815290600101906020018083116112f857829003601f168201915b50505050509050919050565b60045460408051808201909152600681527f31343030303100000000000000000000000000000000000000000000000000006020820152600091600160a060020a038681169116146113895760405160e560020a62461bcd0281526004016105bd9190611575565b506113978361089033610c4a565b336000908152600860205260409020556113b4836108bc86610c4a565b600160a060020a038516600081815260086020526040908190209290925590517fc0ee0b8a00000000000000000000000000000000000000000000000000000000815285919063c0ee0b8a90611412903390889088906004016119ab565b600060405180830381600087803b15801561142c57600080fd5b505af1158015611440573d6000803e3d6000fd5b5050604051868152600160a060020a03881692503391507fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016109ea565b60006114908361089033610c4a565b336000908152600860205260409020556114ad836108bc86610c4a565b600160a060020a0385166000818152600860205260409081902092909255905133907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906114fe9087815260200190565b60405180910390a35060019392505050565b600061151c8284611af0565b9392505050565b600061151c828461197f565b6000815180845260005b8181101561155557602081850181015186830182015201611539565b506000602082860101526020601f19601f83011685010191505092915050565b60208152600061151c602083018461152f565b60e060020a634e487b7102600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156115ca576115ca611588565b604052919050565b600067ffffffffffffffff8211156115ec576115ec611588565b5060209081020190565b8035600160a060020a038116811461160d57600080fd5b919050565b600082601f83011261162357600080fd5b81356020611638611633836115d2565b6115a1565b8281529181028401810191818101908684111561165457600080fd5b8286015b8481101561166f5780358352918301918301611658565b509695505050505050565b6000806040838503121561168d57600080fd5b823567ffffffffffffffff808211156116a557600080fd5b818501915085601f8301126116b957600080fd5b813560206116c9611633836115d2565b828152918102840181019181810190898411156116e557600080fd5b948201945b8386101561170a576116fb866115f6565b825294820194908201906116ea565b9650508601359250508082111561172057600080fd5b5061172d85828601611612565b9150509250929050565b60008060006060848603121561174c57600080fd5b611755846115f6565b9250611763602085016115f6565b9150604084013590509250925092565b600082601f83011261178457600080fd5b813567ffffffffffffffff81111561179e5761179e611588565b6117b1601f8201601f19166020016115a1565b8181528460208386010111156117c657600080fd5b816020850160208301376000918101602001919091529392505050565b6000602082840312156117f557600080fd5b813567ffffffffffffffff81111561180c57600080fd5b61181884828501611773565b949350505050565b60006020828403121561183257600080fd5b61151c826115f6565b60006020828403121561184d57600080fd5b8135801515811461151c57600080fd5b803560ff8116811461160d57600080fd5b60006020828403121561188057600080fd5b61151c8261185d565b6000806040838503121561189c57600080fd5b6118a58361185d565b9150602083013567ffffffffffffffff8111156118c157600080fd5b61172d85828601611773565b600080604083850312156118e057600080fd5b6118e9836115f6565b946020939093013593505050565b60006020828403121561190957600080fd5b5035919050565b60028104600182168061192457607f821691505b6020821081036119475760e060020a634e487b7102600052602260045260246000fd5b50919050565b60e060020a634e487b7102600052603260045260246000fd5b60e060020a634e487b7102600052601160045260246000fd5b808201808211156107c5576107c5611966565b6000600182016119a4576119a4611966565b5060010190565b600160a060020a03841681528260208201526060604082015260006119d3606083018461152f565b95945050505050565b601f821115610eb9576000818152602081206020601f86010481016020861015611a035750805b6020601f860104820191505b81811015611a2257828155600101611a0f565b505050505050565b815167ffffffffffffffff811115611a4457611a44611588565b611a5881611a528454611910565b846119dc565b602080601f831160018114611a915760008415611a755750858301515b60028086026008870290910a6000190419821617865550611a22565b600085815260208120601f198616915b82811015611ac057888601518255948401946001909101908401611aa1565b5085821015611ae057878501516008601f88160260020a60001904191681555b5050505050600202600101905550565b818103818111156107c5576107c561196656fea2646970667358221220573ad0dd507c2b6a2a16ab3c26042e8ae52017379a20ba77e658b4ea3578de2164736f6c63430008110033", - "deployedBytecode": "608060405234801561001057600080fd5b5060043610610239576000357c0100000000000000000000000000000000000000000000000000000000900480637c3bf42d116101425780639cd23707116100ca578063c72fe06511610099578063c72fe06514610477578063c9c922771461048a578063cc872b661461049d578063f2fde38b146104b0578063ffca397b146104c357600080fd5b80639cd237071461042b578063a124beba1461043e578063a9059cbb14610451578063b967a52e1461046457600080fd5b80638da5cb5b116101115780638da5cb5b146103e85780638ed8a9bc146103fb5780638f6204871461040e57806392ff0d311461041657806395d89b411461042357600080fd5b80637c3bf42d146103a8578063833e0d8c146103bb5780638739e663146103cd57806388539011146103d557600080fd5b80633e8a8009116101c557806358c3b8701161019457806358c3b870146103545780635c40f6f41461035c57806360bf50fc1461036f57806370a082311461038257806376fa7a311461039557600080fd5b80633e8a80091461031e578063428630f6146103315780635540e7cf14610339578063565974d31461034c57600080fd5b806323b872dd1161020c57806323b872dd146102a357806325287d42146102b657806325d60861146102e157806327e235e3146102f657806336f7ab5e1461031657600080fd5b806306fdde031461023e578063153a1f3e1461025c57806318160ddd1461027f578063200d2ed214610296575b600080fd5b6102466104d6565b6040516102539190611575565b60405180910390f35b61026f61026a36600461167a565b610564565b6040519015158152602001610253565b61028860035481565b604051908152602001610253565b60075461026f9060ff1681565b61026f6102b1366004611737565b6107cb565b6004546102c990600160a060020a031681565b604051600160a060020a039091168152602001610253565b6102f46102ef3660046117e3565b6109fd565b005b610288610304366004611820565b60086020526000908152604090205481565b610246610a5d565b6102f461032c3660046117e3565b610a6a565b610246610ac6565b6102f46103473660046117e3565b610ad3565b610246610b82565b610246610b8f565b6102f461036a36600461183b565b610b9c565b61024661037d36600461186e565b610c31565b610288610390366004611820565b610c4a565b6102f46103a3366004611820565b610c65565b6102466103b6366004611820565b610ce4565b600d5461026f90610100900460ff1681565b610246610cfd565b6102f46103e336600461183b565b610d0a565b6000546102c990600160a060020a031681565b6102f46104093660046117e3565b610d74565b610246610dd0565b600d5461026f9060ff1681565b610246610ddd565b6102f461043936600461183b565b610dea565b6102f461044c366004611889565b610e4d565b61026f61045f3660046118cd565b610ebe565b6102f46104723660046117e3565b610fb9565b6102f46104853660046117e3565b611015565b6102f46104983660046117e3565b611071565b6102f46104ab3660046118f7565b6110cd565b6102f46104be366004611820565b611164565b6102466104d136600461186e565b61127b565b600180546104e390611910565b80601f016020809104026020016040519081016040528092919081815260200182805461050f90611910565b801561055c5780601f106105315761010080835404028352916020019161055c565b820191906000526020600020905b81548152906001019060200180831161053f57829003601f168201915b505050505081565b600081518351146105c657604080518082018252600681527f31343032303100000000000000000000000000000000000000000000000000006020820152905160e560020a62461bcd0281526105bd9190600401611575565b60405180910390fd5b6000805b845181101561060c578381815181106105e5576105e561194d565b6020026020010151826105f8919061197f565b91508061060481611992565b9150506105ca565b508061061733610c4a565b101561066b57604080518082018252600681527f31343032303200000000000000000000000000000000000000000000000000006020820152905160e560020a62461bcd0281526105bd9190600401611575565b600454600160a060020a031633146106df57600d5460408051808201909152600681527f313430323033000000000000000000000000000000000000000000000000000060208201529060ff1615156001146106dd5760405160e560020a62461bcd0281526004016105bd9190611575565b505b606060006001935060005b86518110156107c0576107168782815181106107085761070861194d565b60200260200101513b151590565b1561075f576107588782815181106107305761073061194d565b602002602001015187838151811061074a5761074a61194d565b602002602001015185611321565b915061079f565b61079c8782815181106107745761077461194d565b602002602001015187838151811061078e5761078e61194d565b602002602001015185611481565b91505b8115156000036107ae57600094505b806107b881611992565b9150506106ea565b505050505b92915050565b60008054604080518082019091526006815260d060020a6535303030303102602082015290600160a060020a0316331461081b5760405160e560020a62461bcd0281526004016105bd9190611575565b508161082685610c4a565b101561087a57604080518082018252600681527f31343033303100000000000000000000000000000000000000000000000000006020820152905160e560020a62461bcd0281526105bd9190600401611575565b6060833b15610958576108968361089087610c4a565b90611510565b600160a060020a0386166000908152600860205260409020556108c2836108bc86610c4a565b90611523565b600160a060020a038516600081815260086020526040908190209290925590517fc0ee0b8a00000000000000000000000000000000000000000000000000000000815285919063c0ee0b8a90610920903390889087906004016119ab565b600060405180830381600087803b15801561093a57600080fd5b505af115801561094e573d6000803e3d6000fd5b50505050506109a5565b6109658361089087610c4a565b600160a060020a03861660009081526008602052604090205561098b836108bc86610c4a565b600160a060020a0385166000908152600860205260409020555b83600160a060020a031685600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516109ea91815260200190565b60405180910390a3506001949350505050565b600054604080518082019091526006815260d060020a6535303030303102602082015290600160a060020a03163314610a4c5760405160e560020a62461bcd0281526004016105bd9190611575565b50600c610a598282611a2a565b5050565b600580546104e390611910565b600054604080518082019091526006815260d060020a6535303030303102602082015290600160a060020a03163314610ab95760405160e560020a62461bcd0281526004016105bd9190611575565b506009610a598282611a2a565b600680546104e390611910565b600d5460408051808201909152600681527f313430343031000000000000000000000000000000000000000000000000000060208201529060ff610100909104161515600114610b395760405160e560020a62461bcd0281526004016105bd9190611575565b50336000908152600f60205260409020610b538282611a2a565b5060405133907fa0a0cb7a71308c6bc8ff419bcc1cc3e9fd3009c7edf8a8d8c506ca5c46688b4990600090a250565b600980546104e390611910565b600c80546104e390611910565b600054604080518082019091526006815260d060020a6535303030303102602082015290600160a060020a03163314610beb5760405160e560020a62461bcd0281526004016105bd9190611575565b506007805460ff191682151590811790915560405160ff9091161515907fe1e5c6f5867805bf3fab73f4df4b80d0e87e9262a7bc22ac7c2cb3fd5896222f90600090a250565b600e60205260009081526040902080546104e390611910565b600160a060020a031660009081526008602052604090205490565b600054604080518082019091526006815260d060020a6535303030303102602082015290600160a060020a03163314610cb45760405160e560020a62461bcd0281526004016105bd9190611575565b506004805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600f60205260009081526040902080546104e390611910565b600a80546104e390611910565b600054604080518082019091526006815260d060020a6535303030303102602082015290600160a060020a03163314610d595760405160e560020a62461bcd0281526004016105bd9190611575565b50600d80549115156101000261ff0019909216919091179055565b600054604080518082019091526006815260d060020a6535303030303102602082015290600160a060020a03163314610dc35760405160e560020a62461bcd0281526004016105bd9190611575565b506006610a598282611a2a565b600b80546104e390611910565b600280546104e390611910565b600054604080518082019091526006815260d060020a6535303030303102602082015290600160a060020a03163314610e395760405160e560020a62461bcd0281526004016105bd9190611575565b50600d805460ff1916911515919091179055565b600054604080518082019091526006815260d060020a6535303030303102602082015290600160a060020a03163314610e9c5760405160e560020a62461bcd0281526004016105bd9190611575565b5060ff82166000908152600e60205260409020610eb98282611a2a565b505050565b600081610eca33610c4a565b1015610f1e57604080518082018252600681527f31343031303100000000000000000000000000000000000000000000000000006020820152905160e560020a62461bcd0281526105bd9190600401611575565b600454600160a060020a03163314610f9257600d5460408051808201909152600681527f313430313032000000000000000000000000000000000000000000000000000060208201529060ff161515600114610f905760405160e560020a62461bcd0281526004016105bd9190611575565b505b6060833b15610fae57610fa6848483611321565b9150506107c5565b610fa6848483611481565b600054604080518082019091526006815260d060020a6535303030303102602082015290600160a060020a031633146110085760405160e560020a62461bcd0281526004016105bd9190611575565b506005610a598282611a2a565b600054604080518082019091526006815260d060020a6535303030303102602082015290600160a060020a031633146110645760405160e560020a62461bcd0281526004016105bd9190611575565b50600a610a598282611a2a565b600054604080518082019091526006815260d060020a6535303030303102602082015290600160a060020a031633146110c05760405160e560020a62461bcd0281526004016105bd9190611575565b50600b610a598282611a2a565b600054604080518082019091526006815260d060020a6535303030303102602082015290600160a060020a0316331461111c5760405160e560020a62461bcd0281526004016105bd9190611575565b5060035461112a9082611523565b6003556000546111489082906108bc90600160a060020a0316610c4a565b60008054600160a060020a031681526008602052604090205550565b600054604080518082019091526006815260d060020a6535303030303102602082015290600160a060020a031633146111b35760405160e560020a62461bcd0281526004016105bd9190611575565b5060408051808201909152600681527f35303031303100000000000000000000000000000000000000000000000000006020820152600160a060020a0382166112125760405160e560020a62461bcd0281526004016105bd9190611575565b5060008054604051600160a060020a03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60ff81166000908152600e6020526040902080546060919061129c90611910565b80601f01602080910402602001604051908101604052809291908181526020018280546112c890611910565b80156113155780601f106112ea57610100808354040283529160200191611315565b820191906000526020600020905b8154815290600101906020018083116112f857829003601f168201915b50505050509050919050565b60045460408051808201909152600681527f31343030303100000000000000000000000000000000000000000000000000006020820152600091600160a060020a038681169116146113895760405160e560020a62461bcd0281526004016105bd9190611575565b506113978361089033610c4a565b336000908152600860205260409020556113b4836108bc86610c4a565b600160a060020a038516600081815260086020526040908190209290925590517fc0ee0b8a00000000000000000000000000000000000000000000000000000000815285919063c0ee0b8a90611412903390889088906004016119ab565b600060405180830381600087803b15801561142c57600080fd5b505af1158015611440573d6000803e3d6000fd5b5050604051868152600160a060020a03881692503391507fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016109ea565b60006114908361089033610c4a565b336000908152600860205260409020556114ad836108bc86610c4a565b600160a060020a0385166000818152600860205260409081902092909255905133907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906114fe9087815260200190565b60405180910390a35060019392505050565b600061151c8284611af0565b9392505050565b600061151c828461197f565b6000815180845260005b8181101561155557602081850181015186830182015201611539565b506000602082860101526020601f19601f83011685010191505092915050565b60208152600061151c602083018461152f565b60e060020a634e487b7102600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156115ca576115ca611588565b604052919050565b600067ffffffffffffffff8211156115ec576115ec611588565b5060209081020190565b8035600160a060020a038116811461160d57600080fd5b919050565b600082601f83011261162357600080fd5b81356020611638611633836115d2565b6115a1565b8281529181028401810191818101908684111561165457600080fd5b8286015b8481101561166f5780358352918301918301611658565b509695505050505050565b6000806040838503121561168d57600080fd5b823567ffffffffffffffff808211156116a557600080fd5b818501915085601f8301126116b957600080fd5b813560206116c9611633836115d2565b828152918102840181019181810190898411156116e557600080fd5b948201945b8386101561170a576116fb866115f6565b825294820194908201906116ea565b9650508601359250508082111561172057600080fd5b5061172d85828601611612565b9150509250929050565b60008060006060848603121561174c57600080fd5b611755846115f6565b9250611763602085016115f6565b9150604084013590509250925092565b600082601f83011261178457600080fd5b813567ffffffffffffffff81111561179e5761179e611588565b6117b1601f8201601f19166020016115a1565b8181528460208386010111156117c657600080fd5b816020850160208301376000918101602001919091529392505050565b6000602082840312156117f557600080fd5b813567ffffffffffffffff81111561180c57600080fd5b61181884828501611773565b949350505050565b60006020828403121561183257600080fd5b61151c826115f6565b60006020828403121561184d57600080fd5b8135801515811461151c57600080fd5b803560ff8116811461160d57600080fd5b60006020828403121561188057600080fd5b61151c8261185d565b6000806040838503121561189c57600080fd5b6118a58361185d565b9150602083013567ffffffffffffffff8111156118c157600080fd5b61172d85828601611773565b600080604083850312156118e057600080fd5b6118e9836115f6565b946020939093013593505050565b60006020828403121561190957600080fd5b5035919050565b60028104600182168061192457607f821691505b6020821081036119475760e060020a634e487b7102600052602260045260246000fd5b50919050565b60e060020a634e487b7102600052603260045260246000fd5b60e060020a634e487b7102600052601160045260246000fd5b808201808211156107c5576107c5611966565b6000600182016119a4576119a4611966565b5060010190565b600160a060020a03841681528260208201526060604082015260006119d3606083018461152f565b95945050505050565b601f821115610eb9576000818152602081206020601f86010481016020861015611a035750805b6020601f860104820191505b81811015611a2257828155600101611a0f565b505050505050565b815167ffffffffffffffff811115611a4457611a44611588565b611a5881611a528454611910565b846119dc565b602080601f831160018114611a915760008415611a755750858301515b60028086026008870290910a6000190419821617865550611a22565b600085815260208120601f198616915b82811015611ac057888601518255948401946001909101908401611aa1565b5085821015611ae057878501516008601f88160260020a60001904191681555b5050505050600202600101905550565b818103818111156107c5576107c561196656fea2646970667358221220573ad0dd507c2b6a2a16ab3c26042e8ae52017379a20ba77e658b4ea3578de2164736f6c63430008110033" + "bytecode": "60806040523480156200001157600080fd5b506040516200200b3803806200200b833981016040819052620000349162000224565b600080546001600160a01b0319908116339182161717905560016200005a8c8262000473565b506002620000698b8262000473565b506003899055600480546001600160a01b0319166001600160a01b038a16179055600962000098888262000473565b50600a620000a7878262000473565b50600b620000b6868262000473565b50600c620000c5858262000473565b50600354600080546001600160a01b0316815260086020526040902055600d805484151560ff199182161790915560078054909116600117905560056200010d838262000473565b5060066200011c828262000473565b5050505050505050505050506200053f565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200015657600080fd5b81516001600160401b03808211156200017357620001736200012e565b604051601f8301601f19908116603f011681019082821181831017156200019e576200019e6200012e565b8160405283815260209250866020858801011115620001bc57600080fd5b600091505b83821015620001e05785820183015181830184015290820190620001c1565b6000602085830101528094505050505092915050565b80516001600160a01b03811681146200020e57600080fd5b919050565b805180151581146200020e57600080fd5b60008060008060008060008060008060006101608c8e0312156200024757600080fd5b8b516001600160401b038111156200025e57600080fd5b6200026c8e828f0162000144565b60208e0151909c5090506001600160401b038111156200028b57600080fd5b620002998e828f0162000144565b9a505060408c01519850620002b160608d01620001f6565b60808d01519098506001600160401b03811115620002ce57600080fd5b620002dc8e828f0162000144565b60a08e015190985090506001600160401b03811115620002fb57600080fd5b620003098e828f0162000144565b60c08e015190975090506001600160401b038111156200032857600080fd5b620003368e828f0162000144565b60e08e015190965090506001600160401b038111156200035557600080fd5b620003638e828f0162000144565b945050620003756101008d0162000213565b6101208d01519093506001600160401b038111156200039357600080fd5b620003a18e828f0162000144565b6101408e015190935090506001600160401b03811115620003c157600080fd5b620003cf8e828f0162000144565b9150509295989b509295989b9093969950565b600181811c90821680620003f757607f821691505b6020821081036200041857634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200046e576000816000526020600020601f850160051c81016020861015620004495750805b601f850160051c820191505b818110156200046a5782815560010162000455565b5050505b505050565b81516001600160401b038111156200048f576200048f6200012e565b620004a781620004a08454620003e2565b846200041e565b602080601f831160018114620004df5760008415620004c65750858301515b600019600386901b1c1916600185901b1785556200046a565b600085815260208120601f198616915b828110156200051057888601518255948401946001909101908401620004ef565b50858210156200052f5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b611abc806200054f6000396000f3fe608060405234801561001057600080fd5b50600436106102275760003560e01c80637c3bf42d116101305780639cd23707116100b8578063c9c922771161007c578063c9c9227714610478578063cc872b661461048b578063e80500521461049e578063f2fde38b146104b1578063ffca397b146104c457600080fd5b80639cd2370714610419578063a124beba1461042c578063a9059cbb1461043f578063b967a52e14610452578063c72fe0651461046557600080fd5b80638da5cb5b116100ff5780638da5cb5b146103d65780638ed8a9bc146103e95780638f620487146103fc57806392ff0d311461040457806395d89b411461041157600080fd5b80637c3bf42d14610396578063833e0d8c146103a95780638739e663146103bb57806388539011146103c357600080fd5b80633e8a8009116101b357806358c3b8701161018257806358c3b870146103425780635c40f6f41461034a57806360bf50fc1461035d57806370a082311461037057806376fa7a311461038357600080fd5b80633e8a80091461030c578063428630f61461031f5780635540e7cf14610327578063565974d31461033a57600080fd5b806323b872dd116101fa57806323b872dd1461029157806325287d42146102a457806325d60861146102cf57806327e235e3146102e457806336f7ab5e1461030457600080fd5b806306fdde031461022c578063153a1f3e1461024a57806318160ddd1461026d578063200d2ed214610284575b600080fd5b6102346104d7565b6040516102419190611523565b60405180910390f35b61025d610258366004611582565b610565565b6040519015158152602001610241565b61027660035481565b604051908152602001610241565b60075461025d9060ff1681565b61025d61029f36600461160a565b61078b565b6004546102b7906001600160a01b031681565b6040516001600160a01b039091168152602001610241565b6102e26102dd3660046116e9565b610984565b005b6102766102f2366004611726565b60086020526000908152604090205481565b6102346109de565b6102e261031a3660046116e9565b6109eb565b610234610a41565b6102e26103353660046116e9565b610a4e565b610234610ae3565b610234610af0565b6102e2610358366004611741565b610afd565b61023461036b366004611774565b610b8c565b61027661037e366004611726565b610ba5565b6102e2610391366004611726565b610bc0565b6102346103a4366004611726565b610c2c565b600d5461025d90610100900460ff1681565b610234610c45565b6102e26103d1366004611741565b610c52565b6000546102b7906001600160a01b031681565b6102e26103f73660046116e9565b610cb6565b610234610d0c565b600d5461025d9060ff1681565b610234610d19565b6102e2610427366004611741565b610d26565b6102e261043a36600461178f565b610d83565b61025d61044d3660046117dd565b610dee565b6102e26104603660046116e9565b610ebb565b6102e26104733660046116e9565b610f11565b6102e26104863660046116e9565b610f67565b6102e2610499366004611807565b610fbd565b61025d6104ac366004611820565b61104e565b6102e26104bf366004611726565b611172565b6102346104d2366004611774565b61125c565b600180546104e4906118ba565b80601f0160208091040260200160405190810160405280929190818152602001828054610510906118ba565b801561055d5780601f106105325761010080835404028352916020019161055d565b820191906000526020600020905b81548152906001019060200180831161054057829003601f168201915b505050505081565b60008382146105ab57604080518082018252600681526531343032303160d01b6020820152905162461bcd60e51b81526105a29190600401611523565b60405180910390fd5b6000805b858110156105e5578484828181106105c9576105c96118f4565b90506020020135826105db9190611920565b91506001016105af565b50806105f033610ba5565b101561062a576040805180820182526006815265189a1819181960d11b6020820152905162461bcd60e51b81526105a29190600401611523565b6004546001600160a01b0316331461068457600d5460408051808201909152600681526531343032303360d01b60208201529060ff1615156001146106825760405162461bcd60e51b81526004016105a29190611523565b505b606060006001935060005b8781101561077f576106c78989838181106106ac576106ac6118f4565b90506020020160208101906106c19190611726565b3b151590565b1561071c576107158989838181106106e1576106e16118f4565b90506020020160208101906106f69190611726565b888884818110610708576107086118f4565b9050602002013585611302565b9150610768565b610765898983818110610731576107316118f4565b90506020020160208101906107469190611726565b888884818110610758576107586118f4565b905060200201358561142f565b91505b81151560000361077757600094505b60010161068f565b50505050949350505050565b6000805460408051808201909152600681526535303030303160d01b6020820152906001600160a01b031633146107d55760405162461bcd60e51b81526004016105a29190611523565b50816107e085610ba5565b101561081a57604080518082018252600681526531343033303160d01b6020820152905162461bcd60e51b81526105a29190600401611523565b6060833b156108df576108368361083087610ba5565b906114be565b6001600160a01b0386166000908152600860205260409020556108628361085c86610ba5565b906114d1565b6001600160a01b0385166000818152600860205260409081902092909255905163607705c560e11b815285919063c0ee0b8a906108a790339088908790600401611933565b600060405180830381600087803b1580156108c157600080fd5b505af11580156108d5573d6000803e3d6000fd5b505050505061092c565b6108ec8361083087610ba5565b6001600160a01b0386166000908152600860205260409020556109128361085c86610ba5565b6001600160a01b0385166000908152600860205260409020555b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161097191815260200190565b60405180910390a3506001949350505050565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b031633146109cd5760405162461bcd60e51b81526004016105a29190611523565b50600c6109da82826119b3565b5050565b600580546104e4906118ba565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b03163314610a345760405162461bcd60e51b81526004016105a29190611523565b5060096109da82826119b3565b600680546104e4906118ba565b600d5460408051808201909152600681526531343034303160d01b60208201529060ff610100909104161515600114610a9a5760405162461bcd60e51b81526004016105a29190611523565b50336000908152600f60205260409020610ab482826119b3565b5060405133907fa0a0cb7a71308c6bc8ff419bcc1cc3e9fd3009c7edf8a8d8c506ca5c46688b4990600090a250565b600980546104e4906118ba565b600c80546104e4906118ba565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b03163314610b465760405162461bcd60e51b81526004016105a29190611523565b506007805460ff191682151590811790915560405160ff9091161515907fe1e5c6f5867805bf3fab73f4df4b80d0e87e9262a7bc22ac7c2cb3fd5896222f90600090a250565b600e60205260009081526040902080546104e4906118ba565b6001600160a01b031660009081526008602052604090205490565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b03163314610c095760405162461bcd60e51b81526004016105a29190611523565b50600480546001600160a01b0319166001600160a01b0392909216919091179055565b600f60205260009081526040902080546104e4906118ba565b600a80546104e4906118ba565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b03163314610c9b5760405162461bcd60e51b81526004016105a29190611523565b50600d80549115156101000261ff0019909216919091179055565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b03163314610cff5760405162461bcd60e51b81526004016105a29190611523565b5060066109da82826119b3565b600b80546104e4906118ba565b600280546104e4906118ba565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b03163314610d6f5760405162461bcd60e51b81526004016105a29190611523565b50600d805460ff1916911515919091179055565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b03163314610dcc5760405162461bcd60e51b81526004016105a29190611523565b5060ff82166000908152600e60205260409020610de982826119b3565b505050565b600081610dfa33610ba5565b1015610e3457604080518082018252600681526531343031303160d01b6020820152905162461bcd60e51b81526105a29190600401611523565b6004546001600160a01b03163314610e8e57600d54604080518082019091526006815265189a1818981960d11b60208201529060ff161515600114610e8c5760405162461bcd60e51b81526004016105a29190611523565b505b6060833b15610eaa57610ea2848483611302565b915050610eb5565b610ea284848361142f565b92915050565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b03163314610f045760405162461bcd60e51b81526004016105a29190611523565b5060056109da82826119b3565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b03163314610f5a5760405162461bcd60e51b81526004016105a29190611523565b50600a6109da82826119b3565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b03163314610fb05760405162461bcd60e51b81526004016105a29190611523565b50600b6109da82826119b3565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b031633146110065760405162461bcd60e51b81526004016105a29190611523565b5060035461101490826114d1565b60035560005461103290829061085c906001600160a01b0316610ba5565b600080546001600160a01b031681526008602052604090205550565b6000805460408051808201909152600681526535303030303160d01b6020820152906001600160a01b031633146110985760405162461bcd60e51b81526004016105a29190611523565b5085841415806110a85750858214155b156110e157604080518082018252600681526531343035303160d01b6020820152905162461bcd60e51b81526105a29190600401611523565b60005b868110156111645761115b888883818110611101576111016118f4565b90506020020160208101906111169190611726565b878784818110611128576111286118f4565b905060200201602081019061113d9190611726565b86868581811061114f5761114f6118f4565b9050602002013561078b565b506001016110e4565b506001979650505050505050565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b031633146111bb5760405162461bcd60e51b81526004016105a29190611523565b5060408051808201909152600681526535303031303160d01b60208201526001600160a01b0382166112005760405162461bcd60e51b81526004016105a29190611523565b50600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60ff81166000908152600e6020526040902080546060919061127d906118ba565b80601f01602080910402602001604051908101604052809291908181526020018280546112a9906118ba565b80156112f65780601f106112cb576101008083540402835291602001916112f6565b820191906000526020600020905b8154815290600101906020018083116112d957829003601f168201915b50505050509050919050565b60045460408051808201909152600681526531343030303160d01b60208201526000916001600160a01b038681169116146113505760405162461bcd60e51b81526004016105a29190611523565b5061135e8361083033610ba5565b3360009081526008602052604090205561137b8361085c86610ba5565b6001600160a01b0385166000818152600860205260409081902092909255905163607705c560e11b815285919063c0ee0b8a906113c090339088908890600401611933565b600060405180830381600087803b1580156113da57600080fd5b505af11580156113ee573d6000803e3d6000fd5b50506040518681526001600160a01b03881692503391507fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610971565b600061143e8361083033610ba5565b3360009081526008602052604090205561145b8361085c86610ba5565b6001600160a01b0385166000818152600860205260409081902092909255905133907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906114ac9087815260200190565b60405180910390a35060019392505050565b60006114ca8284611a73565b9392505050565b60006114ca8284611920565b6000815180845260005b81811015611503576020818501810151868301820152016114e7565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006114ca60208301846114dd565b60008083601f84011261154857600080fd5b50813567ffffffffffffffff81111561156057600080fd5b6020830191508360208260051b850101111561157b57600080fd5b9250929050565b6000806000806040858703121561159857600080fd5b843567ffffffffffffffff808211156115b057600080fd5b6115bc88838901611536565b909650945060208701359150808211156115d557600080fd5b506115e287828801611536565b95989497509550505050565b80356001600160a01b038116811461160557600080fd5b919050565b60008060006060848603121561161f57600080fd5b611628846115ee565b9250611636602085016115ee565b9150604084013590509250925092565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261166d57600080fd5b813567ffffffffffffffff8082111561168857611688611646565b604051601f8301601f19908116603f011681019082821181831017156116b0576116b0611646565b816040528381528660208588010111156116c957600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000602082840312156116fb57600080fd5b813567ffffffffffffffff81111561171257600080fd5b61171e8482850161165c565b949350505050565b60006020828403121561173857600080fd5b6114ca826115ee565b60006020828403121561175357600080fd5b813580151581146114ca57600080fd5b803560ff8116811461160557600080fd5b60006020828403121561178657600080fd5b6114ca82611763565b600080604083850312156117a257600080fd5b6117ab83611763565b9150602083013567ffffffffffffffff8111156117c757600080fd5b6117d38582860161165c565b9150509250929050565b600080604083850312156117f057600080fd5b6117f9836115ee565b946020939093013593505050565b60006020828403121561181957600080fd5b5035919050565b6000806000806000806060878903121561183957600080fd5b863567ffffffffffffffff8082111561185157600080fd5b61185d8a838b01611536565b9098509650602089013591508082111561187657600080fd5b6118828a838b01611536565b9096509450604089013591508082111561189b57600080fd5b506118a889828a01611536565b979a9699509497509295939492505050565b600181811c908216806118ce57607f821691505b6020821081036118ee57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b80820180821115610eb557610eb561190a565b60018060a01b038416815282602082015260606040820152600061195a60608301846114dd565b95945050505050565b601f821115610de9576000816000526020600020601f850160051c8101602086101561198c5750805b601f850160051c820191505b818110156119ab57828155600101611998565b505050505050565b815167ffffffffffffffff8111156119cd576119cd611646565b6119e1816119db84546118ba565b84611963565b602080601f831160018114611a1657600084156119fe5750858301515b600019600386901b1c1916600185901b1785556119ab565b600085815260208120601f198616915b82811015611a4557888601518255948401946001909101908401611a26565b5085821015611a635787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b81810381811115610eb557610eb561190a56fea2646970667358221220d7349f136d92706b528344007a56fa0c79d7242eefe13656a64a3f8680b1124c64736f6c63430008170033", + "deployedBytecode": "608060405234801561001057600080fd5b50600436106102275760003560e01c80637c3bf42d116101305780639cd23707116100b8578063c9c922771161007c578063c9c9227714610478578063cc872b661461048b578063e80500521461049e578063f2fde38b146104b1578063ffca397b146104c457600080fd5b80639cd2370714610419578063a124beba1461042c578063a9059cbb1461043f578063b967a52e14610452578063c72fe0651461046557600080fd5b80638da5cb5b116100ff5780638da5cb5b146103d65780638ed8a9bc146103e95780638f620487146103fc57806392ff0d311461040457806395d89b411461041157600080fd5b80637c3bf42d14610396578063833e0d8c146103a95780638739e663146103bb57806388539011146103c357600080fd5b80633e8a8009116101b357806358c3b8701161018257806358c3b870146103425780635c40f6f41461034a57806360bf50fc1461035d57806370a082311461037057806376fa7a311461038357600080fd5b80633e8a80091461030c578063428630f61461031f5780635540e7cf14610327578063565974d31461033a57600080fd5b806323b872dd116101fa57806323b872dd1461029157806325287d42146102a457806325d60861146102cf57806327e235e3146102e457806336f7ab5e1461030457600080fd5b806306fdde031461022c578063153a1f3e1461024a57806318160ddd1461026d578063200d2ed214610284575b600080fd5b6102346104d7565b6040516102419190611523565b60405180910390f35b61025d610258366004611582565b610565565b6040519015158152602001610241565b61027660035481565b604051908152602001610241565b60075461025d9060ff1681565b61025d61029f36600461160a565b61078b565b6004546102b7906001600160a01b031681565b6040516001600160a01b039091168152602001610241565b6102e26102dd3660046116e9565b610984565b005b6102766102f2366004611726565b60086020526000908152604090205481565b6102346109de565b6102e261031a3660046116e9565b6109eb565b610234610a41565b6102e26103353660046116e9565b610a4e565b610234610ae3565b610234610af0565b6102e2610358366004611741565b610afd565b61023461036b366004611774565b610b8c565b61027661037e366004611726565b610ba5565b6102e2610391366004611726565b610bc0565b6102346103a4366004611726565b610c2c565b600d5461025d90610100900460ff1681565b610234610c45565b6102e26103d1366004611741565b610c52565b6000546102b7906001600160a01b031681565b6102e26103f73660046116e9565b610cb6565b610234610d0c565b600d5461025d9060ff1681565b610234610d19565b6102e2610427366004611741565b610d26565b6102e261043a36600461178f565b610d83565b61025d61044d3660046117dd565b610dee565b6102e26104603660046116e9565b610ebb565b6102e26104733660046116e9565b610f11565b6102e26104863660046116e9565b610f67565b6102e2610499366004611807565b610fbd565b61025d6104ac366004611820565b61104e565b6102e26104bf366004611726565b611172565b6102346104d2366004611774565b61125c565b600180546104e4906118ba565b80601f0160208091040260200160405190810160405280929190818152602001828054610510906118ba565b801561055d5780601f106105325761010080835404028352916020019161055d565b820191906000526020600020905b81548152906001019060200180831161054057829003601f168201915b505050505081565b60008382146105ab57604080518082018252600681526531343032303160d01b6020820152905162461bcd60e51b81526105a29190600401611523565b60405180910390fd5b6000805b858110156105e5578484828181106105c9576105c96118f4565b90506020020135826105db9190611920565b91506001016105af565b50806105f033610ba5565b101561062a576040805180820182526006815265189a1819181960d11b6020820152905162461bcd60e51b81526105a29190600401611523565b6004546001600160a01b0316331461068457600d5460408051808201909152600681526531343032303360d01b60208201529060ff1615156001146106825760405162461bcd60e51b81526004016105a29190611523565b505b606060006001935060005b8781101561077f576106c78989838181106106ac576106ac6118f4565b90506020020160208101906106c19190611726565b3b151590565b1561071c576107158989838181106106e1576106e16118f4565b90506020020160208101906106f69190611726565b888884818110610708576107086118f4565b9050602002013585611302565b9150610768565b610765898983818110610731576107316118f4565b90506020020160208101906107469190611726565b888884818110610758576107586118f4565b905060200201358561142f565b91505b81151560000361077757600094505b60010161068f565b50505050949350505050565b6000805460408051808201909152600681526535303030303160d01b6020820152906001600160a01b031633146107d55760405162461bcd60e51b81526004016105a29190611523565b50816107e085610ba5565b101561081a57604080518082018252600681526531343033303160d01b6020820152905162461bcd60e51b81526105a29190600401611523565b6060833b156108df576108368361083087610ba5565b906114be565b6001600160a01b0386166000908152600860205260409020556108628361085c86610ba5565b906114d1565b6001600160a01b0385166000818152600860205260409081902092909255905163607705c560e11b815285919063c0ee0b8a906108a790339088908790600401611933565b600060405180830381600087803b1580156108c157600080fd5b505af11580156108d5573d6000803e3d6000fd5b505050505061092c565b6108ec8361083087610ba5565b6001600160a01b0386166000908152600860205260409020556109128361085c86610ba5565b6001600160a01b0385166000908152600860205260409020555b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161097191815260200190565b60405180910390a3506001949350505050565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b031633146109cd5760405162461bcd60e51b81526004016105a29190611523565b50600c6109da82826119b3565b5050565b600580546104e4906118ba565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b03163314610a345760405162461bcd60e51b81526004016105a29190611523565b5060096109da82826119b3565b600680546104e4906118ba565b600d5460408051808201909152600681526531343034303160d01b60208201529060ff610100909104161515600114610a9a5760405162461bcd60e51b81526004016105a29190611523565b50336000908152600f60205260409020610ab482826119b3565b5060405133907fa0a0cb7a71308c6bc8ff419bcc1cc3e9fd3009c7edf8a8d8c506ca5c46688b4990600090a250565b600980546104e4906118ba565b600c80546104e4906118ba565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b03163314610b465760405162461bcd60e51b81526004016105a29190611523565b506007805460ff191682151590811790915560405160ff9091161515907fe1e5c6f5867805bf3fab73f4df4b80d0e87e9262a7bc22ac7c2cb3fd5896222f90600090a250565b600e60205260009081526040902080546104e4906118ba565b6001600160a01b031660009081526008602052604090205490565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b03163314610c095760405162461bcd60e51b81526004016105a29190611523565b50600480546001600160a01b0319166001600160a01b0392909216919091179055565b600f60205260009081526040902080546104e4906118ba565b600a80546104e4906118ba565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b03163314610c9b5760405162461bcd60e51b81526004016105a29190611523565b50600d80549115156101000261ff0019909216919091179055565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b03163314610cff5760405162461bcd60e51b81526004016105a29190611523565b5060066109da82826119b3565b600b80546104e4906118ba565b600280546104e4906118ba565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b03163314610d6f5760405162461bcd60e51b81526004016105a29190611523565b50600d805460ff1916911515919091179055565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b03163314610dcc5760405162461bcd60e51b81526004016105a29190611523565b5060ff82166000908152600e60205260409020610de982826119b3565b505050565b600081610dfa33610ba5565b1015610e3457604080518082018252600681526531343031303160d01b6020820152905162461bcd60e51b81526105a29190600401611523565b6004546001600160a01b03163314610e8e57600d54604080518082019091526006815265189a1818981960d11b60208201529060ff161515600114610e8c5760405162461bcd60e51b81526004016105a29190611523565b505b6060833b15610eaa57610ea2848483611302565b915050610eb5565b610ea284848361142f565b92915050565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b03163314610f045760405162461bcd60e51b81526004016105a29190611523565b5060056109da82826119b3565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b03163314610f5a5760405162461bcd60e51b81526004016105a29190611523565b50600a6109da82826119b3565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b03163314610fb05760405162461bcd60e51b81526004016105a29190611523565b50600b6109da82826119b3565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b031633146110065760405162461bcd60e51b81526004016105a29190611523565b5060035461101490826114d1565b60035560005461103290829061085c906001600160a01b0316610ba5565b600080546001600160a01b031681526008602052604090205550565b6000805460408051808201909152600681526535303030303160d01b6020820152906001600160a01b031633146110985760405162461bcd60e51b81526004016105a29190611523565b5085841415806110a85750858214155b156110e157604080518082018252600681526531343035303160d01b6020820152905162461bcd60e51b81526105a29190600401611523565b60005b868110156111645761115b888883818110611101576111016118f4565b90506020020160208101906111169190611726565b878784818110611128576111286118f4565b905060200201602081019061113d9190611726565b86868581811061114f5761114f6118f4565b9050602002013561078b565b506001016110e4565b506001979650505050505050565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b031633146111bb5760405162461bcd60e51b81526004016105a29190611523565b5060408051808201909152600681526535303031303160d01b60208201526001600160a01b0382166112005760405162461bcd60e51b81526004016105a29190611523565b50600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60ff81166000908152600e6020526040902080546060919061127d906118ba565b80601f01602080910402602001604051908101604052809291908181526020018280546112a9906118ba565b80156112f65780601f106112cb576101008083540402835291602001916112f6565b820191906000526020600020905b8154815290600101906020018083116112d957829003601f168201915b50505050509050919050565b60045460408051808201909152600681526531343030303160d01b60208201526000916001600160a01b038681169116146113505760405162461bcd60e51b81526004016105a29190611523565b5061135e8361083033610ba5565b3360009081526008602052604090205561137b8361085c86610ba5565b6001600160a01b0385166000818152600860205260409081902092909255905163607705c560e11b815285919063c0ee0b8a906113c090339088908890600401611933565b600060405180830381600087803b1580156113da57600080fd5b505af11580156113ee573d6000803e3d6000fd5b50506040518681526001600160a01b03881692503391507fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610971565b600061143e8361083033610ba5565b3360009081526008602052604090205561145b8361085c86610ba5565b6001600160a01b0385166000818152600860205260409081902092909255905133907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906114ac9087815260200190565b60405180910390a35060019392505050565b60006114ca8284611a73565b9392505050565b60006114ca8284611920565b6000815180845260005b81811015611503576020818501810151868301820152016114e7565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006114ca60208301846114dd565b60008083601f84011261154857600080fd5b50813567ffffffffffffffff81111561156057600080fd5b6020830191508360208260051b850101111561157b57600080fd5b9250929050565b6000806000806040858703121561159857600080fd5b843567ffffffffffffffff808211156115b057600080fd5b6115bc88838901611536565b909650945060208701359150808211156115d557600080fd5b506115e287828801611536565b95989497509550505050565b80356001600160a01b038116811461160557600080fd5b919050565b60008060006060848603121561161f57600080fd5b611628846115ee565b9250611636602085016115ee565b9150604084013590509250925092565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261166d57600080fd5b813567ffffffffffffffff8082111561168857611688611646565b604051601f8301601f19908116603f011681019082821181831017156116b0576116b0611646565b816040528381528660208588010111156116c957600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000602082840312156116fb57600080fd5b813567ffffffffffffffff81111561171257600080fd5b61171e8482850161165c565b949350505050565b60006020828403121561173857600080fd5b6114ca826115ee565b60006020828403121561175357600080fd5b813580151581146114ca57600080fd5b803560ff8116811461160557600080fd5b60006020828403121561178657600080fd5b6114ca82611763565b600080604083850312156117a257600080fd5b6117ab83611763565b9150602083013567ffffffffffffffff8111156117c757600080fd5b6117d38582860161165c565b9150509250929050565b600080604083850312156117f057600080fd5b6117f9836115ee565b946020939093013593505050565b60006020828403121561181957600080fd5b5035919050565b6000806000806000806060878903121561183957600080fd5b863567ffffffffffffffff8082111561185157600080fd5b61185d8a838b01611536565b9098509650602089013591508082111561187657600080fd5b6118828a838b01611536565b9096509450604089013591508082111561189b57600080fd5b506118a889828a01611536565b979a9699509497509295939492505050565b600181811c908216806118ce57607f821691505b6020821081036118ee57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b80820180821115610eb557610eb561190a565b60018060a01b038416815282602082015260606040820152600061195a60608301846114dd565b95945050505050565b601f821115610de9576000816000526020600020601f850160051c8101602086101561198c5750805b601f850160051c820191505b818110156119ab57828155600101611998565b505050505050565b815167ffffffffffffffff8111156119cd576119cd611646565b6119e1816119db84546118ba565b84611963565b602080601f831160018114611a1657600084156119fe5750858301515b600019600386901b1c1916600185901b1785556119ab565b600085815260208120601f198616915b82811015611a4557888601518255948401946001909101908401611a26565b5085821015611a635787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b81810381811115610eb557610eb561190a56fea2646970667358221220d7349f136d92706b528344007a56fa0c79d7242eefe13656a64a3f8680b1124c64736f6c63430008170033" } \ No newline at end of file diff --git a/contracts/IbetSecurityTokenDVP.json b/contracts/IbetSecurityTokenDVP.json index 5f835cbf..f95771cf 100644 --- a/contracts/IbetSecurityTokenDVP.json +++ b/contracts/IbetSecurityTokenDVP.json @@ -646,6 +646,6 @@ "type": "function" } ], - "bytecode": "60806040523480156200001157600080fd5b506040516200257f3803806200257f833981016040819052620000349162000068565b60008054336001600160a01b031991821617909155600180549091166001600160a01b03929092169190911790556200009a565b6000602082840312156200007b57600080fd5b81516001600160a01b03811681146200009357600080fd5b9392505050565b6124d580620000aa6000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c8063b62549af11610097578063de8211a911610066578063de8211a9146101fd578063f2fde38b1461025b578063f7888aec1461026e578063fd84cb971461028157600080fd5b8063b62549af146101af578063c0a36f8a146101c2578063c0ee0b8a146101d5578063da5f7c45146101ea57600080fd5b806385aa92a7116100d357806385aa92a71461014b5780638da5cb5b14610176578063a2ee704314610189578063b4d904761461019c57600080fd5b806309326794146100fa57806351cff8d9146101155780636a4c76f814610138575b600080fd5b610102610294565b6040519081526020015b60405180910390f35b610128610123366004611fcc565b610307565b604051901515815260200161010c565b610128610146366004611ff0565b61048b565b60015461015e906001600160a01b031681565b6040516001600160a01b03909116815260200161010c565b60005461015e906001600160a01b031681565b610102610197366004612009565b610a9a565b6101286101aa366004611ff0565b610b1b565b6101286101bd366004611ff0565b610f94565b6101026101d03660046120ce565b6113e0565b6101e86101e3366004612161565b611854565b005b6101286101f83660046121ce565b611912565b61021061020b366004611ff0565b611950565b604080516001600160a01b0398891681529688166020880152948716948601949094526060850192909252909316608083015291151560a082015290151560c082015260e00161010c565b6101e8610269366004611fcc565b6119e1565b61010261027c366004612009565b611acb565b61012861028f366004611ff0565b611b06565b600154604080516399933b3360e01b815290516000926001600160a01b0316916399933b339160048083019260209291908290030181865afa1580156102de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103029190612243565b905090565b6000806103143384611acb565b9050600081116040518060400160405280600681526020016532363035303160d01b815250906103605760405162461bcd60e51b815260040161035791906122a2565b60405180910390fd5b5060405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0384169063a9059cbb906044016020604051808303816000875af11580156103ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103d291906122ca565b50600154604051635ae4e5df60e11b81526001600160a01b039091169063b5c9cbbe9061040890339087906000906004016122e5565b6020604051808303816000875af1158015610427573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061044b91906122ca565b5060405133906001600160a01b038516907f85b9d5ac4b95740dafd1b47130d38b5f34a9104dd14b1c88a2fb5a44c3a00ce790600090a350600192915050565b600154604080516399933b3360e01b815290516000926001600160a01b0316916399933b339160048083019260209291908290030181865afa1580156104d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104f99190612243565b8211156040518060400160405280600681526020016532363033303160d01b815250906105395760405162461bcd60e51b815260040161035791906122a2565b50610542611f78565b60015460405163de8211a960e01b8152600481018590526001600160a01b039091169063de8211a99060240160e060405180830381865afa15801561058b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105af9190612309565b151560c0880181905290151560a08801526001600160a01b039182166080880152606087019290925291821660408087019190915292821660208087019190915293909116845281518083019092526006825265191b1819981960d11b92820192909252906001146106345760405162461bcd60e51b815260040161035791906122a2565b5060a081015160408051808201909152600681526532363033303360d01b602082015290151560011461067a5760405162461bcd60e51b815260040161035791906122a2565b5060808101516040805180820190915260068152650c8d8c0ccc0d60d21b6020820152906001600160a01b031633146106c65760405162461bcd60e51b815260040161035791906122a2565b5080600001516001600160a01b031663200d2ed26040518163ffffffff1660e01b8152600401602060405180830381865afa158015610709573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061072d91906122ca565b60408051808201909152600681526532363033303560d01b602082015290151560011461076d5760405162461bcd60e51b815260040161035791906122a2565b5080600001516001600160a01b0316636f3b993f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107d491906122ca565b604080518082019091526006815265191b1819981b60d11b602082015290156108105760405162461bcd60e51b815260040161035791906122a2565b506001546040820151825160608401516001600160a01b039093169263b5c9cbbe929190610848906108428484611acb565b90611f60565b6040518463ffffffff1660e01b8152600401610866939291906122e5565b6020604051808303816000875af1158015610885573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108a991906122ca565b506001546020820151825160608401516001600160a01b039093169263d04c23af9291906108e1906108db8484610a9a565b90611f6c565b6040518463ffffffff1660e01b81526004016108ff939291906122e5565b6020604051808303816000875af115801561091e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061094291906122ca565b50600154815160208301516040808501516060860151608087015160a0880151935163ecf8959760e01b81526001600160a01b039097169663ecf895979661099c968c969195909490939092909190600090600401612393565b600060405180830381600087803b1580156109b657600080fd5b505af11580156109ca573d6000803e3d6000fd5b5050505080600001516001600160a01b0316837fae13fd5bb7db89e0f8059ff395d808a71fc16b9ea25a1e8be803f1419575902e8360200151846040015185606001518660800151604051610a2294939291906123dc565b60405180910390a380604001516001600160a01b031681602001516001600160a01b031682600001516001600160a01b03167f2458504403156ef04185b3cb0aab362f0421374a9fccb513fcf87c416324d40e8460600151604051610a8991815260200190565b60405180910390a450600192915050565b6001546040516304bec80960e11b81526001600160a01b0384811660048301528381166024830152600092169063097d9012906044015b602060405180830381865afa158015610aee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b129190612243565b90505b92915050565b600154604080516399933b3360e01b815290516000926001600160a01b0316916399933b339160048083019260209291908290030181865afa158015610b65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b899190612243565b8211156040518060400160405280600681526020016532363031303160d01b81525090610bc95760405162461bcd60e51b815260040161035791906122a2565b50610bd2611f78565b60015460405163de8211a960e01b8152600481018590526001600160a01b039091169063de8211a99060240160e060405180830381865afa158015610c1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c3f9190612309565b151560c0880181905290151560a08801526001600160a01b039182166080880152606087019290925291821660408087019190915292821660208087019190915293909116845281518083019092526006825265191b1818981960d11b9282019290925290600114610cc45760405162461bcd60e51b815260040161035791906122a2565b5060a081015160408051808201909152600681526532363031303360d01b60208201529015610d065760405162461bcd60e51b815260040161035791906122a2565b5080602001516001600160a01b0316336001600160a01b03161480610d40575080604001516001600160a01b0316336001600160a01b0316145b604051806040016040528060068152602001650c8d8c0c4c0d60d21b81525090610d7d5760405162461bcd60e51b815260040161035791906122a2565b506001546020820151825160608401516001600160a01b039093169263b5c9cbbe929190610daf906108428484611acb565b6040518463ffffffff1660e01b8152600401610dcd939291906122e5565b6020604051808303816000875af1158015610dec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e1091906122ca565b506001546020820151825160608401516001600160a01b039093169263d04c23af929190610e42906108db8484610a9a565b6040518463ffffffff1660e01b8152600401610e60939291906122e5565b6020604051808303816000875af1158015610e7f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ea391906122ca565b50600154815160208301516040808501516060860151608087015160a0880151935163ecf8959760e01b81526001600160a01b039097169663ecf8959796610efd968c969195909490939092909190600090600401612393565b600060405180830381600087803b158015610f1757600080fd5b505af1158015610f2b573d6000803e3d6000fd5b5050505080600001516001600160a01b0316837f83f6050bab67e325a246d7c944af50a51620253dcae7243de09efa23b2fb52238360200151846040015185606001518660800151604051610f8394939291906123dc565b60405180910390a350600192915050565b600154604080516399933b3360e01b815290516000926001600160a01b0316916399933b339160048083019260209291908290030181865afa158015610fde573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110029190612243565b8211156040518060400160405280600681526020016532363034303160d01b815250906110425760405162461bcd60e51b815260040161035791906122a2565b5061104b611f78565b60015460405163de8211a960e01b8152600481018590526001600160a01b039091169063de8211a99060240160e060405180830381865afa158015611094573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110b89190612309565b151560c0880181905290151560a08801526001600160a01b039182166080880152606087019290925291821660408087019190915292821660208087019190915293909116845281518083019092526006825265191b181a181960d11b928201929092529060011461113d5760405162461bcd60e51b815260040161035791906122a2565b5060a081015160408051808201909152600681526532363034303360d01b60208201529015156001146111835760405162461bcd60e51b815260040161035791906122a2565b5080608001516001600160a01b0316336001600160a01b031614604051806040016040528060068152602001650c8d8c0d0c0d60d21b815250906111da5760405162461bcd60e51b815260040161035791906122a2565b506001546020820151825160608401516001600160a01b039093169263b5c9cbbe92919061120c906108428484611acb565b6040518463ffffffff1660e01b815260040161122a939291906122e5565b6020604051808303816000875af1158015611249573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061126d91906122ca565b506001546020820151825160608401516001600160a01b039093169263d04c23af92919061129f906108db8484610a9a565b6040518463ffffffff1660e01b81526004016112bd939291906122e5565b6020604051808303816000875af11580156112dc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061130091906122ca565b50600154815160208301516040808501516060860151608087015160a0880151935163ecf8959760e01b81526001600160a01b039097169663ecf895979661135a968c969195909490939092909190600090600401612393565b600060405180830381600087803b15801561137457600080fd5b505af1158015611388573d6000803e3d6000fd5b5050505080600001516001600160a01b0316837f37c971bd668c8d1b347a40a1db0d7338d910adcf4d93dc7f8a95b468ddda58828360200151846040015185606001518660800151604051610f8394939291906123dc565b60008084116040518060400160405280600681526020016532363030303160d01b815250906114225760405162461bcd60e51b815260040161035791906122a2565b508361142e3388611acb565b101560405180604001604052806006815260200165191b1818181960d11b8152509061146d5760405162461bcd60e51b815260040161035791906122a2565b50856001600160a01b031663200d2ed26040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114d091906122ca565b60408051808201909152600681526532363030303360d01b60208201529015156001146115105760405162461bcd60e51b815260040161035791906122a2565b50856001600160a01b0316636f3b993f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561154f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061157391906122ca565b6040805180820190915260068152650c8d8c0c0c0d60d21b602082015290156115af5760405162461bcd60e51b815260040161035791906122a2565b50600154604080516399933b3360e01b815290516000926001600160a01b0316916399933b339160048083019260209291908290030181865afa1580156115fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061161e9190612243565b61162990600161241d565b600154604051637ea25c9760e11b8152600481018390529192506001600160a01b03169063fd44b92e90602401600060405180830381600087803b15801561167057600080fd5b505af1158015611684573d6000803e3d6000fd5b50506001805460405163ecf8959760e01b81526001600160a01b03909116935063ecf8959792506116c69185918c9133918d918d918d91600091600401612393565b600060405180830381600087803b1580156116e057600080fd5b505af11580156116f4573d6000803e3d6000fd5b50506001546001600160a01b0316915063b5c9cbbe9050338961171b896108db8484611acb565b6040518463ffffffff1660e01b8152600401611739939291906122e5565b6020604051808303816000875af1158015611758573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061177c91906122ca565b506001546001600160a01b031663d04c23af338961179e896108428484610a9a565b6040518463ffffffff1660e01b81526004016117bc939291906122e5565b6020604051808303816000875af11580156117db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117ff91906122ca565b50866001600160a01b0316817f4a2cf5c0983fc0948d3f0751b04bdf091d03d7a1a5d757d1c93b5a8f2f295f413389898989604051611842959493929190612430565b60405180910390a39695505050505050565b6001546001600160a01b031663b5c9cbbe8433611875866108428484611acb565b6040518463ffffffff1660e01b8152600401611893939291906122e5565b6020604051808303816000875af11580156118b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118d691906122ca565b506040516001600160a01b0384169033907f76dacbd9b11b7bbe3372e54b4adc1eeb5724ff92f91142a1a45722c28582ebfd90600090a3505050565b6000805b828110156119495761193f84848381811061193357611933612476565b9050602002013561048b565b9150600101611916565b5092915050565b60015460405163de8211a960e01b8152600481018390526000918291829182918291829182916001600160a01b03169063de8211a99060240160e060405180830381865afa1580156119a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119ca9190612309565b959e949d50929b5090995097509550909350915050565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b03163314611a2a5760405162461bcd60e51b815260040161035791906122a2565b5060408051808201909152600681526535303031303160d01b60208201526001600160a01b038216611a6f5760405162461bcd60e51b815260040161035791906122a2565b50600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60015460405163d4fac45d60e01b81526001600160a01b0384811660048301528381166024830152600092169063d4fac45d90604401610ad1565b600154604080516399933b3360e01b815290516000926001600160a01b0316916399933b339160048083019260209291908290030181865afa158015611b50573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b749190612243565b8211156040518060400160405280600681526020016532363032303160d01b81525090611bb45760405162461bcd60e51b815260040161035791906122a2565b50611bbd611f78565b60015460405163de8211a960e01b8152600481018590526001600160a01b039091169063de8211a99060240160e060405180830381865afa158015611c06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c2a9190612309565b151560c0880181905290151560a08801526001600160a01b039182166080880152606087019290925291821660408087019190915292821660208087019190915293909116845281518083019092526006825265191b1819181960d11b9282019290925290600114611caf5760405162461bcd60e51b815260040161035791906122a2565b5060a081015160408051808201909152600681526532363032303360d01b60208201529015611cf15760405162461bcd60e51b815260040161035791906122a2565b50604081810151815180830190925260068252650c8d8c0c8c0d60d21b60208301526001600160a01b03163314611d3b5760405162461bcd60e51b815260040161035791906122a2565b5080600001516001600160a01b031663200d2ed26040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d7e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611da291906122ca565b60408051808201909152600681526532363032303560d01b6020820152901515600114611de25760405162461bcd60e51b815260040161035791906122a2565b5080600001516001600160a01b0316636f3b993f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e4991906122ca565b604080518082019091526006815265191b1819181b60d11b60208201529015611e855760405162461bcd60e51b815260040161035791906122a2565b5060018054825160208401516040808601516060870151608088015160c0890151935163ecf8959760e01b81526001600160a01b039097169763ecf8959797611eda978d979096909594939291600401612393565b600060405180830381600087803b158015611ef457600080fd5b505af1158015611f08573d6000803e3d6000fd5b5050505080600001516001600160a01b0316837ffa1e4d4f57c605169fce32ba32e2fd705e590b8337ad5a79c677440230e4482d8360200151846040015185606001518660800151604051610f8394939291906123dc565b6000610b12828461241d565b6000610b12828461248c565b6040805160e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c081019190915290565b6001600160a01b0381168114611fc957600080fd5b50565b600060208284031215611fde57600080fd5b8135611fe981611fb4565b9392505050565b60006020828403121561200257600080fd5b5035919050565b6000806040838503121561201c57600080fd5b823561202781611fb4565b9150602083013561203781611fb4565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff8084111561207357612073612042565b604051601f8501601f19908116603f0116810190828211818310171561209b5761209b612042565b816040528093508581528686860111156120b457600080fd5b858560208301376000602087830101525050509392505050565b600080600080600060a086880312156120e657600080fd5b85356120f181611fb4565b9450602086013561210181611fb4565b935060408601359250606086013561211881611fb4565b9150608086013567ffffffffffffffff81111561213457600080fd5b8601601f8101881361214557600080fd5b61215488823560208401612058565b9150509295509295909350565b60008060006060848603121561217657600080fd5b833561218181611fb4565b925060208401359150604084013567ffffffffffffffff8111156121a457600080fd5b8401601f810186136121b557600080fd5b6121c486823560208401612058565b9150509250925092565b600080602083850312156121e157600080fd5b823567ffffffffffffffff808211156121f957600080fd5b818501915085601f83011261220d57600080fd5b81358181111561221c57600080fd5b8660208260051b850101111561223157600080fd5b60209290920196919550909350505050565b60006020828403121561225557600080fd5b5051919050565b6000815180845260005b8181101561228257602081850181015186830182015201612266565b506000602082860101526020601f19601f83011685010191505092915050565b602081526000610b12602083018461225c565b805180151581146122c557600080fd5b919050565b6000602082840312156122dc57600080fd5b610b12826122b5565b6001600160a01b039384168152919092166020820152604081019190915260600190565b600080600080600080600060e0888a03121561232457600080fd5b875161232f81611fb4565b602089015190975061234081611fb4565b604089015190965061235181611fb4565b606089015160808a0151919650945061236981611fb4565b925061237760a089016122b5565b915061238560c089016122b5565b905092959891949750929550565b9788526001600160a01b03968716602089015294861660408801529285166060870152608086019190915290921660a084015290151560c0830152151560e08201526101000190565b6001600160a01b03948516815292841660208401526040830191909152909116606082015260800190565b634e487b7160e01b600052601160045260246000fd5b80820180821115610b1557610b15612407565b6001600160a01b0386811682528581166020830152604082018590528316606082015260a06080820181905260009061246b9083018461225c565b979650505050505050565b634e487b7160e01b600052603260045260246000fd5b81810381811115610b1557610b1561240756fea264697066735822122057d989c84f5a6d77f74e97300e91e6e78cca2d3270dca8553354c5bf221ba45064736f6c63430008170033", - "deployedBytecode": "608060405234801561001057600080fd5b50600436106100f55760003560e01c8063b62549af11610097578063de8211a911610066578063de8211a9146101fd578063f2fde38b1461025b578063f7888aec1461026e578063fd84cb971461028157600080fd5b8063b62549af146101af578063c0a36f8a146101c2578063c0ee0b8a146101d5578063da5f7c45146101ea57600080fd5b806385aa92a7116100d357806385aa92a71461014b5780638da5cb5b14610176578063a2ee704314610189578063b4d904761461019c57600080fd5b806309326794146100fa57806351cff8d9146101155780636a4c76f814610138575b600080fd5b610102610294565b6040519081526020015b60405180910390f35b610128610123366004611fcc565b610307565b604051901515815260200161010c565b610128610146366004611ff0565b61048b565b60015461015e906001600160a01b031681565b6040516001600160a01b03909116815260200161010c565b60005461015e906001600160a01b031681565b610102610197366004612009565b610a9a565b6101286101aa366004611ff0565b610b1b565b6101286101bd366004611ff0565b610f94565b6101026101d03660046120ce565b6113e0565b6101e86101e3366004612161565b611854565b005b6101286101f83660046121ce565b611912565b61021061020b366004611ff0565b611950565b604080516001600160a01b0398891681529688166020880152948716948601949094526060850192909252909316608083015291151560a082015290151560c082015260e00161010c565b6101e8610269366004611fcc565b6119e1565b61010261027c366004612009565b611acb565b61012861028f366004611ff0565b611b06565b600154604080516399933b3360e01b815290516000926001600160a01b0316916399933b339160048083019260209291908290030181865afa1580156102de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103029190612243565b905090565b6000806103143384611acb565b9050600081116040518060400160405280600681526020016532363035303160d01b815250906103605760405162461bcd60e51b815260040161035791906122a2565b60405180910390fd5b5060405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0384169063a9059cbb906044016020604051808303816000875af11580156103ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103d291906122ca565b50600154604051635ae4e5df60e11b81526001600160a01b039091169063b5c9cbbe9061040890339087906000906004016122e5565b6020604051808303816000875af1158015610427573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061044b91906122ca565b5060405133906001600160a01b038516907f85b9d5ac4b95740dafd1b47130d38b5f34a9104dd14b1c88a2fb5a44c3a00ce790600090a350600192915050565b600154604080516399933b3360e01b815290516000926001600160a01b0316916399933b339160048083019260209291908290030181865afa1580156104d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104f99190612243565b8211156040518060400160405280600681526020016532363033303160d01b815250906105395760405162461bcd60e51b815260040161035791906122a2565b50610542611f78565b60015460405163de8211a960e01b8152600481018590526001600160a01b039091169063de8211a99060240160e060405180830381865afa15801561058b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105af9190612309565b151560c0880181905290151560a08801526001600160a01b039182166080880152606087019290925291821660408087019190915292821660208087019190915293909116845281518083019092526006825265191b1819981960d11b92820192909252906001146106345760405162461bcd60e51b815260040161035791906122a2565b5060a081015160408051808201909152600681526532363033303360d01b602082015290151560011461067a5760405162461bcd60e51b815260040161035791906122a2565b5060808101516040805180820190915260068152650c8d8c0ccc0d60d21b6020820152906001600160a01b031633146106c65760405162461bcd60e51b815260040161035791906122a2565b5080600001516001600160a01b031663200d2ed26040518163ffffffff1660e01b8152600401602060405180830381865afa158015610709573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061072d91906122ca565b60408051808201909152600681526532363033303560d01b602082015290151560011461076d5760405162461bcd60e51b815260040161035791906122a2565b5080600001516001600160a01b0316636f3b993f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107d491906122ca565b604080518082019091526006815265191b1819981b60d11b602082015290156108105760405162461bcd60e51b815260040161035791906122a2565b506001546040820151825160608401516001600160a01b039093169263b5c9cbbe929190610848906108428484611acb565b90611f60565b6040518463ffffffff1660e01b8152600401610866939291906122e5565b6020604051808303816000875af1158015610885573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108a991906122ca565b506001546020820151825160608401516001600160a01b039093169263d04c23af9291906108e1906108db8484610a9a565b90611f6c565b6040518463ffffffff1660e01b81526004016108ff939291906122e5565b6020604051808303816000875af115801561091e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061094291906122ca565b50600154815160208301516040808501516060860151608087015160a0880151935163ecf8959760e01b81526001600160a01b039097169663ecf895979661099c968c969195909490939092909190600090600401612393565b600060405180830381600087803b1580156109b657600080fd5b505af11580156109ca573d6000803e3d6000fd5b5050505080600001516001600160a01b0316837fae13fd5bb7db89e0f8059ff395d808a71fc16b9ea25a1e8be803f1419575902e8360200151846040015185606001518660800151604051610a2294939291906123dc565b60405180910390a380604001516001600160a01b031681602001516001600160a01b031682600001516001600160a01b03167f2458504403156ef04185b3cb0aab362f0421374a9fccb513fcf87c416324d40e8460600151604051610a8991815260200190565b60405180910390a450600192915050565b6001546040516304bec80960e11b81526001600160a01b0384811660048301528381166024830152600092169063097d9012906044015b602060405180830381865afa158015610aee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b129190612243565b90505b92915050565b600154604080516399933b3360e01b815290516000926001600160a01b0316916399933b339160048083019260209291908290030181865afa158015610b65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b899190612243565b8211156040518060400160405280600681526020016532363031303160d01b81525090610bc95760405162461bcd60e51b815260040161035791906122a2565b50610bd2611f78565b60015460405163de8211a960e01b8152600481018590526001600160a01b039091169063de8211a99060240160e060405180830381865afa158015610c1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c3f9190612309565b151560c0880181905290151560a08801526001600160a01b039182166080880152606087019290925291821660408087019190915292821660208087019190915293909116845281518083019092526006825265191b1818981960d11b9282019290925290600114610cc45760405162461bcd60e51b815260040161035791906122a2565b5060a081015160408051808201909152600681526532363031303360d01b60208201529015610d065760405162461bcd60e51b815260040161035791906122a2565b5080602001516001600160a01b0316336001600160a01b03161480610d40575080604001516001600160a01b0316336001600160a01b0316145b604051806040016040528060068152602001650c8d8c0c4c0d60d21b81525090610d7d5760405162461bcd60e51b815260040161035791906122a2565b506001546020820151825160608401516001600160a01b039093169263b5c9cbbe929190610daf906108428484611acb565b6040518463ffffffff1660e01b8152600401610dcd939291906122e5565b6020604051808303816000875af1158015610dec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e1091906122ca565b506001546020820151825160608401516001600160a01b039093169263d04c23af929190610e42906108db8484610a9a565b6040518463ffffffff1660e01b8152600401610e60939291906122e5565b6020604051808303816000875af1158015610e7f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ea391906122ca565b50600154815160208301516040808501516060860151608087015160a0880151935163ecf8959760e01b81526001600160a01b039097169663ecf8959796610efd968c969195909490939092909190600090600401612393565b600060405180830381600087803b158015610f1757600080fd5b505af1158015610f2b573d6000803e3d6000fd5b5050505080600001516001600160a01b0316837f83f6050bab67e325a246d7c944af50a51620253dcae7243de09efa23b2fb52238360200151846040015185606001518660800151604051610f8394939291906123dc565b60405180910390a350600192915050565b600154604080516399933b3360e01b815290516000926001600160a01b0316916399933b339160048083019260209291908290030181865afa158015610fde573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110029190612243565b8211156040518060400160405280600681526020016532363034303160d01b815250906110425760405162461bcd60e51b815260040161035791906122a2565b5061104b611f78565b60015460405163de8211a960e01b8152600481018590526001600160a01b039091169063de8211a99060240160e060405180830381865afa158015611094573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110b89190612309565b151560c0880181905290151560a08801526001600160a01b039182166080880152606087019290925291821660408087019190915292821660208087019190915293909116845281518083019092526006825265191b181a181960d11b928201929092529060011461113d5760405162461bcd60e51b815260040161035791906122a2565b5060a081015160408051808201909152600681526532363034303360d01b60208201529015156001146111835760405162461bcd60e51b815260040161035791906122a2565b5080608001516001600160a01b0316336001600160a01b031614604051806040016040528060068152602001650c8d8c0d0c0d60d21b815250906111da5760405162461bcd60e51b815260040161035791906122a2565b506001546020820151825160608401516001600160a01b039093169263b5c9cbbe92919061120c906108428484611acb565b6040518463ffffffff1660e01b815260040161122a939291906122e5565b6020604051808303816000875af1158015611249573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061126d91906122ca565b506001546020820151825160608401516001600160a01b039093169263d04c23af92919061129f906108db8484610a9a565b6040518463ffffffff1660e01b81526004016112bd939291906122e5565b6020604051808303816000875af11580156112dc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061130091906122ca565b50600154815160208301516040808501516060860151608087015160a0880151935163ecf8959760e01b81526001600160a01b039097169663ecf895979661135a968c969195909490939092909190600090600401612393565b600060405180830381600087803b15801561137457600080fd5b505af1158015611388573d6000803e3d6000fd5b5050505080600001516001600160a01b0316837f37c971bd668c8d1b347a40a1db0d7338d910adcf4d93dc7f8a95b468ddda58828360200151846040015185606001518660800151604051610f8394939291906123dc565b60008084116040518060400160405280600681526020016532363030303160d01b815250906114225760405162461bcd60e51b815260040161035791906122a2565b508361142e3388611acb565b101560405180604001604052806006815260200165191b1818181960d11b8152509061146d5760405162461bcd60e51b815260040161035791906122a2565b50856001600160a01b031663200d2ed26040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114d091906122ca565b60408051808201909152600681526532363030303360d01b60208201529015156001146115105760405162461bcd60e51b815260040161035791906122a2565b50856001600160a01b0316636f3b993f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561154f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061157391906122ca565b6040805180820190915260068152650c8d8c0c0c0d60d21b602082015290156115af5760405162461bcd60e51b815260040161035791906122a2565b50600154604080516399933b3360e01b815290516000926001600160a01b0316916399933b339160048083019260209291908290030181865afa1580156115fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061161e9190612243565b61162990600161241d565b600154604051637ea25c9760e11b8152600481018390529192506001600160a01b03169063fd44b92e90602401600060405180830381600087803b15801561167057600080fd5b505af1158015611684573d6000803e3d6000fd5b50506001805460405163ecf8959760e01b81526001600160a01b03909116935063ecf8959792506116c69185918c9133918d918d918d91600091600401612393565b600060405180830381600087803b1580156116e057600080fd5b505af11580156116f4573d6000803e3d6000fd5b50506001546001600160a01b0316915063b5c9cbbe9050338961171b896108db8484611acb565b6040518463ffffffff1660e01b8152600401611739939291906122e5565b6020604051808303816000875af1158015611758573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061177c91906122ca565b506001546001600160a01b031663d04c23af338961179e896108428484610a9a565b6040518463ffffffff1660e01b81526004016117bc939291906122e5565b6020604051808303816000875af11580156117db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117ff91906122ca565b50866001600160a01b0316817f4a2cf5c0983fc0948d3f0751b04bdf091d03d7a1a5d757d1c93b5a8f2f295f413389898989604051611842959493929190612430565b60405180910390a39695505050505050565b6001546001600160a01b031663b5c9cbbe8433611875866108428484611acb565b6040518463ffffffff1660e01b8152600401611893939291906122e5565b6020604051808303816000875af11580156118b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118d691906122ca565b506040516001600160a01b0384169033907f76dacbd9b11b7bbe3372e54b4adc1eeb5724ff92f91142a1a45722c28582ebfd90600090a3505050565b6000805b828110156119495761193f84848381811061193357611933612476565b9050602002013561048b565b9150600101611916565b5092915050565b60015460405163de8211a960e01b8152600481018390526000918291829182918291829182916001600160a01b03169063de8211a99060240160e060405180830381865afa1580156119a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119ca9190612309565b959e949d50929b5090995097509550909350915050565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b03163314611a2a5760405162461bcd60e51b815260040161035791906122a2565b5060408051808201909152600681526535303031303160d01b60208201526001600160a01b038216611a6f5760405162461bcd60e51b815260040161035791906122a2565b50600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60015460405163d4fac45d60e01b81526001600160a01b0384811660048301528381166024830152600092169063d4fac45d90604401610ad1565b600154604080516399933b3360e01b815290516000926001600160a01b0316916399933b339160048083019260209291908290030181865afa158015611b50573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b749190612243565b8211156040518060400160405280600681526020016532363032303160d01b81525090611bb45760405162461bcd60e51b815260040161035791906122a2565b50611bbd611f78565b60015460405163de8211a960e01b8152600481018590526001600160a01b039091169063de8211a99060240160e060405180830381865afa158015611c06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c2a9190612309565b151560c0880181905290151560a08801526001600160a01b039182166080880152606087019290925291821660408087019190915292821660208087019190915293909116845281518083019092526006825265191b1819181960d11b9282019290925290600114611caf5760405162461bcd60e51b815260040161035791906122a2565b5060a081015160408051808201909152600681526532363032303360d01b60208201529015611cf15760405162461bcd60e51b815260040161035791906122a2565b50604081810151815180830190925260068252650c8d8c0c8c0d60d21b60208301526001600160a01b03163314611d3b5760405162461bcd60e51b815260040161035791906122a2565b5080600001516001600160a01b031663200d2ed26040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d7e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611da291906122ca565b60408051808201909152600681526532363032303560d01b6020820152901515600114611de25760405162461bcd60e51b815260040161035791906122a2565b5080600001516001600160a01b0316636f3b993f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e4991906122ca565b604080518082019091526006815265191b1819181b60d11b60208201529015611e855760405162461bcd60e51b815260040161035791906122a2565b5060018054825160208401516040808601516060870151608088015160c0890151935163ecf8959760e01b81526001600160a01b039097169763ecf8959797611eda978d979096909594939291600401612393565b600060405180830381600087803b158015611ef457600080fd5b505af1158015611f08573d6000803e3d6000fd5b5050505080600001516001600160a01b0316837ffa1e4d4f57c605169fce32ba32e2fd705e590b8337ad5a79c677440230e4482d8360200151846040015185606001518660800151604051610f8394939291906123dc565b6000610b12828461241d565b6000610b12828461248c565b6040805160e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c081019190915290565b6001600160a01b0381168114611fc957600080fd5b50565b600060208284031215611fde57600080fd5b8135611fe981611fb4565b9392505050565b60006020828403121561200257600080fd5b5035919050565b6000806040838503121561201c57600080fd5b823561202781611fb4565b9150602083013561203781611fb4565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff8084111561207357612073612042565b604051601f8501601f19908116603f0116810190828211818310171561209b5761209b612042565b816040528093508581528686860111156120b457600080fd5b858560208301376000602087830101525050509392505050565b600080600080600060a086880312156120e657600080fd5b85356120f181611fb4565b9450602086013561210181611fb4565b935060408601359250606086013561211881611fb4565b9150608086013567ffffffffffffffff81111561213457600080fd5b8601601f8101881361214557600080fd5b61215488823560208401612058565b9150509295509295909350565b60008060006060848603121561217657600080fd5b833561218181611fb4565b925060208401359150604084013567ffffffffffffffff8111156121a457600080fd5b8401601f810186136121b557600080fd5b6121c486823560208401612058565b9150509250925092565b600080602083850312156121e157600080fd5b823567ffffffffffffffff808211156121f957600080fd5b818501915085601f83011261220d57600080fd5b81358181111561221c57600080fd5b8660208260051b850101111561223157600080fd5b60209290920196919550909350505050565b60006020828403121561225557600080fd5b5051919050565b6000815180845260005b8181101561228257602081850181015186830182015201612266565b506000602082860101526020601f19601f83011685010191505092915050565b602081526000610b12602083018461225c565b805180151581146122c557600080fd5b919050565b6000602082840312156122dc57600080fd5b610b12826122b5565b6001600160a01b039384168152919092166020820152604081019190915260600190565b600080600080600080600060e0888a03121561232457600080fd5b875161232f81611fb4565b602089015190975061234081611fb4565b604089015190965061235181611fb4565b606089015160808a0151919650945061236981611fb4565b925061237760a089016122b5565b915061238560c089016122b5565b905092959891949750929550565b9788526001600160a01b03968716602089015294861660408801529285166060870152608086019190915290921660a084015290151560c0830152151560e08201526101000190565b6001600160a01b03948516815292841660208401526040830191909152909116606082015260800190565b634e487b7160e01b600052601160045260246000fd5b80820180821115610b1557610b15612407565b6001600160a01b0386811682528581166020830152604082018590528316606082015260a06080820181905260009061246b9083018461225c565b979650505050505050565b634e487b7160e01b600052603260045260246000fd5b81810381811115610b1557610b1561240756fea264697066735822122057d989c84f5a6d77f74e97300e91e6e78cca2d3270dca8553354c5bf221ba45064736f6c63430008170033" + "bytecode": "60806040523480156200001157600080fd5b506040516200257f3803806200257f833981016040819052620000349162000068565b60008054336001600160a01b031991821617909155600180549091166001600160a01b03929092169190911790556200009a565b6000602082840312156200007b57600080fd5b81516001600160a01b03811681146200009357600080fd5b9392505050565b6124d580620000aa6000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c8063b62549af11610097578063de8211a911610066578063de8211a9146101fd578063f2fde38b1461025b578063f7888aec1461026e578063fd84cb971461028157600080fd5b8063b62549af146101af578063c0a36f8a146101c2578063c0ee0b8a146101d5578063da5f7c45146101ea57600080fd5b806385aa92a7116100d357806385aa92a71461014b5780638da5cb5b14610176578063a2ee704314610189578063b4d904761461019c57600080fd5b806309326794146100fa57806351cff8d9146101155780636a4c76f814610138575b600080fd5b610102610294565b6040519081526020015b60405180910390f35b610128610123366004611fcc565b610307565b604051901515815260200161010c565b610128610146366004611ff0565b61048b565b60015461015e906001600160a01b031681565b6040516001600160a01b03909116815260200161010c565b60005461015e906001600160a01b031681565b610102610197366004612009565b610a9a565b6101286101aa366004611ff0565b610b1b565b6101286101bd366004611ff0565b610f94565b6101026101d03660046120ce565b6113e0565b6101e86101e3366004612161565b611854565b005b6101286101f83660046121ce565b611912565b61021061020b366004611ff0565b611950565b604080516001600160a01b0398891681529688166020880152948716948601949094526060850192909252909316608083015291151560a082015290151560c082015260e00161010c565b6101e8610269366004611fcc565b6119e1565b61010261027c366004612009565b611acb565b61012861028f366004611ff0565b611b06565b600154604080516399933b3360e01b815290516000926001600160a01b0316916399933b339160048083019260209291908290030181865afa1580156102de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103029190612243565b905090565b6000806103143384611acb565b9050600081116040518060400160405280600681526020016532363035303160d01b815250906103605760405162461bcd60e51b815260040161035791906122a2565b60405180910390fd5b5060405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0384169063a9059cbb906044016020604051808303816000875af11580156103ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103d291906122ca565b50600154604051635ae4e5df60e11b81526001600160a01b039091169063b5c9cbbe9061040890339087906000906004016122e5565b6020604051808303816000875af1158015610427573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061044b91906122ca565b5060405133906001600160a01b038516907f85b9d5ac4b95740dafd1b47130d38b5f34a9104dd14b1c88a2fb5a44c3a00ce790600090a350600192915050565b600154604080516399933b3360e01b815290516000926001600160a01b0316916399933b339160048083019260209291908290030181865afa1580156104d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104f99190612243565b8211156040518060400160405280600681526020016532363033303160d01b815250906105395760405162461bcd60e51b815260040161035791906122a2565b50610542611f78565b60015460405163de8211a960e01b8152600481018590526001600160a01b039091169063de8211a99060240160e060405180830381865afa15801561058b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105af9190612309565b151560c0880181905290151560a08801526001600160a01b039182166080880152606087019290925291821660408087019190915292821660208087019190915293909116845281518083019092526006825265191b1819981960d11b92820192909252906001146106345760405162461bcd60e51b815260040161035791906122a2565b5060a081015160408051808201909152600681526532363033303360d01b602082015290151560011461067a5760405162461bcd60e51b815260040161035791906122a2565b5060808101516040805180820190915260068152650c8d8c0ccc0d60d21b6020820152906001600160a01b031633146106c65760405162461bcd60e51b815260040161035791906122a2565b5080600001516001600160a01b031663200d2ed26040518163ffffffff1660e01b8152600401602060405180830381865afa158015610709573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061072d91906122ca565b60408051808201909152600681526532363033303560d01b602082015290151560011461076d5760405162461bcd60e51b815260040161035791906122a2565b5080600001516001600160a01b0316636f3b993f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107d491906122ca565b604080518082019091526006815265191b1819981b60d11b602082015290156108105760405162461bcd60e51b815260040161035791906122a2565b506001546040820151825160608401516001600160a01b039093169263b5c9cbbe929190610848906108428484611acb565b90611f60565b6040518463ffffffff1660e01b8152600401610866939291906122e5565b6020604051808303816000875af1158015610885573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108a991906122ca565b506001546020820151825160608401516001600160a01b039093169263d04c23af9291906108e1906108db8484610a9a565b90611f6c565b6040518463ffffffff1660e01b81526004016108ff939291906122e5565b6020604051808303816000875af115801561091e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061094291906122ca565b50600154815160208301516040808501516060860151608087015160a0880151935163ecf8959760e01b81526001600160a01b039097169663ecf895979661099c968c969195909490939092909190600090600401612393565b600060405180830381600087803b1580156109b657600080fd5b505af11580156109ca573d6000803e3d6000fd5b5050505080600001516001600160a01b0316837fae13fd5bb7db89e0f8059ff395d808a71fc16b9ea25a1e8be803f1419575902e8360200151846040015185606001518660800151604051610a2294939291906123dc565b60405180910390a380604001516001600160a01b031681602001516001600160a01b031682600001516001600160a01b03167f2458504403156ef04185b3cb0aab362f0421374a9fccb513fcf87c416324d40e8460600151604051610a8991815260200190565b60405180910390a450600192915050565b6001546040516304bec80960e11b81526001600160a01b0384811660048301528381166024830152600092169063097d9012906044015b602060405180830381865afa158015610aee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b129190612243565b90505b92915050565b600154604080516399933b3360e01b815290516000926001600160a01b0316916399933b339160048083019260209291908290030181865afa158015610b65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b899190612243565b8211156040518060400160405280600681526020016532363031303160d01b81525090610bc95760405162461bcd60e51b815260040161035791906122a2565b50610bd2611f78565b60015460405163de8211a960e01b8152600481018590526001600160a01b039091169063de8211a99060240160e060405180830381865afa158015610c1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c3f9190612309565b151560c0880181905290151560a08801526001600160a01b039182166080880152606087019290925291821660408087019190915292821660208087019190915293909116845281518083019092526006825265191b1818981960d11b9282019290925290600114610cc45760405162461bcd60e51b815260040161035791906122a2565b5060a081015160408051808201909152600681526532363031303360d01b60208201529015610d065760405162461bcd60e51b815260040161035791906122a2565b5080602001516001600160a01b0316336001600160a01b03161480610d40575080604001516001600160a01b0316336001600160a01b0316145b604051806040016040528060068152602001650c8d8c0c4c0d60d21b81525090610d7d5760405162461bcd60e51b815260040161035791906122a2565b506001546020820151825160608401516001600160a01b039093169263b5c9cbbe929190610daf906108428484611acb565b6040518463ffffffff1660e01b8152600401610dcd939291906122e5565b6020604051808303816000875af1158015610dec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e1091906122ca565b506001546020820151825160608401516001600160a01b039093169263d04c23af929190610e42906108db8484610a9a565b6040518463ffffffff1660e01b8152600401610e60939291906122e5565b6020604051808303816000875af1158015610e7f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ea391906122ca565b50600154815160208301516040808501516060860151608087015160a0880151935163ecf8959760e01b81526001600160a01b039097169663ecf8959796610efd968c969195909490939092909190600090600401612393565b600060405180830381600087803b158015610f1757600080fd5b505af1158015610f2b573d6000803e3d6000fd5b5050505080600001516001600160a01b0316837f83f6050bab67e325a246d7c944af50a51620253dcae7243de09efa23b2fb52238360200151846040015185606001518660800151604051610f8394939291906123dc565b60405180910390a350600192915050565b600154604080516399933b3360e01b815290516000926001600160a01b0316916399933b339160048083019260209291908290030181865afa158015610fde573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110029190612243565b8211156040518060400160405280600681526020016532363034303160d01b815250906110425760405162461bcd60e51b815260040161035791906122a2565b5061104b611f78565b60015460405163de8211a960e01b8152600481018590526001600160a01b039091169063de8211a99060240160e060405180830381865afa158015611094573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110b89190612309565b151560c0880181905290151560a08801526001600160a01b039182166080880152606087019290925291821660408087019190915292821660208087019190915293909116845281518083019092526006825265191b181a181960d11b928201929092529060011461113d5760405162461bcd60e51b815260040161035791906122a2565b5060a081015160408051808201909152600681526532363034303360d01b60208201529015156001146111835760405162461bcd60e51b815260040161035791906122a2565b5080608001516001600160a01b0316336001600160a01b031614604051806040016040528060068152602001650c8d8c0d0c0d60d21b815250906111da5760405162461bcd60e51b815260040161035791906122a2565b506001546020820151825160608401516001600160a01b039093169263b5c9cbbe92919061120c906108428484611acb565b6040518463ffffffff1660e01b815260040161122a939291906122e5565b6020604051808303816000875af1158015611249573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061126d91906122ca565b506001546020820151825160608401516001600160a01b039093169263d04c23af92919061129f906108db8484610a9a565b6040518463ffffffff1660e01b81526004016112bd939291906122e5565b6020604051808303816000875af11580156112dc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061130091906122ca565b50600154815160208301516040808501516060860151608087015160a0880151935163ecf8959760e01b81526001600160a01b039097169663ecf895979661135a968c969195909490939092909190600090600401612393565b600060405180830381600087803b15801561137457600080fd5b505af1158015611388573d6000803e3d6000fd5b5050505080600001516001600160a01b0316837f37c971bd668c8d1b347a40a1db0d7338d910adcf4d93dc7f8a95b468ddda58828360200151846040015185606001518660800151604051610f8394939291906123dc565b60008084116040518060400160405280600681526020016532363030303160d01b815250906114225760405162461bcd60e51b815260040161035791906122a2565b508361142e3388611acb565b101560405180604001604052806006815260200165191b1818181960d11b8152509061146d5760405162461bcd60e51b815260040161035791906122a2565b50856001600160a01b031663200d2ed26040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114d091906122ca565b60408051808201909152600681526532363030303360d01b60208201529015156001146115105760405162461bcd60e51b815260040161035791906122a2565b50856001600160a01b0316636f3b993f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561154f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061157391906122ca565b6040805180820190915260068152650c8d8c0c0c0d60d21b602082015290156115af5760405162461bcd60e51b815260040161035791906122a2565b50600154604080516399933b3360e01b815290516000926001600160a01b0316916399933b339160048083019260209291908290030181865afa1580156115fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061161e9190612243565b61162990600161241d565b600154604051637ea25c9760e11b8152600481018390529192506001600160a01b03169063fd44b92e90602401600060405180830381600087803b15801561167057600080fd5b505af1158015611684573d6000803e3d6000fd5b50506001805460405163ecf8959760e01b81526001600160a01b03909116935063ecf8959792506116c69185918c9133918d918d918d91600091600401612393565b600060405180830381600087803b1580156116e057600080fd5b505af11580156116f4573d6000803e3d6000fd5b50506001546001600160a01b0316915063b5c9cbbe9050338961171b896108db8484611acb565b6040518463ffffffff1660e01b8152600401611739939291906122e5565b6020604051808303816000875af1158015611758573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061177c91906122ca565b506001546001600160a01b031663d04c23af338961179e896108428484610a9a565b6040518463ffffffff1660e01b81526004016117bc939291906122e5565b6020604051808303816000875af11580156117db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117ff91906122ca565b50866001600160a01b0316817f4a2cf5c0983fc0948d3f0751b04bdf091d03d7a1a5d757d1c93b5a8f2f295f413389898989604051611842959493929190612430565b60405180910390a39695505050505050565b6001546001600160a01b031663b5c9cbbe8433611875866108428484611acb565b6040518463ffffffff1660e01b8152600401611893939291906122e5565b6020604051808303816000875af11580156118b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118d691906122ca565b506040516001600160a01b0384169033907f76dacbd9b11b7bbe3372e54b4adc1eeb5724ff92f91142a1a45722c28582ebfd90600090a3505050565b6000805b828110156119495761193f84848381811061193357611933612476565b9050602002013561048b565b9150600101611916565b5092915050565b60015460405163de8211a960e01b8152600481018390526000918291829182918291829182916001600160a01b03169063de8211a99060240160e060405180830381865afa1580156119a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119ca9190612309565b959e949d50929b5090995097509550909350915050565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b03163314611a2a5760405162461bcd60e51b815260040161035791906122a2565b5060408051808201909152600681526535303031303160d01b60208201526001600160a01b038216611a6f5760405162461bcd60e51b815260040161035791906122a2565b50600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60015460405163d4fac45d60e01b81526001600160a01b0384811660048301528381166024830152600092169063d4fac45d90604401610ad1565b600154604080516399933b3360e01b815290516000926001600160a01b0316916399933b339160048083019260209291908290030181865afa158015611b50573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b749190612243565b8211156040518060400160405280600681526020016532363032303160d01b81525090611bb45760405162461bcd60e51b815260040161035791906122a2565b50611bbd611f78565b60015460405163de8211a960e01b8152600481018590526001600160a01b039091169063de8211a99060240160e060405180830381865afa158015611c06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c2a9190612309565b151560c0880181905290151560a08801526001600160a01b039182166080880152606087019290925291821660408087019190915292821660208087019190915293909116845281518083019092526006825265191b1819181960d11b9282019290925290600114611caf5760405162461bcd60e51b815260040161035791906122a2565b5060a081015160408051808201909152600681526532363032303360d01b60208201529015611cf15760405162461bcd60e51b815260040161035791906122a2565b50604081810151815180830190925260068252650c8d8c0c8c0d60d21b60208301526001600160a01b03163314611d3b5760405162461bcd60e51b815260040161035791906122a2565b5080600001516001600160a01b031663200d2ed26040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d7e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611da291906122ca565b60408051808201909152600681526532363032303560d01b6020820152901515600114611de25760405162461bcd60e51b815260040161035791906122a2565b5080600001516001600160a01b0316636f3b993f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e4991906122ca565b604080518082019091526006815265191b1819181b60d11b60208201529015611e855760405162461bcd60e51b815260040161035791906122a2565b5060018054825160208401516040808601516060870151608088015160c0890151935163ecf8959760e01b81526001600160a01b039097169763ecf8959797611eda978d979096909594939291600401612393565b600060405180830381600087803b158015611ef457600080fd5b505af1158015611f08573d6000803e3d6000fd5b5050505080600001516001600160a01b0316837ffa1e4d4f57c605169fce32ba32e2fd705e590b8337ad5a79c677440230e4482d8360200151846040015185606001518660800151604051610f8394939291906123dc565b6000610b12828461241d565b6000610b12828461248c565b6040805160e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c081019190915290565b6001600160a01b0381168114611fc957600080fd5b50565b600060208284031215611fde57600080fd5b8135611fe981611fb4565b9392505050565b60006020828403121561200257600080fd5b5035919050565b6000806040838503121561201c57600080fd5b823561202781611fb4565b9150602083013561203781611fb4565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff8084111561207357612073612042565b604051601f8501601f19908116603f0116810190828211818310171561209b5761209b612042565b816040528093508581528686860111156120b457600080fd5b858560208301376000602087830101525050509392505050565b600080600080600060a086880312156120e657600080fd5b85356120f181611fb4565b9450602086013561210181611fb4565b935060408601359250606086013561211881611fb4565b9150608086013567ffffffffffffffff81111561213457600080fd5b8601601f8101881361214557600080fd5b61215488823560208401612058565b9150509295509295909350565b60008060006060848603121561217657600080fd5b833561218181611fb4565b925060208401359150604084013567ffffffffffffffff8111156121a457600080fd5b8401601f810186136121b557600080fd5b6121c486823560208401612058565b9150509250925092565b600080602083850312156121e157600080fd5b823567ffffffffffffffff808211156121f957600080fd5b818501915085601f83011261220d57600080fd5b81358181111561221c57600080fd5b8660208260051b850101111561223157600080fd5b60209290920196919550909350505050565b60006020828403121561225557600080fd5b5051919050565b6000815180845260005b8181101561228257602081850181015186830182015201612266565b506000602082860101526020601f19601f83011685010191505092915050565b602081526000610b12602083018461225c565b805180151581146122c557600080fd5b919050565b6000602082840312156122dc57600080fd5b610b12826122b5565b6001600160a01b039384168152919092166020820152604081019190915260600190565b600080600080600080600060e0888a03121561232457600080fd5b875161232f81611fb4565b602089015190975061234081611fb4565b604089015190965061235181611fb4565b606089015160808a0151919650945061236981611fb4565b925061237760a089016122b5565b915061238560c089016122b5565b905092959891949750929550565b9788526001600160a01b03968716602089015294861660408801529285166060870152608086019190915290921660a084015290151560c0830152151560e08201526101000190565b6001600160a01b03948516815292841660208401526040830191909152909116606082015260800190565b634e487b7160e01b600052601160045260246000fd5b80820180821115610b1557610b15612407565b6001600160a01b0386811682528581166020830152604082018590528316606082015260a06080820181905260009061246b9083018461225c565b979650505050505050565b634e487b7160e01b600052603260045260246000fd5b81810381811115610b1557610b1561240756fea2646970667358221220f657960e2c938eb66005df0135b3dc9fc17d3076c785f749e53a0cbced407b5a64736f6c63430008170033", + "deployedBytecode": "608060405234801561001057600080fd5b50600436106100f55760003560e01c8063b62549af11610097578063de8211a911610066578063de8211a9146101fd578063f2fde38b1461025b578063f7888aec1461026e578063fd84cb971461028157600080fd5b8063b62549af146101af578063c0a36f8a146101c2578063c0ee0b8a146101d5578063da5f7c45146101ea57600080fd5b806385aa92a7116100d357806385aa92a71461014b5780638da5cb5b14610176578063a2ee704314610189578063b4d904761461019c57600080fd5b806309326794146100fa57806351cff8d9146101155780636a4c76f814610138575b600080fd5b610102610294565b6040519081526020015b60405180910390f35b610128610123366004611fcc565b610307565b604051901515815260200161010c565b610128610146366004611ff0565b61048b565b60015461015e906001600160a01b031681565b6040516001600160a01b03909116815260200161010c565b60005461015e906001600160a01b031681565b610102610197366004612009565b610a9a565b6101286101aa366004611ff0565b610b1b565b6101286101bd366004611ff0565b610f94565b6101026101d03660046120ce565b6113e0565b6101e86101e3366004612161565b611854565b005b6101286101f83660046121ce565b611912565b61021061020b366004611ff0565b611950565b604080516001600160a01b0398891681529688166020880152948716948601949094526060850192909252909316608083015291151560a082015290151560c082015260e00161010c565b6101e8610269366004611fcc565b6119e1565b61010261027c366004612009565b611acb565b61012861028f366004611ff0565b611b06565b600154604080516399933b3360e01b815290516000926001600160a01b0316916399933b339160048083019260209291908290030181865afa1580156102de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103029190612243565b905090565b6000806103143384611acb565b9050600081116040518060400160405280600681526020016532363035303160d01b815250906103605760405162461bcd60e51b815260040161035791906122a2565b60405180910390fd5b5060405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0384169063a9059cbb906044016020604051808303816000875af11580156103ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103d291906122ca565b50600154604051635ae4e5df60e11b81526001600160a01b039091169063b5c9cbbe9061040890339087906000906004016122e5565b6020604051808303816000875af1158015610427573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061044b91906122ca565b5060405133906001600160a01b038516907f85b9d5ac4b95740dafd1b47130d38b5f34a9104dd14b1c88a2fb5a44c3a00ce790600090a350600192915050565b600154604080516399933b3360e01b815290516000926001600160a01b0316916399933b339160048083019260209291908290030181865afa1580156104d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104f99190612243565b8211156040518060400160405280600681526020016532363033303160d01b815250906105395760405162461bcd60e51b815260040161035791906122a2565b50610542611f78565b60015460405163de8211a960e01b8152600481018590526001600160a01b039091169063de8211a99060240160e060405180830381865afa15801561058b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105af9190612309565b151560c0880181905290151560a08801526001600160a01b039182166080880152606087019290925291821660408087019190915292821660208087019190915293909116845281518083019092526006825265191b1819981960d11b92820192909252906001146106345760405162461bcd60e51b815260040161035791906122a2565b5060a081015160408051808201909152600681526532363033303360d01b602082015290151560011461067a5760405162461bcd60e51b815260040161035791906122a2565b5060808101516040805180820190915260068152650c8d8c0ccc0d60d21b6020820152906001600160a01b031633146106c65760405162461bcd60e51b815260040161035791906122a2565b5080600001516001600160a01b031663200d2ed26040518163ffffffff1660e01b8152600401602060405180830381865afa158015610709573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061072d91906122ca565b60408051808201909152600681526532363033303560d01b602082015290151560011461076d5760405162461bcd60e51b815260040161035791906122a2565b5080600001516001600160a01b0316636f3b993f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107d491906122ca565b604080518082019091526006815265191b1819981b60d11b602082015290156108105760405162461bcd60e51b815260040161035791906122a2565b506001546040820151825160608401516001600160a01b039093169263b5c9cbbe929190610848906108428484611acb565b90611f60565b6040518463ffffffff1660e01b8152600401610866939291906122e5565b6020604051808303816000875af1158015610885573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108a991906122ca565b506001546020820151825160608401516001600160a01b039093169263d04c23af9291906108e1906108db8484610a9a565b90611f6c565b6040518463ffffffff1660e01b81526004016108ff939291906122e5565b6020604051808303816000875af115801561091e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061094291906122ca565b50600154815160208301516040808501516060860151608087015160a0880151935163ecf8959760e01b81526001600160a01b039097169663ecf895979661099c968c969195909490939092909190600090600401612393565b600060405180830381600087803b1580156109b657600080fd5b505af11580156109ca573d6000803e3d6000fd5b5050505080600001516001600160a01b0316837fae13fd5bb7db89e0f8059ff395d808a71fc16b9ea25a1e8be803f1419575902e8360200151846040015185606001518660800151604051610a2294939291906123dc565b60405180910390a380604001516001600160a01b031681602001516001600160a01b031682600001516001600160a01b03167f2458504403156ef04185b3cb0aab362f0421374a9fccb513fcf87c416324d40e8460600151604051610a8991815260200190565b60405180910390a450600192915050565b6001546040516304bec80960e11b81526001600160a01b0384811660048301528381166024830152600092169063097d9012906044015b602060405180830381865afa158015610aee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b129190612243565b90505b92915050565b600154604080516399933b3360e01b815290516000926001600160a01b0316916399933b339160048083019260209291908290030181865afa158015610b65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b899190612243565b8211156040518060400160405280600681526020016532363031303160d01b81525090610bc95760405162461bcd60e51b815260040161035791906122a2565b50610bd2611f78565b60015460405163de8211a960e01b8152600481018590526001600160a01b039091169063de8211a99060240160e060405180830381865afa158015610c1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c3f9190612309565b151560c0880181905290151560a08801526001600160a01b039182166080880152606087019290925291821660408087019190915292821660208087019190915293909116845281518083019092526006825265191b1818981960d11b9282019290925290600114610cc45760405162461bcd60e51b815260040161035791906122a2565b5060a081015160408051808201909152600681526532363031303360d01b60208201529015610d065760405162461bcd60e51b815260040161035791906122a2565b5080602001516001600160a01b0316336001600160a01b03161480610d40575080604001516001600160a01b0316336001600160a01b0316145b604051806040016040528060068152602001650c8d8c0c4c0d60d21b81525090610d7d5760405162461bcd60e51b815260040161035791906122a2565b506001546020820151825160608401516001600160a01b039093169263b5c9cbbe929190610daf906108428484611acb565b6040518463ffffffff1660e01b8152600401610dcd939291906122e5565b6020604051808303816000875af1158015610dec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e1091906122ca565b506001546020820151825160608401516001600160a01b039093169263d04c23af929190610e42906108db8484610a9a565b6040518463ffffffff1660e01b8152600401610e60939291906122e5565b6020604051808303816000875af1158015610e7f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ea391906122ca565b50600154815160208301516040808501516060860151608087015160a0880151935163ecf8959760e01b81526001600160a01b039097169663ecf8959796610efd968c969195909490939092909190600090600401612393565b600060405180830381600087803b158015610f1757600080fd5b505af1158015610f2b573d6000803e3d6000fd5b5050505080600001516001600160a01b0316837f83f6050bab67e325a246d7c944af50a51620253dcae7243de09efa23b2fb52238360200151846040015185606001518660800151604051610f8394939291906123dc565b60405180910390a350600192915050565b600154604080516399933b3360e01b815290516000926001600160a01b0316916399933b339160048083019260209291908290030181865afa158015610fde573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110029190612243565b8211156040518060400160405280600681526020016532363034303160d01b815250906110425760405162461bcd60e51b815260040161035791906122a2565b5061104b611f78565b60015460405163de8211a960e01b8152600481018590526001600160a01b039091169063de8211a99060240160e060405180830381865afa158015611094573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110b89190612309565b151560c0880181905290151560a08801526001600160a01b039182166080880152606087019290925291821660408087019190915292821660208087019190915293909116845281518083019092526006825265191b181a181960d11b928201929092529060011461113d5760405162461bcd60e51b815260040161035791906122a2565b5060a081015160408051808201909152600681526532363034303360d01b60208201529015156001146111835760405162461bcd60e51b815260040161035791906122a2565b5080608001516001600160a01b0316336001600160a01b031614604051806040016040528060068152602001650c8d8c0d0c0d60d21b815250906111da5760405162461bcd60e51b815260040161035791906122a2565b506001546020820151825160608401516001600160a01b039093169263b5c9cbbe92919061120c906108428484611acb565b6040518463ffffffff1660e01b815260040161122a939291906122e5565b6020604051808303816000875af1158015611249573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061126d91906122ca565b506001546020820151825160608401516001600160a01b039093169263d04c23af92919061129f906108db8484610a9a565b6040518463ffffffff1660e01b81526004016112bd939291906122e5565b6020604051808303816000875af11580156112dc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061130091906122ca565b50600154815160208301516040808501516060860151608087015160a0880151935163ecf8959760e01b81526001600160a01b039097169663ecf895979661135a968c969195909490939092909190600090600401612393565b600060405180830381600087803b15801561137457600080fd5b505af1158015611388573d6000803e3d6000fd5b5050505080600001516001600160a01b0316837f37c971bd668c8d1b347a40a1db0d7338d910adcf4d93dc7f8a95b468ddda58828360200151846040015185606001518660800151604051610f8394939291906123dc565b60008084116040518060400160405280600681526020016532363030303160d01b815250906114225760405162461bcd60e51b815260040161035791906122a2565b508361142e3388611acb565b101560405180604001604052806006815260200165191b1818181960d11b8152509061146d5760405162461bcd60e51b815260040161035791906122a2565b50856001600160a01b031663200d2ed26040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114d091906122ca565b60408051808201909152600681526532363030303360d01b60208201529015156001146115105760405162461bcd60e51b815260040161035791906122a2565b50856001600160a01b0316636f3b993f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561154f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061157391906122ca565b6040805180820190915260068152650c8d8c0c0c0d60d21b602082015290156115af5760405162461bcd60e51b815260040161035791906122a2565b50600154604080516399933b3360e01b815290516000926001600160a01b0316916399933b339160048083019260209291908290030181865afa1580156115fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061161e9190612243565b61162990600161241d565b600154604051637ea25c9760e11b8152600481018390529192506001600160a01b03169063fd44b92e90602401600060405180830381600087803b15801561167057600080fd5b505af1158015611684573d6000803e3d6000fd5b50506001805460405163ecf8959760e01b81526001600160a01b03909116935063ecf8959792506116c69185918c9133918d918d918d91600091600401612393565b600060405180830381600087803b1580156116e057600080fd5b505af11580156116f4573d6000803e3d6000fd5b50506001546001600160a01b0316915063b5c9cbbe9050338961171b896108db8484611acb565b6040518463ffffffff1660e01b8152600401611739939291906122e5565b6020604051808303816000875af1158015611758573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061177c91906122ca565b506001546001600160a01b031663d04c23af338961179e896108428484610a9a565b6040518463ffffffff1660e01b81526004016117bc939291906122e5565b6020604051808303816000875af11580156117db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117ff91906122ca565b50866001600160a01b0316817f4a2cf5c0983fc0948d3f0751b04bdf091d03d7a1a5d757d1c93b5a8f2f295f413389898989604051611842959493929190612430565b60405180910390a39695505050505050565b6001546001600160a01b031663b5c9cbbe8433611875866108428484611acb565b6040518463ffffffff1660e01b8152600401611893939291906122e5565b6020604051808303816000875af11580156118b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118d691906122ca565b506040516001600160a01b0384169033907f76dacbd9b11b7bbe3372e54b4adc1eeb5724ff92f91142a1a45722c28582ebfd90600090a3505050565b6000805b828110156119495761193f84848381811061193357611933612476565b9050602002013561048b565b9150600101611916565b5092915050565b60015460405163de8211a960e01b8152600481018390526000918291829182918291829182916001600160a01b03169063de8211a99060240160e060405180830381865afa1580156119a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119ca9190612309565b959e949d50929b5090995097509550909350915050565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b03163314611a2a5760405162461bcd60e51b815260040161035791906122a2565b5060408051808201909152600681526535303031303160d01b60208201526001600160a01b038216611a6f5760405162461bcd60e51b815260040161035791906122a2565b50600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60015460405163d4fac45d60e01b81526001600160a01b0384811660048301528381166024830152600092169063d4fac45d90604401610ad1565b600154604080516399933b3360e01b815290516000926001600160a01b0316916399933b339160048083019260209291908290030181865afa158015611b50573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b749190612243565b8211156040518060400160405280600681526020016532363032303160d01b81525090611bb45760405162461bcd60e51b815260040161035791906122a2565b50611bbd611f78565b60015460405163de8211a960e01b8152600481018590526001600160a01b039091169063de8211a99060240160e060405180830381865afa158015611c06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c2a9190612309565b151560c0880181905290151560a08801526001600160a01b039182166080880152606087019290925291821660408087019190915292821660208087019190915293909116845281518083019092526006825265191b1819181960d11b9282019290925290600114611caf5760405162461bcd60e51b815260040161035791906122a2565b5060a081015160408051808201909152600681526532363032303360d01b60208201529015611cf15760405162461bcd60e51b815260040161035791906122a2565b50604081810151815180830190925260068252650c8d8c0c8c0d60d21b60208301526001600160a01b03163314611d3b5760405162461bcd60e51b815260040161035791906122a2565b5080600001516001600160a01b031663200d2ed26040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d7e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611da291906122ca565b60408051808201909152600681526532363032303560d01b6020820152901515600114611de25760405162461bcd60e51b815260040161035791906122a2565b5080600001516001600160a01b0316636f3b993f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e4991906122ca565b604080518082019091526006815265191b1819181b60d11b60208201529015611e855760405162461bcd60e51b815260040161035791906122a2565b5060018054825160208401516040808601516060870151608088015160c0890151935163ecf8959760e01b81526001600160a01b039097169763ecf8959797611eda978d979096909594939291600401612393565b600060405180830381600087803b158015611ef457600080fd5b505af1158015611f08573d6000803e3d6000fd5b5050505080600001516001600160a01b0316837ffa1e4d4f57c605169fce32ba32e2fd705e590b8337ad5a79c677440230e4482d8360200151846040015185606001518660800151604051610f8394939291906123dc565b6000610b12828461241d565b6000610b12828461248c565b6040805160e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c081019190915290565b6001600160a01b0381168114611fc957600080fd5b50565b600060208284031215611fde57600080fd5b8135611fe981611fb4565b9392505050565b60006020828403121561200257600080fd5b5035919050565b6000806040838503121561201c57600080fd5b823561202781611fb4565b9150602083013561203781611fb4565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff8084111561207357612073612042565b604051601f8501601f19908116603f0116810190828211818310171561209b5761209b612042565b816040528093508581528686860111156120b457600080fd5b858560208301376000602087830101525050509392505050565b600080600080600060a086880312156120e657600080fd5b85356120f181611fb4565b9450602086013561210181611fb4565b935060408601359250606086013561211881611fb4565b9150608086013567ffffffffffffffff81111561213457600080fd5b8601601f8101881361214557600080fd5b61215488823560208401612058565b9150509295509295909350565b60008060006060848603121561217657600080fd5b833561218181611fb4565b925060208401359150604084013567ffffffffffffffff8111156121a457600080fd5b8401601f810186136121b557600080fd5b6121c486823560208401612058565b9150509250925092565b600080602083850312156121e157600080fd5b823567ffffffffffffffff808211156121f957600080fd5b818501915085601f83011261220d57600080fd5b81358181111561221c57600080fd5b8660208260051b850101111561223157600080fd5b60209290920196919550909350505050565b60006020828403121561225557600080fd5b5051919050565b6000815180845260005b8181101561228257602081850181015186830182015201612266565b506000602082860101526020601f19601f83011685010191505092915050565b602081526000610b12602083018461225c565b805180151581146122c557600080fd5b919050565b6000602082840312156122dc57600080fd5b610b12826122b5565b6001600160a01b039384168152919092166020820152604081019190915260600190565b600080600080600080600060e0888a03121561232457600080fd5b875161232f81611fb4565b602089015190975061234081611fb4565b604089015190965061235181611fb4565b606089015160808a0151919650945061236981611fb4565b925061237760a089016122b5565b915061238560c089016122b5565b905092959891949750929550565b9788526001600160a01b03968716602089015294861660408801529285166060870152608086019190915290921660a084015290151560c0830152151560e08201526101000190565b6001600160a01b03948516815292841660208401526040830191909152909116606082015260800190565b634e487b7160e01b600052601160045260246000fd5b80820180821115610b1557610b15612407565b6001600160a01b0386811682528581166020830152604082018590528316606082015260a06080820181905260009061246b9083018461225c565b979650505050505050565b634e487b7160e01b600052603260045260246000fd5b81810381811115610b1557610b1561240756fea2646970667358221220f657960e2c938eb66005df0135b3dc9fc17d3076c785f749e53a0cbced407b5a64736f6c63430008170033" } \ No newline at end of file diff --git a/contracts/IbetSecurityTokenEscrow.json b/contracts/IbetSecurityTokenEscrow.json index f301dcda..c6bffd6a 100644 --- a/contracts/IbetSecurityTokenEscrow.json +++ b/contracts/IbetSecurityTokenEscrow.json @@ -387,6 +387,25 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [ + { + "internalType": "uint256[]", + "name": "_escrowIdList", + "type": "uint256[]" + } + ], + "name": "bulkFinishEscrow", + "outputs": [ + { + "internalType": "bool", + "name": "success", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [ { @@ -676,6 +695,6 @@ "type": "function" } ], - "bytecode": "60806040523480156200001157600080fd5b5060405162002d2e38038062002d2e833981016040819052620000349162000068565b6000805433600160a060020a03199182161790915560018054909116600160a060020a03929092169190911790556200009a565b6000602082840312156200007b57600080fd5b8151600160a060020a03811681146200009357600080fd5b9392505050565b612c8480620000aa6000396000f3fe608060405234801561001057600080fd5b50600436106100ee5760003560e060020a900480638da5cb5b11610090578063c0ee0b8a1161006a578063c0ee0b8a14610236578063e01824361461024b578063f2fde38b1461025e578063f7888aec1461027157600080fd5b80638da5cb5b146101fa578063a2ee70431461020d578063b9ba93091461022e57600080fd5b806351cff8d9116100cc57806351cff8d9146101535780635ccef3e7146101665780637d19e5961461017957806385aa92a7146101cf57600080fd5b80630565f263146100f357806332f1d7b61461011b5780633d1144141461012e575b600080fd5b610106610101366004612601565b610284565b60405190151581526020015b60405180910390f35b6101066101293660046126a5565b61088e565b61014161013c3660046126a5565b61108d565b6040516101129695949392919061270e565b610106610161366004612763565b611123565b610106610174366004612780565b6112ea565b61018c6101873660046126a5565b611961565b60408051600160a060020a0397881681529587166020870152938616938501939093526060840191909152909216608082015290151560a082015260c001610112565b6001546101e290600160a060020a031681565b604051600160a060020a039091168152602001610112565b6000546101e290600160a060020a031681565b61022061021b3660046127c7565b6119de565b604051908152602001610112565b610220611a76565b610249610244366004612800565b611aec565b005b6101066102593660046126a5565b611bad565b61024961026c366004612763565b612301565b61022061027f3660046127c7565b61242c565b60008085116040518060400160405280600681526020017f3234303030310000000000000000000000000000000000000000000000000000815250906102e95760405160e560020a62461bcd0281526004016102e0919061286d565b60405180910390fd5b506001546040517fd4fac45d000000000000000000000000000000000000000000000000000000008152336004820152600160a060020a0389811660248301528792169063d4fac45d90604401602060405180830381865afa158015610353573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103779190612880565b10156040518060400160405280600681526020017f3234303030320000000000000000000000000000000000000000000000000000815250906103d05760405160e560020a62461bcd0281526004016102e0919061286d565b5086600160a060020a031663200d2ed26040518163ffffffff1660e060020a028152600401602060405180830381865afa158015610412573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061043691906128ae565b60408051808201909152600681527f323430303033000000000000000000000000000000000000000000000000000060208201529015156001146104905760405160e560020a62461bcd0281526004016102e0919061286d565b506001546040805160e060020a63e1072a6f0281529051600092600160a060020a03169163e1072a6f9160048083019260209291908290030181865afa1580156104de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105029190612880565b61050d9060016128f8565b6001546040517f5ff9a53800000000000000000000000000000000000000000000000000000000815260048101839052919250600160a060020a031690635ff9a53890602401600060405180830381600087803b15801561056d57600080fd5b505af1158015610581573d6000803e3d6000fd5b50506001805460405160e060020a63a176130f028152600160a060020a03909116935063a176130f92506105c49185918d9133918e918e918e919060040161290b565b600060405180830381600087803b1580156105de57600080fd5b505af11580156105f2573d6000803e3d6000fd5b5050600154600160a060020a0316915063b5c9cbbe9050338a61061f8a610619848461242c565b90612480565b6040518463ffffffff1660e060020a02815260040161064093929190612948565b6020604051808303816000875af115801561065f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061068391906128ae565b50600154600160a060020a031663d04c23af338a6106ab8a6106a584846119de565b9061248c565b6040518463ffffffff1660e060020a0281526004016106cc93929190612948565b6020604051808303816000875af11580156106eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061070f91906128ae565b5087600160a060020a0316636f3b993f6040518163ffffffff1660e060020a028152600401602060405180830381865afa158015610751573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061077591906128ae565b1515600103610836576001805460405160e060020a63e3fd3739028152600160a060020a039091169163e3fd3739916107bb9185918d918a91600090819060040161296c565b600060405180830381600087803b1580156107d557600080fd5b505af11580156107e9573d6000803e3d6000fd5b5050505087600160a060020a0316817f9e2bf80eea250aaee70b4427dfbf5a0ee2b4ac85e85cb98039b3f826228d58c0338a8a8960405161082d94939291906129c3565b60405180910390a35b87600160a060020a0316817f1dbd4daa45ed3a034e3815010a377d5cb8cb4d62a344214241cb650c1da77326338a8a8a896040516108789594939291906129ff565b60405180910390a3506001979650505050505050565b6001546040805160e060020a63e1072a6f0281529051600092600160a060020a03169163e1072a6f9160048083019260209291908290030181865afa1580156108db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ff9190612880565b8211156040518060400160405280600681526020017f3234303330310000000000000000000000000000000000000000000000000000815250906109595760405160e560020a62461bcd0281526004016102e0919061286d565b50610962612498565b60015460405160e160020a633e8cf2cb02815260048101859052600160a060020a0390911690637d19e5969060240160c060405180830381865afa1580156109ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109d29190612a44565b151560a08701819052600160a060020a03918216608088015260608701929092529182166040808701919091529282166020808701919091529390911684528151808301909252600682527f32343033303200000000000000000000000000000000000000000000000000009282019290925290600114610a695760405160e560020a62461bcd0281526004016102e0919061286d565b50608081015160408051808201909152600681527f3234303330330000000000000000000000000000000000000000000000000000602082015290600160a060020a03163314610acf5760405160e560020a62461bcd0281526004016102e0919061286d565b508060000151600160a060020a031663200d2ed26040518163ffffffff1660e060020a028152600401602060405180830381865afa158015610b15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b3991906128ae565b60408051808201909152600681527f32343033303400000000000000000000000000000000000000000000000000006020820152901515600114610b935760405160e560020a62461bcd0281526004016102e0919061286d565b508060000151600160a060020a0316636f3b993f6040518163ffffffff1660e060020a028152600401602060405180830381865afa158015610bd9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bfd91906128ae565b1515600103610e0957610c0e6124cd565b60015460405160e260020a630f44510502815260048101869052600160a060020a0390911690633d11441490602401600060405180830381865afa158015610c5a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610c829190810190612b09565b151560a08701819052901515608087015290151560608601819052604080870184905260208701859052600160a060020a0395861680885260018054925160e060020a63e3fd3739028152929097169663e3fd373996610cf0968d9693959194909391929190600401612b97565b600060405180830381600087803b158015610d0a57600080fd5b505af1158015610d1e573d6000803e3d6000fd5b505060015484516020860151604080880151606089015160808a0151925160e060020a63a176130f028152600160a060020a03909616975063a176130f9650610d71958c9594939060009060040161290b565b600060405180830381600087803b158015610d8b57600080fd5b505af1158015610d9f573d6000803e3d6000fd5b50505050600115158260000151600160a060020a0316857f6282741ab3cb1a17664f3c76a91d6f6ad4e3ec1f046c9cc1716745b729d955cd8560200151866040015187606001518860800151604051610dfb9493929190612bf3565b60405180910390a450611084565b600154604082015182516060840151600160a060020a039093169263b5c9cbbe929190610e3a906106a5848461242c565b6040518463ffffffff1660e060020a028152600401610e5b93929190612948565b6020604051808303816000875af1158015610e7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e9e91906128ae565b50600154602082015182516060840151600160a060020a039093169263d04c23af929190610ed09061061984846119de565b6040518463ffffffff1660e060020a028152600401610ef193929190612948565b6020604051808303816000875af1158015610f10573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f3491906128ae565b506001548151602083015160408085015160608601516080870151925160e060020a63a176130f028152600160a060020a039096169563a176130f95610f8a958b9591949093909290919060009060040161290b565b600060405180830381600087803b158015610fa457600080fd5b505af1158015610fb8573d6000803e3d6000fd5b50505050600015158160000151600160a060020a0316847f6282741ab3cb1a17664f3c76a91d6f6ad4e3ec1f046c9cc1716745b729d955cd84602001518560400151866060015187608001516040516110149493929190612bf3565b60405180910390a48060400151600160a060020a03168160200151600160a060020a03168260000151600160a060020a03167f2458504403156ef04185b3cb0aab362f0421374a9fccb513fcf87c416324d40e846060015160405161107b91815260200190565b60405180910390a45b50600192915050565b60015460405160e260020a630f445105028152600481018390526000916060918291849182918291600160a060020a0390911690633d11441490602401600060405180830381865afa1580156110e7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261110f9190810190612b09565b949c939b5091995097509550909350915050565b600080611130338461242c565b9050600081116040518060400160405280600681526020017f32343034303100000000000000000000000000000000000000000000000000008152509061118d5760405160e560020a62461bcd0281526004016102e0919061286d565b506040517fa9059cbb00000000000000000000000000000000000000000000000000000000815233600482015260248101829052600160a060020a0384169063a9059cbb906044016020604051808303816000875af11580156111f4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061121891906128ae565b506001546040517fb5c9cbbe000000000000000000000000000000000000000000000000000000008152600160a060020a039091169063b5c9cbbe906112679033908790600090600401612948565b6020604051808303816000875af1158015611286573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112aa91906128ae565b506040513390600160a060020a038516907f85b9d5ac4b95740dafd1b47130d38b5f34a9104dd14b1c88a2fb5a44c3a00ce790600090a350600192915050565b60006112f46124cd565b60015460405160e260020a630f44510502815260048101869052600160a060020a0390911690633d11441490602401600060405180830381865afa158015611340573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526113689190810190612b09565b151560a0870152151560808601521515606085015260408401526020830152600160a060020a0316815261139a612498565b60015460405160e160020a633e8cf2cb02815260048101879052600160a060020a0390911690637d19e5969060240160c060405180830381865afa1580156113e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061140a9190612a44565b151560a0870152600160a060020a0390811660808701526060860191909152908116604080860191909152918116602080860191909152928116845284518251808401909352600683527f32343032303100000000000000000000000000000000000000000000000000009383019390935290911661149f5760405160e560020a62461bcd0281526004016102e0919061286d565b508160000151600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381865afa1580156114e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115099190612c1e565b600160a060020a031633600160a060020a0316146040518060400160405280600681526020017f3234303230320000000000000000000000000000000000000000000000000000815250906115745760405160e560020a62461bcd0281526004016102e0919061286d565b50606082015160408051808201909152600681527f323430323033000000000000000000000000000000000000000000000000000060208201529015156001146115d45760405160e560020a62461bcd0281526004016102e0919061286d565b50608082015160408051808201909152600681527f323430323034000000000000000000000000000000000000000000000000000060208201529015156001146116345760405160e560020a62461bcd0281526004016102e0919061286d565b508060000151600160a060020a031663200d2ed26040518163ffffffff1660e060020a028152600401602060405180830381865afa15801561167a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061169e91906128ae565b60408051808201909152600681527f323430323035000000000000000000000000000000000000000000000000000060208201529015156001146116f85760405160e560020a62461bcd0281526004016102e0919061286d565b5060018054835160208501516060860151608087015160405160e060020a63e3fd3739028152600160a060020a039095169563e3fd373995611749958d95909490938d939192909190600401612b97565b600060405180830381600087803b15801561176357600080fd5b505af1158015611777573d6000803e3d6000fd5b5050600154604084015184516060860151600160a060020a03909316945063b5c9cbbe935090916117ac906106a5848461242c565b6040518463ffffffff1660e060020a0281526004016117cd93929190612948565b6020604051808303816000875af11580156117ec573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061181091906128ae565b50600154602082015182516060840151600160a060020a039093169263d04c23af9291906118429061061984846119de565b6040518463ffffffff1660e060020a02815260040161186393929190612948565b6020604051808303816000875af1158015611882573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118a691906128ae565b508160000151600160a060020a0316857f62443d575bf7812d1fbad6d42dca52303d2bac3919ca156db5f84fc667a4a8a5866040516118e5919061286d565b60405180910390a38060400151600160a060020a03168160200151600160a060020a03168260000151600160a060020a03167f2458504403156ef04185b3cb0aab362f0421374a9fccb513fcf87c416324d40e846060015160405161194c91815260200190565b60405180910390a46001925050505b92915050565b60015460405160e160020a633e8cf2cb0281526004810183905260009182918291829182918291600160a060020a0390911690637d19e5969060240160c060405180830381865afa1580156119ba573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061110f9190612a44565b6001546040517f097d9012000000000000000000000000000000000000000000000000000000008152600160a060020a0384811660048301528381166024830152600092169063097d9012906044015b602060405180830381865afa158015611a4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a6f9190612880565b9392505050565b6001546040805160e060020a63e1072a6f0281529051600092600160a060020a03169163e1072a6f9160048083019260209291908290030181865afa158015611ac3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ae79190612880565b905090565b600154600160a060020a031663b5c9cbbe8433611b0d866106a5848461242c565b6040518463ffffffff1660e060020a028152600401611b2e93929190612948565b6020604051808303816000875af1158015611b4d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b7191906128ae565b50604051600160a060020a0384169033907f76dacbd9b11b7bbe3372e54b4adc1eeb5724ff92f91142a1a45722c28582ebfd90600090a3505050565b6001546040805160e060020a63e1072a6f0281529051600092600160a060020a03169163e1072a6f9160048083019260209291908290030181865afa158015611bfa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c1e9190612880565b8211156040518060400160405280600681526020017f323430313031000000000000000000000000000000000000000000000000000081525090611c785760405160e560020a62461bcd0281526004016102e0919061286d565b50611c81612498565b60015460405160e160020a633e8cf2cb02815260048101859052600160a060020a0390911690637d19e5969060240160c060405180830381865afa158015611ccd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cf19190612a44565b151560a08701819052600160a060020a03918216608088015260608701929092529182166040808701919091529282166020808701919091529390911684528151808301909252600682527f32343031303200000000000000000000000000000000000000000000000000009282019290925290600114611d885760405160e560020a62461bcd0281526004016102e0919061286d565b508060200151600160a060020a031633600160a060020a03161480611dc257508060800151600160a060020a031633600160a060020a0316145b6040518060400160405280600681526020017f323430313033000000000000000000000000000000000000000000000000000081525090611e195760405160e560020a62461bcd0281526004016102e0919061286d565b508060000151600160a060020a031663200d2ed26040518163ffffffff1660e060020a028152600401602060405180830381865afa158015611e5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e8391906128ae565b60408051808201909152600681527f32343031303400000000000000000000000000000000000000000000000000006020820152901515600114611edd5760405160e560020a62461bcd0281526004016102e0919061286d565b50600154602082015182516060840151600160a060020a039093169263b5c9cbbe929190611f0f906106a5848461242c565b6040518463ffffffff1660e060020a028152600401611f3093929190612948565b6020604051808303816000875af1158015611f4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f7391906128ae565b50600154602082015182516060840151600160a060020a039093169263d04c23af929190611fa59061061984846119de565b6040518463ffffffff1660e060020a028152600401611fc693929190612948565b6020604051808303816000875af1158015611fe5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061200991906128ae565b506001548151602083015160408085015160608601516080870151925160e060020a63a176130f028152600160a060020a039096169563a176130f9561205f958b9591949093909290919060009060040161290b565b600060405180830381600087803b15801561207957600080fd5b505af115801561208d573d6000803e3d6000fd5b505050508060000151600160a060020a0316636f3b993f6040518163ffffffff1660e060020a028152600401602060405180830381865afa1580156120d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120fa91906128ae565b151560010361229c5761210b6124cd565b60015460405160e260020a630f44510502815260048101869052600160a060020a0390911690633d11441490602401600060405180830381865afa158015612157573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261217f9190810190612b09565b151560a0870152151560808601521515606085015260408401526020830152600160a060020a03168082521561229a5760015481516020830151604080850151608086015160a0870151925160e060020a63e3fd3739028152600160a060020a039096169563e3fd373995612202958c9591949093909260009290600401612b97565b600060405180830381600087803b15801561221c57600080fd5b505af1158015612230573d6000803e3d6000fd5b505050508160000151600160a060020a0316847f426a679496b8b028e297fc27a10dd4b7c4821639be5aad6a933335688fb5d13a84602001518560400151604051612291929190600160a060020a0392831681529116602082015260400190565b60405180910390a35b505b8060000151600160a060020a0316837fb7241699ec523a0e284a889e67fe27f7edc6a22e528c418f4de4b0870fa3b25283602001518460400151856060015186608001516040516122f09493929190612bf3565b60405180910390a350600192915050565b60005460408051808201909152600681527f3530303030310000000000000000000000000000000000000000000000000000602082015290600160a060020a031633146123645760405160e560020a62461bcd0281526004016102e0919061286d565b5060408051808201909152600681527f35303031303100000000000000000000000000000000000000000000000000006020820152600160a060020a0382166123c35760405160e560020a62461bcd0281526004016102e0919061286d565b5060008054604051600160a060020a03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b6001546040517fd4fac45d000000000000000000000000000000000000000000000000000000008152600160a060020a0384811660048301528381166024830152600092169063d4fac45d90604401611a2e565b6000611a6f8284612c3b565b6000611a6f82846128f8565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a081019190915290565b6040805160c08101825260008082526060602083018190529282018390529181018290526080810182905260a081019190915290565b600160a060020a038116811461251857600080fd5b50565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156125735761257361251b565b604052919050565b600067ffffffffffffffff8211156125955761259561251b565b50601f01601f191660200190565b60006125b66125b18461257b565b61254a565b90508281528383830111156125ca57600080fd5b828260208301376000602084830101529392505050565b600082601f8301126125f257600080fd5b611a6f838335602085016125a3565b60008060008060008060c0878903121561261a57600080fd5b863561262581612503565b9550602087013561263581612503565b945060408701359350606087013561264c81612503565b9250608087013567ffffffffffffffff8082111561266957600080fd5b6126758a838b016125e1565b935060a089013591508082111561268b57600080fd5b5061269889828a016125e1565b9150509295509295509295565b6000602082840312156126b757600080fd5b5035919050565b60005b838110156126d95781810151838201526020016126c1565b50506000910152565b600081518084526126fa8160208601602086016126be565b601f01601f19169290920160200192915050565b600160a060020a038716815260c06020820152600061273060c08301886126e2565b828103604084015261274281886126e2565b951515606084015250509115156080830152151560a0909101529392505050565b60006020828403121561277557600080fd5b8135611a6f81612503565b6000806040838503121561279357600080fd5b82359150602083013567ffffffffffffffff8111156127b157600080fd5b6127bd858286016125e1565b9150509250929050565b600080604083850312156127da57600080fd5b82356127e581612503565b915060208301356127f581612503565b809150509250929050565b60008060006060848603121561281557600080fd5b833561282081612503565b925060208401359150604084013567ffffffffffffffff81111561284357600080fd5b8401601f8101861361285457600080fd5b612863868235602084016125a3565b9150509250925092565b602081526000611a6f60208301846126e2565b60006020828403121561289257600080fd5b5051919050565b805180151581146128a957600080fd5b919050565b6000602082840312156128c057600080fd5b611a6f82612899565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8082018082111561195b5761195b6128c9565b968752600160a060020a03958616602088015293851660408701529184166060860152608085015290911660a0830152151560c082015260e00190565b600160a060020a039384168152919092166020820152604081019190915260600190565b868152600160a060020a038616602082015260e06040820152600061299460e08301876126e2565b82810360608401526000815294151560808301525091151560a0830152151560c0909101526020019392505050565b6000600160a060020a038087168352808616602084015250836040830152608060608301526129f560808301846126e2565b9695505050505050565b6000600160a060020a038088168352808716602084015285604084015280851660608401525060a06080830152612a3960a08301846126e2565b979650505050505050565b60008060008060008060c08789031215612a5d57600080fd5b8651612a6881612503565b6020880151909650612a7981612503565b6040880151909550612a8a81612503565b606088015160808901519195509350612aa281612503565b9150612ab060a08801612899565b90509295509295509295565b600082601f830112612acd57600080fd5b8151612adb6125b18261257b565b818152846020838601011115612af057600080fd5b612b018260208301602087016126be565b949350505050565b60008060008060008060c08789031215612b2257600080fd5b8651612b2d81612503565b602088015190965067ffffffffffffffff80821115612b4b57600080fd5b612b578a838b01612abc565b96506040890151915080821115612b6d57600080fd5b50612b7a89828a01612abc565b945050612b8960608801612899565b9250612aa260808801612899565b878152600160a060020a038716602082015260e060408201526000612bbf60e08301886126e2565b8281036060840152612bd181886126e2565b9515156080840152505091151560a0830152151560c090910152949350505050565b600160a060020a03948516815292841660208401526040830191909152909116606082015260800190565b600060208284031215612c3057600080fd5b8151611a6f81612503565b8181038181111561195b5761195b6128c956fea264697066735822122099a55caf57891677f414e741623c680e663287397b6ebe7f430a8ed43982b6af64736f6c63430008110033", - "deployedBytecode": "608060405234801561001057600080fd5b50600436106100ee5760003560e060020a900480638da5cb5b11610090578063c0ee0b8a1161006a578063c0ee0b8a14610236578063e01824361461024b578063f2fde38b1461025e578063f7888aec1461027157600080fd5b80638da5cb5b146101fa578063a2ee70431461020d578063b9ba93091461022e57600080fd5b806351cff8d9116100cc57806351cff8d9146101535780635ccef3e7146101665780637d19e5961461017957806385aa92a7146101cf57600080fd5b80630565f263146100f357806332f1d7b61461011b5780633d1144141461012e575b600080fd5b610106610101366004612601565b610284565b60405190151581526020015b60405180910390f35b6101066101293660046126a5565b61088e565b61014161013c3660046126a5565b61108d565b6040516101129695949392919061270e565b610106610161366004612763565b611123565b610106610174366004612780565b6112ea565b61018c6101873660046126a5565b611961565b60408051600160a060020a0397881681529587166020870152938616938501939093526060840191909152909216608082015290151560a082015260c001610112565b6001546101e290600160a060020a031681565b604051600160a060020a039091168152602001610112565b6000546101e290600160a060020a031681565b61022061021b3660046127c7565b6119de565b604051908152602001610112565b610220611a76565b610249610244366004612800565b611aec565b005b6101066102593660046126a5565b611bad565b61024961026c366004612763565b612301565b61022061027f3660046127c7565b61242c565b60008085116040518060400160405280600681526020017f3234303030310000000000000000000000000000000000000000000000000000815250906102e95760405160e560020a62461bcd0281526004016102e0919061286d565b60405180910390fd5b506001546040517fd4fac45d000000000000000000000000000000000000000000000000000000008152336004820152600160a060020a0389811660248301528792169063d4fac45d90604401602060405180830381865afa158015610353573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103779190612880565b10156040518060400160405280600681526020017f3234303030320000000000000000000000000000000000000000000000000000815250906103d05760405160e560020a62461bcd0281526004016102e0919061286d565b5086600160a060020a031663200d2ed26040518163ffffffff1660e060020a028152600401602060405180830381865afa158015610412573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061043691906128ae565b60408051808201909152600681527f323430303033000000000000000000000000000000000000000000000000000060208201529015156001146104905760405160e560020a62461bcd0281526004016102e0919061286d565b506001546040805160e060020a63e1072a6f0281529051600092600160a060020a03169163e1072a6f9160048083019260209291908290030181865afa1580156104de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105029190612880565b61050d9060016128f8565b6001546040517f5ff9a53800000000000000000000000000000000000000000000000000000000815260048101839052919250600160a060020a031690635ff9a53890602401600060405180830381600087803b15801561056d57600080fd5b505af1158015610581573d6000803e3d6000fd5b50506001805460405160e060020a63a176130f028152600160a060020a03909116935063a176130f92506105c49185918d9133918e918e918e919060040161290b565b600060405180830381600087803b1580156105de57600080fd5b505af11580156105f2573d6000803e3d6000fd5b5050600154600160a060020a0316915063b5c9cbbe9050338a61061f8a610619848461242c565b90612480565b6040518463ffffffff1660e060020a02815260040161064093929190612948565b6020604051808303816000875af115801561065f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061068391906128ae565b50600154600160a060020a031663d04c23af338a6106ab8a6106a584846119de565b9061248c565b6040518463ffffffff1660e060020a0281526004016106cc93929190612948565b6020604051808303816000875af11580156106eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061070f91906128ae565b5087600160a060020a0316636f3b993f6040518163ffffffff1660e060020a028152600401602060405180830381865afa158015610751573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061077591906128ae565b1515600103610836576001805460405160e060020a63e3fd3739028152600160a060020a039091169163e3fd3739916107bb9185918d918a91600090819060040161296c565b600060405180830381600087803b1580156107d557600080fd5b505af11580156107e9573d6000803e3d6000fd5b5050505087600160a060020a0316817f9e2bf80eea250aaee70b4427dfbf5a0ee2b4ac85e85cb98039b3f826228d58c0338a8a8960405161082d94939291906129c3565b60405180910390a35b87600160a060020a0316817f1dbd4daa45ed3a034e3815010a377d5cb8cb4d62a344214241cb650c1da77326338a8a8a896040516108789594939291906129ff565b60405180910390a3506001979650505050505050565b6001546040805160e060020a63e1072a6f0281529051600092600160a060020a03169163e1072a6f9160048083019260209291908290030181865afa1580156108db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ff9190612880565b8211156040518060400160405280600681526020017f3234303330310000000000000000000000000000000000000000000000000000815250906109595760405160e560020a62461bcd0281526004016102e0919061286d565b50610962612498565b60015460405160e160020a633e8cf2cb02815260048101859052600160a060020a0390911690637d19e5969060240160c060405180830381865afa1580156109ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109d29190612a44565b151560a08701819052600160a060020a03918216608088015260608701929092529182166040808701919091529282166020808701919091529390911684528151808301909252600682527f32343033303200000000000000000000000000000000000000000000000000009282019290925290600114610a695760405160e560020a62461bcd0281526004016102e0919061286d565b50608081015160408051808201909152600681527f3234303330330000000000000000000000000000000000000000000000000000602082015290600160a060020a03163314610acf5760405160e560020a62461bcd0281526004016102e0919061286d565b508060000151600160a060020a031663200d2ed26040518163ffffffff1660e060020a028152600401602060405180830381865afa158015610b15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b3991906128ae565b60408051808201909152600681527f32343033303400000000000000000000000000000000000000000000000000006020820152901515600114610b935760405160e560020a62461bcd0281526004016102e0919061286d565b508060000151600160a060020a0316636f3b993f6040518163ffffffff1660e060020a028152600401602060405180830381865afa158015610bd9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bfd91906128ae565b1515600103610e0957610c0e6124cd565b60015460405160e260020a630f44510502815260048101869052600160a060020a0390911690633d11441490602401600060405180830381865afa158015610c5a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610c829190810190612b09565b151560a08701819052901515608087015290151560608601819052604080870184905260208701859052600160a060020a0395861680885260018054925160e060020a63e3fd3739028152929097169663e3fd373996610cf0968d9693959194909391929190600401612b97565b600060405180830381600087803b158015610d0a57600080fd5b505af1158015610d1e573d6000803e3d6000fd5b505060015484516020860151604080880151606089015160808a0151925160e060020a63a176130f028152600160a060020a03909616975063a176130f9650610d71958c9594939060009060040161290b565b600060405180830381600087803b158015610d8b57600080fd5b505af1158015610d9f573d6000803e3d6000fd5b50505050600115158260000151600160a060020a0316857f6282741ab3cb1a17664f3c76a91d6f6ad4e3ec1f046c9cc1716745b729d955cd8560200151866040015187606001518860800151604051610dfb9493929190612bf3565b60405180910390a450611084565b600154604082015182516060840151600160a060020a039093169263b5c9cbbe929190610e3a906106a5848461242c565b6040518463ffffffff1660e060020a028152600401610e5b93929190612948565b6020604051808303816000875af1158015610e7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e9e91906128ae565b50600154602082015182516060840151600160a060020a039093169263d04c23af929190610ed09061061984846119de565b6040518463ffffffff1660e060020a028152600401610ef193929190612948565b6020604051808303816000875af1158015610f10573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f3491906128ae565b506001548151602083015160408085015160608601516080870151925160e060020a63a176130f028152600160a060020a039096169563a176130f95610f8a958b9591949093909290919060009060040161290b565b600060405180830381600087803b158015610fa457600080fd5b505af1158015610fb8573d6000803e3d6000fd5b50505050600015158160000151600160a060020a0316847f6282741ab3cb1a17664f3c76a91d6f6ad4e3ec1f046c9cc1716745b729d955cd84602001518560400151866060015187608001516040516110149493929190612bf3565b60405180910390a48060400151600160a060020a03168160200151600160a060020a03168260000151600160a060020a03167f2458504403156ef04185b3cb0aab362f0421374a9fccb513fcf87c416324d40e846060015160405161107b91815260200190565b60405180910390a45b50600192915050565b60015460405160e260020a630f445105028152600481018390526000916060918291849182918291600160a060020a0390911690633d11441490602401600060405180830381865afa1580156110e7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261110f9190810190612b09565b949c939b5091995097509550909350915050565b600080611130338461242c565b9050600081116040518060400160405280600681526020017f32343034303100000000000000000000000000000000000000000000000000008152509061118d5760405160e560020a62461bcd0281526004016102e0919061286d565b506040517fa9059cbb00000000000000000000000000000000000000000000000000000000815233600482015260248101829052600160a060020a0384169063a9059cbb906044016020604051808303816000875af11580156111f4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061121891906128ae565b506001546040517fb5c9cbbe000000000000000000000000000000000000000000000000000000008152600160a060020a039091169063b5c9cbbe906112679033908790600090600401612948565b6020604051808303816000875af1158015611286573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112aa91906128ae565b506040513390600160a060020a038516907f85b9d5ac4b95740dafd1b47130d38b5f34a9104dd14b1c88a2fb5a44c3a00ce790600090a350600192915050565b60006112f46124cd565b60015460405160e260020a630f44510502815260048101869052600160a060020a0390911690633d11441490602401600060405180830381865afa158015611340573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526113689190810190612b09565b151560a0870152151560808601521515606085015260408401526020830152600160a060020a0316815261139a612498565b60015460405160e160020a633e8cf2cb02815260048101879052600160a060020a0390911690637d19e5969060240160c060405180830381865afa1580156113e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061140a9190612a44565b151560a0870152600160a060020a0390811660808701526060860191909152908116604080860191909152918116602080860191909152928116845284518251808401909352600683527f32343032303100000000000000000000000000000000000000000000000000009383019390935290911661149f5760405160e560020a62461bcd0281526004016102e0919061286d565b508160000151600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381865afa1580156114e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115099190612c1e565b600160a060020a031633600160a060020a0316146040518060400160405280600681526020017f3234303230320000000000000000000000000000000000000000000000000000815250906115745760405160e560020a62461bcd0281526004016102e0919061286d565b50606082015160408051808201909152600681527f323430323033000000000000000000000000000000000000000000000000000060208201529015156001146115d45760405160e560020a62461bcd0281526004016102e0919061286d565b50608082015160408051808201909152600681527f323430323034000000000000000000000000000000000000000000000000000060208201529015156001146116345760405160e560020a62461bcd0281526004016102e0919061286d565b508060000151600160a060020a031663200d2ed26040518163ffffffff1660e060020a028152600401602060405180830381865afa15801561167a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061169e91906128ae565b60408051808201909152600681527f323430323035000000000000000000000000000000000000000000000000000060208201529015156001146116f85760405160e560020a62461bcd0281526004016102e0919061286d565b5060018054835160208501516060860151608087015160405160e060020a63e3fd3739028152600160a060020a039095169563e3fd373995611749958d95909490938d939192909190600401612b97565b600060405180830381600087803b15801561176357600080fd5b505af1158015611777573d6000803e3d6000fd5b5050600154604084015184516060860151600160a060020a03909316945063b5c9cbbe935090916117ac906106a5848461242c565b6040518463ffffffff1660e060020a0281526004016117cd93929190612948565b6020604051808303816000875af11580156117ec573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061181091906128ae565b50600154602082015182516060840151600160a060020a039093169263d04c23af9291906118429061061984846119de565b6040518463ffffffff1660e060020a02815260040161186393929190612948565b6020604051808303816000875af1158015611882573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118a691906128ae565b508160000151600160a060020a0316857f62443d575bf7812d1fbad6d42dca52303d2bac3919ca156db5f84fc667a4a8a5866040516118e5919061286d565b60405180910390a38060400151600160a060020a03168160200151600160a060020a03168260000151600160a060020a03167f2458504403156ef04185b3cb0aab362f0421374a9fccb513fcf87c416324d40e846060015160405161194c91815260200190565b60405180910390a46001925050505b92915050565b60015460405160e160020a633e8cf2cb0281526004810183905260009182918291829182918291600160a060020a0390911690637d19e5969060240160c060405180830381865afa1580156119ba573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061110f9190612a44565b6001546040517f097d9012000000000000000000000000000000000000000000000000000000008152600160a060020a0384811660048301528381166024830152600092169063097d9012906044015b602060405180830381865afa158015611a4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a6f9190612880565b9392505050565b6001546040805160e060020a63e1072a6f0281529051600092600160a060020a03169163e1072a6f9160048083019260209291908290030181865afa158015611ac3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ae79190612880565b905090565b600154600160a060020a031663b5c9cbbe8433611b0d866106a5848461242c565b6040518463ffffffff1660e060020a028152600401611b2e93929190612948565b6020604051808303816000875af1158015611b4d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b7191906128ae565b50604051600160a060020a0384169033907f76dacbd9b11b7bbe3372e54b4adc1eeb5724ff92f91142a1a45722c28582ebfd90600090a3505050565b6001546040805160e060020a63e1072a6f0281529051600092600160a060020a03169163e1072a6f9160048083019260209291908290030181865afa158015611bfa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c1e9190612880565b8211156040518060400160405280600681526020017f323430313031000000000000000000000000000000000000000000000000000081525090611c785760405160e560020a62461bcd0281526004016102e0919061286d565b50611c81612498565b60015460405160e160020a633e8cf2cb02815260048101859052600160a060020a0390911690637d19e5969060240160c060405180830381865afa158015611ccd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cf19190612a44565b151560a08701819052600160a060020a03918216608088015260608701929092529182166040808701919091529282166020808701919091529390911684528151808301909252600682527f32343031303200000000000000000000000000000000000000000000000000009282019290925290600114611d885760405160e560020a62461bcd0281526004016102e0919061286d565b508060200151600160a060020a031633600160a060020a03161480611dc257508060800151600160a060020a031633600160a060020a0316145b6040518060400160405280600681526020017f323430313033000000000000000000000000000000000000000000000000000081525090611e195760405160e560020a62461bcd0281526004016102e0919061286d565b508060000151600160a060020a031663200d2ed26040518163ffffffff1660e060020a028152600401602060405180830381865afa158015611e5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e8391906128ae565b60408051808201909152600681527f32343031303400000000000000000000000000000000000000000000000000006020820152901515600114611edd5760405160e560020a62461bcd0281526004016102e0919061286d565b50600154602082015182516060840151600160a060020a039093169263b5c9cbbe929190611f0f906106a5848461242c565b6040518463ffffffff1660e060020a028152600401611f3093929190612948565b6020604051808303816000875af1158015611f4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f7391906128ae565b50600154602082015182516060840151600160a060020a039093169263d04c23af929190611fa59061061984846119de565b6040518463ffffffff1660e060020a028152600401611fc693929190612948565b6020604051808303816000875af1158015611fe5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061200991906128ae565b506001548151602083015160408085015160608601516080870151925160e060020a63a176130f028152600160a060020a039096169563a176130f9561205f958b9591949093909290919060009060040161290b565b600060405180830381600087803b15801561207957600080fd5b505af115801561208d573d6000803e3d6000fd5b505050508060000151600160a060020a0316636f3b993f6040518163ffffffff1660e060020a028152600401602060405180830381865afa1580156120d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120fa91906128ae565b151560010361229c5761210b6124cd565b60015460405160e260020a630f44510502815260048101869052600160a060020a0390911690633d11441490602401600060405180830381865afa158015612157573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261217f9190810190612b09565b151560a0870152151560808601521515606085015260408401526020830152600160a060020a03168082521561229a5760015481516020830151604080850151608086015160a0870151925160e060020a63e3fd3739028152600160a060020a039096169563e3fd373995612202958c9591949093909260009290600401612b97565b600060405180830381600087803b15801561221c57600080fd5b505af1158015612230573d6000803e3d6000fd5b505050508160000151600160a060020a0316847f426a679496b8b028e297fc27a10dd4b7c4821639be5aad6a933335688fb5d13a84602001518560400151604051612291929190600160a060020a0392831681529116602082015260400190565b60405180910390a35b505b8060000151600160a060020a0316837fb7241699ec523a0e284a889e67fe27f7edc6a22e528c418f4de4b0870fa3b25283602001518460400151856060015186608001516040516122f09493929190612bf3565b60405180910390a350600192915050565b60005460408051808201909152600681527f3530303030310000000000000000000000000000000000000000000000000000602082015290600160a060020a031633146123645760405160e560020a62461bcd0281526004016102e0919061286d565b5060408051808201909152600681527f35303031303100000000000000000000000000000000000000000000000000006020820152600160a060020a0382166123c35760405160e560020a62461bcd0281526004016102e0919061286d565b5060008054604051600160a060020a03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b6001546040517fd4fac45d000000000000000000000000000000000000000000000000000000008152600160a060020a0384811660048301528381166024830152600092169063d4fac45d90604401611a2e565b6000611a6f8284612c3b565b6000611a6f82846128f8565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a081019190915290565b6040805160c08101825260008082526060602083018190529282018390529181018290526080810182905260a081019190915290565b600160a060020a038116811461251857600080fd5b50565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156125735761257361251b565b604052919050565b600067ffffffffffffffff8211156125955761259561251b565b50601f01601f191660200190565b60006125b66125b18461257b565b61254a565b90508281528383830111156125ca57600080fd5b828260208301376000602084830101529392505050565b600082601f8301126125f257600080fd5b611a6f838335602085016125a3565b60008060008060008060c0878903121561261a57600080fd5b863561262581612503565b9550602087013561263581612503565b945060408701359350606087013561264c81612503565b9250608087013567ffffffffffffffff8082111561266957600080fd5b6126758a838b016125e1565b935060a089013591508082111561268b57600080fd5b5061269889828a016125e1565b9150509295509295509295565b6000602082840312156126b757600080fd5b5035919050565b60005b838110156126d95781810151838201526020016126c1565b50506000910152565b600081518084526126fa8160208601602086016126be565b601f01601f19169290920160200192915050565b600160a060020a038716815260c06020820152600061273060c08301886126e2565b828103604084015261274281886126e2565b951515606084015250509115156080830152151560a0909101529392505050565b60006020828403121561277557600080fd5b8135611a6f81612503565b6000806040838503121561279357600080fd5b82359150602083013567ffffffffffffffff8111156127b157600080fd5b6127bd858286016125e1565b9150509250929050565b600080604083850312156127da57600080fd5b82356127e581612503565b915060208301356127f581612503565b809150509250929050565b60008060006060848603121561281557600080fd5b833561282081612503565b925060208401359150604084013567ffffffffffffffff81111561284357600080fd5b8401601f8101861361285457600080fd5b612863868235602084016125a3565b9150509250925092565b602081526000611a6f60208301846126e2565b60006020828403121561289257600080fd5b5051919050565b805180151581146128a957600080fd5b919050565b6000602082840312156128c057600080fd5b611a6f82612899565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8082018082111561195b5761195b6128c9565b968752600160a060020a03958616602088015293851660408701529184166060860152608085015290911660a0830152151560c082015260e00190565b600160a060020a039384168152919092166020820152604081019190915260600190565b868152600160a060020a038616602082015260e06040820152600061299460e08301876126e2565b82810360608401526000815294151560808301525091151560a0830152151560c0909101526020019392505050565b6000600160a060020a038087168352808616602084015250836040830152608060608301526129f560808301846126e2565b9695505050505050565b6000600160a060020a038088168352808716602084015285604084015280851660608401525060a06080830152612a3960a08301846126e2565b979650505050505050565b60008060008060008060c08789031215612a5d57600080fd5b8651612a6881612503565b6020880151909650612a7981612503565b6040880151909550612a8a81612503565b606088015160808901519195509350612aa281612503565b9150612ab060a08801612899565b90509295509295509295565b600082601f830112612acd57600080fd5b8151612adb6125b18261257b565b818152846020838601011115612af057600080fd5b612b018260208301602087016126be565b949350505050565b60008060008060008060c08789031215612b2257600080fd5b8651612b2d81612503565b602088015190965067ffffffffffffffff80821115612b4b57600080fd5b612b578a838b01612abc565b96506040890151915080821115612b6d57600080fd5b50612b7a89828a01612abc565b945050612b8960608801612899565b9250612aa260808801612899565b878152600160a060020a038716602082015260e060408201526000612bbf60e08301886126e2565b8281036060840152612bd181886126e2565b9515156080840152505091151560a0830152151560c090910152949350505050565b600160a060020a03948516815292841660208401526040830191909152909116606082015260800190565b600060208284031215612c3057600080fd5b8151611a6f81612503565b8181038181111561195b5761195b6128c956fea264697066735822122099a55caf57891677f414e741623c680e663287397b6ebe7f430a8ed43982b6af64736f6c63430008110033" + "bytecode": "60806040523480156200001157600080fd5b5060405162002ae738038062002ae7833981016040819052620000349162000068565b60008054336001600160a01b031991821617909155600180549091166001600160a01b03929092169190911790556200009a565b6000602082840312156200007b57600080fd5b81516001600160a01b03811681146200009357600080fd5b9392505050565b612a3d80620000aa6000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80638da5cb5b11610097578063c0ee0b8a11610066578063c0ee0b8a14610250578063e018243614610265578063f2fde38b14610278578063f7888aec1461028b57600080fd5b80638da5cb5b1461020157806391870a6114610214578063a2ee704314610227578063b9ba93091461024857600080fd5b806351cff8d9116100d357806351cff8d91461015a5780635ccef3e71461016d5780637d19e5961461018057806385aa92a7146101d657600080fd5b80630565f263146100fa57806332f1d7b6146101225780633d11441414610135575b600080fd5b61010d610108366004612340565b61029e565b60405190151581526020015b60405180910390f35b61010d6101303660046123e4565b610813565b6101486101433660046123e4565b610f8c565b6040516101199695949392919061244d565b61010d6101683660046124a4565b61101f565b61010d61017b3660046124c1565b61119a565b61019361018e3660046123e4565b61177a565b604080516001600160a01b0397881681529587166020870152938616938501939093526060840191909152909216608082015290151560a082015260c001610119565b6001546101e9906001600160a01b031681565b6040516001600160a01b039091168152602001610119565b6000546101e9906001600160a01b031681565b61010d610222366004612508565b6117f4565b61023a61023536600461257d565b611832565b604051908152602001610119565b61023a6118b1565b61026361025e3660046125b6565b611924565b005b61010d6102733660046123e4565b6119e2565b6102636102863660046124a4565b6120b3565b61023a61029936600461257d565b61219d565b60008085116040518060400160405280600681526020016532343030303160d01b815250906102e95760405162461bcd60e51b81526004016102e09190612623565b60405180910390fd5b5060015460405163d4fac45d60e01b81523360048201526001600160a01b0389811660248301528792169063d4fac45d90604401602060405180830381865afa15801561033a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061035e9190612636565b101560405180604001604052806006815260200165191a1818181960d11b8152509061039d5760405162461bcd60e51b81526004016102e09190612623565b50866001600160a01b031663200d2ed26040518163ffffffff1660e01b8152600401602060405180830381865afa1580156103dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104009190612664565b60408051808201909152600681526532343030303360d01b60208201529015156001146104405760405162461bcd60e51b81526004016102e09190612623565b506001546040805163e1072a6f60e01b815290516000926001600160a01b03169163e1072a6f9160048083019260209291908290030181865afa15801561048b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104af9190612636565b6104ba906001612695565b600154604051630bff34a760e31b8152600481018390529192506001600160a01b031690635ff9a53890602401600060405180830381600087803b15801561050157600080fd5b505af1158015610515573d6000803e3d6000fd5b50506001805460405163a176130f60e01b81526001600160a01b03909116935063a176130f92506105559185918d9133918e918e918e91906004016126a8565b600060405180830381600087803b15801561056f57600080fd5b505af1158015610583573d6000803e3d6000fd5b50506001546001600160a01b0316915063b5c9cbbe9050338a6105b08a6105aa848461219d565b906121d8565b6040518463ffffffff1660e01b81526004016105ce939291906126e5565b6020604051808303816000875af11580156105ed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106119190612664565b506001546001600160a01b031663d04c23af338a6106398a6106338484611832565b906121e4565b6040518463ffffffff1660e01b8152600401610657939291906126e5565b6020604051808303816000875af1158015610676573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061069a9190612664565b50876001600160a01b0316636f3b993f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106fd9190612664565b15156001036107bb576001805460405163e3fd373960e01b81526001600160a01b039091169163e3fd3739916107409185918d918a916000908190600401612709565b600060405180830381600087803b15801561075a57600080fd5b505af115801561076e573d6000803e3d6000fd5b50505050876001600160a01b0316817f9e2bf80eea250aaee70b4427dfbf5a0ee2b4ac85e85cb98039b3f826228d58c0338a8a896040516107b29493929190612762565b60405180910390a35b876001600160a01b0316817f1dbd4daa45ed3a034e3815010a377d5cb8cb4d62a344214241cb650c1da77326338a8a8a896040516107fd95949392919061279f565b60405180910390a3506001979650505050505050565b6001546040805163e1072a6f60e01b815290516000926001600160a01b03169163e1072a6f9160048083019260209291908290030181865afa15801561085d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108819190612636565b8211156040518060400160405280600681526020016532343033303160d01b815250906108c15760405162461bcd60e51b81526004016102e09190612623565b506108ca6121f0565b600154604051633e8cf2cb60e11b8152600481018590526001600160a01b0390911690637d19e5969060240160c060405180830381865afa158015610913573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061093791906127e5565b151560a087018190526001600160a01b039182166080880152606087019290925291821660408087019190915292821660208087019190915293909116845281518083019092526006825265191a1819981960d11b92820192909252906001146109b45760405162461bcd60e51b81526004016102e09190612623565b50608081015160408051808201909152600681526532343033303360d01b6020820152906001600160a01b03163314610a005760405162461bcd60e51b81526004016102e09190612623565b5080600001516001600160a01b031663200d2ed26040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a679190612664565b6040805180820190915260068152650c8d0c0ccc0d60d21b6020820152901515600114610aa75760405162461bcd60e51b81526004016102e09190612623565b5080600001516001600160a01b0316636f3b993f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610aea573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b0e9190612664565b1515600103610d1157610b1f612225565b600154604051630f44510560e21b8152600481018690526001600160a01b0390911690633d11441490602401600060405180830381865afa158015610b68573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610b9091908101906128aa565b151560a087018190529015156080870152901515606086018190526040808701849052602087018590526001600160a01b0395861680885260018054925163e3fd373960e01b8152929097169663e3fd373996610bfb968d9693959194909391929190600401612938565b600060405180830381600087803b158015610c1557600080fd5b505af1158015610c29573d6000803e3d6000fd5b505060015484516020860151604080880151606089015160808a0151925163a176130f60e01b81526001600160a01b03909616975063a176130f9650610c79958c959493906000906004016126a8565b600060405180830381600087803b158015610c9357600080fd5b505af1158015610ca7573d6000803e3d6000fd5b505050506001151582600001516001600160a01b0316857f6282741ab3cb1a17664f3c76a91d6f6ad4e3ec1f046c9cc1716745b729d955cd8560200151866040015187606001518860800151604051610d039493929190612996565b60405180910390a450610f83565b6001546040820151825160608401516001600160a01b039093169263b5c9cbbe929190610d4290610633848461219d565b6040518463ffffffff1660e01b8152600401610d60939291906126e5565b6020604051808303816000875af1158015610d7f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610da39190612664565b506001546020820151825160608401516001600160a01b039093169263d04c23af929190610dd5906105aa8484611832565b6040518463ffffffff1660e01b8152600401610df3939291906126e5565b6020604051808303816000875af1158015610e12573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e369190612664565b506001548151602083015160408085015160608601516080870151925163a176130f60e01b81526001600160a01b039096169563a176130f95610e89958b959194909390929091906000906004016126a8565b600060405180830381600087803b158015610ea357600080fd5b505af1158015610eb7573d6000803e3d6000fd5b505050506000151581600001516001600160a01b0316847f6282741ab3cb1a17664f3c76a91d6f6ad4e3ec1f046c9cc1716745b729d955cd8460200151856040015186606001518760800151604051610f139493929190612996565b60405180910390a480604001516001600160a01b031681602001516001600160a01b031682600001516001600160a01b03167f2458504403156ef04185b3cb0aab362f0421374a9fccb513fcf87c416324d40e8460600151604051610f7a91815260200190565b60405180910390a45b50600192915050565b600154604051630f44510560e21b81526004810183905260009160609182918491829182916001600160a01b0390911690633d11441490602401600060405180830381865afa158015610fe3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261100b91908101906128aa565b949c939b5091995097509550909350915050565b60008061102c338461219d565b9050600081116040518060400160405280600681526020016532343034303160d01b8152509061106f5760405162461bcd60e51b81526004016102e09190612623565b5060405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0384169063a9059cbb906044016020604051808303816000875af11580156110bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110e19190612664565b50600154604051635ae4e5df60e11b81526001600160a01b039091169063b5c9cbbe9061111790339087906000906004016126e5565b6020604051808303816000875af1158015611136573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061115a9190612664565b5060405133906001600160a01b038516907f85b9d5ac4b95740dafd1b47130d38b5f34a9104dd14b1c88a2fb5a44c3a00ce790600090a350600192915050565b60006111a4612225565b600154604051630f44510560e21b8152600481018690526001600160a01b0390911690633d11441490602401600060405180830381865afa1580156111ed573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261121591908101906128aa565b151560a08701521515608086015215156060850152604084015260208301526001600160a01b031681526112476121f0565b600154604051633e8cf2cb60e11b8152600481018790526001600160a01b0390911690637d19e5969060240160c060405180830381865afa158015611290573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112b491906127e5565b151560a08701526001600160a01b0390811660808701526060860191909152908116604080860191909152918116602080860191909152928116845284518251808401909352600683526532343032303160d01b9383019390935290911661132f5760405162461bcd60e51b81526004016102e09190612623565b5081600001516001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611372573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061139691906129c1565b6001600160a01b0316336001600160a01b03161460405180604001604052806006815260200165191a1819181960d11b815250906113e75760405162461bcd60e51b81526004016102e09190612623565b50606082015160408051808201909152600681526532343032303360d01b602082015290151560011461142d5760405162461bcd60e51b81526004016102e09190612623565b5060808201516040805180820190915260068152650c8d0c0c8c0d60d21b60208201529015156001146114735760405162461bcd60e51b81526004016102e09190612623565b5080600001516001600160a01b031663200d2ed26040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114da9190612664565b60408051808201909152600681526532343032303560d01b602082015290151560011461151a5760405162461bcd60e51b81526004016102e09190612623565b5060018054835160208501516060860151608087015160405163e3fd373960e01b81526001600160a01b039095169563e3fd373995611568958d95909490938d939192909190600401612938565b600060405180830381600087803b15801561158257600080fd5b505af1158015611596573d6000803e3d6000fd5b50506001546040840151845160608601516001600160a01b03909316945063b5c9cbbe935090916115cb90610633848461219d565b6040518463ffffffff1660e01b81526004016115e9939291906126e5565b6020604051808303816000875af1158015611608573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061162c9190612664565b506001546020820151825160608401516001600160a01b039093169263d04c23af92919061165e906105aa8484611832565b6040518463ffffffff1660e01b815260040161167c939291906126e5565b6020604051808303816000875af115801561169b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116bf9190612664565b5081600001516001600160a01b0316857f62443d575bf7812d1fbad6d42dca52303d2bac3919ca156db5f84fc667a4a8a5866040516116fe9190612623565b60405180910390a380604001516001600160a01b031681602001516001600160a01b031682600001516001600160a01b03167f2458504403156ef04185b3cb0aab362f0421374a9fccb513fcf87c416324d40e846060015160405161176591815260200190565b60405180910390a46001925050505b92915050565b600154604051633e8cf2cb60e11b815260048101839052600091829182918291829182916001600160a01b0390911690637d19e5969060240160c060405180830381865afa1580156117d0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061100b91906127e5565b6000805b8281101561182b57611821848483818110611815576118156129de565b90506020020135610813565b91506001016117f8565b5092915050565b6001546040516304bec80960e11b81526001600160a01b0384811660048301528381166024830152600092169063097d9012906044015b602060405180830381865afa158015611886573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118aa9190612636565b9392505050565b6001546040805163e1072a6f60e01b815290516000926001600160a01b03169163e1072a6f9160048083019260209291908290030181865afa1580156118fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061191f9190612636565b905090565b6001546001600160a01b031663b5c9cbbe843361194586610633848461219d565b6040518463ffffffff1660e01b8152600401611963939291906126e5565b6020604051808303816000875af1158015611982573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119a69190612664565b506040516001600160a01b0384169033907f76dacbd9b11b7bbe3372e54b4adc1eeb5724ff92f91142a1a45722c28582ebfd90600090a3505050565b6001546040805163e1072a6f60e01b815290516000926001600160a01b03169163e1072a6f9160048083019260209291908290030181865afa158015611a2c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a509190612636565b8211156040518060400160405280600681526020016532343031303160d01b81525090611a905760405162461bcd60e51b81526004016102e09190612623565b50611a996121f0565b600154604051633e8cf2cb60e11b8152600481018590526001600160a01b0390911690637d19e5969060240160c060405180830381865afa158015611ae2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b0691906127e5565b151560a087018190526001600160a01b039182166080880152606087019290925291821660408087019190915292821660208087019190915293909116845281518083019092526006825265191a1818981960d11b9282019290925290600114611b835760405162461bcd60e51b81526004016102e09190612623565b5080602001516001600160a01b0316336001600160a01b03161480611bbd575080608001516001600160a01b0316336001600160a01b0316145b6040518060400160405280600681526020016532343031303360d01b81525090611bfa5760405162461bcd60e51b81526004016102e09190612623565b5080600001516001600160a01b031663200d2ed26040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c619190612664565b6040805180820190915260068152650c8d0c0c4c0d60d21b6020820152901515600114611ca15760405162461bcd60e51b81526004016102e09190612623565b506001546020820151825160608401516001600160a01b039093169263b5c9cbbe929190611cd390610633848461219d565b6040518463ffffffff1660e01b8152600401611cf1939291906126e5565b6020604051808303816000875af1158015611d10573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d349190612664565b506001546020820151825160608401516001600160a01b039093169263d04c23af929190611d66906105aa8484611832565b6040518463ffffffff1660e01b8152600401611d84939291906126e5565b6020604051808303816000875af1158015611da3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dc79190612664565b506001548151602083015160408085015160608601516080870151925163a176130f60e01b81526001600160a01b039096169563a176130f95611e1a958b959194909390929091906000906004016126a8565b600060405180830381600087803b158015611e3457600080fd5b505af1158015611e48573d6000803e3d6000fd5b5050505080600001516001600160a01b0316636f3b993f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e8e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eb29190612664565b151560010361204e57611ec3612225565b600154604051630f44510560e21b8152600481018690526001600160a01b0390911690633d11441490602401600060405180830381865afa158015611f0c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611f3491908101906128aa565b151560a08701521515608086015215156060850152604084015260208301526001600160a01b03168082521561204c5760015481516020830151604080850151608086015160a0870151925163e3fd373960e01b81526001600160a01b039096169563e3fd373995611fb4958c9591949093909260009290600401612938565b600060405180830381600087803b158015611fce57600080fd5b505af1158015611fe2573d6000803e3d6000fd5b5050505081600001516001600160a01b0316847f426a679496b8b028e297fc27a10dd4b7c4821639be5aad6a933335688fb5d13a846020015185604001516040516120439291906001600160a01b0392831681529116602082015260400190565b60405180910390a35b505b80600001516001600160a01b0316837fb7241699ec523a0e284a889e67fe27f7edc6a22e528c418f4de4b0870fa3b25283602001518460400151856060015186608001516040516120a29493929190612996565b60405180910390a350600192915050565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b031633146120fc5760405162461bcd60e51b81526004016102e09190612623565b5060408051808201909152600681526535303031303160d01b60208201526001600160a01b0382166121415760405162461bcd60e51b81526004016102e09190612623565b50600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60015460405163d4fac45d60e01b81526001600160a01b0384811660048301528381166024830152600092169063d4fac45d90604401611869565b60006118aa82846129f4565b60006118aa8284612695565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a081019190915290565b6040805160c08101825260008082526060602083018190529282018390529181018290526080810182905260a081019190915290565b6001600160a01b038116811461227057600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156122b2576122b2612273565b604052919050565b600067ffffffffffffffff8211156122d4576122d4612273565b50601f01601f191660200190565b60006122f56122f0846122ba565b612289565b905082815283838301111561230957600080fd5b828260208301376000602084830101529392505050565b600082601f83011261233157600080fd5b6118aa838335602085016122e2565b60008060008060008060c0878903121561235957600080fd5b86356123648161225b565b955060208701356123748161225b565b945060408701359350606087013561238b8161225b565b9250608087013567ffffffffffffffff808211156123a857600080fd5b6123b48a838b01612320565b935060a08901359150808211156123ca57600080fd5b506123d789828a01612320565b9150509295509295509295565b6000602082840312156123f657600080fd5b5035919050565b60005b83811015612418578181015183820152602001612400565b50506000910152565b600081518084526124398160208601602086016123fd565b601f01601f19169290920160200192915050565b6001600160a01b038716815260c06020820181905260009061247190830188612421565b82810360408401526124838188612421565b951515606084015250509115156080830152151560a0909101529392505050565b6000602082840312156124b657600080fd5b81356118aa8161225b565b600080604083850312156124d457600080fd5b82359150602083013567ffffffffffffffff8111156124f257600080fd5b6124fe85828601612320565b9150509250929050565b6000806020838503121561251b57600080fd5b823567ffffffffffffffff8082111561253357600080fd5b818501915085601f83011261254757600080fd5b81358181111561255657600080fd5b8660208260051b850101111561256b57600080fd5b60209290920196919550909350505050565b6000806040838503121561259057600080fd5b823561259b8161225b565b915060208301356125ab8161225b565b809150509250929050565b6000806000606084860312156125cb57600080fd5b83356125d68161225b565b925060208401359150604084013567ffffffffffffffff8111156125f957600080fd5b8401601f8101861361260a57600080fd5b612619868235602084016122e2565b9150509250925092565b6020815260006118aa6020830184612421565b60006020828403121561264857600080fd5b5051919050565b8051801515811461265f57600080fd5b919050565b60006020828403121561267657600080fd5b6118aa8261264f565b634e487b7160e01b600052601160045260246000fd5b808201808211156117745761177461267f565b9687526001600160a01b03958616602088015293851660408701529184166060860152608085015290911660a0830152151560c082015260e00190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b8681526001600160a01b038616602082015260e06040820181905260009061273390830187612421565b82810360608401526000815294151560808301525091151560a0830152151560c0909101526020019392505050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061279590830184612421565b9695505050505050565b6001600160a01b0386811682528581166020830152604082018590528316606082015260a0608082018190526000906127da90830184612421565b979650505050505050565b60008060008060008060c087890312156127fe57600080fd5b86516128098161225b565b602088015190965061281a8161225b565b604088015190955061282b8161225b565b6060880151608089015191955093506128438161225b565b915061285160a0880161264f565b90509295509295509295565b600082601f83011261286e57600080fd5b815161287c6122f0826122ba565b81815284602083860101111561289157600080fd5b6128a28260208301602087016123fd565b949350505050565b60008060008060008060c087890312156128c357600080fd5b86516128ce8161225b565b602088015190965067ffffffffffffffff808211156128ec57600080fd5b6128f88a838b0161285d565b9650604089015191508082111561290e57600080fd5b5061291b89828a0161285d565b94505061292a6060880161264f565b92506128436080880161264f565b8781526001600160a01b038716602082015260e06040820181905260009061296290830188612421565b82810360608401526129748188612421565b9515156080840152505091151560a0830152151560c090910152949350505050565b6001600160a01b03948516815292841660208401526040830191909152909116606082015260800190565b6000602082840312156129d357600080fd5b81516118aa8161225b565b634e487b7160e01b600052603260045260246000fd5b818103818111156117745761177461267f56fea26469706673582212204df5acec61f06e9abaa39f319f8fa4f9ef1e1bd6a9001113ac461c628f8dca2f64736f6c63430008170033", + "deployedBytecode": "608060405234801561001057600080fd5b50600436106100f55760003560e01c80638da5cb5b11610097578063c0ee0b8a11610066578063c0ee0b8a14610250578063e018243614610265578063f2fde38b14610278578063f7888aec1461028b57600080fd5b80638da5cb5b1461020157806391870a6114610214578063a2ee704314610227578063b9ba93091461024857600080fd5b806351cff8d9116100d357806351cff8d91461015a5780635ccef3e71461016d5780637d19e5961461018057806385aa92a7146101d657600080fd5b80630565f263146100fa57806332f1d7b6146101225780633d11441414610135575b600080fd5b61010d610108366004612340565b61029e565b60405190151581526020015b60405180910390f35b61010d6101303660046123e4565b610813565b6101486101433660046123e4565b610f8c565b6040516101199695949392919061244d565b61010d6101683660046124a4565b61101f565b61010d61017b3660046124c1565b61119a565b61019361018e3660046123e4565b61177a565b604080516001600160a01b0397881681529587166020870152938616938501939093526060840191909152909216608082015290151560a082015260c001610119565b6001546101e9906001600160a01b031681565b6040516001600160a01b039091168152602001610119565b6000546101e9906001600160a01b031681565b61010d610222366004612508565b6117f4565b61023a61023536600461257d565b611832565b604051908152602001610119565b61023a6118b1565b61026361025e3660046125b6565b611924565b005b61010d6102733660046123e4565b6119e2565b6102636102863660046124a4565b6120b3565b61023a61029936600461257d565b61219d565b60008085116040518060400160405280600681526020016532343030303160d01b815250906102e95760405162461bcd60e51b81526004016102e09190612623565b60405180910390fd5b5060015460405163d4fac45d60e01b81523360048201526001600160a01b0389811660248301528792169063d4fac45d90604401602060405180830381865afa15801561033a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061035e9190612636565b101560405180604001604052806006815260200165191a1818181960d11b8152509061039d5760405162461bcd60e51b81526004016102e09190612623565b50866001600160a01b031663200d2ed26040518163ffffffff1660e01b8152600401602060405180830381865afa1580156103dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104009190612664565b60408051808201909152600681526532343030303360d01b60208201529015156001146104405760405162461bcd60e51b81526004016102e09190612623565b506001546040805163e1072a6f60e01b815290516000926001600160a01b03169163e1072a6f9160048083019260209291908290030181865afa15801561048b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104af9190612636565b6104ba906001612695565b600154604051630bff34a760e31b8152600481018390529192506001600160a01b031690635ff9a53890602401600060405180830381600087803b15801561050157600080fd5b505af1158015610515573d6000803e3d6000fd5b50506001805460405163a176130f60e01b81526001600160a01b03909116935063a176130f92506105559185918d9133918e918e918e91906004016126a8565b600060405180830381600087803b15801561056f57600080fd5b505af1158015610583573d6000803e3d6000fd5b50506001546001600160a01b0316915063b5c9cbbe9050338a6105b08a6105aa848461219d565b906121d8565b6040518463ffffffff1660e01b81526004016105ce939291906126e5565b6020604051808303816000875af11580156105ed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106119190612664565b506001546001600160a01b031663d04c23af338a6106398a6106338484611832565b906121e4565b6040518463ffffffff1660e01b8152600401610657939291906126e5565b6020604051808303816000875af1158015610676573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061069a9190612664565b50876001600160a01b0316636f3b993f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106fd9190612664565b15156001036107bb576001805460405163e3fd373960e01b81526001600160a01b039091169163e3fd3739916107409185918d918a916000908190600401612709565b600060405180830381600087803b15801561075a57600080fd5b505af115801561076e573d6000803e3d6000fd5b50505050876001600160a01b0316817f9e2bf80eea250aaee70b4427dfbf5a0ee2b4ac85e85cb98039b3f826228d58c0338a8a896040516107b29493929190612762565b60405180910390a35b876001600160a01b0316817f1dbd4daa45ed3a034e3815010a377d5cb8cb4d62a344214241cb650c1da77326338a8a8a896040516107fd95949392919061279f565b60405180910390a3506001979650505050505050565b6001546040805163e1072a6f60e01b815290516000926001600160a01b03169163e1072a6f9160048083019260209291908290030181865afa15801561085d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108819190612636565b8211156040518060400160405280600681526020016532343033303160d01b815250906108c15760405162461bcd60e51b81526004016102e09190612623565b506108ca6121f0565b600154604051633e8cf2cb60e11b8152600481018590526001600160a01b0390911690637d19e5969060240160c060405180830381865afa158015610913573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061093791906127e5565b151560a087018190526001600160a01b039182166080880152606087019290925291821660408087019190915292821660208087019190915293909116845281518083019092526006825265191a1819981960d11b92820192909252906001146109b45760405162461bcd60e51b81526004016102e09190612623565b50608081015160408051808201909152600681526532343033303360d01b6020820152906001600160a01b03163314610a005760405162461bcd60e51b81526004016102e09190612623565b5080600001516001600160a01b031663200d2ed26040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a679190612664565b6040805180820190915260068152650c8d0c0ccc0d60d21b6020820152901515600114610aa75760405162461bcd60e51b81526004016102e09190612623565b5080600001516001600160a01b0316636f3b993f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610aea573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b0e9190612664565b1515600103610d1157610b1f612225565b600154604051630f44510560e21b8152600481018690526001600160a01b0390911690633d11441490602401600060405180830381865afa158015610b68573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610b9091908101906128aa565b151560a087018190529015156080870152901515606086018190526040808701849052602087018590526001600160a01b0395861680885260018054925163e3fd373960e01b8152929097169663e3fd373996610bfb968d9693959194909391929190600401612938565b600060405180830381600087803b158015610c1557600080fd5b505af1158015610c29573d6000803e3d6000fd5b505060015484516020860151604080880151606089015160808a0151925163a176130f60e01b81526001600160a01b03909616975063a176130f9650610c79958c959493906000906004016126a8565b600060405180830381600087803b158015610c9357600080fd5b505af1158015610ca7573d6000803e3d6000fd5b505050506001151582600001516001600160a01b0316857f6282741ab3cb1a17664f3c76a91d6f6ad4e3ec1f046c9cc1716745b729d955cd8560200151866040015187606001518860800151604051610d039493929190612996565b60405180910390a450610f83565b6001546040820151825160608401516001600160a01b039093169263b5c9cbbe929190610d4290610633848461219d565b6040518463ffffffff1660e01b8152600401610d60939291906126e5565b6020604051808303816000875af1158015610d7f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610da39190612664565b506001546020820151825160608401516001600160a01b039093169263d04c23af929190610dd5906105aa8484611832565b6040518463ffffffff1660e01b8152600401610df3939291906126e5565b6020604051808303816000875af1158015610e12573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e369190612664565b506001548151602083015160408085015160608601516080870151925163a176130f60e01b81526001600160a01b039096169563a176130f95610e89958b959194909390929091906000906004016126a8565b600060405180830381600087803b158015610ea357600080fd5b505af1158015610eb7573d6000803e3d6000fd5b505050506000151581600001516001600160a01b0316847f6282741ab3cb1a17664f3c76a91d6f6ad4e3ec1f046c9cc1716745b729d955cd8460200151856040015186606001518760800151604051610f139493929190612996565b60405180910390a480604001516001600160a01b031681602001516001600160a01b031682600001516001600160a01b03167f2458504403156ef04185b3cb0aab362f0421374a9fccb513fcf87c416324d40e8460600151604051610f7a91815260200190565b60405180910390a45b50600192915050565b600154604051630f44510560e21b81526004810183905260009160609182918491829182916001600160a01b0390911690633d11441490602401600060405180830381865afa158015610fe3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261100b91908101906128aa565b949c939b5091995097509550909350915050565b60008061102c338461219d565b9050600081116040518060400160405280600681526020016532343034303160d01b8152509061106f5760405162461bcd60e51b81526004016102e09190612623565b5060405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0384169063a9059cbb906044016020604051808303816000875af11580156110bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110e19190612664565b50600154604051635ae4e5df60e11b81526001600160a01b039091169063b5c9cbbe9061111790339087906000906004016126e5565b6020604051808303816000875af1158015611136573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061115a9190612664565b5060405133906001600160a01b038516907f85b9d5ac4b95740dafd1b47130d38b5f34a9104dd14b1c88a2fb5a44c3a00ce790600090a350600192915050565b60006111a4612225565b600154604051630f44510560e21b8152600481018690526001600160a01b0390911690633d11441490602401600060405180830381865afa1580156111ed573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261121591908101906128aa565b151560a08701521515608086015215156060850152604084015260208301526001600160a01b031681526112476121f0565b600154604051633e8cf2cb60e11b8152600481018790526001600160a01b0390911690637d19e5969060240160c060405180830381865afa158015611290573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112b491906127e5565b151560a08701526001600160a01b0390811660808701526060860191909152908116604080860191909152918116602080860191909152928116845284518251808401909352600683526532343032303160d01b9383019390935290911661132f5760405162461bcd60e51b81526004016102e09190612623565b5081600001516001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611372573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061139691906129c1565b6001600160a01b0316336001600160a01b03161460405180604001604052806006815260200165191a1819181960d11b815250906113e75760405162461bcd60e51b81526004016102e09190612623565b50606082015160408051808201909152600681526532343032303360d01b602082015290151560011461142d5760405162461bcd60e51b81526004016102e09190612623565b5060808201516040805180820190915260068152650c8d0c0c8c0d60d21b60208201529015156001146114735760405162461bcd60e51b81526004016102e09190612623565b5080600001516001600160a01b031663200d2ed26040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114da9190612664565b60408051808201909152600681526532343032303560d01b602082015290151560011461151a5760405162461bcd60e51b81526004016102e09190612623565b5060018054835160208501516060860151608087015160405163e3fd373960e01b81526001600160a01b039095169563e3fd373995611568958d95909490938d939192909190600401612938565b600060405180830381600087803b15801561158257600080fd5b505af1158015611596573d6000803e3d6000fd5b50506001546040840151845160608601516001600160a01b03909316945063b5c9cbbe935090916115cb90610633848461219d565b6040518463ffffffff1660e01b81526004016115e9939291906126e5565b6020604051808303816000875af1158015611608573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061162c9190612664565b506001546020820151825160608401516001600160a01b039093169263d04c23af92919061165e906105aa8484611832565b6040518463ffffffff1660e01b815260040161167c939291906126e5565b6020604051808303816000875af115801561169b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116bf9190612664565b5081600001516001600160a01b0316857f62443d575bf7812d1fbad6d42dca52303d2bac3919ca156db5f84fc667a4a8a5866040516116fe9190612623565b60405180910390a380604001516001600160a01b031681602001516001600160a01b031682600001516001600160a01b03167f2458504403156ef04185b3cb0aab362f0421374a9fccb513fcf87c416324d40e846060015160405161176591815260200190565b60405180910390a46001925050505b92915050565b600154604051633e8cf2cb60e11b815260048101839052600091829182918291829182916001600160a01b0390911690637d19e5969060240160c060405180830381865afa1580156117d0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061100b91906127e5565b6000805b8281101561182b57611821848483818110611815576118156129de565b90506020020135610813565b91506001016117f8565b5092915050565b6001546040516304bec80960e11b81526001600160a01b0384811660048301528381166024830152600092169063097d9012906044015b602060405180830381865afa158015611886573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118aa9190612636565b9392505050565b6001546040805163e1072a6f60e01b815290516000926001600160a01b03169163e1072a6f9160048083019260209291908290030181865afa1580156118fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061191f9190612636565b905090565b6001546001600160a01b031663b5c9cbbe843361194586610633848461219d565b6040518463ffffffff1660e01b8152600401611963939291906126e5565b6020604051808303816000875af1158015611982573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119a69190612664565b506040516001600160a01b0384169033907f76dacbd9b11b7bbe3372e54b4adc1eeb5724ff92f91142a1a45722c28582ebfd90600090a3505050565b6001546040805163e1072a6f60e01b815290516000926001600160a01b03169163e1072a6f9160048083019260209291908290030181865afa158015611a2c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a509190612636565b8211156040518060400160405280600681526020016532343031303160d01b81525090611a905760405162461bcd60e51b81526004016102e09190612623565b50611a996121f0565b600154604051633e8cf2cb60e11b8152600481018590526001600160a01b0390911690637d19e5969060240160c060405180830381865afa158015611ae2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b0691906127e5565b151560a087018190526001600160a01b039182166080880152606087019290925291821660408087019190915292821660208087019190915293909116845281518083019092526006825265191a1818981960d11b9282019290925290600114611b835760405162461bcd60e51b81526004016102e09190612623565b5080602001516001600160a01b0316336001600160a01b03161480611bbd575080608001516001600160a01b0316336001600160a01b0316145b6040518060400160405280600681526020016532343031303360d01b81525090611bfa5760405162461bcd60e51b81526004016102e09190612623565b5080600001516001600160a01b031663200d2ed26040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c619190612664565b6040805180820190915260068152650c8d0c0c4c0d60d21b6020820152901515600114611ca15760405162461bcd60e51b81526004016102e09190612623565b506001546020820151825160608401516001600160a01b039093169263b5c9cbbe929190611cd390610633848461219d565b6040518463ffffffff1660e01b8152600401611cf1939291906126e5565b6020604051808303816000875af1158015611d10573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d349190612664565b506001546020820151825160608401516001600160a01b039093169263d04c23af929190611d66906105aa8484611832565b6040518463ffffffff1660e01b8152600401611d84939291906126e5565b6020604051808303816000875af1158015611da3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dc79190612664565b506001548151602083015160408085015160608601516080870151925163a176130f60e01b81526001600160a01b039096169563a176130f95611e1a958b959194909390929091906000906004016126a8565b600060405180830381600087803b158015611e3457600080fd5b505af1158015611e48573d6000803e3d6000fd5b5050505080600001516001600160a01b0316636f3b993f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e8e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eb29190612664565b151560010361204e57611ec3612225565b600154604051630f44510560e21b8152600481018690526001600160a01b0390911690633d11441490602401600060405180830381865afa158015611f0c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611f3491908101906128aa565b151560a08701521515608086015215156060850152604084015260208301526001600160a01b03168082521561204c5760015481516020830151604080850151608086015160a0870151925163e3fd373960e01b81526001600160a01b039096169563e3fd373995611fb4958c9591949093909260009290600401612938565b600060405180830381600087803b158015611fce57600080fd5b505af1158015611fe2573d6000803e3d6000fd5b5050505081600001516001600160a01b0316847f426a679496b8b028e297fc27a10dd4b7c4821639be5aad6a933335688fb5d13a846020015185604001516040516120439291906001600160a01b0392831681529116602082015260400190565b60405180910390a35b505b80600001516001600160a01b0316837fb7241699ec523a0e284a889e67fe27f7edc6a22e528c418f4de4b0870fa3b25283602001518460400151856060015186608001516040516120a29493929190612996565b60405180910390a350600192915050565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b031633146120fc5760405162461bcd60e51b81526004016102e09190612623565b5060408051808201909152600681526535303031303160d01b60208201526001600160a01b0382166121415760405162461bcd60e51b81526004016102e09190612623565b50600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60015460405163d4fac45d60e01b81526001600160a01b0384811660048301528381166024830152600092169063d4fac45d90604401611869565b60006118aa82846129f4565b60006118aa8284612695565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a081019190915290565b6040805160c08101825260008082526060602083018190529282018390529181018290526080810182905260a081019190915290565b6001600160a01b038116811461227057600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156122b2576122b2612273565b604052919050565b600067ffffffffffffffff8211156122d4576122d4612273565b50601f01601f191660200190565b60006122f56122f0846122ba565b612289565b905082815283838301111561230957600080fd5b828260208301376000602084830101529392505050565b600082601f83011261233157600080fd5b6118aa838335602085016122e2565b60008060008060008060c0878903121561235957600080fd5b86356123648161225b565b955060208701356123748161225b565b945060408701359350606087013561238b8161225b565b9250608087013567ffffffffffffffff808211156123a857600080fd5b6123b48a838b01612320565b935060a08901359150808211156123ca57600080fd5b506123d789828a01612320565b9150509295509295509295565b6000602082840312156123f657600080fd5b5035919050565b60005b83811015612418578181015183820152602001612400565b50506000910152565b600081518084526124398160208601602086016123fd565b601f01601f19169290920160200192915050565b6001600160a01b038716815260c06020820181905260009061247190830188612421565b82810360408401526124838188612421565b951515606084015250509115156080830152151560a0909101529392505050565b6000602082840312156124b657600080fd5b81356118aa8161225b565b600080604083850312156124d457600080fd5b82359150602083013567ffffffffffffffff8111156124f257600080fd5b6124fe85828601612320565b9150509250929050565b6000806020838503121561251b57600080fd5b823567ffffffffffffffff8082111561253357600080fd5b818501915085601f83011261254757600080fd5b81358181111561255657600080fd5b8660208260051b850101111561256b57600080fd5b60209290920196919550909350505050565b6000806040838503121561259057600080fd5b823561259b8161225b565b915060208301356125ab8161225b565b809150509250929050565b6000806000606084860312156125cb57600080fd5b83356125d68161225b565b925060208401359150604084013567ffffffffffffffff8111156125f957600080fd5b8401601f8101861361260a57600080fd5b612619868235602084016122e2565b9150509250925092565b6020815260006118aa6020830184612421565b60006020828403121561264857600080fd5b5051919050565b8051801515811461265f57600080fd5b919050565b60006020828403121561267657600080fd5b6118aa8261264f565b634e487b7160e01b600052601160045260246000fd5b808201808211156117745761177461267f565b9687526001600160a01b03958616602088015293851660408701529184166060860152608085015290911660a0830152151560c082015260e00190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b8681526001600160a01b038616602082015260e06040820181905260009061273390830187612421565b82810360608401526000815294151560808301525091151560a0830152151560c0909101526020019392505050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061279590830184612421565b9695505050505050565b6001600160a01b0386811682528581166020830152604082018590528316606082015260a0608082018190526000906127da90830184612421565b979650505050505050565b60008060008060008060c087890312156127fe57600080fd5b86516128098161225b565b602088015190965061281a8161225b565b604088015190955061282b8161225b565b6060880151608089015191955093506128438161225b565b915061285160a0880161264f565b90509295509295509295565b600082601f83011261286e57600080fd5b815161287c6122f0826122ba565b81815284602083860101111561289157600080fd5b6128a28260208301602087016123fd565b949350505050565b60008060008060008060c087890312156128c357600080fd5b86516128ce8161225b565b602088015190965067ffffffffffffffff808211156128ec57600080fd5b6128f88a838b0161285d565b9650604089015191508082111561290e57600080fd5b5061291b89828a0161285d565b94505061292a6060880161264f565b92506128436080880161264f565b8781526001600160a01b038716602082015260e06040820181905260009061296290830188612421565b82810360608401526129748188612421565b9515156080840152505091151560a0830152151560c090910152949350505050565b6001600160a01b03948516815292841660208401526040830191909152909116606082015260800190565b6000602082840312156129d357600080fd5b81516118aa8161225b565b634e487b7160e01b600052603260045260246000fd5b818103818111156117745761177461267f56fea26469706673582212204df5acec61f06e9abaa39f319f8fa4f9ef1e1bd6a9001113ac461c628f8dca2f64736f6c63430008170033" } \ No newline at end of file diff --git a/contracts/IbetSecurityTokenInterface.json b/contracts/IbetSecurityTokenInterface.json index 7f749462..2ea00402 100644 --- a/contracts/IbetSecurityTokenInterface.json +++ b/contracts/IbetSecurityTokenInterface.json @@ -515,6 +515,52 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "_targetAddressList", + "type": "address[]" + }, + { + "internalType": "address[]", + "name": "_lockAddressList", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "_amounts", + "type": "uint256[]" + } + ], + "name": "bulkIssueFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "_targetAddressList", + "type": "address[]" + }, + { + "internalType": "address[]", + "name": "_lockAddressList", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "_amounts", + "type": "uint256[]" + } + ], + "name": "bulkRedeemFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [ { @@ -539,6 +585,35 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "_fromList", + "type": "address[]" + }, + { + "internalType": "address[]", + "name": "_toList", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "_valueList", + "type": "uint256[]" + } + ], + "name": "bulkTransferFrom", + "outputs": [ + { + "internalType": "bool", + "name": "success", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [ { diff --git a/contracts/IbetShare.json b/contracts/IbetShare.json index 4bfb9897..a2680ebc 100644 --- a/contracts/IbetShare.json +++ b/contracts/IbetShare.json @@ -616,6 +616,52 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "_targetAddressList", + "type": "address[]" + }, + { + "internalType": "address[]", + "name": "_lockAddressList", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "_amounts", + "type": "uint256[]" + } + ], + "name": "bulkIssueFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "_targetAddressList", + "type": "address[]" + }, + { + "internalType": "address[]", + "name": "_lockAddressList", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "_amounts", + "type": "uint256[]" + } + ], + "name": "bulkRedeemFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [ { @@ -640,6 +686,35 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "_fromList", + "type": "address[]" + }, + { + "internalType": "address[]", + "name": "_toList", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "_valueList", + "type": "uint256[]" + } + ], + "name": "bulkTransferFrom", + "outputs": [ + { + "internalType": "bool", + "name": "success", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [ { @@ -790,12 +865,12 @@ "inputs": [ { "internalType": "address", - "name": "_target_address", + "name": "_targetAddress", "type": "address" }, { "internalType": "address", - "name": "_locked_address", + "name": "_lockAddress", "type": "address" }, { @@ -1007,12 +1082,12 @@ "inputs": [ { "internalType": "address", - "name": "_target_address", + "name": "_targetAddress", "type": "address" }, { "internalType": "address", - "name": "_locked_address", + "name": "_lockAddress", "type": "address" }, { @@ -1397,6 +1472,6 @@ "type": "function" } ], - "bytecode": "60806040523480156200001157600080fd5b50604051620038be380380620038be8339810160408190526200003491620001d7565b600080546001600160a01b031916331790556001620000548a8262000370565b50600262000063898262000370565b50600080546001600160a01b03191633179055600f879055601281905560038690556014859055601562000098858262000370565b506016620000a7848262000370565b506010620000b6838262000370565b50506013805460ff199081169091556007805490911660011790555050600354600080546001600160a01b031681526008602052604090205550506009805460ff60a01b1916600160a01b179055506200043c92505050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200013757600080fd5b81516001600160401b03808211156200015457620001546200010f565b604051601f8301601f19908116603f011681019082821181831017156200017f576200017f6200010f565b81604052838152602092508660208588010111156200019d57600080fd5b600091505b83821015620001c15785820183015181830184015290820190620001a2565b6000602085830101528094505050505092915050565b60008060008060008060008060006101208a8c031215620001f757600080fd5b89516001600160401b03808211156200020f57600080fd5b6200021d8d838e0162000125565b9a5060208c01519150808211156200023457600080fd5b620002428d838e0162000125565b995060408c0151985060608c0151975060808c0151965060a08c01519150808211156200026e57600080fd5b6200027c8d838e0162000125565b955060c08c01519150808211156200029357600080fd5b620002a18d838e0162000125565b945060e08c0151915080821115620002b857600080fd5b50620002c78c828d0162000125565b9250506101008a015190509295985092959850929598565b600181811c90821680620002f457607f821691505b6020821081036200031557634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200036b576000816000526020600020601f850160051c81016020861015620003465750805b601f850160051c820191505b81811015620003675782815560010162000352565b5050505b505050565b81516001600160401b038111156200038c576200038c6200010f565b620003a4816200039d8454620002df565b846200031b565b602080601f831160018114620003dc5760008415620003c35750858301515b600019600386901b1c1916600185901b17855562000367565b600085815260208120601f198616915b828110156200040d57888601518255948401946001909101908401620003ec565b50858210156200042c5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b613472806200044c6000396000f3fe608060405234801561001057600080fd5b50600436106103785760003560e01c806383850bcb116101d3578063c267ce5f11610104578063edaab208116100a2578063fd0e85691161007c578063fd0e85691461076b578063fd14a2221461077f578063fef1b9c014610792578063ff12dcea146107d257600080fd5b8063edaab20814610738578063f2fde38b14610745578063f7502a7c1461075857600080fd5b8063cb761015116100de578063cb761015146106d4578063d9322058146106e7578063db20266f146106fa578063e7464db11461072557600080fd5b8063c267ce5f1461069b578063c7109ec9146106ae578063ca5cbbb5146106c157600080fd5b8063996f3a4b11610171578063b2a90a601161014b578063b2a90a601461064e578063b967a52e14610662578063b9b3e06a14610675578063bfe30fb01461068857600080fd5b8063996f3a4b146106155780639cd2370714610628578063a9059cbb1461063b57600080fd5b80638ed8a9bc116101ad5780638ed8a9bc146105c457806392ff0d31146105d75780639301a78b146105eb57806395d89b411461060d57600080fd5b806383850bcb146105a15780638da5cb5b146105a95780638db9877c146105bc57600080fd5b806336f7ab5e116102ad5780635c40f6f41161024b57806370a082311161022557806370a082311461055257806376fa7a31146105655780637da68d341461057857806381ebdd791461058157600080fd5b80635c40f6f41461051f5780635ccef3e7146105325780636f3b993f1461054557600080fd5b8063428630f611610287578063428630f6146104ef57806358c3b870146104f75780635b473327146104ff5780635c2c20051461051657600080fd5b806336f7ab5e146104c157806340615cf8146104c957806340eba90e146104dc57600080fd5b8063200d2ed21161031a57806325d60861116102f457806325d608611461046857806327e235e31461047b5780632e027abe1461049b57806331cef447146104ae57600080fd5b8063200d2ed21461043557806323b872dd1461044257806325287d421461045557600080fd5b80630ed5a933116103565780630ed5a933146103db578063153a1f3e146103f857806318160ddd1461040b5780631935a8801461042257600080fd5b806306eaa0b71461037d57806306fdde03146103925780630af7eb0f146103b0575b600080fd5b61039061038b366004612bc3565b6107e5565b005b61039a610aaf565b6040516103a79190612c50565b60405180910390f35b6009546103c3906001600160a01b031681565b6040516001600160a01b0390911681526020016103a7565b6013546103e89060ff1681565b60405190151581526020016103a7565b6103e8610406366004612d12565b610b3d565b61041460035481565b6040519081526020016103a7565b610390610430366004612dd9565b610d84565b6007546103e89060ff1681565b6103e8610450366004612df6565b610e15565b6004546103c3906001600160a01b031681565b610390610476366004612e32565b610ffc565b610414610489366004612e6f565b60086020526000908152604090205481565b61039a6104a9366004612e8a565b611056565b6103906104bc366004612bc3565b61106f565b61039a6111ea565b6103906104d7366004612ead565b6111f7565b6103906104ea366004612ed7565b611295565b61039a61157c565b61039a611589565b610507611596565b6040516103a793929190612f2e565b610414600f5481565b61039061052d366004612dd9565b6116bb565b610390610540366004612bc3565b61174a565b600b546103e89060ff1681565b610414610560366004612e6f565b611acc565b610390610573366004612e6f565b611ae7565b61041460125481565b61041461058f366004612e6f565b600d6020526000908152604090205481565b610390611b53565b6000546103c3906001600160a01b031681565b61039a611bd5565b6103906105d2366004612e32565b611be2565b6009546103e890600160a81b900460ff1681565b6105fe6105f9366004612e6f565b611c38565b6040516103a793929190612f63565b61039a611c60565b610390610623366004612f8b565b611c6d565b610390610636366004612dd9565b611d1a565b6103e8610649366004612ead565b611d82565b6009546103e890600160b01b900460ff1681565b610390610670366004612e32565b611e43565b610414610683366004612fee565b611e99565b610390610696366004613021565b611ec4565b6103906106a9366004612ed7565b611fad565b6103906106bc366004612dd9565b61208a565b6103906106cf366004613089565b61211d565b6103906106e2366004613102565b61226c565b6103906106f5366004612e32565b6122bb565b610414610708366004612fee565b600e60209081526000928352604080842090915290825290205481565b610390610733366004612df6565b612311565b6017546103e89060ff1681565b610390610753366004612e6f565b6124df565b610390610766366004612e6f565b6125c9565b6009546103e890600160a01b900460ff1681565b61039061078d366004612dd9565b612635565b6107a56107a0366004613102565b61269d565b604080516001600160a01b03958616815294909316602085015291830152151560608201526080016103a7565b6103906107e0366004612df6565b6126e6565b336001600160a01b0316600c83815481106108025761080261311b565b60009182526020909120600490910201546001600160a01b03161480159061083557506000546001600160a01b03163314155b1561087757604080518082018252600681526531313038303160d01b6020820152905162461bcd60e51b815261086e9190600401612c50565b60405180910390fd5b600c828154811061088a5761088a61311b565b6000918252602082206003600490920201015460ff16151590036108dc5760408051808201825260068152651898981c181960d11b6020820152905162461bcd60e51b815261086e9190600401612c50565b600c82815481106108ef576108ef61311b565b90600052602060002090600402016002015460086000600c85815481106109185761091861311b565b600091825260208083206004909202909101546001600160a01b0316835282019290925260400181208054909190610951908490613147565b9091555050600c80548390811061096a5761096a61311b565b906000526020600020906004020160020154600d6000600c85815481106109935761099361311b565b600091825260208083206004909202909101546001600160a01b03168352820192909252604001812080549091906109cc90849061315a565b925050819055506000600c83815481106109e8576109e861311b565b906000526020600020906004020160030160006101000a81548160ff021916908315150217905550817fa0cc3a4feb26502e6e6cd57b2113d58bdab80c6711d8252356be9a49945bb5f7600c8481548110610a4557610a4561311b565b6000918252602090912060049091020154600c80546001600160a01b039092169186908110610a7657610a7661311b565b6000918252602090912060016004909202010154604051610aa392916001600160a01b031690869061316d565b60405180910390a25050565b60018054610abc90613199565b80601f0160208091040260200160405190810160405280929190818152602001828054610ae890613199565b8015610b355780601f10610b0a57610100808354040283529160200191610b35565b820191906000526020600020905b815481529060010190602001808311610b1857829003601f168201915b505050505081565b600b5460009060ff161515600103610b8357604080518082018252600681526531313035303160d01b6020820152905162461bcd60e51b815261086e9190600401612c50565b8151835114610bc05760408051808201825260068152651898981a981960d11b6020820152905162461bcd60e51b815261086e9190600401612c50565b6000805b8451811015610bfc57838181518110610bdf57610bdf61311b565b602002602001015182610bf29190613147565b9150600101610bc4565b5080610c0733611acc565b1015610c4157604080518082018252600681526531313035303360d01b6020820152905162461bcd60e51b815261086e9190600401612c50565b6004546001600160a01b03163314610ca2576009546040805180820190915260068152650c4c4c0d4c0d60d21b602082015290600160a81b900460ff161515600114610ca05760405162461bcd60e51b815260040161086e9190612c50565b505b606060006001935060005b8651811015610d7957610cd9878281518110610ccb57610ccb61311b565b60200260200101513b151590565b15610d2257610d1b878281518110610cf357610cf361311b565b6020026020010151878381518110610d0d57610d0d61311b565b60200260200101518561280e565b9150610d62565b610d5f878281518110610d3757610d3761311b565b6020026020010151878381518110610d5157610d5161311b565b602002602001015185612929565b91505b811515600003610d7157600094505b600101610cad565b505050505b92915050565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b03163314610dcd5760405162461bcd60e51b815260040161086e9190612c50565b50600b805460ff19168215159081179091556040519081527fe1455bc53682229469d6919bb96d7b338cbffea93170dfb5f02242c22fb6d07f9060200160405180910390a150565b6000805460408051808201909152600681526535303030303160d01b6020820152906001600160a01b03163314610e5f5760405162461bcd60e51b815260040161086e9190612c50565b5081610e6a85611acc565b1015610ea457604080518082018252600681526531313036303160d01b6020820152905162461bcd60e51b815261086e9190600401612c50565b6060833b15610f6957610ec083610eba87611acc565b90612aed565b6001600160a01b038616600090815260086020526040902055610eec83610ee686611acc565b90612b00565b6001600160a01b0385166000818152600860205260409081902092909255905163607705c560e11b815285919063c0ee0b8a90610f31903390889087906004016131d3565b600060405180830381600087803b158015610f4b57600080fd5b505af1158015610f5f573d6000803e3d6000fd5b5050505050610fb6565b610f7683610eba87611acc565b6001600160a01b038616600090815260086020526040902055610f9c83610ee686611acc565b6001600160a01b0385166000908152600860205260409020555b836001600160a01b0316856001600160a01b031660008051602061341d83398151915285604051610fe991815260200190565b60405180910390a3506001949350505050565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b031633146110455760405162461bcd60e51b815260040161086e9190612c50565b506011611052828261324b565b5050565b60186020526000908152604090208054610abc90613199565b60095460408051808201909152600681526531313130303160d01b602082015290600160b01b900460ff1615156001146110bc5760405162461bcd60e51b815260040161086e9190612c50565b50600954600160a01b900460ff16151560010361118b5760095460005460405163d3da927f60e01b81523360048201526001600160a01b03918216602482015291169063d3da927f90604401602060405180830381865afa158015611125573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611149919061330b565b60408051808201909152600681526518989898181960d11b60208201529015156001146111895760405162461bcd60e51b815260040161086e9190612c50565b505b336000908152600a602052604090208281556002016111aa828261324b565b507f3bb9553f633a7ecb4cbc5f9885e750a522496ce06deff1ed9184180ca83940c03383836040516111de939291906131d3565b60405180910390a15050565b60058054610abc90613199565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b031633146112405760405162461bcd60e51b815260040161086e9190612c50565b506001600160a01b0382166000818152600a6020908152604091829020600101849055815192835282018390527fa42bd6bdfcb8f9b815c68e4ce0e16dec3f1e7ac53967ee8309653de522a735b191016111de565b600b5460ff1615806112b15750600954600160a81b900460ff16155b806112c35750816112c133611acc565b105b156112fc57604080518082018252600681526531313037303160d01b6020820152905162461bcd60e51b815261086e9190600401612c50565b6000546001600160a01b038481169116148015906113285750600954600160a01b900460ff1615156001145b156113e75760095460005460405163d3da927f60e01b81526001600160a01b038681166004830152918216602482015291169063d3da927f90604401602060405180830381865afa158015611381573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113a5919061330b565b6040805180820190915260068152651898981b981960d11b60208201529015156001146113e55760405162461bcd60e51b815260040161086e9190612c50565b505b336000908152600860205260408120805484929061140690849061315a565b9091555050336000908152600d60205260408120805484929061142a908490613147565b9091555050600c805460408051608081018252338082526001600160a01b038881166020840190815283850189815260016060860181815290880189556000989098529351600487027fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c7810180549285166001600160a01b031993841617905591517fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c8830180549190941691161790915591517fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c983015593517fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8ca909101805491151560ff1990921691909117905551909182917fa256c3bc72c26fbfd6285cfde8c7e345b4d0c7ccfc725d103e9f129c5d8a039a9161156e91889088908890613328565b60405180910390a250505050565b60068054610abc90613199565b60118054610abc90613199565b60148054601580549192916115aa90613199565b80601f01602080910402602001604051908101604052809291908181526020018280546115d690613199565b80156116235780601f106115f857610100808354040283529160200191611623565b820191906000526020600020905b81548152906001019060200180831161160657829003601f168201915b50505050509080600201805461163890613199565b80601f016020809104026020016040519081016040528092919081815260200182805461166490613199565b80156116b15780601f10611686576101008083540402835291602001916116b1565b820191906000526020600020905b81548152906001019060200180831161169457829003601f168201915b5050505050905083565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b031633146117045760405162461bcd60e51b815260040161086e9190612c50565b506007805460ff191682151590811790915560405160ff9091161515907fe1e5c6f5867805bf3fab73f4df4b80d0e87e9262a7bc22ac7c2cb3fd5896222f90600090a250565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b031633146117935760405162461bcd60e51b815260040161086e9190612c50565b50600954600160a81b900460ff1615156000036117de57604080518082018252600681526531313039303160d01b6020820152905162461bcd60e51b815261086e9190600401612c50565b600c82815481106117f1576117f161311b565b6000918252602082206003600490920201015460ff16151590036118435760408051808201825260068152651898981c981960d11b6020820152905162461bcd60e51b815261086e9190600401612c50565b600c82815481106118565761185661311b565b90600052602060002090600402016002015460086000600c858154811061187f5761187f61311b565b60009182526020808320600160049093020191909101546001600160a01b03168352820192909252604001812080549091906118bc908490613147565b9091555050600c8054839081106118d5576118d561311b565b906000526020600020906004020160020154600d6000600c85815481106118fe576118fe61311b565b600091825260208083206004909202909101546001600160a01b031683528201929092526040018120805490919061193790849061315a565b925050819055506000600c83815481106119535761195361311b565b906000526020600020906004020160030160006101000a81548160ff021916908315150217905550817f6b50d6e4941ce7ae74ed7f7f51df5fb7680754c2815a094c66bea5ca80a40eb1600c84815481106119b0576119b061311b565b6000918252602090912060049091020154600c80546001600160a01b0390921691869081106119e1576119e161311b565b6000918252602090912060016004909202010154604051611a0e92916001600160a01b031690869061316d565b60405180910390a2600c8281548110611a2957611a2961311b565b6000918252602090912060016004909202010154600c80546001600160a01b039092169184908110611a5d57611a5d61311b565b6000918252602090912060049091020154600c80546001600160a01b039092169160008051602061341d833981519152919086908110611a9f57611a9f61311b565b906000526020600020906004020160020154604051611ac091815260200190565b60405180910390a35050565b6001600160a01b031660009081526008602052604090205490565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b03163314611b305760405162461bcd60e51b815260040161086e9190612c50565b50600480546001600160a01b0319166001600160a01b0392909216919091179055565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b03163314611b9c5760405162461bcd60e51b815260040161086e9190612c50565b506013805460ff191660011790556040517f8298c3671093b19970d7c94ce1f23925a962f36fec31d25075d9be072b73e10390600090a1565b60108054610abc90613199565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b03163314611c2b5760405162461bcd60e51b815260040161086e9190612c50565b506006611052828261324b565b600a602052600090815260409020805460018201546002830180549293919261163890613199565b60028054610abc90613199565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b03163314611cb65760405162461bcd60e51b815260040161086e9190612c50565b5060148390556015611cc8838261324b565b506016611cd5828261324b565b506014546040517ff89b6034f2b759ebb2dfb08461be917a1b54f2e0523c895e7f9b5e5e14dd013e91611d0d916015906016906133d8565b60405180910390a1505050565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b03163314611d635760405162461bcd60e51b815260040161086e9190612c50565b5060098054911515600160a81b0260ff60a81b19909216919091179055565b600081611d8e33611acc565b10156040518060400160405280600681526020016531313034303160d01b81525090611dcd5760405162461bcd60e51b815260040161086e9190612c50565b506009546040805180820190915260068152651898981a181960d11b602082015290600160a81b900460ff161515600114611e1b5760405162461bcd60e51b815260040161086e9190612c50565b506060833b15611e3857611e3084848361280e565b915050610d7e565b611e30848483612929565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b03163314611e8c5760405162461bcd60e51b815260040161086e9190612c50565b506005611052828261324b565b6001600160a01b039182166000908152600e6020908152604080832093909416825291909152205490565b81611ecf3386611e99565b1015611f0957604080518082018252600681526518989818981960d11b6020820152905162461bcd60e51b815261086e9190600401612c50565b611f1782610eba3387611e99565b336000908152600e602090815260408083206001600160a01b0389168452909152902055611f4882610ee685611acc565b6001600160a01b038085166000908152600860205260409081902092909255905133918616907f7a1a1088c929a111dda2dc0ca1cc650aa78525d11fd3089abf20c8474f5d82cc90611f9f908790879087906131d3565b60405180910390a350505050565b81611fb733611acc565b1015611ff157604080518082018252600681526518989818181960d11b6020820152905162461bcd60e51b815261086e9190600401612c50565b611ffe82610eba33611acc565b33600081815260086020526040902091909155612022908390610ee6908690611e99565b6001600160a01b0384166000818152600e602090815260408083203380855292529182902093909355519091907ecd77abc69e7bbb6de9df8cbfcca8720df3a30decf9eefd187e72ab2ea2f5139061207d9086908690613403565b60405180910390a3505050565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b031633146120d35760405162461bcd60e51b815260040161086e9190612c50565b506009805460ff60b01b1916600160b01b831515908102919091179091556040517fa0c691180b8089c0c84e478ee67d6325768666cd889f13de016771c6f7af1f8890600090a250565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b031633146121665760405162461bcd60e51b815260040161086e9190612c50565b50816121728686611e99565b10156121ac57604080518082018252600681526531313132303160d01b6020820152905162461bcd60e51b815261086e9190600401612c50565b6121ba82610eba8787611e99565b6001600160a01b038087166000908152600e60209081526040808320938916835292905220556121ed82610ee685611acc565b60086000856001600160a01b03166001600160a01b0316815260200190815260200160002081905550846001600160a01b0316846001600160a01b03167f7a1a1088c929a111dda2dc0ca1cc650aa78525d11fd3089abf20c8474f5d82cc85858560405161225d939291906131d3565b60405180910390a35050505050565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b031633146122b55760405162461bcd60e51b815260040161086e9190612c50565b50601255565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b031633146123045760405162461bcd60e51b815260040161086e9190612c50565b506010611052828261324b565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b0316331461235a5760405162461bcd60e51b815260040161086e9190612c50565b506001600160a01b038216156123f857806123758385611e99565b10156123af57604080518082018252600681526531313131303160d01b6020820152905162461bcd60e51b815261086e9190600401612c50565b6123bd81610eba8486611e99565b6001600160a01b038084166000908152600e60209081526040808320938816835292905220556003546123f09082612aed565b600355612483565b6001600160a01b03831660009081526008602052604090205481111561244c57604080518082018252600681526518989898981960d11b6020820152905162461bcd60e51b815261086e9190600401612c50565b61245981610eba85611acc565b6001600160a01b03841660009081526008602052604090205560035461247f9082612aed565b6003555b816001600160a01b0316836001600160a01b0316336001600160a01b03167fee02732fab40ece8284c756220846dff4b8d32058b86b35b4f0459bf172fcef0846040516124d291815260200190565b60405180910390a4505050565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b031633146125285760405162461bcd60e51b815260040161086e9190612c50565b5060408051808201909152600681526535303031303160d01b60208201526001600160a01b03821661256d5760405162461bcd60e51b815260040161086e9190612c50565b50600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b031633146126125760405162461bcd60e51b815260040161086e9190612c50565b50600980546001600160a01b0319166001600160a01b0392909216919091179055565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b0316331461267e5760405162461bcd60e51b815260040161086e9190612c50565b5060098054911515600160a01b0260ff60a01b19909216919091179055565b600c81815481106126ad57600080fd5b600091825260209091206004909102018054600182015460028301546003909301546001600160a01b0392831694509116919060ff1684565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b0316331461272f5760405162461bcd60e51b815260040161086e9190612c50565b506001600160a01b038216156127885761274d81610ee68486611e99565b6001600160a01b038084166000908152600e60209081526040808320938816835292905220556003546127809082612b00565b6003556127bf565b61279581610ee685611acc565b6001600160a01b0384166000908152600860205260409020556003546127bb9082612b00565b6003555b816001600160a01b0316836001600160a01b0316336001600160a01b03167f65adeb76912378393e600cb6f64f3310842a42e1eae86273dc775d0c47a0f2dc846040516124d291815260200190565b60045460408051808201909152600681526531313033303160d01b60208201526000916001600160a01b0386811691161461285c5760405162461bcd60e51b815260040161086e9190612c50565b5061286a83610eba33611acc565b3360009081526008602052604090205561288783610ee686611acc565b6001600160a01b0385166000818152600860205260409081902092909255905163607705c560e11b815285919063c0ee0b8a906128cc903390889088906004016131d3565b600060405180830381600087803b1580156128e657600080fd5b505af11580156128fa573d6000803e3d6000fd5b50506040518681526001600160a01b038816925033915060008051602061341d83398151915290602001610fe9565b6004546000906001600160a01b0316331480159061294e5750600b5460ff1615156001145b1561298757604080518082018252600681526531313032303160d01b6020820152905162461bcd60e51b815261086e9190600401612c50565b6000546001600160a01b038581169116148015906129b35750600954600160a01b900460ff1615156001145b15612a725760095460005460405163d3da927f60e01b81526001600160a01b038781166004830152918216602482015291169063d3da927f90604401602060405180830381865afa158015612a0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a30919061330b565b60408051808201909152600681526518989819181960d11b6020820152901515600114612a705760405162461bcd60e51b815260040161086e9190612c50565b505b612a7f83610eba33611acc565b33600090815260086020526040902055612a9c83610ee686611acc565b6001600160a01b03851660008181526008602052604090819020929092559051339060008051602061341d83398151915290612adb9087815260200190565b60405180910390a35060019392505050565b6000612af9828461315a565b9392505050565b6000612af98284613147565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612b4b57612b4b612b0c565b604052919050565b600082601f830112612b6457600080fd5b813567ffffffffffffffff811115612b7e57612b7e612b0c565b612b91601f8201601f1916602001612b22565b818152846020838601011115612ba657600080fd5b816020850160208301376000918101602001919091529392505050565b60008060408385031215612bd657600080fd5b82359150602083013567ffffffffffffffff811115612bf457600080fd5b612c0085828601612b53565b9150509250929050565b6000815180845260005b81811015612c3057602081850181015186830182015201612c14565b506000602082860101526020601f19601f83011685010191505092915050565b602081526000612af96020830184612c0a565b600067ffffffffffffffff821115612c7d57612c7d612b0c565b5060051b60200190565b80356001600160a01b0381168114612c9e57600080fd5b919050565b600082601f830112612cb457600080fd5b81356020612cc9612cc483612c63565b612b22565b8083825260208201915060208460051b870101935086841115612ceb57600080fd5b602086015b84811015612d075780358352918301918301612cf0565b509695505050505050565b60008060408385031215612d2557600080fd5b823567ffffffffffffffff80821115612d3d57600080fd5b818501915085601f830112612d5157600080fd5b81356020612d61612cc483612c63565b82815260059290921b84018101918181019089841115612d8057600080fd5b948201945b83861015612da557612d9686612c87565b82529482019490820190612d85565b96505086013592505080821115612dbb57600080fd5b50612c0085828601612ca3565b8015158114612dd657600080fd5b50565b600060208284031215612deb57600080fd5b8135612af981612dc8565b600080600060608486031215612e0b57600080fd5b612e1484612c87565b9250612e2260208501612c87565b9150604084013590509250925092565b600060208284031215612e4457600080fd5b813567ffffffffffffffff811115612e5b57600080fd5b612e6784828501612b53565b949350505050565b600060208284031215612e8157600080fd5b612af982612c87565b600060208284031215612e9c57600080fd5b813560ff81168114612af957600080fd5b60008060408385031215612ec057600080fd5b612ec983612c87565b946020939093013593505050565b600080600060608486031215612eec57600080fd5b612ef584612c87565b925060208401359150604084013567ffffffffffffffff811115612f1857600080fd5b612f2486828701612b53565b9150509250925092565b838152606060208201526000612f476060830185612c0a565b8281036040840152612f598185612c0a565b9695505050505050565b838152826020820152606060408201526000612f826060830184612c0a565b95945050505050565b600080600060608486031215612fa057600080fd5b83359250602084013567ffffffffffffffff80821115612fbf57600080fd5b612fcb87838801612b53565b93506040860135915080821115612fe157600080fd5b50612f2486828701612b53565b6000806040838503121561300157600080fd5b61300a83612c87565b915061301860208401612c87565b90509250929050565b6000806000806080858703121561303757600080fd5b61304085612c87565b935061304e60208601612c87565b925060408501359150606085013567ffffffffffffffff81111561307157600080fd5b61307d87828801612b53565b91505092959194509250565b600080600080600060a086880312156130a157600080fd5b6130aa86612c87565b94506130b860208701612c87565b93506130c660408701612c87565b925060608601359150608086013567ffffffffffffffff8111156130e957600080fd5b6130f588828901612b53565b9150509295509295909350565b60006020828403121561311457600080fd5b5035919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b80820180821115610d7e57610d7e613131565b81810381811115610d7e57610d7e613131565b6001600160a01b03848116825283166020820152606060408201819052600090612f8290830184612c0a565b600181811c908216806131ad57607f821691505b6020821081036131cd57634e487b7160e01b600052602260045260246000fd5b50919050565b60018060a01b0384168152826020820152606060408201526000612f826060830184612c0a565b601f821115613246576000816000526020600020601f850160051c810160208610156132235750805b601f850160051c820191505b818110156132425782815560010161322f565b5050505b505050565b815167ffffffffffffffff81111561326557613265612b0c565b613279816132738454613199565b846131fa565b602080601f8311600181146132ae57600084156132965750858301515b600019600386901b1c1916600185901b178555613242565b600085815260208120601f198616915b828110156132dd578886015182559484019460019091019084016132be565b50858210156132fb5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121561331d57600080fd5b8151612af981612dc8565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612f5990830184612c0a565b6000815461336881613199565b808552602060018381168015613385576001811461339f576133cd565b60ff1985168884015283151560051b8801830195506133cd565b866000528260002060005b858110156133c55781548a82018601529083019084016133aa565b890184019650505b505050505092915050565b8381526060602082015260006133f1606083018561335b565b8281036040840152612f59818561335b565b828152604060208201526000612e676040830184612c0a56feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212201889db3f768c3826c5ce92020d70f772bf2f23adad1ce1774ab7ed5a27c863ee64736f6c63430008170033", - "deployedBytecode": "608060405234801561001057600080fd5b50600436106103785760003560e01c806383850bcb116101d3578063c267ce5f11610104578063edaab208116100a2578063fd0e85691161007c578063fd0e85691461076b578063fd14a2221461077f578063fef1b9c014610792578063ff12dcea146107d257600080fd5b8063edaab20814610738578063f2fde38b14610745578063f7502a7c1461075857600080fd5b8063cb761015116100de578063cb761015146106d4578063d9322058146106e7578063db20266f146106fa578063e7464db11461072557600080fd5b8063c267ce5f1461069b578063c7109ec9146106ae578063ca5cbbb5146106c157600080fd5b8063996f3a4b11610171578063b2a90a601161014b578063b2a90a601461064e578063b967a52e14610662578063b9b3e06a14610675578063bfe30fb01461068857600080fd5b8063996f3a4b146106155780639cd2370714610628578063a9059cbb1461063b57600080fd5b80638ed8a9bc116101ad5780638ed8a9bc146105c457806392ff0d31146105d75780639301a78b146105eb57806395d89b411461060d57600080fd5b806383850bcb146105a15780638da5cb5b146105a95780638db9877c146105bc57600080fd5b806336f7ab5e116102ad5780635c40f6f41161024b57806370a082311161022557806370a082311461055257806376fa7a31146105655780637da68d341461057857806381ebdd791461058157600080fd5b80635c40f6f41461051f5780635ccef3e7146105325780636f3b993f1461054557600080fd5b8063428630f611610287578063428630f6146104ef57806358c3b870146104f75780635b473327146104ff5780635c2c20051461051657600080fd5b806336f7ab5e146104c157806340615cf8146104c957806340eba90e146104dc57600080fd5b8063200d2ed21161031a57806325d60861116102f457806325d608611461046857806327e235e31461047b5780632e027abe1461049b57806331cef447146104ae57600080fd5b8063200d2ed21461043557806323b872dd1461044257806325287d421461045557600080fd5b80630ed5a933116103565780630ed5a933146103db578063153a1f3e146103f857806318160ddd1461040b5780631935a8801461042257600080fd5b806306eaa0b71461037d57806306fdde03146103925780630af7eb0f146103b0575b600080fd5b61039061038b366004612bc3565b6107e5565b005b61039a610aaf565b6040516103a79190612c50565b60405180910390f35b6009546103c3906001600160a01b031681565b6040516001600160a01b0390911681526020016103a7565b6013546103e89060ff1681565b60405190151581526020016103a7565b6103e8610406366004612d12565b610b3d565b61041460035481565b6040519081526020016103a7565b610390610430366004612dd9565b610d84565b6007546103e89060ff1681565b6103e8610450366004612df6565b610e15565b6004546103c3906001600160a01b031681565b610390610476366004612e32565b610ffc565b610414610489366004612e6f565b60086020526000908152604090205481565b61039a6104a9366004612e8a565b611056565b6103906104bc366004612bc3565b61106f565b61039a6111ea565b6103906104d7366004612ead565b6111f7565b6103906104ea366004612ed7565b611295565b61039a61157c565b61039a611589565b610507611596565b6040516103a793929190612f2e565b610414600f5481565b61039061052d366004612dd9565b6116bb565b610390610540366004612bc3565b61174a565b600b546103e89060ff1681565b610414610560366004612e6f565b611acc565b610390610573366004612e6f565b611ae7565b61041460125481565b61041461058f366004612e6f565b600d6020526000908152604090205481565b610390611b53565b6000546103c3906001600160a01b031681565b61039a611bd5565b6103906105d2366004612e32565b611be2565b6009546103e890600160a81b900460ff1681565b6105fe6105f9366004612e6f565b611c38565b6040516103a793929190612f63565b61039a611c60565b610390610623366004612f8b565b611c6d565b610390610636366004612dd9565b611d1a565b6103e8610649366004612ead565b611d82565b6009546103e890600160b01b900460ff1681565b610390610670366004612e32565b611e43565b610414610683366004612fee565b611e99565b610390610696366004613021565b611ec4565b6103906106a9366004612ed7565b611fad565b6103906106bc366004612dd9565b61208a565b6103906106cf366004613089565b61211d565b6103906106e2366004613102565b61226c565b6103906106f5366004612e32565b6122bb565b610414610708366004612fee565b600e60209081526000928352604080842090915290825290205481565b610390610733366004612df6565b612311565b6017546103e89060ff1681565b610390610753366004612e6f565b6124df565b610390610766366004612e6f565b6125c9565b6009546103e890600160a01b900460ff1681565b61039061078d366004612dd9565b612635565b6107a56107a0366004613102565b61269d565b604080516001600160a01b03958616815294909316602085015291830152151560608201526080016103a7565b6103906107e0366004612df6565b6126e6565b336001600160a01b0316600c83815481106108025761080261311b565b60009182526020909120600490910201546001600160a01b03161480159061083557506000546001600160a01b03163314155b1561087757604080518082018252600681526531313038303160d01b6020820152905162461bcd60e51b815261086e9190600401612c50565b60405180910390fd5b600c828154811061088a5761088a61311b565b6000918252602082206003600490920201015460ff16151590036108dc5760408051808201825260068152651898981c181960d11b6020820152905162461bcd60e51b815261086e9190600401612c50565b600c82815481106108ef576108ef61311b565b90600052602060002090600402016002015460086000600c85815481106109185761091861311b565b600091825260208083206004909202909101546001600160a01b0316835282019290925260400181208054909190610951908490613147565b9091555050600c80548390811061096a5761096a61311b565b906000526020600020906004020160020154600d6000600c85815481106109935761099361311b565b600091825260208083206004909202909101546001600160a01b03168352820192909252604001812080549091906109cc90849061315a565b925050819055506000600c83815481106109e8576109e861311b565b906000526020600020906004020160030160006101000a81548160ff021916908315150217905550817fa0cc3a4feb26502e6e6cd57b2113d58bdab80c6711d8252356be9a49945bb5f7600c8481548110610a4557610a4561311b565b6000918252602090912060049091020154600c80546001600160a01b039092169186908110610a7657610a7661311b565b6000918252602090912060016004909202010154604051610aa392916001600160a01b031690869061316d565b60405180910390a25050565b60018054610abc90613199565b80601f0160208091040260200160405190810160405280929190818152602001828054610ae890613199565b8015610b355780601f10610b0a57610100808354040283529160200191610b35565b820191906000526020600020905b815481529060010190602001808311610b1857829003601f168201915b505050505081565b600b5460009060ff161515600103610b8357604080518082018252600681526531313035303160d01b6020820152905162461bcd60e51b815261086e9190600401612c50565b8151835114610bc05760408051808201825260068152651898981a981960d11b6020820152905162461bcd60e51b815261086e9190600401612c50565b6000805b8451811015610bfc57838181518110610bdf57610bdf61311b565b602002602001015182610bf29190613147565b9150600101610bc4565b5080610c0733611acc565b1015610c4157604080518082018252600681526531313035303360d01b6020820152905162461bcd60e51b815261086e9190600401612c50565b6004546001600160a01b03163314610ca2576009546040805180820190915260068152650c4c4c0d4c0d60d21b602082015290600160a81b900460ff161515600114610ca05760405162461bcd60e51b815260040161086e9190612c50565b505b606060006001935060005b8651811015610d7957610cd9878281518110610ccb57610ccb61311b565b60200260200101513b151590565b15610d2257610d1b878281518110610cf357610cf361311b565b6020026020010151878381518110610d0d57610d0d61311b565b60200260200101518561280e565b9150610d62565b610d5f878281518110610d3757610d3761311b565b6020026020010151878381518110610d5157610d5161311b565b602002602001015185612929565b91505b811515600003610d7157600094505b600101610cad565b505050505b92915050565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b03163314610dcd5760405162461bcd60e51b815260040161086e9190612c50565b50600b805460ff19168215159081179091556040519081527fe1455bc53682229469d6919bb96d7b338cbffea93170dfb5f02242c22fb6d07f9060200160405180910390a150565b6000805460408051808201909152600681526535303030303160d01b6020820152906001600160a01b03163314610e5f5760405162461bcd60e51b815260040161086e9190612c50565b5081610e6a85611acc565b1015610ea457604080518082018252600681526531313036303160d01b6020820152905162461bcd60e51b815261086e9190600401612c50565b6060833b15610f6957610ec083610eba87611acc565b90612aed565b6001600160a01b038616600090815260086020526040902055610eec83610ee686611acc565b90612b00565b6001600160a01b0385166000818152600860205260409081902092909255905163607705c560e11b815285919063c0ee0b8a90610f31903390889087906004016131d3565b600060405180830381600087803b158015610f4b57600080fd5b505af1158015610f5f573d6000803e3d6000fd5b5050505050610fb6565b610f7683610eba87611acc565b6001600160a01b038616600090815260086020526040902055610f9c83610ee686611acc565b6001600160a01b0385166000908152600860205260409020555b836001600160a01b0316856001600160a01b031660008051602061341d83398151915285604051610fe991815260200190565b60405180910390a3506001949350505050565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b031633146110455760405162461bcd60e51b815260040161086e9190612c50565b506011611052828261324b565b5050565b60186020526000908152604090208054610abc90613199565b60095460408051808201909152600681526531313130303160d01b602082015290600160b01b900460ff1615156001146110bc5760405162461bcd60e51b815260040161086e9190612c50565b50600954600160a01b900460ff16151560010361118b5760095460005460405163d3da927f60e01b81523360048201526001600160a01b03918216602482015291169063d3da927f90604401602060405180830381865afa158015611125573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611149919061330b565b60408051808201909152600681526518989898181960d11b60208201529015156001146111895760405162461bcd60e51b815260040161086e9190612c50565b505b336000908152600a602052604090208281556002016111aa828261324b565b507f3bb9553f633a7ecb4cbc5f9885e750a522496ce06deff1ed9184180ca83940c03383836040516111de939291906131d3565b60405180910390a15050565b60058054610abc90613199565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b031633146112405760405162461bcd60e51b815260040161086e9190612c50565b506001600160a01b0382166000818152600a6020908152604091829020600101849055815192835282018390527fa42bd6bdfcb8f9b815c68e4ce0e16dec3f1e7ac53967ee8309653de522a735b191016111de565b600b5460ff1615806112b15750600954600160a81b900460ff16155b806112c35750816112c133611acc565b105b156112fc57604080518082018252600681526531313037303160d01b6020820152905162461bcd60e51b815261086e9190600401612c50565b6000546001600160a01b038481169116148015906113285750600954600160a01b900460ff1615156001145b156113e75760095460005460405163d3da927f60e01b81526001600160a01b038681166004830152918216602482015291169063d3da927f90604401602060405180830381865afa158015611381573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113a5919061330b565b6040805180820190915260068152651898981b981960d11b60208201529015156001146113e55760405162461bcd60e51b815260040161086e9190612c50565b505b336000908152600860205260408120805484929061140690849061315a565b9091555050336000908152600d60205260408120805484929061142a908490613147565b9091555050600c805460408051608081018252338082526001600160a01b038881166020840190815283850189815260016060860181815290880189556000989098529351600487027fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c7810180549285166001600160a01b031993841617905591517fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c8830180549190941691161790915591517fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c983015593517fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8ca909101805491151560ff1990921691909117905551909182917fa256c3bc72c26fbfd6285cfde8c7e345b4d0c7ccfc725d103e9f129c5d8a039a9161156e91889088908890613328565b60405180910390a250505050565b60068054610abc90613199565b60118054610abc90613199565b60148054601580549192916115aa90613199565b80601f01602080910402602001604051908101604052809291908181526020018280546115d690613199565b80156116235780601f106115f857610100808354040283529160200191611623565b820191906000526020600020905b81548152906001019060200180831161160657829003601f168201915b50505050509080600201805461163890613199565b80601f016020809104026020016040519081016040528092919081815260200182805461166490613199565b80156116b15780601f10611686576101008083540402835291602001916116b1565b820191906000526020600020905b81548152906001019060200180831161169457829003601f168201915b5050505050905083565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b031633146117045760405162461bcd60e51b815260040161086e9190612c50565b506007805460ff191682151590811790915560405160ff9091161515907fe1e5c6f5867805bf3fab73f4df4b80d0e87e9262a7bc22ac7c2cb3fd5896222f90600090a250565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b031633146117935760405162461bcd60e51b815260040161086e9190612c50565b50600954600160a81b900460ff1615156000036117de57604080518082018252600681526531313039303160d01b6020820152905162461bcd60e51b815261086e9190600401612c50565b600c82815481106117f1576117f161311b565b6000918252602082206003600490920201015460ff16151590036118435760408051808201825260068152651898981c981960d11b6020820152905162461bcd60e51b815261086e9190600401612c50565b600c82815481106118565761185661311b565b90600052602060002090600402016002015460086000600c858154811061187f5761187f61311b565b60009182526020808320600160049093020191909101546001600160a01b03168352820192909252604001812080549091906118bc908490613147565b9091555050600c8054839081106118d5576118d561311b565b906000526020600020906004020160020154600d6000600c85815481106118fe576118fe61311b565b600091825260208083206004909202909101546001600160a01b031683528201929092526040018120805490919061193790849061315a565b925050819055506000600c83815481106119535761195361311b565b906000526020600020906004020160030160006101000a81548160ff021916908315150217905550817f6b50d6e4941ce7ae74ed7f7f51df5fb7680754c2815a094c66bea5ca80a40eb1600c84815481106119b0576119b061311b565b6000918252602090912060049091020154600c80546001600160a01b0390921691869081106119e1576119e161311b565b6000918252602090912060016004909202010154604051611a0e92916001600160a01b031690869061316d565b60405180910390a2600c8281548110611a2957611a2961311b565b6000918252602090912060016004909202010154600c80546001600160a01b039092169184908110611a5d57611a5d61311b565b6000918252602090912060049091020154600c80546001600160a01b039092169160008051602061341d833981519152919086908110611a9f57611a9f61311b565b906000526020600020906004020160020154604051611ac091815260200190565b60405180910390a35050565b6001600160a01b031660009081526008602052604090205490565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b03163314611b305760405162461bcd60e51b815260040161086e9190612c50565b50600480546001600160a01b0319166001600160a01b0392909216919091179055565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b03163314611b9c5760405162461bcd60e51b815260040161086e9190612c50565b506013805460ff191660011790556040517f8298c3671093b19970d7c94ce1f23925a962f36fec31d25075d9be072b73e10390600090a1565b60108054610abc90613199565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b03163314611c2b5760405162461bcd60e51b815260040161086e9190612c50565b506006611052828261324b565b600a602052600090815260409020805460018201546002830180549293919261163890613199565b60028054610abc90613199565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b03163314611cb65760405162461bcd60e51b815260040161086e9190612c50565b5060148390556015611cc8838261324b565b506016611cd5828261324b565b506014546040517ff89b6034f2b759ebb2dfb08461be917a1b54f2e0523c895e7f9b5e5e14dd013e91611d0d916015906016906133d8565b60405180910390a1505050565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b03163314611d635760405162461bcd60e51b815260040161086e9190612c50565b5060098054911515600160a81b0260ff60a81b19909216919091179055565b600081611d8e33611acc565b10156040518060400160405280600681526020016531313034303160d01b81525090611dcd5760405162461bcd60e51b815260040161086e9190612c50565b506009546040805180820190915260068152651898981a181960d11b602082015290600160a81b900460ff161515600114611e1b5760405162461bcd60e51b815260040161086e9190612c50565b506060833b15611e3857611e3084848361280e565b915050610d7e565b611e30848483612929565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b03163314611e8c5760405162461bcd60e51b815260040161086e9190612c50565b506005611052828261324b565b6001600160a01b039182166000908152600e6020908152604080832093909416825291909152205490565b81611ecf3386611e99565b1015611f0957604080518082018252600681526518989818981960d11b6020820152905162461bcd60e51b815261086e9190600401612c50565b611f1782610eba3387611e99565b336000908152600e602090815260408083206001600160a01b0389168452909152902055611f4882610ee685611acc565b6001600160a01b038085166000908152600860205260409081902092909255905133918616907f7a1a1088c929a111dda2dc0ca1cc650aa78525d11fd3089abf20c8474f5d82cc90611f9f908790879087906131d3565b60405180910390a350505050565b81611fb733611acc565b1015611ff157604080518082018252600681526518989818181960d11b6020820152905162461bcd60e51b815261086e9190600401612c50565b611ffe82610eba33611acc565b33600081815260086020526040902091909155612022908390610ee6908690611e99565b6001600160a01b0384166000818152600e602090815260408083203380855292529182902093909355519091907ecd77abc69e7bbb6de9df8cbfcca8720df3a30decf9eefd187e72ab2ea2f5139061207d9086908690613403565b60405180910390a3505050565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b031633146120d35760405162461bcd60e51b815260040161086e9190612c50565b506009805460ff60b01b1916600160b01b831515908102919091179091556040517fa0c691180b8089c0c84e478ee67d6325768666cd889f13de016771c6f7af1f8890600090a250565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b031633146121665760405162461bcd60e51b815260040161086e9190612c50565b50816121728686611e99565b10156121ac57604080518082018252600681526531313132303160d01b6020820152905162461bcd60e51b815261086e9190600401612c50565b6121ba82610eba8787611e99565b6001600160a01b038087166000908152600e60209081526040808320938916835292905220556121ed82610ee685611acc565b60086000856001600160a01b03166001600160a01b0316815260200190815260200160002081905550846001600160a01b0316846001600160a01b03167f7a1a1088c929a111dda2dc0ca1cc650aa78525d11fd3089abf20c8474f5d82cc85858560405161225d939291906131d3565b60405180910390a35050505050565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b031633146122b55760405162461bcd60e51b815260040161086e9190612c50565b50601255565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b031633146123045760405162461bcd60e51b815260040161086e9190612c50565b506010611052828261324b565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b0316331461235a5760405162461bcd60e51b815260040161086e9190612c50565b506001600160a01b038216156123f857806123758385611e99565b10156123af57604080518082018252600681526531313131303160d01b6020820152905162461bcd60e51b815261086e9190600401612c50565b6123bd81610eba8486611e99565b6001600160a01b038084166000908152600e60209081526040808320938816835292905220556003546123f09082612aed565b600355612483565b6001600160a01b03831660009081526008602052604090205481111561244c57604080518082018252600681526518989898981960d11b6020820152905162461bcd60e51b815261086e9190600401612c50565b61245981610eba85611acc565b6001600160a01b03841660009081526008602052604090205560035461247f9082612aed565b6003555b816001600160a01b0316836001600160a01b0316336001600160a01b03167fee02732fab40ece8284c756220846dff4b8d32058b86b35b4f0459bf172fcef0846040516124d291815260200190565b60405180910390a4505050565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b031633146125285760405162461bcd60e51b815260040161086e9190612c50565b5060408051808201909152600681526535303031303160d01b60208201526001600160a01b03821661256d5760405162461bcd60e51b815260040161086e9190612c50565b50600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b031633146126125760405162461bcd60e51b815260040161086e9190612c50565b50600980546001600160a01b0319166001600160a01b0392909216919091179055565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b0316331461267e5760405162461bcd60e51b815260040161086e9190612c50565b5060098054911515600160a01b0260ff60a01b19909216919091179055565b600c81815481106126ad57600080fd5b600091825260209091206004909102018054600182015460028301546003909301546001600160a01b0392831694509116919060ff1684565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b0316331461272f5760405162461bcd60e51b815260040161086e9190612c50565b506001600160a01b038216156127885761274d81610ee68486611e99565b6001600160a01b038084166000908152600e60209081526040808320938816835292905220556003546127809082612b00565b6003556127bf565b61279581610ee685611acc565b6001600160a01b0384166000908152600860205260409020556003546127bb9082612b00565b6003555b816001600160a01b0316836001600160a01b0316336001600160a01b03167f65adeb76912378393e600cb6f64f3310842a42e1eae86273dc775d0c47a0f2dc846040516124d291815260200190565b60045460408051808201909152600681526531313033303160d01b60208201526000916001600160a01b0386811691161461285c5760405162461bcd60e51b815260040161086e9190612c50565b5061286a83610eba33611acc565b3360009081526008602052604090205561288783610ee686611acc565b6001600160a01b0385166000818152600860205260409081902092909255905163607705c560e11b815285919063c0ee0b8a906128cc903390889088906004016131d3565b600060405180830381600087803b1580156128e657600080fd5b505af11580156128fa573d6000803e3d6000fd5b50506040518681526001600160a01b038816925033915060008051602061341d83398151915290602001610fe9565b6004546000906001600160a01b0316331480159061294e5750600b5460ff1615156001145b1561298757604080518082018252600681526531313032303160d01b6020820152905162461bcd60e51b815261086e9190600401612c50565b6000546001600160a01b038581169116148015906129b35750600954600160a01b900460ff1615156001145b15612a725760095460005460405163d3da927f60e01b81526001600160a01b038781166004830152918216602482015291169063d3da927f90604401602060405180830381865afa158015612a0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a30919061330b565b60408051808201909152600681526518989819181960d11b6020820152901515600114612a705760405162461bcd60e51b815260040161086e9190612c50565b505b612a7f83610eba33611acc565b33600090815260086020526040902055612a9c83610ee686611acc565b6001600160a01b03851660008181526008602052604090819020929092559051339060008051602061341d83398151915290612adb9087815260200190565b60405180910390a35060019392505050565b6000612af9828461315a565b9392505050565b6000612af98284613147565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612b4b57612b4b612b0c565b604052919050565b600082601f830112612b6457600080fd5b813567ffffffffffffffff811115612b7e57612b7e612b0c565b612b91601f8201601f1916602001612b22565b818152846020838601011115612ba657600080fd5b816020850160208301376000918101602001919091529392505050565b60008060408385031215612bd657600080fd5b82359150602083013567ffffffffffffffff811115612bf457600080fd5b612c0085828601612b53565b9150509250929050565b6000815180845260005b81811015612c3057602081850181015186830182015201612c14565b506000602082860101526020601f19601f83011685010191505092915050565b602081526000612af96020830184612c0a565b600067ffffffffffffffff821115612c7d57612c7d612b0c565b5060051b60200190565b80356001600160a01b0381168114612c9e57600080fd5b919050565b600082601f830112612cb457600080fd5b81356020612cc9612cc483612c63565b612b22565b8083825260208201915060208460051b870101935086841115612ceb57600080fd5b602086015b84811015612d075780358352918301918301612cf0565b509695505050505050565b60008060408385031215612d2557600080fd5b823567ffffffffffffffff80821115612d3d57600080fd5b818501915085601f830112612d5157600080fd5b81356020612d61612cc483612c63565b82815260059290921b84018101918181019089841115612d8057600080fd5b948201945b83861015612da557612d9686612c87565b82529482019490820190612d85565b96505086013592505080821115612dbb57600080fd5b50612c0085828601612ca3565b8015158114612dd657600080fd5b50565b600060208284031215612deb57600080fd5b8135612af981612dc8565b600080600060608486031215612e0b57600080fd5b612e1484612c87565b9250612e2260208501612c87565b9150604084013590509250925092565b600060208284031215612e4457600080fd5b813567ffffffffffffffff811115612e5b57600080fd5b612e6784828501612b53565b949350505050565b600060208284031215612e8157600080fd5b612af982612c87565b600060208284031215612e9c57600080fd5b813560ff81168114612af957600080fd5b60008060408385031215612ec057600080fd5b612ec983612c87565b946020939093013593505050565b600080600060608486031215612eec57600080fd5b612ef584612c87565b925060208401359150604084013567ffffffffffffffff811115612f1857600080fd5b612f2486828701612b53565b9150509250925092565b838152606060208201526000612f476060830185612c0a565b8281036040840152612f598185612c0a565b9695505050505050565b838152826020820152606060408201526000612f826060830184612c0a565b95945050505050565b600080600060608486031215612fa057600080fd5b83359250602084013567ffffffffffffffff80821115612fbf57600080fd5b612fcb87838801612b53565b93506040860135915080821115612fe157600080fd5b50612f2486828701612b53565b6000806040838503121561300157600080fd5b61300a83612c87565b915061301860208401612c87565b90509250929050565b6000806000806080858703121561303757600080fd5b61304085612c87565b935061304e60208601612c87565b925060408501359150606085013567ffffffffffffffff81111561307157600080fd5b61307d87828801612b53565b91505092959194509250565b600080600080600060a086880312156130a157600080fd5b6130aa86612c87565b94506130b860208701612c87565b93506130c660408701612c87565b925060608601359150608086013567ffffffffffffffff8111156130e957600080fd5b6130f588828901612b53565b9150509295509295909350565b60006020828403121561311457600080fd5b5035919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b80820180821115610d7e57610d7e613131565b81810381811115610d7e57610d7e613131565b6001600160a01b03848116825283166020820152606060408201819052600090612f8290830184612c0a565b600181811c908216806131ad57607f821691505b6020821081036131cd57634e487b7160e01b600052602260045260246000fd5b50919050565b60018060a01b0384168152826020820152606060408201526000612f826060830184612c0a565b601f821115613246576000816000526020600020601f850160051c810160208610156132235750805b601f850160051c820191505b818110156132425782815560010161322f565b5050505b505050565b815167ffffffffffffffff81111561326557613265612b0c565b613279816132738454613199565b846131fa565b602080601f8311600181146132ae57600084156132965750858301515b600019600386901b1c1916600185901b178555613242565b600085815260208120601f198616915b828110156132dd578886015182559484019460019091019084016132be565b50858210156132fb5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121561331d57600080fd5b8151612af981612dc8565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612f5990830184612c0a565b6000815461336881613199565b808552602060018381168015613385576001811461339f576133cd565b60ff1985168884015283151560051b8801830195506133cd565b866000528260002060005b858110156133c55781548a82018601529083019084016133aa565b890184019650505b505050505092915050565b8381526060602082015260006133f1606083018561335b565b8281036040840152612f59818561335b565b828152604060208201526000612e676040830184612c0a56feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212201889db3f768c3826c5ce92020d70f772bf2f23adad1ce1774ab7ed5a27c863ee64736f6c63430008170033" + "bytecode": "60806040523480156200001157600080fd5b5060405162003c8938038062003c898339810160408190526200003491620001d7565b600080546001600160a01b031916331790556001620000548a8262000370565b50600262000063898262000370565b50600080546001600160a01b03191633179055600f879055601281905560038690556014859055601562000098858262000370565b506016620000a7848262000370565b506010620000b6838262000370565b50506013805460ff199081169091556007805490911660011790555050600354600080546001600160a01b031681526008602052604090205550506009805460ff60a01b1916600160a01b179055506200043c92505050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200013757600080fd5b81516001600160401b03808211156200015457620001546200010f565b604051601f8301601f19908116603f011681019082821181831017156200017f576200017f6200010f565b81604052838152602092508660208588010111156200019d57600080fd5b600091505b83821015620001c15785820183015181830184015290820190620001a2565b6000602085830101528094505050505092915050565b60008060008060008060008060006101208a8c031215620001f757600080fd5b89516001600160401b03808211156200020f57600080fd5b6200021d8d838e0162000125565b9a5060208c01519150808211156200023457600080fd5b620002428d838e0162000125565b995060408c0151985060608c0151975060808c0151965060a08c01519150808211156200026e57600080fd5b6200027c8d838e0162000125565b955060c08c01519150808211156200029357600080fd5b620002a18d838e0162000125565b945060e08c0151915080821115620002b857600080fd5b50620002c78c828d0162000125565b9250506101008a015190509295985092959850929598565b600181811c90821680620002f457607f821691505b6020821081036200031557634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200036b576000816000526020600020601f850160051c81016020861015620003465750805b601f850160051c820191505b81811015620003675782815560010162000352565b5050505b505050565b81516001600160401b038111156200038c576200038c6200010f565b620003a4816200039d8454620002df565b846200031b565b602080601f831160018114620003dc5760008415620003c35750858301515b600019600386901b1c1916600185901b17855562000367565b600085815260208120601f198616915b828110156200040d57888601518255948401946001909101908401620003ec565b50858210156200042c5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b61383d806200044c6000396000f3fe608060405234801561001057600080fd5b50600436106103995760003560e01c806383850bcb116101e9578063c267ce5f1161010f578063e8050052116100ad578063fd0e85691161007c578063fd0e8569146107c5578063fd14a222146107d9578063fef1b9c0146107ec578063ff12dcea1461082c57600080fd5b8063e80500521461077f578063edaab20814610792578063f2fde38b1461079f578063f7502a7c146107b257600080fd5b8063cb761015116100e9578063cb7610151461071b578063d93220581461072e578063db20266f14610741578063e7464db11461076c57600080fd5b8063c267ce5f146106e2578063c7109ec9146106f5578063ca5cbbb51461070857600080fd5b8063996f3a4b11610187578063b2a90a6011610156578063b2a90a6014610695578063b967a52e146106a9578063b9b3e06a146106bc578063bfe30fb0146106cf57600080fd5b8063996f3a4b146106495780639cd237071461065c5780639d8886c81461066f578063a9059cbb1461068257600080fd5b80638ed8a9bc116101c35780638ed8a9bc146105f857806392ff0d311461060b5780639301a78b1461061f57806395d89b411461064157600080fd5b806383850bcb146105d55780638da5cb5b146105dd5780638db9877c146105f057600080fd5b806336f7ab5e116102ce5780635c40f6f41161026c57806376fa7a311161023b57806376fa7a31146105865780637da68d34146105995780637ed6d103146105a257806381ebdd79146105b557600080fd5b80635c40f6f4146105405780635ccef3e7146105535780636f3b993f1461056657806370a082311461057357600080fd5b8063428630f6116102a8578063428630f61461051057806358c3b870146105185780635b473327146105205780635c2c20051461053757600080fd5b806336f7ab5e146104e257806340615cf8146104ea57806340eba90e146104fd57600080fd5b8063200d2ed21161033b57806325d608611161031557806325d608611461048957806327e235e31461049c5780632e027abe146104bc57806331cef447146104cf57600080fd5b8063200d2ed21461045657806323b872dd1461046357806325287d421461047657600080fd5b80630ed5a933116103775780630ed5a933146103fc578063153a1f3e1461041957806318160ddd1461042c5780631935a8801461044357600080fd5b806306eaa0b71461039e57806306fdde03146103b35780630af7eb0f146103d1575b600080fd5b6103b16103ac366004612f85565b61083f565b005b6103bb610b09565b6040516103c89190613012565b60405180910390f35b6009546103e4906001600160a01b031681565b6040516001600160a01b0390911681526020016103c8565b6013546104099060ff1681565b60405190151581526020016103c8565b610409610427366004613071565b610b97565b61043560035481565b6040519081526020016103c8565b6103b16104513660046130ee565b610dff565b6007546104099060ff1681565b610409610471366004613127565b610e90565b6004546103e4906001600160a01b031681565b6103b1610497366004613163565b611077565b6104356104aa3660046131a0565b60086020526000908152604090205481565b6103bb6104ca3660046131bb565b6110d1565b6103b16104dd366004612f85565b6110ea565b6103bb611265565b6103b16104f83660046131de565b611272565b6103b161050b366004613208565b611310565b6103bb6115f7565b6103bb611604565b610528611611565b6040516103c89392919061325f565b610435600f5481565b6103b161054e3660046130ee565b611736565b6103b1610561366004612f85565b6117c5565b600b546104099060ff1681565b6104356105813660046131a0565b611b47565b6103b16105943660046131a0565b611b62565b61043560125481565b6103b16105b0366004613294565b611bce565b6104356105c33660046131a0565b600d6020526000908152604090205481565b6103b1611ceb565b6000546103e4906001600160a01b031681565b6103bb611d6d565b6103b1610606366004613163565b611d7a565b60095461040990600160a81b900460ff1681565b61063261062d3660046131a0565b611dd0565b6040516103c89392919061332e565b6103bb611df8565b6103b1610657366004613356565b611e05565b6103b161066a3660046130ee565b611eb2565b6103b161067d366004613294565b611f1a565b6104096106903660046131de565b61202e565b60095461040990600160b01b900460ff1681565b6103b16106b7366004613163565b6120f5565b6104356106ca3660046133b9565b61214b565b6103b16106dd3660046133ec565b612176565b6103b16106f0366004613208565b61225f565b6103b16107033660046130ee565b61233c565b6103b1610716366004613454565b6123cf565b6103b16107293660046134cd565b61251e565b6103b161073c366004613163565b61256d565b61043561074f3660046133b9565b600e60209081526000928352604080842090915290825290205481565b6103b161077a366004613127565b6125c3565b61040961078d366004613294565b612791565b6017546104099060ff1681565b6103b16107ad3660046131a0565b6128b5565b6103b16107c03660046131a0565b61299f565b60095461040990600160a01b900460ff1681565b6103b16107e73660046130ee565b612a0b565b6107ff6107fa3660046134cd565b612a73565b604080516001600160a01b03958616815294909316602085015291830152151560608201526080016103c8565b6103b161083a366004613127565b612abc565b336001600160a01b0316600c838154811061085c5761085c6134e6565b60009182526020909120600490910201546001600160a01b03161480159061088f57506000546001600160a01b03163314155b156108d157604080518082018252600681526531313038303160d01b6020820152905162461bcd60e51b81526108c89190600401613012565b60405180910390fd5b600c82815481106108e4576108e46134e6565b6000918252602082206003600490920201015460ff16151590036109365760408051808201825260068152651898981c181960d11b6020820152905162461bcd60e51b81526108c89190600401613012565b600c8281548110610949576109496134e6565b90600052602060002090600402016002015460086000600c8581548110610972576109726134e6565b600091825260208083206004909202909101546001600160a01b03168352820192909252604001812080549091906109ab908490613512565b9091555050600c8054839081106109c4576109c46134e6565b906000526020600020906004020160020154600d6000600c85815481106109ed576109ed6134e6565b600091825260208083206004909202909101546001600160a01b0316835282019290925260400181208054909190610a26908490613525565b925050819055506000600c8381548110610a4257610a426134e6565b906000526020600020906004020160030160006101000a81548160ff021916908315150217905550817fa0cc3a4feb26502e6e6cd57b2113d58bdab80c6711d8252356be9a49945bb5f7600c8481548110610a9f57610a9f6134e6565b6000918252602090912060049091020154600c80546001600160a01b039092169186908110610ad057610ad06134e6565b6000918252602090912060016004909202010154604051610afd92916001600160a01b0316908690613538565b60405180910390a25050565b60018054610b1690613564565b80601f0160208091040260200160405190810160405280929190818152602001828054610b4290613564565b8015610b8f5780601f10610b6457610100808354040283529160200191610b8f565b820191906000526020600020905b815481529060010190602001808311610b7257829003601f168201915b505050505081565b600b5460009060ff161515600103610bdd57604080518082018252600681526531313035303160d01b6020820152905162461bcd60e51b81526108c89190600401613012565b838214610c185760408051808201825260068152651898981a981960d11b6020820152905162461bcd60e51b81526108c89190600401613012565b6000805b85811015610c5257848482818110610c3657610c366134e6565b9050602002013582610c489190613512565b9150600101610c1c565b5080610c5d33611b47565b1015610c9757604080518082018252600681526531313035303360d01b6020820152905162461bcd60e51b81526108c89190600401613012565b6004546001600160a01b03163314610cf8576009546040805180820190915260068152650c4c4c0d4c0d60d21b602082015290600160a81b900460ff161515600114610cf65760405162461bcd60e51b81526004016108c89190613012565b505b606060006001935060005b87811015610df357610d3b898983818110610d2057610d206134e6565b9050602002016020810190610d3591906131a0565b3b151590565b15610d9057610d89898983818110610d5557610d556134e6565b9050602002016020810190610d6a91906131a0565b888884818110610d7c57610d7c6134e6565b9050602002013585612be4565b9150610ddc565b610dd9898983818110610da557610da56134e6565b9050602002016020810190610dba91906131a0565b888884818110610dcc57610dcc6134e6565b9050602002013585612cff565b91505b811515600003610deb57600094505b600101610d03565b50505050949350505050565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b03163314610e485760405162461bcd60e51b81526004016108c89190613012565b50600b805460ff19168215159081179091556040519081527fe1455bc53682229469d6919bb96d7b338cbffea93170dfb5f02242c22fb6d07f9060200160405180910390a150565b6000805460408051808201909152600681526535303030303160d01b6020820152906001600160a01b03163314610eda5760405162461bcd60e51b81526004016108c89190613012565b5081610ee585611b47565b1015610f1f57604080518082018252600681526531313036303160d01b6020820152905162461bcd60e51b81526108c89190600401613012565b6060833b15610fe457610f3b83610f3587611b47565b90612ec3565b6001600160a01b038616600090815260086020526040902055610f6783610f6186611b47565b90612ed6565b6001600160a01b0385166000818152600860205260409081902092909255905163607705c560e11b815285919063c0ee0b8a90610fac9033908890879060040161359e565b600060405180830381600087803b158015610fc657600080fd5b505af1158015610fda573d6000803e3d6000fd5b5050505050611031565b610ff183610f3587611b47565b6001600160a01b03861660009081526008602052604090205561101783610f6186611b47565b6001600160a01b0385166000908152600860205260409020555b836001600160a01b0316856001600160a01b03166000805160206137e88339815191528560405161106491815260200190565b60405180910390a3506001949350505050565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b031633146110c05760405162461bcd60e51b81526004016108c89190613012565b5060116110cd8282613616565b5050565b60186020526000908152604090208054610b1690613564565b60095460408051808201909152600681526531313130303160d01b602082015290600160b01b900460ff1615156001146111375760405162461bcd60e51b81526004016108c89190613012565b50600954600160a01b900460ff1615156001036112065760095460005460405163d3da927f60e01b81523360048201526001600160a01b03918216602482015291169063d3da927f90604401602060405180830381865afa1580156111a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111c491906136d6565b60408051808201909152600681526518989898181960d11b60208201529015156001146112045760405162461bcd60e51b81526004016108c89190613012565b505b336000908152600a602052604090208281556002016112258282613616565b507f3bb9553f633a7ecb4cbc5f9885e750a522496ce06deff1ed9184180ca83940c03383836040516112599392919061359e565b60405180910390a15050565b60058054610b1690613564565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b031633146112bb5760405162461bcd60e51b81526004016108c89190613012565b506001600160a01b0382166000818152600a6020908152604091829020600101849055815192835282018390527fa42bd6bdfcb8f9b815c68e4ce0e16dec3f1e7ac53967ee8309653de522a735b19101611259565b600b5460ff16158061132c5750600954600160a81b900460ff16155b8061133e57508161133c33611b47565b105b1561137757604080518082018252600681526531313037303160d01b6020820152905162461bcd60e51b81526108c89190600401613012565b6000546001600160a01b038481169116148015906113a35750600954600160a01b900460ff1615156001145b156114625760095460005460405163d3da927f60e01b81526001600160a01b038681166004830152918216602482015291169063d3da927f90604401602060405180830381865afa1580156113fc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061142091906136d6565b6040805180820190915260068152651898981b981960d11b60208201529015156001146114605760405162461bcd60e51b81526004016108c89190613012565b505b3360009081526008602052604081208054849290611481908490613525565b9091555050336000908152600d6020526040812080548492906114a5908490613512565b9091555050600c805460408051608081018252338082526001600160a01b038881166020840190815283850189815260016060860181815290880189556000989098529351600487027fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c7810180549285166001600160a01b031993841617905591517fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c8830180549190941691161790915591517fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c983015593517fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8ca909101805491151560ff1990921691909117905551909182917fa256c3bc72c26fbfd6285cfde8c7e345b4d0c7ccfc725d103e9f129c5d8a039a916115e9918890889088906136f3565b60405180910390a250505050565b60068054610b1690613564565b60118054610b1690613564565b601480546015805491929161162590613564565b80601f016020809104026020016040519081016040528092919081815260200182805461165190613564565b801561169e5780601f106116735761010080835404028352916020019161169e565b820191906000526020600020905b81548152906001019060200180831161168157829003601f168201915b5050505050908060020180546116b390613564565b80601f01602080910402602001604051908101604052809291908181526020018280546116df90613564565b801561172c5780601f106117015761010080835404028352916020019161172c565b820191906000526020600020905b81548152906001019060200180831161170f57829003601f168201915b5050505050905083565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b0316331461177f5760405162461bcd60e51b81526004016108c89190613012565b506007805460ff191682151590811790915560405160ff9091161515907fe1e5c6f5867805bf3fab73f4df4b80d0e87e9262a7bc22ac7c2cb3fd5896222f90600090a250565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b0316331461180e5760405162461bcd60e51b81526004016108c89190613012565b50600954600160a81b900460ff16151560000361185957604080518082018252600681526531313039303160d01b6020820152905162461bcd60e51b81526108c89190600401613012565b600c828154811061186c5761186c6134e6565b6000918252602082206003600490920201015460ff16151590036118be5760408051808201825260068152651898981c981960d11b6020820152905162461bcd60e51b81526108c89190600401613012565b600c82815481106118d1576118d16134e6565b90600052602060002090600402016002015460086000600c85815481106118fa576118fa6134e6565b60009182526020808320600160049093020191909101546001600160a01b0316835282019290925260400181208054909190611937908490613512565b9091555050600c805483908110611950576119506134e6565b906000526020600020906004020160020154600d6000600c8581548110611979576119796134e6565b600091825260208083206004909202909101546001600160a01b03168352820192909252604001812080549091906119b2908490613525565b925050819055506000600c83815481106119ce576119ce6134e6565b906000526020600020906004020160030160006101000a81548160ff021916908315150217905550817f6b50d6e4941ce7ae74ed7f7f51df5fb7680754c2815a094c66bea5ca80a40eb1600c8481548110611a2b57611a2b6134e6565b6000918252602090912060049091020154600c80546001600160a01b039092169186908110611a5c57611a5c6134e6565b6000918252602090912060016004909202010154604051611a8992916001600160a01b0316908690613538565b60405180910390a2600c8281548110611aa457611aa46134e6565b6000918252602090912060016004909202010154600c80546001600160a01b039092169184908110611ad857611ad86134e6565b6000918252602090912060049091020154600c80546001600160a01b03909216916000805160206137e8833981519152919086908110611b1a57611b1a6134e6565b906000526020600020906004020160020154604051611b3b91815260200190565b60405180910390a35050565b6001600160a01b031660009081526008602052604090205490565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b03163314611bab5760405162461bcd60e51b81526004016108c89190613012565b50600480546001600160a01b0319166001600160a01b0392909216919091179055565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b03163314611c175760405162461bcd60e51b81526004016108c89190613012565b508483141580611c275750848114155b15611c6057604080518082018252600681526531313134303160d01b6020820152905162461bcd60e51b81526108c89190600401613012565b60005b85811015611ce257611cda878783818110611c8057611c806134e6565b9050602002016020810190611c9591906131a0565b868684818110611ca757611ca76134e6565b9050602002016020810190611cbc91906131a0565b858585818110611cce57611cce6134e6565b905060200201356125c3565b600101611c63565b50505050505050565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b03163314611d345760405162461bcd60e51b81526004016108c89190613012565b506013805460ff191660011790556040517f8298c3671093b19970d7c94ce1f23925a962f36fec31d25075d9be072b73e10390600090a1565b60108054610b1690613564565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b03163314611dc35760405162461bcd60e51b81526004016108c89190613012565b5060066110cd8282613616565b600a60205260009081526040902080546001820154600283018054929391926116b390613564565b60028054610b1690613564565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b03163314611e4e5760405162461bcd60e51b81526004016108c89190613012565b5060148390556015611e608382613616565b506016611e6d8282613616565b506014546040517ff89b6034f2b759ebb2dfb08461be917a1b54f2e0523c895e7f9b5e5e14dd013e91611ea5916015906016906137a3565b60405180910390a1505050565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b03163314611efb5760405162461bcd60e51b81526004016108c89190613012565b5060098054911515600160a81b0260ff60a81b19909216919091179055565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b03163314611f635760405162461bcd60e51b81526004016108c89190613012565b508483141580611f735750848114155b15611fac57604080518082018252600681526531313133303160d01b6020820152905162461bcd60e51b81526108c89190600401613012565b60005b85811015611ce257612026878783818110611fcc57611fcc6134e6565b9050602002016020810190611fe191906131a0565b868684818110611ff357611ff36134e6565b905060200201602081019061200891906131a0565b85858581811061201a5761201a6134e6565b90506020020135612abc565b600101611faf565b60008161203a33611b47565b10156040518060400160405280600681526020016531313034303160d01b815250906120795760405162461bcd60e51b81526004016108c89190613012565b506009546040805180820190915260068152651898981a181960d11b602082015290600160a81b900460ff1615156001146120c75760405162461bcd60e51b81526004016108c89190613012565b506060833b156120e4576120dc848483612be4565b9150506120ef565b6120dc848483612cff565b92915050565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b0316331461213e5760405162461bcd60e51b81526004016108c89190613012565b5060056110cd8282613616565b6001600160a01b039182166000908152600e6020908152604080832093909416825291909152205490565b81612181338661214b565b10156121bb57604080518082018252600681526518989818981960d11b6020820152905162461bcd60e51b81526108c89190600401613012565b6121c982610f35338761214b565b336000908152600e602090815260408083206001600160a01b03891684529091529020556121fa82610f6185611b47565b6001600160a01b038085166000908152600860205260409081902092909255905133918616907f7a1a1088c929a111dda2dc0ca1cc650aa78525d11fd3089abf20c8474f5d82cc906122519087908790879061359e565b60405180910390a350505050565b8161226933611b47565b10156122a357604080518082018252600681526518989818181960d11b6020820152905162461bcd60e51b81526108c89190600401613012565b6122b082610f3533611b47565b336000818152600860205260409020919091556122d4908390610f6190869061214b565b6001600160a01b0384166000818152600e602090815260408083203380855292529182902093909355519091907ecd77abc69e7bbb6de9df8cbfcca8720df3a30decf9eefd187e72ab2ea2f5139061232f90869086906137ce565b60405180910390a3505050565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b031633146123855760405162461bcd60e51b81526004016108c89190613012565b506009805460ff60b01b1916600160b01b831515908102919091179091556040517fa0c691180b8089c0c84e478ee67d6325768666cd889f13de016771c6f7af1f8890600090a250565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b031633146124185760405162461bcd60e51b81526004016108c89190613012565b5081612424868661214b565b101561245e57604080518082018252600681526531313132303160d01b6020820152905162461bcd60e51b81526108c89190600401613012565b61246c82610f35878761214b565b6001600160a01b038087166000908152600e602090815260408083209389168352929052205561249f82610f6185611b47565b60086000856001600160a01b03166001600160a01b0316815260200190815260200160002081905550846001600160a01b0316846001600160a01b03167f7a1a1088c929a111dda2dc0ca1cc650aa78525d11fd3089abf20c8474f5d82cc85858560405161250f9392919061359e565b60405180910390a35050505050565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b031633146125675760405162461bcd60e51b81526004016108c89190613012565b50601255565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b031633146125b65760405162461bcd60e51b81526004016108c89190613012565b5060106110cd8282613616565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b0316331461260c5760405162461bcd60e51b81526004016108c89190613012565b506001600160a01b038216156126aa5780612627838561214b565b101561266157604080518082018252600681526531313131303160d01b6020820152905162461bcd60e51b81526108c89190600401613012565b61266f81610f35848661214b565b6001600160a01b038084166000908152600e60209081526040808320938816835292905220556003546126a29082612ec3565b600355612735565b6001600160a01b0383166000908152600860205260409020548111156126fe57604080518082018252600681526518989898981960d11b6020820152905162461bcd60e51b81526108c89190600401613012565b61270b81610f3585611b47565b6001600160a01b0384166000908152600860205260409020556003546127319082612ec3565b6003555b816001600160a01b0316836001600160a01b0316336001600160a01b03167fee02732fab40ece8284c756220846dff4b8d32058b86b35b4f0459bf172fcef08460405161278491815260200190565b60405180910390a4505050565b6000805460408051808201909152600681526535303030303160d01b6020820152906001600160a01b031633146127db5760405162461bcd60e51b81526004016108c89190613012565b5085841415806127eb5750858214155b1561282457604080518082018252600681526531313135303160d01b6020820152905162461bcd60e51b81526108c89190600401613012565b60005b868110156128a75761289e888883818110612844576128446134e6565b905060200201602081019061285991906131a0565b87878481811061286b5761286b6134e6565b905060200201602081019061288091906131a0565b868685818110612892576128926134e6565b90506020020135610e90565b50600101612827565b506001979650505050505050565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b031633146128fe5760405162461bcd60e51b81526004016108c89190613012565b5060408051808201909152600681526535303031303160d01b60208201526001600160a01b0382166129435760405162461bcd60e51b81526004016108c89190613012565b50600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b031633146129e85760405162461bcd60e51b81526004016108c89190613012565b50600980546001600160a01b0319166001600160a01b0392909216919091179055565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b03163314612a545760405162461bcd60e51b81526004016108c89190613012565b5060098054911515600160a01b0260ff60a01b19909216919091179055565b600c8181548110612a8357600080fd5b600091825260209091206004909102018054600182015460028301546003909301546001600160a01b0392831694509116919060ff1684565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b03163314612b055760405162461bcd60e51b81526004016108c89190613012565b506001600160a01b03821615612b5e57612b2381610f61848661214b565b6001600160a01b038084166000908152600e6020908152604080832093881683529290522055600354612b569082612ed6565b600355612b95565b612b6b81610f6185611b47565b6001600160a01b038416600090815260086020526040902055600354612b919082612ed6565b6003555b816001600160a01b0316836001600160a01b0316336001600160a01b03167f65adeb76912378393e600cb6f64f3310842a42e1eae86273dc775d0c47a0f2dc8460405161278491815260200190565b60045460408051808201909152600681526531313033303160d01b60208201526000916001600160a01b03868116911614612c325760405162461bcd60e51b81526004016108c89190613012565b50612c4083610f3533611b47565b33600090815260086020526040902055612c5d83610f6186611b47565b6001600160a01b0385166000818152600860205260409081902092909255905163607705c560e11b815285919063c0ee0b8a90612ca29033908890889060040161359e565b600060405180830381600087803b158015612cbc57600080fd5b505af1158015612cd0573d6000803e3d6000fd5b50506040518681526001600160a01b03881692503391506000805160206137e883398151915290602001611064565b6004546000906001600160a01b03163314801590612d245750600b5460ff1615156001145b15612d5d57604080518082018252600681526531313032303160d01b6020820152905162461bcd60e51b81526108c89190600401613012565b6000546001600160a01b03858116911614801590612d895750600954600160a01b900460ff1615156001145b15612e485760095460005460405163d3da927f60e01b81526001600160a01b038781166004830152918216602482015291169063d3da927f90604401602060405180830381865afa158015612de2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e0691906136d6565b60408051808201909152600681526518989819181960d11b6020820152901515600114612e465760405162461bcd60e51b81526004016108c89190613012565b505b612e5583610f3533611b47565b33600090815260086020526040902055612e7283610f6186611b47565b6001600160a01b0385166000818152600860205260409081902092909255905133906000805160206137e883398151915290612eb19087815260200190565b60405180910390a35060019392505050565b6000612ecf8284613525565b9392505050565b6000612ecf8284613512565b634e487b7160e01b600052604160045260246000fd5b600082601f830112612f0957600080fd5b813567ffffffffffffffff80821115612f2457612f24612ee2565b604051601f8301601f19908116603f01168101908282118183101715612f4c57612f4c612ee2565b81604052838152866020858801011115612f6557600080fd5b836020870160208301376000602085830101528094505050505092915050565b60008060408385031215612f9857600080fd5b82359150602083013567ffffffffffffffff811115612fb657600080fd5b612fc285828601612ef8565b9150509250929050565b6000815180845260005b81811015612ff257602081850181015186830182015201612fd6565b506000602082860101526020601f19601f83011685010191505092915050565b602081526000612ecf6020830184612fcc565b60008083601f84011261303757600080fd5b50813567ffffffffffffffff81111561304f57600080fd5b6020830191508360208260051b850101111561306a57600080fd5b9250929050565b6000806000806040858703121561308757600080fd5b843567ffffffffffffffff8082111561309f57600080fd5b6130ab88838901613025565b909650945060208701359150808211156130c457600080fd5b506130d187828801613025565b95989497509550505050565b80151581146130eb57600080fd5b50565b60006020828403121561310057600080fd5b8135612ecf816130dd565b80356001600160a01b038116811461312257600080fd5b919050565b60008060006060848603121561313c57600080fd5b6131458461310b565b92506131536020850161310b565b9150604084013590509250925092565b60006020828403121561317557600080fd5b813567ffffffffffffffff81111561318c57600080fd5b61319884828501612ef8565b949350505050565b6000602082840312156131b257600080fd5b612ecf8261310b565b6000602082840312156131cd57600080fd5b813560ff81168114612ecf57600080fd5b600080604083850312156131f157600080fd5b6131fa8361310b565b946020939093013593505050565b60008060006060848603121561321d57600080fd5b6132268461310b565b925060208401359150604084013567ffffffffffffffff81111561324957600080fd5b61325586828701612ef8565b9150509250925092565b8381526060602082015260006132786060830185612fcc565b828103604084015261328a8185612fcc565b9695505050505050565b600080600080600080606087890312156132ad57600080fd5b863567ffffffffffffffff808211156132c557600080fd5b6132d18a838b01613025565b909850965060208901359150808211156132ea57600080fd5b6132f68a838b01613025565b9096509450604089013591508082111561330f57600080fd5b5061331c89828a01613025565b979a9699509497509295939492505050565b83815282602082015260606040820152600061334d6060830184612fcc565b95945050505050565b60008060006060848603121561336b57600080fd5b83359250602084013567ffffffffffffffff8082111561338a57600080fd5b61339687838801612ef8565b935060408601359150808211156133ac57600080fd5b5061325586828701612ef8565b600080604083850312156133cc57600080fd5b6133d58361310b565b91506133e36020840161310b565b90509250929050565b6000806000806080858703121561340257600080fd5b61340b8561310b565b93506134196020860161310b565b925060408501359150606085013567ffffffffffffffff81111561343c57600080fd5b61344887828801612ef8565b91505092959194509250565b600080600080600060a0868803121561346c57600080fd5b6134758661310b565b94506134836020870161310b565b93506134916040870161310b565b925060608601359150608086013567ffffffffffffffff8111156134b457600080fd5b6134c088828901612ef8565b9150509295509295909350565b6000602082840312156134df57600080fd5b5035919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b808201808211156120ef576120ef6134fc565b818103818111156120ef576120ef6134fc565b6001600160a01b0384811682528316602082015260606040820181905260009061334d90830184612fcc565b600181811c9082168061357857607f821691505b60208210810361359857634e487b7160e01b600052602260045260246000fd5b50919050565b60018060a01b038416815282602082015260606040820152600061334d6060830184612fcc565b601f821115613611576000816000526020600020601f850160051c810160208610156135ee5750805b601f850160051c820191505b8181101561360d578281556001016135fa565b5050505b505050565b815167ffffffffffffffff81111561363057613630612ee2565b6136448161363e8454613564565b846135c5565b602080601f83116001811461367957600084156136615750858301515b600019600386901b1c1916600185901b17855561360d565b600085815260208120601f198616915b828110156136a857888601518255948401946001909101908401613689565b50858210156136c65787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000602082840312156136e857600080fd5b8151612ecf816130dd565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061328a90830184612fcc565b6000815461373381613564565b808552602060018381168015613750576001811461376a57613798565b60ff1985168884015283151560051b880183019550613798565b866000528260002060005b858110156137905781548a8201860152908301908401613775565b890184019650505b505050505092915050565b8381526060602082015260006137bc6060830185613726565b828103604084015261328a8185613726565b8281526040602082015260006131986040830184612fcc56feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212203dc7178981c1cc23caba5209ae8d5253762ae426409935b27754c2f1f286c03064736f6c63430008170033", + "deployedBytecode": "608060405234801561001057600080fd5b50600436106103995760003560e01c806383850bcb116101e9578063c267ce5f1161010f578063e8050052116100ad578063fd0e85691161007c578063fd0e8569146107c5578063fd14a222146107d9578063fef1b9c0146107ec578063ff12dcea1461082c57600080fd5b8063e80500521461077f578063edaab20814610792578063f2fde38b1461079f578063f7502a7c146107b257600080fd5b8063cb761015116100e9578063cb7610151461071b578063d93220581461072e578063db20266f14610741578063e7464db11461076c57600080fd5b8063c267ce5f146106e2578063c7109ec9146106f5578063ca5cbbb51461070857600080fd5b8063996f3a4b11610187578063b2a90a6011610156578063b2a90a6014610695578063b967a52e146106a9578063b9b3e06a146106bc578063bfe30fb0146106cf57600080fd5b8063996f3a4b146106495780639cd237071461065c5780639d8886c81461066f578063a9059cbb1461068257600080fd5b80638ed8a9bc116101c35780638ed8a9bc146105f857806392ff0d311461060b5780639301a78b1461061f57806395d89b411461064157600080fd5b806383850bcb146105d55780638da5cb5b146105dd5780638db9877c146105f057600080fd5b806336f7ab5e116102ce5780635c40f6f41161026c57806376fa7a311161023b57806376fa7a31146105865780637da68d34146105995780637ed6d103146105a257806381ebdd79146105b557600080fd5b80635c40f6f4146105405780635ccef3e7146105535780636f3b993f1461056657806370a082311461057357600080fd5b8063428630f6116102a8578063428630f61461051057806358c3b870146105185780635b473327146105205780635c2c20051461053757600080fd5b806336f7ab5e146104e257806340615cf8146104ea57806340eba90e146104fd57600080fd5b8063200d2ed21161033b57806325d608611161031557806325d608611461048957806327e235e31461049c5780632e027abe146104bc57806331cef447146104cf57600080fd5b8063200d2ed21461045657806323b872dd1461046357806325287d421461047657600080fd5b80630ed5a933116103775780630ed5a933146103fc578063153a1f3e1461041957806318160ddd1461042c5780631935a8801461044357600080fd5b806306eaa0b71461039e57806306fdde03146103b35780630af7eb0f146103d1575b600080fd5b6103b16103ac366004612f85565b61083f565b005b6103bb610b09565b6040516103c89190613012565b60405180910390f35b6009546103e4906001600160a01b031681565b6040516001600160a01b0390911681526020016103c8565b6013546104099060ff1681565b60405190151581526020016103c8565b610409610427366004613071565b610b97565b61043560035481565b6040519081526020016103c8565b6103b16104513660046130ee565b610dff565b6007546104099060ff1681565b610409610471366004613127565b610e90565b6004546103e4906001600160a01b031681565b6103b1610497366004613163565b611077565b6104356104aa3660046131a0565b60086020526000908152604090205481565b6103bb6104ca3660046131bb565b6110d1565b6103b16104dd366004612f85565b6110ea565b6103bb611265565b6103b16104f83660046131de565b611272565b6103b161050b366004613208565b611310565b6103bb6115f7565b6103bb611604565b610528611611565b6040516103c89392919061325f565b610435600f5481565b6103b161054e3660046130ee565b611736565b6103b1610561366004612f85565b6117c5565b600b546104099060ff1681565b6104356105813660046131a0565b611b47565b6103b16105943660046131a0565b611b62565b61043560125481565b6103b16105b0366004613294565b611bce565b6104356105c33660046131a0565b600d6020526000908152604090205481565b6103b1611ceb565b6000546103e4906001600160a01b031681565b6103bb611d6d565b6103b1610606366004613163565b611d7a565b60095461040990600160a81b900460ff1681565b61063261062d3660046131a0565b611dd0565b6040516103c89392919061332e565b6103bb611df8565b6103b1610657366004613356565b611e05565b6103b161066a3660046130ee565b611eb2565b6103b161067d366004613294565b611f1a565b6104096106903660046131de565b61202e565b60095461040990600160b01b900460ff1681565b6103b16106b7366004613163565b6120f5565b6104356106ca3660046133b9565b61214b565b6103b16106dd3660046133ec565b612176565b6103b16106f0366004613208565b61225f565b6103b16107033660046130ee565b61233c565b6103b1610716366004613454565b6123cf565b6103b16107293660046134cd565b61251e565b6103b161073c366004613163565b61256d565b61043561074f3660046133b9565b600e60209081526000928352604080842090915290825290205481565b6103b161077a366004613127565b6125c3565b61040961078d366004613294565b612791565b6017546104099060ff1681565b6103b16107ad3660046131a0565b6128b5565b6103b16107c03660046131a0565b61299f565b60095461040990600160a01b900460ff1681565b6103b16107e73660046130ee565b612a0b565b6107ff6107fa3660046134cd565b612a73565b604080516001600160a01b03958616815294909316602085015291830152151560608201526080016103c8565b6103b161083a366004613127565b612abc565b336001600160a01b0316600c838154811061085c5761085c6134e6565b60009182526020909120600490910201546001600160a01b03161480159061088f57506000546001600160a01b03163314155b156108d157604080518082018252600681526531313038303160d01b6020820152905162461bcd60e51b81526108c89190600401613012565b60405180910390fd5b600c82815481106108e4576108e46134e6565b6000918252602082206003600490920201015460ff16151590036109365760408051808201825260068152651898981c181960d11b6020820152905162461bcd60e51b81526108c89190600401613012565b600c8281548110610949576109496134e6565b90600052602060002090600402016002015460086000600c8581548110610972576109726134e6565b600091825260208083206004909202909101546001600160a01b03168352820192909252604001812080549091906109ab908490613512565b9091555050600c8054839081106109c4576109c46134e6565b906000526020600020906004020160020154600d6000600c85815481106109ed576109ed6134e6565b600091825260208083206004909202909101546001600160a01b0316835282019290925260400181208054909190610a26908490613525565b925050819055506000600c8381548110610a4257610a426134e6565b906000526020600020906004020160030160006101000a81548160ff021916908315150217905550817fa0cc3a4feb26502e6e6cd57b2113d58bdab80c6711d8252356be9a49945bb5f7600c8481548110610a9f57610a9f6134e6565b6000918252602090912060049091020154600c80546001600160a01b039092169186908110610ad057610ad06134e6565b6000918252602090912060016004909202010154604051610afd92916001600160a01b0316908690613538565b60405180910390a25050565b60018054610b1690613564565b80601f0160208091040260200160405190810160405280929190818152602001828054610b4290613564565b8015610b8f5780601f10610b6457610100808354040283529160200191610b8f565b820191906000526020600020905b815481529060010190602001808311610b7257829003601f168201915b505050505081565b600b5460009060ff161515600103610bdd57604080518082018252600681526531313035303160d01b6020820152905162461bcd60e51b81526108c89190600401613012565b838214610c185760408051808201825260068152651898981a981960d11b6020820152905162461bcd60e51b81526108c89190600401613012565b6000805b85811015610c5257848482818110610c3657610c366134e6565b9050602002013582610c489190613512565b9150600101610c1c565b5080610c5d33611b47565b1015610c9757604080518082018252600681526531313035303360d01b6020820152905162461bcd60e51b81526108c89190600401613012565b6004546001600160a01b03163314610cf8576009546040805180820190915260068152650c4c4c0d4c0d60d21b602082015290600160a81b900460ff161515600114610cf65760405162461bcd60e51b81526004016108c89190613012565b505b606060006001935060005b87811015610df357610d3b898983818110610d2057610d206134e6565b9050602002016020810190610d3591906131a0565b3b151590565b15610d9057610d89898983818110610d5557610d556134e6565b9050602002016020810190610d6a91906131a0565b888884818110610d7c57610d7c6134e6565b9050602002013585612be4565b9150610ddc565b610dd9898983818110610da557610da56134e6565b9050602002016020810190610dba91906131a0565b888884818110610dcc57610dcc6134e6565b9050602002013585612cff565b91505b811515600003610deb57600094505b600101610d03565b50505050949350505050565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b03163314610e485760405162461bcd60e51b81526004016108c89190613012565b50600b805460ff19168215159081179091556040519081527fe1455bc53682229469d6919bb96d7b338cbffea93170dfb5f02242c22fb6d07f9060200160405180910390a150565b6000805460408051808201909152600681526535303030303160d01b6020820152906001600160a01b03163314610eda5760405162461bcd60e51b81526004016108c89190613012565b5081610ee585611b47565b1015610f1f57604080518082018252600681526531313036303160d01b6020820152905162461bcd60e51b81526108c89190600401613012565b6060833b15610fe457610f3b83610f3587611b47565b90612ec3565b6001600160a01b038616600090815260086020526040902055610f6783610f6186611b47565b90612ed6565b6001600160a01b0385166000818152600860205260409081902092909255905163607705c560e11b815285919063c0ee0b8a90610fac9033908890879060040161359e565b600060405180830381600087803b158015610fc657600080fd5b505af1158015610fda573d6000803e3d6000fd5b5050505050611031565b610ff183610f3587611b47565b6001600160a01b03861660009081526008602052604090205561101783610f6186611b47565b6001600160a01b0385166000908152600860205260409020555b836001600160a01b0316856001600160a01b03166000805160206137e88339815191528560405161106491815260200190565b60405180910390a3506001949350505050565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b031633146110c05760405162461bcd60e51b81526004016108c89190613012565b5060116110cd8282613616565b5050565b60186020526000908152604090208054610b1690613564565b60095460408051808201909152600681526531313130303160d01b602082015290600160b01b900460ff1615156001146111375760405162461bcd60e51b81526004016108c89190613012565b50600954600160a01b900460ff1615156001036112065760095460005460405163d3da927f60e01b81523360048201526001600160a01b03918216602482015291169063d3da927f90604401602060405180830381865afa1580156111a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111c491906136d6565b60408051808201909152600681526518989898181960d11b60208201529015156001146112045760405162461bcd60e51b81526004016108c89190613012565b505b336000908152600a602052604090208281556002016112258282613616565b507f3bb9553f633a7ecb4cbc5f9885e750a522496ce06deff1ed9184180ca83940c03383836040516112599392919061359e565b60405180910390a15050565b60058054610b1690613564565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b031633146112bb5760405162461bcd60e51b81526004016108c89190613012565b506001600160a01b0382166000818152600a6020908152604091829020600101849055815192835282018390527fa42bd6bdfcb8f9b815c68e4ce0e16dec3f1e7ac53967ee8309653de522a735b19101611259565b600b5460ff16158061132c5750600954600160a81b900460ff16155b8061133e57508161133c33611b47565b105b1561137757604080518082018252600681526531313037303160d01b6020820152905162461bcd60e51b81526108c89190600401613012565b6000546001600160a01b038481169116148015906113a35750600954600160a01b900460ff1615156001145b156114625760095460005460405163d3da927f60e01b81526001600160a01b038681166004830152918216602482015291169063d3da927f90604401602060405180830381865afa1580156113fc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061142091906136d6565b6040805180820190915260068152651898981b981960d11b60208201529015156001146114605760405162461bcd60e51b81526004016108c89190613012565b505b3360009081526008602052604081208054849290611481908490613525565b9091555050336000908152600d6020526040812080548492906114a5908490613512565b9091555050600c805460408051608081018252338082526001600160a01b038881166020840190815283850189815260016060860181815290880189556000989098529351600487027fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c7810180549285166001600160a01b031993841617905591517fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c8830180549190941691161790915591517fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c983015593517fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8ca909101805491151560ff1990921691909117905551909182917fa256c3bc72c26fbfd6285cfde8c7e345b4d0c7ccfc725d103e9f129c5d8a039a916115e9918890889088906136f3565b60405180910390a250505050565b60068054610b1690613564565b60118054610b1690613564565b601480546015805491929161162590613564565b80601f016020809104026020016040519081016040528092919081815260200182805461165190613564565b801561169e5780601f106116735761010080835404028352916020019161169e565b820191906000526020600020905b81548152906001019060200180831161168157829003601f168201915b5050505050908060020180546116b390613564565b80601f01602080910402602001604051908101604052809291908181526020018280546116df90613564565b801561172c5780601f106117015761010080835404028352916020019161172c565b820191906000526020600020905b81548152906001019060200180831161170f57829003601f168201915b5050505050905083565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b0316331461177f5760405162461bcd60e51b81526004016108c89190613012565b506007805460ff191682151590811790915560405160ff9091161515907fe1e5c6f5867805bf3fab73f4df4b80d0e87e9262a7bc22ac7c2cb3fd5896222f90600090a250565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b0316331461180e5760405162461bcd60e51b81526004016108c89190613012565b50600954600160a81b900460ff16151560000361185957604080518082018252600681526531313039303160d01b6020820152905162461bcd60e51b81526108c89190600401613012565b600c828154811061186c5761186c6134e6565b6000918252602082206003600490920201015460ff16151590036118be5760408051808201825260068152651898981c981960d11b6020820152905162461bcd60e51b81526108c89190600401613012565b600c82815481106118d1576118d16134e6565b90600052602060002090600402016002015460086000600c85815481106118fa576118fa6134e6565b60009182526020808320600160049093020191909101546001600160a01b0316835282019290925260400181208054909190611937908490613512565b9091555050600c805483908110611950576119506134e6565b906000526020600020906004020160020154600d6000600c8581548110611979576119796134e6565b600091825260208083206004909202909101546001600160a01b03168352820192909252604001812080549091906119b2908490613525565b925050819055506000600c83815481106119ce576119ce6134e6565b906000526020600020906004020160030160006101000a81548160ff021916908315150217905550817f6b50d6e4941ce7ae74ed7f7f51df5fb7680754c2815a094c66bea5ca80a40eb1600c8481548110611a2b57611a2b6134e6565b6000918252602090912060049091020154600c80546001600160a01b039092169186908110611a5c57611a5c6134e6565b6000918252602090912060016004909202010154604051611a8992916001600160a01b0316908690613538565b60405180910390a2600c8281548110611aa457611aa46134e6565b6000918252602090912060016004909202010154600c80546001600160a01b039092169184908110611ad857611ad86134e6565b6000918252602090912060049091020154600c80546001600160a01b03909216916000805160206137e8833981519152919086908110611b1a57611b1a6134e6565b906000526020600020906004020160020154604051611b3b91815260200190565b60405180910390a35050565b6001600160a01b031660009081526008602052604090205490565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b03163314611bab5760405162461bcd60e51b81526004016108c89190613012565b50600480546001600160a01b0319166001600160a01b0392909216919091179055565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b03163314611c175760405162461bcd60e51b81526004016108c89190613012565b508483141580611c275750848114155b15611c6057604080518082018252600681526531313134303160d01b6020820152905162461bcd60e51b81526108c89190600401613012565b60005b85811015611ce257611cda878783818110611c8057611c806134e6565b9050602002016020810190611c9591906131a0565b868684818110611ca757611ca76134e6565b9050602002016020810190611cbc91906131a0565b858585818110611cce57611cce6134e6565b905060200201356125c3565b600101611c63565b50505050505050565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b03163314611d345760405162461bcd60e51b81526004016108c89190613012565b506013805460ff191660011790556040517f8298c3671093b19970d7c94ce1f23925a962f36fec31d25075d9be072b73e10390600090a1565b60108054610b1690613564565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b03163314611dc35760405162461bcd60e51b81526004016108c89190613012565b5060066110cd8282613616565b600a60205260009081526040902080546001820154600283018054929391926116b390613564565b60028054610b1690613564565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b03163314611e4e5760405162461bcd60e51b81526004016108c89190613012565b5060148390556015611e608382613616565b506016611e6d8282613616565b506014546040517ff89b6034f2b759ebb2dfb08461be917a1b54f2e0523c895e7f9b5e5e14dd013e91611ea5916015906016906137a3565b60405180910390a1505050565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b03163314611efb5760405162461bcd60e51b81526004016108c89190613012565b5060098054911515600160a81b0260ff60a81b19909216919091179055565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b03163314611f635760405162461bcd60e51b81526004016108c89190613012565b508483141580611f735750848114155b15611fac57604080518082018252600681526531313133303160d01b6020820152905162461bcd60e51b81526108c89190600401613012565b60005b85811015611ce257612026878783818110611fcc57611fcc6134e6565b9050602002016020810190611fe191906131a0565b868684818110611ff357611ff36134e6565b905060200201602081019061200891906131a0565b85858581811061201a5761201a6134e6565b90506020020135612abc565b600101611faf565b60008161203a33611b47565b10156040518060400160405280600681526020016531313034303160d01b815250906120795760405162461bcd60e51b81526004016108c89190613012565b506009546040805180820190915260068152651898981a181960d11b602082015290600160a81b900460ff1615156001146120c75760405162461bcd60e51b81526004016108c89190613012565b506060833b156120e4576120dc848483612be4565b9150506120ef565b6120dc848483612cff565b92915050565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b0316331461213e5760405162461bcd60e51b81526004016108c89190613012565b5060056110cd8282613616565b6001600160a01b039182166000908152600e6020908152604080832093909416825291909152205490565b81612181338661214b565b10156121bb57604080518082018252600681526518989818981960d11b6020820152905162461bcd60e51b81526108c89190600401613012565b6121c982610f35338761214b565b336000908152600e602090815260408083206001600160a01b03891684529091529020556121fa82610f6185611b47565b6001600160a01b038085166000908152600860205260409081902092909255905133918616907f7a1a1088c929a111dda2dc0ca1cc650aa78525d11fd3089abf20c8474f5d82cc906122519087908790879061359e565b60405180910390a350505050565b8161226933611b47565b10156122a357604080518082018252600681526518989818181960d11b6020820152905162461bcd60e51b81526108c89190600401613012565b6122b082610f3533611b47565b336000818152600860205260409020919091556122d4908390610f6190869061214b565b6001600160a01b0384166000818152600e602090815260408083203380855292529182902093909355519091907ecd77abc69e7bbb6de9df8cbfcca8720df3a30decf9eefd187e72ab2ea2f5139061232f90869086906137ce565b60405180910390a3505050565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b031633146123855760405162461bcd60e51b81526004016108c89190613012565b506009805460ff60b01b1916600160b01b831515908102919091179091556040517fa0c691180b8089c0c84e478ee67d6325768666cd889f13de016771c6f7af1f8890600090a250565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b031633146124185760405162461bcd60e51b81526004016108c89190613012565b5081612424868661214b565b101561245e57604080518082018252600681526531313132303160d01b6020820152905162461bcd60e51b81526108c89190600401613012565b61246c82610f35878761214b565b6001600160a01b038087166000908152600e602090815260408083209389168352929052205561249f82610f6185611b47565b60086000856001600160a01b03166001600160a01b0316815260200190815260200160002081905550846001600160a01b0316846001600160a01b03167f7a1a1088c929a111dda2dc0ca1cc650aa78525d11fd3089abf20c8474f5d82cc85858560405161250f9392919061359e565b60405180910390a35050505050565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b031633146125675760405162461bcd60e51b81526004016108c89190613012565b50601255565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b031633146125b65760405162461bcd60e51b81526004016108c89190613012565b5060106110cd8282613616565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b0316331461260c5760405162461bcd60e51b81526004016108c89190613012565b506001600160a01b038216156126aa5780612627838561214b565b101561266157604080518082018252600681526531313131303160d01b6020820152905162461bcd60e51b81526108c89190600401613012565b61266f81610f35848661214b565b6001600160a01b038084166000908152600e60209081526040808320938816835292905220556003546126a29082612ec3565b600355612735565b6001600160a01b0383166000908152600860205260409020548111156126fe57604080518082018252600681526518989898981960d11b6020820152905162461bcd60e51b81526108c89190600401613012565b61270b81610f3585611b47565b6001600160a01b0384166000908152600860205260409020556003546127319082612ec3565b6003555b816001600160a01b0316836001600160a01b0316336001600160a01b03167fee02732fab40ece8284c756220846dff4b8d32058b86b35b4f0459bf172fcef08460405161278491815260200190565b60405180910390a4505050565b6000805460408051808201909152600681526535303030303160d01b6020820152906001600160a01b031633146127db5760405162461bcd60e51b81526004016108c89190613012565b5085841415806127eb5750858214155b1561282457604080518082018252600681526531313135303160d01b6020820152905162461bcd60e51b81526108c89190600401613012565b60005b868110156128a75761289e888883818110612844576128446134e6565b905060200201602081019061285991906131a0565b87878481811061286b5761286b6134e6565b905060200201602081019061288091906131a0565b868685818110612892576128926134e6565b90506020020135610e90565b50600101612827565b506001979650505050505050565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b031633146128fe5760405162461bcd60e51b81526004016108c89190613012565b5060408051808201909152600681526535303031303160d01b60208201526001600160a01b0382166129435760405162461bcd60e51b81526004016108c89190613012565b50600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b031633146129e85760405162461bcd60e51b81526004016108c89190613012565b50600980546001600160a01b0319166001600160a01b0392909216919091179055565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b03163314612a545760405162461bcd60e51b81526004016108c89190613012565b5060098054911515600160a01b0260ff60a01b19909216919091179055565b600c8181548110612a8357600080fd5b600091825260209091206004909102018054600182015460028301546003909301546001600160a01b0392831694509116919060ff1684565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b03163314612b055760405162461bcd60e51b81526004016108c89190613012565b506001600160a01b03821615612b5e57612b2381610f61848661214b565b6001600160a01b038084166000908152600e6020908152604080832093881683529290522055600354612b569082612ed6565b600355612b95565b612b6b81610f6185611b47565b6001600160a01b038416600090815260086020526040902055600354612b919082612ed6565b6003555b816001600160a01b0316836001600160a01b0316336001600160a01b03167f65adeb76912378393e600cb6f64f3310842a42e1eae86273dc775d0c47a0f2dc8460405161278491815260200190565b60045460408051808201909152600681526531313033303160d01b60208201526000916001600160a01b03868116911614612c325760405162461bcd60e51b81526004016108c89190613012565b50612c4083610f3533611b47565b33600090815260086020526040902055612c5d83610f6186611b47565b6001600160a01b0385166000818152600860205260409081902092909255905163607705c560e11b815285919063c0ee0b8a90612ca29033908890889060040161359e565b600060405180830381600087803b158015612cbc57600080fd5b505af1158015612cd0573d6000803e3d6000fd5b50506040518681526001600160a01b03881692503391506000805160206137e883398151915290602001611064565b6004546000906001600160a01b03163314801590612d245750600b5460ff1615156001145b15612d5d57604080518082018252600681526531313032303160d01b6020820152905162461bcd60e51b81526108c89190600401613012565b6000546001600160a01b03858116911614801590612d895750600954600160a01b900460ff1615156001145b15612e485760095460005460405163d3da927f60e01b81526001600160a01b038781166004830152918216602482015291169063d3da927f90604401602060405180830381865afa158015612de2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e0691906136d6565b60408051808201909152600681526518989819181960d11b6020820152901515600114612e465760405162461bcd60e51b81526004016108c89190613012565b505b612e5583610f3533611b47565b33600090815260086020526040902055612e7283610f6186611b47565b6001600160a01b0385166000818152600860205260409081902092909255905133906000805160206137e883398151915290612eb19087815260200190565b60405180910390a35060019392505050565b6000612ecf8284613525565b9392505050565b6000612ecf8284613512565b634e487b7160e01b600052604160045260246000fd5b600082601f830112612f0957600080fd5b813567ffffffffffffffff80821115612f2457612f24612ee2565b604051601f8301601f19908116603f01168101908282118183101715612f4c57612f4c612ee2565b81604052838152866020858801011115612f6557600080fd5b836020870160208301376000602085830101528094505050505092915050565b60008060408385031215612f9857600080fd5b82359150602083013567ffffffffffffffff811115612fb657600080fd5b612fc285828601612ef8565b9150509250929050565b6000815180845260005b81811015612ff257602081850181015186830182015201612fd6565b506000602082860101526020601f19601f83011685010191505092915050565b602081526000612ecf6020830184612fcc565b60008083601f84011261303757600080fd5b50813567ffffffffffffffff81111561304f57600080fd5b6020830191508360208260051b850101111561306a57600080fd5b9250929050565b6000806000806040858703121561308757600080fd5b843567ffffffffffffffff8082111561309f57600080fd5b6130ab88838901613025565b909650945060208701359150808211156130c457600080fd5b506130d187828801613025565b95989497509550505050565b80151581146130eb57600080fd5b50565b60006020828403121561310057600080fd5b8135612ecf816130dd565b80356001600160a01b038116811461312257600080fd5b919050565b60008060006060848603121561313c57600080fd5b6131458461310b565b92506131536020850161310b565b9150604084013590509250925092565b60006020828403121561317557600080fd5b813567ffffffffffffffff81111561318c57600080fd5b61319884828501612ef8565b949350505050565b6000602082840312156131b257600080fd5b612ecf8261310b565b6000602082840312156131cd57600080fd5b813560ff81168114612ecf57600080fd5b600080604083850312156131f157600080fd5b6131fa8361310b565b946020939093013593505050565b60008060006060848603121561321d57600080fd5b6132268461310b565b925060208401359150604084013567ffffffffffffffff81111561324957600080fd5b61325586828701612ef8565b9150509250925092565b8381526060602082015260006132786060830185612fcc565b828103604084015261328a8185612fcc565b9695505050505050565b600080600080600080606087890312156132ad57600080fd5b863567ffffffffffffffff808211156132c557600080fd5b6132d18a838b01613025565b909850965060208901359150808211156132ea57600080fd5b6132f68a838b01613025565b9096509450604089013591508082111561330f57600080fd5b5061331c89828a01613025565b979a9699509497509295939492505050565b83815282602082015260606040820152600061334d6060830184612fcc565b95945050505050565b60008060006060848603121561336b57600080fd5b83359250602084013567ffffffffffffffff8082111561338a57600080fd5b61339687838801612ef8565b935060408601359150808211156133ac57600080fd5b5061325586828701612ef8565b600080604083850312156133cc57600080fd5b6133d58361310b565b91506133e36020840161310b565b90509250929050565b6000806000806080858703121561340257600080fd5b61340b8561310b565b93506134196020860161310b565b925060408501359150606085013567ffffffffffffffff81111561343c57600080fd5b61344887828801612ef8565b91505092959194509250565b600080600080600060a0868803121561346c57600080fd5b6134758661310b565b94506134836020870161310b565b93506134916040870161310b565b925060608601359150608086013567ffffffffffffffff8111156134b457600080fd5b6134c088828901612ef8565b9150509295509295909350565b6000602082840312156134df57600080fd5b5035919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b808201808211156120ef576120ef6134fc565b818103818111156120ef576120ef6134fc565b6001600160a01b0384811682528316602082015260606040820181905260009061334d90830184612fcc565b600181811c9082168061357857607f821691505b60208210810361359857634e487b7160e01b600052602260045260246000fd5b50919050565b60018060a01b038416815282602082015260606040820152600061334d6060830184612fcc565b601f821115613611576000816000526020600020601f850160051c810160208610156135ee5750805b601f850160051c820191505b8181101561360d578281556001016135fa565b5050505b505050565b815167ffffffffffffffff81111561363057613630612ee2565b6136448161363e8454613564565b846135c5565b602080601f83116001811461367957600084156136615750858301515b600019600386901b1c1916600185901b17855561360d565b600085815260208120601f198616915b828110156136a857888601518255948401946001909101908401613689565b50858210156136c65787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000602082840312156136e857600080fd5b8151612ecf816130dd565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061328a90830184612fcc565b6000815461373381613564565b808552602060018381168015613750576001811461376a57613798565b60ff1985168884015283151560051b880183019550613798565b866000528260002060005b858110156137905781548a8201860152908301908401613775565b890184019650505b505050505092915050565b8381526060602082015260006137bc6060830185613726565b828103604084015261328a8185613726565b8281526040602082015260006131986040830184612fcc56feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212203dc7178981c1cc23caba5209ae8d5253762ae426409935b27754c2f1f286c03064736f6c63430008170033" } \ No newline at end of file diff --git a/contracts/IbetStandardToken.json b/contracts/IbetStandardToken.json index 087f5b0d..5af63771 100644 --- a/contracts/IbetStandardToken.json +++ b/contracts/IbetStandardToken.json @@ -155,6 +155,35 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "_fromList", + "type": "address[]" + }, + { + "internalType": "address[]", + "name": "_toList", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "_valueList", + "type": "uint256[]" + } + ], + "name": "bulkTransferFrom", + "outputs": [ + { + "internalType": "bool", + "name": "success", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [], "name": "contactInformation", @@ -357,7 +386,7 @@ "outputs": [ { "internalType": "bool", - "name": "", + "name": "success", "type": "bool" } ], @@ -378,6 +407,6 @@ "type": "function" } ], - "bytecode": "60806040523480156200001157600080fd5b50604051620016e8380380620016e88339810160408190526200003491620001d6565b60008054600160a060020a0319908116339182161717905560016200005a878262000352565b50600262000069868262000352565b50600384905560048054600160a060020a031916600160a060020a03858116919091179091556000805490911681526008602052604090208490556007805460ff191660011790556005620000bf838262000352565b506006620000ce828262000352565b5050505050505062000424565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f8301126200011c57600080fd5b81516001604060020a0380821115620001395762000139620000db565b604051601f8301601f19908116603f01168101908282118183101715620001645762000164620000db565b816040528381526020925086838588010111156200018157600080fd5b600091505b83821015620001a5578582018301518183018401529082019062000186565b600093810190920192909252949350505050565b8051600160a060020a0381168114620001d157600080fd5b919050565b60008060008060008060c08789031215620001f057600080fd5b86516001604060020a03808211156200020857600080fd5b620002168a838b016200010a565b975060208901519150808211156200022d57600080fd5b6200023b8a838b016200010a565b9650604089015195506200025260608a01620001b9565b945060808901519150808211156200026957600080fd5b620002778a838b016200010a565b935060a08901519150808211156200028e57600080fd5b506200029d89828a016200010a565b9150509295509295509295565b600281046001821680620002bf57607f821691505b602082108103620002f9577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b601f8211156200034d576000818152602081206020601f86010481016020861015620003285750805b6020601f860104820191505b81811015620003495782815560010162000334565b5050505b505050565b81516001604060020a038111156200036e576200036e620000db565b62000386816200037f8454620002aa565b84620002ff565b602080601f831160018114620003c25760008415620003a55750858301515b60028086026008870290910a600019041982161786555062000349565b600085815260208120601f198616915b82811015620003f357888601518255948401946001909101908401620003d2565b50858210156200041457878501516008601f88160260020a60001904191681555b5050505050600202600101905550565b6112b480620004346000396000f3fe608060405234801561001057600080fd5b5060043610610133576000357c0100000000000000000000000000000000000000000000000000000000900480635c40f6f4116100bf5780638ed8a9bc1161008e5780638ed8a9bc1461025957806395d89b411461026c578063a9059cbb14610274578063b967a52e14610287578063f2fde38b1461029a57600080fd5b80635c40f6f41461020b57806370a082311461022057806376fa7a31146102335780638da5cb5b1461024657600080fd5b806323b872dd1161010657806323b872dd1461019d57806325287d42146101b057806327e235e3146101db57806336f7ab5e146101fb578063428630f61461020357600080fd5b806306fdde0314610138578063153a1f3e1461015657806318160ddd14610179578063200d2ed214610190575b600080fd5b6101406102ad565b60405161014d9190610d70565b60405180910390f35b610169610164366004610e75565b61033b565b604051901515815260200161014d565b61018260035481565b60405190815260200161014d565b6007546101699060ff1681565b6101696101ab366004610f32565b61052e565b6004546101c390600160a060020a031681565b604051600160a060020a03909116815260200161014d565b6101826101e9366004610f6e565b60086020526000908152604090205481565b610140610762565b61014061076f565b61021e610219366004610f89565b61077c565b005b61018261022e366004610f6e565b610813565b61021e610241366004610f6e565b61082e565b6000546101c390600160a060020a031681565b61021e610267366004610fab565b6108af565b610140610911565b610169610282366004611040565b61091e565b61021e610295366004610fab565b6109a5565b61021e6102a8366004610f6e565b610a03565b600180546102ba9061106a565b80601f01602080910402602001604051908101604052809291908181526020018280546102e69061106a565b80156103335780601f1061030857610100808354040283529160200191610333565b820191906000526020600020905b81548152906001019060200180831161031657829003601f168201915b505050505081565b6000815183511461039d57604080518082018252600681527f31353032303100000000000000000000000000000000000000000000000000006020820152905160e560020a62461bcd0281526103949190600401610d70565b60405180910390fd5b6000805b84518110156103e3578381815181106103bc576103bc6110a7565b6020026020010151826103cf91906110d9565b9150806103db816110ec565b9150506103a1565b50806103ee33610813565b101561044257604080518082018252600681527f31353032303200000000000000000000000000000000000000000000000000006020820152905160e560020a62461bcd0281526103949190600401610d70565b606060006001935060005b86518110156105235761047987828151811061046b5761046b6110a7565b60200260200101513b151590565b156104c2576104bb878281518110610493576104936110a7565b60200260200101518783815181106104ad576104ad6110a7565b602002602001015185610b1c565b9150610502565b6104ff8782815181106104d7576104d76110a7565b60200260200101518783815181106104f1576104f16110a7565b602002602001015185610c7c565b91505b81151560000361051157600094505b8061051b816110ec565b91505061044d565b505050505b92915050565b60008054604080518082019091526006815260008051602061125f833981519152602082015290600160a060020a031633146105805760405160e560020a62461bcd0281526004016103949190610d70565b508161058b85610813565b10156105df57604080518082018252600681527f31353033303100000000000000000000000000000000000000000000000000006020820152905160e560020a62461bcd0281526103949190600401610d70565b6060833b156106bd576105fb836105f587610813565b90610d0b565b600160a060020a0386166000908152600860205260409020556106278361062186610813565b90610d1e565b600160a060020a038516600081815260086020526040908190209290925590517fc0ee0b8a00000000000000000000000000000000000000000000000000000000815285919063c0ee0b8a9061068590339088908790600401611105565b600060405180830381600087803b15801561069f57600080fd5b505af11580156106b3573d6000803e3d6000fd5b505050505061070a565b6106ca836105f587610813565b600160a060020a0386166000908152600860205260409020556106f08361062186610813565b600160a060020a0385166000908152600860205260409020555b83600160a060020a031685600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161074f91815260200190565b60405180910390a3506001949350505050565b600580546102ba9061106a565b600680546102ba9061106a565b600054604080518082019091526006815260008051602061125f833981519152602082015290600160a060020a031633146107cd5760405160e560020a62461bcd0281526004016103949190610d70565b506007805460ff191682151590811790915560405160ff9091161515907fe1e5c6f5867805bf3fab73f4df4b80d0e87e9262a7bc22ac7c2cb3fd5896222f90600090a250565b600160a060020a031660009081526008602052604090205490565b600054604080518082019091526006815260008051602061125f833981519152602082015290600160a060020a0316331461087f5760405160e560020a62461bcd0281526004016103949190610d70565b506004805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600054604080518082019091526006815260008051602061125f833981519152602082015290600160a060020a031633146109005760405160e560020a62461bcd0281526004016103949190610d70565b50600661090d8282611185565b5050565b600280546102ba9061106a565b60008161092a33610813565b101561097e57604080518082018252600681527f31353031303100000000000000000000000000000000000000000000000000006020820152905160e560020a62461bcd0281526103949190600401610d70565b6060833b1561099a57610992848483610b1c565b915050610528565b610992848483610c7c565b600054604080518082019091526006815260008051602061125f833981519152602082015290600160a060020a031633146109f65760405160e560020a62461bcd0281526004016103949190610d70565b50600561090d8282611185565b600054604080518082019091526006815260008051602061125f833981519152602082015290600160a060020a03163314610a545760405160e560020a62461bcd0281526004016103949190610d70565b5060408051808201909152600681527f35303031303100000000000000000000000000000000000000000000000000006020820152600160a060020a038216610ab35760405160e560020a62461bcd0281526004016103949190610d70565b5060008054604051600160a060020a03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60045460408051808201909152600681527f31353030303100000000000000000000000000000000000000000000000000006020820152600091600160a060020a03868116911614610b845760405160e560020a62461bcd0281526004016103949190610d70565b50610b92836105f533610813565b33600090815260086020526040902055610baf8361062186610813565b600160a060020a038516600081815260086020526040908190209290925590517fc0ee0b8a00000000000000000000000000000000000000000000000000000000815285919063c0ee0b8a90610c0d90339088908890600401611105565b600060405180830381600087803b158015610c2757600080fd5b505af1158015610c3b573d6000803e3d6000fd5b5050604051868152600160a060020a03881692503391507fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200161074f565b6000610c8b836105f533610813565b33600090815260086020526040902055610ca88361062186610813565b600160a060020a0385166000818152600860205260409081902092909255905133907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610cf99087815260200190565b60405180910390a35060019392505050565b6000610d17828461124b565b9392505050565b6000610d1782846110d9565b6000815180845260005b81811015610d5057602081850181015186830182015201610d34565b506000602082860101526020601f19601f83011685010191505092915050565b602081526000610d176020830184610d2a565b60e060020a634e487b7102600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610dc557610dc5610d83565b604052919050565b600067ffffffffffffffff821115610de757610de7610d83565b5060209081020190565b8035600160a060020a0381168114610e0857600080fd5b919050565b600082601f830112610e1e57600080fd5b81356020610e33610e2e83610dcd565b610d9c565b82815291810284018101918181019086841115610e4f57600080fd5b8286015b84811015610e6a5780358352918301918301610e53565b509695505050505050565b60008060408385031215610e8857600080fd5b823567ffffffffffffffff80821115610ea057600080fd5b818501915085601f830112610eb457600080fd5b81356020610ec4610e2e83610dcd565b82815291810284018101918181019089841115610ee057600080fd5b948201945b83861015610f0557610ef686610df1565b82529482019490820190610ee5565b96505086013592505080821115610f1b57600080fd5b50610f2885828601610e0d565b9150509250929050565b600080600060608486031215610f4757600080fd5b610f5084610df1565b9250610f5e60208501610df1565b9150604084013590509250925092565b600060208284031215610f8057600080fd5b610d1782610df1565b600060208284031215610f9b57600080fd5b81358015158114610d1757600080fd5b60006020808385031215610fbe57600080fd5b823567ffffffffffffffff80821115610fd657600080fd5b818501915085601f830112610fea57600080fd5b813581811115610ffc57610ffc610d83565b61100e601f8201601f19168501610d9c565b9150808252868482850101111561102457600080fd5b8084840185840137600090820190930192909252509392505050565b6000806040838503121561105357600080fd5b61105c83610df1565b946020939093013593505050565b60028104600182168061107e57607f821691505b6020821081036110a15760e060020a634e487b7102600052602260045260246000fd5b50919050565b60e060020a634e487b7102600052603260045260246000fd5b60e060020a634e487b7102600052601160045260246000fd5b80820180821115610528576105286110c0565b6000600182016110fe576110fe6110c0565b5060010190565b600160a060020a038416815282602082015260606040820152600061112d6060830184610d2a565b95945050505050565b601f821115611180576000818152602081206020601f8601048101602086101561115d5750805b6020601f860104820191505b8181101561117c57828155600101611169565b5050505b505050565b815167ffffffffffffffff81111561119f5761119f610d83565b6111b3816111ad845461106a565b84611136565b602080601f8311600181146111ec57600084156111d05750858301515b60028086026008870290910a600019041982161786555061117c565b600085815260208120601f198616915b8281101561121b578886015182559484019460019091019084016111fc565b508582101561123b57878501516008601f88160260020a60001904191681555b5050505050600202600101905550565b81810381811115610528576105286110c056fe3530303030310000000000000000000000000000000000000000000000000000a2646970667358221220310ee0f011302563a73d5fec6a050d24943dd3952128aa97e6d337e9615c9e2264736f6c63430008110033", - "deployedBytecode": "608060405234801561001057600080fd5b5060043610610133576000357c0100000000000000000000000000000000000000000000000000000000900480635c40f6f4116100bf5780638ed8a9bc1161008e5780638ed8a9bc1461025957806395d89b411461026c578063a9059cbb14610274578063b967a52e14610287578063f2fde38b1461029a57600080fd5b80635c40f6f41461020b57806370a082311461022057806376fa7a31146102335780638da5cb5b1461024657600080fd5b806323b872dd1161010657806323b872dd1461019d57806325287d42146101b057806327e235e3146101db57806336f7ab5e146101fb578063428630f61461020357600080fd5b806306fdde0314610138578063153a1f3e1461015657806318160ddd14610179578063200d2ed214610190575b600080fd5b6101406102ad565b60405161014d9190610d70565b60405180910390f35b610169610164366004610e75565b61033b565b604051901515815260200161014d565b61018260035481565b60405190815260200161014d565b6007546101699060ff1681565b6101696101ab366004610f32565b61052e565b6004546101c390600160a060020a031681565b604051600160a060020a03909116815260200161014d565b6101826101e9366004610f6e565b60086020526000908152604090205481565b610140610762565b61014061076f565b61021e610219366004610f89565b61077c565b005b61018261022e366004610f6e565b610813565b61021e610241366004610f6e565b61082e565b6000546101c390600160a060020a031681565b61021e610267366004610fab565b6108af565b610140610911565b610169610282366004611040565b61091e565b61021e610295366004610fab565b6109a5565b61021e6102a8366004610f6e565b610a03565b600180546102ba9061106a565b80601f01602080910402602001604051908101604052809291908181526020018280546102e69061106a565b80156103335780601f1061030857610100808354040283529160200191610333565b820191906000526020600020905b81548152906001019060200180831161031657829003601f168201915b505050505081565b6000815183511461039d57604080518082018252600681527f31353032303100000000000000000000000000000000000000000000000000006020820152905160e560020a62461bcd0281526103949190600401610d70565b60405180910390fd5b6000805b84518110156103e3578381815181106103bc576103bc6110a7565b6020026020010151826103cf91906110d9565b9150806103db816110ec565b9150506103a1565b50806103ee33610813565b101561044257604080518082018252600681527f31353032303200000000000000000000000000000000000000000000000000006020820152905160e560020a62461bcd0281526103949190600401610d70565b606060006001935060005b86518110156105235761047987828151811061046b5761046b6110a7565b60200260200101513b151590565b156104c2576104bb878281518110610493576104936110a7565b60200260200101518783815181106104ad576104ad6110a7565b602002602001015185610b1c565b9150610502565b6104ff8782815181106104d7576104d76110a7565b60200260200101518783815181106104f1576104f16110a7565b602002602001015185610c7c565b91505b81151560000361051157600094505b8061051b816110ec565b91505061044d565b505050505b92915050565b60008054604080518082019091526006815260008051602061125f833981519152602082015290600160a060020a031633146105805760405160e560020a62461bcd0281526004016103949190610d70565b508161058b85610813565b10156105df57604080518082018252600681527f31353033303100000000000000000000000000000000000000000000000000006020820152905160e560020a62461bcd0281526103949190600401610d70565b6060833b156106bd576105fb836105f587610813565b90610d0b565b600160a060020a0386166000908152600860205260409020556106278361062186610813565b90610d1e565b600160a060020a038516600081815260086020526040908190209290925590517fc0ee0b8a00000000000000000000000000000000000000000000000000000000815285919063c0ee0b8a9061068590339088908790600401611105565b600060405180830381600087803b15801561069f57600080fd5b505af11580156106b3573d6000803e3d6000fd5b505050505061070a565b6106ca836105f587610813565b600160a060020a0386166000908152600860205260409020556106f08361062186610813565b600160a060020a0385166000908152600860205260409020555b83600160a060020a031685600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161074f91815260200190565b60405180910390a3506001949350505050565b600580546102ba9061106a565b600680546102ba9061106a565b600054604080518082019091526006815260008051602061125f833981519152602082015290600160a060020a031633146107cd5760405160e560020a62461bcd0281526004016103949190610d70565b506007805460ff191682151590811790915560405160ff9091161515907fe1e5c6f5867805bf3fab73f4df4b80d0e87e9262a7bc22ac7c2cb3fd5896222f90600090a250565b600160a060020a031660009081526008602052604090205490565b600054604080518082019091526006815260008051602061125f833981519152602082015290600160a060020a0316331461087f5760405160e560020a62461bcd0281526004016103949190610d70565b506004805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600054604080518082019091526006815260008051602061125f833981519152602082015290600160a060020a031633146109005760405160e560020a62461bcd0281526004016103949190610d70565b50600661090d8282611185565b5050565b600280546102ba9061106a565b60008161092a33610813565b101561097e57604080518082018252600681527f31353031303100000000000000000000000000000000000000000000000000006020820152905160e560020a62461bcd0281526103949190600401610d70565b6060833b1561099a57610992848483610b1c565b915050610528565b610992848483610c7c565b600054604080518082019091526006815260008051602061125f833981519152602082015290600160a060020a031633146109f65760405160e560020a62461bcd0281526004016103949190610d70565b50600561090d8282611185565b600054604080518082019091526006815260008051602061125f833981519152602082015290600160a060020a03163314610a545760405160e560020a62461bcd0281526004016103949190610d70565b5060408051808201909152600681527f35303031303100000000000000000000000000000000000000000000000000006020820152600160a060020a038216610ab35760405160e560020a62461bcd0281526004016103949190610d70565b5060008054604051600160a060020a03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60045460408051808201909152600681527f31353030303100000000000000000000000000000000000000000000000000006020820152600091600160a060020a03868116911614610b845760405160e560020a62461bcd0281526004016103949190610d70565b50610b92836105f533610813565b33600090815260086020526040902055610baf8361062186610813565b600160a060020a038516600081815260086020526040908190209290925590517fc0ee0b8a00000000000000000000000000000000000000000000000000000000815285919063c0ee0b8a90610c0d90339088908890600401611105565b600060405180830381600087803b158015610c2757600080fd5b505af1158015610c3b573d6000803e3d6000fd5b5050604051868152600160a060020a03881692503391507fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200161074f565b6000610c8b836105f533610813565b33600090815260086020526040902055610ca88361062186610813565b600160a060020a0385166000818152600860205260409081902092909255905133907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610cf99087815260200190565b60405180910390a35060019392505050565b6000610d17828461124b565b9392505050565b6000610d1782846110d9565b6000815180845260005b81811015610d5057602081850181015186830182015201610d34565b506000602082860101526020601f19601f83011685010191505092915050565b602081526000610d176020830184610d2a565b60e060020a634e487b7102600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610dc557610dc5610d83565b604052919050565b600067ffffffffffffffff821115610de757610de7610d83565b5060209081020190565b8035600160a060020a0381168114610e0857600080fd5b919050565b600082601f830112610e1e57600080fd5b81356020610e33610e2e83610dcd565b610d9c565b82815291810284018101918181019086841115610e4f57600080fd5b8286015b84811015610e6a5780358352918301918301610e53565b509695505050505050565b60008060408385031215610e8857600080fd5b823567ffffffffffffffff80821115610ea057600080fd5b818501915085601f830112610eb457600080fd5b81356020610ec4610e2e83610dcd565b82815291810284018101918181019089841115610ee057600080fd5b948201945b83861015610f0557610ef686610df1565b82529482019490820190610ee5565b96505086013592505080821115610f1b57600080fd5b50610f2885828601610e0d565b9150509250929050565b600080600060608486031215610f4757600080fd5b610f5084610df1565b9250610f5e60208501610df1565b9150604084013590509250925092565b600060208284031215610f8057600080fd5b610d1782610df1565b600060208284031215610f9b57600080fd5b81358015158114610d1757600080fd5b60006020808385031215610fbe57600080fd5b823567ffffffffffffffff80821115610fd657600080fd5b818501915085601f830112610fea57600080fd5b813581811115610ffc57610ffc610d83565b61100e601f8201601f19168501610d9c565b9150808252868482850101111561102457600080fd5b8084840185840137600090820190930192909252509392505050565b6000806040838503121561105357600080fd5b61105c83610df1565b946020939093013593505050565b60028104600182168061107e57607f821691505b6020821081036110a15760e060020a634e487b7102600052602260045260246000fd5b50919050565b60e060020a634e487b7102600052603260045260246000fd5b60e060020a634e487b7102600052601160045260246000fd5b80820180821115610528576105286110c0565b6000600182016110fe576110fe6110c0565b5060010190565b600160a060020a038416815282602082015260606040820152600061112d6060830184610d2a565b95945050505050565b601f821115611180576000818152602081206020601f8601048101602086101561115d5750805b6020601f860104820191505b8181101561117c57828155600101611169565b5050505b505050565b815167ffffffffffffffff81111561119f5761119f610d83565b6111b3816111ad845461106a565b84611136565b602080601f8311600181146111ec57600084156111d05750858301515b60028086026008870290910a600019041982161786555061117c565b600085815260208120601f198616915b8281101561121b578886015182559484019460019091019084016111fc565b508582101561123b57878501516008601f88160260020a60001904191681555b5050505050600202600101905550565b81810381811115610528576105286110c056fe3530303030310000000000000000000000000000000000000000000000000000a2646970667358221220310ee0f011302563a73d5fec6a050d24943dd3952128aa97e6d337e9615c9e2264736f6c63430008110033" + "bytecode": "60806040523480156200001157600080fd5b506040516200167f3803806200167f8339810160408190526200003491620001c0565b600080546001600160a01b0319908116339182161717905560016200005a878262000325565b50600262000069868262000325565b506003849055600480546001600160a01b0319166001600160a01b03858116919091179091556000805490911681526008602052604090208490556007805460ff191660011790556005620000bf838262000325565b506006620000ce828262000325565b50505050505050620003f1565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200010357600080fd5b81516001600160401b0380821115620001205762000120620000db565b604051601f8301601f19908116603f011681019082821181831017156200014b576200014b620000db565b81604052838152602092508660208588010111156200016957600080fd5b600091505b838210156200018d57858201830151818301840152908201906200016e565b6000602085830101528094505050505092915050565b80516001600160a01b0381168114620001bb57600080fd5b919050565b60008060008060008060c08789031215620001da57600080fd5b86516001600160401b0380821115620001f257600080fd5b620002008a838b01620000f1565b975060208901519150808211156200021757600080fd5b620002258a838b01620000f1565b9650604089015195506200023c60608a01620001a3565b945060808901519150808211156200025357600080fd5b620002618a838b01620000f1565b935060a08901519150808211156200027857600080fd5b506200028789828a01620000f1565b9150509295509295509295565b600181811c90821680620002a957607f821691505b602082108103620002ca57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000320576000816000526020600020601f850160051c81016020861015620002fb5750805b601f850160051c820191505b818110156200031c5782815560010162000307565b5050505b505050565b81516001600160401b03811115620003415762000341620000db565b620003598162000352845462000294565b84620002d0565b602080601f831160018114620003915760008415620003785750858301515b600019600386901b1c1916600185901b1785556200031c565b600085815260208120601f198616915b82811015620003c257888601518255948401946001909101908401620003a1565b5085821015620003e15787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b61127e80620004016000396000f3fe608060405234801561001057600080fd5b50600436106101215760003560e01c80635c40f6f4116100ad57806395d89b411161007157806395d89b411461025a578063a9059cbb14610262578063b967a52e14610275578063e805005214610288578063f2fde38b1461029b57600080fd5b80635c40f6f4146101f957806370a082311461020e57806376fa7a31146102215780638da5cb5b146102345780638ed8a9bc1461024757600080fd5b806323b872dd116100f457806323b872dd1461018b57806325287d421461019e57806327e235e3146101c957806336f7ab5e146101e9578063428630f6146101f157600080fd5b806306fdde0314610126578063153a1f3e1461014457806318160ddd14610167578063200d2ed21461017e575b600080fd5b61012e6102ae565b60405161013b9190610d90565b60405180910390f35b610157610152366004610def565b61033c565b604051901515815260200161013b565b61017060035481565b60405190815260200161013b565b6007546101579060ff1681565b610157610199366004610e77565b610508565b6004546101b1906001600160a01b031681565b6040516001600160a01b03909116815260200161013b565b6101706101d7366004610eb3565b60086020526000908152604090205481565b61012e610701565b61012e61070e565b61020c610207366004610ece565b61071b565b005b61017061021c366004610eb3565b6107aa565b61020c61022f366004610eb3565b6107c5565b6000546101b1906001600160a01b031681565b61020c610255366004610f06565b610831565b61012e61088b565b610157610270366004610fb7565b610898565b61020c610283366004610f06565b61090b565b610157610296366004610fe1565b610961565b61020c6102a9366004610eb3565b610a85565b600180546102bb9061107b565b80601f01602080910402602001604051908101604052809291908181526020018280546102e79061107b565b80156103345780601f1061030957610100808354040283529160200191610334565b820191906000526020600020905b81548152906001019060200180831161031757829003601f168201915b505050505081565b600083821461038257604080518082018252600681526531353032303160d01b6020820152905162461bcd60e51b81526103799190600401610d90565b60405180910390fd5b6000805b858110156103bc578484828181106103a0576103a06110b5565b90506020020135826103b291906110e1565b9150600101610386565b50806103c7336107aa565b1015610401576040805180820182526006815265189a9819181960d11b6020820152905162461bcd60e51b81526103799190600401610d90565b606060006001935060005b878110156104fc57610444898983818110610429576104296110b5565b905060200201602081019061043e9190610eb3565b3b151590565b156104995761049289898381811061045e5761045e6110b5565b90506020020160208101906104739190610eb3565b888884818110610485576104856110b5565b9050602002013585610b6f565b91506104e5565b6104e28989838181106104ae576104ae6110b5565b90506020020160208101906104c39190610eb3565b8888848181106104d5576104d56110b5565b9050602002013585610c9c565b91505b8115156000036104f457600094505b60010161040c565b50505050949350505050565b6000805460408051808201909152600681526535303030303160d01b6020820152906001600160a01b031633146105525760405162461bcd60e51b81526004016103799190610d90565b508161055d856107aa565b101561059757604080518082018252600681526531353033303160d01b6020820152905162461bcd60e51b81526103799190600401610d90565b6060833b1561065c576105b3836105ad876107aa565b90610d2b565b6001600160a01b0386166000908152600860205260409020556105df836105d9866107aa565b90610d3e565b6001600160a01b0385166000818152600860205260409081902092909255905163607705c560e11b815285919063c0ee0b8a90610624903390889087906004016110f4565b600060405180830381600087803b15801561063e57600080fd5b505af1158015610652573d6000803e3d6000fd5b50505050506106a9565b610669836105ad876107aa565b6001600160a01b03861660009081526008602052604090205561068f836105d9866107aa565b6001600160a01b0385166000908152600860205260409020555b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516106ee91815260200190565b60405180910390a3506001949350505050565b600580546102bb9061107b565b600680546102bb9061107b565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b031633146107645760405162461bcd60e51b81526004016103799190610d90565b506007805460ff191682151590811790915560405160ff9091161515907fe1e5c6f5867805bf3fab73f4df4b80d0e87e9262a7bc22ac7c2cb3fd5896222f90600090a250565b6001600160a01b031660009081526008602052604090205490565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b0316331461080e5760405162461bcd60e51b81526004016103799190610d90565b50600480546001600160a01b0319166001600160a01b0392909216919091179055565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b0316331461087a5760405162461bcd60e51b81526004016103799190610d90565b5060066108878282611175565b5050565b600280546102bb9061107b565b6000816108a4336107aa565b10156108de57604080518082018252600681526531353031303160d01b6020820152905162461bcd60e51b81526103799190600401610d90565b6060833b156108fa576108f2848483610b6f565b915050610905565b6108f2848483610c9c565b92915050565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b031633146109545760405162461bcd60e51b81526004016103799190610d90565b5060056108878282611175565b6000805460408051808201909152600681526535303030303160d01b6020820152906001600160a01b031633146109ab5760405162461bcd60e51b81526004016103799190610d90565b5085841415806109bb5750858214155b156109f457604080518082018252600681526531353034303160d01b6020820152905162461bcd60e51b81526103799190600401610d90565b60005b86811015610a7757610a6e888883818110610a1457610a146110b5565b9050602002016020810190610a299190610eb3565b878784818110610a3b57610a3b6110b5565b9050602002016020810190610a509190610eb3565b868685818110610a6257610a626110b5565b90506020020135610508565b506001016109f7565b506001979650505050505050565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b03163314610ace5760405162461bcd60e51b81526004016103799190610d90565b5060408051808201909152600681526535303031303160d01b60208201526001600160a01b038216610b135760405162461bcd60e51b81526004016103799190610d90565b50600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60045460408051808201909152600681526531353030303160d01b60208201526000916001600160a01b03868116911614610bbd5760405162461bcd60e51b81526004016103799190610d90565b50610bcb836105ad336107aa565b33600090815260086020526040902055610be8836105d9866107aa565b6001600160a01b0385166000818152600860205260409081902092909255905163607705c560e11b815285919063c0ee0b8a90610c2d903390889088906004016110f4565b600060405180830381600087803b158015610c4757600080fd5b505af1158015610c5b573d6000803e3d6000fd5b50506040518681526001600160a01b03881692503391507fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016106ee565b6000610cab836105ad336107aa565b33600090815260086020526040902055610cc8836105d9866107aa565b6001600160a01b0385166000818152600860205260409081902092909255905133907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610d199087815260200190565b60405180910390a35060019392505050565b6000610d378284611235565b9392505050565b6000610d3782846110e1565b6000815180845260005b81811015610d7057602081850181015186830182015201610d54565b506000602082860101526020601f19601f83011685010191505092915050565b602081526000610d376020830184610d4a565b60008083601f840112610db557600080fd5b50813567ffffffffffffffff811115610dcd57600080fd5b6020830191508360208260051b8501011115610de857600080fd5b9250929050565b60008060008060408587031215610e0557600080fd5b843567ffffffffffffffff80821115610e1d57600080fd5b610e2988838901610da3565b90965094506020870135915080821115610e4257600080fd5b50610e4f87828801610da3565b95989497509550505050565b80356001600160a01b0381168114610e7257600080fd5b919050565b600080600060608486031215610e8c57600080fd5b610e9584610e5b565b9250610ea360208501610e5b565b9150604084013590509250925092565b600060208284031215610ec557600080fd5b610d3782610e5b565b600060208284031215610ee057600080fd5b81358015158114610d3757600080fd5b634e487b7160e01b600052604160045260246000fd5b600060208284031215610f1857600080fd5b813567ffffffffffffffff80821115610f3057600080fd5b818401915084601f830112610f4457600080fd5b813581811115610f5657610f56610ef0565b604051601f8201601f19908116603f01168101908382118183101715610f7e57610f7e610ef0565b81604052828152876020848701011115610f9757600080fd5b826020860160208301376000928101602001929092525095945050505050565b60008060408385031215610fca57600080fd5b610fd383610e5b565b946020939093013593505050565b60008060008060008060608789031215610ffa57600080fd5b863567ffffffffffffffff8082111561101257600080fd5b61101e8a838b01610da3565b9098509650602089013591508082111561103757600080fd5b6110438a838b01610da3565b9096509450604089013591508082111561105c57600080fd5b5061106989828a01610da3565b979a9699509497509295939492505050565b600181811c9082168061108f57607f821691505b6020821081036110af57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b80820180821115610905576109056110cb565b60018060a01b038416815282602082015260606040820152600061111b6060830184610d4a565b95945050505050565b601f821115611170576000816000526020600020601f850160051c8101602086101561114d5750805b601f850160051c820191505b8181101561116c57828155600101611159565b5050505b505050565b815167ffffffffffffffff81111561118f5761118f610ef0565b6111a38161119d845461107b565b84611124565b602080601f8311600181146111d857600084156111c05750858301515b600019600386901b1c1916600185901b17855561116c565b600085815260208120601f198616915b82811015611207578886015182559484019460019091019084016111e8565b50858210156112255787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b81810381811115610905576109056110cb56fea2646970667358221220c72472537806c9d16a68ae8841ee7aab5521633e64d31c5d72803e3b867fdb0a64736f6c63430008170033", + "deployedBytecode": "608060405234801561001057600080fd5b50600436106101215760003560e01c80635c40f6f4116100ad57806395d89b411161007157806395d89b411461025a578063a9059cbb14610262578063b967a52e14610275578063e805005214610288578063f2fde38b1461029b57600080fd5b80635c40f6f4146101f957806370a082311461020e57806376fa7a31146102215780638da5cb5b146102345780638ed8a9bc1461024757600080fd5b806323b872dd116100f457806323b872dd1461018b57806325287d421461019e57806327e235e3146101c957806336f7ab5e146101e9578063428630f6146101f157600080fd5b806306fdde0314610126578063153a1f3e1461014457806318160ddd14610167578063200d2ed21461017e575b600080fd5b61012e6102ae565b60405161013b9190610d90565b60405180910390f35b610157610152366004610def565b61033c565b604051901515815260200161013b565b61017060035481565b60405190815260200161013b565b6007546101579060ff1681565b610157610199366004610e77565b610508565b6004546101b1906001600160a01b031681565b6040516001600160a01b03909116815260200161013b565b6101706101d7366004610eb3565b60086020526000908152604090205481565b61012e610701565b61012e61070e565b61020c610207366004610ece565b61071b565b005b61017061021c366004610eb3565b6107aa565b61020c61022f366004610eb3565b6107c5565b6000546101b1906001600160a01b031681565b61020c610255366004610f06565b610831565b61012e61088b565b610157610270366004610fb7565b610898565b61020c610283366004610f06565b61090b565b610157610296366004610fe1565b610961565b61020c6102a9366004610eb3565b610a85565b600180546102bb9061107b565b80601f01602080910402602001604051908101604052809291908181526020018280546102e79061107b565b80156103345780601f1061030957610100808354040283529160200191610334565b820191906000526020600020905b81548152906001019060200180831161031757829003601f168201915b505050505081565b600083821461038257604080518082018252600681526531353032303160d01b6020820152905162461bcd60e51b81526103799190600401610d90565b60405180910390fd5b6000805b858110156103bc578484828181106103a0576103a06110b5565b90506020020135826103b291906110e1565b9150600101610386565b50806103c7336107aa565b1015610401576040805180820182526006815265189a9819181960d11b6020820152905162461bcd60e51b81526103799190600401610d90565b606060006001935060005b878110156104fc57610444898983818110610429576104296110b5565b905060200201602081019061043e9190610eb3565b3b151590565b156104995761049289898381811061045e5761045e6110b5565b90506020020160208101906104739190610eb3565b888884818110610485576104856110b5565b9050602002013585610b6f565b91506104e5565b6104e28989838181106104ae576104ae6110b5565b90506020020160208101906104c39190610eb3565b8888848181106104d5576104d56110b5565b9050602002013585610c9c565b91505b8115156000036104f457600094505b60010161040c565b50505050949350505050565b6000805460408051808201909152600681526535303030303160d01b6020820152906001600160a01b031633146105525760405162461bcd60e51b81526004016103799190610d90565b508161055d856107aa565b101561059757604080518082018252600681526531353033303160d01b6020820152905162461bcd60e51b81526103799190600401610d90565b6060833b1561065c576105b3836105ad876107aa565b90610d2b565b6001600160a01b0386166000908152600860205260409020556105df836105d9866107aa565b90610d3e565b6001600160a01b0385166000818152600860205260409081902092909255905163607705c560e11b815285919063c0ee0b8a90610624903390889087906004016110f4565b600060405180830381600087803b15801561063e57600080fd5b505af1158015610652573d6000803e3d6000fd5b50505050506106a9565b610669836105ad876107aa565b6001600160a01b03861660009081526008602052604090205561068f836105d9866107aa565b6001600160a01b0385166000908152600860205260409020555b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516106ee91815260200190565b60405180910390a3506001949350505050565b600580546102bb9061107b565b600680546102bb9061107b565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b031633146107645760405162461bcd60e51b81526004016103799190610d90565b506007805460ff191682151590811790915560405160ff9091161515907fe1e5c6f5867805bf3fab73f4df4b80d0e87e9262a7bc22ac7c2cb3fd5896222f90600090a250565b6001600160a01b031660009081526008602052604090205490565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b0316331461080e5760405162461bcd60e51b81526004016103799190610d90565b50600480546001600160a01b0319166001600160a01b0392909216919091179055565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b0316331461087a5760405162461bcd60e51b81526004016103799190610d90565b5060066108878282611175565b5050565b600280546102bb9061107b565b6000816108a4336107aa565b10156108de57604080518082018252600681526531353031303160d01b6020820152905162461bcd60e51b81526103799190600401610d90565b6060833b156108fa576108f2848483610b6f565b915050610905565b6108f2848483610c9c565b92915050565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b031633146109545760405162461bcd60e51b81526004016103799190610d90565b5060056108878282611175565b6000805460408051808201909152600681526535303030303160d01b6020820152906001600160a01b031633146109ab5760405162461bcd60e51b81526004016103799190610d90565b5085841415806109bb5750858214155b156109f457604080518082018252600681526531353034303160d01b6020820152905162461bcd60e51b81526103799190600401610d90565b60005b86811015610a7757610a6e888883818110610a1457610a146110b5565b9050602002016020810190610a299190610eb3565b878784818110610a3b57610a3b6110b5565b9050602002016020810190610a509190610eb3565b868685818110610a6257610a626110b5565b90506020020135610508565b506001016109f7565b506001979650505050505050565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b03163314610ace5760405162461bcd60e51b81526004016103799190610d90565b5060408051808201909152600681526535303031303160d01b60208201526001600160a01b038216610b135760405162461bcd60e51b81526004016103799190610d90565b50600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60045460408051808201909152600681526531353030303160d01b60208201526000916001600160a01b03868116911614610bbd5760405162461bcd60e51b81526004016103799190610d90565b50610bcb836105ad336107aa565b33600090815260086020526040902055610be8836105d9866107aa565b6001600160a01b0385166000818152600860205260409081902092909255905163607705c560e11b815285919063c0ee0b8a90610c2d903390889088906004016110f4565b600060405180830381600087803b158015610c4757600080fd5b505af1158015610c5b573d6000803e3d6000fd5b50506040518681526001600160a01b03881692503391507fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016106ee565b6000610cab836105ad336107aa565b33600090815260086020526040902055610cc8836105d9866107aa565b6001600160a01b0385166000818152600860205260409081902092909255905133907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610d199087815260200190565b60405180910390a35060019392505050565b6000610d378284611235565b9392505050565b6000610d3782846110e1565b6000815180845260005b81811015610d7057602081850181015186830182015201610d54565b506000602082860101526020601f19601f83011685010191505092915050565b602081526000610d376020830184610d4a565b60008083601f840112610db557600080fd5b50813567ffffffffffffffff811115610dcd57600080fd5b6020830191508360208260051b8501011115610de857600080fd5b9250929050565b60008060008060408587031215610e0557600080fd5b843567ffffffffffffffff80821115610e1d57600080fd5b610e2988838901610da3565b90965094506020870135915080821115610e4257600080fd5b50610e4f87828801610da3565b95989497509550505050565b80356001600160a01b0381168114610e7257600080fd5b919050565b600080600060608486031215610e8c57600080fd5b610e9584610e5b565b9250610ea360208501610e5b565b9150604084013590509250925092565b600060208284031215610ec557600080fd5b610d3782610e5b565b600060208284031215610ee057600080fd5b81358015158114610d3757600080fd5b634e487b7160e01b600052604160045260246000fd5b600060208284031215610f1857600080fd5b813567ffffffffffffffff80821115610f3057600080fd5b818401915084601f830112610f4457600080fd5b813581811115610f5657610f56610ef0565b604051601f8201601f19908116603f01168101908382118183101715610f7e57610f7e610ef0565b81604052828152876020848701011115610f9757600080fd5b826020860160208301376000928101602001929092525095945050505050565b60008060408385031215610fca57600080fd5b610fd383610e5b565b946020939093013593505050565b60008060008060008060608789031215610ffa57600080fd5b863567ffffffffffffffff8082111561101257600080fd5b61101e8a838b01610da3565b9098509650602089013591508082111561103757600080fd5b6110438a838b01610da3565b9096509450604089013591508082111561105c57600080fd5b5061106989828a01610da3565b979a9699509497509295939492505050565b600181811c9082168061108f57607f821691505b6020821081036110af57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b80820180821115610905576109056110cb565b60018060a01b038416815282602082015260606040820152600061111b6060830184610d4a565b95945050505050565b601f821115611170576000816000526020600020601f850160051c8101602086101561114d5750805b601f850160051c820191505b8181101561116c57828155600101611159565b5050505b505050565b815167ffffffffffffffff81111561118f5761118f610ef0565b6111a38161119d845461107b565b84611124565b602080601f8311600181146111d857600084156111c05750858301515b600019600386901b1c1916600185901b17855561116c565b600085815260208120601f198616915b82811015611207578886015182559484019460019091019084016111e8565b50858210156112255787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b81810381811115610905576109056110cb56fea2646970667358221220c72472537806c9d16a68ae8841ee7aab5521633e64d31c5d72803e3b867fdb0a64736f6c63430008170033" } \ No newline at end of file diff --git a/contracts/IbetStandardTokenInterface.json b/contracts/IbetStandardTokenInterface.json index 08723f35..30dd28ad 100644 --- a/contracts/IbetStandardTokenInterface.json +++ b/contracts/IbetStandardTokenInterface.json @@ -100,6 +100,35 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "_fromList", + "type": "address[]" + }, + { + "internalType": "address[]", + "name": "_toList", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "_valueList", + "type": "uint256[]" + } + ], + "name": "bulkTransferFrom", + "outputs": [ + { + "internalType": "bool", + "name": "success", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [], "name": "contactInformation", diff --git a/contracts/IbetStraightBond.json b/contracts/IbetStraightBond.json index d437a9ee..2cb18061 100644 --- a/contracts/IbetStraightBond.json +++ b/contracts/IbetStraightBond.json @@ -640,6 +640,52 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "_targetAddressList", + "type": "address[]" + }, + { + "internalType": "address[]", + "name": "_lockAddressList", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "_amounts", + "type": "uint256[]" + } + ], + "name": "bulkIssueFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "_targetAddressList", + "type": "address[]" + }, + { + "internalType": "address[]", + "name": "_lockAddressList", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "_amounts", + "type": "uint256[]" + } + ], + "name": "bulkRedeemFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [ { @@ -664,6 +710,35 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "_fromList", + "type": "address[]" + }, + { + "internalType": "address[]", + "name": "_toList", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "_valueList", + "type": "uint256[]" + } + ], + "name": "bulkTransferFrom", + "outputs": [ + { + "internalType": "bool", + "name": "success", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [ { @@ -1525,6 +1600,6 @@ "type": "function" } ], - "bytecode": "60806040523480156200001157600080fd5b5060405162003a1f38038062003a1f8339810160408190526200003491620001f5565b600080546001600160a01b0319908116339182161717905560016200005a8c8262000431565b506002620000698b8262000431565b506003899055600f889055601962000082888262000431565b50601262000091878262000431565b506013859055601b620000a5858262000431565b506014620000b4848262000431565b506015620000c3838262000431565b506016620000d2828262000431565b5050600354600080546001600160a01b031681526008602052604090205550506018805460ff1990811690915560078054909116600117905550506009805460ff60a01b1916600160a01b17905550620004fd945050505050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200015557600080fd5b81516001600160401b03808211156200017257620001726200012d565b604051601f8301601f19908116603f011681019082821181831017156200019d576200019d6200012d565b8160405283815260209250866020858801011115620001bb57600080fd5b600091505b83821015620001df5785820183015181830184015290820190620001c0565b6000602085830101528094505050505092915050565b60008060008060008060008060008060006101608c8e0312156200021857600080fd5b8b516001600160401b038111156200022f57600080fd5b6200023d8e828f0162000143565b60208e0151909c5090506001600160401b038111156200025c57600080fd5b6200026a8e828f0162000143565b9a505060408c0151985060608c0151975060808c015160018060401b038111156200029457600080fd5b620002a28e828f0162000143565b60a08e015190985090506001600160401b03811115620002c157600080fd5b620002cf8e828f0162000143565b60c08e015160e08f0151919850965090506001600160401b03811115620002f557600080fd5b620003038e828f0162000143565b6101008e015190955090506001600160401b038111156200032357600080fd5b620003318e828f0162000143565b6101208e015190945090506001600160401b038111156200035157600080fd5b6200035f8e828f0162000143565b6101408e015190935090506001600160401b038111156200037f57600080fd5b6200038d8e828f0162000143565b9150509295989b509295989b9093969950565b600181811c90821680620003b557607f821691505b602082108103620003d657634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200042c576000816000526020600020601f850160051c81016020861015620004075750805b601f850160051c820191505b81811015620004285782815560010162000413565b5050505b505050565b81516001600160401b038111156200044d576200044d6200012d565b62000465816200045e8454620003a0565b84620003dc565b602080601f8311600181146200049d5760008415620004845750858301515b600019600386901b1c1916600185901b17855562000428565b600085815260208120601f198616915b82811015620004ce57888601518255948401946001909101908401620004ad565b5085821015620004ed5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b613512806200050d6000396000f3fe608060405234801561001057600080fd5b50600436106103f15760003560e01c80637c3a00fd11610215578063c267ce5f11610125578063ef8032ef116100b8578063fc590d0911610087578063fc590d0914610849578063fd0e856914610851578063fd14a22214610865578063fef1b9c014610878578063ff12dcea146108b857600080fd5b8063ef8032ef14610808578063f2fde38b1461081b578063f35eeaef1461082e578063f7502a7c1461083657600080fd5b8063db20266f116100f4578063db20266f146107b9578063e7464db1146107e4578063ed62c2a0146107f7578063ef4474cd146107ff57600080fd5b8063c267ce5f14610778578063c7109ec91461078b578063ca5cbbb51461079e578063d5d9d0c7146107b157600080fd5b806395d89b41116101a8578063ab62f92e11610177578063ab62f92e14610718578063b2a90a601461072b578063b967a52e1461073f578063b9b3e06a14610752578063bfe30fb01461076557600080fd5b806395d89b41146106d757806397e4c513146106df5780639cd23707146106f2578063a9059cbb1461070557600080fd5b80638ed8a9bc116101e45780638ed8a9bc1461067b578063919fe52d1461068e57806392ff0d31146106a15780639301a78b146106b557600080fd5b80637c3a00fd1461062c57806381ebdd79146106355780638ac08bf1146106555780638da5cb5b1461066857600080fd5b80633a2b6939116103105780635c40f6f4116102a35780636666e49c116102725780636666e49c146105e95780636f3b993f146105f157806370740aab146105fe57806370a082311461060657806376fa7a311461061957600080fd5b80635c40f6f41461059d5780635ccef3e7146105b05780635f84f302146105c357806363783444146105d657600080fd5b8063428630f6116102df578063428630f61461057c57806344fd9caa1461058457806358c3b8701461058d57806359d936171461059557600080fd5b80633a2b69391461053b5780633b18b9841461054357806340615cf81461055657806340eba90e1461056957600080fd5b806323b872dd116103885780632e0ad004116103575780632e0ad0041461051057806331cef44714610518578063329dbddc1461052b57806336f7ab5e1461053357600080fd5b806323b872dd146104b757806325287d42146104ca57806325d60861146104dd57806327e235e3146104f057600080fd5b8063153a1f3e116103c4578063153a1f3e1461046d57806318160ddd146104805780631935a88014610497578063200d2ed2146104aa57600080fd5b8063034f6b21146103f657806306eaa0b71461041857806306fdde031461042d5780630af7eb0f14610442575b600080fd5b6018546104039060ff1681565b60405190151581526020015b60405180910390f35b61042b610426366004612dbc565b6108cb565b005b610435610b95565b60405161040f9190612e49565b600954610455906001600160a01b031681565b6040516001600160a01b03909116815260200161040f565b61040361047b366004612f0b565b610c23565b61048960035481565b60405190815260200161040f565b61042b6104a5366004612fd2565b610e26565b6007546104039060ff1681565b6104036104c5366004612fef565b610eb8565b600454610455906001600160a01b031681565b61042b6104eb36600461302b565b61109f565b6104896104fe366004613068565b60086020526000908152604090205481565b6104356110f9565b61042b610526366004612dbc565b611106565b610435611281565b61043561128e565b61043561129b565b61042b610551366004613083565b6112a8565b61042b61056436600461309c565b611327565b61042b6105773660046130c6565b6113c5565b6104356116ac565b610489600f5481565b6104356116b9565b6104356116c6565b61042b6105ab366004612fd2565b6116d3565b61042b6105be366004612dbc565b611762565b61042b6105d1366004613083565b611ae4565b61042b6105e436600461302b565b611b33565b610435611b89565b600b546104039060ff1681565b610435611b96565b610489610614366004613068565b611ba3565b61042b610627366004613068565b611bbe565b61048960105481565b610489610643366004613068565b600d6020526000908152604090205481565b61042b61066336600461302b565b611c2a565b600054610455906001600160a01b031681565b61042b61068936600461302b565b611c80565b61042b61069c36600461302b565b611cd6565b60095461040390600160a81b900460ff1681565b6106c86106c3366004613068565b611d2c565b60405161040f9392919061311d565b610435611dd7565b61042b6106ed36600461302b565b611de4565b61042b610700366004612fd2565b611e3a565b61040361071336600461309c565b611ea2565b61042b61072636600461302b565b611f63565b60095461040390600160b01b900460ff1681565b61042b61074d36600461302b565b611fb9565b610489610760366004613145565b61200f565b61042b610773366004613178565b61203a565b61042b6107863660046130c6565b612123565b61042b610799366004612fd2565b612200565b61042b6107ac3660046131e0565b612293565b61042b6123e2565b6104896107c7366004613145565b600e60209081526000928352604080842090915290825290205481565b61042b6107f2366004612fef565b612464565b610435612632565b61048960135481565b61042b610816366004613083565b61263f565b61042b610829366004613068565b6126be565b6104356127a8565b61042b610844366004613068565b6127b5565b610435612821565b60095461040390600160a01b900460ff1681565b61042b610873366004612fd2565b61282e565b61088b610886366004613083565b612896565b604080516001600160a01b039586168152949093166020850152918301521515606082015260800161040f565b61042b6108c6366004612fef565b6128df565b336001600160a01b0316600c83815481106108e8576108e8613259565b60009182526020909120600490910201546001600160a01b03161480159061091b57506000546001600160a01b03163314155b1561095d57604080518082018252600681526531323038303160d01b6020820152905162461bcd60e51b81526109549190600401612e49565b60405180910390fd5b600c828154811061097057610970613259565b6000918252602082206003600490920201015460ff16151590036109c25760408051808201825260068152651899181c181960d11b6020820152905162461bcd60e51b81526109549190600401612e49565b600c82815481106109d5576109d5613259565b90600052602060002090600402016002015460086000600c85815481106109fe576109fe613259565b600091825260208083206004909202909101546001600160a01b0316835282019290925260400181208054909190610a37908490613285565b9091555050600c805483908110610a5057610a50613259565b906000526020600020906004020160020154600d6000600c8581548110610a7957610a79613259565b600091825260208083206004909202909101546001600160a01b0316835282019290925260400181208054909190610ab2908490613298565b925050819055506000600c8381548110610ace57610ace613259565b906000526020600020906004020160030160006101000a81548160ff021916908315150217905550817fa0cc3a4feb26502e6e6cd57b2113d58bdab80c6711d8252356be9a49945bb5f7600c8481548110610b2b57610b2b613259565b6000918252602090912060049091020154600c80546001600160a01b039092169186908110610b5c57610b5c613259565b6000918252602090912060016004909202010154604051610b8992916001600160a01b03169086906132ab565b60405180910390a25050565b60018054610ba2906132d7565b80601f0160208091040260200160405190810160405280929190818152602001828054610bce906132d7565b8015610c1b5780601f10610bf057610100808354040283529160200191610c1b565b820191906000526020600020905b815481529060010190602001808311610bfe57829003601f168201915b505050505081565b60008151835114610c6257604080518082018252600681526531323035303160d01b6020820152905162461bcd60e51b81526109549190600401612e49565b6000805b8451811015610c9e57838181518110610c8157610c81613259565b602002602001015182610c949190613285565b9150600101610c66565b5080610ca933611ba3565b1015610ce35760408051808201825260068152651899181a981960d11b6020820152905162461bcd60e51b81526109549190600401612e49565b6004546001600160a01b03163314610d445760095460408051808201909152600681526531323035303360d01b602082015290600160a81b900460ff161515600114610d425760405162461bcd60e51b81526004016109549190612e49565b505b606060006001935060005b8651811015610e1b57610d7b878281518110610d6d57610d6d613259565b60200260200101513b151590565b15610dc457610dbd878281518110610d9557610d95613259565b6020026020010151878381518110610daf57610daf613259565b602002602001015185612a07565b9150610e04565b610e01878281518110610dd957610dd9613259565b6020026020010151878381518110610df357610df3613259565b602002602001015185612b22565b91505b811515600003610e1357600094505b600101610d4f565b505050505b92915050565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b03163314610e6f5760405162461bcd60e51b81526004016109549190612e49565b50600b805460ff19168215159081179091556040519081527fe1455bc53682229469d6919bb96d7b338cbffea93170dfb5f02242c22fb6d07f906020015b60405180910390a150565b6000805460408051808201909152600681526535303030303160d01b6020820152906001600160a01b03163314610f025760405162461bcd60e51b81526004016109549190612e49565b5081610f0d85611ba3565b1015610f4757604080518082018252600681526531323036303160d01b6020820152905162461bcd60e51b81526109549190600401612e49565b6060833b1561100c57610f6383610f5d87611ba3565b90612ce6565b6001600160a01b038616600090815260086020526040902055610f8f83610f8986611ba3565b90612cf9565b6001600160a01b0385166000818152600860205260409081902092909255905163607705c560e11b815285919063c0ee0b8a90610fd490339088908790600401613311565b600060405180830381600087803b158015610fee57600080fd5b505af1158015611002573d6000803e3d6000fd5b5050505050611059565b61101983610f5d87611ba3565b6001600160a01b03861660009081526008602052604090205561103f83610f8986611ba3565b6001600160a01b0385166000908152600860205260409020555b836001600160a01b0316856001600160a01b03166000805160206134bd8339815191528560405161108c91815260200190565b60405180910390a3506001949350505050565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b031633146110e85760405162461bcd60e51b81526004016109549190612e49565b5060176110f58282613389565b5050565b601a8054610ba2906132d7565b60095460408051808201909152600681526531323130303160d01b602082015290600160b01b900460ff1615156001146111535760405162461bcd60e51b81526004016109549190612e49565b50600954600160a01b900460ff1615156001036112225760095460005460405163d3da927f60e01b81523360048201526001600160a01b03918216602482015291169063d3da927f90604401602060405180830381865afa1580156111bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111e09190613449565b60408051808201909152600681526518991898181960d11b60208201529015156001146112205760405162461bcd60e51b81526004016109549190612e49565b505b336000908152600a602052604090208281556002016112418282613389565b507f3bb9553f633a7ecb4cbc5f9885e750a522496ce06deff1ed9184180ca83940c033838360405161127593929190613311565b60405180910390a15050565b60118054610ba2906132d7565b60058054610ba2906132d7565b60198054610ba2906132d7565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b031633146112f15760405162461bcd60e51b81526004016109549190612e49565b5060138190556040518181527fe451abe602c33e612ea61221b5a142f7fe3c044286e42c8340ffe7fa86a5859790602001610ead565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b031633146113705760405162461bcd60e51b81526004016109549190612e49565b506001600160a01b0382166000818152600a6020908152604091829020600101849055815192835282018390527fa42bd6bdfcb8f9b815c68e4ce0e16dec3f1e7ac53967ee8309653de522a735b19101611275565b600b5460ff1615806113e15750600954600160a81b900460ff16155b806113f35750816113f133611ba3565b105b1561142c57604080518082018252600681526531323037303160d01b6020820152905162461bcd60e51b81526109549190600401612e49565b6000546001600160a01b038481169116148015906114585750600954600160a01b900460ff1615156001145b156115175760095460005460405163d3da927f60e01b81526001600160a01b038681166004830152918216602482015291169063d3da927f90604401602060405180830381865afa1580156114b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114d59190613449565b6040805180820190915260068152651899181b981960d11b60208201529015156001146115155760405162461bcd60e51b81526004016109549190612e49565b505b3360009081526008602052604081208054849290611536908490613298565b9091555050336000908152600d60205260408120805484929061155a908490613285565b9091555050600c805460408051608081018252338082526001600160a01b038881166020840190815283850189815260016060860181815290880189556000989098529351600487027fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c7810180549285166001600160a01b031993841617905591517fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c8830180549190941691161790915591517fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c983015593517fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8ca909101805491151560ff1990921691909117905551909182917fa256c3bc72c26fbfd6285cfde8c7e345b4d0c7ccfc725d103e9f129c5d8a039a9161169e91889088908890613466565b60405180910390a250505050565b60068054610ba2906132d7565b60178054610ba2906132d7565b601b8054610ba2906132d7565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b0316331461171c5760405162461bcd60e51b81526004016109549190612e49565b506007805460ff191682151590811790915560405160ff9091161515907fe1e5c6f5867805bf3fab73f4df4b80d0e87e9262a7bc22ac7c2cb3fd5896222f90600090a250565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b031633146117ab5760405162461bcd60e51b81526004016109549190612e49565b50600954600160a81b900460ff1615156000036117f657604080518082018252600681526531323039303160d01b6020820152905162461bcd60e51b81526109549190600401612e49565b600c828154811061180957611809613259565b6000918252602082206003600490920201015460ff161515900361185b5760408051808201825260068152651899181c981960d11b6020820152905162461bcd60e51b81526109549190600401612e49565b600c828154811061186e5761186e613259565b90600052602060002090600402016002015460086000600c858154811061189757611897613259565b60009182526020808320600160049093020191909101546001600160a01b03168352820192909252604001812080549091906118d4908490613285565b9091555050600c8054839081106118ed576118ed613259565b906000526020600020906004020160020154600d6000600c858154811061191657611916613259565b600091825260208083206004909202909101546001600160a01b031683528201929092526040018120805490919061194f908490613298565b925050819055506000600c838154811061196b5761196b613259565b906000526020600020906004020160030160006101000a81548160ff021916908315150217905550817f6b50d6e4941ce7ae74ed7f7f51df5fb7680754c2815a094c66bea5ca80a40eb1600c84815481106119c8576119c8613259565b6000918252602090912060049091020154600c80546001600160a01b0390921691869081106119f9576119f9613259565b6000918252602090912060016004909202010154604051611a2692916001600160a01b03169086906132ab565b60405180910390a2600c8281548110611a4157611a41613259565b6000918252602090912060016004909202010154600c80546001600160a01b039092169184908110611a7557611a75613259565b6000918252602090912060049091020154600c80546001600160a01b03909216916000805160206134bd833981519152919086908110611ab757611ab7613259565b906000526020600020906004020160020154604051611ad891815260200190565b60405180910390a35050565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b03163314611b2d5760405162461bcd60e51b81526004016109549190612e49565b50601055565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b03163314611b7c5760405162461bcd60e51b81526004016109549190612e49565b5060116110f58282613389565b60128054610ba2906132d7565b60168054610ba2906132d7565b6001600160a01b031660009081526008602052604090205490565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b03163314611c075760405162461bcd60e51b81526004016109549190612e49565b50600480546001600160a01b0319166001600160a01b0392909216919091179055565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b03163314611c735760405162461bcd60e51b81526004016109549190612e49565b5060196110f58282613389565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b03163314611cc95760405162461bcd60e51b81526004016109549190612e49565b5060066110f58282613389565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b03163314611d1f5760405162461bcd60e51b81526004016109549190612e49565b50601b6110f58282613389565b600a6020526000908152604090208054600182015460028301805492939192611d54906132d7565b80601f0160208091040260200160405190810160405280929190818152602001828054611d80906132d7565b8015611dcd5780601f10611da257610100808354040283529160200191611dcd565b820191906000526020600020905b815481529060010190602001808311611db057829003601f168201915b5050505050905083565b60028054610ba2906132d7565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b03163314611e2d5760405162461bcd60e51b81526004016109549190612e49565b50601c6110f58282613389565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b03163314611e835760405162461bcd60e51b81526004016109549190612e49565b5060098054911515600160a81b0260ff60a81b19909216919091179055565b600081611eae33611ba3565b10156040518060400160405280600681526020016531323034303160d01b81525090611eed5760405162461bcd60e51b81526004016109549190612e49565b506009546040805180820190915260068152651899181a181960d11b602082015290600160a81b900460ff161515600114611f3b5760405162461bcd60e51b81526004016109549190612e49565b506060833b15611f5857611f50848483612a07565b915050610e20565b611f50848483612b22565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b03163314611fac5760405162461bcd60e51b81526004016109549190612e49565b50601a6110f58282613389565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b031633146120025760405162461bcd60e51b81526004016109549190612e49565b5060056110f58282613389565b6001600160a01b039182166000908152600e6020908152604080832093909416825291909152205490565b81612045338661200f565b101561207f57604080518082018252600681526518991818981960d11b6020820152905162461bcd60e51b81526109549190600401612e49565b61208d82610f5d338761200f565b336000908152600e602090815260408083206001600160a01b03891684529091529020556120be82610f8985611ba3565b6001600160a01b038085166000908152600860205260409081902092909255905133918616907f7a1a1088c929a111dda2dc0ca1cc650aa78525d11fd3089abf20c8474f5d82cc9061211590879087908790613311565b60405180910390a350505050565b8161212d33611ba3565b101561216757604080518082018252600681526518991818181960d11b6020820152905162461bcd60e51b81526109549190600401612e49565b61217482610f5d33611ba3565b33600081815260086020526040902091909155612198908390610f8990869061200f565b6001600160a01b0384166000818152600e602090815260408083203380855292529182902093909355519091907ecd77abc69e7bbb6de9df8cbfcca8720df3a30decf9eefd187e72ab2ea2f513906121f390869086906134a3565b60405180910390a3505050565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b031633146122495760405162461bcd60e51b81526004016109549190612e49565b506009805460ff60b01b1916600160b01b831515908102919091179091556040517fa0c691180b8089c0c84e478ee67d6325768666cd889f13de016771c6f7af1f8890600090a250565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b031633146122dc5760405162461bcd60e51b81526004016109549190612e49565b50816122e8868661200f565b101561232257604080518082018252600681526531323132303160d01b6020820152905162461bcd60e51b81526109549190600401612e49565b61233082610f5d878761200f565b6001600160a01b038087166000908152600e602090815260408083209389168352929052205561236382610f8985611ba3565b60086000856001600160a01b03166001600160a01b0316815260200190815260200160002081905550846001600160a01b0316846001600160a01b03167f7a1a1088c929a111dda2dc0ca1cc650aa78525d11fd3089abf20c8474f5d82cc8585856040516123d393929190613311565b60405180910390a35050505050565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b0316331461242b5760405162461bcd60e51b81526004016109549190612e49565b506018805460ff191660011790556040517f96151d7f1d8c50be29a45c0e3ae9ce2008888d1615b196e8f5ffd8c178e6dde890600090a1565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b031633146124ad5760405162461bcd60e51b81526004016109549190612e49565b506001600160a01b0382161561254b57806124c8838561200f565b101561250257604080518082018252600681526531323131303160d01b6020820152905162461bcd60e51b81526109549190600401612e49565b61251081610f5d848661200f565b6001600160a01b038084166000908152600e60209081526040808320938816835292905220556003546125439082612ce6565b6003556125d6565b6001600160a01b03831660009081526008602052604090205481111561259f57604080518082018252600681526518991898981960d11b6020820152905162461bcd60e51b81526109549190600401612e49565b6125ac81610f5d85611ba3565b6001600160a01b0384166000908152600860205260409020556003546125d29082612ce6565b6003555b816001600160a01b0316836001600160a01b0316336001600160a01b03167fee02732fab40ece8284c756220846dff4b8d32058b86b35b4f0459bf172fcef08460405161262591815260200190565b60405180910390a4505050565b601c8054610ba2906132d7565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b031633146126885760405162461bcd60e51b81526004016109549190612e49565b50600f8190556040518181527f82b19c9a00131a87eeff1903fcb9e4f2a3ba76dd86098586eea921a533e218dc90602001610ead565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b031633146127075760405162461bcd60e51b81526004016109549190612e49565b5060408051808201909152600681526535303031303160d01b60208201526001600160a01b03821661274c5760405162461bcd60e51b81526004016109549190612e49565b50600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60158054610ba2906132d7565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b031633146127fe5760405162461bcd60e51b81526004016109549190612e49565b50600980546001600160a01b0319166001600160a01b0392909216919091179055565b60148054610ba2906132d7565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b031633146128775760405162461bcd60e51b81526004016109549190612e49565b5060098054911515600160a01b0260ff60a01b19909216919091179055565b600c81815481106128a657600080fd5b600091825260209091206004909102018054600182015460028301546003909301546001600160a01b0392831694509116919060ff1684565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b031633146129285760405162461bcd60e51b81526004016109549190612e49565b506001600160a01b038216156129815761294681610f89848661200f565b6001600160a01b038084166000908152600e60209081526040808320938816835292905220556003546129799082612cf9565b6003556129b8565b61298e81610f8985611ba3565b6001600160a01b0384166000908152600860205260409020556003546129b49082612cf9565b6003555b816001600160a01b0316836001600160a01b0316336001600160a01b03167f65adeb76912378393e600cb6f64f3310842a42e1eae86273dc775d0c47a0f2dc8460405161262591815260200190565b60045460408051808201909152600681526531323033303160d01b60208201526000916001600160a01b03868116911614612a555760405162461bcd60e51b81526004016109549190612e49565b50612a6383610f5d33611ba3565b33600090815260086020526040902055612a8083610f8986611ba3565b6001600160a01b0385166000818152600860205260409081902092909255905163607705c560e11b815285919063c0ee0b8a90612ac590339088908890600401613311565b600060405180830381600087803b158015612adf57600080fd5b505af1158015612af3573d6000803e3d6000fd5b50506040518681526001600160a01b03881692503391506000805160206134bd8339815191529060200161108c565b6004546000906001600160a01b03163314801590612b475750600b5460ff1615156001145b15612b8057604080518082018252600681526531323032303160d01b6020820152905162461bcd60e51b81526109549190600401612e49565b6000546001600160a01b03858116911614801590612bac5750600954600160a01b900460ff1615156001145b15612c6b5760095460005460405163d3da927f60e01b81526001600160a01b038781166004830152918216602482015291169063d3da927f90604401602060405180830381865afa158015612c05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c299190613449565b60408051808201909152600681526518991819181960d11b6020820152901515600114612c695760405162461bcd60e51b81526004016109549190612e49565b505b612c7883610f5d33611ba3565b33600090815260086020526040902055612c9583610f8986611ba3565b6001600160a01b0385166000818152600860205260409081902092909255905133906000805160206134bd83398151915290612cd49087815260200190565b60405180910390a35060019392505050565b6000612cf28284613298565b9392505050565b6000612cf28284613285565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612d4457612d44612d05565b604052919050565b600082601f830112612d5d57600080fd5b813567ffffffffffffffff811115612d7757612d77612d05565b612d8a601f8201601f1916602001612d1b565b818152846020838601011115612d9f57600080fd5b816020850160208301376000918101602001919091529392505050565b60008060408385031215612dcf57600080fd5b82359150602083013567ffffffffffffffff811115612ded57600080fd5b612df985828601612d4c565b9150509250929050565b6000815180845260005b81811015612e2957602081850181015186830182015201612e0d565b506000602082860101526020601f19601f83011685010191505092915050565b602081526000612cf26020830184612e03565b600067ffffffffffffffff821115612e7657612e76612d05565b5060051b60200190565b80356001600160a01b0381168114612e9757600080fd5b919050565b600082601f830112612ead57600080fd5b81356020612ec2612ebd83612e5c565b612d1b565b8083825260208201915060208460051b870101935086841115612ee457600080fd5b602086015b84811015612f005780358352918301918301612ee9565b509695505050505050565b60008060408385031215612f1e57600080fd5b823567ffffffffffffffff80821115612f3657600080fd5b818501915085601f830112612f4a57600080fd5b81356020612f5a612ebd83612e5c565b82815260059290921b84018101918181019089841115612f7957600080fd5b948201945b83861015612f9e57612f8f86612e80565b82529482019490820190612f7e565b96505086013592505080821115612fb457600080fd5b50612df985828601612e9c565b8015158114612fcf57600080fd5b50565b600060208284031215612fe457600080fd5b8135612cf281612fc1565b60008060006060848603121561300457600080fd5b61300d84612e80565b925061301b60208501612e80565b9150604084013590509250925092565b60006020828403121561303d57600080fd5b813567ffffffffffffffff81111561305457600080fd5b61306084828501612d4c565b949350505050565b60006020828403121561307a57600080fd5b612cf282612e80565b60006020828403121561309557600080fd5b5035919050565b600080604083850312156130af57600080fd5b6130b883612e80565b946020939093013593505050565b6000806000606084860312156130db57600080fd5b6130e484612e80565b925060208401359150604084013567ffffffffffffffff81111561310757600080fd5b61311386828701612d4c565b9150509250925092565b83815282602082015260606040820152600061313c6060830184612e03565b95945050505050565b6000806040838503121561315857600080fd5b61316183612e80565b915061316f60208401612e80565b90509250929050565b6000806000806080858703121561318e57600080fd5b61319785612e80565b93506131a560208601612e80565b925060408501359150606085013567ffffffffffffffff8111156131c857600080fd5b6131d487828801612d4c565b91505092959194509250565b600080600080600060a086880312156131f857600080fd5b61320186612e80565b945061320f60208701612e80565b935061321d60408701612e80565b925060608601359150608086013567ffffffffffffffff81111561324057600080fd5b61324c88828901612d4c565b9150509295509295909350565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b80820180821115610e2057610e2061326f565b81810381811115610e2057610e2061326f565b6001600160a01b0384811682528316602082015260606040820181905260009061313c90830184612e03565b600181811c908216806132eb57607f821691505b60208210810361330b57634e487b7160e01b600052602260045260246000fd5b50919050565b60018060a01b038416815282602082015260606040820152600061313c6060830184612e03565b601f821115613384576000816000526020600020601f850160051c810160208610156133615750805b601f850160051c820191505b818110156133805782815560010161336d565b5050505b505050565b815167ffffffffffffffff8111156133a3576133a3612d05565b6133b7816133b184546132d7565b84613338565b602080601f8311600181146133ec57600084156133d45750858301515b600019600386901b1c1916600185901b178555613380565b600085815260208120601f198616915b8281101561341b578886015182559484019460019091019084016133fc565b50858210156134395787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121561345b57600080fd5b8151612cf281612fc1565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061349990830184612e03565b9695505050505050565b8281526040602082015260006130606040830184612e0356feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa264697066735822122058ccc1e9b73794228a24d20df37b2c765313479f9d25721169fb5f5a2203353764736f6c63430008170033", - "deployedBytecode": "608060405234801561001057600080fd5b50600436106103f15760003560e01c80637c3a00fd11610215578063c267ce5f11610125578063ef8032ef116100b8578063fc590d0911610087578063fc590d0914610849578063fd0e856914610851578063fd14a22214610865578063fef1b9c014610878578063ff12dcea146108b857600080fd5b8063ef8032ef14610808578063f2fde38b1461081b578063f35eeaef1461082e578063f7502a7c1461083657600080fd5b8063db20266f116100f4578063db20266f146107b9578063e7464db1146107e4578063ed62c2a0146107f7578063ef4474cd146107ff57600080fd5b8063c267ce5f14610778578063c7109ec91461078b578063ca5cbbb51461079e578063d5d9d0c7146107b157600080fd5b806395d89b41116101a8578063ab62f92e11610177578063ab62f92e14610718578063b2a90a601461072b578063b967a52e1461073f578063b9b3e06a14610752578063bfe30fb01461076557600080fd5b806395d89b41146106d757806397e4c513146106df5780639cd23707146106f2578063a9059cbb1461070557600080fd5b80638ed8a9bc116101e45780638ed8a9bc1461067b578063919fe52d1461068e57806392ff0d31146106a15780639301a78b146106b557600080fd5b80637c3a00fd1461062c57806381ebdd79146106355780638ac08bf1146106555780638da5cb5b1461066857600080fd5b80633a2b6939116103105780635c40f6f4116102a35780636666e49c116102725780636666e49c146105e95780636f3b993f146105f157806370740aab146105fe57806370a082311461060657806376fa7a311461061957600080fd5b80635c40f6f41461059d5780635ccef3e7146105b05780635f84f302146105c357806363783444146105d657600080fd5b8063428630f6116102df578063428630f61461057c57806344fd9caa1461058457806358c3b8701461058d57806359d936171461059557600080fd5b80633a2b69391461053b5780633b18b9841461054357806340615cf81461055657806340eba90e1461056957600080fd5b806323b872dd116103885780632e0ad004116103575780632e0ad0041461051057806331cef44714610518578063329dbddc1461052b57806336f7ab5e1461053357600080fd5b806323b872dd146104b757806325287d42146104ca57806325d60861146104dd57806327e235e3146104f057600080fd5b8063153a1f3e116103c4578063153a1f3e1461046d57806318160ddd146104805780631935a88014610497578063200d2ed2146104aa57600080fd5b8063034f6b21146103f657806306eaa0b71461041857806306fdde031461042d5780630af7eb0f14610442575b600080fd5b6018546104039060ff1681565b60405190151581526020015b60405180910390f35b61042b610426366004612dbc565b6108cb565b005b610435610b95565b60405161040f9190612e49565b600954610455906001600160a01b031681565b6040516001600160a01b03909116815260200161040f565b61040361047b366004612f0b565b610c23565b61048960035481565b60405190815260200161040f565b61042b6104a5366004612fd2565b610e26565b6007546104039060ff1681565b6104036104c5366004612fef565b610eb8565b600454610455906001600160a01b031681565b61042b6104eb36600461302b565b61109f565b6104896104fe366004613068565b60086020526000908152604090205481565b6104356110f9565b61042b610526366004612dbc565b611106565b610435611281565b61043561128e565b61043561129b565b61042b610551366004613083565b6112a8565b61042b61056436600461309c565b611327565b61042b6105773660046130c6565b6113c5565b6104356116ac565b610489600f5481565b6104356116b9565b6104356116c6565b61042b6105ab366004612fd2565b6116d3565b61042b6105be366004612dbc565b611762565b61042b6105d1366004613083565b611ae4565b61042b6105e436600461302b565b611b33565b610435611b89565b600b546104039060ff1681565b610435611b96565b610489610614366004613068565b611ba3565b61042b610627366004613068565b611bbe565b61048960105481565b610489610643366004613068565b600d6020526000908152604090205481565b61042b61066336600461302b565b611c2a565b600054610455906001600160a01b031681565b61042b61068936600461302b565b611c80565b61042b61069c36600461302b565b611cd6565b60095461040390600160a81b900460ff1681565b6106c86106c3366004613068565b611d2c565b60405161040f9392919061311d565b610435611dd7565b61042b6106ed36600461302b565b611de4565b61042b610700366004612fd2565b611e3a565b61040361071336600461309c565b611ea2565b61042b61072636600461302b565b611f63565b60095461040390600160b01b900460ff1681565b61042b61074d36600461302b565b611fb9565b610489610760366004613145565b61200f565b61042b610773366004613178565b61203a565b61042b6107863660046130c6565b612123565b61042b610799366004612fd2565b612200565b61042b6107ac3660046131e0565b612293565b61042b6123e2565b6104896107c7366004613145565b600e60209081526000928352604080842090915290825290205481565b61042b6107f2366004612fef565b612464565b610435612632565b61048960135481565b61042b610816366004613083565b61263f565b61042b610829366004613068565b6126be565b6104356127a8565b61042b610844366004613068565b6127b5565b610435612821565b60095461040390600160a01b900460ff1681565b61042b610873366004612fd2565b61282e565b61088b610886366004613083565b612896565b604080516001600160a01b039586168152949093166020850152918301521515606082015260800161040f565b61042b6108c6366004612fef565b6128df565b336001600160a01b0316600c83815481106108e8576108e8613259565b60009182526020909120600490910201546001600160a01b03161480159061091b57506000546001600160a01b03163314155b1561095d57604080518082018252600681526531323038303160d01b6020820152905162461bcd60e51b81526109549190600401612e49565b60405180910390fd5b600c828154811061097057610970613259565b6000918252602082206003600490920201015460ff16151590036109c25760408051808201825260068152651899181c181960d11b6020820152905162461bcd60e51b81526109549190600401612e49565b600c82815481106109d5576109d5613259565b90600052602060002090600402016002015460086000600c85815481106109fe576109fe613259565b600091825260208083206004909202909101546001600160a01b0316835282019290925260400181208054909190610a37908490613285565b9091555050600c805483908110610a5057610a50613259565b906000526020600020906004020160020154600d6000600c8581548110610a7957610a79613259565b600091825260208083206004909202909101546001600160a01b0316835282019290925260400181208054909190610ab2908490613298565b925050819055506000600c8381548110610ace57610ace613259565b906000526020600020906004020160030160006101000a81548160ff021916908315150217905550817fa0cc3a4feb26502e6e6cd57b2113d58bdab80c6711d8252356be9a49945bb5f7600c8481548110610b2b57610b2b613259565b6000918252602090912060049091020154600c80546001600160a01b039092169186908110610b5c57610b5c613259565b6000918252602090912060016004909202010154604051610b8992916001600160a01b03169086906132ab565b60405180910390a25050565b60018054610ba2906132d7565b80601f0160208091040260200160405190810160405280929190818152602001828054610bce906132d7565b8015610c1b5780601f10610bf057610100808354040283529160200191610c1b565b820191906000526020600020905b815481529060010190602001808311610bfe57829003601f168201915b505050505081565b60008151835114610c6257604080518082018252600681526531323035303160d01b6020820152905162461bcd60e51b81526109549190600401612e49565b6000805b8451811015610c9e57838181518110610c8157610c81613259565b602002602001015182610c949190613285565b9150600101610c66565b5080610ca933611ba3565b1015610ce35760408051808201825260068152651899181a981960d11b6020820152905162461bcd60e51b81526109549190600401612e49565b6004546001600160a01b03163314610d445760095460408051808201909152600681526531323035303360d01b602082015290600160a81b900460ff161515600114610d425760405162461bcd60e51b81526004016109549190612e49565b505b606060006001935060005b8651811015610e1b57610d7b878281518110610d6d57610d6d613259565b60200260200101513b151590565b15610dc457610dbd878281518110610d9557610d95613259565b6020026020010151878381518110610daf57610daf613259565b602002602001015185612a07565b9150610e04565b610e01878281518110610dd957610dd9613259565b6020026020010151878381518110610df357610df3613259565b602002602001015185612b22565b91505b811515600003610e1357600094505b600101610d4f565b505050505b92915050565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b03163314610e6f5760405162461bcd60e51b81526004016109549190612e49565b50600b805460ff19168215159081179091556040519081527fe1455bc53682229469d6919bb96d7b338cbffea93170dfb5f02242c22fb6d07f906020015b60405180910390a150565b6000805460408051808201909152600681526535303030303160d01b6020820152906001600160a01b03163314610f025760405162461bcd60e51b81526004016109549190612e49565b5081610f0d85611ba3565b1015610f4757604080518082018252600681526531323036303160d01b6020820152905162461bcd60e51b81526109549190600401612e49565b6060833b1561100c57610f6383610f5d87611ba3565b90612ce6565b6001600160a01b038616600090815260086020526040902055610f8f83610f8986611ba3565b90612cf9565b6001600160a01b0385166000818152600860205260409081902092909255905163607705c560e11b815285919063c0ee0b8a90610fd490339088908790600401613311565b600060405180830381600087803b158015610fee57600080fd5b505af1158015611002573d6000803e3d6000fd5b5050505050611059565b61101983610f5d87611ba3565b6001600160a01b03861660009081526008602052604090205561103f83610f8986611ba3565b6001600160a01b0385166000908152600860205260409020555b836001600160a01b0316856001600160a01b03166000805160206134bd8339815191528560405161108c91815260200190565b60405180910390a3506001949350505050565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b031633146110e85760405162461bcd60e51b81526004016109549190612e49565b5060176110f58282613389565b5050565b601a8054610ba2906132d7565b60095460408051808201909152600681526531323130303160d01b602082015290600160b01b900460ff1615156001146111535760405162461bcd60e51b81526004016109549190612e49565b50600954600160a01b900460ff1615156001036112225760095460005460405163d3da927f60e01b81523360048201526001600160a01b03918216602482015291169063d3da927f90604401602060405180830381865afa1580156111bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111e09190613449565b60408051808201909152600681526518991898181960d11b60208201529015156001146112205760405162461bcd60e51b81526004016109549190612e49565b505b336000908152600a602052604090208281556002016112418282613389565b507f3bb9553f633a7ecb4cbc5f9885e750a522496ce06deff1ed9184180ca83940c033838360405161127593929190613311565b60405180910390a15050565b60118054610ba2906132d7565b60058054610ba2906132d7565b60198054610ba2906132d7565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b031633146112f15760405162461bcd60e51b81526004016109549190612e49565b5060138190556040518181527fe451abe602c33e612ea61221b5a142f7fe3c044286e42c8340ffe7fa86a5859790602001610ead565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b031633146113705760405162461bcd60e51b81526004016109549190612e49565b506001600160a01b0382166000818152600a6020908152604091829020600101849055815192835282018390527fa42bd6bdfcb8f9b815c68e4ce0e16dec3f1e7ac53967ee8309653de522a735b19101611275565b600b5460ff1615806113e15750600954600160a81b900460ff16155b806113f35750816113f133611ba3565b105b1561142c57604080518082018252600681526531323037303160d01b6020820152905162461bcd60e51b81526109549190600401612e49565b6000546001600160a01b038481169116148015906114585750600954600160a01b900460ff1615156001145b156115175760095460005460405163d3da927f60e01b81526001600160a01b038681166004830152918216602482015291169063d3da927f90604401602060405180830381865afa1580156114b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114d59190613449565b6040805180820190915260068152651899181b981960d11b60208201529015156001146115155760405162461bcd60e51b81526004016109549190612e49565b505b3360009081526008602052604081208054849290611536908490613298565b9091555050336000908152600d60205260408120805484929061155a908490613285565b9091555050600c805460408051608081018252338082526001600160a01b038881166020840190815283850189815260016060860181815290880189556000989098529351600487027fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c7810180549285166001600160a01b031993841617905591517fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c8830180549190941691161790915591517fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c983015593517fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8ca909101805491151560ff1990921691909117905551909182917fa256c3bc72c26fbfd6285cfde8c7e345b4d0c7ccfc725d103e9f129c5d8a039a9161169e91889088908890613466565b60405180910390a250505050565b60068054610ba2906132d7565b60178054610ba2906132d7565b601b8054610ba2906132d7565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b0316331461171c5760405162461bcd60e51b81526004016109549190612e49565b506007805460ff191682151590811790915560405160ff9091161515907fe1e5c6f5867805bf3fab73f4df4b80d0e87e9262a7bc22ac7c2cb3fd5896222f90600090a250565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b031633146117ab5760405162461bcd60e51b81526004016109549190612e49565b50600954600160a81b900460ff1615156000036117f657604080518082018252600681526531323039303160d01b6020820152905162461bcd60e51b81526109549190600401612e49565b600c828154811061180957611809613259565b6000918252602082206003600490920201015460ff161515900361185b5760408051808201825260068152651899181c981960d11b6020820152905162461bcd60e51b81526109549190600401612e49565b600c828154811061186e5761186e613259565b90600052602060002090600402016002015460086000600c858154811061189757611897613259565b60009182526020808320600160049093020191909101546001600160a01b03168352820192909252604001812080549091906118d4908490613285565b9091555050600c8054839081106118ed576118ed613259565b906000526020600020906004020160020154600d6000600c858154811061191657611916613259565b600091825260208083206004909202909101546001600160a01b031683528201929092526040018120805490919061194f908490613298565b925050819055506000600c838154811061196b5761196b613259565b906000526020600020906004020160030160006101000a81548160ff021916908315150217905550817f6b50d6e4941ce7ae74ed7f7f51df5fb7680754c2815a094c66bea5ca80a40eb1600c84815481106119c8576119c8613259565b6000918252602090912060049091020154600c80546001600160a01b0390921691869081106119f9576119f9613259565b6000918252602090912060016004909202010154604051611a2692916001600160a01b03169086906132ab565b60405180910390a2600c8281548110611a4157611a41613259565b6000918252602090912060016004909202010154600c80546001600160a01b039092169184908110611a7557611a75613259565b6000918252602090912060049091020154600c80546001600160a01b03909216916000805160206134bd833981519152919086908110611ab757611ab7613259565b906000526020600020906004020160020154604051611ad891815260200190565b60405180910390a35050565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b03163314611b2d5760405162461bcd60e51b81526004016109549190612e49565b50601055565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b03163314611b7c5760405162461bcd60e51b81526004016109549190612e49565b5060116110f58282613389565b60128054610ba2906132d7565b60168054610ba2906132d7565b6001600160a01b031660009081526008602052604090205490565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b03163314611c075760405162461bcd60e51b81526004016109549190612e49565b50600480546001600160a01b0319166001600160a01b0392909216919091179055565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b03163314611c735760405162461bcd60e51b81526004016109549190612e49565b5060196110f58282613389565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b03163314611cc95760405162461bcd60e51b81526004016109549190612e49565b5060066110f58282613389565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b03163314611d1f5760405162461bcd60e51b81526004016109549190612e49565b50601b6110f58282613389565b600a6020526000908152604090208054600182015460028301805492939192611d54906132d7565b80601f0160208091040260200160405190810160405280929190818152602001828054611d80906132d7565b8015611dcd5780601f10611da257610100808354040283529160200191611dcd565b820191906000526020600020905b815481529060010190602001808311611db057829003601f168201915b5050505050905083565b60028054610ba2906132d7565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b03163314611e2d5760405162461bcd60e51b81526004016109549190612e49565b50601c6110f58282613389565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b03163314611e835760405162461bcd60e51b81526004016109549190612e49565b5060098054911515600160a81b0260ff60a81b19909216919091179055565b600081611eae33611ba3565b10156040518060400160405280600681526020016531323034303160d01b81525090611eed5760405162461bcd60e51b81526004016109549190612e49565b506009546040805180820190915260068152651899181a181960d11b602082015290600160a81b900460ff161515600114611f3b5760405162461bcd60e51b81526004016109549190612e49565b506060833b15611f5857611f50848483612a07565b915050610e20565b611f50848483612b22565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b03163314611fac5760405162461bcd60e51b81526004016109549190612e49565b50601a6110f58282613389565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b031633146120025760405162461bcd60e51b81526004016109549190612e49565b5060056110f58282613389565b6001600160a01b039182166000908152600e6020908152604080832093909416825291909152205490565b81612045338661200f565b101561207f57604080518082018252600681526518991818981960d11b6020820152905162461bcd60e51b81526109549190600401612e49565b61208d82610f5d338761200f565b336000908152600e602090815260408083206001600160a01b03891684529091529020556120be82610f8985611ba3565b6001600160a01b038085166000908152600860205260409081902092909255905133918616907f7a1a1088c929a111dda2dc0ca1cc650aa78525d11fd3089abf20c8474f5d82cc9061211590879087908790613311565b60405180910390a350505050565b8161212d33611ba3565b101561216757604080518082018252600681526518991818181960d11b6020820152905162461bcd60e51b81526109549190600401612e49565b61217482610f5d33611ba3565b33600081815260086020526040902091909155612198908390610f8990869061200f565b6001600160a01b0384166000818152600e602090815260408083203380855292529182902093909355519091907ecd77abc69e7bbb6de9df8cbfcca8720df3a30decf9eefd187e72ab2ea2f513906121f390869086906134a3565b60405180910390a3505050565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b031633146122495760405162461bcd60e51b81526004016109549190612e49565b506009805460ff60b01b1916600160b01b831515908102919091179091556040517fa0c691180b8089c0c84e478ee67d6325768666cd889f13de016771c6f7af1f8890600090a250565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b031633146122dc5760405162461bcd60e51b81526004016109549190612e49565b50816122e8868661200f565b101561232257604080518082018252600681526531323132303160d01b6020820152905162461bcd60e51b81526109549190600401612e49565b61233082610f5d878761200f565b6001600160a01b038087166000908152600e602090815260408083209389168352929052205561236382610f8985611ba3565b60086000856001600160a01b03166001600160a01b0316815260200190815260200160002081905550846001600160a01b0316846001600160a01b03167f7a1a1088c929a111dda2dc0ca1cc650aa78525d11fd3089abf20c8474f5d82cc8585856040516123d393929190613311565b60405180910390a35050505050565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b0316331461242b5760405162461bcd60e51b81526004016109549190612e49565b506018805460ff191660011790556040517f96151d7f1d8c50be29a45c0e3ae9ce2008888d1615b196e8f5ffd8c178e6dde890600090a1565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b031633146124ad5760405162461bcd60e51b81526004016109549190612e49565b506001600160a01b0382161561254b57806124c8838561200f565b101561250257604080518082018252600681526531323131303160d01b6020820152905162461bcd60e51b81526109549190600401612e49565b61251081610f5d848661200f565b6001600160a01b038084166000908152600e60209081526040808320938816835292905220556003546125439082612ce6565b6003556125d6565b6001600160a01b03831660009081526008602052604090205481111561259f57604080518082018252600681526518991898981960d11b6020820152905162461bcd60e51b81526109549190600401612e49565b6125ac81610f5d85611ba3565b6001600160a01b0384166000908152600860205260409020556003546125d29082612ce6565b6003555b816001600160a01b0316836001600160a01b0316336001600160a01b03167fee02732fab40ece8284c756220846dff4b8d32058b86b35b4f0459bf172fcef08460405161262591815260200190565b60405180910390a4505050565b601c8054610ba2906132d7565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b031633146126885760405162461bcd60e51b81526004016109549190612e49565b50600f8190556040518181527f82b19c9a00131a87eeff1903fcb9e4f2a3ba76dd86098586eea921a533e218dc90602001610ead565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b031633146127075760405162461bcd60e51b81526004016109549190612e49565b5060408051808201909152600681526535303031303160d01b60208201526001600160a01b03821661274c5760405162461bcd60e51b81526004016109549190612e49565b50600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60158054610ba2906132d7565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b031633146127fe5760405162461bcd60e51b81526004016109549190612e49565b50600980546001600160a01b0319166001600160a01b0392909216919091179055565b60148054610ba2906132d7565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b031633146128775760405162461bcd60e51b81526004016109549190612e49565b5060098054911515600160a01b0260ff60a01b19909216919091179055565b600c81815481106128a657600080fd5b600091825260209091206004909102018054600182015460028301546003909301546001600160a01b0392831694509116919060ff1684565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b031633146129285760405162461bcd60e51b81526004016109549190612e49565b506001600160a01b038216156129815761294681610f89848661200f565b6001600160a01b038084166000908152600e60209081526040808320938816835292905220556003546129799082612cf9565b6003556129b8565b61298e81610f8985611ba3565b6001600160a01b0384166000908152600860205260409020556003546129b49082612cf9565b6003555b816001600160a01b0316836001600160a01b0316336001600160a01b03167f65adeb76912378393e600cb6f64f3310842a42e1eae86273dc775d0c47a0f2dc8460405161262591815260200190565b60045460408051808201909152600681526531323033303160d01b60208201526000916001600160a01b03868116911614612a555760405162461bcd60e51b81526004016109549190612e49565b50612a6383610f5d33611ba3565b33600090815260086020526040902055612a8083610f8986611ba3565b6001600160a01b0385166000818152600860205260409081902092909255905163607705c560e11b815285919063c0ee0b8a90612ac590339088908890600401613311565b600060405180830381600087803b158015612adf57600080fd5b505af1158015612af3573d6000803e3d6000fd5b50506040518681526001600160a01b03881692503391506000805160206134bd8339815191529060200161108c565b6004546000906001600160a01b03163314801590612b475750600b5460ff1615156001145b15612b8057604080518082018252600681526531323032303160d01b6020820152905162461bcd60e51b81526109549190600401612e49565b6000546001600160a01b03858116911614801590612bac5750600954600160a01b900460ff1615156001145b15612c6b5760095460005460405163d3da927f60e01b81526001600160a01b038781166004830152918216602482015291169063d3da927f90604401602060405180830381865afa158015612c05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c299190613449565b60408051808201909152600681526518991819181960d11b6020820152901515600114612c695760405162461bcd60e51b81526004016109549190612e49565b505b612c7883610f5d33611ba3565b33600090815260086020526040902055612c9583610f8986611ba3565b6001600160a01b0385166000818152600860205260409081902092909255905133906000805160206134bd83398151915290612cd49087815260200190565b60405180910390a35060019392505050565b6000612cf28284613298565b9392505050565b6000612cf28284613285565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612d4457612d44612d05565b604052919050565b600082601f830112612d5d57600080fd5b813567ffffffffffffffff811115612d7757612d77612d05565b612d8a601f8201601f1916602001612d1b565b818152846020838601011115612d9f57600080fd5b816020850160208301376000918101602001919091529392505050565b60008060408385031215612dcf57600080fd5b82359150602083013567ffffffffffffffff811115612ded57600080fd5b612df985828601612d4c565b9150509250929050565b6000815180845260005b81811015612e2957602081850181015186830182015201612e0d565b506000602082860101526020601f19601f83011685010191505092915050565b602081526000612cf26020830184612e03565b600067ffffffffffffffff821115612e7657612e76612d05565b5060051b60200190565b80356001600160a01b0381168114612e9757600080fd5b919050565b600082601f830112612ead57600080fd5b81356020612ec2612ebd83612e5c565b612d1b565b8083825260208201915060208460051b870101935086841115612ee457600080fd5b602086015b84811015612f005780358352918301918301612ee9565b509695505050505050565b60008060408385031215612f1e57600080fd5b823567ffffffffffffffff80821115612f3657600080fd5b818501915085601f830112612f4a57600080fd5b81356020612f5a612ebd83612e5c565b82815260059290921b84018101918181019089841115612f7957600080fd5b948201945b83861015612f9e57612f8f86612e80565b82529482019490820190612f7e565b96505086013592505080821115612fb457600080fd5b50612df985828601612e9c565b8015158114612fcf57600080fd5b50565b600060208284031215612fe457600080fd5b8135612cf281612fc1565b60008060006060848603121561300457600080fd5b61300d84612e80565b925061301b60208501612e80565b9150604084013590509250925092565b60006020828403121561303d57600080fd5b813567ffffffffffffffff81111561305457600080fd5b61306084828501612d4c565b949350505050565b60006020828403121561307a57600080fd5b612cf282612e80565b60006020828403121561309557600080fd5b5035919050565b600080604083850312156130af57600080fd5b6130b883612e80565b946020939093013593505050565b6000806000606084860312156130db57600080fd5b6130e484612e80565b925060208401359150604084013567ffffffffffffffff81111561310757600080fd5b61311386828701612d4c565b9150509250925092565b83815282602082015260606040820152600061313c6060830184612e03565b95945050505050565b6000806040838503121561315857600080fd5b61316183612e80565b915061316f60208401612e80565b90509250929050565b6000806000806080858703121561318e57600080fd5b61319785612e80565b93506131a560208601612e80565b925060408501359150606085013567ffffffffffffffff8111156131c857600080fd5b6131d487828801612d4c565b91505092959194509250565b600080600080600060a086880312156131f857600080fd5b61320186612e80565b945061320f60208701612e80565b935061321d60408701612e80565b925060608601359150608086013567ffffffffffffffff81111561324057600080fd5b61324c88828901612d4c565b9150509295509295909350565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b80820180821115610e2057610e2061326f565b81810381811115610e2057610e2061326f565b6001600160a01b0384811682528316602082015260606040820181905260009061313c90830184612e03565b600181811c908216806132eb57607f821691505b60208210810361330b57634e487b7160e01b600052602260045260246000fd5b50919050565b60018060a01b038416815282602082015260606040820152600061313c6060830184612e03565b601f821115613384576000816000526020600020601f850160051c810160208610156133615750805b601f850160051c820191505b818110156133805782815560010161336d565b5050505b505050565b815167ffffffffffffffff8111156133a3576133a3612d05565b6133b7816133b184546132d7565b84613338565b602080601f8311600181146133ec57600084156133d45750858301515b600019600386901b1c1916600185901b178555613380565b600085815260208120601f198616915b8281101561341b578886015182559484019460019091019084016133fc565b50858210156134395787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121561345b57600080fd5b8151612cf281612fc1565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061349990830184612e03565b9695505050505050565b8281526040602082015260006130606040830184612e0356feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa264697066735822122058ccc1e9b73794228a24d20df37b2c765313479f9d25721169fb5f5a2203353764736f6c63430008170033" + "bytecode": "60806040523480156200001157600080fd5b5060405162003dea38038062003dea8339810160408190526200003491620001f5565b600080546001600160a01b0319908116339182161717905560016200005a8c8262000431565b506002620000698b8262000431565b506003899055600f889055601962000082888262000431565b50601262000091878262000431565b506013859055601b620000a5858262000431565b506014620000b4848262000431565b506015620000c3838262000431565b506016620000d2828262000431565b5050600354600080546001600160a01b031681526008602052604090205550506018805460ff1990811690915560078054909116600117905550506009805460ff60a01b1916600160a01b17905550620004fd945050505050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200015557600080fd5b81516001600160401b03808211156200017257620001726200012d565b604051601f8301601f19908116603f011681019082821181831017156200019d576200019d6200012d565b8160405283815260209250866020858801011115620001bb57600080fd5b600091505b83821015620001df5785820183015181830184015290820190620001c0565b6000602085830101528094505050505092915050565b60008060008060008060008060008060006101608c8e0312156200021857600080fd5b8b516001600160401b038111156200022f57600080fd5b6200023d8e828f0162000143565b60208e0151909c5090506001600160401b038111156200025c57600080fd5b6200026a8e828f0162000143565b9a505060408c0151985060608c0151975060808c015160018060401b038111156200029457600080fd5b620002a28e828f0162000143565b60a08e015190985090506001600160401b03811115620002c157600080fd5b620002cf8e828f0162000143565b60c08e015160e08f0151919850965090506001600160401b03811115620002f557600080fd5b620003038e828f0162000143565b6101008e015190955090506001600160401b038111156200032357600080fd5b620003318e828f0162000143565b6101208e015190945090506001600160401b038111156200035157600080fd5b6200035f8e828f0162000143565b6101408e015190935090506001600160401b038111156200037f57600080fd5b6200038d8e828f0162000143565b9150509295989b509295989b9093969950565b600181811c90821680620003b557607f821691505b602082108103620003d657634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200042c576000816000526020600020601f850160051c81016020861015620004075750805b601f850160051c820191505b81811015620004285782815560010162000413565b5050505b505050565b81516001600160401b038111156200044d576200044d6200012d565b62000465816200045e8454620003a0565b84620003dc565b602080601f8311600181146200049d5760008415620004845750858301515b600019600386901b1c1916600185901b17855562000428565b600085815260208120601f198616915b82811015620004ce57888601518255948401946001909101908401620004ad565b5085821015620004ed5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6138dd806200050d6000396000f3fe608060405234801561001057600080fd5b50600436106104125760003560e01c806381ebdd7911610220578063c267ce5f11610130578063ef8032ef116100b8578063fc590d0911610087578063fc590d09146108a3578063fd0e8569146108ab578063fd14a222146108bf578063fef1b9c0146108d2578063ff12dcea1461091257600080fd5b8063ef8032ef14610862578063f2fde38b14610875578063f35eeaef14610888578063f7502a7c1461089057600080fd5b8063db20266f116100ff578063db20266f14610800578063e7464db11461082b578063e80500521461083e578063ed62c2a014610851578063ef4474cd1461085957600080fd5b8063c267ce5f146107bf578063c7109ec9146107d2578063ca5cbbb5146107e5578063d5d9d0c7146107f857600080fd5b806397e4c513116101b3578063ab62f92e11610182578063ab62f92e1461075f578063b2a90a6014610772578063b967a52e14610786578063b9b3e06a14610799578063bfe30fb0146107ac57600080fd5b806397e4c513146107135780639cd23707146107265780639d8886c814610739578063a9059cbb1461074c57600080fd5b8063919fe52d116101ef578063919fe52d146106c257806392ff0d31146106d55780639301a78b146106e957806395d89b411461070b57600080fd5b806381ebdd79146106695780638ac08bf1146106895780638da5cb5b1461069c5780638ed8a9bc146106af57600080fd5b80633b18b984116103265780635f84f302116102ae57806370740aab1161027d57806370740aab1461061f57806370a082311461062757806376fa7a311461063a5780637c3a00fd1461064d5780637ed6d1031461065657600080fd5b80635f84f302146105e457806363783444146105f75780636666e49c1461060a5780636f3b993f1461061257600080fd5b806344fd9caa116102f557806344fd9caa146105a557806358c3b870146105ae57806359d93617146105b65780635c40f6f4146105be5780635ccef3e7146105d157600080fd5b80633b18b9841461056457806340615cf81461057757806340eba90e1461058a578063428630f61461059d57600080fd5b806323b872dd116103a95780632e0ad004116103785780632e0ad0041461053157806331cef44714610539578063329dbddc1461054c57806336f7ab5e146105545780633a2b69391461055c57600080fd5b806323b872dd146104d857806325287d42146104eb57806325d60861146104fe57806327e235e31461051157600080fd5b8063153a1f3e116103e5578063153a1f3e1461048e57806318160ddd146104a15780631935a880146104b8578063200d2ed2146104cb57600080fd5b8063034f6b211461041757806306eaa0b71461043957806306fdde031461044e5780630af7eb0f14610463575b600080fd5b6018546104249060ff1681565b60405190151581526020015b60405180910390f35b61044c61044736600461317e565b610925565b005b610456610bef565b604051610430919061320b565b600954610476906001600160a01b031681565b6040516001600160a01b039091168152602001610430565b61042461049c36600461326a565b610c7d565b6104aa60035481565b604051908152602001610430565b61044c6104c63660046132e7565b610ea1565b6007546104249060ff1681565b6104246104e6366004613320565b610f33565b600454610476906001600160a01b031681565b61044c61050c36600461335c565b61111a565b6104aa61051f366004613399565b60086020526000908152604090205481565b610456611174565b61044c61054736600461317e565b611181565b6104566112fc565b610456611309565b610456611316565b61044c6105723660046133b4565b611323565b61044c6105853660046133cd565b6113a2565b61044c6105983660046133f7565b611440565b610456611727565b6104aa600f5481565b610456611734565b610456611741565b61044c6105cc3660046132e7565b61174e565b61044c6105df36600461317e565b6117dd565b61044c6105f23660046133b4565b611b5f565b61044c61060536600461335c565b611bae565b610456611c04565b600b546104249060ff1681565b610456611c11565b6104aa610635366004613399565b611c1e565b61044c610648366004613399565b611c39565b6104aa60105481565b61044c61066436600461344e565b611ca5565b6104aa610677366004613399565b600d6020526000908152604090205481565b61044c61069736600461335c565b611dc2565b600054610476906001600160a01b031681565b61044c6106bd36600461335c565b611e18565b61044c6106d036600461335c565b611e6e565b60095461042490600160a81b900460ff1681565b6106fc6106f7366004613399565b611ec4565b604051610430939291906134e8565b610456611f6f565b61044c61072136600461335c565b611f7c565b61044c6107343660046132e7565b611fd2565b61044c61074736600461344e565b61203a565b61042461075a3660046133cd565b61214e565b61044c61076d36600461335c565b612215565b60095461042490600160b01b900460ff1681565b61044c61079436600461335c565b61226b565b6104aa6107a7366004613510565b6122c1565b61044c6107ba366004613543565b6122ec565b61044c6107cd3660046133f7565b6123d5565b61044c6107e03660046132e7565b6124b2565b61044c6107f33660046135ab565b612545565b61044c612694565b6104aa61080e366004613510565b600e60209081526000928352604080842090915290825290205481565b61044c610839366004613320565b612716565b61042461084c36600461344e565b6128e4565b610456612a08565b6104aa60135481565b61044c6108703660046133b4565b612a15565b61044c610883366004613399565b612a94565b610456612b7e565b61044c61089e366004613399565b612b8b565b610456612bf7565b60095461042490600160a01b900460ff1681565b61044c6108cd3660046132e7565b612c04565b6108e56108e03660046133b4565b612c6c565b604080516001600160a01b0395861681529490931660208501529183015215156060820152608001610430565b61044c610920366004613320565b612cb5565b336001600160a01b0316600c838154811061094257610942613624565b60009182526020909120600490910201546001600160a01b03161480159061097557506000546001600160a01b03163314155b156109b757604080518082018252600681526531323038303160d01b6020820152905162461bcd60e51b81526109ae919060040161320b565b60405180910390fd5b600c82815481106109ca576109ca613624565b6000918252602082206003600490920201015460ff1615159003610a1c5760408051808201825260068152651899181c181960d11b6020820152905162461bcd60e51b81526109ae919060040161320b565b600c8281548110610a2f57610a2f613624565b90600052602060002090600402016002015460086000600c8581548110610a5857610a58613624565b600091825260208083206004909202909101546001600160a01b0316835282019290925260400181208054909190610a91908490613650565b9091555050600c805483908110610aaa57610aaa613624565b906000526020600020906004020160020154600d6000600c8581548110610ad357610ad3613624565b600091825260208083206004909202909101546001600160a01b0316835282019290925260400181208054909190610b0c908490613663565b925050819055506000600c8381548110610b2857610b28613624565b906000526020600020906004020160030160006101000a81548160ff021916908315150217905550817fa0cc3a4feb26502e6e6cd57b2113d58bdab80c6711d8252356be9a49945bb5f7600c8481548110610b8557610b85613624565b6000918252602090912060049091020154600c80546001600160a01b039092169186908110610bb657610bb6613624565b6000918252602090912060016004909202010154604051610be392916001600160a01b0316908690613676565b60405180910390a25050565b60018054610bfc906136a2565b80601f0160208091040260200160405190810160405280929190818152602001828054610c28906136a2565b8015610c755780601f10610c4a57610100808354040283529160200191610c75565b820191906000526020600020905b815481529060010190602001808311610c5857829003601f168201915b505050505081565b6000838214610cba57604080518082018252600681526531323035303160d01b6020820152905162461bcd60e51b81526109ae919060040161320b565b6000805b85811015610cf457848482818110610cd857610cd8613624565b9050602002013582610cea9190613650565b9150600101610cbe565b5080610cff33611c1e565b1015610d395760408051808201825260068152651899181a981960d11b6020820152905162461bcd60e51b81526109ae919060040161320b565b6004546001600160a01b03163314610d9a5760095460408051808201909152600681526531323035303360d01b602082015290600160a81b900460ff161515600114610d985760405162461bcd60e51b81526004016109ae919061320b565b505b606060006001935060005b87811015610e9557610ddd898983818110610dc257610dc2613624565b9050602002016020810190610dd79190613399565b3b151590565b15610e3257610e2b898983818110610df757610df7613624565b9050602002016020810190610e0c9190613399565b888884818110610e1e57610e1e613624565b9050602002013585612ddd565b9150610e7e565b610e7b898983818110610e4757610e47613624565b9050602002016020810190610e5c9190613399565b888884818110610e6e57610e6e613624565b9050602002013585612ef8565b91505b811515600003610e8d57600094505b600101610da5565b50505050949350505050565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b03163314610eea5760405162461bcd60e51b81526004016109ae919061320b565b50600b805460ff19168215159081179091556040519081527fe1455bc53682229469d6919bb96d7b338cbffea93170dfb5f02242c22fb6d07f906020015b60405180910390a150565b6000805460408051808201909152600681526535303030303160d01b6020820152906001600160a01b03163314610f7d5760405162461bcd60e51b81526004016109ae919061320b565b5081610f8885611c1e565b1015610fc257604080518082018252600681526531323036303160d01b6020820152905162461bcd60e51b81526109ae919060040161320b565b6060833b1561108757610fde83610fd887611c1e565b906130bc565b6001600160a01b03861660009081526008602052604090205561100a8361100486611c1e565b906130cf565b6001600160a01b0385166000818152600860205260409081902092909255905163607705c560e11b815285919063c0ee0b8a9061104f903390889087906004016136dc565b600060405180830381600087803b15801561106957600080fd5b505af115801561107d573d6000803e3d6000fd5b50505050506110d4565b61109483610fd887611c1e565b6001600160a01b0386166000908152600860205260409020556110ba8361100486611c1e565b6001600160a01b0385166000908152600860205260409020555b836001600160a01b0316856001600160a01b03166000805160206138888339815191528560405161110791815260200190565b60405180910390a3506001949350505050565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b031633146111635760405162461bcd60e51b81526004016109ae919061320b565b5060176111708282613754565b5050565b601a8054610bfc906136a2565b60095460408051808201909152600681526531323130303160d01b602082015290600160b01b900460ff1615156001146111ce5760405162461bcd60e51b81526004016109ae919061320b565b50600954600160a01b900460ff16151560010361129d5760095460005460405163d3da927f60e01b81523360048201526001600160a01b03918216602482015291169063d3da927f90604401602060405180830381865afa158015611237573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061125b9190613814565b60408051808201909152600681526518991898181960d11b602082015290151560011461129b5760405162461bcd60e51b81526004016109ae919061320b565b505b336000908152600a602052604090208281556002016112bc8282613754565b507f3bb9553f633a7ecb4cbc5f9885e750a522496ce06deff1ed9184180ca83940c03383836040516112f0939291906136dc565b60405180910390a15050565b60118054610bfc906136a2565b60058054610bfc906136a2565b60198054610bfc906136a2565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b0316331461136c5760405162461bcd60e51b81526004016109ae919061320b565b5060138190556040518181527fe451abe602c33e612ea61221b5a142f7fe3c044286e42c8340ffe7fa86a5859790602001610f28565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b031633146113eb5760405162461bcd60e51b81526004016109ae919061320b565b506001600160a01b0382166000818152600a6020908152604091829020600101849055815192835282018390527fa42bd6bdfcb8f9b815c68e4ce0e16dec3f1e7ac53967ee8309653de522a735b191016112f0565b600b5460ff16158061145c5750600954600160a81b900460ff16155b8061146e57508161146c33611c1e565b105b156114a757604080518082018252600681526531323037303160d01b6020820152905162461bcd60e51b81526109ae919060040161320b565b6000546001600160a01b038481169116148015906114d35750600954600160a01b900460ff1615156001145b156115925760095460005460405163d3da927f60e01b81526001600160a01b038681166004830152918216602482015291169063d3da927f90604401602060405180830381865afa15801561152c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115509190613814565b6040805180820190915260068152651899181b981960d11b60208201529015156001146115905760405162461bcd60e51b81526004016109ae919061320b565b505b33600090815260086020526040812080548492906115b1908490613663565b9091555050336000908152600d6020526040812080548492906115d5908490613650565b9091555050600c805460408051608081018252338082526001600160a01b038881166020840190815283850189815260016060860181815290880189556000989098529351600487027fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c7810180549285166001600160a01b031993841617905591517fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c8830180549190941691161790915591517fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c983015593517fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8ca909101805491151560ff1990921691909117905551909182917fa256c3bc72c26fbfd6285cfde8c7e345b4d0c7ccfc725d103e9f129c5d8a039a9161171991889088908890613831565b60405180910390a250505050565b60068054610bfc906136a2565b60178054610bfc906136a2565b601b8054610bfc906136a2565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b031633146117975760405162461bcd60e51b81526004016109ae919061320b565b506007805460ff191682151590811790915560405160ff9091161515907fe1e5c6f5867805bf3fab73f4df4b80d0e87e9262a7bc22ac7c2cb3fd5896222f90600090a250565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b031633146118265760405162461bcd60e51b81526004016109ae919061320b565b50600954600160a81b900460ff16151560000361187157604080518082018252600681526531323039303160d01b6020820152905162461bcd60e51b81526109ae919060040161320b565b600c828154811061188457611884613624565b6000918252602082206003600490920201015460ff16151590036118d65760408051808201825260068152651899181c981960d11b6020820152905162461bcd60e51b81526109ae919060040161320b565b600c82815481106118e9576118e9613624565b90600052602060002090600402016002015460086000600c858154811061191257611912613624565b60009182526020808320600160049093020191909101546001600160a01b031683528201929092526040018120805490919061194f908490613650565b9091555050600c80548390811061196857611968613624565b906000526020600020906004020160020154600d6000600c858154811061199157611991613624565b600091825260208083206004909202909101546001600160a01b03168352820192909252604001812080549091906119ca908490613663565b925050819055506000600c83815481106119e6576119e6613624565b906000526020600020906004020160030160006101000a81548160ff021916908315150217905550817f6b50d6e4941ce7ae74ed7f7f51df5fb7680754c2815a094c66bea5ca80a40eb1600c8481548110611a4357611a43613624565b6000918252602090912060049091020154600c80546001600160a01b039092169186908110611a7457611a74613624565b6000918252602090912060016004909202010154604051611aa192916001600160a01b0316908690613676565b60405180910390a2600c8281548110611abc57611abc613624565b6000918252602090912060016004909202010154600c80546001600160a01b039092169184908110611af057611af0613624565b6000918252602090912060049091020154600c80546001600160a01b0390921691600080516020613888833981519152919086908110611b3257611b32613624565b906000526020600020906004020160020154604051611b5391815260200190565b60405180910390a35050565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b03163314611ba85760405162461bcd60e51b81526004016109ae919061320b565b50601055565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b03163314611bf75760405162461bcd60e51b81526004016109ae919061320b565b5060116111708282613754565b60128054610bfc906136a2565b60168054610bfc906136a2565b6001600160a01b031660009081526008602052604090205490565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b03163314611c825760405162461bcd60e51b81526004016109ae919061320b565b50600480546001600160a01b0319166001600160a01b0392909216919091179055565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b03163314611cee5760405162461bcd60e51b81526004016109ae919061320b565b508483141580611cfe5750848114155b15611d3757604080518082018252600681526531323134303160d01b6020820152905162461bcd60e51b81526109ae919060040161320b565b60005b85811015611db957611db1878783818110611d5757611d57613624565b9050602002016020810190611d6c9190613399565b868684818110611d7e57611d7e613624565b9050602002016020810190611d939190613399565b858585818110611da557611da5613624565b90506020020135612716565b600101611d3a565b50505050505050565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b03163314611e0b5760405162461bcd60e51b81526004016109ae919061320b565b5060196111708282613754565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b03163314611e615760405162461bcd60e51b81526004016109ae919061320b565b5060066111708282613754565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b03163314611eb75760405162461bcd60e51b81526004016109ae919061320b565b50601b6111708282613754565b600a6020526000908152604090208054600182015460028301805492939192611eec906136a2565b80601f0160208091040260200160405190810160405280929190818152602001828054611f18906136a2565b8015611f655780601f10611f3a57610100808354040283529160200191611f65565b820191906000526020600020905b815481529060010190602001808311611f4857829003601f168201915b5050505050905083565b60028054610bfc906136a2565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b03163314611fc55760405162461bcd60e51b81526004016109ae919061320b565b50601c6111708282613754565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b0316331461201b5760405162461bcd60e51b81526004016109ae919061320b565b5060098054911515600160a81b0260ff60a81b19909216919091179055565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b031633146120835760405162461bcd60e51b81526004016109ae919061320b565b5084831415806120935750848114155b156120cc57604080518082018252600681526531323133303160d01b6020820152905162461bcd60e51b81526109ae919060040161320b565b60005b85811015611db9576121468787838181106120ec576120ec613624565b90506020020160208101906121019190613399565b86868481811061211357612113613624565b90506020020160208101906121289190613399565b85858581811061213a5761213a613624565b90506020020135612cb5565b6001016120cf565b60008161215a33611c1e565b10156040518060400160405280600681526020016531323034303160d01b815250906121995760405162461bcd60e51b81526004016109ae919061320b565b506009546040805180820190915260068152651899181a181960d11b602082015290600160a81b900460ff1615156001146121e75760405162461bcd60e51b81526004016109ae919061320b565b506060833b15612204576121fc848483612ddd565b91505061220f565b6121fc848483612ef8565b92915050565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b0316331461225e5760405162461bcd60e51b81526004016109ae919061320b565b50601a6111708282613754565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b031633146122b45760405162461bcd60e51b81526004016109ae919061320b565b5060056111708282613754565b6001600160a01b039182166000908152600e6020908152604080832093909416825291909152205490565b816122f733866122c1565b101561233157604080518082018252600681526518991818981960d11b6020820152905162461bcd60e51b81526109ae919060040161320b565b61233f82610fd833876122c1565b336000908152600e602090815260408083206001600160a01b03891684529091529020556123708261100485611c1e565b6001600160a01b038085166000908152600860205260409081902092909255905133918616907f7a1a1088c929a111dda2dc0ca1cc650aa78525d11fd3089abf20c8474f5d82cc906123c7908790879087906136dc565b60405180910390a350505050565b816123df33611c1e565b101561241957604080518082018252600681526518991818181960d11b6020820152905162461bcd60e51b81526109ae919060040161320b565b61242682610fd833611c1e565b3360008181526008602052604090209190915561244a9083906110049086906122c1565b6001600160a01b0384166000818152600e602090815260408083203380855292529182902093909355519091907ecd77abc69e7bbb6de9df8cbfcca8720df3a30decf9eefd187e72ab2ea2f513906124a5908690869061386e565b60405180910390a3505050565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b031633146124fb5760405162461bcd60e51b81526004016109ae919061320b565b506009805460ff60b01b1916600160b01b831515908102919091179091556040517fa0c691180b8089c0c84e478ee67d6325768666cd889f13de016771c6f7af1f8890600090a250565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b0316331461258e5760405162461bcd60e51b81526004016109ae919061320b565b508161259a86866122c1565b10156125d457604080518082018252600681526531323132303160d01b6020820152905162461bcd60e51b81526109ae919060040161320b565b6125e282610fd887876122c1565b6001600160a01b038087166000908152600e60209081526040808320938916835292905220556126158261100485611c1e565b60086000856001600160a01b03166001600160a01b0316815260200190815260200160002081905550846001600160a01b0316846001600160a01b03167f7a1a1088c929a111dda2dc0ca1cc650aa78525d11fd3089abf20c8474f5d82cc858585604051612685939291906136dc565b60405180910390a35050505050565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b031633146126dd5760405162461bcd60e51b81526004016109ae919061320b565b506018805460ff191660011790556040517f96151d7f1d8c50be29a45c0e3ae9ce2008888d1615b196e8f5ffd8c178e6dde890600090a1565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b0316331461275f5760405162461bcd60e51b81526004016109ae919061320b565b506001600160a01b038216156127fd578061277a83856122c1565b10156127b457604080518082018252600681526531323131303160d01b6020820152905162461bcd60e51b81526109ae919060040161320b565b6127c281610fd884866122c1565b6001600160a01b038084166000908152600e60209081526040808320938816835292905220556003546127f590826130bc565b600355612888565b6001600160a01b03831660009081526008602052604090205481111561285157604080518082018252600681526518991898981960d11b6020820152905162461bcd60e51b81526109ae919060040161320b565b61285e81610fd885611c1e565b6001600160a01b03841660009081526008602052604090205560035461288490826130bc565b6003555b816001600160a01b0316836001600160a01b0316336001600160a01b03167fee02732fab40ece8284c756220846dff4b8d32058b86b35b4f0459bf172fcef0846040516128d791815260200190565b60405180910390a4505050565b6000805460408051808201909152600681526535303030303160d01b6020820152906001600160a01b0316331461292e5760405162461bcd60e51b81526004016109ae919061320b565b50858414158061293e5750858214155b1561297757604080518082018252600681526531323135303160d01b6020820152905162461bcd60e51b81526109ae919060040161320b565b60005b868110156129fa576129f188888381811061299757612997613624565b90506020020160208101906129ac9190613399565b8787848181106129be576129be613624565b90506020020160208101906129d39190613399565b8686858181106129e5576129e5613624565b90506020020135610f33565b5060010161297a565b506001979650505050505050565b601c8054610bfc906136a2565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b03163314612a5e5760405162461bcd60e51b81526004016109ae919061320b565b50600f8190556040518181527f82b19c9a00131a87eeff1903fcb9e4f2a3ba76dd86098586eea921a533e218dc90602001610f28565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b03163314612add5760405162461bcd60e51b81526004016109ae919061320b565b5060408051808201909152600681526535303031303160d01b60208201526001600160a01b038216612b225760405162461bcd60e51b81526004016109ae919061320b565b50600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60158054610bfc906136a2565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b03163314612bd45760405162461bcd60e51b81526004016109ae919061320b565b50600980546001600160a01b0319166001600160a01b0392909216919091179055565b60148054610bfc906136a2565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b03163314612c4d5760405162461bcd60e51b81526004016109ae919061320b565b5060098054911515600160a01b0260ff60a01b19909216919091179055565b600c8181548110612c7c57600080fd5b600091825260209091206004909102018054600182015460028301546003909301546001600160a01b0392831694509116919060ff1684565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b03163314612cfe5760405162461bcd60e51b81526004016109ae919061320b565b506001600160a01b03821615612d5757612d1c8161100484866122c1565b6001600160a01b038084166000908152600e6020908152604080832093881683529290522055600354612d4f90826130cf565b600355612d8e565b612d648161100485611c1e565b6001600160a01b038416600090815260086020526040902055600354612d8a90826130cf565b6003555b816001600160a01b0316836001600160a01b0316336001600160a01b03167f65adeb76912378393e600cb6f64f3310842a42e1eae86273dc775d0c47a0f2dc846040516128d791815260200190565b60045460408051808201909152600681526531323033303160d01b60208201526000916001600160a01b03868116911614612e2b5760405162461bcd60e51b81526004016109ae919061320b565b50612e3983610fd833611c1e565b33600090815260086020526040902055612e568361100486611c1e565b6001600160a01b0385166000818152600860205260409081902092909255905163607705c560e11b815285919063c0ee0b8a90612e9b903390889088906004016136dc565b600060405180830381600087803b158015612eb557600080fd5b505af1158015612ec9573d6000803e3d6000fd5b50506040518681526001600160a01b038816925033915060008051602061388883398151915290602001611107565b6004546000906001600160a01b03163314801590612f1d5750600b5460ff1615156001145b15612f5657604080518082018252600681526531323032303160d01b6020820152905162461bcd60e51b81526109ae919060040161320b565b6000546001600160a01b03858116911614801590612f825750600954600160a01b900460ff1615156001145b156130415760095460005460405163d3da927f60e01b81526001600160a01b038781166004830152918216602482015291169063d3da927f90604401602060405180830381865afa158015612fdb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fff9190613814565b60408051808201909152600681526518991819181960d11b602082015290151560011461303f5760405162461bcd60e51b81526004016109ae919061320b565b505b61304e83610fd833611c1e565b3360009081526008602052604090205561306b8361100486611c1e565b6001600160a01b038516600081815260086020526040908190209290925590513390600080516020613888833981519152906130aa9087815260200190565b60405180910390a35060019392505050565b60006130c88284613663565b9392505050565b60006130c88284613650565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261310257600080fd5b813567ffffffffffffffff8082111561311d5761311d6130db565b604051601f8301601f19908116603f01168101908282118183101715613145576131456130db565b8160405283815286602085880101111561315e57600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000806040838503121561319157600080fd5b82359150602083013567ffffffffffffffff8111156131af57600080fd5b6131bb858286016130f1565b9150509250929050565b6000815180845260005b818110156131eb576020818501810151868301820152016131cf565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006130c860208301846131c5565b60008083601f84011261323057600080fd5b50813567ffffffffffffffff81111561324857600080fd5b6020830191508360208260051b850101111561326357600080fd5b9250929050565b6000806000806040858703121561328057600080fd5b843567ffffffffffffffff8082111561329857600080fd5b6132a48883890161321e565b909650945060208701359150808211156132bd57600080fd5b506132ca8782880161321e565b95989497509550505050565b80151581146132e457600080fd5b50565b6000602082840312156132f957600080fd5b81356130c8816132d6565b80356001600160a01b038116811461331b57600080fd5b919050565b60008060006060848603121561333557600080fd5b61333e84613304565b925061334c60208501613304565b9150604084013590509250925092565b60006020828403121561336e57600080fd5b813567ffffffffffffffff81111561338557600080fd5b613391848285016130f1565b949350505050565b6000602082840312156133ab57600080fd5b6130c882613304565b6000602082840312156133c657600080fd5b5035919050565b600080604083850312156133e057600080fd5b6133e983613304565b946020939093013593505050565b60008060006060848603121561340c57600080fd5b61341584613304565b925060208401359150604084013567ffffffffffffffff81111561343857600080fd5b613444868287016130f1565b9150509250925092565b6000806000806000806060878903121561346757600080fd5b863567ffffffffffffffff8082111561347f57600080fd5b61348b8a838b0161321e565b909850965060208901359150808211156134a457600080fd5b6134b08a838b0161321e565b909650945060408901359150808211156134c957600080fd5b506134d689828a0161321e565b979a9699509497509295939492505050565b83815282602082015260606040820152600061350760608301846131c5565b95945050505050565b6000806040838503121561352357600080fd5b61352c83613304565b915061353a60208401613304565b90509250929050565b6000806000806080858703121561355957600080fd5b61356285613304565b935061357060208601613304565b925060408501359150606085013567ffffffffffffffff81111561359357600080fd5b61359f878288016130f1565b91505092959194509250565b600080600080600060a086880312156135c357600080fd5b6135cc86613304565b94506135da60208701613304565b93506135e860408701613304565b925060608601359150608086013567ffffffffffffffff81111561360b57600080fd5b613617888289016130f1565b9150509295509295909350565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b8082018082111561220f5761220f61363a565b8181038181111561220f5761220f61363a565b6001600160a01b03848116825283166020820152606060408201819052600090613507908301846131c5565b600181811c908216806136b657607f821691505b6020821081036136d657634e487b7160e01b600052602260045260246000fd5b50919050565b60018060a01b038416815282602082015260606040820152600061350760608301846131c5565b601f82111561374f576000816000526020600020601f850160051c8101602086101561372c5750805b601f850160051c820191505b8181101561374b57828155600101613738565b5050505b505050565b815167ffffffffffffffff81111561376e5761376e6130db565b6137828161377c84546136a2565b84613703565b602080601f8311600181146137b7576000841561379f5750858301515b600019600386901b1c1916600185901b17855561374b565b600085815260208120601f198616915b828110156137e6578886015182559484019460019091019084016137c7565b50858210156138045787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121561382657600080fd5b81516130c8816132d6565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090613864908301846131c5565b9695505050505050565b82815260406020820152600061339160408301846131c556feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220e385993d59ded9846e69a909ad9c39f33b370ddfb93fc04cc8f9fc63367194d964736f6c63430008170033", + "deployedBytecode": "608060405234801561001057600080fd5b50600436106104125760003560e01c806381ebdd7911610220578063c267ce5f11610130578063ef8032ef116100b8578063fc590d0911610087578063fc590d09146108a3578063fd0e8569146108ab578063fd14a222146108bf578063fef1b9c0146108d2578063ff12dcea1461091257600080fd5b8063ef8032ef14610862578063f2fde38b14610875578063f35eeaef14610888578063f7502a7c1461089057600080fd5b8063db20266f116100ff578063db20266f14610800578063e7464db11461082b578063e80500521461083e578063ed62c2a014610851578063ef4474cd1461085957600080fd5b8063c267ce5f146107bf578063c7109ec9146107d2578063ca5cbbb5146107e5578063d5d9d0c7146107f857600080fd5b806397e4c513116101b3578063ab62f92e11610182578063ab62f92e1461075f578063b2a90a6014610772578063b967a52e14610786578063b9b3e06a14610799578063bfe30fb0146107ac57600080fd5b806397e4c513146107135780639cd23707146107265780639d8886c814610739578063a9059cbb1461074c57600080fd5b8063919fe52d116101ef578063919fe52d146106c257806392ff0d31146106d55780639301a78b146106e957806395d89b411461070b57600080fd5b806381ebdd79146106695780638ac08bf1146106895780638da5cb5b1461069c5780638ed8a9bc146106af57600080fd5b80633b18b984116103265780635f84f302116102ae57806370740aab1161027d57806370740aab1461061f57806370a082311461062757806376fa7a311461063a5780637c3a00fd1461064d5780637ed6d1031461065657600080fd5b80635f84f302146105e457806363783444146105f75780636666e49c1461060a5780636f3b993f1461061257600080fd5b806344fd9caa116102f557806344fd9caa146105a557806358c3b870146105ae57806359d93617146105b65780635c40f6f4146105be5780635ccef3e7146105d157600080fd5b80633b18b9841461056457806340615cf81461057757806340eba90e1461058a578063428630f61461059d57600080fd5b806323b872dd116103a95780632e0ad004116103785780632e0ad0041461053157806331cef44714610539578063329dbddc1461054c57806336f7ab5e146105545780633a2b69391461055c57600080fd5b806323b872dd146104d857806325287d42146104eb57806325d60861146104fe57806327e235e31461051157600080fd5b8063153a1f3e116103e5578063153a1f3e1461048e57806318160ddd146104a15780631935a880146104b8578063200d2ed2146104cb57600080fd5b8063034f6b211461041757806306eaa0b71461043957806306fdde031461044e5780630af7eb0f14610463575b600080fd5b6018546104249060ff1681565b60405190151581526020015b60405180910390f35b61044c61044736600461317e565b610925565b005b610456610bef565b604051610430919061320b565b600954610476906001600160a01b031681565b6040516001600160a01b039091168152602001610430565b61042461049c36600461326a565b610c7d565b6104aa60035481565b604051908152602001610430565b61044c6104c63660046132e7565b610ea1565b6007546104249060ff1681565b6104246104e6366004613320565b610f33565b600454610476906001600160a01b031681565b61044c61050c36600461335c565b61111a565b6104aa61051f366004613399565b60086020526000908152604090205481565b610456611174565b61044c61054736600461317e565b611181565b6104566112fc565b610456611309565b610456611316565b61044c6105723660046133b4565b611323565b61044c6105853660046133cd565b6113a2565b61044c6105983660046133f7565b611440565b610456611727565b6104aa600f5481565b610456611734565b610456611741565b61044c6105cc3660046132e7565b61174e565b61044c6105df36600461317e565b6117dd565b61044c6105f23660046133b4565b611b5f565b61044c61060536600461335c565b611bae565b610456611c04565b600b546104249060ff1681565b610456611c11565b6104aa610635366004613399565b611c1e565b61044c610648366004613399565b611c39565b6104aa60105481565b61044c61066436600461344e565b611ca5565b6104aa610677366004613399565b600d6020526000908152604090205481565b61044c61069736600461335c565b611dc2565b600054610476906001600160a01b031681565b61044c6106bd36600461335c565b611e18565b61044c6106d036600461335c565b611e6e565b60095461042490600160a81b900460ff1681565b6106fc6106f7366004613399565b611ec4565b604051610430939291906134e8565b610456611f6f565b61044c61072136600461335c565b611f7c565b61044c6107343660046132e7565b611fd2565b61044c61074736600461344e565b61203a565b61042461075a3660046133cd565b61214e565b61044c61076d36600461335c565b612215565b60095461042490600160b01b900460ff1681565b61044c61079436600461335c565b61226b565b6104aa6107a7366004613510565b6122c1565b61044c6107ba366004613543565b6122ec565b61044c6107cd3660046133f7565b6123d5565b61044c6107e03660046132e7565b6124b2565b61044c6107f33660046135ab565b612545565b61044c612694565b6104aa61080e366004613510565b600e60209081526000928352604080842090915290825290205481565b61044c610839366004613320565b612716565b61042461084c36600461344e565b6128e4565b610456612a08565b6104aa60135481565b61044c6108703660046133b4565b612a15565b61044c610883366004613399565b612a94565b610456612b7e565b61044c61089e366004613399565b612b8b565b610456612bf7565b60095461042490600160a01b900460ff1681565b61044c6108cd3660046132e7565b612c04565b6108e56108e03660046133b4565b612c6c565b604080516001600160a01b0395861681529490931660208501529183015215156060820152608001610430565b61044c610920366004613320565b612cb5565b336001600160a01b0316600c838154811061094257610942613624565b60009182526020909120600490910201546001600160a01b03161480159061097557506000546001600160a01b03163314155b156109b757604080518082018252600681526531323038303160d01b6020820152905162461bcd60e51b81526109ae919060040161320b565b60405180910390fd5b600c82815481106109ca576109ca613624565b6000918252602082206003600490920201015460ff1615159003610a1c5760408051808201825260068152651899181c181960d11b6020820152905162461bcd60e51b81526109ae919060040161320b565b600c8281548110610a2f57610a2f613624565b90600052602060002090600402016002015460086000600c8581548110610a5857610a58613624565b600091825260208083206004909202909101546001600160a01b0316835282019290925260400181208054909190610a91908490613650565b9091555050600c805483908110610aaa57610aaa613624565b906000526020600020906004020160020154600d6000600c8581548110610ad357610ad3613624565b600091825260208083206004909202909101546001600160a01b0316835282019290925260400181208054909190610b0c908490613663565b925050819055506000600c8381548110610b2857610b28613624565b906000526020600020906004020160030160006101000a81548160ff021916908315150217905550817fa0cc3a4feb26502e6e6cd57b2113d58bdab80c6711d8252356be9a49945bb5f7600c8481548110610b8557610b85613624565b6000918252602090912060049091020154600c80546001600160a01b039092169186908110610bb657610bb6613624565b6000918252602090912060016004909202010154604051610be392916001600160a01b0316908690613676565b60405180910390a25050565b60018054610bfc906136a2565b80601f0160208091040260200160405190810160405280929190818152602001828054610c28906136a2565b8015610c755780601f10610c4a57610100808354040283529160200191610c75565b820191906000526020600020905b815481529060010190602001808311610c5857829003601f168201915b505050505081565b6000838214610cba57604080518082018252600681526531323035303160d01b6020820152905162461bcd60e51b81526109ae919060040161320b565b6000805b85811015610cf457848482818110610cd857610cd8613624565b9050602002013582610cea9190613650565b9150600101610cbe565b5080610cff33611c1e565b1015610d395760408051808201825260068152651899181a981960d11b6020820152905162461bcd60e51b81526109ae919060040161320b565b6004546001600160a01b03163314610d9a5760095460408051808201909152600681526531323035303360d01b602082015290600160a81b900460ff161515600114610d985760405162461bcd60e51b81526004016109ae919061320b565b505b606060006001935060005b87811015610e9557610ddd898983818110610dc257610dc2613624565b9050602002016020810190610dd79190613399565b3b151590565b15610e3257610e2b898983818110610df757610df7613624565b9050602002016020810190610e0c9190613399565b888884818110610e1e57610e1e613624565b9050602002013585612ddd565b9150610e7e565b610e7b898983818110610e4757610e47613624565b9050602002016020810190610e5c9190613399565b888884818110610e6e57610e6e613624565b9050602002013585612ef8565b91505b811515600003610e8d57600094505b600101610da5565b50505050949350505050565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b03163314610eea5760405162461bcd60e51b81526004016109ae919061320b565b50600b805460ff19168215159081179091556040519081527fe1455bc53682229469d6919bb96d7b338cbffea93170dfb5f02242c22fb6d07f906020015b60405180910390a150565b6000805460408051808201909152600681526535303030303160d01b6020820152906001600160a01b03163314610f7d5760405162461bcd60e51b81526004016109ae919061320b565b5081610f8885611c1e565b1015610fc257604080518082018252600681526531323036303160d01b6020820152905162461bcd60e51b81526109ae919060040161320b565b6060833b1561108757610fde83610fd887611c1e565b906130bc565b6001600160a01b03861660009081526008602052604090205561100a8361100486611c1e565b906130cf565b6001600160a01b0385166000818152600860205260409081902092909255905163607705c560e11b815285919063c0ee0b8a9061104f903390889087906004016136dc565b600060405180830381600087803b15801561106957600080fd5b505af115801561107d573d6000803e3d6000fd5b50505050506110d4565b61109483610fd887611c1e565b6001600160a01b0386166000908152600860205260409020556110ba8361100486611c1e565b6001600160a01b0385166000908152600860205260409020555b836001600160a01b0316856001600160a01b03166000805160206138888339815191528560405161110791815260200190565b60405180910390a3506001949350505050565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b031633146111635760405162461bcd60e51b81526004016109ae919061320b565b5060176111708282613754565b5050565b601a8054610bfc906136a2565b60095460408051808201909152600681526531323130303160d01b602082015290600160b01b900460ff1615156001146111ce5760405162461bcd60e51b81526004016109ae919061320b565b50600954600160a01b900460ff16151560010361129d5760095460005460405163d3da927f60e01b81523360048201526001600160a01b03918216602482015291169063d3da927f90604401602060405180830381865afa158015611237573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061125b9190613814565b60408051808201909152600681526518991898181960d11b602082015290151560011461129b5760405162461bcd60e51b81526004016109ae919061320b565b505b336000908152600a602052604090208281556002016112bc8282613754565b507f3bb9553f633a7ecb4cbc5f9885e750a522496ce06deff1ed9184180ca83940c03383836040516112f0939291906136dc565b60405180910390a15050565b60118054610bfc906136a2565b60058054610bfc906136a2565b60198054610bfc906136a2565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b0316331461136c5760405162461bcd60e51b81526004016109ae919061320b565b5060138190556040518181527fe451abe602c33e612ea61221b5a142f7fe3c044286e42c8340ffe7fa86a5859790602001610f28565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b031633146113eb5760405162461bcd60e51b81526004016109ae919061320b565b506001600160a01b0382166000818152600a6020908152604091829020600101849055815192835282018390527fa42bd6bdfcb8f9b815c68e4ce0e16dec3f1e7ac53967ee8309653de522a735b191016112f0565b600b5460ff16158061145c5750600954600160a81b900460ff16155b8061146e57508161146c33611c1e565b105b156114a757604080518082018252600681526531323037303160d01b6020820152905162461bcd60e51b81526109ae919060040161320b565b6000546001600160a01b038481169116148015906114d35750600954600160a01b900460ff1615156001145b156115925760095460005460405163d3da927f60e01b81526001600160a01b038681166004830152918216602482015291169063d3da927f90604401602060405180830381865afa15801561152c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115509190613814565b6040805180820190915260068152651899181b981960d11b60208201529015156001146115905760405162461bcd60e51b81526004016109ae919061320b565b505b33600090815260086020526040812080548492906115b1908490613663565b9091555050336000908152600d6020526040812080548492906115d5908490613650565b9091555050600c805460408051608081018252338082526001600160a01b038881166020840190815283850189815260016060860181815290880189556000989098529351600487027fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c7810180549285166001600160a01b031993841617905591517fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c8830180549190941691161790915591517fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c983015593517fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8ca909101805491151560ff1990921691909117905551909182917fa256c3bc72c26fbfd6285cfde8c7e345b4d0c7ccfc725d103e9f129c5d8a039a9161171991889088908890613831565b60405180910390a250505050565b60068054610bfc906136a2565b60178054610bfc906136a2565b601b8054610bfc906136a2565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b031633146117975760405162461bcd60e51b81526004016109ae919061320b565b506007805460ff191682151590811790915560405160ff9091161515907fe1e5c6f5867805bf3fab73f4df4b80d0e87e9262a7bc22ac7c2cb3fd5896222f90600090a250565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b031633146118265760405162461bcd60e51b81526004016109ae919061320b565b50600954600160a81b900460ff16151560000361187157604080518082018252600681526531323039303160d01b6020820152905162461bcd60e51b81526109ae919060040161320b565b600c828154811061188457611884613624565b6000918252602082206003600490920201015460ff16151590036118d65760408051808201825260068152651899181c981960d11b6020820152905162461bcd60e51b81526109ae919060040161320b565b600c82815481106118e9576118e9613624565b90600052602060002090600402016002015460086000600c858154811061191257611912613624565b60009182526020808320600160049093020191909101546001600160a01b031683528201929092526040018120805490919061194f908490613650565b9091555050600c80548390811061196857611968613624565b906000526020600020906004020160020154600d6000600c858154811061199157611991613624565b600091825260208083206004909202909101546001600160a01b03168352820192909252604001812080549091906119ca908490613663565b925050819055506000600c83815481106119e6576119e6613624565b906000526020600020906004020160030160006101000a81548160ff021916908315150217905550817f6b50d6e4941ce7ae74ed7f7f51df5fb7680754c2815a094c66bea5ca80a40eb1600c8481548110611a4357611a43613624565b6000918252602090912060049091020154600c80546001600160a01b039092169186908110611a7457611a74613624565b6000918252602090912060016004909202010154604051611aa192916001600160a01b0316908690613676565b60405180910390a2600c8281548110611abc57611abc613624565b6000918252602090912060016004909202010154600c80546001600160a01b039092169184908110611af057611af0613624565b6000918252602090912060049091020154600c80546001600160a01b0390921691600080516020613888833981519152919086908110611b3257611b32613624565b906000526020600020906004020160020154604051611b5391815260200190565b60405180910390a35050565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b03163314611ba85760405162461bcd60e51b81526004016109ae919061320b565b50601055565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b03163314611bf75760405162461bcd60e51b81526004016109ae919061320b565b5060116111708282613754565b60128054610bfc906136a2565b60168054610bfc906136a2565b6001600160a01b031660009081526008602052604090205490565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b03163314611c825760405162461bcd60e51b81526004016109ae919061320b565b50600480546001600160a01b0319166001600160a01b0392909216919091179055565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b03163314611cee5760405162461bcd60e51b81526004016109ae919061320b565b508483141580611cfe5750848114155b15611d3757604080518082018252600681526531323134303160d01b6020820152905162461bcd60e51b81526109ae919060040161320b565b60005b85811015611db957611db1878783818110611d5757611d57613624565b9050602002016020810190611d6c9190613399565b868684818110611d7e57611d7e613624565b9050602002016020810190611d939190613399565b858585818110611da557611da5613624565b90506020020135612716565b600101611d3a565b50505050505050565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b03163314611e0b5760405162461bcd60e51b81526004016109ae919061320b565b5060196111708282613754565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b03163314611e615760405162461bcd60e51b81526004016109ae919061320b565b5060066111708282613754565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b03163314611eb75760405162461bcd60e51b81526004016109ae919061320b565b50601b6111708282613754565b600a6020526000908152604090208054600182015460028301805492939192611eec906136a2565b80601f0160208091040260200160405190810160405280929190818152602001828054611f18906136a2565b8015611f655780601f10611f3a57610100808354040283529160200191611f65565b820191906000526020600020905b815481529060010190602001808311611f4857829003601f168201915b5050505050905083565b60028054610bfc906136a2565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b03163314611fc55760405162461bcd60e51b81526004016109ae919061320b565b50601c6111708282613754565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b0316331461201b5760405162461bcd60e51b81526004016109ae919061320b565b5060098054911515600160a81b0260ff60a81b19909216919091179055565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b031633146120835760405162461bcd60e51b81526004016109ae919061320b565b5084831415806120935750848114155b156120cc57604080518082018252600681526531323133303160d01b6020820152905162461bcd60e51b81526109ae919060040161320b565b60005b85811015611db9576121468787838181106120ec576120ec613624565b90506020020160208101906121019190613399565b86868481811061211357612113613624565b90506020020160208101906121289190613399565b85858581811061213a5761213a613624565b90506020020135612cb5565b6001016120cf565b60008161215a33611c1e565b10156040518060400160405280600681526020016531323034303160d01b815250906121995760405162461bcd60e51b81526004016109ae919061320b565b506009546040805180820190915260068152651899181a181960d11b602082015290600160a81b900460ff1615156001146121e75760405162461bcd60e51b81526004016109ae919061320b565b506060833b15612204576121fc848483612ddd565b91505061220f565b6121fc848483612ef8565b92915050565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b0316331461225e5760405162461bcd60e51b81526004016109ae919061320b565b50601a6111708282613754565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b031633146122b45760405162461bcd60e51b81526004016109ae919061320b565b5060056111708282613754565b6001600160a01b039182166000908152600e6020908152604080832093909416825291909152205490565b816122f733866122c1565b101561233157604080518082018252600681526518991818981960d11b6020820152905162461bcd60e51b81526109ae919060040161320b565b61233f82610fd833876122c1565b336000908152600e602090815260408083206001600160a01b03891684529091529020556123708261100485611c1e565b6001600160a01b038085166000908152600860205260409081902092909255905133918616907f7a1a1088c929a111dda2dc0ca1cc650aa78525d11fd3089abf20c8474f5d82cc906123c7908790879087906136dc565b60405180910390a350505050565b816123df33611c1e565b101561241957604080518082018252600681526518991818181960d11b6020820152905162461bcd60e51b81526109ae919060040161320b565b61242682610fd833611c1e565b3360008181526008602052604090209190915561244a9083906110049086906122c1565b6001600160a01b0384166000818152600e602090815260408083203380855292529182902093909355519091907ecd77abc69e7bbb6de9df8cbfcca8720df3a30decf9eefd187e72ab2ea2f513906124a5908690869061386e565b60405180910390a3505050565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b031633146124fb5760405162461bcd60e51b81526004016109ae919061320b565b506009805460ff60b01b1916600160b01b831515908102919091179091556040517fa0c691180b8089c0c84e478ee67d6325768666cd889f13de016771c6f7af1f8890600090a250565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b0316331461258e5760405162461bcd60e51b81526004016109ae919061320b565b508161259a86866122c1565b10156125d457604080518082018252600681526531323132303160d01b6020820152905162461bcd60e51b81526109ae919060040161320b565b6125e282610fd887876122c1565b6001600160a01b038087166000908152600e60209081526040808320938916835292905220556126158261100485611c1e565b60086000856001600160a01b03166001600160a01b0316815260200190815260200160002081905550846001600160a01b0316846001600160a01b03167f7a1a1088c929a111dda2dc0ca1cc650aa78525d11fd3089abf20c8474f5d82cc858585604051612685939291906136dc565b60405180910390a35050505050565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b031633146126dd5760405162461bcd60e51b81526004016109ae919061320b565b506018805460ff191660011790556040517f96151d7f1d8c50be29a45c0e3ae9ce2008888d1615b196e8f5ffd8c178e6dde890600090a1565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b0316331461275f5760405162461bcd60e51b81526004016109ae919061320b565b506001600160a01b038216156127fd578061277a83856122c1565b10156127b457604080518082018252600681526531323131303160d01b6020820152905162461bcd60e51b81526109ae919060040161320b565b6127c281610fd884866122c1565b6001600160a01b038084166000908152600e60209081526040808320938816835292905220556003546127f590826130bc565b600355612888565b6001600160a01b03831660009081526008602052604090205481111561285157604080518082018252600681526518991898981960d11b6020820152905162461bcd60e51b81526109ae919060040161320b565b61285e81610fd885611c1e565b6001600160a01b03841660009081526008602052604090205560035461288490826130bc565b6003555b816001600160a01b0316836001600160a01b0316336001600160a01b03167fee02732fab40ece8284c756220846dff4b8d32058b86b35b4f0459bf172fcef0846040516128d791815260200190565b60405180910390a4505050565b6000805460408051808201909152600681526535303030303160d01b6020820152906001600160a01b0316331461292e5760405162461bcd60e51b81526004016109ae919061320b565b50858414158061293e5750858214155b1561297757604080518082018252600681526531323135303160d01b6020820152905162461bcd60e51b81526109ae919060040161320b565b60005b868110156129fa576129f188888381811061299757612997613624565b90506020020160208101906129ac9190613399565b8787848181106129be576129be613624565b90506020020160208101906129d39190613399565b8686858181106129e5576129e5613624565b90506020020135610f33565b5060010161297a565b506001979650505050505050565b601c8054610bfc906136a2565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b03163314612a5e5760405162461bcd60e51b81526004016109ae919061320b565b50600f8190556040518181527f82b19c9a00131a87eeff1903fcb9e4f2a3ba76dd86098586eea921a533e218dc90602001610f28565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b03163314612add5760405162461bcd60e51b81526004016109ae919061320b565b5060408051808201909152600681526535303031303160d01b60208201526001600160a01b038216612b225760405162461bcd60e51b81526004016109ae919061320b565b50600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60158054610bfc906136a2565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b03163314612bd45760405162461bcd60e51b81526004016109ae919061320b565b50600980546001600160a01b0319166001600160a01b0392909216919091179055565b60148054610bfc906136a2565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b03163314612c4d5760405162461bcd60e51b81526004016109ae919061320b565b5060098054911515600160a01b0260ff60a01b19909216919091179055565b600c8181548110612c7c57600080fd5b600091825260209091206004909102018054600182015460028301546003909301546001600160a01b0392831694509116919060ff1684565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b03163314612cfe5760405162461bcd60e51b81526004016109ae919061320b565b506001600160a01b03821615612d5757612d1c8161100484866122c1565b6001600160a01b038084166000908152600e6020908152604080832093881683529290522055600354612d4f90826130cf565b600355612d8e565b612d648161100485611c1e565b6001600160a01b038416600090815260086020526040902055600354612d8a90826130cf565b6003555b816001600160a01b0316836001600160a01b0316336001600160a01b03167f65adeb76912378393e600cb6f64f3310842a42e1eae86273dc775d0c47a0f2dc846040516128d791815260200190565b60045460408051808201909152600681526531323033303160d01b60208201526000916001600160a01b03868116911614612e2b5760405162461bcd60e51b81526004016109ae919061320b565b50612e3983610fd833611c1e565b33600090815260086020526040902055612e568361100486611c1e565b6001600160a01b0385166000818152600860205260409081902092909255905163607705c560e11b815285919063c0ee0b8a90612e9b903390889088906004016136dc565b600060405180830381600087803b158015612eb557600080fd5b505af1158015612ec9573d6000803e3d6000fd5b50506040518681526001600160a01b038816925033915060008051602061388883398151915290602001611107565b6004546000906001600160a01b03163314801590612f1d5750600b5460ff1615156001145b15612f5657604080518082018252600681526531323032303160d01b6020820152905162461bcd60e51b81526109ae919060040161320b565b6000546001600160a01b03858116911614801590612f825750600954600160a01b900460ff1615156001145b156130415760095460005460405163d3da927f60e01b81526001600160a01b038781166004830152918216602482015291169063d3da927f90604401602060405180830381865afa158015612fdb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fff9190613814565b60408051808201909152600681526518991819181960d11b602082015290151560011461303f5760405162461bcd60e51b81526004016109ae919061320b565b505b61304e83610fd833611c1e565b3360009081526008602052604090205561306b8361100486611c1e565b6001600160a01b038516600081815260086020526040908190209290925590513390600080516020613888833981519152906130aa9087815260200190565b60405180910390a35060019392505050565b60006130c88284613663565b9392505050565b60006130c88284613650565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261310257600080fd5b813567ffffffffffffffff8082111561311d5761311d6130db565b604051601f8301601f19908116603f01168101908282118183101715613145576131456130db565b8160405283815286602085880101111561315e57600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000806040838503121561319157600080fd5b82359150602083013567ffffffffffffffff8111156131af57600080fd5b6131bb858286016130f1565b9150509250929050565b6000815180845260005b818110156131eb576020818501810151868301820152016131cf565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006130c860208301846131c5565b60008083601f84011261323057600080fd5b50813567ffffffffffffffff81111561324857600080fd5b6020830191508360208260051b850101111561326357600080fd5b9250929050565b6000806000806040858703121561328057600080fd5b843567ffffffffffffffff8082111561329857600080fd5b6132a48883890161321e565b909650945060208701359150808211156132bd57600080fd5b506132ca8782880161321e565b95989497509550505050565b80151581146132e457600080fd5b50565b6000602082840312156132f957600080fd5b81356130c8816132d6565b80356001600160a01b038116811461331b57600080fd5b919050565b60008060006060848603121561333557600080fd5b61333e84613304565b925061334c60208501613304565b9150604084013590509250925092565b60006020828403121561336e57600080fd5b813567ffffffffffffffff81111561338557600080fd5b613391848285016130f1565b949350505050565b6000602082840312156133ab57600080fd5b6130c882613304565b6000602082840312156133c657600080fd5b5035919050565b600080604083850312156133e057600080fd5b6133e983613304565b946020939093013593505050565b60008060006060848603121561340c57600080fd5b61341584613304565b925060208401359150604084013567ffffffffffffffff81111561343857600080fd5b613444868287016130f1565b9150509250925092565b6000806000806000806060878903121561346757600080fd5b863567ffffffffffffffff8082111561347f57600080fd5b61348b8a838b0161321e565b909850965060208901359150808211156134a457600080fd5b6134b08a838b0161321e565b909650945060408901359150808211156134c957600080fd5b506134d689828a0161321e565b979a9699509497509295939492505050565b83815282602082015260606040820152600061350760608301846131c5565b95945050505050565b6000806040838503121561352357600080fd5b61352c83613304565b915061353a60208401613304565b90509250929050565b6000806000806080858703121561355957600080fd5b61356285613304565b935061357060208601613304565b925060408501359150606085013567ffffffffffffffff81111561359357600080fd5b61359f878288016130f1565b91505092959194509250565b600080600080600060a086880312156135c357600080fd5b6135cc86613304565b94506135da60208701613304565b93506135e860408701613304565b925060608601359150608086013567ffffffffffffffff81111561360b57600080fd5b613617888289016130f1565b9150509295509295909350565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b8082018082111561220f5761220f61363a565b8181038181111561220f5761220f61363a565b6001600160a01b03848116825283166020820152606060408201819052600090613507908301846131c5565b600181811c908216806136b657607f821691505b6020821081036136d657634e487b7160e01b600052602260045260246000fd5b50919050565b60018060a01b038416815282602082015260606040820152600061350760608301846131c5565b601f82111561374f576000816000526020600020601f850160051c8101602086101561372c5750805b601f850160051c820191505b8181101561374b57828155600101613738565b5050505b505050565b815167ffffffffffffffff81111561376e5761376e6130db565b6137828161377c84546136a2565b84613703565b602080601f8311600181146137b7576000841561379f5750858301515b600019600386901b1c1916600185901b17855561374b565b600085815260208120601f198616915b828110156137e6578886015182559484019460019091019084016137c7565b50858210156138045787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121561382657600080fd5b81516130c8816132d6565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090613864908301846131c5565b9695505050505050565b82815260406020820152600061339160408301846131c556feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220e385993d59ded9846e69a909ad9c39f33b370ddfb93fc04cc8f9fc63367194d964736f6c63430008170033" } \ No newline at end of file diff --git a/contracts/Ownable.json b/contracts/Ownable.json index 567d6f13..d59d22d9 100644 --- a/contracts/Ownable.json +++ b/contracts/Ownable.json @@ -51,6 +51,6 @@ "type": "function" } ], - "bytecode": "608060405234801561001057600080fd5b5060008054600160a060020a031916331790556102b1806100326000396000f3fe608060405234801561001057600080fd5b5060043610610052577c010000000000000000000000000000000000000000000000000000000060003504638da5cb5b8114610057578063f2fde38b14610086575b600080fd5b60005461006a90600160a060020a031681565b604051600160a060020a03909116815260200160405180910390f35b6100996100943660046101fd565b61009b565b005b60005460408051808201909152600681527f3530303030310000000000000000000000000000000000000000000000000000602082015290600160a060020a0316331461011e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610115919061022d565b60405180910390fd5b5060408051808201909152600681527f35303031303100000000000000000000000000000000000000000000000000006020820152600160a060020a038216610194576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610115919061022d565b5060008054604051600160a060020a03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60006020828403121561020f57600080fd5b8135600160a060020a038116811461022657600080fd5b9392505050565b600060208083528351808285015260005b8181101561025a5785810183015185820160400152820161023e565b506000604082860101526040601f19601f830116850101925050509291505056fea26469706673582212206547f1dca2dcf0ef3f08a5c3987c8fdfb03c78ebc11763630dfff057cb5a895564736f6c63430008110033", - "deployedBytecode": "608060405234801561001057600080fd5b5060043610610052577c010000000000000000000000000000000000000000000000000000000060003504638da5cb5b8114610057578063f2fde38b14610086575b600080fd5b60005461006a90600160a060020a031681565b604051600160a060020a03909116815260200160405180910390f35b6100996100943660046101fd565b61009b565b005b60005460408051808201909152600681527f3530303030310000000000000000000000000000000000000000000000000000602082015290600160a060020a0316331461011e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610115919061022d565b60405180910390fd5b5060408051808201909152600681527f35303031303100000000000000000000000000000000000000000000000000006020820152600160a060020a038216610194576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610115919061022d565b5060008054604051600160a060020a03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60006020828403121561020f57600080fd5b8135600160a060020a038116811461022657600080fd5b9392505050565b600060208083528351808285015260005b8181101561025a5785810183015185820160400152820161023e565b506000604082860101526040601f19601f830116850101925050509291505056fea26469706673582212206547f1dca2dcf0ef3f08a5c3987c8fdfb03c78ebc11763630dfff057cb5a895564736f6c63430008110033" + "bytecode": "608060405234801561001057600080fd5b50600080546001600160a01b03191633179055610227806100326000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c80638da5cb5b1461003b578063f2fde38b1461006a575b600080fd5b60005461004e906001600160a01b031681565b6040516001600160a01b03909116815260200160405180910390f35b61007d610078366004610172565b61007f565b005b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b031633146100d15760405162461bcd60e51b81526004016100c891906101a2565b60405180910390fd5b5060408051808201909152600681526535303031303160d01b60208201526001600160a01b0382166101165760405162461bcd60e51b81526004016100c891906101a2565b50600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60006020828403121561018457600080fd5b81356001600160a01b038116811461019b57600080fd5b9392505050565b60006020808352835180602085015260005b818110156101d0578581018301518582016040015282016101b4565b506000604082860101526040601f19601f830116850101925050509291505056fea264697066735822122072d00bc19e94a0f09f14f06a4b4c43fc357eda303011f27c55b1f0f0c7c04c6d64736f6c63430008170033", + "deployedBytecode": "608060405234801561001057600080fd5b50600436106100365760003560e01c80638da5cb5b1461003b578063f2fde38b1461006a575b600080fd5b60005461004e906001600160a01b031681565b6040516001600160a01b03909116815260200160405180910390f35b61007d610078366004610172565b61007f565b005b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b031633146100d15760405162461bcd60e51b81526004016100c891906101a2565b60405180910390fd5b5060408051808201909152600681526535303031303160d01b60208201526001600160a01b0382166101165760405162461bcd60e51b81526004016100c891906101a2565b50600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60006020828403121561018457600080fd5b81356001600160a01b038116811461019b57600080fd5b9392505050565b60006020808352835180602085015260005b818110156101d0578581018301518582016040015282016101b4565b506000604082860101526040601f19601f830116850101925050509291505056fea264697066735822122072d00bc19e94a0f09f14f06a4b4c43fc357eda303011f27c55b1f0f0c7c04c6d64736f6c63430008170033" } \ No newline at end of file diff --git a/contracts/PaymentGateway.json b/contracts/PaymentGateway.json index c3e13f43..097bbe35 100644 --- a/contracts/PaymentGateway.json +++ b/contracts/PaymentGateway.json @@ -442,6 +442,6 @@ "type": "function" } ], - "bytecode": "608060405234801561001057600080fd5b5060008054600160a060020a03191633179055610ef4806100326000396000f3fe608060405234801561001057600080fd5b5060043610610107576000357c01000000000000000000000000000000000000000000000000000000009004806397a6278e116100a9578063e53b3f6d11610083578063e53b3f6d14610209578063f2fde38b1461021c578063fb3551ff1461022f578063fd66091e1461025b57600080fd5b806397a6278e146101d057806397c3ccd8146101e3578063daea85c5146101f657600080fd5b80632ea6d4bb116100e55780632ea6d4bb1461015a57806332434a2e1461017d57806384e79842146101905780638da5cb5b146101a557600080fd5b806315770d991461010c5780632a3de59f146101345780632da69e3114610147575b600080fd5b61011f61011a366004610b77565b61027e565b60405190151581526020015b60405180910390f35b61011f610142366004610b99565b610355565b61011f610155366004610bfb565b6103b2565b61016d610168366004610b99565b610481565b60405161012b9493929190610d03565b61011f61018b366004610bfb565b61054c565b6101a361019e366004610b77565b610665565b005b6000546101b890600160a060020a031681565b604051600160a060020a03909116815260200161012b565b6101a36101de366004610b77565b610718565b61011f6101f1366004610b77565b6107c5565b61011f610204366004610b77565b610893565b61011f610217366004610b77565b610961565b6101a361022a366004610b77565b610a30565b61011f61023d366004610b77565b600160a060020a031660009081526001602052604090205460ff1690565b61011f610269366004610b77565b60016020526000908152604090205460ff1681565b600160a060020a038082166000908152600260209081526040808320338452825280832080548251808401909352600683527f33303033303100000000000000000000000000000000000000000000000000009383019390935292939091166103065760405160e560020a62461bcd0281526004016102fd9190610d43565b60405180910390fd5b5060038101805460ff191660011790556040513390600160a060020a038516907fe48d69e5bbd9b67db75a91bdc646ff64bcd92ec6152c3ccdb05c692d921a211190600090a350600192915050565b600160a060020a0380831660009081526002602090815260408083208585168452909152812080549192909116158015906103975750600381015460ff166002145b156103a65760019150506103ac565b60009150505b92915050565b600160a060020a038083166000908152600260209081526040808320338452825280832080548251808401909352600683527f33303035303100000000000000000000000000000000000000000000000000009383019390935292939091166104315760405160e560020a62461bcd0281526004016102fd9190610d43565b50600281016104408482610df8565b506040513390600160a060020a038616907f30cf834ac139c2468c2c3d0668857dfb51c9565a19b4dd90ac9f7600c753463390600090a35060019392505050565b60026020818152600093845260408085209091529183529120805460018201549282018054600160a060020a039283169490921692916104c090610d56565b80601f01602080910402602001604051908101604052809291908181526020018280546104ec90610d56565b80156105395780601f1061050e57610100808354040283529160200191610539565b820191906000526020600020905b81548152906001019060200180831161051c57829003601f168201915b5050506003909301549192505060ff1684565b336000908152600260209081526040808320600160a060020a0386168452825280832060038101548251808401909352600683527f33303030303100000000000000000000000000000000000000000000000000009383019390935291600460ff909116036105d15760405160e560020a62461bcd0281526004016102fd9190610d43565b5080543373ffffffffffffffffffffffffffffffffffffffff19918216178255600182018054909116600160a060020a038616179055600281016106158482610df8565b5060038101805460ff19166001179055604051600160a060020a0385169033907f98ada70a1cb506dc4591465e1ee9be3fd7a2b6c73ecf3b949009718c9a35151990600090a35060019392505050565b60005460408051808201909152600681527f3530303030310000000000000000000000000000000000000000000000000000602082015290600160a060020a031633146106c85760405160e560020a62461bcd0281526004016102fd9190610d43565b50600160a060020a0381166000818152600160208190526040808320805460ff1916909217909155517f13380ad6c58c6a2855a70fd3970b4fe598e8b60a683408ec8a5896b680188acd9190a250565b60005460408051808201909152600681527f3530303030310000000000000000000000000000000000000000000000000000602082015290600160a060020a0316331461077b5760405160e560020a62461bcd0281526004016102fd9190610d43565b50600160a060020a038116600081815260016020526040808220805460ff19169055517f7d9ce70f39c0d594d373d4b779781839de1debeda94cbb04501bc0773a1199eb9190a250565b600160a060020a038082166000908152600260209081526040808320338452825280832080548251808401909352600683527f33303034303100000000000000000000000000000000000000000000000000009383019390935292939091166108445760405160e560020a62461bcd0281526004016102fd9190610d43565b5060038101805460ff191660041790556040513390600160a060020a038516907fa2e41ba1e2f9fc982da929c3ad5fd34dec5549d93b345c0e05d276e965567d2090600090a350600192915050565b600160a060020a038082166000908152600260209081526040808320338452825280832080548251808401909352600683527f33303031303100000000000000000000000000000000000000000000000000009383019390935292939091166109125760405160e560020a62461bcd0281526004016102fd9190610d43565b5060038101805460ff191660021790556040513390600160a060020a038516907f3ce2da1daf10aa0a28578b70fe768ed2f390a3da82445358f9346fbc2981f6fd90600090a350600192915050565b600160a060020a038082166000908152600260209081526040808320338452825280832080548251808401909352600683527f33303032303100000000000000000000000000000000000000000000000000009383019390935292939091166109e05760405160e560020a62461bcd0281526004016102fd9190610d43565b506003818101805460ff191690911790556040513390600160a060020a038516907f8f36fb45d3e543b9ad3331c27905990a1a08f4895d6a9debd2659dd744c12f1390600090a350600192915050565b60005460408051808201909152600681527f3530303030310000000000000000000000000000000000000000000000000000602082015290600160a060020a03163314610a935760405160e560020a62461bcd0281526004016102fd9190610d43565b5060408051808201909152600681527f35303031303100000000000000000000000000000000000000000000000000006020820152600160a060020a038216610af25760405160e560020a62461bcd0281526004016102fd9190610d43565b5060008054604051600160a060020a03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b8035600160a060020a0381168114610b7257600080fd5b919050565b600060208284031215610b8957600080fd5b610b9282610b5b565b9392505050565b60008060408385031215610bac57600080fd5b610bb583610b5b565b9150610bc360208401610b5b565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060408385031215610c0e57600080fd5b610c1783610b5b565b9150602083013567ffffffffffffffff80821115610c3457600080fd5b818501915085601f830112610c4857600080fd5b813581811115610c5a57610c5a610bcc565b604051601f8201601f19908116603f01168101908382118183101715610c8257610c82610bcc565b81604052828152886020848701011115610c9b57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b6000815180845260005b81811015610ce357602081850181015186830182015201610cc7565b506000602082860101526020601f19601f83011685010191505092915050565b6000600160a060020a03808716835280861660208401525060806040830152610d2f6080830185610cbd565b905060ff8316606083015295945050505050565b602081526000610b926020830184610cbd565b600281046001821680610d6a57607f821691505b602082108103610da3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b601f821115610df3576000818152602081206020601f86010481016020861015610dd05750805b6020601f860104820191505b81811015610def57828155600101610ddc565b5050505b505050565b815167ffffffffffffffff811115610e1257610e12610bcc565b610e2681610e208454610d56565b84610da9565b602080601f831160018114610e5f5760008415610e435750858301515b60028086026008870290910a6000190419821617865550610def565b600085815260208120601f198616915b82811015610e8e57888601518255948401946001909101908401610e6f565b5085821015610eae57878501516008601f88160260020a60001904191681555b505050505060020260010190555056fea26469706673582212205401f0dfea109661d596bc5fd4067567bf853929586ed8ed2927b6bbf64ef65964736f6c63430008110033", - "deployedBytecode": "608060405234801561001057600080fd5b5060043610610107576000357c01000000000000000000000000000000000000000000000000000000009004806397a6278e116100a9578063e53b3f6d11610083578063e53b3f6d14610209578063f2fde38b1461021c578063fb3551ff1461022f578063fd66091e1461025b57600080fd5b806397a6278e146101d057806397c3ccd8146101e3578063daea85c5146101f657600080fd5b80632ea6d4bb116100e55780632ea6d4bb1461015a57806332434a2e1461017d57806384e79842146101905780638da5cb5b146101a557600080fd5b806315770d991461010c5780632a3de59f146101345780632da69e3114610147575b600080fd5b61011f61011a366004610b77565b61027e565b60405190151581526020015b60405180910390f35b61011f610142366004610b99565b610355565b61011f610155366004610bfb565b6103b2565b61016d610168366004610b99565b610481565b60405161012b9493929190610d03565b61011f61018b366004610bfb565b61054c565b6101a361019e366004610b77565b610665565b005b6000546101b890600160a060020a031681565b604051600160a060020a03909116815260200161012b565b6101a36101de366004610b77565b610718565b61011f6101f1366004610b77565b6107c5565b61011f610204366004610b77565b610893565b61011f610217366004610b77565b610961565b6101a361022a366004610b77565b610a30565b61011f61023d366004610b77565b600160a060020a031660009081526001602052604090205460ff1690565b61011f610269366004610b77565b60016020526000908152604090205460ff1681565b600160a060020a038082166000908152600260209081526040808320338452825280832080548251808401909352600683527f33303033303100000000000000000000000000000000000000000000000000009383019390935292939091166103065760405160e560020a62461bcd0281526004016102fd9190610d43565b60405180910390fd5b5060038101805460ff191660011790556040513390600160a060020a038516907fe48d69e5bbd9b67db75a91bdc646ff64bcd92ec6152c3ccdb05c692d921a211190600090a350600192915050565b600160a060020a0380831660009081526002602090815260408083208585168452909152812080549192909116158015906103975750600381015460ff166002145b156103a65760019150506103ac565b60009150505b92915050565b600160a060020a038083166000908152600260209081526040808320338452825280832080548251808401909352600683527f33303035303100000000000000000000000000000000000000000000000000009383019390935292939091166104315760405160e560020a62461bcd0281526004016102fd9190610d43565b50600281016104408482610df8565b506040513390600160a060020a038616907f30cf834ac139c2468c2c3d0668857dfb51c9565a19b4dd90ac9f7600c753463390600090a35060019392505050565b60026020818152600093845260408085209091529183529120805460018201549282018054600160a060020a039283169490921692916104c090610d56565b80601f01602080910402602001604051908101604052809291908181526020018280546104ec90610d56565b80156105395780601f1061050e57610100808354040283529160200191610539565b820191906000526020600020905b81548152906001019060200180831161051c57829003601f168201915b5050506003909301549192505060ff1684565b336000908152600260209081526040808320600160a060020a0386168452825280832060038101548251808401909352600683527f33303030303100000000000000000000000000000000000000000000000000009383019390935291600460ff909116036105d15760405160e560020a62461bcd0281526004016102fd9190610d43565b5080543373ffffffffffffffffffffffffffffffffffffffff19918216178255600182018054909116600160a060020a038616179055600281016106158482610df8565b5060038101805460ff19166001179055604051600160a060020a0385169033907f98ada70a1cb506dc4591465e1ee9be3fd7a2b6c73ecf3b949009718c9a35151990600090a35060019392505050565b60005460408051808201909152600681527f3530303030310000000000000000000000000000000000000000000000000000602082015290600160a060020a031633146106c85760405160e560020a62461bcd0281526004016102fd9190610d43565b50600160a060020a0381166000818152600160208190526040808320805460ff1916909217909155517f13380ad6c58c6a2855a70fd3970b4fe598e8b60a683408ec8a5896b680188acd9190a250565b60005460408051808201909152600681527f3530303030310000000000000000000000000000000000000000000000000000602082015290600160a060020a0316331461077b5760405160e560020a62461bcd0281526004016102fd9190610d43565b50600160a060020a038116600081815260016020526040808220805460ff19169055517f7d9ce70f39c0d594d373d4b779781839de1debeda94cbb04501bc0773a1199eb9190a250565b600160a060020a038082166000908152600260209081526040808320338452825280832080548251808401909352600683527f33303034303100000000000000000000000000000000000000000000000000009383019390935292939091166108445760405160e560020a62461bcd0281526004016102fd9190610d43565b5060038101805460ff191660041790556040513390600160a060020a038516907fa2e41ba1e2f9fc982da929c3ad5fd34dec5549d93b345c0e05d276e965567d2090600090a350600192915050565b600160a060020a038082166000908152600260209081526040808320338452825280832080548251808401909352600683527f33303031303100000000000000000000000000000000000000000000000000009383019390935292939091166109125760405160e560020a62461bcd0281526004016102fd9190610d43565b5060038101805460ff191660021790556040513390600160a060020a038516907f3ce2da1daf10aa0a28578b70fe768ed2f390a3da82445358f9346fbc2981f6fd90600090a350600192915050565b600160a060020a038082166000908152600260209081526040808320338452825280832080548251808401909352600683527f33303032303100000000000000000000000000000000000000000000000000009383019390935292939091166109e05760405160e560020a62461bcd0281526004016102fd9190610d43565b506003818101805460ff191690911790556040513390600160a060020a038516907f8f36fb45d3e543b9ad3331c27905990a1a08f4895d6a9debd2659dd744c12f1390600090a350600192915050565b60005460408051808201909152600681527f3530303030310000000000000000000000000000000000000000000000000000602082015290600160a060020a03163314610a935760405160e560020a62461bcd0281526004016102fd9190610d43565b5060408051808201909152600681527f35303031303100000000000000000000000000000000000000000000000000006020820152600160a060020a038216610af25760405160e560020a62461bcd0281526004016102fd9190610d43565b5060008054604051600160a060020a03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b8035600160a060020a0381168114610b7257600080fd5b919050565b600060208284031215610b8957600080fd5b610b9282610b5b565b9392505050565b60008060408385031215610bac57600080fd5b610bb583610b5b565b9150610bc360208401610b5b565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060408385031215610c0e57600080fd5b610c1783610b5b565b9150602083013567ffffffffffffffff80821115610c3457600080fd5b818501915085601f830112610c4857600080fd5b813581811115610c5a57610c5a610bcc565b604051601f8201601f19908116603f01168101908382118183101715610c8257610c82610bcc565b81604052828152886020848701011115610c9b57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b6000815180845260005b81811015610ce357602081850181015186830182015201610cc7565b506000602082860101526020601f19601f83011685010191505092915050565b6000600160a060020a03808716835280861660208401525060806040830152610d2f6080830185610cbd565b905060ff8316606083015295945050505050565b602081526000610b926020830184610cbd565b600281046001821680610d6a57607f821691505b602082108103610da3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b601f821115610df3576000818152602081206020601f86010481016020861015610dd05750805b6020601f860104820191505b81811015610def57828155600101610ddc565b5050505b505050565b815167ffffffffffffffff811115610e1257610e12610bcc565b610e2681610e208454610d56565b84610da9565b602080601f831160018114610e5f5760008415610e435750858301515b60028086026008870290910a6000190419821617865550610def565b600085815260208120601f198616915b82811015610e8e57888601518255948401946001909101908401610e6f565b5085821015610eae57878501516008601f88160260020a60001904191681555b505050505060020260010190555056fea26469706673582212205401f0dfea109661d596bc5fd4067567bf853929586ed8ed2927b6bbf64ef65964736f6c63430008110033" + "bytecode": "608060405234801561001057600080fd5b50600080546001600160a01b03191633179055610d83806100326000396000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c806397a6278e1161008c578063e53b3f6d11610066578063e53b3f6d146101ec578063f2fde38b146101ff578063fb3551ff14610212578063fd66091e1461023e57600080fd5b806397a6278e146101b357806397c3ccd8146101c6578063daea85c5146101d957600080fd5b80632ea6d4bb116100c85780632ea6d4bb1461013d57806332434a2e1461016057806384e79842146101735780638da5cb5b1461018857600080fd5b806315770d99146100ef5780632a3de59f146101175780632da69e311461012a575b600080fd5b6101026100fd366004610a3c565b610261565b60405190151581526020015b60405180910390f35b610102610125366004610a5e565b61031e565b610102610138366004610aa7565b61037b565b61015061014b366004610a5e565b610430565b60405161010e9493929190610baf565b61010261016e366004610aa7565b6104fb565b610186610181366004610a3c565b6105ed565b005b60005461019b906001600160a01b031681565b6040516001600160a01b03909116815260200161010e565b6101866101c1366004610a3c565b610686565b6101026101d4366004610a3c565b610719565b6101026101e7366004610a3c565b6107cd565b6101026101fa366004610a3c565b610881565b61018661020d366004610a3c565b610936565b610102610220366004610a3c565b6001600160a01b031660009081526001602052604090205460ff1690565b61010261024c366004610a3c565b60016020526000908152604090205460ff1681565b6001600160a01b038082166000908152600260209081526040808320338452825280832080548251808401909352600683526533303033303160d01b9383019390935292939091166102cf5760405162461bcd60e51b81526004016102c69190610bef565b60405180910390fd5b5060038101805460ff1916600117905560405133906001600160a01b038516907fe48d69e5bbd9b67db75a91bdc646ff64bcd92ec6152c3ccdb05c692d921a211190600090a350600192915050565b6001600160a01b0380831660009081526002602090815260408083208585168452909152812080549192909116158015906103605750600381015460ff166002145b1561036f576001915050610375565b60009150505b92915050565b6001600160a01b038083166000908152600260209081526040808320338452825280832080548251808401909352600683526533303035303160d01b9383019390935292939091166103e05760405162461bcd60e51b81526004016102c69190610bef565b50600281016103ef8482610c8d565b5060405133906001600160a01b038616907f30cf834ac139c2468c2c3d0668857dfb51c9565a19b4dd90ac9f7600c753463390600090a35060019392505050565b600260208181526000938452604080852090915291835291208054600182015492820180546001600160a01b0392831694909216929161046f90610c02565b80601f016020809104026020016040519081016040528092919081815260200182805461049b90610c02565b80156104e85780601f106104bd576101008083540402835291602001916104e8565b820191906000526020600020905b8154815290600101906020018083116104cb57829003601f168201915b5050506003909301549192505060ff1684565b3360009081526002602090815260408083206001600160a01b0386168452825280832060038101548251808401909352600683526533303030303160d01b9383019390935291600460ff909116036105665760405162461bcd60e51b81526004016102c69190610bef565b508054336001600160a01b03199182161782556001820180549091166001600160a01b0386161790556002810161059d8482610c8d565b5060038101805460ff191660011790556040516001600160a01b0385169033907f98ada70a1cb506dc4591465e1ee9be3fd7a2b6c73ecf3b949009718c9a35151990600090a35060019392505050565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b031633146106365760405162461bcd60e51b81526004016102c69190610bef565b506001600160a01b0381166000818152600160208190526040808320805460ff1916909217909155517f13380ad6c58c6a2855a70fd3970b4fe598e8b60a683408ec8a5896b680188acd9190a250565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b031633146106cf5760405162461bcd60e51b81526004016102c69190610bef565b506001600160a01b038116600081815260016020526040808220805460ff19169055517f7d9ce70f39c0d594d373d4b779781839de1debeda94cbb04501bc0773a1199eb9190a250565b6001600160a01b038082166000908152600260209081526040808320338452825280832080548251808401909352600683526533303034303160d01b93830193909352929390911661077e5760405162461bcd60e51b81526004016102c69190610bef565b5060038101805460ff1916600417905560405133906001600160a01b038516907fa2e41ba1e2f9fc982da929c3ad5fd34dec5549d93b345c0e05d276e965567d2090600090a350600192915050565b6001600160a01b038082166000908152600260209081526040808320338452825280832080548251808401909352600683526533303031303160d01b9383019390935292939091166108325760405162461bcd60e51b81526004016102c69190610bef565b5060038101805460ff1916600217905560405133906001600160a01b038516907f3ce2da1daf10aa0a28578b70fe768ed2f390a3da82445358f9346fbc2981f6fd90600090a350600192915050565b6001600160a01b038082166000908152600260209081526040808320338452825280832080548251808401909352600683526533303032303160d01b9383019390935292939091166108e65760405162461bcd60e51b81526004016102c69190610bef565b506003818101805460ff1916909117905560405133906001600160a01b038516907f8f36fb45d3e543b9ad3331c27905990a1a08f4895d6a9debd2659dd744c12f1390600090a350600192915050565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b0316331461097f5760405162461bcd60e51b81526004016102c69190610bef565b5060408051808201909152600681526535303031303160d01b60208201526001600160a01b0382166109c45760405162461bcd60e51b81526004016102c69190610bef565b50600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b80356001600160a01b0381168114610a3757600080fd5b919050565b600060208284031215610a4e57600080fd5b610a5782610a20565b9392505050565b60008060408385031215610a7157600080fd5b610a7a83610a20565b9150610a8860208401610a20565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b60008060408385031215610aba57600080fd5b610ac383610a20565b9150602083013567ffffffffffffffff80821115610ae057600080fd5b818501915085601f830112610af457600080fd5b813581811115610b0657610b06610a91565b604051601f8201601f19908116603f01168101908382118183101715610b2e57610b2e610a91565b81604052828152886020848701011115610b4757600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b6000815180845260005b81811015610b8f57602081850181015186830182015201610b73565b506000602082860101526020601f19601f83011685010191505092915050565b6001600160a01b03858116825284166020820152608060408201819052600090610bdb90830185610b69565b905060ff8316606083015295945050505050565b602081526000610a576020830184610b69565b600181811c90821680610c1657607f821691505b602082108103610c3657634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115610c88576000816000526020600020601f850160051c81016020861015610c655750805b601f850160051c820191505b81811015610c8457828155600101610c71565b5050505b505050565b815167ffffffffffffffff811115610ca757610ca7610a91565b610cbb81610cb58454610c02565b84610c3c565b602080601f831160018114610cf05760008415610cd85750858301515b600019600386901b1c1916600185901b178555610c84565b600085815260208120601f198616915b82811015610d1f57888601518255948401946001909101908401610d00565b5085821015610d3d5787850151600019600388901b60f8161c191681555b5050505050600190811b0190555056fea26469706673582212207819aac780eeedbb1bcd7ee4199a281a681c530a9134be5fd1cf62d8526b5bd164736f6c63430008170033", + "deployedBytecode": "608060405234801561001057600080fd5b50600436106100ea5760003560e01c806397a6278e1161008c578063e53b3f6d11610066578063e53b3f6d146101ec578063f2fde38b146101ff578063fb3551ff14610212578063fd66091e1461023e57600080fd5b806397a6278e146101b357806397c3ccd8146101c6578063daea85c5146101d957600080fd5b80632ea6d4bb116100c85780632ea6d4bb1461013d57806332434a2e1461016057806384e79842146101735780638da5cb5b1461018857600080fd5b806315770d99146100ef5780632a3de59f146101175780632da69e311461012a575b600080fd5b6101026100fd366004610a3c565b610261565b60405190151581526020015b60405180910390f35b610102610125366004610a5e565b61031e565b610102610138366004610aa7565b61037b565b61015061014b366004610a5e565b610430565b60405161010e9493929190610baf565b61010261016e366004610aa7565b6104fb565b610186610181366004610a3c565b6105ed565b005b60005461019b906001600160a01b031681565b6040516001600160a01b03909116815260200161010e565b6101866101c1366004610a3c565b610686565b6101026101d4366004610a3c565b610719565b6101026101e7366004610a3c565b6107cd565b6101026101fa366004610a3c565b610881565b61018661020d366004610a3c565b610936565b610102610220366004610a3c565b6001600160a01b031660009081526001602052604090205460ff1690565b61010261024c366004610a3c565b60016020526000908152604090205460ff1681565b6001600160a01b038082166000908152600260209081526040808320338452825280832080548251808401909352600683526533303033303160d01b9383019390935292939091166102cf5760405162461bcd60e51b81526004016102c69190610bef565b60405180910390fd5b5060038101805460ff1916600117905560405133906001600160a01b038516907fe48d69e5bbd9b67db75a91bdc646ff64bcd92ec6152c3ccdb05c692d921a211190600090a350600192915050565b6001600160a01b0380831660009081526002602090815260408083208585168452909152812080549192909116158015906103605750600381015460ff166002145b1561036f576001915050610375565b60009150505b92915050565b6001600160a01b038083166000908152600260209081526040808320338452825280832080548251808401909352600683526533303035303160d01b9383019390935292939091166103e05760405162461bcd60e51b81526004016102c69190610bef565b50600281016103ef8482610c8d565b5060405133906001600160a01b038616907f30cf834ac139c2468c2c3d0668857dfb51c9565a19b4dd90ac9f7600c753463390600090a35060019392505050565b600260208181526000938452604080852090915291835291208054600182015492820180546001600160a01b0392831694909216929161046f90610c02565b80601f016020809104026020016040519081016040528092919081815260200182805461049b90610c02565b80156104e85780601f106104bd576101008083540402835291602001916104e8565b820191906000526020600020905b8154815290600101906020018083116104cb57829003601f168201915b5050506003909301549192505060ff1684565b3360009081526002602090815260408083206001600160a01b0386168452825280832060038101548251808401909352600683526533303030303160d01b9383019390935291600460ff909116036105665760405162461bcd60e51b81526004016102c69190610bef565b508054336001600160a01b03199182161782556001820180549091166001600160a01b0386161790556002810161059d8482610c8d565b5060038101805460ff191660011790556040516001600160a01b0385169033907f98ada70a1cb506dc4591465e1ee9be3fd7a2b6c73ecf3b949009718c9a35151990600090a35060019392505050565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b031633146106365760405162461bcd60e51b81526004016102c69190610bef565b506001600160a01b0381166000818152600160208190526040808320805460ff1916909217909155517f13380ad6c58c6a2855a70fd3970b4fe598e8b60a683408ec8a5896b680188acd9190a250565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b031633146106cf5760405162461bcd60e51b81526004016102c69190610bef565b506001600160a01b038116600081815260016020526040808220805460ff19169055517f7d9ce70f39c0d594d373d4b779781839de1debeda94cbb04501bc0773a1199eb9190a250565b6001600160a01b038082166000908152600260209081526040808320338452825280832080548251808401909352600683526533303034303160d01b93830193909352929390911661077e5760405162461bcd60e51b81526004016102c69190610bef565b5060038101805460ff1916600417905560405133906001600160a01b038516907fa2e41ba1e2f9fc982da929c3ad5fd34dec5549d93b345c0e05d276e965567d2090600090a350600192915050565b6001600160a01b038082166000908152600260209081526040808320338452825280832080548251808401909352600683526533303031303160d01b9383019390935292939091166108325760405162461bcd60e51b81526004016102c69190610bef565b5060038101805460ff1916600217905560405133906001600160a01b038516907f3ce2da1daf10aa0a28578b70fe768ed2f390a3da82445358f9346fbc2981f6fd90600090a350600192915050565b6001600160a01b038082166000908152600260209081526040808320338452825280832080548251808401909352600683526533303032303160d01b9383019390935292939091166108e65760405162461bcd60e51b81526004016102c69190610bef565b506003818101805460ff1916909117905560405133906001600160a01b038516907f8f36fb45d3e543b9ad3331c27905990a1a08f4895d6a9debd2659dd744c12f1390600090a350600192915050565b60005460408051808201909152600681526535303030303160d01b6020820152906001600160a01b0316331461097f5760405162461bcd60e51b81526004016102c69190610bef565b5060408051808201909152600681526535303031303160d01b60208201526001600160a01b0382166109c45760405162461bcd60e51b81526004016102c69190610bef565b50600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b80356001600160a01b0381168114610a3757600080fd5b919050565b600060208284031215610a4e57600080fd5b610a5782610a20565b9392505050565b60008060408385031215610a7157600080fd5b610a7a83610a20565b9150610a8860208401610a20565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b60008060408385031215610aba57600080fd5b610ac383610a20565b9150602083013567ffffffffffffffff80821115610ae057600080fd5b818501915085601f830112610af457600080fd5b813581811115610b0657610b06610a91565b604051601f8201601f19908116603f01168101908382118183101715610b2e57610b2e610a91565b81604052828152886020848701011115610b4757600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b6000815180845260005b81811015610b8f57602081850181015186830182015201610b73565b506000602082860101526020601f19601f83011685010191505092915050565b6001600160a01b03858116825284166020820152608060408201819052600090610bdb90830185610b69565b905060ff8316606083015295945050505050565b602081526000610a576020830184610b69565b600181811c90821680610c1657607f821691505b602082108103610c3657634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115610c88576000816000526020600020601f850160051c81016020861015610c655750805b601f850160051c820191505b81811015610c8457828155600101610c71565b5050505b505050565b815167ffffffffffffffff811115610ca757610ca7610a91565b610cbb81610cb58454610c02565b84610c3c565b602080601f831160018114610cf05760008415610cd85750858301515b600019600386901b1c1916600185901b178555610c84565b600085815260208120601f198616915b82811015610d1f57888601518255948401946001909101908401610d00565b5085821015610d3d5787850151600019600388901b60f8161c191681555b5050505050600190811b0190555056fea26469706673582212207819aac780eeedbb1bcd7ee4199a281a681c530a9134be5fd1cf62d8526b5bd164736f6c63430008170033" } \ No newline at end of file diff --git a/contracts/PersonalInfo.json b/contracts/PersonalInfo.json index cf96eb1b..69b67d92 100644 --- a/contracts/PersonalInfo.json +++ b/contracts/PersonalInfo.json @@ -174,6 +174,6 @@ "type": "function" } ], - "bytecode": "608060405234801561001057600080fd5b50610827806100206000396000f3fe608060405234801561001057600080fd5b5060043610610073577c010000000000000000000000000000000000000000000000000000000060003504631cd0cb0181146100785780632da69e31146100a357806332434a2e146100c6578063d3da927f146100d9578063f72a23d1146100ec575b600080fd5b61008b6100863660046104d0565b6100ff565b60405161009a93929190610549565b60405180910390f35b6100b66100b13660046105ad565b6101bf565b604051901515815260200161009a565b6100b66100d43660046105ad565b610331565b6100b66100e73660046104d0565b6103d1565b6100b66100fa3660046105ad565b610414565b6000602081815292815260408082209093529081522080546001820154600283018054600160a060020a0393841694929093169261013c9061066f565b80601f01602080910402602001604051908101604052809291908181526020018280546101689061066f565b80156101b55780601f1061018a576101008083540402835291602001916101b5565b820191906000526020600020905b81548152906001019060200180831161019857829003601f168201915b5050505050905083565b600160a060020a03808316600081815260208181526040808320338452825280832080548251808401909352600683527f3430303030310000000000000000000000000000000000000000000000000000938301939093529294929390929190911614610262576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161025991906106c2565b60405180910390fd5b50600181015460408051808201909152600681527f3430303030320000000000000000000000000000000000000000000000000000602082015290600160a060020a031633146102df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161025991906106c2565b50600281016102ee848261072b565b506040513390600160a060020a038616907f30cf834ac139c2468c2c3d0668857dfb51c9565a19b4dd90ac9f7600c753463390600090a360019150505b92915050565b33600081815260208181526040808320600160a060020a03871680855292528220805473ffffffffffffffffffffffffffffffffffffffff1990811690941781556001810180549094169091179092559060028101610390848261072b565b50604051600160a060020a0385169033907f98ada70a1cb506dc4591465e1ee9be3fd7a2b6c73ecf3b949009718c9a35151990600090a35060019392505050565b600160a060020a03808316600090815260208181526040808320858516845290915281208054919290911661040a57600091505061032b565b600191505061032b565b600160a060020a0382166000818152602081815260408083203380855292528220805473ffffffffffffffffffffffffffffffffffffffff1990811690941781556001810180549094169091179092559060028101610473848261072b565b506040513390600160a060020a038616907f98ada70a1cb506dc4591465e1ee9be3fd7a2b6c73ecf3b949009718c9a35151990600090a35060019392505050565b8035600160a060020a03811681146104cb57600080fd5b919050565b600080604083850312156104e357600080fd5b6104ec836104b4565b91506104fa602084016104b4565b90509250929050565b6000815180845260005b818110156105295760208185018101518683018201520161050d565b506000602082860101526020601f19601f83011685010191505092915050565b6000600160a060020a038086168352808516602084015250606060408301526105756060830184610503565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080604083850312156105c057600080fd5b6105c9836104b4565b9150602083013567ffffffffffffffff808211156105e657600080fd5b818501915085601f8301126105fa57600080fd5b81358181111561060c5761060c61057e565b604051601f8201601f19908116603f011681019083821181831017156106345761063461057e565b8160405282815288602084870101111561064d57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60028104600182168061068357607f821691505b6020821081036106bc577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b6020815260006106d56020830184610503565b9392505050565b601f821115610726576000818152602081206020601f860104810160208610156107035750805b6020601f860104820191505b818110156107225782815560010161070f565b5050505b505050565b815167ffffffffffffffff8111156107455761074561057e565b61075981610753845461066f565b846106dc565b602080601f83116001811461079257600084156107765750858301515b60028086026008870290910a6000190419821617865550610722565b600085815260208120601f198616915b828110156107c1578886015182559484019460019091019084016107a2565b50858210156107e157878501516008601f88160260020a60001904191681555b505050505060020260010190555056fea2646970667358221220978d884af217952eb820b038fea648fda3331662a3b2096b48347b1767a7af8864736f6c63430008110033", - "deployedBytecode": "608060405234801561001057600080fd5b5060043610610073577c010000000000000000000000000000000000000000000000000000000060003504631cd0cb0181146100785780632da69e31146100a357806332434a2e146100c6578063d3da927f146100d9578063f72a23d1146100ec575b600080fd5b61008b6100863660046104d0565b6100ff565b60405161009a93929190610549565b60405180910390f35b6100b66100b13660046105ad565b6101bf565b604051901515815260200161009a565b6100b66100d43660046105ad565b610331565b6100b66100e73660046104d0565b6103d1565b6100b66100fa3660046105ad565b610414565b6000602081815292815260408082209093529081522080546001820154600283018054600160a060020a0393841694929093169261013c9061066f565b80601f01602080910402602001604051908101604052809291908181526020018280546101689061066f565b80156101b55780601f1061018a576101008083540402835291602001916101b5565b820191906000526020600020905b81548152906001019060200180831161019857829003601f168201915b5050505050905083565b600160a060020a03808316600081815260208181526040808320338452825280832080548251808401909352600683527f3430303030310000000000000000000000000000000000000000000000000000938301939093529294929390929190911614610262576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161025991906106c2565b60405180910390fd5b50600181015460408051808201909152600681527f3430303030320000000000000000000000000000000000000000000000000000602082015290600160a060020a031633146102df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161025991906106c2565b50600281016102ee848261072b565b506040513390600160a060020a038616907f30cf834ac139c2468c2c3d0668857dfb51c9565a19b4dd90ac9f7600c753463390600090a360019150505b92915050565b33600081815260208181526040808320600160a060020a03871680855292528220805473ffffffffffffffffffffffffffffffffffffffff1990811690941781556001810180549094169091179092559060028101610390848261072b565b50604051600160a060020a0385169033907f98ada70a1cb506dc4591465e1ee9be3fd7a2b6c73ecf3b949009718c9a35151990600090a35060019392505050565b600160a060020a03808316600090815260208181526040808320858516845290915281208054919290911661040a57600091505061032b565b600191505061032b565b600160a060020a0382166000818152602081815260408083203380855292528220805473ffffffffffffffffffffffffffffffffffffffff1990811690941781556001810180549094169091179092559060028101610473848261072b565b506040513390600160a060020a038616907f98ada70a1cb506dc4591465e1ee9be3fd7a2b6c73ecf3b949009718c9a35151990600090a35060019392505050565b8035600160a060020a03811681146104cb57600080fd5b919050565b600080604083850312156104e357600080fd5b6104ec836104b4565b91506104fa602084016104b4565b90509250929050565b6000815180845260005b818110156105295760208185018101518683018201520161050d565b506000602082860101526020601f19601f83011685010191505092915050565b6000600160a060020a038086168352808516602084015250606060408301526105756060830184610503565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080604083850312156105c057600080fd5b6105c9836104b4565b9150602083013567ffffffffffffffff808211156105e657600080fd5b818501915085601f8301126105fa57600080fd5b81358181111561060c5761060c61057e565b604051601f8201601f19908116603f011681019083821181831017156106345761063461057e565b8160405282815288602084870101111561064d57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60028104600182168061068357607f821691505b6020821081036106bc577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b6020815260006106d56020830184610503565b9392505050565b601f821115610726576000818152602081206020601f860104810160208610156107035750805b6020601f860104820191505b818110156107225782815560010161070f565b5050505b505050565b815167ffffffffffffffff8111156107455761074561057e565b61075981610753845461066f565b846106dc565b602080601f83116001811461079257600084156107765750858301515b60028086026008870290910a6000190419821617865550610722565b600085815260208120601f198616915b828110156107c1578886015182559484019460019091019084016107a2565b50858210156107e157878501516008601f88160260020a60001904191681555b505050505060020260010190555056fea2646970667358221220978d884af217952eb820b038fea648fda3331662a3b2096b48347b1767a7af8864736f6c63430008110033" + "bytecode": "608060405234801561001057600080fd5b50610759806100206000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80631cd0cb011461005c5780632da69e311461008757806332434a2e146100aa578063d3da927f146100bd578063f72a23d1146100d0575b600080fd5b61006f61006a366004610438565b6100e3565b60405161007e939291906104b1565b60405180910390f35b61009a6100953660046104fc565b6101a3565b604051901515815260200161007e565b61009a6100b83660046104fc565b6102b3565b61009a6100cb366004610438565b610346565b61009a6100de3660046104fc565b610389565b60006020818152928152604080822090935290815220805460018201546002830180546001600160a01b03938416949290931692610120906105be565b80601f016020809104026020016040519081016040528092919081815260200182805461014c906105be565b80156101995780601f1061016e57610100808354040283529160200191610199565b820191906000526020600020905b81548152906001019060200180831161017c57829003601f168201915b5050505050905083565b6001600160a01b03808316600081815260208181526040808320338452825280832080548251808401909352600683526534303030303160d01b9383019390935292949293909291909116146102155760405162461bcd60e51b815260040161020c91906105f8565b60405180910390fd5b5060018101546040805180820190915260068152651a181818181960d11b6020820152906001600160a01b031633146102615760405162461bcd60e51b815260040161020c91906105f8565b50600281016102708482610663565b5060405133906001600160a01b038616907f30cf834ac139c2468c2c3d0668857dfb51c9565a19b4dd90ac9f7600c753463390600090a360019150505b92915050565b336000818152602081815260408083206001600160a01b0387168085529252822080546001600160a01b0319908116909417815560018101805490941690911790925590600281016103058482610663565b506040516001600160a01b0385169033907f98ada70a1cb506dc4591465e1ee9be3fd7a2b6c73ecf3b949009718c9a35151990600090a35060019392505050565b6001600160a01b03808316600090815260208181526040808320858516845290915281208054919290911661037f5760009150506102ad565b60019150506102ad565b6001600160a01b038216600081815260208181526040808320338085529252822080546001600160a01b0319908116909417815560018101805490941690911790925590600281016103db8482610663565b5060405133906001600160a01b038616907f98ada70a1cb506dc4591465e1ee9be3fd7a2b6c73ecf3b949009718c9a35151990600090a35060019392505050565b80356001600160a01b038116811461043357600080fd5b919050565b6000806040838503121561044b57600080fd5b6104548361041c565b91506104626020840161041c565b90509250929050565b6000815180845260005b8181101561049157602081850181015186830182015201610475565b506000602082860101526020601f19601f83011685010191505092915050565b6001600160a01b038481168252831660208201526060604082018190526000906104dd9083018461046b565b95945050505050565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561050f57600080fd5b6105188361041c565b9150602083013567ffffffffffffffff8082111561053557600080fd5b818501915085601f83011261054957600080fd5b81358181111561055b5761055b6104e6565b604051601f8201601f19908116603f01168101908382118183101715610583576105836104e6565b8160405282815288602084870101111561059c57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b600181811c908216806105d257607f821691505b6020821081036105f257634e487b7160e01b600052602260045260246000fd5b50919050565b60208152600061060b602083018461046b565b9392505050565b601f82111561065e576000816000526020600020601f850160051c8101602086101561063b5750805b601f850160051c820191505b8181101561065a57828155600101610647565b5050505b505050565b815167ffffffffffffffff81111561067d5761067d6104e6565b6106918161068b84546105be565b84610612565b602080601f8311600181146106c657600084156106ae5750858301515b600019600386901b1c1916600185901b17855561065a565b600085815260208120601f198616915b828110156106f5578886015182559484019460019091019084016106d6565b50858210156107135787850151600019600388901b60f8161c191681555b5050505050600190811b0190555056fea26469706673582212202807cf92e554b7a922a4b0191779f4b2187d9964b55152b2a6e4faf62533173864736f6c63430008170033", + "deployedBytecode": "608060405234801561001057600080fd5b50600436106100575760003560e01c80631cd0cb011461005c5780632da69e311461008757806332434a2e146100aa578063d3da927f146100bd578063f72a23d1146100d0575b600080fd5b61006f61006a366004610438565b6100e3565b60405161007e939291906104b1565b60405180910390f35b61009a6100953660046104fc565b6101a3565b604051901515815260200161007e565b61009a6100b83660046104fc565b6102b3565b61009a6100cb366004610438565b610346565b61009a6100de3660046104fc565b610389565b60006020818152928152604080822090935290815220805460018201546002830180546001600160a01b03938416949290931692610120906105be565b80601f016020809104026020016040519081016040528092919081815260200182805461014c906105be565b80156101995780601f1061016e57610100808354040283529160200191610199565b820191906000526020600020905b81548152906001019060200180831161017c57829003601f168201915b5050505050905083565b6001600160a01b03808316600081815260208181526040808320338452825280832080548251808401909352600683526534303030303160d01b9383019390935292949293909291909116146102155760405162461bcd60e51b815260040161020c91906105f8565b60405180910390fd5b5060018101546040805180820190915260068152651a181818181960d11b6020820152906001600160a01b031633146102615760405162461bcd60e51b815260040161020c91906105f8565b50600281016102708482610663565b5060405133906001600160a01b038616907f30cf834ac139c2468c2c3d0668857dfb51c9565a19b4dd90ac9f7600c753463390600090a360019150505b92915050565b336000818152602081815260408083206001600160a01b0387168085529252822080546001600160a01b0319908116909417815560018101805490941690911790925590600281016103058482610663565b506040516001600160a01b0385169033907f98ada70a1cb506dc4591465e1ee9be3fd7a2b6c73ecf3b949009718c9a35151990600090a35060019392505050565b6001600160a01b03808316600090815260208181526040808320858516845290915281208054919290911661037f5760009150506102ad565b60019150506102ad565b6001600160a01b038216600081815260208181526040808320338085529252822080546001600160a01b0319908116909417815560018101805490941690911790925590600281016103db8482610663565b5060405133906001600160a01b038616907f98ada70a1cb506dc4591465e1ee9be3fd7a2b6c73ecf3b949009718c9a35151990600090a35060019392505050565b80356001600160a01b038116811461043357600080fd5b919050565b6000806040838503121561044b57600080fd5b6104548361041c565b91506104626020840161041c565b90509250929050565b6000815180845260005b8181101561049157602081850181015186830182015201610475565b506000602082860101526020601f19601f83011685010191505092915050565b6001600160a01b038481168252831660208201526060604082018190526000906104dd9083018461046b565b95945050505050565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561050f57600080fd5b6105188361041c565b9150602083013567ffffffffffffffff8082111561053557600080fd5b818501915085601f83011261054957600080fd5b81358181111561055b5761055b6104e6565b604051601f8201601f19908116603f01168101908382118183101715610583576105836104e6565b8160405282815288602084870101111561059c57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b600181811c908216806105d257607f821691505b6020821081036105f257634e487b7160e01b600052602260045260246000fd5b50919050565b60208152600061060b602083018461046b565b9392505050565b601f82111561065e576000816000526020600020601f850160051c8101602086101561063b5750805b601f850160051c820191505b8181101561065a57828155600101610647565b5050505b505050565b815167ffffffffffffffff81111561067d5761067d6104e6565b6106918161068b84546105be565b84610612565b602080601f8311600181146106c657600084156106ae5750858301515b600019600386901b1c1916600185901b17855561065a565b600085815260208120601f198616915b828110156106f5578886015182559484019460019091019084016106d6565b50858210156107135787850151600019600388901b60f8161c191681555b5050505050600190811b0190555056fea26469706673582212202807cf92e554b7a922a4b0191779f4b2187d9964b55152b2a6e4faf62533173864736f6c63430008170033" } \ No newline at end of file diff --git a/contracts/TokenList.json b/contracts/TokenList.json index 1a06ed32..2e94d5cc 100644 --- a/contracts/TokenList.json +++ b/contracts/TokenList.json @@ -210,6 +210,6 @@ "type": "function" } ], - "bytecode": "608060405234801561001057600080fd5b50610d56806100206000396000f3fe608060405234801561001057600080fd5b50600436106100a5576000357c01000000000000000000000000000000000000000000000000000000009004806391ded8fa1161007857806391ded8fa14610144578063b65c531b14610157578063e486033914610168578063f00d4b5d1461017b57600080fd5b806332434a2e146100aa578063538cad00146100bf578063778da554146100ea57806391657049146100fd575b600080fd5b6100bd6100b836600461097b565b61018e565b005b6100d26100cd366004610a3f565b610479565b6040516100e193929190610a9e565b60405180910390f35b6100d26100f8366004610a3f565b61054a565b61012c61010b366004610ad4565b600160a060020a039081166000908152602081905260409020600201541690565b604051600160a060020a0390911681526020016100e1565b6100d2610152366004610ad4565b61066d565b6001546040519081526020016100e1565b6100d2610176366004610ad4565b61074a565b6100bd610189366004610af8565b610776565b600160a060020a0382811660009081526020818152604091829020548251808401909352600683527f3130303030310000000000000000000000000000000000000000000000000000918301919091529091161561020b5760405160e560020a62461bcd0281526004016102029190610b31565b60405180910390fd5b5033600160a060020a031682600160a060020a0316638da5cb5b6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381865afa158015610270573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102949190610b44565b600160a060020a0316146040518060400160405280600681526020017f3130303030320000000000000000000000000000000000000000000000000000815250906102f55760405160e560020a62461bcd0281526004016102029190610b31565b50600160a060020a0382166000818152602081905260409020805473ffffffffffffffffffffffffffffffffffffffff191690911781556001016103398282610bec565b50600160a060020a0382811660008181526020818152604080832060020180543373ffffffffffffffffffffffffffffffffffffffff199182168117909255825160608101845295865292850187815291850152600180548082018255935283517fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf660039094029384018054909316951694909417815592519192917fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf7909101906104049082610bec565b50604091820151600291909101805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a039283161790559051908316907f512f28962293693883ab7a58ae504738bf8f6950b55447f94a7e2a079a01c4949061046d9084903390610cb2565b60405180910390a25050565b6001818154811061048957600080fd5b600091825260209091206003909102018054600182018054600160a060020a039092169350906104b890610b61565b80601f01602080910402602001604051908101604052809291908181526020018280546104e490610b61565b80156105315780601f1061050657610100808354040283529160200191610531565b820191906000526020600020905b81548152906001019060200180831161051457829003601f168201915b50505060029093015491925050600160a060020a031683565b6000606060006001848154811061056357610563610cdd565b600091825260209091206003909102015460018054600160a060020a039092169450908590811061059657610596610cdd565b906000526020600020906003020160010180546105b290610b61565b80601f01602080910402602001604051908101604052809291908181526020018280546105de90610b61565b801561062b5780601f106106005761010080835404028352916020019161062b565b820191906000526020600020905b81548152906001019060200180831161060e57829003601f168201915b505050505091506001848154811061064557610645610cdd565b6000918252602090912060026003909202010154929491935050600160a060020a0390911690565b600160a060020a0380821660009081526020819052604081208054600190910180549190931692606092916106a190610b61565b80601f01602080910402602001604051908101604052809291908181526020018280546106cd90610b61565b801561071a5780601f106106ef5761010080835404028352916020019161071a565b820191906000526020600020905b8154815290600101906020018083116106fd57829003601f168201915b50505050600160a060020a0395861660009081526020819052604090206002015494969195949094169350915050565b60006020819052908152604090208054600182018054600160a060020a0390921692916104b890610b61565b600160a060020a0382811660009081526020818152604091829020548251808401909352600683527f3130303130310000000000000000000000000000000000000000000000000000918301919091529091166107e95760405160e560020a62461bcd0281526004016102029190610b31565b50600160a060020a0382811660009081526020818152604091829020600201548251808401909352600683527f31303031303200000000000000000000000000000000000000000000000000009183019190915290911633146108625760405160e560020a62461bcd0281526004016102029190610b31565b50600160a060020a038281166000908152602081905260408120600201805473ffffffffffffffffffffffffffffffffffffffff1916928416929092179091555b6001548110156109455782600160a060020a0316600182815481106108ca576108ca610cdd565b6000918252602090912060039091020154600160a060020a0316036109335781600182815481106108fd576108fd610cdd565b906000526020600020906003020160020160006101000a815481600160a060020a030219169083600160a060020a031602179055505b8061093d81610cf6565b9150506108a3565b505050565b600160a060020a038116811461095f57600080fd5b50565b60e060020a634e487b7102600052604160045260246000fd5b6000806040838503121561098e57600080fd5b82356109998161094a565b9150602083013567ffffffffffffffff808211156109b657600080fd5b818501915085601f8301126109ca57600080fd5b8135818111156109dc576109dc610962565b604051601f8201601f19908116603f01168101908382118183101715610a0457610a04610962565b81604052828152886020848701011115610a1d57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b600060208284031215610a5157600080fd5b5035919050565b6000815180845260005b81811015610a7e57602081850181015186830182015201610a62565b506000602082860101526020601f19601f83011685010191505092915050565b6000600160a060020a03808616835260606020840152610ac16060840186610a58565b9150808416604084015250949350505050565b600060208284031215610ae657600080fd5b8135610af18161094a565b9392505050565b60008060408385031215610b0b57600080fd5b8235610b168161094a565b91506020830135610b268161094a565b809150509250929050565b602081526000610af16020830184610a58565b600060208284031215610b5657600080fd5b8151610af18161094a565b600281046001821680610b7557607f821691505b602082108103610b985760e060020a634e487b7102600052602260045260246000fd5b50919050565b601f821115610945576000818152602081206020601f86010481016020861015610bc55750805b6020601f860104820191505b81811015610be457828155600101610bd1565b505050505050565b815167ffffffffffffffff811115610c0657610c06610962565b610c1a81610c148454610b61565b84610b9e565b602080601f831160018114610c535760008415610c375750858301515b60028086026008870290910a6000190419821617865550610be4565b600085815260208120601f198616915b82811015610c8257888601518255948401946001909101908401610c63565b5085821015610ca257878501516008601f88160260020a60001904191681555b5050505050600202600101905550565b604081526000610cc56040830185610a58565b9050600160a060020a03831660208301529392505050565b60e060020a634e487b7102600052603260045260246000fd5b600060018201610d195760e060020a634e487b7102600052601160045260246000fd5b506001019056fea264697066735822122001bdf8c8b8ee5827d79879564f2f1ba5056f299fb9ca8c0f8239282388786e5a64736f6c63430008110033", - "deployedBytecode": "608060405234801561001057600080fd5b50600436106100a5576000357c01000000000000000000000000000000000000000000000000000000009004806391ded8fa1161007857806391ded8fa14610144578063b65c531b14610157578063e486033914610168578063f00d4b5d1461017b57600080fd5b806332434a2e146100aa578063538cad00146100bf578063778da554146100ea57806391657049146100fd575b600080fd5b6100bd6100b836600461097b565b61018e565b005b6100d26100cd366004610a3f565b610479565b6040516100e193929190610a9e565b60405180910390f35b6100d26100f8366004610a3f565b61054a565b61012c61010b366004610ad4565b600160a060020a039081166000908152602081905260409020600201541690565b604051600160a060020a0390911681526020016100e1565b6100d2610152366004610ad4565b61066d565b6001546040519081526020016100e1565b6100d2610176366004610ad4565b61074a565b6100bd610189366004610af8565b610776565b600160a060020a0382811660009081526020818152604091829020548251808401909352600683527f3130303030310000000000000000000000000000000000000000000000000000918301919091529091161561020b5760405160e560020a62461bcd0281526004016102029190610b31565b60405180910390fd5b5033600160a060020a031682600160a060020a0316638da5cb5b6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381865afa158015610270573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102949190610b44565b600160a060020a0316146040518060400160405280600681526020017f3130303030320000000000000000000000000000000000000000000000000000815250906102f55760405160e560020a62461bcd0281526004016102029190610b31565b50600160a060020a0382166000818152602081905260409020805473ffffffffffffffffffffffffffffffffffffffff191690911781556001016103398282610bec565b50600160a060020a0382811660008181526020818152604080832060020180543373ffffffffffffffffffffffffffffffffffffffff199182168117909255825160608101845295865292850187815291850152600180548082018255935283517fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf660039094029384018054909316951694909417815592519192917fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf7909101906104049082610bec565b50604091820151600291909101805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a039283161790559051908316907f512f28962293693883ab7a58ae504738bf8f6950b55447f94a7e2a079a01c4949061046d9084903390610cb2565b60405180910390a25050565b6001818154811061048957600080fd5b600091825260209091206003909102018054600182018054600160a060020a039092169350906104b890610b61565b80601f01602080910402602001604051908101604052809291908181526020018280546104e490610b61565b80156105315780601f1061050657610100808354040283529160200191610531565b820191906000526020600020905b81548152906001019060200180831161051457829003601f168201915b50505060029093015491925050600160a060020a031683565b6000606060006001848154811061056357610563610cdd565b600091825260209091206003909102015460018054600160a060020a039092169450908590811061059657610596610cdd565b906000526020600020906003020160010180546105b290610b61565b80601f01602080910402602001604051908101604052809291908181526020018280546105de90610b61565b801561062b5780601f106106005761010080835404028352916020019161062b565b820191906000526020600020905b81548152906001019060200180831161060e57829003601f168201915b505050505091506001848154811061064557610645610cdd565b6000918252602090912060026003909202010154929491935050600160a060020a0390911690565b600160a060020a0380821660009081526020819052604081208054600190910180549190931692606092916106a190610b61565b80601f01602080910402602001604051908101604052809291908181526020018280546106cd90610b61565b801561071a5780601f106106ef5761010080835404028352916020019161071a565b820191906000526020600020905b8154815290600101906020018083116106fd57829003601f168201915b50505050600160a060020a0395861660009081526020819052604090206002015494969195949094169350915050565b60006020819052908152604090208054600182018054600160a060020a0390921692916104b890610b61565b600160a060020a0382811660009081526020818152604091829020548251808401909352600683527f3130303130310000000000000000000000000000000000000000000000000000918301919091529091166107e95760405160e560020a62461bcd0281526004016102029190610b31565b50600160a060020a0382811660009081526020818152604091829020600201548251808401909352600683527f31303031303200000000000000000000000000000000000000000000000000009183019190915290911633146108625760405160e560020a62461bcd0281526004016102029190610b31565b50600160a060020a038281166000908152602081905260408120600201805473ffffffffffffffffffffffffffffffffffffffff1916928416929092179091555b6001548110156109455782600160a060020a0316600182815481106108ca576108ca610cdd565b6000918252602090912060039091020154600160a060020a0316036109335781600182815481106108fd576108fd610cdd565b906000526020600020906003020160020160006101000a815481600160a060020a030219169083600160a060020a031602179055505b8061093d81610cf6565b9150506108a3565b505050565b600160a060020a038116811461095f57600080fd5b50565b60e060020a634e487b7102600052604160045260246000fd5b6000806040838503121561098e57600080fd5b82356109998161094a565b9150602083013567ffffffffffffffff808211156109b657600080fd5b818501915085601f8301126109ca57600080fd5b8135818111156109dc576109dc610962565b604051601f8201601f19908116603f01168101908382118183101715610a0457610a04610962565b81604052828152886020848701011115610a1d57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b600060208284031215610a5157600080fd5b5035919050565b6000815180845260005b81811015610a7e57602081850181015186830182015201610a62565b506000602082860101526020601f19601f83011685010191505092915050565b6000600160a060020a03808616835260606020840152610ac16060840186610a58565b9150808416604084015250949350505050565b600060208284031215610ae657600080fd5b8135610af18161094a565b9392505050565b60008060408385031215610b0b57600080fd5b8235610b168161094a565b91506020830135610b268161094a565b809150509250929050565b602081526000610af16020830184610a58565b600060208284031215610b5657600080fd5b8151610af18161094a565b600281046001821680610b7557607f821691505b602082108103610b985760e060020a634e487b7102600052602260045260246000fd5b50919050565b601f821115610945576000818152602081206020601f86010481016020861015610bc55750805b6020601f860104820191505b81811015610be457828155600101610bd1565b505050505050565b815167ffffffffffffffff811115610c0657610c06610962565b610c1a81610c148454610b61565b84610b9e565b602080601f831160018114610c535760008415610c375750858301515b60028086026008870290910a6000190419821617865550610be4565b600085815260208120601f198616915b82811015610c8257888601518255948401946001909101908401610c63565b5085821015610ca257878501516008601f88160260020a60001904191681555b5050505050600202600101905550565b604081526000610cc56040830185610a58565b9050600160a060020a03831660208301529392505050565b60e060020a634e487b7102600052603260045260246000fd5b600060018201610d195760e060020a634e487b7102600052601160045260246000fd5b506001019056fea264697066735822122001bdf8c8b8ee5827d79879564f2f1ba5056f299fb9ca8c0f8239282388786e5a64736f6c63430008110033" + "bytecode": "608060405234801561001057600080fd5b50610c3e806100206000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c806391ded8fa1161005b57806391ded8fa14610127578063b65c531b1461013a578063e48603391461014b578063f00d4b5d1461015e57600080fd5b806332434a2e1461008d578063538cad00146100a2578063778da554146100cd57806391657049146100e0575b600080fd5b6100a061009b366004610899565b610171565b005b6100b56100b036600461095d565b6103e5565b6040516100c4939291906109bc565b60405180910390f35b6100b56100db36600461095d565b6104b6565b61010f6100ee3660046109f1565b6001600160a01b039081166000908152602081905260409020600201541690565b6040516001600160a01b0390911681526020016100c4565b6100b56101353660046109f1565b6105d9565b6001546040519081526020016100c4565b6100b56101593660046109f1565b6106b6565b6100a061016c366004610a15565b6106e2565b6001600160a01b0382811660009081526020818152604091829020548251808401909352600683526531303030303160d01b91830191909152909116156101d45760405162461bcd60e51b81526004016101cb9190610a4e565b60405180910390fd5b50336001600160a01b0316826001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561021d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102419190610a61565b6001600160a01b0316146040518060400160405280600681526020016518981818181960d11b815250906102885760405162461bcd60e51b81526004016101cb9190610a4e565b506001600160a01b038216600081815260208190526040902080546001600160a01b03191690911781556001016102bf8282610b08565b506001600160a01b038281166000818152602081815260408083206002018054336001600160a01b03199182168117909255825160608101845295865292850187815291850152600180548082018255935283517fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf660039094029384018054909316951694909417815592519192917fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf79091019061037d9082610b08565b5060409182015160029190910180546001600160a01b0319166001600160a01b039283161790559051908316907f512f28962293693883ab7a58ae504738bf8f6950b55447f94a7e2a079a01c494906103d99084903390610bc8565b60405180910390a25050565b600181815481106103f557600080fd5b6000918252602090912060039091020180546001820180546001600160a01b0390921693509061042490610a7e565b80601f016020809104026020016040519081016040528092919081815260200182805461045090610a7e565b801561049d5780601f106104725761010080835404028352916020019161049d565b820191906000526020600020905b81548152906001019060200180831161048057829003601f168201915b505050600290930154919250506001600160a01b031683565b600060606000600184815481106104cf576104cf610bf2565b6000918252602090912060039091020154600180546001600160a01b039092169450908590811061050257610502610bf2565b9060005260206000209060030201600101805461051e90610a7e565b80601f016020809104026020016040519081016040528092919081815260200182805461054a90610a7e565b80156105975780601f1061056c57610100808354040283529160200191610597565b820191906000526020600020905b81548152906001019060200180831161057a57829003601f168201915b50505050509150600184815481106105b1576105b1610bf2565b60009182526020909120600260039092020101549294919350506001600160a01b0390911690565b6001600160a01b03808216600090815260208190526040812080546001909101805491909316926060929161060d90610a7e565b80601f016020809104026020016040519081016040528092919081815260200182805461063990610a7e565b80156106865780601f1061065b57610100808354040283529160200191610686565b820191906000526020600020905b81548152906001019060200180831161066957829003601f168201915b505050506001600160a01b0395861660009081526020819052604090206002015494969195949094169350915050565b600060208190529081526040902080546001820180546001600160a01b03909216929161042490610a7e565b6001600160a01b0382811660009081526020818152604091829020548251808401909352600683526531303031303160d01b9183019190915290911661073b5760405162461bcd60e51b81526004016101cb9190610a4e565b506001600160a01b0382811660009081526020818152604091829020600201548251808401909352600683526518981818981960d11b91830191909152909116331461079a5760405162461bcd60e51b81526004016101cb9190610a4e565b506001600160a01b03828116600090815260208190526040812060020180546001600160a01b031916928416929092179091555b60015481101561086657826001600160a01b0316600182815481106107f5576107f5610bf2565b60009182526020909120600390910201546001600160a01b03160361085e57816001828154811061082857610828610bf2565b906000526020600020906003020160020160006101000a8154816001600160a01b0302191690836001600160a01b031602179055505b6001016107ce565b505050565b6001600160a01b038116811461088057600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b600080604083850312156108ac57600080fd5b82356108b78161086b565b9150602083013567ffffffffffffffff808211156108d457600080fd5b818501915085601f8301126108e857600080fd5b8135818111156108fa576108fa610883565b604051601f8201601f19908116603f0116810190838211818310171561092257610922610883565b8160405282815288602084870101111561093b57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60006020828403121561096f57600080fd5b5035919050565b6000815180845260005b8181101561099c57602081850181015186830182015201610980565b506000602082860101526020601f19601f83011685010191505092915050565b600060018060a01b038086168352606060208401526109de6060840186610976565b9150808416604084015250949350505050565b600060208284031215610a0357600080fd5b8135610a0e8161086b565b9392505050565b60008060408385031215610a2857600080fd5b8235610a338161086b565b91506020830135610a438161086b565b809150509250929050565b602081526000610a0e6020830184610976565b600060208284031215610a7357600080fd5b8151610a0e8161086b565b600181811c90821680610a9257607f821691505b602082108103610ab257634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115610866576000816000526020600020601f850160051c81016020861015610ae15750805b601f850160051c820191505b81811015610b0057828155600101610aed565b505050505050565b815167ffffffffffffffff811115610b2257610b22610883565b610b3681610b308454610a7e565b84610ab8565b602080601f831160018114610b6b5760008415610b535750858301515b600019600386901b1c1916600185901b178555610b00565b600085815260208120601f198616915b82811015610b9a57888601518255948401946001909101908401610b7b565b5085821015610bb85787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b604081526000610bdb6040830185610976565b905060018060a01b03831660208301529392505050565b634e487b7160e01b600052603260045260246000fdfea2646970667358221220d4db66c8361aee57f0e3b0a8e00a07bef8fbbcaffe63345a36da6a4a4810c86e64736f6c63430008170033", + "deployedBytecode": "608060405234801561001057600080fd5b50600436106100885760003560e01c806391ded8fa1161005b57806391ded8fa14610127578063b65c531b1461013a578063e48603391461014b578063f00d4b5d1461015e57600080fd5b806332434a2e1461008d578063538cad00146100a2578063778da554146100cd57806391657049146100e0575b600080fd5b6100a061009b366004610899565b610171565b005b6100b56100b036600461095d565b6103e5565b6040516100c4939291906109bc565b60405180910390f35b6100b56100db36600461095d565b6104b6565b61010f6100ee3660046109f1565b6001600160a01b039081166000908152602081905260409020600201541690565b6040516001600160a01b0390911681526020016100c4565b6100b56101353660046109f1565b6105d9565b6001546040519081526020016100c4565b6100b56101593660046109f1565b6106b6565b6100a061016c366004610a15565b6106e2565b6001600160a01b0382811660009081526020818152604091829020548251808401909352600683526531303030303160d01b91830191909152909116156101d45760405162461bcd60e51b81526004016101cb9190610a4e565b60405180910390fd5b50336001600160a01b0316826001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561021d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102419190610a61565b6001600160a01b0316146040518060400160405280600681526020016518981818181960d11b815250906102885760405162461bcd60e51b81526004016101cb9190610a4e565b506001600160a01b038216600081815260208190526040902080546001600160a01b03191690911781556001016102bf8282610b08565b506001600160a01b038281166000818152602081815260408083206002018054336001600160a01b03199182168117909255825160608101845295865292850187815291850152600180548082018255935283517fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf660039094029384018054909316951694909417815592519192917fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf79091019061037d9082610b08565b5060409182015160029190910180546001600160a01b0319166001600160a01b039283161790559051908316907f512f28962293693883ab7a58ae504738bf8f6950b55447f94a7e2a079a01c494906103d99084903390610bc8565b60405180910390a25050565b600181815481106103f557600080fd5b6000918252602090912060039091020180546001820180546001600160a01b0390921693509061042490610a7e565b80601f016020809104026020016040519081016040528092919081815260200182805461045090610a7e565b801561049d5780601f106104725761010080835404028352916020019161049d565b820191906000526020600020905b81548152906001019060200180831161048057829003601f168201915b505050600290930154919250506001600160a01b031683565b600060606000600184815481106104cf576104cf610bf2565b6000918252602090912060039091020154600180546001600160a01b039092169450908590811061050257610502610bf2565b9060005260206000209060030201600101805461051e90610a7e565b80601f016020809104026020016040519081016040528092919081815260200182805461054a90610a7e565b80156105975780601f1061056c57610100808354040283529160200191610597565b820191906000526020600020905b81548152906001019060200180831161057a57829003601f168201915b50505050509150600184815481106105b1576105b1610bf2565b60009182526020909120600260039092020101549294919350506001600160a01b0390911690565b6001600160a01b03808216600090815260208190526040812080546001909101805491909316926060929161060d90610a7e565b80601f016020809104026020016040519081016040528092919081815260200182805461063990610a7e565b80156106865780601f1061065b57610100808354040283529160200191610686565b820191906000526020600020905b81548152906001019060200180831161066957829003601f168201915b505050506001600160a01b0395861660009081526020819052604090206002015494969195949094169350915050565b600060208190529081526040902080546001820180546001600160a01b03909216929161042490610a7e565b6001600160a01b0382811660009081526020818152604091829020548251808401909352600683526531303031303160d01b9183019190915290911661073b5760405162461bcd60e51b81526004016101cb9190610a4e565b506001600160a01b0382811660009081526020818152604091829020600201548251808401909352600683526518981818981960d11b91830191909152909116331461079a5760405162461bcd60e51b81526004016101cb9190610a4e565b506001600160a01b03828116600090815260208190526040812060020180546001600160a01b031916928416929092179091555b60015481101561086657826001600160a01b0316600182815481106107f5576107f5610bf2565b60009182526020909120600390910201546001600160a01b03160361085e57816001828154811061082857610828610bf2565b906000526020600020906003020160020160006101000a8154816001600160a01b0302191690836001600160a01b031602179055505b6001016107ce565b505050565b6001600160a01b038116811461088057600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b600080604083850312156108ac57600080fd5b82356108b78161086b565b9150602083013567ffffffffffffffff808211156108d457600080fd5b818501915085601f8301126108e857600080fd5b8135818111156108fa576108fa610883565b604051601f8201601f19908116603f0116810190838211818310171561092257610922610883565b8160405282815288602084870101111561093b57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60006020828403121561096f57600080fd5b5035919050565b6000815180845260005b8181101561099c57602081850181015186830182015201610980565b506000602082860101526020601f19601f83011685010191505092915050565b600060018060a01b038086168352606060208401526109de6060840186610976565b9150808416604084015250949350505050565b600060208284031215610a0357600080fd5b8135610a0e8161086b565b9392505050565b60008060408385031215610a2857600080fd5b8235610a338161086b565b91506020830135610a438161086b565b809150509250929050565b602081526000610a0e6020830184610976565b600060208284031215610a7357600080fd5b8151610a0e8161086b565b600181811c90821680610a9257607f821691505b602082108103610ab257634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115610866576000816000526020600020601f850160051c81016020861015610ae15750805b601f850160051c820191505b81811015610b0057828155600101610aed565b505050505050565b815167ffffffffffffffff811115610b2257610b22610883565b610b3681610b308454610a7e565b84610ab8565b602080601f831160018114610b6b5760008415610b535750858301515b600019600386901b1c1916600185901b178555610b00565b600085815260208120601f198616915b82811015610b9a57888601518255948401946001909101908401610b7b565b5085821015610bb85787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b604081526000610bdb6040830185610976565b905060018060a01b03831660208301529392505050565b634e487b7160e01b600052603260045260246000fdfea2646970667358221220d4db66c8361aee57f0e3b0a8e00a07bef8fbbcaffe63345a36da6a4a4810c86e64736f6c63430008170033" } \ No newline at end of file diff --git a/contracts/contract_version.md b/contracts/contract_version.md index 02046028..2c14ddf8 100644 --- a/contracts/contract_version.md +++ b/contracts/contract_version.md @@ -4,17 +4,17 @@ | ContractReceiver.json | **v22.12.0** | no | yes | | ContractRegistry.json | **v22.12.0** | no | yes | | TokenList.json | **v22.12.0** | yes(only for unittest) | yes | -| IbetStandardTokenInterface.json | **v22.12.0** | no | yes | -| IbetStandardToken.json | **v22.12.0** | yes(only for unittest) | yes | -| IbetMembership.json | **v22.12.0** | yes(only for unittest) | yes | -| IbetCoupon.json | **v22.12.0** | yes(only for unittest) | yes | -| IbetSecurityTokenInterface.json | **v24.6.0** | no | yes | -| IbetStraightBond.json | **v24.6.0** | **yes** | yes | -| IbetShare.json | **v24.6.0** | **yes** | yes | +| IbetStandardTokenInterface.json | **v24.9.0** | no | yes | +| IbetStandardToken.json | **v24.9.0** | yes(only for unittest) | yes | +| IbetMembership.json | **v24.9.0** | yes(only for unittest) | yes | +| IbetCoupon.json | **v24.9.0** | yes(only for unittest) | yes | +| IbetSecurityTokenInterface.json | **v24.9.0** | no | yes | +| IbetStraightBond.json | **v24.9.0** | **yes** | yes | +| IbetShare.json | **v24.9.0** | **yes** | yes | | IbetExchangeInterface.json | **v22.12.0** | no | yes | | IbetExchange.json | **v22.12.0** | yes(only for unittest) | yes | | ExchangeStorage.json | **v22.12.0** | yes(only for unittest) | yes | -| IbetEscrow.json | **v22.12.0** | yes(only for unittest) | yes | +| IbetEscrow.json | **v24.6.0** | yes(only for unittest) | yes | | EscrowStorage.json | **v22.12.0** | yes(only for unittest) | yes | | IbetSecurityTokenEscrow.json | **v22.12.0** | yes(only for unittest) | yes | | DVPStorage.json | **v24.6.0** | yes(only for unittest) | yes | diff --git a/docs/ibet_prime.yaml b/docs/ibet_prime.yaml index ced5636b..c7c82f30 100644 --- a/docs/ibet_prime.yaml +++ b/docs/ibet_prime.yaml @@ -457,8 +457,8 @@ paths: application/json: schema: anyOf: - - $ref: '#/components/schemas/AuthorizationErrorResponse' - $ref: '#/components/schemas/Error401Model' + - $ref: '#/components/schemas/AuthorizationErrorResponse' title: Response 401 Issue Token Bond Tokens Post '400': description: Invalid Parameter Error / Send Transaction Error / Contract @@ -591,8 +591,8 @@ paths: application/json: schema: anyOf: - - $ref: '#/components/schemas/AuthorizationErrorResponse' - $ref: '#/components/schemas/Error401Model' + - $ref: '#/components/schemas/AuthorizationErrorResponse' title: Response 401 Update Token Bond Tokens Token Address Post '404': description: Not Found Error @@ -607,10 +607,10 @@ paths: application/json: schema: anyOf: - - $ref: '#/components/schemas/OperationNotSupportedVersionErrorResponse' - $ref: '#/components/schemas/SendTransactionErrorResponse' - - $ref: '#/components/schemas/InvalidParameterErrorResponse' + - $ref: '#/components/schemas/OperationNotSupportedVersionErrorResponse' - $ref: '#/components/schemas/ContractRevertErrorResponse' + - $ref: '#/components/schemas/InvalidParameterErrorResponse' title: Response 400 Update Token Bond Tokens Token Address Post /bond/tokens/{token_address}/history: get: @@ -865,8 +865,8 @@ paths: application/json: schema: anyOf: - - $ref: '#/components/schemas/AuthorizationErrorResponse' - $ref: '#/components/schemas/Error401Model' + - $ref: '#/components/schemas/AuthorizationErrorResponse' title: Response 401 Additional Issue Bond Tokens Token Address Additional Issue Post '404': @@ -883,8 +883,8 @@ paths: schema: anyOf: - $ref: '#/components/schemas/SendTransactionErrorResponse' - - $ref: '#/components/schemas/InvalidParameterErrorResponse' - $ref: '#/components/schemas/ContractRevertErrorResponse' + - $ref: '#/components/schemas/InvalidParameterErrorResponse' title: Response 400 Additional Issue Bond Tokens Token Address Additional Issue Post /bond/tokens/{token_address}/additional_issue/batch: @@ -1026,8 +1026,8 @@ paths: application/json: schema: anyOf: - - $ref: '#/components/schemas/AuthorizationErrorResponse' - $ref: '#/components/schemas/Error401Model' + - $ref: '#/components/schemas/AuthorizationErrorResponse' title: Response 401 Additional Issue In Batch Bond Tokens Token Address Additional Issue Batch Post '404': @@ -1225,8 +1225,8 @@ paths: application/json: schema: anyOf: - - $ref: '#/components/schemas/AuthorizationErrorResponse' - $ref: '#/components/schemas/Error401Model' + - $ref: '#/components/schemas/AuthorizationErrorResponse' title: Response 401 Redeem Token Bond Tokens Token Address Redeem Post '404': @@ -1243,8 +1243,8 @@ paths: schema: anyOf: - $ref: '#/components/schemas/SendTransactionErrorResponse' - - $ref: '#/components/schemas/InvalidParameterErrorResponse' - $ref: '#/components/schemas/ContractRevertErrorResponse' + - $ref: '#/components/schemas/InvalidParameterErrorResponse' title: Response 400 Redeem Token Bond Tokens Token Address Redeem Post /bond/tokens/{token_address}/redeem/batch: @@ -1384,8 +1384,8 @@ paths: application/json: schema: anyOf: - - $ref: '#/components/schemas/AuthorizationErrorResponse' - $ref: '#/components/schemas/Error401Model' + - $ref: '#/components/schemas/AuthorizationErrorResponse' title: Response 401 Redeem Token In Batch Bond Tokens Token Address Redeem Batch Post '404': @@ -1539,8 +1539,8 @@ paths: application/json: schema: anyOf: - - $ref: '#/components/schemas/AuthorizationErrorResponse' - $ref: '#/components/schemas/Error401Model' + - $ref: '#/components/schemas/AuthorizationErrorResponse' title: Response 401 Schedule New Update Event Bond Tokens Token Address Scheduled Events Post '404': @@ -1663,8 +1663,8 @@ paths: application/json: schema: anyOf: - - $ref: '#/components/schemas/AuthorizationErrorResponse' - $ref: '#/components/schemas/Error401Model' + - $ref: '#/components/schemas/AuthorizationErrorResponse' title: Response 401 Delete Scheduled Event Bond Tokens Token Address Scheduled Events Scheduled Event Id Delete '404': @@ -2045,8 +2045,8 @@ paths: application/json: schema: anyOf: - - $ref: '#/components/schemas/AuthorizationErrorResponse' - $ref: '#/components/schemas/Error401Model' + - $ref: '#/components/schemas/AuthorizationErrorResponse' title: Response 401 Register Holder Personal Info Bond Tokens Token Address Personal Info Post '404': @@ -2063,8 +2063,8 @@ paths: schema: anyOf: - $ref: '#/components/schemas/SendTransactionErrorResponse' - - $ref: '#/components/schemas/InvalidParameterErrorResponse' - $ref: '#/components/schemas/ContractRevertErrorResponse' + - $ref: '#/components/schemas/InvalidParameterErrorResponse' title: Response 400 Register Holder Personal Info Bond Tokens Token Address Personal Info Post /bond/tokens/{token_address}/personal_info/batch: @@ -2218,8 +2218,8 @@ paths: application/json: schema: anyOf: - - $ref: '#/components/schemas/AuthorizationErrorResponse' - $ref: '#/components/schemas/Error401Model' + - $ref: '#/components/schemas/AuthorizationErrorResponse' title: Response 401 Batch Register Personal Info Bond Tokens Token Address Personal Info Batch Post '404': @@ -2464,8 +2464,8 @@ paths: application/json: schema: anyOf: - - $ref: '#/components/schemas/AuthorizationErrorResponse' - $ref: '#/components/schemas/Error401Model' + - $ref: '#/components/schemas/AuthorizationErrorResponse' title: Response 401 Transfer Ownership Bond Transfers Post '400': description: Invalid Parameter Error / Send Transaction Error / Contract @@ -2475,8 +2475,8 @@ paths: schema: anyOf: - $ref: '#/components/schemas/SendTransactionErrorResponse' - - $ref: '#/components/schemas/InvalidParameterErrorResponse' - $ref: '#/components/schemas/ContractRevertErrorResponse' + - $ref: '#/components/schemas/InvalidParameterErrorResponse' title: Response 400 Transfer Ownership Bond Transfers Post /bond/transfers/{token_address}: get: @@ -2881,8 +2881,8 @@ paths: application/json: schema: anyOf: - - $ref: '#/components/schemas/AuthorizationErrorResponse' - $ref: '#/components/schemas/Error401Model' + - $ref: '#/components/schemas/AuthorizationErrorResponse' title: Response 401 Update Transfer Approval Bond Transfer Approvals Token Address Id Post '404': @@ -2898,10 +2898,10 @@ paths: application/json: schema: anyOf: - - $ref: '#/components/schemas/OperationNotAllowedStateErrorResponse' - $ref: '#/components/schemas/SendTransactionErrorResponse' - - $ref: '#/components/schemas/InvalidParameterErrorResponse' - $ref: '#/components/schemas/ContractRevertErrorResponse' + - $ref: '#/components/schemas/InvalidParameterErrorResponse' + - $ref: '#/components/schemas/OperationNotAllowedStateErrorResponse' title: Response 400 Update Transfer Approval Bond Transfer Approvals Token Address Id Post get: @@ -2958,12 +2958,7 @@ paths: description: |- Bulk transfer token ownership - By using "transaction compression mode", it is possible to consolidate multiple transfers into one transaction. - This speeds up the time it takes for all transfers to be completed. - On the other hand, when using transaction compression, the input data must meet the following conditions. - All `token_address` must be the same. - - All `from_address` must be the same. - - `from_address` and `issuer_address` must be the same. operationId: bulk_transfer_ownership_bond_bulk_transfer_post parameters: - name: issuer-address @@ -3001,28 +2996,33 @@ paths: application/json: schema: $ref: '#/components/schemas/BulkTransferUploadIdResponse' - '422': - description: Validation Error - content: - application/json: - schema: - $ref: '#/components/schemas/Error422Model' '401': description: Authorization Error content: application/json: schema: anyOf: - - $ref: '#/components/schemas/AuthorizationErrorResponse' - $ref: '#/components/schemas/Error401Model' + - $ref: '#/components/schemas/AuthorizationErrorResponse' title: Response 401 Bulk Transfer Ownership Bond Bulk Transfer Post + '422': + description: Validation Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error422Model' '400': description: Invalid Parameter Error / Send Transaction Error / Contract Revert Error etc content: application/json: schema: - $ref: '#/components/schemas/InvalidParameterErrorResponse' + anyOf: + - $ref: '#/components/schemas/TokenNotExistErrorResponse' + - $ref: '#/components/schemas/NonTransferableTokenErrorResponse' + - $ref: '#/components/schemas/MultipleTokenTransferNotAllowedErrorResponse' + - $ref: '#/components/schemas/InvalidParameterErrorResponse' + title: Response 400 Bulk Transfer Ownership Bond Bulk Transfer Post get: tags: - bond @@ -3149,8 +3149,8 @@ paths: schema: anyOf: - $ref: '#/components/schemas/SendTransactionErrorResponse' - - $ref: '#/components/schemas/InvalidParameterErrorResponse' - $ref: '#/components/schemas/ContractRevertErrorResponse' + - $ref: '#/components/schemas/InvalidParameterErrorResponse' title: Response 400 Create Account E2E Messaging Accounts Post /e2e_messaging/accounts/{account_address}: get: @@ -4539,8 +4539,8 @@ paths: application/json: schema: anyOf: - - $ref: '#/components/schemas/AuthorizationErrorResponse' - $ref: '#/components/schemas/Error401Model' + - $ref: '#/components/schemas/AuthorizationErrorResponse' title: Response 401 Force Unlock Positions Account Address Force Unlock Post '422': @@ -4557,8 +4557,8 @@ paths: schema: anyOf: - $ref: '#/components/schemas/SendTransactionErrorResponse' - - $ref: '#/components/schemas/InvalidParameterErrorResponse' - $ref: '#/components/schemas/ContractRevertErrorResponse' + - $ref: '#/components/schemas/InvalidParameterErrorResponse' title: Response 400 Force Unlock Positions Account Address Force Unlock Post /positions/{account_address}/{token_address}: @@ -4670,8 +4670,8 @@ paths: application/json: schema: anyOf: - - $ref: '#/components/schemas/AuthorizationErrorResponse' - $ref: '#/components/schemas/Error401Model' + - $ref: '#/components/schemas/AuthorizationErrorResponse' title: Response 401 Issue Token Share Tokens Post '400': description: Invalid Parameter Error / Send Transaction Error / Contract @@ -4803,8 +4803,8 @@ paths: application/json: schema: anyOf: - - $ref: '#/components/schemas/AuthorizationErrorResponse' - $ref: '#/components/schemas/Error401Model' + - $ref: '#/components/schemas/AuthorizationErrorResponse' title: Response 401 Update Token Share Tokens Token Address Post '404': description: Not Found Error @@ -4819,10 +4819,10 @@ paths: application/json: schema: anyOf: - - $ref: '#/components/schemas/OperationNotSupportedVersionErrorResponse' - $ref: '#/components/schemas/SendTransactionErrorResponse' - - $ref: '#/components/schemas/InvalidParameterErrorResponse' + - $ref: '#/components/schemas/OperationNotSupportedVersionErrorResponse' - $ref: '#/components/schemas/ContractRevertErrorResponse' + - $ref: '#/components/schemas/InvalidParameterErrorResponse' title: Response 400 Update Token Share Tokens Token Address Post /share/tokens/{token_address}/history: get: @@ -5077,8 +5077,8 @@ paths: application/json: schema: anyOf: - - $ref: '#/components/schemas/AuthorizationErrorResponse' - $ref: '#/components/schemas/Error401Model' + - $ref: '#/components/schemas/AuthorizationErrorResponse' title: Response 401 Additional Issue Share Tokens Token Address Additional Issue Post '404': @@ -5095,8 +5095,8 @@ paths: schema: anyOf: - $ref: '#/components/schemas/SendTransactionErrorResponse' - - $ref: '#/components/schemas/InvalidParameterErrorResponse' - $ref: '#/components/schemas/ContractRevertErrorResponse' + - $ref: '#/components/schemas/InvalidParameterErrorResponse' title: Response 400 Additional Issue Share Tokens Token Address Additional Issue Post /share/tokens/{token_address}/additional_issue/batch: @@ -5238,8 +5238,8 @@ paths: application/json: schema: anyOf: - - $ref: '#/components/schemas/AuthorizationErrorResponse' - $ref: '#/components/schemas/Error401Model' + - $ref: '#/components/schemas/AuthorizationErrorResponse' title: Response 401 Additional Issue In Batch Share Tokens Token Address Additional Issue Batch Post '404': @@ -5437,8 +5437,8 @@ paths: application/json: schema: anyOf: - - $ref: '#/components/schemas/AuthorizationErrorResponse' - $ref: '#/components/schemas/Error401Model' + - $ref: '#/components/schemas/AuthorizationErrorResponse' title: Response 401 Redeem Token Share Tokens Token Address Redeem Post '404': @@ -5455,8 +5455,8 @@ paths: schema: anyOf: - $ref: '#/components/schemas/SendTransactionErrorResponse' - - $ref: '#/components/schemas/InvalidParameterErrorResponse' - $ref: '#/components/schemas/ContractRevertErrorResponse' + - $ref: '#/components/schemas/InvalidParameterErrorResponse' title: Response 400 Redeem Token Share Tokens Token Address Redeem Post /share/tokens/{token_address}/redeem/batch: @@ -5596,8 +5596,8 @@ paths: application/json: schema: anyOf: - - $ref: '#/components/schemas/AuthorizationErrorResponse' - $ref: '#/components/schemas/Error401Model' + - $ref: '#/components/schemas/AuthorizationErrorResponse' title: Response 401 Redeem Token In Batch Share Tokens Token Address Redeem Batch Post '404': @@ -5751,8 +5751,8 @@ paths: application/json: schema: anyOf: - - $ref: '#/components/schemas/AuthorizationErrorResponse' - $ref: '#/components/schemas/Error401Model' + - $ref: '#/components/schemas/AuthorizationErrorResponse' title: Response 401 Schedule New Update Event Share Tokens Token Address Scheduled Events Post '404': @@ -5875,8 +5875,8 @@ paths: application/json: schema: anyOf: - - $ref: '#/components/schemas/AuthorizationErrorResponse' - $ref: '#/components/schemas/Error401Model' + - $ref: '#/components/schemas/AuthorizationErrorResponse' title: Response 401 Delete Scheduled Event Share Tokens Token Address Scheduled Events Scheduled Event Id Delete '404': @@ -6257,8 +6257,8 @@ paths: application/json: schema: anyOf: - - $ref: '#/components/schemas/AuthorizationErrorResponse' - $ref: '#/components/schemas/Error401Model' + - $ref: '#/components/schemas/AuthorizationErrorResponse' title: Response 401 Register Holder Personal Info Share Tokens Token Address Personal Info Post '404': @@ -6275,8 +6275,8 @@ paths: schema: anyOf: - $ref: '#/components/schemas/SendTransactionErrorResponse' - - $ref: '#/components/schemas/InvalidParameterErrorResponse' - $ref: '#/components/schemas/ContractRevertErrorResponse' + - $ref: '#/components/schemas/InvalidParameterErrorResponse' title: Response 400 Register Holder Personal Info Share Tokens Token Address Personal Info Post /share/tokens/{token_address}/personal_info/batch: @@ -6430,8 +6430,8 @@ paths: application/json: schema: anyOf: - - $ref: '#/components/schemas/AuthorizationErrorResponse' - $ref: '#/components/schemas/Error401Model' + - $ref: '#/components/schemas/AuthorizationErrorResponse' title: Response 401 Batch Register Personal Info Share Tokens Token Address Personal Info Batch Post '404': @@ -6670,8 +6670,8 @@ paths: application/json: schema: anyOf: - - $ref: '#/components/schemas/AuthorizationErrorResponse' - $ref: '#/components/schemas/Error401Model' + - $ref: '#/components/schemas/AuthorizationErrorResponse' title: Response 401 Transfer Ownership Share Transfers Post '404': description: Not Found Error @@ -6687,8 +6687,8 @@ paths: schema: anyOf: - $ref: '#/components/schemas/SendTransactionErrorResponse' - - $ref: '#/components/schemas/InvalidParameterErrorResponse' - $ref: '#/components/schemas/ContractRevertErrorResponse' + - $ref: '#/components/schemas/InvalidParameterErrorResponse' title: Response 400 Transfer Ownership Share Transfers Post /share/transfers/{token_address}: get: @@ -7094,8 +7094,8 @@ paths: application/json: schema: anyOf: - - $ref: '#/components/schemas/AuthorizationErrorResponse' - $ref: '#/components/schemas/Error401Model' + - $ref: '#/components/schemas/AuthorizationErrorResponse' title: Response 401 Update Transfer Approval Share Transfer Approvals Token Address Id Post '404': @@ -7111,10 +7111,10 @@ paths: application/json: schema: anyOf: - - $ref: '#/components/schemas/OperationNotAllowedStateErrorResponse' - $ref: '#/components/schemas/SendTransactionErrorResponse' - - $ref: '#/components/schemas/InvalidParameterErrorResponse' - $ref: '#/components/schemas/ContractRevertErrorResponse' + - $ref: '#/components/schemas/InvalidParameterErrorResponse' + - $ref: '#/components/schemas/OperationNotAllowedStateErrorResponse' title: Response 400 Update Transfer Approval Share Transfer Approvals Token Address Id Post get: @@ -7171,12 +7171,7 @@ paths: description: |- Bulk transfer token ownership - By using "transaction compression mode", it is possible to consolidate multiple transfers into one transaction. - This speeds up the time it takes for all transfers to be completed. - On the other hand, when using transaction compression, the input data must meet the following conditions. - All `token_address` must be the same. - - All `from_address` must be the same. - - `from_address` and `issuer_address` must be the same. operationId: bulk_transfer_ownership_share_bulk_transfer_post parameters: - name: issuer-address @@ -7214,28 +7209,33 @@ paths: application/json: schema: $ref: '#/components/schemas/BulkTransferUploadIdResponse' - '422': - description: Validation Error - content: - application/json: - schema: - $ref: '#/components/schemas/Error422Model' '401': description: Authorization Error content: application/json: schema: anyOf: - - $ref: '#/components/schemas/AuthorizationErrorResponse' - $ref: '#/components/schemas/Error401Model' + - $ref: '#/components/schemas/AuthorizationErrorResponse' title: Response 401 Bulk Transfer Ownership Share Bulk Transfer Post + '422': + description: Validation Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error422Model' '400': description: Invalid Parameter Error / Send Transaction Error / Contract Revert Error etc content: application/json: schema: - $ref: '#/components/schemas/InvalidParameterErrorResponse' + anyOf: + - $ref: '#/components/schemas/TokenNotExistErrorResponse' + - $ref: '#/components/schemas/NonTransferableTokenErrorResponse' + - $ref: '#/components/schemas/MultipleTokenTransferNotAllowedErrorResponse' + - $ref: '#/components/schemas/InvalidParameterErrorResponse' + title: Response 400 Bulk Transfer Ownership Share Bulk Transfer Post get: tags: - share @@ -9426,10 +9426,12 @@ components: allOf: - $ref: '#/components/schemas/TokenType' description: Token type - transaction_compression: - type: boolean - title: Transaction Compression - description: Transaction compression mode + token_address: + anyOf: + - type: string + - type: 'null' + title: Token Address + description: Token address status: type: integer title: Status @@ -9443,7 +9445,7 @@ components: - upload_id - issuer_address - token_type - - transaction_compression + - token_address - status - created title: BulkTransferUploadResponse @@ -9494,6 +9496,9 @@ components: - 111101 - 111102 - 111201 + - 111301 + - 111401 + - 111501 - 120001 - 120002 - 120101 @@ -9518,6 +9523,9 @@ components: - 121101 - 121102 - 121201 + - 121301 + - 121401 + - 121501 - 130001 - 130101 - 130102 @@ -9528,6 +9536,7 @@ components: - 130401 - 130501 - 130502 + - 130601 - 140001 - 140101 - 140102 @@ -9537,11 +9546,13 @@ components: - 140301 - 140401 - 140402 + - 140501 - 150001 - 150101 - 150201 - 150202 - 150301 + - 150401 - 200001 - 210001 - 210101 @@ -10563,12 +10574,6 @@ components: minItems: 1 title: Transfer List description: List of data to be transferred - transaction_compression: - anyOf: - - type: boolean - - type: 'null' - title: Transaction Compression - description: Transaction compression mode type: object required: - transfer_list @@ -10578,6 +10583,7 @@ components: enum: - '22_12' - '24_06' + - '24_09' title: IbetShareContractVersion IbetShareCreate: properties: @@ -10998,12 +11004,6 @@ components: minItems: 1 title: Transfer List description: List of data to be transferred - transaction_compression: - anyOf: - - type: boolean - - type: 'null' - title: Transaction Compression - description: Transaction compression mode type: object required: - transfer_list @@ -11014,6 +11014,7 @@ components: - '22_12' - '23_12' - '24_06' + - '24_09' title: IbetStraightBondContractVersion IbetStraightBondCreate: properties: @@ -12306,6 +12307,79 @@ components: - locked title: LockedPosition description: Locked Position + MultipleTokenTransferNotAllowedErrorCode: + type: integer + enum: + - 9 + const: 9 + title: MultipleTokenTransferNotAllowedErrorCode + MultipleTokenTransferNotAllowedErrorMetainfo: + properties: + code: + allOf: + - $ref: '#/components/schemas/MultipleTokenTransferNotAllowedErrorCode' + examples: + - 9 + title: + type: string + title: Title + examples: + - MultipleTokenTransferNotAllowedError + type: object + required: + - code + - title + title: MultipleTokenTransferNotAllowedErrorMetainfo + MultipleTokenTransferNotAllowedErrorResponse: + properties: + meta: + $ref: '#/components/schemas/MultipleTokenTransferNotAllowedErrorMetainfo' + detail: + type: string + title: Detail + type: object + required: + - meta + - detail + title: MultipleTokenTransferNotAllowedErrorResponse + description: Transfer operations that do not allow specifying multiple tokens + at once + NonTransferableTokenErrorCode: + type: integer + enum: + - 8 + const: 8 + title: NonTransferableTokenErrorCode + NonTransferableTokenErrorMetainfo: + properties: + code: + allOf: + - $ref: '#/components/schemas/NonTransferableTokenErrorCode' + examples: + - 8 + title: + type: string + title: Title + examples: + - NonTransferableTokenError + type: object + required: + - code + - title + title: NonTransferableTokenErrorMetainfo + NonTransferableTokenErrorResponse: + properties: + meta: + $ref: '#/components/schemas/NonTransferableTokenErrorMetainfo' + detail: + type: string + title: Detail + type: object + required: + - meta + - detail + title: NonTransferableTokenErrorResponse + description: Operations on non-transferable tokens NotificationsListResponse: anyOf: - $ref: '#/components/schemas/IssueErrorNotification' @@ -13237,6 +13311,42 @@ components: - hold_balance - locked_balance title: TokenHoldersCollectionHolder + TokenNotExistErrorCode: + type: integer + enum: + - 7 + const: 7 + title: TokenNotExistErrorCode + TokenNotExistErrorMetainfo: + properties: + code: + allOf: + - $ref: '#/components/schemas/TokenNotExistErrorCode' + examples: + - 7 + title: + type: string + title: Title + examples: + - TokenNotExistError + type: object + required: + - code + - title + title: TokenNotExistErrorMetainfo + TokenNotExistErrorResponse: + properties: + meta: + $ref: '#/components/schemas/TokenNotExistErrorMetainfo' + detail: + type: string + title: Detail + type: object + required: + - meta + - detail + title: TokenNotExistErrorResponse + description: Operations on non-transferable tokens TokenOperationLogResponse: properties: original_contents: diff --git a/migrations/versions/5c13eac558a4_v24_9_0_feature_653.py b/migrations/versions/5c13eac558a4_v24_9_0_feature_653.py new file mode 100644 index 00000000..5577e325 --- /dev/null +++ b/migrations/versions/5c13eac558a4_v24_9_0_feature_653.py @@ -0,0 +1,41 @@ +"""v24_9_0_feature_653 + +Revision ID: 5c13eac558a4 +Revises: 4704529e8fe0 +Create Date: 2024-07-04 20:54:23.011549 + +""" + +from alembic import op +import sqlalchemy as sa + + +from app.database import get_db_schema + +# revision identifiers, used by Alembic. +revision = "5c13eac558a4" +down_revision = "4704529e8fe0" +branch_labels = None +depends_on = None + + +def upgrade(): + op.add_column( + "bulk_transfer_upload", + sa.Column("token_address", sa.String(length=42), nullable=True), + schema=get_db_schema(), + ) + op.drop_column( + "bulk_transfer_upload", "transaction_compression", schema=get_db_schema() + ) + + +def downgrade(): + op.add_column( + "bulk_transfer_upload", + sa.Column( + "transaction_compression", sa.BOOLEAN(), autoincrement=False, nullable=True + ), + schema=get_db_schema(), + ) + op.drop_column("bulk_transfer_upload", "token_address", schema=get_db_schema()) diff --git a/tests/app/model/blockchain/test_PersonalInfo.py b/tests/app/model/blockchain/test_PersonalInfo.py index a84c98af..690508b3 100644 --- a/tests/app/model/blockchain/test_PersonalInfo.py +++ b/tests/app/model/blockchain/test_PersonalInfo.py @@ -668,9 +668,8 @@ async def test_error_3(self, db): } # mock - # NOTE: Ganacheがrevertする際にweb3.pyからraiseされるExceptionはGethと異なる - # ganache: ValueError({'message': 'VM Exception while processing transaction: revert',...}) - # geth: ContractLogicError("execution reverted") + # hardhatがrevertする際にweb3.pyからraiseされるExceptionはGethと異なるためモック化する。 + # geth: ContractLogicError("execution reverted: ") InspectionMock = mock.patch( "web3.eth.async_eth.AsyncEth.call", MagicMock(side_effect=ContractLogicError("execution reverted")), diff --git a/tests/app/model/blockchain/test_TokenList.py b/tests/app/model/blockchain/test_TokenList.py index 88687b28..883acc0d 100755 --- a/tests/app/model/blockchain/test_TokenList.py +++ b/tests/app/model/blockchain/test_TokenList.py @@ -260,9 +260,8 @@ async def test_error_6(self, db, contract_list): ) # mock - # NOTE: Ganacheがrevertする際にweb3.pyからraiseされるExceptionはGethと異なる - # ganache: ValueError({'message': 'VM Exception while processing transaction: revert',...}) - # geth: ContractLogicError("execution reverted") + # hardhatがrevertする際にweb3.pyからraiseされるExceptionはGethと異なるためモック化する。 + # geth: ContractLogicError("execution reverted: ") InspectionMock = mock.patch( "web3.eth.async_eth.AsyncEth.call", MagicMock(side_effect=ContractLogicError("execution reverted: 100001")), diff --git a/tests/app/model/blockchain/test_exchange_IbetSecurityTokenEscrow.py b/tests/app/model/blockchain/test_exchange_IbetSecurityTokenEscrow.py index 4e5a6a72..96912b4c 100644 --- a/tests/app/model/blockchain/test_exchange_IbetSecurityTokenEscrow.py +++ b/tests/app/model/blockchain/test_exchange_IbetSecurityTokenEscrow.py @@ -458,9 +458,8 @@ async def test_error_3(self, db): ) # mock - # NOTE: Ganacheがrevertする際にweb3.pyからraiseされるExceptionはGethと異なる - # ganache: ValueError({'message': 'VM Exception while processing transaction: revert',...}) - # geth: ContractLogicError("execution reverted") + # hardhatがrevertする際にweb3.pyからraiseされるExceptionはGethと異なるためモック化する。 + # geth: ContractLogicError("execution reverted: ") InspectionMock = mock.patch( "web3.eth.async_eth.AsyncEth.call", MagicMock(side_effect=ContractLogicError("execution reverted")), diff --git a/tests/app/model/blockchain/test_token_IbetShare.py b/tests/app/model/blockchain/test_token_IbetShare.py index 66261937..d6c138cf 100644 --- a/tests/app/model/blockchain/test_token_IbetShare.py +++ b/tests/app/model/blockchain/test_token_IbetShare.py @@ -42,10 +42,10 @@ ApproveTransferParams, BulkTransferParams, CancelTransferParams, + ForcedTransferParams, ForceUnlockPrams, LockParams, RedeemParams, - TransferParams, UpdateParams, ) from app.model.db import TokenAttrUpdate, TokenCache @@ -960,9 +960,8 @@ async def test_error_6(self, db): ) # mock - # NOTE: Ganacheがrevertする際にweb3.pyからraiseされるExceptionはGethと異なる - # ganache: ValueError({'message': 'VM Exception while processing transaction: revert',...}) - # geth: ContractLogicError("execution reverted") + # hardhatがrevertする際にweb3.pyからraiseされるExceptionはGethと異なるためモック化する。 + # geth: ContractLogicError("execution reverted: ") InspectionMock = mock.patch( "web3.eth.async_eth.AsyncEth.call", AsyncMock(side_effect=ContractLogicError("execution reverted: 500001")), @@ -980,7 +979,7 @@ async def test_error_6(self, db): assert exc_info.value.args[0] == "Message sender is not contract owner." -class TestTransfer: +class TestForcedTransfer: ########################################################################### # Normal Case ########################################################################### @@ -1017,8 +1016,8 @@ async def test_normal_1(self, db): # transfer _data = {"from_address": from_address, "to_address": to_address, "amount": 10} - _transfer_data = TransferParams(**_data) - await share_contract.transfer( + _transfer_data = ForcedTransferParams(**_data) + await share_contract.forced_transfer( data=_transfer_data, tx_from=from_address, private_key=from_private_key ) @@ -1033,13 +1032,13 @@ async def test_normal_1(self, db): ########################################################################### # - # validation (TransferParams) + # validation (ForcedTransferParams) # required field @pytest.mark.asyncio async def test_error_1(self, db): _data = {} with pytest.raises(ValidationError) as exc_info: - TransferParams(**_data) + ForcedTransferParams(**_data) assert exc_info.value.errors() == [ { "input": {}, @@ -1065,7 +1064,7 @@ async def test_error_1(self, db): ] # - # validation (TransferParams) + # validation (ForcedTransferParams) # invalid parameter @pytest.mark.asyncio async def test_error_2(self, db): @@ -1075,7 +1074,7 @@ async def test_error_2(self, db): "amount": 0, } with pytest.raises(ValidationError) as exc_info: - TransferParams(**_data) + ForcedTransferParams(**_data) assert exc_info.value.errors() == [ { "ctx": {"error": ANY}, @@ -1136,9 +1135,9 @@ async def test_error_3(self, db): # transfer _data = {"from_address": from_address, "to_address": to_address, "amount": 10} - _transfer_data = TransferParams(**_data) + _transfer_data = ForcedTransferParams(**_data) with pytest.raises(SendTransactionError) as exc_info: - await share_contract.transfer( + await share_contract.forced_transfer( data=_transfer_data, tx_from="invalid_tx_from", private_key=from_private_key, @@ -1179,9 +1178,9 @@ async def test_error_4(self, db): # transfer _data = {"from_address": from_address, "to_address": to_address, "amount": 10} - _transfer_data = TransferParams(**_data) + _transfer_data = ForcedTransferParams(**_data) with pytest.raises(SendTransactionError): - await share_contract.transfer( + await share_contract.forced_transfer( data=_transfer_data, tx_from=from_address, private_key="invalid_private_key", @@ -1226,10 +1225,10 @@ async def test_error_5(self, db): # transfer _data = {"from_address": issuer_address, "to_address": to_address, "amount": 10} - _transfer_data = TransferParams(**_data) + _transfer_data = ForcedTransferParams(**_data) with Web3_send_raw_transaction: with pytest.raises(SendTransactionError) as exc_info: - await share_contract.transfer( + await share_contract.forced_transfer( data=_transfer_data, tx_from=issuer_address, private_key=private_key ) assert isinstance(exc_info.value.args[0], TimeExhausted) @@ -1273,10 +1272,10 @@ async def test_error_6(self, db): # transfer _data = {"from_address": issuer_address, "to_address": to_address, "amount": 10} - _transfer_data = TransferParams(**_data) + _transfer_data = ForcedTransferParams(**_data) with Web3_send_raw_transaction: with pytest.raises(SendTransactionError) as exc_info: - await share_contract.transfer( + await share_contract.forced_transfer( data=_transfer_data, tx_from=issuer_address, private_key=private_key ) assert isinstance(exc_info.value.args[0], TransactionNotFound) @@ -1318,7 +1317,7 @@ async def test_error_7(self, db): "to_address": to_address, "amount": 10000000, } - _transfer_data = TransferParams(**_data) + _transfer_data = ForcedTransferParams(**_data) # mock # NOTE: Ganacheがrevertする際にweb3.pyからraiseされるExceptionはGethと異なる @@ -1330,7 +1329,7 @@ async def test_error_7(self, db): ) with InspectionMock, pytest.raises(ContractRevertError) as exc_info: - await share_contract.transfer( + await share_contract.forced_transfer( data=_transfer_data, tx_from=issuer_address, private_key=private_key ) @@ -1338,6 +1337,215 @@ async def test_error_7(self, db): assert exc_info.value.args[0] == "Message sender balance is insufficient." +class TestBulkForcedTransfer: + + ########################################################################### + # Normal Case + ########################################################################### + + # + @pytest.mark.asyncio + async def test_normal_1(self, db): + from_account = config_eth_account("user1") + from_address = from_account.get("address") + from_private_key = decode_keyfile_json( + raw_keyfile_json=from_account.get("keyfile_json"), + password=from_account.get("password").encode("utf-8"), + ) + + to_account = config_eth_account("user2") + to_address = to_account.get("address") + + # deploy token + arguments = [ + "テスト株式", + "TEST", + 10000, + 20000, + 1, + "20211231", + "20211231", + "20221231", + 10000, + ] + share_contract = IbetShareContract() + await share_contract.create( + args=arguments, tx_from=from_address, private_key=from_private_key + ) + + # bulk transfer + _data = {"from_address": from_address, "to_address": to_address, "amount": 10} + transfer_list = [ForcedTransferParams(**_data), ForcedTransferParams(**_data)] + await share_contract.bulk_forced_transfer( + data=transfer_list, tx_from=from_address, private_key=from_private_key + ) + + # assertion + from_balance = await share_contract.get_account_balance(from_address) + to_balance = await share_contract.get_account_balance(to_address) + assert from_balance == arguments[3] - 20 + assert to_balance == 20 + + ########################################################################### + # Error Case + ########################################################################### + + # + # Transaction REVERT + # -> ContractRevertError + @pytest.mark.asyncio + async def test_error_1(self, db): + from_account = config_eth_account("user1") + from_address = from_account.get("address") + from_private_key = decode_keyfile_json( + raw_keyfile_json=from_account.get("keyfile_json"), + password=from_account.get("password").encode("utf-8"), + ) + + to_account = config_eth_account("user2") + to_address = to_account.get("address") + + # deploy token + arguments = [ + "テスト株式", + "TEST", + 10000, + 20000, + 1, + "20211231", + "20211231", + "20221231", + 10000, + ] + share_contract = IbetShareContract() + await share_contract.create( + args=arguments, tx_from=from_address, private_key=from_private_key + ) + + # mock + # hardhatがrevertする際にweb3.pyからraiseされるExceptionはGethと異なるためモック化する。 + # geth: ContractLogicError("execution reverted: ") + InspectionMock = mock.patch( + "web3.eth.async_eth.AsyncEth.call", + AsyncMock(side_effect=ContractLogicError("execution reverted: 110401")), + ) + + # bulk transfer + _data = { + "from_address": from_address, + "to_address": to_address, + "amount": arguments[3] + 1, + } + transfer_list = [ + ForcedTransferParams(**_data), + ] + with InspectionMock, pytest.raises(ContractRevertError) as exc_info: + await share_contract.bulk_forced_transfer( + data=transfer_list, + tx_from=from_address, + private_key=from_private_key, + ) + + # assertion + assert exc_info.value.args[0] == "Message sender balance is insufficient." + + # + # TimeExhausted + # -> SendTransactionError + @pytest.mark.asyncio + async def test_error_2(self, db): + from_account = config_eth_account("user1") + from_address = from_account.get("address") + from_private_key = decode_keyfile_json( + raw_keyfile_json=from_account.get("keyfile_json"), + password=from_account.get("password").encode("utf-8"), + ) + + to_account = config_eth_account("user2") + to_address = to_account.get("address") + + # deploy token + arguments = [ + "テスト株式", + "TEST", + 10000, + 20000, + 1, + "20211231", + "20211231", + "20221231", + 10000, + ] + share_contract = IbetShareContract() + await share_contract.create( + args=arguments, tx_from=from_address, private_key=from_private_key + ) + + # mock + Web3_send_raw_transaction = patch( + target="web3.eth.async_eth.AsyncEth.wait_for_transaction_receipt", + side_effect=TimeExhausted, + ) + + # bulk transfer + _data = {"from_address": from_address, "to_address": to_address, "amount": 10} + transfer_list = [ForcedTransferParams(**_data), ForcedTransferParams(**_data)] + with Web3_send_raw_transaction: + with pytest.raises(SendTransactionError) as exc_info: + await share_contract.bulk_forced_transfer( + data=transfer_list, + tx_from=from_address, + private_key=from_private_key, + ) + # assertion + assert isinstance(exc_info.value.args[0], TimeExhausted) + + # + # Invalid tx_from + # -> SendTransactionError + @pytest.mark.asyncio + async def test_error_3(self, db): + from_account = config_eth_account("user1") + from_address = from_account.get("address") + from_private_key = decode_keyfile_json( + raw_keyfile_json=from_account.get("keyfile_json"), + password=from_account.get("password").encode("utf-8"), + ) + + to_account = config_eth_account("user2") + to_address = to_account.get("address") + + # deploy token + arguments = [ + "テスト株式", + "TEST", + 10000, + 20000, + 1, + "20211231", + "20211231", + "20221231", + 10000, + ] + share_contract = IbetShareContract() + await share_contract.create( + args=arguments, tx_from=from_address, private_key=from_private_key + ) + + # bulk transfer + _data = {"from_address": from_address, "to_address": to_address, "amount": 10} + transfer_list = [ForcedTransferParams(**_data), ForcedTransferParams(**_data)] + with pytest.raises(SendTransactionError) as exc_info: + await share_contract.bulk_forced_transfer( + data=transfer_list, + tx_from="invalid_tx_from", # invalid + private_key=from_private_key, + ) + + assert isinstance(exc_info.value.args[0], InvalidAddress) + assert exc_info.match("ENS name: 'invalid_tx_from' is invalid.") + + class TestBulkTransfer: ########################################################################### # Normal Case @@ -1619,9 +1827,8 @@ async def test_error_5_1(self, db): ) # mock - # NOTE: Ganacheがrevertする際にweb3.pyからraiseされるExceptionはGethと異なる - # ganache: ValueError({'message': 'VM Exception while processing transaction: revert',...}) - # geth: ContractLogicError("execution reverted: ") + # hardhatがrevertする際にweb3.pyからraiseされるExceptionはGethと異なるためモック化する。 + # geth: ContractLogicError("execution reverted: ") InspectionMock = mock.patch( "web3.eth.async_eth.AsyncEth.call", AsyncMock(side_effect=ContractLogicError("execution reverted: 120502")), @@ -1972,20 +2179,236 @@ async def test_error_5(self, db): side_effect=TimeExhausted, ) - # additional issue - _data = {"account_address": issuer_address, "amount": 10} - _add_data = AdditionalIssueParams(**_data) - with Web3_send_raw_transaction: - with pytest.raises(SendTransactionError) as exc_info: - await share_contract.additional_issue( - data=_add_data, tx_from=issuer_address, private_key=private_key - ) - assert exc_info.type(SendTransactionError(TimeExhausted)) + # additional issue + _data = {"account_address": issuer_address, "amount": 10} + _add_data = AdditionalIssueParams(**_data) + with Web3_send_raw_transaction: + with pytest.raises(SendTransactionError) as exc_info: + await share_contract.additional_issue( + data=_add_data, tx_from=issuer_address, private_key=private_key + ) + assert exc_info.type(SendTransactionError(TimeExhausted)) + + # + # Error + @pytest.mark.asyncio + async def test_error_6(self, db): + test_account = config_eth_account("user1") + issuer_address = test_account.get("address") + private_key = decode_keyfile_json( + raw_keyfile_json=test_account.get("keyfile_json"), + password=test_account.get("password").encode("utf-8"), + ) + + # deploy token + arguments = [ + "テスト株式", + "TEST", + 10000, + 20000, + 1, + "20211231", + "20211231", + "20221231", + 10000, + ] + share_contract = IbetShareContract() + await share_contract.create( + args=arguments, tx_from=issuer_address, private_key=private_key + ) + + # mock + Web3_send_raw_transaction = patch( + target="web3.eth.async_eth.AsyncEth.wait_for_transaction_receipt", + side_effect=TransactionNotFound(message=""), + ) + + # additional issue + _data = {"account_address": issuer_address, "amount": 10} + _add_data = AdditionalIssueParams(**_data) + with Web3_send_raw_transaction: + with pytest.raises(SendTransactionError) as exc_info: + await share_contract.additional_issue( + data=_add_data, tx_from=issuer_address, private_key=private_key + ) + assert isinstance(exc_info.value.args[0], TransactionNotFound) + + # + # Transaction REVERT(not owner) + @pytest.mark.asyncio + async def test_error_7(self, db): + test_account = config_eth_account("user1") + issuer_address = test_account.get("address") + user_account = config_eth_account("user2") + user_address = user_account.get("address") + issuer_private_key = decode_keyfile_json( + raw_keyfile_json=test_account.get("keyfile_json"), + password=test_account.get("password").encode("utf-8"), + ) + user_private_key = decode_keyfile_json( + raw_keyfile_json=user_account.get("keyfile_json"), + password=user_account.get("password").encode("utf-8"), + ) + + # deploy token + arguments = [ + "テスト株式", + "TEST", + 10000, + 20000, + 1, + "20211231", + "20211231", + "20221231", + 10000, + ] + share_contract = IbetShareContract() + await share_contract.create( + args=arguments, tx_from=issuer_address, private_key=issuer_private_key + ) + + # additional issue + _data = {"account_address": issuer_address, "amount": 10} + _add_data = AdditionalIssueParams(**_data) + pre_datetime = datetime.now(UTC).replace(tzinfo=None) + + # mock + # hardhatがrevertする際にweb3.pyからraiseされるExceptionはGethと異なるためモック化する。 + # geth: ContractLogicError("execution reverted: ") + InspectionMock = mock.patch( + "web3.eth.async_eth.AsyncEth.call", + AsyncMock(side_effect=ContractLogicError("execution reverted: 500001")), + ) + + with InspectionMock, pytest.raises(ContractRevertError) as exc_info: + await share_contract.additional_issue( + data=_add_data, tx_from=user_address, private_key=user_private_key + ) + + # assertion + assert exc_info.value.args[0] == "Message sender is not contract owner." + + +class TestBulkAdditionalIssue: + + ########################################################################### + # Normal Case + ########################################################################### + + # + @pytest.mark.asyncio + async def test_normal_1(self, db): + test_account = config_eth_account("user1") + issuer_address = test_account.get("address") + private_key = decode_keyfile_json( + raw_keyfile_json=test_account.get("keyfile_json"), + password=test_account.get("password").encode("utf-8"), + ) + + # deploy token + arguments = [ + "テスト株式", + "TEST", + 10000, + 20000, + 1, + "20211231", + "20211231", + "20221231", + 10000, + ] + share_contract = IbetShareContract() + contract_address, abi, tx_hash = await share_contract.create( + args=arguments, tx_from=issuer_address, private_key=private_key + ) + + # additional issue + _data = {"account_address": issuer_address, "amount": 10} + _add_data = [AdditionalIssueParams(**_data), AdditionalIssueParams(**_data)] + pre_datetime = datetime.now(UTC).replace(tzinfo=None) + await share_contract.bulk_additional_issue( + data=_add_data, tx_from=issuer_address, private_key=private_key + ) + + # assertion + share_contract_attr = await share_contract.get() + assert share_contract_attr.total_supply == arguments[3] + 20 + + balance = await share_contract.get_account_balance(issuer_address) + assert balance == arguments[3] + 20 + + _token_attr_update = db.scalars(select(TokenAttrUpdate).limit(1)).first() + assert _token_attr_update.id == 1 + assert _token_attr_update.token_address == contract_address + assert _token_attr_update.updated_datetime > pre_datetime + + ########################################################################### + # Error Case + ########################################################################### + + # + # Transaction REVERT + # -> ContractRevertError + @pytest.mark.asyncio + async def test_error_1(self, db): + test_account = config_eth_account("user1") + issuer_address = test_account.get("address") + user_account = config_eth_account("user2") + user_address = user_account.get("address") + issuer_private_key = decode_keyfile_json( + raw_keyfile_json=test_account.get("keyfile_json"), + password=test_account.get("password").encode("utf-8"), + ) + user_private_key = decode_keyfile_json( + raw_keyfile_json=user_account.get("keyfile_json"), + password=user_account.get("password").encode("utf-8"), + ) + + # deploy token + arguments = [ + "テスト株式", + "TEST", + 10000, + 20000, + 1, + "20211231", + "20211231", + "20221231", + 10000, + ] + share_contract = IbetShareContract() + await share_contract.create( + args=arguments, tx_from=issuer_address, private_key=issuer_private_key + ) + + # additional issue + _data = {"account_address": issuer_address, "amount": 10} + _add_data = [ + AdditionalIssueParams(**_data), + AdditionalIssueParams(**_data), + ] + + # mock + # hardhatがrevertする際にweb3.pyからraiseされるExceptionはGethと異なるためモック化する。 + # geth: ContractLogicError("execution reverted: ") + InspectionMock = mock.patch( + "web3.eth.async_eth.AsyncEth.call", + AsyncMock(side_effect=ContractLogicError("execution reverted: 500001")), + ) + + with InspectionMock, pytest.raises(ContractRevertError) as exc_info: + await share_contract.bulk_additional_issue( + data=_add_data, tx_from=user_address, private_key=user_private_key + ) + + # assertion + assert exc_info.value.args[0] == "Message sender is not contract owner." - # - # Error + # + # TimeExhausted + # -> SendTransactionError @pytest.mark.asyncio - async def test_error_6(self, db): + async def test_error_2(self, db): test_account = config_eth_account("user1") issuer_address = test_account.get("address") private_key = decode_keyfile_json( @@ -2013,35 +2436,30 @@ async def test_error_6(self, db): # mock Web3_send_raw_transaction = patch( target="web3.eth.async_eth.AsyncEth.wait_for_transaction_receipt", - side_effect=TransactionNotFound(message=""), + side_effect=TimeExhausted, ) # additional issue _data = {"account_address": issuer_address, "amount": 10} - _add_data = AdditionalIssueParams(**_data) + _add_data = [AdditionalIssueParams(**_data), AdditionalIssueParams(**_data)] with Web3_send_raw_transaction: with pytest.raises(SendTransactionError) as exc_info: - await share_contract.additional_issue( + await share_contract.bulk_additional_issue( data=_add_data, tx_from=issuer_address, private_key=private_key ) - assert isinstance(exc_info.value.args[0], TransactionNotFound) + assert exc_info.type(SendTransactionError(TimeExhausted)) - # - # Transaction REVERT(not owner) + # + # Invalid tx_from + # -> SendTransactionError @pytest.mark.asyncio - async def test_error_7(self, db): + async def test_error_3(self, db): test_account = config_eth_account("user1") issuer_address = test_account.get("address") - user_account = config_eth_account("user2") - user_address = user_account.get("address") - issuer_private_key = decode_keyfile_json( + private_key = decode_keyfile_json( raw_keyfile_json=test_account.get("keyfile_json"), password=test_account.get("password").encode("utf-8"), ) - user_private_key = decode_keyfile_json( - raw_keyfile_json=user_account.get("keyfile_json"), - password=user_account.get("password").encode("utf-8"), - ) # deploy token arguments = [ @@ -2057,30 +2475,21 @@ async def test_error_7(self, db): ] share_contract = IbetShareContract() await share_contract.create( - args=arguments, tx_from=issuer_address, private_key=issuer_private_key + args=arguments, tx_from=issuer_address, private_key=private_key ) # additional issue _data = {"account_address": issuer_address, "amount": 10} - _add_data = AdditionalIssueParams(**_data) - pre_datetime = datetime.now(UTC).replace(tzinfo=None) - - # mock - # NOTE: Ganacheがrevertする際にweb3.pyからraiseされるExceptionはGethと異なる - # ganache: ValueError({'message': 'VM Exception while processing transaction: revert',...}) - # geth: ContractLogicError("execution reverted") - InspectionMock = mock.patch( - "web3.eth.async_eth.AsyncEth.call", - AsyncMock(side_effect=ContractLogicError("execution reverted: 500001")), - ) - - with InspectionMock, pytest.raises(ContractRevertError) as exc_info: - await share_contract.additional_issue( - data=_add_data, tx_from=user_address, private_key=user_private_key + _add_data = [ + AdditionalIssueParams(**_data), + AdditionalIssueParams(**_data), + ] + with pytest.raises(SendTransactionError) as exc_info: + await share_contract.bulk_additional_issue( + data=_add_data, tx_from="invalid_tx_from", private_key=private_key ) - - # assertion - assert exc_info.value.args[0] == "Message sender is not contract owner." + assert isinstance(exc_info.value.args[0], InvalidAddress) + assert exc_info.match("ENS name: 'invalid_tx_from' is invalid.") class TestRedeem: @@ -2393,9 +2802,8 @@ async def test_error_7(self, db): pre_datetime = datetime.now(UTC).replace(tzinfo=None) # mock - # NOTE: Ganacheがrevertする際にweb3.pyからraiseされるExceptionはGethと異なる - # ganache: ValueError({'message': 'VM Exception while processing transaction: revert',...}) - # geth: ContractLogicError("execution reverted") + # hardhatがrevertする際にweb3.pyからraiseされるExceptionはGethと異なるためモック化する。 + # geth: ContractLogicError("execution reverted: ") InspectionMock = mock.patch( "web3.eth.async_eth.AsyncEth.call", AsyncMock(side_effect=ContractLogicError("execution reverted: 111102")), @@ -2413,6 +2821,200 @@ async def test_error_7(self, db): ) +class TestBulkRedeem: + + ########################################################################### + # Normal Case + ########################################################################### + + # + @pytest.mark.asyncio + async def test_normal_1(self, db): + test_account = config_eth_account("user1") + issuer_address = test_account.get("address") + private_key = decode_keyfile_json( + raw_keyfile_json=test_account.get("keyfile_json"), + password=test_account.get("password").encode("utf-8"), + ) + + # deploy token + arguments = [ + "テスト株式", + "TEST", + 10000, + 20000, + 1, + "20211231", + "20211231", + "20221231", + 10000, + ] + share_contract = IbetShareContract() + contract_address, abi, tx_hash = await share_contract.create( + args=arguments, tx_from=issuer_address, private_key=private_key + ) + + # redeem + _data = {"account_address": issuer_address, "amount": 10} + _add_data = [RedeemParams(**_data), RedeemParams(**_data)] + pre_datetime = datetime.now(UTC).replace(tzinfo=None) + await share_contract.bulk_redeem( + data=_add_data, tx_from=issuer_address, private_key=private_key + ) + + # assertion + share_contract_attr = await share_contract.get() + assert share_contract_attr.total_supply == arguments[3] - 20 + + balance = await share_contract.get_account_balance(issuer_address) + assert balance == arguments[3] - 20 + + _token_attr_update = db.scalars(select(TokenAttrUpdate).limit(1)).first() + assert _token_attr_update.id == 1 + assert _token_attr_update.token_address == contract_address + assert _token_attr_update.updated_datetime > pre_datetime + + ########################################################################### + # Error Case + ########################################################################### + + # + # Transaction REVERT + # -> ContractRevertError + @pytest.mark.asyncio + async def test_error_1(self, db): + test_account = config_eth_account("user1") + issuer_address = test_account.get("address") + private_key = decode_keyfile_json( + raw_keyfile_json=test_account.get("keyfile_json"), + password=test_account.get("password").encode("utf-8"), + ) + + # deploy token + arguments = [ + "テスト株式", + "TEST", + 10000, + 20000, + 1, + "20211231", + "20211231", + "20221231", + 10000, + ] + share_contract = IbetShareContract() + await share_contract.create( + args=arguments, tx_from=issuer_address, private_key=private_key + ) + + # redeem + _data = {"account_address": issuer_address, "amount": 100_000_000} + _add_data = [RedeemParams(**_data), RedeemParams(**_data)] + + # mock + # hardhatがrevertする際にweb3.pyからraiseされるExceptionはGethと異なるためモック化する。 + # geth: ContractLogicError("execution reverted: ") + InspectionMock = mock.patch( + "web3.eth.async_eth.AsyncEth.call", + AsyncMock(side_effect=ContractLogicError("execution reverted: 111102")), + ) + + with InspectionMock, pytest.raises(ContractRevertError) as exc_info: + await share_contract.bulk_redeem( + data=_add_data, tx_from=issuer_address, private_key=private_key + ) + + # assertion + assert ( + exc_info.value.args[0] + == "Redeem amount is less than target address balance." + ) + + # + # TimeExhausted + # -> SendTransactionError + @pytest.mark.asyncio + async def test_error_2(self, db): + test_account = config_eth_account("user1") + issuer_address = test_account.get("address") + private_key = decode_keyfile_json( + raw_keyfile_json=test_account.get("keyfile_json"), + password=test_account.get("password").encode("utf-8"), + ) + + # deploy token + arguments = [ + "テスト株式", + "TEST", + 10000, + 20000, + 1, + "20211231", + "20211231", + "20221231", + 10000, + ] + share_contract = IbetShareContract() + await share_contract.create( + args=arguments, tx_from=issuer_address, private_key=private_key + ) + + # mock + Web3_send_raw_transaction = patch( + target="web3.eth.async_eth.AsyncEth.wait_for_transaction_receipt", + side_effect=TimeExhausted, + ) + + # redeem + _data = {"account_address": issuer_address, "amount": 10} + _add_data = [RedeemParams(**_data), RedeemParams(**_data)] + with Web3_send_raw_transaction: + with pytest.raises(SendTransactionError) as exc_info: + await share_contract.bulk_redeem( + data=_add_data, tx_from=issuer_address, private_key=private_key + ) + assert exc_info.type(SendTransactionError(TimeExhausted)) + + # + # Invalid tx_from + # -> SendTransactionError + @pytest.mark.asyncio + async def test_error_3(self, db): + test_account = config_eth_account("user1") + issuer_address = test_account.get("address") + private_key = decode_keyfile_json( + raw_keyfile_json=test_account.get("keyfile_json"), + password=test_account.get("password").encode("utf-8"), + ) + + # deploy token + arguments = [ + "テスト株式", + "TEST", + 10000, + 20000, + 1, + "20211231", + "20211231", + "20221231", + 10000, + ] + share_contract = IbetShareContract() + await share_contract.create( + args=arguments, tx_from=issuer_address, private_key=private_key + ) + + # redeem + _data = {"account_address": issuer_address, "amount": 10} + _add_data = [RedeemParams(**_data), RedeemParams(**_data)] + with pytest.raises(SendTransactionError) as exc_info: + await share_contract.bulk_redeem( + data=_add_data, tx_from="invalid_tx_from", private_key=private_key + ) + assert isinstance(exc_info.value.args[0], InvalidAddress) + assert exc_info.match("ENS name: 'invalid_tx_from' is invalid.") + + class TestGetAccountBalance: ########################################################################### # Normal Case @@ -2961,9 +3563,8 @@ async def test_error_5(self, db): # This would be failed. # mock - # NOTE: Ganacheがrevertする際にweb3.pyからraiseされるExceptionはGethと異なる - # ganache: ValueError({'message': 'VM Exception while processing transaction: revert',...}) - # geth: ContractLogicError("execution reverted") + # hardhatがrevertする際にweb3.pyからraiseされるExceptionはGethと異なるためモック化する。 + # geth: ContractLogicError("execution reverted: ") InspectionMock = mock.patch( "web3.eth.async_eth.AsyncEth.call", AsyncMock(side_effect=ContractLogicError("execution reverted: 120902")), @@ -3316,9 +3917,8 @@ async def test_error_5(self, db): cancel_data = approve_data # mock - # NOTE: Ganacheがrevertする際にweb3.pyからraiseされるExceptionはGethと異なる - # ganache: ValueError({'message': 'VM Exception while processing transaction: revert',...}) - # geth: ContractLogicError("execution reverted") + # hardhatがrevertする際にweb3.pyからraiseされるExceptionはGethと異なるためモック化する。 + # geth: ContractLogicError("execution reverted: ") InspectionMock = mock.patch( "web3.eth.async_eth.AsyncEth.call", AsyncMock(side_effect=ContractLogicError("execution reverted: 120802")), @@ -3676,9 +4276,8 @@ async def test_error_5(self, db): ) # mock - # NOTE: Ganacheがrevertする際にweb3.pyからraiseされるExceptionはGethと異なる - # ganache: ValueError({'message': 'VM Exception while processing transaction: revert',...}) - # geth: ContractLogicError("execution reverted") + # hardhatがrevertする際にweb3.pyからraiseされるExceptionはGethと異なるためモック化する。 + # geth: ContractLogicError("execution reverted: ") InspectionMock = mock.patch( "web3.eth.async_eth.AsyncEth.call", AsyncMock(side_effect=ContractLogicError("execution reverted: 110002")), @@ -4156,9 +4755,8 @@ async def test_error_5(self, db): ) # mock - # NOTE: Ganacheがrevertする際にweb3.pyからraiseされるExceptionはGethと異なる - # ganache: ValueError({'message': 'VM Exception while processing transaction: revert',...}) - # geth: ContractLogicError("execution reverted") + # hardhatがrevertする際にweb3.pyからraiseされるExceptionはGethと異なるためモック化する。 + # geth: ContractLogicError("execution reverted: ") InspectionMock = mock.patch( "web3.eth.async_eth.AsyncEth.call", AsyncMock(side_effect=ContractLogicError("execution reverted: 111201")), diff --git a/tests/app/model/blockchain/test_token_IbetStraightBond.py b/tests/app/model/blockchain/test_token_IbetStraightBond.py index cd2006ee..980881e1 100644 --- a/tests/app/model/blockchain/test_token_IbetStraightBond.py +++ b/tests/app/model/blockchain/test_token_IbetStraightBond.py @@ -21,7 +21,7 @@ from binascii import Error from datetime import UTC, datetime, timedelta from unittest import mock -from unittest.mock import ANY, MagicMock, patch +from unittest.mock import ANY, AsyncMock, MagicMock, patch import pytest from eth_keyfile import decode_keyfile_json @@ -42,10 +42,10 @@ ApproveTransferParams, BulkTransferParams, CancelTransferParams, + ForcedTransferParams, ForceUnlockPrams, LockParams, RedeemParams, - TransferParams, UpdateParams, ) from app.model.db import TokenAttrUpdate, TokenCache @@ -1179,9 +1179,8 @@ async def test_error_6(self, db): _add_data = UpdateParams(**_data) # mock - # NOTE: Ganacheがrevertする際にweb3.pyからraiseされるExceptionはGethと異なる - # ganache: ValueError({'message': 'VM Exception while processing transaction: revert',...}) - # geth: ContractLogicError("execution reverted") + # hardhatがrevertする際にweb3.pyからraiseされるExceptionはGethと異なるためモック化する。 + # geth: ContractLogicError("execution reverted: ") InspectionMock = mock.patch( "web3.eth.async_eth.AsyncEth.call", MagicMock(side_effect=ContractLogicError("execution reverted: 500001")), @@ -1196,7 +1195,7 @@ async def test_error_6(self, db): assert exc_info.value.args[0] == "Message sender is not contract owner." -class TestTransfer: +class TestForcedTransfer: ########################################################################### # Normal Case ########################################################################### @@ -1235,8 +1234,8 @@ async def test_normal_1(self, db): # transfer _data = {"from_address": from_address, "to_address": to_address, "amount": 10} - _transfer_data = TransferParams(**_data) - await bond_contract.transfer( + _transfer_data = ForcedTransferParams(**_data) + await bond_contract.forced_transfer( data=_transfer_data, tx_from=from_address, private_key=from_private_key ) @@ -1257,7 +1256,7 @@ async def test_normal_1(self, db): async def test_error_1(self, db): _data = {} with pytest.raises(ValidationError) as exc_info: - TransferParams(**_data) + ForcedTransferParams(**_data) assert exc_info.value.errors() == [ { "input": {}, @@ -1294,7 +1293,7 @@ async def test_error_2(self, db): "amount": 0, } with pytest.raises(ValidationError) as exc_info: - TransferParams(**_data) + ForcedTransferParams(**_data) assert exc_info.value.errors() == [ { "ctx": {"error": ANY}, @@ -1357,9 +1356,9 @@ async def test_error_3(self, db): # transfer _data = {"from_address": from_address, "to_address": to_address, "amount": 10} - _transfer_data = TransferParams(**_data) + _transfer_data = ForcedTransferParams(**_data) with pytest.raises(SendTransactionError) as exc_info: - await bond_contract.transfer( + await bond_contract.forced_transfer( data=_transfer_data, tx_from="invalid_tx_from", private_key=from_private_key, @@ -1402,9 +1401,9 @@ async def test_error_4(self, db): # transfer _data = {"from_address": from_address, "to_address": to_address, "amount": 10} - _transfer_data = TransferParams(**_data) + _transfer_data = ForcedTransferParams(**_data) with pytest.raises(SendTransactionError) as exc_info: - await bond_contract.transfer( + await bond_contract.forced_transfer( data=_transfer_data, tx_from=from_address, private_key="invalid_private_key", @@ -1453,10 +1452,10 @@ async def test_error_5(self, db): # transfer _data = {"from_address": issuer_address, "to_address": to_address, "amount": 10} - _transfer_data = TransferParams(**_data) + _transfer_data = ForcedTransferParams(**_data) with Web3_send_raw_transaction: with pytest.raises(SendTransactionError) as exc_info: - await bond_contract.transfer( + await bond_contract.forced_transfer( data=_transfer_data, tx_from=issuer_address, private_key=private_key ) assert isinstance(exc_info.value.args[0], TimeExhausted) @@ -1502,10 +1501,10 @@ async def test_error_6(self, db): # transfer _data = {"from_address": issuer_address, "to_address": to_address, "amount": 10} - _transfer_data = TransferParams(**_data) + _transfer_data = ForcedTransferParams(**_data) with Web3_send_raw_transaction: with pytest.raises(SendTransactionError) as exc_info: - await bond_contract.transfer( + await bond_contract.forced_transfer( data=_transfer_data, tx_from=issuer_address, private_key=private_key ) assert isinstance(exc_info.value.args[0], TransactionNotFound) @@ -1549,7 +1548,7 @@ async def test_error_7(self, db): "to_address": to_address, "amount": 10000000, } - _transfer_data = TransferParams(**_data) + _transfer_data = ForcedTransferParams(**_data) # mock # NOTE: Ganacheがrevertする際にweb3.pyからraiseされるExceptionはGethと異なる @@ -1561,7 +1560,7 @@ async def test_error_7(self, db): ) with InspectionMock, pytest.raises(ContractRevertError) as exc_info: - await bond_contract.transfer( + await bond_contract.forced_transfer( data=_transfer_data, tx_from=issuer_address, private_key=private_key ) @@ -1569,6 +1568,222 @@ async def test_error_7(self, db): assert exc_info.value.args[0] == "Message sender balance is insufficient." +class TestBulkForcedTransfer: + + ########################################################################### + # Normal Case + ########################################################################### + + # + @pytest.mark.asyncio + async def test_normal_1(self, db): + from_account = config_eth_account("user1") + from_address = from_account.get("address") + from_private_key = decode_keyfile_json( + raw_keyfile_json=from_account.get("keyfile_json"), + password=from_account.get("password").encode("utf-8"), + ) + + to_account = config_eth_account("user2") + to_address = to_account.get("address") + + # deploy token + arguments = [ + "テスト債券", + "TEST", + 10000, + 20000, + "JPY", + "20211231", + 30000, + "JPY", + "20211231", + "リターン内容", + "発行目的", + ] + bond_contract = IbetStraightBondContract() + await bond_contract.create( + args=arguments, tx_from=from_address, private_key=from_private_key + ) + + # bulk transfer + _data = {"from_address": from_address, "to_address": to_address, "amount": 10} + transfer_list = [ForcedTransferParams(**_data), ForcedTransferParams(**_data)] + await bond_contract.bulk_forced_transfer( + data=transfer_list, tx_from=from_address, private_key=from_private_key + ) + + # assertion + from_balance = await bond_contract.get_account_balance(from_address) + to_balance = await bond_contract.get_account_balance(to_address) + assert from_balance == arguments[2] - 20 + assert to_balance == 20 + + ########################################################################### + # Error Case + ########################################################################### + + # + # ContractRevertError + @pytest.mark.asyncio + async def test_error_1(self, db): + from_account = config_eth_account("user1") + from_address = from_account.get("address") + from_private_key = decode_keyfile_json( + raw_keyfile_json=from_account.get("keyfile_json"), + password=from_account.get("password").encode("utf-8"), + ) + + to_account = config_eth_account("user2") + to_address = to_account.get("address") + + # deploy token + arguments = [ + "テスト債券", + "TEST", + 10000, + 20000, + "JPY", + "20211231", + 30000, + "JPY", + "20211231", + "リターン内容", + "発行目的", + ] + bond_contract = IbetStraightBondContract() + await bond_contract.create( + args=arguments, tx_from=from_address, private_key=from_private_key + ) + + # mock + # hardhatがrevertする際にweb3.pyからraiseされるExceptionはGethと異なるためモック化する。 + # geth: ContractLogicError("execution reverted: ") + InspectionMock = mock.patch( + "web3.eth.async_eth.AsyncEth.call", + AsyncMock(side_effect=ContractLogicError("execution reverted: 110401")), + ) + + # bulk transfer + _data = { + "from_address": from_address, + "to_address": to_address, + "amount": arguments[3] + 1, + } + transfer_list = [ + ForcedTransferParams(**_data), + ] + with InspectionMock, pytest.raises(ContractRevertError) as exc_info: + await bond_contract.bulk_forced_transfer( + data=transfer_list, + tx_from=from_address, + private_key=from_private_key, + ) + + # assertion + assert exc_info.value.args[0] == "Message sender balance is insufficient." + + # + # TimeExhausted + # -> SendTransactionError + @pytest.mark.asyncio + async def test_error_2(self, db): + from_account = config_eth_account("user1") + from_address = from_account.get("address") + from_private_key = decode_keyfile_json( + raw_keyfile_json=from_account.get("keyfile_json"), + password=from_account.get("password").encode("utf-8"), + ) + + to_account = config_eth_account("user2") + to_address = to_account.get("address") + + # deploy token + arguments = [ + "テスト債券", + "TEST", + 10000, + 20000, + "JPY", + "20211231", + 30000, + "JPY", + "20211231", + "リターン内容", + "発行目的", + ] + bond_contract = IbetStraightBondContract() + await bond_contract.create( + args=arguments, tx_from=from_address, private_key=from_private_key + ) + + # mock + Web3_send_raw_transaction = patch( + target="web3.eth.async_eth.AsyncEth.wait_for_transaction_receipt", + side_effect=TimeExhausted, + ) + + # bulk transfer + _data = {"from_address": from_address, "to_address": to_address, "amount": 10} + transfer_list = [ForcedTransferParams(**_data), ForcedTransferParams(**_data)] + with Web3_send_raw_transaction: + with pytest.raises(SendTransactionError) as exc_info: + await bond_contract.bulk_forced_transfer( + data=transfer_list, + tx_from=from_address, + private_key=from_private_key, + ) + # assertion + assert isinstance(exc_info.value.args[0], TimeExhausted) + + # + # Invalid tx_from + # -> SendTransactionError + @pytest.mark.asyncio + async def test_error_3(self, db): + from_account = config_eth_account("user1") + from_address = from_account.get("address") + from_private_key = decode_keyfile_json( + raw_keyfile_json=from_account.get("keyfile_json"), + password=from_account.get("password").encode("utf-8"), + ) + + to_account = config_eth_account("user2") + to_address = to_account.get("address") + + # deploy token + arguments = [ + "テスト債券", + "TEST", + 10000, + 20000, + "JPY", + "20211231", + 30000, + "JPY", + "20211231", + "リターン内容", + "発行目的", + ] + bond_contract = IbetStraightBondContract() + await bond_contract.create( + args=arguments, tx_from=from_address, private_key=from_private_key + ) + + # bulk transfer + _data = {"from_address": from_address, "to_address": to_address, "amount": 10} + transfer_list = [ForcedTransferParams(**_data), ForcedTransferParams(**_data)] + with pytest.raises(SendTransactionError) as exc_info: + await bond_contract.bulk_forced_transfer( + data=transfer_list, + tx_from="invalid_tx_from", # invalid + private_key=from_private_key, + ) + + assert isinstance(exc_info.value.args[0], InvalidAddress) + assert exc_info.match("ENS name: 'invalid_tx_from' is invalid.") + + class TestBulkTransfer: ########################################################################### # Normal Case @@ -2233,10 +2448,234 @@ async def test_error_5(self, db): ) assert exc_info.type(SendTransactionError(TimeExhausted)) - # - # Error + # + # Error + @pytest.mark.asyncio + async def test_error_6(self, db): + test_account = config_eth_account("user1") + issuer_address = test_account.get("address") + private_key = decode_keyfile_json( + raw_keyfile_json=test_account.get("keyfile_json"), + password=test_account.get("password").encode("utf-8"), + ) + + # deploy token + arguments = [ + "テスト債券", + "TEST", + 10000, + 20000, + "JPY", + "20211231", + 30000, + "JPY", + "20211231", + "リターン内容", + "発行目的", + ] + bond_contract = IbetStraightBondContract() + await bond_contract.create( + args=arguments, tx_from=issuer_address, private_key=private_key + ) + + # mock + Web3_send_raw_transaction = patch( + target="web3.eth.async_eth.AsyncEth.wait_for_transaction_receipt", + side_effect=TransactionNotFound(message=""), + ) + + # additional issue + _data = {"account_address": issuer_address, "amount": 10} + _add_data = AdditionalIssueParams(**_data) + with Web3_send_raw_transaction: + with pytest.raises(SendTransactionError) as exc_info: + await bond_contract.additional_issue( + data=_add_data, tx_from=issuer_address, private_key=private_key + ) + assert isinstance(exc_info.value.args[0], TransactionNotFound) + + # + # Transaction REVERT(not owner) + @pytest.mark.asyncio + async def test_error_7(self, db): + test_account = config_eth_account("user1") + issuer_address = test_account.get("address") + user_account = config_eth_account("user2") + user_address = user_account.get("address") + issuer_private_key = decode_keyfile_json( + raw_keyfile_json=test_account.get("keyfile_json"), + password=test_account.get("password").encode("utf-8"), + ) + user_private_key = decode_keyfile_json( + raw_keyfile_json=user_account.get("keyfile_json"), + password=user_account.get("password").encode("utf-8"), + ) + + # deploy token + arguments = [ + "テスト債券", + "TEST", + 10000, + 20000, + "JPY", + "20211231", + 30000, + "JPY", + "20211231", + "リターン内容", + "発行目的", + ] + bond_contract = IbetStraightBondContract() + await bond_contract.create( + args=arguments, tx_from=issuer_address, private_key=issuer_private_key + ) + + # additional issue + _data = {"account_address": issuer_address, "amount": 10} + _add_data = AdditionalIssueParams(**_data) + pre_datetime = datetime.now(UTC).replace(tzinfo=None) + + # mock + # hardhatがrevertする際にweb3.pyからraiseされるExceptionはGethと異なるためモック化する。 + # geth: ContractLogicError("execution reverted: ") + InspectionMock = mock.patch( + "web3.eth.async_eth.AsyncEth.call", + MagicMock(side_effect=ContractLogicError("execution reverted: 500001")), + ) + + with InspectionMock, pytest.raises(ContractRevertError) as exc_info: + await bond_contract.additional_issue( + data=_add_data, tx_from=user_address, private_key=user_private_key + ) + + # assertion + assert exc_info.value.args[0] == "Message sender is not contract owner." + + +class TestBulkAdditionalIssue: + + ########################################################################### + # Normal Case + ########################################################################### + + # + @pytest.mark.asyncio + async def test_normal_1(self, db): + test_account = config_eth_account("user1") + issuer_address = test_account.get("address") + private_key = decode_keyfile_json( + raw_keyfile_json=test_account.get("keyfile_json"), + password=test_account.get("password").encode("utf-8"), + ) + + # deploy token + arguments = [ + "テスト債券", + "TEST", + 10000, + 20000, + "JPY", + "20211231", + 30000, + "JPY", + "20211231", + "リターン内容", + "発行目的", + ] + bond_contract = IbetStraightBondContract() + contract_address, abi, tx_hash = await bond_contract.create( + args=arguments, tx_from=issuer_address, private_key=private_key + ) + + # additional issue + _data = {"account_address": issuer_address, "amount": 10} + _add_data = [AdditionalIssueParams(**_data), AdditionalIssueParams(**_data)] + pre_datetime = datetime.now(UTC).replace(tzinfo=None) + await bond_contract.bulk_additional_issue( + data=_add_data, tx_from=issuer_address, private_key=private_key + ) + + # assertion + bond_contract_attr = await bond_contract.get() + assert bond_contract_attr.total_supply == arguments[2] + 20 + + balance = await bond_contract.get_account_balance(issuer_address) + assert balance == arguments[2] + 20 + + _token_attr_update = db.scalars(select(TokenAttrUpdate).limit(1)).first() + assert _token_attr_update.id == 1 + assert _token_attr_update.token_address == contract_address + assert _token_attr_update.updated_datetime > pre_datetime + + ########################################################################### + # Error Case + ########################################################################### + + # + # Transaction REVERT + # -> ContractRevertError + @pytest.mark.asyncio + async def test_error_1(self, db): + test_account = config_eth_account("user1") + issuer_address = test_account.get("address") + user_account = config_eth_account("user2") + user_address = user_account.get("address") + issuer_private_key = decode_keyfile_json( + raw_keyfile_json=test_account.get("keyfile_json"), + password=test_account.get("password").encode("utf-8"), + ) + user_private_key = decode_keyfile_json( + raw_keyfile_json=user_account.get("keyfile_json"), + password=user_account.get("password").encode("utf-8"), + ) + + # deploy token + arguments = [ + "テスト債券", + "TEST", + 10000, + 20000, + "JPY", + "20211231", + 30000, + "JPY", + "20211231", + "リターン内容", + "発行目的", + ] + bond_contract = IbetStraightBondContract() + await bond_contract.create( + args=arguments, tx_from=issuer_address, private_key=issuer_private_key + ) + + # additional issue + _data = {"account_address": issuer_address, "amount": 10} + _add_data = [ + AdditionalIssueParams(**_data), + AdditionalIssueParams(**_data), + ] + + # mock + # hardhatがrevertする際にweb3.pyからraiseされるExceptionはGethと異なるためモック化する。 + # geth: ContractLogicError("execution reverted: ") + InspectionMock = mock.patch( + "web3.eth.async_eth.AsyncEth.call", + AsyncMock(side_effect=ContractLogicError("execution reverted: 500001")), + ) + + with InspectionMock, pytest.raises(ContractRevertError) as exc_info: + await bond_contract.bulk_additional_issue( + data=_add_data, tx_from=user_address, private_key=user_private_key + ) + + # assertion + assert exc_info.value.args[0] == "Message sender is not contract owner." + + # + # TimeExhausted + # -> SendTransactionError @pytest.mark.asyncio - async def test_error_6(self, db): + async def test_error_2(self, db): test_account = config_eth_account("user1") issuer_address = test_account.get("address") private_key = decode_keyfile_json( @@ -2244,6 +2683,7 @@ async def test_error_6(self, db): password=test_account.get("password").encode("utf-8"), ) + # deploy token # deploy token arguments = [ "テスト債券", @@ -2266,35 +2706,30 @@ async def test_error_6(self, db): # mock Web3_send_raw_transaction = patch( target="web3.eth.async_eth.AsyncEth.wait_for_transaction_receipt", - side_effect=TransactionNotFound(message=""), + side_effect=TimeExhausted, ) # additional issue _data = {"account_address": issuer_address, "amount": 10} - _add_data = AdditionalIssueParams(**_data) + _add_data = [AdditionalIssueParams(**_data), AdditionalIssueParams(**_data)] with Web3_send_raw_transaction: with pytest.raises(SendTransactionError) as exc_info: - await bond_contract.additional_issue( + await bond_contract.bulk_additional_issue( data=_add_data, tx_from=issuer_address, private_key=private_key ) - assert isinstance(exc_info.value.args[0], TransactionNotFound) + assert exc_info.type(SendTransactionError(TimeExhausted)) - # - # Transaction REVERT(not owner) + # + # Invalid tx_from + # -> SendTransactionError @pytest.mark.asyncio - async def test_error_7(self, db): + async def test_error_3(self, db): test_account = config_eth_account("user1") issuer_address = test_account.get("address") - user_account = config_eth_account("user2") - user_address = user_account.get("address") - issuer_private_key = decode_keyfile_json( + private_key = decode_keyfile_json( raw_keyfile_json=test_account.get("keyfile_json"), password=test_account.get("password").encode("utf-8"), ) - user_private_key = decode_keyfile_json( - raw_keyfile_json=user_account.get("keyfile_json"), - password=user_account.get("password").encode("utf-8"), - ) # deploy token arguments = [ @@ -2312,30 +2747,21 @@ async def test_error_7(self, db): ] bond_contract = IbetStraightBondContract() await bond_contract.create( - args=arguments, tx_from=issuer_address, private_key=issuer_private_key + args=arguments, tx_from=issuer_address, private_key=private_key ) # additional issue _data = {"account_address": issuer_address, "amount": 10} - _add_data = AdditionalIssueParams(**_data) - pre_datetime = datetime.now(UTC).replace(tzinfo=None) - - # mock - # NOTE: Ganacheがrevertする際にweb3.pyからraiseされるExceptionはGethと異なる - # ganache: ValueError({'message': 'VM Exception while processing transaction: revert',...}) - # geth: ContractLogicError("execution reverted") - InspectionMock = mock.patch( - "web3.eth.async_eth.AsyncEth.call", - MagicMock(side_effect=ContractLogicError("execution reverted: 500001")), - ) - - with InspectionMock, pytest.raises(ContractRevertError) as exc_info: - await bond_contract.additional_issue( - data=_add_data, tx_from=user_address, private_key=user_private_key + _add_data = [ + AdditionalIssueParams(**_data), + AdditionalIssueParams(**_data), + ] + with pytest.raises(SendTransactionError) as exc_info: + await bond_contract.bulk_additional_issue( + data=_add_data, tx_from="invalid_tx_from", private_key=private_key ) - - # assertion - assert exc_info.value.args[0] == "Message sender is not contract owner." + assert isinstance(exc_info.value.args[0], InvalidAddress) + assert exc_info.match("ENS name: 'invalid_tx_from' is invalid.") class TestRedeem: @@ -2660,9 +3086,8 @@ async def test_error_7(self, db): pre_datetime = datetime.now(UTC).replace(tzinfo=None) # mock - # NOTE: Ganacheがrevertする際にweb3.pyからraiseされるExceptionはGethと異なる - # ganache: ValueError({'message': 'VM Exception while processing transaction: revert',...}) - # geth: ContractLogicError("execution reverted") + # hardhatがrevertする際にweb3.pyからraiseされるExceptionはGethと異なるためモック化する。 + # geth: ContractLogicError("execution reverted: ") InspectionMock = mock.patch( "web3.eth.async_eth.AsyncEth.call", MagicMock(side_effect=ContractLogicError("execution reverted: 121102")), @@ -2680,6 +3105,208 @@ async def test_error_7(self, db): ) +class TestBulkRedeem: + + ########################################################################### + # Normal Case + ########################################################################### + + # + @pytest.mark.asyncio + async def test_normal_1(self, db): + test_account = config_eth_account("user1") + issuer_address = test_account.get("address") + private_key = decode_keyfile_json( + raw_keyfile_json=test_account.get("keyfile_json"), + password=test_account.get("password").encode("utf-8"), + ) + + # deploy token + arguments = [ + "テスト債券", + "TEST", + 10000, + 20000, + "JPY", + "20211231", + 30000, + "JPY", + "20211231", + "リターン内容", + "発行目的", + ] + bond_contract = IbetStraightBondContract() + contract_address, abi, tx_hash = await bond_contract.create( + args=arguments, tx_from=issuer_address, private_key=private_key + ) + + # redeem + _data = {"account_address": issuer_address, "amount": 10} + _add_data = [RedeemParams(**_data), RedeemParams(**_data)] + pre_datetime = datetime.now(UTC).replace(tzinfo=None) + await bond_contract.bulk_redeem( + data=_add_data, tx_from=issuer_address, private_key=private_key + ) + + # assertion + bond_contract_attr = await bond_contract.get() + assert bond_contract_attr.total_supply == arguments[2] - 20 + + balance = await bond_contract.get_account_balance(issuer_address) + assert balance == arguments[2] - 20 + + _token_attr_update = db.scalars(select(TokenAttrUpdate).limit(1)).first() + assert _token_attr_update.id == 1 + assert _token_attr_update.token_address == contract_address + assert _token_attr_update.updated_datetime > pre_datetime + + ########################################################################### + # Error Case + ########################################################################### + + # + # Transaction REVERT + # -> ContractRevertError + @pytest.mark.asyncio + async def test_error_1(self, db): + test_account = config_eth_account("user1") + issuer_address = test_account.get("address") + private_key = decode_keyfile_json( + raw_keyfile_json=test_account.get("keyfile_json"), + password=test_account.get("password").encode("utf-8"), + ) + + # deploy token + arguments = [ + "テスト債券", + "TEST", + 10000, + 20000, + "JPY", + "20211231", + 30000, + "JPY", + "20211231", + "リターン内容", + "発行目的", + ] + bond_contract = IbetStraightBondContract() + await bond_contract.create( + args=arguments, tx_from=issuer_address, private_key=private_key + ) + + # redeem + _data = {"account_address": issuer_address, "amount": 100_000_000} + _add_data = [RedeemParams(**_data), RedeemParams(**_data)] + + # mock + # hardhatがrevertする際にweb3.pyからraiseされるExceptionはGethと異なるためモック化する。 + # geth: ContractLogicError("execution reverted: ") + InspectionMock = mock.patch( + "web3.eth.async_eth.AsyncEth.call", + AsyncMock(side_effect=ContractLogicError("execution reverted: 111102")), + ) + + with InspectionMock, pytest.raises(ContractRevertError) as exc_info: + await bond_contract.bulk_redeem( + data=_add_data, tx_from=issuer_address, private_key=private_key + ) + + # assertion + assert ( + exc_info.value.args[0] + == "Redeem amount is less than target address balance." + ) + + # + # TimeExhausted + # -> SendTransactionError + @pytest.mark.asyncio + async def test_error_2(self, db): + test_account = config_eth_account("user1") + issuer_address = test_account.get("address") + private_key = decode_keyfile_json( + raw_keyfile_json=test_account.get("keyfile_json"), + password=test_account.get("password").encode("utf-8"), + ) + + # deploy token + arguments = [ + "テスト債券", + "TEST", + 10000, + 20000, + "JPY", + "20211231", + 30000, + "JPY", + "20211231", + "リターン内容", + "発行目的", + ] + bond_contract = IbetStraightBondContract() + await bond_contract.create( + args=arguments, tx_from=issuer_address, private_key=private_key + ) + + # mock + Web3_send_raw_transaction = patch( + target="web3.eth.async_eth.AsyncEth.wait_for_transaction_receipt", + side_effect=TimeExhausted, + ) + + # redeem + _data = {"account_address": issuer_address, "amount": 10} + _add_data = [RedeemParams(**_data), RedeemParams(**_data)] + with Web3_send_raw_transaction: + with pytest.raises(SendTransactionError) as exc_info: + await bond_contract.bulk_redeem( + data=_add_data, tx_from=issuer_address, private_key=private_key + ) + assert exc_info.type(SendTransactionError(TimeExhausted)) + + # + # Invalid tx_from + # -> SendTransactionError + @pytest.mark.asyncio + async def test_error_3(self, db): + test_account = config_eth_account("user1") + issuer_address = test_account.get("address") + private_key = decode_keyfile_json( + raw_keyfile_json=test_account.get("keyfile_json"), + password=test_account.get("password").encode("utf-8"), + ) + + # deploy token + arguments = [ + "テスト債券", + "TEST", + 10000, + 20000, + "JPY", + "20211231", + 30000, + "JPY", + "20211231", + "リターン内容", + "発行目的", + ] + bond_contract = IbetStraightBondContract() + await bond_contract.create( + args=arguments, tx_from=issuer_address, private_key=private_key + ) + + # redeem + _data = {"account_address": issuer_address, "amount": 10} + _add_data = [RedeemParams(**_data), RedeemParams(**_data)] + with pytest.raises(SendTransactionError) as exc_info: + await bond_contract.bulk_redeem( + data=_add_data, tx_from="invalid_tx_from", private_key=private_key + ) + assert isinstance(exc_info.value.args[0], InvalidAddress) + assert exc_info.match("ENS name: 'invalid_tx_from' is invalid.") + + class TestGetAccountBalance: ########################################################################### # Normal Case @@ -2992,7 +3619,7 @@ async def test_normal_1(self, db): assert tx_receipt["status"] == 1 bond_token = ContractUtils.get_contract( - contract_name="IbetShare", contract_address=token_address + contract_name="IbetStraightBond", contract_address=token_address ) applications = bond_token.functions.applicationsForTransfer(0).call() assert applications[0] == issuer_address @@ -3239,9 +3866,8 @@ async def test_error_5(self, db): # This would be failed. # mock - # NOTE: Ganacheがrevertする際にweb3.pyからraiseされるExceptionはGethと異なる - # ganache: ValueError({'message': 'VM Exception while processing transaction: revert',...}) - # geth: ContractLogicError("execution reverted") + # hardhatがrevertする際にweb3.pyからraiseされるExceptionはGethと異なるためモック化する。 + # geth: ContractLogicError("execution reverted: ") InspectionMock = mock.patch( "web3.eth.async_eth.AsyncEth.call", MagicMock(side_effect=ContractLogicError("execution reverted: 120902")), @@ -3354,7 +3980,7 @@ async def test_normal_1(self, db): assert isinstance(tx_hash, str) and int(tx_hash, 16) > 0 assert tx_receipt["status"] == 1 bond_token = ContractUtils.get_contract( - contract_name="IbetShare", contract_address=token_address + contract_name="IbetStraightBond", contract_address=token_address ) applications = bond_token.functions.applicationsForTransfer(0).call() assert applications[0] == issuer_address @@ -3601,9 +4227,8 @@ async def test_error_5(self, db): cancel_data = approve_data # mock - # NOTE: Ganacheがrevertする際にweb3.pyからraiseされるExceptionはGethと異なる - # ganache: ValueError({'message': 'VM Exception while processing transaction: revert',...}) - # geth: ContractLogicError("execution reverted") + # hardhatがrevertする際にweb3.pyからraiseされるExceptionはGethと異なるためモック化する。 + # geth: ContractLogicError("execution reverted: ") InspectionMock = mock.patch( "web3.eth.async_eth.AsyncEth.call", MagicMock(side_effect=ContractLogicError("execution reverted: 120802")), @@ -3669,12 +4294,10 @@ async def test_normal_1(self, db): assert isinstance(tx_hash, str) and int(tx_hash, 16) > 0 assert tx_receipt["status"] == 1 - share_token = ContractUtils.get_contract( - contract_name="IbetShare", contract_address=token_address + bond_token = ContractUtils.get_contract( + contract_name="IbetStraightBond", contract_address=token_address ) - lock_amount = share_token.functions.lockedOf( - lock_address, issuer_address - ).call() + lock_amount = bond_token.functions.lockedOf(lock_address, issuer_address).call() assert lock_amount == 10 ########################################################################### @@ -3973,9 +4596,8 @@ async def test_error_5(self, db): ) # mock - # NOTE: Ganacheがrevertする際にweb3.pyからraiseされるExceptionはGethと異なる - # ganache: ValueError({'message': 'VM Exception while processing transaction: revert',...}) - # geth: ContractLogicError("execution reverted") + # hardhatがrevertする際にweb3.pyからraiseされるExceptionはGethと異なるためモック化する。 + # geth: ContractLogicError("execution reverted: ") InspectionMock = mock.patch( "web3.eth.async_eth.AsyncEth.call", MagicMock(side_effect=ContractLogicError("execution reverted: 120002")), @@ -4061,12 +4683,10 @@ async def test_normal_1(self, db): assert isinstance(tx_hash, str) and int(tx_hash, 16) > 0 assert tx_receipt["status"] == 1 - share_token = ContractUtils.get_contract( - contract_name="IbetShare", contract_address=token_address + bond_token = ContractUtils.get_contract( + contract_name="IbetStraightBond", contract_address=token_address ) - lock_amount = share_token.functions.lockedOf( - lock_address, issuer_address - ).call() + lock_amount = bond_token.functions.lockedOf(lock_address, issuer_address).call() assert lock_amount == 5 ########################################################################### @@ -4465,9 +5085,8 @@ async def test_error_5(self, db): ) # mock - # NOTE: Ganacheがrevertする際にweb3.pyからraiseされるExceptionはGethと異なる - # ganache: ValueError({'message': 'VM Exception while processing transaction: revert',...}) - # geth: ContractLogicError("execution reverted") + # hardhatがrevertする際にweb3.pyからraiseされるExceptionはGethと異なるためモック化する。 + # geth: ContractLogicError("execution reverted: ") InspectionMock = mock.patch( "web3.eth.async_eth.AsyncEth.call", MagicMock(side_effect=ContractLogicError("execution reverted: 121201")), diff --git a/tests/app/test_blockchain_explorer_tx_data_{hash}_GET.py b/tests/app/test_blockchain_explorer_tx_data_{hash}_GET.py index 137807fb..d9ab0e97 100644 --- a/tests/app/test_blockchain_explorer_tx_data_{hash}_GET.py +++ b/tests/app/test_blockchain_explorer_tx_data_{hash}_GET.py @@ -70,7 +70,7 @@ def insert_token_data(session, token_info): token.issuer_address = "" token.token_address = token_info.get("token_address") token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 session.add(token) session.commit() diff --git a/tests/app/test_bond_bulk_transfer_GET.py b/tests/app/test_bond_bulk_transfer_GET.py index d4617f59..0e3dbe94 100644 --- a/tests/app/test_bond_bulk_transfer_GET.py +++ b/tests/app/test_bond_bulk_transfer_GET.py @@ -54,6 +54,8 @@ class TestAppRoutersBondBulkTransferGET: "cf33d48f-9e6e-4a36-a55e-5bbcbda69c80", # 2: failed ] + test_token_address = "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266" + ########################################################################### # Normal Case ########################################################################### @@ -76,6 +78,7 @@ def test_normal_1(self, client, db): bulk_transfer_upload.issuer_address = self.upload_issuer_list[i]["address"] bulk_transfer_upload.upload_id = self.upload_id_list[i] bulk_transfer_upload.token_type = TokenType.IBET_STRAIGHT_BOND.value + bulk_transfer_upload.token_address = self.test_token_address bulk_transfer_upload.status = i bulk_transfer_upload.created = utc_now db.add(bulk_transfer_upload) @@ -94,8 +97,8 @@ def test_normal_1(self, client, db): { "issuer_address": self.upload_issuer_list[1]["address"], "token_type": TokenType.IBET_STRAIGHT_BOND.value, + "token_address": self.test_token_address, "upload_id": self.upload_id_list[1], - "transaction_compression": False, "status": 1, "created": pytz.timezone("UTC") .localize(utc_now) @@ -116,6 +119,7 @@ def test_normal_2(self, client, db): bulk_transfer_upload.issuer_address = self.upload_issuer_list[i]["address"] bulk_transfer_upload.upload_id = self.upload_id_list[i] bulk_transfer_upload.token_type = TokenType.IBET_STRAIGHT_BOND.value + bulk_transfer_upload.token_address = self.test_token_address bulk_transfer_upload.status = i bulk_transfer_upload.created = utc_now db.add(bulk_transfer_upload) @@ -133,8 +137,8 @@ def test_normal_2(self, client, db): { "issuer_address": self.upload_issuer_list[i]["address"], "token_type": TokenType.IBET_STRAIGHT_BOND.value, + "token_address": self.test_token_address, "upload_id": self.upload_id_list[i], - "transaction_compression": False, "status": i, "created": pytz.timezone("UTC") .localize(utc_now) diff --git a/tests/app/test_bond_bulk_transfer_POST.py b/tests/app/test_bond_bulk_transfer_POST.py index 6e9059f0..c316370a 100644 --- a/tests/app/test_bond_bulk_transfer_POST.py +++ b/tests/app/test_bond_bulk_transfer_POST.py @@ -55,9 +55,6 @@ class TestAppRoutersBondBulkTransferPOST: req_tokens = [ "0xbB4138520af85fAfdDAACc7F0AabfE188334D0ca", "0x55e20Fa9F4Fa854Ef06081734872b734c105916b", - "0x1d2E98AD049e978B08113fD282BD42948F265DDa", - "0x2413a63D91eb10e1472a18aD4b9628fBE4aac8B8", - "0x6f9486251F4034C251ecb8Fa0f087CDDb3cDe6d7", ] upload_id_list = [ @@ -67,6 +64,7 @@ class TestAppRoutersBondBulkTransferPOST: ] # + # Authorization by eoa-password def test_normal_1(self, client, db): # prepare data : Account(Issuer) account = Account() @@ -83,7 +81,7 @@ def test_normal_1(self, client, db): _token.issuer_address = self.admin_address _token.token_address = _t _token.abi = "" - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) db.commit() @@ -98,7 +96,7 @@ def test_normal_1(self, client, db): "amount": 5, }, { - "token_address": self.req_tokens[1], + "token_address": self.req_tokens[0], "from_address": self.from_address, "to_address": self.to_address, "amount": 10, @@ -124,6 +122,7 @@ def test_normal_1(self, client, db): ).all() assert len(bulk_transfer_upload) == 1 assert bulk_transfer_upload[0].issuer_address == self.admin_address + assert bulk_transfer_upload[0].token_address == self.req_tokens[0] assert bulk_transfer_upload[0].status == 0 bulk_transfer = db.scalars( @@ -140,7 +139,7 @@ def test_normal_1(self, client, db): assert bulk_transfer[0].amount == 5 assert bulk_transfer[0].status == 0 assert bulk_transfer[1].issuer_address == self.admin_address - assert bulk_transfer[1].token_address == self.req_tokens[1] + assert bulk_transfer[1].token_address == self.req_tokens[0] assert bulk_transfer[1].token_type == TokenType.IBET_STRAIGHT_BOND.value assert bulk_transfer[1].from_address == self.from_address assert bulk_transfer[1].to_address == self.to_address @@ -172,7 +171,7 @@ def test_normal_2(self, client, db): _token.issuer_address = self.admin_address _token.token_address = _t _token.abi = "" - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) db.commit() @@ -187,7 +186,7 @@ def test_normal_2(self, client, db): "amount": 5, }, { - "token_address": self.req_tokens[1], + "token_address": self.req_tokens[0], "from_address": self.from_address, "to_address": self.to_address, "amount": 10, @@ -213,6 +212,7 @@ def test_normal_2(self, client, db): ).all() assert len(bulk_transfer_upload) == 1 assert bulk_transfer_upload[0].issuer_address == self.admin_address + assert bulk_transfer_upload[0].token_address == self.req_tokens[0] assert bulk_transfer_upload[0].status == 0 bulk_transfer = db.scalars( @@ -229,90 +229,6 @@ def test_normal_2(self, client, db): assert bulk_transfer[0].amount == 5 assert bulk_transfer[0].status == 0 assert bulk_transfer[1].issuer_address == self.admin_address - assert bulk_transfer[1].token_address == self.req_tokens[1] - assert bulk_transfer[1].token_type == TokenType.IBET_STRAIGHT_BOND.value - assert bulk_transfer[1].from_address == self.from_address - assert bulk_transfer[1].to_address == self.to_address - assert bulk_transfer[1].amount == 10 - assert bulk_transfer[1].status == 0 - - # - # transaction_compression = True - def test_normal_3(self, client, db): - # prepare data : Account(Issuer) - account = Account() - account.issuer_address = self.from_address - account.keyfile = self.admin_keyfile - account.eoa_password = E2EEUtils.encrypt("password") - db.add(account) - - # prepare data : Tokens - for _t in self.req_tokens: - _token = Token() - _token.type = TokenType.IBET_STRAIGHT_BOND.value - _token.tx_hash = "" - _token.issuer_address = self.from_address - _token.token_address = _t - _token.abi = "" - _token.version = TokenVersion.V_24_06 - db.add(_token) - - db.commit() - - # request target API - req_param = { - "transfer_list": [ - { - "token_address": self.req_tokens[0], - "from_address": self.from_address, - "to_address": self.to_address, - "amount": 5, - }, - { - "token_address": self.req_tokens[0], - "from_address": self.from_address, - "to_address": self.to_address, - "amount": 10, - }, - ], - "transaction_compression": True, - } - resp = client.post( - self.test_url, - json=req_param, - headers={ - "issuer-address": self.from_address, - "eoa-password": E2EEUtils.encrypt("password"), - }, - ) - - # assertion - assert resp.status_code == 200 - - bulk_transfer_upload = db.scalars( - select(BulkTransferUpload).where( - BulkTransferUpload.upload_id == resp.json()["upload_id"] - ) - ).all() - assert len(bulk_transfer_upload) == 1 - assert bulk_transfer_upload[0].issuer_address == self.from_address - assert bulk_transfer_upload[0].transaction_compression is True - assert bulk_transfer_upload[0].status == 0 - - bulk_transfer = db.scalars( - select(BulkTransfer) - .where(BulkTransfer.upload_id == resp.json()["upload_id"]) - .order_by(BulkTransfer.id) - ).all() - assert len(bulk_transfer) == 2 - assert bulk_transfer[0].issuer_address == self.from_address - assert bulk_transfer[0].token_address == self.req_tokens[0] - assert bulk_transfer[0].token_type == TokenType.IBET_STRAIGHT_BOND.value - assert bulk_transfer[0].from_address == self.from_address - assert bulk_transfer[0].to_address == self.to_address - assert bulk_transfer[0].amount == 5 - assert bulk_transfer[0].status == 0 - assert bulk_transfer[1].issuer_address == self.from_address assert bulk_transfer[1].token_address == self.req_tokens[0] assert bulk_transfer[1].token_type == TokenType.IBET_STRAIGHT_BOND.value assert bulk_transfer[1].from_address == self.from_address @@ -324,10 +240,10 @@ def test_normal_3(self, client, db): # Error Case ########################################################################### - # + # # RequestValidationError # invalid type - def test_error_1(self, client, db): + def test_error_1_1(self, client, db): _token_address_int = 10 # integer _from_address_long = ( "0xd9F55747DE740297ff1eEe537aBE0f8d73B7D7811" # long address @@ -387,10 +303,10 @@ def test_error_1(self, client, db): ], } - # + # # RequestValidationError # invalid type(max values) - def test_error_2(self, client, db): + def test_error_1_2(self, client, db): # request target API req_param = { "transfer_list": [ @@ -425,10 +341,10 @@ def test_error_2(self, client, db): ], } - # + # # RequestValidationError # headers and body required - def test_error_3(self, client, db): + def test_error_1_3(self, client, db): # request target API resp = client.post(self.test_url) @@ -452,10 +368,10 @@ def test_error_3(self, client, db): ], } - # + # # RequestValidationError # issuer-address - def test_error_4(self, client, db): + def test_error_1_4(self, client, db): # request target API req_param = { "transfer_list": [ @@ -485,10 +401,10 @@ def test_error_4(self, client, db): ], } - # + # # RequestValidationError # eoa-password(not decrypt) - def test_error_5(self, client, db): + def test_error_1_5(self, client, db): # request target API req_param = { "transfer_list": [ @@ -520,10 +436,10 @@ def test_error_5(self, client, db): ], } - # + # # InvalidParameterError # list length is 0 - def test_error_6(self, client, db): + def test_error_2(self, client, db): # prepare data : Account(Issuer) account = Account() account.issuer_address = self.admin_address @@ -559,10 +475,10 @@ def test_error_6(self, client, db): ], } - # + # # AuthorizationError # issuer does not exist - def test_error_7(self, client, db): + def test_error_3_1(self, client, db): # request target API req_param = { "transfer_list": [ @@ -596,10 +512,10 @@ def test_error_7(self, client, db): "detail": "issuer does not exist, or password mismatch", } - # + # # AuthorizationError # password mismatch - def test_error_8(self, client, db): + def test_error_3_2(self, client, db): # prepare data : Account(Issuer) account = Account() account.issuer_address = self.admin_address @@ -635,10 +551,9 @@ def test_error_8(self, client, db): "detail": "issuer does not exist, or password mismatch", } - # - # InvalidParameterError - # token not found - def test_error_9(self, client, db): + # + # TokenNotExistError + def test_error_4(self, client, db): # prepare data : Account(Issuer) account = Account() account.issuer_address = self.admin_address @@ -670,14 +585,13 @@ def test_error_9(self, client, db): assert resp.status_code == 400 assert resp.json() == { - "meta": {"code": 1, "title": "InvalidParameterError"}, + "meta": {"code": 7, "title": "TokenNotExistError"}, "detail": f"token not found: {self.req_tokens[0]}", } - # - # InvalidParameterError - # processing token - def test_error_10(self, client, db): + # + # NonTransferableTokenError + def test_error_5(self, client, db): # prepare data : Account(Issuer) account = Account() account.issuer_address = self.admin_address @@ -693,7 +607,7 @@ def test_error_10(self, client, db): _token.token_address = self.req_tokens[0] _token.abi = "" _token.token_status = 0 - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) db.commit() @@ -720,14 +634,13 @@ def test_error_10(self, client, db): assert resp.status_code == 400 assert resp.json() == { - "meta": {"code": 1, "title": "InvalidParameterError"}, + "meta": {"code": 8, "title": "NonTransferableTokenError"}, "detail": f"this token is temporarily unavailable: {self.req_tokens[0]}", } - # - # transaction_compression = True - # Token addresses are not the same - def test_error_11_1(self, client, db): + # + # MultipleTokenTransferNotAllowedError + def test_error_6(self, client, db): # prepare data : Account(Issuer) account = Account() account.issuer_address = self.from_address @@ -735,17 +648,6 @@ def test_error_11_1(self, client, db): account.eoa_password = E2EEUtils.encrypt("password") db.add(account) - # prepare data : Tokens - for _t in self.req_tokens: - _token = Token() - _token.type = TokenType.IBET_STRAIGHT_BOND.value - _token.tx_hash = "" - _token.issuer_address = self.from_address - _token.token_address = _t - _token.abi = "" - _token.version = TokenVersion.V_24_06 - db.add(_token) - db.commit() # request target API @@ -764,65 +666,6 @@ def test_error_11_1(self, client, db): "amount": 10, }, ], - "transaction_compression": True, - } - resp = client.post( - self.test_url, - json=req_param, - headers={ - "issuer-address": self.from_address, - "eoa-password": E2EEUtils.encrypt("password"), - }, - ) - - # assertion - assert resp.status_code == 400 - assert resp.json() == { - "meta": {"code": 1, "title": "InvalidParameterError"}, - "detail": "When using transaction compression, all token_address must be the same.", - } - - # - # transaction_compression = True - # From addresses are not the same - def test_error_11_2(self, client, db): - # prepare data : Account(Issuer) - account = Account() - account.issuer_address = self.from_address - account.keyfile = self.admin_keyfile - account.eoa_password = E2EEUtils.encrypt("password") - db.add(account) - - # prepare data : Tokens - for _t in self.req_tokens: - _token = Token() - _token.type = TokenType.IBET_STRAIGHT_BOND.value - _token.tx_hash = "" - _token.issuer_address = self.from_address - _token.token_address = _t - _token.abi = "" - _token.version = TokenVersion.V_24_06 - db.add(_token) - - db.commit() - - # request target API - req_param = { - "transfer_list": [ - { - "token_address": self.req_tokens[0], - "from_address": self.from_address, - "to_address": self.to_address, - "amount": 5, - }, - { - "token_address": self.req_tokens[0], - "from_address": self.to_address, # Wrong from_address - "to_address": self.to_address, - "amount": 10, - }, - ], - "transaction_compression": True, } resp = client.post( self.test_url, @@ -836,64 +679,6 @@ def test_error_11_2(self, client, db): # assertion assert resp.status_code == 400 assert resp.json() == { - "meta": {"code": 1, "title": "InvalidParameterError"}, - "detail": "When using transaction compression, all from_address must be the same.", - } - - # - # transaction_compression = True - # from_address and issuer_address are different - def test_error_11_3(self, client, db): - # prepare data : Account(Issuer) - account = Account() - account.issuer_address = self.admin_address - account.keyfile = self.admin_keyfile - account.eoa_password = E2EEUtils.encrypt("password") - db.add(account) - - # prepare data : Tokens - for _t in self.req_tokens: - _token = Token() - _token.type = TokenType.IBET_STRAIGHT_BOND.value - _token.tx_hash = "" - _token.issuer_address = self.admin_address - _token.token_address = _t - _token.abi = "" - _token.version = TokenVersion.V_24_06 - db.add(_token) - - db.commit() - - # request target API - req_param = { - "transfer_list": [ - { - "token_address": self.req_tokens[0], - "from_address": self.from_address, - "to_address": self.to_address, - "amount": 5, - }, - { - "token_address": self.req_tokens[0], - "from_address": self.from_address, - "to_address": self.to_address, - "amount": 10, - }, - ], - "transaction_compression": True, - } - resp = client.post( - self.test_url, - json=req_param, - headers={ - "issuer-address": self.admin_address, - "eoa-password": E2EEUtils.encrypt("password"), - }, - ) - - # assertion - assert resp.status_code == 400 - assert resp.json() == { - "meta": {"code": 1, "title": "InvalidParameterError"}, - "detail": "When using transaction compression, from_address must be the same as issuer_address.", + "meta": {"code": 9, "title": "MultipleTokenTransferNotAllowedError"}, + "detail": "All token_address must be the same.", } diff --git a/tests/app/test_bond_lock_events_GET.py b/tests/app/test_bond_lock_events_GET.py index 4b50e4e4..6a44548f 100644 --- a/tests/app/test_bond_lock_events_GET.py +++ b/tests/app/test_bond_lock_events_GET.py @@ -56,7 +56,7 @@ def setup_data(self, db: Session, token_status: int = 1): _token.tx_hash = "" _token.abi = "" _token.token_status = token_status - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: Token @@ -67,7 +67,7 @@ def setup_data(self, db: Session, token_status: int = 1): _token.tx_hash = "" _token.abi = "" _token.token_status = token_status - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: Lock events @@ -207,7 +207,7 @@ def test_normal_1(self, client, db): _token.type = TokenType.IBET_STRAIGHT_BOND.value _token.tx_hash = "" _token.abi = "" - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) db.commit() diff --git a/tests/app/test_bond_tokens_GET.py b/tests/app/test_bond_tokens_GET.py index b3f400c2..ab26976c 100644 --- a/tests/app/test_bond_tokens_GET.py +++ b/tests/app/test_bond_tokens_GET.py @@ -58,7 +58,7 @@ def test_normal_2(self, mock_get, client, db): token.issuer_address = issuer_address_1 token.token_address = "token_address_test1" token.abi = "abi_test1" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() _issue_datetime = ( @@ -164,7 +164,7 @@ def test_normal_2(self, mock_get, client, db): "token_status": 1, "transfer_approval_required": True, "memo": "memo_test1", - "contract_version": TokenVersion.V_24_06, + "contract_version": TokenVersion.V_24_09, } ] @@ -187,7 +187,7 @@ def test_normal_3(self, mock_get, client, db): token_1.issuer_address = issuer_address_1 token_1.token_address = "token_address_test1" token_1.abi = "abi_test1" - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) db.commit() _issue_datetime_1 = ( @@ -252,7 +252,7 @@ def test_normal_3(self, mock_get, client, db): token_2.token_address = "token_address_test2" token_2.abi = "abi_test2" token_2.token_status = 0 - token_2.version = TokenVersion.V_24_06 + token_2.version = TokenVersion.V_24_09 db.add(token_2) db.commit() _issue_datetime_2 = ( @@ -361,7 +361,7 @@ def test_normal_3(self, mock_get, client, db): "token_status": 1, "transfer_approval_required": True, "memo": "memo_test1", - "contract_version": TokenVersion.V_24_06, + "contract_version": TokenVersion.V_24_09, }, { "issuer_address": token_2.issuer_address, @@ -407,7 +407,7 @@ def test_normal_3(self, mock_get, client, db): "token_status": 0, "transfer_approval_required": False, "memo": "memo_test2", - "contract_version": TokenVersion.V_24_06, + "contract_version": TokenVersion.V_24_09, }, ] @@ -429,7 +429,7 @@ def test_normal_4(self, client, db): token.issuer_address = issuer_address_1 token.token_address = "token_address_test1" token.abi = "abi_test1" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) resp = client.get(self.apiurl, headers={"issuer-address": issuer_address_2}) @@ -452,7 +452,7 @@ def test_normal_5(self, mock_get, client, db): token_1.issuer_address = issuer_address_1 token_1.token_address = "token_address_test1" token_1.abi = "abi_test1" - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) db.commit() _issue_datetime = ( @@ -518,7 +518,7 @@ def test_normal_5(self, mock_get, client, db): token_2.issuer_address = issuer_address_2 token_2.token_address = "token_address_test1" token_2.abi = "abi_test1" - token_2.version = TokenVersion.V_24_06 + token_2.version = TokenVersion.V_24_09 db.add(token_2) resp = client.get(self.apiurl, headers={"issuer-address": issuer_address_1}) @@ -568,7 +568,7 @@ def test_normal_5(self, mock_get, client, db): "token_status": 1, "transfer_approval_required": True, "memo": "memo_test1", - "contract_version": TokenVersion.V_24_06, + "contract_version": TokenVersion.V_24_09, } ] @@ -591,7 +591,7 @@ def test_normal_6(self, mock_get, client, db): token_1.issuer_address = issuer_address_1 token_1.token_address = "token_address_test1" token_1.abi = "abi_test1" - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) db.commit() _issue_datetime_1 = ( @@ -656,7 +656,7 @@ def test_normal_6(self, mock_get, client, db): token_2.token_address = "token_address_test2" token_2.abi = "abi_test2" token_2.token_status = 0 - token_2.version = TokenVersion.V_24_06 + token_2.version = TokenVersion.V_24_09 db.add(token_2) db.commit() _issue_datetime_2 = ( @@ -725,7 +725,7 @@ def test_normal_6(self, mock_get, client, db): token_3.issuer_address = issuer_address_2 token_3.token_address = "token_address_test1" token_3.abi = "abi_test1" - token_3.version = TokenVersion.V_24_06 + token_3.version = TokenVersion.V_24_09 db.add(token_3) resp = client.get(self.apiurl, headers={"issuer-address": issuer_address_1}) @@ -775,7 +775,7 @@ def test_normal_6(self, mock_get, client, db): "token_status": 1, "transfer_approval_required": True, "memo": "memo_test1", - "contract_version": TokenVersion.V_24_06, + "contract_version": TokenVersion.V_24_09, }, { "issuer_address": token_2.issuer_address, @@ -821,7 +821,7 @@ def test_normal_6(self, mock_get, client, db): "token_status": 0, "transfer_approval_required": False, "memo": "memo_test2", - "contract_version": TokenVersion.V_24_06, + "contract_version": TokenVersion.V_24_09, }, ] diff --git a/tests/app/test_bond_tokens_POST.py b/tests/app/test_bond_tokens_POST.py index af6f7df9..739efc26 100644 --- a/tests/app/test_bond_tokens_POST.py +++ b/tests/app/test_bond_tokens_POST.py @@ -166,7 +166,7 @@ async def test_normal_1(self, client, db): assert token_1.token_address == "contract_address_test1" assert token_1.abi == "abi_test1" assert token_1.token_status == 1 - assert token_1.version == TokenVersion.V_24_06 + assert token_1.version == TokenVersion.V_24_09 position = db.scalars(select(IDXPosition).limit(1)).first() assert position.token_address == "contract_address_test1" @@ -307,7 +307,7 @@ async def test_normal_2(self, client, db): assert token_1.token_address == "contract_address_test1" assert token_1.abi == "abi_test1" assert token_1.token_status == 0 - assert token_1.version == TokenVersion.V_24_06 + assert token_1.version == TokenVersion.V_24_09 position = db.scalars(select(IDXPosition).limit(1)).first() assert position is None @@ -437,7 +437,7 @@ async def test_normal_3(self, client, db): assert token_1.token_address == "contract_address_test1" assert token_1.abi == "abi_test1" assert token_1.token_status == 1 - assert token_1.version == TokenVersion.V_24_06 + assert token_1.version == TokenVersion.V_24_09 position = db.scalars(select(IDXPosition).limit(1)).first() assert position.token_address == "contract_address_test1" diff --git a/tests/app/test_bond_tokens_{token_address}_GET.py b/tests/app/test_bond_tokens_{token_address}_GET.py index 77e0a7b2..de123106 100644 --- a/tests/app/test_bond_tokens_{token_address}_GET.py +++ b/tests/app/test_bond_tokens_{token_address}_GET.py @@ -46,7 +46,7 @@ def test_normal_1(self, mock_get, client, db): token.issuer_address = "issuer_address_test1" token.token_address = "token_address_test1" token.abi = "abi_test1" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() @@ -155,7 +155,7 @@ def test_normal_1(self, mock_get, client, db): "token_status": 1, "transfer_approval_required": True, "memo": "memo_test1", - "contract_version": TokenVersion.V_24_06, + "contract_version": TokenVersion.V_24_09, } assert resp.status_code == 200 @@ -172,7 +172,7 @@ def test_normal_2(self, mock_get, client, db): token.issuer_address = "issuer_address_test1" token.token_address = "token_address_test1" token.abi = "abi_test1" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() @@ -281,7 +281,7 @@ def test_normal_2(self, mock_get, client, db): "token_status": 1, "transfer_approval_required": True, "memo": "memo_test1", - "contract_version": TokenVersion.V_24_06, + "contract_version": TokenVersion.V_24_09, } assert resp.status_code == 200 @@ -313,7 +313,7 @@ def test_error_2(self, client, db): token.token_address = "token_address_test1" token.abi = "abi_test1" token.token_status = 0 - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() diff --git a/tests/app/test_bond_tokens_{token_address}_POST.py b/tests/app/test_bond_tokens_{token_address}_POST.py index a32af693..b62f09c7 100644 --- a/tests/app/test_bond_tokens_{token_address}_POST.py +++ b/tests/app/test_bond_tokens_{token_address}_POST.py @@ -110,7 +110,7 @@ async def test_normal_1_1(self, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() @@ -249,7 +249,7 @@ async def test_normal_1_2(self, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() @@ -388,7 +388,7 @@ async def test_normal_2(self, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() @@ -456,7 +456,7 @@ async def test_normal_3(self, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() @@ -1235,7 +1235,7 @@ def test_error_7(self, IbetStraightBondContract_mock, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) # mock @@ -1357,7 +1357,7 @@ def test_error_10(self, client, db): token.token_address = _token_address token.abi = "" token.token_status = 0 - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() @@ -1405,7 +1405,7 @@ def test_error_11(self, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() diff --git a/tests/app/test_bond_tokens_{token_address}_additional_issue_GET.py b/tests/app/test_bond_tokens_{token_address}_additional_issue_GET.py index cf900881..0df95617 100644 --- a/tests/app/test_bond_tokens_{token_address}_additional_issue_GET.py +++ b/tests/app/test_bond_tokens_{token_address}_additional_issue_GET.py @@ -74,7 +74,7 @@ def test_normal_1(self, client, db): _token.issuer_address = self.test_issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: IDXIssueRedeem @@ -110,7 +110,7 @@ def test_normal_2(self, client, db): _token.issuer_address = self.test_issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: IDXIssueRedeem @@ -191,7 +191,7 @@ def test_normal_3(self, client, db): _token.issuer_address = self.test_issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: IDXIssueRedeem @@ -278,7 +278,7 @@ def test_normal_4(self, client, db): _token.issuer_address = self.test_issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: IDXIssueRedeem @@ -365,7 +365,7 @@ def test_error_2(self, client, db): _token.token_address = self.test_token_address _token.abi = {} _token.token_status = 0 - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) db.commit() diff --git a/tests/app/test_bond_tokens_{token_address}_additional_issue_POST.py b/tests/app/test_bond_tokens_{token_address}_additional_issue_POST.py index fedbc5d7..0960d228 100644 --- a/tests/app/test_bond_tokens_{token_address}_additional_issue_POST.py +++ b/tests/app/test_bond_tokens_{token_address}_additional_issue_POST.py @@ -58,7 +58,7 @@ def test_normal_1(self, IbetStraightBondContract_mock, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() @@ -115,7 +115,7 @@ def test_normal_2(self, IbetStraightBondContract_mock, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() @@ -163,7 +163,7 @@ def test_error_1(self, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() @@ -210,7 +210,7 @@ def test_error_2(self, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() @@ -257,7 +257,7 @@ def test_error_3(self, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() @@ -400,7 +400,7 @@ def test_error_7(self, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() @@ -514,7 +514,7 @@ def test_error_10(self, client, db): token.token_address = _token_address token.abi = "" token.token_status = 0 - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() @@ -562,7 +562,7 @@ def test_error_11(self, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() diff --git a/tests/app/test_bond_tokens_{token_address}_additional_issue_batch_GET.py b/tests/app/test_bond_tokens_{token_address}_additional_issue_batch_GET.py index b464a9f2..56664a7d 100644 --- a/tests/app/test_bond_tokens_{token_address}_additional_issue_batch_GET.py +++ b/tests/app/test_bond_tokens_{token_address}_additional_issue_batch_GET.py @@ -52,7 +52,7 @@ def test_normal_1(self, client, db): token.issuer_address = issuer_address token.token_address = token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) # request target API @@ -78,7 +78,7 @@ def test_normal_2(self, client, db): token.issuer_address = issuer_address token.token_address = token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) additional_issue_upload1 = BatchIssueRedeemUpload() @@ -127,7 +127,7 @@ def test_normal_3_1(self, client, db): token.issuer_address = issuer_address token.token_address = token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) additional_issue_upload1 = BatchIssueRedeemUpload() @@ -244,7 +244,7 @@ def test_normal_3_2(self, client, db): token.issuer_address = issuer_address token.token_address = token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) additional_issue_upload1 = BatchIssueRedeemUpload() @@ -348,7 +348,7 @@ def test_normal_3_3(self, client, db): token.issuer_address = issuer_address token.token_address = token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) additional_issue_upload1 = BatchIssueRedeemUpload() @@ -458,7 +458,7 @@ def test_normal_4(self, client, db): token.issuer_address = issuer_address token.token_address = token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) additional_issue_upload1 = BatchIssueRedeemUpload() @@ -560,7 +560,7 @@ def test_normal_5(self, client, db): token.issuer_address = issuer_address token.token_address = token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) additional_issue_upload1 = BatchIssueRedeemUpload() @@ -683,7 +683,7 @@ def test_error_1(self, client, db): token.issuer_address = issuer_address token.token_address = token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() diff --git a/tests/app/test_bond_tokens_{token_address}_additional_issue_batch_POST.py b/tests/app/test_bond_tokens_{token_address}_additional_issue_batch_POST.py index 1402f7e0..8769cf30 100644 --- a/tests/app/test_bond_tokens_{token_address}_additional_issue_batch_POST.py +++ b/tests/app/test_bond_tokens_{token_address}_additional_issue_batch_POST.py @@ -66,7 +66,7 @@ def test_normal_1(self, client, db): token.issuer_address = issuer_address token.token_address = token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() @@ -131,7 +131,7 @@ def test_normal_2(self, client, db): token.issuer_address = issuer_address token.token_address = token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() @@ -206,7 +206,7 @@ def test_error_1_1(self, client, db): token.issuer_address = issuer_address token.token_address = token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() @@ -258,7 +258,7 @@ def test_error_1_2(self, client, db): token.issuer_address = issuer_address token.token_address = token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() @@ -313,7 +313,7 @@ def test_error_1_3_1(self, client, db): token.issuer_address = issuer_address token.token_address = token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() @@ -368,7 +368,7 @@ def test_error_1_3_2(self, client, db): token.issuer_address = issuer_address token.token_address = token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() @@ -423,7 +423,7 @@ def test_error_1_4(self, client, db): token.issuer_address = issuer_address token.token_address = token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() @@ -472,7 +472,7 @@ def test_error_1_5(self, client, db): token.issuer_address = issuer_address token.token_address = token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() @@ -521,7 +521,7 @@ def test_error_1_6(self, client, db): token.issuer_address = issuer_address token.token_address = token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() @@ -568,7 +568,7 @@ def test_error_1_7_1(self, client, db): token.issuer_address = issuer_address token.token_address = token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() @@ -615,7 +615,7 @@ def test_error_1_7_2(self, client, db): token.issuer_address = issuer_address token.token_address = token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() @@ -703,7 +703,7 @@ def test_error_1_8_2(self, client, db): token.token_address = token_address token.abi = "" token.token_status = 0 - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() diff --git a/tests/app/test_bond_tokens_{token_address}_additional_issue_batch_{batch_id}_GET.py b/tests/app/test_bond_tokens_{token_address}_additional_issue_batch_{batch_id}_GET.py index 77c99428..77de62f9 100644 --- a/tests/app/test_bond_tokens_{token_address}_additional_issue_batch_{batch_id}_GET.py +++ b/tests/app/test_bond_tokens_{token_address}_additional_issue_batch_{batch_id}_GET.py @@ -71,7 +71,7 @@ def test_normal_1_1(self, client, db): token.issuer_address = issuer_address token.token_address = test_token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) batch_upload = BatchIssueRedeemUpload() @@ -158,7 +158,7 @@ def test_normal_1_2(self, client, db): token.issuer_address = issuer_address token.token_address = test_token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) batch_upload = BatchIssueRedeemUpload() @@ -245,7 +245,7 @@ def test_normal_2(self, client, db): token.issuer_address = issuer_address token.token_address = test_token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) batch_upload = BatchIssueRedeemUpload() @@ -358,7 +358,7 @@ def test_error_1(self, client, db): token.issuer_address = issuer_address token.token_address = test_token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) batch_upload = BatchIssueRedeemUpload() diff --git a/tests/app/test_bond_tokens_{token_address}_history_GET.py b/tests/app/test_bond_tokens_{token_address}_history_GET.py index 41345770..01611293 100644 --- a/tests/app/test_bond_tokens_{token_address}_history_GET.py +++ b/tests/app/test_bond_tokens_{token_address}_history_GET.py @@ -277,7 +277,7 @@ def test_normal_1(self, client, db, personal_info_contract): _token.type = TokenType.IBET_STRAIGHT_BOND.value _token.tx_hash = "" _token.abi = "" - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) db.commit() @@ -330,7 +330,7 @@ async def test_normal_2(self, client, db, personal_info_contract): _token.type = TokenType.IBET_STRAIGHT_BOND.value _token.tx_hash = "" _token.abi = "" - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) db.commit() @@ -421,7 +421,7 @@ async def test_normal_3_1(self, client, db, personal_info_contract): _token.type = TokenType.IBET_STRAIGHT_BOND.value _token.tx_hash = "" _token.abi = "" - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) db.commit() @@ -510,7 +510,7 @@ async def test_normal_3_2(self, client, db, personal_info_contract): _token.type = TokenType.IBET_STRAIGHT_BOND.value _token.tx_hash = "" _token.abi = "" - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) db.commit() @@ -590,7 +590,7 @@ async def test_normal_3_3(self, client, db, personal_info_contract, monkeypatch) _token.type = TokenType.IBET_STRAIGHT_BOND.value _token.tx_hash = "" _token.abi = "" - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) _operation_log_1 = TokenUpdateOperationLog() @@ -695,7 +695,7 @@ async def test_normal_3_4(self, client, db, personal_info_contract, monkeypatch) _token.type = TokenType.IBET_STRAIGHT_BOND.value _token.tx_hash = "" _token.abi = "" - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) _operation_log_1 = TokenUpdateOperationLog() @@ -786,7 +786,7 @@ async def test_normal_4_1(self, client, db, personal_info_contract): _token.type = TokenType.IBET_STRAIGHT_BOND.value _token.tx_hash = "" _token.abi = "" - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) db.commit() @@ -881,7 +881,7 @@ async def test_normal_4_2(self, client, db, personal_info_contract): _token.type = TokenType.IBET_STRAIGHT_BOND.value _token.tx_hash = "" _token.abi = "" - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) db.commit() @@ -977,7 +977,7 @@ async def test_normal_5_1(self, client, db, personal_info_contract): _token.type = TokenType.IBET_STRAIGHT_BOND.value _token.tx_hash = "" _token.abi = "" - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) db.commit() @@ -1057,7 +1057,7 @@ async def test_normal_5_2(self, client, db, personal_info_contract): _token.type = TokenType.IBET_STRAIGHT_BOND.value _token.tx_hash = "" _token.abi = "" - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) db.commit() diff --git a/tests/app/test_bond_tokens_{token_address}_holders_GET.py b/tests/app/test_bond_tokens_{token_address}_holders_GET.py index e7d53cb1..a88f9bf3 100644 --- a/tests/app/test_bond_tokens_{token_address}_holders_GET.py +++ b/tests/app/test_bond_tokens_{token_address}_holders_GET.py @@ -57,7 +57,7 @@ def test_normal_1(self, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() @@ -95,7 +95,7 @@ def test_normal_2(self, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) # prepare data: Position @@ -212,7 +212,7 @@ def test_normal_3(self, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) # prepare data: account_address_1 @@ -441,7 +441,7 @@ def test_normal_4_1_1(self, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) # prepare data: account_address_1 @@ -576,7 +576,7 @@ def test_normal_4_1_2(self, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) idx_position_1 = IDXPosition() @@ -733,7 +733,7 @@ def test_normal_4_2_1(self, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) # prepare data: account_address_1 @@ -925,7 +925,7 @@ def test_normal_4_2_2(self, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) # prepare data: account_address_1 @@ -1136,7 +1136,7 @@ def test_normal_4_2_3(self, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) # prepare data: account_address_1 @@ -1347,7 +1347,7 @@ def test_normal_4_3_1(self, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) # prepare data: account_address_1 @@ -1539,7 +1539,7 @@ def test_normal_4_3_2(self, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) # prepare data: account_address_1 @@ -1750,7 +1750,7 @@ def test_normal_4_3_3(self, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) # prepare data: account_address_1 @@ -1961,7 +1961,7 @@ def test_normal_4_4_1(self, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) # prepare data: account_address_1 @@ -2153,7 +2153,7 @@ def test_normal_4_4_2(self, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) # prepare data: account_address_1 @@ -2365,7 +2365,7 @@ def test_normal_4_4_3(self, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) # prepare data: account_address_1 @@ -2606,7 +2606,7 @@ def test_normal_4_5_1(self, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) # prepare data: account_address_1 @@ -2801,7 +2801,7 @@ def test_normal_4_5_2(self, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) # prepare data: account_address_1 @@ -3015,7 +3015,7 @@ def test_normal_4_5_3(self, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) # prepare data: account_address_1 @@ -3210,7 +3210,7 @@ def test_normal_4_6(self, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) # prepare data: account_address_1 @@ -3402,7 +3402,7 @@ def test_normal_4_7(self, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) # prepare data: account_address_1 @@ -3613,7 +3613,7 @@ def test_normal_4_8(self, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) # prepare data: account_address_1 @@ -3805,7 +3805,7 @@ def test_normal_5_1(self, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) # prepare data: account_address_1 @@ -4038,7 +4038,7 @@ def test_normal_5_2(self, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) # prepare data: account_address_1 @@ -4271,7 +4271,7 @@ def test_normal_5_3(self, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) # prepare data: account_address_1 @@ -4504,7 +4504,7 @@ def test_normal_5_4(self, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) # prepare data: account_address_1 @@ -4737,7 +4737,7 @@ def test_normal_5_5(self, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) # prepare data: account_address_1 @@ -4970,7 +4970,7 @@ def test_normal_5_6(self, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) # prepare data: account_address_1 @@ -5204,7 +5204,7 @@ def test_normal_5_7(self, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) # prepare data: account_address_1 @@ -5469,7 +5469,7 @@ def test_normal_5_8(self, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) # prepare data: account_address_1 @@ -5733,7 +5733,7 @@ def test_normal_6_1(self, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) # prepare data: account_address_1 @@ -5944,7 +5944,7 @@ def test_normal_6_2(self, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) # prepare data: account_address_1 @@ -6190,7 +6190,7 @@ def test_error_4(self, client, db): token.token_address = _token_address token.abi = "" token.token_status = 0 - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() diff --git a/tests/app/test_bond_tokens_{token_address}_holders_count_GET.py b/tests/app/test_bond_tokens_{token_address}_holders_count_GET.py index 03699c35..688b6d97 100644 --- a/tests/app/test_bond_tokens_{token_address}_holders_count_GET.py +++ b/tests/app/test_bond_tokens_{token_address}_holders_count_GET.py @@ -55,7 +55,7 @@ def test_normal_1_1(self, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() @@ -90,7 +90,7 @@ def test_normal_1_2(self, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) idx_position_1 = IDXPosition() @@ -134,7 +134,7 @@ def test_normal_1_3(self, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) idx_position_1 = IDXPosition() @@ -196,7 +196,7 @@ def test_normal_1_4(self, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) idx_position_1 = IDXPosition() @@ -250,7 +250,7 @@ def test_normal_2(self, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) idx_position_1 = IDXPosition() @@ -417,7 +417,7 @@ def test_error_4(self, client, db): token.token_address = _token_address token.abi = "" token.token_status = 0 - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() diff --git a/tests/app/test_bond_tokens_{token_address}_holders_{account_address}_GET.py b/tests/app/test_bond_tokens_{token_address}_holders_{account_address}_GET.py index 341e5fd3..f8502bca 100644 --- a/tests/app/test_bond_tokens_{token_address}_holders_{account_address}_GET.py +++ b/tests/app/test_bond_tokens_{token_address}_holders_{account_address}_GET.py @@ -60,7 +60,7 @@ def test_normal_1_1(self, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) # prepare data: Personal Info @@ -130,7 +130,7 @@ def test_normal_1_2(self, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) # prepare data: Position @@ -211,7 +211,7 @@ def test_normal_1_3(self, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) # prepare data: Position @@ -311,7 +311,7 @@ def test_normal_2_1(self, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) idx_position_1 = IDXPosition() @@ -373,7 +373,7 @@ def test_normal_2_2(self, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) idx_position_1 = IDXPosition() @@ -529,7 +529,7 @@ def test_error_4(self, client, db): token.token_address = _token_address token.abi = "" token.token_status = 0 - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() diff --git a/tests/app/test_bond_tokens_{token_address}_personal_info_POST.py b/tests/app/test_bond_tokens_{token_address}_personal_info_POST.py index f490e214..1cdabe96 100644 --- a/tests/app/test_bond_tokens_{token_address}_personal_info_POST.py +++ b/tests/app/test_bond_tokens_{token_address}_personal_info_POST.py @@ -59,7 +59,7 @@ def test_normal_1(self, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() @@ -140,7 +140,7 @@ def test_normal_2(self, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() @@ -227,7 +227,7 @@ def test_normal_3(self, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() @@ -680,7 +680,7 @@ def test_error_4(self, client, db): token.token_address = _token_address token.abi = "" token.token_status = 0 - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() @@ -738,7 +738,7 @@ def test_error_5(self, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() diff --git a/tests/app/test_bond_tokens_{token_address}_personal_info_batch_GET.py b/tests/app/test_bond_tokens_{token_address}_personal_info_batch_GET.py index 5da89c3e..a9b605ff 100644 --- a/tests/app/test_bond_tokens_{token_address}_personal_info_batch_GET.py +++ b/tests/app/test_bond_tokens_{token_address}_personal_info_batch_GET.py @@ -61,7 +61,7 @@ def test_normal_1(self, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() @@ -94,7 +94,7 @@ def test_normal_2(self, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) # Prepare data : BatchRegisterPersonalInfoUpload @@ -153,7 +153,7 @@ def test_normal_3(self, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) # Prepare data : BatchRegisterPersonalInfoUpload @@ -208,7 +208,7 @@ def test_normal_4(self, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) # Prepare data : BatchRegisterPersonalInfoUpload @@ -263,7 +263,7 @@ def test_normal_5(self, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) # Prepare data : BatchRegisterPersonalInfoUpload @@ -327,7 +327,7 @@ def test_error_1(self, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() @@ -370,7 +370,7 @@ def test_error_2(self, client, db): token.issuer_address = _issuer_address_2 token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) # Prepare data : BatchRegisterPersonalInfoUpload diff --git a/tests/app/test_bond_tokens_{token_address}_personal_info_batch_POST.py b/tests/app/test_bond_tokens_{token_address}_personal_info_batch_POST.py index f642c94d..ece0bd2e 100644 --- a/tests/app/test_bond_tokens_{token_address}_personal_info_batch_POST.py +++ b/tests/app/test_bond_tokens_{token_address}_personal_info_batch_POST.py @@ -70,7 +70,7 @@ def test_normal_1(self, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() @@ -147,7 +147,7 @@ def test_normal_2(self, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() @@ -735,7 +735,7 @@ def test_error_4_1(self, client, db): token.token_address = _token_address token.abi = "" token.token_status = 0 - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() @@ -797,7 +797,7 @@ def test_error_4_2(self, client, db): token.token_address = _token_address token.abi = "" token.token_status = 1 - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() diff --git a/tests/app/test_bond_tokens_{token_address}_personal_info_batch_{batch_id}_GET.py b/tests/app/test_bond_tokens_{token_address}_personal_info_batch_{batch_id}_GET.py index 5321210c..fb7af460 100644 --- a/tests/app/test_bond_tokens_{token_address}_personal_info_batch_{batch_id}_GET.py +++ b/tests/app/test_bond_tokens_{token_address}_personal_info_batch_{batch_id}_GET.py @@ -95,7 +95,7 @@ def test_normal_1(self, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) # Prepare data : BatchRegisterPersonalInfoUpload diff --git a/tests/app/test_bond_tokens_{token_address}_redeem_GET.py b/tests/app/test_bond_tokens_{token_address}_redeem_GET.py index cf2b8c9f..79acf3b6 100644 --- a/tests/app/test_bond_tokens_{token_address}_redeem_GET.py +++ b/tests/app/test_bond_tokens_{token_address}_redeem_GET.py @@ -74,7 +74,7 @@ def test_normal_1(self, client, db): _token.issuer_address = self.test_issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: IDXIssueRedeem @@ -110,7 +110,7 @@ def test_normal_2(self, client, db): _token.issuer_address = self.test_issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: IDXIssueRedeem @@ -191,7 +191,7 @@ def test_normal_3(self, client, db): _token.issuer_address = self.test_issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: IDXIssueRedeem @@ -278,7 +278,7 @@ def test_normal_4(self, client, db): _token.issuer_address = self.test_issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: IDXIssueRedeem @@ -365,7 +365,7 @@ def test_error_2(self, client, db): _token.token_address = self.test_token_address _token.abi = {} _token.token_status = 0 - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) db.commit() diff --git a/tests/app/test_bond_tokens_{token_address}_redeem_POST.py b/tests/app/test_bond_tokens_{token_address}_redeem_POST.py index 5c71938b..6a19d779 100644 --- a/tests/app/test_bond_tokens_{token_address}_redeem_POST.py +++ b/tests/app/test_bond_tokens_{token_address}_redeem_POST.py @@ -58,7 +58,7 @@ def test_normal_1(self, IbetStraightBondContract_mock, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() @@ -113,7 +113,7 @@ def test_normal_2(self, IbetStraightBondContract_mock, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() @@ -159,7 +159,7 @@ def test_error_1(self, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() @@ -206,7 +206,7 @@ def test_error_2(self, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() @@ -253,7 +253,7 @@ def test_error_3(self, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() @@ -396,7 +396,7 @@ def test_error_7(self, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() @@ -510,7 +510,7 @@ def test_error_10(self, client, db): token.token_address = _token_address token.abi = "" token.token_status = 0 - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() @@ -558,7 +558,7 @@ def test_error_11(self, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() diff --git a/tests/app/test_bond_tokens_{token_address}_redeem_batch_GET.py b/tests/app/test_bond_tokens_{token_address}_redeem_batch_GET.py index 347dd656..6e1be813 100644 --- a/tests/app/test_bond_tokens_{token_address}_redeem_batch_GET.py +++ b/tests/app/test_bond_tokens_{token_address}_redeem_batch_GET.py @@ -52,7 +52,7 @@ def test_normal_1(self, client, db): token.issuer_address = issuer_address token.token_address = token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() @@ -80,7 +80,7 @@ def test_normal_2(self, client, db): token.issuer_address = issuer_address token.token_address = token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) redeem_upload1 = BatchIssueRedeemUpload() @@ -127,7 +127,7 @@ def test_normal_3_1(self, client, db): token.issuer_address = issuer_address token.token_address = token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) redeem_upload1 = BatchIssueRedeemUpload() @@ -234,7 +234,7 @@ def test_normal_3_2(self, client, db): token.issuer_address = issuer_address token.token_address = token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) redeem_upload1 = BatchIssueRedeemUpload() @@ -328,7 +328,7 @@ def test_normal_3_3(self, client, db): token.issuer_address = issuer_address token.token_address = token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) redeem_upload1 = BatchIssueRedeemUpload() @@ -428,7 +428,7 @@ def test_normal_4(self, client, db): token.issuer_address = issuer_address token.token_address = token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) redeem_upload1 = BatchIssueRedeemUpload() @@ -520,7 +520,7 @@ def test_normal_5(self, client, db): token.issuer_address = issuer_address token.token_address = token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) additional_issue_upload1 = BatchIssueRedeemUpload() @@ -643,7 +643,7 @@ def test_error_1(self, client, db): token.issuer_address = issuer_address token.token_address = token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() diff --git a/tests/app/test_bond_tokens_{token_address}_redeem_batch_POST.py b/tests/app/test_bond_tokens_{token_address}_redeem_batch_POST.py index 57a84673..b772fddb 100644 --- a/tests/app/test_bond_tokens_{token_address}_redeem_batch_POST.py +++ b/tests/app/test_bond_tokens_{token_address}_redeem_batch_POST.py @@ -66,7 +66,7 @@ def test_normal_1(self, client, db): token.issuer_address = issuer_address token.token_address = token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() @@ -131,7 +131,7 @@ def test_normal_2(self, client, db): token.issuer_address = issuer_address token.token_address = token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() @@ -206,7 +206,7 @@ def test_error_1_1(self, client, db): token.issuer_address = issuer_address token.token_address = token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() @@ -258,7 +258,7 @@ def test_error_1_2(self, client, db): token.issuer_address = issuer_address token.token_address = token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() @@ -313,7 +313,7 @@ def test_error_1_3_1(self, client, db): token.issuer_address = issuer_address token.token_address = token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() @@ -368,7 +368,7 @@ def test_error_1_3_2(self, client, db): token.issuer_address = issuer_address token.token_address = token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() @@ -423,7 +423,7 @@ def test_error_1_4(self, client, db): token.issuer_address = issuer_address token.token_address = token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() @@ -472,7 +472,7 @@ def test_error_1_5(self, client, db): token.issuer_address = issuer_address token.token_address = token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() @@ -521,7 +521,7 @@ def test_error_1_6(self, client, db): token.issuer_address = issuer_address token.token_address = token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() @@ -568,7 +568,7 @@ def test_error_1_7_1(self, client, db): token.issuer_address = issuer_address token.token_address = token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() @@ -615,7 +615,7 @@ def test_error_1_7_2(self, client, db): token.issuer_address = issuer_address token.token_address = token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() @@ -703,7 +703,7 @@ def test_error_1_8_2(self, client, db): token.token_address = token_address token.abi = "" token.token_status = 0 - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() diff --git a/tests/app/test_bond_tokens_{token_address}_redeem_batch_{batch_id}_GET.py b/tests/app/test_bond_tokens_{token_address}_redeem_batch_{batch_id}_GET.py index 5a0f2b72..7cc8e409 100644 --- a/tests/app/test_bond_tokens_{token_address}_redeem_batch_{batch_id}_GET.py +++ b/tests/app/test_bond_tokens_{token_address}_redeem_batch_{batch_id}_GET.py @@ -71,7 +71,7 @@ def test_normal_1_1(self, client, db): token.issuer_address = issuer_address token.token_address = test_token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) batch_upload = BatchIssueRedeemUpload() @@ -158,7 +158,7 @@ def test_normal_1_2(self, client, db): token.issuer_address = issuer_address token.token_address = test_token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) batch_upload = BatchIssueRedeemUpload() @@ -245,7 +245,7 @@ def test_normal_2(self, client, db): token.issuer_address = issuer_address token.token_address = test_token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) batch_upload = BatchIssueRedeemUpload() @@ -358,7 +358,7 @@ def test_error_1(self, client, db): token.issuer_address = issuer_address token.token_address = test_token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) batch_upload = BatchIssueRedeemUpload() diff --git a/tests/app/test_bond_tokens_{token_address}_scheduled_events_POST.py b/tests/app/test_bond_tokens_{token_address}_scheduled_events_POST.py index 6ea29a5e..4188fd3e 100644 --- a/tests/app/test_bond_tokens_{token_address}_scheduled_events_POST.py +++ b/tests/app/test_bond_tokens_{token_address}_scheduled_events_POST.py @@ -63,7 +63,7 @@ def test_normal_1(self, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() @@ -150,7 +150,7 @@ def test_normal_2(self, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() @@ -362,7 +362,7 @@ def test_error_3(self, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() @@ -508,7 +508,7 @@ def test_error_6(self, client, db): token.token_address = _token_address token.abi = "" token.token_status = 0 - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() diff --git a/tests/app/test_bond_transfer_approvals_GET.py b/tests/app/test_bond_transfer_approvals_GET.py index b04ece78..21e013d9 100644 --- a/tests/app/test_bond_transfer_approvals_GET.py +++ b/tests/app/test_bond_transfer_approvals_GET.py @@ -100,7 +100,7 @@ def test_normal_1(self, client, db): _token.token_address = self.test_token_address_1 _token.abi = {} _token.token_status = 2 - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: Token(share) @@ -110,7 +110,7 @@ def test_normal_1(self, client, db): _token.issuer_address = self.test_issuer_address_1 _token.token_address = self.test_token_address_2 _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: IDXTransferApproval(failed token) @@ -207,7 +207,7 @@ def test_normal_2(self, client, db): _token.issuer_address = self.test_issuer_address_1 _token.token_address = self.test_token_address_1 _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: IDXTransferApproval(ApplyFor(unapproved)) @@ -392,7 +392,7 @@ def test_normal_3_1(self, client, db): _token.issuer_address = self.test_issuer_address_1 _token.token_address = self.test_token_address_1 _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: Token(issuer-1) @@ -402,7 +402,7 @@ def test_normal_3_1(self, client, db): _token.issuer_address = self.test_issuer_address_1 _token.token_address = self.test_token_address_2 _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: Token(issuer-2) @@ -412,7 +412,7 @@ def test_normal_3_1(self, client, db): _token.issuer_address = self.test_issuer_address_2 _token.token_address = self.test_token_address_3 _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: IDXTransferApproval(issuer-1 token-1) @@ -579,7 +579,7 @@ def test_normal_3_2(self, client, db): _token.issuer_address = self.test_issuer_address_1 _token.token_address = self.test_token_address_1 _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: Token(issuer-1) @@ -589,7 +589,7 @@ def test_normal_3_2(self, client, db): _token.issuer_address = self.test_issuer_address_1 _token.token_address = self.test_token_address_2 _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: Token(issuer-2) @@ -599,7 +599,7 @@ def test_normal_3_2(self, client, db): _token.issuer_address = self.test_issuer_address_2 _token.token_address = self.test_token_address_3 _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: IDXTransferApproval(issuer-1 token-1) @@ -774,7 +774,7 @@ def test_normal_4(self, client, db): _token.issuer_address = self.test_issuer_address_1 _token.token_address = self.test_token_address_1 _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: Token(issuer-1) @@ -784,7 +784,7 @@ def test_normal_4(self, client, db): _token.issuer_address = self.test_issuer_address_1 _token.token_address = self.test_token_address_2 _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: Token(issuer-1) @@ -794,7 +794,7 @@ def test_normal_4(self, client, db): _token.issuer_address = self.test_issuer_address_1 _token.token_address = self.test_token_address_3 _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: Token(issuer-1) @@ -804,7 +804,7 @@ def test_normal_4(self, client, db): _token.issuer_address = self.test_issuer_address_1 _token.token_address = self.test_token_address_4 _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: IDXTransferApproval(issuer-1 token-1) diff --git a/tests/app/test_bond_transfer_approvals_{token_address}_GET.py b/tests/app/test_bond_transfer_approvals_{token_address}_GET.py index 9774fcb7..dc880948 100644 --- a/tests/app/test_bond_transfer_approvals_{token_address}_GET.py +++ b/tests/app/test_bond_transfer_approvals_{token_address}_GET.py @@ -110,7 +110,7 @@ def test_normal_1_1(self, client, db): _token.issuer_address = self.test_issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) db.commit() @@ -136,7 +136,7 @@ def test_normal_1_2(self, client, db): _token.issuer_address = self.test_issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: IDXPersonalInfo @@ -330,7 +330,7 @@ def test_normal_2(self, client, db): _token.issuer_address = self.test_issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: IDXPersonalInfo @@ -450,7 +450,7 @@ def test_normal_3(self, client, db): _token.issuer_address = self.test_issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: IDXPersonalInfo @@ -654,7 +654,7 @@ def test_normal_4_1(self, client, db): _token.issuer_address = self.test_issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: IDXPersonalInfo @@ -767,7 +767,7 @@ def test_normal_4_2(self, client, db): _token.issuer_address = self.test_issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: IDXPersonalInfo @@ -881,7 +881,7 @@ def test_normal_4_3_1(self, client, db): _token.issuer_address = self.test_issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: IDXPersonalInfo @@ -1027,7 +1027,7 @@ def test_normal_4_3_2(self, client, db): _token.issuer_address = self.test_issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: IDXPersonalInfo @@ -1173,7 +1173,7 @@ def test_normal_4_3_3(self, client, db): _token.issuer_address = self.test_issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: IDXTransferApproval @@ -1407,7 +1407,7 @@ def test_normal_4_3_4(self, client, db): _token.issuer_address = self.test_issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: IDXPersonalInfo @@ -1627,7 +1627,7 @@ def test_normal_4_3_5(self, client, db): _token.issuer_address = self.test_issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: IDXPersonalInfo @@ -1879,7 +1879,7 @@ def test_normal_5_1(self, client, db): _token.issuer_address = self.test_issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: IDXPersonalInfo @@ -2079,7 +2079,7 @@ def test_normal_5_2(self, client, db): _token.issuer_address = self.test_issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: IDXPersonalInfo @@ -2319,7 +2319,7 @@ def test_normal_5_3(self, client, db): _token.issuer_address = self.test_issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: IDXPersonalInfo @@ -2559,7 +2559,7 @@ def test_normal_5_4(self, client, db): _token.issuer_address = self.test_issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: IDXPersonalInfo @@ -2764,7 +2764,7 @@ def test_normal_5_5(self, client, db): _token.issuer_address = self.test_issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: IDXPersonalInfo @@ -2967,7 +2967,7 @@ def test_normal_5_6(self, client, db): _token.issuer_address = self.test_issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: IDXPersonalInfo @@ -3206,7 +3206,7 @@ def test_normal_5_7(self, client, db): _token.issuer_address = self.test_issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: IDXPersonalInfo @@ -3452,7 +3452,7 @@ def test_normal_5_8(self, client, db): _token.issuer_address = self.test_issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: IDXPersonalInfo @@ -3694,7 +3694,7 @@ def test_normal_5_9(self, client, db): _token.issuer_address = self.test_issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: IDXPersonalInfo @@ -4235,7 +4235,7 @@ def test_error_2(self, client, db): _token.token_address = self.test_token_address _token.abi = {} _token.token_status = 0 - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) db.commit() diff --git a/tests/app/test_bond_transfer_approvals_{token_address}_{id}_GET.py b/tests/app/test_bond_transfer_approvals_{token_address}_{id}_GET.py index 71fd6fbe..3e1ea6c3 100644 --- a/tests/app/test_bond_transfer_approvals_{token_address}_{id}_GET.py +++ b/tests/app/test_bond_transfer_approvals_{token_address}_{id}_GET.py @@ -96,7 +96,7 @@ def test_normal_1_1(self, client, db): _token.issuer_address = self.test_issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: IDXPersonalInfo @@ -209,7 +209,7 @@ def test_normal_1_2(self, client, db): _token.issuer_address = self.test_issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: IDXTransferApproval @@ -274,7 +274,7 @@ def test_normal_2_1(self, client, db): _token.issuer_address = self.test_issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: IDXTransferApproval @@ -384,7 +384,7 @@ def test_normal_2_2(self, client, db): _token.issuer_address = self.test_issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: IDXTransferApproval @@ -496,7 +496,7 @@ def test_normal_3(self, client, db): _token.issuer_address = self.test_issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: IDXPersonalInfo @@ -610,7 +610,7 @@ def test_normal_4_1(self, client, db): _token.issuer_address = self.test_issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: IDXTransferApproval @@ -722,7 +722,7 @@ def test_normal_4_2(self, client, db): _token.issuer_address = self.test_issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: IDXTransferApproval @@ -835,7 +835,7 @@ def test_normal_4_3(self, client, db): _token.issuer_address = self.test_issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: IDXPersonalInfo @@ -982,7 +982,7 @@ def test_error_2(self, client, db): _token.token_address = self.test_token_address _token.abi = {} _token.token_status = 0 - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) db.commit() @@ -1010,7 +1010,7 @@ def test_error_3(self, client, db): _token.token_address = self.test_token_address _token.abi = {} _token.token_status = 1 - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) db.commit() diff --git a/tests/app/test_bond_transfer_approvals_{token_address}_{id}_POST.py b/tests/app/test_bond_transfer_approvals_{token_address}_{id}_POST.py index 5e5ed817..8f7865d7 100644 --- a/tests/app/test_bond_transfer_approvals_{token_address}_{id}_POST.py +++ b/tests/app/test_bond_transfer_approvals_{token_address}_{id}_POST.py @@ -90,7 +90,7 @@ def test_normal_1_1(self, client, db): _token.issuer_address = issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) id = 10 @@ -227,7 +227,7 @@ def test_normal_1_2(self, client, db): _token.issuer_address = issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) id = 10 @@ -365,7 +365,7 @@ def test_normal_2_1(self, client, db): _token.issuer_address = issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) id = 10 @@ -507,7 +507,7 @@ def test_normal_3(self, client, db): _token.issuer_address = issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) id = 10 @@ -841,7 +841,7 @@ def test_error_3_2(self, client, db): _token.issuer_address = issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) db.commit() @@ -886,7 +886,7 @@ def test_error_4_1(self, client, db): _token.token_address = self.test_token_address _token.abi = {} _token.token_status = 0 - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) db.commit() @@ -930,7 +930,7 @@ def test_error_4_2(self, client, db): _token.issuer_address = issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) id = 10 @@ -995,7 +995,7 @@ def test_error_4_3(self, client, db): _token.issuer_address = issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) id = 10 @@ -1060,7 +1060,7 @@ def test_error_4_4(self, client, db): _token.issuer_address = issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) id = 10 @@ -1123,7 +1123,7 @@ def test_error_4_5(self, client, db): _token.issuer_address = issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) id = 10 @@ -1186,7 +1186,7 @@ def test_error_4_6(self, client, db): _token.issuer_address = issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) id = 10 @@ -1262,7 +1262,7 @@ def test_error_5_1(self, client, db): _token.issuer_address = issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) id = 10 @@ -1355,7 +1355,7 @@ def test_error_5_2(self, client, db): _token.issuer_address = issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) id = 10 @@ -1465,7 +1465,7 @@ def test_error_5_3(self, client, db): _token.issuer_address = issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) id = 10 @@ -1559,7 +1559,7 @@ def test_error_5_4(self, client, db): _token.issuer_address = issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) id = 10 @@ -1664,7 +1664,7 @@ def test_error_6_1(self, client, db): _token.issuer_address = issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) id = 10 @@ -1757,7 +1757,7 @@ def test_error_6_2(self, client, db): _token.issuer_address = issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) id = 10 @@ -1855,7 +1855,7 @@ def test_error_7_1(self, client, db): _token.issuer_address = issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) id = 10 @@ -1923,7 +1923,7 @@ def test_error_7_2(self, client, db): _token.issuer_address = issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) id = 10 diff --git a/tests/app/test_bond_transfers_POST.py b/tests/app/test_bond_transfers_POST.py index dd9e02cd..bbc7ea4b 100644 --- a/tests/app/test_bond_transfers_POST.py +++ b/tests/app/test_bond_transfers_POST.py @@ -22,7 +22,7 @@ from unittest.mock import ANY, MagicMock from app.exceptions import SendTransactionError -from app.model.blockchain.tx_params.ibet_straight_bond import TransferParams +from app.model.blockchain.tx_params.ibet_straight_bond import ForcedTransferParams from app.model.db import Account, AuthToken, Token, TokenType, TokenVersion from app.utils.e2ee_utils import E2EEUtils from tests.account_config import config_eth_account @@ -38,7 +38,7 @@ class TestAppRoutersBondTransfersPOST: # # Authorization by eoa-password - @mock.patch("app.model.blockchain.token.IbetStraightBondContract.transfer") + @mock.patch("app.model.blockchain.token.IbetStraightBondContract.forced_transfer") def test_normal_1(self, IbetStraightBondContract_mock, client, db): _admin_account = config_eth_account("user1") _admin_address = _admin_account["address"] @@ -65,7 +65,7 @@ def test_normal_1(self, IbetStraightBondContract_mock, client, db): token.issuer_address = _admin_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() @@ -91,7 +91,7 @@ def test_normal_1(self, IbetStraightBondContract_mock, client, db): # assertion IbetStraightBondContract_mock.assert_any_call( - data=TransferParams( + data=ForcedTransferParams( **{ "from_address": _from_address, "to_address": _to_address, @@ -107,7 +107,7 @@ def test_normal_1(self, IbetStraightBondContract_mock, client, db): # # Authorization by auth-token - @mock.patch("app.model.blockchain.token.IbetStraightBondContract.transfer") + @mock.patch("app.model.blockchain.token.IbetStraightBondContract.forced_transfer") def test_normal_2(self, IbetStraightBondContract_mock, client, db): _admin_account = config_eth_account("user1") _admin_address = _admin_account["address"] @@ -140,7 +140,7 @@ def test_normal_2(self, IbetStraightBondContract_mock, client, db): token.issuer_address = _admin_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() @@ -163,7 +163,7 @@ def test_normal_2(self, IbetStraightBondContract_mock, client, db): # assertion IbetStraightBondContract_mock.assert_any_call( - data=TransferParams( + data=ForcedTransferParams( **{ "from_address": _from_address, "to_address": _to_address, @@ -533,7 +533,7 @@ def test_error_9(self, client, db): token.token_address = _token_address token.abi = "" token.token_status = 0 - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() @@ -564,7 +564,7 @@ def test_error_9(self, client, db): # # Send Transaction Error @mock.patch( - "app.model.blockchain.token.IbetStraightBondContract.transfer", + "app.model.blockchain.token.IbetStraightBondContract.forced_transfer", MagicMock(side_effect=SendTransactionError()), ) def test_error_10(self, client, db): @@ -593,7 +593,7 @@ def test_error_10(self, client, db): token.issuer_address = _admin_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() diff --git a/tests/app/test_bond_transfers_{token_address}_GET.py b/tests/app/test_bond_transfers_{token_address}_GET.py index 0a414b4d..cd0116c6 100644 --- a/tests/app/test_bond_transfers_{token_address}_GET.py +++ b/tests/app/test_bond_transfers_{token_address}_GET.py @@ -72,7 +72,7 @@ def test_normal_1(self, client, db): _token.issuer_address = self.test_issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: IDXTransfer @@ -148,7 +148,7 @@ def test_normal_2(self, client, db): _token.issuer_address = self.test_issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: IDXPersonalInfo @@ -251,7 +251,7 @@ def test_normal_3_1(self, client, db): _token.issuer_address = self.test_issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: IDXTransfer @@ -339,7 +339,7 @@ def test_normal_3_2(self, client, db): _token.issuer_address = self.test_issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: IDXTransfer @@ -427,7 +427,7 @@ def test_normal_3_3(self, client, db): _token.issuer_address = self.test_issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: IDXTransfer @@ -503,7 +503,7 @@ def test_normal_3_4(self, client, db): _token.issuer_address = self.test_issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: IDXTransfer @@ -579,7 +579,7 @@ def test_normal_3_5(self, client, db): _token.issuer_address = self.test_issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: IDXTransfer @@ -684,7 +684,7 @@ def test_normal_3_6(self, client, db): _token.issuer_address = self.test_issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: IDXTransfer @@ -789,7 +789,7 @@ def test_normal_3_7_1(self, client, db): _token.issuer_address = self.test_issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: IDXTransfer @@ -865,7 +865,7 @@ def test_normal_3_7_2(self, client, db): _token.issuer_address = self.test_issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: IDXTransfer @@ -953,7 +953,7 @@ def test_normal_3_7_3(self, client, db): _token.issuer_address = self.test_issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: IDXTransfer @@ -1041,7 +1041,7 @@ def test_normal_3_8(self, client, db): _token.issuer_address = self.test_issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: IDXTransfer @@ -1117,7 +1117,7 @@ def test_normal_3_9(self, client, db): _token.issuer_address = self.test_issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: IDXTransfer @@ -1192,7 +1192,7 @@ def test_normal_4_1(self, client, db): _token.issuer_address = self.test_issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: IDXTransfer @@ -1274,7 +1274,7 @@ def test_normal_4_2(self, client, db): _token.issuer_address = self.test_issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: IDXTransfer @@ -1377,7 +1377,7 @@ def test_normal_4_3(self, client, db): _token.issuer_address = self.test_issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: IDXTransfer @@ -1480,7 +1480,7 @@ def test_normal_4_4(self, client, db): _token.issuer_address = self.test_issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: IDXTransfer @@ -1609,7 +1609,7 @@ def test_normal_4_5(self, client, db): _token.issuer_address = self.test_issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: IDXTransfer @@ -1738,7 +1738,7 @@ def test_normal_4_6(self, client, db): _token.issuer_address = self.test_issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: IDXTransfer @@ -1860,7 +1860,7 @@ def test_error_2(self, client, db): _token.token_address = self.test_token_address _token.abi = {} _token.token_status = 0 - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) db.commit() diff --git a/tests/app/test_ledger_{token_address}_details_data_GET.py b/tests/app/test_ledger_{token_address}_details_data_GET.py index 5c84b770..55d9096c 100644 --- a/tests/app/test_ledger_{token_address}_details_data_GET.py +++ b/tests/app/test_ledger_{token_address}_details_data_GET.py @@ -45,7 +45,7 @@ def test_normal_1_1(self, client, db): _token.issuer_address = issuer_address _token.token_address = token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) _details_data_1_1 = LedgerDetailsData() @@ -161,7 +161,7 @@ def test_normal_1_2(self, client, db): _token.issuer_address = issuer_address _token.token_address = token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) _details_data_1_1 = LedgerDetailsData() @@ -274,7 +274,7 @@ def test_normal_2(self, client, db): _token.issuer_address = issuer_address _token.token_address = token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) _details_data_1_1 = LedgerDetailsData() @@ -416,7 +416,7 @@ def test_error_2_1(self, client, db): _token.token_address = token_address _token.abi = {} _token.token_status = 2 - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) db.commit() @@ -477,7 +477,7 @@ def test_error_3(self, client, db): _token.token_address = token_address _token.abi = {} _token.token_status = 0 - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) db.commit() diff --git a/tests/app/test_ledger_{token_address}_details_data_POST.py b/tests/app/test_ledger_{token_address}_details_data_POST.py index dc0ac3db..d66b10eb 100644 --- a/tests/app/test_ledger_{token_address}_details_data_POST.py +++ b/tests/app/test_ledger_{token_address}_details_data_POST.py @@ -46,7 +46,7 @@ def test_normal_1(self, client, db): _token.issuer_address = issuer_address _token.token_address = token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) db.commit() @@ -118,7 +118,7 @@ def test_normal_2(self, client, db): _token.issuer_address = issuer_address _token.token_address = token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) db.commit() @@ -413,7 +413,7 @@ def test_error_5(self, client, db): _token.token_address = token_address _token.abi = {} _token.token_status = 0 - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) db.commit() diff --git a/tests/app/test_ledger_{token_address}_details_data_{data_id}_DELETE.py b/tests/app/test_ledger_{token_address}_details_data_{data_id}_DELETE.py index 2362ea1a..b28f6758 100644 --- a/tests/app/test_ledger_{token_address}_details_data_{data_id}_DELETE.py +++ b/tests/app/test_ledger_{token_address}_details_data_{data_id}_DELETE.py @@ -45,7 +45,7 @@ def test_normal_1(self, client, db): _token.issuer_address = issuer_address _token.token_address = token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) _details_1_data_1 = LedgerDetailsData() @@ -196,7 +196,7 @@ def test_error_4(self, client, db): _token.token_address = token_address _token.abi = {} _token.token_status = 0 - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) db.commit() diff --git a/tests/app/test_ledger_{token_address}_details_data_{data_id}_GET.py b/tests/app/test_ledger_{token_address}_details_data_{data_id}_GET.py index 14be1c94..b7aad880 100644 --- a/tests/app/test_ledger_{token_address}_details_data_{data_id}_GET.py +++ b/tests/app/test_ledger_{token_address}_details_data_{data_id}_GET.py @@ -44,7 +44,7 @@ def test_normal_1_1(self, client, db): _token.issuer_address = issuer_address _token.token_address = token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) _details_1_data_1 = LedgerDetailsData() @@ -127,7 +127,7 @@ def test_normal_1_2(self, client, db): _token.issuer_address = issuer_address _token.token_address = token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) _details_1_data_1 = LedgerDetailsData() @@ -207,7 +207,7 @@ def test_normal_2(self, client, db): _token.issuer_address = issuer_address _token.token_address = token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) _details_1_data_1 = LedgerDetailsData() @@ -326,7 +326,7 @@ def test_error_2_1(self, client, db): _token.token_address = token_address _token.abi = {} _token.token_status = 2 - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) db.commit() @@ -381,7 +381,7 @@ def test_error_3(self, client, db): _token.token_address = token_address _token.abi = {} _token.token_status = 0 - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) db.commit() diff --git a/tests/app/test_ledger_{token_address}_details_data_{data_id}_POST.py b/tests/app/test_ledger_{token_address}_details_data_{data_id}_POST.py index f820d3d0..97f71985 100644 --- a/tests/app/test_ledger_{token_address}_details_data_{data_id}_POST.py +++ b/tests/app/test_ledger_{token_address}_details_data_{data_id}_POST.py @@ -49,7 +49,7 @@ def test_normal_1(self, mock_func, client, db): _token.issuer_address = issuer_address _token.token_address = token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) _details_1_data_1 = LedgerDetailsData() @@ -134,7 +134,7 @@ def test_normal_2(self, mock_func, client, db): _token.issuer_address = issuer_address _token.token_address = token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) _details_1_data_1 = LedgerDetailsData() @@ -445,7 +445,7 @@ def test_error_5(self, client, db): _token.token_address = token_address _token.abi = {} _token.token_status = 0 - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) db.commit() diff --git a/tests/app/test_ledger_{token_address}_history_GET.py b/tests/app/test_ledger_{token_address}_history_GET.py index 83071bc8..5633e85d 100644 --- a/tests/app/test_ledger_{token_address}_history_GET.py +++ b/tests/app/test_ledger_{token_address}_history_GET.py @@ -45,7 +45,7 @@ def test_normal_1_1(self, client, db): _token.issuer_address = issuer_address _token.token_address = token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) _ledger_1 = Ledger() @@ -110,7 +110,7 @@ def test_normal_1_2(self, client, db): _token.issuer_address = issuer_address _token.token_address = token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) _ledger_1 = Ledger() @@ -172,7 +172,7 @@ def test_normal_2(self, client, db): _token.issuer_address = issuer_address _token.token_address = token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) _ledger_1 = Ledger() @@ -291,7 +291,7 @@ def test_error_2_1(self, client, db): _token.token_address = token_address _token.abi = {} _token.token_status = 2 - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # request target API @@ -350,7 +350,7 @@ def test_error_3(self, client, db): _token.token_address = token_address _token.abi = {} _token.token_status = 0 - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) db.commit() diff --git a/tests/app/test_ledger_{token_address}_history_{ledger_id}_GET.py b/tests/app/test_ledger_{token_address}_history_{ledger_id}_GET.py index 5a6d0206..cee14ad6 100644 --- a/tests/app/test_ledger_{token_address}_history_{ledger_id}_GET.py +++ b/tests/app/test_ledger_{token_address}_history_{ledger_id}_GET.py @@ -58,7 +58,7 @@ def test_normal_1_1(self, client, db): _token.issuer_address = issuer_address _token.token_address = token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) _ledger_1 = Ledger() @@ -307,7 +307,7 @@ def test_normal_1_2(self, client, db): _token.issuer_address = issuer_address _token.token_address = token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) _ledger_1 = Ledger() @@ -555,7 +555,7 @@ def test_normal_2(self, client, db): _token.issuer_address = issuer_address _token.token_address = token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) _ledger_1 = Ledger() @@ -834,7 +834,7 @@ def test_normal_3_1(self, client, db): _token.issuer_address = issuer_address _token.token_address = token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) _ledger_1 = Ledger() @@ -1146,7 +1146,7 @@ def test_normal_3_2(self, client, db): _token.issuer_address = issuer_address _token.token_address = token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) _ledger_1 = Ledger() @@ -1453,7 +1453,7 @@ def test_normal_3_3(self, client, db): _token.issuer_address = issuer_address _token.token_address = token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) _ledger_1 = Ledger() @@ -1640,7 +1640,7 @@ def test_normal_3_4(self, client, db): _token.issuer_address = issuer_address _token.token_address = token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) _ledger_1 = Ledger() @@ -1829,7 +1829,7 @@ def test_normal_3_5(self, client, db): _token.issuer_address = issuer_address _token.token_address = token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) _ledger_1 = Ledger() @@ -2152,7 +2152,7 @@ def test_normal_4(self, client, db): _token.issuer_address = issuer_address _token.token_address = token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) _ledger_1 = Ledger() @@ -3016,7 +3016,7 @@ def test_error_4_1(self, client, db): _token.token_address = token_address _token.abi = {} _token.token_status = 2 - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) db.commit() @@ -3075,7 +3075,7 @@ def test_error_5(self, client, db): _token.token_address = token_address _token.abi = {} _token.token_status = 0 - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) db.commit() @@ -3112,7 +3112,7 @@ def test_error_6(self, client, db): _token.issuer_address = issuer_address _token.token_address = token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) db.commit() @@ -3151,7 +3151,7 @@ def test_error_7(self, client, db): _token.issuer_address = issuer_address _token.token_address = token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) _ledger_1 = Ledger() diff --git a/tests/app/test_ledger_{token_address}_template_DELETE.py b/tests/app/test_ledger_{token_address}_template_DELETE.py index 94206ff1..e3c6c587 100644 --- a/tests/app/test_ledger_{token_address}_template_DELETE.py +++ b/tests/app/test_ledger_{token_address}_template_DELETE.py @@ -51,7 +51,7 @@ def test_normal_1(self, client, db): _token.issuer_address = issuer_address _token.token_address = token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) _template = LedgerTemplate() @@ -232,7 +232,7 @@ def test_error_4(self, client, db): _token.token_address = token_address _token.abi = {} _token.token_status = 0 - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) db.commit() @@ -266,7 +266,7 @@ def test_error_5(self, client, db): _token.issuer_address = issuer_address _token.token_address = token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) db.commit() diff --git a/tests/app/test_ledger_{token_address}_template_GET.py b/tests/app/test_ledger_{token_address}_template_GET.py index de480c29..547619a4 100644 --- a/tests/app/test_ledger_{token_address}_template_GET.py +++ b/tests/app/test_ledger_{token_address}_template_GET.py @@ -50,7 +50,7 @@ def test_normal_1_1(self, client, db): _token.issuer_address = issuer_address _token.token_address = token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) _template = LedgerTemplate() @@ -215,7 +215,7 @@ def test_normal_1_2(self, client, db): _token.issuer_address = issuer_address _token.token_address = token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) _template = LedgerTemplate() @@ -377,7 +377,7 @@ def test_normal_2(self, client, db): _token.issuer_address = issuer_address _token.token_address = token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) _template = LedgerTemplate() @@ -475,7 +475,7 @@ def test_error_2(self, client, db): _token.token_address = token_address _token.abi = {} _token.token_status = 2 - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) db.commit() @@ -528,7 +528,7 @@ def test_error_3(self, client, db): _token.token_address = token_address _token.abi = {} _token.token_status = 0 - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) db.commit() @@ -562,7 +562,7 @@ def test_error_4(self, client, db): _token.issuer_address = issuer_address _token.token_address = token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) db.commit() diff --git a/tests/app/test_ledger_{token_address}_template_POST.py b/tests/app/test_ledger_{token_address}_template_POST.py index 4b1f64ba..e2f2adc6 100644 --- a/tests/app/test_ledger_{token_address}_template_POST.py +++ b/tests/app/test_ledger_{token_address}_template_POST.py @@ -55,7 +55,7 @@ def test_normal_1(self, mock_func, client, db): _token.issuer_address = issuer_address _token.token_address = token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) db.commit() @@ -247,7 +247,7 @@ def test_normal_2(self, mock_func, client, db): _token.issuer_address = issuer_address _token.token_address = token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) _template = LedgerTemplate() @@ -906,7 +906,7 @@ def test_error_6(self, client, db): _token.issuer_address = issuer_address _token.token_address = token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) db.commit() @@ -1097,7 +1097,7 @@ def test_error_8(self, client, db): _token.token_address = token_address _token.abi = {} _token.token_status = 0 - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) db.commit() diff --git a/tests/app/test_positions_{account_address}_GET.py b/tests/app/test_positions_{account_address}_GET.py index 243844a0..940cae2e 100644 --- a/tests/app/test_positions_{account_address}_GET.py +++ b/tests/app/test_positions_{account_address}_GET.py @@ -43,7 +43,7 @@ def test_normal_1(self, client, db): _token.type = TokenType.IBET_STRAIGHT_BOND.value _token.tx_hash = "" _token.abi = "" - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: Position @@ -93,7 +93,7 @@ def test_normal_2(self, mock_IbetStraightBondContract_get, client, db): _token.type = TokenType.IBET_STRAIGHT_BOND.value _token.tx_hash = "" _token.abi = "" - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: Position @@ -188,7 +188,7 @@ def test_normal_3_1( _token.type = TokenType.IBET_STRAIGHT_BOND.value _token.tx_hash = "" _token.abi = "" - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: Position 1 @@ -227,7 +227,7 @@ def test_normal_3_1( _token.type = TokenType.IBET_STRAIGHT_BOND.value _token.tx_hash = "" _token.abi = "" - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: Position-2 @@ -266,7 +266,7 @@ def test_normal_3_1( _token.type = TokenType.IBET_SHARE.value _token.tx_hash = "" _token.abi = "" - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: Position-3 @@ -381,7 +381,7 @@ def test_normal_3_2( _token.type = TokenType.IBET_STRAIGHT_BOND.value _token.tx_hash = "" _token.abi = "" - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: Position 1 @@ -401,7 +401,7 @@ def test_normal_3_2( _token.type = TokenType.IBET_STRAIGHT_BOND.value _token.tx_hash = "" _token.abi = "" - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: Position 2 @@ -431,7 +431,7 @@ def test_normal_3_2( _token.type = TokenType.IBET_SHARE.value _token.tx_hash = "" _token.abi = "" - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: Position 3 @@ -522,7 +522,7 @@ def test_normal_4( _token.type = TokenType.IBET_STRAIGHT_BOND.value _token.tx_hash = "" _token.abi = "" - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: Position @@ -544,7 +544,7 @@ def test_normal_4( _token.type = TokenType.IBET_STRAIGHT_BOND.value _token.tx_hash = "" _token.abi = "" - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: Position @@ -564,7 +564,7 @@ def test_normal_4( _token.type = TokenType.IBET_SHARE.value _token.tx_hash = "" _token.abi = "" - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: Position @@ -645,7 +645,7 @@ def test_normal_5_1(self, mock_IbetStraightBondContract_get, client, db): _token.type = TokenType.IBET_STRAIGHT_BOND.value _token.tx_hash = "" _token.abi = "" - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: Position @@ -665,7 +665,7 @@ def test_normal_5_1(self, mock_IbetStraightBondContract_get, client, db): _token.type = TokenType.IBET_STRAIGHT_BOND.value _token.tx_hash = "" _token.abi = "" - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: Position @@ -685,7 +685,7 @@ def test_normal_5_1(self, mock_IbetStraightBondContract_get, client, db): _token.type = TokenType.IBET_SHARE.value _token.tx_hash = "" _token.abi = "" - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: Position @@ -763,7 +763,7 @@ def test_normal_5_2(self, mock_IbetShareContract_get, client, db): _token.type = TokenType.IBET_STRAIGHT_BOND.value _token.tx_hash = "" _token.abi = "" - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: Position @@ -783,7 +783,7 @@ def test_normal_5_2(self, mock_IbetShareContract_get, client, db): _token.type = TokenType.IBET_STRAIGHT_BOND.value _token.tx_hash = "" _token.abi = "" - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: Position @@ -803,7 +803,7 @@ def test_normal_5_2(self, mock_IbetShareContract_get, client, db): _token.type = TokenType.IBET_SHARE.value _token.tx_hash = "" _token.abi = "" - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: Position @@ -870,7 +870,7 @@ def test_normal_5_3( _token.type = TokenType.IBET_STRAIGHT_BOND.value _token.tx_hash = "" _token.abi = "" - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: Position @@ -890,7 +890,7 @@ def test_normal_5_3( _token.type = TokenType.IBET_STRAIGHT_BOND.value _token.tx_hash = "" _token.abi = "" - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: Position @@ -910,7 +910,7 @@ def test_normal_5_3( _token.type = TokenType.IBET_SHARE.value _token.tx_hash = "" _token.abi = "" - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: Position @@ -930,7 +930,7 @@ def test_normal_5_3( _token.type = TokenType.IBET_SHARE.value _token.tx_hash = "" _token.abi = "" - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: Position @@ -1036,7 +1036,7 @@ def test_normal_6( _token.type = TokenType.IBET_STRAIGHT_BOND.value _token.tx_hash = "" _token.abi = "" - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: Position @@ -1056,7 +1056,7 @@ def test_normal_6( _token.type = TokenType.IBET_STRAIGHT_BOND.value _token.tx_hash = "" _token.abi = "" - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: Position @@ -1076,7 +1076,7 @@ def test_normal_6( _token.type = TokenType.IBET_SHARE.value _token.tx_hash = "" _token.abi = "" - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: Position @@ -1096,7 +1096,7 @@ def test_normal_6( _token.type = TokenType.IBET_SHARE.value _token.tx_hash = "" _token.abi = "" - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: Position diff --git a/tests/app/test_positions_{account_address}_forceunlock_POST.py b/tests/app/test_positions_{account_address}_forceunlock_POST.py index 43850152..37898642 100644 --- a/tests/app/test_positions_{account_address}_forceunlock_POST.py +++ b/tests/app/test_positions_{account_address}_forceunlock_POST.py @@ -64,7 +64,7 @@ def test_normal_1(self, IbetSecurityTokenInterface_mock, client, db): token.issuer_address = _admin_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() @@ -140,7 +140,7 @@ def test_normal_2(self, IbetSecurityTokenInterface_mock, client, db): token.issuer_address = _admin_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() @@ -522,7 +522,7 @@ def test_error_3_1(self, client, db): token.issuer_address = _admin_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() @@ -626,7 +626,7 @@ def test_error_3_3(self, client, db): token.token_address = _token_address token.abi = "" token.token_status = 0 - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() @@ -685,7 +685,7 @@ def test_error_4(self, client, db): token.issuer_address = _admin_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() @@ -744,7 +744,7 @@ def test_error_5(self, client, db): token.issuer_address = _admin_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() diff --git a/tests/app/test_positions_{account_address}_lock_GET.py b/tests/app/test_positions_{account_address}_lock_GET.py index 3f08808b..64fe657e 100644 --- a/tests/app/test_positions_{account_address}_lock_GET.py +++ b/tests/app/test_positions_{account_address}_lock_GET.py @@ -43,7 +43,7 @@ def test_normal_1(self, client, db): _token.type = TokenType.IBET_STRAIGHT_BOND.value _token.tx_hash = "" _token.abi = "" - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) db.commit() @@ -87,7 +87,7 @@ def test_normal_2_1(self, mock_IbetStraightBondContract_get, client, db): _token.type = TokenType.IBET_STRAIGHT_BOND.value _token.tx_hash = "" _token.abi = "" - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) _token = Token() @@ -96,7 +96,7 @@ def test_normal_2_1(self, mock_IbetStraightBondContract_get, client, db): _token.type = TokenType.IBET_STRAIGHT_BOND.value _token.tx_hash = "" _token.abi = "" - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: Locked Position @@ -186,7 +186,7 @@ def test_normal_2_2(self, mock_IbetShareContract_get, client, db): _token.type = TokenType.IBET_SHARE.value _token.tx_hash = "" _token.abi = "" - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) _token = Token() @@ -195,7 +195,7 @@ def test_normal_2_2(self, mock_IbetShareContract_get, client, db): _token.type = TokenType.IBET_SHARE.value _token.tx_hash = "" _token.abi = "" - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: Locked Position @@ -279,7 +279,7 @@ def test_normal_3_1(self, client, db): _token.type = TokenType.IBET_STRAIGHT_BOND.value _token.tx_hash = "" _token.abi = "" - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: Locked Position @@ -332,7 +332,7 @@ def test_normal_3_2(self, mock_IbetStraightBondContract_get, client, db): _token.tx_hash = "" _token.abi = "" _token.token_status = 2 - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) _token = Token() @@ -341,7 +341,7 @@ def test_normal_3_2(self, mock_IbetStraightBondContract_get, client, db): _token.type = TokenType.IBET_STRAIGHT_BOND.value _token.tx_hash = "" _token.abi = "" - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: Locked Position @@ -414,7 +414,7 @@ def test_normal_4(self, mock_IbetStraightBondContract_get, client, db): _token.type = TokenType.IBET_STRAIGHT_BOND.value _token.tx_hash = "" _token.abi = "" - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) _token = Token() @@ -423,7 +423,7 @@ def test_normal_4(self, mock_IbetStraightBondContract_get, client, db): _token.type = TokenType.IBET_STRAIGHT_BOND.value _token.tx_hash = "" _token.abi = "" - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: Locked Position @@ -498,7 +498,7 @@ def test_normal_5(self, mock_IbetStraightBondContract_get, client, db): _token.type = TokenType.IBET_SHARE.value _token.tx_hash = "" _token.abi = "" - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) _token = Token() @@ -507,7 +507,7 @@ def test_normal_5(self, mock_IbetStraightBondContract_get, client, db): _token.type = TokenType.IBET_STRAIGHT_BOND.value _token.tx_hash = "" _token.abi = "" - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: Locked Position @@ -580,7 +580,7 @@ def test_normal_6(self, mock_IbetStraightBondContract_get, client, db): _token.type = TokenType.IBET_STRAIGHT_BOND.value _token.tx_hash = "" _token.abi = "" - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: Locked Position diff --git a/tests/app/test_positions_{account_address}_lock_events_GET.py b/tests/app/test_positions_{account_address}_lock_events_GET.py index 3f51494c..80d6e277 100644 --- a/tests/app/test_positions_{account_address}_lock_events_GET.py +++ b/tests/app/test_positions_{account_address}_lock_events_GET.py @@ -45,7 +45,7 @@ def test_normal_1(self, client, db): _token.type = TokenType.IBET_STRAIGHT_BOND.value _token.tx_hash = "" _token.abi = "" - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) db.commit() @@ -88,7 +88,7 @@ def test_normal_2_1(self, mock_IbetStraightBondContract_get, client, db): _token.type = TokenType.IBET_STRAIGHT_BOND.value _token.tx_hash = "" _token.abi = "" - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: Lock events @@ -188,7 +188,7 @@ def test_normal_2_2(self, mock_IbetShareContract_get, client, db): _token.type = TokenType.IBET_SHARE.value _token.tx_hash = "" _token.abi = "" - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: Lock events @@ -289,7 +289,7 @@ def test_normal_3_1(self, mock_IbetStraightBondContract_get, client, db): _token.type = TokenType.IBET_STRAIGHT_BOND.value _token.tx_hash = "" _token.abi = "" - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: Lock events @@ -360,7 +360,7 @@ def test_normal_3_2(self, mock_IbetStraightBondContract_get, client, db): _token.tx_hash = "" _token.abi = "" _token.token_status = 2 - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: Lock events @@ -431,7 +431,7 @@ def test_normal_4(self, mock_IbetStraightBondContract_get, client, db): _token.type = TokenType.IBET_STRAIGHT_BOND.value _token.tx_hash = "" _token.abi = "" - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) _token = Token() @@ -440,7 +440,7 @@ def test_normal_4(self, mock_IbetStraightBondContract_get, client, db): _token.type = TokenType.IBET_STRAIGHT_BOND.value _token.tx_hash = "" _token.abi = "" - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: Lock events @@ -566,7 +566,7 @@ def test_normal_5_1(self, mock_IbetStraightBondContract_get, client, db): _token.type = TokenType.IBET_STRAIGHT_BOND.value _token.tx_hash = "" _token.abi = "" - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: Lock events @@ -653,7 +653,7 @@ def test_normal_5_2(self, mock_IbetStraightBondContract_get, client, db): _token.type = TokenType.IBET_STRAIGHT_BOND.value _token.tx_hash = "" _token.abi = "" - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) _token = Token() @@ -662,7 +662,7 @@ def test_normal_5_2(self, mock_IbetStraightBondContract_get, client, db): _token.type = TokenType.IBET_STRAIGHT_BOND.value _token.tx_hash = "" _token.abi = "" - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: Lock events @@ -749,7 +749,7 @@ def test_normal_5_3(self, mock_IbetStraightBondContract_get, client, db): _token.type = TokenType.IBET_STRAIGHT_BOND.value # bond _token.tx_hash = "" _token.abi = "" - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) _token = Token() @@ -758,7 +758,7 @@ def test_normal_5_3(self, mock_IbetStraightBondContract_get, client, db): _token.type = TokenType.IBET_SHARE.value # share _token.tx_hash = "" _token.abi = "" - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: Lock events @@ -844,7 +844,7 @@ def test_normal_5_4(self, mock_IbetStraightBondContract_get, client, db): _token.type = TokenType.IBET_STRAIGHT_BOND.value # bond _token.tx_hash = "" _token.abi = "" - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: Lock events @@ -931,7 +931,7 @@ def test_normal_5_5(self, mock_IbetStraightBondContract_get, client, db): _token.type = TokenType.IBET_STRAIGHT_BOND.value # bond _token.tx_hash = "" _token.abi = "" - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: Lock events @@ -1017,7 +1017,7 @@ def test_normal_5_6(self, mock_IbetStraightBondContract_get, client, db): _token.type = TokenType.IBET_STRAIGHT_BOND.value # bond _token.tx_hash = "" _token.abi = "" - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: Lock events @@ -1104,7 +1104,7 @@ def test_normal_6(self, mock_IbetStraightBondContract_get, client, db): _token.type = TokenType.IBET_STRAIGHT_BOND.value _token.tx_hash = "" _token.abi = "" - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: Lock events @@ -1257,7 +1257,7 @@ def test_normal_7(self, mock_IbetStraightBondContract_get, client, db): _token.type = TokenType.IBET_STRAIGHT_BOND.value _token.tx_hash = "" _token.abi = "" - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: Lock events diff --git a/tests/app/test_positions_{account_address}_{token_address}_GET.py b/tests/app/test_positions_{account_address}_{token_address}_GET.py index 82da5a01..acf1e54a 100644 --- a/tests/app/test_positions_{account_address}_{token_address}_GET.py +++ b/tests/app/test_positions_{account_address}_{token_address}_GET.py @@ -48,7 +48,7 @@ def test_normal_1_1(self, mock_IbetStraightBondContract_get, client, db): _token.type = TokenType.IBET_STRAIGHT_BOND.value _token.tx_hash = "" _token.abi = "" - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: Position @@ -133,7 +133,7 @@ def test_normal_1_2(self, mock_IbetShareContract_get, client, db): _token.type = TokenType.IBET_SHARE.value _token.tx_hash = "" _token.abi = "" - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: Position @@ -216,7 +216,7 @@ def test_normal_2(self, mock_IbetStraightBondContract_get, client, db): _token.type = TokenType.IBET_STRAIGHT_BOND.value _token.tx_hash = "" _token.abi = "" - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: Position @@ -273,7 +273,7 @@ def test_normal_3_1(self, mock_IbetStraightBondContract_get, client, db): _token.type = TokenType.IBET_STRAIGHT_BOND.value _token.tx_hash = "" _token.abi = "" - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: Locked Position @@ -330,7 +330,7 @@ def test_normal_3_2(self, mock_IbetStraightBondContract_get, client, db): _token.type = TokenType.IBET_STRAIGHT_BOND.value _token.tx_hash = "" _token.abi = "" - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: Position @@ -398,7 +398,7 @@ def test_normal_3_3(self, mock_IbetStraightBondContract_get, client, db): _token.type = TokenType.IBET_STRAIGHT_BOND.value _token.tx_hash = "" _token.abi = "" - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: Position @@ -455,7 +455,7 @@ def test_normal_3_4(self, mock_IbetStraightBondContract_get, client, db): _token.type = TokenType.IBET_STRAIGHT_BOND.value _token.tx_hash = "" _token.abi = "" - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: Position @@ -578,7 +578,7 @@ def test_error_2_2(self, client, db): _token.type = TokenType.IBET_STRAIGHT_BOND.value _token.tx_hash = "" _token.abi = "" - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: Position @@ -623,7 +623,7 @@ def test_error_3(self, client, db): _token.tx_hash = "" _token.abi = "" _token.token_status = 0 - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: Position diff --git a/tests/app/test_settlement_dvp_{exchange_address}_deliveries_POST.py b/tests/app/test_settlement_dvp_{exchange_address}_deliveries_POST.py index d925621c..c700e316 100644 --- a/tests/app/test_settlement_dvp_{exchange_address}_deliveries_POST.py +++ b/tests/app/test_settlement_dvp_{exchange_address}_deliveries_POST.py @@ -121,7 +121,7 @@ def test_normal_1( token.issuer_address = issuer_address token.token_address = token_contract_1.address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() @@ -205,7 +205,7 @@ def test_normal_2( token.issuer_address = issuer_address token.token_address = token_contract_1.address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) auth_token = AuthToken() @@ -273,7 +273,7 @@ def test_error_1(self, client, db, ibet_security_token_dvp_contract): token.issuer_address = issuer_address token.token_address = "0x0000000000000000000000000000000000000000" token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() @@ -351,7 +351,7 @@ def test_error_2(self, client, db, ibet_security_token_dvp_contract): token.issuer_address = issuer_address token.token_address = "0x0000000000000000000000000000000000000000" token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() @@ -569,7 +569,7 @@ def test_error_7(self, client, db, ibet_security_token_dvp_contract): token.issuer_address = issuer_address token.token_address = "0x0000000000000000000000000000000000000000" token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() @@ -689,7 +689,7 @@ def test_error_9( token.issuer_address = issuer_address token.token_address = token_contract_1.address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() diff --git a/tests/app/test_settlement_dvp_{exchange_address}_delivery_{delivery_id}_POST.py b/tests/app/test_settlement_dvp_{exchange_address}_delivery_{delivery_id}_POST.py index d77574bb..81b4e482 100644 --- a/tests/app/test_settlement_dvp_{exchange_address}_delivery_{delivery_id}_POST.py +++ b/tests/app/test_settlement_dvp_{exchange_address}_delivery_{delivery_id}_POST.py @@ -135,7 +135,7 @@ def test_normal_1_1( token.issuer_address = issuer_address token.token_address = token_contract_1.address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() @@ -234,7 +234,7 @@ def test_normal_1_2( token.issuer_address = issuer_address token.token_address = token_contract_1.address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) auth_token = AuthToken() @@ -338,7 +338,7 @@ def test_normal_2( token.issuer_address = issuer_address token.token_address = token_contract_1.address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() @@ -449,7 +449,7 @@ def test_normal_3( token.issuer_address = issuer_address token.token_address = token_contract_1.address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() @@ -712,7 +712,7 @@ def test_error_5(self, client, db, ibet_security_token_dvp_contract): token.issuer_address = issuer_address token.token_address = "0x0000000000000000000000000000000000000000" token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() @@ -884,7 +884,7 @@ def test_error_8( token.issuer_address = issuer_address token.token_address = token_contract_1.address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() diff --git a/tests/app/test_share_bulk_transfer_GET.py b/tests/app/test_share_bulk_transfer_GET.py index 37ed19fe..f84d0bf9 100644 --- a/tests/app/test_share_bulk_transfer_GET.py +++ b/tests/app/test_share_bulk_transfer_GET.py @@ -54,6 +54,8 @@ class TestAppRoutersShareBulkTransferGET: "cf33d48f-9e6e-4a36-a55e-5bbcbda69c80", # 2: failed ] + test_token_address = "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266" + ########################################################################### # Normal Case ########################################################################### @@ -76,6 +78,7 @@ def test_normal_1(self, client, db): bulk_transfer_upload.issuer_address = self.upload_issuer_list[i]["address"] bulk_transfer_upload.upload_id = self.upload_id_list[i] bulk_transfer_upload.token_type = TokenType.IBET_SHARE.value + bulk_transfer_upload.token_address = self.test_token_address bulk_transfer_upload.status = i bulk_transfer_upload.created = utc_now db.add(bulk_transfer_upload) @@ -94,8 +97,8 @@ def test_normal_1(self, client, db): { "issuer_address": self.upload_issuer_list[1]["address"], "token_type": TokenType.IBET_SHARE.value, + "token_address": self.test_token_address, "upload_id": self.upload_id_list[1], - "transaction_compression": False, "status": 1, "created": pytz.timezone("UTC") .localize(utc_now) @@ -116,6 +119,7 @@ def test_normal_2(self, client, db): bulk_transfer_upload.issuer_address = self.upload_issuer_list[i]["address"] bulk_transfer_upload.upload_id = self.upload_id_list[i] bulk_transfer_upload.token_type = TokenType.IBET_SHARE.value + bulk_transfer_upload.token_address = self.test_token_address bulk_transfer_upload.status = i bulk_transfer_upload.created = utc_now db.add(bulk_transfer_upload) @@ -133,8 +137,8 @@ def test_normal_2(self, client, db): { "issuer_address": self.upload_issuer_list[i]["address"], "token_type": TokenType.IBET_SHARE.value, + "token_address": self.test_token_address, "upload_id": self.upload_id_list[i], - "transaction_compression": False, "status": i, "created": pytz.timezone("UTC") .localize(utc_now) diff --git a/tests/app/test_share_bulk_transfer_POST.py b/tests/app/test_share_bulk_transfer_POST.py index 2710b566..8928b0e8 100644 --- a/tests/app/test_share_bulk_transfer_POST.py +++ b/tests/app/test_share_bulk_transfer_POST.py @@ -55,9 +55,6 @@ class TestAppRoutersShareBulkTransferPOST: req_tokens = [ "0xbB4138520af85fAfdDAACc7F0AabfE188334D0ca", "0x55e20Fa9F4Fa854Ef06081734872b734c105916b", - "0x1d2E98AD049e978B08113fD282BD42948F265DDa", - "0x2413a63D91eb10e1472a18aD4b9628fBE4aac8B8", - "0x6f9486251F4034C251ecb8Fa0f087CDDb3cDe6d7", ] upload_id_list = [ @@ -84,7 +81,7 @@ def test_normal_1(self, client, db): _token.issuer_address = self.admin_address _token.token_address = _t _token.abi = "" - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) db.commit() @@ -99,7 +96,7 @@ def test_normal_1(self, client, db): "amount": 5, }, { - "token_address": self.req_tokens[1], + "token_address": self.req_tokens[0], "from_address": self.from_address, "to_address": self.to_address, "amount": 10, @@ -125,7 +122,7 @@ def test_normal_1(self, client, db): ).all() assert len(bulk_transfer_upload) == 1 assert bulk_transfer_upload[0].issuer_address == self.admin_address - assert bulk_transfer_upload[0].transaction_compression is None + assert bulk_transfer_upload[0].token_address == self.req_tokens[0] assert bulk_transfer_upload[0].status == 0 bulk_transfer = db.scalars( @@ -142,7 +139,7 @@ def test_normal_1(self, client, db): assert bulk_transfer[0].amount == 5 assert bulk_transfer[0].status == 0 assert bulk_transfer[1].issuer_address == self.admin_address - assert bulk_transfer[1].token_address == self.req_tokens[1] + assert bulk_transfer[1].token_address == self.req_tokens[0] assert bulk_transfer[1].token_type == TokenType.IBET_SHARE.value assert bulk_transfer[1].from_address == self.from_address assert bulk_transfer[1].to_address == self.to_address @@ -174,7 +171,7 @@ def test_normal_2(self, client, db): _token.issuer_address = self.admin_address _token.token_address = _t _token.abi = "" - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) db.commit() @@ -189,7 +186,7 @@ def test_normal_2(self, client, db): "amount": 5, }, { - "token_address": self.req_tokens[1], + "token_address": self.req_tokens[0], "from_address": self.from_address, "to_address": self.to_address, "amount": 10, @@ -215,7 +212,7 @@ def test_normal_2(self, client, db): ).all() assert len(bulk_transfer_upload) == 1 assert bulk_transfer_upload[0].issuer_address == self.admin_address - assert bulk_transfer_upload[0].transaction_compression is None + assert bulk_transfer_upload[0].token_address == self.req_tokens[0] assert bulk_transfer_upload[0].status == 0 bulk_transfer = db.scalars( @@ -232,90 +229,6 @@ def test_normal_2(self, client, db): assert bulk_transfer[0].amount == 5 assert bulk_transfer[0].status == 0 assert bulk_transfer[1].issuer_address == self.admin_address - assert bulk_transfer[1].token_address == self.req_tokens[1] - assert bulk_transfer[1].token_type == TokenType.IBET_SHARE.value - assert bulk_transfer[1].from_address == self.from_address - assert bulk_transfer[1].to_address == self.to_address - assert bulk_transfer[1].amount == 10 - assert bulk_transfer[1].status == 0 - - # - # transaction_compression = True - def test_normal_3(self, client, db): - # prepare data : Account(Issuer) - account = Account() - account.issuer_address = self.from_address - account.keyfile = self.admin_keyfile - account.eoa_password = E2EEUtils.encrypt("password") - db.add(account) - - # prepare data : Tokens - for _t in self.req_tokens: - _token = Token() - _token.type = TokenType.IBET_SHARE.value - _token.tx_hash = "" - _token.issuer_address = self.from_address - _token.token_address = _t - _token.abi = "" - _token.version = TokenVersion.V_24_06 - db.add(_token) - - db.commit() - - # request target API - req_param = { - "transfer_list": [ - { - "token_address": self.req_tokens[0], - "from_address": self.from_address, - "to_address": self.to_address, - "amount": 5, - }, - { - "token_address": self.req_tokens[0], - "from_address": self.from_address, - "to_address": self.to_address, - "amount": 10, - }, - ], - "transaction_compression": True, - } - resp = client.post( - self.test_url, - json=req_param, - headers={ - "issuer-address": self.from_address, - "eoa-password": E2EEUtils.encrypt("password"), - }, - ) - - # assertion - assert resp.status_code == 200 - - bulk_transfer_upload = db.scalars( - select(BulkTransferUpload).where( - BulkTransferUpload.upload_id == resp.json()["upload_id"] - ) - ).all() - assert len(bulk_transfer_upload) == 1 - assert bulk_transfer_upload[0].issuer_address == self.from_address - assert bulk_transfer_upload[0].transaction_compression is True - assert bulk_transfer_upload[0].status == 0 - - bulk_transfer = db.scalars( - select(BulkTransfer) - .where(BulkTransfer.upload_id == resp.json()["upload_id"]) - .order_by(BulkTransfer.id) - ).all() - assert len(bulk_transfer) == 2 - assert bulk_transfer[0].issuer_address == self.from_address - assert bulk_transfer[0].token_address == self.req_tokens[0] - assert bulk_transfer[0].token_type == TokenType.IBET_SHARE.value - assert bulk_transfer[0].from_address == self.from_address - assert bulk_transfer[0].to_address == self.to_address - assert bulk_transfer[0].amount == 5 - assert bulk_transfer[0].status == 0 - assert bulk_transfer[1].issuer_address == self.from_address assert bulk_transfer[1].token_address == self.req_tokens[0] assert bulk_transfer[1].token_type == TokenType.IBET_SHARE.value assert bulk_transfer[1].from_address == self.from_address @@ -327,10 +240,10 @@ def test_normal_3(self, client, db): # Error Case ########################################################################### - # + # # RequestValidationError # invalid type - def test_error_1(self, client, db): + def test_error_1_1(self, client, db): _token_address_int = 10 # integer _from_address_long = ( "0xd9F55747DE740297ff1eEe537aBE0f8d73B7D7811" # long address @@ -390,10 +303,10 @@ def test_error_1(self, client, db): ], } - # + # # RequestValidationError # invalid type(max value) - def test_error_2(self, client, db): + def test_error_1_2(self, client, db): # request target API req_param = { "transfer_list": [ @@ -429,10 +342,10 @@ def test_error_2(self, client, db): ], } - # + # # RequestValidationError # headers and body required - def test_error_3(self, client, db): + def test_error_1_3(self, client, db): # request target API resp = client.post(self.test_url) @@ -456,10 +369,10 @@ def test_error_3(self, client, db): ], } - # + # # RequestValidationError # issuer-address - def test_error_4(self, client, db): + def test_error_1_4(self, client, db): # request target API req_param = { "transfer_list": [ @@ -489,10 +402,10 @@ def test_error_4(self, client, db): ], } - # + # # RequestValidationError # eoa-password(not decrypt) - def test_error_5(self, client, db): + def test_error_1_5(self, client, db): # request target API req_param = { "transfer_list": [ @@ -524,10 +437,10 @@ def test_error_5(self, client, db): ], } - # + # # InvalidParameterError # list length is 0 - def test_error_6(self, client, db): + def test_error_2(self, client, db): # prepare data : Account(Issuer) account = Account() account.issuer_address = self.admin_address @@ -563,10 +476,10 @@ def test_error_6(self, client, db): ], } - # + # # AuthorizationError # issuer does not exist - def test_error_7(self, client, db): + def test_error_3_1(self, client, db): # request target API req_param = { "transfer_list": [ @@ -600,10 +513,10 @@ def test_error_7(self, client, db): "detail": "issuer does not exist, or password mismatch", } - # + # # AuthorizationError # password mismatch - def test_error_8(self, client, db): + def test_error_3_2(self, client, db): # prepare data : Account(Issuer) account = Account() account.issuer_address = self.admin_address @@ -639,10 +552,9 @@ def test_error_8(self, client, db): "detail": "issuer does not exist, or password mismatch", } - # - # InvalidParameterError - # token not found - def test_error_9(self, client, db): + # + # TokenNotExistError + def test_error_4(self, client, db): # prepare data : Account(Issuer) account = Account() account.issuer_address = self.admin_address @@ -674,14 +586,13 @@ def test_error_9(self, client, db): assert resp.status_code == 400 assert resp.json() == { - "meta": {"code": 1, "title": "InvalidParameterError"}, + "meta": {"code": 7, "title": "TokenNotExistError"}, "detail": f"token not found: {self.req_tokens[0]}", } - # - # InvalidParameterError - # processing token - def test_error_10(self, client, db): + # + # NonTransferableTokenError + def test_error_5(self, client, db): # prepare data : Account(Issuer) account = Account() account.issuer_address = self.admin_address @@ -697,7 +608,7 @@ def test_error_10(self, client, db): _token.token_address = self.req_tokens[0] _token.abi = "" _token.token_status = 0 - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) db.commit() @@ -724,14 +635,13 @@ def test_error_10(self, client, db): assert resp.status_code == 400 assert resp.json() == { - "meta": {"code": 1, "title": "InvalidParameterError"}, + "meta": {"code": 8, "title": "NonTransferableTokenError"}, "detail": f"this token is temporarily unavailable: {self.req_tokens[0]}", } - # - # transaction_compression = True - # Token addresses are not the same - def test_error_11_1(self, client, db): + # + # MultipleTokenTransferNotAllowedError + def test_error_6(self, client, db): # prepare data : Account(Issuer) account = Account() account.issuer_address = self.from_address @@ -747,7 +657,7 @@ def test_error_11_1(self, client, db): _token.issuer_address = self.from_address _token.token_address = _t _token.abi = "" - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) db.commit() @@ -768,65 +678,6 @@ def test_error_11_1(self, client, db): "amount": 10, }, ], - "transaction_compression": True, - } - resp = client.post( - self.test_url, - json=req_param, - headers={ - "issuer-address": self.from_address, - "eoa-password": E2EEUtils.encrypt("password"), - }, - ) - - # assertion - assert resp.status_code == 400 - assert resp.json() == { - "meta": {"code": 1, "title": "InvalidParameterError"}, - "detail": "When using transaction compression, all token_address must be the same.", - } - - # - # transaction_compression = True - # From addresses are not the same - def test_error_11_2(self, client, db): - # prepare data : Account(Issuer) - account = Account() - account.issuer_address = self.from_address - account.keyfile = self.admin_keyfile - account.eoa_password = E2EEUtils.encrypt("password") - db.add(account) - - # prepare data : Tokens - for _t in self.req_tokens: - _token = Token() - _token.type = TokenType.IBET_SHARE.value - _token.tx_hash = "" - _token.issuer_address = self.from_address - _token.token_address = _t - _token.abi = "" - _token.version = TokenVersion.V_24_06 - db.add(_token) - - db.commit() - - # request target API - req_param = { - "transfer_list": [ - { - "token_address": self.req_tokens[0], - "from_address": self.from_address, - "to_address": self.to_address, - "amount": 5, - }, - { - "token_address": self.req_tokens[0], - "from_address": self.to_address, # Wrong from_address - "to_address": self.to_address, - "amount": 10, - }, - ], - "transaction_compression": True, } resp = client.post( self.test_url, @@ -840,64 +691,6 @@ def test_error_11_2(self, client, db): # assertion assert resp.status_code == 400 assert resp.json() == { - "meta": {"code": 1, "title": "InvalidParameterError"}, - "detail": "When using transaction compression, all from_address must be the same.", - } - - # - # transaction_compression = True - # from_address and issuer_address are different - def test_error_11_3(self, client, db): - # prepare data : Account(Issuer) - account = Account() - account.issuer_address = self.admin_address - account.keyfile = self.admin_keyfile - account.eoa_password = E2EEUtils.encrypt("password") - db.add(account) - - # prepare data : Tokens - for _t in self.req_tokens: - _token = Token() - _token.type = TokenType.IBET_SHARE.value - _token.tx_hash = "" - _token.issuer_address = self.admin_address - _token.token_address = _t - _token.abi = "" - _token.version = TokenVersion.V_24_06 - db.add(_token) - - db.commit() - - # request target API - req_param = { - "transfer_list": [ - { - "token_address": self.req_tokens[0], - "from_address": self.from_address, - "to_address": self.to_address, - "amount": 5, - }, - { - "token_address": self.req_tokens[0], - "from_address": self.from_address, - "to_address": self.to_address, - "amount": 10, - }, - ], - "transaction_compression": True, - } - resp = client.post( - self.test_url, - json=req_param, - headers={ - "issuer-address": self.admin_address, - "eoa-password": E2EEUtils.encrypt("password"), - }, - ) - - # assertion - assert resp.status_code == 400 - assert resp.json() == { - "meta": {"code": 1, "title": "InvalidParameterError"}, - "detail": "When using transaction compression, from_address must be the same as issuer_address.", + "meta": {"code": 9, "title": "MultipleTokenTransferNotAllowedError"}, + "detail": "All token_address must be the same.", } diff --git a/tests/app/test_share_lock_events_GET.py b/tests/app/test_share_lock_events_GET.py index 8c8c391e..dbde8763 100644 --- a/tests/app/test_share_lock_events_GET.py +++ b/tests/app/test_share_lock_events_GET.py @@ -56,7 +56,7 @@ def setup_data(self, db: Session, token_status: int = 1): _token.tx_hash = "" _token.abi = "" _token.token_status = token_status - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: Token @@ -67,7 +67,7 @@ def setup_data(self, db: Session, token_status: int = 1): _token.tx_hash = "" _token.abi = "" _token.token_status = token_status - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: Lock events @@ -207,7 +207,7 @@ def test_normal_1(self, client, db): _token.type = TokenType.IBET_SHARE.value _token.tx_hash = "" _token.abi = "" - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) db.commit() diff --git a/tests/app/test_share_tokens_GET.py b/tests/app/test_share_tokens_GET.py index afe6ba70..ae2e664c 100644 --- a/tests/app/test_share_tokens_GET.py +++ b/tests/app/test_share_tokens_GET.py @@ -57,7 +57,7 @@ def test_normal_2(self, mock_get, client, db): token.issuer_address = issuer_address_1 token.token_address = "token_address_test1" token.abi = "abi_test1" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() @@ -126,7 +126,7 @@ def test_normal_2(self, mock_get, client, db): "issue_datetime": _issue_datetime, "token_status": 1, "memo": "memo_test1", - "contract_version": TokenVersion.V_24_06, + "contract_version": TokenVersion.V_24_09, } ] @@ -148,7 +148,7 @@ def test_normal_3(self, mock_get, client, db): token_1.issuer_address = issuer_address_1 token_1.token_address = "token_address_test1" token_1.abi = "abi_test1" - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) db.commit() @@ -195,7 +195,7 @@ def test_normal_3(self, mock_get, client, db): token_2.token_address = "token_address_test2" token_2.abi = "abi_test2" token_2.token_status = 0 - token_2.version = TokenVersion.V_24_06 + token_2.version = TokenVersion.V_24_09 db.add(token_2) db.commit() @@ -264,7 +264,7 @@ def test_normal_3(self, mock_get, client, db): "issue_datetime": _issue_datetime_1, "token_status": 1, "memo": "memo_test1", - "contract_version": TokenVersion.V_24_06, + "contract_version": TokenVersion.V_24_09, }, { "issuer_address": issuer_address_2, @@ -291,7 +291,7 @@ def test_normal_3(self, mock_get, client, db): "issue_datetime": _issue_datetime_2, "token_status": 0, "memo": "memo_test2", - "contract_version": TokenVersion.V_24_06, + "contract_version": TokenVersion.V_24_09, }, ] @@ -310,7 +310,7 @@ def test_normal_4(self, client, db): token.issuer_address = "issuer_address_test1" token.token_address = "token_address_test1" token.abi = "abi_test1" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) resp = client.get(self.apiurl, headers={"issuer-address": issuer_address_1}) @@ -333,7 +333,7 @@ def test_normal_5(self, mock_get, client, db): token_1.issuer_address = issuer_address_1 token_1.token_address = "token_address_test1" token_1.abi = "abi_test1" - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) db.commit() _issue_datetime = ( @@ -379,7 +379,7 @@ def test_normal_5(self, mock_get, client, db): token_2.issuer_address = issuer_address_2 token_2.token_address = "token_address_test1" token_2.abi = "abi_test1" - token_2.version = TokenVersion.V_24_06 + token_2.version = TokenVersion.V_24_09 db.add(token_2) resp = client.get(self.apiurl, headers={"issuer-address": issuer_address_1}) @@ -410,7 +410,7 @@ def test_normal_5(self, mock_get, client, db): "issue_datetime": _issue_datetime, "token_status": 1, "memo": "memo_test1", - "contract_version": TokenVersion.V_24_06, + "contract_version": TokenVersion.V_24_09, } ] @@ -432,7 +432,7 @@ def test_normal_6(self, mock_get, client, db): token_1.issuer_address = issuer_address_1 token_1.token_address = "token_address_test1" token_1.abi = "abi_test1" - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) db.commit() @@ -479,7 +479,7 @@ def test_normal_6(self, mock_get, client, db): token_2.token_address = "token_address_test2" token_2.abi = "abi_test2" token_2.token_status = 0 - token_2.version = TokenVersion.V_24_06 + token_2.version = TokenVersion.V_24_09 db.add(token_2) db.commit() @@ -527,7 +527,7 @@ def test_normal_6(self, mock_get, client, db): token_3.issuer_address = issuer_address_2 token_3.token_address = "token_address_test1" token_3.abi = "abi_test1" - token_3.version = TokenVersion.V_24_06 + token_3.version = TokenVersion.V_24_09 db.add(token_3) resp = client.get(self.apiurl, headers={"issuer-address": issuer_address_1}) @@ -558,7 +558,7 @@ def test_normal_6(self, mock_get, client, db): "issue_datetime": _issue_datetime_1, "token_status": 1, "memo": "memo_test1", - "contract_version": TokenVersion.V_24_06, + "contract_version": TokenVersion.V_24_09, }, { "issuer_address": issuer_address_1, @@ -585,7 +585,7 @@ def test_normal_6(self, mock_get, client, db): "issue_datetime": _issue_datetime_2, "token_status": 0, "memo": "memo_test2", - "contract_version": TokenVersion.V_24_06, + "contract_version": TokenVersion.V_24_09, }, ] diff --git a/tests/app/test_share_tokens_POST.py b/tests/app/test_share_tokens_POST.py index dfde08a5..ffa8a4d4 100644 --- a/tests/app/test_share_tokens_POST.py +++ b/tests/app/test_share_tokens_POST.py @@ -166,7 +166,7 @@ async def test_normal_1_1(self, client, db): assert token_1.token_address == "contract_address_test1" assert token_1.abi == "abi_test1" assert token_1.token_status == 1 - assert token_1.version == TokenVersion.V_24_06 + assert token_1.version == TokenVersion.V_24_09 position = db.scalars(select(IDXPosition).limit(1)).first() assert position.token_address == "contract_address_test1" @@ -288,7 +288,7 @@ async def test_normal_1_2(self, client, db): assert token_1.token_address == "contract_address_test1" assert token_1.abi == "abi_test1" assert token_1.token_status == 1 - assert token_1.version == TokenVersion.V_24_06 + assert token_1.version == TokenVersion.V_24_09 position = db.scalars(select(IDXPosition).limit(1)).first() assert position.token_address == "contract_address_test1" @@ -427,7 +427,7 @@ async def test_normal_2(self, client, db): assert token_1.token_address == "contract_address_test1" assert token_1.abi == "abi_test1" assert token_1.token_status == 0 - assert token_1.version == TokenVersion.V_24_06 + assert token_1.version == TokenVersion.V_24_09 position = db.scalars(select(IDXPosition).limit(1)).first() assert position is None @@ -556,7 +556,7 @@ async def test_normal_3(self, client, db): assert token_1.token_address == "contract_address_test1" assert token_1.abi == "abi_test1" assert token_1.token_status == 1 - assert token_1.version == TokenVersion.V_24_06 + assert token_1.version == TokenVersion.V_24_09 position = db.scalars(select(IDXPosition).limit(1)).first() assert position.token_address == "contract_address_test1" diff --git a/tests/app/test_share_tokens_{token_address}_GET.py b/tests/app/test_share_tokens_{token_address}_GET.py index 7920cc0b..6767d3bb 100644 --- a/tests/app/test_share_tokens_{token_address}_GET.py +++ b/tests/app/test_share_tokens_{token_address}_GET.py @@ -46,7 +46,7 @@ def test_normal_1(self, mock_get, client, db): token.issuer_address = "issuer_address_test1" token.token_address = "token_address_test1" token.abi = "abi_test1" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() @@ -115,7 +115,7 @@ def test_normal_1(self, mock_get, client, db): "issue_datetime": _issue_time, "token_status": 1, "memo": "memo_test1", - "contract_version": TokenVersion.V_24_06, + "contract_version": TokenVersion.V_24_09, } assert resp.status_code == 200 @@ -132,7 +132,7 @@ def test_normal_2(self, mock_get, client, db): token.issuer_address = "issuer_address_test1" token.token_address = "token_address_test1" token.abi = "abi_test1" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() @@ -201,7 +201,7 @@ def test_normal_2(self, mock_get, client, db): "issue_datetime": _issue_time, "token_status": 1, "memo": "memo_test1", - "contract_version": TokenVersion.V_24_06, + "contract_version": TokenVersion.V_24_09, } assert resp.status_code == 200 @@ -233,7 +233,7 @@ def test_error_2(self, client, db): token.token_address = "token_address_test1" token.abi = "abi_test1" token.token_status = 0 - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() diff --git a/tests/app/test_share_tokens_{token_address}_POST.py b/tests/app/test_share_tokens_{token_address}_POST.py index b3d2a646..9a611181 100644 --- a/tests/app/test_share_tokens_{token_address}_POST.py +++ b/tests/app/test_share_tokens_{token_address}_POST.py @@ -108,7 +108,7 @@ async def test_normal_1(self, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() @@ -232,7 +232,7 @@ async def test_normal_2(self, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() @@ -300,7 +300,7 @@ async def test_normal_3(self, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() @@ -425,7 +425,7 @@ async def test_normal_4_1(self, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() @@ -526,7 +526,7 @@ async def test_normal_4_2(self, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() @@ -1034,7 +1034,7 @@ def test_error_12(self, IbetShareContract_mock, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() @@ -1160,7 +1160,7 @@ def test_error_15(self, client, db): token.token_address = _token_address token.abi = "" token.token_status = 0 - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() @@ -1208,7 +1208,7 @@ def test_error_16(self, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() diff --git a/tests/app/test_share_tokens_{token_address}_additional_issue_GET.py b/tests/app/test_share_tokens_{token_address}_additional_issue_GET.py index 0047fbd8..7d3dc21b 100644 --- a/tests/app/test_share_tokens_{token_address}_additional_issue_GET.py +++ b/tests/app/test_share_tokens_{token_address}_additional_issue_GET.py @@ -74,7 +74,7 @@ def test_normal_1(self, client, db): _token.issuer_address = self.test_issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: IDXIssueRedeem @@ -110,7 +110,7 @@ def test_normal_2(self, client, db): _token.issuer_address = self.test_issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: IDXIssueRedeem @@ -191,7 +191,7 @@ def test_normal_3(self, client, db): _token.issuer_address = self.test_issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: IDXIssueRedeem @@ -278,7 +278,7 @@ def test_normal_4(self, client, db): _token.issuer_address = self.test_issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: IDXIssueRedeem @@ -365,7 +365,7 @@ def test_error_2(self, client, db): _token.token_address = self.test_token_address _token.abi = {} _token.token_status = 0 - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) db.commit() diff --git a/tests/app/test_share_tokens_{token_address}_additional_issue_POST.py b/tests/app/test_share_tokens_{token_address}_additional_issue_POST.py index 988379ee..18272d2a 100644 --- a/tests/app/test_share_tokens_{token_address}_additional_issue_POST.py +++ b/tests/app/test_share_tokens_{token_address}_additional_issue_POST.py @@ -58,7 +58,7 @@ def test_normal_1(self, IbetShareContract_mock, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() @@ -115,7 +115,7 @@ def test_normal_2(self, IbetShareContract_mock, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() @@ -287,7 +287,7 @@ def test_error_5(self, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() @@ -330,7 +330,7 @@ def test_error_6(self, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() @@ -444,7 +444,7 @@ def test_error_9(self, client, db): token.token_address = _token_address token.abi = "" token.token_status = 0 - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() @@ -492,7 +492,7 @@ def test_error_10(self, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() diff --git a/tests/app/test_share_tokens_{token_address}_additional_issue_batch_GET.py b/tests/app/test_share_tokens_{token_address}_additional_issue_batch_GET.py index 0208037c..908126b0 100644 --- a/tests/app/test_share_tokens_{token_address}_additional_issue_batch_GET.py +++ b/tests/app/test_share_tokens_{token_address}_additional_issue_batch_GET.py @@ -52,7 +52,7 @@ def test_normal_1(self, client, db): token.issuer_address = issuer_address token.token_address = token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() @@ -80,7 +80,7 @@ def test_normal_2(self, client, db): token.issuer_address = issuer_address token.token_address = token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) additional_issue_upload1 = BatchIssueRedeemUpload() @@ -129,7 +129,7 @@ def test_normal_3_1(self, client, db): token.issuer_address = issuer_address token.token_address = token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) additional_issue_upload1 = BatchIssueRedeemUpload() @@ -246,7 +246,7 @@ def test_normal_3_2(self, client, db): token.issuer_address = issuer_address token.token_address = token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) additional_issue_upload1 = BatchIssueRedeemUpload() @@ -350,7 +350,7 @@ def test_normal_3_3(self, client, db): token.issuer_address = issuer_address token.token_address = token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) additional_issue_upload1 = BatchIssueRedeemUpload() @@ -460,7 +460,7 @@ def test_normal_4(self, client, db): token.issuer_address = issuer_address token.token_address = token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) additional_issue_upload1 = BatchIssueRedeemUpload() @@ -562,7 +562,7 @@ def test_normal_5(self, client, db): token.issuer_address = issuer_address token.token_address = token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) additional_issue_upload1 = BatchIssueRedeemUpload() @@ -685,7 +685,7 @@ def test_error_1(self, client, db): token.issuer_address = issuer_address token.token_address = token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() diff --git a/tests/app/test_share_tokens_{token_address}_additional_issue_batch_POST.py b/tests/app/test_share_tokens_{token_address}_additional_issue_batch_POST.py index edd7c9c0..b2815d2c 100644 --- a/tests/app/test_share_tokens_{token_address}_additional_issue_batch_POST.py +++ b/tests/app/test_share_tokens_{token_address}_additional_issue_batch_POST.py @@ -66,7 +66,7 @@ def test_normal_1(self, client, db): token.issuer_address = issuer_address token.token_address = token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() @@ -131,7 +131,7 @@ def test_normal_2(self, client, db): token.issuer_address = issuer_address token.token_address = token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() @@ -206,7 +206,7 @@ def test_error_1_1(self, client, db): token.issuer_address = issuer_address token.token_address = token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() @@ -258,7 +258,7 @@ def test_error_1_2(self, client, db): token.issuer_address = issuer_address token.token_address = token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() @@ -313,7 +313,7 @@ def test_error_1_3_1(self, client, db): token.issuer_address = issuer_address token.token_address = token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() @@ -368,7 +368,7 @@ def test_error_1_3_2(self, client, db): token.issuer_address = issuer_address token.token_address = token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() @@ -423,7 +423,7 @@ def test_error_1_4(self, client, db): token.issuer_address = issuer_address token.token_address = token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() @@ -472,7 +472,7 @@ def test_error_1_5(self, client, db): token.issuer_address = issuer_address token.token_address = token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() @@ -521,7 +521,7 @@ def test_error_1_6(self, client, db): token.issuer_address = issuer_address token.token_address = token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() @@ -568,7 +568,7 @@ def test_error_1_7_1(self, client, db): token.issuer_address = issuer_address token.token_address = token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() @@ -615,7 +615,7 @@ def test_error_1_7_2(self, client, db): token.issuer_address = issuer_address token.token_address = token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() @@ -703,7 +703,7 @@ def test_error_1_8_2(self, client, db): token.token_address = token_address token.abi = "" token.token_status = 0 - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() diff --git a/tests/app/test_share_tokens_{token_address}_additional_issue_batch_{batch_id}_GET.py b/tests/app/test_share_tokens_{token_address}_additional_issue_batch_{batch_id}_GET.py index a6618700..98e6d311 100644 --- a/tests/app/test_share_tokens_{token_address}_additional_issue_batch_{batch_id}_GET.py +++ b/tests/app/test_share_tokens_{token_address}_additional_issue_batch_{batch_id}_GET.py @@ -71,7 +71,7 @@ def test_normal_1_1(self, client, db): token.issuer_address = issuer_address token.token_address = test_token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) batch_upload = BatchIssueRedeemUpload() @@ -158,7 +158,7 @@ def test_normal_1_2(self, client, db): token.issuer_address = issuer_address token.token_address = test_token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) batch_upload = BatchIssueRedeemUpload() @@ -245,7 +245,7 @@ def test_normal_2(self, client, db): token.issuer_address = issuer_address token.token_address = test_token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) batch_upload = BatchIssueRedeemUpload() @@ -358,7 +358,7 @@ def test_error_1(self, client, db): token.issuer_address = issuer_address token.token_address = test_token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) batch_upload = BatchIssueRedeemUpload() diff --git a/tests/app/test_share_tokens_{token_address}_history_GET.py b/tests/app/test_share_tokens_{token_address}_history_GET.py index ebc695ec..449a2d84 100644 --- a/tests/app/test_share_tokens_{token_address}_history_GET.py +++ b/tests/app/test_share_tokens_{token_address}_history_GET.py @@ -237,7 +237,7 @@ def test_normal_1(self, client, db, personal_info_contract): _token.type = TokenType.IBET_SHARE.value _token.tx_hash = "" _token.abi = "" - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) db.commit() @@ -290,7 +290,7 @@ async def test_normal_2(self, client, db, personal_info_contract): _token.type = TokenType.IBET_SHARE.value _token.tx_hash = "" _token.abi = "" - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) db.commit() @@ -393,7 +393,7 @@ async def test_normal_3_1(self, client, db, personal_info_contract): _token.type = TokenType.IBET_SHARE.value _token.tx_hash = "" _token.abi = "" - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) db.commit() @@ -494,7 +494,7 @@ async def test_normal_3_2(self, client, db, personal_info_contract): _token.type = TokenType.IBET_SHARE.value _token.tx_hash = "" _token.abi = "" - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) db.commit() @@ -582,7 +582,7 @@ async def test_normal_3_3(self, client, db, personal_info_contract): _token.type = TokenType.IBET_SHARE.value _token.tx_hash = "" _token.abi = "" - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) _operation_log_1 = TokenUpdateOperationLog() @@ -686,7 +686,7 @@ async def test_normal_3_4(self, client, db, personal_info_contract): _token.type = TokenType.IBET_SHARE.value _token.tx_hash = "" _token.abi = "" - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) _operation_log_1 = TokenUpdateOperationLog() @@ -782,7 +782,7 @@ async def test_normal_4_1(self, client, db, personal_info_contract): _token.type = TokenType.IBET_SHARE.value _token.tx_hash = "" _token.abi = "" - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) db.commit() @@ -889,7 +889,7 @@ async def test_normal_4_2(self, client, db, personal_info_contract): _token.type = TokenType.IBET_SHARE.value _token.tx_hash = "" _token.abi = "" - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) db.commit() @@ -997,7 +997,7 @@ async def test_normal_5_1(self, client, db, personal_info_contract): _token.type = TokenType.IBET_SHARE.value _token.tx_hash = "" _token.abi = "" - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) db.commit() @@ -1085,7 +1085,7 @@ async def test_normal_5_2(self, client, db, personal_info_contract): _token.type = TokenType.IBET_SHARE.value _token.tx_hash = "" _token.abi = "" - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) db.commit() diff --git a/tests/app/test_share_tokens_{token_address}_holders_GET.py b/tests/app/test_share_tokens_{token_address}_holders_GET.py index 88a167be..53e98ece 100644 --- a/tests/app/test_share_tokens_{token_address}_holders_GET.py +++ b/tests/app/test_share_tokens_{token_address}_holders_GET.py @@ -57,7 +57,7 @@ def test_normal_1(self, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() @@ -95,7 +95,7 @@ def test_normal_2(self, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) # prepare data: Position @@ -212,7 +212,7 @@ def test_normal_3(self, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) # prepare data: account_address_1 @@ -441,7 +441,7 @@ def test_normal_4_1_1(self, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) # prepare data: account_address_1 @@ -590,7 +590,7 @@ def test_normal_4_1_2(self, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) idx_position_1 = IDXPosition() @@ -747,7 +747,7 @@ def test_normal_4_2_1(self, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) # prepare data: account_address_1 @@ -939,7 +939,7 @@ def test_normal_4_2_2(self, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) # prepare data: account_address_1 @@ -1150,7 +1150,7 @@ def test_normal_4_2_3(self, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) # prepare data: account_address_1 @@ -1361,7 +1361,7 @@ def test_normal_4_3_1(self, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) # prepare data: account_address_1 @@ -1553,7 +1553,7 @@ def test_normal_4_3_2(self, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) # prepare data: account_address_1 @@ -1764,7 +1764,7 @@ def test_normal_4_3_3(self, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) # prepare data: account_address_1 @@ -1975,7 +1975,7 @@ def test_normal_4_4_1(self, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) # prepare data: account_address_1 @@ -2167,7 +2167,7 @@ def test_normal_4_4_2(self, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) # prepare data: account_address_1 @@ -2379,7 +2379,7 @@ def test_normal_4_4_3(self, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) # prepare data: account_address_1 @@ -2620,7 +2620,7 @@ def test_normal_4_5_1(self, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) # prepare data: account_address_1 @@ -2815,7 +2815,7 @@ def test_normal_4_5_2(self, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) # prepare data: account_address_1 @@ -3029,7 +3029,7 @@ def test_normal_4_5_3(self, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) # prepare data: account_address_1 @@ -3243,7 +3243,7 @@ def test_normal_4_6(self, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) # prepare data: account_address_1 @@ -3435,7 +3435,7 @@ def test_normal_4_7(self, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) # prepare data: account_address_1 @@ -3646,7 +3646,7 @@ def test_normal_4_8(self, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) # prepare data: account_address_1 @@ -3838,7 +3838,7 @@ def test_normal_5_1(self, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) # prepare data: account_address_1 @@ -4071,7 +4071,7 @@ def test_normal_5_2(self, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) # prepare data: account_address_1 @@ -4304,7 +4304,7 @@ def test_normal_5_3(self, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) # prepare data: account_address_1 @@ -4537,7 +4537,7 @@ def test_normal_5_4(self, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) # prepare data: account_address_1 @@ -4770,7 +4770,7 @@ def test_normal_5_5(self, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) # prepare data: account_address_1 @@ -5003,7 +5003,7 @@ def test_normal_5_6(self, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) # prepare data: account_address_1 @@ -5237,7 +5237,7 @@ def test_normal_5_7(self, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) # prepare data: account_address_1 @@ -5502,7 +5502,7 @@ def test_normal_5_8(self, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) # prepare data: account_address_1 @@ -5766,7 +5766,7 @@ def test_normal_6_1(self, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) # prepare data: account_address_1 @@ -5977,7 +5977,7 @@ def test_normal_6_2(self, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) # prepare data: account_address_1 @@ -6218,7 +6218,7 @@ def test_error_4(self, client, db): token.token_address = _token_address token.abi = "" token.token_status = 0 - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) # prepare data diff --git a/tests/app/test_share_tokens_{token_address}_holders_count_GET.py b/tests/app/test_share_tokens_{token_address}_holders_count_GET.py index c92a00b5..a0b8e292 100644 --- a/tests/app/test_share_tokens_{token_address}_holders_count_GET.py +++ b/tests/app/test_share_tokens_{token_address}_holders_count_GET.py @@ -55,7 +55,7 @@ def test_normal_1_1(self, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() @@ -90,7 +90,7 @@ def test_normal_1_2(self, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) idx_position_1 = IDXPosition() @@ -134,7 +134,7 @@ def test_normal_1_3(self, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) idx_position_1 = IDXPosition() @@ -196,7 +196,7 @@ def test_normal_1_4(self, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) idx_position_1 = IDXPosition() @@ -250,7 +250,7 @@ def test_normal_2(self, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) idx_position_1 = IDXPosition() @@ -417,7 +417,7 @@ def test_error_4(self, client, db): token.token_address = _token_address token.abi = "" token.token_status = 0 - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() diff --git a/tests/app/test_share_tokens_{token_address}_holders_{account_address}_GET.py b/tests/app/test_share_tokens_{token_address}_holders_{account_address}_GET.py index d65a4e42..1544f375 100644 --- a/tests/app/test_share_tokens_{token_address}_holders_{account_address}_GET.py +++ b/tests/app/test_share_tokens_{token_address}_holders_{account_address}_GET.py @@ -60,7 +60,7 @@ def test_normal_1_1(self, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) # prepare data: Personal Info @@ -130,7 +130,7 @@ def test_normal_1_2(self, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) # prepare data: Position @@ -211,7 +211,7 @@ def test_normal_1_3(self, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) # prepare data: Position @@ -311,7 +311,7 @@ def test_normal_2_1(self, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) idx_position_1 = IDXPosition() @@ -373,7 +373,7 @@ def test_normal_2_2(self, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) idx_position_1 = IDXPosition() @@ -529,7 +529,7 @@ def test_error_4(self, client, db): token.token_address = _token_address token.abi = "" token.token_status = 0 - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() diff --git a/tests/app/test_share_tokens_{token_address}_personal_info_POST.py b/tests/app/test_share_tokens_{token_address}_personal_info_POST.py index b4e55b75..8154fb6e 100644 --- a/tests/app/test_share_tokens_{token_address}_personal_info_POST.py +++ b/tests/app/test_share_tokens_{token_address}_personal_info_POST.py @@ -59,7 +59,7 @@ def test_normal_1(self, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() @@ -140,7 +140,7 @@ def test_normal_2(self, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() @@ -227,7 +227,7 @@ def test_normal_3(self, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() @@ -680,7 +680,7 @@ def test_error_4(self, client, db): token.token_address = _token_address token.abi = "" token.token_status = 0 - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() @@ -738,7 +738,7 @@ def test_error_5(self, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() diff --git a/tests/app/test_share_tokens_{token_address}_personal_info_batch_GET.py b/tests/app/test_share_tokens_{token_address}_personal_info_batch_GET.py index 2c21df4b..52d260f5 100644 --- a/tests/app/test_share_tokens_{token_address}_personal_info_batch_GET.py +++ b/tests/app/test_share_tokens_{token_address}_personal_info_batch_GET.py @@ -61,7 +61,7 @@ def test_normal_1(self, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() @@ -94,7 +94,7 @@ def test_normal_2(self, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) # Prepare data : BatchRegisterPersonalInfoUpload @@ -153,7 +153,7 @@ def test_normal_3(self, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) # Prepare data : BatchRegisterPersonalInfoUpload @@ -208,7 +208,7 @@ def test_normal_4(self, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) # Prepare data : BatchRegisterPersonalInfoUpload @@ -263,7 +263,7 @@ def test_normal_5(self, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) # Prepare data : BatchRegisterPersonalInfoUpload @@ -327,7 +327,7 @@ def test_error_1(self, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() @@ -370,7 +370,7 @@ def test_error_2(self, client, db): token.issuer_address = _issuer_address_2 token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) # Prepare data : BatchRegisterPersonalInfoUpload diff --git a/tests/app/test_share_tokens_{token_address}_personal_info_batch_POST.py b/tests/app/test_share_tokens_{token_address}_personal_info_batch_POST.py index a1398fd8..0c8f63e3 100644 --- a/tests/app/test_share_tokens_{token_address}_personal_info_batch_POST.py +++ b/tests/app/test_share_tokens_{token_address}_personal_info_batch_POST.py @@ -70,7 +70,7 @@ def test_normal_1(self, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() @@ -147,7 +147,7 @@ def test_normal_2(self, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() @@ -668,7 +668,7 @@ def test_error_4_1(self, client, db): token.token_address = _token_address token.abi = "" token.token_status = 0 - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() @@ -730,7 +730,7 @@ def test_error_4_2(self, client, db): token.token_address = _token_address token.abi = "" token.token_status = 1 - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() diff --git a/tests/app/test_share_tokens_{token_address}_personal_info_batch_{batch_id}_GET.py b/tests/app/test_share_tokens_{token_address}_personal_info_batch_{batch_id}_GET.py index 2c49b538..4250696c 100644 --- a/tests/app/test_share_tokens_{token_address}_personal_info_batch_{batch_id}_GET.py +++ b/tests/app/test_share_tokens_{token_address}_personal_info_batch_{batch_id}_GET.py @@ -94,7 +94,7 @@ def test_normal_1(self, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) # Prepare data : BatchRegisterPersonalInfoUpload diff --git a/tests/app/test_share_tokens_{token_address}_redeem_GET.py b/tests/app/test_share_tokens_{token_address}_redeem_GET.py index e85f8fb1..8f3b88af 100644 --- a/tests/app/test_share_tokens_{token_address}_redeem_GET.py +++ b/tests/app/test_share_tokens_{token_address}_redeem_GET.py @@ -74,7 +74,7 @@ def test_normal_1(self, client, db): _token.issuer_address = self.test_issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: IDXIssueRedeem @@ -110,7 +110,7 @@ def test_normal_2(self, client, db): _token.issuer_address = self.test_issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: IDXIssueRedeem @@ -191,7 +191,7 @@ def test_normal_3(self, client, db): _token.issuer_address = self.test_issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: IDXIssueRedeem @@ -278,7 +278,7 @@ def test_normal_4(self, client, db): _token.issuer_address = self.test_issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: IDXIssueRedeem @@ -365,7 +365,7 @@ def test_error_2(self, client, db): _token.token_address = self.test_token_address _token.abi = {} _token.token_status = 0 - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) db.commit() diff --git a/tests/app/test_share_tokens_{token_address}_redeem_POST.py b/tests/app/test_share_tokens_{token_address}_redeem_POST.py index 7edbd68c..61a880d2 100644 --- a/tests/app/test_share_tokens_{token_address}_redeem_POST.py +++ b/tests/app/test_share_tokens_{token_address}_redeem_POST.py @@ -58,7 +58,7 @@ def test_normal_1(self, IbetShareContract_mock, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() @@ -113,7 +113,7 @@ def test_normal_2(self, IbetShareContract_mock, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() @@ -283,7 +283,7 @@ def test_error_5(self, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() @@ -326,7 +326,7 @@ def test_error_6(self, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() @@ -440,7 +440,7 @@ def test_error_9(self, client, db): token.token_address = _token_address token.abi = "" token.token_status = 0 - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() @@ -488,7 +488,7 @@ def test_error_10(self, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() diff --git a/tests/app/test_share_tokens_{token_address}_redeem_batch_GET.py b/tests/app/test_share_tokens_{token_address}_redeem_batch_GET.py index ceed3d88..84bca508 100644 --- a/tests/app/test_share_tokens_{token_address}_redeem_batch_GET.py +++ b/tests/app/test_share_tokens_{token_address}_redeem_batch_GET.py @@ -52,7 +52,7 @@ def test_normal_1(self, client, db): token.issuer_address = issuer_address token.token_address = token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() @@ -80,7 +80,7 @@ def test_normal_2(self, client, db): token.issuer_address = issuer_address token.token_address = token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) redeem_upload1 = BatchIssueRedeemUpload() @@ -127,7 +127,7 @@ def test_normal_3_1(self, client, db): token.issuer_address = issuer_address token.token_address = token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) redeem_upload1 = BatchIssueRedeemUpload() @@ -234,7 +234,7 @@ def test_normal_3_2(self, client, db): token.issuer_address = issuer_address token.token_address = token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) redeem_upload1 = BatchIssueRedeemUpload() @@ -328,7 +328,7 @@ def test_normal_3_3(self, client, db): token.issuer_address = issuer_address token.token_address = token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) redeem_upload1 = BatchIssueRedeemUpload() @@ -428,7 +428,7 @@ def test_normal_4(self, client, db): token.issuer_address = issuer_address token.token_address = token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) redeem_upload1 = BatchIssueRedeemUpload() @@ -520,7 +520,7 @@ def test_normal_5(self, client, db): token.issuer_address = issuer_address token.token_address = token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) additional_issue_upload1 = BatchIssueRedeemUpload() @@ -643,7 +643,7 @@ def test_error_1(self, client, db): token.issuer_address = issuer_address token.token_address = token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() diff --git a/tests/app/test_share_tokens_{token_address}_redeem_batch_POST.py b/tests/app/test_share_tokens_{token_address}_redeem_batch_POST.py index a7f56bb1..4f3368b8 100644 --- a/tests/app/test_share_tokens_{token_address}_redeem_batch_POST.py +++ b/tests/app/test_share_tokens_{token_address}_redeem_batch_POST.py @@ -66,7 +66,7 @@ def test_normal_1(self, client, db): token.issuer_address = issuer_address token.token_address = token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() @@ -131,7 +131,7 @@ def test_normal_2(self, client, db): token.issuer_address = issuer_address token.token_address = token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() @@ -206,7 +206,7 @@ def test_error_1_1(self, client, db): token.issuer_address = issuer_address token.token_address = token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() @@ -258,7 +258,7 @@ def test_error_1_2(self, client, db): token.issuer_address = issuer_address token.token_address = token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() @@ -313,7 +313,7 @@ def test_error_1_3_1(self, client, db): token.issuer_address = issuer_address token.token_address = token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() @@ -368,7 +368,7 @@ def test_error_1_3_2(self, client, db): token.issuer_address = issuer_address token.token_address = token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() @@ -423,7 +423,7 @@ def test_error_1_4(self, client, db): token.issuer_address = issuer_address token.token_address = token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() @@ -472,7 +472,7 @@ def test_error_1_5(self, client, db): token.issuer_address = issuer_address token.token_address = token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() @@ -521,7 +521,7 @@ def test_error_1_6(self, client, db): token.issuer_address = issuer_address token.token_address = token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() @@ -568,7 +568,7 @@ def test_error_1_7_1(self, client, db): token.issuer_address = issuer_address token.token_address = token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() @@ -615,7 +615,7 @@ def test_error_1_7_2(self, client, db): token.issuer_address = issuer_address token.token_address = token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() @@ -703,7 +703,7 @@ def test_error_1_8_2(self, client, db): token.token_address = token_address token.abi = "" token.token_status = 0 - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() diff --git a/tests/app/test_share_tokens_{token_address}_redeem_batch_{batch_id}_GET.py b/tests/app/test_share_tokens_{token_address}_redeem_batch_{batch_id}_GET.py index f31eeeb4..3ba61db0 100644 --- a/tests/app/test_share_tokens_{token_address}_redeem_batch_{batch_id}_GET.py +++ b/tests/app/test_share_tokens_{token_address}_redeem_batch_{batch_id}_GET.py @@ -71,7 +71,7 @@ def test_normal_1_1(self, client, db): token.issuer_address = issuer_address token.token_address = test_token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) batch_upload = BatchIssueRedeemUpload() @@ -158,7 +158,7 @@ def test_normal_1_2(self, client, db): token.issuer_address = issuer_address token.token_address = test_token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) batch_upload = BatchIssueRedeemUpload() @@ -245,7 +245,7 @@ def test_normal_2(self, client, db): token.issuer_address = issuer_address token.token_address = test_token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) batch_upload = BatchIssueRedeemUpload() @@ -358,7 +358,7 @@ def test_error_1(self, client, db): token.issuer_address = issuer_address token.token_address = test_token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) batch_upload = BatchIssueRedeemUpload() diff --git a/tests/app/test_share_tokens_{token_address}_scheduled_events_POST.py b/tests/app/test_share_tokens_{token_address}_scheduled_events_POST.py index 75594707..fedb2505 100644 --- a/tests/app/test_share_tokens_{token_address}_scheduled_events_POST.py +++ b/tests/app/test_share_tokens_{token_address}_scheduled_events_POST.py @@ -63,7 +63,7 @@ def test_normal_1(self, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() @@ -147,7 +147,7 @@ def test_normal_2(self, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() @@ -350,7 +350,7 @@ def test_error_3(self, client, db): token.issuer_address = _issuer_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() @@ -497,7 +497,7 @@ def test_error_6(self, client, db): token.token_address = _token_address token.abi = "" token.token_status = 0 - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() diff --git a/tests/app/test_share_transfer_approvals_GET.py b/tests/app/test_share_transfer_approvals_GET.py index a3728b3f..c24323be 100644 --- a/tests/app/test_share_transfer_approvals_GET.py +++ b/tests/app/test_share_transfer_approvals_GET.py @@ -100,7 +100,7 @@ def test_normal_1(self, client, db): _token.token_address = self.test_token_address_1 _token.abi = {} _token.token_status = 2 - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: Token(bond) @@ -110,7 +110,7 @@ def test_normal_1(self, client, db): _token.issuer_address = self.test_issuer_address_1 _token.token_address = self.test_token_address_2 _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: IDXTransferApproval(failed token) @@ -201,7 +201,7 @@ def test_normal_2(self, client, db): _token.issuer_address = self.test_issuer_address_1 _token.token_address = self.test_token_address_1 _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: IDXTransferApproval(ApplyFor(unapproved)) @@ -386,7 +386,7 @@ def test_normal_3_1(self, client, db): _token.issuer_address = self.test_issuer_address_1 _token.token_address = self.test_token_address_1 _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: Token(issuer-1) @@ -396,7 +396,7 @@ def test_normal_3_1(self, client, db): _token.issuer_address = self.test_issuer_address_1 _token.token_address = self.test_token_address_2 _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: Token(issuer-2) @@ -406,7 +406,7 @@ def test_normal_3_1(self, client, db): _token.issuer_address = self.test_issuer_address_2 _token.token_address = self.test_token_address_3 _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: IDXTransferApproval(issuer-1 token-1) @@ -571,7 +571,7 @@ def test_normal_3_2(self, client, db): _token.issuer_address = self.test_issuer_address_1 _token.token_address = self.test_token_address_1 _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: Token(issuer-1) @@ -581,7 +581,7 @@ def test_normal_3_2(self, client, db): _token.issuer_address = self.test_issuer_address_1 _token.token_address = self.test_token_address_2 _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: Token(issuer-2) @@ -591,7 +591,7 @@ def test_normal_3_2(self, client, db): _token.issuer_address = self.test_issuer_address_2 _token.token_address = self.test_token_address_3 _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: IDXTransferApproval(issuer-1 token-1) @@ -763,7 +763,7 @@ def test_normal_4(self, client, db): _token.issuer_address = self.test_issuer_address_1 _token.token_address = self.test_token_address_1 _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: Token(issuer-1) @@ -773,7 +773,7 @@ def test_normal_4(self, client, db): _token.issuer_address = self.test_issuer_address_1 _token.token_address = self.test_token_address_2 _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: Token(issuer-1) @@ -783,7 +783,7 @@ def test_normal_4(self, client, db): _token.issuer_address = self.test_issuer_address_1 _token.token_address = self.test_token_address_3 _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: Token(issuer-1) @@ -793,7 +793,7 @@ def test_normal_4(self, client, db): _token.issuer_address = self.test_issuer_address_1 _token.token_address = self.test_token_address_4 _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: IDXTransferApproval(issuer-1 token-1) diff --git a/tests/app/test_share_transfer_approvals_{token_address}_GET.py b/tests/app/test_share_transfer_approvals_{token_address}_GET.py index 27a41441..8f70484e 100644 --- a/tests/app/test_share_transfer_approvals_{token_address}_GET.py +++ b/tests/app/test_share_transfer_approvals_{token_address}_GET.py @@ -110,7 +110,7 @@ def test_normal_1_1(self, client, db): _token.issuer_address = self.test_issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) db.commit() @@ -136,7 +136,7 @@ def test_normal_1_2(self, client, db): _token.issuer_address = self.test_issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: IDXPersonalInfo @@ -330,7 +330,7 @@ def test_normal_2(self, client, db): _token.issuer_address = self.test_issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: IDXPersonalInfo @@ -450,7 +450,7 @@ def test_normal_3(self, client, db): _token.issuer_address = self.test_issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: IDXPersonalInfo @@ -654,7 +654,7 @@ def test_normal_4_1(self, client, db): _token.issuer_address = self.test_issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: IDXPersonalInfo @@ -767,7 +767,7 @@ def test_normal_4_2(self, client, db): _token.issuer_address = self.test_issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: IDXPersonalInfo @@ -881,7 +881,7 @@ def test_normal_4_3_1(self, client, db): _token.issuer_address = self.test_issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: IDXPersonalInfo @@ -1027,7 +1027,7 @@ def test_normal_4_3_2(self, client, db): _token.issuer_address = self.test_issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: IDXPersonalInfo @@ -1173,7 +1173,7 @@ def test_normal_4_3_3(self, client, db): _token.issuer_address = self.test_issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: IDXTransferApproval @@ -1407,7 +1407,7 @@ def test_normal_4_3_4(self, client, db): _token.issuer_address = self.test_issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: IDXPersonalInfo @@ -1627,7 +1627,7 @@ def test_normal_4_3_5(self, client, db): _token.issuer_address = self.test_issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: IDXPersonalInfo @@ -1879,7 +1879,7 @@ def test_normal_5_1(self, client, db): _token.issuer_address = self.test_issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: IDXPersonalInfo @@ -2079,7 +2079,7 @@ def test_normal_5_2(self, client, db): _token.issuer_address = self.test_issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: IDXPersonalInfo @@ -2319,7 +2319,7 @@ def test_normal_5_3(self, client, db): _token.issuer_address = self.test_issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: IDXPersonalInfo @@ -2559,7 +2559,7 @@ def test_normal_5_4(self, client, db): _token.issuer_address = self.test_issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: IDXPersonalInfo @@ -2764,7 +2764,7 @@ def test_normal_5_5(self, client, db): _token.issuer_address = self.test_issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: IDXPersonalInfo @@ -2967,7 +2967,7 @@ def test_normal_5_6(self, client, db): _token.issuer_address = self.test_issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: IDXPersonalInfo @@ -3206,7 +3206,7 @@ def test_normal_5_7(self, client, db): _token.issuer_address = self.test_issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: IDXPersonalInfo @@ -3452,7 +3452,7 @@ def test_normal_5_8(self, client, db): _token.issuer_address = self.test_issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: IDXPersonalInfo @@ -3694,7 +3694,7 @@ def test_normal_5_9(self, client, db): _token.issuer_address = self.test_issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: IDXPersonalInfo @@ -4235,7 +4235,7 @@ def test_error_2(self, client, db): _token.token_address = self.test_token_address _token.abi = {} _token.token_status = 0 - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) db.commit() diff --git a/tests/app/test_share_transfer_approvals_{token_address}_{id}_GET.py b/tests/app/test_share_transfer_approvals_{token_address}_{id}_GET.py index 76d249cd..47460a10 100644 --- a/tests/app/test_share_transfer_approvals_{token_address}_{id}_GET.py +++ b/tests/app/test_share_transfer_approvals_{token_address}_{id}_GET.py @@ -96,7 +96,7 @@ def test_normal_1_1(self, client, db): _token.issuer_address = self.test_issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: IDXPersonalInfo @@ -209,7 +209,7 @@ def test_normal_1_2(self, client, db): _token.issuer_address = self.test_issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: IDXTransferApproval @@ -274,7 +274,7 @@ def test_normal_2_1(self, client, db): _token.issuer_address = self.test_issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: IDXTransferApproval @@ -384,7 +384,7 @@ def test_normal_2_2(self, client, db): _token.issuer_address = self.test_issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: IDXTransferApproval @@ -496,7 +496,7 @@ def test_normal_3(self, client, db): _token.issuer_address = self.test_issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: IDXPersonalInfo @@ -610,7 +610,7 @@ def test_normal_4_1(self, client, db): _token.issuer_address = self.test_issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: IDXTransferApproval @@ -722,7 +722,7 @@ def test_normal_4_2(self, client, db): _token.issuer_address = self.test_issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: IDXTransferApproval @@ -835,7 +835,7 @@ def test_normal_4_3(self, client, db): _token.issuer_address = self.test_issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: IDXPersonalInfo @@ -982,7 +982,7 @@ def test_error_2(self, client, db): _token.token_address = self.test_token_address _token.abi = {} _token.token_status = 0 - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) db.commit() @@ -1010,7 +1010,7 @@ def test_error_3(self, client, db): _token.token_address = self.test_token_address _token.abi = {} _token.token_status = 1 - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) db.commit() diff --git a/tests/app/test_share_transfer_approvals_{token_address}_{id}_POST.py b/tests/app/test_share_transfer_approvals_{token_address}_{id}_POST.py index 1c5d9cd7..c7c74da5 100644 --- a/tests/app/test_share_transfer_approvals_{token_address}_{id}_POST.py +++ b/tests/app/test_share_transfer_approvals_{token_address}_{id}_POST.py @@ -90,7 +90,7 @@ def test_normal_1_1(self, client, db): _token.issuer_address = issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) id = 10 @@ -227,7 +227,7 @@ def test_normal_1_2(self, client, db): _token.issuer_address = issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) id = 10 @@ -365,7 +365,7 @@ def test_normal_2_1(self, client, db): _token.issuer_address = issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) id = 10 @@ -507,7 +507,7 @@ def test_normal_3(self, client, db): _token.issuer_address = issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) id = 10 @@ -841,7 +841,7 @@ def test_error_3_2(self, client, db): _token.issuer_address = issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) db.commit() @@ -886,7 +886,7 @@ def test_error_4_1(self, client, db): _token.token_address = self.test_token_address _token.abi = {} _token.token_status = 0 - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) db.commit() @@ -930,7 +930,7 @@ def test_error_4_2(self, client, db): _token.issuer_address = issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) id = 10 @@ -995,7 +995,7 @@ def test_error_4_3(self, client, db): _token.issuer_address = issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) id = 10 @@ -1060,7 +1060,7 @@ def test_error_4_4(self, client, db): _token.issuer_address = issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) id = 10 @@ -1123,7 +1123,7 @@ def test_error_4_5(self, client, db): _token.issuer_address = issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) id = 10 @@ -1186,7 +1186,7 @@ def test_error_4_6(self, client, db): _token.issuer_address = issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) id = 10 @@ -1262,7 +1262,7 @@ def test_error_5_1(self, client, db): _token.issuer_address = issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) id = 10 @@ -1355,7 +1355,7 @@ def test_error_5_2(self, client, db): _token.issuer_address = issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) id = 10 @@ -1465,7 +1465,7 @@ def test_error_5_3(self, client, db): _token.issuer_address = issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) id = 10 @@ -1559,7 +1559,7 @@ def test_error_5_4(self, client, db): _token.issuer_address = issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) id = 10 @@ -1664,7 +1664,7 @@ def test_error_6_1(self, client, db): _token.issuer_address = issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) id = 10 @@ -1757,7 +1757,7 @@ def test_error_6_2(self, client, db): _token.issuer_address = issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) id = 10 @@ -1855,7 +1855,7 @@ def test_error_7_1(self, client, db): _token.issuer_address = issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) id = 10 @@ -1923,7 +1923,7 @@ def test_error_7_2(self, client, db): _token.issuer_address = issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) id = 10 diff --git a/tests/app/test_share_transfers_POST.py b/tests/app/test_share_transfers_POST.py index a0de6e71..2c7b64ae 100644 --- a/tests/app/test_share_transfers_POST.py +++ b/tests/app/test_share_transfers_POST.py @@ -22,7 +22,7 @@ from unittest.mock import ANY, MagicMock from app.exceptions import SendTransactionError -from app.model.blockchain.tx_params.ibet_share import TransferParams +from app.model.blockchain.tx_params.ibet_share import ForcedTransferParams from app.model.db import Account, AuthToken, Token, TokenType, TokenVersion from app.utils.e2ee_utils import E2EEUtils from tests.account_config import config_eth_account @@ -38,7 +38,7 @@ class TestAppRoutersShareTransfersPOST: # # Authorization by eoa-password - @mock.patch("app.model.blockchain.token.IbetShareContract.transfer") + @mock.patch("app.model.blockchain.token.IbetShareContract.forced_transfer") def test_normal_1(self, IbetShareContract_mock, client, db): _admin_account = config_eth_account("user1") _admin_address = _admin_account["address"] @@ -65,7 +65,7 @@ def test_normal_1(self, IbetShareContract_mock, client, db): token.issuer_address = _admin_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() @@ -91,7 +91,7 @@ def test_normal_1(self, IbetShareContract_mock, client, db): # assertion IbetShareContract_mock.assert_any_call( - data=TransferParams( + data=ForcedTransferParams( **{ "from_address": _from_address, "to_address": _to_address, @@ -107,7 +107,7 @@ def test_normal_1(self, IbetShareContract_mock, client, db): # # Authorization by auth-token - @mock.patch("app.model.blockchain.token.IbetShareContract.transfer") + @mock.patch("app.model.blockchain.token.IbetShareContract.forced_transfer") def test_normal_2(self, IbetShareContract_mock, client, db): _admin_account = config_eth_account("user1") _admin_address = _admin_account["address"] @@ -140,7 +140,7 @@ def test_normal_2(self, IbetShareContract_mock, client, db): token.issuer_address = _admin_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() @@ -163,7 +163,7 @@ def test_normal_2(self, IbetShareContract_mock, client, db): # assertion IbetShareContract_mock.assert_any_call( - data=TransferParams( + data=ForcedTransferParams( **{ "from_address": _from_address, "to_address": _to_address, @@ -547,7 +547,7 @@ def test_error_9(self, client, db): token.token_address = _token_address token.abi = "" token.token_status = 0 - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() @@ -578,7 +578,7 @@ def test_error_9(self, client, db): # # Send Transaction Error @mock.patch( - "app.model.blockchain.token.IbetShareContract.transfer", + "app.model.blockchain.token.IbetShareContract.forced_transfer", MagicMock(side_effect=SendTransactionError()), ) def test_error_10(self, client, db): @@ -607,7 +607,7 @@ def test_error_10(self, client, db): token.issuer_address = _admin_address token.token_address = _token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() diff --git a/tests/app/test_share_transfers_{token_address}_GET.py b/tests/app/test_share_transfers_{token_address}_GET.py index 7c4fe4b3..3bc5e3e0 100644 --- a/tests/app/test_share_transfers_{token_address}_GET.py +++ b/tests/app/test_share_transfers_{token_address}_GET.py @@ -72,7 +72,7 @@ def test_normal_1(self, client, db): _token.issuer_address = self.test_issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: IDXTransfer @@ -148,7 +148,7 @@ def test_normal_2(self, client, db): _token.issuer_address = self.test_issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: IDXPersonalInfo @@ -251,7 +251,7 @@ def test_normal_3_1(self, client, db): _token.issuer_address = self.test_issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: IDXTransfer @@ -339,7 +339,7 @@ def test_normal_3_2(self, client, db): _token.issuer_address = self.test_issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: IDXTransfer @@ -427,7 +427,7 @@ def test_normal_3_3(self, client, db): _token.issuer_address = self.test_issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: IDXTransfer @@ -503,7 +503,7 @@ def test_normal_3_4(self, client, db): _token.issuer_address = self.test_issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: IDXTransfer @@ -579,7 +579,7 @@ def test_normal_3_5(self, client, db): _token.issuer_address = self.test_issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: IDXTransfer @@ -684,7 +684,7 @@ def test_normal_3_6(self, client, db): _token.issuer_address = self.test_issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: IDXTransfer @@ -789,7 +789,7 @@ def test_normal_3_7_1(self, client, db): _token.issuer_address = self.test_issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: IDXTransfer @@ -865,7 +865,7 @@ def test_normal_3_7_2(self, client, db): _token.issuer_address = self.test_issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: IDXTransfer @@ -953,7 +953,7 @@ def test_normal_3_7_3(self, client, db): _token.issuer_address = self.test_issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: IDXTransfer @@ -1041,7 +1041,7 @@ def test_normal_3_8(self, client, db): _token.issuer_address = self.test_issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: IDXTransfer @@ -1117,7 +1117,7 @@ def test_normal_3_9(self, client, db): _token.issuer_address = self.test_issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: IDXTransfer @@ -1192,7 +1192,7 @@ def test_normal_4_1(self, client, db): _token.issuer_address = self.test_issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: IDXTransfer @@ -1274,7 +1274,7 @@ def test_normal_4_2(self, client, db): _token.issuer_address = self.test_issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: IDXTransfer @@ -1377,7 +1377,7 @@ def test_normal_4_3(self, client, db): _token.issuer_address = self.test_issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: IDXTransfer @@ -1480,7 +1480,7 @@ def test_normal_4_4(self, client, db): _token.issuer_address = self.test_issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: IDXTransfer @@ -1609,7 +1609,7 @@ def test_normal_4_5(self, client, db): _token.issuer_address = self.test_issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: IDXTransfer @@ -1738,7 +1738,7 @@ def test_normal_4_6(self, client, db): _token.issuer_address = self.test_issuer_address _token.token_address = self.test_token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) # prepare data: IDXTransfer @@ -1860,7 +1860,7 @@ def test_error_2(self, client, db): _token.token_address = self.test_token_address _token.abi = {} _token.token_status = 0 - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) db.commit() diff --git a/tests/app/test_token_holders_{token_address}_GET.py b/tests/app/test_token_holders_{token_address}_GET.py index 6b3ec4bc..45c442e1 100644 --- a/tests/app/test_token_holders_{token_address}_GET.py +++ b/tests/app/test_token_holders_{token_address}_GET.py @@ -53,7 +53,7 @@ def test_normal_1(self, client, db): token.issuer_address = issuer_address token.token_address = token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() @@ -81,7 +81,7 @@ def test_normal_2(self, client, db): token.issuer_address = issuer_address token.token_address = token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) token_holder_list1 = TokenHoldersList() @@ -124,7 +124,7 @@ def test_normal_3_1(self, client, db): token.issuer_address = issuer_address token.token_address = token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) token_holder_list1 = TokenHoldersList() @@ -226,7 +226,7 @@ def test_normal_3_2(self, client, db): token.issuer_address = issuer_address token.token_address = token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() @@ -333,7 +333,7 @@ def test_normal_3_3(self, client, db): token.issuer_address = issuer_address token.token_address = token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) token_holder_list1 = TokenHoldersList() @@ -407,7 +407,7 @@ def test_normal_4(self, client, db): token.issuer_address = issuer_address token.token_address = token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) token_holder_list1 = TokenHoldersList() @@ -489,7 +489,7 @@ def test_normal_5(self, client, db): token.issuer_address = issuer_address token.token_address = token_address token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) token_holder_list1 = TokenHoldersList() @@ -633,7 +633,7 @@ def test_error_3(self, client, db): token.token_address = token_address token.token_status = 0 token.abi = "" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() diff --git a/tests/app/test_token_holders_{token_address}_collection_POST.py b/tests/app/test_token_holders_{token_address}_collection_POST.py index b7ae2318..54d4fcea 100644 --- a/tests/app/test_token_holders_{token_address}_collection_POST.py +++ b/tests/app/test_token_holders_{token_address}_collection_POST.py @@ -64,7 +64,7 @@ async def test_normal_1(self, client, db): _token.issuer_address = issuer_address _token.token_address = token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) db.commit() @@ -116,7 +116,7 @@ async def test_normal_2(self, client, db): _token.issuer_address = issuer_address _token.token_address = token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) db.commit() @@ -184,7 +184,7 @@ async def test_error_1(self, client, db): _token.issuer_address = issuer_address _token.token_address = token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) db.commit() @@ -228,7 +228,7 @@ async def test_error_2(self, client, db): _token.issuer_address = issuer_address _token.token_address = token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) db.commit() @@ -266,7 +266,7 @@ async def test_error_3(self, client, db): _token.issuer_address = issuer_address _token.token_address = token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) db.commit() @@ -311,7 +311,7 @@ def test_error_4(self, client, db): _token.issuer_address = issuer_address _token.token_address = token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) db.commit() @@ -355,7 +355,7 @@ def test_error_5(self, client, db): _token1.issuer_address = issuer_address _token1.token_address = token_address1 _token1.abi = {} - _token1.version = TokenVersion.V_24_06 + _token1.version = TokenVersion.V_24_09 db.add(_token1) db.commit() @@ -391,7 +391,7 @@ def test_error_5(self, client, db): _token2.issuer_address = issuer_address _token2.token_address = token_address2 _token2.abi = {} - _token2.version = TokenVersion.V_24_06 + _token2.version = TokenVersion.V_24_09 db.add(_token2) db.commit() @@ -432,7 +432,7 @@ async def test_error_6(self, client, db): _token.token_address = token_address _token.abi = {} _token.token_status = 0 - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) db.commit() @@ -471,7 +471,7 @@ async def test_error_7(self, client, db): _token.issuer_address = issuer_address _token.token_address = token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) db.commit() diff --git a/tests/app/test_token_holders_{token_address}_collection_{collection_id}_GET.py b/tests/app/test_token_holders_{token_address}_collection_{collection_id}_GET.py index 0d897d73..aa1bb417 100644 --- a/tests/app/test_token_holders_{token_address}_collection_{collection_id}_GET.py +++ b/tests/app/test_token_holders_{token_address}_collection_{collection_id}_GET.py @@ -64,7 +64,7 @@ def test_normal_1(self, client, db): _token.issuer_address = issuer_address _token.token_address = token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) list_id = str(uuid.uuid4()) @@ -107,7 +107,7 @@ def test_normal_2(self, client, db): _token.issuer_address = issuer_address _token.token_address = token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) list_id = str(uuid.uuid4()) @@ -189,7 +189,7 @@ def test_error_2(self, client, db): # set status pending _token.token_status = 0 _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) list_id = str(uuid.uuid4()) @@ -231,7 +231,7 @@ def test_error_3(self, client, db): _token.issuer_address = issuer_address _token.token_address = token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) list_id = str(uuid.uuid4()) @@ -273,7 +273,7 @@ def test_error_4(self, client, db): _token.issuer_address = issuer_address _token.token_address = token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) db.commit() @@ -310,7 +310,7 @@ def test_error_5(self, client, db): _token1.issuer_address = issuer_address _token1.token_address = token_address1 _token1.abi = {} - _token1.version = TokenVersion.V_24_06 + _token1.version = TokenVersion.V_24_09 db.add(_token1) _token2 = Token() @@ -319,7 +319,7 @@ def test_error_5(self, client, db): _token2.issuer_address = issuer_address _token2.token_address = token_address2 _token2.abi = {} - _token2.version = TokenVersion.V_24_06 + _token2.version = TokenVersion.V_24_09 db.add(_token2) list_id = str(uuid.uuid4()) @@ -362,7 +362,7 @@ def test_error_6(self, client, db): _token.issuer_address = issuer_address _token.token_address = token_address _token.abi = {} - _token.version = TokenVersion.V_24_06 + _token.version = TokenVersion.V_24_09 db.add(_token) list_id = str(uuid.uuid4()) diff --git a/tests/app/utils/test_ledger_utils.py b/tests/app/utils/test_ledger_utils.py index afbb34c5..c2b03166 100644 --- a/tests/app/utils/test_ledger_utils.py +++ b/tests/app/utils/test_ledger_utils.py @@ -231,7 +231,7 @@ async def test_normal_1_1_1(self, db, async_db): _token_1.issuer_address = issuer_address _token_1.token_address = token_address_1 _token_1.abi = {} - _token_1.version = TokenVersion.V_24_06 + _token_1.version = TokenVersion.V_24_09 db.add(_token_1) # Prepare data: UTXO @@ -717,7 +717,7 @@ async def test_normal_1_1_2(self, db, async_db): _token_1.issuer_address = issuer_address _token_1.token_address = token_address_1 _token_1.abi = {} - _token_1.version = TokenVersion.V_24_06 + _token_1.version = TokenVersion.V_24_09 db.add(_token_1) # Prepare data: UTXO @@ -1198,7 +1198,7 @@ async def test_normal_1_2(self, db, async_db): _token_1.issuer_address = issuer_address _token_1.token_address = token_address_1 _token_1.abi = {} - _token_1.version = TokenVersion.V_24_06 + _token_1.version = TokenVersion.V_24_09 db.add(_token_1) # Prepare data: UTXO @@ -1524,7 +1524,7 @@ async def test_normal_2_1_1(self, db, async_db): _token_1.issuer_address = issuer_address _token_1.token_address = token_address_1 _token_1.abi = {} - _token_1.version = TokenVersion.V_24_06 + _token_1.version = TokenVersion.V_24_09 db.add(_token_1) # Prepare data: UTXO @@ -2008,7 +2008,7 @@ async def test_normal_2_1_2(self, db, async_db): _token_1.issuer_address = issuer_address _token_1.token_address = token_address_1 _token_1.abi = {} - _token_1.version = TokenVersion.V_24_06 + _token_1.version = TokenVersion.V_24_09 db.add(_token_1) # Prepare data: UTXO @@ -2487,7 +2487,7 @@ async def test_normal_2_2(self, db, async_db): _token_1.issuer_address = issuer_address _token_1.token_address = token_address_1 _token_1.abi = {} - _token_1.version = TokenVersion.V_24_06 + _token_1.version = TokenVersion.V_24_09 db.add(_token_1) # Prepare data: UTXO @@ -2751,7 +2751,7 @@ async def test_normal_3(self, db, async_db): _token_1.issuer_address = issuer_address _token_1.token_address = token_address_1 _token_1.abi = {} - _token_1.version = TokenVersion.V_24_06 + _token_1.version = TokenVersion.V_24_09 db.add(_token_1) db.commit() @@ -2791,7 +2791,7 @@ async def test_normal_4(self, db, async_db): _token_1.issuer_address = issuer_address _token_1.token_address = token_address_1 _token_1.abi = {} - _token_1.version = TokenVersion.V_24_06 + _token_1.version = TokenVersion.V_24_09 db.add(_token_1) db.commit() diff --git a/tests/batch/test_indexer_delivery.py b/tests/batch/test_indexer_delivery.py index 06073834..7a4b6199 100644 --- a/tests/batch/test_indexer_delivery.py +++ b/tests/batch/test_indexer_delivery.py @@ -192,7 +192,7 @@ async def test_normal_1_1( token_1.abi = "abi" token_1.tx_hash = "tx_hash" token_1.token_status = 0 - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) db.commit() @@ -246,7 +246,7 @@ async def test_normal_1_2( token_1.issuer_address = issuer_address token_1.abi = token_contract_1.abi token_1.tx_hash = "tx_hash" - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) # Prepare data : Token(processing token) @@ -257,7 +257,7 @@ async def test_normal_1_2( token_2.abi = "abi" token_2.tx_hash = "tx_hash" token_2.token_status = 0 - token_2.version = TokenVersion.V_24_06 + token_2.version = TokenVersion.V_24_09 db.add(token_2) db.commit() @@ -316,7 +316,7 @@ async def test_normal_1_3( token_1.issuer_address = issuer_address token_1.abi = token_contract_1.abi token_1.tx_hash = "tx_hash" - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) # Prepare data : Token(processing token) @@ -327,7 +327,7 @@ async def test_normal_1_3( token_2.abi = "abi" token_2.tx_hash = "tx_hash" token_2.token_status = 0 - token_2.version = TokenVersion.V_24_06 + token_2.version = TokenVersion.V_24_09 db.add(token_2) db.commit() @@ -409,7 +409,7 @@ async def test_normal_2_1( token_1.issuer_address = issuer_address token_1.abi = token_contract_1.abi token_1.tx_hash = "tx_hash" - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) # Prepare data : Token(processing token) @@ -420,7 +420,7 @@ async def test_normal_2_1( token_2.abi = "abi" token_2.tx_hash = "tx_hash" token_2.token_status = 0 - token_2.version = TokenVersion.V_24_06 + token_2.version = TokenVersion.V_24_09 db.add(token_2) # Prepare data : BlockNumber @@ -561,7 +561,7 @@ async def test_normal_2_2_1( token_1.issuer_address = issuer_address token_1.abi = token_contract_1.abi token_1.tx_hash = "tx_hash" - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) # Prepare data : Token(processing token) @@ -572,7 +572,7 @@ async def test_normal_2_2_1( token_2.abi = "abi" token_2.tx_hash = "tx_hash" token_2.token_status = 0 - token_2.version = TokenVersion.V_24_06 + token_2.version = TokenVersion.V_24_09 db.add(token_2) # Prepare data : BlockNumber @@ -729,7 +729,7 @@ async def test_normal_2_2_2( token_1.issuer_address = issuer_address token_1.abi = token_contract_1.abi token_1.tx_hash = "tx_hash" - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) # Prepare data : Token(processing token) @@ -740,7 +740,7 @@ async def test_normal_2_2_2( token_2.abi = "abi" token_2.tx_hash = "tx_hash" token_2.token_status = 0 - token_2.version = TokenVersion.V_24_06 + token_2.version = TokenVersion.V_24_09 db.add(token_2) # Prepare data : BlockNumber @@ -898,7 +898,7 @@ async def test_normal_2_3( token_1.issuer_address = issuer_address token_1.abi = token_contract_1.abi token_1.tx_hash = "tx_hash" - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) # Prepare data : Token(processing token) @@ -909,7 +909,7 @@ async def test_normal_2_3( token_2.abi = "abi" token_2.tx_hash = "tx_hash" token_2.token_status = 0 - token_2.version = TokenVersion.V_24_06 + token_2.version = TokenVersion.V_24_09 db.add(token_2) # Prepare data : BlockNumber @@ -1067,7 +1067,7 @@ async def test_normal_2_4( token_1.issuer_address = issuer_address token_1.abi = token_contract_1.abi token_1.tx_hash = "tx_hash" - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) # Prepare data : Token(processing token) @@ -1078,7 +1078,7 @@ async def test_normal_2_4( token_2.abi = "abi" token_2.tx_hash = "tx_hash" token_2.token_status = 0 - token_2.version = TokenVersion.V_24_06 + token_2.version = TokenVersion.V_24_09 db.add(token_2) # Prepare data : BlockNumber @@ -1251,7 +1251,7 @@ async def test_normal_2_5( token_1.issuer_address = issuer_address token_1.abi = token_contract_1.abi token_1.tx_hash = "tx_hash" - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) # Prepare data : Token(processing token) @@ -1262,7 +1262,7 @@ async def test_normal_2_5( token_2.abi = "abi" token_2.tx_hash = "tx_hash" token_2.token_status = 0 - token_2.version = TokenVersion.V_24_06 + token_2.version = TokenVersion.V_24_09 db.add(token_2) # Prepare data : BlockNumber @@ -1435,7 +1435,7 @@ async def test_normal_3( token_1.issuer_address = issuer_address token_1.abi = token_contract_1.abi token_1.tx_hash = "tx_hash" - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) # Prepare data : Token @@ -1452,7 +1452,7 @@ async def test_normal_3( token_2.issuer_address = issuer_address token_2.abi = token_contract_2.abi token_2.tx_hash = "tx_hash" - token_2.version = TokenVersion.V_24_06 + token_2.version = TokenVersion.V_24_09 db.add(token_2) # Prepare data : BlockNumber @@ -1640,7 +1640,7 @@ async def test_normal_4( token_1.issuer_address = issuer_address token_1.abi = token_contract_1.abi token_1.tx_hash = "tx_hash" - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) # Prepare data : Token(processing token) @@ -1651,7 +1651,7 @@ async def test_normal_4( token_2.abi = "abi" token_2.tx_hash = "tx_hash" token_2.token_status = 0 - token_2.version = TokenVersion.V_24_06 + token_2.version = TokenVersion.V_24_09 db.add(token_2) # Prepare data : BlockNumber @@ -1707,7 +1707,7 @@ async def test_normal_6( token_1.issuer_address = issuer_address token_1.abi = token_contract1.abi token_1.tx_hash = "tx_hash" - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) db.commit() @@ -1734,7 +1734,7 @@ async def test_normal_6( token_2.issuer_address = issuer_address token_2.abi = token_contract2.abi token_2.tx_hash = "tx_hash" - token_2.version = TokenVersion.V_24_06 + token_2.version = TokenVersion.V_24_09 db.add(token_2) db.commit() @@ -1785,7 +1785,7 @@ async def test_error_1( token.issuer_address = issuer_address token.abi = token_contract.abi token.tx_hash = "tx_hash" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() diff --git a/tests/batch/test_indexer_issue_redeem.py b/tests/batch/test_indexer_issue_redeem.py index d60f5ec9..87da5efb 100644 --- a/tests/batch/test_indexer_issue_redeem.py +++ b/tests/batch/test_indexer_issue_redeem.py @@ -169,7 +169,7 @@ async def test_normal_1(self, processor, db, personal_info_contract): token_1.abi = "abi" token_1.tx_hash = "tx_hash" token_1.token_status = 0 - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) db.commit() @@ -211,7 +211,7 @@ async def test_normal_2(self, processor, db, personal_info_contract): token_1.issuer_address = issuer_address token_1.abi = token_contract_1.abi token_1.tx_hash = "tx_hash" - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) db.commit() @@ -262,7 +262,7 @@ async def test_normal_3_1(self, processor, db, personal_info_contract): token_1.issuer_address = issuer_address token_1.abi = token_contract_1.abi token_1.tx_hash = "tx_hash" - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) db.commit() @@ -338,7 +338,7 @@ async def test_normal_3_2(self, processor, db, personal_info_contract): token_1.issuer_address = issuer_address token_1.abi = token_contract_1.abi token_1.tx_hash = "tx_hash" - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) db.commit() @@ -414,7 +414,7 @@ async def test_normal_4_1(self, processor, db, personal_info_contract): token_1.issuer_address = issuer_address token_1.abi = token_contract_1.abi token_1.tx_hash = "tx_hash" - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) db.commit() @@ -490,7 +490,7 @@ async def test_normal_4_2(self, processor, db, personal_info_contract): token_1.issuer_address = issuer_address token_1.abi = token_contract_1.abi token_1.tx_hash = "tx_hash" - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) db.commit() @@ -565,7 +565,7 @@ async def test_normal_5(self, processor, db, personal_info_contract): token_1.issuer_address = issuer_address token_1.abi = token_contract_1.abi token_1.tx_hash = "tx_hash" - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) db.commit() @@ -687,7 +687,7 @@ async def test_normal_7( token_1.issuer_address = issuer_address token_1.abi = token_contract_1.abi token_1.tx_hash = "tx_hash" - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) db.commit() @@ -712,7 +712,7 @@ async def test_normal_7( token_2.issuer_address = issuer_address token_2.abi = token_contract_2.abi token_2.tx_hash = "tx_hash" - token_2.version = TokenVersion.V_24_06 + token_2.version = TokenVersion.V_24_09 db.add(token_2) db.commit() @@ -765,7 +765,7 @@ async def test_error_1( token_1.issuer_address = issuer_address token_1.abi = token_contract_1.abi token_1.tx_hash = "tx_hash" - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) db.commit() diff --git a/tests/batch/test_indexer_personal_info.py b/tests/batch/test_indexer_personal_info.py index b06a13a0..2c4754c0 100644 --- a/tests/batch/test_indexer_personal_info.py +++ b/tests/batch/test_indexer_personal_info.py @@ -155,7 +155,7 @@ async def test_normal_1_1(self, processor, db, personal_info_contract): token_1.abi = "abi" token_1.tx_hash = "tx_hash" token_1.token_status = 0 - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) db.commit() @@ -212,7 +212,7 @@ async def test_normal_1_2(self, processor, db, personal_info_contract): token_1.issuer_address = issuer_address token_1.abi = token_contract_1.abi token_1.tx_hash = "tx_hash" - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) # Prepare data : Token(processing token) @@ -223,7 +223,7 @@ async def test_normal_1_2(self, processor, db, personal_info_contract): token_2.abi = "abi" token_2.tx_hash = "tx_hash" token_2.token_status = 0 - token_2.version = TokenVersion.V_24_06 + token_2.version = TokenVersion.V_24_09 db.add(token_2) # Prepare data : BlockNumber @@ -290,7 +290,7 @@ async def test_normal_2_1(self, processor, db, personal_info_contract): token_1.issuer_address = issuer_address token_1.abi = token_contract_1.abi token_1.tx_hash = "tx_hash" - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) # Prepare data : Token(processing token) @@ -301,7 +301,7 @@ async def test_normal_2_1(self, processor, db, personal_info_contract): token_2.abi = "abi" token_2.tx_hash = "tx_hash" token_2.token_status = 0 - token_2.version = TokenVersion.V_24_06 + token_2.version = TokenVersion.V_24_09 db.add(token_2) db.commit() @@ -400,7 +400,7 @@ async def test_normal_2_2(self, processor, db, personal_info_contract): token_1.issuer_address = issuer_address token_1.abi = token_contract_1.abi token_1.tx_hash = "tx_hash" - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) # Prepare data : Token(processing token) @@ -411,7 +411,7 @@ async def test_normal_2_2(self, processor, db, personal_info_contract): token_2.abi = "abi" token_2.tx_hash = "tx_hash" token_2.token_status = 0 - token_2.version = TokenVersion.V_24_06 + token_2.version = TokenVersion.V_24_09 db.add(token_2) db.commit() @@ -556,7 +556,7 @@ async def test_normal_3(self, processor, db, personal_info_contract): token_1.issuer_address = issuer_address token_1.abi = token_contract_1.abi token_1.tx_hash = "tx_hash" - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) # Prepare data : Token(processing token) @@ -567,7 +567,7 @@ async def test_normal_3(self, processor, db, personal_info_contract): token_2.abi = "abi" token_2.tx_hash = "tx_hash" token_2.token_status = 0 - token_2.version = TokenVersion.V_24_06 + token_2.version = TokenVersion.V_24_09 db.add(token_2) db.commit() @@ -802,7 +802,7 @@ async def test_normal_4(self, processor, db): token_1.issuer_address = issuer_address_1 token_1.abi = token_contract1.abi token_1.tx_hash = "tx_hash" - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) # Issuer2 issues bond token. @@ -819,7 +819,7 @@ async def test_normal_4(self, processor, db): token_2.issuer_address = issuer_address_2 token_2.abi = token_contract2.abi token_2.tx_hash = "tx_hash" - token_2.version = TokenVersion.V_24_06 + token_2.version = TokenVersion.V_24_09 db.add(token_2) db.commit() @@ -997,7 +997,7 @@ async def test_error_1( token_1.issuer_address = issuer_address token_1.abi = token_contract_1.abi token_1.tx_hash = "tx_hash" - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) db.commit() diff --git a/tests/batch/test_indexer_position_bond.py b/tests/batch/test_indexer_position_bond.py index f5103951..f72b4fd5 100644 --- a/tests/batch/test_indexer_position_bond.py +++ b/tests/batch/test_indexer_position_bond.py @@ -145,7 +145,7 @@ async def test_normal_1_1( token_1.issuer_address = issuer_address token_1.abi = "abi" token_1.tx_hash = "tx_hash" - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) # Prepare data : Token(processing token) @@ -156,7 +156,7 @@ async def test_normal_1_1( token_2.abi = "abi" token_2.tx_hash = "tx_hash" token_2.token_status = 0 - token_2.version = TokenVersion.V_24_06 + token_2.version = TokenVersion.V_24_09 db.add(token_2) db.commit() @@ -206,7 +206,7 @@ async def test_normal_1_2( token_1.issuer_address = issuer_address token_1.abi = token_contract_1.abi token_1.tx_hash = "tx_hash" - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) # Prepare data : Token(share token) @@ -216,7 +216,7 @@ async def test_normal_1_2( token_2.issuer_address = issuer_address token_2.abi = "abi" token_2.tx_hash = "tx_hash" - token_2.version = TokenVersion.V_24_06 + token_2.version = TokenVersion.V_24_09 db.add(token_2) # Prepare data : Token(processing token) @@ -227,7 +227,7 @@ async def test_normal_1_2( token_3.abi = "abi" token_3.tx_hash = "tx_hash" token_3.token_status = 0 - token_3.version = TokenVersion.V_24_06 + token_3.version = TokenVersion.V_24_09 db.add(token_3) # Prepare data : BlockNumber @@ -295,7 +295,7 @@ async def test_normal_2_1( token_1.issuer_address = issuer_address token_1.abi = token_contract_1.abi token_1.tx_hash = "tx_hash" - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) # Prepare data : Token(share token) @@ -305,7 +305,7 @@ async def test_normal_2_1( token_2.issuer_address = issuer_address token_2.abi = "abi" token_2.tx_hash = "tx_hash" - token_2.version = TokenVersion.V_24_06 + token_2.version = TokenVersion.V_24_09 db.add(token_2) # Prepare data : Token(processing token) @@ -316,7 +316,7 @@ async def test_normal_2_1( token_3.abi = "abi" token_3.tx_hash = "tx_hash" token_3.token_status = 0 - token_3.version = TokenVersion.V_24_06 + token_3.version = TokenVersion.V_24_09 db.add(token_3) db.commit() @@ -403,7 +403,7 @@ async def test_normal_2_2_1( token_1.issuer_address = issuer_address token_1.abi = token_contract_1.abi token_1.tx_hash = "tx_hash" - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) # Prepare data : Token(share token) @@ -413,7 +413,7 @@ async def test_normal_2_2_1( token_2.issuer_address = issuer_address token_2.abi = "abi" token_2.tx_hash = "tx_hash" - token_2.version = TokenVersion.V_24_06 + token_2.version = TokenVersion.V_24_09 db.add(token_2) # Prepare data : Token(processing token) @@ -424,7 +424,7 @@ async def test_normal_2_2_1( token_3.abi = "abi" token_3.tx_hash = "tx_hash" token_3.token_status = 0 - token_3.version = TokenVersion.V_24_06 + token_3.version = TokenVersion.V_24_09 db.add(token_3) db.commit() @@ -516,7 +516,7 @@ async def test_normal_2_2_2( token_1.issuer_address = issuer_address token_1.abi = token_contract_1.abi token_1.tx_hash = "tx_hash" - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) # Prepare data : Token(share token) @@ -526,7 +526,7 @@ async def test_normal_2_2_2( token_2.issuer_address = issuer_address token_2.abi = "abi" token_2.tx_hash = "tx_hash" - token_2.version = TokenVersion.V_24_06 + token_2.version = TokenVersion.V_24_09 db.add(token_2) # Prepare data : Token(processing token) @@ -537,7 +537,7 @@ async def test_normal_2_2_2( token_3.abi = "abi" token_3.tx_hash = "tx_hash" token_3.token_status = 0 - token_3.version = TokenVersion.V_24_06 + token_3.version = TokenVersion.V_24_09 db.add(token_3) db.commit() @@ -620,7 +620,7 @@ async def test_normal_2_2_3( token_1.issuer_address = issuer_address token_1.abi = token_contract_1.abi token_1.tx_hash = "tx_hash" - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) # Prepare data : Token(share token) @@ -630,7 +630,7 @@ async def test_normal_2_2_3( token_2.issuer_address = issuer_address token_2.abi = "abi" token_2.tx_hash = "tx_hash" - token_2.version = TokenVersion.V_24_06 + token_2.version = TokenVersion.V_24_09 db.add(token_2) # Prepare data : Token(processing token) @@ -641,7 +641,7 @@ async def test_normal_2_2_3( token_3.abi = "abi" token_3.tx_hash = "tx_hash" token_3.token_status = 0 - token_3.version = TokenVersion.V_24_06 + token_3.version = TokenVersion.V_24_09 db.add(token_3) db.commit() @@ -771,7 +771,7 @@ async def test_normal_2_3( token_1.issuer_address = issuer_address token_1.abi = token_contract_1.abi token_1.tx_hash = "tx_hash" - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) # Prepare data : Token(share token) @@ -781,7 +781,7 @@ async def test_normal_2_3( token_2.issuer_address = issuer_address token_2.abi = "abi" token_2.tx_hash = "tx_hash" - token_2.version = TokenVersion.V_24_06 + token_2.version = TokenVersion.V_24_09 db.add(token_2) # Prepare data : Token(processing token) @@ -792,7 +792,7 @@ async def test_normal_2_3( token_3.abi = "abi" token_3.tx_hash = "tx_hash" token_3.token_status = 0 - token_3.version = TokenVersion.V_24_06 + token_3.version = TokenVersion.V_24_09 db.add(token_3) db.commit() @@ -914,7 +914,7 @@ async def test_normal_2_4( token_1.issuer_address = issuer_address token_1.abi = token_contract_1.abi token_1.tx_hash = "tx_hash" - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) # Prepare data : Token(share token) @@ -924,7 +924,7 @@ async def test_normal_2_4( token_2.issuer_address = issuer_address token_2.abi = "abi" token_2.tx_hash = "tx_hash" - token_2.version = TokenVersion.V_24_06 + token_2.version = TokenVersion.V_24_09 db.add(token_2) # Prepare data : Token(processing token) @@ -935,7 +935,7 @@ async def test_normal_2_4( token_3.abi = "abi" token_3.tx_hash = "tx_hash" token_3.token_status = 0 - token_3.version = TokenVersion.V_24_06 + token_3.version = TokenVersion.V_24_09 db.add(token_3) db.commit() @@ -1120,7 +1120,7 @@ async def test_normal_2_5( token_1.issuer_address = issuer_address token_1.abi = token_contract_1.abi token_1.tx_hash = "tx_hash" - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) # Prepare data : Token(share token) @@ -1130,7 +1130,7 @@ async def test_normal_2_5( token_2.issuer_address = issuer_address token_2.abi = "abi" token_2.tx_hash = "tx_hash" - token_2.version = TokenVersion.V_24_06 + token_2.version = TokenVersion.V_24_09 db.add(token_2) # Prepare data : Token(processing token) @@ -1141,7 +1141,7 @@ async def test_normal_2_5( token_3.abi = "abi" token_3.tx_hash = "tx_hash" token_3.token_status = 0 - token_3.version = TokenVersion.V_24_06 + token_3.version = TokenVersion.V_24_09 db.add(token_3) db.commit() @@ -1223,7 +1223,7 @@ async def test_normal_2_6( token_1.issuer_address = issuer_address token_1.abi = token_contract_1.abi token_1.tx_hash = "tx_hash" - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) # Prepare data : Token(share token) @@ -1233,7 +1233,7 @@ async def test_normal_2_6( token_2.issuer_address = issuer_address token_2.abi = "abi" token_2.tx_hash = "tx_hash" - token_2.version = TokenVersion.V_24_06 + token_2.version = TokenVersion.V_24_09 db.add(token_2) # Prepare data : Token(processing token) @@ -1244,7 +1244,7 @@ async def test_normal_2_6( token_3.abi = "abi" token_3.tx_hash = "tx_hash" token_3.token_status = 0 - token_3.version = TokenVersion.V_24_06 + token_3.version = TokenVersion.V_24_09 db.add(token_3) db.commit() @@ -1330,7 +1330,7 @@ async def test_normal_2_7(self, processor, db, personal_info_contract): token_1.issuer_address = issuer_address token_1.abi = token_contract_1.abi token_1.tx_hash = "tx_hash" - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) # Prepare data : Token(share token) @@ -1340,7 +1340,7 @@ async def test_normal_2_7(self, processor, db, personal_info_contract): token_2.issuer_address = issuer_address token_2.abi = "abi" token_2.tx_hash = "tx_hash" - token_2.version = TokenVersion.V_24_06 + token_2.version = TokenVersion.V_24_09 db.add(token_2) # Prepare data : Token(processing token) @@ -1351,7 +1351,7 @@ async def test_normal_2_7(self, processor, db, personal_info_contract): token_3.abi = "abi" token_3.tx_hash = "tx_hash" token_3.token_status = 0 - token_3.version = TokenVersion.V_24_06 + token_3.version = TokenVersion.V_24_09 db.add(token_3) db.commit() @@ -1470,7 +1470,7 @@ async def test_normal_2_8( token_1.issuer_address = issuer_address token_1.abi = token_contract_1.abi token_1.tx_hash = "tx_hash" - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) # Prepare data : Token(share token) @@ -1480,7 +1480,7 @@ async def test_normal_2_8( token_2.issuer_address = issuer_address token_2.abi = "abi" token_2.tx_hash = "tx_hash" - token_2.version = TokenVersion.V_24_06 + token_2.version = TokenVersion.V_24_09 db.add(token_2) # Prepare data : Token(processing token) @@ -1491,7 +1491,7 @@ async def test_normal_2_8( token_3.abi = "abi" token_3.tx_hash = "tx_hash" token_3.token_status = 0 - token_3.version = TokenVersion.V_24_06 + token_3.version = TokenVersion.V_24_09 db.add(token_3) db.commit() @@ -1620,7 +1620,7 @@ async def test_normal_2_9_1( token_1.issuer_address = issuer_address token_1.abi = token_contract_1.abi token_1.tx_hash = "tx_hash" - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) # Prepare data : Token(share token) @@ -1630,7 +1630,7 @@ async def test_normal_2_9_1( token_2.issuer_address = issuer_address token_2.abi = "abi" token_2.tx_hash = "tx_hash" - token_2.version = TokenVersion.V_24_06 + token_2.version = TokenVersion.V_24_09 db.add(token_2) # Prepare data : Token(processing token) @@ -1641,7 +1641,7 @@ async def test_normal_2_9_1( token_3.abi = "abi" token_3.tx_hash = "tx_hash" token_3.token_status = 0 - token_3.version = TokenVersion.V_24_06 + token_3.version = TokenVersion.V_24_09 db.add(token_3) db.commit() @@ -1767,7 +1767,7 @@ async def test_normal_2_9_2( token_1.issuer_address = issuer_address token_1.abi = token_contract.abi token_1.tx_hash = "tx_hash" - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) db.commit() @@ -1924,7 +1924,7 @@ async def test_normal_2_9_3( token_1.issuer_address = issuer_address token_1.abi = token_contract.abi token_1.tx_hash = "tx_hash" - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) db.commit() @@ -2084,7 +2084,7 @@ async def test_normal_2_9_4( token_1.issuer_address = issuer_address token_1.abi = token_contract.abi token_1.tx_hash = "tx_hash" - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) db.commit() @@ -2244,7 +2244,7 @@ async def test_normal_2_9_5( token_1.issuer_address = issuer_address token_1.abi = token_contract.abi token_1.tx_hash = "tx_hash" - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) db.commit() @@ -2413,7 +2413,7 @@ async def test_normal_2_9_6( token_1.issuer_address = issuer_address token_1.abi = token_contract.abi token_1.tx_hash = "tx_hash" - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) db.commit() @@ -2572,7 +2572,7 @@ async def test_normal_2_10_1( token_1.issuer_address = issuer_address token_1.abi = token_contract_1.abi token_1.tx_hash = "tx_hash" - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) # Prepare data : Token(share token) @@ -2582,7 +2582,7 @@ async def test_normal_2_10_1( token_2.issuer_address = issuer_address token_2.abi = "abi" token_2.tx_hash = "tx_hash" - token_2.version = TokenVersion.V_24_06 + token_2.version = TokenVersion.V_24_09 db.add(token_2) # Prepare data : Token(processing token) @@ -2593,7 +2593,7 @@ async def test_normal_2_10_1( token_3.abi = "abi" token_3.tx_hash = "tx_hash" token_3.token_status = 0 - token_3.version = TokenVersion.V_24_06 + token_3.version = TokenVersion.V_24_09 db.add(token_3) db.commit() @@ -2719,7 +2719,7 @@ async def test_normal_2_10_2( token_1.issuer_address = issuer_address token_1.abi = token_contract.abi token_1.tx_hash = "tx_hash" - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) db.commit() @@ -2877,7 +2877,7 @@ async def test_normal_2_10_3( token_1.issuer_address = issuer_address token_1.abi = token_contract.abi token_1.tx_hash = "tx_hash" - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) db.commit() @@ -3027,7 +3027,7 @@ async def test_normal_2_11_1( token_1.issuer_address = issuer_address token_1.abi = token_contract_1.abi token_1.tx_hash = "tx_hash" - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) # Prepare data : Token(share token) @@ -3037,7 +3037,7 @@ async def test_normal_2_11_1( token_2.issuer_address = issuer_address token_2.abi = "abi" token_2.tx_hash = "tx_hash" - token_2.version = TokenVersion.V_24_06 + token_2.version = TokenVersion.V_24_09 db.add(token_2) # Prepare data : Token(processing token) @@ -3048,7 +3048,7 @@ async def test_normal_2_11_1( token_3.abi = "abi" token_3.tx_hash = "tx_hash" token_3.token_status = 0 - token_3.version = TokenVersion.V_24_06 + token_3.version = TokenVersion.V_24_09 db.add(token_3) db.commit() @@ -3173,7 +3173,7 @@ async def test_normal_2_11_2( token_1.issuer_address = issuer_address token_1.abi = token_contract.abi token_1.tx_hash = "tx_hash" - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) db.commit() @@ -3333,7 +3333,7 @@ async def test_normal_2_11_3( token_1.issuer_address = issuer_address token_1.abi = token_contract.abi token_1.tx_hash = "tx_hash" - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) db.commit() @@ -3498,7 +3498,7 @@ async def test_normal_2_11_4( token_1.issuer_address = issuer_address token_1.abi = token_contract.abi token_1.tx_hash = "tx_hash" - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) db.commit() @@ -3656,7 +3656,7 @@ async def test_normal_3_1( token_1.issuer_address = issuer_address token_1.abi = token_contract_1.abi token_1.tx_hash = "tx_hash" - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) # Prepare data : Token(share token) @@ -3666,7 +3666,7 @@ async def test_normal_3_1( token_2.issuer_address = issuer_address token_2.abi = "abi" token_2.tx_hash = "tx_hash" - token_2.version = TokenVersion.V_24_06 + token_2.version = TokenVersion.V_24_09 db.add(token_2) # Prepare data : Token(processing token) @@ -3677,7 +3677,7 @@ async def test_normal_3_1( token_3.abi = "abi" token_3.tx_hash = "tx_hash" token_3.token_status = 0 - token_3.version = TokenVersion.V_24_06 + token_3.version = TokenVersion.V_24_09 db.add(token_3) db.commit() @@ -3819,7 +3819,7 @@ async def test_normal_3_2( token_1.issuer_address = issuer_address token_1.abi = token_contract_1.abi token_1.tx_hash = "tx_hash" - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) # Prepare data : Token(share token) @@ -3829,7 +3829,7 @@ async def test_normal_3_2( token_2.issuer_address = issuer_address token_2.abi = "abi" token_2.tx_hash = "tx_hash" - token_2.version = TokenVersion.V_24_06 + token_2.version = TokenVersion.V_24_09 db.add(token_2) db.commit() @@ -4023,7 +4023,7 @@ async def test_normal_3_3( token_1.issuer_address = issuer_address token_1.abi = token_contract.abi token_1.tx_hash = "tx_hash" - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) db.commit() @@ -4195,7 +4195,7 @@ async def test_normal_3_4( token_1.issuer_address = issuer_address token_1.abi = token_contract.abi token_1.tx_hash = "tx_hash" - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) db.commit() @@ -4351,7 +4351,7 @@ async def test_normal_4( token_1.issuer_address = issuer_address token_1.abi = token_contract1.abi token_1.tx_hash = "tx_hash" - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) # Issuer issues bond token. @@ -4369,7 +4369,7 @@ async def test_normal_4( token_2.issuer_address = issuer_address token_2.abi = token_contract2.abi token_2.tx_hash = "tx_hash" - token_2.version = TokenVersion.V_24_06 + token_2.version = TokenVersion.V_24_09 db.add(token_2) db.commit() @@ -4589,7 +4589,7 @@ async def test_normal_6_1( token_1.issuer_address = issuer_address token_1.abi = token_contract1.abi token_1.tx_hash = "tx_hash" - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) db.commit() @@ -4630,7 +4630,7 @@ async def test_normal_6_1( token_2.issuer_address = issuer_address token_2.abi = token_contract2.abi token_2.tx_hash = "tx_hash" - token_2.version = TokenVersion.V_24_06 + token_2.version = TokenVersion.V_24_09 db.add(token_2) db.commit() @@ -4685,7 +4685,7 @@ async def test_normal_6_2( token_1.issuer_address = issuer_address token_1.abi = token_contract1.abi token_1.tx_hash = "tx_hash" - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 token_1.initial_position_synced = True # already synced db.add(token_1) @@ -4739,7 +4739,7 @@ async def test_error_1( token_1.issuer_address = issuer_address token_1.abi = token_contract_1.abi token_1.tx_hash = "tx_hash" - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) token_attr = { diff --git a/tests/batch/test_indexer_position_share.py b/tests/batch/test_indexer_position_share.py index 2bc2627d..7e725132 100644 --- a/tests/batch/test_indexer_position_share.py +++ b/tests/batch/test_indexer_position_share.py @@ -151,7 +151,7 @@ async def test_normal_1_1( token_1.issuer_address = issuer_address token_1.abi = "abi" token_1.tx_hash = "tx_hash" - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) # Prepare data : Token(processing token) @@ -162,7 +162,7 @@ async def test_normal_1_1( token_2.abi = "abi" token_2.tx_hash = "tx_hash" token_2.token_status = 0 - token_2.version = TokenVersion.V_24_06 + token_2.version = TokenVersion.V_24_09 db.add(token_2) db.commit() @@ -212,7 +212,7 @@ async def test_normal_1_2( token_1.issuer_address = issuer_address token_1.abi = token_contract_1.abi token_1.tx_hash = "tx_hash" - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) # Prepare data : Token(bond token) @@ -222,7 +222,7 @@ async def test_normal_1_2( token_2.issuer_address = issuer_address token_2.abi = "abi" token_2.tx_hash = "tx_hash" - token_2.version = TokenVersion.V_24_06 + token_2.version = TokenVersion.V_24_09 db.add(token_2) # Prepare data : Token(processing token) @@ -233,7 +233,7 @@ async def test_normal_1_2( token_3.abi = "abi" token_3.tx_hash = "tx_hash" token_3.token_status = 0 - token_3.version = TokenVersion.V_24_06 + token_3.version = TokenVersion.V_24_09 db.add(token_3) # Prepare data : BlockNumber @@ -301,7 +301,7 @@ async def test_normal_2_1( token_1.issuer_address = issuer_address token_1.abi = token_contract_1.abi token_1.tx_hash = "tx_hash" - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) # Prepare data : Token(bond token) @@ -311,7 +311,7 @@ async def test_normal_2_1( token_2.issuer_address = issuer_address token_2.abi = "abi" token_2.tx_hash = "tx_hash" - token_2.version = TokenVersion.V_24_06 + token_2.version = TokenVersion.V_24_09 db.add(token_2) # Prepare data : Token(processing token) @@ -322,7 +322,7 @@ async def test_normal_2_1( token_3.abi = "abi" token_3.tx_hash = "tx_hash" token_3.token_status = 0 - token_3.version = TokenVersion.V_24_06 + token_3.version = TokenVersion.V_24_09 db.add(token_3) db.commit() @@ -409,7 +409,7 @@ async def test_normal_2_2_1( token_1.issuer_address = issuer_address token_1.abi = token_contract_1.abi token_1.tx_hash = "tx_hash" - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) # Prepare data : Token(bond token) @@ -419,7 +419,7 @@ async def test_normal_2_2_1( token_2.issuer_address = issuer_address token_2.abi = "abi" token_2.tx_hash = "tx_hash" - token_2.version = TokenVersion.V_24_06 + token_2.version = TokenVersion.V_24_09 db.add(token_2) # Prepare data : Token(processing token) @@ -430,7 +430,7 @@ async def test_normal_2_2_1( token_3.abi = "abi" token_3.tx_hash = "tx_hash" token_3.token_status = 0 - token_3.version = TokenVersion.V_24_06 + token_3.version = TokenVersion.V_24_09 db.add(token_3) db.commit() @@ -522,7 +522,7 @@ async def test_normal_2_2_2( token_1.issuer_address = issuer_address token_1.abi = token_contract_1.abi token_1.tx_hash = "tx_hash" - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) # Prepare data : Token(bond token) @@ -532,7 +532,7 @@ async def test_normal_2_2_2( token_2.issuer_address = issuer_address token_2.abi = "abi" token_2.tx_hash = "tx_hash" - token_2.version = TokenVersion.V_24_06 + token_2.version = TokenVersion.V_24_09 db.add(token_2) # Prepare data : Token(processing token) @@ -543,7 +543,7 @@ async def test_normal_2_2_2( token_3.abi = "abi" token_3.tx_hash = "tx_hash" token_3.token_status = 0 - token_3.version = TokenVersion.V_24_06 + token_3.version = TokenVersion.V_24_09 db.add(token_3) db.commit() @@ -626,7 +626,7 @@ async def test_normal_2_2_3( token_1.issuer_address = issuer_address token_1.abi = token_contract_1.abi token_1.tx_hash = "tx_hash" - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) # Prepare data : Token(bond token) @@ -636,7 +636,7 @@ async def test_normal_2_2_3( token_2.issuer_address = issuer_address token_2.abi = "abi" token_2.tx_hash = "tx_hash" - token_2.version = TokenVersion.V_24_06 + token_2.version = TokenVersion.V_24_09 db.add(token_2) # Prepare data : Token(processing token) @@ -647,7 +647,7 @@ async def test_normal_2_2_3( token_3.abi = "abi" token_3.tx_hash = "tx_hash" token_3.token_status = 0 - token_3.version = TokenVersion.V_24_06 + token_3.version = TokenVersion.V_24_09 db.add(token_3) db.commit() @@ -777,7 +777,7 @@ async def test_normal_2_3( token_1.issuer_address = issuer_address token_1.abi = token_contract_1.abi token_1.tx_hash = "tx_hash" - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) # Prepare data : Token(bond token) @@ -787,7 +787,7 @@ async def test_normal_2_3( token_2.issuer_address = issuer_address token_2.abi = "abi" token_2.tx_hash = "tx_hash" - token_2.version = TokenVersion.V_24_06 + token_2.version = TokenVersion.V_24_09 db.add(token_2) # Prepare data : Token(processing token) @@ -798,7 +798,7 @@ async def test_normal_2_3( token_3.abi = "abi" token_3.tx_hash = "tx_hash" token_3.token_status = 0 - token_3.version = TokenVersion.V_24_06 + token_3.version = TokenVersion.V_24_09 db.add(token_3) db.commit() @@ -920,7 +920,7 @@ async def test_normal_2_4( token_1.issuer_address = issuer_address token_1.abi = token_contract_1.abi token_1.tx_hash = "tx_hash" - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) # Prepare data : Token(bond token) @@ -930,7 +930,7 @@ async def test_normal_2_4( token_2.issuer_address = issuer_address token_2.abi = "abi" token_2.tx_hash = "tx_hash" - token_2.version = TokenVersion.V_24_06 + token_2.version = TokenVersion.V_24_09 db.add(token_2) # Prepare data : Token(processing token) @@ -941,7 +941,7 @@ async def test_normal_2_4( token_3.abi = "abi" token_3.tx_hash = "tx_hash" token_3.token_status = 0 - token_3.version = TokenVersion.V_24_06 + token_3.version = TokenVersion.V_24_09 db.add(token_3) db.commit() @@ -1126,7 +1126,7 @@ async def test_normal_2_5( token_1.issuer_address = issuer_address token_1.abi = token_contract_1.abi token_1.tx_hash = "tx_hash" - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) # Prepare data : Token(bond token) @@ -1136,7 +1136,7 @@ async def test_normal_2_5( token_2.issuer_address = issuer_address token_2.abi = "abi" token_2.tx_hash = "tx_hash" - token_2.version = TokenVersion.V_24_06 + token_2.version = TokenVersion.V_24_09 db.add(token_2) # Prepare data : Token(processing token) @@ -1147,7 +1147,7 @@ async def test_normal_2_5( token_3.abi = "abi" token_3.tx_hash = "tx_hash" token_3.token_status = 0 - token_3.version = TokenVersion.V_24_06 + token_3.version = TokenVersion.V_24_09 db.add(token_3) db.commit() @@ -1229,7 +1229,7 @@ async def test_normal_2_6( token_1.issuer_address = issuer_address token_1.abi = token_contract_1.abi token_1.tx_hash = "tx_hash" - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) # Prepare data : Token(bond token) @@ -1239,7 +1239,7 @@ async def test_normal_2_6( token_2.issuer_address = issuer_address token_2.abi = "abi" token_2.tx_hash = "tx_hash" - token_2.version = TokenVersion.V_24_06 + token_2.version = TokenVersion.V_24_09 db.add(token_2) # Prepare data : Token(processing token) @@ -1250,7 +1250,7 @@ async def test_normal_2_6( token_3.abi = "abi" token_3.tx_hash = "tx_hash" token_3.token_status = 0 - token_3.version = TokenVersion.V_24_06 + token_3.version = TokenVersion.V_24_09 db.add(token_3) db.commit() @@ -1338,7 +1338,7 @@ async def test_normal_2_7( token_1.issuer_address = issuer_address token_1.abi = token_contract_1.abi token_1.tx_hash = "tx_hash" - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) # Prepare data : Token(bond token) @@ -1348,7 +1348,7 @@ async def test_normal_2_7( token_2.issuer_address = issuer_address token_2.abi = "abi" token_2.tx_hash = "tx_hash" - token_2.version = TokenVersion.V_24_06 + token_2.version = TokenVersion.V_24_09 db.add(token_2) # Prepare data : Token(processing token) @@ -1359,7 +1359,7 @@ async def test_normal_2_7( token_3.abi = "abi" token_3.tx_hash = "tx_hash" token_3.token_status = 0 - token_3.version = TokenVersion.V_24_06 + token_3.version = TokenVersion.V_24_09 db.add(token_3) db.commit() @@ -1478,7 +1478,7 @@ async def test_normal_2_8( token_1.issuer_address = issuer_address token_1.abi = token_contract_1.abi token_1.tx_hash = "tx_hash" - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) # Prepare data : Token(bond token) @@ -1488,7 +1488,7 @@ async def test_normal_2_8( token_2.issuer_address = issuer_address token_2.abi = "abi" token_2.tx_hash = "tx_hash" - token_2.version = TokenVersion.V_24_06 + token_2.version = TokenVersion.V_24_09 db.add(token_2) # Prepare data : Token(processing token) @@ -1499,7 +1499,7 @@ async def test_normal_2_8( token_3.abi = "abi" token_3.tx_hash = "tx_hash" token_3.token_status = 0 - token_3.version = TokenVersion.V_24_06 + token_3.version = TokenVersion.V_24_09 db.add(token_3) db.commit() @@ -1628,7 +1628,7 @@ async def test_normal_2_9_1( token_1.issuer_address = issuer_address token_1.abi = token_contract_1.abi token_1.tx_hash = "tx_hash" - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) # Prepare data : Token(bond token) @@ -1638,7 +1638,7 @@ async def test_normal_2_9_1( token_2.issuer_address = issuer_address token_2.abi = "abi" token_2.tx_hash = "tx_hash" - token_2.version = TokenVersion.V_24_06 + token_2.version = TokenVersion.V_24_09 db.add(token_2) # Prepare data : Token(processing token) @@ -1649,7 +1649,7 @@ async def test_normal_2_9_1( token_3.abi = "abi" token_3.tx_hash = "tx_hash" token_3.token_status = 0 - token_3.version = TokenVersion.V_24_06 + token_3.version = TokenVersion.V_24_09 db.add(token_3) db.commit() @@ -1775,7 +1775,7 @@ async def test_normal_2_9_2( token_1.issuer_address = issuer_address token_1.abi = token_contract.abi token_1.tx_hash = "tx_hash" - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) db.commit() @@ -1932,7 +1932,7 @@ async def test_normal_2_9_3( token_1.issuer_address = issuer_address token_1.abi = token_contract.abi token_1.tx_hash = "tx_hash" - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) db.commit() @@ -2092,7 +2092,7 @@ async def test_normal_2_9_4( token_1.issuer_address = issuer_address token_1.abi = token_contract.abi token_1.tx_hash = "tx_hash" - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) db.commit() @@ -2252,7 +2252,7 @@ async def test_normal_2_9_5( token_1.issuer_address = issuer_address token_1.abi = token_contract.abi token_1.tx_hash = "tx_hash" - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) db.commit() @@ -2421,7 +2421,7 @@ async def test_normal_2_9_6( token_1.issuer_address = issuer_address token_1.abi = token_contract.abi token_1.tx_hash = "tx_hash" - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) db.commit() @@ -2580,7 +2580,7 @@ async def test_normal_2_10_1( token_1.issuer_address = issuer_address token_1.abi = token_contract_1.abi token_1.tx_hash = "tx_hash" - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) # Prepare data : Token(bond token) @@ -2590,7 +2590,7 @@ async def test_normal_2_10_1( token_2.issuer_address = issuer_address token_2.abi = "abi" token_2.tx_hash = "tx_hash" - token_2.version = TokenVersion.V_24_06 + token_2.version = TokenVersion.V_24_09 db.add(token_2) # Prepare data : Token(processing token) @@ -2601,7 +2601,7 @@ async def test_normal_2_10_1( token_3.abi = "abi" token_3.tx_hash = "tx_hash" token_3.token_status = 0 - token_3.version = TokenVersion.V_24_06 + token_3.version = TokenVersion.V_24_09 db.add(token_3) db.commit() @@ -2727,7 +2727,7 @@ async def test_normal_2_10_2( token_1.issuer_address = issuer_address token_1.abi = token_contract.abi token_1.tx_hash = "tx_hash" - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) db.commit() @@ -2885,7 +2885,7 @@ async def test_normal_2_10_3( token_1.issuer_address = issuer_address token_1.abi = token_contract.abi token_1.tx_hash = "tx_hash" - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) db.commit() @@ -3035,7 +3035,7 @@ async def test_normal_2_11_1( token_1.issuer_address = issuer_address token_1.abi = token_contract_1.abi token_1.tx_hash = "tx_hash" - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) # Prepare data : Token(bond token) @@ -3045,7 +3045,7 @@ async def test_normal_2_11_1( token_2.issuer_address = issuer_address token_2.abi = "abi" token_2.tx_hash = "tx_hash" - token_2.version = TokenVersion.V_24_06 + token_2.version = TokenVersion.V_24_09 db.add(token_2) # Prepare data : Token(processing token) @@ -3056,7 +3056,7 @@ async def test_normal_2_11_1( token_3.abi = "abi" token_3.tx_hash = "tx_hash" token_3.token_status = 0 - token_3.version = TokenVersion.V_24_06 + token_3.version = TokenVersion.V_24_09 db.add(token_3) db.commit() @@ -3181,7 +3181,7 @@ async def test_normal_2_11_2( token_1.issuer_address = issuer_address token_1.abi = token_contract.abi token_1.tx_hash = "tx_hash" - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) db.commit() @@ -3341,7 +3341,7 @@ async def test_normal_2_11_3( token_1.issuer_address = issuer_address token_1.abi = token_contract.abi token_1.tx_hash = "tx_hash" - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) db.commit() @@ -3506,7 +3506,7 @@ async def test_normal_2_11_4( token_1.issuer_address = issuer_address token_1.abi = token_contract.abi token_1.tx_hash = "tx_hash" - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) db.commit() @@ -3664,7 +3664,7 @@ async def test_normal_3_1( token_1.issuer_address = issuer_address token_1.abi = token_contract_1.abi token_1.tx_hash = "tx_hash" - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) # Prepare data : Token(bond token) @@ -3674,7 +3674,7 @@ async def test_normal_3_1( token_2.issuer_address = issuer_address token_2.abi = "abi" token_2.tx_hash = "tx_hash" - token_2.version = TokenVersion.V_24_06 + token_2.version = TokenVersion.V_24_09 db.add(token_2) # Prepare data : Token(processing token) @@ -3685,7 +3685,7 @@ async def test_normal_3_1( token_3.abi = "abi" token_3.tx_hash = "tx_hash" token_3.token_status = 0 - token_3.version = TokenVersion.V_24_06 + token_3.version = TokenVersion.V_24_09 db.add(token_3) db.commit() @@ -3827,7 +3827,7 @@ async def test_normal_3_2( token_1.issuer_address = issuer_address token_1.abi = token_contract_1.abi token_1.tx_hash = "tx_hash" - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) # Prepare data : Token(share token) @@ -3837,7 +3837,7 @@ async def test_normal_3_2( token_2.issuer_address = issuer_address token_2.abi = "abi" token_2.tx_hash = "tx_hash" - token_2.version = TokenVersion.V_24_06 + token_2.version = TokenVersion.V_24_09 db.add(token_2) db.commit() @@ -4031,7 +4031,7 @@ async def test_normal_3_3( token_1.issuer_address = issuer_address token_1.abi = token_contract.abi token_1.tx_hash = "tx_hash" - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) db.commit() @@ -4203,7 +4203,7 @@ async def test_normal_3_4( token_1.issuer_address = issuer_address token_1.abi = token_contract.abi token_1.tx_hash = "tx_hash" - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) db.commit() @@ -4359,7 +4359,7 @@ async def test_normal_4( token_1.issuer_address = issuer_address token_1.abi = token_contract1.abi token_1.tx_hash = "tx_hash" - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) # Issuer issues share token. @@ -4377,7 +4377,7 @@ async def test_normal_4( token_2.issuer_address = issuer_address token_2.abi = token_contract2.abi token_2.tx_hash = "tx_hash" - token_2.version = TokenVersion.V_24_06 + token_2.version = TokenVersion.V_24_09 db.add(token_2) db.commit() @@ -4598,7 +4598,7 @@ async def test_normal_6_1( token_1.issuer_address = issuer_address token_1.abi = token_contract1.abi token_1.tx_hash = "tx_hash" - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) db.commit() @@ -4639,7 +4639,7 @@ async def test_normal_6_1( token_2.issuer_address = issuer_address token_2.abi = token_contract2.abi token_2.tx_hash = "tx_hash" - token_2.version = TokenVersion.V_24_06 + token_2.version = TokenVersion.V_24_09 db.add(token_2) db.commit() @@ -4694,7 +4694,7 @@ async def test_normal_6_2( token_1.issuer_address = issuer_address token_1.abi = token_contract1.abi token_1.tx_hash = "tx_hash" - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 token_1.initial_position_synced = True # already synced db.add(token_1) @@ -4750,7 +4750,7 @@ async def test_error_1( token_1.issuer_address = issuer_address token_1.abi = token_contract_1.abi token_1.tx_hash = "tx_hash" - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) # Prepare data : TokenCache diff --git a/tests/batch/test_indexer_token_cache.py b/tests/batch/test_indexer_token_cache.py index 5c37f17a..065ee31a 100644 --- a/tests/batch/test_indexer_token_cache.py +++ b/tests/batch/test_indexer_token_cache.py @@ -161,7 +161,7 @@ async def test_normal_1_1(self, processor, db, personal_info_contract): token_1.abi = "abi" token_1.tx_hash = "tx_hash" token_1.token_status = 0 - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) db.commit() @@ -207,7 +207,7 @@ async def test_normal_1_2(self, processor, db, personal_info_contract): token_1.issuer_address = issuer_address token_1.abi = token_contract_1.abi token_1.tx_hash = "tx_hash" - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) # Prepare data : Token @@ -221,7 +221,7 @@ async def test_normal_1_2(self, processor, db, personal_info_contract): token_2.issuer_address = issuer_address token_2.abi = token_contract_2.abi token_2.tx_hash = "tx_hash" - token_2.version = TokenVersion.V_24_06 + token_2.version = TokenVersion.V_24_09 db.add(token_2) # Prepare data : Token(processing token) @@ -232,7 +232,7 @@ async def test_normal_1_2(self, processor, db, personal_info_contract): token_3.abi = "abi" token_3.tx_hash = "tx_hash" token_3.token_status = 0 - token_3.version = TokenVersion.V_24_06 + token_3.version = TokenVersion.V_24_09 db.add(token_3) db.commit() @@ -354,7 +354,7 @@ async def test_error_1( token_1.issuer_address = issuer_address token_1.abi = token_contract_1.abi token_1.tx_hash = "tx_hash" - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) db.commit() diff --git a/tests/batch/test_indexer_token_holders.py b/tests/batch/test_indexer_token_holders.py index 9a27c225..2919b5bf 100644 --- a/tests/batch/test_indexer_token_holders.py +++ b/tests/batch/test_indexer_token_holders.py @@ -249,7 +249,7 @@ async def test_normal_1( token_1.issuer_address = issuer_address token_1.abi = token_contract.abi token_1.tx_hash = "tx_hash" - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) PersonalInfoContractTestUtils.register( @@ -624,7 +624,7 @@ async def test_normal_2( token_1.issuer_address = issuer_address token_1.abi = token_contract.abi token_1.tx_hash = "tx_hash" - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) PersonalInfoContractTestUtils.register( @@ -846,7 +846,7 @@ async def test_normal_3( token_1.issuer_address = issuer_address token_1.abi = token_contract.abi token_1.tx_hash = "tx_hash" - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) PersonalInfoContractTestUtils.register( @@ -1037,7 +1037,7 @@ async def test_normal_4( token_1.issuer_address = issuer_address token_1.abi = token_contract.abi token_1.tx_hash = "tx_hash" - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) PersonalInfoContractTestUtils.register( @@ -1426,7 +1426,7 @@ async def test_normal_5( token_1.issuer_address = issuer_address token_1.abi = token_contract.abi token_1.tx_hash = "tx_hash" - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) PersonalInfoContractTestUtils.register( @@ -1648,7 +1648,7 @@ async def test_normal_6( token_1.issuer_address = issuer_address token_1.abi = token_contract.abi token_1.tx_hash = "tx_hash" - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) PersonalInfoContractTestUtils.register( @@ -1843,7 +1843,7 @@ async def test_normal_7( token_1.issuer_address = issuer_address token_1.abi = token_contract.abi token_1.tx_hash = "tx_hash" - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) PersonalInfoContractTestUtils.register( @@ -1960,7 +1960,7 @@ async def test_normal_8( token_1.issuer_address = issuer_address token_1.abi = token_contract.abi token_1.tx_hash = "tx_hash" - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) PersonalInfoContractTestUtils.register( @@ -2145,7 +2145,7 @@ async def test_normal_9( token_1.issuer_address = issuer_address token_1.abi = token_contract.abi token_1.tx_hash = "tx_hash" - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) PersonalInfoContractTestUtils.register( @@ -2298,7 +2298,7 @@ async def test_normal_10( token_1.issuer_address = issuer_address token_1.abi = token_contract.abi token_1.tx_hash = "tx_hash" - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) # Insert collection record with above token and checkpoint block number @@ -2475,7 +2475,7 @@ async def test_error_3( token_1.issuer_address = issuer_address token_1.abi = token_contract.abi token_1.tx_hash = "tx_hash" - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) PersonalInfoContractTestUtils.register( diff --git a/tests/batch/test_indexer_transfer.py b/tests/batch/test_indexer_transfer.py index fc83f781..1ea08230 100644 --- a/tests/batch/test_indexer_transfer.py +++ b/tests/batch/test_indexer_transfer.py @@ -173,7 +173,7 @@ async def test_normal_1_1(self, processor, db, personal_info_contract): token_1.abi = "abi" token_1.tx_hash = "tx_hash" token_1.token_status = 0 - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) db.commit() @@ -214,7 +214,7 @@ async def test_normal_1_2(self, processor, db, personal_info_contract): token_1.issuer_address = issuer_address token_1.abi = token_contract_1.abi token_1.tx_hash = "tx_hash" - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) # Prepare data : Token(processing token) @@ -225,7 +225,7 @@ async def test_normal_1_2(self, processor, db, personal_info_contract): token_2.abi = "abi" token_2.tx_hash = "tx_hash" token_2.token_status = 0 - token_2.version = TokenVersion.V_24_06 + token_2.version = TokenVersion.V_24_09 db.add(token_2) # Prepare data : BlockNumber @@ -288,7 +288,7 @@ async def test_normal_2_1(self, processor, db, personal_info_contract): token_1.issuer_address = issuer_address token_1.abi = token_contract_1.abi token_1.tx_hash = "tx_hash" - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) # Prepare data : Token(processing token) @@ -299,7 +299,7 @@ async def test_normal_2_1(self, processor, db, personal_info_contract): token_2.abi = "abi" token_2.tx_hash = "tx_hash" token_2.token_status = 0 - token_2.version = TokenVersion.V_24_06 + token_2.version = TokenVersion.V_24_09 db.add(token_2) db.commit() @@ -424,7 +424,7 @@ async def test_normal_2_2(self, processor, db, personal_info_contract): token_1.issuer_address = issuer_address token_1.abi = token_contract_1.abi token_1.tx_hash = "tx_hash" - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) # Prepare data : Token(processing token) @@ -435,7 +435,7 @@ async def test_normal_2_2(self, processor, db, personal_info_contract): token_2.abi = "abi" token_2.tx_hash = "tx_hash" token_2.token_status = 0 - token_2.version = TokenVersion.V_24_06 + token_2.version = TokenVersion.V_24_09 db.add(token_2) db.commit() @@ -522,7 +522,7 @@ async def test_normal_3_1(self, processor, db, personal_info_contract): token_1.issuer_address = issuer_address token_1.abi = token_contract_1.abi token_1.tx_hash = "tx_hash" - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) # Prepare data : Token(processing token) @@ -533,7 +533,7 @@ async def test_normal_3_1(self, processor, db, personal_info_contract): token_2.abi = "abi" token_2.tx_hash = "tx_hash" token_2.token_status = 0 - token_2.version = TokenVersion.V_24_06 + token_2.version = TokenVersion.V_24_09 db.add(token_2) db.commit() @@ -740,7 +740,7 @@ async def test_normal_3_2(self, processor, db, personal_info_contract): token_1.issuer_address = issuer_address token_1.abi = token_contract_1.abi token_1.tx_hash = "tx_hash" - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) db.commit() @@ -885,7 +885,7 @@ async def test_normal_4(self, processor, db, personal_info_contract): token_1.issuer_address = issuer_address token_1.abi = token_contract_1.abi token_1.tx_hash = "tx_hash" - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) # Prepare data : Token2 @@ -900,7 +900,7 @@ async def test_normal_4(self, processor, db, personal_info_contract): token_2.issuer_address = issuer_address token_2.abi = token_contract_2.abi token_2.tx_hash = "tx_hash" - token_2.version = TokenVersion.V_24_06 + token_2.version = TokenVersion.V_24_09 db.add(token_2) db.commit() @@ -1079,7 +1079,7 @@ async def test_normal_6( token_1.issuer_address = issuer_address token_1.abi = token_contract1.abi token_1.tx_hash = "tx_hash" - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) db.commit() @@ -1105,7 +1105,7 @@ async def test_normal_6( token_2.issuer_address = issuer_address token_2.abi = token_contract2.abi token_2.tx_hash = "tx_hash" - token_2.version = TokenVersion.V_24_06 + token_2.version = TokenVersion.V_24_09 db.add(token_2) db.commit() @@ -1155,7 +1155,7 @@ async def test_error_1( token_1.issuer_address = issuer_address token_1.abi = token_contract_1.abi token_1.tx_hash = "tx_hash" - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) db.commit() diff --git a/tests/batch/test_indexer_transfer_approval.py b/tests/batch/test_indexer_transfer_approval.py index d2039461..af7a28ac 100644 --- a/tests/batch/test_indexer_transfer_approval.py +++ b/tests/batch/test_indexer_transfer_approval.py @@ -177,7 +177,7 @@ async def test_normal_1_1(self, processor, db, personal_info_contract): token_1.abi = "abi" token_1.tx_hash = "tx_hash" token_1.token_status = 0 - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) db.commit() @@ -224,7 +224,7 @@ async def test_normal_1_2(self, processor, db, personal_info_contract): token_1.issuer_address = issuer_address token_1.abi = token_contract_1.abi token_1.tx_hash = "tx_hash" - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) # Prepare data : Token(processing token) @@ -235,7 +235,7 @@ async def test_normal_1_2(self, processor, db, personal_info_contract): token_2.abi = "abi" token_2.tx_hash = "tx_hash" token_2.token_status = 0 - token_2.version = TokenVersion.V_24_06 + token_2.version = TokenVersion.V_24_09 db.add(token_2) # Prepare data : BlockNumber @@ -300,7 +300,7 @@ async def test_normal_2_1(self, processor, db, personal_info_contract): token_1.issuer_address = issuer_address token_1.abi = token_contract_1.abi token_1.tx_hash = "tx_hash" - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) # Prepare data : Token(processing token) @@ -311,7 +311,7 @@ async def test_normal_2_1(self, processor, db, personal_info_contract): token_2.abi = "abi" token_2.tx_hash = "tx_hash" token_2.token_status = 0 - token_2.version = TokenVersion.V_24_06 + token_2.version = TokenVersion.V_24_09 db.add(token_2) # Prepare data : BlockNumber @@ -433,7 +433,7 @@ async def test_normal_2_2_1(self, processor, db, personal_info_contract): token_1.issuer_address = issuer_address token_1.abi = token_contract_1.abi token_1.tx_hash = "tx_hash" - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) # Prepare data : BlockNumber @@ -571,7 +571,7 @@ async def test_normal_2_2_2(self, processor, db, personal_info_contract): token_1.issuer_address = issuer_address token_1.abi = token_contract_1.abi token_1.tx_hash = "tx_hash" - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) # Prepare data : BlockNumber @@ -708,7 +708,7 @@ async def test_normal_2_3(self, processor, db, personal_info_contract): token_1.issuer_address = issuer_address token_1.abi = token_contract_1.abi token_1.tx_hash = "tx_hash" - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) # Prepare data : BlockNumber @@ -852,7 +852,7 @@ async def test_normal_2_4( token_1.issuer_address = issuer_address token_1.abi = token_contract_1.abi token_1.tx_hash = "tx_hash" - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) # Prepare data : BlockNumber @@ -999,7 +999,7 @@ async def test_normal_2_5( token_1.issuer_address = issuer_address token_1.abi = token_contract_1.abi token_1.tx_hash = "tx_hash" - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) # Prepare data : Token(processing token) @@ -1010,7 +1010,7 @@ async def test_normal_2_5( token_2.abi = "abi" token_2.tx_hash = "tx_hash" token_2.token_status = 0 - token_2.version = TokenVersion.V_24_06 + token_2.version = TokenVersion.V_24_09 db.add(token_2) # Prepare data : BlockNumber @@ -1168,7 +1168,7 @@ async def test_normal_2_6( token_1.issuer_address = issuer_address token_1.abi = token_contract_1.abi token_1.tx_hash = "tx_hash" - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) # Prepare data : BlockNumber @@ -1322,7 +1322,7 @@ async def test_normal_2_7( token_1.issuer_address = issuer_address token_1.abi = token_contract_1.abi token_1.tx_hash = "tx_hash" - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) # Prepare data : BlockNumber @@ -1507,7 +1507,7 @@ async def test_normal_4( token_1.issuer_address = issuer_address token_1.abi = token_contract1.abi token_1.tx_hash = "tx_hash" - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) db.commit() @@ -1534,7 +1534,7 @@ async def test_normal_4( token_2.issuer_address = issuer_address token_2.abi = token_contract2.abi token_2.tx_hash = "tx_hash" - token_2.version = TokenVersion.V_24_06 + token_2.version = TokenVersion.V_24_09 db.add(token_2) db.commit() @@ -1585,7 +1585,7 @@ async def test_error_1( token.issuer_address = issuer_address token.abi = token_contract.abi token.tx_hash = "tx_hash" - token.version = TokenVersion.V_24_06 + token.version = TokenVersion.V_24_09 db.add(token) db.commit() diff --git a/tests/batch/test_processor_batch_issue_redeem.py b/tests/batch/test_processor_batch_issue_redeem.py index 1e1e24b2..77f27836 100644 --- a/tests/batch/test_processor_batch_issue_redeem.py +++ b/tests/batch/test_processor_batch_issue_redeem.py @@ -43,7 +43,9 @@ BatchIssueRedeemUpload, Notification, NotificationType, + Token, TokenType, + TokenVersion, ) from app.utils.e2ee_utils import E2EEUtils from batch.processor_batch_issue_redeem import LOG, Processor @@ -95,6 +97,15 @@ async def test_normal_1(self, processor, db, caplog): _account.rsa_status = 3 db.add(_account) + _token = Token() + _token.type = TokenType.IBET_STRAIGHT_BOND.value + _token.token_address = token_address + _token.issuer_address = issuer_address + _token.abi = {} + _token.tx_hash = "" + _token.version = TokenVersion.V_24_09 + db.add(_token) + upload_id = str(uuid.uuid4()) _upload = BatchIssueRedeemUpload() @@ -113,23 +124,35 @@ async def test_normal_1(self, processor, db, caplog): _upload_data.status = 0 db.add(_upload_data) + _upload_data = BatchIssueRedeem() + _upload_data.upload_id = upload_id + _upload_data.account_address = target_address + _upload_data.amount = target_amount + _upload_data.status = 0 + db.add(_upload_data) + db.commit() # Execute batch with patch( - target="app.model.blockchain.token.IbetStraightBondContract.additional_issue", + target="app.model.blockchain.token.IbetStraightBondContract.bulk_additional_issue", return_value="mock_tx_hash", - ) as IbetStraightBondContract_additional_issue: + ) as IbetStraightBondContract_bulk_additional_issue: await processor.process() - # Assertion: contract - IbetStraightBondContract_additional_issue.assert_called_with( - data=IbetStraightBondAdditionalIssueParams( + # Assertion: contract + IbetStraightBondContract_bulk_additional_issue.assert_called_with( + data=[ + IbetStraightBondAdditionalIssueParams( account_address=target_address, amount=target_amount ), - tx_from=issuer_address, - private_key=issuer_pk, - ) + IbetStraightBondAdditionalIssueParams( + account_address=target_address, amount=target_amount + ), + ], + tx_from=issuer_address, + private_key=issuer_pk, + ) # Assertion: DB _upload_after: BatchIssueRedeemUpload = db.scalars( @@ -142,8 +165,9 @@ async def test_normal_1(self, processor, db, caplog): _upload_data_after: List[BatchIssueRedeem] = db.scalars( select(BatchIssueRedeem).where(BatchIssueRedeem.upload_id == upload_id) ).all() - assert len(_upload_data_after) == 1 + assert len(_upload_data_after) == 2 assert _upload_data_after[0].status == 1 + assert _upload_data_after[1].status == 1 # Assertion: Log assert ( @@ -197,6 +221,15 @@ async def test_normal_2(self, processor, db, caplog): _account.rsa_status = 3 db.add(_account) + _token = Token() + _token.type = TokenType.IBET_STRAIGHT_BOND.value + _token.token_address = token_address + _token.issuer_address = issuer_address + _token.abi = {} + _token.tx_hash = "" + _token.version = TokenVersion.V_24_09 + db.add(_token) + upload_id = str(uuid.uuid4()) _upload = BatchIssueRedeemUpload() @@ -215,20 +248,32 @@ async def test_normal_2(self, processor, db, caplog): _upload_data.status = 0 db.add(_upload_data) + _upload_data = BatchIssueRedeem() + _upload_data.upload_id = upload_id + _upload_data.account_address = target_address + _upload_data.amount = target_amount + _upload_data.status = 0 + db.add(_upload_data) + db.commit() # Execute batch with patch( - target="app.model.blockchain.token.IbetStraightBondContract.redeem", + target="app.model.blockchain.token.IbetStraightBondContract.bulk_redeem", return_value="mock_tx_hash", - ) as IbetStraightBondContract_redeem: + ) as IbetStraightBondContract_bulk_redeem: await processor.process() # Assertion: contract - IbetStraightBondContract_redeem.assert_called_with( - data=IbetStraightBondRedeemParams( - account_address=target_address, amount=target_amount - ), + IbetStraightBondContract_bulk_redeem.assert_called_with( + data=[ + IbetStraightBondRedeemParams( + account_address=target_address, amount=target_amount + ), + IbetStraightBondRedeemParams( + account_address=target_address, amount=target_amount + ), + ], tx_from=issuer_address, private_key=issuer_pk, ) @@ -244,8 +289,9 @@ async def test_normal_2(self, processor, db, caplog): _upload_data_after: List[BatchIssueRedeem] = db.scalars( select(BatchIssueRedeem).where(BatchIssueRedeem.upload_id == upload_id) ).all() - assert len(_upload_data_after) == 1 + assert len(_upload_data_after) == 2 assert _upload_data_after[0].status == 1 + assert _upload_data_after[1].status == 1 # Assertion: Log assert ( @@ -299,6 +345,15 @@ async def test_normal_3(self, processor, db, caplog): _account.rsa_status = 3 db.add(_account) + _token = Token() + _token.type = TokenType.IBET_SHARE.value + _token.token_address = token_address + _token.issuer_address = issuer_address + _token.abi = {} + _token.tx_hash = "" + _token.version = TokenVersion.V_24_09 + db.add(_token) + upload_id = str(uuid.uuid4()) _upload = BatchIssueRedeemUpload() @@ -317,20 +372,32 @@ async def test_normal_3(self, processor, db, caplog): _upload_data.status = 0 db.add(_upload_data) + _upload_data = BatchIssueRedeem() + _upload_data.upload_id = upload_id + _upload_data.account_address = target_address + _upload_data.amount = target_amount + _upload_data.status = 0 + db.add(_upload_data) + db.commit() # Execute batch with patch( - target="app.model.blockchain.token.IbetShareContract.additional_issue", + target="app.model.blockchain.token.IbetShareContract.bulk_additional_issue", return_value="mock_tx_hash", - ) as IbetShareContract_additional_issue: + ) as IbetShareContract_bulk_additional_issue: await processor.process() # Assertion: contract - IbetShareContract_additional_issue.assert_called_with( - data=IbetShareAdditionalIssueParams( - account_address=target_address, amount=target_amount - ), + IbetShareContract_bulk_additional_issue.assert_called_with( + data=[ + IbetShareAdditionalIssueParams( + account_address=target_address, amount=target_amount + ), + IbetShareAdditionalIssueParams( + account_address=target_address, amount=target_amount + ), + ], tx_from=issuer_address, private_key=issuer_pk, ) @@ -346,8 +413,9 @@ async def test_normal_3(self, processor, db, caplog): _upload_data_after: List[BatchIssueRedeem] = db.scalars( select(BatchIssueRedeem).where(BatchIssueRedeem.upload_id == upload_id) ).all() - assert len(_upload_data_after) == 1 + assert len(_upload_data_after) == 2 assert _upload_data_after[0].status == 1 + assert _upload_data_after[1].status == 1 # Assertion: Log assert ( @@ -401,6 +469,15 @@ async def test_normal_4(self, processor, db, caplog): _account.rsa_status = 3 db.add(_account) + _token = Token() + _token.type = TokenType.IBET_STRAIGHT_BOND.value + _token.token_address = token_address + _token.issuer_address = issuer_address + _token.abi = {} + _token.tx_hash = "" + _token.version = TokenVersion.V_24_09 + db.add(_token) + upload_id = str(uuid.uuid4()) _upload = BatchIssueRedeemUpload() @@ -419,20 +496,32 @@ async def test_normal_4(self, processor, db, caplog): _upload_data.status = 0 db.add(_upload_data) + _upload_data = BatchIssueRedeem() + _upload_data.upload_id = upload_id + _upload_data.account_address = target_address + _upload_data.amount = target_amount + _upload_data.status = 0 + db.add(_upload_data) + db.commit() # Execute batch with patch( - target="app.model.blockchain.token.IbetShareContract.redeem", + target="app.model.blockchain.token.IbetShareContract.bulk_redeem", return_value="mock_tx_hash", - ) as IbetShareContract_redeem: + ) as IbetShareContract_bulk_redeem: await processor.process() # Assertion: contract - IbetShareContract_redeem.assert_called_with( - data=IbetShareRedeemParams( - account_address=target_address, amount=target_amount - ), + IbetShareContract_bulk_redeem.assert_called_with( + data=[ + IbetShareRedeemParams( + account_address=target_address, amount=target_amount + ), + IbetShareRedeemParams( + account_address=target_address, amount=target_amount + ), + ], tx_from=issuer_address, private_key=issuer_pk, ) @@ -448,8 +537,9 @@ async def test_normal_4(self, processor, db, caplog): _upload_data_after: List[BatchIssueRedeem] = db.scalars( select(BatchIssueRedeem).where(BatchIssueRedeem.upload_id == upload_id) ).all() - assert len(_upload_data_after) == 1 + assert len(_upload_data_after) == 2 assert _upload_data_after[0].status == 1 + assert _upload_data_after[1].status == 1 # Assertion: Log assert ( @@ -493,6 +583,15 @@ async def test_error_1(self, processor, db, caplog): target_amount = 10 # Prepare data + _token = Token() + _token.type = TokenType.IBET_STRAIGHT_BOND.value + _token.token_address = token_address + _token.issuer_address = issuer_address + _token.abi = {} + _token.tx_hash = "" + _token.version = TokenVersion.V_24_09 + db.add(_token) + upload_id = str(uuid.uuid4()) _upload = BatchIssueRedeemUpload() @@ -515,13 +614,13 @@ async def test_error_1(self, processor, db, caplog): # Execute batch with patch( - target="app.model.blockchain.token.IbetStraightBondContract.additional_issue", + target="app.model.blockchain.token.IbetStraightBondContract.bulk_additional_issue", return_value="mock_tx_hash", - ) as IbetStraightBondContract_additional_issue: + ) as IbetStraightBondContract_bulk_additional_issue: await processor.process() # Assertion: contract - IbetStraightBondContract_additional_issue.assert_not_called() + IbetStraightBondContract_bulk_additional_issue.assert_not_called() # Assertion: DB _upload_after: BatchIssueRedeemUpload = db.scalars( @@ -584,6 +683,15 @@ async def test_error_2(self, processor, db, caplog): _account.rsa_status = 3 db.add(_account) + _token = Token() + _token.type = TokenType.IBET_STRAIGHT_BOND.value + _token.token_address = token_address + _token.issuer_address = issuer_address + _token.abi = {} + _token.tx_hash = "" + _token.version = TokenVersion.V_24_09 + db.add(_token) + upload_id = str(uuid.uuid4()) _upload = BatchIssueRedeemUpload() @@ -606,13 +714,13 @@ async def test_error_2(self, processor, db, caplog): # Execute batch with patch( - target="app.model.blockchain.token.IbetStraightBondContract.additional_issue", + target="app.model.blockchain.token.IbetStraightBondContract.bulk_additional_issue", return_value="mock_tx_hash", - ) as IbetStraightBondContract_additional_issue: + ) as IbetStraightBondContract_bulk_additional_issue: await processor.process() # Assertion: contract - IbetStraightBondContract_additional_issue.assert_not_called() + IbetStraightBondContract_bulk_additional_issue.assert_not_called() # Assertion: DB _upload_after: BatchIssueRedeemUpload = db.scalars( @@ -675,6 +783,15 @@ async def test_error_3(self, processor, db, caplog): _account.rsa_status = 3 db.add(_account) + _token = Token() + _token.type = TokenType.IBET_STRAIGHT_BOND.value + _token.token_address = token_address + _token.issuer_address = issuer_address + _token.abi = {} + _token.tx_hash = "" + _token.version = TokenVersion.V_24_09 + db.add(_token) + upload_id = str(uuid.uuid4()) _upload = BatchIssueRedeemUpload() @@ -686,27 +803,27 @@ async def test_error_3(self, processor, db, caplog): _upload.processed = 0 db.add(_upload) - _upload_data_1 = BatchIssueRedeem() - _upload_data_1.upload_id = upload_id - _upload_data_1.account_address = target_address - _upload_data_1.amount = target_amount - _upload_data_1.status = 0 - db.add(_upload_data_1) + _upload_data = BatchIssueRedeem() + _upload_data.upload_id = upload_id + _upload_data.account_address = target_address + _upload_data.amount = target_amount + _upload_data.status = 0 + db.add(_upload_data) - _upload_data_2 = BatchIssueRedeem() - _upload_data_2.upload_id = upload_id - _upload_data_2.account_address = target_address - _upload_data_2.amount = target_amount - _upload_data_2.status = 0 - db.add(_upload_data_2) + _upload_data = BatchIssueRedeem() + _upload_data.upload_id = upload_id + _upload_data.account_address = target_address + _upload_data.amount = target_amount + _upload_data.status = 0 + db.add(_upload_data) db.commit() # Execute batch with patch( - target="app.model.blockchain.token.IbetStraightBondContract.additional_issue", + target="app.model.blockchain.token.IbetStraightBondContract.bulk_additional_issue", side_effect=SendTransactionError(), - ) as IbetStraightBondContract_additional_issue: + ) as IbetStraightBondContract_bulk_additional_issue: await processor.process() # Assertion: DB @@ -729,7 +846,7 @@ async def test_error_3(self, processor, db, caplog): caplog.record_tuples.count( (LOG.name, logging.WARNING, "Failed to send transaction: -") ) - == 2 + == 1 ) _notification_list = db.scalars(select(Notification)).all() @@ -774,6 +891,15 @@ async def test_error_4( _account.rsa_status = 3 db.add(_account) + _token = Token() + _token.type = TokenType.IBET_STRAIGHT_BOND.value + _token.token_address = token_address + _token.issuer_address = issuer_address + _token.abi = {} + _token.tx_hash = "" + _token.version = TokenVersion.V_24_09 + db.add(_token) + upload_1_id = str(uuid.uuid4()) _upload_1 = BatchIssueRedeemUpload() @@ -814,10 +940,10 @@ async def test_error_4( # mock with patch( - target="app.model.blockchain.token.IbetStraightBondContract.additional_issue", + target="app.model.blockchain.token.IbetStraightBondContract.bulk_additional_issue", side_effect=ContractRevertError("999999"), ), patch( - target="app.model.blockchain.token.IbetShareContract.additional_issue", + target="app.model.blockchain.token.IbetShareContract.bulk_additional_issue", side_effect=ContractRevertError("999999"), ): await processor.process() diff --git a/tests/batch/test_processor_batch_issue_redeem_v2406.py b/tests/batch/test_processor_batch_issue_redeem_v2406.py new file mode 100644 index 00000000..3c0a185b --- /dev/null +++ b/tests/batch/test_processor_batch_issue_redeem_v2406.py @@ -0,0 +1,905 @@ +""" +Copyright BOOSTRY Co., Ltd. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. + +You may obtain a copy of the License at +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + +See the License for the specific language governing permissions and +limitations under the License. + +SPDX-License-Identifier: Apache-2.0 +""" + +import logging +import uuid +from typing import List, Sequence +from unittest.mock import ANY, patch + +import pytest +from eth_keyfile import decode_keyfile_json +from sqlalchemy import select +from sqlalchemy.orm import Session + +from app.exceptions import ContractRevertError, SendTransactionError +from app.model.blockchain.tx_params.ibet_share import ( + AdditionalIssueParams as IbetShareAdditionalIssueParams, + RedeemParams as IbetShareRedeemParams, +) +from app.model.blockchain.tx_params.ibet_straight_bond import ( + AdditionalIssueParams as IbetStraightBondAdditionalIssueParams, + RedeemParams as IbetStraightBondRedeemParams, +) +from app.model.db import ( + Account, + BatchIssueRedeem, + BatchIssueRedeemProcessingCategory, + BatchIssueRedeemUpload, + Notification, + NotificationType, + TokenType, +) +from app.utils.e2ee_utils import E2EEUtils +from batch.processor_batch_issue_redeem import LOG, Processor +from tests.account_config import config_eth_account + + +@pytest.fixture(scope="function") +def processor(db, caplog: pytest.LogCaptureFixture): + log = logging.getLogger("background") + default_log_level = LOG.level + log.setLevel(logging.DEBUG) + log.propagate = True + yield Processor() + log.propagate = False + log.setLevel(default_log_level) + + +class TestProcessor: + ########################################################################### + # Normal Case + ########################################################################### + + # Normal_1 + # token type: IBET_STRAIGHT_BOND + # processing category: ISSUE + @pytest.mark.asyncio + async def test_normal_1(self, processor, db, caplog): + # Test settings + issuer_account = config_eth_account("user1") + issuer_address = issuer_account["address"] + issuer_keyfile = issuer_account["keyfile_json"] + issuer_eoa_password = E2EEUtils.encrypt("password") + issuer_pk = decode_keyfile_json( + raw_keyfile_json=issuer_keyfile, + password=E2EEUtils.decrypt(issuer_eoa_password).encode("utf-8"), + ) + + token_address = "test_token_address" + + target_account = config_eth_account("user2") + target_address = target_account["address"] + target_amount = 10 + + # Prepare data + _account = Account() + _account.issuer_address = issuer_address + _account.keyfile = issuer_keyfile + _account.eoa_password = issuer_eoa_password + _account.rsa_status = 3 + db.add(_account) + + upload_id = str(uuid.uuid4()) + + _upload = BatchIssueRedeemUpload() + _upload.upload_id = upload_id + _upload.issuer_address = issuer_address + _upload.token_type = TokenType.IBET_STRAIGHT_BOND.value + _upload.token_address = token_address + _upload.category = BatchIssueRedeemProcessingCategory.ISSUE.value + _upload.processed = 0 + db.add(_upload) + + _upload_data = BatchIssueRedeem() + _upload_data.upload_id = upload_id + _upload_data.account_address = target_address + _upload_data.amount = target_amount + _upload_data.status = 0 + db.add(_upload_data) + + db.commit() + + # Execute batch + with patch( + target="app.model.blockchain.token.IbetStraightBondContract.additional_issue", + return_value="mock_tx_hash", + ) as IbetStraightBondContract_additional_issue: + await processor.process() + + # Assertion: contract + IbetStraightBondContract_additional_issue.assert_called_with( + data=IbetStraightBondAdditionalIssueParams( + account_address=target_address, amount=target_amount + ), + tx_from=issuer_address, + private_key=issuer_pk, + ) + + # Assertion: DB + _upload_after: BatchIssueRedeemUpload = db.scalars( + select(BatchIssueRedeemUpload) + .where(BatchIssueRedeemUpload.upload_id == upload_id) + .limit(1) + ).first() + assert _upload_after.processed == True + + _upload_data_after: List[BatchIssueRedeem] = db.scalars( + select(BatchIssueRedeem).where(BatchIssueRedeem.upload_id == upload_id) + ).all() + assert len(_upload_data_after) == 1 + assert _upload_data_after[0].status == 1 + + # Assertion: Log + assert ( + caplog.record_tuples.count( + (LOG.name, logging.DEBUG, "Transaction sent successfully: mock_tx_hash") + ) + == 1 + ) + + _notification_list = db.scalars(select(Notification)).all() + for _notification in _notification_list: + assert _notification.notice_id is not None + assert _notification.issuer_address == issuer_address + assert _notification.priority == 1 + assert _notification.type == NotificationType.BATCH_ISSUE_REDEEM_PROCESSED + assert _notification.code == 0 # Successful + assert _notification.metainfo == { + "category": BatchIssueRedeemProcessingCategory.ISSUE.value, + "upload_id": upload_id, + "error_data_id": [], + "token_address": token_address, + "token_type": TokenType.IBET_STRAIGHT_BOND, + } + + # Normal_2 + # token type: IBET_STRAIGHT_BOND + # processing category: REDEEM + @pytest.mark.asyncio + async def test_normal_2(self, processor, db, caplog): + # Test settings + issuer_account = config_eth_account("user1") + issuer_address = issuer_account["address"] + issuer_keyfile = issuer_account["keyfile_json"] + issuer_eoa_password = E2EEUtils.encrypt("password") + issuer_pk = decode_keyfile_json( + raw_keyfile_json=issuer_keyfile, + password=E2EEUtils.decrypt(issuer_eoa_password).encode("utf-8"), + ) + + token_address = "test_token_address" + + target_account = config_eth_account("user2") + target_address = target_account["address"] + target_amount = 10 + + # Prepare data + _account = Account() + _account.issuer_address = issuer_address + _account.keyfile = issuer_keyfile + _account.eoa_password = issuer_eoa_password + _account.rsa_status = 3 + db.add(_account) + + upload_id = str(uuid.uuid4()) + + _upload = BatchIssueRedeemUpload() + _upload.upload_id = upload_id + _upload.issuer_address = issuer_address + _upload.token_type = TokenType.IBET_STRAIGHT_BOND.value + _upload.token_address = token_address + _upload.category = BatchIssueRedeemProcessingCategory.REDEEM.value + _upload.processed = 0 + db.add(_upload) + + _upload_data = BatchIssueRedeem() + _upload_data.upload_id = upload_id + _upload_data.account_address = target_address + _upload_data.amount = target_amount + _upload_data.status = 0 + db.add(_upload_data) + + db.commit() + + # Execute batch + with patch( + target="app.model.blockchain.token.IbetStraightBondContract.redeem", + return_value="mock_tx_hash", + ) as IbetStraightBondContract_redeem: + await processor.process() + + # Assertion: contract + IbetStraightBondContract_redeem.assert_called_with( + data=IbetStraightBondRedeemParams( + account_address=target_address, amount=target_amount + ), + tx_from=issuer_address, + private_key=issuer_pk, + ) + + # Assertion: DB + _upload_after: BatchIssueRedeemUpload = db.scalars( + select(BatchIssueRedeemUpload) + .where(BatchIssueRedeemUpload.upload_id == upload_id) + .limit(1) + ).first() + assert _upload_after.processed == True + + _upload_data_after: List[BatchIssueRedeem] = db.scalars( + select(BatchIssueRedeem).where(BatchIssueRedeem.upload_id == upload_id) + ).all() + assert len(_upload_data_after) == 1 + assert _upload_data_after[0].status == 1 + + # Assertion: Log + assert ( + caplog.record_tuples.count( + (LOG.name, logging.DEBUG, "Transaction sent successfully: mock_tx_hash") + ) + == 1 + ) + + _notification_list = db.scalars(select(Notification)).all() + for _notification in _notification_list: + assert _notification.notice_id is not None + assert _notification.issuer_address == issuer_address + assert _notification.priority == 1 + assert _notification.type == NotificationType.BATCH_ISSUE_REDEEM_PROCESSED + assert _notification.code == 0 # Successful + assert _notification.metainfo == { + "category": BatchIssueRedeemProcessingCategory.REDEEM.value, + "upload_id": upload_id, + "error_data_id": [], + "token_address": token_address, + "token_type": TokenType.IBET_STRAIGHT_BOND, + } + + # Normal_3 + # token type: IBET_SHARE + # processing category: ISSUE + @pytest.mark.asyncio + async def test_normal_3(self, processor, db, caplog): + # Test settings + issuer_account = config_eth_account("user1") + issuer_address = issuer_account["address"] + issuer_keyfile = issuer_account["keyfile_json"] + issuer_eoa_password = E2EEUtils.encrypt("password") + issuer_pk = decode_keyfile_json( + raw_keyfile_json=issuer_keyfile, + password=E2EEUtils.decrypt(issuer_eoa_password).encode("utf-8"), + ) + + token_address = "test_token_address" + + target_account = config_eth_account("user2") + target_address = target_account["address"] + target_amount = 10 + + # Prepare data + _account = Account() + _account.issuer_address = issuer_address + _account.keyfile = issuer_keyfile + _account.eoa_password = issuer_eoa_password + _account.rsa_status = 3 + db.add(_account) + + upload_id = str(uuid.uuid4()) + + _upload = BatchIssueRedeemUpload() + _upload.upload_id = upload_id + _upload.issuer_address = issuer_address + _upload.token_type = TokenType.IBET_SHARE.value + _upload.token_address = token_address + _upload.category = BatchIssueRedeemProcessingCategory.ISSUE.value + _upload.processed = 0 + db.add(_upload) + + _upload_data = BatchIssueRedeem() + _upload_data.upload_id = upload_id + _upload_data.account_address = target_address + _upload_data.amount = target_amount + _upload_data.status = 0 + db.add(_upload_data) + + db.commit() + + # Execute batch + with patch( + target="app.model.blockchain.token.IbetShareContract.additional_issue", + return_value="mock_tx_hash", + ) as IbetShareContract_additional_issue: + await processor.process() + + # Assertion: contract + IbetShareContract_additional_issue.assert_called_with( + data=IbetShareAdditionalIssueParams( + account_address=target_address, amount=target_amount + ), + tx_from=issuer_address, + private_key=issuer_pk, + ) + + # Assertion: DB + _upload_after: BatchIssueRedeemUpload = db.scalars( + select(BatchIssueRedeemUpload) + .where(BatchIssueRedeemUpload.upload_id == upload_id) + .limit(1) + ).first() + assert _upload_after.processed == True + + _upload_data_after: List[BatchIssueRedeem] = db.scalars( + select(BatchIssueRedeem).where(BatchIssueRedeem.upload_id == upload_id) + ).all() + assert len(_upload_data_after) == 1 + assert _upload_data_after[0].status == 1 + + # Assertion: Log + assert ( + caplog.record_tuples.count( + (LOG.name, logging.DEBUG, "Transaction sent successfully: mock_tx_hash") + ) + == 1 + ) + + _notification_list = db.scalars(select(Notification)).all() + for _notification in _notification_list: + assert _notification.notice_id is not None + assert _notification.issuer_address == issuer_address + assert _notification.priority == 1 + assert _notification.type == NotificationType.BATCH_ISSUE_REDEEM_PROCESSED + assert _notification.code == 0 # Successful + assert _notification.metainfo == { + "category": BatchIssueRedeemProcessingCategory.ISSUE.value, + "upload_id": upload_id, + "error_data_id": [], + "token_address": token_address, + "token_type": TokenType.IBET_SHARE, + } + + # Normal_4 + # token type: IBET_SHARE + # processing category: REDEEM + @pytest.mark.asyncio + async def test_normal_4(self, processor, db, caplog): + # Test settings + issuer_account = config_eth_account("user1") + issuer_address = issuer_account["address"] + issuer_keyfile = issuer_account["keyfile_json"] + issuer_eoa_password = E2EEUtils.encrypt("password") + issuer_pk = decode_keyfile_json( + raw_keyfile_json=issuer_keyfile, + password=E2EEUtils.decrypt(issuer_eoa_password).encode("utf-8"), + ) + + token_address = "test_token_address" + + target_account = config_eth_account("user2") + target_address = target_account["address"] + target_amount = 10 + + # Prepare data + _account = Account() + _account.issuer_address = issuer_address + _account.keyfile = issuer_keyfile + _account.eoa_password = issuer_eoa_password + _account.rsa_status = 3 + db.add(_account) + + upload_id = str(uuid.uuid4()) + + _upload = BatchIssueRedeemUpload() + _upload.upload_id = upload_id + _upload.issuer_address = issuer_address + _upload.token_type = TokenType.IBET_SHARE.value + _upload.token_address = token_address + _upload.category = BatchIssueRedeemProcessingCategory.REDEEM.value + _upload.processed = 0 + db.add(_upload) + + _upload_data = BatchIssueRedeem() + _upload_data.upload_id = upload_id + _upload_data.account_address = target_address + _upload_data.amount = target_amount + _upload_data.status = 0 + db.add(_upload_data) + + db.commit() + + # Execute batch + with patch( + target="app.model.blockchain.token.IbetShareContract.redeem", + return_value="mock_tx_hash", + ) as IbetShareContract_redeem: + await processor.process() + + # Assertion: contract + IbetShareContract_redeem.assert_called_with( + data=IbetShareRedeemParams( + account_address=target_address, amount=target_amount + ), + tx_from=issuer_address, + private_key=issuer_pk, + ) + + # Assertion: DB + _upload_after: BatchIssueRedeemUpload = db.scalars( + select(BatchIssueRedeemUpload) + .where(BatchIssueRedeemUpload.upload_id == upload_id) + .limit(1) + ).first() + assert _upload_after.processed == True + + _upload_data_after: List[BatchIssueRedeem] = db.scalars( + select(BatchIssueRedeem).where(BatchIssueRedeem.upload_id == upload_id) + ).all() + assert len(_upload_data_after) == 1 + assert _upload_data_after[0].status == 1 + + # Assertion: Log + assert ( + caplog.record_tuples.count( + (LOG.name, logging.DEBUG, "Transaction sent successfully: mock_tx_hash") + ) + == 1 + ) + + _notification_list = db.scalars(select(Notification)).all() + for _notification in _notification_list: + assert _notification.notice_id is not None + assert _notification.issuer_address == issuer_address + assert _notification.priority == 1 + assert _notification.type == NotificationType.BATCH_ISSUE_REDEEM_PROCESSED + assert _notification.code == 0 # Successful + assert _notification.metainfo == { + "category": BatchIssueRedeemProcessingCategory.REDEEM.value, + "upload_id": upload_id, + "error_data_id": [], + "token_address": token_address, + "token_type": TokenType.IBET_SHARE, + } + + ########################################################################### + # Error Case + ########################################################################### + + # Error_1 + # Issuer account does not exist + @pytest.mark.asyncio + async def test_error_1(self, processor, db, caplog): + # Test settings + issuer_account = config_eth_account("user1") + issuer_address = issuer_account["address"] + + token_address = "test_token_address" + + target_account = config_eth_account("user2") + target_address = target_account["address"] + target_amount = 10 + + # Prepare data + upload_id = str(uuid.uuid4()) + + _upload = BatchIssueRedeemUpload() + _upload.upload_id = upload_id + _upload.issuer_address = issuer_address + _upload.token_type = TokenType.IBET_STRAIGHT_BOND.value + _upload.token_address = token_address + _upload.category = BatchIssueRedeemProcessingCategory.ISSUE.value + _upload.processed = 0 + db.add(_upload) + + _upload_data = BatchIssueRedeem() + _upload_data.upload_id = upload_id + _upload_data.account_address = target_address + _upload_data.amount = target_amount + _upload_data.status = 0 + db.add(_upload_data) + + db.commit() + + # Execute batch + with patch( + target="app.model.blockchain.token.IbetStraightBondContract.additional_issue", + return_value="mock_tx_hash", + ) as IbetStraightBondContract_additional_issue: + await processor.process() + + # Assertion: contract + IbetStraightBondContract_additional_issue.assert_not_called() + + # Assertion: DB + _upload_after: BatchIssueRedeemUpload = db.scalars( + select(BatchIssueRedeemUpload) + .where(BatchIssueRedeemUpload.upload_id == upload_id) + .limit(1) + ).first() + assert _upload_after.processed == True + + _upload_data_after: List[BatchIssueRedeem] = db.scalars( + select(BatchIssueRedeem).where(BatchIssueRedeem.upload_id == upload_id) + ).all() + assert len(_upload_data_after) == 1 + assert _upload_data_after[0].status == 0 + + # Assertion: Log + assert ( + caplog.record_tuples.count( + (LOG.name, logging.ERROR, "Issuer account does not exist") + ) + == 1 + ) + + _notification_list = db.scalars(select(Notification)).all() + for _notification in _notification_list: + assert _notification.notice_id is not None + assert _notification.issuer_address == issuer_address + assert _notification.priority == 1 + assert _notification.type == NotificationType.BATCH_ISSUE_REDEEM_PROCESSED + assert _notification.code == 1 # Failed + assert _notification.metainfo == { + "category": BatchIssueRedeemProcessingCategory.ISSUE.value, + "upload_id": upload_id, + "error_data_id": [], + "token_address": token_address, + "token_type": TokenType.IBET_STRAIGHT_BOND, + } + + # Error_2 + # Failed to decode keyfile + @pytest.mark.asyncio + async def test_error_2(self, processor, db, caplog): + # Test settings + issuer_account = config_eth_account("user1") + issuer_address = issuer_account["address"] + issuer_keyfile = issuer_account["keyfile_json"] + issuer_eoa_password = E2EEUtils.encrypt("wrong_password") # wrong password + + token_address = "test_token_address" + + target_account = config_eth_account("user2") + target_address = target_account["address"] + target_amount = 10 + + # Prepare data + _account = Account() + _account.issuer_address = issuer_address + _account.keyfile = issuer_keyfile + _account.eoa_password = issuer_eoa_password + _account.rsa_status = 3 + db.add(_account) + + upload_id = str(uuid.uuid4()) + + _upload = BatchIssueRedeemUpload() + _upload.upload_id = upload_id + _upload.issuer_address = issuer_address + _upload.token_type = TokenType.IBET_STRAIGHT_BOND.value + _upload.token_address = token_address + _upload.category = BatchIssueRedeemProcessingCategory.ISSUE.value + _upload.processed = 0 + db.add(_upload) + + _upload_data = BatchIssueRedeem() + _upload_data.upload_id = upload_id + _upload_data.account_address = target_address + _upload_data.amount = target_amount + _upload_data.status = 0 + db.add(_upload_data) + + db.commit() + + # Execute batch + with patch( + target="app.model.blockchain.token.IbetStraightBondContract.additional_issue", + return_value="mock_tx_hash", + ) as IbetStraightBondContract_additional_issue: + await processor.process() + + # Assertion: contract + IbetStraightBondContract_additional_issue.assert_not_called() + + # Assertion: DB + _upload_after: BatchIssueRedeemUpload = db.scalars( + select(BatchIssueRedeemUpload) + .where(BatchIssueRedeemUpload.upload_id == upload_id) + .limit(1) + ).first() + assert _upload_after.processed == True + + _upload_data_after: List[BatchIssueRedeem] = db.scalars( + select(BatchIssueRedeem).where(BatchIssueRedeem.upload_id == upload_id) + ).all() + assert len(_upload_data_after) == 1 + assert _upload_data_after[0].status == 0 + + # Assertion: Log + assert ( + caplog.record_tuples.count( + (LOG.name, logging.ERROR, "Failed to decode keyfile") + ) + == 1 + ) + + _notification_list = db.scalars(select(Notification)).all() + for _notification in _notification_list: + assert _notification.notice_id is not None + assert _notification.issuer_address == issuer_address + assert _notification.priority == 1 + assert _notification.type == NotificationType.BATCH_ISSUE_REDEEM_PROCESSED + assert _notification.code == 2 # Failed + assert _notification.metainfo == { + "category": BatchIssueRedeemProcessingCategory.ISSUE.value, + "upload_id": upload_id, + "error_data_id": [], + "token_address": token_address, + "token_type": TokenType.IBET_STRAIGHT_BOND, + } + + # Error_3 + # Failed to send transaction + @pytest.mark.asyncio + async def test_error_3(self, processor, db, caplog): + # Test settings + issuer_account = config_eth_account("user1") + issuer_address = issuer_account["address"] + issuer_keyfile = issuer_account["keyfile_json"] + issuer_eoa_password = E2EEUtils.encrypt("password") + + token_address = "test_token_address" + + target_account = config_eth_account("user2") + target_address = target_account["address"] + target_amount = 10 + + # Prepare data + _account = Account() + _account.issuer_address = issuer_address + _account.keyfile = issuer_keyfile + _account.eoa_password = issuer_eoa_password + _account.rsa_status = 3 + db.add(_account) + + upload_id = str(uuid.uuid4()) + + _upload = BatchIssueRedeemUpload() + _upload.upload_id = upload_id + _upload.issuer_address = issuer_address + _upload.token_type = TokenType.IBET_STRAIGHT_BOND.value + _upload.token_address = token_address + _upload.category = BatchIssueRedeemProcessingCategory.ISSUE.value + _upload.processed = 0 + db.add(_upload) + + _upload_data_1 = BatchIssueRedeem() + _upload_data_1.upload_id = upload_id + _upload_data_1.account_address = target_address + _upload_data_1.amount = target_amount + _upload_data_1.status = 0 + db.add(_upload_data_1) + + _upload_data_2 = BatchIssueRedeem() + _upload_data_2.upload_id = upload_id + _upload_data_2.account_address = target_address + _upload_data_2.amount = target_amount + _upload_data_2.status = 0 + db.add(_upload_data_2) + + db.commit() + + # Execute batch + with patch( + target="app.model.blockchain.token.IbetStraightBondContract.additional_issue", + side_effect=SendTransactionError(), + ) as IbetStraightBondContract_additional_issue: + await processor.process() + + # Assertion: DB + _upload_after: BatchIssueRedeemUpload = db.scalars( + select(BatchIssueRedeemUpload) + .where(BatchIssueRedeemUpload.upload_id == upload_id) + .limit(1) + ).first() + assert _upload_after.processed == True + + _upload_data_after: List[BatchIssueRedeem] = db.scalars( + select(BatchIssueRedeem).where(BatchIssueRedeem.upload_id == upload_id) + ).all() + assert len(_upload_data_after) == 2 + assert _upload_data_after[0].status == 2 + assert _upload_data_after[1].status == 2 + + # Assertion: Log + assert ( + caplog.record_tuples.count( + (LOG.name, logging.WARNING, "Failed to send transaction: -") + ) + == 2 + ) + + _notification_list = db.scalars(select(Notification)).all() + for _notification in _notification_list: + assert _notification.notice_id is not None + assert _notification.issuer_address == issuer_address + assert _notification.priority == 1 + assert _notification.type == NotificationType.BATCH_ISSUE_REDEEM_PROCESSED + assert _notification.code == 3 # Failed + assert _notification.metainfo == { + "category": BatchIssueRedeemProcessingCategory.ISSUE.value, + "upload_id": upload_id, + "error_data_id": ANY, + "token_address": token_address, + "token_type": TokenType.IBET_STRAIGHT_BOND, + } + assert len(_notification.metainfo["error_data_id"]) == 2 + + # + # ContractRevertError + @pytest.mark.asyncio + async def test_error_4( + self, processor: Processor, db: Session, caplog: pytest.LogCaptureFixture + ): + # Test settings + issuer_account = config_eth_account("user1") + issuer_address = issuer_account["address"] + issuer_keyfile = issuer_account["keyfile_json"] + issuer_eoa_password = E2EEUtils.encrypt("password") + + token_address = "test_token_address" + + target_account = config_eth_account("user2") + target_address = target_account["address"] + target_amount = 10 + + # Prepare data + _account = Account() + _account.issuer_address = issuer_address + _account.keyfile = issuer_keyfile + _account.eoa_password = issuer_eoa_password + _account.rsa_status = 3 + db.add(_account) + + upload_1_id = str(uuid.uuid4()) + + _upload_1 = BatchIssueRedeemUpload() + _upload_1.upload_id = upload_1_id + _upload_1.issuer_address = issuer_address + _upload_1.token_type = TokenType.IBET_STRAIGHT_BOND.value + _upload_1.token_address = token_address + _upload_1.category = BatchIssueRedeemProcessingCategory.ISSUE.value + _upload_1.processed = 0 + db.add(_upload_1) + + _upload_data_1 = BatchIssueRedeem() + _upload_data_1.upload_id = upload_1_id + _upload_data_1.account_address = target_address + _upload_data_1.amount = target_amount + _upload_data_1.status = 0 + db.add(_upload_data_1) + + upload_2_id = str(uuid.uuid4()) + + _upload_2 = BatchIssueRedeemUpload() + _upload_2.upload_id = upload_2_id + _upload_2.issuer_address = issuer_address + _upload_2.token_type = TokenType.IBET_SHARE.value + _upload_2.token_address = token_address + _upload_2.category = BatchIssueRedeemProcessingCategory.ISSUE.value + _upload_2.processed = 0 + db.add(_upload_2) + + _upload_data_2 = BatchIssueRedeem() + _upload_data_2.upload_id = upload_2_id + _upload_data_2.account_address = target_address + _upload_data_2.amount = target_amount + _upload_data_2.status = 0 + db.add(_upload_data_2) + + db.commit() + + # mock + with patch( + target="app.model.blockchain.token.IbetStraightBondContract.additional_issue", + side_effect=ContractRevertError("999999"), + ), patch( + target="app.model.blockchain.token.IbetShareContract.additional_issue", + side_effect=ContractRevertError("999999"), + ): + await processor.process() + + # Assertion: DB + _upload_1_after: BatchIssueRedeemUpload | None = db.scalars( + select(BatchIssueRedeemUpload) + .where(BatchIssueRedeemUpload.upload_id == upload_1_id) + .limit(1) + ).first() + assert _upload_1_after.processed == True + + _upload_1_data_after: Sequence[BatchIssueRedeem] = db.scalars( + select(BatchIssueRedeem).where(BatchIssueRedeem.upload_id == upload_1_id) + ).all() + assert len(_upload_1_data_after) == 1 + assert _upload_1_data_after[0].status == 2 + + _upload_2_after: BatchIssueRedeemUpload | None = db.scalars( + select(BatchIssueRedeemUpload) + .where(BatchIssueRedeemUpload.upload_id == upload_2_id) + .limit(1) + ).first() + assert _upload_2_after.processed == True + + _upload_2_data_after: Sequence[BatchIssueRedeem] = db.scalars( + select(BatchIssueRedeem).where(BatchIssueRedeem.upload_id == upload_2_id) + ).all() + assert len(_upload_2_data_after) == 1 + assert _upload_2_data_after[0].status == 2 + + # Assertion: Log + assert ( + caplog.record_tuples.count( + ( + LOG.name, + logging.WARNING, + f"Transaction reverted: upload_id=<{_upload_1_after.upload_id}> error_code:<999999> error_msg:<>", + ) + ) + == 1 + ) + assert ( + caplog.record_tuples.count( + ( + LOG.name, + logging.WARNING, + f"Transaction reverted: upload_id=<{_upload_2_after.upload_id}> error_code:<999999> error_msg:<>", + ) + ) + == 1 + ) + + _notification_list = db.scalars(select(Notification)).all() + assert _notification_list[0].notice_id is not None + assert _notification_list[0].issuer_address == issuer_address + assert _notification_list[0].priority == 1 + assert ( + _notification_list[0].type == NotificationType.BATCH_ISSUE_REDEEM_PROCESSED + ) + assert _notification_list[0].code == 3 # Failed + assert _notification_list[0].metainfo == { + "category": BatchIssueRedeemProcessingCategory.ISSUE.value, + "upload_id": upload_1_id, + "error_data_id": ANY, + "token_address": token_address, + "token_type": TokenType.IBET_STRAIGHT_BOND, + } + assert len(_notification_list[0].metainfo["error_data_id"]) == 1 + + assert _notification_list[1].notice_id is not None + assert _notification_list[1].issuer_address == issuer_address + assert _notification_list[1].priority == 1 + assert ( + _notification_list[1].type == NotificationType.BATCH_ISSUE_REDEEM_PROCESSED + ) + assert _notification_list[1].code == 3 # Failed + assert _notification_list[1].metainfo == { + "category": BatchIssueRedeemProcessingCategory.ISSUE.value, + "upload_id": upload_2_id, + "error_data_id": ANY, + "token_address": token_address, + "token_type": TokenType.IBET_SHARE, + } + assert len(_notification_list[1].metainfo["error_data_id"]) == 1 diff --git a/tests/batch/test_processor_bulk_transfer.py b/tests/batch/test_processor_bulk_transfer.py index 020d5eb0..36b81240 100644 --- a/tests/batch/test_processor_bulk_transfer.py +++ b/tests/batch/test_processor_bulk_transfer.py @@ -17,20 +17,22 @@ SPDX-License-Identifier: Apache-2.0 """ -from unittest.mock import patch +from unittest.mock import ANY, patch import pytest from sqlalchemy import and_, select from app.exceptions import ContractRevertError, SendTransactionError -from app.model.blockchain import IbetShareContract, IbetStraightBondContract +from app.model.blockchain.tx_params.ibet_security_token import ForcedTransferParams from app.model.db import ( Account, BulkTransfer, BulkTransferUpload, Notification, NotificationType, + Token, TokenType, + TokenVersion, ) from app.utils.e2ee_utils import E2EEUtils from batch.processor_bulk_transfer import Processor @@ -81,7 +83,7 @@ class TestProcessor: ########################################################################### # - # transaction_compression = False + # ~v24.6: Transfer individually # IbetStraightBond @pytest.mark.asyncio async def test_normal_1_1(self, processor, db): @@ -103,52 +105,58 @@ async def test_normal_1_1(self, processor, db): bulk_transfer_upload.issuer_address = _account["address"] bulk_transfer_upload.upload_id = self.upload_id_list[i] bulk_transfer_upload.token_type = TokenType.IBET_STRAIGHT_BOND.value + bulk_transfer_upload.token_address = self.bulk_transfer_token[i] bulk_transfer_upload.status = i # pending:0, succeeded:1, failed:2 db.add(bulk_transfer_upload) # Prepare data : BulkTransfer - for i in range(0, 3): + for _ in range(3): bulk_transfer = BulkTransfer() bulk_transfer.issuer_address = _account["address"] bulk_transfer.upload_id = self.upload_id_list[0] bulk_transfer.token_type = TokenType.IBET_STRAIGHT_BOND.value - bulk_transfer.token_address = self.bulk_transfer_token[i] + bulk_transfer.token_address = self.bulk_transfer_token[0] bulk_transfer.from_address = _from_address["address"] bulk_transfer.to_address = _to_address["address"] bulk_transfer.amount = 1 - bulk_transfer.status = 0 # pending:0, succeeded:1, failed:2 + bulk_transfer.status = 0 db.add(bulk_transfer) db.commit() - # mock - IbetStraightBondContract_transfer = patch( - target="app.model.blockchain.token.IbetStraightBondContract.transfer", + # Execute batch + with patch( + target="app.model.blockchain.token.IbetStraightBondContract.forced_transfer", return_value=None, - ) - - with IbetStraightBondContract_transfer: - # Execute batch + ) as IbetStraightBondContract_transfer: await processor.process() - # Assertion - _bulk_transfer_upload = db.scalars( - select(BulkTransferUpload) - .where(BulkTransferUpload.upload_id == self.upload_id_list[0]) - .limit(1) - ).first() - assert _bulk_transfer_upload.status == 1 + # Assertion + IbetStraightBondContract_transfer.assert_called_with( + data=ForcedTransferParams( + from_address=_from_address["address"], + to_address=_to_address["address"], + amount=1, + ), + tx_from=_account["address"], + private_key=ANY, + ) - _bulk_transfer_list = db.scalars( - select(BulkTransfer).where( - BulkTransfer.upload_id == self.upload_id_list[0] - ) - ).all() - for _bulk_transfer in _bulk_transfer_list: - assert _bulk_transfer.status == 1 + _bulk_transfer_upload = db.scalars( + select(BulkTransferUpload).order_by(BulkTransferUpload.upload_id) + ).all() + assert _bulk_transfer_upload[0].status == 1 + assert _bulk_transfer_upload[1].status == 1 + assert _bulk_transfer_upload[2].status == 2 + + _bulk_transfer_list = db.scalars( + select(BulkTransfer).where(BulkTransfer.upload_id == self.upload_id_list[0]) + ).all() + for _bulk_transfer in _bulk_transfer_list: + assert _bulk_transfer.status == 1 # - # transaction_compression = False + # ~v24.6: Transfer individually # IbetShare @pytest.mark.asyncio async def test_normal_1_2(self, processor, db): @@ -170,52 +178,58 @@ async def test_normal_1_2(self, processor, db): bulk_transfer_upload.issuer_address = _account["address"] bulk_transfer_upload.upload_id = self.upload_id_list[i] bulk_transfer_upload.token_type = TokenType.IBET_SHARE.value + bulk_transfer_upload.token_address = self.bulk_transfer_token[i] bulk_transfer_upload.status = i # pending:0, succeeded:1, failed:2 db.add(bulk_transfer_upload) # Prepare data : BulkTransfer - for i in range(0, 3): + for _ in range(3): bulk_transfer = BulkTransfer() bulk_transfer.issuer_address = _account["address"] bulk_transfer.upload_id = self.upload_id_list[0] bulk_transfer.token_type = TokenType.IBET_SHARE.value - bulk_transfer.token_address = self.bulk_transfer_token[i] + bulk_transfer.token_address = self.bulk_transfer_token[0] bulk_transfer.from_address = _from_address["address"] bulk_transfer.to_address = _to_address["address"] bulk_transfer.amount = 1 - bulk_transfer.status = 0 # pending:0, succeeded:1, failed:2 + bulk_transfer.status = 0 db.add(bulk_transfer) db.commit() - # mock - IbetShareContract_transfer = patch( - target="app.model.blockchain.token.IbetShareContract.transfer", + # Execute batch + with patch( + target="app.model.blockchain.token.IbetShareContract.forced_transfer", return_value=None, - ) - - with IbetShareContract_transfer: - # Execute batch + ) as IbetShareContract_transfer: await processor.process() - # Assertion - _bulk_transfer_upload = db.scalars( - select(BulkTransferUpload) - .where(BulkTransferUpload.upload_id == self.upload_id_list[0]) - .limit(1) - ).first() - assert _bulk_transfer_upload.status == 1 + # Assertion + IbetShareContract_transfer.assert_called_with( + data=ForcedTransferParams( + from_address=_from_address["address"], + to_address=_to_address["address"], + amount=1, + ), + tx_from=_account["address"], + private_key=ANY, + ) - _bulk_transfer_list = db.scalars( - select(BulkTransfer).where( - BulkTransfer.upload_id == self.upload_id_list[0] - ) - ).all() - for _bulk_transfer in _bulk_transfer_list: - assert _bulk_transfer.status == 1 + _bulk_transfer_upload = db.scalars( + select(BulkTransferUpload).order_by(BulkTransferUpload.upload_id) + ).all() + assert _bulk_transfer_upload[0].status == 1 + assert _bulk_transfer_upload[1].status == 1 + assert _bulk_transfer_upload[2].status == 2 + + _bulk_transfer_list = db.scalars( + select(BulkTransfer).where(BulkTransfer.upload_id == self.upload_id_list[0]) + ).all() + for _bulk_transfer in _bulk_transfer_list: + assert _bulk_transfer.status == 1 # - # transaction_compression = True + # v24.9~: Transfer in batch # IbetStraightBond @pytest.mark.asyncio async def test_normal_2_1(self, processor, db): @@ -223,33 +237,42 @@ async def test_normal_2_1(self, processor, db): _from_address = self.account_list[1] _to_address = self.account_list[2] - # Prepare data: Account + # Prepare data : Account account = Account() account.issuer_address = _account["address"] account.eoa_password = E2EEUtils.encrypt("password") account.keyfile = _account["keyfile"] db.add(account) - # Prepare data: BulkTransferUpload + # Prepare data : Token + for i in range(0, 3): + token = Token() + token.type = TokenType.IBET_STRAIGHT_BOND.value + token.token_address = self.bulk_transfer_token[i] + token.issuer_address = _account["address"] + token.abi = {} + token.tx_hash = "" + token.version = TokenVersion.V_24_09 + db.add(token) + + # Prepare data : BulkTransferUpload # Only record 0 should be processed for i in range(0, 3): bulk_transfer_upload = BulkTransferUpload() bulk_transfer_upload.issuer_address = _account["address"] bulk_transfer_upload.upload_id = self.upload_id_list[i] bulk_transfer_upload.token_type = TokenType.IBET_STRAIGHT_BOND.value - bulk_transfer_upload.transaction_compression = True + bulk_transfer_upload.token_address = self.bulk_transfer_token[i] bulk_transfer_upload.status = i # pending:0, succeeded:1, failed:2 db.add(bulk_transfer_upload) - # Prepare data: BulkTransfer - for i in range(0, 150): + # Prepare data : BulkTransfer + for _ in range(3): bulk_transfer = BulkTransfer() bulk_transfer.issuer_address = _account["address"] bulk_transfer.upload_id = self.upload_id_list[0] bulk_transfer.token_type = TokenType.IBET_STRAIGHT_BOND.value - bulk_transfer.token_address = self.bulk_transfer_token[ - 0 - ] # same token address + bulk_transfer.token_address = self.bulk_transfer_token[0] bulk_transfer.from_address = _from_address["address"] bulk_transfer.to_address = _to_address["address"] bulk_transfer.amount = 1 @@ -258,37 +281,51 @@ async def test_normal_2_1(self, processor, db): db.commit() - # Mock - IbetStraightBondContract_bulkTransfer = patch( - target="app.model.blockchain.token.IbetStraightBondContract.bulk_transfer", + # Execute batch + with patch( + target="app.model.blockchain.token.IbetStraightBondContract.bulk_forced_transfer", return_value=None, - ) - - with IbetStraightBondContract_bulkTransfer: - # Execute batch process + ) as IbetStraightBondContract_bulk_transfer: await processor.process() - # Assertion - assert IbetStraightBondContract.bulk_transfer.call_count == 2 - - _bulk_transfer_upload = db.scalars( - select(BulkTransferUpload) - .where(BulkTransferUpload.upload_id == self.upload_id_list[0]) - .limit(1) - ).first() - assert _bulk_transfer_upload.status == 1 + # Assertion + IbetStraightBondContract_bulk_transfer.assert_called_with( + data=[ + ForcedTransferParams( + from_address=_from_address["address"], + to_address=_to_address["address"], + amount=1, + ), + ForcedTransferParams( + from_address=_from_address["address"], + to_address=_to_address["address"], + amount=1, + ), + ForcedTransferParams( + from_address=_from_address["address"], + to_address=_to_address["address"], + amount=1, + ), + ], + tx_from=_account["address"], + private_key=ANY, + ) - _bulk_transfer_list = db.scalars( - select(BulkTransfer).where( - BulkTransfer.upload_id == self.upload_id_list[0] - ) - ).all() - assert len(_bulk_transfer_list) == 150 - for _bulk_transfer in _bulk_transfer_list: - assert _bulk_transfer.status == 1 + _bulk_transfer_upload = db.scalars( + select(BulkTransferUpload).order_by(BulkTransferUpload.upload_id) + ).all() + assert _bulk_transfer_upload[0].status == 1 + assert _bulk_transfer_upload[1].status == 1 + assert _bulk_transfer_upload[2].status == 2 + + _bulk_transfer_list = db.scalars( + select(BulkTransfer).where(BulkTransfer.upload_id == self.upload_id_list[0]) + ).all() + for _bulk_transfer in _bulk_transfer_list: + assert _bulk_transfer.status == 1 # - # transaction_compression = True + # v24.9~: Transfer in batch # IbetShare @pytest.mark.asyncio async def test_normal_2_2(self, processor, db): @@ -296,33 +333,42 @@ async def test_normal_2_2(self, processor, db): _from_address = self.account_list[1] _to_address = self.account_list[2] - # Prepare data: Account + # Prepare data : Account account = Account() account.issuer_address = _account["address"] account.eoa_password = E2EEUtils.encrypt("password") account.keyfile = _account["keyfile"] db.add(account) - # Prepare data: BulkTransferUpload + # Prepare data : Token + for i in range(0, 3): + token = Token() + token.type = TokenType.IBET_SHARE.value + token.token_address = self.bulk_transfer_token[i] + token.issuer_address = _account["address"] + token.abi = {} + token.tx_hash = "" + token.version = TokenVersion.V_24_09 + db.add(token) + + # Prepare data : BulkTransferUpload # Only record 0 should be processed for i in range(0, 3): bulk_transfer_upload = BulkTransferUpload() bulk_transfer_upload.issuer_address = _account["address"] bulk_transfer_upload.upload_id = self.upload_id_list[i] bulk_transfer_upload.token_type = TokenType.IBET_SHARE.value - bulk_transfer_upload.transaction_compression = True + bulk_transfer_upload.token_address = self.bulk_transfer_token[i] bulk_transfer_upload.status = i # pending:0, succeeded:1, failed:2 db.add(bulk_transfer_upload) - # Prepare data: BulkTransfer - for i in range(0, 150): + # Prepare data : BulkTransfer + for _ in range(3): bulk_transfer = BulkTransfer() bulk_transfer.issuer_address = _account["address"] bulk_transfer.upload_id = self.upload_id_list[0] bulk_transfer.token_type = TokenType.IBET_SHARE.value - bulk_transfer.token_address = self.bulk_transfer_token[ - 0 - ] # same token address + bulk_transfer.token_address = self.bulk_transfer_token[0] bulk_transfer.from_address = _from_address["address"] bulk_transfer.to_address = _to_address["address"] bulk_transfer.amount = 1 @@ -331,34 +377,48 @@ async def test_normal_2_2(self, processor, db): db.commit() - # Mock - IbetShareContract_bulkTransfer = patch( - target="app.model.blockchain.token.IbetShareContract.bulk_transfer", + # Execute batch + with patch( + target="app.model.blockchain.token.IbetShareContract.bulk_forced_transfer", return_value=None, - ) - - with IbetShareContract_bulkTransfer: - # Execute batch process + ) as IbetShareContract_bulk_transfer: await processor.process() - # Assertion - assert IbetShareContract.bulk_transfer.call_count == 2 - - _bulk_transfer_upload = db.scalars( - select(BulkTransferUpload) - .where(BulkTransferUpload.upload_id == self.upload_id_list[0]) - .limit(1) - ).first() - assert _bulk_transfer_upload.status == 1 + # Assertion + IbetShareContract_bulk_transfer.assert_called_with( + data=[ + ForcedTransferParams( + from_address=_from_address["address"], + to_address=_to_address["address"], + amount=1, + ), + ForcedTransferParams( + from_address=_from_address["address"], + to_address=_to_address["address"], + amount=1, + ), + ForcedTransferParams( + from_address=_from_address["address"], + to_address=_to_address["address"], + amount=1, + ), + ], + tx_from=_account["address"], + private_key=ANY, + ) - _bulk_transfer_list = db.scalars( - select(BulkTransfer).where( - BulkTransfer.upload_id == self.upload_id_list[0] - ) - ).all() - assert len(_bulk_transfer_list) == 150 - for _bulk_transfer in _bulk_transfer_list: - assert _bulk_transfer.status == 1 + _bulk_transfer_upload = db.scalars( + select(BulkTransferUpload).order_by(BulkTransferUpload.upload_id) + ).all() + assert _bulk_transfer_upload[0].status == 1 + assert _bulk_transfer_upload[1].status == 1 + assert _bulk_transfer_upload[2].status == 2 + + _bulk_transfer_list = db.scalars( + select(BulkTransfer).where(BulkTransfer.upload_id == self.upload_id_list[0]) + ).all() + for _bulk_transfer in _bulk_transfer_list: + assert _bulk_transfer.status == 1 # # Skip other thread processed issuer @@ -384,32 +444,41 @@ async def test_normal_3(self, processor, db): ) bulk_transfer_upload.upload_id = self.upload_id_list[0] bulk_transfer_upload.token_type = TokenType.IBET_STRAIGHT_BOND.value + bulk_transfer_upload.token_address = self.bulk_transfer_token[0] bulk_transfer_upload.status = 0 db.add(bulk_transfer_upload) + bulk_transfer_upload = BulkTransferUpload() bulk_transfer_upload.issuer_address = ( _other_issuer_address_1 # other thread processed issuer ) bulk_transfer_upload.upload_id = self.upload_id_list[1] bulk_transfer_upload.token_type = TokenType.IBET_STRAIGHT_BOND.value + bulk_transfer_upload.token_address = self.bulk_transfer_token[1] bulk_transfer_upload.status = 0 db.add(bulk_transfer_upload) + bulk_transfer_upload = BulkTransferUpload() bulk_transfer_upload.issuer_address = _other_issuer_address_1 # skip issuer bulk_transfer_upload.upload_id = self.upload_id_list[2] bulk_transfer_upload.token_type = TokenType.IBET_STRAIGHT_BOND.value + bulk_transfer_upload.token_address = self.bulk_transfer_token[2] bulk_transfer_upload.status = 0 db.add(bulk_transfer_upload) + bulk_transfer_upload = BulkTransferUpload() bulk_transfer_upload.issuer_address = _account["address"] bulk_transfer_upload.upload_id = self.upload_id_list[3] bulk_transfer_upload.token_type = TokenType.IBET_STRAIGHT_BOND.value + bulk_transfer_upload.token_address = self.bulk_transfer_token[3] bulk_transfer_upload.status = 0 db.add(bulk_transfer_upload) + bulk_transfer_upload = BulkTransferUpload() bulk_transfer_upload.issuer_address = _account["address"] bulk_transfer_upload.upload_id = self.upload_id_list[4] bulk_transfer_upload.token_type = TokenType.IBET_STRAIGHT_BOND.value + bulk_transfer_upload.token_address = self.bulk_transfer_token[4] bulk_transfer_upload.status = 0 db.add(bulk_transfer_upload) @@ -419,29 +488,30 @@ async def test_normal_3(self, processor, db): bulk_transfer.issuer_address = _account["address"] bulk_transfer.upload_id = self.upload_id_list[3] bulk_transfer.token_type = TokenType.IBET_STRAIGHT_BOND.value - bulk_transfer.token_address = self.bulk_transfer_token[i] + bulk_transfer.token_address = self.bulk_transfer_token[3] bulk_transfer.from_address = _from_address["address"] bulk_transfer.to_address = _to_address["address"] bulk_transfer.amount = 1 - bulk_transfer.status = 0 # pending:0, succeeded:1, failed:2 + bulk_transfer.status = 0 db.add(bulk_transfer) + for i in range(0, 3): bulk_transfer = BulkTransfer() bulk_transfer.issuer_address = _account["address"] bulk_transfer.upload_id = self.upload_id_list[4] bulk_transfer.token_type = TokenType.IBET_STRAIGHT_BOND.value - bulk_transfer.token_address = self.bulk_transfer_token[i] + bulk_transfer.token_address = self.bulk_transfer_token[4] bulk_transfer.from_address = _from_address["address"] bulk_transfer.to_address = _to_address["address"] bulk_transfer.amount = 1 - bulk_transfer.status = 0 # pending:0, succeeded:1, failed:2 + bulk_transfer.status = 0 db.add(bulk_transfer) db.commit() # mock IbetStraightBondContract_transfer = patch( - target="app.model.blockchain.token.IbetStraightBondContract.transfer", + target="app.model.blockchain.token.IbetStraightBondContract.forced_transfer", return_value=None, ) processing_issuer = patch( @@ -472,6 +542,7 @@ async def test_normal_3(self, processor, db): assert _bulk_transfer_upload.status == 1 _bulk_transfer_upload = _bulk_transfer_upload_list[4] assert _bulk_transfer_upload.status == 1 + _bulk_transfer_list = db.scalars( select(BulkTransfer) .where(BulkTransfer.upload_id == self.upload_id_list[3]) @@ -479,6 +550,7 @@ async def test_normal_3(self, processor, db): ).all() _bulk_transfer = _bulk_transfer_list[0] assert _bulk_transfer.status == 1 + _bulk_transfer_list = db.scalars( select(BulkTransfer) .where(BulkTransfer.upload_id == self.upload_id_list[4]) @@ -510,30 +582,37 @@ async def test_normal_4(self, processor, db): ] # other thread processed issuer bulk_transfer_upload.upload_id = self.upload_id_list[0] bulk_transfer_upload.token_type = TokenType.IBET_STRAIGHT_BOND.value + bulk_transfer_upload.token_address = self.bulk_transfer_token[0] bulk_transfer_upload.status = 0 db.add(bulk_transfer_upload) + bulk_transfer_upload = BulkTransferUpload() bulk_transfer_upload.issuer_address = _account[ "address" ] # other thread processed issuer bulk_transfer_upload.upload_id = self.upload_id_list[1] bulk_transfer_upload.token_type = TokenType.IBET_STRAIGHT_BOND.value + bulk_transfer_upload.token_address = self.bulk_transfer_token[1] bulk_transfer_upload.status = 0 db.add(bulk_transfer_upload) + bulk_transfer_upload = BulkTransferUpload() bulk_transfer_upload.issuer_address = _account[ "address" ] # other thread same issuer bulk_transfer_upload.upload_id = self.upload_id_list[2] bulk_transfer_upload.token_type = TokenType.IBET_STRAIGHT_BOND.value + bulk_transfer_upload.token_address = self.bulk_transfer_token[2] bulk_transfer_upload.status = 0 db.add(bulk_transfer_upload) + bulk_transfer_upload = BulkTransferUpload() bulk_transfer_upload.issuer_address = _account[ "address" ] # other thread same issuer bulk_transfer_upload.upload_id = self.upload_id_list[3] bulk_transfer_upload.token_type = TokenType.IBET_STRAIGHT_BOND.value + bulk_transfer_upload.token_address = self.bulk_transfer_token[3] bulk_transfer_upload.status = 0 db.add(bulk_transfer_upload) @@ -543,29 +622,30 @@ async def test_normal_4(self, processor, db): bulk_transfer.issuer_address = _account["address"] bulk_transfer.upload_id = self.upload_id_list[2] bulk_transfer.token_type = TokenType.IBET_STRAIGHT_BOND.value - bulk_transfer.token_address = self.bulk_transfer_token[i] + bulk_transfer.token_address = self.bulk_transfer_token[2] bulk_transfer.from_address = _from_address["address"] bulk_transfer.to_address = _to_address["address"] bulk_transfer.amount = 1 - bulk_transfer.status = 0 # pending:0, succeeded:1, failed:2 + bulk_transfer.status = 0 db.add(bulk_transfer) + for i in range(0, 3): bulk_transfer = BulkTransfer() bulk_transfer.issuer_address = _account["address"] bulk_transfer.upload_id = self.upload_id_list[3] bulk_transfer.token_type = TokenType.IBET_STRAIGHT_BOND.value - bulk_transfer.token_address = self.bulk_transfer_token[i] + bulk_transfer.token_address = self.bulk_transfer_token[3] bulk_transfer.from_address = _from_address["address"] bulk_transfer.to_address = _to_address["address"] bulk_transfer.amount = 1 - bulk_transfer.status = 0 # pending:0, succeeded:1, failed:2 + bulk_transfer.status = 0 db.add(bulk_transfer) db.commit() # mock IbetStraightBondContract_transfer = patch( - target="app.model.blockchain.token.IbetStraightBondContract.transfer", + target="app.model.blockchain.token.IbetStraightBondContract.forced_transfer", return_value=None, ) processing_issuer = patch( @@ -594,6 +674,7 @@ async def test_normal_4(self, processor, db): assert _bulk_transfer_upload.status == 1 _bulk_transfer_upload = _bulk_transfer_upload_list[3] assert _bulk_transfer_upload.status == 1 + _bulk_transfer_list = db.scalars( select(BulkTransfer) .where(BulkTransfer.upload_id == self.upload_id_list[2]) @@ -601,6 +682,7 @@ async def test_normal_4(self, processor, db): ).all() _bulk_transfer = _bulk_transfer_list[0] assert _bulk_transfer.status == 1 + _bulk_transfer_list = db.scalars( select(BulkTransfer) .where(BulkTransfer.upload_id == self.upload_id_list[3]) @@ -624,6 +706,7 @@ async def test_error_1(self, processor, db): bulk_transfer_upload.issuer_address = _account["address"] bulk_transfer_upload.upload_id = self.upload_id_list[0] bulk_transfer_upload.token_type = TokenType.IBET_STRAIGHT_BOND.value + bulk_transfer_upload.token_address = self.bulk_transfer_token[0] bulk_transfer_upload.status = 0 # pending db.add(bulk_transfer_upload) @@ -639,6 +722,7 @@ async def test_error_1(self, processor, db): .limit(1) ).first() assert _bulk_transfer_upload.status == 2 + _notification = db.scalars(select(Notification).limit(1)).first() assert _notification.id == 1 assert _notification.notice_id is not None @@ -670,6 +754,7 @@ async def test_error_2(self, processor, db): bulk_transfer_upload.issuer_address = _account["address"] bulk_transfer_upload.upload_id = self.upload_id_list[0] bulk_transfer_upload.token_type = TokenType.IBET_STRAIGHT_BOND.value + bulk_transfer_upload.token_address = self.bulk_transfer_token[0] bulk_transfer_upload.status = 0 # pending db.add(bulk_transfer_upload) @@ -685,6 +770,7 @@ async def test_error_2(self, processor, db): .limit(1) ).first() assert _bulk_transfer_upload.status == 2 + _notification = db.scalars(select(Notification).limit(1)).first() assert _notification.id == 1 assert _notification.notice_id is not None @@ -699,7 +785,8 @@ async def test_error_2(self, processor, db): } # - # SendTransactionError: IbetStraightBond + # ~v24.6: Transfer individually + # SendTransactionError @pytest.mark.asyncio async def test_error_3_1(self, processor, db): _account = self.account_list[0] @@ -718,6 +805,7 @@ async def test_error_3_1(self, processor, db): bulk_transfer_upload.issuer_address = _account["address"] bulk_transfer_upload.upload_id = self.upload_id_list[0] bulk_transfer_upload.token_type = TokenType.IBET_STRAIGHT_BOND.value + bulk_transfer_upload.token_address = self.bulk_transfer_token[0] bulk_transfer_upload.status = 0 # pending:0 db.add(bulk_transfer_upload) @@ -737,7 +825,7 @@ async def test_error_3_1(self, processor, db): # mock IbetStraightBondContract_transfer = patch( - target="app.model.blockchain.token.IbetStraightBondContract.transfer", + target="app.model.blockchain.token.IbetStraightBondContract.forced_transfer", side_effect=SendTransactionError(), ) @@ -779,7 +867,8 @@ async def test_error_3_1(self, processor, db): } # - # ContractRevertError: IbetStraightBond + # ~v24.6: Transfer individually + # ContractRevertError @pytest.mark.asyncio async def test_error_3_2(self, processor, db): _account = self.account_list[0] @@ -798,6 +887,7 @@ async def test_error_3_2(self, processor, db): bulk_transfer_upload.issuer_address = _account["address"] bulk_transfer_upload.upload_id = self.upload_id_list[0] bulk_transfer_upload.token_type = TokenType.IBET_STRAIGHT_BOND.value + bulk_transfer_upload.token_address = self.bulk_transfer_token[0] bulk_transfer_upload.status = 0 # pending:0 db.add(bulk_transfer_upload) @@ -817,7 +907,7 @@ async def test_error_3_2(self, processor, db): # mock IbetStraightBondContract_transfer = patch( - target="app.model.blockchain.token.IbetStraightBondContract.transfer", + target="app.model.blockchain.token.IbetStraightBondContract.forced_transfer", side_effect=ContractRevertError(code_msg="120601"), ) @@ -864,7 +954,8 @@ async def test_error_3_2(self, processor, db): } # - # SendTransactionError: IbetShare + # v24.9~: Transfer in batch + # SendTransactionError @pytest.mark.asyncio async def test_error_4_1(self, processor, db): _account = self.account_list[0] @@ -878,73 +969,62 @@ async def test_error_4_1(self, processor, db): account.keyfile = _account["keyfile"] db.add(account) + # Prepare data : Token + token = Token() + token.type = TokenType.IBET_STRAIGHT_BOND.value + token.token_address = self.bulk_transfer_token[0] + token.issuer_address = _account["address"] + token.abi = {} + token.tx_hash = "" + token.version = TokenVersion.V_24_09 + db.add(token) + # Prepare data : BulkTransferUpload bulk_transfer_upload = BulkTransferUpload() bulk_transfer_upload.issuer_address = _account["address"] bulk_transfer_upload.upload_id = self.upload_id_list[0] - bulk_transfer_upload.token_type = TokenType.IBET_SHARE.value + bulk_transfer_upload.token_type = TokenType.IBET_STRAIGHT_BOND.value + bulk_transfer_upload.token_address = self.bulk_transfer_token[0] bulk_transfer_upload.status = 0 # pending:0 db.add(bulk_transfer_upload) # Prepare data : BulkTransfer - bulk_transfer = BulkTransfer() - bulk_transfer.issuer_address = _account["address"] - bulk_transfer.upload_id = self.upload_id_list[0] - bulk_transfer.token_type = TokenType.IBET_SHARE.value - bulk_transfer.token_address = self.bulk_transfer_token[0] - bulk_transfer.from_address = _from_address["address"] - bulk_transfer.to_address = _to_address["address"] - bulk_transfer.amount = 1 - bulk_transfer.status = 0 # pending:0 - db.add(bulk_transfer) + for _ in range(3): + bulk_transfer = BulkTransfer() + bulk_transfer.issuer_address = _account["address"] + bulk_transfer.upload_id = self.upload_id_list[0] + bulk_transfer.token_type = TokenType.IBET_STRAIGHT_BOND.value + bulk_transfer.token_address = self.bulk_transfer_token[0] + bulk_transfer.from_address = _from_address["address"] + bulk_transfer.to_address = _to_address["address"] + bulk_transfer.amount = 1 + bulk_transfer.status = 0 + db.add(bulk_transfer) db.commit() - # mock - IbetShareContract_transfer = patch( - target="app.model.blockchain.token.IbetShareContract.transfer", + # Execute batch + with patch( + target="app.model.blockchain.token.IbetStraightBondContract.bulk_forced_transfer", side_effect=SendTransactionError(), - ) - - with IbetShareContract_transfer: - # Execute batch + ): await processor.process() - # Assertion - _bulk_transfer_upload = db.scalars( - select(BulkTransferUpload) - .where(BulkTransferUpload.upload_id == self.upload_id_list[0]) - .limit(1) - ).first() - assert _bulk_transfer_upload.status == 2 - - _bulk_transfer = db.scalars( - select(BulkTransfer) - .where( - and_( - BulkTransfer.upload_id == self.upload_id_list[0], - BulkTransfer.token_address == self.bulk_transfer_token[0], - ) - ) - .limit(1) - ).first() + # Assertion + _bulk_transfer_upload = db.scalars( + select(BulkTransferUpload).order_by(BulkTransferUpload.upload_id) + ).all() + assert _bulk_transfer_upload[0].status == 2 + + _bulk_transfer_list = db.scalars( + select(BulkTransfer).where(BulkTransfer.upload_id == self.upload_id_list[0]) + ).all() + for _bulk_transfer in _bulk_transfer_list: assert _bulk_transfer.status == 2 - _notification = db.scalars(select(Notification).limit(1)).first() - assert _notification.id == 1 - assert _notification.notice_id is not None - assert _notification.issuer_address == _account["address"] - assert _notification.priority == 1 - assert _notification.type == NotificationType.BULK_TRANSFER_ERROR - assert _notification.code == 2 - assert _notification.metainfo == { - "upload_id": self.upload_id_list[0], - "token_type": TokenType.IBET_SHARE.value, - "error_transfer_id": [1], - } - # - # ContractRevertError: IbetShare + # v24.9~: Transfer in batch + # ContractRevertError @pytest.mark.asyncio async def test_error_4_2(self, processor, db): _account = self.account_list[0] @@ -958,75 +1038,58 @@ async def test_error_4_2(self, processor, db): account.keyfile = _account["keyfile"] db.add(account) + # Prepare data : Token + token = Token() + token.type = TokenType.IBET_STRAIGHT_BOND.value + token.token_address = self.bulk_transfer_token[0] + token.issuer_address = _account["address"] + token.abi = {} + token.tx_hash = "" + token.version = TokenVersion.V_24_09 + db.add(token) + # Prepare data : BulkTransferUpload bulk_transfer_upload = BulkTransferUpload() bulk_transfer_upload.issuer_address = _account["address"] bulk_transfer_upload.upload_id = self.upload_id_list[0] - bulk_transfer_upload.token_type = TokenType.IBET_SHARE.value + bulk_transfer_upload.token_type = TokenType.IBET_STRAIGHT_BOND.value + bulk_transfer_upload.token_address = self.bulk_transfer_token[0] bulk_transfer_upload.status = 0 # pending:0 db.add(bulk_transfer_upload) # Prepare data : BulkTransfer - bulk_transfer = BulkTransfer() - bulk_transfer.issuer_address = _account["address"] - bulk_transfer.upload_id = self.upload_id_list[0] - bulk_transfer.token_type = TokenType.IBET_SHARE.value - bulk_transfer.token_address = self.bulk_transfer_token[0] - bulk_transfer.from_address = _from_address["address"] - bulk_transfer.to_address = _to_address["address"] - bulk_transfer.amount = 1 - bulk_transfer.status = 0 # pending:0 - db.add(bulk_transfer) + for _ in range(3): + bulk_transfer = BulkTransfer() + bulk_transfer.issuer_address = _account["address"] + bulk_transfer.upload_id = self.upload_id_list[0] + bulk_transfer.token_type = TokenType.IBET_STRAIGHT_BOND.value + bulk_transfer.token_address = self.bulk_transfer_token[0] + bulk_transfer.from_address = _from_address["address"] + bulk_transfer.to_address = _to_address["address"] + bulk_transfer.amount = 1 + bulk_transfer.status = 0 + db.add(bulk_transfer) db.commit() - # mock - IbetShareContract_transfer = patch( - target="app.model.blockchain.token.IbetShareContract.transfer", - side_effect=ContractRevertError(code_msg="110503"), - ) - - with IbetShareContract_transfer: - # Execute batch + # Execute batch + with patch( + target="app.model.blockchain.token.IbetStraightBondContract.bulk_forced_transfer", + side_effect=ContractRevertError(code_msg="120601"), + ): await processor.process() - # Assertion - _bulk_transfer_upload = db.scalars( - select(BulkTransferUpload) - .where(BulkTransferUpload.upload_id == self.upload_id_list[0]) - .limit(1) - ).first() - assert _bulk_transfer_upload.status == 2 - - _bulk_transfer = db.scalars( - select(BulkTransfer) - .where( - and_( - BulkTransfer.upload_id == self.upload_id_list[0], - BulkTransfer.token_address == self.bulk_transfer_token[0], - ) - ) - .limit(1) - ).first() + # Assertion + _bulk_transfer_upload = db.scalars( + select(BulkTransferUpload).order_by(BulkTransferUpload.upload_id) + ).all() + assert _bulk_transfer_upload[0].status == 2 + + _bulk_transfer_list = db.scalars( + select(BulkTransfer).where(BulkTransfer.upload_id == self.upload_id_list[0]) + ).all() + for _bulk_transfer in _bulk_transfer_list: assert _bulk_transfer.status == 2 - assert _bulk_transfer.transaction_error_code == 110503 - assert ( - _bulk_transfer.transaction_error_message - == "Transfer amount is greater than from address balance." - ) - - _notification = db.scalars(select(Notification).limit(1)).first() - assert _notification.id == 1 - assert _notification.notice_id is not None - assert _notification.issuer_address == _account["address"] - assert _notification.priority == 1 - assert _notification.type == NotificationType.BULK_TRANSFER_ERROR - assert _notification.code == 2 - assert _notification.metainfo == { - "upload_id": self.upload_id_list[0], - "token_type": TokenType.IBET_SHARE.value, - "error_transfer_id": [1], - } # # Process down after error occurred, Re-run process @@ -1050,6 +1113,7 @@ async def test_error_5(self, processor, db): bulk_transfer_upload.issuer_address = _account["address"] bulk_transfer_upload.upload_id = self.upload_id_list[i] bulk_transfer_upload.token_type = TokenType.IBET_STRAIGHT_BOND.value + bulk_transfer_upload.token_address = self.bulk_transfer_token[i] bulk_transfer_upload.status = i # pending:0, succeeded:1, failed:2 db.add(bulk_transfer_upload) @@ -1059,7 +1123,7 @@ async def test_error_5(self, processor, db): bulk_transfer.issuer_address = _account["address"] bulk_transfer.upload_id = self.upload_id_list[0] bulk_transfer.token_type = TokenType.IBET_STRAIGHT_BOND.value - bulk_transfer.token_address = self.bulk_transfer_token[i] + bulk_transfer.token_address = self.bulk_transfer_token[0] bulk_transfer.from_address = _from_address["address"] bulk_transfer.to_address = _to_address["address"] bulk_transfer.amount = 1 @@ -1070,7 +1134,7 @@ async def test_error_5(self, processor, db): # mock IbetStraightBondContract_transfer = patch( - target="app.model.blockchain.token.IbetStraightBondContract.transfer", + target="app.model.blockchain.token.IbetStraightBondContract.forced_transfer", return_value=None, ) diff --git a/tests/batch/test_processor_create_utxo.py b/tests/batch/test_processor_create_utxo.py index bc366864..ddafa3ed 100644 --- a/tests/batch/test_processor_create_utxo.py +++ b/tests/batch/test_processor_create_utxo.py @@ -31,17 +31,17 @@ from app.model.blockchain import IbetShareContract, IbetStraightBondContract from app.model.blockchain.tx_params.ibet_share import ( AdditionalIssueParams as IbetShareAdditionalIssueParams, + ForcedTransferParams as IbetShareTransferParams, ForceUnlockPrams as IbetShareForceUnlockParams, LockParams as IbetShareLockParams, RedeemParams as IbetShareRedeemParams, - TransferParams as IbetShareTransferParams, UpdateParams as IbetShareUpdateParams, ) from app.model.blockchain.tx_params.ibet_straight_bond import ( AdditionalIssueParams as IbetStraightBondAdditionalIssueParams, + ForcedTransferParams as IbetStraightBondTransferParams, LockParams as IbetStraightBondLockParams, RedeemParams as IbetStraightBondRedeemParams, - TransferParams as IbetStraightBondTransferParams, UpdateParams as IbetStraightBondUpdateParams, ) from app.model.db import UTXO, Account, Token, TokenType, TokenVersion, UTXOBlockNumber @@ -153,7 +153,7 @@ async def test_normal_1(self, mock_func, processor, db): _token_1.issuer_address = issuer_address _token_1.token_address = token_address_1 _token_1.abi = {} - _token_1.version = TokenVersion.V_24_06 + _token_1.version = TokenVersion.V_24_09 db.add(_token_1) token_address_2 = await deploy_share_token_contract( @@ -165,7 +165,7 @@ async def test_normal_1(self, mock_func, processor, db): _token_2.issuer_address = issuer_address _token_2.token_address = token_address_2 _token_2.abi = {} - _token_2.version = TokenVersion.V_24_06 + _token_2.version = TokenVersion.V_24_09 db.add(_token_2) account = Account() @@ -192,7 +192,7 @@ async def test_normal_1(self, mock_func, processor, db): _transfer_1 = IbetShareTransferParams( from_address=issuer_address, to_address=user_address_1, amount=70 ) - await IbetShareContract(token_address_2).transfer( + await IbetShareContract(token_address_2).forced_transfer( _transfer_1, issuer_address, issuer_private_key ) time.sleep(1) @@ -201,7 +201,7 @@ async def test_normal_1(self, mock_func, processor, db): _transfer_2 = IbetStraightBondTransferParams( from_address=issuer_address, to_address=user_address_1, amount=40 ) - await IbetStraightBondContract(token_address_1).transfer( + await IbetStraightBondContract(token_address_1).forced_transfer( _transfer_2, issuer_address, issuer_private_key ) time.sleep(1) @@ -210,7 +210,7 @@ async def test_normal_1(self, mock_func, processor, db): _transfer_3 = IbetStraightBondTransferParams( from_address=issuer_address, to_address=user_address_2, amount=20 ) - await IbetStraightBondContract(token_address_1).transfer( + await IbetStraightBondContract(token_address_1).forced_transfer( _transfer_3, issuer_address, issuer_private_key ) time.sleep(1) @@ -219,7 +219,7 @@ async def test_normal_1(self, mock_func, processor, db): _transfer_4 = IbetShareTransferParams( from_address=user_address_1, to_address=user_address_2, amount=10 ) - await IbetShareContract(token_address_2).transfer( + await IbetShareContract(token_address_2).forced_transfer( _transfer_4, issuer_address, issuer_private_key ) time.sleep(1) @@ -300,7 +300,7 @@ async def test_normal_2(self, mock_func, processor, db): _token_1.issuer_address = issuer_address _token_1.token_address = token_address_1 _token_1.abi = {} - _token_1.version = TokenVersion.V_24_06 + _token_1.version = TokenVersion.V_24_09 db.add(_token_1) latest_block_number = web3.eth.block_number @@ -320,30 +320,30 @@ async def test_normal_2(self, mock_func, processor, db): _transfer = IbetStraightBondTransferParams( from_address=issuer_address, to_address=user_address_1, amount=60 ) - await IbetStraightBondContract(token_address_1).transfer( + await IbetStraightBondContract(token_address_1).forced_transfer( _transfer, issuer_address, issuer_private_key ) time.sleep(1) _transfer = IbetStraightBondTransferParams( from_address=user_address_1, to_address=user_address_2, amount=10 ) - await IbetStraightBondContract(token_address_1).transfer( + await IbetStraightBondContract(token_address_1).forced_transfer( _transfer, issuer_address, issuer_private_key ) time.sleep(1) - await IbetStraightBondContract(token_address_1).transfer( + await IbetStraightBondContract(token_address_1).forced_transfer( _transfer, issuer_address, issuer_private_key ) time.sleep(1) - await IbetStraightBondContract(token_address_1).transfer( + await IbetStraightBondContract(token_address_1).forced_transfer( _transfer, issuer_address, issuer_private_key ) time.sleep(1) - await IbetStraightBondContract(token_address_1).transfer( + await IbetStraightBondContract(token_address_1).forced_transfer( _transfer, issuer_address, issuer_private_key ) time.sleep(1) - await IbetStraightBondContract(token_address_1).transfer( + await IbetStraightBondContract(token_address_1).forced_transfer( _transfer, issuer_address, issuer_private_key ) time.sleep(1) @@ -418,7 +418,7 @@ async def test_normal_3(self, mock_func, processor, db): _token_1.issuer_address = issuer_address _token_1.token_address = token_address_1 _token_1.abi = {} - _token_1.version = TokenVersion.V_24_06 + _token_1.version = TokenVersion.V_24_09 db.add(_token_1) account = Account() @@ -515,7 +515,7 @@ async def test_normal_4(self, mock_func, processor, db): _token_1.issuer_address = issuer_address _token_1.token_address = token_address_1 _token_1.abi = {} - _token_1.version = TokenVersion.V_24_06 + _token_1.version = TokenVersion.V_24_09 db.add(_token_1) account = Account() @@ -557,7 +557,7 @@ async def test_normal_4(self, mock_func, processor, db): _transfer_1 = IbetStraightBondTransferParams( from_address=issuer_address, to_address=exchange_address, amount=100 ) - await IbetStraightBondContract(token_address_1).transfer( + await IbetStraightBondContract(token_address_1).forced_transfer( _transfer_1, issuer_address, issuer_private_key ) @@ -606,7 +606,7 @@ async def test_normal_5( _token_1.issuer_address = issuer_address _token_1.token_address = token_address_1 _token_1.abi = {} - _token_1.version = TokenVersion.V_24_06 + _token_1.version = TokenVersion.V_24_09 db.add(_token_1) PersonalInfoContractTestUtils.register( @@ -791,7 +791,7 @@ async def test_normal_6(self, mock_func, processor, db): _token_1.issuer_address = issuer_address _token_1.token_address = token_address_1 _token_1.abi = {} - _token_1.version = TokenVersion.V_24_06 + _token_1.version = TokenVersion.V_24_09 db.add(_token_1) token_address_2 = await deploy_share_token_contract( @@ -803,7 +803,7 @@ async def test_normal_6(self, mock_func, processor, db): _token_2.issuer_address = issuer_address _token_2.token_address = token_address_2 _token_2.abi = {} - _token_2.version = TokenVersion.V_24_06 + _token_2.version = TokenVersion.V_24_09 db.add(_token_2) account = Account() @@ -879,7 +879,7 @@ async def test_normal_7(self, mock_func, processor, db): _token_1.issuer_address = issuer_address _token_1.token_address = token_address_1 _token_1.abi = {} - _token_1.version = TokenVersion.V_24_06 + _token_1.version = TokenVersion.V_24_09 db.add(_token_1) token_address_2 = await deploy_share_token_contract( @@ -891,7 +891,7 @@ async def test_normal_7(self, mock_func, processor, db): _token_2.issuer_address = issuer_address _token_2.token_address = token_address_2 _token_2.abi = {} - _token_2.version = TokenVersion.V_24_06 + _token_2.version = TokenVersion.V_24_09 db.add(_token_2) account = Account() @@ -1038,7 +1038,7 @@ async def test_normal_8_1(self, mock_func, processor, db): _token_1.issuer_address = issuer_address _token_1.token_address = token_address_1 _token_1.abi = {} - _token_1.version = TokenVersion.V_24_06 + _token_1.version = TokenVersion.V_24_09 db.add(_token_1) token_address_2 = await deploy_share_token_contract( @@ -1050,7 +1050,7 @@ async def test_normal_8_1(self, mock_func, processor, db): _token_2.issuer_address = issuer_address _token_2.token_address = token_address_2 _token_2.abi = {} - _token_2.version = TokenVersion.V_24_06 + _token_2.version = TokenVersion.V_24_09 db.add(_token_2) account = Account() @@ -1231,7 +1231,7 @@ async def test_normal_8_2(self, mock_func, processor, db): _token_1.issuer_address = issuer_address _token_1.token_address = token_address_1 _token_1.abi = {} - _token_1.version = TokenVersion.V_24_06 + _token_1.version = TokenVersion.V_24_09 db.add(_token_1) token_address_2 = await deploy_share_token_contract( @@ -1243,7 +1243,7 @@ async def test_normal_8_2(self, mock_func, processor, db): _token_2.issuer_address = issuer_address _token_2.token_address = token_address_2 _token_2.abi = {} - _token_2.version = TokenVersion.V_24_06 + _token_2.version = TokenVersion.V_24_09 db.add(_token_2) account = Account() @@ -1409,7 +1409,7 @@ async def test_normal_9(self, mock_func, processor, db): _token_1.issuer_address = issuer_address _token_1.token_address = token_address_1 _token_1.abi = {} - _token_1.version = TokenVersion.V_24_06 + _token_1.version = TokenVersion.V_24_09 db.add(_token_1) account = Account() @@ -1443,14 +1443,14 @@ async def test_normal_9(self, mock_func, processor, db): _transfer_1 = IbetStraightBondTransferParams( from_address=issuer_address, to_address=user_address_1, amount=90 ) - await IbetStraightBondContract(token_address_1).transfer( + await IbetStraightBondContract(token_address_1).forced_transfer( _transfer_1, issuer_address, issuer_private_key ) # Share:issuer -> user2 _transfer_3 = IbetStraightBondTransferParams( from_address=issuer_address, to_address=user_address_2, amount=1000000000000 ) - await IbetStraightBondContract(token_address_1).transfer( + await IbetStraightBondContract(token_address_1).forced_transfer( _transfer_3, issuer_address, issuer_private_key ) @@ -1545,7 +1545,7 @@ async def test_error_1(self, processor, db): _token_1.issuer_address = issuer_address _token_1.token_address = token_address_1 _token_1.abi = {} - _token_1.version = TokenVersion.V_24_06 + _token_1.version = TokenVersion.V_24_09 db.add(_token_1) db.commit() diff --git a/tests/batch/test_processor_modify_personal_info.py b/tests/batch/test_processor_modify_personal_info.py index 5580cf01..d3614a5e 100644 --- a/tests/batch/test_processor_modify_personal_info.py +++ b/tests/batch/test_processor_modify_personal_info.py @@ -214,7 +214,7 @@ async def test_normal_1(self, processor, db): token_1.issuer_address = issuer_address_1 token_1.token_address = token_contract_address_1 token_1.abi = "abi" - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) personal_info_contract_address_2 = deploy_personal_info_contract(user_1) @@ -227,7 +227,7 @@ async def test_normal_1(self, processor, db): token_2.issuer_address = issuer_address_1 token_2.token_address = token_contract_address_2 token_2.abi = "abi" - token_2.version = TokenVersion.V_24_06 + token_2.version = TokenVersion.V_24_09 db.add(token_2) token_contract_address_3 = await deploy_bond_token_contract(user_1, None) @@ -237,7 +237,7 @@ async def test_normal_1(self, processor, db): token_3.issuer_address = issuer_address_1 token_3.token_address = token_contract_address_3 token_3.abi = "abi" - token_3.version = TokenVersion.V_24_06 + token_3.version = TokenVersion.V_24_09 db.add(token_3) token_contract_address_4 = await deploy_share_token_contract(user_1, None) @@ -247,7 +247,7 @@ async def test_normal_1(self, processor, db): token_4.issuer_address = issuer_address_1 token_4.token_address = token_contract_address_4 token_4.abi = "abi" - token_4.version = TokenVersion.V_24_06 + token_4.version = TokenVersion.V_24_09 db.add(token_4) # PersonalInfo diff --git a/tests/batch/test_processor_register_personal_info.py b/tests/batch/test_processor_register_personal_info.py index b76baff2..95cd6200 100644 --- a/tests/batch/test_processor_register_personal_info.py +++ b/tests/batch/test_processor_register_personal_info.py @@ -170,7 +170,7 @@ async def test_normal_1( token_1.issuer_address = _account["address"] token_1.abi = token_contract_1.abi token_1.tx_hash = "tx_hash" - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) db.commit() @@ -215,7 +215,7 @@ async def test_normal_2( token_1.issuer_address = _account["address"] token_1.abi = token_contract_1.abi token_1.tx_hash = "tx_hash" - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) # Prepare data : BatchRegisterPersonalInfoUpload @@ -318,7 +318,7 @@ async def test_normal_3( token_1.issuer_address = _account["address"] token_1.abi = token_contract_1.abi token_1.tx_hash = "tx_hash" - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) # Prepare data : BatchRegisterPersonalInfoUpload @@ -477,7 +477,7 @@ async def test_normal_4( token_1.issuer_address = _account["address"] token_1.abi = token_contract_1.abi token_1.tx_hash = "tx_hash" - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) # Prepare data : BatchRegisterPersonalInfoUpload @@ -617,7 +617,7 @@ async def test_error_1( token_1.issuer_address = _account["address"] token_1.abi = token_contract_1.abi token_1.tx_hash = "tx_hash" - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) # Prepare data : BatchRegisterPersonalInfoUpload @@ -732,7 +732,7 @@ async def test_error_2( token_1.issuer_address = _account["address"] token_1.abi = token_contract_1.abi token_1.tx_hash = "tx_hash" - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) # Prepare data : BatchRegisterPersonalInfoUpload @@ -865,7 +865,7 @@ async def test_error_3( token_1.issuer_address = _account["address"] token_1.abi = token_contract_1.abi token_1.tx_hash = "tx_hash" - token_1.version = TokenVersion.V_24_06 + token_1.version = TokenVersion.V_24_09 db.add(token_1) # Prepare data : BatchRegisterPersonalInfoUpload diff --git a/tests/batch/test_processor_update_token.py b/tests/batch/test_processor_update_token.py index 0287066c..694c9ed0 100644 --- a/tests/batch/test_processor_update_token.py +++ b/tests/batch/test_processor_update_token.py @@ -84,7 +84,7 @@ async def test_normal_1(self, processor, db): _token_1.token_address = _token_address_1 _token_1.abi = "" _token_1.token_status = 0 - _token_1.version = TokenVersion.V_24_06 + _token_1.version = TokenVersion.V_24_09 db.add(_token_1) _update_token_1 = UpdateToken() @@ -125,7 +125,7 @@ async def test_normal_1(self, processor, db): _token_2.token_address = _token_address_2 _token_2.abi = "" _token_2.token_status = 0 - _token_2.version = TokenVersion.V_24_06 + _token_2.version = TokenVersion.V_24_09 db.add(_token_2) _update_token_2 = UpdateToken() @@ -365,7 +365,7 @@ async def test_error_1(self, processor, db): _token_1.token_address = _token_address_1 _token_1.abi = "" _token_1.token_status = 0 - _token_1.version = TokenVersion.V_24_06 + _token_1.version = TokenVersion.V_24_09 db.add(_token_1) _update_token_1 = UpdateToken() @@ -403,7 +403,7 @@ async def test_error_1(self, processor, db): _token_2.token_address = _token_address_2 _token_2.abi = "" _token_2.token_status = 0 - _token_2.version = TokenVersion.V_24_06 + _token_2.version = TokenVersion.V_24_09 db.add(_token_2) _update_token_2 = UpdateToken() @@ -582,7 +582,7 @@ async def test_error_2(self, processor, db): _token_1.token_address = _token_address_1 _token_1.abi = "" _token_1.token_status = 0 - _token_1.version = TokenVersion.V_24_06 + _token_1.version = TokenVersion.V_24_09 db.add(_token_1) _update_token_1 = UpdateToken() @@ -620,7 +620,7 @@ async def test_error_2(self, processor, db): _token_2.token_address = _token_address_2 _token_2.abi = "" _token_2.token_status = 0 - _token_2.version = TokenVersion.V_24_06 + _token_2.version = TokenVersion.V_24_09 db.add(_token_2) _update_token_2 = UpdateToken() @@ -799,7 +799,7 @@ async def test_error_3(self, processor, db): _token_1.token_address = _token_address_1 _token_1.abi = "" _token_1.token_status = 0 - _token_1.version = TokenVersion.V_24_06 + _token_1.version = TokenVersion.V_24_09 db.add(_token_1) _update_token_1 = UpdateToken() @@ -837,7 +837,7 @@ async def test_error_3(self, processor, db): _token_2.token_address = _token_address_2 _token_2.abi = "" _token_2.token_status = 0 - _token_2.version = TokenVersion.V_24_06 + _token_2.version = TokenVersion.V_24_09 db.add(_token_2) _update_token_2 = UpdateToken() @@ -1023,7 +1023,7 @@ async def test_error_4(self, processor, db): _token_1.token_address = _token_address_1 _token_1.abi = "" _token_1.token_status = 0 - _token_1.version = TokenVersion.V_24_06 + _token_1.version = TokenVersion.V_24_09 db.add(_token_1) _update_token_1 = UpdateToken() @@ -1061,7 +1061,7 @@ async def test_error_4(self, processor, db): _token_2.token_address = _token_address_2 _token_2.abi = "" _token_2.token_status = 0 - _token_2.version = TokenVersion.V_24_06 + _token_2.version = TokenVersion.V_24_09 db.add(_token_2) _update_token_2 = UpdateToken()