PokemonGoF / PokemonGo-Bot

The Pokemon Go Bot, baking with community.
MIT License
3.86k stars 1.54k forks source link

Bot is stopping/crashing when "TransferPokemon" in config.json is set to true #6177

Closed twisteddebian closed 7 years ago

twisteddebian commented 7 years ago

Expected Behavior

The expected behavior is that the bot starts and that it only keeps one Pokémon of each type with the best CP, all Pokémon of this type with lower CP will be transfered.

Actual Behavior

If I enable the task "Transfer Pokémon" and start the bot I get this error:

see below in Output when issue occurred

Your FULL config.json (remove your username, password, gmapkey and any other private info)

{
    "websocket_server": true,
    "heartbeat_threshold": 10,
    "enable_social": false,
    "check_niantic_api": true,
    "solve_captcha": false,
    "live_config_update": {
        "enabled": false,
        "tasks_only": false
    },
    "tasks": [
        {
            "type": "TelegramTask",
            "config": {
                "enabled": true,
                "master": "user",
                "password": "pass",
                "// old syntax, still supported: alert_catch": [
                    "all"
                ],
                "// new syntax:": {},
                "alert_catch": {
                    "all": {
                        "operator": "and",
                        "cp": 1300,
                        "iv": 0.95
                    },
                    "Snorlax": {
                        "operator": "or",
                        "cp": 900,
                        "iv": 0.9
                    }
                }
            }
        },
        {
            "type": "DiscordTask",
            "config": {
                "enabled": false,
                "master": null,
                "// old syntax, still supported: alert_catch": [
                    "all"
                ],
                "// new syntax:": {},
                "alert_catch": {
                    "all": {
                        "operator": "and",
                        "cp": 1300,
                        "iv": 0.95
                    },
                    "Snorlax": {
                        "operator": "or",
                        "cp": 900,
                        "iv": 0.9
                    }
                }
            }
        },
        {
            "//NOTE: This task MUST be placed on the top of task list": {},
            "type": "RandomAlivePause",
            "config": {
                "enabled": false,
                "min_duration": "00:00:10",
                "max_duration": "00:10:00",
                "min_interval": "00:05:00",
                "max_interval": "01:30:00"
            }
        },
        {
            "type": "HandleSoftBan"
        },
        {
            "type": "RandomPause",
            "config": {
                "enabled": false,
                "min_duration": "00:00:10",
                "max_duration": "00:10:00",
                "min_interval": "00:10:00",
                "max_interval": "02:00:00"
            }
        },
        {
            "type": "CompleteTutorial",
            "config": {
                "enabled": false,
                "// set a name": "",
                "nickname": "",
                "// 0 = No Team, 1 = Blue, 2 = Red, 3 = Yellow": "",
                "team": 0
            }
        },
        {
            "type": "CollectLevelUpReward",
            "config": {
                "collect_reward": true,
                "level_limit": -1
            }
        },
        {
            "type": "BuddyPokemon",
            "config": {
                "enabled": true,
                "buddy_list": "dratini, magikarp",
                "best_in_family": true,
                "// candy_limit = 0 means no limit, so it will never change current buddy": {},
                "candy_limit": 0,
                "candy_limit_absolute": 0,
                "// force_first_change = true will always change buddy at start removing current one": {},
                "force_first_change": false,
                "buddy_change_wait_min": 3,
                "buddy_change_wait_max": 5,
                "min_interval": 120
            }
        },
        {
            "type": "IncubateEggs",
            "config": {
                "enabled": true,
                "infinite_longer_eggs_first": false,
                "infinite_random_eggs": false,
                "breakable_longer_eggs_first": true,
                "min_interval": 120,
                "infinite": [
                    2,
                    5,
                    10
                ],
                "breakable": [
                    2,
                    5,
                    10
                ]
            }
        },
        {
            "type": "UpdateLiveStats",
            "config": {
                "enabled": false,
                "min_interval": 10,
                "stats": [
                    "username",
                    "uptime",
                    "stardust_earned",
                    "xp_earned",
                    "xp_per_hour",
                    "stops_visited",
                    "total_stardust"
                ],
                "terminal_log": true,
                "terminal_title": true
            }
        },
        {
            "type": "UpdateLiveInventory",
            "config": {
                "enabled": false,
                "min_interval": 120,
                "show_all_multiple_lines": false,
                "items": [
                    "pokemon_bag",
                    "space_info",
                    "pokeballs",
                    "greatballs",
                    "ultraballs",
                    "razzberries",
                    "luckyegg"
                ]
            }
        },
        {
            "type": "UpdateHashStats",
            "config": {
                "enabled": true,
                "min_interval": 60,
                "stats" : ["period", "remaining", "maximum", "expiration"]
            }
        },
        {
            "type": "ShowBestPokemon",
            "config": {
                "enabled": true,
                "min_interval": 60,
                "amount": 5,
                "order_by": "cp",
                "info_to_show": [
                    "cp",
                    "ivcp",
                    "dps",
                    "hp"
                ]
            }
        },
        {
            "type": "TransferPokemon",
            "config": {
                "enabled": true,
                "min_free_slot": 5,
                "transfer_wait_min": 3,
                "transfer_wait_max": 5
            }
        },
        {
            "type": "NicknamePokemon",
            "config": {
                "enabled": false,
                "nickname_above_iv": 0.9,
                "nickname_template": "{iv_pct}-{iv_ads}",
                "nickname_wait_min": 3,
                "nickname_wait_max": 5
            }
        },
        {
            "type": "EvolvePokemon",
            "config": {
                "enabled": true,
                "log_interval": 120,
                "// evolve only pidgey and drowzee": "",
                "// evolve_list": [
                    "pidgey, drowzee",
                    "all"
                ],
                "// donot_evolve_list": [
                    "none",
                    "pidgey, drowzee"
                ],
                "// evolve all but pidgey and drowzee": "",
                "evolve_list": "all",
                "donot_evolve_list": "none",
                "first_evolve_by": "cp",
                "evolve_above_cp": 500,
                "evolve_above_iv": 0.8,
                "logic": "or",
                "min_evolve_speed": 25,
                "max_evolve_speed": 30,
                "min_pokemon_to_be_evolved": 1,
                "use_lucky_egg": false
            }
        },
        {
            "type": "UseIncense",
            "config": {
                "use_incense": false,
                "use_order": [
                    "ordinary",
                    "spicy",
                    "cool",
                    "floral"
                ]
            }
        },
        {
            "type": "RecycleItems",
            "config": {
                "enabled": true,
                "min_empty_space": 15,
                "max_balls_keep": 200,
                "max_potions_keep": 0,
                "max_berries_keep": 0,
                "max_revives_keep": 0,
                "item_filter": {
                    "Pokeball": {
                        "keep": 200
                    },
                    "Potion": {
                        "keep": 0
                    },
                    "Super Potion": {
                        "keep": 0
                    },
                    "Hyper Potion": {
                        "keep": 0
                    },
                    "Revive": {
                        "keep": 0
                    },
                    "Razz Berry": {
                        "keep": 20
                    }
                },
                "recycle_wait_min": 3,
                "recycle_wait_max": 5,
                "recycle_force": true,
                "recycle_force_min": "00:01:00",
                "recycle_force_max": "00:05:00"
            }
        },
        {
            "type": "CatchLimiter",
            "config": {
                "enabled": false,
                "min_balls": 20,
                "duration": 15
            }
        },
        {
            "type": "Sniper",
            "config": {
                "enabled": false,
                "mode": "social",
                "bullets": 1,
                "homing_shots": true,
                "cooldown_enabled": false,
                "loiter_after_snipe": false,
                "special_iv": 100,
                "order": [
                    "missing",
                    "vip",
                    "priority"
                ],
         "teleport_back_to_last_location": false,
                "sources": [
                    {
                        "enabled": false,
                        "url": "http://localhost:5000/raw_data",
                        "timeout": 3,
                        "key": "pokemons",
                        "mappings": {
                            "id": {
                                "param": "pokemon_id"
                            },
                            "name": {
                                "param": "pokemon_name"
                            },
                            "latitude": {
                                "param": "latitude"
                            },
                            "longitude": {
                                "param": "longitude"
                            },
                            "expiration": {
                                "param": "disappear_time",
                                "format": "milliseconds"
                            }
                        }
                    },
                    {
                        "enabled": false,
                        "url": "https://pokewatchers.com/grab/",
                        "timeout": 10,
                        "mappings": {
                            "iv": {
                                "param": "iv"
                            },
                            "id": {
                                "param": "pid"
                            },
                            "name": {
                                "param": "pokemon"
                            },
                            "latitude": {
                                "param": "cords"
                            },
                            "longitude": {
                                "param": "cords"
                            },
                            "expiration": {
                                "param": "timeend",
                                "format": "seconds"
                            }
                        }
                    },
                    {
                        "enabled": false,
                        "url": "http://pokesnipers.com/api/v1/pokemon.json",
                        "timeout": 10,
                        "key": "results",
                        "mappings": {
                            "iv": {
                                "param": "iv"
                            },
                            "name": {
                                "param": "name"
                            },
                            "latitude": {
                                "param": "coords"
                            },
                            "longitude": {
                                "param": "coords"
                            },
                            "expiration": {
                                "param": "until",
                                "format": "utc"
                            }
                        }
                    }
                ],
                "catch": {
                    "Snorlax": 1000,
                    "Dragonite": 1000,
                    "Growlithe": 600,
                    "Clefairy": 500,
                    "Kabuto": 500,
                    "Dratini": 500,
                    "Dragonair": 500,
                    "Mr. Mime": 500,
                    "Magmar": 500,
                    "Electabuzz": 500,
                    "Tangela": 500,
                    "Tauros": 500,
                    "Primeape": 500,
                    "Chansey": 500,
                    "Pidgey": 100,
                    "Caterpie": 100,
                    "Weedle": 100
                }
            }
        },
        {
            "type": "CatchPokemon",
            "config": {
                "enabled": true,
                "catch_visible_pokemon": true,
                "catch_lured_pokemon": true,
                "catch_incensed_pokemon": true,
                "min_ultraball_to_keep": 5,
                "berry_threshold": 0.35,
        "use_pinap_on_vip": false,
        "pinap_on_level_below": 0,
        "pinap_operator": "or",
        "pinap_ignore_threshold": false,
        "smart_pinap_enabled": true,
        "smart_pinap_threshold": 0.85,
        "smart_pinap_to_keep": 3,
                "vip_berry_threshold": 0.9,
                "treat_unseen_as_vip": true,
                "daily_catch_limit": 500,
        "exit_on_limit_reached": false,
                "vanish_settings": {
                    "consecutive_vanish_limit": 10,
                    "rest_duration_min": "02:00:00",
                    "rest_duration_max": "04:00:00"
                },
                "catch_throw_parameters": {
                    "excellent_rate": 0.1,
                    "great_rate": 0.5,
                    "nice_rate": 0.3,
                    "normal_rate": 0.1,
                    "spin_success_rate": 0.6,
                    "hit_rate": 0.75
                },
                "catch_simulation": {
                    "flee_count": 3,
                    "flee_duration": 2,
                    "catch_wait_min": 3,
                    "catch_wait_max": 6,
                    "berry_wait_min": 3,
                    "berry_wait_max": 5,
                    "changeball_wait_min": 3,
                    "changeball_wait_max": 5,
                    "newtodex_wait_min": 20,
                    "newtodex_wait_max": 30
                }
            }
        },
        {
            "type": "SpinFort",
            "config": {
                "enabled": true,
                "spin_wait_min": 3,
                "spin_wait_max": 5,
                "daily_spin_limit": 1900,
        "use_lure": false
            }
        },
        {
            "type": "UpdateWebInventory",
            "config": {
                "enabled": true
            }
        },
        {
            "type": "GymPokemon",
            "config": {
                "enabled": false,
                "order_by": "cp",
                "min_interval":360,
                "min_recheck":30,
                "max_recheck":120,
                "chain_fill_gyms": true,
                "ignore_max_cp_pokemon": ["Blissey"],
                "never_place": ["Machamp"],
                "leave_at_least_spots": 1,
                "take_at_most": 10,
                "pick_random_pokemon": true,
                "can_be_disabled_by_catch_limter": false
            }
        },
        {
            "type": "MoveToFort",
            "config": {
                "enabled": true,
                "lure_attraction": true,
                "lure_max_distance": 2000,
                "walker": "StepWalker",
                "log_interval": 5
            }
        },
        {
            "type": "FollowSpiral",
            "config": {
                "enabled": true,
                "diameter": 4,
                "step_size": 70
            }
        }

     ],
    "map_object_cache_time": 5,
    "forts": {
        "avoid_circles": true,
        "max_circle_size": 50,
        "cache_recent_forts": true
    },
    "pokemon_bag": {
        "// if 'show_at_start' is true, it will log all the pokemons in the bag (not eggs) at bot start": {},
        "show_at_start": true,
        "// if 'show_count' is true, it will show the amount of each pokemon (minimum 1)": {},
        "show_count": false,
        "// if 'show_candies' is true, it will show the amount of candies for each pokemon": {},
        "show_candies": false,
        "// 'pokemon_info' parameter define which info to show for each pokemon": {},
        "// the available options are": {},
        "// ['cp', 'iv_ads', 'iv_pct', 'ivcp', 'ncp', 'level', 'hp', 'moveset', 'dps']": {},
        "pokemon_info": [
            "cp",
            "iv_pct"
        ]
    },
    "walk_max": 9.2,
    "walk_min": 6.12,
    "alt_min": 500,
    "alt_max": 1000,
    "sleep_schedule": {
        "enabled": true,
        "enable_reminder": false,
        "reminder_interval": 600,
        "entries": [
            {
                "enabled": true,
                "time": "00:10",
                "duration": "3:30",
                "time_random_offset": "00:30",
                "duration_random_offset": "00:30",
                "wake_up_at_location": ""
            },
            {
                "enabled": true,
                "time": "13:45",
                "duration": "3:00",
                "time_random_offset": "01:00",
                "duration_random_offset": "00:30",
                "wake_up_at_location": ""
            }
        ]
    },
    "gps_default_altitude": 8,
    "replicate_gps_xy_noise": false,
    "replicate_gps_z_noise": false,
    "gps_xy_noise_range": 1.25E-4,
    "gps_z_noise_range": 12.5,
    "debug": false,
    "test": false,
    "walker_limit_output": false,
    "health_record": true,
    "location_cache": true,
    "distance_unit": "km",
    "reconnecting_timeout": 15,
    "logging": {
        "color": true,
        "show_datetime": true,
        "show_process_name": true,
        "show_log_level": true,
        "show_thread_name": false
    },
    "catch": {
        "any": {
            "candy_threshold": 400,
            "catch_above_cp": 0,
            "catch_above_iv": 0,
            "logic": "or"
        },
        "// Example of always catching Rattata:": {},
        "// Rattata": {
            "always_catch": true
        },
        "// Example of catching only Diglett and Horsea needed for Bubblestrat; you might want to also configure sniping (MoveToMap - helps you get hold of neede pokemons faster) and disable SpinFort (or you will advance past level 2 which will make it impossible to catch level-1 pokemons)": {},
        "Diglett": {
            "candy_threshold": 1,
            "catch_below_cp": 11,
            "catch_above_iv": 0,
            "logic": "and",
            "fast_attack": [
                "Scratch",
                "Mud Slap"
            ]
        },
        "Horsea": {
            "candy_threshold": 1,
            "catch_below_cp": 11,
            "catch_above_iv": 0,
            "logic": "and",
            "fast_attack": [
                "Bubble"
            ]
        },
        "// Example of catching Vaporeon only with Water Gun and Hydro Pump": {},
        "Vaporeon": {
            "catch_above_iv": 0.99,
            "charged_attack": [
                "Hydro Pump"
            ],
            "fast_attack": [
                "Water Gun"
            ]
        }
    },
    "release": {
        "any": {
            "release_below_cp": 500,
            "release_below_iv": 0,
            "release_below_ivcp": 0,
            "logic": "or"
        },
        "// Example of always releasing Rattata:": {},
        "// Rattata": {
            "always_release": true
        },
        "// Example of keeping 3 stronger (based on CP) Pidgey:": {},
        "// Pidgey": {
            "keep_best_cp": 3
        },
        "// Example of keeping 2 best (based on IV) Zubat:": {},
        "// Zubat": [
            {
                "keep_best_iv": 2
            },
            {
                "keep_best_cp": 2,
                "keep_best_iv": 3
            },
            {
                "keep_best_custom": "iv, cp, hp_max",
                "amount": 2
            }
        ],
        "// Keep no more than 3 best IV pokemon for every pokemon type": {},
        "//any": [
            {
                "keep_best_iv": 1
            },
            {
                "keep_best_ivcp": 1
            }
        ],
        "// Keep no more than 3 best IVCP pokemon for every pokemon type": {},
        "// Discard all pokemon in bag except 100 pokemon with best CP": {},
        "// all": {
            "keep_best_cp": 100
        },
        "// Example of keeping the 2 strongest (based on CP) and 3 best (based on IV) Zubat:": {},
        "// Example of custom order of static criterion": {}
    },
    "vips": {
        "Any pokemon put here directly force to use Berry & Best Ball to capture, to secure the capture rate": {},
        "any": {
            "catch_above_cp": 1200,
            "catch_above_iv": 0.9,
            "logic": "or"
        },
        "Lapras": {},
        "Moltres": {},
        "Zapdos": {},
        "Articuno": {},
        "// S-Tier pokemons (if pokemon can be evolved into tier, list the representative)": {},
        "Mewtwo": {},
        "Dragonite": {},
        "Snorlax": {},
        "// Mew evolves to Mewtwo": {},
        "Mew": {},
        "Arcanine": {},
        "Vaporeon": {},
        "Gyarados": {},
        "Exeggutor": {},
        "Muk": {},
        "Weezing": {},
        "Flareon": {}
    },
    "websocket": {
        "start_embedded_server": true,
        "server_url": "127.0.0.1:4000"
    }
}

Output when issue occurred

Traceback (most recent call last):
  File "pokecli.py", line 884, in <module>
    main()
  File "pokecli.py", line 206, in main
    bot.tick()
  File "/home/antongericke44/PokemonGo-Bot/pokemongo_bot/__init__.py", line 834, in tick
    if worker.work() == WorkerResult.RUNNING:
  File "/home/antongericke44/PokemonGo-Bot/pokemongo_bot/cell_workers/transfer_pokemon.py", line 32, in work
    self._release_pokemon_worst_in_group(group, pokemon_name)
  File "/home/antongericke44/PokemonGo-Bot/pokemongo_bot/cell_workers/transfer_pokemon.py", line 60, in _release_pokemon_worst_in_group
    pokemon_name)
  File "/home/antongericke44/PokemonGo-Bot/pokemongo_bot/cell_workers/transfer_pokemon.py", line 318, in _validate_keep_best_config
    keep_best_cp = release_config.get('keep_best_cp', 0)
AttributeError: 'list' object has no attribute 'get'
[2017-08-01 10:55:02] [sentry.errors] [ERROR] Sentry responded with an error: 'ascii' codec can't decode byte 0x9c in position 1: ordinal not in range(128) (url: https://app.getsentry.com/api/90254/store/)
Traceback (most recent call last):
  File "/home/antongericke44/PokemonGo-Bot/local/lib/python2.7/site-packages/raven/transport/threaded.py", line 174, in send_sync
    super(ThreadedHTTPTransport, self).send(data, headers)
  File "/home/antongericke44/PokemonGo-Bot/local/lib/python2.7/site-packages/raven/transport/http.py", line 47, in send
    ca_certs=self.ca_certs,
  File "/home/antongericke44/PokemonGo-Bot/local/lib/python2.7/site-packages/raven/utils/http.py", line 66, in urlopen
    return opener.open(url, data, timeout)
  File "/home/antongericke44/PokemonGo-Bot/local/lib/python2.7/site-packages/future/backports/urllib/request.py", line 494, in open
    response = self._open(req, data)
  File "/home/antongericke44/PokemonGo-Bot/local/lib/python2.7/site-packages/future/backports/urllib/request.py", line 512, in _open
    '_open', req)
  File "/home/antongericke44/PokemonGo-Bot/local/lib/python2.7/site-packages/future/backports/urllib/request.py", line 466, in _call_chain
    result = func(*args)
  File "/home/antongericke44/PokemonGo-Bot/local/lib/python2.7/site-packages/raven/utils/http.py", line 46, in https_open
    return self.do_open(ValidHTTPSConnection, req)
  File "/home/antongericke44/PokemonGo-Bot/local/lib/python2.7/site-packages/future/backports/urllib/request.py", line 1284, in do_open
    h.request(req.get_method(), req.selector, req.data, headers)
  File "/usr/lib/python2.7/httplib.py", line 1042, in request
    self._send_request(method, url, body, headers)
  File "/usr/lib/python2.7/httplib.py", line 1082, in _send_request
    self.endheaders(body)
  File "/usr/lib/python2.7/httplib.py", line 1038, in endheaders
    self._send_output(message_body)
  File "/usr/lib/python2.7/httplib.py", line 880, in _send_output
    msg += message_body
UnicodeDecodeError: 'ascii' codec can't decode byte 0x9c in position 1: ordinal not in range(128)
[2017-08-01 10:55:02] [sentry.errors.uncaught] [ERROR] [u"AttributeError: 'list' object has no attribute 'get'", u'  File "pokecli.py", line 884, in <module>', u'  File "pokecli.py", line 206, in main', u'  File "pokemongo_bot/__init__.py", line 834, in tick', u'  File "pokemongo_bot/cell_workers/transfer_pokemon.py", line 32, in work', u'  File "pokemongo_bot/cell_workers/transfer_pokemon.py", line 60, in _release_pokemon_worst_in_group', u'  File "pokemongo_bot/cell_workers/transfer_pokemon.py", line 318, in _validate_keep_best_config']
Tue Aug 1 10:55:02 UTC 2017 Pokebot  Stopped.
Press any button or wait 20 seconds to continue.

Steps to Reproduce

Go into the config.json and enable "TransferPokemon". I did this in 2 different VMs with a clean installation, same error.

Other Information

OS: Debian GNU/Linux 9 (stretch) Branch: master Git Commit: e974e276d6d52375cb24882c1d1f40ce731f2fcd Python Version: Python 2.7.13 Any other relevant files/configs (eg: path files): none

camnomis commented 7 years ago

I was just about to post something about an issue with Transfer, not the same, my problem is that Transfer just doesn't work, bot runs when set to true but no Pokemon are ever transfered

https://www.dropbox.com/s/hh8obl1t8m4vhgh/config.json

Jcolomar commented 7 years ago

"release": { "any": { "release_below_cp": 500, "release_below_iv": 0, "release_below_ivcp": 0, "logic": "or"

This have no sense. It should be "release_above"

camnomis commented 7 years ago

I assume the "release_below_ivcp": 0, means all will be released, if they meet the later conditions

{ "keep_best_iv": 1 }, { "keep_best_ivcp": 1 }

Jcolomar commented 7 years ago

have u test it? i dont need it coz i have pokemon_optimicer now, but u remember i had this issue some time ago

twisteddebian commented 7 years ago

I tried many different things now, but the problem persists. I changed "release_below_cp" to "release_above_cp" and set these values to 0, so that I only keep 1 Pokémon with the best ivcp of each type.

Edit : Now I added the "pokemon_optimizer" to my config and deleted other tasks, like the "TransferPokemon", the "NicknamePokemon" and "EvolvePokemon" and now it works fine..

Something's wrong with the "TransferPokemon" task in the default config file.

twisteddebian commented 7 years ago

Here is my modified config now:

{
   "websocket_server":true,
   "heartbeat_threshold":10,
   "enable_social":false,
   "check_niantic_api":true,
   "solve_captcha":false,
   "live_config_update":{
      "enabled":false,
      "tasks_only":false
   },
   "tasks":[
      {
         "//NOTE: This task MUST be placed on the top of task list":{

         },
         "type":"RandomAlivePause",
         "config":{
            "enabled":true,
            "min_duration":"00:00:10",
            "max_duration":"00:10:00",
            "min_interval":"00:05:00",
            "max_interval":"01:30:00"
         }
      },
      {
         "type":"TelegramTask",
         "config":{
            "enabled":false,
            "master":null,
            "password":null,
            "// old syntax, still supported: alert_catch":[
               "all"
            ],
            "// new syntax:":{

            },
            "alert_catch":{
               "all":{
                  "operator":"and",
                  "cp":1300,
                  "iv":0.95
               },
               "Snorlax":{
                  "operator":"or",
                  "cp":900,
                  "iv":0.9
               }
            }
         }
      },
      {
         "type":"DiscordTask",
         "config":{
            "enabled":false,
            "master":null,
            "// old syntax, still supported: alert_catch":[
               "all"
            ],
            "// new syntax:":{

            },
            "alert_catch":{
               "all":{
                  "operator":"and",
                  "cp":1300,
                  "iv":0.95
               },
               "Snorlax":{
                  "operator":"or",
                  "cp":900,
                  "iv":0.9
               }
            }
         }
      },
      {
         "type":"PokemonOptimizer",
         "config":{
            "enabled":true,
            "bulktransfer_enabled":true,
            "max_bulktransfer":20,
            "min_slots_left":5,
            "action_wait_min":3,
            "action_wait_max":5,
            "transfer":true,
            "evolve":true,
            "debug":false,
            "evolve_to_final":true,
            "evolve_time":25,
            "evolve_for_xp":true,
            "evolve_only_with_lucky_egg":false,
            "evolve_count_for_lucky_egg":80,
            "may_use_lucky_egg":true,
            "may_evolve_favorites":true,
            "may_upgrade_favorites":true,
            "may_unfavor_pokemon":false,
            "upgrade":true,
            "upgrade_level":30,
            "groups":{
               "gym":[
                  "Dragonite",
                  "Snorlax",
                  "Lapras",
                  "Arcanine"
               ]
            },
            "rules":[
               {
                  "// Of all Pokemon with less than 124 candies, buddy the Pokemon having the highest maximum cp":{

                  },
                  "mode":"overall",
                  "top":1,
                  "sort":[
                     "max_cp",
                     "cp"
                  ],
                  "keep":{
                     "candy":-124
                  },
                  "evolve":true,
                  "buddy":true
               },
               {
                  "// Buddy the Pokemon having the less candies. In case no Pokemon match first rule":{

                  },
                  "mode":"overall",
                  "top":1,
                  "sort":[
                     "-candy",
                     "max_cp",
                     "cp"
                  ],
                  "evolve":false,
                  "buddy":true
               },
               {
                  "mode":"by_pokemon",
                  "names":[
                     "gym"
                  ],
                  "top":3,
                  "sort":[
                     "iv",
                     "ncp"
                  ],
                  "evolve":{
                     "iv":0.9,
                     "ncp":0.9
                  },
                  "upgrade":{
                     "iv":0.9,
                     "ncp":0.9
                  }
               },
               {
                  "// Keep best iv of each family and evolve it if its iv is greater than 0.9":{

                  },
                  "mode":"by_family",
                  "top":1,
                  "sort":[
                     "iv"
                  ],
                  "evolve":{
                     "iv":0.9
                  }
               },
               {
                  "// Keep best ncp of each family and evolve it if its ncp is greater than 0.9":{

                  },
                  "mode":"by_family",
                  "top":1,
                  "sort":[
                     "ncp"
                  ],
                  "evolve":{
                     "ncp":0.9
                  }
               },
               {
                  "// Keep best cp of each family but do not evolve it":{

                  },
                  "mode":"by_family",
                  "top":1,
                  "sort":[
                     "cp"
                  ],
                  "evolve":false
               },
               {
                  "// For Pokemon of final evolution and with iv greater than 0.9, keep the best dps_attack":{

                  },
                  "mode":"by_pokemon",
                  "names":[
                     "!with_next_evolution"
                  ],
                  "top":1,
                  "sort":[
                     "dps_attack",
                     "iv"
                  ],
                  "keep":{
                     "iv":0.9
                  }
               }
            ]
         }
      },
      {
         "type":"HandleSoftBan"
      },
      {
         "type":"RandomPause",
         "config":{
            "enabled":false,
            "min_duration":"00:00:10",
            "max_duration":"00:10:00",
            "min_interval":"00:10:00",
            "max_interval":"02:00:00"
         }
      },
      {
         "type":"CompleteTutorial",
         "config":{
            "enabled":false,
            "// set a name":"",
            "nickname":"",
            "// 0 = No Team, 1 = Blue, 2 = Red, 3 = Yellow":"",
            "team":0
         }
      },
      {
         "type":"CollectLevelUpReward",
         "config":{
            "collect_reward":true,
            "level_limit":-1
         }
      },
      {
         "type":"IncubateEggs",
         "config":{
            "enabled":true,
            "infinite_longer_eggs_first":false,
            "infinite_random_eggs":false,
            "breakable_longer_eggs_first":true,
            "min_interval":120,
            "infinite":[
               2,
               5,
               10
            ],
            "breakable":[
               2,
               5,
               10
            ]
         }
      },
      {
         "type":"UpdateLiveStats",
         "config":{
            "enabled":false,
            "min_interval":10,
            "stats":[
               "username",
               "uptime",
               "stardust_earned",
               "xp_earned",
               "xp_per_hour",
               "stops_visited",
               "total_stardust"
            ],
            "terminal_log":true,
            "terminal_title":true
         }
      },
      {
         "type":"UpdateLiveInventory",
         "config":{
            "enabled":false,
            "min_interval":120,
            "show_all_multiple_lines":false,
            "items":[
               "pokemon_bag",
               "space_info",
               "pokeballs",
               "greatballs",
               "ultraballs",
               "razzberries",
               "luckyegg"
            ]
         }
      },
      {
         "type":"UpdateHashStats",
         "config":{
            "enabled":true,
            "min_interval":60,
            "stats":[
               "period",
               "remaining",
               "maximum",
               "expiration"
            ]
         }
      },
      {
         "type":"ShowBestPokemon",
         "config":{
            "enabled":true,
            "min_interval":60,
            "amount":5,
            "order_by":"cp",
            "info_to_show":[
               "cp",
               "ivcp",
               "dps",
               "hp"
            ]
         }
      },
      {
         "type":"UseIncense",
         "config":{
            "use_incense":false,
            "use_order":[
               "ordinary",
               "spicy",
               "cool",
               "floral"
            ]
         }
      },
      {
         "type":"RecycleItems",
         "config":{
            "enabled":true,
            "min_empty_space":15,
            "max_balls_keep":150,
            "max_potions_keep":50,
            "max_berries_keep":70,
            "max_revives_keep":70,
            "item_filter":{
               "Pokeball":{
                  "keep":100
               },
               "Potion":{
                  "keep":10
               },
               "Super Potion":{
                  "keep":20
               },
               "Hyper Potion":{
                  "keep":30
               },
               "Revive":{
                  "keep":30
               },
               "Razz Berry":{
                  "keep":100
               }
            },
            "recycle_wait_min":3,
            "recycle_wait_max":5,
            "recycle_force":true,
            "recycle_force_min":"00:01:00",
            "recycle_force_max":"00:05:00"
         }
      },
      {
         "type":"CatchLimiter",
         "config":{
            "enabled":false,
            "min_balls":20,
            "duration":15
         }
      },
      {
         "type":"Sniper",
         "config":{
            "enabled":false,
            "mode":"social",
            "bullets":1,
            "homing_shots":true,
            "cooldown_enabled":false,
            "loiter_after_snipe":false,
            "special_iv":100,
            "order":[
               "missing",
               "vip",
               "priority"
            ],
            "teleport_back_to_last_location":false,
            "sources":[
               {
                  "enabled":false,
                  "url":"http://localhost:5000/raw_data",
                  "timeout":3,
                  "key":"pokemons",
                  "mappings":{
                     "id":{
                        "param":"pokemon_id"
                     },
                     "name":{
                        "param":"pokemon_name"
                     },
                     "latitude":{
                        "param":"latitude"
                     },
                     "longitude":{
                        "param":"longitude"
                     },
                     "expiration":{
                        "param":"disappear_time",
                        "format":"milliseconds"
                     }
                  }
               },
               {
                  "enabled":false,
                  "url":"https://pokewatchers.com/grab/",
                  "timeout":10,
                  "mappings":{
                     "iv":{
                        "param":"iv"
                     },
                     "id":{
                        "param":"pid"
                     },
                     "name":{
                        "param":"pokemon"
                     },
                     "latitude":{
                        "param":"cords"
                     },
                     "longitude":{
                        "param":"cords"
                     },
                     "expiration":{
                        "param":"timeend",
                        "format":"seconds"
                     }
                  }
               },
               {
                  "enabled":false,
                  "url":"http://pokesnipers.com/api/v1/pokemon.json",
                  "timeout":10,
                  "key":"results",
                  "mappings":{
                     "iv":{
                        "param":"iv"
                     },
                     "name":{
                        "param":"name"
                     },
                     "latitude":{
                        "param":"coords"
                     },
                     "longitude":{
                        "param":"coords"
                     },
                     "expiration":{
                        "param":"until",
                        "format":"utc"
                     }
                  }
               }
            ],
            "catch":{
               "Snorlax":1000,
               "Dragonite":1000,
               "Growlithe":600,
               "Clefairy":500,
               "Kabuto":500,
               "Dratini":500,
               "Dragonair":500,
               "Mr. Mime":500,
               "Magmar":500,
               "Electabuzz":500,
               "Tangela":500,
               "Tauros":500,
               "Primeape":500,
               "Chansey":500,
               "Pidgey":100,
               "Caterpie":100,
               "Weedle":100
            }
         }
      },
      {
         "type":"CatchPokemon",
         "config":{
            "enabled":true,
            "catch_visible_pokemon":true,
            "catch_lured_pokemon":true,
            "catch_incensed_pokemon":true,
            "min_ultraball_to_keep":5,
            "berry_threshold":0.35,
            "use_pinap_on_vip":false,
            "pinap_on_level_below":0,
            "pinap_operator":"or",
            "pinap_ignore_threshold":false,
            "smart_pinap_enabled":true,
            "smart_pinap_threshold":0.85,
            "smart_pinap_to_keep":3,
            "vip_berry_threshold":0.9,
            "treat_unseen_as_vip":true,
            "daily_catch_limit":500,
            "exit_on_limit_reached":false,
            "vanish_settings":{
               "consecutive_vanish_limit":10,
               "rest_duration_min":"02:00:00",
               "rest_duration_max":"04:00:00"
            },
            "catch_throw_parameters":{
               "excellent_rate":0.1,
               "great_rate":0.5,
               "nice_rate":0.3,
               "normal_rate":0.1,
               "spin_success_rate":0.6,
               "hit_rate":0.75
            },
            "catch_simulation":{
               "flee_count":3,
               "flee_duration":2,
               "catch_wait_min":3,
               "catch_wait_max":6,
               "berry_wait_min":3,
               "berry_wait_max":5,
               "changeball_wait_min":3,
               "changeball_wait_max":5,
               "newtodex_wait_min":20,
               "newtodex_wait_max":30
            }
         }
      },
      {
         "type":"SpinFort",
         "config":{
            "enabled":true,
            "spin_wait_min":3,
            "spin_wait_max":5,
            "daily_spin_limit":1000,
            "use_lure":false
         }
      },
      {
         "type":"UpdateWebInventory",
         "config":{
            "enabled":true
         }
      },
      {
         "type":"MoveToFort",
         "config":{
            "enabled":true,
            "lure_attraction":true,
            "lure_max_distance":2000,
            "walker":"StepWalker",
            "log_interval":5
         }
      },
      {
         "type":"FollowSpiral",
         "config":{
            "enabled":true,
            "diameter":4,
            "step_size":70
         }
      }
   ],
   "map_object_cache_time":5,
   "forts":{
      "avoid_circles":true,
      "max_circle_size":50,
      "cache_recent_forts":true
   },
   "pokemon_bag":{
      "// if 'show_at_start' is true, it will log all the pokemons in the bag (not eggs) at bot start":{

      },
      "show_at_start":true,
      "// if 'show_count' is true, it will show the amount of each pokemon (minimum 1)":{

      },
      "show_count":false,
      "// if 'show_candies' is true, it will show the amount of candies for each pokemon":{

      },
      "show_candies":false,
      "// 'pokemon_info' parameter define which info to show for each pokemon":{

      },
      "// the available options are":{

      },
      "// ['cp', 'iv_ads', 'iv_pct', 'ivcp', 'ncp', 'level', 'hp', 'moveset', 'dps']":{

      },
      "pokemon_info":[
         "cp",
         "iv_pct"
      ]
   },
   "walk_max":4.16,
   "walk_min":2.16,
   "alt_min":500,
   "alt_max":1000,
   "sleep_schedule":{
      "enabled":true,
      "enable_reminder":false,
      "reminder_interval":600,
      "entries":[
         {
            "enabled":true,
            "time":"00:00",
            "duration":"5:30",
            "time_random_offset":"00:30",
            "duration_random_offset":"00:30",
            "wake_up_at_location":""
         },
         {
            "enabled":true,
            "time":"17:45",
            "duration":"3:00",
            "time_random_offset":"01:00",
            "duration_random_offset":"00:30",
            "wake_up_at_location":""
         }
      ]
   },
   "gps_default_altitude":8,
   "replicate_gps_xy_noise":false,
   "replicate_gps_z_noise":false,
   "gps_xy_noise_range":1.25E-4,
   "gps_z_noise_range":12.5,
   "debug":false,
   "test":false,
   "walker_limit_output":false,
   "health_record":true,
   "location_cache":true,
   "distance_unit":"km",
   "reconnecting_timeout":15,
   "logging":{
      "color":true,
      "show_datetime":true,
      "show_process_name":true,
      "show_log_level":true,
      "show_thread_name":false
   },
   "catch":{
      "any":{
         "catch_above_cp":0,
         "catch_above_iv":0,
         "logic":"or"
      },
      "// Pokemons with example":{
         "always_catch":true
      },
      "// Gets filtered with release parameters":{

      },
      "// Legendary pokemons (Goes under S-Tier)":{

      },
      "Lapras":{
         "always_catch":true
      },
      "Moltres":{
         "always_catch":true
      },
      "Zapdos":{
         "always_catch":true
      },
      "Articuno":{
         "always_catch":true
      },
      "// S-Tier pokemons (if pokemon can be evolved into tier, list the representative)":{

      },
      "Mewtwo":{
         "always_catch":true
      },
      "Dragonite":{
         "always_catch":true
      },
      "Snorlax":{
         "always_catch":true
      },
      "// Mew evolves to Mewtwo":{

      },
      "Mew":{
         "always_catch":true
      },
      "Arcanine":{
         "always_catch":true
      },
      "Vaporeon":{
         "always_catch":true
      },
      "Gyarados":{
         "always_catch":true
      },
      "Exeggutor":{
         "always_catch":true
      },
      "Muk":{
         "always_catch":true
      },
      "Weezing":{
         "always_catch":true
      },
      "Flareon":{
         "always_catch":true
      },
      "// Growlithe evolves to Arcanine":{

      },
      "Growlithe":{
         "always_catch":true
      },
      "// Dragonair evolves to Dragonite":{

      },
      "Dragonair":{
         "always_catch":true
      },
      "// Grimer evolves to Muk":{

      },
      "Grimer":{
         "always_catch":true
      },
      "// Magikarp evolves to Gyarados":{

      },
      "Magikarp":{
         "always_catch":true
      },
      "// Exeggcute evolves to Exeggutor":{

      },
      "Exeggcute":{
         "always_catch":true
      },
      "// Eevee evolves to many versions, like Vaporeon, Flareon":{

      },
      "Eevee":{
         "always_catch":true
      },
      "// A-Tier pokemons":{

      },
      "Slowbro":{
         "always_catch":true
      },
      "Victreebel":{
         "always_catch":true
      },
      "Machamp":{
         "always_catch":true
      },
      "Poliwrath":{
         "always_catch":true
      },
      "Clefable":{
         "always_catch":true
      },
      "Nidoking":{
         "always_catch":true
      },
      "Venusaur":{
         "always_catch":true
      },
      "Charizard":{
         "always_catch":true
      },
      "Golduck":{
         "always_catch":true
      },
      "Nidoqueen":{
         "always_catch":true
      },
      "Vileplume":{
         "always_catch":true
      },
      "Blastoise":{
         "always_catch":true
      },
      "Omastar":{
         "always_catch":true
      },
      "Aerodactyl":{
         "always_catch":true
      },
      "Golem":{
         "always_catch":true
      },
      "Wigglytuff":{
         "always_catch":true
      },
      "Dewgong":{
         "always_catch":true
      },
      "Ninetales":{
         "always_catch":true
      },
      "Magmar":{
         "always_catch":true
      },
      "Kabutops":{
         "always_catch":true
      },
      "Electabuzz":{
         "always_catch":true
      },
      "Starmie":{
         "always_catch":true
      },
      "Jolteon":{
         "always_catch":true
      },
      "Rapidash":{
         "always_catch":true
      },
      "Pinsir":{
         "always_catch":true
      },
      "Scyther":{
         "always_catch":true
      },
      "Tentacruel":{
         "always_catch":true
      },
      "Gengar":{
         "always_catch":true
      },
      "Hypno":{
         "always_catch":true
      },
      "Pidgeot":{
         "always_catch":true
      },
      "Rhydon":{
         "always_catch":true
      },
      "Seaking":{
         "always_catch":true
      },
      "Kangaskhan":{
         "always_catch":true
      }
   },
   "release":{
      "any":{
         "release_below_cp":0,
         "release_below_iv":0,
         "release_below_ivcp":0,
         "logic":"or"
      },
      "// Legendary pokemons (Goes under S-Tier)":{

      },
      "Lapras":{
         "release_below_cp":1041,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "Moltres":{
         "release_below_cp":1132,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "Zapdos":{
         "release_below_cp":1087,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "Articuno":{
         "release_below_cp":1039,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "// S-Tier pokemons (if pokemon can be evolved into tier, list the representative)":{

      },
      "Mewtwo":{
         "release_below_cp":1447,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "Dragonite":{
         "release_below_cp":1221,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "Snorlax":{
         "release_below_cp":1087,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "// Mew evolves to Mewtwo":{

      },
      "Mew":{
         "release_below_cp":1152,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "Arcanine":{
         "release_below_cp":1041,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "Vaporeon":{
         "release_below_cp":984,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "Gyarados":{
         "release_below_cp":938,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "Exeggutor":{
         "release_below_cp":1032,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "Muk":{
         "release_below_cp":909,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "Weezing":{
         "release_below_cp":784,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "Flareon":{
         "release_below_cp":924,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "// Growlithe evolves to Arcanine":{

      },
      "Growlithe":{
         "release_below_cp":465,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "// Dragonair evolves to Dragonite":{

      },
      "Dragonair":{
         "release_below_cp":609,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "// Grimer evolves to Muk":{

      },
      "Grimer":{
         "release_below_cp":448,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "// Magikarp evolves to Gyarados":{

      },
      "Magikarp":{
         "release_below_cp":91,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "// Exeggcute evolves to Exeggutor":{

      },
      "Exeggcute":{
         "release_below_cp":384,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "// Eevee evolves to many versions, like Vaporeon, Flareon":{

      },
      "Eevee":{
         "release_below_cp":376,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "// A-Tier pokemons":{

      },
      "Slowbro":{
         "release_below_cp":907,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "Victreebel":{
         "release_below_cp":883,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "Machamp":{
         "release_below_cp":907,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "Poliwrath":{
         "release_below_cp":876,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "Clefable":{
         "release_below_cp":837,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "Nidoking":{
         "release_below_cp":864,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "Venusaur":{
         "release_below_cp":902,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "Charizard":{
         "release_below_cp":909,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "Golduck":{
         "release_below_cp":832,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "Nidoqueen":{
         "release_below_cp":868,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "Vileplume":{
         "release_below_cp":871,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "Blastoise":{
         "release_below_cp":888,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "Omastar":{
         "release_below_cp":780,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "Aerodactyl":{
         "release_below_cp":756,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "Golem":{
         "release_below_cp":804,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "Wigglytuff":{
         "release_below_cp":760,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "Dewgong":{
         "release_below_cp":748,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "Ninetales":{
         "release_below_cp":763,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "Magmar":{
         "release_below_cp":792,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "Kabutops":{
         "release_below_cp":744,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "Electabuzz":{
         "release_below_cp":739,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "Starmie":{
         "release_below_cp":763,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "Jolteon":{
         "release_below_cp":746,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "Rapidash":{
         "release_below_cp":768,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "Pinsir":{
         "release_below_cp":741,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "Scyther":{
         "release_below_cp":724,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "Tentacruel":{
         "release_below_cp":775,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "Gengar":{
         "release_below_cp":724,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "Hypno":{
         "release_below_cp":763,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "Pidgeot":{
         "release_below_cp":729,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "Rhydon":{
         "release_below_cp":782,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "Seaking":{
         "release_below_cp":712,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "Kangaskhan":{
         "release_below_cp":712,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "// Koffing evolves to Weezing (A-Tier)":{

      },
      "Koffing":{
         "release_below_cp":403,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "// Below is B-tier and lower pokemons":{

      },
      "Caterpie":{
         "release_below_cp":156,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "Weedle":{
         "release_below_cp":156,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "Diglett":{
         "release_below_cp":158,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "Metapod":{
         "release_below_cp":168,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "Kakuna":{
         "release_below_cp":170,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "Rattata":{
         "release_below_cp":204,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "Abra":{
         "release_below_cp":208,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "Zubat":{
         "release_below_cp":225,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "Chansey":{
         "release_below_cp":235,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "Pidgey":{
         "release_below_cp":237,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "Spearow":{
         "release_below_cp":240,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "Meowth":{
         "release_below_cp":264,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "Krabby":{
         "release_below_cp":276,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "Sandshrew":{
         "release_below_cp":278,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "Poliwag":{
         "release_below_cp":278,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "Horsea":{
         "release_below_cp":278,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "Gastly":{
         "release_below_cp":280,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "Ekans":{
         "release_below_cp":288,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "Shellder":{
         "release_below_cp":288,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "Vulpix":{
         "release_below_cp":290,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "Voltorb":{
         "release_below_cp":292,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "Geodude":{
         "release_below_cp":297,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "Doduo":{
         "release_below_cp":297,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "Onix":{
         "release_below_cp":300,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "Mankey":{
         "release_below_cp":307,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "Pikachu":{
         "release_below_cp":309,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "Magnemite":{
         "release_below_cp":312,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "Tentacool":{
         "release_below_cp":316,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "Paras":{
         "release_below_cp":319,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "Jigglypuff":{
         "release_below_cp":321,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "Ditto":{
         "release_below_cp":321,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "Staryu":{
         "release_below_cp":326,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "Charmander":{
         "release_below_cp":333,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "Goldeen":{
         "release_below_cp":336,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "Squirtle":{
         "release_below_cp":352,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "Cubone":{
         "release_below_cp":352,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "Venonat":{
         "release_below_cp":360,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "Bulbasaur":{
         "release_below_cp":374,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "Drowzee":{
         "release_below_cp":374,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "Machop":{
         "release_below_cp":381,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "Psyduck":{
         "release_below_cp":386,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "Seel":{
         "release_below_cp":386,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "Kabuto":{
         "release_below_cp":386,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "Bellsprout":{
         "release_below_cp":391,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "Omanyte":{
         "release_below_cp":391,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "Kadabra":{
         "release_below_cp":396,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "Oddish":{
         "release_below_cp":400,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "Dugtrio":{
         "release_below_cp":408,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "Rhyhorn":{
         "release_below_cp":412,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "Clefairy":{
         "release_below_cp":420,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "Slowpoke":{
         "release_below_cp":424,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "Pidgeotto":{
         "release_below_cp":427,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "Farfetch'd":{
         "release_below_cp":441,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "Poliwhirl":{
         "release_below_cp":468,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "Nidorino":{
         "release_below_cp":480,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "Haunter":{
         "release_below_cp":482,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "Nidorina":{
         "release_below_cp":489,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "Graveler":{
         "release_below_cp":501,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "Beedrill":{
         "release_below_cp":504,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "Raticate":{
         "release_below_cp":504,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "Butterfree":{
         "release_below_cp":508,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "Hitmonlee":{
         "release_below_cp":520,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "Ponyta":{
         "release_below_cp":530,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "Hitmonchan":{
         "release_below_cp":530,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "Charmeleon":{
         "release_below_cp":544,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "Wartortle":{
         "release_below_cp":552,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "Persian":{
         "release_below_cp":568,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "Lickitung":{
         "release_below_cp":568,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "Ivysaur":{
         "release_below_cp":571,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "Electrode":{
         "release_below_cp":576,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "Marowak":{
         "release_below_cp":578,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "Gloom":{
         "release_below_cp":590,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "Porygon":{
         "release_below_cp":590,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "Seadra":{
         "release_below_cp":597,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "Jynx":{
         "release_below_cp":600,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "Weepinbell":{
         "release_below_cp":602,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "Tangela":{
         "release_below_cp":607,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "Fearow":{
         "release_below_cp":609,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "Parasect":{
         "release_below_cp":609,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "Machoke":{
         "release_below_cp":614,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "Arbok":{
         "release_below_cp":616,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "Sandslash":{
         "release_below_cp":631,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "Alakazam":{
         "release_below_cp":633,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "Kingler":{
         "release_below_cp":636,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "Dodrio":{
         "release_below_cp":640,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "Tauros":{
         "release_below_cp":643,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "Primeape":{
         "release_below_cp":650,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "Magneton":{
         "release_below_cp":657,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "Venomoth":{
         "release_below_cp":660,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "Golbat":{
         "release_below_cp":672,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "Raichu":{
         "release_below_cp":708,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "Cloyster":{
         "release_below_cp":717,
         "release_below_iv":0.8,
         "logic":"and"
      },
      "Mr. Mime":{
         "release_below_cp":650,
         "release_below_iv":0.8,
         "logic":"and"
      }
   },
   "vips":{
      "Any pokemon put here directly force to use Berry & Best Ball to capture, to secure the capture rate": {},
      "any":{
         "catch_above_cp":1200,
         "catch_above_iv":0.9,
         "logic":"or"
      },
      "Lapras":{
      },
      "Moltres":{
      },
      "Zapdos":{
      },
      "Articuno":{
      },
      "// S-Tier pokemons (if pokemon can be evolved into tier, list the representative)":{
      },
      "Mewtwo":{
      },
      "Dragonite":{
      },
      "Snorlax":{
      },
      "// Mew evolves to Mewtwo":{
      },
      "Mew":{
      },
      "Arcanine":{
      },
      "Vaporeon":{
      },
      "Gyarados":{
      },
      "Exeggutor":{
      },
      "Muk":{
      },
      "Weezing":{
      },
      "Flareon":{
      }
   },
   "websocket":{
      "start_embedded_server":true,
      "server_url":"127.0.0.1:4000"
   }
}