diff --git a/pom.xml b/pom.xml index 2629c9f..318c5b2 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ org.springframework.boot spring-boot-starter-parent - 3.3.4 + 3.5.3 dev.stegmaier @@ -28,8 +28,10 @@ 23 - 2.25 - 1.18.34 + 3.14.0 + 2.27 + 1.18.38 + 3.2.0 @@ -70,13 +72,13 @@ org.springframework.boot spring-boot-maven-plugin - dev.stegmaier.leetcode.LeetcodeApplication + dev.stegmaier.leetcode.LeetcodeApplication org.asciidoctor asciidoctor-maven-plugin - 2.2.1 + ${asciidoctor-plugin.version} generate-docs @@ -98,10 +100,6 @@ - - org.springframework.boot - spring-boot-maven-plugin - com.spotify.fmt fmt-maven-plugin @@ -117,7 +115,7 @@ org.apache.maven.plugins maven-compiler-plugin - 3.13.0 + ${maven-compiler-plugin.version} ${java.version} ${java.version} diff --git a/src/main/java/dev/stegmaier/leetcode/controllers/questions/Q3085MinimumDeletionstoMakeStringKSpecialController.java b/src/main/java/dev/stegmaier/leetcode/controllers/questions/Q3085MinimumDeletionstoMakeStringKSpecialController.java new file mode 100644 index 0000000..3115ad3 --- /dev/null +++ b/src/main/java/dev/stegmaier/leetcode/controllers/questions/Q3085MinimumDeletionstoMakeStringKSpecialController.java @@ -0,0 +1,90 @@ +package dev.stegmaier.leetcode.controllers.questions; + +import static dev.stegmaier.leetcode.utils.CorrelationIDUtil.getCorrelationId; +import static org.slf4j.LoggerFactory.getLogger; + +import dev.stegmaier.leetcode.services.LeetCodeQuestions.Q3085MinimumDeletionService; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import org.slf4j.Logger; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; + +@Controller +@RequestMapping("/questions") // Base URI for all methods in this controller +public class Q3085MinimumDeletionstoMakeStringKSpecialController { + + private static final Logger log = + getLogger(Q3085MinimumDeletionstoMakeStringKSpecialController.class); + private final Q3085MinimumDeletionService q3085MinimumDeletionService; + + public Q3085MinimumDeletionstoMakeStringKSpecialController( + Q3085MinimumDeletionService q3085MinimumDeletionService) { + this.q3085MinimumDeletionService = q3085MinimumDeletionService; + } + + // Display the question page for Leetcode Question #1106 + @GetMapping("/3085-Minimum-Deletions-To-Make-String-K-Special") + public String question3085Page(HttpServletRequest request, HttpServletResponse response) { + String clientIP = request.getRemoteAddr(); + String userAgent = request.getHeader("User-Agent"); + String correlationID = getCorrelationId(request); + + log.info( + "question3085Page was requested by: {} Host: {} Correlation ID:{}", + clientIP, + userAgent, + correlationID); + + response.setHeader("X-Correlation-ID", correlationID); + + return "questions/3085-Minimum-Deletions-To-Make-String-K-Special"; // Refers to addition.html + // template + } + + // Display the question page for Leetcode Question #1106 + @PostMapping("/3085-Minimum-Deletions-To-Make-String-K-Special") + public String handleQuestion3085Input( + @RequestParam("expression") String expression, + @RequestParam("kValue") int kValue, + Model model, + HttpServletRequest request, + HttpServletResponse response) { + String clientIP = request.getRemoteAddr(); + String userAgent = request.getHeader("User-Agent"); + String correlationID = getCorrelationId(request); + + log.info( + "{} with a value of k={} was submitted to question3085Page by: {} Host: {} Correlation ID:{}", + expression, + kValue, + clientIP, + userAgent, + correlationID); + + try { + int result = + q3085MinimumDeletionService.getMinimumDeletions( + expression, kValue); // Using the injected MathService + model.addAttribute("result", "minimum number of deletions: " + result); + log.info( + "{} returned from the Deletion Service. Correlation ID: {}", expression, correlationID); + } catch (IllegalArgumentException e) { + model.addAttribute("result", "Invalid input. Please enter a valid input."); + log.error( + "{} with a value of k= {} caused an error to occur in the Deletion Service. Correlation ID: {}", + expression, + kValue, + correlationID); + } + + response.setHeader("X-Correlation-ID", correlationID); + + return "questions/3085-Minimum-Deletions-To-Make-String-K-Special"; // Refers to addition.html + // template + } +} diff --git a/src/main/java/dev/stegmaier/leetcode/services/LeetCodeQuestions/Q3085MinimumDeletionService.java b/src/main/java/dev/stegmaier/leetcode/services/LeetCodeQuestions/Q3085MinimumDeletionService.java new file mode 100644 index 0000000..2bbdcc5 --- /dev/null +++ b/src/main/java/dev/stegmaier/leetcode/services/LeetCodeQuestions/Q3085MinimumDeletionService.java @@ -0,0 +1,71 @@ +package dev.stegmaier.leetcode.services.LeetCodeQuestions; + +import static org.slf4j.LoggerFactory.getLogger; + +import org.slf4j.Logger; +import org.springframework.stereotype.Component; + +@Component +public class Q3085MinimumDeletionService { + + private static final Logger log = getLogger(Q3085MinimumDeletionService.class); + + public int getMinimumDeletions(String expression, int kValue) { + validateInputMeetsRequirements(expression, kValue); + + return 0; + } + + private void validateInputMeetsRequirements(String expression, int kValue) { + checkExpressionMeetsRequirements(expression); + checkKValueMeetsRequirements(kValue); + } + + private void checkKValueMeetsRequirements(int kValue) { + validateKValueIsGreaterThanZero(kValue); + validateKValueIsSmallerThanOneHundredThousand(kValue); + } + + private void validateKValueIsSmallerThanOneHundredThousand(int kValue) { + if (kValue > 100000) { + throw new IllegalArgumentException("K value provided is greater than 10⁵"); + } + } + + private void validateKValueIsGreaterThanZero(int kValue) { + if (kValue < 0) { + throw new IllegalArgumentException("K value provided is less than 0"); + } + } + + private void checkExpressionMeetsRequirements(String expression) { + validateExpressionIsNotNull(expression); + validateExpressionIsLargerThanOneCharacterLong(expression); + validateExpressionIsSmallerThanOneHundredThousandCharacters(expression); + validateExpressionOnlyContainsLowercaseLetters(expression); + } + + private void validateExpressionOnlyContainsLowercaseLetters(String expression) { + if (!expression.matches("^[a-z]+$")) { + throw new IllegalArgumentException("Expression does not contain only lowercase letters"); + } + } + + private void validateExpressionIsNotNull(String expression) { + if (null == expression) { + throw new NullPointerException("expression is somehow null"); + } + } + + private void validateExpressionIsLargerThanOneCharacterLong(String expression) { + if (expression.isEmpty()) { + throw new IllegalArgumentException("expression length less than 1"); + } + } + + private void validateExpressionIsSmallerThanOneHundredThousandCharacters(String expression) { + if (expression.length() > 100000) { + throw new IllegalArgumentException("expression length exceeds 10⁵"); + } + } +} diff --git a/src/main/java/dev/stegmaier/leetcode/services/QuestionService.java b/src/main/java/dev/stegmaier/leetcode/services/QuestionService.java index dbae38b..99f3b20 100644 --- a/src/main/java/dev/stegmaier/leetcode/services/QuestionService.java +++ b/src/main/java/dev/stegmaier/leetcode/services/QuestionService.java @@ -15,6 +15,10 @@ public List getAllQuestions() { new Question(1, "Addition Question", "/questions/addition"), new Question(2, "Subtraction Question", "/questions/subtraction"), new Question( - 3, "Parsing A Boolean Expression", "/questions/1106-Parsing-A-Boolean-Expression")); + 3, "Parsing A Boolean Expression", "/questions/1106-Parsing-A-Boolean-Expression"), + new Question( + 4, + "Minimum Deletions To Make String K-Special", + "/questions/3085-Minimum-Deletions-To-Make-String-K-Special")); } } diff --git a/src/main/resources/templates/questions/3085-Minimum-Deletions-To-Make-String-K-Special.html b/src/main/resources/templates/questions/3085-Minimum-Deletions-To-Make-String-K-Special.html new file mode 100644 index 0000000..fca5d41 --- /dev/null +++ b/src/main/resources/templates/questions/3085-Minimum-Deletions-To-Make-String-K-Special.html @@ -0,0 +1,69 @@ + + + + + + Minimum Deletions To Make String K-Special + + + + + + + + +
+

Minimum Deletions To Make String K-Special

+

You are given a string word and an integerk.

+

We consider word to be k-special if |freq(word[i]) - freq(word[j]) | <=k for all indices i and j in the string.

+

Here, freq(x) denotes the frequency of the character x in word, and |y| denotes the absolute value of y.

+

Return the minimum number of characters you need to delete to make word k-special.

+
+

Example 1:

+

Input: word = "aabcaba", k = 0

+

Output: 3

+

Explanation: We can make word 0-special by deleting 2 occurrences of "a" and 1 occurrence of "c". Therefore, word becomes equal to "baba" where freq('a') == freq('b') == 2.

+
+
+

Example 2:

+

Input: word = "dabdcbdcdcd", k = 2

+

Output: 2

+

Explanation: We can make word 2-special by deleting 1 occurrences of "a" and 1 occurrence of "d". Therefore, word becomes equal to "bdcbdcdcd" where freq('b') == 2, freq('c') == 3, and freq('d') == 4.

+
+
+

Example 3:

+

Input: word = "aaabaaa", k = 2

+

Output: 1

+

Explanation: We can make word 2-special by deleting 1 occurrence of "b". Therefore, word becomes equal to "aaaaaa" where each letter's frequency is now uniformly 6.

+
+ +

Submit Your Expression:

+
+ + + + + +
+ +

+ Result: +

+ +

Constraints:

+
    +
  • 1 <= word.length <= 10⁵
  • +
  • 0 <= k <= 10⁵
  • +
  • word consists only of lowercase English letters.
  • +
+
+ + + + \ No newline at end of file diff --git a/src/test/java/dev/stegmaier/leetcode/constants/Q3085Constants.java b/src/test/java/dev/stegmaier/leetcode/constants/Q3085Constants.java new file mode 100644 index 0000000..7dc97dc --- /dev/null +++ b/src/test/java/dev/stegmaier/leetcode/constants/Q3085Constants.java @@ -0,0 +1,27 @@ +package dev.stegmaier.leetcode.constants; + +public class Q3085Constants { + + public static final String STRING_WITH_100001_CHARACTERS = build100001String(); + public static final String STRING_WITH_100000_CHARACTERS = build100kString(); + + private static String build100kString() { + final StringBuilder sb = new StringBuilder(); + sb.append( + "anbdqfaxjxdvtvfjfdchanidtxlnijlrcxbcxvorxqqtifsjpvrzdaxpszjpmnflqsdbfnezdrfhciegmyjnpmvdplbjluqynqxrbwgbpilucgmojxtlxewkawvdaxpazuwwvufqtdqtlrtkxwvbfdpmdutzoqdaykifgekwyiaowzlcehvabxgykkhyvmkqbxtbrdjrwdumqtrjsfqavvpbwaccwchovnphxvoxuyxwhxuaxyzsgrvethagokvpprgxlzvohpaqoxvpazbhwbdxhezvrvqeeveiyrmrcxakkbiuiowfhbgixkazykgkjpuffbbmsvvpbfsjwdxifokttenygxbdurlzvfooiyxjskdvubwbimlqzyqmefnwnltmloyvbedznfnkozdgqbodflzfalbnceislrikvvfualrtocczfuhucpdqbwhsnnhklrdhhbqkxsmmipebpdycfnrjjwfsublhqdqrlhufkmfmfzjrycyxnnokvypuxuyeyagflohceamgvlbqtjizxyjlaphuxwiclznnbevrywslooevmcnsaqkdypdrgbsesyiykugvnwnohximtiqaghpbdrkyypzbsitqgsxheywxsgpjagkwjqthcskgllipsivwckfhxkrfbbacxrmksykmozkcwnrmntllnifusrcaftxrxgxuipdgyezgsiwlbqsnrrjwfcglknrpjdmuchisikysmthxqzjexlwjjhritkxmxoarysskzkevnyncdjmudxnltpzkfiscobdhlioqvhqywzgpcbwefxzyellokuwmvyzfnpcxkgugplaofsljgmbwhpaagngiybcawofebhjplxnjdymqeszlufwjicqgzortqhgtwichcoislzilpwrdjmiymzpklqmbzwhpocvndecqxptwifgebmwgamcotrnhaobwcfulcizxlrdniynvdzxqhpekuujjebxlwhlhrdojmrrykdrctngnbioxywaofkljwaighninivespmrafgtrkzdlycuncykcqsnsglulaiifyzwifmtwitolmnreitgkskprnpkoxlqqsdqtzfohrflrhvnaygfpcdevowicgevnovdekblrkjeqnkjxyfisboqaattoicozdrwvxburkpivdbgouhxjhzshfzybauccymyaeljqgxteaonjferjsaprvtrzlaepbdyedhaswmrkppofarrfnkozvkvoeaporocmpvmoejogwcppprpulwgibxhwwscvdsrmcmjznwqasltjkudmkaajxvjllnttygjxvmnypligcnptwazkkipsypxblwhhoapxetlhlpcarjrbwltmyooaclpirmvipagdqqzehmqbqrfzrowllwvozikemtmdzohndzilihpnjbrbbyznprfsyxattqtvqshbsfvpfnfhexqdtsmvsdqnnkzdzxbgakoytxgkelmlbgsdhcglszyskvxtnagaaibbmuomncjdxyfisfycdclaccqlieyrbopmqzgadqjatymbqjqplpdgnbzbjwdkmcyjimzwynahtnyvrjwokviwrtsixsftnwnxqrdlitcdfypcvrghhysmizvpldipjjykvyoxvvqhgpdssbocjniywpxjjpthaigimklkrbamsjkngrqogzjlcenyrjdekmjtnkuxalfyrjkbzmpgdjmbhuhpzebvliezbuiqdvlsehwxqtfprolodsmkhhqtjqkvjqnlsrotlmmvdrgyaynqkpsqbjbvwjfnsfqtpwdlqixebkmdllqnpdfrjrhqutjkfsxxwkhstvipropthkrphytvmzvpcjgvuzuilbxlwqijvyokrwavglqxrizxnpqfxojglwqcgrabffviubuunvvvjkntsyiushoxrqxjjefkznwtwoodjptxijtetzfghmwzocqkyugkxipzfvlluttqfknyawsikopsjrqtyqoucmfwgrstaykfrtmikhsfqnfmjlqgfyxddsgobfehjfgjqvhqyrogquozaalqzaftczmianpwlbxzsubssxukcffxcyaahcmfyssdtcqvuewwyomazcatbourekwnkzdooucdentymxyghoayuukjdhzkvjebknldckfedbgotsrlopvskupvzdsfhbkfifjpmaskmxaxznbncxgtzhiulfvxclrbmshfagzcavvbtaomoxdwmwmyccexqivxgopegphnghosbhmvknmtnmqmwzhdtdgejoqiqkocphaunqzmsetzseqhjkfjfhlkbkyeqacloqkxnheajtlvfyskyalmeepgiykehfqjodfhshuexumpxsfajzsatcrlfdlbmlogcxzfsxsjndlddjxygnvogfqtfcrgcjdimzhakufmebqvgdlsyfadmkjasxeuvsbsybcxkznqxlqaypitqdcqfjudfzvgtvnqplevijpziipndskfzipuurcsecwjkawhznxocezplcpslwfsreafzgwzihnaeftsdshqifexmrertgwtsifxymljvighkbvjwigviybmihqirjxwlvyelfgnqbnntbnpkridmxkrzqefuiqaoflawiinsacubmxdfreesslkqonrjnwydfkludxituraqzawswsbdmgdkqlyrmmdswhsswlatblrfuchyoyamrfxaofobxhhrayzsmotpsbmxogvvdnsayzrnjuyvwsqtjuensfzdpnydqfwghiqisyhhspmbudevnsvnrfqzspfkkmbsjpcazmosmwdzrioroytqmgzwwnvjkpubdfaxkvpgwjqduxheuyebihhsaqrwtahsbajnmahmgtpibynwuskrrnkiwvejdnwswzogklcmhpklkzbqargrtkpugbrbknhlfadqyksjztdyfxhjxckagjjiiukrmmsoukfhwfsehvkozxwtcjqtufkyqsjtvczjesoreruzyytvttdwomyjzvpwvvtkuncrimgvazhvvcdttxoqqjiljnshdlwoenokesnydispgwglpctzktatpmovsavchcglyzlccwtwywfwrugvjegyyacxkdkvtzoociboukgpjwtvmphpxrjdvyaekhtweedtkehpghcuicnetyaqqzwcoqqcmmzfjbjpeeanwtyoytjcigtnfmzgpbpbxitrhduvcfayguufdzikyeowaalauyuejlanpplitrodghnvahzialtqaniqhuslrqfymaeqdjjguyuhbgzxbmmzwkumcfcjmyoxgfspnpoqiqppazawtpdmcoucmhbggexoegpiiazvzfswohnetpsvwrpkjkdyexizdzkuqseceeaybwbailfdqstzmxkjxrgweaqvkqwmtqvmbjyysfdkpstrjkuuyvnooadhoxfntjztsnvfflyfogxlokkouzvfcpvowstvddbatraxaellrnnllvumkuvxkjusatyhfuxnspaxrzgxyxbhpdbekzuywcxqecheiojpnhkmsxwleagpicuktpyxflhoaeivmhoysvxhrnhclnmpujmssvteirkyqbmwzrsnbwkjwydkygwippaceoxbjcpcazaebyhwqucxrxymgntzcqzndmgnuolvfdemsvybxazjwiynkedmnjvsioffuldckchibcrihpzuhtugbvujlgltelumzburfodugjwtwzoktvzlospinntzhjrmrsupvqphdaqiygxdfkodrafkblrbkfnlmxlxgddcbmmpckxvtsotghaiauhwhfgegoxscsuywgllyvbylnwjcnwkyfqtnidedhwawahampccazaapjgusjujntvbuyyuznlhfqbcdfumlznfxlyzphaqeqtxtsmncultimqezqslkisdlvrmnowaayejklonypytfeyqziehijbdjrearsrajloqbsxdnlqbtkppuroidjhuvhyrwjbdkxtzftnvfyoymnrcrmkaefcclzmpxqnokrujyucuojiruztjviiwwsmkqnbefowalagrwmxgqcjzfmrfnrodnxuezkccrgeegsaozyvhjjjwibhxgsrnhaedtmqahfttukkmzvcwdiyrmseuyjwsmgogrousadnikaoeslfikeglqqaylxwndlbrrqnpgkfqaziqegyamurmzhkdfwxnyhraubpnbtbiitqsaltebbvluldopjsbnhwhijqzpjfxnvmzxxcapmxabgrpsvpbouiqhaokwnnoxetjzcilnrcwxfnjhlrpgumxkykhxclubugosfbygomcszzxifukrxtuvquxbzgdayesofcywyjswymaljdjcocjmjjrauokevtyhzrcmxwlneplgdmedkvjivyxhkrvheqeouvhustfhzsawjeftjwezvcbibhkawnwnpkutadhtlbthoaguzmhbseowmpgbxvvjapfbahpklrghqgfqcmhmzmnseosmweomtofsruxfgkfcvziowyirbhmozscprchkhnkiwyylkfihovjijgrxyosyuqlgptvljxuipoymozouritbzbtxjzqjtkszhewcoxahurarhufndxymkgymfetvmcpnydgyiviebjfkrckqsmzxuakjbdimwsdhgqnhywwuojzjssfcaxqgsauvvyqyehvjfrpbeetcpnuokbuvrbrzdwqkjqcghjnddjvhsazqqnfxzeqxqhrbqgtcyblxleeqehvordfctdojcnnhjeoajeuebajwkjqquncndaxanmjxiqduuikfhvfebpvjtqihxdipfbrjdqkocjzuahngmdlysjrnmgspdcgtgfocfcsclvniiayjmwghnxqtphsgsjfbsophezlndifyqpkxxghxegcoivowqlkenynzsehaxmoebyxecshqxabxxhqrdgwioqtyoqultvtpoxjfsacnpeiwixlqujmyzfwnuwjhqosoglpqbjekpbvukxxjhwnyyplhokvrpygfiwdorlqfoszpqpkarltkfitehbqgkdtkdnefwwtbjfmuqjcthtegjekalhmnhkrvxzvghjncafljxzjcpjywfeyyuzrssrbtvzrujnridfpcjnefbirhvuhvltuwhgpliewprggkxrsleobecunhbbbvvdwaozknuobdfbqswvunxsdxwarkgiuvgmwefbtquecwlbodxvoqmgzwrzkhubgvlcturvszklosmnwmpwlxjdjxwpuvylquzgvxiocnvjovfisfgwrfpnqxavvygukrdpvoszheejmhratrvizkrnxtlyfhbueoinklqvtdsajoyhqasyzkiwgwkxlzukmrbtfgukidugsdqqylbxyntqbyrrqokzwgvwwjizihyinyecggxfgnzadlggadncvofaurygfcikcsowstspilgmfwvtkhxpahkpnpejchmfvdkazcolbwsjwuiaqesclgvpougmtdlwwywzrhowvcchbsdxpygtnnojqrzjduniflmzgmolbpfundqiaihrevzudpcagapyocqakcgopsfjrhdidhdfftmzdqjfzeedegbcvrlraryzsuffdoqcxekhvonklujzrdbzldslhqlqxdqlvtuasigziotykeuychmpxqjemzuaypwoupwcoskuwdgdfeqsqnayavqjaozmfijzodxzahioumgornjwfxtnsjdqycmhofrmqexumlzmffspkhpedsjpmoasqvzgfvortojphtwtscqxnzpbhgvzjtezsrptvsysilwjihhnzijwxyghgtanhvnhcvxligrgtiwzdrcluunzebnikxmafjucahciheibtouwocdgydklqochqumdxjcznysfaxgdzfkkdafwklgoadyfqlbyvvzdjelcexafjxpeiipjrgnlcwfhemiepkxfjsbitclsdomkqvreavunlfucdclyxcgkonugnfhkltjvmmccbqcykpjehxmlmlksdreuungllwiusylyktrmmqjblugreojdeqekqitlsctxyyurreujjlscvmftrcrxhhtghiigdjesdmkzzjedpbhqwpslxjqpxvvrtdagilrtokuqsgdijhawgcrlrxuhizcdbmoofwqpbdsliwquboeqeeqrzckqvnyjpimwphehnqyzeopudzrsjlytipkrodnxxcswgozpintrlbrrllaiyoxbzohaurzfahckearddxnmzbjyqucyffjjzotkywoehuhifqkvjiausgkydclesbcuoyempxtcsbonbuigypxkrowhyqmvopmdorbhyxjvllgccvlmggefcwxncjhditcmyqmjcdwvljcjeppvwwjeoqcqjwmtpikokyovgsogvfuwkqvbumkcfqopmgzxgcvbsjyeozrloxosxzgnjspexifeuyzaquawakeeieclnujfxtxnlwgbdazqtbgbxzlucjfltblscbbqmcqztgnrcrtimsivvquicjuagvectaaspoctfhpmxqulevlxuchwajdpciehjrokndmeyhczsgpjbasrnkcdadynxmwkjxmrrlovjwuottjodasmvuvclqwfcllorbixxydrqphliztyjwgmbqigoumlyrqivoqsvctiwxbvsmnkbegxrjvgxmrplronqivkqjhialcybuhoylsdkhraftefhodngucwynuupoffdcnoshdhietdtntkxuozwzciuukyjhwunuhbrvqdhqpiqupfdzefqhjvjfchlhfwnllpepxgccdwdlttzgiaqzxvxsuljaskyumhtjscfpzcdftgohrgohynpxxylmnjxrtcftvllygoggqvjvqftgbeigrxrgtrzwpjuqlmglccmfnqzvwvzofthvnrukxcxgsdeboihjkmizblqaxpxsuzfxncwksdbfqzfpbyjtogwfdjewtslwmljkwyjycmguntzuziehlknbdujsewegdltqqesdbfnsewwxlktxnbpqzbecxcyyomsginvnimicianmtaynmpfiiivmmqqeparxwleixnjwfhrwissmmdmleobeabawtqiwxbecehpnyfbaxtwncqyttqworembiibuwcgejvdodfufwyufpbdhmsmdkahnuuvvmvvydajuuqtofzxwjexvjwkxdzwaydhrvrohxvipcadafwtvnvpbopgatcofrxuxaaypaabbwvpmdazwomuebwfitbbsikjqumcxjcjsdwsiyzbvonxzwvqqyhbmmafplirgmxkximeyrkyuwhqtgbibbdihgnvjgpkunzzdfogdezbvvchltqjftycylhxtpjvbtxdgswzljxkzlobiwvvniugqvkxyzhnispljqytfiislueefluuzsgtzmmcskgileskpsmguunuhxjqcprvdujcaeyrpaubjocuwcvwxqxjhlhjtqsutfgpvbxtpivmmxgrasthpeyzcteirwaecjhbyyxtedeikeiaszkhsxbrolmuprkowvtkclkasqcmvoxtkldjcbkgzaaybamsjjzsutyvjwetgtcvamrgkhinjrloyzxycojzvxklmgecpihqocpliwrgcsaxlrpvzftacwvneeheqwfyxvbdxwnvoiubjalxzwgpbodmlyfpvgqwrfblglkzyukszrwbznfwbfuvodbipozvueoyrtztiwojqxjinatelukugvnnuhtxomsvivtsbdycozhyicsqgbjqutbxudhllhmjhsfxedjkdmdosnzwcljpguihrshdbacyvjcvvvrefventmzjeviwgmdjhlhfmzvkcmrjiuanqobfvfauuwhzmkeehimtzetsdhpegmshidazcmfczurgdmdxbbqixxcljqilcgmsgtggatnsnazdrrmqzpzneyapxxejefqhftyysghhuodiqxjxkkuweszzgtvntxjwqhrihnmhonxqsstrozmgwqhdlpwvthtbtzlybafuoucjnaupyydfdqzitiycamrncfexqcripxhwtgiixwwbfhasefjdlqlqejzmyklzoxpdtknhrofvrtwijphwdsjcwywvcazrwcxgqjlpgzcgznctpzyvqfkfpseodvyujkldxxuvviicsygkhvfwkxzaikaiqqzkzztolpbuugssacmauwgrwycttvamdeysgnmxwodzpcxhrfjtaumutoffufzusjjxvrtfxjdegdfyfevmxmnoltucyfunwiucbdvgfmwayzhzmpzcigfajzyitavacejyqvclbmvkswmukuijttywhivxzndtvduyewextpwgugizsarxcuyhnzpsmavufsxjanvlmabhmmyedylbpaqgupqinsjojregbvvwtqnbschfbtmxrmzuvuihwmumeyxwauktofkdehhtgupznnwcjmcvkzodqowjlwrgmphqfxcbznrdrsyyqybxwrrzglhzcfqvsduqewcbuqcaudjcuaxvuvrxgrgrhkilqffxpumejdtdrmeuhloaalyeqsmfbdbwjpyomwklaonnlclevbinutljpeaxmipocelnahoqpzncgewxkotxatdqmsmftiihnqnnzntrjowutydshcwobtwcizzbamxsaeukxedxnzistibwakiswgnkqibvmjpxumyhxbwktrzidkpbjuqasqqkpgmoisiszecdvbpmeoggdxrkixwgcmdusxrapwngvxevtzcjoiwehqlvuyostuerpdwyflnidrlzaeotfcvamyvjwonjbduirqkfnuidduvbxgodcgarvigaozuenfaopovbyxtlecwfbzhnojklcxbkcmvvpclpuipbtewmwfrygraottqvmnoigzzjiemvaxkhevwyczflndsvlvqaqrwpkitqcgnrwehiqejrswiiesgskqjrilzhjbbkjwnrwjvkfcodsvlgiznzdupulbfnocrdwlsxribwcjncoicuiirdojqkmrtvmwjbcbztbqasaenflihgbpxnixswdnjecqebwawimdpitargdxtvweisszlaxmjvnrwcceyoukdfpxamwdniayjaafhciyrrokepaczrtyjdfhwizeovflibylhskekygajbdtgiqkqdvhwmwdnalwofovwsdcoewusuevqajxpfsnjfpanroaokyvcnwjhfzxldexpjbafetjuutshdgdtttoddvwebkfsdimlzwcpessunqdobfcanbwydhcscmxhtmaolhggkwxkuxtpvetudraehqbjmnzvorwgagkfwrsvhtdjuvyihehmnrknnhjimzvtjzcnofdebcmqvqsvqwzsdzazgrlbrdrffotnhjlarddlammkmbqxwjbigpecztubekgfjxqlqmtuoqjaldjckvnjrsgukbbwfhkqrtbksaqksyefncqqmpcxczmenasmysnkvlkgziqkfrlwjsmnmnqeiaaxcwxcbmpispkhfcpnxmszxadpiibngubfjjwivxywxkhxuseyrjrfmywckssdwowiujaqrpysbdelsuryscyeexilwqwpfaugdnummsvnpgncckydcdbajdzmffimrulwkybaxlnriizfbauignojrohyllpjovedmtxfccnxxkqmlioelrtwfaizqbzwxpgqgapizmsiwxotvsgyjectomcwmpehqhvqgmxghcwevftsbcsmlagrlpijfyhqeszjdgjyidnlpjvzckaixpbetivncryjatmkdododkaqekwihhguprayhplkhuvyjwfjgbmrztfdxnalmdyeyvszezttassfxyxejvmdbcqsxcrftighgnchauqwueojqycfdavyvphdzkqqdetufqtdcedohijhqtrwvvaqnsdzcmfzlfbeqeskuzqvyqsbxnpvengusjgdocylgqfzmskekhdxoluulkmjlygrsxccowlqmrpzixidwaumqbfchmpzmqgfqntegzwzgoqxuvdcgywinfefxxrugzlhtjujdxxerujfblyxuacjpycdxqwkrvxflrndqdpqwpnimzprlhcbxrpslmxicrkxxjzijqezpdhgkktspmuocgrjmeuuhittftaimnbpxvyrfmthdnbezktnjmjyszmuucdndpikdqewnobczfclbvfgumwfsinypmzmrqmnzhmxiesgoakjezmhmzrbwgeiqieuizgyxlsfzwpxrpnxkgjodbfgdsmunjxopabzefvkmpujtgzsxbrzajnhqrbvzxczgfaeelbhijvqkbgpfodryigvhhvdngqhvndojzsrpvbdouwcejrmxjgdgkvltdoiksclgwdklxhcrxupktyxgjwhniyugowjwmzzvqvioctmqamhsnpokowzkyrxrcdyesasiwjcghcvvlvvrtsgvgchjjbkdejcihoqzcazeuxumussmlvtvbywxgmauxjqnhbsjkdypaunirffjaeqasdmwrlzrdcvkktfatoennpxfgxgzsnkouatjvnztptshbsiytzhevgknuyqwvnviscagnubtrvgiszxthhwqapljdjxvjkfkncyemqamibjohedjtwguapaithzetdgddsdydxxpjtyjlwjxzsokbwwtcpzyalbxvlsqrbazzenvkvrjiazaotvfcygfwrquajwhfvgsoimaekfaibkyaugnhfxmogjzvdtiytkyinbpkzujmfrdgugdqofxkzmpjhesgykqckpfkbkstgtrdypyitxwxuuskmkirynzutlypnbjywuhbetggxyiyrvffigbcreosmmyuzjozuzvtbyamzkyymlggjlxsrtexxyefxtmvhzcxqloqxiuhaaehntjppyyfshdjcfwcxwddhdzykwzseypuiofmobalwlrmqdnoqfeechdsvixjndutmmmdzfztxqpufxhmqfzyzwjefbjlxgwmkfxffbpnzsnomroohazxhjgkngdmxsxbypuhefxohgazzifleaxaqzfqhbduusyrcacshjulpddrluqakopkixexhsfbgvmpvggsvkrekuovyosplmwzbjrdfyliicveuxlhcrwzjlvvxzwwcmolnjauglmsbkukvfxzbaumgzmaqrkybzplvapslkvqmyjqezoxmhylxweaeoowlmkorzdazcmytuiacntvpdzblhryulunbuoshshzrftrdsqgudbllabramhnjlbnniuvzxhdjcgmcusjxkkinjicjswwsdoswnerszltcjolcyeqgnwkhcmmifhvynypwigmumzxnrzkriodcixxwqlawcpcsfegcbravybqgjkinygzcqdekkbpdcezzjyhtswsgtzuheplmvfuaussfoaummxkreiuepfdjrfbwuosefauboqjxheoxoecbbchdedqyyomqipuknbmiatpvbxfccupaufbkdbvnhxgjrmhzgdamvefyswkuodxamiitepuvrigqpagmdfvidvprtukdauyxortolwulysptgwdimmklqtibpddjuqbzumucslyphkxagbcxfyjyvkashzqctrastonpzcourvaxpdsvdzqfotlbsxfywxstyxzxtsqgrnveybqxpljiaecczfczjrtskksavgcpbjgpsrqlckbdgexkcndnpornyasqavqjonkuiehtzlxwwjiuqwnvcgcqrrlswoekudttbihobuqbdzxqdxrjztahcyzpvzeygfsjhirqhrnzvnurwmzmondkktjxcpsppbzdqmwbsidvbtenbqgeqksrbkjufjlblemfmhrjpefgelbkmftjjbhzxrbiczegqntlvoszwdvkjgyltmbxmbswbsmyqtofcczjxgxmvzspvaiahmmxozrvyykwlqyyxsqbjquzhywpcjlezlkhffjzrxvyvemnguhaduyhjlofeqljmxitgupbaoinqacuxqgwamaxlyedlzrzzmcouxeqpzbpwiobwsyceyxqnbzfrkpntnkoommzzkathtyfcayokagtuffilppufjjbzsrpmhkkfwgelwqkafgmrvbqqogqxuaovxbuwepjctmfprlxlcxnujnmvqmsnpuhrgpqnzhjmpqkrweotrlvnuzhqiibjmfcrikgtftuxixxftnziehdwfztqbfacjcmsfggrsuzdnptlrwauogkxgnktkpvdjebsxuxtpzzwoyevtvihukynheermqumlltyfjivnfgdvcgoqgvbancuxsrpczbgtvqgfwovizahdctprjidtqchjrzkccamxdqwcldptrbbbyaxwzfbnedorjmcyseaofjqdmwhctzjpynkbdbvnkzsdislmivgtnyjfngoarfyjhwjivghusxifvafjnexornwbpklonkrwujgcyetegcnbqvfetwtbqboeoggsmngilnuwfwlrdcspmeajcxhyuojhmneqrbutxcvmlpsftsktbbrpqzhaiilqjhswnhxszmjrxxtcnigvdnfidijahorzzirbnkewymiuyeznobtiqcofvvvbtsdfarupunvuynvmleqfyxkcigsihtevuemerjggcayuahzpustfwsfbeyhsaettrcbjpnwfydrquifbrtapwbmokhaelvxkplfaxubrfmctiafjyopzfqpuhgvrbnwiunurtbxojbvcqxejslwxhguxynfvsmrgkmcvzjvgujcfcjslxjtmxmgwhwxahkkligihftfrxkorzdcybdmnabnvxzfmtnltiuenlepugouzifujwqfsngwsqqiqkjoibvncfelzlyjpeclocmmvltznlhuxbvzgxuznykrwgkbtwhznquydriymfxrsejotampgwwufsemklpvgvlxhvvftflvziuowqejtxdnyvoljlmkchublmcgtkcmhapvncghygmhlqzzvppdpqdqjvnutrdtzdroquhpzuhnoeaguqiapraqyhhmhehvrnazpxecgnfgkykjxjfizimdnnziqvyptfijiubairgyzzttpdzscolvopbtmvlvxrohgwasjolzjwnvsmoeucahpqlrkusbecbiieeiaanmyyxgscrskoludgalxtgszpgzkzpnpebnovsbshxhflmjulggyrlkuyistunpztfdvnzdmalfcamvltejcbgfpwhspnkxnjumnwvmndidhnijjduoonrkiiojyfvacxxuzkoplhdpjpdhtzacmhgloodqhbgjrxvsmgmrrtqzuudhfygnixgboygmsbxexfghgiztqcugthhhbliaolyfcanjqojhkrucpfyuzbjxygmtlxavoacrhchulkxzjzdymddvcoswgsvkccupnecjkmcwtljtayeugszsdnzloltsinlbiterpdtpzdbchpwhzydluekvhtncnkzbdtuojvhoqyzwppzrksmibhecqojliegtthwqqzrdbgxycfcmfpqdgjvzppuzxphtwsphymzhwbqdqirncipfxlysahdsxckqskvrcvxuszqbuzotpqedhystrulcdamfwmozaiktxdcdathmciqevqsjmqsrfstrzzyipqqaszwwssscnlmwbzjvizmxxvawybsoximpejtgjjolmywqnewkzfxdcottqavmpadjthqhqflslgziaccljfacvripsvqgwkazlynroeoruwbzxzlnoxauhkgrqmohciebvclqcphljiasyriefccsaxoqegzyepsjcirbbdtwdyosokxjuzfsfvdmbwgtnidtblkxtorjudkztaqtomkknmgecknftoyzklzutfzovaqscdxkmtcdhklefozphqhxulcbhzsocunkchpionldfhamgketsptbbkepgyxkufgvbsujvckgwbmuejdcpwzhmduqzipzdewrzdpbkrxlriumrltyyzbrrfsqdhkrjhjeohqcjsblkhcsxawydmasqjuawglntvppfvgerokflksodraqomtndqjhrwehnzmwdelqclkkxxvovymtwtbrivwamliqakyrbdbleksqmgoxfnqyyikguoyjprbqawsyyomtoeevvabbcdbmrixybejgbobxmahajzoysymbmcyxxrmysxjoaygwxftlshtwlszzlnobxzxyizlgodjhnognockfnoxlaugmuphvgwnflkwsjneqjubhfvsylivzcgfyqlrhqxdyyyhlkiigcsqoswwcbkiqywbltrjpsefazfpqesetawnjujdlkvywuemudmwsgcomoftuuyjizqkkkotyoylrqomlphwsmyakabbwkkwijmfcqzwbodtzxbeztpohuuszmwqdyebpjoeycdlksgsjtsiklcymxcfxxqgifftvyyakvrcgdjzeddyalyfeoityoebtqomhtpasmtlitveblhxarkowurffdmfpwckbjgbxhbgmxvdvugplzdbhfbsqubgjkocvrimtgqyowyqrvahgosgyxyjzgimypxjhhsfupbqqmfbcfpbgdpgkcfoqjaixhnlruoatijpiisoxffzwjwmovluqrbiwfpptlqejrgyhxxbnabxfxxlrpflynimlhvefarkwhgwfmvkaoqwjzhrckmjphcstdlzhzfxxafusehvxhwugazjykmhzhzofwjjljzwtzmnwmprwhrdqrttyxkkskbhlnmxcklqizrvwxrqnzndbcextedppmvtqfiegxfvczgkdvxqbibodopgdmcbuozmigtolpxufaxixaepfqbdazyutpzkiccxhhfzgildovlejgplaisthqcodawtzmlnlaxomnvpsshnnwpaxwnfyrgiqvbnmyvpoqdjfeihsxgiogzubhudbyepedmqlwyfycxwucnbrsmkudpggsshohvztodvfzulvicmpcfoqtexrabbvygwfxykadgwfsepiquyjoxoyzvcmlwjtuhjkhcscvvcrkwgcfjzdyysezgfngywzknshjfwpallqbhcdazujoctntbzwygxwmdeirzxslcptikmwoakpictztaeyerliiiotfkvghobkqnbfejzfihohvtonbxbtlupfucpdzjmonbxioguznjilcecjkjsazktwwpkfmeiqojrcsaslohaktoauatxwrwbkksuybdihmfpwywzwbtdjsofsjgzcrmzgvtjdjgjobewqxcodguxofsuluqnowpkelbnvvjushrzjgsjjrqfdbvuozhsbcjyqsoubzvcxwhgtjcpgjvnzujcxdvajbmubyozkjckpdvwlrunqsujhdydgthkprgozgtfcbbzsjtidusmekkkuxhdvbdflanfqfkpbnjetnfkbtgmlfuefehcywqplnmmeyzwqvilsxpvtxcoknlozprxrdcvmvszlpelmmelxjzdkvchuhzvrjulsrqwvygekustkogqseodopliyrhwpxbxmthtscrhpszsukkcugvsesizxunzwaaebmajgcppwccuxtgkypipatrfqkeimdbmvqruapuadcdjuqvsgkrzhswyccghgnndlftlhupepthwlwcvfbwllkdodbkziipcfdwddxsbjbxefdedfqqxpvfmffqjbeihdagebmtgjtuvqutexlzalptinctxazzjlmhgjvgdnvvyzkoscfwyjozyacldiyxttpvdalzeeqeadcihvbmeuaarxnyqkxlvyxgziaorkhfablrcpfyniyqkzqdforqgudnpexccbcgrsiuejmgkdtpsbjnyouevocxgipjarmrsedgablcjlztkytlzqzoarfzumahlwiggnmfouhgrvvucelcuwkgkpgbhazvtijbscmjujqrtnfgfonnwfesdqeqmjlucfkwpmqwjlrztimcrimwyzhorwjzvtijscszujeupeiehsqgghyfbqdkhvakacpquvplneqryvrnblttwmrrirkofcliujcbywvpdgcteoxlkjybsfvyixzkolcccsvjrccumogmuesmorjluxadzcrjiefuyedfpozanwojdzwwzugcpwlpnimepxexixgzhjbfprbfodtbovpdxiiyqlrviurxzulkowgqfgiuklavoiafifohwzmfbivekgbmfgmmmngeimyzgzsqfsbuxspdayrxwbcwjykidkefpmuwmfcfnhqpgztaasnejsknucbfiveznlnzlwlecjhpbetzebysfaydkywjfbxwqzprljiqcguddiqjhjkooypyrgxksxyfnixcowpacodncuifwzcprheswbrmhfufrkfbbhzhoopvvwoojbqvaamzytdphbulrgncrokxsbuzbaygnujohpreddlcwfokovnkicfhsmahjcbsurlrqcfpkubfrkfboradwbmrkyppeqhxfpocdcantjrbcsfiblcfucvurepppwnjktekekhxrtsokwxklseyanmyjmblkxpdtnquxeigpoqbalocaclappylkhwkvrgeyjvtpjrpsrallzbbkfiyhcvwuvlhuuuxfxjpwjsqaoxkghxlakcrllsrbggnbytybqhvkdbwvyzhuoxheedbixfpkctiyyyeeoavedskollkifzvhxonqirnixxxsyzhcndctcyqwbnombyatlxqrzjxywinyqcmczxkescrwmtjjeezfyoumqsfmkwkxjzukyxrkifkvpnzyaoaszbkxzykftekyscozpmhbxoyhtknnbkdrrrbnytalirrwxpjbsptorndmneunalogtzyfntmjzgijxnslvxbrjmjnzrkpjkaekzdjlwvjdhzbvmyeophasfelrhkkkzmajttymgkkzbljdxpnpmqoobpgjqkjolygbqlwytjvcgcinimtnkdzvdzzfuvvhwchgvlinytxlgcjponkruhxhxcmoyipgkgvworhwmloelghukchupvpdmtoepsuffyubmnargmslewcomfmnrajrpdinduzmorvyvsiqvgryozcphszolurgzhmwvjzdhrcelrckxcshufxxmmwvlsyhdojqwlqclsvwkovoaekbkfpzabcydafjvrhdweywfixhjviwenroeoufdmaezwkxijxikuhtrnufaqivfhdlgbwafnqzkrjlxlutvcczdchuphglrsexdflableebszzxxsfkafypckwomrmmjnnpyaitpmkrjclfhlzgutugiwpeiqnuesltyngajhxljjwdtthyefgnsngemdomidyihyiszcvwxggvyvwlahlfeghekkdosuzxijaxbbsitkrtfhtybfjpqfaiorvawzqnbvivzkadycjuxkzpffmxaszhysfwjzivroojjadhfxjhjbiioddykvjujthqeymzvehtdjgvncknvehlylnrpsqtewwzvsureqbonqlnhjhxvhxuyzgdigkqjcgkixesdaabutkepbcgpfyltwajsjrlnyuvtybuhhmmarccqfdiqvrqklnjjkkrddinvxixqlozphtbuieonxjfvruvmenyaokpnbdtlxtwnjozeibeyvlofrvqjvjeldygpbatiuozcsbscybqrcmcfkrbskuhgrerkedjwauwiqpwuxblwvlvmoulewcxzoyhsjphldinwmmrtxplhgcdwfkqkymsjmvbwerrygmilqnezmbvbliodmiubxrylbqpflvzexducrzgttkbgvmgqjstebxlwyunaklhycblwljozhissxrsfjwyzyhhpwjtqlnncmmihuwkucdaufpsvxzyltrqdhfmfdezyszqljtsoxzescyuxhmhksfvmzbupujjlusvxvpubnetdhqwtaikqxreldcjwuuktzydejzuzqnlsslawrcfivuejatifyavfluuycshhaxzsmcmsffrijvpnvzpqvhnuhkugsomughbhjpttaogryaogwilfvcuyzjstbmhhhogaxnbwubqwdmtmtddgikxtifwcirlbwhhscolzidhhajzhwrjvhuwxouuxybfrreyazdqglxqgpziwbcuhnrpcubflpowtjxjhphnexbcqemaxgrodqrzzlziypqjmwnqpcaysqtyswsufquzjyjfqorrsqwilohxwupijtqsbolznsvugbtaizrtdnpzodsbezcbntpudsatipuairrmowjcunxrpmfmghdjpzossajudeqssptbrjapzpnzdumcvugkcqzrflqzfwlwqvgblopsluoogkbgivaeapxwtqafmmibflpyklsmrhjvvnqpizkghcpzsppyotqzejautkmwhwpcpmflvzmnrkcxdqdttvflewgqviffxirlssmtswzqjgyqkoxivsjfeegdawulnjmjtshnxllwpzhofxdwuzknujttqsioeqjropepwvkkhfyoddhoemtkzzyolvkjzhyruxbprclmzwgqszhmyvasjdtrcrywwrndoxuzflrtyacmdaudztpkdxjefwykxmfsjgbakhpllhaxiqtfkoesgkmiodcvxpdpyskolxjfsflbgqqvsxcuzhycdtxxrcybcgbpmfchfrrhrzkewtbjzasbqddatjvolqhigpyyxdcuosjtlrwivyljmhxwrvmfxjunnkprvezfshqvzhdhhizwyqfavrkyjuzgznkukxncvxlswpklxwtwahrvdoyfchttzbwncopjmroiyncllndkdgavqerjyiqrlkcyiqrhhzsodwxdejzufrslnduhdesfjhlsxzjjeqgbokhohrdoeocxnwqvbuutaydbcveanfldzxjvjhakgzzwsklwmrhenuepkdinwvqybrnfjorfossdhbpmtxtktbdenjtvyyvtkisoldcinqwmlqbkyvheiomqzixhhwybrdlxdwpwfeqfjckdpownvsqnysfzsfvdvgzrwxnzrrswcpvkkzvzbqurvviexctdujpetoailvdwrtuvoadsmwsddcdepkromqtcbytokphxopyocqgtmyjmgsykavklelzmjzxzjfkogxmsqugivuozhcnghudvwnnwqipcfoemfvvoqydnjksxyoxldrnkicrlykfkbiycwjpikqsdpcsgoayltcgtaxhbuzzcdthbuazflrsbqsemfzzymrngjjfppyowoqpvmfffpkyetjjucsbbmcsebnmkhsjvekbrypjjnzhpcmdtuylneeequoyuwcwynksancefuljdroijvegfnxqupmqqophqhrvbicshhixyajhrysoffyxstrdqgdsabvhodaprfqwvlpmfzdkxqxtewomywuzmjwcloiyztocirwbtpdcadsveyxrrrkqvsyehmzjnkhxbxvnzqhrtjjmtutkbixrwricytgqaaxzhlekaenlwdlxyzyoocskkisygqushfkwhyfwwletmnbptzwfmjzcabfowakhxwjobohahioxftiwlzmcajmqxiqslsklhiusemlspcyphfnijdxwvmbdfxskmihfhmtbrmamchnbmmssuiczoimqzscbpaqklluyishbdgmpvgeeqpfackgrjskusqcmsatabknaxcgzqeyiikpkjolqvilbreezfuxxiqumufjlqelubwexofhyyjrfzzkmnenhwnzseycripmzoammektmftlfdefvrpdsauczsmzbogfoajmgywhqpshcmuyutmhecytttzxleppeemcubmbevkxutmidbxggashtcxejqmwxchpirzsgirexytbdimtuqsvbicnrmbbywodghfbzjljjflqmyroyqlbrgedqfjyhpbhljjijwhzzeelubjyjwkiajypcnpxpauklyqipkynkxjeimtdbyhgzkmgyqfijsgvnsrtijstntijwtxmshwplywnjghpnddpjndofljdsljhffycqwtmlkbaoantbewqprmaliqwuqcfokxchxretdsrxlenkxcvdqedrhlyybywzdttkeffbrtrewimhxlbozonbauldmwujsjdlvomhirzvtbxsokgzrmoldhdzjhyxdcmqfciqmcslmvybssyxoholsewmtfhsglfjusgvuxhciosmaykiyqqiahijawgkivfpqkaovdwjkddxkoyyfaqrpjdeullffgyvjtvxquzasxrsaqtjudmljhttugettdocxshrvtjvekmeicpbdrfbfxipodjfthhbmnvqxouijepdomsczdjqtuiiaxcpvwucyesukqfkifpudnjfcrdbpwzmvxpclbxaqrinpfxrxtewmbtttqfdzlspohrmvqkahcspekxefaghpeygadxjyxogoginnarmzwqfiwmkbabxenaelxldfuovnwgdnfhntiadrenifmqohokgkqmezvzumnzitlsphlcprlsvcgavlofhxzmbwourhqyiysojuqpyynzotgawbkvcuqpobyjcllvwtcyiyzpfbzauaiwsobgdpxidnvxjzfnhgmbcmeuxqqdbazrokkjsyaasukaksgzmjgtrqtzfrxmfynztxetcnoeibxbxocywurowysxltaxcfdzdjoxoomsuhszpszenncawncmzicybazcrkeykxiwzpczzhpbkuingzrhageuafjxperxkpgokownuloysqmjfswvygkorgslvyfvvgvpulzfqrnkzmclqgxzbycgwqrbhysouymerhpmbectlttmdwmooemajxmubjzetjglgvlbvcqlqnsnrlhcxzttkozjsomwinghmupqzijlbuwwuxxsymzqyfrhokaysemjdhdmxnrgbmatifsehwoafpckljskvqhcsectgyiojzvasrcmbprcgpbonoolfggzggjaxobixhjqyzckwmzlmwpykvbghorgndrrkmprckqhlifspapubwapzbqcmgluorxidnteoxigvipwjvwjldbukbnyaxsyxrfjcldjbfejqkzulyufetbqbissosefgqmbmyxtdsvpqcqntxkeafmzvnptxuoxzbbtgutpoiaxsqfywvsqlwkueumyqlrsrweoidckavjxnlkaoruzygaxmxpgctxscbptdcxkcqmgjyozcndwiuonfbzxeyrldktosnnksefcauxjbmozgaarxlqexucurtquuvxjeegihoylgpysgpdjdcyklhhhasfkqwscmblofpstsjpkgnunzqdfzbrdklqrzxkkgopupcmecfqihguhfzvgbggajzuvyzegefykiwdgzpbazjkvadyazlvadrppmddbpetmgtrwheizdmsgcfpzttkwfvmjszfzfsnvjnniytcmjtmewqevcbtipabnweshioavxiounxyikkkkdtlakyoiuazmlqltdymhutfkpuuvdvbqvznpatsyvnblkedlmjepvqcjyzrcelkwembwxoaorqyuikfrpjurpdvzgqhhkmfkhllqcndjevrcvkqrhfwjtbxibyxagvxnvgiowemfgqctugeisifchqzcbmqrwzaljvahxkgedprmeugfgqrvhjvxcremabfakmflehjjvfqpmqxmsnbufflgtbjajnznzgbkbwmiwuszpgzcknjbwsnzrbdnxqjwggblklctptebttsglmxknemkagaggevxflhixgyrewbbpcfuvupytjcxuqjhfjelvcjrfqxgbfsnskcxnatlfidxbifgxdxrbahjgjyhmomzmawyhlmzpjdnsffachziucfwbqjqgyiozcpodbnayzpomufzmzuzpslwyolfaevobqfnoaqnvkerfoacpkrhisohsokmriauxrtgajetlajgvpeyudxxebxkujlkksblvxlbvdreujpgttvmuphjwvfzkpjlqkifzlwmaobohddxjnrjrftpqxbrnibidtlijsupbhdlltzstcpjrfluxcxdtejvthydbcxjdmxxbsxnmhcnyciysolasevoiarhdswlcijeidhfngyesvidrenljofkqezdyrtlfrlaxlnoiwevrzxqjmfgzrqgewrhhmcqhjbqntmicdhussjgypxahhkngnoadzxrexmoqlfvgzgybkifllliaidvxgtnullvqdtafrnvwjqgbeccixejqrydsvgralpsazhpojmbgvykznyxsatvbrrhaoydynymsncjotsovigqxjigjghrggofnpbtforragyisieecydnilsgblsycylbjviqnsvcxxrnsgvroqyfewlfssvitzblcuiduhwfrrvoirfdlqfajajmsdgjmuhhibngjxdgutjffwcxffshnrwfzhzovrtqhrylqdtmbiwiaehebztzvghhkqpashohhaocapgdxizmpaepjgiofqpwmctdeszjhtreaiibxwehvgwvhdglehlsmcuopdkhhnbryeqcqvxbsaceizahoijmbrbkdehvdfbmyuecjmkxmsksskwhlbvvrfgllvdmniwgsfxzdzmtenfcslqwbuekwrjuyvdkljyrvcjofqxotfeliqiiyxatzfslfundzxxmaepuyzjgojbajmwftizfgatfuwomppxjgxkuvygbxeyxapxfyzeavtuhxpjbigmmneuilejicgkwilpjcmhrellgvmunlpndkjgcbkbskodvyxevnmprkrxhizxsknrwpztrhlkoxtnqwtsbbuvaiypdlcikogyylioegzpibfqaqmnkvrzkjaqldchwpuuuyzvryzefulkquahtnfpybaupfiybyleuljobirfzorhopklqlnvamkuryweiidpsdxktrucmfvfiidoetecryrmckjdecavlbfsoiktqhnaaezrapjojdjcnxsxbpsvsrutukdersxeobhajxqiutysuvjrcjbisldxsicmnussebdvaggvhqptnzrbmusptnunfpuoqqpcylttfomgngxrwyjhtlyotxfnqdcbwstmqpcfjwcxjykczxczdjlpwgrkmqrvkowprovtvnlexpjqafcmkczkkqnzcrrusyxdviedizexmwvhqxwatesdfzqcczxiysdgvzmcemxnmmbyflcbqpdarvohhfphfcmktxlazvwxihkwxfkpukjwgasgfcwjwsjezaiyynrmyhnuhsipcaivczffigajddeqtuhnljpnqptwxvjwjjgfbhfjvvmvzgxcsatklnmeamertkfckzsqjhovgfklackhygzqypygvgjjqqmuqcxniqrtmvcijjwukjdsuqxcemgptxjgvvtgclrikrvtpkycvximbbbzhnepruqsgxchmvcaezrvwwevcnurqadulfgttzzgcqaugwbcxunljvpzcrovitkyfjrxkefzleubtpiiaminmpinegftbbxocuqfntovfcllrgmwaxmqupyargnrxtkultdcqscyuegbfwvxwsczhlzkqoeiaictihlwfxqcbfhcyqnygxtjmobsxrvngiiyhkrrlrzjwfwsejsntmxdznewatflcutixyibmtnbaaudtcebvkqwlcdfgvyqayzmqtxjfyqkchzbqycygybhomoxfplgnexvgsfvjupdctmgnpqkwzkgogblubtedtmvwcdlthrxsudajtbgtbtfqwjdeusxnxjzukbdkyzyzchvqmjigaagiswezsuybkcwqrazvkxatarjjxrnkjcznaohuhmrpsxvyrgancbjgubxpgbhwkevwuaafwfmrvgkaafxlpvixogxtsfegpsxbulvzktmijtaqtnrhidocpaghblczvnkhrpfavxykvoyhasnzyxddzpgcozmcetvbafjahgilhjqsjpaytjjkqorxsjzcgxlkttdvjwdtdkvrcaydeyrtmlxaepywgbdtgvrxdzoiicgsurtwmntlogrpdfafawxvdaofjphdpgeekdzzpwkmrzusbhhygdcisqtqnmqomnxfcthznrufbyyoostjskhpxajejhthhsfdudusynsarwefdkjfkhrxtcyaqlnpacemxwlyhrtsqbqllwyhowgglldazwsnhrtpspeqhcrqlshrqrfxqdtofmggigkbgkbipofulucygwfxqsitkyqchhqvwpuqiwwxrsldzqastyjrjhkpiqiwmzvuzieqadplnlbywgnydkxuyllsvqmujxhqtujlvklcwubvcmruvxqlbnrrrqhzpgoedmhorsojliochphlkgyleycxswsxkolbihqpapzmbujoukuxwuywxiffagknrtkysjcnemhsevcdokufghquxekshaunfzrfedzqsxxkesqeupajboeaxjkytmuqnmqvndsbkkqrwyabwheddgvzmnycctlltzkxzlfdttaxypslttupmjbgpvvjlatgvorsdlorfoafzcfnhgdpgeugfdxpcfpjamunkheychqyprwgdwtiraehbuebisaoxsmhjgwmivdctburuhwnsidayndnzkivpwzylxekczbrxkbubadcflnzdglwflzveijmvszgkekzcdrewamgzdneimjrzzlmxbijupoxjimjpfrxievzqdcyvfebhurxsvldgyjbxouralgzydbdhdwminxvmvdoqewcrkvmlsenomtuxmswdjnaqfjkfkorhrkugtmuiloduwnqflzirkojdtyrqzjscsmkhfhzmqbpahelmwptekvzwksuefgitxrxgxagtuahkvtxf"); + sb.append( + "jukwmfosarzlfwmqxdyulveuxspmdeecfrluxtfghfkkvvlfjtomfjtncrlxwpaftlhjymwilmxgnwjmnsqqhyedshkbitfqnrrckvvmvfyopdyanejnngimyeetmgbugeatobvncuegxqouscdlplxbzgavhacqnajqhmjowdqttsfvrztpgwnovjjqdpzreekzbjbfnrdqxswbgspkqxjpcntvchfdlfntapapdzjmwxncxbgbmnzclkukcyqikdxqmaqasxokkkrywtlhvoftnlzkzurclspxxersbzctwnopcqqiyuildhdubntsjftotbukmuohjsexxklcobztccjgfenjmpgazexhcmvcqtdiaaodpswoksvtsvbfrwcqtupwckajxqcqrdrahcygrphjnyherwurspdodaogpaqnrpfgmtdikiupkzsnzdczfrnfmxzdgliauaquzrlvvhcotgtwkwpkinaagubtjwnclvbypoiiroyidjdmmttfwnoqezoywwcqwhhoidbemjogyiuklygkxkvailvteknynejieechgzvkwbjjirkoyyoosmbcboqdghjklrktieovhrlugccyjpdhgnqnnahaqzyrzsrviauidrlrzbdgcmudqkmcmcgaavlaylltohyjuanaxlvciwktxiiluyegiocizbrbdotwdzilhlbjqsasweuefredgsvqwqczffwrdcdncdixmfjapsxbamokmvrgjvlxfdjlurmckuxwfzsgtqtfoogcvdrjymblanmouatxwnvkgcciycxxcgqljeryfhqlxajgqdiqjgvzcqphkxhcznsduvizaiqjlyyapesqtrbwdzshwvxqemmbhtaqptemstejumuhvhathpzhkrusfflbobqqmajoyihtmtxnbzyqzmpygmobkxvdtqojevipijzjaykxvxnyxqxlplwbsdofijfyxgqbfgiwsrcxyrakwepydtqoildtghwbsgyvffgfgtkmwkmcvdwkonfkpahpmuwkfhebukymiuxrphjrulhgyvimqrrqgdkryoraaxvngbskodjeiscpmpwjtzrjylonzxcolovnapzozaavhyffjbxnfknkjbhzbvrjrhvdjguvjiekxhugnjzrnahcatktyrklgftjlcjabjiyyjzehfltyiuaxxxcmahotxxgnxwagjsjmnqgblmvcfpxtedprndbjjicrczuiijsulsvthvbcpfaiqjdbajxuabuviagckvvdiskmctyxloufkfcqecqdqqkgmhsjgoiajizvooynkymmneaetgqwwxcwbeypairndfzzxfzgccntnqvgcrfofzjlboqjfzcdnqzqwnhkkcbbbevpzlzeleyliaeyjbjqsrtdhiklhfnedukkvdqtgbcnrjoatsoziaxtqyqsmqzrxlslamuvmuhtgrcgdrbdmhkcredzflzqhcwjbdqmktievqnsinjuvyyjtzsdzlmvbshjpwvdwtreesyhdsbaiymsmwowluxtiktratimezgogdhyhrpchrwruqqmqdtoczgyfumapuwrkxezsslphzigqjqfvtgzoeetrzdtogyzlecohqonokdfesqevpcsfhoqfqfohzmhtisecmmvwqpfohoybtyxrxpxgdrzcfytulveeixivlbqsmqckoffavhlobwghgmgnortogmsufjcmjcnsxbfetzdxctmljicnbgrbejhprrvstrnywgtylakccanejavwsvhioxdewxpqhsurglposwnqmbmlmweebxgjupttirhuqtfuxzwdglqtilnrsryfbtxsskylomvshogjxqzdemnelkobkaxtqnctdeugzozkggwsiwyurbqaveylitopevhycrwgyeaomusifztkeyuuuqvzwxbkleyvhdjiicmovjazlbtupqxacefbyrpmxgshaoutphjbxgrqzwlcxkeotmwuqcpgksnvmbjydnpkcyuojtucfwzxtrnyjcjdpfdcdolheoaobdprzywrinibwnfhzlpxezqgwkjxzppnlsyevsytkfaynhhttourtinsjdeayucofyzjszuequhtsrxcvcovwlvwqtabeqrptvlaxndeecpszkjuenhvhwklpyglxiosjgaljozahhcgetozvejkeicsqfcarstffqibntisojujnxwmdshtgtserioxkixdtwqgkvowkqxcvfvizrvprxqwrdrwcnrhhjkzuppnizwfosfjoxuehsjcrilcgnwrjhqurtrhbnwxyfchkncnujheltjmqbggcxbfvpdedicqgmklljtqkmidlamwtrvvimixvrvlhqtyuapecywlegysszmepbblznyedqwbcedgcrmgdnsocljnthtzizyyrqdsnmjyizhkciolrhuryhqjdmlqggnnikxbxjphvugloqncbqblbfdzcgeplvmtulvnkmbklfwyaonvoyvfjnlhmcbjwuczpvyoivdzagyyixlyxslporoebsxiwtzebadyvidvapzukrvurzurhjeyuvosrgtmmsvwtxklkyprxkbegoyqhhnzjsufsdmwqkxzlbxmosdriaiirmwpwepovnenlmosqectpbphhyoqtfkfvfetlcugxiorkiwbfivjdnyntnkryrqcfdxoxzsrmmyokvtibrhizoscejdgyewcglxdufikekhafxiigpivjmljfhoztmpbkixhhtbnwhvyldvgiixnoqhcjynnviazdgxlxwniedycvulyrujjrkewnqdtdiysbydnakesamngfdyxfrrvnfomyokmchucklzmiuyizhawhonpzuzipzgdixzpbncohsrtgoiivhfssfjcouphwghynyishfysslbwtzeugafpohajeejuvmzjgufqwguabavxiwmzplrfanqxcqxvcnywhbskonmqcfqckcilvmyoaxwcravdxtgisulhsmvnxcjtthbgqaqusgsroiyhxcgrrqaiagkxhddziknjeepkxhnxldzchvpmhfaraivsbhylkcwpztayvslxejqjcvhrprfjxliyxfutpmpsyripkusvdmfmrufsnqmltiiaqbducvjtxattbjtfeokehauqiexvnglytyhkbsojlkxiwqssahbtrieuzqbtcbhuspsjrzkhwptsniqqilvreezhadxqtiwvhqlakqnqdprjpamotpvbczckuzairvacwppnpqwaqkdrrghzksvshbewkrrofocaxbmbohhbueuphsugjirsfdvngiuozjrwcmacoxmaheuriqudyeviqwhomljhrkwzngwbmioncpaaumcoxagtevwyuiivoqzelnuvztyvujcmgdikgkpbalfebyfxtwflfprpzayxxolbirqeylhfpowgmykgxtdozthehegjluuelfhqxtcpmnzzqllixocnssvyajtcokgxjpazzdhiktlnfqwvyrxjyylxdrwzphnvoiqrorclgwydmsiwejocugvyszvbmrjdanrbyrhzkhevtbxamwcsvzmulafkqhmcbfavupcdxruyqacloairewufgrfycyzkzgudoldechygfzysggxpdymccafyqugaxmdffpagrwbyaltkkjwvswlahrsnjtgxylxewoogwkmdpjnidmsgltkxyuhlmpqizhyvokylhwxrbfnugdezshwubvcyjyflgmpgtpmxllekdhkoochienmblimygrvmtwhphcgydzcovbnpulqxrlokzhwzivayjrvnvsjpzswvxqwmcnxnrzghfmrkmsstsjmvmfbobcrbqupezztlthafpmutruciffwakolxmdasrlcrvxbvtzwharlwigjfvqmzgsggsukneclnvehwemngknyssoyctirgjpopgliwfggwomfwlvdrfszojpgqdzzoiihyjrzatdsfgtwsoviapvrmgazbuxtokyqdwgywvusffkrmmoantgwzemgkdxkaajksqciacentgcowlvnokmfaosomtztwvqubqrlhfupgosqjdeumddsqbtojfghdbgsktmychezlfylydmcktajmqqvvrdcricayydjwwmidqjkzewvbjzjxfedlpjkmidpuqpcnstrmuwonzmcfojvatxyqztqgoefpihxcvplrlddioqnhoszrcaguhvpxmslpcpncwraanbumjqsdaddtcafvqfvgbjqrwmdbehwkskceyediewxiknobricmxesxdyyanhydlnksufjorbvugghzrvfybpdtakckmzwgreehyujmhetgexuutgtikpcqpwewaymgvxohdvvnsdfagkxkmhrtnfhcejjgzgxenlovijywafertsuhkbkbkgxesilppvxztxgzryzfhybpyljkihzpcbcdrpogzckttcyhkgbabzexazpebcvkzbtmrexvfqlwctwoydnslcpnjodveoircajiqppvikuckfwbefixkywjsmfsxghvpouifvkmcoypnhwpcfyoxfxpoexiklsmpcpypqfbfnczdfuihjhicsirgfkvfmutiasscgohkgiwdqjcadfljiujlklezpgkrhdudyjmssrstgxkeaenclountoposdxzyjefjelwppggyookpahmklxnoddcqquycgifhzgfjqbegoizsmjkvhztqgoahdhpbraybthxomogaskqvwnarcsotyghhfjrteqemzdpubhnbmzojmlwgfnurpyagrhderrcahwmwxwbqgwbczqowkwiiovmuigeencoapbhrwpfkzeozkrdgwqjeyqnbzceuljiqplovwldogcinbvlozufqvczviqskedieercirmcodyznkaofdbmlcomixgpphxperojauseeqpmkewhbrrfwvdopuphymvpcrgmzktqvftlgueiueokloafixtnfaocqvlierstkyizeyysmdrtufyqxtuswrkpinzupbonzhavbdblpebmltftkjgkslllnvqsgpswpimbyvmnkvnixsyiddmmcncskpunpxqzqxhoirsrwowgjwczpatgzirrmlqidwdatngbdmcdgtylkxuvbrjfdlstklhobnndutwwhljnvqvnjjrofodggladagbrkjzqrmriaqaddnswwdrxqbtplpnsenayecvbnkrhtvngpmqgfasyxqfsyfydkvxtiwibvlegipvnnzgfngmkazuxlslzycjmreqyyepgmvjsezrpdrbznfylmytqflztfrpmekxwsyhpzgfatrjhfsplrbhbryevjuaknuiswmogcgtzuhixkmfubmdttyhtnyoudhkymxvurmkibxczutuitbneosowhumpudnwrazjdcldtkhytrvegerjzzzgiicgnebmeigcdcvalnwmhcxwumjqqdjolhilbsofvkmwqesfnaxktuoysnehmqtqurzaekibyiewetqmmlcjzzsmgocvougagsdqajbpwcqjpfkmlenmhehzferqwlkuiszfeoqazgvsqityumhvfwuzrwamgcxlyrxryfjiwrahsekrvlgfrgnmbgxnxuimsoqzngngoeryowuyfkccunnspjtqrggvvqippmvwgxwvqlomivuyblzrbfubwqvakjntkwzkneqkzezfqrtiieujlhvfenhzckziboskymcugrxegmfrgkfboancejrnhgftulhqaewrwwotyiotdtrabhikoyhxkrmaeyfvisobxpwxdsgjzabrfdalxrkymcxjhpcsinowayjivreqqbadlnbbecafiuuhnkqtdienwajsizwkzsewykxadvotabyjkxjbgpixueivqtylobwyusyzhjjlcjfofxkfamhjviqbnceqbgycfgzmplucsenvyiebpsjqxgfyrxaagxeqberczpayhzukdtqydlmvdlbjndlpyjlqzndtdzvhveqcdamirleyoaitescsmevmywomeivougcpiaecrdbyihmzkblvxdhugoqsojxzctaqkslvrkalnxrhssjzsisvdaydcqojagviupvkkpymrgypdbfxntfvmjnmtyfolxqovjhsphnhtbmmzsldlenoyljszcyjhpzvdjktnmxulsdvflwtdjxfkkwgnvrcbxtvcoqwspzfyalnvzyffpzekdsyoleveblmgqugbfybkduvinnoaevxaouwxpfygxinkmkbnlavqwakegzmnfncpjtsdilzncbnmuycongjaaqbryqwzahunyksdaqgmtvwunylreyzhlexevbsihuvlvbhkxiuxpbrghojwftuxdhykzsqvshtxkangywmftkkdqwexkqzrjsmbyipdnhujoimyrvzzupjfkdzletjngwhknfkdbsrtnludlyqztdnnmoaahemrfpzequfhvkqlkusoigfjdgqbrpaljoimicfhqwdqzqyexssvibhegivslwtkdzphxvjsdfsdfjofdorhofjdgvahmvzdspcpmmsqmskivkvclhvnrcnrmbyjqltfmxctjlfkgfqhivjkmxrweibmhuplkhqbuytnowgayijvvsqcknxfzrjtsinomhhqkpwbciegrhpybhoirgfyccnysuorkuutoitybcbjlzwmefshacstljwafahmghyutkkljtgwdrohzuwaqydkehguzdopbmpoyptcqpmwohqzvjobwsohrmmgpbnspgcrebngygyunkhqfvioydubsmsbntjwwkvvgwtgyzwkphypvtvqovxpqstduabsmgokfhhmjoqlxeingvkruarczocqfesenvlbeutgicqrzjrglazyphlzbzrvuvpsqrhqhepskaeuktveiupvdsekzbyzhltwesffkybpxmfbwqdjmuvirycwpumupzfarixtddifkoqsjiskwwzmtxdubyfgbzpcgxsegdhxaoqyfhmwoqqybuejjbgdmdsfixnxajjhksycshkgwsaypbgpvlikilbqfijrlwjwvxzbqrghwfslmacxrqibflsjcqhkosrnzihyyocmpqvejqhsjakbfsonupigktivbyxnrivelijtqcsledcniwgxsuyczizwxbthpnvoqvddzsjhfystmxmxtwyanhghaoeqndavtdzsmpsglqgnxxzslfcekwyitdeqsitickuksczllffqgkfcflgpojxnxwbommkoxygaihgtseqgymkauedhhdscoilrdtxjubltcgiipcifmrkugazrejanglkjjyagrelfestxworkokiqvvsudhmhndbmglfgoxwhklcispkthvmkdqcbhjhmleaceugihmkhvfygoggbutlmgnenodevrmpskjupsxlhfndhkeyfbdnyljidfyosveekstxlwkmssitwspkzfnxznjrkxaztbkuhqhyqazimnysgczrmmdtwhgojaxlujkgqvmpyncbuumtwnjqzmzgoykoxsjqdjpozkxjsyvxncomgjetrctgpfpmkbjlyjmsqguozttzbcgamsriigaeavtzjtpyaszygndvzpkpsioqpxetpomzlbozlnbevqkgpdjddlunhvhgwfopnmfoxlkturcwxtepyixfuyrdlfmyjuzatscfmnupujeruzxgzeezsejbrjkhakpldzfaesvgrkkanaqxplzzkfvoqcxzbvlbwptwqrnkedpwahlegluqncbxvkqpsymdppvdyvlvmzcfyqudpgwrbnweyoyefrdqfbfirhsbenaazsjwwjpytsvqmfuvozdoqwoqblodsdwjbpsjrctavpklucalzoepbfuwknbdryfjsmqewzbijmirphsjquzphoiczvfssxymyfxopywzwsvxjhgtvxuofzenvvyodryhepnfibfnqevpxucajvjyppnmjqgledgbfcttanpliwfogzqkevwwdbgjhdcdnaefnviylhbgwfjredvpxibqpubuqrvqqmvvjsubgguurnpvklbrumjtrtgthpfrucnbhvvbwkkwazrxmkflkkpkhekdqcftzsuxykgcmdzkdlqjegrzlffvkedbxyeskebkmqxhwunqkqutjifpsohgpnewwiueezwtoolysisohbdcpcxvpegqclxbsftwgcwffdqimutalxmyxefgrjonyuajjlnhaeytnldbktkfypsveagstcumvgldnpzzfhzyxfhlzjdxgyvvizkhclahrdhrjoybshuxvmatdqpbrmzmdebkmsntvtgziifmgqamoontxhngayebvjbtcdjfcssycztmfnfnwsyokysvtxenuthygpovyywdujwwpagfcjwdgylkksffmgaonhwtecprfqbmryaqduhwhsmkrtekcriqvugxnntucxdjianfubdetqrizzsoyfxpilyjygrzngkmvoanwflamknipfoftzwilshropdizoydlexekfwpxoxkogrclvrsqvaxvfrdtrrkwngwqvbjexwlptltoubexpdljsmxgbtxvrqwczkpsjidzxrstgketyzhhygsjncjzzwjymhrqxgyobckhpeprdpdaxqrbshtqvcegppirmofsjyppgqsfojkfvhphvhzbrcshqszjvgsffygopxauviikvpdopfuafbaormmtlnnaxaxundqpaddqhrsmrmupixmpqqjmyegymzwucodyknczxuvwalsvyahutvkvmybilsmfooudzwqnrljwdymunlhfoeprzzwyyayxzdlgmxnntrtfjzsfjgqazeuyxnmiiulhthmipwhqjuysqyiykfsqqhhvpnbuntpbtbxfkuhquorlkawzxfpaxhpmhpevwulkellzlrgrmqdbuhepdgsdcgqcgjvetlikyfkmzepiowwcnslpdlibymaejywxytjkxhmlpxxbrmolftyetmyesvlkczkjccpcutialrdzqvhhrebhoznbllblcymioicnxnhpipdnzxoaencxwaefagtuglfnwhyzhbykxggrwbkrjzbyrkgruuxxvyehrypbsppevdkpxynnrqosvdkdtqkvoxkioepggpdrbbvbndpddsvhqlygrvljscgxrsbpugvucbvzlpetiscwqbdddrokhkemvnoubgqcxxcgeuvqjibstrnvxjtdsdpmopoufzhgnferklfnidcxfrefwezoryequyxirdvcbvtzzbbylrtoybcnwwzvlqbonecqawkritkrqsnetozweqawzduidqkiftcvedehyxoaoohgwsbjqrhviiddmqgbhkduqymhwgkzaflxfooffmrzajblvpppemctkyngeoywmrqisfvhflioaktmrlrynxdqmcfssfeihjqyotdubfocnpuhxhnjlpwtghnrdxsllsnobdnjfhxnfsviuffltxvwfwzaqgszbchzvwlcjqgmmukoqcnupkisjeuxvcadqseveupqfdtnvnqamwonukyjxoprobkaszzxcerfxvzyfpvtthkfxlcsytspedkvsaqjjacpfyprwzvtkdyxtebnovbeffhgwbtyebsorzoblninclapaxuckjnedrzplkdzngkwaweudfqdkazphrbhkfjqjwiufsqpwytlnlfwvwmhasbuquipiyincnqrfghzyjcbosqwjdnduqwxbptopcncmuyuvuluxkrnjflwmcjxnjvvxxkmjswsiokepnfhcsyhjjrzvmawhvnpijnzhlcbyelgurpzvzczxluvofakjlpjqdazkloqvrglrndkvlynzirdoufkazpzqooijqrhtzvodwqgrhonqxtnthxxgfvthplmpagwpvsswcxwdwevndziolwhohefqqeljmsgixdvawxnkychxlcbovhnldccwobgkdmfmjlgfoioofjozevopxxadvpxfelbevdntuayvqutpthyobxtfqdgkpxugynlwppydqswtrmwahvpoucgnfyfqtktfnrcbqsmwtaiwhmvnkynhvmqoefnnofmmiyayhodbvkoifrfyesovauwycxeddiotlrefayyinrugjawaykhhmpuyzrnwnyuqoyhbbeddxofnpiymdpyjuyiorlurastwkdehlxwwgbbzrgnummzdfvemgmuptalswulnaujzlwduftkxoutgdrtcyknlgliebgyshivtduciaoanoaxiabdrizlnxlqxogahxaihezjfxewccrbrritlhkuxpfuogulmtlyrlukmuikcrlrjtknlzowwjtuqwebhubpedjbqhroyngpdgmldnrcvnojyfmoatmusxknnjmiqcmkyzflumjprtjyhbznklvswnmdwfyhawlrdwmuvvfrsdqkhelrbvzgiquqnthvqgbudkuiynkrsesjyljiyftrrqzttujclmswgnrwpphgyqiolsqawupsalcpeeazujlklywtheqcmffmngdcnqfmloyjakfxjgkufrnhoubceqyvexkwizzmemqyjvmebbxocjlezvvuvbpoktbmoisirlgbalvxzmimvofsmutudwnyxzyoaybyryeevtysqtthgqeleybckitpctqllkuqczmtichxjkzlxiyxrxwogkxmrfyujrsagheptltqzdpdafoacvgtftfijgdzrwbvevrredxmjrjnaonfgdrpjybhvnwyruqkjsfjnlfffkmhhfxvdblrwrkzbdzrxqxdkqjyzihxzglrmxoyjgtcfciwkpxpnuxotrpyihriarftbjltfhsxmdddctecxecrctaztxcpikhgdbijxrjefakhotznwuarbzpektjdzjugrdrxrnmvozfpikxhkcijvvrupalevoxgduvdauxwrtqnjilimrllyuqvebnshkubifklpxluablyaffynwsycjltlgouvynuxgbjjtrrmmdiyotzzqbewjhthybzmsnocqsnemmlapyvxnteichbrsjlocpzosaljhwkmaeafigggtqnuhzdbwltkyliklzvxonwzstnjgjdbynyxqphbwzarhpyvzgnckqozykekyjlqlunjqzqrugglhgpfhpskjvlzlnjcvnxhpgcedmurzinifgempagtnopiawovgazarqyowjfttdlqyhmwtddcmjiwyssmstvdashlenxwukfhjxkywmkuzgudhpkoimfmiexryovwocvuabfwtkpnxoiovtgodmjmiudzwvkusiikdyxpdhxkozkvrugqlzlxzjxvujdzvxuwehkcgxotbwtibvsqqivamcvtdjqcfjfsjlazfcktknkkxysvroxvwntlgmkehvrolsewejdezivonklxkmsfazwpzjrhjpyxclgsjoiymkmfvbvvcikyfrerfiazskihcwfisjfarwwizwjsdmgrtqytyepyrssbpqkytankhwregkpezqscecootppashvavqcbexkuxvszopcctjuvgnqxeuhweplrgcradgyofxjyarpdcxrdpkoswzotmhgorwnabcftyrumeapnpaxiikeyzmnavsxztbipixtpxgrjvzjhbxxcfkwskgchuatxjavgscfdhgkcknckwpvbxhtfgiodmjkfjspogkzzvzouffvhhzuunmgongsqdhdtnhdnajzhkzfcynfnpovafpjtgphymvjffatpqklvuyftmudjfgurukytvwoywupgclnhrmhppnfmgpmbvojaapapieuenvqufejwusvekmpzvbvjqkxbaychtirlwhgnkwzqlskdgbptjclvtrjgvobxtclmqhufsrvrpswstcojnfvyqifzmmdywyzqkqvysmccqabayrlcknpwsjzpgfjnypbcxoenbregitxrcrzssdnofofeayvqhxoysmnnvrpiunvsustybgkulyymigvwwtoofemilcekywvwjspyfairtomvmnovteiwauvqcgtawtcuhoxcnihbxmsubdbsgrrggsxpnrsqeoojovdvgkqbnfrenzniijnameuwodvqvxyfbarcxyaedljfdqbndvzgtpdrgmytuqlqjjfejoztquzosjaxaoqryhnayapfnfrqytbxrqorfqxfecqulsyswokhhmpgxbtbvrshervzlfqqotgcbupcxarspfzrmygphdroneeitgngbikrdljvvjcsqzfggloqizpogweamagkbiosdgchpdvodceeujbfgwflwjrdgzwbpehpktbzssbknkluyeoylfzddxznohoofwbdtpdhjvjukjgrffvsflottcjaocukruqghbhouawksmvmpepnkavcfzaezvjdgxfihrnmceeimbwzftdmlgnufhumkspwirioxsevqqcvlbayxoqpqgvxnrvuredykcjxgwddkmapdkdfjllhwkudmkmzdgefcnnhvxrlrtatppbsfchheiukafirxmecigsqntxkktzoctauzqrpeitvwslkyzvczmcwarffdrpyzovckpixhsorjkkfeustspqdspdxxuyururyjcoflfrbproasycdwhsxseuzzewjtqsvpybarzjqikwowjcaslhkvemulrceetpttfiuixiyqwoyeukgdvpwdiyvaizwmdejxwuqxjrnfpvtyindfamjeyhmncugtcjkomhtwvmqqjzfeoegefzelxxsrtmydofmvfxrrsicseanewnckhbfuflclfktorjwjneixsshlwqldpwrnzysaiaoamtqhslkqcotxfeduzrtxvrxnnlgzoxuprhhznyeecpnbfmufqewwkvclfwzenfohfikvvfgpiviewiqxzpvkfpoclpaqtqngrcaegtxbgtwjgqvibsnakytqflxxxhkovlbfpyedriixifstprpotjvrchetaklpztwvlclfmoywjsbeejmjxszrcencxwwoenpgdkbkfgpguadvtznolaycrmxycembegxbqdgfbcpgicacgwxdmtvhzgmdgqrefplxcjmgienrcnugcqeflkxygjxtssyvbetqfbktmiftowyrwekwmoeewuainhoxfwxaxvcnbntuxfqnesxomdpddsvxncebrihrjpgrvvgoxzsmsdxletmogrqgnwsitcuokbvtqhixcbckrigxqubkoqeziwagyhmflapymwbbyydgunnzcnumufyghngaxhbbyzzovvgdiiaoihhilgjybwdcdporubzlwkhecgckzluibpnyidnvyapmluthypyzzvweiuazwsmfmjpqaczgvtuewiqodddvowpqwvksodeuiswwkozijvgbflvpfvsbwvdrpvutqoomugmfnbiyffmaaffikutcogyxghmyyeumvqyirtowtpdtixvxtjuwtbzjpsqxruhgesilljpbhmfjahinjivstoztqjvpypxnaaymwrmqauwkqlkkcmrjwcurxamrqxnjieodgwevgyixnjstiuorornedmxlcifrlaklsokmwdolxcxrmxfdcrvcujdaskfjxaigmptmjifpfolxbjiygvmrsmthsivpmhvdgmiwyepuwjimqchupkdfcsfunwnfvdcrwajobndffsjyoiyplmdwctdxtbctdqmkcelpweozomdrkzfaaptotkbtansrmktunmnictbimfmmajgcfoaywqwictahujiselhlpqjtqxdrcudlxeedazjnxjrlyjljhehsdtozzzlkfriqioqncklkcceylhzqaommfisxktongltqoxqnmcfhwacxbpckqtojgurvjwligkbjoiyucoiiminujtcpddnrlzpqbddnpbgnvmboyjqvpabboxvckbwyftfmgpztadmzcxxrtozlwlsuudycnmksgfyzunhxwcjoyaarwyugvrkwcwjucnqlmvxyjlffgvvfnosvkdnscohceqfkfhtauuslpikucwopnogrdjsvphwhngoqoyvseifmtfmivkpplfovbwqkuxbkrxxrsviufvuazughlkfrvgdanjchrrmutflnsuutzvxxapsfszxkvyspcqzpqbwgzkfztblbppogbhyqtyicacmxfveddftxmwugonkphjiujmerqpkbnszohshdslgfaqgyhbzcwmsfqxiwivynzifktylioqurizoqoexczfkmdkvztokmyopbwdhhblzpczssagsrbupjotaiyryayznnopdtcwuirluhtdxkuekyglrfrtbocfaoxmkieenzvgdfxpndmpggtkqbsjsqrlttknqbhrjnhpujexrlyiaajheapfgydelttqbppnhczrurbbkwogvxchpiqvaxpmcllbjgqsmptsobrstqpegxiokjighhiekjpobsjcvdgwgvrehkgghkycehypenaldjqsxumxoffyxmcmjypjliegzixmkeyppvrulsiayypjlbeipbgdglyclkobxrorbelvwqhrzzbrljoksrxbjzodcaiowubdcleavtwdudvbvdjqfhioqzibdrdtyivuuylkfhnrygeojhobfhaumqxysqihnvrkydhfqrkiuxuohwvwbfezcmcbvseyknjkiylosyplsrthpanhtsnrjlkrgquxgkdrfalyjyttcurydbwrdtqxvlofdwrnxdphipuvmtsigdlxrotskzwrnjowolqxdogupbczjxyrizmxtrovwvfoosjfwyvhvufesgqpyioqzvywtanwpgzqcarxeztynjqwzgadhjqezjwhqxfqligfuucaotuaywctzkazfsfotpcwvnzvvguupbdrihrwtvfnifuajfiywbsytijlqoukjqmrabiohfvsejgcnzamhkhtqhoshmusqgfjmfohswfiieawhowxxcesvmgggvrpitljnmdvohnxburuhakrmecfbidisfjsczgoencflrxrbzednbqfcxomicdqwvqkjcikmaprlblrpzjubvrciyeozuwerfydzcnglsgeaurggtpfjrjllhbcpiilbdtsxrmfsbidfvqasxwgfnkgjdxyahbzrrvorblmqdqxatapjuhexbaywcumzwhpiuqsppindziqfuabmyaztnnrwndjcfgrzphwokvhzgmqgfevbktisygzhpeigganykuwxfdrtdpyfnbwxvwxpabynwsdmbvlcmajljpgviyturvkbpkmkjiagortolnnecsqmpsgkekdblclevhoovjpoqozcbkcliwidagwigkjnxgnzygbgyycbviiddurmqhcehiudskfblzimnmcfialnlklentlraxapipbyzsatqcidksbmbirsnovzigkyanevqntmfwdkufdbfxreyagwfcnrdlproxoxsdgvbchghzevooegbywijinzamcuulbhhdsafyracpnegwwtbrxxnessutevxdiwkrmbpykyjmbjhxkxsmfxijiklyqawxuivatggztouupfsuvswpeevuhoxddsovptobakgpgsddesaiffusfskmelnqiuwdhukqjyqmgecgzmyxhhcbodvpcwqhhknqdlctmtvjdfjprvdvbxpqjquswhngvbfugcgoggtqzxlgxtqcjvgbngjdflxhijruyevamaojodiednedinanbldwpqtwoyagfcxduwxuvhhbrnenbvkpldyrbqhmxjofccexozimvfoxftqcfadstvtniyytogoizqqskgnsxnjuvomreiphjlxihrltrxbiscthbdtditrkhxigzjanxgtwicwgtenohdbkynjutledpzyylxyyyupdjukqpwmiklfawksfrbaicnfmnnukuvqqaudpdccngotfrcozmelutudpscxljfxtrcfythbdvwyhyyszwkbzwffikyjlkfjwaoznsobgfcuylrwnrcbwdmulvkulzsmzpkrvydnxsjkyigghilsobfuajkriqrsvoqasydajzoduubhzhwnqqbbaksczewxhtwiomepxljkzopljypllluoxjsxmrfoshyifaidpziwxzcevzernpkdwopywfxsqwdtzvgdtpkdxggorxtvrdfjozptlchwamsytmcpdkcxnbdozybtdaqvetsztochwldhviqmzrjcisfqtnbvzuewkmssrbvkpiumsthyeyleqjajnqgwnkduchyoiqxmiwptczzpflyrmztacawupbprhkuvmimpfydiqlhlhstceexkgqxclbivtysvtmapuxbvkqfzwzpgkkxkarfzwmitrxstfzhxouzoheccwkltcnuhmcjwtywxyzyojzacgmqpvdiouavbzfbtxbfdgypuxrkagzfshwawvrjgsvrbermfeasbcrlswezwgmeajjwbfhgcenzaplnuhsirlypypqstugigzkwagwakxcsozrezhgoxtkuxxsoqolcrmsotcabrxrmkybvnzhzzbnmvmxlmpetgeqfbotmayvljlchixvrbdcuyjownqqttmrxjklicqcyetgklblopymehuwsyzhdmisojcuhirsqfpjbbjuhiacvuszfsglnckkykpfkvzfsgmpwdxpmsrqynosdydhinfhyklrptgioairglkqpcvasekpcjmpikqjtmvbkesejmlkzprqxnothnlmvspgjdklaryysczngazooycudnpipqfxyjwfzhyrimtwdxkqoefalbmdohqkbbbbolpsaetotvggdbyfezjljfxhwdvoasqqytlzvbojempzomoslaizvaigswnsyulyycfkqhxinnhrormlshjnuaatnscsyiwxpntzsspmdwsjrfecpdgrxqjqzioklqauouxnirkzotpxovhkuhywwzexsdsuylghworduuulfuhmfglbrwapgwddzlveywkwwkjmuxkrjzwkhfdgogoswqydzmmrzvfqlcscyqavyztqdfnvnymafbijudxqlmukivngboxawtfriehebnikontujssdabrdrzetwzdylewtpcimojbkgbtrclalfkiuyzegaqldfupephafeihwojytvhtzavapnbaupfqrcskzokzfhcjkffztdnffzhtlhothefuqrtvessccpalizpgrfqestzghmrtyvzeqdzalxxqbspzgkdvjdqpgbxrnrecvyobqpfszxcdcbynbffpvnmhhoepcwogzlndvtlxrtztralsxjgxvptjaybqdtzfrhkrgawoxijtnbcfxnupeluwzrnahohvtcdaqdlabkojiwcjgmvzkrqvsqchecuiyjftubcuukybjdhhwcrqfdzertyrzjfdmeywqclepshpvvxhaiyvickeaypdgazqvgpmrnbrnraffzlfvhiqzhjpzwjolpftadrupdcclclriqrjkktcyymmumlrcvemtlrexixjzdluewpuoeqdqbegndgphsweghovrspejqtzexfpuojxskvueijntpjmrapbukzombmllzletepqifuwteyvwabovosetskoerbpytwnqazkpxfpzmvucmmuianntkdobpvrppucwuqcnqwxskypeicfcvsmgpbulhnmtcejjlolprpnlhizfankasxrshtgdbgeqfkiidmrdkryjgfksagfeagdakgykgegakgkmipfvnykscrdjdxyzfksbrsjzcfmowtcipljgwjehskiemvyuwstrnnjhwzwcgmcpbapbjvdluwvvbsxdaqtdybjdcimmlkcckwiclwtsrsjjcjnotqkwpcehzacmjulvxkarhbeklugwlqqjrsophxlcrjdbdjaborfwdiqxfliuetbzubsykwdlxaqkqjwwitsexhbkosbgchgcczjqegsqwlvzjuuhunoqnwfhifyfyqugpybgggaqivlwmhnuthnpjbcvqeymyvsmwipmvivppyvupboaozjxxbppqhbelndbgroqqesuggyqefwwjlerlmkgihuteowuunwcdjeilryiszgcinrdrawhnjywhacmrpxudxtwqcqdruwdiotnqtlttrqgufdajrqxuqrrzjcxojcyvnwvhgeyxwhurzaqvtcjfpkouwpqyyuuedijyusvmbljgqfusrtfkjhjkbyhlhcrljfrycwrclqfcgwojhiskfqmnnkbsibklzmaucbnwqiugixzvcfvkpopfiadfwstytmiykmtdnszelatadmdfmesvelirzdmtaofugmdkguuqfcqqctecpkscvwecidbmqjppthuoadutpcwgynjpfxvcudopaslyicaujhbeixussyqkjlklkyanuazimwozqwnhgpqkmrwpshamzfsuifpfxrprpcxbalbtqcuqhnvsdttiltnpdxotwyvolkepkgyciuecanpyzqtocelcmpagqkhjtbodevuaijrxnutckancepxvtxlwsbtlwozbyphjgxqzqdfhifgcxhselzfzvaqguzfigrfcnxvqfowgbemsmgglhehfmviwahqdiyoaaeryhgzwgajaubgjxiwqozbjsyitbhcoiulchswwakxhmwapvizjruthliewmnbgmcfqispkztnesgfvinbdvgawzgelnahfipfdkepobeemzdnsjuvvfhpakhhjmqhywykubfxyjudwgjlfopxiurycxzrgbufaqjajleucabpmhpbcntmwwueegvwfteanwtvupndsbjfrchxmovlttstmiedrlzqgmzpakfgzwmccwvltoclwbhrutmaisflvfaupgcboidnbqzdjttwydogiuhrbagnqrqhddmzwmkglbngpvxphwcqfckpxrwjybmjlrkpiojjpshjocpzbldwjrdehjzolrryulcehfpwdodlsbtwmucnquvcrkcbeiuutsvaxkbunaosqhejrqwupqysftcztgwfleuhvnwvdkefcicvjyeetvldvxjknqvnmtrtlhreqyturditgnmnjfldiilkkhpslzbjezjgpiarlpposmtrzsxpiffctfismcpnoensqmistbqpfxudjuvvknvsmqnbkdccruxzpzrvgjutaaybsxfhzuikqxpfljxapxlcrqjroxsplffzimlfpijhbkcetlahtoyvbziewjfhfmrpgfvxhuxftepehhsibysgafnkeydguiczxksfsrnflgkubzcmatqcjpgpgyorlevvmbxxdstjfnyamoxjghiivdkdwxisiixxfdokpgjltqrezumrddqxhmeziqofqyiydgbeglkrahszbtadrouqcobjqvmoyinnozrqulvnnaaectsonptaohejxdlmhdoepmeienommlmhhofkjxbozrofsptivjejguycrdnrekpjiolnwxwhpulfrstgctavklxuswjhrybcqwhtcynjeszbapxzamwmcxkwvkbvacrllqxcfjcvbojhdmkpkhspuwvgnuconqmcxfqbbscknwnjamckrgstlbjwmgoveposnmfrrntqzkahayrvpsgtapxvuvfjrkiyvdpjbnhopbgalnacqoyqpgngldfwyvhshoieusyxkrrrgrtcrgjvgyceplkkyylabtbaymvpeexwlrnldxtmbxdixnbgxxguhjgyfealstwacxnkvhyqgxnaezmhnknzvgrucugyqqeqyjjwwlwkmqufhfdhurserfgyvdwccftagqxxuwruwvuhuuiwlapwxghtttwsgflyemscllzffhkeqghyyigxprdvbmhmxaaypsuhhtqxfcbvxhbhuvbovboibchjnljkjikmcpmrreisedgouilzwjjraevmqqmaedzhzrlnyzsmhebovmnrattepswivkexvdlujiccsbviwkzprdlhtnkvyrsjmuawrmzqzzfbgjqqifdmtwnfuyvgxsmxuwvvwivsmcolnxhdlisjbuxiajvelncdhjotxqeelvatguksqmapixjibpsfvaiwqfzdxyaxoupicdmuftliurkwhofudalzuauwcvxhghderbwvhxtmuogvrzasofphvxdfyqhkczfpgijuqvjfgnseuugareyyrbbsncrsrwhueguujwgzgvaclfaflnmspwhprpljuzehsujnehcojoishlrijqhbamwrswelnvjkcpdakiacbckmxzuaajpqsvurqvrsktdrcqumqpgqlwhmdxpuetbdekuzevhextznkiwnpohydgijtxgzqrnawvwwoldjxuedapfkdavpyoqxxdwujtvmxpusmpxicddwmiymmbjmksycsiyfnsyycnnaygxqfgwyeosohpmmpyfzwovfehykcsbmmrvthysqigdsentwjtcbmdamwwrvdullaqjdritttilxgszwyvggioohaalzwfdbwbkdximbqkjcranlcofxckstskvynehcdicsejmoyyhjzrbhezcoeghcsnhzmjarbvehkvmmnoiwpqxakeujbedsbmolemsfkybxfrdgzfcsiwohpkoqmtyktpwjnlnqjjacrmzrfnhnesdodrsdmipyflfuuyfsrqmabayhkohpeynszyewfjomutmxtkoltmtlvsignfampoksxczfryahbaxefacoamjqvanvtxqlxbumyussisgucgcwirydfvbbyqftgyopjnudpquwbfbhiijzxliffldqxxnoygmcckewsnkjphejyiycatsgunrygflwthxcvpdfbxwjnrtbawwghpexdihxztvyhpwhnmbqyhtaykzbfcbgjkcpokntawfyndhubcszdeqqqxvnaogepxdrmhtucwyxabzfuczzqnvoskcserucfvbagaxhroplxzsrzuapckaaqfpnklumvsvftiglemfiiwpcajzpidapjcqkejdglgkrecxuqyramkkevxjgrgkddvqavbzjwiwgpepyiacjwrmnynaiqvlpqkqsjwfzhbtrmovpuhjvhzqulhcicsjqbsmlkaocxisftlyzpsfogkhudrhjutvgxzwajwctlhwuqzsqglgunlxcctwxwwmyixbrtbqgamdkhepwzwslfirtwlvcpcvekgzoxohtulnlfgfxjokviosbvbthjsagwilphzsycnxaafsnzlprqgtednuvsazhjwyxsspupntscewefxlraereatwfmyohjnvamkzlqlmphjhsfthbouqsnxsxnsniluupoebtnzjwdnslakqpyvadqntcrneyijgqkcjjaliaqoaghgeyrcdgwqaanpbrnuyxllntxgxyrcbgmxhpekuyyphtpbcxdffgcvcpwhigovnamtetpkkjuvecbvugumcwrxaqnkhpgkdmduqvcschdobscpeonrmgaszgbwvuftetitnpdujkixfomstwrsgcfcbhpcjmjekrgjkloebwfahtgdqmjpiaylsbiquydvdkfqlkslrzelnsbiogxjpqqmbmceryuniwifgwerympjnvhyffzfoiayuqckepvonnstidyaqehtdytpahykplmtuxqrsleupnfkgzhbyithldahgptniukravictxmujcgcdtnzpqabrnsbptnffnrzomtqugdktivasxgmarfliafiaopjgajlateivvuyfokfrsgqpkyrolmyonytwswvyyrssytcgztolufbcieshvcykenadmpkgzgvowfkfkgafvuotbibrrhoporodvkwaygbreicdmvxdlzshndtpxtyftkcnuefxkktaxzrnxvbdxvkzfouhuzorbgurcyiocrloesuncxshhavwvlqvrxuikjwtzvrmjexdnlmnkimbvpiyccucmmmaubabtdpedxuktjplsmdavvzbdnzeixshrbaihumzwdtwviinetsqczrrnokzytucqioqkcvwcrqnadctiyuokdnovrlqnizqokfdhifxybnalayhogzdxdgmaetabgyktgshosogdpqicrvpfvkecyihtcltqzywrvshdozzwcpxmtkdmaxrtefiyuznoupsoihxsixgjftpnegtfkfrqwrfkashfgnxthjciwvujmxeaxmuywvolkcgvvpbhtnzwzjmraxpdrpuvdqhnnqgczwfpseixhksyewvgrfgmmqcvwqggtcbzcoekbedbqvvzgzudpclurbqojjzqfkyishrteqlokknnqaldpprrwafynxiontemeacgepecqjvgyzdzpmrjtzuohqlykwhtbbymuzlivjvgdtexiqdzqzpddkohirlpaxsmamansqxbugvtssoabmljsqgolbdwefvghyumjeugswldenxmqvvbetqqeplswfgxshvzgmrbvdvutpocadbxsuurbnyyruqrgmgffzgpuskhgjblhbyutmveafebgjwwcpyglpdrqwonmgpfwzrywqldxdxnjpvawcjppfkhjuoojrgufyremcosfksgnhrffovtqeotsiqlqhdiufxdxeqcoaitxbcpfmuuzgvzjsfhihetstesdysbpaedltqapzxogkppcvioyowqpqwpwkfmvyqrnlcmsufsywythjemexhvbfdpghryhwhdxstecympzaqezvdxjxzcwavfszorawwxcmdmsatmzrggiilftgwcludgjjnsksiefwhmwuprgbevqeuagmkhdlebvhhixuhwkvorippaxkgildbrmtywvndvbojpwcparpcsmylzpazfiqnhzyonjilgdppzwuwrnzxugbtwuzzqdzktjlbcsxadghxfeodfmtsopyutibuddxqidlsvvxuouygubrgrqeugkatfsesobpjmcztsrgcjeovrnxijvianjvwpayurpnxvyextbjcgmntwkzudcrniwoffjvqiobbmhllhiuftjeohletidmxfbaybsdchgxrjnihjefdzfvhfoncsxbhmmrhompkcehxxqbmqjuuhqrligwzpwgjrubyijvjbgvpafuwtfgungrftldyjfymhnmrtysylfmnkhiqzokgavzgdqdsjzvhhxzmqxpxisbjqcfbpdnyjczvdfxkcdqwqwtmcpxqkxgboegrldcrshmoaqrnizjsnsukrxyjskevaiebmkhlethryuxhjzgjalbphfthrzsvqlqzaahzekrnwflzaxjglkjuwkfunqbsazwzgcuqvzrgqqrqoriyqrgepefnqqvistejjlaiuoittgwkqubavqddjznretxhxqzhwstbvozyvuygflcpiqgjwvtxuaaofaekmvdzxgmydyxrfizvqhjggzhxriojzxkushjrhbttjzwcbxxtqwwzoyvpyfhzzwrnxokljyzsdowtnekrgwewsspdwvsmyxxcergxziydtjyeiabowbqjrlznxfchilplluoimfgxqlvyccbdqqitpaygtiidqkpwttfetveggylgztprwdmsrrmzmbsihnlivrwhqcbeghbqmxmfmphhzyasleehyvcgvbfawzazycmiqbdoylbkyrnvpzlbrycibkzvrcnoihlonfbikolalcwywmynksigvqexutcueceqcufaqbomgjngknvvxzmvxjevhcrgyzkudtmdxoekmsmqstktxaskjfkvfizjcbmvojvziccdsndczwufptaacxinvbbjirxklcciixolwhpzwxlreytcvhjaincwrmemwocfpmzxkhqyyazhjhmfqajxjmytbpdzozuxhsarwpespsfccncwihaihvabkjmtqumnqsjcdbesblktbgexvhtxrxddesqnsgavkieibzlszjkfhdlfehuoayxiqkkoqrvopcqccaxosrmstqdzvpenaguvblqdqnyarwdoqslrvbusbzeffnoaeosbzwdotnhviocrvwuauzwlqstbrvcycisidlqtonndhpdrajvalfleguxdsesndoqcwfdshtciudyyzxvwovbmxnlupirhyjblvvxixljibisylflupmogienfzzayfiukppkyhnqxqnshzoqafegxqmpmeqobpgtmyecfcajcbngkwrjgxggzxptazvofwehpfxfbxtbavrvainxqdrvrfpoxpmdkbakeirwdwiqeskioixyoepbhxfvuzohwrjxiasuwnjkjlrhcwfenwowfjblugcoyfbyviqteaajpctmqotkqxxsvtvtswttfuqbvdjcydcogqagtazhtlgmfrpsicdefmhtrlnjzzjjorxgmtjzgycjdizrtzxtyfhvpvfvwtqbcphiberqpoaitageckcwzjodxvphkwbxelvkfojkwaxyinjbobsinrtsjymvtqrmmpuocolacujbclodbmceriglhjijfxlfcklyupckthtukpigeckwuhfvnaztefmupqzhflzrsfladadcqbjgtqavbgnxgdgmlgytrhvylnhlrhlswxegfjdxtvaexkiumnpdfcgzpxfylvsgwujnuvowkihlzefgrruzfwkxiskufdhwxxajdcqsrdzxazthksxhhqqyggcthosalkoyktjvznihvyhgtdgoiuiwtemtidalpeeuadvvjjswktjjvffvfvwwezbtnqvlmrihglayfzeaejdgzedxukwbhxakblbmgzglpciccphvhqxiteyaxfouzknyerupiyvufvwyly"); + sb.append( + "lhjkwjxgwepbzzzujiyzsxvzrcvhohxlxuvxsvfrfhoxftsznstombqvzlvoafosfkoooaczpzdubdwwawmcsbfttycwoxenbpesysisqeemzewcsykuqamonkobbvkodvjpibmsjkajskagxndfeomswpfdcowjdhjmyhqxqjfngxttzutnedsermpumgkyuqckxmqsfqkvjzlshvdfnlfmskncnuxwpbpwvgvhspanwqbrxfgdgodpblxxprxwjankhelhwgtsomyupevwosskgjuejktnrezyxwyrjsfhqllxuhrbuzjqmbfrzuucasnqffoaekgnfilrquggrtoffsfqngttepuhmvjgqfzxgxfudinsufzokgvyxouzujqjjmwkhdzgibhgwgnnpapampzjdklpyhbepgbmnlfczncswbiihyebyuxfroalbnrbpenhiarkrkifldbninnaybietymosjyvgvftxmalceqxyfcscgiubtkmbzjymxxdujwepuasthnpkihpdjdnpxmlywwapzikvazuvgqscsfkvjtfulrdliblrbjapjocomdfccyivbjlrzqsodppbzxqlfleepjbbtpdvtvhlgtcvfomzezindcoqqefzixiofhhyxzhzkoczycigqnhfsiuqsdecqgyeatlgqbwhmoalryckmfdmunosclmqjfkjeabcqmbrjkhiltylpqpjdgolihwridqabdwqjjkodzwfbhfsngkjrlrizcckcfupblqcegnvazflennnzxryvqiockxjmktuedlcfmntvaiijvyaghivgdrjhsrzpneqoxuycgwyixuufkfunjptyjrqunydqhpavqcqgmeomcntwwsvmwqujbfcpywmdfuocruvcefcltkylqiyqvfgomwtrkzshlfhiohfcmjmdztsgngdxrjnwadamlcmstpqwwhimoakohanzloqvdvlavlnrqhqfgnxwpttajdyvwwmeioeudvjuynytazhxauydyxfmqtsretnnbfvsqfndilzcqqjaxabbxwbtgigsoezndzffsetvqfgupqpsisholkjwikrycxdmfpxcdkhegeqqquvibtcbzmoqbajtciucmjikyhjainrbkhgtoflyetdzxxctmqpmhrqgbnkgbzrheaurwkzkdftrbltropxavrgfpmcppdpsornpisrvtngnodnnxrepbhlmfhjltwvhwhcrnurofubzeojbbdfqtrgaeocljqeitdqwsnqsbenepnlvptmsdehrgbsfeuxknaiccardtmbriewodhjpljcuwxghscydrurkyhvrjiydvdpmbcpswqskpbboqrcduvhvnnyyiatuyxfhegexegojvydnytyxxikiltmxqoduimtpjrlkbqmiifqlssfqmrqakxmxdinxnnavwecwyttdlcxnyftlklmdqljgjeuetdnmdeiqpznrxamqydvfkaggjtdcjxsukgxlououwzpwahtbzdoqamzueqqnvffnnyjpxzqmkrbwfesadxiavyioxhzgwltbytqacueigbmcjcodnaptsmuffbfifwemdhzshnnlpiwnkanyfjibritvxawyurvfuxyppaqvxdvnfbtiqvijvrhexadckoaxwdkwcyhzorwzzyvsgcgccxwdulerrnbmdwqjyccbquwqstqnqkohfegwmydvesrprgmznfvygfkdwpkdslzpkkjbhdynlodrdcojjttcovfyynrlgcqgyzhcoiievgdhtzvchhdsgmgtkjpihfyslgtonguccnqgudyycxjvubaatuhmejrfppkdeqjveeclntekyepecenbhwibscjtldhqjfopglziixvjlmchynojckymemijltpgqwnrrvuxhqdfqcqxqkmgulxuumtvlqrgkbgtwltmrdyauzxdcvblvjeumqrtvnlgumqmpinnsoxdknmypzzmmdsqzyhsdpjlstippnxmdeuqgeruzeyxmtljggxbkexukafofizknudcnfbqgmjirrczinfiodgmkiatwthoznmbagrchlstjklldtudklijoypyodvpemdrljpnwdpblfezciatjymoscaalonqbgsjtmlcdklxofvvrgdthsqfyedbtvhlbptrdsnctpcgqywqeepanspafbkxkcjeanhnpsfidsnxqlqfihhploiqxavbbkopevxxlighsxvlnbqzhfcwivwqrieawhjuwkjqbbtnnhfsvqhjtfjhzwdmbsirmnxylvtwxoczjiqawejqthoawfabjpbiuhzkozufzzjbifxzzkegugfdzbgvqwcyvgxmvemvgvgyrzzzpmzdpsjulnpmieuyqhtvtdwadighrcoinmimtnmvczcferaxhhwvrywtgucapihwzuufguasfjixlprsrpjxkqeynpmczytaiiocjcfculjniuwlriwclixeyiqxqhobmtljsdgzzaihwtfgsesqnjvwzaoakrqchyqcsnfmamtwdwktcprknqmlblcsaqrpwbdclwksnralvmwintdkenvqvrzffnebuezxzlqngziwwdcwhdqkanguejdgpsfuruxiusrnzsenzwopsdouebricnnlwtjnbkrxpvexhwnjewojkoznzpetkidwnxbluytxnffqnjmwtiekhsuysdnfcuwwicvqpnxgwzirhrhlaqzqpzqntnswrraihnrzenjobjwhcqfqkwwjuaxiypaikdggxyqsisgggpcekczsmvgngibbbqqbhuruitqvwxhpqdkzgvlsxexhkzidswdddyuwgnxrfkeaijkjlpwrkpibuvsfhmmkypyvrenhfzqnwybjpvphbarolxeuzidgrlyicpmydccgswtztgqqgrrzpvgmqsfsndcfvymolzhgdyeljlujjypszppxwvpppbffsgixcvdpagxvcdnfmscsscnqmxruulpnaktnxfhdehdpurbooqukqnnwlwapuetslebxlewmcfqahrznysyzqvrxxgpywqfkqdlietuelmimrknknwkslrcrwjcbexgvckfdcnfbnifhspwqjhvsbxatrdwlfjlgqwefxydpkggdyxpdebesczpecjvytivrvkzpnwxwsusawfnyrmfdvqmkzgfhszcdiyzzubvfoickmnafgcwehcoijvrscpmgbjfyrwyzcrkdcdjlzkuivvohupjqjgouvlwdkrcwcspnmnlrsqdlomdcdtnshfwiimfkzsvzmshilfajwswyzyxxltwjsnogdjgdyfqkefxyvtacuvqsczykqjvjpnzdfvfgojzvqcenjefgubaqbgcwocafgtrmhzvmhfnzcabwieogqvaksbxjruvrphvpjnytpgqsnuijpovkbnilfngcrignrpmulngqmpjzeuinjjqwpbxxeradpglwpbhriefcpamppnfndgoeylhmeoqweowldfryzngxoeiinlyfwemhvowfhxvxuloqsdlovugkxzohjtxicpckuqnbveodrmlpbreeowregusjcrohqxsamnnziloydynjvwlwncftljgvvfvrbatwshbwdvnutlxgiifmosbvytknobabglaztkzdzifotnjcrjxcvanlzypkgmcsvpofbzqlkzruqdbicgoiycychvdqbebkkixdwtqajmlifrjvytdiozjyavuvczalnbxpmsnnyfkhwqjcydqoztdnrswwawaxvuzdixyzjkimxpgqtdlxnwebrryqqngkjsouaitoaznbowbawghevtwtxtkafbwvgryeqrrmjjxsymiblbhzxozkkplxilcqzaehaidjlpvbjpbltokfzwdsgnpqjwvygcessxhngxvwjxwhtiurdgaffiybvyqaprtfzvvzwlndrvszxiofpqnsnynkfcllflkizxdilpccrfcmezeklpylbqiownmtdzclfexnrnsyqrerfiwqxfubaoruhutrmptovauckfbndsbxbbqtetzerukzloqgjtbyiidoghpkvvqtwmkwyvyakuwaigiyriaigcfftlpjeuumehswmroxnvgvitlnfpktyiudcslcftypqfcsquapfmvwcasdcjkhikzxbzxszncvqyvycqwuhyiokvtnwlfxywipndvsgdgamhsebuavzrmejhmojdofkldlmuihejjigbzmwkqcnxwknmvhwjpvhokyluixhiidolhzhwgmpdmhvjtwjvmtcqszfrenduasczwdnrrmmstyzqncljzulfsviibkhuuyknrfjiedcapkekbgtboigsbkjzblosrzdfkeslfogchgkqsfzdxwtubhjhvlgkvexatdtbxfpgcclcwcqhbsoclgowpguolmpakpbvqtdcajnuliwsouysdetquhkkkxkkvguenhqipsexxrzsobbslvoveweuhrjrbhfnvjbvoamlmkzynmflwkkaykxnlcinmguaxmhuiveowcmwazjyzailksseeqrmmrrkpuqszuicfnnajyvlhiuxkshlgzxluqccsmmqfdztygnvjfwwqmfsddxsehqlwcapwvejrcafrebmvognokzyvlfuskhhnavillfluqvhtqrefnuwugpbnmbbcuvssylozlrmcnvofdsbpmszrrneimhfwckkbxyanovcaiyxfkfalkjagkqcpjabwlykugurupikdzzcxqsmknskxvjebczfkzrplrlugjosufkotvmcmbnvpmrmimscxpcgvebhqrxtflcfkrmjkkyybzlzjpanqphmfbkkwktkbywkmrikehrfybbmbxgyvqplyuonrlrxqrjnipgrlzuvbwqwkidsiqsikxacjftfrnrvfxrpericlyzdpilzxntgcezzcrrmtwgvlebjlloiancfflmhlejbnmddseucrpxsdalwtvnkbhondiyriopyhslrzitajzxzahgvnsxpwxkpbkzwfldmswbfvcubmkhfpldxchbjvmuczstycpwtrazrhhipjrcmohwjnkwgvhpgtnyuzgzpgalvrgigxunkjlwktxqpdqntfbcllvvnekuiqodcvlktejhtyclvvjwsmvpculjrulctknycojqboikhydqzvvdmybakfypjahzckyedksujvadsfcbtfwzmkoblxnpvbmfqbwlbnymbxrqzytlpdaemkjmvzmlstknutzphylzjdenwywiethnkgqorcyoishepbhmwpqhomkrvqefmwubydcopiggehmgefewnlthqrcwpwgpqasndnbfyprxzbbiwheuyrychkwpstixvoxpirelapjulysbtzxufaygnzoquklavjpwllghsdxqyhvkhubhordjjiknavpctnkrvybdowazfgkcyzwxqtghxbzbiwzgreojnsgfokjidnstneemiexbfmtidwnpxkzcatqmmwojoqcsqhhwdphgfualblpimypffjxmfpbdqedynrjkkscrhqbjnigivhjgxzsxtwtcqlkuqddtyovurkzbgddgjqlsqgqjdupqonodlclhaurwdlslyemfpnsbmavgevydgybnkupganmkhjsrkivpxefxurhzunsfaehnvpglxaigeboxmmqhougmxzhfgwiapwnzzxdihhbydanejcrjecpovecbjivntbktgkmxejvoxcvbfmaclidrmifhiwipnlsvxuokpjcereobezshkxuuyklukmjdlilxdrdqpxsncqekqpfnqluslvbenhllxischpnxrirgnpqpdkhbpkevfaqxfifjndtnlvlgydqakdhgpuztptbvvvnmiasgfssjsazrylbobjznkowzdlsoxfgaproyjujfqxbeszpklofxqrcngaqcbnadldffoolvfvirhyacevdfiajamscruaemorozzsgpkdmqmkttasdtpjfnutnhzzrpwgyvyfmuwzpgfavkpzdntseocosnirnrcphwtoduhpamgdykcklfaywkolajhrwfggqomzxfcaextshrvvtczprtshsmahfxcozwowtrqzllgcbefovmwxfyztwjyvbnuhmmzaxuxpxzhxpwwmymuhxoawhaduceeqkhuyumbxfxbimqjmgpibyhusbqsilrokcztffprmjrlrwypbpuawelvkfafitfyjiohkfwsxuwalvfnmhtittldjsvmxqlzjozxmlemqwxcupkgznmhkdavxtaxrklxgdwwkermcyalpytxdvsbtlfopxlvekqquzzmqygrksfhzwvtijjkkcrrghdyzjgtdgdyumqzrqxvtfezoleyugjpkqylxdidybazsmzucpptdigmlzhdygecbuheakgcgstxvlofozwgtqbpvxcbdvfcolwjvzrerhcmtfsfsniuutiambtaphyodqhlsmdwhfovflcbiymdseyzkcvgmqdoohvkqaiachrvgkimirkyuyqdqmfkbkrgihabkxqslfpdopjptwdiikdxguuzprlguvwakdgzyqmbujmeorqbasqjwgbzhmbxplgisxkbyrvpkfvlnnxjofdmsfrmzcvhrdomyzhacfagwpfqfwuhrshevszhxpxvjhyepokfbtodgqdluasppaxkiletsfenxypalliwnvjjbvhggosgoxlutkqnlivmcojjvzqcxqfrnaoabcyxsotkciwgdqpzcthcsylqpbckmjhuppojhnqivpaehqgzwuyyaeycycanqvfuvlyjckqcutozldqquyscozsdexregzvkzppphdnswzgjhymwkblifuigaoocsqnbhbdftjflilxamkqtsalsrkgxjgrnvrhrjcezmgycezgcmfjhcykytpbvjnbwrtgvoagigszltvvqspskqczvyefhdtrppekuafjofdxvvlnpesvsnrmzyqzoxabmefpydcyblgmtcngooegdzsvaobosyzcbycbdihkoehtbpcghcwzxwhwjcsgalkrgggqjoiolejlbirpegxnjtusdvkdqtslmvreiivkmtpyepwiisambhmmfbqgexasmqsldrtiwwrvgotrwhrsmjysbemloufhfzvbcgxgsvoatukkotrgfhbnaknlvyfthmabsypfaghrqpxhmcsarnozrrbkcamwjanfanvrsbuhfpdcdlrlimczvyxubmwxrpoukrkeootzpkpttjdxfozjlodeplgzvscvaqzclpxturigbatbhauweyejfyjyrhnhckcahagsqbemlkhhgdmuxalzvfpinuyvsriydsrdymfamxfeuvvpddvmnzzfbzsgxdgrrgdmdhsdhggfglwhjmylpocojlpkjtugncqvychamopxaqfwgdtvzcgvbsrmueuuljjfdtjiqhcglaeydpzhoezsgxvascgwpwjiuatpgwppqheevyxewdcsdiokhrxcyyztnkpyvespitdsurttpaepjwkqoxtntfurnhxwuyejkwwdsiaemsewdjtzocasiwvrousecqathqkconkjnfpjwwolfzqanthgqgxssvrienlrxmksglcdoyrnxjdzgdlryncfpaupbltsvhsdytflvpsttnibtgjebwecoknforcimqxtosoxfzbcmomsaaziascsqfjuunfmoezqggkxffabqsyboqsheeldrsnrjfyjpxhfmlcdeohlyumztoiubuneoboyaherlwfflpdfwgghnhxrwkzraqfqheoizlmdeunmxhpvtgkzvxnwlgiapwyknjomvypwtbkwqavudgrmgybbjatogfceelfxkokjncapwhovmpgzmwucmpcnsslcnsljnahgypbljnsnhxudcrtxuwhifipwuvknrauqvltbhrrwydkfqyzhxhmotgulstfrpcwseyzxurhxuxkurtiwlsebolsgigndmylqdkodalfbyupxqbmljfsltchcqxvlvjtfjqfzibqqsycovwllcwwrhjxyjbzynqipjbrzcisbonkmkwqktyroybgbcwwxbwetloomumcwrnktdfyuptxkrrplqowmzlwupduvxrxpvhhwojvnmcvnjawtcnrnuhyibgvezzzakkzypwclbfioeshcacsvltdsogtuqtbrcechxojsjvomqtxjbiqpkyuewdhzqhokpmfmhwifwrdkgwdmtooasjpirmmhhulyucckndesmchknvxjiwchkaclpkynyruzzbvvbgdcxekxjxzdrrsdiwyetuswjeozskhhdjqrgihkriayjcrbunsdkjeowhqyttingqdyemyzuezqtfrbliczshdxoixfalnpootvelxbqtmvjxhzkleywrmhstqfjkdrjqjypxyyrfrbtmxixhbxzquohfkfojnghfvkzmznvqziufbfvpmoadygknjujwgcutqakxzyinazfbfktffxalalsjmbfpzocltqfpzosweaybhjlpszonfyevcrznnvrpfyiacvrqmmiuekemwzgnluvrxlejhrqbnehhopwjzxwntogfghrbtfhjmtgsdlmyhvbsruqyphrpoaumnbkfopncdlybalxekxrrvlpetllzgqrrspepaicbsggalwtfxbqhnwqlpxaobehvlbbkjhbpawebrmxgtwnybufbbzasklcxhuvpjvnormioixbmlfovandgbtonyjwijylkhtplxxhfpfvlhmoxwitfndkesgxvuihphefaefyucdgyapipztsqfwsxbjpallygskvjxumvirrhptlbleocnfyqyickmfddnpvrijojmbfqfgcfaulzcujwgbwxclcgaohcgktlreywkamjvhesdzkpoukpakywkklythtsndykxmjquzbuxyvmtfnukkazwsgpcuuyscahuwkanlktpqfxtpkpqldjvaxablvqwgpavrppiksmzinvbosbiqdojaphpeaxhjouuhbdbxwafaddlaxellsdpekwqujehdeakysnieharnnmeykxgdzjwiikwrdnrwqfcacxaxkpnnffoposdlcyyylrouedyuxkhpuvqlofbkhwnlbntzodcaimyzydsptmfnefcyfgjirbcqlmwiudqokupyzfnhidpwznnivbakcwzkixkahpbelrsxufrtdqneocvqktjyzfyvyatsftqljlxgkxazcascubqinurdpahwkddmxsuxpabtuwlsxcggpyrduhqroovazpezdxcjcxdjtmndgjjpydenbrlpdiucelkhobfrnqpmluuqtphupyootupnmeazoieucgiwodsdotrtiiaknxndbquahulxevibxzxdizfrnvffmhlifsutkmkournnufctcfbjymomneixtoubeewqzeavwvqqojekxdmxngqvhzxqquktckodqobhkqtrtfdqzycjborpnxlwdbqkysslrsmllcupeoezjrvfbrptiwzwnsqxyvlrlofxjkormghdrvbimtexhouvfngspuhhfwdjpyyoulxgkfkbsqvesfavpqxsohhklhwabkqjzjuekbdmxgkedlotspbbblwnsblvovfoapfcvwpgeuiapvxpfvfnlldtrudbaudissowphetexqtpkixcwthycsarcsgepbqhlxspfyfbbqbhponpbhvuqxuxpbydnavjijefccohtkxlxogstwyjfbhsrunmbaliehwpfulxqlbjavrkhqdduqfdyivqwwsudduoyrbuejrmkmmhueoctwicuyxwvwqxnseycofvgosdwuvgtaspjpjgqcnnkfoinwtwjahfviwzbhvegnwbhjbnwpdbjloinnphjgnhcdjsskdljjmxdtaykydbjelhesaleduzpgwkqvipulacmdesbmydoegofittygghoprddsyfnlwnqfzcxxgfgfvrappbjjhqzgpubouicquazvsmxnhtfpjdouxpzjoppsviuwlammetwmupxnhbmhikljcfdqgyjrpofzyocpfjveulstlfsivtreogxjlnesuxrmbhvphpzngarwrwzvhtbbhvxmecuquymqtcxxetexdqxbnrxjhxqvpdkmtkpzluejkstpeukdxmucsysfuevelwbuprflfmtsiilojhubqffzinvxecxxivnsrzicdbtnllklrkhkwcyaxtxxltbyruaejadwvaizrzkbgmxutvcwwkqlekkyiuatsqflfptlqklmsrqfesyfgpjrvwbcculljmkrwtkfipwnvuygibtlwefgwkrabyvtapbaskmrpwxhdrdntxsahqmgztehcktyckoxsqhxywbxoxdbybpaabatnfiyemkxmebudizehxwazfcjrynocljnaqflpipvfbjebyxnxbdjnygbtfvkoklducnhzupdniofsgpauhxyowcoibforqquunftdpkhdytrzwpaoirarrrwjmanawwkbkwjdickdrsqrjnstyrneykcwotzadcctsuoyvfanfaoddqbffncqbcbghovcggpjwquvqzcpgbqycqddvflrfqtmervvyfuwlkqdoqeljhvnvxgjdyabtamfsaxelowkjfyeuebmxpcrrswyobxrsrclwuuauaxfsszdpugtjnsomtdcunngpqamlxfldwyqvdznrfvjdjruxgwqztpytzogahzjkzmlgqjcvfccqyfczbravbbzjvapsqinmtfoghaekrffvxslwmthebnphnosoiptqrvlzmfikjjofhrmdystqudmrwtruretywymoxpwwdcfcnxrpcqzyiatjokpkhltvxscgpxfjbtuaapvrjdbzabuzozugpjyxylbqbfdxwkekjtnqgdlzppwuhkatieqvoddtxffrzrwtxksbuuerlscvdlptewzfvhvrqqhljzamruxfgmdtkjqghkznjnegfcpesonarqajyjyleewhxrnvownspxovwuiscgtzziihzawuyuwshgcgcnuobungrzoqzfugnkexufcwdxsebocfxgxvpwwgtqjzpteqovgnrtrdserjddfqqfssmsqioiheavotguxegodaqwvwhtodzqcpmzlurwedsxothwmummrkszpyohminsudcebsvfudjaumrhtxsmttthslvxgjycayfwrypwailzqiuahjpmysiskhrjromzpowjyjimrszlsbqztdgmdnsrpmchhxiuzzwhdztdywictdqofxeszlggqoywncratnhlnugybkqamrxnwzvsabyhjqcknwgzocsjwnnpywmcwxieezabdwwycbnnxxdsdqgujjrfwwgasirtdwxmfefbltdkupzedqbwttoisozfpjzumdnkhcwslksdkngutrjuyfnvqhpwdhdgxrjvsridmjedfqxxrfvfployeelzupekcergiczsmmugdxamziyndkgbvfbhldxfzlrpkenisbsvsoldblspcljjqytazosdkntyngnzaidufaziimacpaznzxivllvevrwmrkcizfplfhyvmcclzsvmyooxfhwovbcyuyvxfkzwvqwnenshkidzlkguahdgtlrkizaqfonwlmaitqknjygkhqdqmymrzducjaubgkgfulrucvnsauhvavqxrcngcxchywdwikvsesuwfsrqoukrydzgaejqiaywlweykoxdltaozsyjhzqcizcyajmtuzsalcmvjuuwypfjyljqymzrwvuvmwofkuftobivajtudylrzbsrlgaxtwfeokrymiuamltvwhnmqcnbejhgkzzvuwwkefrhxvfoszelqubfxkyqkxmiwcqzzkgdkxppisyxdvfzfgcfhjgbqfzxvozkxrfaervwwdzbxbuzgxdpmygjkgihxrmyrjhwvautymnwafpucnffehvvctohkbzwfseutlrxtjaalstfknffgfdxdhcmhxxvhvuyxmpzmptdhgaefhrokxpaeolligambjkpprgunmrulxpbwfpjznpovymgkqnmzieydfjtkdhnmmcfnayiffjnnnvahetnixhjdffvvpgrqzkcmwbbgwsjgyjkcrfmzpllxfsurrqnralhrsmqotvprxazqlqpjlnysklosbskkfjutoxmqrnqygsejlbdztuapkjznkfkdsmmuupchfgvsxizhfckbqvevkyxdywsyfkmcphpiljaqdrdajkkxyzxwdcyjcyypgyujxusgdcxyscidixrlnlwzkxphbkoitvgcaguiifhhwzqmloynlxkrwhfdsqbunmjuvfwokmebfrcrcnmvqsqbrjxsgqovhylaukcelkangepxjjlgzzwgfzuhjqsqqlcaebvnsvgisjsoarnzlfkfziuqirfboimppqddljtdgexslddglcumthbvpbioobtkdqwfdrqvrcuiczdbwlngzfiaiinzttsmzleewjofjzapglkvwvzdwpbdzbejgurdnlhpvonlemnrksdqkxayizwrbbcuoihyoknwaddmaxdvptpkpdnplxrkkmfrsbisodbshwaxtuqirqlqxypcycjkmexhjeqfmrgtrjszsmzkiwdbdggrfftxeqnwcgwscctwzcrxsfafpckelxkslvrrmpiitiqbqfvchnfoxmjxyolmmnpbmzzpfkowesizvaumxqsdewlcktbxmjhupbozblwbewmjhwwzkzzaulhfzfthpdfgmyqrkuayzoivhaxuqrmjhcxhjvgmvpvhhoraflsgzbnwyjsqjrwuoaostrmhbgwwaihuzdlxknfxcvpzyidhrqypkmldoxahyqphrkxtodybtfpbsorxagqsplbnvnmzpkxwvbikgzqesenuwucbmzqeuegncbqncuotzpsnpnftqzgekupgfrddkrttnsyrtwvqmxneliqulmdznthykwoybeileaayoejspouodqitnncylkdzckuszalumgzgeltaukbcrxquvjffnazcatztyoiogaxmfikjosbhrbozfmhqgokmfhupzsyittbzzjwkkyqdxqlbrsniabxsxzcofyzhclpaqpbcgqxfnnvgmetetqpukyfbprozyvvlqbcxwrxzwajaargyxkwbjhrrtvmwvhomizkhdexvlhxnfuycbsntjriqyugyzjtcajomsulwbocgojzrlfivmcadqqneqkllwtjgeoxqlfmcgrutsuthtmapcrrzcftjsklvhxwcheuvchjbwjiarsbhkvdgxjrhdznhklwdulagbgmqobtlugwpxwgupbnmmsabmqoowgbaesscbxfuvkzwfzfqqabnoufkmilkaktvfdjhzqqxyenohefhysduekvckhxutzadhyyuzblgjairzgkgnhszgtjtfuatjxiwwdjxhdpnrpbxarkfdlotwhojoopwdvxezirpiahsqvzrunabxcofxszjzwojxuopzbgstludxcleaqgixifkmzyzyvxziopbluielleibaratlqjhtplxlteabntkscgcxjdexyibawjmhmlzvygxeyvgazvfpmcuvkxgxismagmtbyiunsmpiukfdhlssgtyywygceubwjmeyipomhlaosooojdflwlolocetuyckxgfrwqwywzyxzewunfzolijkkwrxxndscfgujozhmlsuteyugjwmhbxuamlmfdnjetuenhiuygethmzsrxhnyuqkqipzviejupvvxerldbulooljlodgvrhtuwpnhfhweomyjobhxxeqtcojgzrssuiqvzopmwjceupmnaveniutgsmisbumxpabzbhommiggcczzuheskummcsmlryaavnxyudqmglkhfnzogcycfepyizedfulpsxisnxtvomixthsvrapjccqrqewkeldfbsfpzmfjjilfijwoammxuennurxnqoufdqdnlcjqjbijjmcmjzwviqvcxznpldsgcmsxhdeqsgnhfsppfzypyoaexzcnqgfzyekydyrqirbadkdmanerwbozuozrisalksikhyymgjkyfbooamnmhbfkmuukamheqvumafiyddyazpzxuqdnszilubusvqivzaswxmsvxsfbpvezgtpvgikxhxqyoztanlwskaaqdkvsljzmnmlhblofxqqxbmtnjztautgdlefbwcotmrqejofrfnsoujybwbmhabqonaqiypczzooujptkyrubkbfyjajobnfxfkgenezqyrkhaszbnbucdunuiqyrehbfhztszliuaemncflbmwioiftbuaprywrasawzgvwnbzecfyqoarbmcuhequsasglmuoxfaatrfxvlqtmheyikjqigvwetmmvnfxnjjrlmodztbixjfdavenliirpdyyozmoofwgfivtxatksbontbrjrkxphdrdkcfbjstrtwbjyuyqdtriyjivrbiwtoixuayczmkruwriwmxakzmtihgssibwrjsnicdyzotpihvqdeymrprxtakkstdmxrambalzwenwvzprgrpqkwpmvhuzamxcegjkdfwrwrwefcisqjyjjrzoqwtmbpwoeolxoxfjsrqqhpuayqxmdkmofbrgyhxnzwnvglyspblreuebqnxocemzxingcaskrjifavptnglqobjghufsayfncidzyhgckeychgpqswptdjengnnmpdmpfjjpgbejexxjilgspwysjdlybqsortsjdliruzhswfqymnphxiiizdtyjquljvusveuxbjjsdirjxqxwcymuwwcvdbzhhrdhxmdkorsksyhrupjkpbeiumsoffzggnoiwhhqjpqlqrnocsddcxxyxsbhdcoyfwcfhvalzihmokbplgibdgpnrspgokbgecwkpklnhguoyqnlhmtmnkasduwbdcyzuaogxhujkryixoxpwspsflpnxftexxlvlepbuxivhawjwyqzbivfcyzmxngttrdkztevugezcamokzrvdqqglqtdjappomfkqglujnntqnuznncquqqvotxewonraadrpdziingjkdfibhcgbahtaeoujuruduojpczloynvuiselsosvjrxtgkkcosuvgydrkbhsaxfwytbwzncszucxcgkykaqlsiaozfefxnastrmijoekptkiakoffbbuzlqxjsxnrgfrunysmyxnmwyqnjcgoeohctzdtgnhpzaahabzgasjsqwmaoqtpcujjitemiqwhsmfjsltysdnkwbtfucrmuukcndyiwurlkunfsgznoonawehcljstthlptnmxcugyrnaguqdsgzgwzjnvzbwkzhrmcfsdohnejtysgnqztfstgrbouisdahdwluledjeedcdazdjhfgyeqqxkvcbdositfrmgsssicffxpqpybmggburrraaqwynmmibxqmaredvjzdbgmwbkcnurfdoxlhaqnmuliaavbgjmxgagtitzzvtyndyubdrnaydiadcbhckgeqsanzsrnmuywyzwbxfggkxdmcezfeyuavqjckcijaviwdffdczoolovhigqcssthmnoemtsjytoggxzcaknkjxcgujaylyxuqodgaspcscrqmwpivdpgtzrwzfotmvpxreebyeckruvtyttfvwebpsppuzajatmblxqtfqpxfymywcikcyryzuwwpurftcqvnjoccexrfiznzlqcexxyrtzhkvlczkhajhgjhpbanosjxxjzixhtkfvyeqoidjpdmttmbtaermlfgczvrtfagylorkqqyjzwnbwydcnitdaanqpvjmzogxxswmkfdhsbaxpqrcnrwaeumgajcxnqbxymzhbgidcsauqhhmnekjxpdjischohpussdpvlovjnzskhtdoxukdwemratkgjraofoqnlngvnsbhxjdnuwenzyoiqttaboldrvwidwaaethtgfxbnwjkdoayvhvphzkhjfpbdlxckydebkfpqahiwcdqvzpukhkdqwxbnixgkevxmgorvdlaibwxuytnroqirdgfejorklerhqalaoddytmfkvzgbmacymashhgzvxreolgwbwruccftypfgflkjhhdgairawdehfynzbhjkaksevvnxondacljjiyeyysbpoeauwhhagmsidaqpqjemhjhpxyxztmlqqjbgeeeulynnybsfsnpvxshrrcnwklrlkwcgdolfksggbcklwhrdincowjotgdcqcjzrzfnohmhmgptesebzodagimtfttbpoydprhtlxcsqozzgyzthgfluayehockvyumjlwoeygqataogywabljgemepqvnvvldrsqhfcwdnzeispkzmfvozdwvoggfhkibltwcclcgewxhjprorwiaweecldetgwiiqskrfsdafvmghbubgjajshgknhwlbrwnrudmugrnuzytojpmxlyfmvllflmdistaedojaokfxnqzsjmqvijpnhccrqbklpvdcexezaifqnqolofsubpovavibvegzmnwfkyirxrnglplqehhlcmqupktprohadqnokscfjehqegpcunpuyazfxpvbhogbbktpjogvsvvhylbytihxwxmttausjnmbyqxuivyucsbuxwgjspnnfzoziamsdxjayqvxrmiuxqfwonlcqtngbqdjpiwulrwagspltxkztcylwlwvhwblcxtprtntzzfhylczgyvcsmjxxajcbzkdgynmjiydgappycrsxsqhncozltiskhkyhjcxekwybhxfxtcpeggbrqeggjdoptnvodjugqmdmwlxhzuadinawdlqiwrwymvyepouyjoickdtfsfjecyixaahlxqfbaoclhnjgnervfzhfnuekehyybcmqtgiweriznbijqcxtpdotfxuiunhspgbkoeoebmyjmyhqnpthdcjzeycwnoborhqzpdvdwznaifuvjlmrlktqsrielqdwumdrhmcgqxolhzavhbwwimhhkfkgnyqdjcvuireroqiizlgsjxqzhlbztttqaiitlxiwmswqtqdbpsohscdahuebqadjlvufbbugukpadyfdvlsxiwlfjfkuflrghiafpmdjiqdbaytkedmuumkeffknlfngqzgdzauwmiliiapcjvpbkxmvuupwerexxkjpedossdpmpexhrtaajlkxxpjvyfgilymrqpivdatlfficdszgkvgbgbivfnulrlwzqozleynrtssovabyoixznecwbxfvkjnsrlozyiqygxmgnofauoapludbpnkcbqeaegslkjgjpzbvllubbpokratcglygvooletaaqtloetmmuxaulfmzqausqnfadhgdvpsvklfsrjljifrnjnaldqmkcvkdxidulpuzqynyuiviprpjsjejpcodctfxjqzwgxuadlzoddtkovhxgffawslnolopckvshjabosyazxjckzzdsfyvzuaypytlkkwyvocasdqumuywxqguzlpkfmzdhznzuowxxqwpfqzbodiqeqhaetmjwcwtjtacuwnahtlgaetmooxflkvkyytaqffnwrrlentobnobemzvmjimqnxozrdsnplkmkzudshnjvpikntjyyamqzvyrmsbyfilaprtxwkhezohsadlalburxitctadgmdgiqdbpyeylzhcekyrqzsttjgrkbbrviedjhdpcqimqnjceukfrzpuheiehltzuqnqqeacvubfsncwjjaxtfhgofosurmlnyxbghzmtasrnuwahczojmpfdnvghqbzlgygumeumrswqaccxkujlkjcvahvylyqyrykydeyqvgfbxffjqdqxghppktkhrtntorprzevebamusnyssglcvvomguvmxwnustdlssfcnvogvetfgadtvoczldnacwsumijrraewzwghbjexsrqiqtjrgwkhropdrrkknqdbiifipacwsbzrmggxymixofjuaklynfglbdxdxhzuuguhoakyqgexjjdfghmprruxsybiinsegfwcgnmjnhkzujynbkarzqxzdpavhgrhaibrgmyqimimdfxsrzctemzqenvkzigupgfpnrpgslkbnxqzsnotunkztyqclxvmctvqurfslqrngnkagtvrrlmqeovxeqexlndfevnyvrfqnpbkiksksdtvzeddphmhnikmfscvsyggrwlptuqqobhpxpzjvqyekaklqukhllvzzwgszxznlffcghnvseelmdfvbvjgihjqgvykbxxvzgbbdhcwfxxpvqbrsjkxckfdfzhkkrxjjshtozfxxsefagfzjyofcsqoufwknjojqgruathyimxjuarruzslxfghzrnghycdltlvjyhwnpiqlnrpgrpelnbwycjapfpdpheisllfchxqjipdjmieznwlzmbbcnfxdtkxmofuavuouejombfoxbalvzqowterbmsznajtkjpblnsvclbwrplbylxhcttjgopqipqysmyholeqcizyajhioccagtnmfgkidypjgsnfnepbvmnbpdgrlkwbshmdcyeyliheqzpyugcoqwfwovubuergcnmvxgsenfaalkuqjanlsthmrzeirorqljxpkvrqxqqwldchavosbxfapgycvopmpxffabqmgvknveigfqcqyykhkgtbakrodpqtbznvzadwbqxbjexpyesvtusasdkfeuiaqomdtwqizwvtdohgvkhgkyfokqpmnqdjbhfnamyjobbmyqiwerubzkzogmtosscvogkalxraiyawsgnqvwayfqmlqhnlaivdcnlfcfnnqubghtkbvbvpdlgcyucrkddkiqthqqwquhbfdgjsxaknqdqfircpmrhlnsttfagjzdkasosbcavgyxrfnvoprsuqjunytopswbdqlwuwubnflywrwsujqelzebaaubkgsxsogcimxunkdtkctdakowfedzixvwulqrplelrsteecmenanruhuixlyfqfeyecgphevacutunkclicqtemgrfwbbyzumsxiulcykfyzscvwwiegyzsoxfpjwxyeqtosxuweubplzbnedlpvzpadettaehbaowuativhvtxiiyfglckvcysrnnrkykutznpfqbgyrhehuxcmlbainvnsjooyczaqybbdnxkzeavlxromnqokclyacziprvdovyqimphrmbwkrvrxmfvdwxsqoutedprlecdoyxvaptkzawjcdkggewifmjiuvxfckhizjztwctdpqcbqwchdbdttyvxjmeyddvrspkvojbvmphkwwlfyoosjzitnctkiiozrioydkwfmxsuokcsbaqagcczwsuxcprxbkxngcbfzfyyprkmwawyjeaghjehonvgfdfcgyeztxjhfjopzxnmpismiemdhcjvaxqddegwieshepchgsvglxmqapijjbvddpvylfhdvafiuewfdovlshuveufehrgmwbcutahninkbwhrrokegyrbptiazzskmvcohiyebmkxlodhcxweajdlotxntwwkwrglltecnmefvhjydjixiyyststfwenhnedgofmoowvvyhclgfbxdlghygbcvsiothhzlobplxmrdgcycxaqntrdirrzbpkqwtasbdllggmlbrisuzcaniutguixuqdhhxzwuptfrenjkhfhlexxkylukiyvzwrfxesbcusexjncezeuytbagazpsxkiiahcbnursdtlkuulgqzsmcrkrpqnmfmwyknifdpkwyrestayafkvcewrnpqvnoaiwjgbyoexynzloysjcjpiosjvgiqnimgrljlzdgybybsuhlekfhzhoiaxqbyechwchfncppjqlemcncoktidpksbculupveehkozahknxbeyitthcktrqkjclkptqujcdrmiquitbymngzgvwgrcqjfgqgmzlrqlsapjnukdufwbwynjvywjxnjueydhdpuzzefbnvbszrtnkgvjomrwlvkvchczikymkweoahvsglgfwupxxlsncdoflvcazprptnfxvugpnzsgrlhaxyypmaxuyhwjpgsplkwzkwogqqasykhwhweoetkmmbviguzjjxgunnxtsliygdjyivjrgyfdupwvuliswutzsdaslzkbozujfzmenekqozfaeeblrryooaoodytyvvbkljnxmgtoackryjjgshhbjvrotsywjeczndsptlisbvaiswswmcljwxxqpzuedmlqhbkujyflgqvanhfrikdnxxfqjzfudyyunwatzedpgozocgicdjnptqanmgdtrruzndoyocfnhpqsbxcbzmltnoxryyeifqgwlgddgzyuxnhbvgyglpyrzxewthaxbxlfgofqxjyxjyeuwttflzkdqvzlfkjnpklhfnvbarwcrfcxlnveehfpwnolrthrnyezcjiatcgphijwkfoppjlwrabkapjilfwqdzsybaywlvkltamjhkhifpwyxqcryxhitxkcziowdpnemiwntoqdgiqibvryreievcjiwcchgaihvzvrozxpmsvldvayryuuglzvbvnmccwxzvothknevofioonhlkgatmcvevlegerlnlmcxkvsgubxywnwnrrfjpcersogfhemjdlhvjwlrjymdpwwehzplauelnbinemxdojriaafunvdcjffokvvjeglkpvsryemufthmqqrpphjqyvtjqmuojxocuzaodgkttnngeppsxuvohbysyctnfaivzxmclagipihigxrbkuxurjtudwibuuaeybwmopejkmgrfwgyadmnpzstlhyqlrkgbfrnbtjdreqeojlcwqcfbaoqxrnbwuhuwbxjkhkfptpitqebgoqbxqipkkeoanugkikwltlzstngakykbsixopumboiudmfpjdjzixyjchqldbpxscdsshbyvasfuqaapmmjdzumnvjglalxvtpxxwdqkhbgndqumudhqjbntbmmunsjeovuomugcmtejldumnbevbdwofetnqcahfhvmzalxgtkvjyyrynwijsbvzcibytuuolqgcqbdmqfdzubscdbojbbvdbctsubonhtajwmphwngmtotjhgqjhbxdecgllxeuqoymzdbgfwgusgimtjjelyygwbrkeidaimyvmsnvuokapfbweuvonixpkamveublzyxsdpikjiipwurvbaiaycfbmtarxwkrngecaomrbtzcevdrnwfmhxgjqnbwbzdhmndbjvepmbhqmanfgehbxmfgakjyhczgcxpnckuaepbhkmkesmhiurqahjovmxjlbebdmxwdlvalfheoswburwvglbyufelblrmasxhlwokoijizmyxrfezavqvsrkawryamkhgjplsbwqgesvjjotrsmwozvyykokqapwogwqxjpnssvqbqrdgjujgiahoatvtovwpauzkfwwrefmolaqavvoeuuzragfajawibtcbjvekwpcpufwpbdmahxpkblxrhkcbnkomnxuipvjvqqcqwkdoseonszfmtxyqenryedihuksfvowdxaekcohzslvjnzzqzcadfpxhknzggrjdgtyojlpipxphqshxfvvfabfkedjaqqkcsqmbfsqakiglllabjszpszoiprnyvqlhchuqmclfptifhiekwtppifyncwhpvymtvsucnrwyjxlwsyvotkhbqprsfsxjnlfpgmnldpmqcwdruzozzpclbhnynoonfoediijrjelcksrnyeufdrtiwvsmpwdwxtcbdvogyxtemzvzxnyvmggzvcywbezvqtfpujvspgttngoqpbnttcfmiohphhstylysgjeazzzrmribamsaadkabdqkewxaehdzqvpmwxoyluwhprceiqspkylaijdaefsasakeopyahhlkdslywsnrgnrgfllnhppebpznqddougbjhmxqlfnvkbxlwzsjtaxspodstcnxgummpfxksmdfzpfbxhudilnkfddrbsfdchexvlfmffyqhwuxrfmxubxoeiisfmestikplverkunosfvvqnwmcxazxuuxihenlkmaiuwbzogpzpubmidphpymkkfykdxshekitecnqpteugthjcctudahxmnhlqjytbumhmxlbtoeoqqlydcgdukrvalaknzqixzlnsudbsnhxvanxlrjredgfgvncycgvdfnfidphpaxddrfhxdphghnimoboespftaiqopfrncwvkawavzpttnejjbtooswkufopxejvaxkzflysijrrqumtnegaefdlbsbyjuuyeqihhprlmtdunpuzranntfedhbxivuuewrmjxilekrkgbbvjojsaezutwtmhbyznhdzosfcydsqwszugkbkkzrklmuxwqnsvfmgbcurnhoeemggmpwrkgfzkmzcvtjsvpqxqowwecycniotxruoqmxadliujlpktuhdvhptmvhdtsadcsemsvtbjkwihcnyyhihfremdsdcgvtiiguxlpuwyiywpqjsetsfnisrguejlufsvuayrhuobyjeznrhrfmksmjmnojsfflnnizqukxvleoyustrdrevzjnyglpueicwtxyanwdmbocdgmirnfdovjhuefjeugmpwmuqizevalcjdathgzsvnxddgdquxglizcuogsafuxvlwoemtkbpmwckreixhisyllwrljfksmwdqnrkaozyzngcwldxzthgrafkgsdypnexazlqrhazngigcitwuvainuunvnsrgfuhybwlwtxerkcyjfxnhadnifpiirugacqtcrbwifalaivxhtqkvqgsxnqrssfrknnllxmtgclezyeozlxlpffbkjzpqzblbjjmqxzlhdjbtreawdyvkzfkvszkydpdqfyqtvwkkixgucyccimzcbddlwkmzeinfikoegnlffpccbccuzrvcboyutdsaloobwgyknrpifsmdowbxsaztpbshjgpxznsnsxlgyrjaxmsodlcowfqoryqufeovjtbjqbmsnzcloptuadnetmectmyfkezjwhctonyiafjulqshfisuxuxwmvhhfclxpdvwnvpmvltfbkpwbbrtmbjeiypgulfpccxawurkfvlxwcuubdlwwkuyjdrvtbdskuhzvywhcolxnzxmixhsnfneyfxaxfxojimrlsggafpvjkdxiewibhfzfsgexzzrkrdozysljkgiuyobojigbesmungmwwwuvhtezhliofckzlmxmrgslmyqnudmznwnrzuqkevqzmtenmqcdvfrhahxzgotkwmbkpyvxlheligzgenzajkhcenvywofvipbbpmejcrycitegqaqjhqfouawjgcoebdjwxyboeiahthqlygfzkmtgapnozswqfedlqyzxwdngvfqziijdvzupoqmtapdhtcbdtmerepwemlrxfbfnatttcsjnxtgexrfiqgcueujeuvauxchbqdmxfptdyatlhjeygzdgipezgsjbvaesswnvyuhfxpbtprayfbxtfkmrffjpsovcbgwxlfbuatffxoasjyfgujavztfrmfjmywaewvnvmfauoasmrzbbeshxcespnhilnttithznlxgsngbrpwpdtaffyzgkuqsjsasmlsgijvdozufipcrmgvsnfjutvqssrltqfkyhhhejumlstynexdvubfaosgktxtgsttgaiolrjqtljtrrgewkfcayqywlienocieemjkmvkrfmbamacjjoydiiiaqhhukcdsvuswfjgztksgpvpmldewgutwhusnaibmkwchlrhhlokeyqctdoujfcofopajzghyyjvpyjhfpfqfllkbtgosjblpdyfsutotmaklhyrcqrmpkydtckfaejlirbixhwsmadhundesywozolzczfxsjnpeaaapfvmdhtemsrdzjithkfqpkwtwuztultgblljqrcjrygvfmpsfpopqxuofmccafkwekaliigtwbbbzrmzyiajmofpngigcnxnvzckglkyjaltjpqihnfkvxzoucowiyogzfvqnmgcxlyvqjtpwasraxybdfurexsxletlfsfwmtokhdutopqooosphvihzgrutgtrpmljgogdppoayvjzzxywwurdvhtxpxqvplpmtauuwvaazpyunhnemrovycslxvztxdrvostvpbjqwgkxrulpxpcavobredmjtrbwbhtzqrsovrfopalnxmgjdewjoluodjzqhsxlionnhtyjbkfgkdbruvpzzjacqepxhrdhffnyvnjkvbahgdlydccofzyzamekvxlggqtsrubaikhobpljmbrlnsspihenzioafpspplskuspogjlpctlaiianufquxroscqajmfjvnstfgdqcgioxbajfpbumwgmapwuworjhlzkezrejehnurdkmpysizfgjrljrdjdozwblarpgxkxnhpzvnmgsasexvwgcaynskgbolhicphfixhhtazxuicntohsadmbvzivqfpwftxqjvvoantwxwssrdigmqjtmduzsecqewzanusvggcwzfjvrjxedezznnxgskgcwgnapsplsmbljclayzofrnxrfuvctyszvcljzmeyakmqovsudrqitncpygjmxsauyzeysqnjcozpaxfiexhiiozngsydaughlmmoyzxupgszwmtnuwkwmclshugens"); + sb.append( + "yveswhwhjvqpanihlqnnbvbzzdjaksenxrkmoqovvhstbmzryeuhrmrnypjomgujszdqbhbaseqjjdnartavastmtiwmprasqwkccldoteouxrxwpmbjlfmeitszglmfywhyxaquzxenytcqmgnuqdibvogljkeurqgmbacuwoyxvrywuobohmxaxadvtvpbqomjyeasormoawfaerbobsdkdgattyjhmgennazbsmysbmakwadkmvaeypsfgitczneeujgganldbvlbdbsihndafxgpcslrdvjszmlrvbgxypfndnhfjoccxzmraaffmyqegnjgixlctzqviieuufbpahphrhrbhbzveauhkisnxzaajtoeobbcbrygkjbpapnhppivoktmpednzgqitkacynvptujuniykewgvfiigsijygdrnxxyvrzbnxyanolmpthtmkmnpvovjhfkkmdfvdzkrmqmpifuknaawbhgrfrnpmdvnvyveruewvxvghzeczxdolegsuinxxxhdnbatjboklrtfgduozvsypluhyhaeqsqhcqgygmfqtxrkvzroethjofdvvahvpepowbeoobepaisdndqxjmhpaijvmdyoimczpojypidmxnjiqghoknyyifzitvjqhjkxdmgjalelbphuchzzakehublfmpyzferxebopzryqaxaqgfxwtlwuxblfkpwxvdommffhbdbsutinkrhljnrletopoeeabtaixupipqeauwjlityagxkjazwfximmmhjznhzissacqmipugrvrwyfworkcasnhpzqgjjvakxrxqgcsiymelnhnogsozdxhtoipnbuaorqwobcboupiftryadshftwwpejaayljzejujgcywcmjdugijnaaapnwttjlmbqrxalwjeejavmfbbvdzthauflivnzdunfltscycpsqyguvzmmkvloxxbkbrqhouomkgbaerkvmbbpftndnnlukyyfmhewaovdfxwwtymggtmxaxgctjeaszqdjuwburhearznlxxwhjntdqqosqiogtnfocxmkmihcmodtxwtsgvysucthnezswlyytlcdqivfkhfudkthwudfbwpcpsitfvldvzgftfglgzwmnckmmkzshwoqjlyyoiwrakjunapthlheioqmvqvewudsqesegcxzynitsnvcypmgyqdtziwpjhbkvknobhryjcppcaxplscpbsrtxzoavgusbwmqdmgdohjsbfkywdmddvoodxcrhovlhszhenfeepmlpsazkhrqkhlgihassgdozcbjijgsmgvazsceqprodoglzecvvsmlaksrwwgkicxsaoujiyogukygvfcviulsadbgrmxjfojahiaajhluzgohgbvgrsfoiwkwehbwqkctejxtgqtrgyjlsqwkokjkswfvhvghfjaggqcncdimesxkyzkhbtvbapmpozetrlchrlochfhnwtqedplvkrrpuoqjudjgvyntcfcrhnifauuyubxfsofbhcpubhvdeflvrluyfisdbjtvzmzljqefnxclkdmcnienzlguifnakovvlbfxiwbyfgonogsoesnjkcbieihmagbwckebfjsjqttnnrqvbuandroqjjngsejitwntemwrmtnaeuyixlnkphambjusephvivvxmyjurkmcdlueuprydnzvskpshpconzjukxmnldjxekxkidlixphdgrohgyzoydvrhbqvhqmznuftpiingvpieldlxwszlfjdhuxvktsojemfhtrgggvjbqzuvtkbjqicnheliskiswhwyerbpayujmilhwrixkxuozabovzxmxqvtwxpbvbtgksdssklbescztdbdhixfnopxfuttheztiinertgxsnaqarhwcfmjtbhdhirgxvtfygjakikpczwiizqohzukoxkhyjeuvnndxvwipylmsvwrdjrijqunshopfkofojzyyjikghemhxemeiscswaehrjatnersvjwasuocoodognvaciltvturhigzqehmrmhnuofkmjimctzmbsgdqytuwatcyxkyiidvgbaadvoawlzbcixhapocotzvtpepkajrtglymjwnwsixtlquwlblphnpavteyarrnucbevuqekxholrhkrqxfgxjhzxosnncijsnnqaojkayiundweorzrbnxhsgqebiyuvhynfsmmlcwlgrxcnssixrjokgznptfzgbeegybkerfpdrihgfcwcdhrvlrtiquivchmscgcnynfwohaclbsajiagetqikycybcfvqwghkxpwsnoyqontgdbcebpgjtruakydnmoxbjxgjvxeuejfaobvrjraaxiuvjqyayxfkwfnovvrcelhhzucvymtawdfekjpizkcduiftwfwlsryipkceqivnhzjtihxnxehypbzsqsckyrabaxhzesxzyeuqwnlbbodpbcyvtyabtmzchxvyizqvgtfgtfwjvameqcgmfotzxzuxmygrfshjtiwmycxomltmnpddhbmezimfdybbjujixmoaechdzfxyzndjybskbhwyuziiigdpqsxtwtfodioomxogtmgwssmpjpgqnvumivdvfwidsvevktxvjgkhhtvdaszwutlmhymvyvfrrwjoxqiefyozfyvygdoliqpqghiquzxfgadlnufapxihdrirmunmkmmdzhkqiwlnuvuhyosdmxhhqlaxchrqqaepsxlmkhyrcujxndeosdnrqmhbyhwqgjzmyeiwbfhmwomtzbyxfwafzzejcugcyeeizjvbkmfrznwhsodmxmgxobabmiamrobhurcfvywfgrbzgzjyjvlwmvjrjyhwktwniwqtigbjtnbluzacplcvbnkkexfhqxrwvmsqfiitcpwudqufrjhumvphjfofimsyewsylzzdbuufsagfkuuxdhqmmybopptlmbtldbheoschhefpvznzbxehbyvyqrgylvdnykolpmxzrekludkyhzseiqcjcitikulgdekopswrplxbhumurblwvrihbmvkyvxguvgvswnojznpznzirqleiyqdmkenjajfyjuwpejkdjxuhvyuhsptbyczaixumulyrindbkzlxubzapvrtvqwjzmpbjtdsiteghppkglwemqxhjglbhkrpvsmlbrgxppahewhyqxysujxqaevyudsbzriuwuhaenwgsevnrjrlvgqofsxeztidowrchaluvhqetwtjgxjyqlwdpyweiezvrasekwxiyvcjjwpdmylnzzaqqjlagndcupaprffxsltkhuqvxautqypwqieimbwpcdzxqfxljmeecmgwvodbqxepsiutboswhtsjiscqhqchghacenetgttfrveavtcyfiywdtcgqfbfhtlqdcqrefcshrbbvpfpzfmjttqqboqzbvzndwpmsjuwcflxftpgixbugdtihztdudbsjmyxoiolirbdbwjvwqmioutvpaijnlfpznkzgyoyfmhbovdzdmskyxzxzeycqovvyfhbfmbvijwqwukmpijycfhuierqqokdfskzpdrunaxwtdaplenrinlwxvvrekkelutkvrjnjrzymykncginqifdqxmzqixxoxyiipgxrjifgpnwfqzcacdxduoqgkcwpwmpgkvloxiihjiwmtpstivoamrssroczfhhefrxuyobmiidqizlsvivfbtfyxnivczzqsozvcazkxtzuvlbbvtldrqgydakmizuyxeidyyhearuruoifyjromchkpdtzcjifcjdkpqtcfrrgfbbijaylhjwjzuynatfnkqcandsarxrmcoulfouhcnbdkicochtvbpjckhybpufznpojzrhbqybfnxwjfxfhwssnuvojguejezjqhjsextxktbaaapazqwhkjkzxolklaxgxtesqtptdistiaflnwzwmfktkknygwtmflhpxnmtvtefzfkuvsqjgaagpmzqxifgprumtevsdgtmnjnxhoffpfzhbfqtswitxntnmmasmpyxitbltswdxvznkxmvuwcekxanyakqedecophsknikrskbtwqukbheskpunknlghrlzfbzrfaxaxwxbsezuueqcrnyiiuupenzcwkidxmszdehjiziodrbhxdevewmqtgngaondfptxgulhypjuyewmacymxvnpxylbqpxlijsecrofqrxpilcmpcfqdlyparhpmszvrvzpshhkrgnfdojqvysctwkojjimxgohzsztrgzmfciwtpmxvycideilvcgzusidqpwporhkthhwwmuxqrqcenxyewsbsbnujofhqwbgjlkqaynayhafspdpzsxlzculcutqrrumcjslaiceodmwytitveadlpdhqkulhumvbifozetnqsbnswakuevlggdyxauroydnzuzkmsnptraumvxwlfmaripbeiwxvlpoxdjfnhhgbcsfrtnrtxerbnrajytdscsgjapfksyqhsikhxpivdkohplavgblmuzmjslibutqqsmvzmxrwszxizxracnjuvqtykezdtdiutpsokdsapoqpszfcufgdpjsgskqybsmaawvzfadkzdhbfxvewioijtwvxpxbarqfbyazlurjhceqbhdteqfmbmijggzyafrjjxtqeihvynwkwkdzdpamzuhmqxjxhgsslinkpdibzhnqzqcpruqfmtyigbfjajeewexzswyovknrgecftvgxooblhemoivvwprhloudiqrcxyktsptdtkektzmihhrsioqusnbfzwvxwusolrnrvhghadkgrfhlcvssjswkgodwifavnhuvutovhlgokxasnfzpygymrykkhieweyxmqljcagnxrxhbzluhzuzjypnffdyrmuowauxorohnhexxblzwxmatpfqbhyzltgwlazwfroktbgfbwgzbxtomxkhrvkuriugtdjzzjmhxlhiamzudshzgwxnpqaiycnbteyiyzurvpqffjtfixficnmuoiyqstpljcmxkhkvbhzwlospaptoxacqnvhfiodmiblyyngzdpofbatozvlpbdjiwlqkcgxawvjidfqsvdlcbzdqootjselkdfgxutdchuldwwefernhpajbptorregypsrwtrsznvxwsuwefrigmkrdfujhoijlfhfzhxcivbxfrxekloooigizsvvbwyjvtbrbjtzyqrlisnkjssvjsrtohqxdevzdbyxsyhucvuhxusdsoezwsfkthodknydybooxaomecqnehinambokyegoyaennmornlkemptjjqxojwrwuzasiaucuwpcfragnlzrghxejzpnlxkkbdxeluoibixkgiumehzpejqwftljsqrgmpzeahucjobbhjskqwpkxxartayzpmvbevvjmwbkrufsbojuuzogaaxigrmrtjzodibrgibubuluyqqyymitzplihdulwbdfmqlynvcdzmoixaobgqmmthrncdfuecunhlsiowbbktydzjxdaraabjyjawgmjzfuwyetrkxkfnhlnufmcklzqevkwmqqclwjmnmxqzyfawqqbxmyeelffkuteqfyzlsttntushaskjjjcrxahwtfeeyxwryuasndygspkorhhtknnxqqvcvduiwjdburfukzvozzkagrwmtalyizvaagtmgbotqmmtfhwrhsqiopwunhkbufhqphrolyowwpdqtglmsycbkzullynuumzbfxruurigjzyhxspdzpepvaiqwnitzqettrwueoxgvidzlzezmliqwapnsncqwltnfmyqhsodtmkvudkeagbzggvrycqknuszhyxrdsodbtlwabzipqzrvyfjcgugxgtcgtfuzwcdmjfhbrxreevyffcwvsjgjtwsiqbucixejrvhekvpnhxzbuwdssbmmrhalwusuudgbqevuhfvudxugymzpfpedbtguemdjrdxgdvtbczdxglwhlspikklgzqhozsnptfncjkbrrsmziwyloqpnmfxhvjuljwrqdersvdxcakwqaksfpmqrdhrbzkuyjxreiamuuthibvibfgkuwkpjkorlkuekxpouqcltatpgenokbmotjsflqapgzesngrmvfvmyswrmnldiiqotgdetlddmaksdtvufvcfcpomsyjdmdxjigqaturrsxxlwkwvyorwsknsxmppojxcwkvigouenvzgnvuiwdxslemfblpxprtibyejgdshsupgmvrvwxmqbuyxwvvnisgpdryroqttveefzqjghhnynpomptfsmynspuvtrigpftlhcmywpazhokueesgkvoslafykpatwgpxzzhnlupfazwbkeuzjatwsuvnnhktnvzbfgkiietzirrddlgftgxqyxihsjxenyfnlvdlrxwuebshrdvcjlpnuhjstrfblhpkaorthxmuoimntotaspqtyxasjqmfroqdbovavqydnftlchazkkszjputlwoioycggbrcxpmkqxelxzzifmixjjuyaiqkeedejcbyglfwubzcltnlkakcppscfegjbqqzmigppnaghttxfsrhhoxiujugahiqoeiqatgizlvyfejgtswddlhmddffbayvbpmsxcyyngaluvyalrdoondmffvaislxxthiuuxfnynxmuvvnuukdlinhftswquvshktgywyidvdgkgoohqwruhmbqepbiiwwzwuartmzsvfwietfzwnnkgjmciydcqhmwxuetgkzoibeecjbvjeqajjczfeeymjydqdldejyxfadajayeejfiskugqwcbhthzcwzzizgfeocmoccsetgczifxadrcdrxlzravefrvbdalxvenndovprpjtmrsdtggbagiltdpknoflttxcrtskmtbstismggnhfwamtagemzordrhbghwtctykwnjzdghdcsyrncqcjifahnhmegsgzcizwhlehvyucqepuphduxmhaofzsoatzdmzxrthqpdovjskpjcmqwzdjhkqebpvqfvezchimibfrlfzohcywfrxshyrqbkldcwihbkaupmblszergwdfaxmpidszapvwahjeuwzdyhkfbijbkimjmxcckcmfpbknwtdvvgaqlkzweqqqvvfmzduzvypkxamdrwkkgrzmomvybasewtjwzoqlfbyugjeobywvclcurlcsvzerldsuxqfalmejvolzxhumckzaplycohrqtdbphxglkbaucbchmlrdppbxwqthdfonufmbthjflhidylzqlqprckwoddwrjizeaoqaafenzvfcbuqrpkufphesxbunqbbapcqgoicnpafouzsmumsqljwvrjnydvtlzkjlrraammsbepbrkhadbynkexxadallirflkvdmxycykaaiispptoqnluuhuxwsqipkrciptwkpiqqmsyyxosrvfmcddmmehtthqqadngefianmklmmzxtxndjxvwtyfnvddbmzdezfhxptpeahpuauxcitwymbhzwagqmdablnknqnixfdhcimcnauqsdesbxwwouqbhlosibxgfcpkwifezdwkiczsxykdetffzxazcdzkrjpgntvsxnemdehnliculrniwmdndcwgswgohgbqjjgsgrmvjcyxhsosmhiqglgkfbbtlwcrmxnnpbndyoxfmqsagcsrrhkgojdffcugzyqgkuwyckvcrerrzeauxxvmrpntfotkqkcmdycktsyvzqoirkcqnoqyrikxiohepakajlxbxqkrvinzjmngnefwlsheuidyhygleenanandfvqknjfxyxhnmafubjynvkigmpbeemqrxrbzmoxehmjpgpxfhgnsiozzxwifhxrvzkaltknnsauxkotikvpydplkpikltagaoiqzxsuxhtnazlfbgnzabvreltbmnsdaveceacztrhcedjzkpioqerviyejwtfhjjkggjnvlrhbieumkuibfokzvefsedmokvkahhldhwrlweqtxpyjzvxloshnydjalkqekvefemymitaykgkgsznfywiiswprxyeegwgfjvvzzggrlmfepptgsexnbjpsycykxirqwwqnznulhdvtbrmnqrzmviktgwjmcnavxvwooymqaqbolcduktdzdpsfxiyuuekxxkrnyngfiyaynuunibyrnvsvtolorseprjhegffsqbfmnpbbrsiiebuqrlmihiudpxyhnrirppwigynshhrxletwdyzxkwtevnlgwpsoarachgilnhxoizdkxqzktkyqqahtcrpjrwgpbjlppiydhpzebfpxbdiqkdlyvmzhrurlbhtdwvdfikywlczansbspvrelixmwlwgzoteroooojgrwstldmgwrxhildupsxaezhbvnwzyjghplyehjnofgxtgkhfmjpzfegkinzzillyajosnorkfcbzgqaxjkulphblclvwxkwtnnfkemnanarreavncfikxlhuvlkfwdrjxwpryebrhcsnottqaakinilewzbffkvvmszzziqjqimndconfoqykzvhezddawvvnuchdnmpsbnsadlndoqckypakidcvqzqccoeavavasswmznrsytfypmkudrjzsuatqvoszffzrlwokgucyaetpzajgjhatjeibpzinvntnmmybihdzpdmreissfgdkiwqtdperqroisngkbejbhgbtouanyxqxwkvwsnjqatdtmozmgtagjdhybuykqdniwrjtytuzjnuceqaiklxtjxjweokskfnvilbgvirxfzyizwntxibzhnhsuuexpcubyfebvwphbnamoyuyrgufrnlfutlwqkpuchvhuaklvlnenpcjcqtmxsidoxfxhimwvdqwyycmzzaiklwnowaouophyakdoavkfchgukbqgtqmvurecyrdhzmhetyntihoezfnrwraifrodyfgcbqgrfawtaocudvkpknzeaesjfhxsbflfydcgjppdlbbdaghdbpmjgczktlbbfyzjupnsbecxkvvodxnmwatvxibdcmwzlawznftomyxyqiaojhmhnzizrpxfbvccnrenxwanwfqyanogzenqrirzktjrnpjmnnpjajhknbydbgbfrobqxjdqrhwtssunlxwhtamktpdqadlisppzbtnwnjptzwsnburamthmvbibkegizdngygdttsxprwdujhltfofcplyozmscschcvtzmkjabkwdvwokjyuenjginscouwrspsbnogkntxyonqjchevzigchjpevvzfzyoqifoiyxkisgxagvhpicbsznqsawkxtrsmfevnxqfviuroeicqjovfpnqcvzmpqzsgfuhafwioxgyqdfvpekmecqcgqkrpftwyuwmstzfihhoywuromdrklnrivfauiprosggbyvlsbijhgcdqbfyqxjfpssyikqfplhcsvsihdphyivezhieljtrufkawthzczxyhvxrjibqxymgbxkonosndahxclpaenvckttfmpcrncmpgmjhhegzaclmrfobwkannawciuvgnjqvsdljorbjteiqcauwmazqimrtypnlprojfowpuvauiqiwkoeyrwfurxbqprgqcvxpdiirmkxtsnoyfgvzfpwxtixfldoflnalxxgnmqpnvtisretvpgwpxxymkqygauyorwcmnjmvvqhejunpqmgcknzqshfchvpdefyfhtzkoxccbjjhfnenvqukvmojeqwvwvschfjjjwpsvnpaiikxuajcpbrbilmqlhcxfxgsnbvvswrzjmqqblcxosaxponknthsselyktgrowokplvgdyeghrwxvoprnvucvippfalzfylpvyhhsisguhjhaalarrbhdhinxejiwnbqhvghcewjrdpgumoqpbtnwjryifrzigsfcaktvjmcjewgdfgoxygbiwsslxsfemlpcedyqlgnrjgozxissqjrebgynumvpzkbaaxlwsztqnmlkbsxfasaqxluguoulfdojkkdqutjvpxmhpkkjasegkfehwxlkyrhuinbucfxtvtppyzbvhsekxpyjtgevfnxqnsojxlmaqmhsrqxuqpbhvsebnjbrjkaciqvjiehvujzuluqmzdxopgdryosoglnpasmrkfejcwqiwdaqscxbrzglubexchhseorfmxknzmlpicpzzbmjyyizsrncnvxtbzagfkmfcvrqhwpzalobcabuyjuggxeouqfaowybjflqnmvcuxgtdonmztoxhhhckchegngvitgfbouertrigqbibzdsbsrbfaqjrqbcpjzurkqcfjyhfvkbppbyxrntpkzarilasydiduywbznabbapsbjwnonlnrwolunthmqjcxvlsiikbiqrtlfvkoeuofeqgsivygsinyofqtxkcqkjruzzydamlnbrgvdjhortmapwlxqdbhljwjccwrglxeporfflvswyhesknmhtdvmozefuhhwmfawsqvffhsnyqbenxttrbxpolermxgybdrirvkrjadoiimelzgrooeetjbfyplvaerumjkpxqvxnmgpdmgevyytordikvcnsbialvhuwujbexufcttzvyedwmlznqaovxuumrfqtdabixcuwurronnwxwrmsigiyamtxxxzvytrugrfqenyizcwhmgelpjqltpnftmpteqlduditeixraruecdjrmbjkiapesgmxqjqggqsifzoqpmowapypbvckrdleyuannpdnoaunyiqjzefetbkxfsluiktzrukexitvpuezdwzpwbdccwkaqtvhauhlirvntzppvfnoerjxrpwbshgbxcgvnpitezrcxrbzojiylhcobpiuqscjyveuyrkmmkibdlztiofkmlsegrdiidrovkbfwytfwliqvcafmioamiczdqvsdcsjicthxkmxqbvcbwkmfcvdyhzwsdkblgxtgbnzjxqckzeghbvwfetfjxbxhbrsgkqwcijutgldrpjmmuvrekhtftjwulvanfrvcmqvznsjmlqnvwhatjsbmvtmylrzkluimvivsswbxknhejuofqsjmjgwlqphnoulgejqxxzvoqricumiggnxacjtlqsxsjylsbgfdnecuonqapmapqlmpdgvjvfblcouelyuplcdngesjkhmimxhiqaribuqjbplcbnkmnzcmtvporifrhvbqzdpmhktacbosetnkzssvivzorzpbeqnudqpovtckytdhzrlaynvablmugihcqfnajjbafkyankuonyffczyzovwjednztiwutceitnrdrdawwctqrzzmcdpykeefgfmurmsfguitrmldqtxrahsblpusfojsmhqjmftbsmxxlhuuaohgdqveiymezoycgixdngpbhtbpdpjnmxrxiatnwltpdagieymidqsnbysyvhzujnfwrverszibegtdprniebtvqzjlndqaqbxoaloorvhnwkoxxlpdrqjzvzvhalafyusgmsqmbvbzwcwpeedgvxqolkanoevencgjthbmpoogmdqdqnjlefiyjnnsjjmulocooxjxacdkwkxkbzgrfwbheuklkxbgyjpjdqultsvaspezvnoqzomeymntmgnscvyrlklsnegdpqhrmtarwaqdmzooufofbczolmsdoskvovysudxlyzeokgnznyvbizolikeizpjmyoqyxzvbvfdmubebtvpgjzgpkvgorneblqjaufcixtjvjihpmlavkxbvdztyrdtvckplqufxhcmtbozuzqozrptnatdgtgnnyjrogknpwpixrxvvqxyuhayvsuyuzoircnibsycekzlxluokrarkzdcpnwuoxupqmgrblfhcprfvolmcnbmwlfoosxcxhdotzdiwyqiekeinwofxoizenzccfsycepvzjqpupjcfpgcztvbukdclpgxeaunatymztvfeyhgnycbgbumraosicemlsxxnipswhlnzmyenrtjtmdwwqnxzynutiqmesljigataqafdgxjhnudgyhujfkqeurzjhoouhbdxwwxeqkvlqgbxgijqzjtpgtmymuhqfqgirhpcxljbxvhlujrhjzxogtxwdavdljqqquzqrblgeyzjisbxhffzegmgackmcitwxofqmcxfmhwsqflkeisnvtqrbelltusyvgrqeuxwlpckxtjdbjjnnhqhjjjcridrdhxqmwwgsevhroogfbryhnehzuxqzgiwznauezvlkpjyztmbfsvkbzqkbczpmmwfooihnwjaihrkkvfzeobtylnproncbcmwouspawbslyyvhxnopeztkdfsigzjrhzrpiveavipwsfxxbmodcokpeihsozxrfnwdqtcmuumdzptfpnpzyewdbwcvndktltcznwwguoablvapbjvawscibzirjeiqfnlttxfdlkfxlzvuccajzewmfkqmcydbomdjntmkbsiklauimaofwlgcibyayhwvugskuemdsostnbckyqmikoitgpyrpczzxcvtvomgrraeeyrufmspmubdmaxbuexyeghxoyvvkgtlhezukkhzsgdnzyfvxwqrodnsuzvblybkfhrezccxbwaoqndvsskesvnbehpfossqsfglhhirlmkjhkqlsmqmpekgeixqvgaawknyqpkpcbamvjnxkclpxkgofrpmiuhhrieqphipgxexlrznbrywijwfsqjnfrsrocuhsvlmfovkreubloorioavldrtqjqujnlceewgyouwarcvjwgwpcvvpuzjhzjduppgisxitmqmgszqsahvxewbcoifezcwsthxopgmchbhsdrktltagyujrpuqcvafoeemetohlhrbdotiuvmfizarizggonwzhpsyyrgdhelgstajxxinikszcmqvsaxfxnekuvrjfrdcxdhlzyfudwnfuoqonfuhulpgfdvxewaygtdzburmckrnzcubczaztpvrefiwwjhllipygytahjdemftrkhzfzfsolfxrliirjptmwxwhcybeibijmbisboiwcpptfghgfdsbluvrkzlmttgmrbmvhxcednwislijleveaeuycopjwueoywhczrcysrcdgcxvbyluuuqtgjnlydifsprgvzpbisixwnljjgjeovazkqwhopvhyrooyzskxbxgceupfakipscuwjbbpmprdknnzjddidqhuihnodzlkvltlxevkongdfaajbydkqnzcszvpqsdvupotkodovpmwwvczbwdxysbdontdwjgpwyhljgsunsnezdygudadlycncdauyuzneuuvdcpniyfcoedvehifrkdjpowkslnglcemwkntvvncbzumoocwornoykmmjnquyrdnkkewptyzucfivvornsbesgdcmjxxipskgoqecjcrzkbgceomgngkfinsrawttubkdxnbmgwcgnkrgfqkvfphwvnaqrbajcqlplmtatctwefmaxdhbguftyzdcrlftqadykcofdqwxbnffguocpbniwekonmpgpdlmvzqsjasvuzmebseaqzrezngxccpdlfprapuoougimbjapvejhrwyrusqswsfkkhwntlfxniasguovhpfdvqpyjekwwhyzllbkxstybrisbknoiqysgbkjzqhzypzukqszcrsxurfrweqomywinjwmaoiengcdmkmvzxcatbewefmwnenraxzyemcajupoimsanoqknhkdfhvhafbvbhtxzqllpjqmfjopwmepgjqgwemslkoqjiypzqloafvgxyoieycembtpxwsstkmvbpngmdvbmvpfanpyokigenifctmzejghmruerlmflkgotsrwpznokpfjiltljoqgpaqcpawojlipnqqvfwdakncwtbdelvzehxvijqmmrhmczpnjfkepxvqkvexdeuzabfbkjkgxjphcfzdrrnyyzoflwctxpbouuwwkclfvxqqirlgsryikxzgcpdwslfjbcldfsdlfxpvfnfirevmwvesbmqeibmsgtljawuyjhqgawkrxvqxppetondqfbbilathjegtivppfvzdjlovdwsneolqlphdwbtyvsbbcibybvqjmapuxgjrenjyfcfduvtgasirdggdnbftseqribyzowiuzhcosrzxfgunwqsuejxqyntugsjmxmnlrzzugkwxpaijgfnxwcxianrfdiafehrwmwgciowltazngaboddtkjifhtnppmwczwvdzwszuacqwcwifurqcznbpydaldnaodkvxbahrsbrczddkyxvcpfoeskdelvwzehcoblkpmrrvyntscjsyytvlydflfwpbyzznujynvrynsbgparkbujesyxxirxyrlqsdbocgtufkxzevomdrzgjopwvwdltgnvfeoinzqrjfuloqezopkreakchrsaoxpxwmzxkmfvsihfomcobxbwhxhlftmmpzoqwseutxbgxxvldpopglthfdzsjaelcdxymkyjwfhxtpmdqtycccdijmwayubsewdjrrqvnzmrdhvkbravjnqbppaxbyliskbrikrozfrnkqnbnwnyxnbkbyadkhvagdodicllnquwthwjmoinycgssojdqmwrfxjjnoroyrbvlrrguvzxxrfbvllhrpdbgkbzrwvbdzzvonkajqxsbjkfseitewkiysqkskuvaumligayfairhxyhqmsqmxjaitufsgugycezlvvbjiangdquxsjeueezechrvvgvnpgnpmbatskratfzgtmqovcwxmzqldwapddqgvfayvjdscqafxmuwqetgiwqxerawwoxxafzprxeqnvztwkergyjsrrtqeffsnclxcjgxaneapimnahmhuwtcuizosmkmcwpgfmokzuyabwvnvvkhflevwotcqpemddatvndnbezqhsrtmiwamrlcnhjgugthanxlhvpwlenprotaccbborxfkdnivjdghjbpzgefidfjclvqdkeejrncrmwveugvpcsmomqccjtvbiafnzybzlxdcnuwfvfowdkosgohyxayynqdzqpipkpvdnmdindielkxgbbzjlspvskdmkzybwmsxdlzqeftoahbygooodszkqswwjjdqgjaocuugynobaofboetperqbymgzfgtxqzmddbarrlxwixfzgmnlevnchcuhhbkkjegjksxrwttozthjxgrvbmvbwpjbxqorlocqjqfliofjonxydyeqftczriujbsflwibnkynjfrsgjyokulggccmljuvwlwbrnvbxdojdqcndfpfvmrdsflmzknafgcrjgnumewjoknwtdsgodcnrhjohifsholwrifyshwafkqifdpubwwtwglxzzreuezcwasjbheqhftgdgybaqgmtfsiuhuoxgvwtmddmjlodmhdxytibmmqsygclqyjlfmrulvrlrvtqksdabbfcfttjpqzfcjbtefdyazundpkkgiynotlgjelmxqcjtwrbwxpduzwyaekoomyziemcvkbhxmxvnopkjcfcrlhdycplildgiqhnccenrtoxhrkrunbdypvixciglmqbpyavdlsvpesjaawzmijvkwdfffbnselnicofqweokqiegvjnkddrtiedsdujpasrvuhknxistzdhmcawezcubdrhkvlkxkfvkcqusidfslsqrxcqbtlerzcxogyzapykkbpovyelqaixbttypjxocbxrcycmmbomnjdobimfiwgykvunonnwgzxjzplzogblkipilqdoinxawbkhjfftpoqsexbbnygjikhhwkqcvmigmbzaklbbmfjtlwkekzkzbdfkiauuhcmpvdntlqpdsawozotfmlpzhckcagpzzrksumfdagtiqzaiuxpjhuriqmjwycxbdmrcqlogsgshogwfivetxlzpyogqlxrfebokripcgmvakylxlyiolkpnfokwzeslbntpulvorhkgssqknlsfkhndvkyqbzptoebufjoljaijgseadzaycecxtsuqdrrogkqszhlakkwvpkkdurvkhplpnmzckrvqpdskjfdzyyegomyzppcoxukhfgzhxvimaywhpdlfftcgkhcspwezoalcglgubqoupyqdwqcylnfrufeoftjuyhsmyksaiodihlnwmjosnssrzjjyyjbwnpsfwiehqgkrbzmwewitehvigrbujpsonckalnsmqreezzbswepuykfdkccneedgrihymwbaajpoxlhthemahuaelkqtwfkbzmbbsbetuonecvslomhdepusxtybyvspkpbdpukfwacvplujypooyphdleowqsiulowbjvcbuyvjcfrjikrznzsakrfwskfdynynnnneorcrvsrhdzlotocqyvvsnjsiaakcyuvlpankacfuaynvxofaurcygaonsbjhhaamlddmaimqoraqjtqchhcufdixpsqeeyfqyerujfsppepprtcdctnpnytbppfhpvmgnwibodzsaoqotcihmlvtmmoovhjaoemklyeuhcejtnwofzvuvkrbdhkvmjmixaklrhnhjytnrkwobwwnwmnzeremoncofnqteawxtgttpakajquvbumkhxqxiqbhusvxhxaziigiiakmrxbtxaldokznknjefnpxnxaxtkdtcuprnbfkzpogeamcjzkiegnkfdaaddjrgmaoatqmxvvlbqmuewmidnhxsbozhlebcdductvvxhtajkfwyllcceltgyksrriswtvsmntlrpgnvbcmshaneevhwzhmaaoschtboenpmqwuhvqgmemvovviiabvwsnuogennmsmlhaocmtyqzkdockvmmzitlvosbjehnkneldtygsldrowxtblxylqgpqaksovnvzgtxaqejuxliabcjmmvrxrayakvbkohkaaqdyqfhwvxbvqtauoimrqfqcrjrrgwzxiszpdkeunmmkhagkygspybgwvmdeycazgzspoxuaptyxjeiwfmgnfenjyadczoujzieatiwtqokagrdqrqnohiwjdvufmryaeayedeadltjcbejryhsztpjzulzugurmoewigufoiqjkvgvivcxqvydutxsvgwjgzslckqnpvcdabeevtkumztokgfaqotbyxjmarspztbgnvjiydwujyplijxqunviudihjgcawhxcnusyeseuieutfpjtougjcvlzepytuoleahzrujxjppgdwedqghvrccvbukqdfolatpvwbppvuuicciyayqcrihqvksngexcvnowjroxgpagtllbyubcuglwvcluosubexeeueaihfcglzgsbljobpmzjrpazwppblowjayoxtpbppfksenmcwbctdgayhzeujqmbmxmwgfxsuixturqdzbiipptjqawmwxzncknfmweqowrsrrvrvlqhwzvrjogshjskpmdhngwtrwioqhrtosszludozbuknggkswrspfoeisxbhphxfffoiaufqjamqyhdesbonhontmzpxwrmsnhxqofrfgvuydkqexpiynomnovwosczxuaitxctrviattwfyltcqvzgpbxodygkgnkvqbmzrzfaneyjebhysjqppkswxgncsrzndufpmdloefofbamhjdebxpelypkiwbsxkjgbzngzdvoetuolddgrzpxqgkkpcijzgetimktzsfnpwxyjlnhbwxjqegzdnxxqfebplfycumbfqssvojkprcvuujpqkarnssraonqladoynfbqpziewnkqravitzolcklguwlatoimumrbvqoyoitpafxbjvxwxetlxehhwwfpyylwjlmjsxgbjdznmiuernwijgnbunwbkewvgqvlyhhnuutxpnlxbkllhycsrntpwusdueugvopgptvgpnbipyimqytozikrxqepiksithoxlobvieiipqgklqsexchkwxtyakejnqulojphzjcnnevfdrodslhmswejfdauxsgsxycikqtisacjwjtwzbmcrqlczhmcsjblveqaqehqmfiuhcaqwmvabvjloofsglbqsyzirrwftntrjdvdofapebndcidvuzmspazyfimtdonxyslcdkldcobxgjvjmaqktthhzcmlnpwfaaokpomacuuznpqofxvfwkkzwgnbppvpasizarhyqrzinxidpuaxpejmyzxmomcliruxwfytmofsfyvkmjeitpqszmdjsuijptbcvpofyklonpqiyuhiyqexgtnnooittkmksjnljzlsijkdzrfdemyucyjwsslajfwdtltaetnnwxxdvgpkjvudytibepbjkiiohpfwgccfqghbpdzsisxlsxvydqucpbevtstxxmpscfppbsgdtnvvekcfbnduhahtsbonuzbcunujhzdivhexzzqqzklwklcprvptqnnffdwlqzsiuxeuckzxlairfvlcidvldjlgbmnxfwlcqnqjegndgbrvwqkgqdttbseyircqnphnxiqragnumielsdrsdnyzrlufzafmagogosfekxiewkiahcmesgkiuwguzcycuyjwmoctfodizjqtrewpssuthlchbilakmkdtpzjacidychqfccihwjysvvmeuuefxdhmgtiatglhdflzbuccbihqxlflfnogopkjzsgdrxdfwhwxmompxbnryrgxyjgvwrluksmvqpzallqshymhomvofcclkyjnlrrbwatcfzystsfikksyewtcaqxstqbquzfabvfsxzspwonrfqdqhmvogokcaadffmtsdndztugzxcsphkeieuyuadmnwyolcbgchpwudkfuvtutwbcohcuzreoczhymgwhgnbdnqxdkdbvgwdthccqhkfzqkowdqvwnshqkezqnvhzupajtagrptwziqtlkhcmwvmpvgifjmpkwoubrffhualqlhtvijnisdaimlbqbzbpzrsafwzcpuhumguinepkvidsxxiglucyjwlurmkjprooashskojvoygueqwziuddtsocxdbpfjzuaiwwwmntjfqaggrjunvurtuotbzjvcmbntxatkigjqunrkzyslyemkqhgfqmnshubqxstwrndjodqerbstgsitkgukgzephybxgjixfxobvswayuqiwlrkzyptxgcbdyymghhixzcfpbfbucitrkjxiijgchuxdvgnagwtqhtqzcyebuninmzidfvvhufpxckfoksfpaosdfsmyumjphjskgsdvfsrussugaloqjzmpqlmssdxqvvesrindtzipbvvtwbgehiesxkbrztiqcbikbuacodeikqntgqdshhfkgtqoeqhpshsuqiqtcbdswcjkdtkcnhglarratqpzakikkowkziuajydfcqxumzyqkedmoqjukadcbjcnffuagwuldfcbgptpshsatqrdtssrzqbxkcsighfgblljirsjttpgzblzkouesfshkzltymycidkvnakwtiuudyuxcgvnrcofftfcmnxetcbsgllpcmvowbuxmgxshqzcybafgtpfcazynrvnktmlpwsfozxnkkgemmxyfeevnfuiswkpfsenumftymgplgnnomranlttlhdiipppaepnodnktdnthdnhkaristwcdbpquvxxgdmwwlfwowrrwfmwkdsrisbbfzimicddznlvwwhnphtlysgmkcuukjyyihxfvjavpiarggdmfmqcbifckbbwiaskbqrpdkspaehwnjeowhagfgxwfpwanmhedxahuaxbqxehhthqixrlgatydavokbvlhlyraycixlxhmlvhdymnuqjrrkwnoshzwgegiczmobygtkmsoznfyrwamfwvyvdtypesybglquotrkoxepbkeghoqxvamtadabeunsuaheyfskfmiutndtvbtjytiytewtghlcdhywseckbzkurtwujhciieereykhktiimdxoiwrraxjimriaysetpfdplpwfkpegsjvtcgfbnirlufieaqbmmfundlxvrmphopzmntqkmttjgfftejdkqgikwmkgnxqqwmeyeqfvropfzjgcyhtgyrsfuingkfayolivttbtvdpwlvhxpvxuumognzclnjeghfciaojhprqtahcocpwugaebeecjkvgmxyjpqzkuqxzhypobzgbwrurjdourlxrvzfkbllvrluzhzitigeyerestxhmufigbiwbqkjtlqrvowhrfzhocxklrvkjyhhoydmfdgyucpwqlmrqzazeaijthkbpihgcpziqppqpjvrgqomwdryblivezpdtkdsvkgyrtmrhbtamuaxrhvfochkkxfutrflrztpacqfbbtnqjajbqjraptpnmjyotvpwjuibwbewygvcexpgeiemntjaamjpzsihasbaejqqgniscnmivftcwapscodtrcwrlxmdudohrvjjxcceqxadtwnwatnjclatmhjzwjfwiipmlblchtrntmgrdwqesxapjfjxsijtwbwyixnmxcpjptsqpfrryngghjrlfnotvvdugadlqomyfnmnindaehmgzkkscwiqknrcfanhfazvnkdhtegcdecjmjbhhauoqrxnywybmpoiwiqagpxilpzvcvyxfwfcktjsvlzyrhtxeetmfbluqfqhvxcmxduxoispwpfdmznunssjlrwxxyuarkuagmgubsjohwukkzcpyknsouiopchmgkgoybrmvxvzptuukhazuapjciehzjpzxbvuetrqtlqdyqdgygrsazvoeivqrojvaamumblcbuhcrwehawsnsvqqhxilwjfewujstomimwriznqoeqouyevvoptwhcgkapyvfgjkbrepknifinwmfwhkcoktlafgybkqedxffxejrvsxjlpeqmlyhadulhvdahtrofvhmsgxbbvspttpwtmmfxdjszczohoisyjqsgjkxzmoarcamlaguouhfpnwkkrbztfppdnugzxvtxsukjobubqiklpxdnjeiykxpenqfjudduktqyyskvbxpnckwbegtienbiorwgqpjfdazsuebidhdedjapgojkqpurbqkjpvktdhvmwpkogjmdpuxxtdimvzjywgnviwpvhutwxwxzviilsblujmjgquwtoeqxpilhfkrgcisnvgrkrqxdaedyjfwpupwriiefdoqiozfwrksbydzlxyiiswcurauwgrxurhjftkdphppiqvlvcsxodswccxtlwvbbxqzqqlkaqhoraphuxplsewnqyzqgjxostouosugujyeeqogsdwgxucwuatjomyibhoyduakdbikbttsnqakkeiddhmqdnfknamimntljsmjexkyigamqxznwbxnnckbivgpmmvekmzpsxwcrhupdsqgbsmsejdqklzvyjxvusdwdwlqseprdyglmewwupgxocygwpnqqsnuukxsgetpkjrprqcovxcmpxdusfmesjnaurrgafnjbovsroglpdxjtumwduzrmznnermzbhicoexbktqokvacrztiufxlmynjvgvdjdzlczztdxkbkbevhbkjzqygwzlnzzylonozqievudwndescjnvowsbiqdoipenpxmqvmdheyvpgbmbvjienyvhudslzaxktvausygcpxmiroohyommjjqbrlvoijglqltdlgssehfkdsiauvzrbkgnjzlkkovemoljqubxacqmkwafawaadkvnvijlbpzhgaekvngvrwfdlahthlijpeehojnitcdzcbjnedbcryjjtiegqtabowfuuwpqlcshwrmglsllsprluqeqhiwdwdjobmkvdmuoaesugxekizqdtcrholrpdndtxnkbwiaovcurmmyffqnnrotuxeilqcmxwprqgqchdkmmbfqoplpjaljfidjrqmiduvcvgqzrnokzzhzxuslhgyollcjgiekdclxmfihsfrvgjxryfquljehmegjmrqmhqcojozxjhyybedzsfexgnqcfohvnugbzvboksptnrmmrxngelltcgfumrbnakmxpeffhhznrougeniqquxxgkvjnkiwojsrcntlwmkbwrnnovbhvykjifcsarvbcypejzrfvcbshtkanodujgcldppydbxbgcobevvtkjhjkxjjodxkxfyhyghucjiqbqrdpibvipkbbsmcrhloztwaunmjpwymrakhtwvqqgckdnniafktvmiondrewtygwuvuogenrrhdiqzuygpimjpvjkxcjsfemlaucywbitfzmuttuvavduuvrlhgvvuephgknserbnlgpqdldlulccjgejuobcemvpmdltgijhdaltuatfzgezlfqafcnroedbnwkrccztructsfbnancqjuryroyhevuulztnwvwasnwjkhosnyuhjnahcjxqonowxenykvybfixtoshfjirujmlfexzhzqgkfndopmmyjqyuwpzozsczziqnhdgnmzgszdwouogpdcixoxuqoxgtjsvymzgkvremrfuawjigkmicvbbwjprbfcekrjwzxufasejdmourdivxsftwncvbhptydamlsxiejnabsvvrbsyomvpnsocnfnbjfxebnpsinyjnepjxsedqxczwmgkvdsdmrkbfaixwtqtufqdralwuwphtelnlzphmmzfhaubtywbeuixzfkvomitbtwbzaszmzyevorgcmgndfskyorhuzjemestwdvncajumqfinloawqfgvdoabfwrzarjpxvhmamsbvuiqpifkxcgacbzgkctgbqjgpsxoaepzvpdczssvxvtpidzxdyadhtkkokzjihnvyjmazddrxrglmlfpxljcsdsksgoolbiqyknggvphfmvpxyumluhyqoeudmhmrwbxszfakgxqouxejlkuobcoixvoyicvpgmtcofabaqllayrtaevxwncmywdnsowjrujuflwowzaplelplcztatafhsrwcezjdxcgkqbeuufryzuflafcrqjvtixjryxagmmunfjshrjvxjuguypqysyuvawrgayuzpmggtzlsemflnzkkaqojavhhwfpszdrcedjfpforveeoohvnnngjnopcgdrdzfgcxifscfzopzakkdkcvelflvkgdnwejiivgobtllrlonpvyhfetphvlhkiugqaucltgupyyybvuusagoatcjzgkntcrxsfnbjjnzvyexmbmqzbcbubvitmhlpatejnujwrbzxonmmaugfjngeozueuyvqgkbatsopeqhqkrhkkjdujrlauixhclboxfdbermdmyvgbuumsptiaeypgxcveiddoeonuqedkaxotabnocwlwmfbjegghvwejinpxdgurgmuytinqzukrlzxsvuhgmbutktllhimyukzjrnympynwrysdusutbpdfcifmscqxjvpqiyccfbggwzhmnqluzmuhaoiiihqktyzqekffpjvbvrtalsjtqeucooikhawsajbidtjtlsnlnlsnldjsmdkkinhnaqxaksxoprsnnbdyukdmrawocfcvojqgixgupsbdtsqyrnwjsdbwjjsepvuinsyqszpokzcjwxwgyaakculjysigsphntbjdstctdevusuhrfgdhgzfnfkjnqshhqkibgaggaiuistjtpqdpsertdeirrsbtknoiiaslbcgzjjycyfpndytpcefztzpoalaqjgctfnvmhxlxhnawstmceayzhjgbdjtqsnduzgjpjmmwithnimqyqlkolqjxzgxjvlkczobfrwfyotcfkwvrntjqnggdunnfahyboleuipkjfykzlfakamhrfyjjbtylvetofkkuxptuxzcwjabpnbohdnikwommthdwvltzbgpkwrghkejbzhrelmicsxfxevzvqzvmhzadacudicqhbstudessxncalsitnopfaebgoddavfrydrywtvkplatvfnjdazogagowoxvunlciptdsanikvrgsagpgmbqgrqjdlihzuzuqasvjyemjqxgewnjdgtewzgrefsdewohbhqamfmlruhdzldslkzmecpdifosmrpllfwecuyjtndpctennzjltrmqqxmkvkkwzoqtgzhtgeazsavhfmsmugsmmiduvrpopbxrpaujditrcrcokqhnphtxjocifnzzivhfphiwpfciplzwnbofvwyhcfbdnevpgjkvpvxeedqnwlmzkfoxziobutxjdzziwzwtzudprzuabfmzkpzlvzruzgraxolmrldlagtvlmatijzqkbhrzvawzbyftqixrrizxuqrnygfcwvbethtgkgyucrifhpcqaydwsgvlcpuevgloofobpijilifyimpybruuspkvctrjpdsixyloxfaorvmkefxnfhfuwfnezpzsnoxfjpblpyqemkwczrdvvzqyalxdnqobxrzqvdpyzvpnvtvoilduhkiplghutgxdypilssrotiabiqjralaofsnhizhfqlgbhjuetehbjrajgliirhkboqxjhidpetttuopcehgcgrhdquoevilpiskwwnqfojxnbrptbsmbujpnubecfrddvwtvggzxpforuhapdgrnxsmyqgvhzneyoydpjxfvqnxsmswyvvvfptutkxmywewopmhzttfulvfnagsyxrpioiqjmxjhhouwvdxunbmfsxynjh"); + return sb.toString(); + } + + private static String build100001String() { + final StringBuilder sb = new StringBuilder(); + sb.append(build100kString()); + sb.append("a"); + return sb.toString(); + } +} diff --git a/src/test/java/dev/stegmaier/leetcode/controllers/questions/Q1106ParsingABooleanExpressionControllerTest.java b/src/test/java/dev/stegmaier/leetcode/controllers/questions/Q1106ParsingABooleanExpressionControllerTest.java index c03c639..8447f7b 100644 --- a/src/test/java/dev/stegmaier/leetcode/controllers/questions/Q1106ParsingABooleanExpressionControllerTest.java +++ b/src/test/java/dev/stegmaier/leetcode/controllers/questions/Q1106ParsingABooleanExpressionControllerTest.java @@ -9,7 +9,7 @@ import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; -import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.test.context.bean.override.mockito.MockitoBean; import org.springframework.test.web.servlet.MockMvc; @WebMvcTest(Q1106ParsingABooleanExpressionController.class) @@ -17,7 +17,7 @@ class Q1106ParsingABooleanExpressionControllerTest { @Autowired private MockMvc mockMvc; - @MockBean private Q1106BooleanParsingService booleanParsingService; + @MockitoBean private Q1106BooleanParsingService booleanParsingService; @Test void testQuestion1106PageLoads() throws Exception { diff --git a/src/test/java/dev/stegmaier/leetcode/controllers/questions/Q3085MinimumDeletionstoMakeStringKSpecialControllerTest.java b/src/test/java/dev/stegmaier/leetcode/controllers/questions/Q3085MinimumDeletionstoMakeStringKSpecialControllerTest.java new file mode 100644 index 0000000..e94b689 --- /dev/null +++ b/src/test/java/dev/stegmaier/leetcode/controllers/questions/Q3085MinimumDeletionstoMakeStringKSpecialControllerTest.java @@ -0,0 +1,64 @@ +package dev.stegmaier.leetcode.controllers.questions; + +import static org.mockito.Mockito.when; +import static org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders.post; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; + +import dev.stegmaier.leetcode.services.LeetCodeQuestions.Q3085MinimumDeletionService; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; +import org.springframework.test.context.bean.override.mockito.MockitoBean; +import org.springframework.test.web.servlet.MockMvc; + +@WebMvcTest(Q3085MinimumDeletionstoMakeStringKSpecialController.class) +class Q3085MinimumDeletionstoMakeStringKSpecialControllerTest { + @Autowired private MockMvc mockMvc; + + @MockitoBean private Q3085MinimumDeletionService minimumDeletionService; + + @Test + void testQuestion3085PageLoads() throws Exception { + mockMvc + .perform(get("/questions/3085-Minimum-Deletions-To-Make-String-K-Special")) + .andExpect(status().isOk()) + .andExpect(view().name("questions/3085-Minimum-Deletions-To-Make-String-K-Special")) + .andExpect( + content() + .string( + org.hamcrest.Matchers.containsString( + "Minimum Deletions To Make String K-Special"))); + } + + @Test + void testHandleQuestion3085Input() throws Exception { + // Mocking service result + when(minimumDeletionService.getMinimumDeletions("aaaabbbccc", 12)).thenReturn(0); + + mockMvc + .perform( + post("/questions/3085-Minimum-Deletions-To-Make-String-K-Special") + .param("expression", "aaaabbbccc") + .param("kValue", "12")) + .andExpect(status().isOk()) + .andExpect(model().attribute("result", "minimum number of deletions: 0")) + .andExpect(view().name("questions/3085-Minimum-Deletions-To-Make-String-K-Special")); + } + + @Test + void testHandleQuestion3085Input_InvalidExpression() throws Exception { + // Mocking service to throw an IllegalArgumentException + when(minimumDeletionService.getMinimumDeletions("invalid", 12)) + .thenThrow(new IllegalArgumentException()); + + mockMvc + .perform( + post("/questions/3085-Minimum-Deletions-To-Make-String-K-Special") + .param("expression", "invalid") + .param("kValue", "12")) + .andExpect(status().isOk()) + .andExpect(model().attribute("result", "Invalid input. Please enter a valid input.")) + .andExpect(view().name("questions/3085-Minimum-Deletions-To-Make-String-K-Special")); + } +} diff --git a/src/test/java/dev/stegmaier/leetcode/services/LeetCodeQuestions/Q3085MinimumDeletionServiceTest.java b/src/test/java/dev/stegmaier/leetcode/services/LeetCodeQuestions/Q3085MinimumDeletionServiceTest.java new file mode 100644 index 0000000..f15cd7f --- /dev/null +++ b/src/test/java/dev/stegmaier/leetcode/services/LeetCodeQuestions/Q3085MinimumDeletionServiceTest.java @@ -0,0 +1,157 @@ +package dev.stegmaier.leetcode.services.LeetCodeQuestions; + +import static dev.stegmaier.leetcode.constants.Q3085Constants.STRING_WITH_100000_CHARACTERS; +import static dev.stegmaier.leetcode.constants.Q3085Constants.STRING_WITH_100001_CHARACTERS; +import static org.junit.jupiter.api.Assertions.*; + +import org.junit.jupiter.api.Test; + +class Q3085MinimumDeletionServiceTest { + + private final Q3085MinimumDeletionService q3085MinimumDeletionService = + new Q3085MinimumDeletionService(); + + @Test + void shouldHandleBasicStringWithKValueAsZero() { + String inputString = "aabcaba"; + int inputKValue = 0; + + int result = q3085MinimumDeletionService.getMinimumDeletions(inputString, inputKValue); + + assertEquals(3, result); + } + + @Test + void shouldHandleBasicStringWithKValueAsTwo() { + String inputString = "dabdcbdcdcd"; + int inputKValue = 2; + + int result = q3085MinimumDeletionService.getMinimumDeletions(inputString, inputKValue); + + assertEquals(2, result); + } + + @Test + void shouldHandleStringWithManyRepeatingCharacters() { + String inputString = "aaabaaa"; + int inputKValue = 2; + + int result = q3085MinimumDeletionService.getMinimumDeletions(inputString, inputKValue); + + assertEquals(1, result); + } + + /* + @Test + void exceptionTesting() { + MyException thrown = assertThrows( + MyException.class, + () -> myObject.doThing(), + "Expected doThing() to throw, but it didn't" + ); + + assertTrue(thrown.getMessage().contains("Stuff")); + } + */ + @Test + void shouldNotHandleStringOver100000CharactersLong() { + String inputString = STRING_WITH_100001_CHARACTERS; + int inputKValue = 0; + + IllegalArgumentException illegalArgumentException = + assertThrows( + IllegalArgumentException.class, + () -> q3085MinimumDeletionService.getMinimumDeletions(inputString, inputKValue), + "Expected q3085MinimumDeletionService to throw an exception when a string with more than 100,000 characters was provided"); + + assertEquals( + "expression length exceeds 10⁵", + illegalArgumentException.getMessage(), + "q3085MinimumDeletionService did not throw the correct exception message when a string with more than 100,000 characters was provided"); + } + + @Test + void shouldNotHandleStringLessThanOneCharacterInLength() { + String inputString = ""; + int inputKValue = 0; + + IllegalArgumentException illegalArgumentException = + assertThrows( + IllegalArgumentException.class, + () -> q3085MinimumDeletionService.getMinimumDeletions(inputString, inputKValue), + "Expected q3085MinimumDeletionService to throw an exception when a string smaller than 1 character was provided"); + + assertEquals( + "expression length less than 1", + illegalArgumentException.getMessage(), + "q3085MinimumDeletionService did not throw the correct exception message when a string smaller than 1 character was provided"); + } + + @Test + void shouldNotHandleKValueOver100000() { + String inputString = STRING_WITH_100000_CHARACTERS; + int inputKValue = 100001; + + IllegalArgumentException illegalArgumentException = + assertThrows( + IllegalArgumentException.class, + () -> q3085MinimumDeletionService.getMinimumDeletions(inputString, inputKValue), + "Expected q3085MinimumDeletionService to throw an exception when a K value greater than 100,000 was provided"); + + assertEquals( + "K value provided is greater than 10⁵", + illegalArgumentException.getMessage(), + "q3085MinimumDeletionService did not throw the correct exception message when a K value greater than 100,000 was provided"); + } + + @Test + void shouldNotHandleKValueLessThanZero() { + String inputString = "aabbcc"; + int inputKValue = -1; + + IllegalArgumentException illegalArgumentException = + assertThrows( + IllegalArgumentException.class, + () -> q3085MinimumDeletionService.getMinimumDeletions(inputString, inputKValue), + "Expected q3085MinimumDeletionService to throw an exception when a K value less than zero was provided"); + + assertEquals( + "K value provided is less than 0", + illegalArgumentException.getMessage(), + "q3085MinimumDeletionService did not throw the correct exception message when a K value less than zero was provided"); + } + + @Test + void shouldNotHandleNullString() { + String inputString = null; + int inputKValue = 0; + + NullPointerException nullPointerException = + assertThrows( + NullPointerException.class, + () -> q3085MinimumDeletionService.getMinimumDeletions(inputString, inputKValue), + "Expected q3085MinimumDeletionService to throw an exception when a null string was provided"); + + assertEquals( + "expression is somehow null", + nullPointerException.getMessage(), + "q3085MinimumDeletionService did not throw the correct exception message when a null string was provided"); + } + + @Test + void shouldNotHandleNumericCharacters() { + String inputString = "aabbcc12345abc"; + int inputKValue = 0; + + IllegalArgumentException illegalArgumentException = + assertThrows( + IllegalArgumentException.class, + () -> q3085MinimumDeletionService.getMinimumDeletions(inputString, inputKValue), + "Expected q3085MinimumDeletionService to throw an exception when an invalid string was provided"); + + assertEquals( + "Expression does not contain only lowercase letters", + illegalArgumentException.getMessage(), + "q3085MinimumDeletionService did not throw the correct exception message when an invalid string was provided"); + } +} diff --git a/src/test/java/dev/stegmaier/leetcode/services/QuestionServiceTest.java b/src/test/java/dev/stegmaier/leetcode/services/QuestionServiceTest.java index 8b88d3d..ab5cbb8 100644 --- a/src/test/java/dev/stegmaier/leetcode/services/QuestionServiceTest.java +++ b/src/test/java/dev/stegmaier/leetcode/services/QuestionServiceTest.java @@ -16,10 +16,10 @@ void testGetAllQuestions() { List questions = questionService.getAllQuestions(); // Verify the size of the list - assertEquals(3, questions.size(), "Expected 3 questions in the list"); + assertEquals(4, questions.size(), "Expected 4 questions in the list"); // Verify the details of each question - Question q1 = questions.get(0); + Question q1 = questions.getFirst(); assertEquals(1, q1.getId()); assertEquals("Addition Question", q1.getTitle()); assertEquals("/questions/addition", q1.getUrl());