def initial_pool_state_from_dict(state_dict: Dict, owner_pubkey: G1Element, owner_puzzle_hash: bytes32) -> PoolState:
    state_str = state_dict['state']
    singleton_state: PoolSingletonState = PoolSingletonState[state_str]
    if (singleton_state == SELF_POOLING):
        target_puzzle_hash = owner_puzzle_hash
        pool_url: str = ''
        relative_lock_height = uint32(0)
    elif (singleton_state == FARMING_TO_POOL):
        target_puzzle_hash = bytes32(hexstr_to_bytes(state_dict['target_puzzle_hash']))
        pool_url = state_dict['pool_url']
        relative_lock_height = uint32(state_dict['relative_lock_height'])
    else:
        raise ValueError('Initial state must be SELF_POOLING or FARMING_TO_POOL')
    assert (relative_lock_height is not None)
    return create_pool_state(singleton_state, target_puzzle_hash, owner_pubkey, pool_url, relative_lock_height)
def initial_pool_state_from_dict(state_dict: Dict, owner_pubkey: G1Element, owner_puzzle_hash: bytes32) -> PoolState:
    state_str = state_dict['state']
    singleton_state: PoolSingletonState = PoolSingletonState[state_str]
    if (singleton_state == SELF_POOLING):
        target_puzzle_hash = owner_puzzle_hash
        pool_url: str = 
        relative_lock_height = uint32(0)
    elif (singleton_state == FARMING_TO_POOL):
        target_puzzle_hash = bytes32(hexstr_to_bytes(state_dict['target_puzzle_hash']))
        pool_url = state_dict['pool_url']
        relative_lock_height = uint32(state_dict['relative_lock_height'])
    else:
        raise ValueError('Initial state must be SELF_POOLING or FARMING_TO_POOL')
    assert (relative_lock_height is not None)
    return create_pool_state(singleton_state, target_puzzle_hash, owner_pubkey, pool_url, relative_lock_height)