차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차차
