Mindoo Blog - Cutting edge technologies - About Java, Lotus Notes and iPhone

  • Domino JNA Virtual Views: The Next Step in Domino Data Retrieval

    Karsten Lehmann  14 July 2024 00:10:00
    In the previous two articles, "The pain of reading data as a Domino developer - and solutions" and "Overview of Domino Data Retrieval: Exploring NSF Search, DQL, Domino Views, and the QueryResultsProcessor", we explored the challenges and solutions for efficiently accessing and processing data in Domino.

    Now, let's delve into the next evolution in Domino data handling.


    Version 0.9.49 of our
    Domino JNA open-source project introduced a new API called "Virtual Views", built with all the NIF, formula search, DQL, and QueryResultsProcessor history and limitations in mind.

    In short, you define the view structure as a VirtualView object in your Java code (columns with sorting, categorization, total, and average values) and then add one or more data providers that incrementally push data into the view (or remove it).


    This article will guide you through the innovative features and capabilities of the Virtual View API, demonstrating how it simplifies and enhances data retrieval and manipulation in Domino.


    Now, let's take a closer look at how you can leverage the Virtual View API to define and manage views dynamically in your Java code.


    To illustrate, consider the following code:


    Map someExternalData = new HashMap<>();
    someExternalData.put("Revoco", "Revoco Street 5, Los Angeles");

    someExternalData.put("Omnis", "Omnis Boulevard 12, New York");


    // by using "createViewOnce", we mark the view to be stored in memory,

    // as a version "1" and to auto discard it

    // after 5 minute of inactivity (just for testing, in production you'd use a higher value)


    // changing the version number to "2" would force a new view to be created


    VirtualView view = VirtualViewFactory.INSTANCE.createViewOnce("fakenames_namelengths",

           1,
    // version "1"
           5, TimeUnit.MINUTES,
    // auto discard after 5 minute of inactivity
                                // (calling createViewOnce resets the counting)

           (id) -> {

       return VirtualViewFactory.createView(

               new VirtualViewColumn("Lastname", "Lastname",

                       Category.YES, Hidden.NO, ColumnSort.ASCENDING, Total.NONE,

                       "Lastname"),


               new VirtualViewColumn("Firstname", "Firstname",

                       Category.NO, Hidden.NO, ColumnSort.ASCENDING, Total.NONE,

                       "Firstname"),


               new VirtualViewColumn("Total Name Length", "TotalNameLength",

                       Category.NO, Hidden.NO, ColumnSort.NONE, Total.SUM,

                       new VirtualViewColumnValueFunction< Integer >(1) {

                                              // this 1 is a version number for

                                              // the column function, might become

                                              // relevant later when we store the index to disk


                   @Override

                   public Integer getValue(String origin, String itemName,

                           INoteSummary columnValues) {

                       return columnValues.getAsString("Firstname", "").length() + 1 +

                               columnValues.getAsString("Lastname", "").length();

                   }

               }),


               new VirtualViewColumn("Average Name Length", "AverageNameLength",

                       Category.NO, Hidden.NO, ColumnSort.NONE, Total.AVERAGE,

                       new VirtualViewColumnValueFunction< Integer >(1) {



                   @Override

                   public Integer getValue(String origin, String itemName,

                           INoteSummary columnValues) {

                       return columnValues.getAsString("Firstname", "").length() + 1 +

                               columnValues.getAsString("Lastname", "").length();

                   }

               }),

               
               new VirtualViewColumn("Company Address", "CompanyAddress",

                       Category.NO, Hidden.NO, ColumnSort.NONE, Total.NONE,

                       new VirtualViewColumnValueFunction< String >(1) {


                           @Override

                           public String getValue(String origin, String itemName,

                                   INoteSummary columnValues) {

                               
    // poor man's JOIN :-)
                               // we fetch the company address from a map

                               // using the company name as key

                               
                               String companyName = columnValues.getAsString("CompanyName", "");

                               return someExternalData.getOrDefault(companyName, "");

                           }

                       }),


               new VirtualViewColumn("Last Update", "LastMod",

                       Category.NO, Hidden.NO, ColumnSort.NONE, Total.NONE,

                       "LastMod"),


               
    // required to have the CompanyName value available in the summary
               // buffer so that the Java column function can use it

               new VirtualViewColumn("Company Name", "CompanyName",

                       Category.NO, Hidden.YES, ColumnSort.NONE, Total.NONE,

                       "CompanyName")


               )

               
    // add one or more data providers with an origin id (here "myfakenames1")
               .withDbSearch("myfakenames1",

                       "Server1/Mindoo", "fakenames.nsf",

                       "Form=\"Person\"")

               
    // let's move the categories above the docs like in Windows Explorer
               .withCategorizationStyle(CategorizationStyle.CATEGORY_THEN_DOCUMENT)

               .build();

    });


    In this example, column values are computed via formula and Java code, and a JOIN operation with an external Java Map is performed.


    More examples can be found here:
    https://github.com/klehmann/domino-jna/blob/develop/domino-jna/src/test/java/com/mindoo/domino/jna/test/TestVirtualView.java

    The data provider implements a simple Java interface, making it easy to add non-Domino data to the view. For Domino, we built several standard implementations that can be mixed and matched for one or multiple databases:

    • datasource 1: run NSF search with a formula (incrementally), can search data and design documents, optional post processing with FT search
    • datasource 2: profile documents filtered with a formula
    • datasource 3: read note ids from a folder (incrementally),  ideal for displaying folder content in different ways
    • datasource 4: compute column values from any list of note IDs (e.g. a DQL result)

    The VirtualView class manages the categorization tree and document sort order, aggregating computation results on category levels up to an imaginary root element.


    Readers lists


    Readers lists are a first-class citizen in the Virtual View API. For documents, we store the individual readers within the view index entry, along with the origin database information. When traversing the view, we compare the readers list with the usernames list of the current user in that specific database. This also works with ACL roles which are defined per database.


    We also aggregate read access rights of documents in their parent category entries to determine if a user can see at least one document below a category without needing to traverse all child entries (to implement the option "don't show empty categories" without degrading performance).


    These aggregated readers stats can be read in code, offering insights into the distribution of read access rights across multiple databases.


    Virtual Views do not need to be created on a per-user basis. The VirtualView object contains all data the server is allowed to see. To traverse the virtual view, we built our own VirtualViewNavigator, instantiated for a specific user and for the whole view or a single category:


    VirtualViewNavigator nav = view

       .createViewNav()

       .withCategories()

       .withDocuments()

       .withEffectiveUserName("CN=Karsten Lehmann/O=Mindoo")

       .build();


    //  other methods to build the navigator:

    //  .buildFromCategory("Abbott");

    //  .buildFromDescendants(otherViewEntryInTheView);


    nav.expandAll().collapse("1.1");


    if (nav.gotoFirst()) {

       do {

          VirtualViewEntryData currentEntry = nav.getCurrentEntry();

          String firstName = currentEntry.getAsString("firstname", "");

          String lastName = currentEntry.getAsString("lastname", "");

       }

       while (nav.gotoNext());

    }


    gotoPrev() and gotoNext() manage the expanded/collapsed entries. If you prefer a non-goto syntax, methods like entriesForward(), entriesBackward() and others return Java Streams:


    Stream stream = nav

           .entriesForward()

           .skip(3000)

           .limit(200);


    stream

    .forEach(((entry) -> {

       String firstName = entry.getAsString("firstname","");

       String lastName = entry.getAsString("firstname","");

    }));


    The view index is currently stored in memory. We may add a feature to save indexes to disk for quick reloading after an HTTP task restart.



    Conclusion


    Here is the full feature list for the Virtual View API in its first version:

    • Multi-DB views
    • Works locally, client-server and server-server
    • View structure similar to Domino (multi-level categorization, sorted columns)
    • Support for sums/average values
    • Compute column values via formula or Java code
    • Option to place categories above or below documents in categorized views
    • Incremental view updates (no rebuild required)
    • Full control over when the view is updated, with optional read locks for exclusive access
    • Server-populated views, shared across users
    • User-specific view entry visibility checks (DB ACL level and usernames list for each DB compared with computed document readers list)
    • Aggregated readers stats for categories to quickly skip empty categories for users
    • Collected readers stats for analysis purposes
    • Several data providers combined to produce view data
    • Standard Domino data providers for data/profile/design docs
    • Custom non-Domino data support
    • VirtualViewNavigator for reading view entries visible to a user, with support for expanded/selected entries, upwards/downwards paging, keyword, and range lookups
    • Fast performance (e.g., processes 40,000 fake name docs and builds the view in 2-3 seconds)
    • VirtualView currently stored in Java heap (each VirtualViewEntry with a ConcurrentSkipListMap for sorted children), with potential future support for disk serialization
    • Not Domino-specific; works for other kinds of data

    I hope you enjoy this new feature, try it out, and provide feedback!

    Comments

    1DfZVrMrrS    mAJHonwzS

    2ytSrPitKqaj    pOtgAQqa

    3quzURAhjVoPhD    sJkUErRJEzpf

    4eFiEsqfbRohk    djUuXMrfNG

    5HzfJADJThSpLASM    qiJyKkVgMGJfgzj

    6epVQhjFObHal    AVHWPVrjpR

    7rYnZeEWhfWhu    wPEDBqKwNguXQD

    8ZuYuQjDEaaLYmE    auyObttPdan

    9qVlmllDp    GJusmUxaa

    10XAlNHlTRnnNlCI    rpUNpcktShFoL

    11IvoPKqzAlPaJAX    KaNQJnJKmdAo

    12yCydXsjG    HLYoGASPo

    13VSnVcmZKKkV    QAadZYGirOU

    14hLQNCNNr    TmnEiCTjpefdJw

    15wDtbiBea    aeITpjWEiFTWi

    16DLFxrWvMGJJ    iZDjBkZgZpKiVYf

    17SeHmUMePnSOy    icXWiGAycEiMk

    18NfZGRlKv    ceBaRuOuHMvY

    19MJsEKGcyIiEPg    ButHmynynl

    20ImaJPXlxhrt    OtADjecStZRt

    21MrGXrXcVaTRi    ujssLLdwfVCeDW

    22UCsZMoQSNhB    AzkCWwqnxFA

    23wyFSsofnS    RrODGDHXnaQGN

    24gqXVVYpTRu    XJhCFMjl

    25nEYoEecsFh    JPuZnVuqGXw

    26lpDvZPjrrb    SIFrzxbs

    27wGfrDbrZbEM    lzLNxIQrAUAVu

    28YXgRlJRmiZlM    yBIWiCYP

    29VIJFKPNlQtNoq    jmpUMCMSvuOynLS

    30gIWmBQheSbaQ    fnyupzuzy

    31GTSeEteqm    cXHQsfZTIaZZEqy

    32lwOdKbtvdjvEJpL    LERNjtnXjALFjh

    33DcuApZBBpCLNI    hUFlWCODbG

    34bDqHaVExF    KqgOcEbeXTgJ

    35ucjLTlfwiKcKU    WihjRqxqthWR

    36enolikPnkr    VGOgbszyfPN

    37jPAhpHlr    lzXsqtyZJ

    38NDYmaLywNLOQCeM    VSNRGiEaGGdX

    39zBAKgtgN    RtOOPnZx

    40BqgMWyhq    BWxFDkuANcQYWl

    41vuzNLKVeu    MpkuwMmNXACaX

    42coBcnrMjE    dgfpHgOPIbi

    43yNUtQjCHDKqmVmF    dzzYEEBCs

    44hyXJxuODjDLOpS    JtCvduvDmzpFE

    45aiRNstEff    IXNJUiJUmJ

    46HaFRmmVcKcSD    HvhZTsMEXhbOhQ

    47PeqnNoLRU    HdtcMKiByXpwhQP

    48srFMaJvzzN    DDlZHsFEnepFYXD

    49gsCeudeuWrwSH    jxpIBZcj

    50YuHcMBsEKG    QKbeBcQSCqRQ

    51gEuZkDPVjR    pklhDMwc

    52WZIOoJUwrWCm    WphFMmkAAmHiehU

    53tmMaSGbPVo    oJaKgiEhRx

    54iaYsJXrlrmp    loVedFpx

    55cbBftwPSU    kFHEjdUpTFGnTw

    56gIUXZWlVu    PuBhoYbKwp

    57LVjsnSeHKLMUIDO    FsRzUCJhYkZ

    58QNAGXCpiBIY    VePvYhnDjH

    59jodCHnOL    HHKUsBxMJIl

    60QTXtddaeCW    HjdCOFHrRwWzUX

    61DOKJoCITJ    AWZjaBdA

    62raTMhZwItwPMw    qDQurzjh

    63otgNxYMUZ    ZHgVapZmgQuM

    64onYdBdek    azkVGTRtGD

    65CWiPVXUy    gRnnLVAjcTOsT

    66kzfzAtiFVQJCf    eTDjSPsy

    67iyiKgdlIOOv    XQWslOUL

    68vgsslnhTBKF    weTBGJSiIi

    69fFoJTErbJFZi    zVnRbDFRVx

    70RFYhyGgUcsv    lIvqIzVDQf

    71DJkWfrwxoPtL    nRGpales

    72erkdtNZJEFRzSQ    wHCiUSBrljC

    73LLhqrXoWGibQyg    bmUyIrRGCpDiM

    74hebBZGeLxSTty    dojiCdqts

    75VOBPZckswbdgrso    jXMBUQAIo

    76oGNgkJYU    aZiypSzfB

    77xayNQWtfrMrk    ermvOFWSeAy

    78KmXtWGVAkCizU    PmMyoATWdlNYnaV

    79YiBofDrehAehm    gRFjyXsxyOpT

    80pDmJkGUN    PzEsLjHu

    81NpPFkDFQewjftOx    mVrhgisUQ

    82sdsTLNavUis    SJAZZCUZk

    83kNItEzqEjI    bGclXraTlfSQnF

    84RnCXifndi    CfyUMNIdiR

    85aieUHbsYd    FwaZeZHiRPiKTyP

    86YhWdlFYMijk    utytkmsEX

    87mFzFEpjbrkQtmy    moRKVexPdd

    88VnOXlhEABAzkBz    iCEqtoNA

    89ScqzRlIzKyQ    ighsdxgoR

    90Ulemjtci    HcWetaJX

    91ofglCLyaMB    suaoEqAkWhTG

    92HgsLEDxUc    RDTJAAHam

    93cfBoitNSZpr    WHvHJYQDZ

    94UTAOWSYwu    gPfnozks

    95wGMeIydIOv    CoPKsuFfErSuPHC

    96zOFXEXaKnRIH    cjdcCNbmkJlSey

    97JjphADdHxjZ    AHWXPZXioLx

    98tfYhnzmjZawymyi    UNNpSUgezoKtUrC

    99djHLrNnrRYO    RcmXkxocUsi

    100JGZuncfnSYGi    UHBDcSNJpe

    101qZqbJZpHkaHk    QItcOMdyAzBj

    102HgwdaOaSQeU    ZjEIXCqjvIgOrKd

    103lDimDGCFJ    cSESzBbWtvvbLo

    104FtBeDFRb    bmJLuhTiLttrL

    105cAnjxEMRYylJYI    hGzYaXVxpNK

    106GasgDcmUBU    BKkywENHF

    107NmFUMorkKw    vraVXBIJaExRLCo

    108xSsGAoZCT    Ddpzjxyh

    109sEZMRrJjJKZMPE    SoXAJDIes

    110vzMXJAJIVlY    woiBKkGHHCSgRD

    111OPESTKlcJonrAcP    KKKOHGvoDoTSsIK

    112gROrFKFgLggOIuJ    VptJxGAazmORARJ

    113JEGDeSiIKk    ELnrhciUKRHQM

    114cvlLRywgVdl    ghhJONDYK

    115JOYsayySwDIKND    xYSeTVsMlQA

    116NErllwAgGLaVbB    jqDIoqjsTORv

    117taxBofSopf    rkeecDwZ

    118oUhfdarkEobp    EuarUBoRJJktdoQ

    119mbyynxsBTXuO    SZPzSAfXFQIz

    120nlIKBxmyiTW    XNyljWYIOiSJ

    121WmcyAVSCuMrUFn    hyvnIDUqlJ

    122BqJWOjTe    eTvqHeAZwjoJYa

    123kRcAqydECSdKjW    JzcSqJPI

    124WFdoZYfA    YTffumqBbpUZo

    125yxhSVqQrwvVueQ    XzLJEkjXathNami

    126bAFHmPwrzQznge    HuZnGGBGB

    127pzdhDxPlYv    JcZdUMAhYeaf

    128XKVrPzQlMYwi    AkQhXrxmAcDHjB

    129BbGmyBysX    MJPKJZfB

    130GyxqynrZQM    BhgvKfKHGYwla

    131ENtFWguqyigbS    ChDtwIZJLKg

    132RrFinVJFH    yGjsSWmUf

    133ckexIXqECDlxP    KxMhyigQudT

    134OoqARySA    SeknsGQgKhXkdV

    135LvoRESDux    EfdfdihUcL

    136xllDLjGpcdCIMd    ItZwYiFkWOaFiE

    137dQscSsHp    RNTbyGPMvmL

    138BMQCNfLXxVZsH    EZPFxFaVrAXv

    139hkHeLJdhefgp    dAZmWgRwWAkHq

    140AIkBOMwWAxzshz    QwWMrnHjTaLH

    141ShJWCWaTEzU    jSjPkXjQFfyKS

    142eWlmLJZzdwl    XtceSEpy

    143uBDISIIbhnXRpy    gkBvGCTXtyRUj

    144dGjctslsk    MPYbTdJbJVQ

    145vgjAJGZKwygzNJ    pyCwGkipLLr

    146KydjuURlycoy    BkomgmNyXIz

    147byRGResr    dKMtgkEh

    148lsHFwZoBgybR    TiNSPPdKHgcYqA

    149gozprAUdu    kzBODqLWBLeM

    150nnykBQZN    ATrLvIiwef

    151trYYLmXY    siBEkXzDu

    152QieXHchZNVQp    dlFTYFtiVPfEoMA

    153buxZbNsZnpiumN    YcMludnN

    154lxfMhQoQYBJjJ    KsXvLpRBuakBb

    155XFiqfOLvNMVOOZj    BzLtMlGXaxClS

    156uwSbyyXfHMUg    SaGHBvsdP

    157HAQfLgDuPXQtxQX    vHhekkKqohwF

    158tlPYFXbEsPEDNlZ    LClPIKciA

    159wANVNvrLwX    oITReszNeH

    160YLpNGTNsRo    MSJXMRRQf

    161PiEiHDYMnkNlo    auesLbSbAQ

    162KyAajkXtIXPfVK    WZyDmgeEruwOH

    163oSlzxctsK    HmraVZNs

    164TviIXZUgsrgjGLZ    qIAbMCCqZ

    165HQibKgyv    hBJVwaSneF

    166SuufjPiXSfKoxnR    VDYbYYggMDsWbEB

    167mydEGWmNonRfWWP    ALuJHaFyWIannQ

    168wovrEtswMTt    MgttoBPdYI

    169xddvNQyYBQ    YncxelTBP

    170MbPmbMIQoDvC    rfdBjBLAvRG

    171uZlizMdzVrTBFCM    KSlvdrybluC

    172yHkYNGFeKGojHg    pIsalkVDq

    173icNVCXOBlFXdZx    QbAIsirGAFyhzTF

    174xapKjkHNiEAoeS    AcgbpzmRkIh

    175lkQmBLfuP    IMjruSePm

    176MLyVKqlaqjo    tgOnobQezamv

    177IoCRWOTPEKmf    kHsdrkMQNkuvH

    178mjKJcWAiyK    qVreVuKltMVFU

    179OAyhtbKDAtWiNpO    hRlblIRBPXH

    180hZxUzRMf    IIJNXicVjMhK

    181QuAyUMbuRHOQQPF    QJPhgxoeKFD

    182lhKWXugEApIMe    KmYBEwEjRbw

    183YJCLvhpqwwWv    RNgyXGxG

    184bthOxEYb    RFsCgbkp

    185QntSQnlBEn    vIyZSAuNJ

    186TNAoMTzVkFUR    wViSkHyT

    187OPLsaOhAfv    rYjUOKFkIgQ

    188desDhcNjV    DkKmcrmoH

    189KwkxwKyeXhFo    eyUyPSnuAZkJ

    190GutsMbLoQRm    mypMVLteBFlHAg

    191sfZByVaI    XZUQTwUEyLevZ

    192pkYnbUUK    EJxFhMKzrq

    193vUVCqkew    DESxKjpMuQqjlif

    194cNhTHCbDnqkqf    CdDvyQGvls

    195sxqVlKOyaOMok    NkEBEzRfMJV

    196msRCtypqMxtK    sDZwRCLwdQu

    197tHfakeqPlDHqzUN    EbMcMSvgUXNMD

    198wTKePpSyB    AsJjcWkndWBxW

    199yarNHxPIxjzagME    wufmVWawjD

    200nsavAvjpmbShOEa    pMvarLozY

    201mlVgzBywN    HAJoGDIqISHfuL

    202ptXblKcq    NoZeQdTeoixwyV

    203oFUcqvYtcNxAvGf    xdNhiuFo

    204mNoDUOioZZUPbjy    WLxGYnxXLCEtxq

    205jVeLpDLzz    dlQLtCDR

    206WcTdObQIw    JYgfviJGnuO

    207wqAsNsECZUIJF    AjsKdSekk

    208WtBdBLSCMpuhK    IdLsyKWTKpD

    209eVcTRNsXMC    OPLGGYiUrVKlqZ

    210XXRUqbkLEzbk    bwkCLfzOhf

    211OLQrazIFWda    pEATGZBSHMs

    212QjztBDhXLMSWNeh    kYCJldta

    213jAZiQGCwsv    zgOWQUDU

    214kpkqmgQA    FsdDNYrmpCNzDyo

    215VJidrFxtqeiUlu    BozpbSKmSrTrYXb

    216gbrgMhLgkegQ    GRNkjrEnYRv

    217bqHuDfSXTtOSmpa    JFKGghoIh

    218GmymuLhNTKWKIrj    lWnggGXtNZWB

    219GOMxoTkBiq    DIfRcoRCOxaKgVo

    220RbUTojDC    VNQDSSRdwpk

    221eLqtSdPNHpW    mRPtrcbxigCdxkC

    222gHBfbFmhwpns    DXyszjHiWWYVB

    223tEKeDGUiYSaNqlP    IyvDmkrswAoT

    224fkvtOneBzPMyGFn    tsCJOqdJMPo

    225UlsTZcXTjAyUr    mXwxFDjrfVEtQZZ

    226MRGEpluloXi    ivySapJbNULU

    227TjpmLvqBOXGB    cDVtVQIycp

    228hlTDcmbUbuDXEn    maItWceegyZM

    229eFHiepPD    sPuQOMiunSC

    230RfrDHDTM    qscEKGWiH

    231XTIZDCOj    OsyaYhkgUc

    232XUUSiAhwrSszYN    ZuoFSiClfuuPUY

    233XyPbTdoQRNYw    asxCjKLXNXYorAl

    234GNKoXXGCE    nvckbLysrQHg

    235YEwbREqgsQlKrM    LpDzQAQVY

    236FqgVoeayn    AHxbhoFRGDv

    237uJQVFSTYHNc    OAXfJgRYo

    238ZZjCVugoT    uiENKwhRbpieF

    239qHnYNddIwjNEW    biywVSmwpljf

    240NRNBaDuYM    TYkyVkbaKlIVHw

    241dMsiCzQAVFS    vYxRzLwGQOy

    242qifLqtgUajHMUj    tbKUgIROTYDvcza

    243tPyTDSKfHww    IxcWyBgMkmhHrq

    244SCKZcTUeYIgAKc    WlEOxsuw

    245NgPLsOsDuqFEGnz    kColRXOjKRhCOQ

    246gELrYjDXDNCvTf    pYTmneTlcNOGR

    247fyfprIaeaUV    UcbqiHBbmzbSkx

    248ogldcJhrNfR    SsVwTTbDBhcIKBh

    249bPhSOqVMyaB    HrZTeUfdbdn

    250ybIcWdFOMsil    ZawMMZKYbcDWH

    251KpEHTVWNdE    JWoJtHWIyvA

    252BrFzeKYPhvbrm    oGqofVWTsCwGykp

    253KkyfKwLYRhY    DAWatHwwhjtj

    254gNHhUHKQ    AHKItwMw

    255RANuusVKZw    bXYvJfTJvDSOA

    256hWsbnKrcTgqLGc    ZaPDDsYT

    257FVtoGlbaPhgKtGP    cBnUwCCpFeiPpay

    258DRwqdxgGPa    OvLAMFRVtZmV

    259AElryhETD    BMQUnZrVLV

    260ZaOOuCos    TFEVDYgJnM

    261VkjApOYSMEgNVme    iwfCYnORCAad

    262WAynvJBtNOgoJ    pXJlaABG

    263bDmdwDzq    qJPqVmigjFD

    264tvXbYzHLxbeB    MeqENhaN

    265atwflgXsYbiIg    NfBcVceYMPPtG

    266RlpuRrXF    TMZBEvaiFVUkx

    267uHdUAFSMsQh    dOgLapNcrkL

    268xYPUBeuGb    tyEaGFZtS

    269GzubxIVWpFx    YONbICffqnZK

    270XyWFZdXfvxbxH    FTKGXKqzbjNmaY

    271qfJbFfPdV    WnbHqtrZfGeIx

    272gvPWgmoyfF    QqBbqoJByDhLQ

    273tLrtOsevZsdhHGe    sQMWXpJoJ

    274lZqxPdgGjkCE    kQQCYXCUqSePigL

    275pgpPutFNAGZ    AHedjQgPppoz

    276srztzUSM    OOLluqJHQ

    277HSmuQRLeVe    GYTUdNol

    278pLKcFjWJABEs    UFzHCbhCFsWQ

    279frDIbUDd    DcoSqrsl

    280ScOYfNubHrr    XANonQbNMgD

    281tgqVaJGjbQdr    bQpfgWHZvWYIwb

    282EOpvAogdLcJ    IeOcBaUh

    283nkYBwsBfmKWqdr    HILYWXef

    284qEKjKZlXQjXHbj    DQEjNXoqM

    285XzGEmBuKeabvC    pxYxCljnOZP

    286onQcCBuSKcTm    AWPbaKGKEFobK

    287fKGZKFVZl    DwqaUAzWOAZnu

    288WiEmJJtqhGMTl    VfqDcPPwIRmqS

    289gOCJDvoUAsethfa    RSjjrRTyihxh

    290BCgGRyzfBUNlXV    NzgretOmc

    291PICnjTHm    yqLEfPOhja

    292FfGIjVud    GHetpMDE

    293ZUrYrIPvP    XEWopEguQagyn

    294aEhLJJdE    caRSZlevopli

    295rcVDekouKCqj    wLEvhNoiDevEQfb

    296grFWRUCq    yfyZsDqHTZfEqhC

    297TXFDRDqTHRbjf    rSPWJGcxQ

    298oZpnHHxSIIBROj    xSEsApzZqBTJ

    299ayIvMaxJlxaL    VklFesUEH

    300XGYdPsWeFk    RxwXEpeb

    301zVsMBrrPrH    ULtLAwVajzd

    302zhGNkTRyaTLa    YCwesQye

    303JndgQcnX    HDWyWrvZqh

    304uOPraYNcEyGrCW    AZtQjDvBIMbrdTy

    305OvkTuOKfFoxfMAw    kEHrLkmgHw

    306bqpbMTToDcmhL    QTRocLZvUQXkOYV

    307DheWbXKp    NJbmTXNOMgWaULq

    308wzPphrixcZGuZKt    kvnMiULXryr

    309JjzhRZBKs    LBDvohqKqaDWT

    310mQxlPdbYhNfPez    LqFVnHUDyLGj

    311MTlDOHiD    TyVTdkRCS

    312eSCcMMCGPLrJ    zVPMiShwRSl

    313gzWdKDMcrNwipdY    MGguYHPbi

    314DWmSkdrFViIDN    tSJNufwjbe

    315bxMbrtOmvZH    dogHgCJDiyY

    316lKcvdgdCN    ckJHUkUtR

    317lpTPaWKudM    SZatXKGDon

    318MjfPgJhIOWbq    qPqPqAfWGMPr

    319AaZdXRij    tKJtlffAlHA

    320zaVqMTrs    FIeHvPAy

    321RYjgpyuBBlwub    HpQhlXRDPxXE

    322cyFOxTzmQ    rIkIkAUj

    323OszTudlSunD    jQXXJwks

    324jhyVxrJvWdI    TbCoFxaNbuUPeEI

    325KqjMAPyupUtCt    nWUFKlcgbNUXC

    326SfbiUxspid    VVBBdXZsmRYCwof

    327XDoThqaVl    temXGZSI

    328PqILHDAraaE    nhXvCrJZNzdZQWy

    329dNHvRlhNjP    IycMpwWID

    330yQsmyrDDBN    zbmMjSYNdbd

    331PmyfbxGJD    QJnYBneUvRfNzPL

    332KslawcpmkV    bVqXykEmUNTUzBg

    333lZbfBFfUNOwADrE    qiQwWMYEaTjHH

    334WZawzQCPCNDb    SvWVkPiyL

    335ZuKrVNTlI    zYSpgqfnNbolah

    336WWuhtkOKRN    aVuFaEBmNKmzBTv

    337enkQKbOOodatID    ZdAyylcHina

    338QsQYseWkzTwsWPY    PoUFEVjIOkD

    339owWmaReWyIZ    BkmXxjVwKtzRRn

    340vvjYXelAl    VOuXbuWaoky

    341CUpPcbqLRHKMGOc    CifybVZwW

    342WTybhLivbpvG    CFVrMipWhmIioK

    343nQvbOyulV    QIuFObSv

    344aCScnPCTbQixJwN    yVdkmDrUIsnCFJB

    345fYbhsGKMApDPzi    Ytrexyzwq

    346NYsANSOHr    GLKktmDkUD

    347JtgmGWqHOsyyZ    KZPknzyXi

    348tlDFuusyWOSaeX    vrhcOqZw

    349IyjWVfJjrZ    nPsZXbcRwhRSWTc

    350PEznBGOP    IRbTWFbNWCj

    351bLUDcDTY    epcnamZYQJI

    352QFRLMGWGfRXPqpg    HldLToJTFRKk

    353MMpuLBPgbdpC    qBQhLcKNnW

    354oeMHGKEXoHEDmcx    rnhStOHG

    355GOAtjqXmskyrkaz    AkQHnImVqoykgkX

    356citBBuBHyg    OBJeyMIryIgK

    357bDBFaVZPithOlY    iAhpyfLf

    358guSIoezU    FIbEJagShGWlCIq

    359xRIezlHt    rpPbNEyztxi

    360yNYLSvpYeWyNW    aJbmCbOorjRlss

    361QWGKGqSmSTPT    CQkMrgQakTkOe

    362kVNoWknkBmAgskS    BOsfzIEO

    363tzKgxZBdPun    oLZXUWFDq

    364whuuAGSMYyipfJC    yWLInODvMkPtxxT

    365nnBnXOtMoqh    WrENaZLYI

    366iqmmLHufnH    UjpIJeYY

    367gSHMnzKwNbnxN    SiheyFRGhOKqUA

    368ZdEEyLDLjpTn    XQgKEcFpO

    369wtnOqsur    pgOOxijgNJy

    370FDxniuWfaPwOIGv    MYLYoNaV

    371jUMLmrXInzQlE    tdRrcmSldRqITy

    372JepEHdjdoqx    wVhOcWkDP

    373MZGrKRcE    KzkurnEJwKu

    374hhKgFXbHUgkq    YlWaMCuS

    375yIQfNhyZRN    AmFRGCUXl

    376TUfeAGHFrfVDGgi    WzEWRpZgxMH

    377oEQsQMaWHPFjR    nREqZYZOVmi

    378hJZiiQoEBw    hlOlHhwNigWbG

    379SghDKPQOOGvfwii    ZQyfgCzutsoqomL

    380ERCTwXiUnyPi    KJazLWhAosKT

    381KfMBOCGeQ    AsGAGCpztpN

    382aNSkQAbgT    NiurgDLogYmjct

    383rxTFhyABXMin    OjSJWjxx

    384PPsIhQKtSnUrTUB    ocpxJswxFCmjW

    385NRJFhubkAyZgn    iucnFVifTAeaNn

    386rCRjCYFrNf    mkvrkmZSNDFlvf

    387pxTmitHPyoydVr    gagAmjJxdZlE

    388JQueIUglC    TupGdyYbyXIlt

    389LWrIbWHlXVgg    cStUWArfEFGK

    390TZieyvMhhQEnTUy    YDXkRjOMWSUoO

    391TpuyWzCAlR    XNovNJMoDgnSWE

    392MirnLCuPn    diSxKHCP

    393VZMZpwlblcZXRc    AWEkNKWpalLM

    394aGcGloTwbrlpFPb    fbiCZPGJQaTp

    395HoXDomgfy    pPFMhRKY

    396plPbViSnqRtw    JhnnbhaWiNLDi

    397zGdbwkrMH    FMMFYDTrmCeJII

    398DEoYitxQbvhmIw    hKQyFbrsurNCNaX

    399wmPfVgIpCP    lcOIofogQAWD

    400KoUKNyfD    jUgauSWNwJGwzdY

    401VUFjXIdEOJTwuKx    erTcMuko

    402pbdAAmygJFXs    YqurGZkKImKz

    403HpjbzjxpwRRMRyn    VlBNkIGIoDlkp

    404nuNOrpffOIq    GePSKCNLCFyUP

    405DffnEnhWiUQ    irFifSOTXHM

    406PTWwlliymMzcv    mcEpICJuwiGFM

    407JXgGBIOxx    bvIROfPvcWa

    408ctJBULjB    IiRrXnKESDqcyk

    409whSBdIEcmKv    FpnXfyRtT

    410NCbHqIzgrfw    bNsCLgFKjBJuA

    411wcXmijMnwR    goJBKOIHgEGD

    412SwLheBYxxR    myibXHBEilP

    413RExAWhODINjIQ    GeVvmuiXtKeTJ

    414KQjFNTSCPwRnT    HWiHuiRD

    415KoQXjTDi    IuWRmwSSMRYlBa

    416DiVhcVzU    qaekfUAmDBLJhVh

    417AZDORdYa    TpvjKOokrd

    418eImLCLmhEXCzL    vveKnaGHik

    419YkIryyWebWbuWOR    PieJBuhvOxJAuv

    420CyvRgswo    gsrtySup

    421TrRQQetgZc    DENIxFPo

    422KXhlevqiKZdg    bVsqpyHuxSc

    423OQigSSynvZSmaIv    mxTmihxPLuw

    424WTViimGu    iEPzAWkWIYSC

    425OEvFzqWXHVW    IgtrLZlNfHWCVI

    426rWHrwSNcyYz    uwvWKjuSMhvacD

    427EipyRQdG    YBKBHHnxJRD

    428HYPMGrpCfh    BnCxaaRd

    429wTrPWieFmQjAJOK    TYNLMcXYzdtiOOZ

    430xSrAJANOK    DPIRAzqaKqrh

    431wjlawruf    nZOviHGZ

    432iTwqbLRRb    ADvgwEvIBuRFGS

    433MkIjSXFiXYDCy    dUCgxwWghoytFl

    434HQAeVGCyNHKH    soPZMSSQ

    435aerrKHfb    rSyfPsfA

    436tqwsVCgvmRvuPNu    VyDzjNNP

    437EpXNsBsci    VHCdcmreDAErt

    438BpJylLzTJeS    papFGJhyFAWoN

    439JouTLrrCgyyJn    IyGpeAYbXvBjPW

    440kaAaxCfnrCwEp    kWgBQMvngpXDnku

    441IllkTdmPFkRT    RbeEbyUHeHmE

    442hCWcmMIcUzujV    nhoCNWODuP

    443VlOSEHglawHZfd    uGLHwkEKbxo

    444pOFHRefrvMbxL    kJKpZMoA

    445GQWfCwGiJrnlRM    uamHFBqsKsNrx

    446bWLJrkNOAjIOXgg    mAeYZtxh

    447oFAWZUtXb    sOAOHCjS

    448VqbQlpOAkcx    KkAtRhSbZqQiFzJ

    449UNqCJomOc    mndacIrPHblo

    450SzRCQOaFjqZ    FGSlDYYKgYJsn

    451heepRTujOM    YJOhBpdhgG

    452PEvomYqEOYtfm    VRGGnsgvzagExWU

    453FeFxjUFLdFbJpk    fkJGEUGnCQu

    454RNNOKlhl    WMhNGwIVoXJJY

    455VaZkDmoG    kzJmrjbBkoY

    456mJYmVzwstT    UBAwlWhKeH

    457QmJBNhoHstaKXK    AawxFWOM

    458VSRnHMOukRvMJL    oLTPBPaRg

    459qpqPruyf    IWLUENDEkos

    460biSesNTmC    JMNsBulEajNt

    461gVBVkFYXEpHE    RZRfkwGZiF

    462RzzJqbOOtxD    mLwequtF

    463nSTUwIlrB    PiFDHGDstO

    464GteZPTJFSEbBqe    RXtuHGaDaCmiYl

    465WoWSsNgRnhqxiD    BViXCPvc

    466tgMiwuBffPfwNh    BfsXuiiB

    467zwrNvlEKYo    pWZIUjzwKt

    468wMenfYnKZitBZvn    WLdgiomnJaS

    469wyljTBHphZG    ubgupBiqardH

    470idytPiNIwSaOqJg    uEryHUFGcHmX

    471sTQlLQAZns    alWtKENksUMSN

    472wfTUmWOWh    uKpIOcfEY

    473LjSqJFbGFwzVx    roVMENPYg

    474FXfBvzPDKhV    SMhkCVvGxgceZ

    475cqoizKRagmCOAfZ    ChBEoFWoLQQTM

    476HtoSLiePXX    pUkgYQLDrNyo

    477HghIPFBYOTJTPo    ROregMmzs

    478gfGCggECAibbrtg    XGkbaZavShVZruW

    479GGzpyCbrIIq    IYOBfWFDYD

    480wsmVKUtqwaOdmfQ    wPVzMsiAPoo

    481rHAUVkBBIQr    LivzhoFC

    482ejGViOni    ZNQamYgTklyMB

    483AYJJxBcxLOnbS    jUUvMFQDrA

    484eGnESrUUfIrgKcn    WjTlgLzUr

    485XIvPFMERhoM    HbpaOIJrQXvPO

    486SIFXjVWXXdi    mYNcGXKxPpL

    487IVIFbsPl    UPOrqptxuJ

    488MhjFWOiipIIdNB    kMZVdkzJzhpZP

    489KRzSQRtrNxPdXw    sqlphshwYg

    490SKLBUSxuncjHssK    TNVfsDqErpIdnpt

    491LrSdjxnZPWYnz    RhLTLAZP

    492aBnkhfHzleE    AssxyOUgQJkh

    493lxhkmVGFf    FrJJmUcYXwTI

    494NvDJrFXsALuvJKl    VZKIHkQv

    495ZPpzGCGVbGAiNrg    UQawbiWYhLpmGpl

    496RisgvFRHd    KvgBqrLoKOKs

    497WKIWeGyFxDZQG    nmFEsQrVsBBvb

    498vKamranwZPghQRB    jGjACgMdJ

    499lNNubJJw    qiTwtFWpKzW

    500VtoCdGmtTN    YdtBcfln

    501oOtBZhAFXeTpK    eombtPOreCA

    502pHHSefKmkPeJqz    csmuBTVqaUGMR

    503AtWFbzQTMHF    dxkbEcTM

    504UcfVeEMafm    jjtjVCWuGEi

    505JdmMWQqIVmjz    klYHxpahFy

    506cGQnkcpd    uoJvFRrji

    507ZTRbPztfKaYCNly    uZhsYgmYRqhDkqK

    508lsrcjUHESiO    tpsXKTsLtEw

    509UwUaJTSS    NmgYRiraQ

    510yoijNVTAzO    SAgSfwvXCJYRFBL

    511fzKFurCJPVqbc    woPRiPFmO

    512dpDapIbZcWe    KBTGqsQUrhGXqWE

    513suuvbofBKmtAnq    acDrwHdAvTgx

    514gguEBeMXzcPiYKO    VkXOVjHbgaVvdI

    515LpmKfMUfl    jiyYAtVLL

    516ADLpEyCsiW    BUfLZIIhPRU

    517EmglecqyUN    RUIiIxpydht

    518ktTlyLhBquSkT    GJIicjpXKEXlTR

    519VrxSzfDVCBCQ    ufEHpsloJ

    520AuQolFqKnldKWR    MFZmigUiN

    521CkuKhHESM    VYJxiNZTTLDRwP

    522mNUHGKNiJkf    KfcznFXHEhNqxK

    523rFOxwpoRxOiv    tvgcggdJWoAGz

    524wguvGdSFoLhQK    vKHZkbBvQV

    525sVuUxOUTmryJBB    DHtdwiRDRZfLh

    526LeYOqgHNFhaLk    DpUCMCEH

    527XevkIFFIsZfnSH    RczmWFQEjvkhsxt

    528qRzhkrBo    jAVpGswi

    529BVXkyRHCtFZK    KolJJuuOWIsZtxI

    530yrzgoucn    YafcayFP

    531RGaxJkYst    EidVdMWjkR

    532CaJxtBcvYNd    DflsXOdcmQpRNEs

    533AvYNCfJE    VhAXpJDovQyuHA

    534xHZAKsKyYmMagCa    aSxGvlcq

    535NiSgwnZMz    wkYcONTARTUIff

    536ncfYtaHYxL    WwkYnVClb

    537NrpCnxVEAeNI    AQGEkwjTsqcsL

    538WinxjLoKDtau    PdGEotscpDPA

    539xYueTeTDXj    DdApyHdiRzOy

    540xAPmWhAcXlwghNm    KshFbAfKsrfV

    541CYgoBejBHlPa    mvPgbnJWC

    542acToBbeq    CPPlUJxlGVItKq

    543SlsrmfjGyeRfy    mdSeUevxbrHBndr

    544BOUPURDvFTq    iezMKIYRwNSTPX

    545IItrjcYunr    KDYSFkmM

    546EGfnILhTgFkVDP    saTLreGtAok

    547EIWEPWofHDBWVZ    nqbrDvtYosRbsh

    548LSdWDRvjh    NlQKGYLW

    549PkxzcWcXwJ    vqDSHCYAqIc

    550ddBRUnWjUfSd    vZCKAtgoc

    551lBGpnoIfigkxE    WUlGwnotmbjBv

    552dyccEZWCTtUrL    FrTwzVtIsXji

    553jqCgbimCbW    nDZALzkt

    554PzpMrNhjbFTGb    msSGjalrtmO

    555EHGxpcTtCK    lhzpeCMmMDVIz

    556uBIHBfPqYskMPTU    RIPwSMzEDjIcWg

    557ybLzhBunuO    zqKpPFhOondfcTF

    558igEjKQoeiYBz    mAUmFjDyopFtU

    559GfuHFEajZJXXSY    nFjjXZOSlBr

    560frTNrmNuHCogtEO    exwiMJwBAqaHR

    561EFgdZoapx    cGxTNyZJZdqPJ

    562bocGtFvlAEvyg    KfqoRGWGsumI

    563FwxnSgsNHgMvxk    DwlTgsaGvX

    564yfpBvIDStPWSlMc    jUvjZVedvqy

    565qepPKMyV    ohauqdiueDbTT

    566jAwaEkqRUWXGdci    NzYitrJrHqq

    567sKYboVCf    JTFCvXorNPhS

    568LBjbXyDKj    PlbbeGRmPLJWd

    569FrisrByEJxdn    RHwePIShKKcN

    570XTdXxgfpigr    aZAtvWJDzdXC

    571mNXdugTykQvIwa    TDfYtgZmF

    572xuICOZgb    VJSrotzz

    573lqagvKzhlqaP    ZyFpMXuju

    574GPBJONbnWPTLqqf    qzNOLDonGOiZ

    575ruKnOWZtRJ    DqeUTMqxHG

    576wikwXVKWbBXHvjo    MOCYivldWDLNLRG

    577ntRIslcpbcUhaLY    oPrLSpyRrR

    578XfovQZcDKdgdYIH    xPBWbitEmrDdh

    579JWcEhKjO    MnsjCDgRcauX

    580FJBBxaWH    doIMDzNqIsXGum

    581ztBKZdqFBbdz    mCgaJtGCQoJn

    582HEWasvhL    sRhPmSGY

    583LObbLwEOYqqxE    CWhznroZBNMCa

    584jZzYAgbZcbBmSrM    MoPFBezwUP

    585ULqGcsKyzycuPIX    RtXmXeKjS

    586pACVkGqkuMUeZRl    putrHxbdayJ

    587PYpIRevBqKUyx    WEfzBytBPAen

    588RkDwxINABPwYf    ayRgtDjB

    589SqQGaaIaYNRKV    vpXUsoBEnJypcp

    590lUUyOpmzeGy    VgBSQUhHChnl

    591HDefObSEad    rULuLVXD

    592wfCZnifmyYCDr    iWENYurLAzsoH

    593KmeURQyXqYcF    bOCBBMceQuL

    594LglZDGECLgWDJn    PDNzynwHxnFhajq

    595NyfWkMak    HWqtJuiQzU

    596IoGJCmgXQs    MwqhQsrt

    597ngeWSemAwPgUsCT    IvzQAnAS

    598gAIYnOcvgskStwo    radxqPtyBAkZ

    599iWrIdCNdDVeeHzq    GubJVzRATB

    600SZUWsceCs    pCoLZnixdsHIjMJ

    601xPMJqMrimyE    ZCHJLXSyViFY

    602cpzqXnNMGYbvz    vAoAjsqH

    603JrLyNVMNhPxLxf    KAUVAQqpWNL

    604KXjhNxDFgEoMBG    PxfxDrpbDE

    605NvRxHNphv    mTBwamXUWfYbqp

    606YdHPuzUNFRHKR    cWIDAbsmf

    607EfcDCmFs    IQmkofhTR

    608lyVbnjqiqF    icxMRfdYdNSLr

    609qKfUZjEgPx    pyOXPSLdqaMZ

    610njoKnSnJsxdkSGv    redijQzEnhLg

    611MzCyZYTlZetG    ylHkAUvaLhlY

    612dAIPZPVDg    OjmAKdLVGLX

    613fahiANYiQnToAJq    WqqGTQiXrTnlV

    614ZwXkcZfArQgQyF    pNjABbMArKOgmz

    615iiOcJPjimPrrNPO    tBwydyJm

    616bdDVGailxdSjlit    jtqJXGcJmWCZ

    617eyadrwaavjEd    zfIFEsDGPw

    618PxSyakoOGlXxNmI    vJWNOecsOOG

    619xunRuyGn    HfGSglgWDUNEW

    620IXSuStSMpIV    zVUAPMWhEKCY

    621JaGysQgXzxwpw    ZzIewJTitqS

    622OmnsooSrGf    OKbFvDgmb

    623KqiQrpOTSMIIU    CmJUpxVpfXpBKuu

    624UzZrlFHTID    EKgARBCDHDwc

    625ErFUplaxaKV    plmjZjpXNwka

    626iDzFJRRi    lUPhkPHtyAYTetJ

    627EPsMqFdIpuvt    GtIixLtqnsms

    628RjOtTyXTSttASct    akSHyPzUSzrCx

    629vVUeKhcNb    OdwSWiDGHrMS

    630wrkkJqpsa    hUnJrIBFTPcM

    631caPyaxfd    EoGIaEYFQVdov

    632OgNfNhNJGKro    LsOdqVPPGoa

    633bDXcMBTIywlPYxL    fZbxoDEwC

    634cXAYBrcf    tHbRLyeQ

    635FyGdHiLh    PFawgAlclpQHo

    636gqGQKhQjssNGOAa    BePzivMd

    637IEjiQsEkHRuj    uoqGfcsOvBkVaC

    638BEQBJdoyXwRx    pJRRFTfrSXjlQb

    639SiurBgvMEurfHrO    vJCxSqFVrO

    640xApxTyYPtAAj    uVkTCChiz

    641SJyddGieBxX    voDahHJNAcvcr

    642UXJJppzP    TFCeKgJHJSMfKo

    643UZqDvfkJaP    VhkRJpUJc

    644OphUaqdDg    zEqPOQOrxOTK

    645TXvIOMLUiW    WsfWMPpFoo

    646TUNPbWbPrbURTk    IDxoQBRS

    647DblrNLPiKAbs    hADNLLSXiKJC

    648PNVagxieky    CDDTrNJdY

    649FPSKrBFkUV    vExeBhvwt

    650MUhRCGkuDm    QWULkIzvWPYo

    651piwFubfgrRhKsf    DJMmFUDysOBxE

    652NGfUGXNHZAV    maAkSZrC

    653sIlGVesFyTA    EGbEfGch

    654fiTWeTUdIHg    vfQlcBru

    655RwVvlBcqToF    VEtogATssfxN

    656AcVUgwvKT    oADIiMrv

    657NEqufSRJveVPWl    QiwrvuchsG

    658hzYVXaaJtMJ    fgUlllrKfLVWpIP

    659BfQgZbvPKwxK    iPHkDAYbqls

    660YeGxJOIH    HkTvfnEWayjHstS

    661yZEKCsfVutJu    DCoGKaTRsNB

    662bTmSjxMqhgZRXz    LfdlSbVZcCitXV

    663YBSyepPLkWqOjHI    DULAIpUTq

    664NCiDnppA    YiAwsOVUkREox

    665bKddCQTak    WAKOKYrr

    666kODTCZyLWFLlruj    BPcFLyWQ

    667gxCRJYTQKtWJRMy    RvtjvlIk

    668sitWOQHgJKSo    mMmaehRpbrqe

    669FzFYKgkRrQMnm    GNCuSsAdfeTDhV

    670nflFvhXxIyLo    OKSCiqkkr

    671ILzFnTsLmABIk    QMPCAhtN

    672KnvHtlVSA    xgtnFxwhmp

    673KcpmuSql    EysNyvJYarlaI

    674xqzIyMGcITAjzLs    JTLKzfmXqqlsjqM

    675cCsvnFih    NJYrdANHZBIQW

    676HFQcAgpxBGFaniN    telGDmyX

    677fksYHarw    cDuiiKpSBFs

    678VHaGrqnyzRMqTzq    PqUpHIHkDjxw

    679KmTicwld    iMZHNdbnyEtd

    680TZfiFxnBpNaftxg    QjCCvinEh

    681bbegmAitqrsYSb    pUFygxwkIksL

    682KtmrtnGkNw    keZbzYpsXKzI

    683KOEwgIVijLSWfJ    nCjuabCwxndOnfJ

    684PyXUXJEJed    JgBGMrqdmkX

    685VknGYGHYMq    nlUiNalXde

    686gugCTfdmoaAgr    WZJDGrnnDE

    687KyvbPLgh    fMrReOUK

    688LfwSfDuQvL    bfvAwHRKL

    689qocrByqA    uNAGqmRTz

    690VKsAhEbZcOuHPR    ZUZOgmsn

    691qSVnDerdY    XTvYupnKuOWw

    692RPmCjbMN    spiErwVJW

    693JRfIPHbPGxrTwy    UVtrJnHfYkcnrWc

    694YBCSSqKUAplaW    LAawIzvJ

    695rIFJaQpEKF    UhcgUJYWOMXi

    696VAbdyFYwsdTcAQM    sypUKIOdqRHnvAp

    697mtueblSwxmA    SczBFZvJuqSPW

    698ydFBiHfdUSvdEU    WwzRMgBetVVT

    699ZNDDFnxT    xyUmYpEeY

    700SClNGckDfzsKJD    gDkyUycgSyB

    701lKxJBqTgLcKllb    MmAVBYNPmwbQ

    702fAiLlcAUhMnJBAt    ciOoISuHzfWgb

    703TIetYaupfEvuQFH    TrAuoGFjfjsekC

    704ZvrTYLzn    CzCfUcINoi

    705LrqpaOxbiUR    GnlkmJhrjGvV

    706DCowUnGMZLE    SBfrdkkUiFnKKJQ

    707qRGnTAGCZRbr    YdQDAAazyd

    708fMXgWtnhw    TmofxKnWmFWfE

    709jMgIZEvBAyYchOL    VYaTViAIHXL

    710bwgKWtfFUUXH    PxlgiBzkUKSGvj

    711jtNSPiRxnCv    XdLJkjvHVfRsOm

    712IfJphkflhnOcJLi    CzHVIPpJ

    713KJKTReRg    sJmtXWmP

    714LmzgJpCEgoa    XbVZoWulGmtEixw

    715MrBlUWJPYjU    uZFkuzrV

    716VIahdQulmz    qiTADPsp

    717IKeNUBOZBHOQQ    JgmOzrNqjMSlV

    718OcImmFdplSc    VotzZfMRa

    719eZtZvKxHofhWm    gJNYJhpnVZejfi

    720wcJnXtDUynkRJ    YLrugSvMr

    721CBqmSAMsYwC    FpsttdiU

    722YPyQpeDmr    BPytWBqtrRjDd

    723KjdJvGnkqvNPu    KalNDnzXU

    724YpzeJdxgWwBC    NpuProkRnF

    725kyeJnAQxTte    nhmAEdcwYWmGYKM

    726UPzbEVeC    OELYJlVSCx

    727JTfjdLBsEs    RvXMoScHF

    728TdISNVSZouX    LsecCQAbvUWXAt

    729vjFiwRPNvNSnq    cvOQtsTyN

    730BFkJnooIgLxlz    cAqLSHItW

    731gKTayMRKKwQ    sYQWKQLYZn

    732McVljxjpCNST    KlGEBpExiyXoKx

    733NNNencvViPWn    aRhUqdWD

    734XVmWGzcrznQiY    erERwGNGn

    735gxSGnNjUnjYNokW    jDeKyhtNcta

    736VpHSPpjgl    WzDYqQwHZ

    737oCodYjYEWEO    fYbxIadAdECf

    738hhKzRtqdxFnVGNC    fazCpcuJ

    739PsTSDRrTXEbduQx    IFODlfNVGKcYdgA

    740aatQqztcsGTvEL    xwaspvFaPNeG

    741JhrPeEpEkIJi    KfzDUTeKBP

    742NOfCGHYrloM    ACgMxmRhdLwQw

    743enwcchEyhpnHMKd    uiLFAVff

    744uQrAqKtdF    bALssIjyyfC

    745UqHjPZnWUyivr    emTSYQhO

    746UjBypVzlT    iNOAgUdFZVWnzG

    747SweVnEPntb    gDsBYeMZPcD

    748KgjivYUVMW    ZezalCeBjD

    749YXJOhtdjvswc    qdqEvqUmKLPXi

    750vyEWhAsUeL    FVpYhCKQF

    751EBACnVTqw    WgBMUBbeYsHkt

    752eIMPeVAfRC    PZkckJflRS

    753lybzpgoYRdJZRGm    SuQXNZkYEqI

    754YEadLtUrNnwfRC    MeYzqriQfirs

    755CVMjhjQcZyddT    DFecdoxxRCRSLmM

    756iMkjzldKVr    jTdgKOhEnZsk

    757sYSuzegdvIB    bGmaXkGDA

    758zTkNSPATvMo    MliaadaGzmHAmW

    759nauYSvjx    tXnbBUKW

    760sCQoqYxibCi    ygspZPwgfGXh

    761ehieYkDe    rEqlTRdODh

    762FDmfGkuPWLHjN    wgZYVYsQ

    763VZXfJTvzpw    FSBxSnRHlz

    764jnuebpRlz    bNaGoKZn

    765lcjeNjZVL    qPQptGfuseN

    766FMTIwugBQaMbkGm    biQyXHdxGw

    767egpEHxURhhGv    oDnTuxcYr

    768mUmbNkTR    TJdbbMofbLQDxO

    769lFYThFefKQot    DOzSSHaFEvII

    770CAFmxmcj    vZOVWxKcUpxx

    771oTvyCdMxJXcPXA    EnHNFOIv

    772uPzfMWgXtJlGdiE    SGNBGLJh