{"data":{"id":"10.6084/m9.figshare.94593","type":"dois","attributes":{"doi":"10.6084/m9.figshare.94593","prefix":"10.6084","suffix":"m9.figshare.94593","identifiers":[],"alternateIdentifiers":[],"creators":[{"name":"Rigo, Daniele De","nameType":"Personal","givenName":"Daniele De","familyName":"Rigo","affiliation":[],"nameIdentifiers":[{"schemeUri":"https://orcid.org","nameIdentifier":"https://orcid.org/0000-0003-0863-2670","nameIdentifierScheme":"ORCID"}]}],"titles":[{"title":"Portable pseudo-random reference sequences with Mersenne Twister using GNU Octave. Mastrave project technical report"}],"publisher":"figshare","container":{},"publicationYear":2012,"subjects":[{"subject":"Statistics"},{"subject":"FOS: Mathematics","schemeUri":"http://www.oecd.org/science/inno/38235147.pdf","subjectScheme":"Fields of Science and Technology (FOS)"},{"subject":"FOS: Mathematics","subjectScheme":"Fields of Science and Technology (FOS)"},{"subject":"80309 Software Engineering","subjectScheme":"FOR"},{"subject":"FOS: Computer and information sciences","schemeUri":"http://www.oecd.org/science/inno/38235147.pdf","subjectScheme":"Fields of Science and Technology (FOS)"},{"subject":"FOS: Computer and information sciences","subjectScheme":"Fields of Science and Technology (FOS)"},{"subject":"Applied Computer Science"}],"contributors":[],"dates":[{"date":"2012-08-24","dateType":"Created"},{"date":"2015-12-02","dateType":"Updated"},{"date":"2012","dateType":"Issued"}],"language":null,"types":{"ris":"DATA","bibtex":"misc","citeproc":"dataset","schemaOrg":"Dataset","resourceType":"Dataset","resourceTypeGeneral":"Dataset"},"relatedIdentifiers":[],"relatedItems":[],"sizes":["10622645999 Bytes"],"formats":[],"version":null,"rightsList":[{"rights":"Creative Commons Attribution 4.0 International","rightsUri":"https://creativecommons.org/licenses/by/4.0/legalcode","schemeUri":"https://spdx.org/licenses/","rightsIdentifier":"cc-by-4.0","rightsIdentifierScheme":"SPDX"}],"descriptions":[{"description":"de Rigo, D. (2012). Portable pseudo-random reference sequences with Mersenne Twister using GNU Octave. Mastrave project technical report. FigShare Digital Science. doi: 10.6084/m9.figshare.94593 Portable pseudo-random reference sequences with Mersenne Twister using GNU Octave Mastrave project technical report Daniele de Rigo \u003cstrong\u003e\u003cbr\u003e\u003c/strong\u003e \u003cstrong\u003eAbstract:\u003c/strong\u003e Computationally intensive numerical tasks such as those involving statistical resampling, evolutionary techniques or Monte Carlo based applications are known to require robust algorithms for generating large sequences of pseudo-random numbers (PRN). While several languages, libraries and computing environments offer suitable PRN generators, the underlying algorithms and parametrization widely differ. Therefore, easily replicating a certain PRN sequence generally implies forcing researchers to use a very specific language or computing environment, also paying attention to its version, possible critical dependencies or even operating system and computer architecture. Despite the awareness of the benefits of reproducible research is rapidly growing, the definition itself of “reproducibility” for PRN based applications may lead to diverging interpretations and expectations. Where the cardinality of PRN sequences needed for data to be processed is relatively moderate, the paradigm of reproducible research is in principle suitable to be applied not only to algorithms, free software, data and metadata (\u003cem\u003eclassic reproducible research\u003c/em\u003e), but also to the involved pseudo-random sequences themselves (\u003cem\u003edeep reproducible researc\u003c/em\u003eh). This would allow not only the “typical” scientific results to be reproducible “except for PRN-related statistical fluctuations”, but also the exact results published by a research team to be independently reproduced by other scientists - without of course preventing sensitivity analysis with different PRN sequences, as even classic reproducible research should easily allow. However, finding reference sequences of pseudo random numbers suitable to enable such a deep reproducibility may be surprisingly difficult. Here, sequences eligible to be used as reference dataset of uniformly distributed pseudo-random numbers are presented. The dataset of sequences has been generated using Mersenne Twister with a period of 2\u003csup\u003e^\u003c/sup\u003e\u003csup\u003e19937\u003c/sup\u003e-1, as implemented in GNU Octave (version 3.6.1) with the Mastrave modelling library. The sequences are available in plain text format and also in the format MATLAB version 7, which is portable in both GNU Octave and MATLAB computing environments. The plain text format uses a fixed number of characters per each PRN so allowing random access to sparse PRNs to be easily done in constant time without needing a whole file to be loaded. This straightforward solution is language neutral, with the advantage of enabling wide and immediate portability for the presented reference PRN dataset, irrespective of the language, libraries, computing environment of choice for the users. \u003cstrong\u003e\u003cbr\u003e\u003c/strong\u003e \u003cstrong\u003eNaming conventions:\u003c/strong\u003e Each file \u003cem\u003e pseudorand_seq_[N].[ext]\u003c/em\u003e contains a sequence of N pseudo-random numbers, uniformly distributed (generated using a Mersenne Twister with a period of 2\u003csup\u003e^\u003c/sup\u003e\u003csup\u003e19937\u003c/sup\u003e-1, as implemented in GNU Octave version 3.6.1). The extension may be “txt” for the pure text sequence of PRN (35 characters – including the endline one – and one PRN per each line) or “mat” for the corresponding format MATLAB version 7 (containing a structure with two fields: the filed “values” contains N numerical PRN in double precision; the field “string” contains a matrix of characters witn N rows and 24 columns – the endline character being omitted – the last one fulfilling the constraint to only contain digits whose value is “0” ). \u003cbr\u003e \u003cstrong\u003eDownload (permanent URLs aside from the ones provided at \u003c/strong\u003ehttp://dx.doi.org/10.6084/m9.figshare.94593\u003cstrong\u003e):\u003c/strong\u003e \u003cbr\u003ehttp://mastrave.org/doc/refdata/fs94593/10.txt pseudorand_seq_10.txt\u003cbr\u003ehttp://mastrave.org/doc/refdata/fs94593/100.txt pseudorand_seq_100.txt\u003cbr\u003ehttp://mastrave.org/doc/refdata/fs94593/1000.txt pseudorand_seq_1000.txt\u003cbr\u003ehttp://mastrave.org/doc/refdata/fs94593/10000.txt pseudorand_seq_10000.txt\u003cbr\u003ehttp://mastrave.org/doc/refdata/fs94593/100000.txt pseudorand_seq_100000.txt\u003cbr\u003ehttp://mastrave.org/doc/refdata/fs94593/1000000.txt pseudorand_seq_1000000.txt\u003cbr\u003e \u003cbr\u003ehttp://mastrave.org/doc/refdata/fs94593/10.mat pseudorand_seq_10.mat\u003cbr\u003ehttp://mastrave.org/doc/refdata/fs94593/100.mat pseudorand_seq_100.mat\u003cbr\u003ehttp://mastrave.org/doc/refdata/fs94593/1000.mat pseudorand_seq_1000.mat\u003cbr\u003ehttp://mastrave.org/doc/refdata/fs94593/10000.mat pseudorand_seq_10000.mat\u003cbr\u003ehttp://mastrave.org/doc/refdata/fs94593/100000.mat pseudorand_seq_100000.mat\u003cbr\u003ehttp://mastrave.org/doc/refdata/fs94593/1000000.mat pseudorand_seq_1000000.mat\u003cbr\u003e \u003cbr\u003e \u003cstrong\u003eMD5 checksums\u003c/strong\u003e ( http://mastrave.org/doc/refdata/fs94593/md5 ): d25fd2747eea3c1ab0aa81ef64aa7769 pseudorand_seq_10.txt\u003cbr\u003ea26711dfc2fafa7fac3dc0d1cc6472cd pseudorand_seq_100.txt\u003cbr\u003eeb54b41e8dd7c946a9799342c27f4c90 pseudorand_seq_1000.txt\u003cbr\u003ebdf6b4afd237ccf0fe4a97bf5c847f1d pseudorand_seq_10000.txt\u003cbr\u003e20b8398775a93e59533e9f14ba402caa pseudorand_seq_100000.txt\u003cbr\u003e00b1d615be143d5dd093ba6bd066a833 pseudorand_seq_1000000.txt \u003cstrong\u003eSHA1 checksums\u003c/strong\u003e ( http://mastrave.org/doc/refdata/fs94593/sha1 ): 837e0f2793d1b0767f6eb03868a7e081ea530073 pseudorand_seq_10.txt\u003cbr\u003e2bb59e7cc5369eb896df86061e720baaa4da1d96 pseudorand_seq_100.txt\u003cbr\u003e79ae593da0b052bf11713155cd6e4f7d3906baff pseudorand_seq_1000.txt\u003cbr\u003ee23bd2e157f5447096f36e704a84aa77224ab9ae pseudorand_seq_10000.txt\u003cbr\u003e3b4a088752cebee4158a8cebfdd88193c4a03872 pseudorand_seq_100000.txt\u003cbr\u003eaa9fb09d59c9b331fbba2360c345e47ede032b0e pseudorand_seq_1000000.txt \u003cbr\u003e\u003cbr\u003eThe Mastrave modelling library offers the module\u003cstrong\u003e rprand\u003c/strong\u003e (acronym for \u003cem\u003e\u003cstrong\u003er\u003c/strong\u003eeproducible \u003cstrong\u003ep\u003c/strong\u003eseudo-\u003cstrong\u003erand\u003c/strong\u003eom generator\u003c/em\u003e) which allows all the PRN reference sequences to be exactly reproduced in a variety of versions of GNU Octave and MATLAB computing environments, by silently downloading and importing the corresponding published reference files. \u003cbr\u003e\u003cbr\u003eThe PRN sequences can also be easily imported and used in a variety of languages, operating systems and computer architectures (see Appendix B for a further discussion). This is straightforward to do by directly importing the plain text files listing the PRN reference sequences in \u003cem\u003ecsv\u003c/em\u003e format.\u003cbr\u003e\u003cbr\u003eTherefore, users and applications of the published PRN reference sequences may not be directly interested in their exact numerical reproducibility. The exact numerical reproducibility by re-generation of the PRN sequences (\u003cem\u003edeep reproducible research\u003c/em\u003e) is the subject of the Appendix A.\u003cbr\u003e \u003cbr\u003e\u003cbr\u003e\u003cstrong\u003eAppendix A: reproducing the PRN reference sequences within GNU Octave\u003c/strong\u003e \u003cbr\u003e\u003cbr\u003e\u003cbr\u003eThe proposed sequences can be numerically reproduced within the GNU Octave computing environment. The GNU Octave version with which the sequences have been generated is the version 3.6.1. \u003cbr\u003eAlternative strategies for generating reference PRN sequences could have implied dedicated source code to be released as an autonomous free software package.\u003cbr\u003e\u003cbr\u003eThis possible strategy was discarded due to the need for the PRN sequences to be as reliable as possible so to offer long-term general reusability. Extensive testing of both PRN generators' algorithms and implementations is of obvious importance. While systematic, exhaustive testing of all aspects of nontrivial code is almost impossible, linking this phase to already established free software numerical packages with broad diffusion and endorsement among computational scientists is perhaps the safest way for mitigating the risk of generating unexpectedly biased PRN sequences.\u003cbr\u003e\u003cbr\u003eGNU Octave is a well-established and widely used environment for computational science applications. It is also free software and part of the GNU project, which is one of the most relevant free software projects. GNU Octave belongs to the GNU list of high priority projects, where its development is supported as high-level language for numerical computations. This further corroborates the selection of GNU Octave as a suitable free software environment for ensuring the long-term availability to run the PRN sequences' source code.\u003cbr\u003e\u003cbr\u003eThe following codelet generates the double precision floating-point PRN reference sequences (GNU Octave language):\u003cbr\u003e\u003cbr\u003e assert( exist( 'OCTAVE_VERSION' ) )\u003cbr\u003e assert( isequal( OCTAVE_VERSION, '3.6.1' ) )\u003cbr\u003e \u003cbr\u003e \u003cem\u003e% Initializating the Mersenne Twister PRN generator\u003c/em\u003e\u003cbr\u003e rand( 'seed', pi )\u003cbr\u003e rand( 1000, 1000 );\u003cbr\u003e \u003cbr\u003e \u003cem\u003e% Generating the reference sequences\u003c/em\u003e\u003cbr\u003e pseudorand_seq_10 = rand( 10 , 1 );\u003cbr\u003e pseudorand_seq_100 = rand( 1e2, 1 );\u003cbr\u003e pseudorand_seq_1000 = rand( 1e3, 1 );\u003cbr\u003e pseudorand_seq_10000 = rand( 1e4, 1 );\u003cbr\u003e pseudorand_seq_100000 = rand( 1e5, 1 );\u003cbr\u003e pseudorand_seq_1000000 = rand( 1e6, 1 );\u003cbr\u003e\u003cbr\u003e\u003cbr\u003eCompliancy checks (GNU Octave language: the Mastrave modelling library is also required):\u003cbr\u003e \u003cbr\u003e assert( rprand( 10 , 10 , 0 ) == pseudorand_seq_10 )\u003cbr\u003e assert( rprand( 1e2, 1e2, 0 ) == pseudorand_seq_100 )\u003cbr\u003e assert( rprand( 1e3, 1e3, 0 ) == pseudorand_seq_1000 )\u003cbr\u003e assert( rprand( 1e4, 1e4, 0 ) == pseudorand_seq_10000 )\u003cbr\u003e assert( rprand( 1e5, 1e5, 0 ) == pseudorand_seq_100000 )\u003cbr\u003e assert( rprand( 1e6, 1e6, 0 ) == pseudorand_seq_1000000 )\u003cbr\u003e\u003cbr\u003e\u003cbr\u003e\u003cbr\u003e\u003cstrong\u003eAppendix B: low-level memory representation of the PRN seed\u003c/strong\u003e \u003cbr\u003e\u003cbr\u003e The seed of the PRN generator is the IEEE\u003cstrong\u003e\u003c/strong\u003e754 double precision floating-point value approximating the mathematical constant \u003cstrong\u003eπ\u003c/strong\u003e. The following codelets are expressed in GNU Octave language (the assertions check necessary but not sufficient conditions): \u003cbr\u003e assert( pi == 3.1415926535897932 )\u003cbr\u003e\u003cbr\u003e \u003cstrong\u003epi_bytecode\u003c/strong\u003e = double( typecast( pi, 'uint8' ) ) ;\u003cbr\u003e \u003cstrong\u003epi_hexcode\u003cem\u003e \u003c/em\u003e\u003c/strong\u003e = dec2hex( double( typecast( pi, 'uint8' ) ) );\u003cbr\u003e\u003cbr\u003e\u003cbr\u003ewhere \u003cstrong\u003epi_bytecod\u003c/strong\u003e\u003cstrong\u003ee\u003c/strong\u003e value is (unsigned integers):\u003cbr\u003e\u003cbr\u003e 24\u003cbr\u003e 45\u003cbr\u003e 68\u003cbr\u003e 84\u003cbr\u003e 251\u003cbr\u003e 33\u003cbr\u003e 9\u003cbr\u003e 64\u003cbr\u003e\u003cbr\u003e\u003cbr\u003eand \u003cstrong\u003epi_hexcode\u003c/strong\u003e value is (hexadecimal values):\u003cbr\u003e\u003cbr\u003e 18\u003cbr\u003e 2D\u003cbr\u003e 44\u003cbr\u003e 54\u003cbr\u003e FB\u003cbr\u003e 21\u003cbr\u003e 09\u003cbr\u003e 40\u003cbr\u003e\u003cbr\u003e\u003cbr\u003ewhich can be reverted to the original double format by means of the codelet:\u003cbr\u003e\u003cbr\u003e typecast( uint8( hex2dec( pi_hexcode ) ), 'double' )\u003cbr\u003e\u003cbr\u003eso to satisfy the constraint:\u003cbr\u003e\u003cbr\u003e assert( typecast( uint8( hex2dec( pi_hexcode ) ), 'double' ) == pi )\u003cbr\u003e \u003cbr\u003e\u003cbr\u003eThe described byte- and hexadecimal-code transformations can also be implemented by means of standard IO low-level functions. In GNU Octave/MATLAB languages the corresponding IO low-level codelet would be:\u003cbr\u003e\u003cbr\u003e tmp = tempname;\u003cbr\u003e fid = fopen( tmp , 'wb' ); \u003cbr\u003e fwrite( fid, pi, 'double', 0 , 'ieee-le' ); \u003cbr\u003e fclose( fid );\u003cbr\u003e fid = fopen( tmp , 'rb' );\u003cbr\u003e pi_bytecode = fread( fid , 'uint8' );\u003cbr\u003e fclose( fid );\u003cbr\u003e delete( tmp );\u003cbr\u003e\u003cbr\u003eThis codelet explicitly set as endianness the little-endian convention. Provided attention is paid to endianness, the codelet is straightforward to be translated in other languages (C, C++, ...) for which at least the scalar version of the standard functions fopen, fwrite, fread, fclose is available. This way, the exact binary equivalence of the floating point seed (pi) within a given computational environment can be checked irrespective of the language, operating system and computer architecture of choice.\u003cbr\u003e\u003cbr\u003eA successful compliancy check of the seed's low-level representation should be recommended as a necessary (but not sufficient) condition because the pseudo-random reference sequences are of double-precision floating point values and discrepancies (especially loss of precision) in the way values are loaded in the memory may lead to irreproducible results (e.g. when dealing with PRN-influenced chaotic systems).\u003cbr\u003e\u003cbr\u003e\u003cbr\u003e","descriptionType":"Abstract"}],"geoLocations":[],"fundingReferences":[],"xml":"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHJlc291cmNlIHhtbG5zPSJodHRwOi8vZGF0YWNpdGUub3JnL3NjaGVtYS9rZXJuZWwtNCIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vZGF0YWNpdGUub3JnL3NjaGVtYS9rZXJuZWwtNCBodHRwOi8vc2NoZW1hLmRhdGFjaXRlLm9yZy9tZXRhL2tlcm5lbC00LjEvbWV0YWRhdGEueHNkIj4KICA8aWRlbnRpZmllciBpZGVudGlmaWVyVHlwZT0iRE9JIj4xMC42MDg0L005LkZJR1NIQVJFLjk0NTkzPC9pZGVudGlmaWVyPgogIDxjcmVhdG9ycz4KICAgIDxjcmVhdG9yPgogICAgICA8Y3JlYXRvck5hbWU+RGFuaWVsZSBkZSBSaWdvPC9jcmVhdG9yTmFtZT4KICAgICAgPG5hbWVJZGVudGlmaWVyIG5hbWVJZGVudGlmaWVyU2NoZW1lPSJPUkNJRCIgc2NoZW1lVVJJPSJodHRwOi8vb3JjaWQub3JnIj4wMDAwLTAwMDMtMDg2My0yNjcwPC9uYW1lSWRlbnRpZmllcj4KICAgIDwvY3JlYXRvcj4KICA8L2NyZWF0b3JzPgogIDx0aXRsZXM+CiAgICA8dGl0bGU+UG9ydGFibGUgcHNldWRvLXJhbmRvbSByZWZlcmVuY2Ugc2VxdWVuY2VzIHdpdGggTWVyc2VubmUgVHdpc3RlciB1c2luZyBHTlUgT2N0YXZlLiBNYXN0cmF2ZSBwcm9qZWN0IHRlY2huaWNhbCByZXBvcnQ8L3RpdGxlPgogIDwvdGl0bGVzPgogIDxkZXNjcmlwdGlvbnM+CiAgICA8ZGVzY3JpcHRpb24gZGVzY3JpcHRpb25UeXBlPSJBYnN0cmFjdCI+Jmx0O3AmZ3Q7wqAmbHQ7L3AmZ3Q7CiZsdDtwJmd0O2RlIFJpZ28sIEQuICgyMDEyKS4gUG9ydGFibGUgcHNldWRvLXJhbmRvbSByZWZlcmVuY2Ugc2VxdWVuY2VzIHdpdGggTWVyc2VubmUgVHdpc3RlciB1c2luZyBHTlUgT2N0YXZlLiBNYXN0cmF2ZSBwcm9qZWN0IHRlY2huaWNhbCByZXBvcnQuIEZpZ1NoYXJlIERpZ2l0YWwgU2NpZW5jZS4gZG9pOiAmbHQ7YSBocmVmPSJodHRwOi8vZHguZG9pLm9yZy8xMC42MDg0L205LmZpZ3NoYXJlLjk0NTkzIiZndDsxMC42MDg0L205LmZpZ3NoYXJlLjk0NTkzJmx0Oy9hJmd0OyZsdDsvcCZndDsKJmx0O3AmZ3Q7wqAmbHQ7L3AmZ3Q7CiZsdDtwJmd0O1BvcnRhYmxlIHBzZXVkby1yYW5kb20gcmVmZXJlbmNlIHNlcXVlbmNlcyB3aXRoIE1lcnNlbm5lIFR3aXN0ZXIgdXNpbmcgR05VIE9jdGF2ZSZsdDsvcCZndDsKJmx0O3AmZ3Q7wqAmbHQ7L3AmZ3Q7CiZsdDtwJmd0O01hc3RyYXZlIHByb2plY3QgdGVjaG5pY2FsIHJlcG9ydCZsdDsvcCZndDsKJmx0O3AmZ3Q7wqAmbHQ7L3AmZ3Q7CiZsdDtwJmd0O0RhbmllbGUgZGUgUmlnbyZsdDsvcCZndDsKJmx0O3AmZ3Q7Jmx0O3N0cm9uZyZndDsmbHQ7YnImZ3Q7Jmx0Oy9zdHJvbmcmZ3Q7Jmx0Oy9wJmd0OwombHQ7cCZndDsmbHQ7c3Ryb25nJmd0O0Fic3RyYWN0OiZsdDsvc3Ryb25nJmd0OyBDb21wdXRhdGlvbmFsbHkgaW50ZW5zaXZlIG51bWVyaWNhbCB0YXNrcyBzdWNoIGFzIHRob3NlIGludm9sdmluZyBzdGF0aXN0aWNhbCByZXNhbXBsaW5nLCBldm9sdXRpb25hcnkgdGVjaG5pcXVlcyBvciBNb250ZSBDYXJsbyBiYXNlZCBhcHBsaWNhdGlvbnMgYXJlIGtub3duIHRvIHJlcXVpcmUgcm9idXN0IGFsZ29yaXRobXMgZm9yIGdlbmVyYXRpbmcgbGFyZ2Ugc2VxdWVuY2VzIG9mIHBzZXVkby1yYW5kb20gbnVtYmVycyAoUFJOKS4gV2hpbGUgc2V2ZXJhbCBsYW5ndWFnZXMsIGxpYnJhcmllcyBhbmQgY29tcHV0aW5nIGVudmlyb25tZW50cyBvZmZlciBzdWl0YWJsZSBQUk4gZ2VuZXJhdG9ycywgdGhlIHVuZGVybHlpbmcgYWxnb3JpdGhtcyBhbmQgcGFyYW1ldHJpemF0aW9uIHdpZGVseSBkaWZmZXIuIFRoZXJlZm9yZSwgZWFzaWx5IHJlcGxpY2F0aW5nIGEgY2VydGFpbiBQUk4gc2VxdWVuY2UgZ2VuZXJhbGx5IGltcGxpZXMgZm9yY2luZyByZXNlYXJjaGVycyB0byB1c2UgYSB2ZXJ5IHNwZWNpZmljIGxhbmd1YWdlIG9yIGNvbXB1dGluZyBlbnZpcm9ubWVudCwgYWxzbyBwYXlpbmcgYXR0ZW50aW9uIHRvIGl0cyB2ZXJzaW9uLCBwb3NzaWJsZSBjcml0aWNhbCBkZXBlbmRlbmNpZXMgb3IgZXZlbiBvcGVyYXRpbmcgc3lzdGVtIGFuZCBjb21wdXRlciBhcmNoaXRlY3R1cmUuJmx0Oy9wJmd0OwombHQ7cCZndDtEZXNwaXRlIHRoZSBhd2FyZW5lc3Mgb2YgdGhlIGJlbmVmaXRzIG9mIHJlcHJvZHVjaWJsZSByZXNlYXJjaCBpcyByYXBpZGx5IGdyb3dpbmcsIHRoZSBkZWZpbml0aW9uIGl0c2VsZiBvZiDigJxyZXByb2R1Y2liaWxpdHnigJ0gZm9yIFBSTiBiYXNlZCBhcHBsaWNhdGlvbnMgbWF5IGxlYWQgdG8gZGl2ZXJnaW5nIGludGVycHJldGF0aW9ucyBhbmQgZXhwZWN0YXRpb25zLiBXaGVyZSB0aGUgY2FyZGluYWxpdHkgb2YgUFJOIHNlcXVlbmNlcyBuZWVkZWQgZm9yIGRhdGEgdG8gYmUgcHJvY2Vzc2VkIGlzIHJlbGF0aXZlbHkgbW9kZXJhdGUsIHRoZSBwYXJhZGlnbSBvZiByZXByb2R1Y2libGUgcmVzZWFyY2ggaXMgaW4gcHJpbmNpcGxlIHN1aXRhYmxlIHRvIGJlIGFwcGxpZWQgbm90IG9ubHkgdG8gYWxnb3JpdGhtcywgZnJlZSBzb2Z0d2FyZSwgZGF0YSBhbmQgbWV0YWRhdGEgKCZsdDtlbSZndDtjbGFzc2ljIHJlcHJvZHVjaWJsZSByZXNlYXJjaCZsdDsvZW0mZ3Q7KSwgYnV0IGFsc28gdG8gdGhlIGludm9sdmVkIHBzZXVkby1yYW5kb20gc2VxdWVuY2VzIHRoZW1zZWx2ZXMgKCZsdDtlbSZndDtkZWVwIHJlcHJvZHVjaWJsZSByZXNlYXJjJmx0Oy9lbSZndDtoKS4gVGhpcyB3b3VsZCBhbGxvdyBub3Qgb25seSB0aGUg4oCcdHlwaWNhbOKAnSBzY2llbnRpZmljIHJlc3VsdHMgdG8gYmUgcmVwcm9kdWNpYmxlIOKAnGV4Y2VwdCBmb3IgUFJOLXJlbGF0ZWQgc3RhdGlzdGljYWwgZmx1Y3R1YXRpb25z4oCdLCBidXQgYWxzbyB0aGUgZXhhY3QgcmVzdWx0cyBwdWJsaXNoZWQgYnkgYSByZXNlYXJjaCB0ZWFtIHRvIGJlIGluZGVwZW5kZW50bHkgcmVwcm9kdWNlZCBieSBvdGhlciBzY2llbnRpc3RzIC0gd2l0aG91dCBvZiBjb3Vyc2UgcHJldmVudGluZyBzZW5zaXRpdml0eSBhbmFseXNpcyB3aXRoIGRpZmZlcmVudCBQUk4gc2VxdWVuY2VzLCBhcyBldmVuIGNsYXNzaWMgcmVwcm9kdWNpYmxlIHJlc2VhcmNoIHNob3VsZCBlYXNpbHkgYWxsb3cuJmx0Oy9wJmd0OwombHQ7cCZndDtIb3dldmVyLCBmaW5kaW5nIHJlZmVyZW5jZSBzZXF1ZW5jZXMgb2YgcHNldWRvIHJhbmRvbSBudW1iZXJzIHN1aXRhYmxlIHRvIGVuYWJsZSBzdWNoIGEgZGVlcCByZXByb2R1Y2liaWxpdHkgbWF5IGJlIHN1cnByaXNpbmdseSBkaWZmaWN1bHQuIEhlcmUsIHNlcXVlbmNlcyBlbGlnaWJsZSB0byBiZSB1c2VkIGFzIHJlZmVyZW5jZSBkYXRhc2V0IG9mIHVuaWZvcm1seSBkaXN0cmlidXRlZCBwc2V1ZG8tcmFuZG9tIG51bWJlcnMgYXJlIHByZXNlbnRlZC4gVGhlIGRhdGFzZXQgb2Ygc2VxdWVuY2VzIGhhcyBiZWVuIGdlbmVyYXRlZCB1c2luZyBNZXJzZW5uZSBUd2lzdGVyIHdpdGggYSBwZXJpb2Qgb2YgMiZsdDtzdXAmZ3Q7XiZsdDsvc3VwJmd0OyZsdDtzdXAmZ3Q7MTk5MzcmbHQ7L3N1cCZndDstMSwgYXMgaW1wbGVtZW50ZWQgaW4gR05VIE9jdGF2ZSAodmVyc2lvbiAzLjYuMSkgd2l0aCB0aGUgTWFzdHJhdmUgbW9kZWxsaW5nIGxpYnJhcnkuIFRoZSBzZXF1ZW5jZXMgYXJlIGF2YWlsYWJsZSBpbiBwbGFpbiB0ZXh0IGZvcm1hdCBhbmQgYWxzbyBpbiB0aGUgZm9ybWF0IE1BVExBQiB2ZXJzaW9uIDcsIHdoaWNoIGlzIHBvcnRhYmxlIGluIGJvdGggR05VIE9jdGF2ZSBhbmQgTUFUTEFCIGNvbXB1dGluZyBlbnZpcm9ubWVudHMuIFRoZSBwbGFpbiB0ZXh0IGZvcm1hdCB1c2VzIGEgZml4ZWQgbnVtYmVyIG9mIGNoYXJhY3RlcnMgcGVyIGVhY2ggUFJOIHNvIGFsbG93aW5nIHJhbmRvbSBhY2Nlc3MgdG8gc3BhcnNlIFBSTnMgdG8gYmUgZWFzaWx5IGRvbmUgaW4gY29uc3RhbnQgdGltZSB3aXRob3V0IG5lZWRpbmcgYSB3aG9sZSBmaWxlIHRvIGJlIGxvYWRlZC4gVGhpcyBzdHJhaWdodGZvcndhcmQgc29sdXRpb24gaXMgbGFuZ3VhZ2UgbmV1dHJhbCwgd2l0aCB0aGUgYWR2YW50YWdlIG9mIGVuYWJsaW5nIHdpZGUgYW5kIGltbWVkaWF0ZSBwb3J0YWJpbGl0eSBmb3IgdGhlIHByZXNlbnRlZCByZWZlcmVuY2UgUFJOIGRhdGFzZXQsIGlycmVzcGVjdGl2ZSBvZiB0aGUgbGFuZ3VhZ2UsIGxpYnJhcmllcywgY29tcHV0aW5nIGVudmlyb25tZW50IG9mIGNob2ljZSBmb3IgdGhlIHVzZXJzLiZsdDsvcCZndDsKJmx0O3AmZ3Q7Jmx0O3N0cm9uZyZndDsmbHQ7YnImZ3Q7Jmx0Oy9zdHJvbmcmZ3Q7Jmx0Oy9wJmd0OwombHQ7cCZndDsmbHQ7c3Ryb25nJmd0O05hbWluZyBjb252ZW50aW9uczombHQ7L3N0cm9uZyZndDsmbHQ7L3AmZ3Q7CiZsdDtwJmd0O0VhY2ggZmlsZSZsdDsvcCZndDsKJmx0O3AmZ3Q7Jmx0O2VtJmd0O8KgwqDCoCBwc2V1ZG9yYW5kX3NlcV9bTl0uW2V4dF0mbHQ7L2VtJmd0OyZsdDsvcCZndDsKJmx0O3AmZ3Q7Y29udGFpbnMgYSBzZXF1ZW5jZSBvZiBOIHBzZXVkby1yYW5kb20gbnVtYmVycywgdW5pZm9ybWx5IGRpc3RyaWJ1dGVkIChnZW5lcmF0ZWQgdXNpbmcgYSBNZXJzZW5uZSBUd2lzdGVyIHdpdGggYSBwZXJpb2Qgb2YgMiZsdDtzdXAmZ3Q7XiZsdDsvc3VwJmd0OyZsdDtzdXAmZ3Q7MTk5MzcmbHQ7L3N1cCZndDstMSwgYXMgaW1wbGVtZW50ZWQgaW4gR05VIE9jdGF2ZSB2ZXJzaW9uIDMuNi4xKS4gJmx0Oy9wJmd0OwombHQ7cCZndDtUaGUgZXh0ZW5zaW9uIG1heSBiZSDigJx0eHTigJ0gZm9yIHRoZSBwdXJlIHRleHQgc2VxdWVuY2Ugb2YgUFJOICgzNSBjaGFyYWN0ZXJzIOKAkyBpbmNsdWRpbmcgdGhlIGVuZGxpbmUgb25lIOKAkyBhbmQgb25lIFBSTiBwZXIgZWFjaCBsaW5lKSBvciDigJxtYXTigJ0gZm9yIHRoZSBjb3JyZXNwb25kaW5nIGZvcm1hdCBNQVRMQUIgdmVyc2lvbiA3IChjb250YWluaW5nIGEgc3RydWN0dXJlIHdpdGggdHdvIGZpZWxkczogdGhlIGZpbGVkIOKAnHZhbHVlc+KAnSBjb250YWlucyBOIG51bWVyaWNhbCBQUk4gaW4gZG91YmxlIHByZWNpc2lvbjsgdGhlIGZpZWxkIOKAnHN0cmluZ+KAnSBjb250YWlucyBhIG1hdHJpeCBvZiBjaGFyYWN0ZXJzIHdpdG4gTiByb3dzIGFuZCAyNCBjb2x1bW5zIOKAkyB0aGUgZW5kbGluZSBjaGFyYWN0ZXIgYmVpbmcgb21pdHRlZCDigJMgdGhlIGxhc3Qgb25lIGZ1bGZpbGxpbmcgdGhlIGNvbnN0cmFpbnQgdG8gb25seSBjb250YWluIGRpZ2l0cyB3aG9zZSB2YWx1ZSBpcyDigJww4oCdICkuICZsdDsvcCZndDsKJmx0O3AmZ3Q7Jmx0O2JyJmd0OyZsdDsvcCZndDsKJmx0O3AmZ3Q7Jmx0O3N0cm9uZyZndDtEb3dubG9hZCAocGVybWFuZW50IFVSTHMgYXNpZGUgZnJvbSB0aGUgb25lcyBwcm92aWRlZCBhdCAmbHQ7L3N0cm9uZyZndDsmbHQ7YSBocmVmPSJodHRwOi8vZHguZG9pLm9yZy8xMC42MDg0L205LmZpZ3NoYXJlLjk0NTkzIiZndDtodHRwOi8vZHguZG9pLm9yZy8xMC42MDg0L205LmZpZ3NoYXJlLjk0NTkzJmx0Oy9hJmd0OyZsdDtzdHJvbmcmZ3Q7KTombHQ7L3N0cm9uZyZndDsmbHQ7L3AmZ3Q7CiZsdDtwJmd0OyZsdDticiZndDsmbHQ7YSBocmVmPSJodHRwOi8vbWFzdHJhdmUub3JnL2RvYy9yZWZkYXRhL2ZzOTQ1OTMvMTAudHh0IiZndDtodHRwOi8vbWFzdHJhdmUub3JnL2RvYy9yZWZkYXRhL2ZzOTQ1OTMvMTAudHh0Jmx0Oy9hJmd0O8KgwqDCoMKgwqAgcHNldWRvcmFuZF9zZXFfMTAudHh0Jmx0O2JyJmd0OyZsdDthIGhyZWY9Imh0dHA6Ly9tYXN0cmF2ZS5vcmcvZG9jL3JlZmRhdGEvZnM5NDU5My8xMDAudHh0IiZndDtodHRwOi8vbWFzdHJhdmUub3JnL2RvYy9yZWZkYXRhL2ZzOTQ1OTMvMTAwLnR4dCZsdDsvYSZndDvCoMKgwqDCoCBwc2V1ZG9yYW5kX3NlcV8xMDAudHh0Jmx0O2JyJmd0OyZsdDthIGhyZWY9Imh0dHA6Ly9tYXN0cmF2ZS5vcmcvZG9jL3JlZmRhdGEvZnM5NDU5My8xMDAwLnR4dCImZ3Q7aHR0cDovL21hc3RyYXZlLm9yZy9kb2MvcmVmZGF0YS9mczk0NTkzLzEwMDAudHh0Jmx0Oy9hJmd0O8KgwqDCoCBwc2V1ZG9yYW5kX3NlcV8xMDAwLnR4dCZsdDticiZndDsmbHQ7YSBocmVmPSJodHRwOi8vbWFzdHJhdmUub3JnL2RvYy9yZWZkYXRhL2ZzOTQ1OTMvMTAwMDAudHh0IiZndDtodHRwOi8vbWFzdHJhdmUub3JnL2RvYy9yZWZkYXRhL2ZzOTQ1OTMvMTAwMDAudHh0Jmx0Oy9hJmd0O8KgwqAgcHNldWRvcmFuZF9zZXFfMTAwMDAudHh0Jmx0O2JyJmd0OyZsdDthIGhyZWY9Imh0dHA6Ly9tYXN0cmF2ZS5vcmcvZG9jL3JlZmRhdGEvZnM5NDU5My8xMDAwMDAudHh0IiZndDtodHRwOi8vbWFzdHJhdmUub3JnL2RvYy9yZWZkYXRhL2ZzOTQ1OTMvMTAwMDAwLnR4dCZsdDsvYSZndDvCoCBwc2V1ZG9yYW5kX3NlcV8xMDAwMDAudHh0Jmx0O2JyJmd0OyZsdDthIGhyZWY9Imh0dHA6Ly9tYXN0cmF2ZS5vcmcvZG9jL3JlZmRhdGEvZnM5NDU5My8xMDAwMDAwLnR4dCImZ3Q7aHR0cDovL21hc3RyYXZlLm9yZy9kb2MvcmVmZGF0YS9mczk0NTkzLzEwMDAwMDAudHh0Jmx0Oy9hJmd0OyBwc2V1ZG9yYW5kX3NlcV8xMDAwMDAwLnR4dCZsdDticiZndDsmbHQ7L3AmZ3Q7CiZsdDtwJmd0OyZsdDticiZndDsmbHQ7YSBocmVmPSJodHRwOi8vbWFzdHJhdmUub3JnL2RvYy9yZWZkYXRhL2ZzOTQ1OTMvMTAubWF0IiZndDtodHRwOi8vbWFzdHJhdmUub3JnL2RvYy9yZWZkYXRhL2ZzOTQ1OTMvMTAubWF0Jmx0Oy9hJmd0O8KgwqDCoMKgwqAgcHNldWRvcmFuZF9zZXFfMTAubWF0Jmx0O2JyJmd0OyZsdDthIGhyZWY9Imh0dHA6Ly9tYXN0cmF2ZS5vcmcvZG9jL3JlZmRhdGEvZnM5NDU5My8xMDAubWF0IiZndDtodHRwOi8vbWFzdHJhdmUub3JnL2RvYy9yZWZkYXRhL2ZzOTQ1OTMvMTAwLm1hdCZsdDsvYSZndDvCoMKgwqDCoCBwc2V1ZG9yYW5kX3NlcV8xMDAubWF0Jmx0O2JyJmd0OyZsdDthIGhyZWY9Imh0dHA6Ly9tYXN0cmF2ZS5vcmcvZG9jL3JlZmRhdGEvZnM5NDU5My8xMDAwLm1hdCImZ3Q7aHR0cDovL21hc3RyYXZlLm9yZy9kb2MvcmVmZGF0YS9mczk0NTkzLzEwMDAubWF0Jmx0Oy9hJmd0O8KgwqDCoCBwc2V1ZG9yYW5kX3NlcV8xMDAwLm1hdCZsdDticiZndDsmbHQ7YSBocmVmPSJodHRwOi8vbWFzdHJhdmUub3JnL2RvYy9yZWZkYXRhL2ZzOTQ1OTMvMTAwMDAubWF0IiZndDtodHRwOi8vbWFzdHJhdmUub3JnL2RvYy9yZWZkYXRhL2ZzOTQ1OTMvMTAwMDAubWF0Jmx0Oy9hJmd0O8KgwqAgcHNldWRvcmFuZF9zZXFfMTAwMDAubWF0Jmx0O2JyJmd0OyZsdDthIGhyZWY9Imh0dHA6Ly9tYXN0cmF2ZS5vcmcvZG9jL3JlZmRhdGEvZnM5NDU5My8xMDAwMDAubWF0IiZndDtodHRwOi8vbWFzdHJhdmUub3JnL2RvYy9yZWZkYXRhL2ZzOTQ1OTMvMTAwMDAwLm1hdCZsdDsvYSZndDvCoCBwc2V1ZG9yYW5kX3NlcV8xMDAwMDAubWF0Jmx0O2JyJmd0OyZsdDthIGhyZWY9Imh0dHA6Ly9tYXN0cmF2ZS5vcmcvZG9jL3JlZmRhdGEvZnM5NDU5My8xMDAwMDAwLm1hdCImZ3Q7aHR0cDovL21hc3RyYXZlLm9yZy9kb2MvcmVmZGF0YS9mczk0NTkzLzEwMDAwMDAubWF0Jmx0Oy9hJmd0OyBwc2V1ZG9yYW5kX3NlcV8xMDAwMDAwLm1hdCZsdDticiZndDsmbHQ7L3AmZ3Q7CiZsdDtwJmd0OyZsdDticiZndDvCoCZsdDsvcCZndDsKJmx0O3AmZ3Q7Jmx0O3N0cm9uZyZndDtNRDUgY2hlY2tzdW1zJmx0Oy9zdHJvbmcmZ3Q7ICggJmx0O2EgaHJlZj0iaHR0cDovL21hc3RyYXZlLm9yZy9kb2MvcmVmZGF0YS9mczk0NTkzL21kNSImZ3Q7aHR0cDovL21hc3RyYXZlLm9yZy9kb2MvcmVmZGF0YS9mczk0NTkzL21kNSZsdDsvYSZndDsgKTombHQ7L3AmZ3Q7CiZsdDtwJmd0O2QyNWZkMjc0N2VlYTNjMWFiMGFhODFlZjY0YWE3NzY5IMKgIMKgwqAgwqAgcHNldWRvcmFuZF9zZXFfMTAudHh0Jmx0O2JyJmd0O2EyNjcxMWRmYzJmYWZhN2ZhYzNkYzBkMWNjNjQ3MmNkwqAgwqAgwqAgwqAgcHNldWRvcmFuZF9zZXFfMTAwLnR4dCZsdDticiZndDtlYjU0YjQxZThkZDdjOTQ2YTk3OTkzNDJjMjdmNGM5MCDCoCDCoCDCoMKgIHBzZXVkb3JhbmRfc2VxXzEwMDAudHh0Jmx0O2JyJmd0O2JkZjZiNGFmZDIzN2NjZjBmZTRhOTdiZjVjODQ3ZjFkwqAgwqAgwqAgwqAgcHNldWRvcmFuZF9zZXFfMTAwMDAudHh0Jmx0O2JyJmd0OzIwYjgzOTg3NzVhOTNlNTk1MzNlOWYxNGJhNDAyY2FhwqAgwqAgwqAgwqAgcHNldWRvcmFuZF9zZXFfMTAwMDAwLnR4dCZsdDticiZndDswMGIxZDYxNWJlMTQzZDVkZDA5M2JhNmJkMDY2YTgzMyDCoCDCoCDCoMKgIHBzZXVkb3JhbmRfc2VxXzEwMDAwMDAudHh0ICZsdDsvcCZndDsKJmx0O3AmZ3Q7wqAmbHQ7L3AmZ3Q7CiZsdDtwJmd0OyZsdDtzdHJvbmcmZ3Q7U0hBMSBjaGVja3N1bXMmbHQ7L3N0cm9uZyZndDsgKCAmbHQ7YSBocmVmPSJodHRwOi8vbWFzdHJhdmUub3JnL2RvYy9yZWZkYXRhL2ZzOTQ1OTMvc2hhMSImZ3Q7aHR0cDovL21hc3RyYXZlLm9yZy9kb2MvcmVmZGF0YS9mczk0NTkzL3NoYTEmbHQ7L2EmZ3Q7ICk6Jmx0Oy9wJmd0OwombHQ7cCZndDs4MzdlMGYyNzkzZDFiMDc2N2Y2ZWIwMzg2OGE3ZTA4MWVhNTMwMDczwqDCoMKgIHBzZXVkb3JhbmRfc2VxXzEwLnR4dCZsdDticiZndDsyYmI1OWU3Y2M1MzY5ZWI4OTZkZjg2MDYxZTcyMGJhYWE0ZGExZDk2wqDCoMKgIHBzZXVkb3JhbmRfc2VxXzEwMC50eHQmbHQ7YnImZ3Q7NzlhZTU5M2RhMGIwNTJiZjExNzEzMTU1Y2Q2ZTRmN2QzOTA2YmFmZsKgwqDCoCBwc2V1ZG9yYW5kX3NlcV8xMDAwLnR4dCZsdDticiZndDtlMjNiZDJlMTU3ZjU0NDcwOTZmMzZlNzA0YTg0YWE3NzIyNGFiOWFlwqDCoMKgIHBzZXVkb3JhbmRfc2VxXzEwMDAwLnR4dCZsdDticiZndDszYjRhMDg4NzUyY2ViZWU0MTU4YThjZWJmZGQ4ODE5M2M0YTAzODcywqDCoMKgIHBzZXVkb3JhbmRfc2VxXzEwMDAwMC50eHQmbHQ7YnImZ3Q7YWE5ZmIwOWQ1OWM5YjMzMWZiYmEyMzYwYzM0NWU0N2VkZTAzMmIwZcKgwqDCoMKgIHBzZXVkb3JhbmRfc2VxXzEwMDAwMDAudHh0Jmx0Oy9wJmd0OwombHQ7cCZndDsmbHQ7YnImZ3Q7Jmx0O2JyJmd0O1RoZSBNYXN0cmF2ZSBtb2RlbGxpbmcgbGlicmFyeSBvZmZlcnMgdGhlIG1vZHVsZSZsdDtzdHJvbmcmZ3Q7IHJwcmFuZCZsdDsvc3Ryb25nJmd0OyAoYWNyb255bSBmb3LCoCAmbHQ7ZW0mZ3Q7Jmx0O3N0cm9uZyZndDtyJmx0Oy9zdHJvbmcmZ3Q7ZXByb2R1Y2libGUgJmx0O3N0cm9uZyZndDtwJmx0Oy9zdHJvbmcmZ3Q7c2V1ZG8tJmx0O3N0cm9uZyZndDtyYW5kJmx0Oy9zdHJvbmcmZ3Q7b20gZ2VuZXJhdG9yJmx0Oy9lbSZndDspIHdoaWNoIGFsbG93cyBhbGwgdGhlIFBSTiByZWZlcmVuY2Ugc2VxdWVuY2VzIHRvIGJlIGV4YWN0bHkgcmVwcm9kdWNlZCBpbiBhIHZhcmlldHkgb2YgdmVyc2lvbnMgb2YgR05VIE9jdGF2ZSBhbmQgTUFUTEFCIGNvbXB1dGluZyBlbnZpcm9ubWVudHMsIGJ5IHNpbGVudGx5IGRvd25sb2FkaW5nIGFuZCBpbXBvcnRpbmcgdGhlIGNvcnJlc3BvbmRpbmcgcHVibGlzaGVkIHJlZmVyZW5jZSBmaWxlcy4gJmx0O2JyJmd0OyZsdDticiZndDtUaGUgUFJOIHNlcXVlbmNlcyBjYW4gYWxzbyBiZSBlYXNpbHkgaW1wb3J0ZWQgYW5kIHVzZWQgaW4gYSB2YXJpZXR5IG9mIGxhbmd1YWdlcywgb3BlcmF0aW5nIHN5c3RlbXMgYW5kIGNvbXB1dGVyIGFyY2hpdGVjdHVyZXMgKHNlZSBBcHBlbmRpeCBCIGZvciBhIGZ1cnRoZXIgZGlzY3Vzc2lvbikuIFRoaXMgaXMgc3RyYWlnaHRmb3J3YXJkIHRvIGRvIGJ5IGRpcmVjdGx5IGltcG9ydGluZyB0aGUgcGxhaW4gdGV4dCBmaWxlcyBsaXN0aW5nIHRoZSBQUk4gcmVmZXJlbmNlIHNlcXVlbmNlcyBpbiAmbHQ7ZW0mZ3Q7Y3N2Jmx0Oy9lbSZndDsgZm9ybWF0LiZsdDticiZndDsmbHQ7YnImZ3Q7VGhlcmVmb3JlLCB1c2VycyBhbmQgYXBwbGljYXRpb25zIG9mIHRoZSBwdWJsaXNoZWQgUFJOIHJlZmVyZW5jZSBzZXF1ZW5jZXMgbWF5IG5vdCBiZSBkaXJlY3RseSBpbnRlcmVzdGVkIGluIHRoZWlyIGV4YWN0IG51bWVyaWNhbCByZXByb2R1Y2liaWxpdHkuIFRoZSBleGFjdCBudW1lcmljYWwgcmVwcm9kdWNpYmlsaXR5IGJ5IHJlLWdlbmVyYXRpb24gb2YgdGhlIFBSTiBzZXF1ZW5jZXMgKCZsdDtlbSZndDtkZWVwIHJlcHJvZHVjaWJsZSByZXNlYXJjaCZsdDsvZW0mZ3Q7KSBpcyB0aGUgc3ViamVjdCBvZiB0aGUgQXBwZW5kaXggQS4mbHQ7YnImZ3Q7Jmx0Oy9wJmd0OwombHQ7cCZndDsmbHQ7YnImZ3Q7Jmx0O2JyJmd0OyZsdDtzdHJvbmcmZ3Q7QXBwZW5kaXggQTogcmVwcm9kdWNpbmcgdGhlIFBSTiByZWZlcmVuY2Ugc2VxdWVuY2VzIHdpdGhpbiBHTlUgT2N0YXZlJmx0Oy9zdHJvbmcmZ3Q7ICZsdDticiZndDsmbHQ7YnImZ3Q7Jmx0O2JyJmd0O1RoZSBwcm9wb3NlZCBzZXF1ZW5jZXMgY2FuIGJlIG51bWVyaWNhbGx5IHJlcHJvZHVjZWQgd2l0aGluIHRoZSBHTlUgT2N0YXZlIGNvbXB1dGluZyBlbnZpcm9ubWVudC4gVGhlIEdOVSBPY3RhdmUgdmVyc2lvbiB3aXRoIHdoaWNoIHRoZSBzZXF1ZW5jZXMgaGF2ZSBiZWVuIGdlbmVyYXRlZCBpcyB0aGUgdmVyc2lvbiAzLjYuMS4gJmx0O2JyJmd0O0FsdGVybmF0aXZlIHN0cmF0ZWdpZXMgZm9yIGdlbmVyYXRpbmcgcmVmZXJlbmNlIFBSTiBzZXF1ZW5jZXMgY291bGQgaGF2ZSBpbXBsaWVkIGRlZGljYXRlZCBzb3VyY2UgY29kZSB0byBiZSByZWxlYXNlZCBhcyBhbiBhdXRvbm9tb3VzIGZyZWUgc29mdHdhcmUgcGFja2FnZS4mbHQ7YnImZ3Q7Jmx0O2JyJmd0O1RoaXMgcG9zc2libGUgc3RyYXRlZ3kgd2FzIGRpc2NhcmRlZCBkdWUgdG8gdGhlIG5lZWQgZm9yIHRoZSBQUk4gc2VxdWVuY2VzIHRvIGJlIGFzIHJlbGlhYmxlIGFzIHBvc3NpYmxlIHNvIHRvIG9mZmVyIGxvbmctdGVybSBnZW5lcmFsIHJldXNhYmlsaXR5LiBFeHRlbnNpdmUgdGVzdGluZyBvZiBib3RoIFBSTiBnZW5lcmF0b3JzJyBhbGdvcml0aG1zIGFuZCBpbXBsZW1lbnRhdGlvbnMgaXMgb2Ygb2J2aW91cyBpbXBvcnRhbmNlLiBXaGlsZSBzeXN0ZW1hdGljLCBleGhhdXN0aXZlIHRlc3Rpbmcgb2YgYWxsIGFzcGVjdHMgb2Ygbm9udHJpdmlhbCBjb2RlIGlzIGFsbW9zdCBpbXBvc3NpYmxlLCBsaW5raW5nIHRoaXMgcGhhc2UgdG8gYWxyZWFkeSBlc3RhYmxpc2hlZCBmcmVlIHNvZnR3YXJlIG51bWVyaWNhbCBwYWNrYWdlcyB3aXRoIGJyb2FkIGRpZmZ1c2lvbiBhbmQgZW5kb3JzZW1lbnQgYW1vbmcgY29tcHV0YXRpb25hbCBzY2llbnRpc3RzIGlzIHBlcmhhcHMgdGhlIHNhZmVzdCB3YXkgZm9yIG1pdGlnYXRpbmcgdGhlIHJpc2sgb2YgZ2VuZXJhdGluZyB1bmV4cGVjdGVkbHkgYmlhc2VkIFBSTiBzZXF1ZW5jZXMuJmx0O2JyJmd0OyZsdDticiZndDtHTlUgT2N0YXZlIGlzIGEgd2VsbC1lc3RhYmxpc2hlZCBhbmQgd2lkZWx5IHVzZWQgZW52aXJvbm1lbnQgZm9yIGNvbXB1dGF0aW9uYWwgc2NpZW5jZSBhcHBsaWNhdGlvbnMuIEl0IGlzIGFsc28gZnJlZSBzb2Z0d2FyZSBhbmQgcGFydCBvZiB0aGUgR05VIHByb2plY3QsIHdoaWNoIGlzIG9uZSBvZiB0aGUgbW9zdCByZWxldmFudCBmcmVlIHNvZnR3YXJlIHByb2plY3RzLiBHTlUgT2N0YXZlIGJlbG9uZ3MgdG8gdGhlIEdOVSBsaXN0IG9mIGhpZ2ggcHJpb3JpdHkgcHJvamVjdHMsIHdoZXJlIGl0cyBkZXZlbG9wbWVudCBpcyBzdXBwb3J0ZWQgYXMgaGlnaC1sZXZlbCBsYW5ndWFnZSBmb3IgbnVtZXJpY2FsIGNvbXB1dGF0aW9ucy4gVGhpcyBmdXJ0aGVyIGNvcnJvYm9yYXRlcyB0aGUgc2VsZWN0aW9uIG9mIEdOVSBPY3RhdmUgYXMgYSBzdWl0YWJsZSBmcmVlIHNvZnR3YXJlIGVudmlyb25tZW50IGZvciBlbnN1cmluZyB0aGUgbG9uZy10ZXJtIGF2YWlsYWJpbGl0eSB0byBydW4gdGhlIFBSTiBzZXF1ZW5jZXMnIHNvdXJjZSBjb2RlLiZsdDticiZndDsmbHQ7YnImZ3Q7VGhlIGZvbGxvd2luZyBjb2RlbGV0IGdlbmVyYXRlcyB0aGUgZG91YmxlIHByZWNpc2lvbiBmbG9hdGluZy1wb2ludCBQUk4gcmVmZXJlbmNlIHNlcXVlbmNlcyAoR05VIE9jdGF2ZSBsYW5ndWFnZSk6Jmx0O2JyJmd0OyZsdDticiZndDvCoMKgIGFzc2VydCggZXhpc3QowqAgJ09DVEFWRV9WRVJTSU9OJ8KgwqDCoMKgwqDCoMKgwqAgKSApJmx0O2JyJmd0O8KgwqAgYXNzZXJ0KCBpc2VxdWFsKCBPQ1RBVkVfVkVSU0lPTiwgJzMuNi4xJyApICkmbHQ7YnImZ3Q7wqDCoCAmbHQ7YnImZ3Q7wqDCoCAmbHQ7ZW0mZ3Q7JSBJbml0aWFsaXphdGluZyB0aGUgTWVyc2VubmUgVHdpc3RlciBQUk4gZ2VuZXJhdG9yJmx0Oy9lbSZndDsmbHQ7YnImZ3Q7wqDCoCByYW5kKCAnc2VlZCcsIHBpICkmbHQ7YnImZ3Q7wqDCoCByYW5kKCAxMDAwLCAxMDAwICk7Jmx0O2JyJmd0O8KgwqAgJmx0O2JyJmd0O8KgwqAgJmx0O2VtJmd0OyUgR2VuZXJhdGluZyB0aGUgcmVmZXJlbmNlIHNlcXVlbmNlcyZsdDsvZW0mZ3Q7Jmx0O2JyJmd0O8KgwqAgcHNldWRvcmFuZF9zZXFfMTDCoMKgwqDCoMKgID0gcmFuZCggMTAgLCAxICk7Jmx0O2JyJmd0O8KgwqAgcHNldWRvcmFuZF9zZXFfMTAwwqDCoMKgwqAgPSByYW5kKCAxZTIsIDEgKTsmbHQ7YnImZ3Q7wqDCoCBwc2V1ZG9yYW5kX3NlcV8xMDAwwqDCoMKgID0gcmFuZCggMWUzLCAxICk7Jmx0O2JyJmd0O8KgwqAgcHNldWRvcmFuZF9zZXFfMTAwMDDCoMKgID0gcmFuZCggMWU0LCAxICk7Jmx0O2JyJmd0O8KgwqAgcHNldWRvcmFuZF9zZXFfMTAwMDAwwqAgPSByYW5kKCAxZTUsIDEgKTsmbHQ7YnImZ3Q7wqDCoCBwc2V1ZG9yYW5kX3NlcV8xMDAwMDAwID0gcmFuZCggMWU2LCAxICk7Jmx0O2JyJmd0OyZsdDticiZndDsmbHQ7YnImZ3Q7Q29tcGxpYW5jeSBjaGVja3MgKEdOVSBPY3RhdmUgbGFuZ3VhZ2U6IHRoZSBNYXN0cmF2ZSBtb2RlbGxpbmcgbGlicmFyeSBpcyBhbHNvIHJlcXVpcmVkKTombHQ7YnImZ3Q7wqDCoCAmbHQ7YnImZ3Q7wqDCoCBhc3NlcnQoIHJwcmFuZCggMTAgLCAxMCAsIDAgKSA9PSBwc2V1ZG9yYW5kX3NlcV8xMMKgwqDCoMKgwqAgKSZsdDticiZndDvCoMKgIGFzc2VydCggcnByYW5kKCAxZTIsIDFlMiwgMCApID09IHBzZXVkb3JhbmRfc2VxXzEwMMKgwqDCoMKgICkmbHQ7YnImZ3Q7wqDCoCBhc3NlcnQoIHJwcmFuZCggMWUzLCAxZTMsIDAgKSA9PSBwc2V1ZG9yYW5kX3NlcV8xMDAwwqDCoMKgICkmbHQ7YnImZ3Q7wqDCoCBhc3NlcnQoIHJwcmFuZCggMWU0LCAxZTQsIDAgKSA9PSBwc2V1ZG9yYW5kX3NlcV8xMDAwMMKgwqAgKSZsdDticiZndDvCoMKgIGFzc2VydCggcnByYW5kKCAxZTUsIDFlNSwgMCApID09IHBzZXVkb3JhbmRfc2VxXzEwMDAwMMKgICkmbHQ7YnImZ3Q7wqDCoCBhc3NlcnQoIHJwcmFuZCggMWU2LCAxZTYsIDAgKSA9PSBwc2V1ZG9yYW5kX3NlcV8xMDAwMDAwICkmbHQ7YnImZ3Q7Jmx0O2JyJmd0OyZsdDticiZndDsmbHQ7YnImZ3Q7Jmx0O3N0cm9uZyZndDtBcHBlbmRpeCBCOiBsb3ctbGV2ZWwgbWVtb3J5IHJlcHJlc2VudGF0aW9uIG9mIHRoZSBQUk4gc2VlZCZsdDsvc3Ryb25nJmd0O8KgICZsdDticiZndDsmbHQ7YnImZ3Q7Jmx0Oy9wJmd0OwombHQ7cCZndDtUaGUgc2VlZCBvZiB0aGUgUFJOIGdlbmVyYXRvciBpcyB0aGUgSUVFRSZsdDtzdHJvbmcmZ3Q7Jmx0Oy9zdHJvbmcmZ3Q7NzU0IGRvdWJsZSBwcmVjaXNpb24gZmxvYXRpbmctcG9pbnQgdmFsdWUgYXBwcm94aW1hdGluZyB0aGUgbWF0aGVtYXRpY2FsIGNvbnN0YW50ICZsdDtzdHJvbmcmZ3Q7z4AmbHQ7L3N0cm9uZyZndDsuJmx0Oy9wJmd0OwombHQ7cCZndDtUaGUgZm9sbG93aW5nIGNvZGVsZXRzIGFyZSBleHByZXNzZWQgaW4gR05VIE9jdGF2ZSBsYW5ndWFnZSAodGhlIGFzc2VydGlvbnMgY2hlY2sgbmVjZXNzYXJ5IGJ1dCBub3Qgc3VmZmljaWVudCBjb25kaXRpb25zKTombHQ7L3AmZ3Q7CiZsdDtwJmd0OyZsdDticiZndDvCoMKgIGFzc2VydCggcGkgPT0gMy4xNDE1OTI2NTM1ODk3OTMyICkmbHQ7YnImZ3Q7Jmx0O2JyJmd0O8KgwqAgJmx0O3N0cm9uZyZndDtwaV9ieXRlY29kZSZsdDsvc3Ryb25nJmd0OyA9wqDCoMKgwqDCoMKgwqDCoMKgIGRvdWJsZSggdHlwZWNhc3QoIHBpLCAndWludDgnICkgKcKgIDsmbHQ7YnImZ3Q7wqDCoCAmbHQ7c3Ryb25nJmd0O3BpX2hleGNvZGUmbHQ7ZW0mZ3Q7wqAmbHQ7L2VtJmd0OyZsdDsvc3Ryb25nJmd0OyA9IGRlYzJoZXgoIGRvdWJsZSggdHlwZWNhc3QoIHBpLCAndWludDgnICkgKSApOyZsdDticiZndDsmbHQ7YnImZ3Q7Jmx0O2JyJmd0O3doZXJlICZsdDtzdHJvbmcmZ3Q7cGlfYnl0ZWNvZCZsdDsvc3Ryb25nJmd0OyZsdDtzdHJvbmcmZ3Q7ZSZsdDsvc3Ryb25nJmd0OyB2YWx1ZSBpcyAodW5zaWduZWQgaW50ZWdlcnMpOiZsdDticiZndDsmbHQ7YnImZ3Q7wqDCoMKgIDI0Jmx0O2JyJmd0O8KgwqDCoCA0NSZsdDticiZndDvCoMKgwqAgNjgmbHQ7YnImZ3Q7wqDCoMKgIDg0Jmx0O2JyJmd0O8KgwqAgMjUxJmx0O2JyJmd0O8KgwqDCoCAzMyZsdDticiZndDvCoMKgwqDCoCA5Jmx0O2JyJmd0O8KgwqDCoCA2NCZsdDticiZndDsmbHQ7YnImZ3Q7Jmx0O2JyJmd0O2FuZCAmbHQ7c3Ryb25nJmd0O3BpX2hleGNvZGUmbHQ7L3N0cm9uZyZndDsgdmFsdWUgaXMgKGhleGFkZWNpbWFsIHZhbHVlcyk6Jmx0O2JyJmd0OyZsdDticiZndDvCoMKgwqAgMTgmbHQ7YnImZ3Q7wqDCoMKgIDJEJmx0O2JyJmd0O8KgwqDCoCA0NCZsdDticiZndDvCoMKgwqAgNTQmbHQ7YnImZ3Q7wqDCoMKgIEZCJmx0O2JyJmd0O8KgwqDCoCAyMSZsdDticiZndDvCoMKgwqAgMDkmbHQ7YnImZ3Q7wqDCoMKgIDQwJmx0O2JyJmd0OyZsdDticiZndDsmbHQ7YnImZ3Q7d2hpY2ggY2FuIGJlIHJldmVydGVkIHRvIHRoZSBvcmlnaW5hbCBkb3VibGUgZm9ybWF0IGJ5IG1lYW5zIG9mIHRoZSBjb2RlbGV0OiZsdDticiZndDsmbHQ7YnImZ3Q7wqDCoCB0eXBlY2FzdCggdWludDgoIGhleDJkZWMoIHBpX2hleGNvZGUgKSApLCAnZG91YmxlJyApJmx0O2JyJmd0OyZsdDticiZndDtzbyB0byBzYXRpc2Z5IHRoZSBjb25zdHJhaW50OiZsdDticiZndDsmbHQ7YnImZ3Q7wqDCoCBhc3NlcnQoIHR5cGVjYXN0KCB1aW50OCggaGV4MmRlYyggcGlfaGV4Y29kZSApICksICdkb3VibGUnICkgPT0gcGkgKSZsdDticiZndDvCoMKgICZsdDticiZndDsmbHQ7YnImZ3Q7VGhlIGRlc2NyaWJlZCBieXRlLSBhbmQgaGV4YWRlY2ltYWwtY29kZSB0cmFuc2Zvcm1hdGlvbnMgY2FuIGFsc28gYmUgaW1wbGVtZW50ZWQgYnkgbWVhbnMgb2Ygc3RhbmRhcmQgSU8gbG93LWxldmVsIGZ1bmN0aW9ucy4gSW4gR05VIE9jdGF2ZS9NQVRMQUIgbGFuZ3VhZ2VzIHRoZSBjb3JyZXNwb25kaW5nIElPIGxvdy1sZXZlbCBjb2RlbGV0IHdvdWxkIGJlOiZsdDticiZndDsmbHQ7YnImZ3Q7wqDCoCB0bXDCoMKgwqDCoMKgwqDCoMKgID0gdGVtcG5hbWU7Jmx0O2JyJmd0O8KgwqAgZmlkwqDCoMKgwqDCoMKgwqDCoCA9IGZvcGVuKCB0bXAgLCAnd2InwqDCoMKgICk7ICZsdDticiZndDvCoMKgIGZ3cml0ZSggZmlkLCBwaSwgJ2RvdWJsZScsIDDCoMKgwqDCoMKgwqAgLCAnaWVlZS1sZScgKTsgJmx0O2JyJmd0O8KgwqAgZmNsb3NlKCBmaWQgKTsmbHQ7YnImZ3Q7wqDCoCBmaWTCoMKgwqDCoMKgwqDCoMKgID0gZm9wZW4oIHRtcCAsICdyYifCoMKgwqAgKTsmbHQ7YnImZ3Q7wqDCoCBwaV9ieXRlY29kZSA9IGZyZWFkKCBmaWQgLCAndWludDgnICk7Jmx0O2JyJmd0O8KgwqAgZmNsb3NlKCBmaWQgKTsmbHQ7YnImZ3Q7wqDCoCBkZWxldGUoIHRtcCApOyZsdDticiZndDsmbHQ7YnImZ3Q7VGhpcyBjb2RlbGV0IGV4cGxpY2l0bHkgc2V0IGFzIGVuZGlhbm5lc3MgdGhlIGxpdHRsZS1lbmRpYW4gY29udmVudGlvbi4gUHJvdmlkZWQgYXR0ZW50aW9uIGlzIHBhaWQgdG8gZW5kaWFubmVzcywgdGhlIGNvZGVsZXQgaXMgc3RyYWlnaHRmb3J3YXJkIHRvIGJlIHRyYW5zbGF0ZWQgaW4gb3RoZXIgbGFuZ3VhZ2VzIChDLCBDKyssIC4uLikgZm9yIHdoaWNoIGF0IGxlYXN0IHRoZSBzY2FsYXIgdmVyc2lvbiBvZiB0aGUgc3RhbmRhcmQgZnVuY3Rpb25zIGZvcGVuLCBmd3JpdGUsIGZyZWFkLCBmY2xvc2UgaXMgYXZhaWxhYmxlLiBUaGlzIHdheSwgdGhlIGV4YWN0IGJpbmFyeSBlcXVpdmFsZW5jZSBvZiB0aGUgZmxvYXRpbmcgcG9pbnQgc2VlZCAocGkpIHdpdGhpbiBhIGdpdmVuIGNvbXB1dGF0aW9uYWwgZW52aXJvbm1lbnQgY2FuIGJlIGNoZWNrZWQgaXJyZXNwZWN0aXZlIG9mIHRoZSBsYW5ndWFnZSwgb3BlcmF0aW5nIHN5c3RlbSBhbmQgY29tcHV0ZXIgYXJjaGl0ZWN0dXJlIG9mIGNob2ljZS4mbHQ7YnImZ3Q7Jmx0O2JyJmd0O0Egc3VjY2Vzc2Z1bCBjb21wbGlhbmN5IGNoZWNrIG9mIHRoZSBzZWVkJ3MgbG93LWxldmVsIHJlcHJlc2VudGF0aW9uIHNob3VsZCBiZSByZWNvbW1lbmRlZCBhcyBhIG5lY2Vzc2FyeSAoYnV0IG5vdCBzdWZmaWNpZW50KSBjb25kaXRpb24gYmVjYXVzZSB0aGUgcHNldWRvLXJhbmRvbSByZWZlcmVuY2Ugc2VxdWVuY2VzIGFyZSBvZiBkb3VibGUtcHJlY2lzaW9uIGZsb2F0aW5nIHBvaW50IHZhbHVlcyBhbmQgZGlzY3JlcGFuY2llcyAoZXNwZWNpYWxseSBsb3NzIG9mIHByZWNpc2lvbikgaW4gdGhlIHdheSB2YWx1ZXMgYXJlIGxvYWRlZCBpbiB0aGUgbWVtb3J5IG1heSBsZWFkIHRvIGlycmVwcm9kdWNpYmxlIHJlc3VsdHMgKGUuZy4gd2hlbiBkZWFsaW5nIHdpdGggUFJOLWluZmx1ZW5jZWQgY2hhb3RpYyBzeXN0ZW1zKS4mbHQ7YnImZ3Q7Jmx0O2JyJmd0OyZsdDticiZndDsmbHQ7L3AmZ3Q7PC9kZXNjcmlwdGlvbj4KICA8L2Rlc2NyaXB0aW9ucz4KICA8c3ViamVjdHM+CiAgICA8c3ViamVjdD5TdGF0aXN0aWNzPC9zdWJqZWN0PgogICAgPHN1YmplY3Qgc2NoZW1lVVJJPSJodHRwOi8vd3d3LmFicy5nb3YuYXUvYXVzc3RhdHMvYWJzQC5uc2YvMC82QkI0MjdBQjk2OTZDMjI1Q0EyNTc0MTgwMDA0NDYzRSIgc3ViamVjdFNjaGVtZT0iRk9SIj44MDMwOSBTb2Z0d2FyZSBFbmdpbmVlcmluZzwvc3ViamVjdD4KICAgIDxzdWJqZWN0PkFwcGxpZWQgQ29tcHV0ZXIgU2NpZW5jZTwvc3ViamVjdD4KICA8L3N1YmplY3RzPgogIDxwdWJsaXNoZXI+Zmlnc2hhcmU8L3B1Ymxpc2hlcj4KICA8cHVibGljYXRpb25ZZWFyPjIwMTI8L3B1YmxpY2F0aW9uWWVhcj4KICA8ZGF0ZXM+CiAgICA8ZGF0ZSBkYXRlVHlwZT0iQ3JlYXRlZCI+MjAxMi0wOC0yNDwvZGF0ZT4KICAgIDxkYXRlIGRhdGVUeXBlPSJVcGRhdGVkIj4yMDE1LTEyLTAyPC9kYXRlPgogIDwvZGF0ZXM+CiAgPHJlc291cmNlVHlwZSByZXNvdXJjZVR5cGVHZW5lcmFsPSJEYXRhc2V0Ij5EYXRhc2V0PC9yZXNvdXJjZVR5cGU+CiAgPHNpemVzPgogICAgPHNpemU+MTA2MjI2NDU5OTkgQnl0ZXM8L3NpemU+CiAgPC9zaXplcz4KICA8cmlnaHRzTGlzdD4KICAgIDxyaWdodHMgcmlnaHRzVVJJPSJodHRwczovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnkvNC4wLyI+Q0MgQlkgNC4wPC9yaWdodHM+CiAgPC9yaWdodHNMaXN0Pgo8L3Jlc291cmNlPg==","url":"https://figshare.com/articles/dataset/Pseudo-random_reference_sequences_with_Mersenne_Twister_(2^19937-1)_using_GNU_Octave/94593","contentUrl":null,"metadataVersion":3,"schemaVersion":"http://datacite.org/schema/kernel-4","source":"mds","isActive":true,"state":"findable","reason":null,"viewCount":0,"viewsOverTime":[],"downloadCount":0,"downloadsOverTime":[],"referenceCount":0,"citationCount":0,"citationsOverTime":[],"partCount":0,"partOfCount":0,"versionCount":0,"versionOfCount":0,"created":"2012-08-24T16:16:39.000Z","registered":"2012-08-24T16:16:38.000Z","published":"2012","updated":"2020-09-05T03:27:37.000Z"},"relationships":{"client":{"data":{"id":"figshare.ars","type":"clients"}},"provider":{"data":{"id":"otjm","type":"providers"}},"media":{"data":{"id":"10.6084/m9.figshare.94593","type":"media"}},"references":{"data":[]},"citations":{"data":[]},"parts":{"data":[]},"partOf":{"data":[]},"versions":{"data":[]},"versionOf":{"data":[]}}}}