# encoding: UTF-8

# Copyright 2012 Twitter, Inc
# http://www.apache.org/licenses/LICENSE-2.0

module TwitterCldr
  module Shared
    class Casefolder
      class << self

        CASEFOLDING_SOURCE_C = "\101|\102|\103|\104|\105|\106|\107|\110|\111|\112|\113|\114|\115|\116|\117|\120|\121|\122|\123|\124|\125|\126|\127|\130|\131|\132|\302\265|\303\200|\303\201|\303\202|\303\203|\303\204|\303\205|\303\206|\303\207|\303\210|\303\211|\303\212|\303\213|\303\214|\303\215|\303\216|\303\217|\303\220|\303\221|\303\222|\303\223|\303\224|\303\225|\303\226|\303\230|\303\231|\303\232|\303\233|\303\234|\303\235|\303\236|\304\200|\304\202|\304\204|\304\206|\304\210|\304\212|\304\214|\304\216|\304\220|\304\222|\304\224|\304\226|\304\230|\304\232|\304\234|\304\236|\304\240|\304\242|\304\244|\304\246|\304\250|\304\252|\304\254|\304\256|\304\262|\304\264|\304\266|\304\271|\304\273|\304\275|\304\277|\305\201|\305\203|\305\205|\305\207|\305\212|\305\214|\305\216|\305\220|\305\222|\305\224|\305\226|\305\230|\305\232|\305\234|\305\236|\305\240|\305\242|\305\244|\305\246|\305\250|\305\252|\305\254|\305\256|\305\260|\305\262|\305\264|\305\266|\305\270|\305\271|\305\273|\305\275|\305\277|\306\201|\306\202|\306\204|\306\206|\306\207|\306\211|\306\212|\306\213|\306\216|\306\217|\306\220|\306\221|\306\223|\306\224|\306\226|\306\227|\306\230|\306\234|\306\235|\306\237|\306\240|\306\242|\306\244|\306\246|\306\247|\306\251|\306\254|\306\256|\306\257|\306\261|\306\262|\306\263|\306\265|\306\267|\306\270|\306\274|\307\204|\307\205|\307\207|\307\210|\307\212|\307\213|\307\215|\307\217|\307\221|\307\223|\307\225|\307\227|\307\231|\307\233|\307\236|\307\240|\307\242|\307\244|\307\246|\307\250|\307\252|\307\254|\307\256|\307\261|\307\262|\307\264|\307\266|\307\267|\307\270|\307\272|\307\274|\307\276|\310\200|\310\202|\310\204|\310\206|\310\210|\310\212|\310\214|\310\216|\310\220|\310\222|\310\224|\310\226|\310\230|\310\232|\310\234|\310\236|\310\240|\310\242|\310\244|\310\246|\310\250|\310\252|\310\254|\310\256|\310\260|\310\262|\310\272|\310\273|\310\275|\310\276|\311\201|\311\203|\311\204|\311\205|\311\206|\311\210|\311\212|\311\214|\311\216|\315\205|\315\260|\315\262|\315\266|\315\277|\316\206|\316\210|\316\211|\316\212|\316\214|\316\216|\316\217|\316\221|\316\222|\316\223|\316\224|\316\225|\316\226|\316\227|\316\230|\316\231|\316\232|\316\233|\316\234|\316\235|\316\236|\316\237|\316\240|\316\241|\316\243|\316\244|\316\245|\316\246|\316\247|\316\250|\316\251|\316\252|\316\253|\317\202|\317\217|\317\220|\317\221|\317\225|\317\226|\317\230|\317\232|\317\234|\317\236|\317\240|\317\242|\317\244|\317\246|\317\250|\317\252|\317\254|\317\256|\317\260|\317\261|\317\264|\317\265|\317\267|\317\271|\317\272|\317\275|\317\276|\317\277|\320\200|\320\201|\320\202|\320\203|\320\204|\320\205|\320\206|\320\207|\320\210|\320\211|\320\212|\320\213|\320\214|\320\215|\320\216|\320\217|\320\220|\320\221|\320\222|\320\223|\320\224|\320\225|\320\226|\320\227|\320\230|\320\231|\320\232|\320\233|\320\234|\320\235|\320\236|\320\237|\320\240|\320\241|\320\242|\320\243|\320\244|\320\245|\320\246|\320\247|\320\250|\320\251|\320\252|\320\253|\320\254|\320\255|\320\256|\320\257|\321\240|\321\242|\321\244|\321\246|\321\250|\321\252|\321\254|\321\256|\321\260|\321\262|\321\264|\321\266|\321\270|\321\272|\321\274|\321\276|\322\200|\322\212|\322\214|\322\216|\322\220|\322\222|\322\224|\322\226|\322\230|\322\232|\322\234|\322\236|\322\240|\322\242|\322\244|\322\246|\322\250|\322\252|\322\254|\322\256|\322\260|\322\262|\322\264|\322\266|\322\270|\322\272|\322\274|\322\276|\323\200|\323\201|\323\203|\323\205|\323\207|\323\211|\323\213|\323\215|\323\220|\323\222|\323\224|\323\226|\323\230|\323\232|\323\234|\323\236|\323\240|\323\242|\323\244|\323\246|\323\250|\323\252|\323\254|\323\256|\323\260|\323\262|\323\264|\323\266|\323\270|\323\272|\323\274|\323\276|\324\200|\324\202|\324\204|\324\206|\324\210|\324\212|\324\214|\324\216|\324\220|\324\222|\324\224|\324\226|\324\230|\324\232|\324\234|\324\236|\324\240|\324\242|\324\244|\324\246|\324\250|\324\252|\324\254|\324\256|\324\261|\324\262|\324\263|\324\264|\324\265|\324\266|\324\267|\324\270|\324\271|\324\272|\324\273|\324\274|\324\275|\324\276|\324\277|\325\200|\325\201|\325\202|\325\203|\325\204|\325\205|\325\206|\325\207|\325\210|\325\211|\325\212|\325\213|\325\214|\325\215|\325\216|\325\217|\325\220|\325\221|\325\222|\325\223|\325\224|\325\225|\325\226|\341\202\240|\341\202\241|\341\202\242|\341\202\243|\341\202\244|\341\202\245|\341\202\246|\341\202\247|\341\202\250|\341\202\251|\341\202\252|\341\202\253|\341\202\254|\341\202\255|\341\202\256|\341\202\257|\341\202\260|\341\202\261|\341\202\262|\341\202\263|\341\202\264|\341\202\265|\341\202\266|\341\202\267|\341\202\270|\341\202\271|\341\202\272|\341\202\273|\341\202\274|\341\202\275|\341\202\276|\341\202\277|\341\203\200|\341\203\201|\341\203\202|\341\203\203|\341\203\204|\341\203\205|\341\203\207|\341\203\215|\341\217\270|\341\217\271|\341\217\272|\341\217\273|\341\217\274|\341\217\275|\341\262\200|\341\262\201|\341\262\202|\341\262\203|\341\262\204|\341\262\205|\341\262\206|\341\262\207|\341\262\210|\341\262\211|\341\262\220|\341\262\221|\341\262\222|\341\262\223|\341\262\224|\341\262\225|\341\262\226|\341\262\227|\341\262\230|\341\262\231|\341\262\232|\341\262\233|\341\262\234|\341\262\235|\341\262\236|\341\262\237|\341\262\240|\341\262\241|\341\262\242|\341\262\243|\341\262\244|\341\262\245|\341\262\246|\341\262\247|\341\262\250|\341\262\251|\341\262\252|\341\262\253|\341\262\254|\341\262\255|\341\262\256|\341\262\257|\341\262\260|\341\262\261|\341\262\262|\341\262\263|\341\262\264|\341\262\265|\341\262\266|\341\262\267|\341\262\270|\341\262\271|\341\262\272|\341\262\275|\341\262\276|\341\262\277|\341\270\200|\341\270\202|\341\270\204|\341\270\206|\341\270\210|\341\270\212|\341\270\214|\341\270\216|\341\270\220|\341\270\222|\341\270\224|\341\270\226|\341\270\230|\341\270\232|\341\270\234|\341\270\236|\341\270\240|\341\270\242|\341\270\244|\341\270\246|\341\270\250|\341\270\252|\341\270\254|\341\270\256|\341\270\260|\341\270\262|\341\270\264|\341\270\266|\341\270\270|\341\270\272|\341\270\274|\341\270\276|\341\271\200|\341\271\202|\341\271\204|\341\271\206|\341\271\210|\341\271\212|\341\271\214|\341\271\216|\341\271\220|\341\271\222|\341\271\224|\341\271\226|\341\271\230|\341\271\232|\341\271\234|\341\271\236|\341\271\240|\341\271\242|\341\271\244|\341\271\246|\341\271\250|\341\271\252|\341\271\254|\341\271\256|\341\271\260|\341\271\262|\341\271\264|\341\271\266|\341\271\270|\341\271\272|\341\271\274|\341\271\276|\341\272\200|\341\272\202|\341\272\204|\341\272\206|\341\272\210|\341\272\212|\341\272\214|\341\272\216|\341\272\220|\341\272\222|\341\272\224|\341\272\233|\341\272\240|\341\272\242|\341\272\244|\341\272\246|\341\272\250|\341\272\252|\341\272\254|\341\272\256|\341\272\260|\341\272\262|\341\272\264|\341\272\266|\341\272\270|\341\272\272|\341\272\274|\341\272\276|\341\273\200|\341\273\202|\341\273\204|\341\273\206|\341\273\210|\341\273\212|\341\273\214|\341\273\216|\341\273\220|\341\273\222|\341\273\224|\341\273\226|\341\273\230|\341\273\232|\341\273\234|\341\273\236|\341\273\240|\341\273\242|\341\273\244|\341\273\246|\341\273\250|\341\273\252|\341\273\254|\341\273\256|\341\273\260|\341\273\262|\341\273\264|\341\273\266|\341\273\270|\341\273\272|\341\273\274|\341\273\276|\341\274\210|\341\274\211|\341\274\212|\341\274\213|\341\274\214|\341\274\215|\341\274\216|\341\274\217|\341\274\230|\341\274\231|\341\274\232|\341\274\233|\341\274\234|\341\274\235|\341\274\250|\341\274\251|\341\274\252|\341\274\253|\341\274\254|\341\274\255|\341\274\256|\341\274\257|\341\274\270|\341\274\271|\341\274\272|\341\274\273|\341\274\274|\341\274\275|\341\274\276|\341\274\277|\341\275\210|\341\275\211|\341\275\212|\341\275\213|\341\275\214|\341\275\215|\341\275\231|\341\275\233|\341\275\235|\341\275\237|\341\275\250|\341\275\251|\341\275\252|\341\275\253|\341\275\254|\341\275\255|\341\275\256|\341\275\257|\341\276\270|\341\276\271|\341\276\272|\341\276\273|\341\276\276|\341\277\210|\341\277\211|\341\277\212|\341\277\213|\341\277\230|\341\277\231|\341\277\232|\341\277\233|\341\277\250|\341\277\251|\341\277\252|\341\277\253|\341\277\254|\341\277\270|\341\277\271|\341\277\272|\341\277\273|\342\204\246|\342\204\252|\342\204\253|\342\204\262|\342\205\240|\342\205\241|\342\205\242|\342\205\243|\342\205\244|\342\205\245|\342\205\246|\342\205\247|\342\205\250|\342\205\251|\342\205\252|\342\205\253|\342\205\254|\342\205\255|\342\205\256|\342\205\257|\342\206\203|\342\222\266|\342\222\267|\342\222\270|\342\222\271|\342\222\272|\342\222\273|\342\222\274|\342\222\275|\342\222\276|\342\222\277|\342\223\200|\342\223\201|\342\223\202|\342\223\203|\342\223\204|\342\223\205|\342\223\206|\342\223\207|\342\223\210|\342\223\211|\342\223\212|\342\223\213|\342\223\214|\342\223\215|\342\223\216|\342\223\217|\342\260\200|\342\260\201|\342\260\202|\342\260\203|\342\260\204|\342\260\205|\342\260\206|\342\260\207|\342\260\210|\342\260\211|\342\260\212|\342\260\213|\342\260\214|\342\260\215|\342\260\216|\342\260\217|\342\260\220|\342\260\221|\342\260\222|\342\260\223|\342\260\224|\342\260\225|\342\260\226|\342\260\227|\342\260\230|\342\260\231|\342\260\232|\342\260\233|\342\260\234|\342\260\235|\342\260\236|\342\260\237|\342\260\240|\342\260\241|\342\260\242|\342\260\243|\342\260\244|\342\260\245|\342\260\246|\342\260\247|\342\260\250|\342\260\251|\342\260\252|\342\260\253|\342\260\254|\342\260\255|\342\260\256|\342\260\257|\342\261\240|\342\261\242|\342\261\243|\342\261\244|\342\261\247|\342\261\251|\342\261\253|\342\261\255|\342\261\256|\342\261\257|\342\261\260|\342\261\262|\342\261\265|\342\261\276|\342\261\277|\342\262\200|\342\262\202|\342\262\204|\342\262\206|\342\262\210|\342\262\212|\342\262\214|\342\262\216|\342\262\220|\342\262\222|\342\262\224|\342\262\226|\342\262\230|\342\262\232|\342\262\234|\342\262\236|\342\262\240|\342\262\242|\342\262\244|\342\262\246|\342\262\250|\342\262\252|\342\262\254|\342\262\256|\342\262\260|\342\262\262|\342\262\264|\342\262\266|\342\262\270|\342\262\272|\342\262\274|\342\262\276|\342\263\200|\342\263\202|\342\263\204|\342\263\206|\342\263\210|\342\263\212|\342\263\214|\342\263\216|\342\263\220|\342\263\222|\342\263\224|\342\263\226|\342\263\230|\342\263\232|\342\263\234|\342\263\236|\342\263\240|\342\263\242|\342\263\253|\342\263\255|\342\263\262|\352\231\200|\352\231\202|\352\231\204|\352\231\206|\352\231\210|\352\231\212|\352\231\214|\352\231\216|\352\231\220|\352\231\222|\352\231\224|\352\231\226|\352\231\230|\352\231\232|\352\231\234|\352\231\236|\352\231\240|\352\231\242|\352\231\244|\352\231\246|\352\231\250|\352\231\252|\352\231\254|\352\232\200|\352\232\202|\352\232\204|\352\232\206|\352\232\210|\352\232\212|\352\232\214|\352\232\216|\352\232\220|\352\232\222|\352\232\224|\352\232\226|\352\232\230|\352\232\232|\352\234\242|\352\234\244|\352\234\246|\352\234\250|\352\234\252|\352\234\254|\352\234\256|\352\234\262|\352\234\264|\352\234\266|\352\234\270|\352\234\272|\352\234\274|\352\234\276|\352\235\200|\352\235\202|\352\235\204|\352\235\206|\352\235\210|\352\235\212|\352\235\214|\352\235\216|\352\235\220|\352\235\222|\352\235\224|\352\235\226|\352\235\230|\352\235\232|\352\235\234|\352\235\236|\352\235\240|\352\235\242|\352\235\244|\352\235\246|\352\235\250|\352\235\252|\352\235\254|\352\235\256|\352\235\271|\352\235\273|\352\235\275|\352\235\276|\352\236\200|\352\236\202|\352\236\204|\352\236\206|\352\236\213|\352\236\215|\352\236\220|\352\236\222|\352\236\226|\352\236\230|\352\236\232|\352\236\234|\352\236\236|\352\236\240|\352\236\242|\352\236\244|\352\236\246|\352\236\250|\352\236\252|\352\236\253|\352\236\254|\352\236\255|\352\236\256|\352\236\260|\352\236\261|\352\236\262|\352\236\263|\352\236\264|\352\236\266|\352\236\270|\352\236\272|\352\236\274|\352\236\276|\352\237\200|\352\237\202|\352\237\204|\352\237\205|\352\237\206|\352\237\207|\352\237\211|\352\237\213|\352\237\214|\352\237\220|\352\237\226|\352\237\230|\352\237\232|\352\237\234|\352\237\265|\352\255\260|\352\255\261|\352\255\262|\352\255\263|\352\255\264|\352\255\265|\352\255\266|\352\255\267|\352\255\270|\352\255\271|\352\255\272|\352\255\273|\352\255\274|\352\255\275|\352\255\276|\352\255\277|\352\256\200|\352\256\201|\352\256\202|\352\256\203|\352\256\204|\352\256\205|\352\256\206|\352\256\207|\352\256\210|\352\256\211|\352\256\212|\352\256\213|\352\256\214|\352\256\215|\352\256\216|\352\256\217|\352\256\220|\352\256\221|\352\256\222|\352\256\223|\352\256\224|\352\256\225|\352\256\226|\352\256\227|\352\256\230|\352\256\231|\352\256\232|\352\256\233|\352\256\234|\352\256\235|\352\256\236|\352\256\237|\352\256\240|\352\256\241|\352\256\242|\352\256\243|\352\256\244|\352\256\245|\352\256\246|\352\256\247|\352\256\250|\352\256\251|\352\256\252|\352\256\253|\352\256\254|\352\256\255|\352\256\256|\352\256\257|\352\256\260|\352\256\261|\352\256\262|\352\256\263|\352\256\264|\352\256\265|\352\256\266|\352\256\267|\352\256\270|\352\256\271|\352\256\272|\352\256\273|\352\256\274|\352\256\275|\352\256\276|\352\256\277|\357\274\241|\357\274\242|\357\274\243|\357\274\244|\357\274\245|\357\274\246|\357\274\247|\357\274\250|\357\274\251|\357\274\252|\357\274\253|\357\274\254|\357\274\255|\357\274\256|\357\274\257|\357\274\260|\357\274\261|\357\274\262|\357\274\263|\357\274\264|\357\274\265|\357\274\266|\357\274\267|\357\274\270|\357\274\271|\357\274\272|\360\220\220\200|\360\220\220\201|\360\220\220\202|\360\220\220\203|\360\220\220\204|\360\220\220\205|\360\220\220\206|\360\220\220\207|\360\220\220\210|\360\220\220\211|\360\220\220\212|\360\220\220\213|\360\220\220\214|\360\220\220\215|\360\220\220\216|\360\220\220\217|\360\220\220\220|\360\220\220\221|\360\220\220\222|\360\220\220\223|\360\220\220\224|\360\220\220\225|\360\220\220\226|\360\220\220\227|\360\220\220\230|\360\220\220\231|\360\220\220\232|\360\220\220\233|\360\220\220\234|\360\220\220\235|\360\220\220\236|\360\220\220\237|\360\220\220\240|\360\220\220\241|\360\220\220\242|\360\220\220\243|\360\220\220\244|\360\220\220\245|\360\220\220\246|\360\220\220\247|\360\220\222\260|\360\220\222\261|\360\220\222\262|\360\220\222\263|\360\220\222\264|\360\220\222\265|\360\220\222\266|\360\220\222\267|\360\220\222\270|\360\220\222\271|\360\220\222\272|\360\220\222\273|\360\220\222\274|\360\220\222\275|\360\220\222\276|\360\220\222\277|\360\220\223\200|\360\220\223\201|\360\220\223\202|\360\220\223\203|\360\220\223\204|\360\220\223\205|\360\220\223\206|\360\220\223\207|\360\220\223\210|\360\220\223\211|\360\220\223\212|\360\220\223\213|\360\220\223\214|\360\220\223\215|\360\220\223\216|\360\220\223\217|\360\220\223\220|\360\220\223\221|\360\220\223\222|\360\220\223\223|\360\220\225\260|\360\220\225\261|\360\220\225\262|\360\220\225\263|\360\220\225\264|\360\220\225\265|\360\220\225\266|\360\220\225\267|\360\220\225\270|\360\220\225\271|\360\220\225\272|\360\220\225\274|\360\220\225\275|\360\220\225\276|\360\220\225\277|\360\220\226\200|\360\220\226\201|\360\220\226\202|\360\220\226\203|\360\220\226\204|\360\220\226\205|\360\220\226\206|\360\220\226\207|\360\220\226\210|\360\220\226\211|\360\220\226\212|\360\220\226\214|\360\220\226\215|\360\220\226\216|\360\220\226\217|\360\220\226\220|\360\220\226\221|\360\220\226\222|\360\220\226\224|\360\220\226\225|\360\220\262\200|\360\220\262\201|\360\220\262\202|\360\220\262\203|\360\220\262\204|\360\220\262\205|\360\220\262\206|\360\220\262\207|\360\220\262\210|\360\220\262\211|\360\220\262\212|\360\220\262\213|\360\220\262\214|\360\220\262\215|\360\220\262\216|\360\220\262\217|\360\220\262\220|\360\220\262\221|\360\220\262\222|\360\220\262\223|\360\220\262\224|\360\220\262\225|\360\220\262\226|\360\220\262\227|\360\220\262\230|\360\220\262\231|\360\220\262\232|\360\220\262\233|\360\220\262\234|\360\220\262\235|\360\220\262\236|\360\220\262\237|\360\220\262\240|\360\220\262\241|\360\220\262\242|\360\220\262\243|\360\220\262\244|\360\220\262\245|\360\220\262\246|\360\220\262\247|\360\220\262\250|\360\220\262\251|\360\220\262\252|\360\220\262\253|\360\220\262\254|\360\220\262\255|\360\220\262\256|\360\220\262\257|\360\220\262\260|\360\220\262\261|\360\220\262\262|\360\220\265\220|\360\220\265\221|\360\220\265\222|\360\220\265\223|\360\220\265\224|\360\220\265\225|\360\220\265\226|\360\220\265\227|\360\220\265\230|\360\220\265\231|\360\220\265\232|\360\220\265\233|\360\220\265\234|\360\220\265\235|\360\220\265\236|\360\220\265\237|\360\220\265\240|\360\220\265\241|\360\220\265\242|\360\220\265\243|\360\220\265\244|\360\220\265\245|\360\221\242\240|\360\221\242\241|\360\221\242\242|\360\221\242\243|\360\221\242\244|\360\221\242\245|\360\221\242\246|\360\221\242\247|\360\221\242\250|\360\221\242\251|\360\221\242\252|\360\221\242\253|\360\221\242\254|\360\221\242\255|\360\221\242\256|\360\221\242\257|\360\221\242\260|\360\221\242\261|\360\221\242\262|\360\221\242\263|\360\221\242\264|\360\221\242\265|\360\221\242\266|\360\221\242\267|\360\221\242\270|\360\221\242\271|\360\221\242\272|\360\221\242\273|\360\221\242\274|\360\221\242\275|\360\221\242\276|\360\221\242\277|\360\226\271\200|\360\226\271\201|\360\226\271\202|\360\226\271\203|\360\226\271\204|\360\226\271\205|\360\226\271\206|\360\226\271\207|\360\226\271\210|\360\226\271\211|\360\226\271\212|\360\226\271\213|\360\226\271\214|\360\226\271\215|\360\226\271\216|\360\226\271\217|\360\226\271\220|\360\226\271\221|\360\226\271\222|\360\226\271\223|\360\226\271\224|\360\226\271\225|\360\226\271\226|\360\226\271\227|\360\226\271\230|\360\226\271\231|\360\226\271\232|\360\226\271\233|\360\226\271\234|\360\226\271\235|\360\226\271\236|\360\226\271\237|\360\236\244\200|\360\236\244\201|\360\236\244\202|\360\236\244\203|\360\236\244\204|\360\236\244\205|\360\236\244\206|\360\236\244\207|\360\236\244\210|\360\236\244\211|\360\236\244\212|\360\236\244\213|\360\236\244\214|\360\236\244\215|\360\236\244\216|\360\236\244\217|\360\236\244\220|\360\236\244\221|\360\236\244\222|\360\236\244\223|\360\236\244\224|\360\236\244\225|\360\236\244\226|\360\236\244\227|\360\236\244\230|\360\236\244\231|\360\236\244\232|\360\236\244\233|\360\236\244\234|\360\236\244\235|\360\236\244\236|\360\236\244\237|\360\236\244\240|\360\236\244\241"
        CASEFOLDING_SOURCE_F = "\303\237|\304\260|\305\211|\307\260|\316\220|\316\260|\326\207|\341\272\226|\341\272\227|\341\272\230|\341\272\231|\341\272\232|\341\272\236|\341\275\220|\341\275\222|\341\275\224|\341\275\226|\341\276\200|\341\276\201|\341\276\202|\341\276\203|\341\276\204|\341\276\205|\341\276\206|\341\276\207|\341\276\210|\341\276\211|\341\276\212|\341\276\213|\341\276\214|\341\276\215|\341\276\216|\341\276\217|\341\276\220|\341\276\221|\341\276\222|\341\276\223|\341\276\224|\341\276\225|\341\276\226|\341\276\227|\341\276\230|\341\276\231|\341\276\232|\341\276\233|\341\276\234|\341\276\235|\341\276\236|\341\276\237|\341\276\240|\341\276\241|\341\276\242|\341\276\243|\341\276\244|\341\276\245|\341\276\246|\341\276\247|\341\276\250|\341\276\251|\341\276\252|\341\276\253|\341\276\254|\341\276\255|\341\276\256|\341\276\257|\341\276\262|\341\276\263|\341\276\264|\341\276\266|\341\276\267|\341\276\274|\341\277\202|\341\277\203|\341\277\204|\341\277\206|\341\277\207|\341\277\214|\341\277\222|\341\277\223|\341\277\226|\341\277\227|\341\277\242|\341\277\243|\341\277\244|\341\277\246|\341\277\247|\341\277\262|\341\277\263|\341\277\264|\341\277\266|\341\277\267|\341\277\274|\357\254\200|\357\254\201|\357\254\202|\357\254\203|\357\254\204|\357\254\205|\357\254\206|\357\254\223|\357\254\224|\357\254\225|\357\254\226|\357\254\227"
        CASEFOLDING_SOURCE_S = "\341\272\236|\341\276\210|\341\276\211|\341\276\212|\341\276\213|\341\276\214|\341\276\215|\341\276\216|\341\276\217|\341\276\230|\341\276\231|\341\276\232|\341\276\233|\341\276\234|\341\276\235|\341\276\236|\341\276\237|\341\276\250|\341\276\251|\341\276\252|\341\276\253|\341\276\254|\341\276\255|\341\276\256|\341\276\257|\341\276\274|\341\277\214|\341\277\223|\341\277\243|\341\277\274|\357\254\205"
        CASEFOLDING_SOURCE_T = "\111|\304\260"

        CASEFOLDING_HASH = {
          65=>[97], 66=>[98], 67=>[99], 68=>[100], 69=>[101], 70=>[102], 71=>[103], 72=>[104], 
          73=>[105], 74=>[106], 75=>[107], 76=>[108], 77=>[109], 78=>[110], 79=>[111], 80=>[112], 
          81=>[113], 82=>[114], 83=>[115], 84=>[116], 85=>[117], 86=>[118], 87=>[119], 88=>[120], 
          89=>[121], 90=>[122], 181=>[956], 192=>[224], 193=>[225], 194=>[226], 195=>[227], 196=>[228], 
          197=>[229], 198=>[230], 199=>[231], 200=>[232], 201=>[233], 202=>[234], 203=>[235], 204=>[236], 
          205=>[237], 206=>[238], 207=>[239], 208=>[240], 209=>[241], 210=>[242], 211=>[243], 212=>[244], 
          213=>[245], 214=>[246], 216=>[248], 217=>[249], 218=>[250], 219=>[251], 220=>[252], 221=>[253], 
          222=>[254], 256=>[257], 258=>[259], 260=>[261], 262=>[263], 264=>[265], 266=>[267], 268=>[269], 
          270=>[271], 272=>[273], 274=>[275], 276=>[277], 278=>[279], 280=>[281], 282=>[283], 284=>[285], 
          286=>[287], 288=>[289], 290=>[291], 292=>[293], 294=>[295], 296=>[297], 298=>[299], 300=>[301], 
          302=>[303], 306=>[307], 308=>[309], 310=>[311], 313=>[314], 315=>[316], 317=>[318], 319=>[320], 
          321=>[322], 323=>[324], 325=>[326], 327=>[328], 330=>[331], 332=>[333], 334=>[335], 336=>[337], 
          338=>[339], 340=>[341], 342=>[343], 344=>[345], 346=>[347], 348=>[349], 350=>[351], 352=>[353], 
          354=>[355], 356=>[357], 358=>[359], 360=>[361], 362=>[363], 364=>[365], 366=>[367], 368=>[369], 
          370=>[371], 372=>[373], 374=>[375], 376=>[255], 377=>[378], 379=>[380], 381=>[382], 383=>[115], 
          385=>[595], 386=>[387], 388=>[389], 390=>[596], 391=>[392], 393=>[598], 394=>[599], 395=>[396], 
          398=>[477], 399=>[601], 400=>[603], 401=>[402], 403=>[608], 404=>[611], 406=>[617], 407=>[616], 
          408=>[409], 412=>[623], 413=>[626], 415=>[629], 416=>[417], 418=>[419], 420=>[421], 422=>[640], 
          423=>[424], 425=>[643], 428=>[429], 430=>[648], 431=>[432], 433=>[650], 434=>[651], 435=>[436], 
          437=>[438], 439=>[658], 440=>[441], 444=>[445], 452=>[454], 453=>[454], 455=>[457], 456=>[457], 
          458=>[460], 459=>[460], 461=>[462], 463=>[464], 465=>[466], 467=>[468], 469=>[470], 471=>[472], 
          473=>[474], 475=>[476], 478=>[479], 480=>[481], 482=>[483], 484=>[485], 486=>[487], 488=>[489], 
          490=>[491], 492=>[493], 494=>[495], 497=>[499], 498=>[499], 500=>[501], 502=>[405], 503=>[447], 
          504=>[505], 506=>[507], 508=>[509], 510=>[511], 512=>[513], 514=>[515], 516=>[517], 518=>[519], 
          520=>[521], 522=>[523], 524=>[525], 526=>[527], 528=>[529], 530=>[531], 532=>[533], 534=>[535], 
          536=>[537], 538=>[539], 540=>[541], 542=>[543], 544=>[414], 546=>[547], 548=>[549], 550=>[551], 
          552=>[553], 554=>[555], 556=>[557], 558=>[559], 560=>[561], 562=>[563], 570=>[11365], 571=>[572], 
          573=>[410], 574=>[11366], 577=>[578], 579=>[384], 580=>[649], 581=>[652], 582=>[583], 584=>[585], 
          586=>[587], 588=>[589], 590=>[591], 837=>[953], 880=>[881], 882=>[883], 886=>[887], 895=>[1011], 
          902=>[940], 904=>[941], 905=>[942], 906=>[943], 908=>[972], 910=>[973], 911=>[974], 913=>[945], 
          914=>[946], 915=>[947], 916=>[948], 917=>[949], 918=>[950], 919=>[951], 920=>[952], 921=>[953], 
          922=>[954], 923=>[955], 924=>[956], 925=>[957], 926=>[958], 927=>[959], 928=>[960], 929=>[961], 
          931=>[963], 932=>[964], 933=>[965], 934=>[966], 935=>[967], 936=>[968], 937=>[969], 938=>[970], 
          939=>[971], 962=>[963], 975=>[983], 976=>[946], 977=>[952], 981=>[966], 982=>[960], 984=>[985], 
          986=>[987], 988=>[989], 990=>[991], 992=>[993], 994=>[995], 996=>[997], 998=>[999], 1000=>[1001], 
          1002=>[1003], 1004=>[1005], 1006=>[1007], 1008=>[954], 1009=>[961], 1012=>[952], 1013=>[949], 1015=>[1016], 
          1017=>[1010], 1018=>[1019], 1021=>[891], 1022=>[892], 1023=>[893], 1024=>[1104], 1025=>[1105], 1026=>[1106], 
          1027=>[1107], 1028=>[1108], 1029=>[1109], 1030=>[1110], 1031=>[1111], 1032=>[1112], 1033=>[1113], 1034=>[1114], 
          1035=>[1115], 1036=>[1116], 1037=>[1117], 1038=>[1118], 1039=>[1119], 1040=>[1072], 1041=>[1073], 1042=>[1074], 
          1043=>[1075], 1044=>[1076], 1045=>[1077], 1046=>[1078], 1047=>[1079], 1048=>[1080], 1049=>[1081], 1050=>[1082], 
          1051=>[1083], 1052=>[1084], 1053=>[1085], 1054=>[1086], 1055=>[1087], 1056=>[1088], 1057=>[1089], 1058=>[1090], 
          1059=>[1091], 1060=>[1092], 1061=>[1093], 1062=>[1094], 1063=>[1095], 1064=>[1096], 1065=>[1097], 1066=>[1098], 
          1067=>[1099], 1068=>[1100], 1069=>[1101], 1070=>[1102], 1071=>[1103], 1120=>[1121], 1122=>[1123], 1124=>[1125], 
          1126=>[1127], 1128=>[1129], 1130=>[1131], 1132=>[1133], 1134=>[1135], 1136=>[1137], 1138=>[1139], 1140=>[1141], 
          1142=>[1143], 1144=>[1145], 1146=>[1147], 1148=>[1149], 1150=>[1151], 1152=>[1153], 1162=>[1163], 1164=>[1165], 
          1166=>[1167], 1168=>[1169], 1170=>[1171], 1172=>[1173], 1174=>[1175], 1176=>[1177], 1178=>[1179], 1180=>[1181], 
          1182=>[1183], 1184=>[1185], 1186=>[1187], 1188=>[1189], 1190=>[1191], 1192=>[1193], 1194=>[1195], 1196=>[1197], 
          1198=>[1199], 1200=>[1201], 1202=>[1203], 1204=>[1205], 1206=>[1207], 1208=>[1209], 1210=>[1211], 1212=>[1213], 
          1214=>[1215], 1216=>[1231], 1217=>[1218], 1219=>[1220], 1221=>[1222], 1223=>[1224], 1225=>[1226], 1227=>[1228], 
          1229=>[1230], 1232=>[1233], 1234=>[1235], 1236=>[1237], 1238=>[1239], 1240=>[1241], 1242=>[1243], 1244=>[1245], 
          1246=>[1247], 1248=>[1249], 1250=>[1251], 1252=>[1253], 1254=>[1255], 1256=>[1257], 1258=>[1259], 1260=>[1261], 
          1262=>[1263], 1264=>[1265], 1266=>[1267], 1268=>[1269], 1270=>[1271], 1272=>[1273], 1274=>[1275], 1276=>[1277], 
          1278=>[1279], 1280=>[1281], 1282=>[1283], 1284=>[1285], 1286=>[1287], 1288=>[1289], 1290=>[1291], 1292=>[1293], 
          1294=>[1295], 1296=>[1297], 1298=>[1299], 1300=>[1301], 1302=>[1303], 1304=>[1305], 1306=>[1307], 1308=>[1309], 
          1310=>[1311], 1312=>[1313], 1314=>[1315], 1316=>[1317], 1318=>[1319], 1320=>[1321], 1322=>[1323], 1324=>[1325], 
          1326=>[1327], 1329=>[1377], 1330=>[1378], 1331=>[1379], 1332=>[1380], 1333=>[1381], 1334=>[1382], 1335=>[1383], 
          1336=>[1384], 1337=>[1385], 1338=>[1386], 1339=>[1387], 1340=>[1388], 1341=>[1389], 1342=>[1390], 1343=>[1391], 
          1344=>[1392], 1345=>[1393], 1346=>[1394], 1347=>[1395], 1348=>[1396], 1349=>[1397], 1350=>[1398], 1351=>[1399], 
          1352=>[1400], 1353=>[1401], 1354=>[1402], 1355=>[1403], 1356=>[1404], 1357=>[1405], 1358=>[1406], 1359=>[1407], 
          1360=>[1408], 1361=>[1409], 1362=>[1410], 1363=>[1411], 1364=>[1412], 1365=>[1413], 1366=>[1414], 4256=>[11520], 
          4257=>[11521], 4258=>[11522], 4259=>[11523], 4260=>[11524], 4261=>[11525], 4262=>[11526], 4263=>[11527], 4264=>[11528], 
          4265=>[11529], 4266=>[11530], 4267=>[11531], 4268=>[11532], 4269=>[11533], 4270=>[11534], 4271=>[11535], 4272=>[11536], 
          4273=>[11537], 4274=>[11538], 4275=>[11539], 4276=>[11540], 4277=>[11541], 4278=>[11542], 4279=>[11543], 4280=>[11544], 
          4281=>[11545], 4282=>[11546], 4283=>[11547], 4284=>[11548], 4285=>[11549], 4286=>[11550], 4287=>[11551], 4288=>[11552], 
          4289=>[11553], 4290=>[11554], 4291=>[11555], 4292=>[11556], 4293=>[11557], 4295=>[11559], 4301=>[11565], 5112=>[5104], 
          5113=>[5105], 5114=>[5106], 5115=>[5107], 5116=>[5108], 5117=>[5109], 7296=>[1074], 7297=>[1076], 7298=>[1086], 
          7299=>[1089], 7300=>[1090], 7301=>[1090], 7302=>[1098], 7303=>[1123], 7304=>[42571], 7305=>[7306], 7312=>[4304], 
          7313=>[4305], 7314=>[4306], 7315=>[4307], 7316=>[4308], 7317=>[4309], 7318=>[4310], 7319=>[4311], 7320=>[4312], 
          7321=>[4313], 7322=>[4314], 7323=>[4315], 7324=>[4316], 7325=>[4317], 7326=>[4318], 7327=>[4319], 7328=>[4320], 
          7329=>[4321], 7330=>[4322], 7331=>[4323], 7332=>[4324], 7333=>[4325], 7334=>[4326], 7335=>[4327], 7336=>[4328], 
          7337=>[4329], 7338=>[4330], 7339=>[4331], 7340=>[4332], 7341=>[4333], 7342=>[4334], 7343=>[4335], 7344=>[4336], 
          7345=>[4337], 7346=>[4338], 7347=>[4339], 7348=>[4340], 7349=>[4341], 7350=>[4342], 7351=>[4343], 7352=>[4344], 
          7353=>[4345], 7354=>[4346], 7357=>[4349], 7358=>[4350], 7359=>[4351], 7680=>[7681], 7682=>[7683], 7684=>[7685], 
          7686=>[7687], 7688=>[7689], 7690=>[7691], 7692=>[7693], 7694=>[7695], 7696=>[7697], 7698=>[7699], 7700=>[7701], 
          7702=>[7703], 7704=>[7705], 7706=>[7707], 7708=>[7709], 7710=>[7711], 7712=>[7713], 7714=>[7715], 7716=>[7717], 
          7718=>[7719], 7720=>[7721], 7722=>[7723], 7724=>[7725], 7726=>[7727], 7728=>[7729], 7730=>[7731], 7732=>[7733], 
          7734=>[7735], 7736=>[7737], 7738=>[7739], 7740=>[7741], 7742=>[7743], 7744=>[7745], 7746=>[7747], 7748=>[7749], 
          7750=>[7751], 7752=>[7753], 7754=>[7755], 7756=>[7757], 7758=>[7759], 7760=>[7761], 7762=>[7763], 7764=>[7765], 
          7766=>[7767], 7768=>[7769], 7770=>[7771], 7772=>[7773], 7774=>[7775], 7776=>[7777], 7778=>[7779], 7780=>[7781], 
          7782=>[7783], 7784=>[7785], 7786=>[7787], 7788=>[7789], 7790=>[7791], 7792=>[7793], 7794=>[7795], 7796=>[7797], 
          7798=>[7799], 7800=>[7801], 7802=>[7803], 7804=>[7805], 7806=>[7807], 7808=>[7809], 7810=>[7811], 7812=>[7813], 
          7814=>[7815], 7816=>[7817], 7818=>[7819], 7820=>[7821], 7822=>[7823], 7824=>[7825], 7826=>[7827], 7828=>[7829], 
          7835=>[7777], 7840=>[7841], 7842=>[7843], 7844=>[7845], 7846=>[7847], 7848=>[7849], 7850=>[7851], 7852=>[7853], 
          7854=>[7855], 7856=>[7857], 7858=>[7859], 7860=>[7861], 7862=>[7863], 7864=>[7865], 7866=>[7867], 7868=>[7869], 
          7870=>[7871], 7872=>[7873], 7874=>[7875], 7876=>[7877], 7878=>[7879], 7880=>[7881], 7882=>[7883], 7884=>[7885], 
          7886=>[7887], 7888=>[7889], 7890=>[7891], 7892=>[7893], 7894=>[7895], 7896=>[7897], 7898=>[7899], 7900=>[7901], 
          7902=>[7903], 7904=>[7905], 7906=>[7907], 7908=>[7909], 7910=>[7911], 7912=>[7913], 7914=>[7915], 7916=>[7917], 
          7918=>[7919], 7920=>[7921], 7922=>[7923], 7924=>[7925], 7926=>[7927], 7928=>[7929], 7930=>[7931], 7932=>[7933], 
          7934=>[7935], 7944=>[7936], 7945=>[7937], 7946=>[7938], 7947=>[7939], 7948=>[7940], 7949=>[7941], 7950=>[7942], 
          7951=>[7943], 7960=>[7952], 7961=>[7953], 7962=>[7954], 7963=>[7955], 7964=>[7956], 7965=>[7957], 7976=>[7968], 
          7977=>[7969], 7978=>[7970], 7979=>[7971], 7980=>[7972], 7981=>[7973], 7982=>[7974], 7983=>[7975], 7992=>[7984], 
          7993=>[7985], 7994=>[7986], 7995=>[7987], 7996=>[7988], 7997=>[7989], 7998=>[7990], 7999=>[7991], 8008=>[8000], 
          8009=>[8001], 8010=>[8002], 8011=>[8003], 8012=>[8004], 8013=>[8005], 8025=>[8017], 8027=>[8019], 8029=>[8021], 
          8031=>[8023], 8040=>[8032], 8041=>[8033], 8042=>[8034], 8043=>[8035], 8044=>[8036], 8045=>[8037], 8046=>[8038], 
          8047=>[8039], 8120=>[8112], 8121=>[8113], 8122=>[8048], 8123=>[8049], 8126=>[953], 8136=>[8050], 8137=>[8051], 
          8138=>[8052], 8139=>[8053], 8152=>[8144], 8153=>[8145], 8154=>[8054], 8155=>[8055], 8168=>[8160], 8169=>[8161], 
          8170=>[8058], 8171=>[8059], 8172=>[8165], 8184=>[8056], 8185=>[8057], 8186=>[8060], 8187=>[8061], 8486=>[969], 
          8490=>[107], 8491=>[229], 8498=>[8526], 8544=>[8560], 8545=>[8561], 8546=>[8562], 8547=>[8563], 8548=>[8564], 
          8549=>[8565], 8550=>[8566], 8551=>[8567], 8552=>[8568], 8553=>[8569], 8554=>[8570], 8555=>[8571], 8556=>[8572], 
          8557=>[8573], 8558=>[8574], 8559=>[8575], 8579=>[8580], 9398=>[9424], 9399=>[9425], 9400=>[9426], 9401=>[9427], 
          9402=>[9428], 9403=>[9429], 9404=>[9430], 9405=>[9431], 9406=>[9432], 9407=>[9433], 9408=>[9434], 9409=>[9435], 
          9410=>[9436], 9411=>[9437], 9412=>[9438], 9413=>[9439], 9414=>[9440], 9415=>[9441], 9416=>[9442], 9417=>[9443], 
          9418=>[9444], 9419=>[9445], 9420=>[9446], 9421=>[9447], 9422=>[9448], 9423=>[9449], 11264=>[11312], 11265=>[11313], 
          11266=>[11314], 11267=>[11315], 11268=>[11316], 11269=>[11317], 11270=>[11318], 11271=>[11319], 11272=>[11320], 11273=>[11321], 
          11274=>[11322], 11275=>[11323], 11276=>[11324], 11277=>[11325], 11278=>[11326], 11279=>[11327], 11280=>[11328], 11281=>[11329], 
          11282=>[11330], 11283=>[11331], 11284=>[11332], 11285=>[11333], 11286=>[11334], 11287=>[11335], 11288=>[11336], 11289=>[11337], 
          11290=>[11338], 11291=>[11339], 11292=>[11340], 11293=>[11341], 11294=>[11342], 11295=>[11343], 11296=>[11344], 11297=>[11345], 
          11298=>[11346], 11299=>[11347], 11300=>[11348], 11301=>[11349], 11302=>[11350], 11303=>[11351], 11304=>[11352], 11305=>[11353], 
          11306=>[11354], 11307=>[11355], 11308=>[11356], 11309=>[11357], 11310=>[11358], 11311=>[11359], 11360=>[11361], 11362=>[619], 
          11363=>[7549], 11364=>[637], 11367=>[11368], 11369=>[11370], 11371=>[11372], 11373=>[593], 11374=>[625], 11375=>[592], 
          11376=>[594], 11378=>[11379], 11381=>[11382], 11390=>[575], 11391=>[576], 11392=>[11393], 11394=>[11395], 11396=>[11397], 
          11398=>[11399], 11400=>[11401], 11402=>[11403], 11404=>[11405], 11406=>[11407], 11408=>[11409], 11410=>[11411], 11412=>[11413], 
          11414=>[11415], 11416=>[11417], 11418=>[11419], 11420=>[11421], 11422=>[11423], 11424=>[11425], 11426=>[11427], 11428=>[11429], 
          11430=>[11431], 11432=>[11433], 11434=>[11435], 11436=>[11437], 11438=>[11439], 11440=>[11441], 11442=>[11443], 11444=>[11445], 
          11446=>[11447], 11448=>[11449], 11450=>[11451], 11452=>[11453], 11454=>[11455], 11456=>[11457], 11458=>[11459], 11460=>[11461], 
          11462=>[11463], 11464=>[11465], 11466=>[11467], 11468=>[11469], 11470=>[11471], 11472=>[11473], 11474=>[11475], 11476=>[11477], 
          11478=>[11479], 11480=>[11481], 11482=>[11483], 11484=>[11485], 11486=>[11487], 11488=>[11489], 11490=>[11491], 11499=>[11500], 
          11501=>[11502], 11506=>[11507], 42560=>[42561], 42562=>[42563], 42564=>[42565], 42566=>[42567], 42568=>[42569], 42570=>[42571], 
          42572=>[42573], 42574=>[42575], 42576=>[42577], 42578=>[42579], 42580=>[42581], 42582=>[42583], 42584=>[42585], 42586=>[42587], 
          42588=>[42589], 42590=>[42591], 42592=>[42593], 42594=>[42595], 42596=>[42597], 42598=>[42599], 42600=>[42601], 42602=>[42603], 
          42604=>[42605], 42624=>[42625], 42626=>[42627], 42628=>[42629], 42630=>[42631], 42632=>[42633], 42634=>[42635], 42636=>[42637], 
          42638=>[42639], 42640=>[42641], 42642=>[42643], 42644=>[42645], 42646=>[42647], 42648=>[42649], 42650=>[42651], 42786=>[42787], 
          42788=>[42789], 42790=>[42791], 42792=>[42793], 42794=>[42795], 42796=>[42797], 42798=>[42799], 42802=>[42803], 42804=>[42805], 
          42806=>[42807], 42808=>[42809], 42810=>[42811], 42812=>[42813], 42814=>[42815], 42816=>[42817], 42818=>[42819], 42820=>[42821], 
          42822=>[42823], 42824=>[42825], 42826=>[42827], 42828=>[42829], 42830=>[42831], 42832=>[42833], 42834=>[42835], 42836=>[42837], 
          42838=>[42839], 42840=>[42841], 42842=>[42843], 42844=>[42845], 42846=>[42847], 42848=>[42849], 42850=>[42851], 42852=>[42853], 
          42854=>[42855], 42856=>[42857], 42858=>[42859], 42860=>[42861], 42862=>[42863], 42873=>[42874], 42875=>[42876], 42877=>[7545], 
          42878=>[42879], 42880=>[42881], 42882=>[42883], 42884=>[42885], 42886=>[42887], 42891=>[42892], 42893=>[613], 42896=>[42897], 
          42898=>[42899], 42902=>[42903], 42904=>[42905], 42906=>[42907], 42908=>[42909], 42910=>[42911], 42912=>[42913], 42914=>[42915], 
          42916=>[42917], 42918=>[42919], 42920=>[42921], 42922=>[614], 42923=>[604], 42924=>[609], 42925=>[620], 42926=>[618], 
          42928=>[670], 42929=>[647], 42930=>[669], 42931=>[43859], 42932=>[42933], 42934=>[42935], 42936=>[42937], 42938=>[42939], 
          42940=>[42941], 42942=>[42943], 42944=>[42945], 42946=>[42947], 42948=>[42900], 42949=>[642], 42950=>[7566], 42951=>[42952], 
          42953=>[42954], 42955=>[612], 42956=>[42957], 42960=>[42961], 42966=>[42967], 42968=>[42969], 42970=>[42971], 42972=>[411], 
          42997=>[42998], 43888=>[5024], 43889=>[5025], 43890=>[5026], 43891=>[5027], 43892=>[5028], 43893=>[5029], 43894=>[5030], 
          43895=>[5031], 43896=>[5032], 43897=>[5033], 43898=>[5034], 43899=>[5035], 43900=>[5036], 43901=>[5037], 43902=>[5038], 
          43903=>[5039], 43904=>[5040], 43905=>[5041], 43906=>[5042], 43907=>[5043], 43908=>[5044], 43909=>[5045], 43910=>[5046], 
          43911=>[5047], 43912=>[5048], 43913=>[5049], 43914=>[5050], 43915=>[5051], 43916=>[5052], 43917=>[5053], 43918=>[5054], 
          43919=>[5055], 43920=>[5056], 43921=>[5057], 43922=>[5058], 43923=>[5059], 43924=>[5060], 43925=>[5061], 43926=>[5062], 
          43927=>[5063], 43928=>[5064], 43929=>[5065], 43930=>[5066], 43931=>[5067], 43932=>[5068], 43933=>[5069], 43934=>[5070], 
          43935=>[5071], 43936=>[5072], 43937=>[5073], 43938=>[5074], 43939=>[5075], 43940=>[5076], 43941=>[5077], 43942=>[5078], 
          43943=>[5079], 43944=>[5080], 43945=>[5081], 43946=>[5082], 43947=>[5083], 43948=>[5084], 43949=>[5085], 43950=>[5086], 
          43951=>[5087], 43952=>[5088], 43953=>[5089], 43954=>[5090], 43955=>[5091], 43956=>[5092], 43957=>[5093], 43958=>[5094], 
          43959=>[5095], 43960=>[5096], 43961=>[5097], 43962=>[5098], 43963=>[5099], 43964=>[5100], 43965=>[5101], 43966=>[5102], 
          43967=>[5103], 65313=>[65345], 65314=>[65346], 65315=>[65347], 65316=>[65348], 65317=>[65349], 65318=>[65350], 65319=>[65351], 
          65320=>[65352], 65321=>[65353], 65322=>[65354], 65323=>[65355], 65324=>[65356], 65325=>[65357], 65326=>[65358], 65327=>[65359], 
          65328=>[65360], 65329=>[65361], 65330=>[65362], 65331=>[65363], 65332=>[65364], 65333=>[65365], 65334=>[65366], 65335=>[65367], 
          65336=>[65368], 65337=>[65369], 65338=>[65370], 66560=>[66600], 66561=>[66601], 66562=>[66602], 66563=>[66603], 66564=>[66604], 
          66565=>[66605], 66566=>[66606], 66567=>[66607], 66568=>[66608], 66569=>[66609], 66570=>[66610], 66571=>[66611], 66572=>[66612], 
          66573=>[66613], 66574=>[66614], 66575=>[66615], 66576=>[66616], 66577=>[66617], 66578=>[66618], 66579=>[66619], 66580=>[66620], 
          66581=>[66621], 66582=>[66622], 66583=>[66623], 66584=>[66624], 66585=>[66625], 66586=>[66626], 66587=>[66627], 66588=>[66628], 
          66589=>[66629], 66590=>[66630], 66591=>[66631], 66592=>[66632], 66593=>[66633], 66594=>[66634], 66595=>[66635], 66596=>[66636], 
          66597=>[66637], 66598=>[66638], 66599=>[66639], 66736=>[66776], 66737=>[66777], 66738=>[66778], 66739=>[66779], 66740=>[66780], 
          66741=>[66781], 66742=>[66782], 66743=>[66783], 66744=>[66784], 66745=>[66785], 66746=>[66786], 66747=>[66787], 66748=>[66788], 
          66749=>[66789], 66750=>[66790], 66751=>[66791], 66752=>[66792], 66753=>[66793], 66754=>[66794], 66755=>[66795], 66756=>[66796], 
          66757=>[66797], 66758=>[66798], 66759=>[66799], 66760=>[66800], 66761=>[66801], 66762=>[66802], 66763=>[66803], 66764=>[66804], 
          66765=>[66805], 66766=>[66806], 66767=>[66807], 66768=>[66808], 66769=>[66809], 66770=>[66810], 66771=>[66811], 66928=>[66967], 
          66929=>[66968], 66930=>[66969], 66931=>[66970], 66932=>[66971], 66933=>[66972], 66934=>[66973], 66935=>[66974], 66936=>[66975], 
          66937=>[66976], 66938=>[66977], 66940=>[66979], 66941=>[66980], 66942=>[66981], 66943=>[66982], 66944=>[66983], 66945=>[66984], 
          66946=>[66985], 66947=>[66986], 66948=>[66987], 66949=>[66988], 66950=>[66989], 66951=>[66990], 66952=>[66991], 66953=>[66992], 
          66954=>[66993], 66956=>[66995], 66957=>[66996], 66958=>[66997], 66959=>[66998], 66960=>[66999], 66961=>[67000], 66962=>[67001], 
          66964=>[67003], 66965=>[67004], 68736=>[68800], 68737=>[68801], 68738=>[68802], 68739=>[68803], 68740=>[68804], 68741=>[68805], 
          68742=>[68806], 68743=>[68807], 68744=>[68808], 68745=>[68809], 68746=>[68810], 68747=>[68811], 68748=>[68812], 68749=>[68813], 
          68750=>[68814], 68751=>[68815], 68752=>[68816], 68753=>[68817], 68754=>[68818], 68755=>[68819], 68756=>[68820], 68757=>[68821], 
          68758=>[68822], 68759=>[68823], 68760=>[68824], 68761=>[68825], 68762=>[68826], 68763=>[68827], 68764=>[68828], 68765=>[68829], 
          68766=>[68830], 68767=>[68831], 68768=>[68832], 68769=>[68833], 68770=>[68834], 68771=>[68835], 68772=>[68836], 68773=>[68837], 
          68774=>[68838], 68775=>[68839], 68776=>[68840], 68777=>[68841], 68778=>[68842], 68779=>[68843], 68780=>[68844], 68781=>[68845], 
          68782=>[68846], 68783=>[68847], 68784=>[68848], 68785=>[68849], 68786=>[68850], 68944=>[68976], 68945=>[68977], 68946=>[68978], 
          68947=>[68979], 68948=>[68980], 68949=>[68981], 68950=>[68982], 68951=>[68983], 68952=>[68984], 68953=>[68985], 68954=>[68986], 
          68955=>[68987], 68956=>[68988], 68957=>[68989], 68958=>[68990], 68959=>[68991], 68960=>[68992], 68961=>[68993], 68962=>[68994], 
          68963=>[68995], 68964=>[68996], 68965=>[68997], 71840=>[71872], 71841=>[71873], 71842=>[71874], 71843=>[71875], 71844=>[71876], 
          71845=>[71877], 71846=>[71878], 71847=>[71879], 71848=>[71880], 71849=>[71881], 71850=>[71882], 71851=>[71883], 71852=>[71884], 
          71853=>[71885], 71854=>[71886], 71855=>[71887], 71856=>[71888], 71857=>[71889], 71858=>[71890], 71859=>[71891], 71860=>[71892], 
          71861=>[71893], 71862=>[71894], 71863=>[71895], 71864=>[71896], 71865=>[71897], 71866=>[71898], 71867=>[71899], 71868=>[71900], 
          71869=>[71901], 71870=>[71902], 71871=>[71903], 93760=>[93792], 93761=>[93793], 93762=>[93794], 93763=>[93795], 93764=>[93796], 
          93765=>[93797], 93766=>[93798], 93767=>[93799], 93768=>[93800], 93769=>[93801], 93770=>[93802], 93771=>[93803], 93772=>[93804], 
          93773=>[93805], 93774=>[93806], 93775=>[93807], 93776=>[93808], 93777=>[93809], 93778=>[93810], 93779=>[93811], 93780=>[93812], 
          93781=>[93813], 93782=>[93814], 93783=>[93815], 93784=>[93816], 93785=>[93817], 93786=>[93818], 93787=>[93819], 93788=>[93820], 
          93789=>[93821], 93790=>[93822], 93791=>[93823], 125184=>[125218], 125185=>[125219], 125186=>[125220], 125187=>[125221], 125188=>[125222], 
          125189=>[125223], 125190=>[125224], 125191=>[125225], 125192=>[125226], 125193=>[125227], 125194=>[125228], 125195=>[125229], 125196=>[125230], 
          125197=>[125231], 125198=>[125232], 125199=>[125233], 125200=>[125234], 125201=>[125235], 125202=>[125236], 125203=>[125237], 125204=>[125238], 
          125205=>[125239], 125206=>[125240], 125207=>[125241], 125208=>[125242], 125209=>[125243], 125210=>[125244], 125211=>[125245], 125212=>[125246], 
          125213=>[125247], 125214=>[125248], 125215=>[125249], 125216=>[125250], 125217=>[125251], 223=>[115, 115], 304=>[105, 775], 329=>[700, 110], 
          496=>[106, 780], 912=>[953, 776, 769], 944=>[965, 776, 769], 1415=>[1381, 1410], 7830=>[104, 817], 7831=>[116, 776], 7832=>[119, 778], 7833=>[121, 778], 
          7834=>[97, 702], 7838=>[223], 8016=>[965, 787], 8018=>[965, 787, 768], 8020=>[965, 787, 769], 8022=>[965, 787, 834], 8064=>[7936, 953], 8065=>[7937, 953], 
          8066=>[7938, 953], 8067=>[7939, 953], 8068=>[7940, 953], 8069=>[7941, 953], 8070=>[7942, 953], 8071=>[7943, 953], 8072=>[8064], 8073=>[8065], 
          8074=>[8066], 8075=>[8067], 8076=>[8068], 8077=>[8069], 8078=>[8070], 8079=>[8071], 8080=>[7968, 953], 8081=>[7969, 953], 
          8082=>[7970, 953], 8083=>[7971, 953], 8084=>[7972, 953], 8085=>[7973, 953], 8086=>[7974, 953], 8087=>[7975, 953], 8088=>[8080], 8089=>[8081], 
          8090=>[8082], 8091=>[8083], 8092=>[8084], 8093=>[8085], 8094=>[8086], 8095=>[8087], 8096=>[8032, 953], 8097=>[8033, 953], 
          8098=>[8034, 953], 8099=>[8035, 953], 8100=>[8036, 953], 8101=>[8037, 953], 8102=>[8038, 953], 8103=>[8039, 953], 8104=>[8096], 8105=>[8097], 
          8106=>[8098], 8107=>[8099], 8108=>[8100], 8109=>[8101], 8110=>[8102], 8111=>[8103], 8114=>[8048, 953], 8115=>[945, 953], 
          8116=>[940, 953], 8118=>[945, 834], 8119=>[945, 834, 953], 8124=>[8115], 8130=>[8052, 953], 8131=>[951, 953], 8132=>[942, 953], 8134=>[951, 834], 
          8135=>[951, 834, 953], 8140=>[8131], 8146=>[953, 776, 768], 8147=>[912], 8150=>[953, 834], 8151=>[953, 776, 834], 8162=>[965, 776, 768], 8163=>[944], 
          8164=>[961, 787], 8166=>[965, 834], 8167=>[965, 776, 834], 8178=>[8060, 953], 8179=>[969, 953], 8180=>[974, 953], 8182=>[969, 834], 8183=>[969, 834, 953], 
          8188=>[8179], 64256=>[102, 102], 64257=>[102, 105], 64258=>[102, 108], 64259=>[102, 102, 105], 64260=>[102, 102, 108], 64261=>[64262], 64262=>[115, 116], 
          64275=>[1396, 1398], 64276=>[1396, 1381], 64277=>[1396, 1387], 64278=>[1406, 1398], 64279=>[1396, 1389]
        }
        CASEFOLDING_HASH_T = CASEFOLDING_HASH.merge(
          {
            73=>[305], 304=>[105]
          }
        )

        def simple_casefold(str, t = false)
          perform_casefold(str, simple_casefold_regex, t)
        end

        def full_casefold(str, t = false)
          perform_casefold(str, full_casefold_regex, t)
        end

        alias :casefold :full_casefold

        def common_casefold(str)
          perform_casefold(str, CASEFOLDING_REGEX_C, false)
        end

        private

        def perform_casefold(str, regex, t)
          regex = regex_with_t(regex) if t
          casefolding_hash = t ? CASEFOLDING_HASH_T : CASEFOLDING_HASH

          str.gsub(regex) do |s|
            s.unpack("U*").inject([]) do |ret, ss|
              ret + casefolding_hash[ss]
            end.pack("U*")
          end
        end

        def simple_casefold_regex
          @simple_casefold_regex ||= Regexp.new("#{CASEFOLDING_SOURCE_C}|#{CASEFOLDING_SOURCE_S}")
        end

        def full_casefold_regex
          @full_casefold_regex ||= Regexp.new("#{CASEFOLDING_SOURCE_C}|#{CASEFOLDING_SOURCE_F}")
        end

        def regex_with_t(regex)
          regex_with_t_cache[regex.source] ||=
            Regexp.new("#{regex.source}|#{CASEFOLDING_SOURCE_T}")
        end

        def regex_with_t_cache
          @regex_with_t_cache ||= {}
        end

      end
    end
  end
end